Merge remote-tracking branch 'origin/b_lms' into b_lms

This commit is contained in:
2024-06-21 11:40:28 +08:00
14 changed files with 473 additions and 74 deletions

View File

@@ -106,7 +106,7 @@
LEFT JOIN sch_base_point point2 ON point1.row_num = point2.row_num
WHERE
IFNULL( point2.vehicle_code, '' ) != ''
AND point2.out_order_seq > point1.out_order_seq
AND point1.out_order_seq > point2.out_order_seq
<if test="point_code != null and point_code != ''">
AND point1.point_code= #{point_code}
@@ -125,7 +125,7 @@
LEFT JOIN sch_base_point point2 ON point1.row_num = point2.row_num
WHERE
IFNULL( point2.vehicle_code, '' ) = ''
AND point2.out_order_seq > point1.out_order_seq
AND point1.out_order_seq > point2.out_order_seq
<if test="point_code != null and point_code != ''">
AND point1.point_code= #{point_code}

View File

@@ -99,7 +99,6 @@ public class TwoInEmpTask extends AbstractAcsTask {
JSONObject jsonAttr = attrTab.query("struct_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0);
jsonAttr.put("lock_type",IOSEnum.LOCK_TYPE.code("未锁定"));
jsonAttr.put("storagevehicle_code",jsonTask.getString("vehicle_code"));
jsonAttr.put("storagevehicle_type",jsonTask.getString("vehicle_type"));
jsonAttr.put("is_emptyvehicle",IOSEnum.IS_NOTANDYES.code(""));
attrTab.update(jsonAttr);

View File

@@ -23,6 +23,8 @@ import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.sch.AcsTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
@@ -85,13 +87,13 @@ public class TwoLashTask extends AbstractAcsTask {
}
JSONObject interaction_json = new JSONObject();
interaction_json.put("isLeave",json.getString("is_auto_issue"));
interaction_json.put("length",dao.get(0).getBox_length());
interaction_json.put("weight",dao.get(0).getBox_width());
interaction_json.put("height",dao.get(0).getBox_high());
interaction_json.put("template",dao.get(0).getLash_num());
interaction_json.put("isLeave", json.getString("is_auto_issue"));
interaction_json.put("length", dao.get(0).getBox_length());
interaction_json.put("weight", dao.get(0).getBox_width());
interaction_json.put("height", dao.get(0).getBox_high());
interaction_json.put("template", dao.get(0).getLash_num());
//第二次捆扎次数
interaction_json.put("bindingTimes","3");
interaction_json.put("bindingTimes", "3");
interaction_json.put("isBinding", IOSEnum.IS_SEND.code(""));
char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1);
AcsTaskDto dto = AcsTaskDto.builder()
@@ -121,6 +123,7 @@ public class TwoLashTask extends AbstractAcsTask {
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject taskObj, String status) {
JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("task_code = '"+taskObj.getString("task_code")+"'").uniqueResult(0);
// 点位表
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
// 木箱绑定表
@@ -140,19 +143,28 @@ public class TwoLashTask extends AbstractAcsTask {
// 完成
if (status.equals(TaskStatusEnum.FINISHED.getCode())) {
// 判断当前任务组的所有任务是否都为完成:如果都为完成则 调用acs接口允许此木箱离开
JSONObject groupTask = WQLObject.getWQLObject("sch_base_task").query("task_group_id = '" + taskObj.getString("task_group_id") + "' and is_delete = '0' and task_status <> 07 and task_id <> '"+taskObj.getString("task_id")+"'")
JSONObject groupTask = WQLObject.getWQLObject("sch_base_task").query("task_group_id = '" + task_jo.getString("task_group_id") + "' and is_delete = '0' and task_status <> 07 and task_id <> '" + taskObj.getString("task_id") + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(groupTask)) {
// 更新点位载具、数量
JSONObject pointDao = pointTab.query("point_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0);
pointDao.put("vehicle_code", "");
pointDao.put("vehicle_qty",0);
WQLObject.getWQLObject("sch_base_point").update(pointDao);
// TODO 调用acs接口告诉此木箱可以离开
//给捆扎点下发强制放行
WmsToAcsService wmsToAcsService = SpringContextHolder.getBean(WmsToAcsService.class);
JSONArray action_rows = new JSONArray();
JSONObject action_jo = new JSONObject();
action_jo.put("device_code", task_jo.getString("point_code2"));
action_jo.put("code", "to_command");
action_jo.put("product_area", "BLK");
action_jo.put("value", "26");
action_rows.add(action_jo);
wmsToAcsService.action(action_rows);
// 更新点位载具、数量
JSONObject pointDao = pointTab.query("point_code = '" + task_jo.getString("point_code2") + "'").uniqueResult(0);
pointDao.put("vehicle_code", "");
pointDao.put("vehicle_qty", 0);
WQLObject.getWQLObject("sch_base_point").update(pointDao);
}
@@ -170,26 +182,26 @@ public class TwoLashTask extends AbstractAcsTask {
map.put("is_delete", IOSEnum.IS_NOTANDYES.code(""));
// 减去终点点位载具数量
JSONObject pointDao = pointTab.query("point_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0);
JSONObject pointDao = pointTab.query("point_code = '" + task_jo.getString("point_code2") + "'").uniqueResult(0);
pointDao.put("vehicle_qty", NumberUtil.sub(pointDao.getIntValue("vehicle_qty"),1));
pointDao.put("vehicle_qty", NumberUtil.sub(pointDao.getIntValue("vehicle_qty"), 1));
if (pointDao.getIntValue("vehicle_qty") <= 0) {
// 清空载具号
pointDao.put("vehicle_code", "");
pointDao.put("vehicle_qty",0);
pointDao.put("vehicle_qty", 0);
}
pointTab.update(pointDao);
// 删除木箱绑定数据
boxTab.delete("box_no = '"+taskObj.getString("vehicle_code")+"'");
boxTab.delete("box_no = '" + task_jo.getString("vehicle_code") + "'");
}
map.put("update_optid", SecurityUtils.getCurrentUserId());
map.put("update_optname", SecurityUtils.getCurrentNickName());
map.put("update_time", DateUtil.now());
WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + taskObj.getString("task_id") + "'");
WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + task_jo.getString("task_id") + "'");
}
@Override

View File

@@ -17,6 +17,8 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import static org.nl.wms.util.TaskUtil.getRoutePlanCode;
/**
* 二期空木箱移库任务类
* Created by Lxy on 2024/1/19.
@@ -46,6 +48,7 @@ public class TwoMoveBoxTask extends AbstractAcsTask {
.task_type(json.getString("acs_task_type"))
.start_device_code(json.getString("point_code1"))
.next_device_code(json.getString("point_code2"))
.route_plan_code(getRoutePlanCode(json.getString("point_code2")))
.vehicle_code(json.getString("vehicle_code"))
.priority(json.getString("priority"))
.class_type(json.getString("task_type"))

View File

@@ -39,6 +39,8 @@ public class TwoSendOutTask extends AbstractAcsTask {
/*
* 下发给ACS时需要特殊处理
*/
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
@@ -60,6 +62,11 @@ public class TwoSendOutTask extends AbstractAcsTask {
.remark(json.getString("remark"))
.build();
resultList.add(dto);
// 更新任务为下发
JSONObject paramMap = new JSONObject();
paramMap.put("task_status", TaskStatusEnum.ISSUE.getCode());
taskTab.update(paramMap, "task_id ='" + json.getString("task_id") + "'");
}
return resultList;
}
@@ -79,7 +86,16 @@ public class TwoSendOutTask extends AbstractAcsTask {
jsonTask.put("update_time", DateUtil.now());
taskTab.update(jsonTask);
JSONObject jsonPoint2 = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0);
JSONObject jsonPoint2;
if (ObjectUtil.isNotEmpty(jsonTask.getString("point_code4"))) {
// 第一次申请取消
jsonPoint2 = pointTab.query("point_code = '" + jsonTask.getString("point_code4") + "'").uniqueResult(0);
} else {
// 第二次申请取消
jsonPoint2 = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0);
}
jsonPoint2.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"));
jsonPoint2.put("vehicle_code", "");
pointTab.update(jsonPoint2);
@@ -102,11 +118,13 @@ public class TwoSendOutTask extends AbstractAcsTask {
jsonTask.put("update_time", DateUtil.now());
taskTab.update(jsonTask);
// 更新暂存区点位状态
JSONObject jsonPoint2 = WQLObject.getWQLObject("sch_base_point").query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0);
jsonPoint2.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"));
jsonPoint2.put("vehicle_code", jsonTask.getString("vehicle_code"));
pointTab.update(jsonPoint2);
if (ObjectUtil.isEmpty(jsonTask.getString("point_code4"))) {
// 第二次申请任务完成 - 更新点位状态
JSONObject jsonPoint2 = WQLObject.getWQLObject("sch_base_point").query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0);
jsonPoint2.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"));
jsonPoint2.put("vehicle_code", jsonTask.getString("vehicle_code"));
pointTab.update(jsonPoint2);
}
}
}
@@ -126,10 +144,6 @@ public class TwoSendOutTask extends AbstractAcsTask {
WQLObject tab = WQLObject.getWQLObject("SCH_BASE_Task");
CutConveyorTask cutConveyorTask = new CutConveyorTask();
String point_code2 = form.getString("point_code2");
if (cutConveyorTask.isSingleTask(point_code2)) {
throw new BadRequestException("点位:" + point_code2 + "存在未完成的任务!");
}
JSONObject json = new JSONObject();
json.put("task_id", IdUtil.getSnowflake(1, 1).nextId());
json.put("task_code", IdUtil.getSnowflake(1, 1).nextId());
@@ -138,6 +152,7 @@ public class TwoSendOutTask extends AbstractAcsTask {
json.put("point_code1", form.getString("point_code1"));
json.put("route_plan_code", getRoutePlanCode(json.getString("point_code1")));
json.put("point_code2", form.getString("point_code2"));
json.put("point_code4", form.getString("point_code4"));
json.put("vehicle_code", form.getString("vehicle_code"));
json.put("handle_class", THIS_CLASS);
json.put("create_id", SecurityUtils.getCurrentUserId());

View File

@@ -103,6 +103,9 @@ public enum IOSEnum {
OUT_POINT(MapOf.of("1","CK2038", "2","CK2038", "3","CK2042", "4","CK2042" ,"5","CK2046",
"6","CK2046", "7","7", "8","8", "9","9", "10","10")),
// 出库发货等待点
OUT_FH_POINT(MapOf.of("1","B_FH_01_0", "2","B_FH_02_0", "3","B_FH_03_0", "4","B_FH_04_0" ,"5","B_FH_05_0",
"6","B_FH_06_0")),
// 行架点位
OUT_HANGER(MapOf.of("行架位1", "CK2013","行架位2", "CK2017")),

View File

@@ -538,6 +538,8 @@ public class OutBoxManageServiceImpl implements OutBoxManageService {
JSONObject paramIn = new JSONObject();
paramIn.put("stor_id", IOSEnum.STOR_ID.code("二期"));
paramIn.put("sect_id", RegionTypeEnum.TWO_BZC01.getId());
paramIn.put("vehicle_type", jsonObject.getString("storagevehicle_type"));
paramIn.put("height", jsonObject.getString("height"));
InBoxManageServiceImpl bean = SpringContextHolder.getBean(InBoxManageServiceImpl.class);
JSONObject jsonAttr = bean.getStruct(paramIn);

View File

@@ -61,7 +61,6 @@ public class SendOutManageServiceImpl implements SendOutManageService {
* 1有相同订单号有空位的相同订单号的放在一排
* 2没有相同订单号的新开一排
* 3有相同订单号的但是没有空位新开一排
* 2.删除载具对应木箱记录
*/
CutConveyorTask cutConveyorTask = new CutConveyorTask();
@@ -72,16 +71,14 @@ public class SendOutManageServiceImpl implements SendOutManageService {
.eq(SchBasePoint::getIs_used, IOSEnum.IS_NOTANDYES.code(""))
.eq(SchBasePoint::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
);
// 1.查询此木箱号的子卷包装关系
if(StringUtils.isEmpty(whereJson.getString("vehicle_code"))){
throw new BadRequestException("木箱号不能为空!");
}
//木箱号可能用逗号隔开
String vehicleCode = Arrays.asList(whereJson.getString("vehicle_code").split(",")).get(0);
JSONObject jsonSub = subTab.query("package_box_sn = '" + vehicleCode + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonSub)) {
throw new BadRequestException("未查询到该木箱对应的包装关系!");
}
// 2.找相同订单号的所有排
jsonSub.put("region_id", RegionTypeEnum.TWO_FH01.getId());
List<JSONObject> pointLikeOrder = schBasePointMapper.queryLikeOrderRow(jsonSub);
@@ -99,7 +96,7 @@ public class SendOutManageServiceImpl implements SendOutManageService {
ObjectUtil.isEmpty(row.getVehicle_code()) &&
row.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))
)
.sorted(Comparator.comparing(SchBasePoint::getOut_order_seq))
.sorted(Comparator.comparing(SchBasePoint::getIn_order_seq))
.collect(Collectors.toList());
joArr.addAll(rowPointList);
@@ -122,19 +119,17 @@ public class SendOutManageServiceImpl implements SendOutManageService {
ObjectUtil.isEmpty(row.getVehicle_code()) &&
row.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))
)
.sorted(Comparator.comparing(SchBasePoint::getOut_order_seq))
.sorted(Comparator.comparing(SchBasePoint::getIn_order_seq))
.collect(Collectors.toList());
if (rowPointList.size() == 4) {
JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(rowPointList.get(0)));
JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(rowPointList.get(0)));
if (cutConveyorTask.isSingleTask(jsonNewRow.getString("point_code"))) {
continue;
}
point_code = jsonNewRow.getString("point_code");
break;
if (cutConveyorTask.isSingleTask(jsonNewRow.getString("point_code"))) {
continue;
}
point_code = jsonNewRow.getString("point_code");
break;
}
} else {
// 校验此货位是否被堵住1.如果被堵住则判断下一个是否被堵住 2.如果全部被堵住则新开一排
@@ -178,19 +173,17 @@ public class SendOutManageServiceImpl implements SendOutManageService {
ObjectUtil.isEmpty(row.getVehicle_code()) &&
row.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))
)
.sorted(Comparator.comparing(SchBasePoint::getOut_order_seq))
.sorted(Comparator.comparing(SchBasePoint::getIn_order_seq))
.collect(Collectors.toList());
if (rowPointList.size() == 4) {
JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(rowPointList.get(0)));
JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(rowPointList.get(0)));
if (cutConveyorTask.isSingleTask(jsonNewRow.getString("point_code"))) {
continue;
}
point_code = jsonNewRow.getString("point_code");
break;
if (cutConveyorTask.isSingleTask(jsonNewRow.getString("point_code"))) {
continue;
}
point_code = jsonNewRow.getString("point_code");
break;
}
}
@@ -200,8 +193,8 @@ public class SendOutManageServiceImpl implements SendOutManageService {
//创建任务
JSONObject task_jo = new JSONObject();
task_jo.put("point_code1", whereJson.getString("device_code"));
task_jo.put("point_code2", "CK2023");
task_jo.put("vehicle_code", whereJson.getString("vehicle_code"));
task_jo.put("point_code2", point_code);
task_jo.put("vehicle_code", vehicleCode);
task_jo.put("task_type", "010708");
TwoSendOutTask taskBean = new TwoSendOutTask();
taskBean.createTask(task_jo);
@@ -209,12 +202,260 @@ public class SendOutManageServiceImpl implements SendOutManageService {
// 锁住点位
ischBasePointService.update(
new UpdateWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getPoint_code, "CK2023")
.eq(SchBasePoint::getPoint_code, point_code)
.set(SchBasePoint::getLock_type, IOSEnum.LOCK_TYPE.code("其它"))
.set(SchBasePoint::getVehicle_code, whereJson.getString("vehicle_code"))
.set(SchBasePoint::getVehicle_code, vehicleCode)
);
// 删除载具对应木箱记录
//extTab.delete(jsonExt);
}
@Override
public void createSendOutTaskOne(JSONObject whereJson) {
// 子卷包装关系表
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
// 载具扩展属性表
WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext");
/*
* 1.找相同订单号的木箱
* 1有相同订单号有空位的相同订单号的放在一排
* 2没有相同订单号的新开一排
* 3有相同订单号的但是没有空位新开一排
*/
CutConveyorTask cutConveyorTask = new CutConveyorTask();
// 所有发货区点位
List<SchBasePoint> pointDaoList = ischBasePointService.list(
new QueryWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getRegion_id, RegionTypeEnum.TWO_FH01.getId())
.eq(SchBasePoint::getIs_used, IOSEnum.IS_NOTANDYES.code(""))
.eq(SchBasePoint::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
);
//木箱号可能用逗号隔开
String vehicleCode = Arrays.asList(whereJson.getString("vehicle_code").split(",")).get(0);
JSONObject jsonSub = subTab.query("package_box_sn = '" + vehicleCode + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonSub)) {
throw new BadRequestException("未查询到该木箱对应的包装关系!");
}
// 2.找相同订单号的所有排
jsonSub.put("region_id", RegionTypeEnum.TWO_FH01.getId());
List<JSONObject> pointLikeOrder = schBasePointMapper.queryLikeOrderRow(jsonSub);
// 3.找相同订单号的所在排的所有空位
String point_code = "";
List<SchBasePoint> joArr = new ArrayList<>();
for (int i = 0; i < pointLikeOrder.size(); i++) {
JSONObject json = pointLikeOrder.get(i);
// 过滤此排的空位
List<SchBasePoint> rowPointList = pointDaoList.stream()
.filter(row -> row.getRow_num().toString().equals(json.getString("row_num")) &&
ObjectUtil.isEmpty(row.getVehicle_code()) &&
row.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))
)
.sorted(Comparator.comparing(SchBasePoint::getIn_order_seq))
.collect(Collectors.toList());
joArr.addAll(rowPointList);
}
if (ObjectUtil.isEmpty(joArr)) {
//查询新的一排
List<JSONObject> newRowPointList = schBasePointMapper.queryNewRow(jsonSub);
if (ObjectUtil.isEmpty(newRowPointList)) {
throw new BadRequestException("未查询到相同销售订单的放货区点位或空的一排!");
}
for (int i = 0; i < newRowPointList.size(); i++) {
JSONObject json = newRowPointList.get(i);
// 找出这一排的所有空位
List<SchBasePoint> rowPointList = pointDaoList.stream()
.filter(row -> row.getRow_num().toString().equals(json.getString("row_num")) &&
ObjectUtil.isEmpty(row.getVehicle_code()) &&
row.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))
)
.sorted(Comparator.comparing(SchBasePoint::getIn_order_seq))
.collect(Collectors.toList());
JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(rowPointList.get(0)));
if (cutConveyorTask.isSingleTask(jsonNewRow.getString("point_code"))) {
continue;
}
point_code = jsonNewRow.getString("point_code");
break;
}
} else {
// 校验此货位是否被堵住1.如果被堵住则判断下一个是否被堵住 2.如果全部被堵住则新开一排
for (int i = 0; i < joArr.size(); i++) {
JSONObject json = JSONObject.parseObject(JSON.toJSONString(joArr.get(i)));
// 判断是否被挡住
JSONObject paramJson = new JSONObject();
paramJson.put("point_code", json.getString("point_code"));
paramJson.put("region_id", RegionTypeEnum.TWO_FH01.getId());
List<JSONObject> isBlock = schBasePointMapper.isBlock(paramJson);
if (ObjectUtil.isNotEmpty(isBlock)) {
// 堵住则判断下一个
continue;
} else {
if (cutConveyorTask.isSingleTask(json.getString("point_code"))) {
continue;
}
// 未堵住: 跳出循环
point_code = json.getString("point_code");
break;
}
}
}
if (ObjectUtil.isEmpty(point_code)) {
//查询新的一排
List<JSONObject> newRowPointList = schBasePointMapper.queryNewRow(jsonSub);
if (ObjectUtil.isEmpty(newRowPointList)) {
throw new BadRequestException("未查询到相同销售订单的放货区点位或空的一排!");
}
for (int i = 0; i < newRowPointList.size(); i++) {
JSONObject json = newRowPointList.get(i);
// 找出这一排的所有空位
List<SchBasePoint> rowPointList = pointDaoList.stream()
.filter(row -> row.getRow_num().toString().equals(json.getString("row_num")) &&
ObjectUtil.isEmpty(row.getVehicle_code()) &&
row.getLock_type().equals(IOSEnum.LOCK_TYPE.code("未锁定"))
)
.sorted(Comparator.comparing(SchBasePoint::getIn_order_seq))
.collect(Collectors.toList());
JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(rowPointList.get(0)));
if (cutConveyorTask.isSingleTask(jsonNewRow.getString("point_code"))) {
continue;
}
point_code = jsonNewRow.getString("point_code");
break;
}
}
if (ObjectUtil.isEmpty(point_code)) {
throw new BadRequestException("未查询到相同销售订单的放货区点位或空的一排!");
}
//创建任务
JSONObject task_jo = new JSONObject();
task_jo.put("point_code1", whereJson.getString("device_code"));
// 根据此排找到对应的等待点
String finalPoint_code = point_code;
SchBasePoint schBasePoint = pointDaoList.stream()
.filter(row -> row.getPoint_code().equals(finalPoint_code))
.findFirst().orElse(null);
String code = IOSEnum.OUT_FH_POINT.code(schBasePoint.getRow_num().toString());
task_jo.put("point_code2", code);
task_jo.put("point_code4", point_code);
task_jo.put("vehicle_code", vehicleCode);
task_jo.put("task_type", "010708");
TwoSendOutTask taskBean = new TwoSendOutTask();
taskBean.createTask(task_jo);
// 锁住点位
ischBasePointService.update(
new UpdateWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getPoint_code, point_code)
.set(SchBasePoint::getLock_type, IOSEnum.LOCK_TYPE.code("其它"))
);
}
@Override
public String createSendOutTaskTwo(JSONObject whereJson) {
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
// 根据任务号找到第一次申请时的任务
JSONObject taskJson = taskTab.query("task_code = '" + whereJson.getString("task_code") + "' AND is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isEmpty(taskJson)) {
throw new BadRequestException("任务号为:"+ whereJson.getString("task_code")+ "的任务不存在!");
}
String point_code4 = "";
// 所有发货区点位
List<SchBasePoint> pointDaoList = ischBasePointService.list(
new QueryWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getRegion_id, RegionTypeEnum.TWO_FH01.getId())
.eq(SchBasePoint::getIs_used, IOSEnum.IS_NOTANDYES.code(""))
.eq(SchBasePoint::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
);
SchBasePoint pointDao = pointDaoList.stream()
.filter(row -> row.getPoint_code().equals(taskJson.getString("point_code4")))
.findFirst().orElse(null);
// 找出这一排所有空位
List<SchBasePoint> rowPointList = pointDaoList.stream()
.filter(row -> row.getRow_num().toString().equals(pointDao.getRow_num().toString()) &&
ObjectUtil.isEmpty(row.getVehicle_code())
)
.sorted(Comparator.comparing(SchBasePoint::getIn_order_seq))
.collect(Collectors.toList());
// 判断是否被堵住
for (int i = 0; i < rowPointList.size(); i++) {
SchBasePoint json = rowPointList.get(i);
JSONObject paramJson2 = new JSONObject();
paramJson2.put("point_code", json.getPoint_code());
paramJson2.put("region_id", RegionTypeEnum.TWO_FH01.getId());
List<JSONObject> isBlock2 = schBasePointMapper.isBlock(paramJson2);
if (ObjectUtil.isNotEmpty(isBlock2)) {
continue;
} else {
JSONObject jsonNewRow = JSONObject.parseObject(JSON.toJSONString(json));
point_code4 = jsonNewRow.getString("point_code");
break;
}
}
if (ObjectUtil.isEmpty(point_code4)) {
throw new BadRequestException("此排没有空位!"+pointDao.getRow_num());
}
// 判断货位是否是第一次申请的货位
if (!point_code4.equals(taskJson.getString("point_code4"))) {
// 更新现仓位
JSONObject jsonUpdate = new JSONObject();
jsonUpdate.put("lock_type", IOSEnum.LOCK_TYPE.code("其它"));
pointTab.update(jsonUpdate,"point_code = '"+point_code4+"'");
// 判断此货位是否是最后一个入库的货位 如果是就解锁: 5 / 9
if ("5,9".contains(pointDao.getIn_order_seq().toString())) {
// 更新原仓位
jsonUpdate.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"));
pointTab.update(jsonUpdate,"point_code = '"+taskJson.getString("point_code4")+"'");
}
}
// 更新当前点位终点
taskJson.put("point_code2", point_code4);
taskJson.put("point_code4", "");
taskTab.update(taskJson);
// 返回点位
return point_code4;
}
}

