rev:发货任务二次分配修改
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -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")),
|
||||
|
||||
@@ -210,4 +210,263 @@ public class SendOutManageServiceImpl implements SendOutManageService {
|
||||
// 删除载具对应木箱记录
|
||||
//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 void 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") + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(taskJson)) {
|
||||
throw new BadRequestException("任务号为:"+ whereJson.getString("task_code")+ "的任务不存在!");
|
||||
}
|
||||
|
||||
String point_code4 = "";
|
||||
|
||||
// 判断当前点位是否被堵住
|
||||
JSONObject paramJson = new JSONObject();
|
||||
paramJson.put("point_code", taskJson.getString("point_code4"));
|
||||
paramJson.put("region_id", RegionTypeEnum.TWO_FH01.getId());
|
||||
List<JSONObject> isBlock = schBasePointMapper.isBlock(paramJson);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(isBlock)) {
|
||||
// 堵住: 找这一排的的空位
|
||||
// 所有发货区点位
|
||||
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()) &&
|
||||
row.getLock_type().equals(IOSEnum.LOCK_TYPE.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(rowPointList.get(0)));
|
||||
point_code4 = jsonNewRow.getString("point_code");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 更新原仓位
|
||||
JSONObject jsonUpdate = new JSONObject();
|
||||
jsonUpdate.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"));
|
||||
pointTab.update(jsonUpdate,"point_code = '"+taskJson.getString("point_code4")+"'");
|
||||
|
||||
if (ObjectUtil.isEmpty(point_code4)) {
|
||||
// 如果没有找到此排空位 则重新下发到别的排
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("device_code", taskJson.getString("point_code2"));
|
||||
param.put("vehicle_code", taskJson.getString("vehicle_code"));
|
||||
createSendOutTaskOne(param);
|
||||
return;
|
||||
} else {
|
||||
// 更新现仓位
|
||||
jsonUpdate.put("lock_type", IOSEnum.LOCK_TYPE.code("其它"));
|
||||
pointTab.update(jsonUpdate,"point_code = '"+point_code4+"'");
|
||||
}
|
||||
|
||||
} else {
|
||||
point_code4 = taskJson.getString("point_code4");
|
||||
}
|
||||
|
||||
//创建任务
|
||||
JSONObject task_jo = new JSONObject();
|
||||
task_jo.put("point_code1", taskJson.getString("point_code2"));
|
||||
task_jo.put("point_code2", point_code4);
|
||||
task_jo.put("vehicle_code", taskJson.getString("vehicle_code"));
|
||||
task_jo.put("task_type", "010721");
|
||||
TwoSendOutTask taskBean = new TwoSendOutTask();
|
||||
taskBean.createTask(task_jo);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,4 +21,22 @@ public interface SendOutManageService {
|
||||
*/
|
||||
void createSendOutTask(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 创建发货任务 - 到等待点
|
||||
* @param whereJson {
|
||||
* device_code:起点
|
||||
* vehicle_code: 载具号
|
||||
* }
|
||||
*/
|
||||
void createSendOutTaskOne(JSONObject whereJson);
|
||||
|
||||
|
||||
/**
|
||||
* 创建发货任务 等待点 - 具体点位
|
||||
* @param whereJson {
|
||||
* task_code:任务号(第一次申请时下发的任务号)
|
||||
* }
|
||||
*/
|
||||
void createSendOutTaskTwo(JSONObject whereJson);
|
||||
|
||||
}
|
||||
|
||||
@@ -1943,21 +1943,26 @@ 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 {
|
||||
// 第二次申请
|
||||
sendOutManageService.createSendOutTaskTwo(whereJson);
|
||||
}
|
||||
result.put("status", HttpStatus.OK.value());
|
||||
result.put("message", "下发成功!");
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user