From 20be60031abee414f5cf84331ad63d2d1a50cdec Mon Sep 17 00:00:00 2001 From: liuxy Date: Sun, 18 Aug 2024 18:23:17 +0800 Subject: [PATCH] =?UTF-8?q?rev=EF=BC=9A1.RGV=E8=BE=93=E9=80=81=E7=BA=BF?= =?UTF-8?q?=E5=87=BA=E5=BA=93=E4=BB=BB=E5=8A=A1=E5=8D=A1=E6=8E=A7=E5=8F=AA?= =?UTF-8?q?=E5=85=81=E8=AE=B8=E4=B8=80=E6=9D=A1=E4=BB=BB=E5=8A=A1=E4=BC=98?= =?UTF-8?q?=E5=8C=962.=E6=88=90=E5=93=81=E5=87=BA=E5=BA=93=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=B8=8B=E5=8F=91=E5=8D=A1=E6=8E=A7=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nl/b_lms/sch/tasks/TwoOutHeapTask.java | 79 ++++++++++++++++++- .../impl/StIvtIostorinvOutServiceImpl.java | 73 +++++++++++++++++ .../util/impl/LashManageServiceImpl.java | 5 +- .../acs/service/impl/AcsToWmsServiceImpl.java | 13 +++ 4 files changed, 166 insertions(+), 4 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java index c9e91185b..3b9352574 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutHeapTask.java @@ -13,6 +13,7 @@ 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.system.service.param.impl.SysParamServiceImpl; import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; @@ -40,12 +41,30 @@ public class TwoOutHeapTask extends AbstractAcsTask { //任务表 WQLObject wo_Task = WQLObject.getWQLObject("sch_base_task"); - JSONArray taskArr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); + List taskArrAll = wo_Task + .query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' ORDER BY create_time") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + // 是否下发多个AGV输送出库任务 + String is_send_many = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_send_many").getValue(); + // 是否异常出库口任务 + String TWO_EXCEP = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("TWO_EXCEP").getValue(); + + List taskArr; + if (TWO_EXCEP.equals(IOSEnum.IS_NOTANDYES.code("否"))) { + if (is_send_many.equals(IOSEnum.IS_NOTANDYES.code("否"))) { + // 只允许每个行架点位有一条任务 + taskArr = sendTask(taskArrAll); + } else { + taskArr = taskArrAll; + } + } else { + taskArr = taskArrAll; + } ArrayList resultList = new ArrayList<>(); - for (int i = 0; i < taskArr.size(); i++) { - JSONObject json = taskArr.getJSONObject(i); + JSONObject json = taskArr.get(i); char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1); AcsTaskDto dto = AcsTaskDto.builder() @@ -79,6 +98,58 @@ public class TwoOutHeapTask extends AbstractAcsTask { return resultList; } + private List sendTask(List taskArrAll) { + /* + * 一个行架点位只允许一个任务正在执行或下发中 + */ + WQLObject wo_Task = WQLObject.getWQLObject("sch_base_task"); + + ArrayList taskArr = new ArrayList<>(); + + // 判断这两个点位是否有任务:如果没有则下发任务 + List pointJson = wo_Task.query("handle_class = '" + THIS_CLASS + "' AND task_status IN ('05','06') AND is_delete = '0' ORDER BY point_code2") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + if (ObjectUtil.isEmpty(pointJson)) { + // 下发两个的任务 + JSONObject oneJson = taskArrAll.stream() + .filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位1"))) + .findFirst().orElse(null); + if (ObjectUtil.isNotEmpty(oneJson)) { + taskArr.add(oneJson); + } + + JSONObject twoJson = taskArrAll.stream() + .filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位2"))) + .findFirst().orElse(null); + if (ObjectUtil.isNotEmpty(twoJson)) { + taskArr.add(twoJson); + } + } else { + // 哪里空了就下发哪里的 + if (pointJson.size() == 1) { + JSONObject json = pointJson.get(0); + if (json.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位1"))) { + JSONObject twoJson = taskArrAll.stream() + .filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位2"))) + .findFirst().orElse(null); + if (ObjectUtil.isNotEmpty(twoJson)) { + taskArr.add(twoJson); + } + } else { + JSONObject oneJson = taskArrAll.stream() + .filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位1"))) + .findFirst().orElse(null); + if (ObjectUtil.isNotEmpty(oneJson)) { + taskArr.add(oneJson); + } + } + + } + } + return taskArr; + } + @Override @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { @@ -132,6 +203,8 @@ public class TwoOutHeapTask extends AbstractAcsTask { LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class); bean1.createLashTask(jsonParam); + // 再次下发 + immediateNotifyAcs(null); } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java index 38fd25c66..c34ffe1d1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java @@ -645,6 +645,12 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl arr = new ArrayList<>(); TranUtil.openTransaction((req, allTransactionConsumer) -> { + // 判断是否有异常任务 + String exceptionPointCode = exceptionPointCode(disDaoList); + if (ObjectUtil.isNotEmpty(exceptionPointCode)) { + throw new BadRequestException(exceptionPointCode); + } + for (List disLikeList : groupingDisMap.values()) { // 调用任务生成处理 List taskMangeList = createTaskMange2(disLikeList,mstDao.getIostorinv_id().toString(),allTransactionConsumer); @@ -1960,4 +1966,71 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl disDaoList) { + WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); + WQLObject TaskTab = WQLObject.getWQLObject("sch_base_task"); + + String result = ""; + // 查找库内是否有异常货位 + List attrExceptionList = attrTab + .query("sect_code = 'BZC01' AND is_delete = '0' AND is_used = '1' and lock_type = '" + IOSEnum.LOCK_TYPE.code("出库异常锁") + "' and zdepth = '"+IOSEnum.ZDEPTH_STRUCT.code("浅")+"'") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + if (ObjectUtil.isEmpty(attrExceptionList)) { + return null; + } + + List exceptionList = new ArrayList<>(); + // 查询异常货位对应的深货位 + attrExceptionList.forEach(row -> { + JSONObject json = attrTab.query("row_num = '" + row.getString("row_num") + "' AND col_num = '" + row.getString("col_num") + "' AND " + + "layer_num = '" + row.getString("layer_num") + "' AND zdepth = '" + IOSEnum.ZDEPTH_STRUCT.code("深") + "'" + ).uniqueResult(0); + + if (ObjectUtil.isNotEmpty(json)) { + exceptionList.add(json); + } + }); + + // 进行对比 + String struct_code_in = disDaoList.stream() + .map(row -> row.getString("struct_code")) + .distinct() + .collect(Collectors.joining("','")); + + List resultList = exceptionList.stream() + .filter(row -> struct_code_in.contains(row.getString("struct_code"))) + .collect(Collectors.toList()); + + if (ObjectUtil.isEmpty(resultList)) { + return null; + } else { + JSONObject jsonObject = resultList.get(0); + JSONObject expJson = attrExceptionList.stream() + .filter(row -> row.getString("row_num").equals(jsonObject.getString("row_num"))) + .filter(row -> row.getString("col_num").equals(jsonObject.getString("col_num"))) + .filter(row -> row.getString("layer_num").equals(jsonObject.getString("layer_num"))) + .filter(row -> row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅"))) + .findFirst().orElse(null); + + if (ObjectUtil.isEmpty(expJson)) { + return "货位【"+jsonObject.getString("struct_code")+"'】 对应的浅货位有出库异常任务,请检查!"; + } + + // 查询对应的异常任务 + JSONObject jsonTask = TaskTab + .query("handle_class = '" + TwoOutExceptionalTask.class.getName() + "' AND is_delete = '0' and point_code2 = '" + expJson.getString("struct_code") + "' ORDER BY create_time DESC") + .uniqueResult(0); + + result = "请先下发木箱号为【"+jsonTask.getString("vehicle_code")+"】的出库任务!"; + + } + return result; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java index 1a2278448..ad3055b61 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/LashManageServiceImpl.java @@ -103,6 +103,9 @@ public class LashManageServiceImpl implements LashManageService { JSONObject jsonSub = WQLObject.getWQLObject("pdm_bi_subpackagerelation") .query("package_box_sn = '" + boxDao.getBox_no() + "'") .uniqueResult(0); + if (ObjectUtil.isEmpty(jsonSub)) { + throw new BadRequestException("子卷包装关系不存在:【"+boxDao.getBox_no()+"】"); + } //查询木箱对应的托盘绑定关系,并清除 WQLObject veExtTab = WQLObject.getWQLObject("md_pb_storagevehicleext"); @@ -226,7 +229,7 @@ public class LashManageServiceImpl implements LashManageService { // 比较两行架点位的任务个数 List executeArr = WQLObject.getWQLObject("SCH_BASE_Task") - .query("handle_class = '" + TwoOutHeapTask.class.getName() + "' and task_status IN ('05','06') and is_delete = '0' ") + .query("handle_class = '" + TwoOutHeapTask.class.getName() + "' and task_status IN ('04','05','06') and is_delete = '0' ") .getResultJSONArray(0).toJavaList(JSONObject.class); // 根据终点点位进行分组 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 59653abc1..fe103d867 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -2236,6 +2236,19 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { if (type.equals("1") || type.equals("4")) { point_code = inBussManageService.taskExceptional(whereJson); } + } else if (taskDao.getTask_type().equals(TASKEnum.PROUD_TYPE.code("成品出库"))) { + // 成品出库:空出 + if (type.equals("2")) { + taskDao.setRemark("【空出】请检查货位库存!"); + taskDao.setCar_no("【空出】请检查货位库存!"); + taskService.updateById(taskDao); + result.put("status", HttpStatus.OK.value()); + result.put("message", "【成品出库】空出,任务跳过处理!"); + result.put("point_code", ""); + result.put("vehicle_code", ""); + log.info("deviceApplyExceptional返回参数:---------------------------------------------" + result.toString()); + return result; + } } if (!type.equals("3") && ObjectUtil.isEmpty(point_code)) {