View File

@@ -21,4 +21,23 @@ public interface SendOutManageService {
*/
void createSendOutTask(JSONObject whereJson);
/**
* 创建发货任务 - 到等待点
* @param whereJson {
* device_code起点
* vehicle_code: 载具号
* }
*/
void createSendOutTaskOne(JSONObject whereJson);
/**
* 创建发货任务 等待点 - 具体点位
* @param whereJson {
* task_code任务号第一次申请时下发的任务号
* }
* @return 新点位
*/
String createSendOutTaskTwo(JSONObject whereJson);
}

View File

@@ -129,7 +129,12 @@ public class StoragevehicleinfoServiceImpl implements StoragevehicleinfoService
code = "VEHICLE_CODE_GXTP";
break;
case "0003":
code = "VEHICLE_CODE_LK";
if (class_jo.getString("class_code").equals("000301")){
code = "VEHICLE_CODE_LK";
}
if (class_jo.getString("class_code").equals("000302")){
code = "VEHICLE_CODE_LKB";
}
break;
default:
break;

View File

@@ -1943,21 +1943,27 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Transactional(rollbackFor = Exception.class)
public JSONObject applySendOutTwo(JSONObject whereJson) {
log.info("applySendOutTwo输入参数---------------------------------------------" + whereJson.toString());
// 校验
if (ObjectUtil.isEmpty(whereJson.getString("device_code"))) {
throw new BadRequestException("设备号不能为空!");
}
if (ObjectUtil.isEmpty(whereJson.getString("vehicle_code"))) {
throw new BadRequestException("载具号不能为空!");
}
JSONObject result = new JSONObject();
try {
// 调用服务
sendOutManageService.createSendOutTask(whereJson);
try{
// 校验是否是二次分配
if (ObjectUtil.isEmpty(whereJson.getString("task_code"))) {
// 第一次申请
if (ObjectUtil.isEmpty(whereJson.getString("device_code"))) {
throw new BadRequestException("设备号不能为空!");
}
if (ObjectUtil.isEmpty(whereJson.getString("vehicle_code"))) {
throw new BadRequestException("载具号不能为空!");
}
// 调用服务
sendOutManageService.createSendOutTaskOne(whereJson);
} else {
// 第二次申请
String point_code = sendOutManageService.createSendOutTaskTwo(whereJson);
result.put("data", point_code);
}
result.put("status", HttpStatus.OK.value());
result.put("message", "下发成功!");
return result;

View File

@@ -0,0 +1,40 @@
package org.nl.wms.ext.mes.rest;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.logging.annotation.Log;
import org.nl.wms.ext.mes.service.LmsToMesService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
@RequestMapping("/CamstarApi")
@Slf4j
public class BLmsToMesController {
private final LmsToMesService lmsToMesService;
@PostMapping("/momAutoTransterMoveIn")
@Log("表处、分切上料反馈接口")
public ResponseEntity<Object> momAutoTransterMoveIn(@RequestBody JSONObject jo) {
return new ResponseEntity<>(lmsToMesService.momAutoTransterMoveIn(jo), HttpStatus.OK);
}
@PostMapping("/momGetPackingInfo")
@Log("LMS通过木箱号调用木箱信息")
public ResponseEntity<Object> momGetPackingInfo(@RequestBody JSONObject jo) {
return new ResponseEntity<>(lmsToMesService.momGetPackingInfo(jo), HttpStatus.OK);
}
@PostMapping("/momBoxPackageSubmit")
@Log("LMS装箱完成传MES包装关系")
public ResponseEntity<Object> momBoxPackageSubmit(@RequestBody JSONObject jo) {
return new ResponseEntity<>(lmsToMesService.momBoxPackageSubmit(jo), HttpStatus.OK);
}
}

View File

@@ -135,4 +135,10 @@ public interface LmsToMesService {
* }
*/
JSONObject ChildScrapUpdate(JSONObject jo);
JSONObject momAutoTransterMoveIn(JSONObject jo);
JSONObject momGetPackingInfo(JSONObject jo);
JSONObject momBoxPackageSubmit(JSONObject jo);
}

View File

@@ -700,4 +700,52 @@ public class LmsToMesServiceImpl implements LmsToMesService {
}
return result;
}
@Override
public JSONObject momAutoTransterMoveIn(JSONObject param){ return null;} /*{
String from_area = param.getString("from_area");
String to_area = param.getString("to_area");
String container_name = param.getString("container_name");
log.info("momAutoTransterMoveIn接口输入参数为-------------------" + param.toString());
String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_URL").getValue();
String api = "CamstarApi/momAutoTransterMoveIn";
url = url + api;
String UserName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue();
String Password = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_PASSWORD").getValue();
param.put("UserName", UserName);
param.put("Password", Password);
try {
String resultMsg = HttpRequest.post(url)
.body(String.valueOf(param))
.execute().body();
result = JSONObject.parseObject(resultMsg);
log.info("LMSPackakge接口输出参数为-------------------" + result.toString());
String RTYPE = result.getString("RTYPE");
if ("E".equals(RTYPE)) {
throw new BadRequestException(result.getString("RTMSG"));
}
} catch (Exception e) {
throw new BadRequestException("MES提示错误" + e.getMessage());
}
return result;
}*/
@Override
public JSONObject momGetPackingInfo(JSONObject jo) {
return null;
}
@Override
public JSONObject momBoxPackageSubmit(JSONObject jo) {
return null;
}
}