From 7256afda39175300ef988a7b37db5af4aa7f36f5 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Fri, 18 Apr 2025 10:12:29 +0800 Subject: [PATCH] =?UTF-8?q?opt:=20=E5=86=85=E5=8C=85=E9=97=B4=E6=94=B9?= =?UTF-8?q?=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...dmBiSlittingproductionplanServiceImpl.java | 3 +- .../point/dao/mapper/StIvtShaftivtMapper.java | 2 + .../point/dao/mapper/StIvtShaftivtMapper.xml | 10 ++ .../point/service/IstIvtShaftivtService.java | 2 + .../impl/StIvtShaftivtServiceImpl.java | 5 + .../wms/ext/acs/service/WmsToAcsService.java | 7 + .../acs/service/impl/AcsToWmsServiceImpl.java | 126 ++++++++---------- .../acs/service/impl/WmsToAcsServiceImpl.java | 8 ++ .../nl/wms/pda/mps/rest/OutController.java | 6 + .../wms/pda/mps/rest/PaperTubeController.java | 2 +- .../nl/wms/pda/mps/service/OutService.java | 1 + .../pda/mps/service/impl/OutServiceImpl.java | 126 ++++++++++++++++-- .../service/impl/PaperTubeServiceImpl.java | 7 + .../mps/service/impl/ShippingServiceImpl.java | 107 +++++++++++++-- .../java/org/nl/wms/pda/mps/wql/PDA_02.wql | 9 ++ .../DeliverycachepointivtController.java | 2 + .../nl/wms/pdm/wql/PDM_BI_SUBPACKAGER01.wql | 2 +- .../src/main/java/org/nl/wms/sch/AcsUtil.java | 11 +- .../org/nl/wms/sch/manage/AcsZGKInfo.json | 41 ++++++ .../wms/sch/manage/AutoCallEmptyVehicle.java | 125 +++++++++++++---- .../nl/wms/sch/manage/AutoSendOutShaft.java | 12 +- .../nl/wms/sch/manage/AutoSendRgRGVTask.java | 76 +++++++++++ .../nl/wms/sch/manage/AutoSendShaftTask.java | 75 +++++++++++ .../sch/manage/AutoSendVehicleToCutTask.java | 96 +++++++++++++ .../org/nl/wms/sch/tasks/CutConveyorTask.java | 14 +- .../org/nl/wms/sch/tasks/CutTrussTask.java | 29 ++-- .../org/nl/wms/sch/tasks/PaperTrussTask.java | 62 ++++++++- .../org/nl/wms/sch/tasks/PaperTubeTask.java | 6 +- .../st/inbill/wql/QST_IVT_RAWASSISTISTOR.wql | 2 +- .../st/outbill/wql/QST_IVT_CHECKOUTBILL.wql | 4 +- .../src/test/java/org/nl/init/EventTest.java | 35 ++++- 31 files changed, 860 insertions(+), 153 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AcsZGKInfo.json create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendRgRGVTask.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendShaftTask.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendVehicleToCutTask.java diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java index 6141a41b0..264f7eba9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java @@ -159,7 +159,8 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl getByContainerNames(List collect) { LambdaQueryWrapper lam = new QueryWrapper().lambda(); - lam.in(PdmBiSlittingproductionplan::getContainer_name, collect); + lam.in(PdmBiSlittingproductionplan::getContainer_name, collect) + .eq(PdmBiSlittingproductionplan::getIs_delete, "0"); return pdmBiSlittingproductionplanMapper.selectList(lam); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/StIvtShaftivtMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/StIvtShaftivtMapper.java index a1e92dba2..34e51b225 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/StIvtShaftivtMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/StIvtShaftivtMapper.java @@ -17,4 +17,6 @@ public interface StIvtShaftivtMapper extends BaseMapper { List getCachePointNoTask(String productArea); List getCanUsePoint(String qzzSize, String qzzGeneration, String productArea); + + List getSubRollCacheNoTaskPoints(); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/StIvtShaftivtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/StIvtShaftivtMapper.xml index 96389c920..04bca1598 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/StIvtShaftivtMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/StIvtShaftivtMapper.xml @@ -18,4 +18,14 @@ AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status '07' AND t.point_code1 = ss.point_code AND t.is_delete = '0') + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IstIvtShaftivtService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IstIvtShaftivtService.java index 0ca15ad7c..acba07657 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IstIvtShaftivtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/IstIvtShaftivtService.java @@ -61,6 +61,8 @@ public interface IstIvtShaftivtService extends IService { List getCachePointNoTask(String productArea); List getCanUsePoint(String qzzSize, String qzzGeneration, String productArea); + + List getSubRollCacheNoTaskPoints(); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/StIvtShaftivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/StIvtShaftivtServiceImpl.java index 9f04934b3..6fc7a23f1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/StIvtShaftivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/StIvtShaftivtServiceImpl.java @@ -92,6 +92,11 @@ public class StIvtShaftivtServiceImpl extends ServiceImpl getSubRollCacheNoTaskPoints() { + return stIvtShaftivtMapper.getSubRollCacheNoTaskPoints(); + } + /** * 获取实体基础信息 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java index da90237aa..8f87e2337 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java @@ -160,4 +160,11 @@ public interface WmsToAcsService { * @return */ JSONObject queryRGVStatus(JSONObject jo); + + /** + * 通知ACS取消任务 + * @param jo + * @return + */ + JSONObject toNoticeACSCancelTask(JSONObject jo); } 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 ee74c33f2..3126f559f 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 @@ -121,7 +121,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { * 空载具出库处理服务 */ private final OutVehicleManageService outVehicleManageService; - + @Autowired private IMdpbBoxtypeService iMdpbBoxtypeService; @@ -1142,11 +1142,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { String cbz_generation = cbz_jo.getString("qzz_generation"); // 套轴申请 if ("6".equals(type)) { + log.info("ACS套轴申请>>>>>>"); //判断当前穿拔轴位置的气涨轴和纸管位的纸管是否匹配 JSONObject zg_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("product_area = '" + product_area + "' AND point_type = '4'").uniqueResult(0); String zg_size = zg_jo.getString("qzz_size"); String zg_generation = zg_jo.getString("qzz_generation"); - + log.info("套管工位对应的尺寸:{},代数:{}", zg_size, zg_generation); + log.info("穿拔轴点对应的尺寸:{},代数:{}", cbz_size, cbz_generation); if (StrUtil.isEmpty(zg_generation) || StrUtil.isEmpty(zg_size)) { /*如果纸管工位的代数和尺寸为空,判断是否存在正在纸管出库且符合条件的任务 1、存在,则反馈ACS等待 @@ -1194,32 +1196,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject jo = new JSONObject(); jo.put("task_type", "010604"); jo.put("point_code1", cbz_jo.getString("point_code")); - JSONObject fhd_jo; - // 判断是不是3寸的 - if (openTzArea && "3".equals(cbz_size) && openTempArea) { - //查询可用的空点位 - fhd_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6001") - .addParam("need_size", cbz_size) - .addParam("need_generation", cbz_generation) - .addParam("product_area", product_area) - .process().uniqueResult(0); - } else { - // A1_FHD_01 - fhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '7' AND product_area = '" + product_area + "'").uniqueResult(0); - } + // remove: 判断是不是3寸的 + // A1_FHD_01 + JSONObject fhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '7' AND product_area = '" + product_area + "'").uniqueResult(0); jo.put("point_code2", fhd_jo.getString("point_code")); - JSONObject qhd_jo; - if ("3".equals(zg_size) && openTempArea && openTzArea) { - // 判断是不是3寸的 - //查询可用的空点位 - qhd_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6002") - .addParam("need_size", zg_size) - .addParam("need_generation", zg_generation) - .addParam("product_area", product_area) - .process().uniqueResult(0); - } else { - qhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '6' AND product_area = '" + product_area + "'").uniqueResult(0); - } + JSONObject qhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '6' AND product_area = '" + product_area + "'").uniqueResult(0); jo.put("point_code3", qhd_jo.getString("point_code")); jo.put("point_code4", cbz_jo.getString("point_code")); jo.put("product_area", product_area); @@ -1243,6 +1224,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { // 套轴完成 if ("7".equals(type)) { + log.info("ACS套轴完成>>>>>>"); String container_name1; String container_name2; // 如果给不到任务,就从套管共为获取 @@ -1390,6 +1372,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject struct_jo = new JSONObject(); // 申请取货 if ("4".equals(type)) { + log.info("ACS申请取货>>>>>>"); //查询可用的空气涨轴点位 struct_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6002") .addParam("need_size", need_size) @@ -1406,9 +1389,21 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { //更新任务 if ("010602".equals(task_jo.getString("task_type")) || "010606".equals(task_jo.getString("task_type"))) { + if(!task_jo.getString("point_code1").contains("QHD")) { + result.put("status", HttpStatus.OK.value()); + result.put("device_code", task_jo.getString("point_code1")); + result.put("message", "多次反馈成功!"); + return result; + } task_jo.put("point_code1", struct_jo.getString("point_code")); } if ("010604".equals(task_jo.getString("task_type"))) { + if(!task_jo.getString("point_code3").contains("QHD")) { + result.put("status", HttpStatus.OK.value()); + result.put("device_code", task_jo.getString("point_code3")); + result.put("message", "多次反馈成功!"); + return result; + } task_jo.put("point_code3", struct_jo.getString("point_code")); } result.put("version", need_generation); @@ -1416,6 +1411,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } // 申请放货 if ("3".equals(type)) { + log.info("ACS申请放货>>>>>>"); //查询可用的空点位 struct_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6001") .addParam("need_size", have_size) @@ -1460,12 +1456,18 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { //更新任务 if ("010603".equals(task_jo.getString("task_type")) || "010604".equals(task_jo.getString("task_type"))) { if(!task_jo.getString("point_code2").contains("FHD")) { + result.put("status", HttpStatus.OK.value()); + result.put("device_code", task_jo.getString("point_code2")); + result.put("message", "多次反馈成功!"); return result; } task_jo.put("point_code2", new_point); } if ("010606".equals(task_jo.getString("task_type"))) { if(!task_jo.getString("point_code1").contains("FHD")) { + result.put("status", HttpStatus.OK.value()); + result.put("device_code", task_jo.getString("point_code1")); + result.put("message", "多次反馈成功!"); return result; } task_jo.put("point_code1", new_point); @@ -1476,8 +1478,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } // 反馈尺寸 if ("2".equals(type)) { + log.info("ACS反馈尺寸>>>>>>"); String size = whereJson.getString("size"); if ("0".equals(size)) { + result.put("status", HttpStatus.BAD_REQUEST.value()); + result.put("message", "反馈失败, 尺寸为0!"); return result; } JSONObject request_jo = task_jo.getJSONObject("request_param"); @@ -1488,6 +1493,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { // 拔轴完成 //拔轴任务完成更新穿拔轴机上的库存 if ("8".equals(type)) { + log.info("ACS拔轴完成>>>>>>"); JSONObject cbz_device = WQLObject.getWQLObject("st_ivt_shaftivt").query("product_area = '" + product_area + "' AND point_type = '0'").uniqueResult(0); JSONObject request_jo = task_jo.getJSONObject("request_param"); cbz_device.put("have_qzz", "1"); @@ -1502,6 +1508,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } // 反馈重量 if ("9".equals(type)) { + log.info("ACS反馈重量>>>>>>"); String is_hand = whereJson.getString("is_hand"); if (StrUtil.isNotEmpty(is_hand) && is_hand.equals("1")) { JSONObject rgv_device = WQLObject.getWQLObject("st_ivt_shaftivt").query("product_area = '" + product_area + "' AND point_type = '5'").uniqueResult(0); @@ -1523,23 +1530,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { //todo:创建桁架任务搬运一个符合的气涨轴 JSONObject jo = new JSONObject(); jo.put("task_type", "010602"); - JSONObject qhd_jo = null; - String flag = "1"; - // 判断是不是3寸的 - if (openTzArea && "3".equals(need_size) && openTempArea) { - //查询可用的空点位 - qhd_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6002") - .addParam("need_size", need_size) - .addParam("need_generation", need_generation) - .addParam("product_area", product_area) - .process().uniqueResult(0); - jo.put("truss_type", "1"); - flag = "1"; - } else { - qhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '6' AND product_area = '" + public_area + "'").uniqueResult(0); - jo.put("truss_type", "8"); - flag = "2"; - } + // remove: 判断是不是3寸的 + JSONObject qhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '6' AND product_area = '" + public_area + "'").uniqueResult(0); + jo.put("truss_type", "8"); + String flag = "2"; jo.put("point_code1", qhd_jo.getString("point_code")); jo.put("point_code2", cbz_jo.getString("point_code")); jo.put("vehicle_code", tggw_jo.getString("container_name1") + "-qzz"); @@ -1556,14 +1550,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } // 扫码异常放货到人工RGV if ("10".equals(type)) { + log.info("ACS扫码异常放货到人工RGV>>>>>>"); if (ObjectUtil.isEmpty(task_jo)) { throw new BadRequestException("桁架任务不能为空!"); } - JSONObject rgv_jo = ivt_shaftivt.query("point_code = '" + device_code + "'").uniqueResult(0); - int have_qzz = rgv_jo.getIntValue("have_qzz"); - rgv_jo.put("have_qzz", have_qzz + 1); - ivt_shaftivt.update(rgv_jo); - task_jo.put("point_code2", device_code); + task_jo.put("point_code2", task_jo.getString("product_area") + "_RG_RGV"); task_jo.put("remark", "桁架异常自动到人工RGV"); task_jo.put("update_time", DateUtil.now()); task_jo.put("update_optid", SecurityUtils.getCurrentUserId()); @@ -1619,21 +1610,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject jo = new JSONObject(); jo.put("task_type", "010603"); jo.put("point_code1", cbz_jo.getString("point_code")); - JSONObject fhd_jo = null; - // 判断是不是3寸的 - if (RenUtils.isOpenTzArea(product_area) && "3".equals(cbz_size) && RenUtils.isOpenTempArea(product_area)) { - //查询可用的空点位 - fhd_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6001") - .addParam("need_size", cbz_size) - .addParam("need_generation", cbz_generation) - .addParam("product_area", product_area) - .process().uniqueResult(0); - jo.put("truss_type", "1"); - } else { - // A1_FHD_01 - fhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '7' AND product_area = '" + product_area + "'").uniqueResult(0); - jo.put("truss_type", "8"); - } + // remove: 判断是不是3寸的 + // A1_FHD_01 + JSONObject fhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '7' AND product_area = '" + product_area + "'").uniqueResult(0); + jo.put("truss_type", "8"); jo.put("point_code2", fhd_jo.getString("point_code")); jo.put("product_area", product_area); jo.put("vehicle_code", DateUtil.format(DateUtil.date(), "HHmm") + "qzz"); @@ -1699,15 +1679,15 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { // task_jo:托盘到out的任务|剩余轴回库 String product_area = task_jo.getString("product_area"); // 如果有下发的取轴桁架任务,则跳过 - List list = taskService.list(new LambdaQueryWrapper() - .eq(SchBaseTask::getProduct_area, product_area) - .eq(SchBaseTask::getIs_delete, "0") - .ne(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) - .eq(SchBaseTask::getTask_type, "010606") - .gt(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())); - if (list.size() > 0) { - return result; - } +// List list = taskService.list(new LambdaQueryWrapper() +// .eq(SchBaseTask::getProduct_area, product_area) +// .eq(SchBaseTask::getIs_delete, "0") +// .ne(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) +// .eq(SchBaseTask::getTask_type, "010606") +// .gt(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())); +// if (list.size() > 0) { +// return result; +// } //判断对应的内包间区域是否启用 JSONObject pack_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '9' AND product_area = '" + product_area + "'").uniqueResult(0); if ((task_jo.getString("task_type").equals("010401") || task_jo.getString("task_type").equals("010409")) && pack_jo.getString("is_used").equals("1")) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java index 6ce64d629..07e1d147f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java @@ -525,4 +525,12 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { arr.add(jo); return AcsUtil.notifyAcs(api, arr); } + + @Override + public JSONObject toNoticeACSCancelTask(JSONObject jo) { + String api = "api/wms/toNoticeACSFinishTask"; + JSONArray arr = new JSONArray(); + arr.add(jo); + return AcsUtil.notifyAcs(api, arr); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/OutController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/OutController.java index add067598..e65dedcff 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/OutController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/OutController.java @@ -42,6 +42,12 @@ public class OutController { return new ResponseEntity<>(outService.disuseConfirm(whereJson), HttpStatus.OK); } + @PostMapping("/pdaDownRoll") + @Log("反收下卷") + public ResponseEntity pdaDownRoll(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(outService.pdaDownRoll(whereJson), HttpStatus.OK); + } + @PostMapping("/conveyPointQuery") @Log("缓存点位查询") diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/PaperTubeController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/PaperTubeController.java index 95b59d23c..b5ff8a945 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/PaperTubeController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/PaperTubeController.java @@ -31,7 +31,7 @@ public class PaperTubeController { @PostMapping("/queryPaperMaterial") @Log("查询纸管物料") - + @SaIgnore public ResponseEntity queryPaperMaterial(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(paperTubeService.queryPaperMaterial(whereJson), HttpStatus.OK); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/OutService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/OutService.java index e150d3ba2..fffef7bfe 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/OutService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/OutService.java @@ -44,4 +44,5 @@ public interface OutService { */ JSONObject conveyConfirm(JSONObject whereJson); + JSONObject pdaDownRoll(JSONObject param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/OutServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/OutServiceImpl.java index 49bf56ee5..b44a01773 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/OutServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/OutServiceImpl.java @@ -10,10 +10,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; -import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; -import org.nl.common.utils.TaskUtils; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; @@ -31,11 +30,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.function.Consumer; -import java.util.stream.Collectors; -import java.util.List; import java.util.stream.Collectors; @Service @@ -146,7 +143,11 @@ public class OutServiceImpl implements OutService { } String cut_qzzno = rows.getJSONObject(0).getString("qzzno"); - + List cons = new ArrayList<>(); + for (int i = 0; i < rows.size(); i++) { + JSONObject rowsJSONObject = rows.getJSONObject(i); + cons.add(rowsJSONObject.getString("container_name")); + } //判断是否末次下卷 if ("1".equals(is_last)) { // hint: 最后一次下卷,到左边的输送线上,如果没有则到中转点 @@ -170,15 +171,19 @@ public class OutServiceImpl implements OutService { .eq(PdmBiSlittingproductionplan::getResource_name, resource_name) .eq(PdmBiSlittingproductionplan::getIs_delete, "0") .lt(PdmBiSlittingproductionplan::getStatus, "06") - .ne(PdmBiSlittingproductionplan::getSplit_group, split_group)); + .ne(PdmBiSlittingproductionplan::getSplit_group, split_group) + .orderByAsc(PdmBiSlittingproductionplan::getSplit_group)); + // 比如当前A组,可能得到B,C两组的数据,这时候只要B组 if (allPlans.size() > 0) { + PdmBiSlittingproductionplan demoPlan = allPlans.get(0); + String group = demoPlan.getSplit_group(); // 判断当前是分切机的什么位置(上/下) if (cut_ivt.getString("up_point_code").equals(point_code)) { // 上轴 - nextPlan = allPlans.stream().filter(p -> "1".equals(p.getUp_or_down())).collect(Collectors.toList()); + nextPlan = allPlans.stream().filter(p -> "1".equals(p.getUp_or_down()) && group.equals(p.getSplit_group())).collect(Collectors.toList()); } else { // 下轴 - nextPlan = allPlans.stream().filter(p -> "2".equals(p.getUp_or_down())).collect(Collectors.toList()); + nextPlan = allPlans.stream().filter(p -> "2".equals(p.getUp_or_down()) && group.equals(p.getSplit_group())).collect(Collectors.toList()); } if (nextPlan.size() > 0) { // hint: 虚拟分切计划不动,直到搬运成功后清除点位时删除(*) @@ -239,6 +244,7 @@ public class OutServiceImpl implements OutService { jo.put("vehicle_code", dec.getQzzno()); jo.put("task_type", "010403"); } + jo.put("cons", cons); cutTrussTask.createTask(jo); JSONObject result = new JSONObject(); result.put("message", "操作成功!"); @@ -351,6 +357,7 @@ public class OutServiceImpl implements OutService { jo.put("vehicle_code", delivery_point.getString("qzzno")); jo.put("vehicle_code2", cut_qzzno); jo.put("product_area", cut_ivt.getString("product_area")); + jo.put("cons", cons); } else { char dtl_type = delivery_point.getString("point_code").charAt(delivery_point.getString("point_code").length() - 1); @@ -393,8 +400,8 @@ public class OutServiceImpl implements OutService { .eq("point_code1", point_code) .lt("task_status", TaskStatusEnum.FINISHED.getCode()) .eq("is_delete", "0")); - if (!CollectionUtils.isEmpty(list)){ - throw new BadRequestException("当前分切机"+point_code+"存在任务,如需继续下卷请先取消任务"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))); + if (!CollectionUtils.isEmpty(list)) { + throw new BadRequestException("当前分切机" + point_code + "存在任务,如需继续下卷请先取消任务" + list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))); } //查询该分切机邻近位置的空载具的输送线点位 JSONObject empty_vehicle = WQL.getWO("PDA_02") @@ -483,5 +490,102 @@ public class OutServiceImpl implements OutService { return jo; } + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject pdaDownRoll(JSONObject param) { + log.info("用户:[{}]使用手持下卷,下卷参数:{}", SecurityUtils.getCurrentNickName(), param); + // point_code、container: [{"container_name":"子卷号", "site":"上下轴(1/2)"}] + String point_code = param.getString("point_code"); + JSONArray conArray = param.getJSONArray("container"); + List cons = new ArrayList<>(); + for (int i = 0; i < conArray.size(); i++) { + JSONObject container = conArray.getJSONObject(i); + cons.add(container.getString("container_name")); + } + List plans = slittingproductionplanService.getByContainerNames(cons); + if (plans.size() == 0) { + throw new BadRequestException("MES未把计划推送到LMS系统,请稍后在试,或者使用废箔下卷!"); + } + //查询该点位对应的机台编号 + JSONObject cut_ivt = WQLObject.getWQLObject("ST_IVT_CutPointIvt").query("up_point_code ='" + point_code + "' OR down_point_code ='" + point_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(cut_ivt)) { + throw new BadRequestException("未查询到对应的分切机!"); + } + // update: 如果是到托盘的桁架任务,则会出错,已修改 + String cut_qzzno = "废箔"; + boolean isOpen = RenUtils.isOpenTzArea(cut_ivt.getString("product_area")); + if (!isOpen) { + throw new BadRequestException("所在区域车间无法使用该功能!"); + } + JSONObject empty_vehicle = WQL.getWO("PDA_02") + .addParam("sort_seq", cut_ivt.getString("sort_seq")) + .addParam("sql_str", " ORDER BY abs(" + cut_ivt.getString("sort_seq") + "-sort_seq),point_code") + .addParam("product_area", cut_ivt.getString("product_area")) + .addParam("point_location", cut_ivt.getString("point_location")) + .addParam("flag", "3").process().uniqueResult(0); + if (ObjectUtil.isEmpty(empty_vehicle)) { + // hint: 如果没有载具号,就需要创建到中转架的任务 + // mark:查找子卷缓存架的空位(固定:点位类型:03) + List caches = deliverycachepointivtService.getVolumeDeliveryCacheNoTask(DeliveryConDto.builder() + .area(cut_ivt.getString("product_area")) + .location(cut_ivt.getString("point_location")) + .pointStatus("01") + .sortSeq(cut_ivt.getString("sort_seq")) + .build()); + if (caches.size() > 0) { + Deliverycachepointivt cachePoint = caches.get(0); + JSONObject jo = new JSONObject(); + jo.put("point_code1", point_code); + jo.put("point_code2", cachePoint.getPoint_code()); + jo.put("vehicle_code", cut_qzzno); + jo.put("product_area", cut_ivt.getString("product_area")); + //分切机->子卷中转架 子卷出站 + jo.put("task_type", "010404"); + jo.put("cons", cons); + cutTrussTask.createTask(jo); + JSONObject result = new JSONObject(); + result.put("message", "操作成功!"); + return result; + } + } + // hint: 改造的内包间业务如果暂存架不存在才去校验外侧的位置。 + //查询缓存位的空载具 + // 内测没有找外侧 + if (ObjectUtil.isEmpty(empty_vehicle)) { + empty_vehicle = WQL.getWO("PDA_02") + .addParam("sort_seq", cut_ivt.getString("sort_seq")) + .addParam("sql_str", " ORDER BY abs(" + cut_ivt.getString("sort_seq") + "-sort_seq),point_code") + .addParam("product_area", cut_ivt.getString("product_area")) + .addParam("point_location", cut_ivt.getString("point_location")) + .addParam("flag", "303").process().uniqueResult(0); + } + if (ObjectUtil.isEmpty(empty_vehicle)) { + throw new BadRequestException("未查询到可用的空载具或当前载具存在任务!!"); + } + + JSONObject jo = new JSONObject(); + jo.put("point_code1", point_code); + jo.put("point_code2", empty_vehicle.getString("point_code")); + jo.put("vehicle_code", cut_qzzno); + jo.put("cons", cons); + if (StrUtil.isEmpty(empty_vehicle.getString("vehicle_code"))) { + throw new BadRequestException("点位:" + empty_vehicle.getString("point_code") + "载具号为空!"); + } + jo.put("vehicle_code2", empty_vehicle.getString("vehicle_code")); + jo.put("product_area", cut_ivt.getString("product_area")); + //分切>输送线 子卷出站 + jo.put("task_type", "010404"); + + char dtl_type = empty_vehicle.getString("point_code").charAt(empty_vehicle.getString("point_code").length() - 1); + //判断起点是否远离分切机 + if (Integer.valueOf(String.valueOf(dtl_type)) % 2 == 0) { + jo.put("task_status", TaskStatusEnum.SURE_START.getCode()); + jo.put("point_code2", ""); + } + cutTrussTask.createTask(jo); + JSONObject result = new JSONObject(); + result.put("message", "操作成功!"); + return result; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/PaperTubeServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/PaperTubeServiceImpl.java index 09c236fa5..45621b508 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/PaperTubeServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/PaperTubeServiceImpl.java @@ -255,6 +255,7 @@ public class PaperTubeServiceImpl implements PaperTubeService { String location = param.getString("location"); String qzz_size = param.getString("qzz_size"); Integer number = param.getInteger("qqz_num"); + String labour = param.getString("labour"); String qzz_generation = param.getString("qzz_generation"); StIvtCutpointivt xnDevice = cutpointivtService.getOne(new LambdaQueryWrapper() .eq(StIvtCutpointivt::getPoint_location, location) @@ -368,6 +369,11 @@ public class PaperTubeServiceImpl implements PaperTubeService { plan.setUp_or_down("1"); plan.setLeft_or_right("2"); } + if (ObjectUtil.isNotEmpty(labour) && "1".equals(labour)) { + plan.setQzzno("qzz-" + plan.getContainer_name()); + plan.setIs_paper_ok("1"); + plan.setIs_child_tz_ok("1"); + } plans.add(plan); } } @@ -410,6 +416,7 @@ public class PaperTubeServiceImpl implements PaperTubeService { String location = param.getString("location"); String qzz_generation = param.getString("qzz_generation"); // 插入分切计划 + param.put("labour", "1"); JSONObject planObj = doInsertPlan(param); JSONArray plansArray = planObj.getJSONArray("plans"); List plans = plansArray.toJavaList(PdmBiSlittingproductionplan.class); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/ShippingServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/ShippingServiceImpl.java index 92d36cccc..731d9b1ba 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/ShippingServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/ShippingServiceImpl.java @@ -13,7 +13,9 @@ import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; +import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.pda.mps.service.ShippingService; +import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.tasks.CutConveyorTask; import org.nl.wms.sch.tasks.PaperTrussTask; import org.nl.wms.sch.tasks.renovation.util.RenUtils; @@ -33,6 +35,7 @@ public class ShippingServiceImpl implements ShippingService { private final PaperTrussTask paperTrussTask; private final IschBaseTaskService taskService; + private final WmsToAcsService wmsToAcsService; @Override public JSONObject queryMaterialInfo(JSONObject whereJson) { @@ -101,6 +104,7 @@ public class ShippingServiceImpl implements ShippingService { @Override @Transactional(rollbackFor = Exception.class) public JSONObject confirm(JSONObject whereJson) { + log.info("请求参数:{}", whereJson); // todo: 输送线配送套好轴的气胀轴到分切车间(分切机对面的移栽台位置-这里需要注意,任务完成之后需要创建桁架任务挪到空轴取轴位) JSONObject jo = new JSONObject(); // 分切计划 @@ -173,6 +177,7 @@ public class ShippingServiceImpl implements ShippingService { if (StrUtil.isNotEmpty(qzzno)) { map.put("qzzno", qzzno); } + log.info("气胀轴编码:{}", qzzno); JSONArray plan = WQL.getWO("PDA_02").addParamMap(map).process().getResultJSONArray(0); if (ObjectUtil.isEmpty(plan)) { throw new BadRequestException("未找到气涨轴【" + qzzno + "】对应的分切计划!"); @@ -231,7 +236,7 @@ public class ShippingServiceImpl implements ShippingService { // hint: 只能在外侧point_type=01 JSONObject empty_point; if (openTzArea) { - // todo: 校验无任务 + // hint: 校验无任务 empty_point = WQL.getWO("PDA_02") .addParam("sql_str", " ORDER BY abs(" + plan_jo.getString("sort_seq") + "-sort_seq),point_code") .addParam("product_area", plan_jo.getString("product_area")) @@ -245,6 +250,14 @@ public class ShippingServiceImpl implements ShippingService { .addParam("flag", "4").process().uniqueResult(0); } if (ObjectUtil.isEmpty(empty_point)) { + // todo: 优化成半条任务 + if (openTzArea) { + //下发输送线任务 + String remark = "没空闲点位,已创建半条任务,系统会自动创建!"; + doCreateHalfTask(vehicle_code, plan_jo, remark, map); + jo.put("message", "没空闲点位,已创建半条任务,系统会自动创建!"); + return jo; + } throw new BadRequestException("未查询到可用的空点位!"); } @@ -266,9 +279,25 @@ public class ShippingServiceImpl implements ShippingService { //判断是否存在任务 JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("(point_code1 = '" + right_point.getString("point_code") + "' OR point_code2 = '" + right_point.getString("point_code") + "') AND task_status < '07' AND is_delete = '0' AND task_type = '010402'").uniqueResult(0); if (!"01".equals(right_point.getString("point_status"))) { + // todo: 优化成半条任务 + if (openTzArea) { + //下发输送线任务 + String remark = empty_point.getString("point_code") + "所在一截输送线缓存位存在货物,请使用【载具横移】功能将货物横移!"; + doCreateHalfTask(vehicle_code, plan_jo, remark, map); + jo.put("message", remark); + return jo; + } throw new BadRequestException(empty_point.getString("point_code") + "所在一截输送线缓存位存在货物,请使用【载具横移】功能将货物横移!"); } if (ObjectUtil.isNotEmpty(task_jo)) { + // todo: 优化成半条任务 + if (openTzArea) { + //下发输送线任务 + String remark = empty_point.getString("point_code") + "所在一截输送线存在未完成的任务,请稍等几分钟后进行下发!"; + doCreateHalfTask(vehicle_code, plan_jo, remark, map); + jo.put("message", remark); + return jo; + } throw new BadRequestException(empty_point.getString("point_code") + "所在一截输送线存在未完成的任务,请稍等几分钟后进行下发!"); } } @@ -292,7 +321,7 @@ public class ShippingServiceImpl implements ShippingService { WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").update(row); } - // hint: 改造后的右边一定存放的是空载具 + // hint: 改造后的右边一定存放的是空载具 (改造之后不会走以下流程) if (Integer.valueOf(String.valueOf(dtl_type)) % 2 == 0 && !openTzArea) { //如果是右边(外侧)的任务,判断左边是否存在空载具且没任务,如果存在则把左边的空载具送出 JSONObject left_point = WQLObject.getWQLObject("st_ivt_deliverypointivt").query("point_location = '" + empty_point.getString("point_location") + "' AND product_area = '" + empty_point.getString("product_area") + "' AND sort_seq = '" + empty_point.getString("sort_seq") + "' order by point_code").uniqueResult(0); @@ -317,6 +346,29 @@ public class ShippingServiceImpl implements ShippingService { return jo; } + public void doCreateHalfTask(String vehicle_code, JSONObject plan_jo, String remark, HashMap map) { + JSONObject form = new JSONObject(); + JSONObject ss_jo = WQLObject.getWQLObject("sch_base_point").query("product_area = '" + plan_jo.getString("product_area") + "' AND point_type = '6'").uniqueResult(0); + form.put("point_code1", ss_jo.getString("point_code")); + form.put("point_code2", "-"); + form.put("task_type", "010402-1"); + form.put("product_area", plan_jo.getString("product_area")); + form.put("vehicle_code", plan_jo.getString("qzzno")); + form.put("vehicle_code2", vehicle_code); + form.put("remark", remark); + form.put("plans", plan_jo); + form.put("task_status", TaskStatusEnum.SURE_START.getCode()); + cutConveyorTask.createTask(form); + + //更新该气涨轴对应的分切计划状态 + JSONArray plan_rows = WQL.getWO("PDA_02").addParamMap(map).process().getResultJSONArray(0); + for (int i = 0; i < plan_rows.size(); i++) { + JSONObject row = plan_rows.getJSONObject(i); + row.put("status", "02"); + WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").update(row); + } + } + @Override @Transactional(rollbackFor = Exception.class) public JSONObject returnVehicle(JSONObject whereJson) { @@ -330,13 +382,23 @@ public class ShippingServiceImpl implements ShippingService { } JSONObject vehicle_task = WQLObject.getWQLObject("sch_base_task").query("vehicle_code2 = '" + vehicle_code + "' AND is_delete = '0' AND task_status < '07'").uniqueResult(0); if (ObjectUtil.isNotEmpty(vehicle_task)) { - throw new BadRequestException("载具码:" + vehicle_code + "存在未完成的输送线任务!"); + // 请求ACS删除任务 + log.info("载具码:" + vehicle_code + "存在未完成的输送线任务!正在请求ACS删除任务!"); + JSONObject taskParams = new JSONObject(); + taskParams.put("product_area", vehicle_task.getString("product_area")); + taskParams.put("task_code", vehicle_task.getString("task_code")); + JSONObject acsRes = wmsToAcsService.toNoticeACSCancelTask(taskParams); + // 删除任务 + log.info("请求ACS删除完毕!ACS返回值:{}", acsRes); + vehicle_task.put("task_status", TaskStatusEnum.FINISHED.getCode()); + vehicle_task.put("remark", "异常自动完成任务!"); + WQLObject.getWQLObject("sch_base_task").update(vehicle_task); +// throw new BadRequestException("载具码:" + vehicle_code + "存在未完成的输送线任务!"); } JSONObject del_jo = WQLObject.getWQLObject("st_ivt_deliverypointivt").query("vehicle_code = '" + vehicle_code + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(del_jo)) { throw new BadRequestException("载具码:" + vehicle_code + "存在点位:" + del_jo.getString("point_code") + "上!"); } - //判断起点是否存在 JSONObject start_jo = WQLObject.getWQLObject("sch_base_point").query("point_code = '" + point_code + "' AND is_delete = '0' AND is_used = '1'").uniqueResult(0); if (ObjectUtil.isEmpty(start_jo)) { @@ -345,22 +407,29 @@ public class ShippingServiceImpl implements ShippingService { if (!"6".equals(start_jo.getString("point_type"))) { throw new BadRequestException("请选择输送线入库口作为起点!"); } - + boolean isOpenTzArea = RenUtils.isOpenTzArea(start_jo.getString("product_area")); //查询该载具码对应的区域位置 JSONObject vehicle_area = WQLObject.getWQLObject("md_pb_vehiclearea").query("vehicle_code = '" + vehicle_code + "' AND product_area = '" + start_jo.getString("product_area") + "'").uniqueResult(0); if (ObjectUtil.isEmpty(vehicle_area)) { throw new BadRequestException("未查询到该载具对应的区域位置!"); } - + String tempPoint; + String remark = ""; + String taskStatus = TaskStatusEnum.START_AND_POINT.getCode(); //根据起点判断区域查询对应的输送线空点位 JSONObject point_jo = WQL.getWO("PDA_02").addParam("flag", "4").addParam("product_area", vehicle_area.getString("product_area")) .addParam("point_location", vehicle_area.getString("point_location")) .addParam("sql_str", " ORDER BY point_code") .process().uniqueResult(0); if (ObjectUtil.isEmpty(point_jo)) { - throw new BadRequestException("对应输送线不存在可用空点位!"); + if (isOpenTzArea) { + taskStatus = TaskStatusEnum.SURE_START.getCode(); + remark = "对应输送线不存在可用空点位!"; + } else { + throw new BadRequestException("对应输送线不存在可用空点位!"); + } } - + tempPoint = point_jo.getString("point_code"); //如果为左边点位判断右边是否存在未完成的任务,如果有则提示不能下发 //判断输送出来的任务起点是否靠近分切机,如果靠近分切机且远离分切机的点位上存在载具且不存在任务进行载具横移 char dtl_type = point_jo.getString("point_code").charAt(point_jo.getString("point_code").length() - 1); @@ -369,19 +438,33 @@ public class ShippingServiceImpl implements ShippingService { //判断是否存在任务 JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("(point_code1 = '" + right_point.getString("point_code") + "' OR point_code2 = '" + right_point.getString("point_code") + "') AND task_status < '07' AND is_delete = '0' AND task_type = '010402'").uniqueResult(0); if (ObjectUtil.isNotEmpty(task_jo)) { - throw new BadRequestException(point_jo.getString("point_code") + "所在一截输送线存在未完成的任务,请稍等几分钟后进行下发!"); + if (isOpenTzArea) { + tempPoint = ""; + taskStatus = TaskStatusEnum.SURE_START.getCode(); + remark = point_jo.getString("point_code") + "所在一截输送线存在未完成的任务,请稍等几分钟后进行下发!"; + } else { + throw new BadRequestException(point_jo.getString("point_code") + "所在一截输送线存在未完成的任务,请稍等几分钟后进行下发!"); + } } if (!"01".equals(right_point.getString("point_status"))) { - throw new BadRequestException(point_jo.getString("point_code") + "所在一截输送线缓存位存在货物,请使用【载具横移】功能将货物横移!"); + if (isOpenTzArea) { + tempPoint = ""; + taskStatus = TaskStatusEnum.SURE_START.getCode(); + remark = point_jo.getString("point_code") + "所在一截输送线缓存位存在货物,请使用【载具横移】功能将货物横移!"; + } else { + throw new BadRequestException(point_jo.getString("point_code") + "所在一截输送线缓存位存在货物,请使用【载具横移】功能将货物横移!"); + } } } //下发输送线任务 JSONObject form = new JSONObject(); form.put("point_code1", point_code); - form.put("point_code2", point_jo.getString("point_code")); + form.put("point_code2", tempPoint); form.put("task_type", "010402"); - form.put("product_area", point_jo.getString("product_area")); + form.put("task_status", taskStatus); + form.put("remark", remark); + form.put("product_area", start_jo.getString("product_area")); form.put("vehicle_code2", vehicle_code); cutConveyorTask.createTask(form); JSONObject jo = new JSONObject(); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_02.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_02.wql index b39a440e9..57528a4e5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_02.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_02.wql @@ -303,6 +303,15 @@ point_status = '01' AND ivt.is_used = '1' AND ivt.point_type = '01' + AND 0 = ( + SELECT + COUNT(*) + FROM + sch_base_task t + WHERE + t.is_delete = '0' + AND t.point_code2 = ivt.point_code + AND t.task_status < '07' ) OPTION 输入.product_area <> "" ivt.product_area = 输入.product_area ENDOPTION diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/deliverycache/controller/DeliverycachepointivtController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/deliverycache/controller/DeliverycachepointivtController.java index 6c84bb3cc..146f18d30 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/deliverycache/controller/DeliverycachepointivtController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/deliverycache/controller/DeliverycachepointivtController.java @@ -1,5 +1,6 @@ package org.nl.wms.pdm.ivt.deliverycache.controller; +import cn.dev33.satoken.annotation.SaIgnore; import lombok.extern.slf4j.Slf4j; import org.nl.common.TableDataInfo; import org.nl.common.domain.query.PageQuery; @@ -28,6 +29,7 @@ public class DeliverycachepointivtController { private IDeliverycachepointivtService deliverycachepointivtService; @GetMapping + @SaIgnore @Log("查询分切缓存架") //@SaCheckPermission("@el.check('deliverycachepointivt:list')") public ResponseEntity query(DeliverycachepointivtQuery deliverycachepointivtQuery, PageQuery page){ diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/PDM_BI_SUBPACKAGER01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/PDM_BI_SUBPACKAGER01.wql index 3426fceab..dd66f2f4b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/PDM_BI_SUBPACKAGER01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/PDM_BI_SUBPACKAGER01.wql @@ -294,7 +294,7 @@ status = 输入.status ENDOPTION OPTION 输入.limits <> "" - 1=1 order by date_of_FG_inbound desc limit 0,10000 + 1=1 order by date_of_FG_inbound desc limit 0,50000 ENDOPTION ENDSELECT ENDQUERY diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java index 4b610b8f8..3647967a1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java @@ -50,13 +50,18 @@ public class AcsUtil { if (jo.containsKey("class_type") && jo.getString("class_type").contains("0107")) { product_area = "BLK"; } + if (!"A1,A2,A3,A4,LK".contains(product_area)) { + log.warn("不是一期任务,跳过下发!"); + continue; + } if (StrUtil.isEmpty(product_area)) { - throw new BadRequestException("区域不能为空!下发信息:" + jo.toString()); + log.warn("区域不能为空!下发信息:" + jo.toString()); + continue; } String acs_url = URLEnum.find(product_area); if (StrUtil.isEmpty(acs_url)) { - log.info(product_area); - throw new BadRequestException("未查询到区域对应的acs地址!"); + log.warn("未查询到区域{}对应的acs地址!", product_area); + continue; } String url =acs_url + api; try { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AcsZGKInfo.json b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AcsZGKInfo.json new file mode 100644 index 000000000..c0df38b98 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AcsZGKInfo.json @@ -0,0 +1,41 @@ +{ + "data": [ + { + "carrier_direction": 0, + "heartbeat": 0, + "material12": "701990999000018", + "qty3": 0, + "material10": "701990999000019", + "qty2": 0, + "material11": "0", + "qty5": 15, + "qty4": 7, + "error": 0, + "qty1": 0, + "mode": 3, + "out_qty_arr": "0", + "move": 1, + "out_seq_arr": "0", + "material8": "0", + "material7": "0", + "material9": "0", + "material2": "0", + "task": 48166, + "material1": "0", + "material4": "701990999000019", + "qty7": 0, + "material3": "0", + "qty6": 0, + "material6": "0", + "qty9": 0, + "device_code": "A4_ZGK", + "material5": "482210000000018", + "qty8": 0, + "qty11": 1, + "qty12": 15, + "qty10": 3 + } + ], + "message": "操作成功", + "status": 200 +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCallEmptyVehicle.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCallEmptyVehicle.java index 616fc093c..de4d8caeb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCallEmptyVehicle.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCallEmptyVehicle.java @@ -32,12 +32,13 @@ import org.nl.wms.sch.tasks.URLEnum; import org.nl.wms.sch.tasks.renovation.util.RenUtils; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; import java.util.List; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import static org.nl.wms.sch.tasks.renovation.util.RenUtils.isOpenTzArea; @@ -102,6 +103,7 @@ public class AutoCallEmptyVehicle { } + @Transactional(rollbackFor = Exception.class) void callEmptyVehicle(String product_area, String point_location, String dayNum) { log.info("区域:{}, 位置:{}", product_area, point_location); //下半部分的分切组 @@ -113,7 +115,31 @@ public class AutoCallEmptyVehicle { // todo: 拦截排序最终需要的分切组 // todo: 空载具只有按需呼叫,不在自动创建到out点 ? //下半部分需要的总空载具 - int donw_num = 0; + // todo: 获取当前未执行的任务(010606)状态=02 + List waitTasks = taskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getTask_type, "010606") + .eq(SchBaseTask::getIs_delete, "0") + .eq(SchBaseTask::getProduct_area, product_area) + .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())); + // 过滤上下半区 + List needLocation = waitTasks.stream().filter(t -> { + JSONObject requestParam = JSONObject.parseObject(t.getRequest_param()); + return point_location.equals(requestParam.getString("need_location")); + }).collect(Collectors.toList()); +// // 获取管芯任务 +// List gxTask = taskService.list(new LambdaQueryWrapper() +// .eq(SchBaseTask::getTask_type, "010601") +// .eq(SchBaseTask::getIs_delete, "0") +// .eq(SchBaseTask::getProduct_area, product_area) +// .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())); +// // 过滤上下半区 +// List needLocation2 = gxTask.stream().filter(t -> { +// JSONObject result = WQLObject.getWQLObject("pdm_bi_slittingproductionplan") +// .query("container_name = '" + t.getVehicle_code() + "'").uniqueResult(0); +// return point_location.equals(result.getString("need_location")); +// }).collect(Collectors.toList()); +// log.info("任务"); + int donw_num = needLocation.size(); for (int i = 0; i < down_rows.size(); i++) { JSONObject row = down_rows.getJSONObject(i); String parent_container_name = row.getString("parent_container_name"); @@ -125,12 +151,6 @@ public class AutoCallEmptyVehicle { // 下发ACS任务呼叫纸管 // this.callPaperTube(plan_rows, product_area); - // hint: 如果是两个分切计划以上,必定是两根轴 - if (plan_rows.size() >= 2) { - donw_num += 2; - } else if (plan_rows.size() == 1) { - donw_num += 1; - } if (plan_rows.size() > 0) { JSONObject plan = plan_rows.getJSONObject(0); // 判断是否有气胀轴,没有气胀轴就跳过 @@ -142,7 +162,7 @@ public class AutoCallEmptyVehicle { .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) .like(SchBaseTask::getPoint_code1, "QHD")); log.info("需要的轴数:{}个,气胀轴还有:{}个,取货点任务有:{}个", donw_num, allQzzPoints.size(), qhd); - if (donw_num > allQzzPoints.size()) { + if (donw_num > allQzzPoints.size() - qhd) { log.warn("气胀轴不够用,该计划不套轴!!!"); continue; } @@ -160,26 +180,32 @@ public class AutoCallEmptyVehicle { break; } } + // hint: 如果是两个分切计划以上,必定是两根轴 + if (plan_rows.size() >= 2) { + donw_num += 2; + } else if (plan_rows.size() == 1) { + donw_num += 1; + } // 下发ACS任务呼叫纸管 this.callPaperTube(plan_rows, product_area); } /* ******************* 校验需要呼叫的载具数(待优化) ******************* */ // 断点:"A1".equals(product_area) && "1".equals(point_location) //减去对应已经在出库的空载具任务 -// JSONArray out_task = WQL.getWO("QAUTO_QUERY").addParam("flag", "2").addParam("point_location", point_location).addParam("product_area", product_area).process().getResultJSONArray(0); -// donw_num -= out_task.size(); + JSONArray out_task = WQL.getWO("QAUTO_QUERY").addParam("flag", "2").addParam("point_location", point_location).addParam("product_area", product_area).process().getResultJSONArray(0); + donw_num -= out_task.size(); - //减去出口对应的载具 -// JSONObject out_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "3").addParam("point_location", point_location).addParam("product_area", product_area).process().uniqueResult(0); -// if (ObjectUtil.isNotEmpty(out_jo)) { -// donw_num--; -// } + // 减去出口对应的载具 + JSONObject out_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "3").addParam("point_location", point_location).addParam("product_area", product_area).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(out_jo)) { + donw_num--; + } - //减去入库口对应的载具 -// JSONObject in_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "4").addParam("point_location", point_location).addParam("product_area", product_area).process().uniqueResult(0); -// if (ObjectUtil.isNotEmpty(in_jo)) { -// donw_num--; -// } + // 减去入库口对应的载具 + JSONObject in_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "4").addParam("point_location", point_location).addParam("product_area", product_area).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(in_jo)) { + donw_num--; + } //减去入库任务数量 // JSONArray in_task = WQL.getWO("QAUTO_QUERY").addParam("flag", "5").addParam("point_location", point_location).addParam("product_area", product_area).process().getResultJSONArray(0); @@ -370,6 +396,13 @@ public class AutoCallEmptyVehicle { /** * 向ACS发起出管芯 * @param rows 纸管数组信息 + *

+ * [{ + * "paper_code": "", + * "num": 1, + * "pcsn": "规格" + * }] + *

* @param product_area 生产区域 */ void getPaperStruct(JSONArray rows, String product_area) { @@ -379,7 +412,7 @@ public class AutoCallEmptyVehicle { JSONObject zgk_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '8' AND product_area = '" + product_area + "'").uniqueResult(0); //判断纸管库是否启用 if ("1".equals(zgk_jo.getString("is_used"))) { - log.info("管芯库启动-正在给ACS写入信号..."); + log.info("管芯库启动-正在从ACS获取管芯数据..."); device_jo.put("device_code", zgk_jo.getString("point_code")); device_jo.put("product_area", product_area); JSONArray device_ja = new JSONArray(); @@ -387,28 +420,72 @@ public class AutoCallEmptyVehicle { // 获取管芯数据 JSONObject device_data = wmsToAcsService.getPointStatus(device_ja); JSONObject data = device_data.getJSONArray("data").getJSONObject(0); + log.info("获取得到管芯数据:{}", device_data); JSONArray task_rows = new JSONArray(); boolean same_flag = false; // todo: 临时测试 // 原:false boolean need_cz = false; + // row最多两个 for (int i = 0; i < rows.size(); i++) { JSONObject row = rows.getJSONObject(i); + // 需要的数量 int num = row.getIntValue("num"); if (num == 2) { same_flag = true; } String material_code = row.getString("paper_code"); + // 12个仓位, 可以多仓出 for (int j = 1; j < 13; j++) { String material_key = "material" + j; String qty_key = "qty" + j; String ivt_code = data.getString(material_key); + // 某个仓位对应的管芯数量 int ivt_num = data.getIntValue(qty_key); - if (StrUtil.isNotEmpty(ivt_code) && ivt_code.equals(material_code)) { + if (StrUtil.isNotEmpty(ivt_code) && ivt_code.equals(material_code) && ivt_num > 0) { + // 获取包含这个仓的任务 + List zgkTasks = taskService.list(new LambdaQueryWrapper() + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(SchBaseTask::getIs_delete, "0") + .eq(SchBaseTask::getProduct_area, product_area) + .eq(SchBaseTask::getTask_type, "010601") + .eq(SchBaseTask::getPoint_code1, product_area + "_ZGK")); + // 过滤出这个仓,并且统计数据 + List sameTask = zgkTasks.stream().filter(t -> { + if (ObjectUtil.isEmpty(t.getResponse_param())) { + return false; + } + JSONArray requestParam = JSONObject.parseArray(t.getResponse_param()); + for (int i1 = 0; i1 < requestParam.size(); i1++) { + JSONObject requestParamJSONObject = requestParam.getJSONObject(i1); + if (("material" + requestParamJSONObject.getString("device_code")).equals(material_key)) { + return true; + } + } + return false; + }).collect(Collectors.toList()); + // 计算并扣除已经出去的数量 + for (SchBaseTask task : sameTask) { + JSONArray requestParam = JSONObject.parseArray(task.getResponse_param()); + for (int i1 = 0; i1 < requestParam.size(); i1++) { + JSONObject requestParamJSONObject = requestParam.getJSONObject(i1); + if (("material" + requestParamJSONObject.getString("device_code")).equals(material_key)) { + ivt_num -= requestParamJSONObject.getIntValue("qty"); + } + } + } + if (ivt_num < 0) { + // 不够就下一个仓 + continue; + } + // 这个管芯任务需要从哪个仓出多少管芯 JSONObject task_jo = new JSONObject(); + // 哪个仓 task_jo.put("device_code", j); + // 哪个管芯 task_jo.put("material_code", material_code); if (ivt_num >= num) { + // 多少管 task_jo.put("qty", num); num = 0; } else { @@ -451,7 +528,7 @@ public class AutoCallEmptyVehicle { jo.put("request_param", request_param); jo.put("product_area", product_area); paperTubeTask.createTask(jo); - log.info("出管芯信号写入成功-参数:{}", jo); + log.info("出管芯任务创建成功-参数:{}", jo); } else { log.info("不进行套轴, 配送空气胀轴到载具上...."); createTask(rows, product_area); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendOutShaft.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendOutShaft.java index beb0e9fe5..d414a91f8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendOutShaft.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendOutShaft.java @@ -13,6 +13,7 @@ import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.sch.tasks.PaperTrussTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -31,12 +32,13 @@ public class AutoSendOutShaft { private WmsToAcsService wmsToAcsService; @Autowired private IstIvtShaftivtService shaftivtService; + @Transactional(rollbackFor = Exception.class) public void run() { - List list = shaftivtService.list(new LambdaQueryWrapper() - .eq(StIvtShaftivt::getPoint_type, "11") - .eq(StIvtShaftivt::getHave_qzz, "2") - .eq(StIvtShaftivt::getIs_used, "1")); + log.info("成品暂存加送子卷卷到拔轴机开始执行..."); + List list = shaftivtService.getSubRollCacheNoTaskPoints(); for (StIvtShaftivt stIvtShaftivt : list) { + log.info("开始为[{}]进行执行送到穿拔轴机", stIvtShaftivt.getPoint_code()); + // question: 并发/事务问题 JSONObject rgv_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '5' AND product_area = '" + stIvtShaftivt.getProduct_area() + "'").uniqueResult(0); // 查询ACS是否有可用的RGV JSONObject queryRgvParam = new JSONObject(); @@ -70,6 +72,8 @@ public class AutoSendOutShaft { PaperTrussTask paperTrussTask = SpringContextHolder.getBean(PaperTrussTask.class); paperTrussTask.createTask(jo); } + // 只做一次 + break; } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendRgRGVTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendRgRGVTask.java new file mode 100644 index 000000000..995e20870 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendRgRGVTask.java @@ -0,0 +1,76 @@ +package org.nl.wms.sch.manage; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.sch.tasks.CutConveyorTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 自动送到人工RGV任务 + * @Author: lyd + * @Date: 2025/4/6 + */ +@Slf4j +@Component +public class AutoSendRgRGVTask { + @Autowired + private IschBaseTaskService taskService; + @Autowired + private WmsToAcsService wmsToAcsService; + @Autowired + private CutConveyorTask cutConveyorTask; + + @Transactional(rollbackFor = Exception.class) + public void run() { + List rgRgvTasks = taskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()) + .eq(SchBaseTask::getTask_type, "010605") + .eq(SchBaseTask::getIs_delete, "0") + .like(SchBaseTask::getPoint_code2, "RG_RGV")); + for (SchBaseTask rgRgvTask : rgRgvTasks) { + String productArea = rgRgvTask.getProduct_area(); + // 校验人工RGV是否空闲。 + JSONArray device_rows = new JSONArray(); + JSONObject device_obj = new JSONObject(); + device_rows.add(device_obj); + device_obj.put("device_code", rgRgvTask.getPoint_code2()); + device_obj.put("product_area", productArea); + JSONObject pointStatus = wmsToAcsService.getPointStatus(device_rows); + if (ObjectUtil.isEmpty(pointStatus) || ObjectUtil.isEmpty(pointStatus.getJSONArray("data"))) { + log.error("区域【{}】获取人工RGV信息失败", productArea); + continue; + } + JSONObject data2 = pointStatus.getJSONArray("data").getJSONObject(0); + if (data2.getString("move2").equals("1")) { + log.warn("区域【{}】人工RGV有货,需要尽快处理!", productArea); + continue; + } + JSONArray action_rows = new JSONArray(); + JSONObject action_jo = new JSONObject(); + action_jo.put("device_code", rgRgvTask.getPoint_code2()); + action_jo.put("code", "to_command"); + action_jo.put("product_area", productArea); + action_jo.put("value", "1"); + action_rows.add(action_jo); + JSONObject action = wmsToAcsService.action(action_rows); + if (!action.getString("status").equals("200")) { + log.warn("区域【{}】人工RGV异常!", productArea); + continue; + } + // 下发任务 + rgRgvTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + taskService.updateById(rgRgvTask); + cutConveyorTask.immediateNotifyAcs(null); + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendShaftTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendShaftTask.java new file mode 100644 index 000000000..eb35ee0b6 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendShaftTask.java @@ -0,0 +1,75 @@ +package org.nl.wms.sch.manage; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.tasks.CutConveyorTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 自动送套轴到分切车间 + * @Author: lyd + * @Date: 2025/4/15 + */ +@Slf4j +@Component +public class AutoSendShaftTask { + @Autowired + private IschBaseTaskService taskService; + @Autowired + private CutConveyorTask cutConveyorTask; + @Transactional(rollbackFor = Exception.class) + public void run() { + log.info("自动补全创建in点到移栽台的送轴任务开始执行。。。。"); + List inTasks = taskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()) + .eq(SchBaseTask::getTask_type, "010402-1") + .eq(SchBaseTask::getIs_delete, "0")); + for (SchBaseTask inTask : inTasks) { + JSONObject requestParam = JSONObject.parseObject(inTask.getRequest_param()); + JSONObject plan_jo = requestParam.getJSONObject("plans"); + JSONObject empty_point = WQL.getWO("PDA_02") + .addParam("sql_str", " ORDER BY abs(" + plan_jo.getString("sort_seq") + "-sort_seq),point_code") + .addParam("product_area", plan_jo.getString("product_area")) + .addParam("point_location", plan_jo.getString("point_location")) + .addParam("flag", "401").process().uniqueResult(0); + if (ObjectUtil.isEmpty(empty_point)) { + log.error("任务【{}】未查询到可用的空点位!", inTask.getTask_code()); + continue; + } + //如果为左边点位判断右边是否存在未完成的任务,如果有则提示不能下发 + //判断输送出来的任务起点是否靠近分切机,如果靠近分切机且远离分切机的点位上存在载具且不存在任务进行载具横移 + char dtl_type = empty_point.getString("point_code").charAt(empty_point.getString("point_code").length() - 1); + //如果终点为靠近分切机的点位,则判断远离分切机的点位是否存在架子且不存在任务。如果为true,则提醒工人进行载具横移 + if (Integer.valueOf(String.valueOf(dtl_type)) % 2 != 0) { + JSONObject right_point = WQLObject.getWQLObject("st_ivt_deliverypointivt").query("point_location = '" + empty_point.getString("point_location") + "' AND product_area = '" + empty_point.getString("product_area") + "' AND sort_seq = '" + empty_point.getString("sort_seq") + "' order by point_code desc").uniqueResult(0); + //判断是否存在任务 + JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("(point_code1 = '" + right_point.getString("point_code") + "' OR point_code2 = '" + right_point.getString("point_code") + "') AND task_status < '07' AND is_delete = '0' AND task_type = '010402'").uniqueResult(0); + if (!"01".equals(right_point.getString("point_status"))) { + log.warn(empty_point.getString("point_code") + "所在一截输送线缓存位存在货物,请使用【载具横移】功能将货物横移!"); + continue; + } + if (ObjectUtil.isNotEmpty(task_jo)) { + log.warn(empty_point.getString("point_code") + "所在一截输送线存在未完成的任务,请稍等几分钟后进行下发!"); + continue; + } + } + inTask.setTask_type("010402"); + inTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + inTask.setRemark("创建成功"); + taskService.updateById(inTask); + cutConveyorTask.immediateNotifyAcs(null); + } + + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendVehicleToCutTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendVehicleToCutTask.java new file mode 100644 index 000000000..b6051e4e3 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendVehicleToCutTask.java @@ -0,0 +1,96 @@ +package org.nl.wms.sch.manage; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.tasks.CutConveyorTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 自动补全创建in点到移栽台的任务 + * @Author: lyd + * @Date: 2025/4/8 + */ +@Slf4j +@Component +public class AutoSendVehicleToCutTask { + @Autowired + private IschBaseTaskService taskService; + @Autowired + private CutConveyorTask cutConveyorTask; + @Transactional(rollbackFor = Exception.class) + public void run() { + log.info("自动补全创建in点到移栽台的送空托任务开始执行。。。。"); + List inTasks = taskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()) + .eq(SchBaseTask::getTask_type, "010402") + .eq(SchBaseTask::getIs_delete, "0")); + + for (SchBaseTask inTask : inTasks) { + String vehicle_code = inTask.getVehicle_code2(); + String point_code = inTask.getPoint_code1(); + try { + if (StrUtil.isEmpty(vehicle_code)) { + throw new BadRequestException("载具码不能为空!"); + } + JSONObject del_jo = WQLObject.getWQLObject("st_ivt_deliverypointivt").query("vehicle_code = '" + vehicle_code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(del_jo)) { + throw new BadRequestException("载具码:" + vehicle_code + "存在点位:" + del_jo.getString("point_code") + "上!"); + } + //判断起点是否存在 + JSONObject start_jo = WQLObject.getWQLObject("sch_base_point").query("point_code = '" + point_code + "' AND is_delete = '0' AND is_used = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(start_jo)) { + throw new BadRequestException("未查询到对应点位!"); + } + if (!"6".equals(start_jo.getString("point_type"))) { + throw new BadRequestException("请选择输送线入库口作为起点!"); + } + //查询该载具码对应的区域位置 + JSONObject vehicle_area = WQLObject.getWQLObject("md_pb_vehiclearea").query("vehicle_code = '" + vehicle_code + "' AND product_area = '" + start_jo.getString("product_area") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(vehicle_area)) { + throw new BadRequestException("未查询到该载具对应的区域位置!"); + } + //根据起点判断区域查询对应的输送线空点位 + JSONObject point_jo = WQL.getWO("PDA_02").addParam("flag", "4").addParam("product_area", vehicle_area.getString("product_area")) + .addParam("point_location", vehicle_area.getString("point_location")) + .addParam("sql_str", " ORDER BY point_code") + .process().uniqueResult(0); + if (ObjectUtil.isEmpty(point_jo)) { + throw new BadRequestException("对应输送线不存在可用空点位!"); + } + //如果为左边点位判断右边是否存在未完成的任务,如果有则提示不能下发 + //判断输送出来的任务起点是否靠近分切机,如果靠近分切机且远离分切机的点位上存在载具且不存在任务进行载具横移 + char dtl_type = point_jo.getString("point_code").charAt(point_jo.getString("point_code").length() - 1); + if (Integer.valueOf(String.valueOf(dtl_type)) % 2 != 0) { + JSONObject right_point = WQLObject.getWQLObject("st_ivt_deliverypointivt").query("point_location = '" + point_jo.getString("point_location") + "' AND product_area = '" + point_jo.getString("product_area") + "' AND sort_seq = '" + point_jo.getString("sort_seq") + "' order by point_code desc").uniqueResult(0); + //判断是否存在任务 + JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("(point_code1 = '" + right_point.getString("point_code") + "' OR point_code2 = '" + right_point.getString("point_code") + "') AND task_status < '07' AND is_delete = '0' AND task_type = '010402'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(task_jo)) { + throw new BadRequestException(point_jo.getString("point_code") + "所在一截输送线存在未完成的任务,请稍等几分钟后进行下发!"); + } + if (!"01".equals(right_point.getString("point_status"))) { + throw new BadRequestException(point_jo.getString("point_code") + "所在一截输送线缓存位存在货物,请使用【载具横移】功能将货物横移!"); + } + } + // 下发 + inTask.setPoint_code2(point_jo.getString("point_code")); + inTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + taskService.updateById(inTask); + cutConveyorTask.immediateNotifyAcs(null); + } catch (Exception e) { + log.error("定时任务【AutoSendVehicleToCutTask】出现异常:{}", e); + } + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutConveyorTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutConveyorTask.java index 4856119e3..4bba4a8be 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutConveyorTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutConveyorTask.java @@ -312,7 +312,9 @@ public class CutConveyorTask extends AbstractAcsTask { } JSONObject data2 = pointStatus.getJSONArray("data").getJSONObject(0); if (data2.getString("move2").equals("1")) { - throw new BadRequestException("人工RGV有货,需要尽快处理!"); + log.warn("人工RGV有货,需要尽快处理!"); + jo.put("remark", "人工RGV有货,需要尽快处理!"); + jo.put("task_status", TaskStatusEnum.SURE_START.getCode()); } JSONArray action_rows = new JSONArray(); JSONObject action_jo = new JSONObject(); @@ -323,7 +325,10 @@ public class CutConveyorTask extends AbstractAcsTask { action_rows.add(action_jo); JSONObject action = wmsToAcsService.action(action_rows); if (!action.getString("status").equals("200")) { - throw new BadRequestException("该区域人工RGV异常!"); + log.warn("该区域人工RGV异常!"); +// throw new BadRequestException("该区域人工RGV异常!"); + jo.put("remark", "该区域人工RGV异常!"); + jo.put("task_status", TaskStatusEnum.SURE_START.getCode()); } } jo.put("vehicle_code", jsonTask.getString("vehicle_code")); @@ -511,6 +516,7 @@ public class CutConveyorTask extends AbstractAcsTask { JSONObject jo = new JSONObject(); jo.put("point_code1", cachePoint.getPoint_code()); jo.put("point_code2", jsonTask.getString("point_code2")); + // 存放子卷号数据 jo.put("vehicle_code", cachePoint.getQzzno()); jo.put("product_area", cachePoint.getProduct_area()); // 子卷中转架下卷回库 @@ -626,6 +632,7 @@ public class CutConveyorTask extends AbstractAcsTask { json.put("product_area", form.getString("product_area")); json.put("vehicle_code", form.getString("vehicle_code")); json.put("vehicle_code2", form.getString("vehicle_code2")); + json.put("remark", form.getString("remark")); json.put("handle_class", THIS_CLASS); json.put("create_id", currentUserId); json.put("create_name", currentUsername); @@ -639,6 +646,9 @@ public class CutConveyorTask extends AbstractAcsTask { if (ObjectUtil.isNotEmpty(form.get("flag"))) { json.put("request_param", form.getJSONObject("flag").toJSONString()); } + if (ObjectUtil.isNotEmpty(form.get("plans"))) { + json.put("request_param", form.getJSONObject("plans").toJSONString()); + } //根据类型获取对应的任务优先级 JSONObject priority_jo = WQL.getWO("PDA_COOLIN").addParam("flag", "3").addParam("task_type", json.getString("task_type")).process().uniqueResult(0); if (ObjectUtil.isEmpty(priority_jo)) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutTrussTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutTrussTask.java index 5d21051e4..bfb843c0a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutTrussTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutTrussTask.java @@ -261,7 +261,8 @@ public class CutTrussTask extends AbstractAcsTask { if (ObjectUtil.isEmpty(endCachePoint)) { throw new BadRequestException("未查询到对应的输送线点位或中转点位!"); } else { - endCachePoint.setQzzno(jsonTask.getString("vehicle_code2")); + JSONObject requestParam = JSONObject.parseObject(jsonTask.getString("request_param")); + endCachePoint.setQzzno(requestParam.getJSONArray("cons").toJSONString()); endCachePoint.setPoint_status("04"); endCachePoint.setUpdate_optid(SecurityUtils.getCurrentUserId()); endCachePoint.setUpdate_optname(SecurityUtils.getCurrentNickName()); @@ -344,7 +345,18 @@ public class CutTrussTask extends AbstractAcsTask { form.put("vehicle_code2", delivery_point.getString("vehicle_code")); form.put("vehicle_code", jsonTask.getString("vehicle_code")); form.put("task_type", "010401"); - form.put("cons", cons); + if (cons.size() > 0) { + form.put("cons", cons); + } else { + // 看看requestParam是否有值 + if (ObjectUtil.isNotEmpty(jsonTask.getString("request_param"))) { + JSONObject requestParam = JSONObject.parseObject(jsonTask.getString("request_param")); + if (ObjectUtil.isNotEmpty(requestParam.getJSONArray("cons"))) { + form.put("cons", requestParam.getJSONArray("cons").toJSONString()); + form.put("vehicle_code", requestParam.getJSONArray("cons").toJSONString()); + } + } + } form.put("product_area", delivery_point.getString("product_area")); cutConveyorTask.createTask(form); } else { @@ -354,8 +366,9 @@ public class CutTrussTask extends AbstractAcsTask { throw new BadRequestException("未查询到对应的输送线点位!"); } // 将数据存储到中转架 + JSONObject requestParam = JSONObject.parseObject(jsonTask.getString("request_param")); LambdaUpdateWrapper ulam = new LambdaUpdateWrapper<>(); - ulam.set(Deliverycachepointivt::getQzzno, jsonTask.getString("vehicle_code")) + ulam.set(Deliverycachepointivt::getQzzno, requestParam.getJSONArray("cons").toJSONString()) .set(Deliverycachepointivt::getPoint_status, "04") .set(Deliverycachepointivt::getUpdate_optid, SecurityUtils.getCurrentUserId()) .set(Deliverycachepointivt::getUpdate_optname, SecurityUtils.getCurrentNickName()) @@ -609,17 +622,11 @@ public class CutTrussTask extends AbstractAcsTask { if (StrUtil.isEmpty(delivery_point.getString("vehicle_code"))) { throw new BadRequestException("点位:" + delivery_point.getString("point_code") + "载具号为空!"); } - // 子卷号 - IPdmBiSlittingproductionplanService planBean = SpringContextHolder.getBean(IPdmBiSlittingproductionplanService.class); - List cons = new ArrayList<>(); - if (ObjectUtil.isNotEmpty(jsonTask.getString("vehicle_code"))) { - List plans = planBean.getByQzzNo(jsonTask.getString("vehicle_code")); - cons = plans.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList()); - } form.put("vehicle_code2", delivery_point.getString("vehicle_code")); + // 子卷号 (不能通过气胀轴编码获取) form.put("vehicle_code", jsonTask.getString("vehicle_code")); form.put("task_type", "010401"); - form.put("cons", cons); + form.put("cons", jsonTask.getString("vehicle_code")); form.put("product_area", delivery_point.getString("product_area")); cutConveyorTask.createTask(form); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PaperTrussTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PaperTrussTask.java index 36cece66c..ac5755eac 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PaperTrussTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PaperTrussTask.java @@ -9,7 +9,9 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.point.dao.SchBasePoint; import org.nl.b_lms.sch.point.dao.StIvtShaftivt; +import org.nl.b_lms.sch.point.service.IschBasePointService; import org.nl.b_lms.sch.point.service.IstIvtShaftivtService; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; @@ -149,6 +151,10 @@ public class PaperTrussTask extends AbstractAcsTask { JSONObject rgv_jo = ivt_shaftivt.query("point_code = '" + task_jo.getString("point_code2") + "'").uniqueResult(0); int have_qzz = rgv_jo.getIntValue("have_qzz"); rgv_jo.put("have_qzz", have_qzz + 1); + if (rgv_jo.getString("point_code").contains("RG_RGV")) { + // 人工RGV不需要记录 + rgv_jo.put("have_qzz", 0); + } ivt_shaftivt.update(rgv_jo); // 判断是不是暂存架,需要清除库存 if (task_jo.getString("point_code1").contains("CPZC")) { @@ -157,6 +163,8 @@ public class PaperTrussTask extends AbstractAcsTask { cpzc_jo.put("qzz_size", ""); cpzc_jo.put("qzz_generation", ""); cpzc_jo.put("have_qzz", "0"); + cpzc_jo.put("container_name1", ""); + cpzc_jo.put("container_name2", ""); ivt_shaftivt.update(cpzc_jo); } } @@ -186,6 +194,9 @@ public class PaperTrussTask extends AbstractAcsTask { JSONObject jo2 = WQLObject.getWQLObject("pdm_bi_slittingproductionplan").query("container_name = '" + container_name2 + "' AND is_delete = '0'").uniqueResult(0); cut_rows.add(jo2); } + if (cut_rows.size() == 0) { + throw new BadRequestException("分切计划不能为空"); + } JSONObject in_jo = WQLObject.getWQLObject("sch_base_point").query("point_code = '" + task_jo.getString("point_code2") + "'").uniqueResult(0); String vehicle_code = in_jo.getString("vehicle_code"); JSONObject confirm_jo = new JSONObject(); @@ -201,6 +212,7 @@ public class PaperTrussTask extends AbstractAcsTask { if ("010607".equals(task_type)) { String point_code2 = task_jo.getString("point_code2"); JSONObject goal_point2 = ivt_shaftivt.query("point_code = '" + point_code2 + "'").uniqueResult(0); + String product_area = task_jo.getString("product_area"); if (ObjectUtil.isNotEmpty(goal_point2)) { JSONObject request_param = task_jo.getJSONObject("request_param"); String temp = request_param.getString("temp"); @@ -219,18 +231,54 @@ public class PaperTrussTask extends AbstractAcsTask { goal_point2.put("container_name1", container_name1); goal_point2.put("container_name2", container_name2); ivt_shaftivt.update(goal_point2); + // 判断是不是开启的/CPZC点位,并且点位有托盘码,是的话创建 + if (RenUtils.isOpenTzArea(product_area) && point_code2.contains("CPZC")) { + // 判断对应区域的IN点是不是有托盘,并且托盘是一样的位置 + IschBasePointService pointService = SpringContextHolder.getBean(IschBasePointService.class); + PaperTrussTask paperTrussTask = SpringContextHolder.getBean(PaperTrussTask.class); + SchBasePoint inPoint = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getProduct_area, product_area) + .eq(SchBasePoint::getPoint_type, "6") + .eq(SchBasePoint::getIs_used, "1") + .eq(SchBasePoint::getIs_delete, "0") + .like(SchBasePoint::getRegion_code, "-FQCR")); + if (ObjectUtil.isNotEmpty(inPoint)) { + if (ObjectUtil.isNotEmpty(inPoint.getVehicle_code())) { + // 判断载具是不是同区域 + JSONObject vehicle_jo = WQLObject.getWQLObject("md_pb_vehiclearea").query("vehicle_code = '" + inPoint.getVehicle_code() + "'").uniqueResult(0); + if (vehicle_jo.getString("point_location").equals(point_location)) { + // 创建任务到IN点的任务 + JSONObject jo = new JSONObject(); + jo.put("task_type", "010606"); + jo.put("truss_type", "1"); + jo.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + jo.put("point_code1", goal_point2.getString("point_code")); + jo.put("point_code2", inPoint.getPoint_code()); + JSONObject requestParam = new JSONObject(); + requestParam.put("container_name1", container_name1); + requestParam.put("container_name2", container_name2); + jo.put("request_param", requestParam); + jo.put("vehicle_code", container_name1); + jo.put("product_area", product_area); + jo.put("priority", "3"); + paperTrussTask.createTask(jo); + } + } + } + } } } // 放到暂存架子存放 if ("010610".equals(task_type)) { - String pointCode2 = taskObj.getString("point_code2"); - JSONObject requestParam = taskObj.getJSONObject("request_param"); + String pointCode2 = task_jo.getString("point_code2"); + JSONObject requestParam = task_jo.getJSONObject("request_param"); + log.info("此时暂存架子对应的点位:{}", pointCode2); IstIvtShaftivtService shaftivtService = SpringContextHolder.getBean(IstIvtShaftivtService.class); StIvtShaftivt one = shaftivtService.getOne(new LambdaQueryWrapper().eq(StIvtShaftivt::getPoint_code, pointCode2)); // 设置2是为了标记这里是成品卷不是套好的轴 one.setHave_qzz("2"); one.setQzz_generation(requestParam.getString("have_generation")); - one.setContainer_name1(taskObj.getString("vehicle_code")); + one.setContainer_name1(task_jo.getString("vehicle_code")); shaftivtService.updateById(one); } } @@ -300,8 +348,14 @@ public class PaperTrussTask extends AbstractAcsTask { json.put("create_id", currentUserId); json.put("create_name", currentUsername); json.put("create_time", DateUtil.now()); - json.put("priority", "1"); + if (ObjectUtil.isNotEmpty(form.getString("priority"))) { + json.put("priority", form.getString("priority")); + } else { + json.put("priority", "1"); + } + json.put("acs_task_type", "9"); + json.put("remark", form.getString("remark")); json.put("response_param", form.getString("truss_type")); json.put("request_param", form.getString("request_param")); WQLObject.getWQLObject("SCH_BASE_Task").insert(json); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PaperTubeTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PaperTubeTask.java index 07bcae5aa..f2968bc35 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PaperTubeTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PaperTubeTask.java @@ -127,7 +127,11 @@ public class PaperTubeTask extends AbstractAcsTask { JSONObject rgv_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '5' AND product_area = '" + product_area + "'").uniqueResult(0); //判断是否存在未完成的成品下卷任务 JSONObject container_jo = WQLObject.getWQLObject("sch_base_task").query("task_type = '010605' AND product_area = '"+product_area+"' AND task_status < '07' AND is_delete = '0'").uniqueResult(0); - if ("0".equals(have_qzz) && "0".equals(rgv_jo.getString("have_qzz")) && ObjectUtil.isEmpty(container_jo)) { + + if (("0".equals(have_qzz) && "0".equals(rgv_jo.getString("have_qzz")) && ObjectUtil.isEmpty(container_jo)) + || (ObjectUtil.isNotEmpty(container_jo) && ( + container_jo.getString("point_code2").contains("RG_RGV") + || container_jo.getString("point_code2").contains("CPZC")))) { PaperTrussTask paperTrussTask = SpringContextHolder.getBean(PaperTrussTask.class); // 创建桁架任务搬运一个符合的气涨轴 JSONObject jo = new JSONObject(); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/QST_IVT_RAWASSISTISTOR.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/QST_IVT_RAWASSISTISTOR.wql index 92d14a644..30df8d0a7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/QST_IVT_RAWASSISTISTOR.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/QST_IVT_RAWASSISTISTOR.wql @@ -225,7 +225,7 @@ OPTION 输入.end_time <> "" ios.input_time <= 输入.end_time ENDOPTION - limit 0,10000 + limit 0,50000 ENDSELECT ENDQUERY ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql index 2e17cd520..11004b117 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql @@ -405,7 +405,7 @@ ENDOPTION GROUP BY sub.sale_order_name,spec,ios.iostorinv_id,dtl.iostorinvdtl_id - limit 0,10000 + limit 0,50000 ENDSELECT ENDQUERY ENDIF @@ -685,7 +685,7 @@ OPTION 输入.bill_status <> "" dis.work_status <= 输入.bill_status ENDOPTION - order by dis.box_no,dis.pcsn limit 0,10000 + order by dis.box_no,dis.pcsn limit 0,50000 ENDSELECT ENDQUERY ENDIF diff --git a/lms/nladmin-system/src/test/java/org/nl/init/EventTest.java b/lms/nladmin-system/src/test/java/org/nl/init/EventTest.java index aac464805..6e00c07a9 100644 --- a/lms/nladmin-system/src/test/java/org/nl/init/EventTest.java +++ b/lms/nladmin-system/src/test/java/org/nl/init/EventTest.java @@ -1,6 +1,8 @@ package org.nl.init; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.extern.slf4j.Slf4j; @@ -16,6 +18,8 @@ import org.nl.b_lms.pdm.subpackagerelation.dao.mapper.PdmBiSubpackagerelationMap import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.dao.mapper.SchBasePointMapper; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.tasks.first_floor_area.*; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService; import org.nl.common.enums.ContainerLevelEnum; @@ -25,6 +29,9 @@ import org.nl.system.service.param.ISysParamService; import org.nl.wms.pdm.ivt.deliverycache.service.IDeliverycachepointivtService; import org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt; import org.nl.wms.pdm.ivt.deliverycache.service.dto.DeliveryConDto; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.slf4j.Marker; +import org.slf4j.MarkerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -69,11 +76,34 @@ public class EventTest { @Autowired private IDeliverycachepointivtService deliverycachepointivtService; + @Autowired + private IschBaseTaskService taskService; + + private static final Marker ORDER_MARKER = MarkerFactory.getMarker("这是一个标记"); + @Test public void sl() { - List notTaskShaftCache = bstIvtShafttubeivtMapper.getNotTaskShaftCache("3", "4", "0"); - System.out.println(notTaskShaftCache); + String material_key = "material4"; + List zgkTasks = taskService.list(new LambdaQueryWrapper() + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(SchBaseTask::getIs_delete, "0") + .eq(SchBaseTask::getProduct_area, "A4") + .eq(SchBaseTask::getTask_type, "010601") + .eq(SchBaseTask::getPoint_code1, "A4_ZGK")); + // 过滤出这个仓,并且统计数据 + List sameTask = zgkTasks.stream().filter(t -> { + log.info(t.getResponse_param()); + JSONArray requestParam = JSONObject.parseArray(t.getResponse_param()); + for (int i1 = 0; i1 < requestParam.size(); i1++) { + JSONObject requestParamJSONObject = requestParam.getJSONObject(i1); + if (("material" + requestParamJSONObject.getString("device_code")).equals(material_key)) { + return true; + } + } + return false; + }).collect(Collectors.toList()); + System.out.println(sameTask.size()); } @Test @@ -86,6 +116,7 @@ public class EventTest { .qzzSize("6") .sortSeq("1") .build()); + log.info(ORDER_MARKER, "测试标记"); System.out.println(cacheDeliverys); }