From f8081c4949ccd31a076cec8d36b7611e8ec51550 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Sun, 9 Mar 2025 18:02:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=B0=83=E8=AF=95=E4=B8=AD=E5=87=BA?= =?UTF-8?q?=E7=8E=B0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../point/dao/mapper/StIvtShaftivtMapper.java | 3 + .../point/dao/mapper/StIvtShaftivtMapper.xml | 10 + .../point/service/IstIvtShaftivtService.java | 7 + .../impl/StIvtShaftivtServiceImpl.java | 6 + .../wms/ext/acs/rest/WmsToAcsController.java | 5 + .../wms/ext/acs/service/AcsToWmsService.java | 2 +- .../wms/ext/acs/service/WmsToAcsService.java | 7 + .../acs/service/impl/AcsToWmsServiceImpl.java | 155 ++++++++- .../acs/service/impl/WmsToAcsServiceImpl.java | 8 + .../org/nl/wms/pda/mps/rest/InController.java | 7 + .../wms/pda/mps/rest/PaperTubeController.java | 21 ++ .../org/nl/wms/pda/mps/service/InService.java | 6 + .../wms/pda/mps/service/PaperTubeService.java | 21 ++ .../pda/mps/service/impl/InServiceImpl.java | 78 +++++ .../pda/mps/service/impl/OutServiceImpl.java | 64 +--- .../service/impl/PaperTubeServiceImpl.java | 310 +++++++++++++++++- .../mps/service/impl/ShippingServiceImpl.java | 60 ++-- .../java/org/nl/wms/pda/mps/wql/PDA_02.wql | 41 +++ .../mapper/DeliverycachepointivtMapper.xml | 6 + .../DeliverycachepointivtServiceImpl.java | 2 +- .../src/main/java/org/nl/wms/sch/AcsUtil.java | 2 +- .../wms/sch/manage/AutoCallEmptyVehicle.java | 29 +- .../nl/wms/sch/manage/AutoSendOutShaft.java | 75 +++++ .../org/nl/wms/sch/tasks/CutConveyorTask.java | 130 +++++++- .../org/nl/wms/sch/tasks/CutTrussTask.java | 79 ++++- .../org/nl/wms/sch/tasks/PaperTrussTask.java | 38 ++- .../org/nl/wms/sch/tasks/PaperTubeTask.java | 26 +- .../service/impl/ReNbjServiceImpl.java | 2 +- .../sch/tasks/renovation/util/RenUtils.java | 15 + .../java/org/nl/wms/sch/wql/QAUTO_QUERY.wql | 3 +- 30 files changed, 1072 insertions(+), 146 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/StIvtShaftivtMapper.xml create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendOutShaft.java 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 c22174451..d04402f82 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 @@ -3,6 +3,8 @@ package org.nl.b_lms.sch.point.dao.mapper; import org.nl.b_lms.sch.point.dao.StIvtShaftivt; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; + /** * {@code @Description:} 内包间点位库存表(StIvtShaftivt)数据持久层 * {@code @Author:} gbx @@ -12,4 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface StIvtShaftivtMapper extends BaseMapper { + List getCachePointNoTask(String productArea); } 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 new file mode 100644 index 000000000..f386f9509 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/dao/mapper/StIvtShaftivtMapper.xml @@ -0,0 +1,10 @@ + + + + + + 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 c2b94a587..455ed01a4 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 @@ -3,6 +3,7 @@ package org.nl.b_lms.sch.point.service; import org.nl.b_lms.sch.point.dao.StIvtShaftivt; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; import java.util.Map; import java.util.Set; @@ -52,6 +53,12 @@ public interface IstIvtShaftivtService extends IService { void deleteAll(Set ids); + /** + * 获取该区域可用的子卷暂存架 + * @param productArea + * @return + */ + List getCachePointNoTask(String productArea); } 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 e98fe271c..97694eb8a 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 @@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.nl.common.domain.query.PageQuery; import javax.annotation.Resource; +import java.util.List; import java.util.Map; import java.util.Set; @@ -81,6 +82,11 @@ public class StIvtShaftivtServiceImpl extends ServiceImpl getCachePointNoTask(String productArea) { + return stIvtShaftivtMapper.getCachePointNoTask(productArea); + } + /** * 获取实体基础信息 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/WmsToAcsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/WmsToAcsController.java index c2246dfde..3bdf60d97 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/WmsToAcsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/WmsToAcsController.java @@ -145,4 +145,9 @@ public class WmsToAcsController { public ResponseEntity querydeviceOne(@RequestBody JSONObject jo) { return new ResponseEntity<>(wmsToAcsService.queryBoxWeigh(jo), HttpStatus.OK); } + @PostMapping("/queryRGVStatus") + @Log(value = "查询RGV状态", isInterfaceLog = true, interfaceLogType = InterfaceLogType.LMS_TO_ACS) + public ResponseEntity queryRGVStatus(@RequestBody JSONObject jo) { + return new ResponseEntity<>(wmsToAcsService.queryRGVStatus(jo), HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index ff3531279..6dbbe188a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -94,7 +94,7 @@ public interface AcsToWmsService { JSONObject sendCBZInfo(JSONObject whereJson); /** - * 2、反馈尺寸;3、申请放货;4、申请取货;6、套轴申请;7、套轴完成;8、拔轴完成;9、反馈重量 + * 2、反馈尺寸;3、申请放货;4、申请取货;6、套轴申请;7、套轴完成;8、拔轴完成;9、反馈重量;10、扫码异常放货到人工RGV * @param whereJson * @return */ 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 340e21ff8..da90237aa 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 @@ -153,4 +153,11 @@ public interface WmsToAcsService { * @return JSONObject */ JSONObject queryBoxWeigh(JSONObject jo); + + /** + * 查询RGV状态 + * @param jo + * @return + */ + JSONObject queryRGVStatus(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 19152dc68..2eb8f691e 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 @@ -23,7 +23,9 @@ import org.nl.b_lms.pda.service.ProductOutTwoService; 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.point.dao.BstIvtPackageinfoivt; +import org.nl.b_lms.sch.point.dao.StIvtCutpointivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; +import org.nl.b_lms.sch.point.service.IstIvtCutpointivtService; 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.TwoBoxExcepTask; @@ -40,6 +42,7 @@ import org.nl.common.enums.NoticeTypeEnum; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.CodeUtil; import org.nl.common.utils.MapOf; +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; @@ -162,6 +165,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Autowired private ProductOutTwoService productOutTwoService; + private final IstIvtCutpointivtService cutpointivtService; + /** * task_id:任务标识 @@ -1092,9 +1097,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Override public JSONObject sendGetGoalStruct(JSONObject whereJson) { log.info("sendGetGoalStruct请求参数为--------------------------:" + whereJson.toString()); - //type:2、反馈尺寸;3、申请放货;4、申请取货;6、套轴申请;7、套轴完成;8、拔轴完成;9、反馈重量 + //type:2、反馈尺寸;3、申请放货;4、申请取货;6、套轴申请;7、套轴完成;8、拔轴完成;9、反馈重量;10、扫码异常放货到人工RGV String type = whereJson.getString("type"); String device_code = whereJson.getString("device_code"); + WQLObject ivt_shaftivt = WQLObject.getWQLObject("st_ivt_shaftivt"); JSONObject result = new JSONObject(); //桁架任务 (气胀轴任务) @@ -1113,6 +1119,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } else { product_area = task_jo.getString("product_area"); } + boolean openTzArea = RenUtils.isOpenTzArea(product_area); + boolean openTempArea = RenUtils.isOpenTempArea(product_area); // hint: 不在设置公共位置 String public_area = product_area; // if (product_area.equals("A1") || product_area.equals("A2")) { @@ -1179,9 +1187,32 @@ 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 = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '7' AND product_area = '" + product_area + "'").uniqueResult(0); + 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); + } jo.put("point_code2", fhd_jo.getString("point_code")); - JSONObject qhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '6' AND product_area = '" + product_area + "'").uniqueResult(0); + 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); + } jo.put("point_code3", qhd_jo.getString("point_code")); jo.put("point_code4", cbz_jo.getString("point_code")); jo.put("product_area", product_area); @@ -1297,6 +1328,31 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { result.put("message", "反馈成功!"); return result; } else { + JSONObject jo = new JSONObject(); + jo.put("task_type", "010606"); + JSONObject tggw_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("product_area = '" + product_area + "' AND point_type = '4'").uniqueResult(0); + jo.put("task_id", IdUtil.getSnowflake(1,1).nextIdStr()); + jo.put("task_code", IdUtil.getSnowflake(1,1).nextIdStr()); + jo.put("point_code1", tggw_jo.getString("point_code")); + jo.put("point_code2", in_jo.getString("point_code")); + jo.put("product_area", product_area); + jo.put("vehicle_code", task_resq.getString("container_name1")); + jo.put("task_status", TaskStatusEnum.SURE_START.getCode()); + jo.put("material_code", task_resq.getString("container_name1")); + JSONObject request_param = new JSONObject(); + request_param.put("temp", "2"); + request_param.put("need_size", cbz_size); + request_param.put("need_generation", cbz_generation); + request_param.put("need_location", point_location); + request_param.put("container_name1", task_resq.getString("container_name1")); + request_param.put("container_name2", task_resq.getString("container_name2")); + jo.put("request_param", request_param.toString()); + jo.put("handle_class", PaperTrussTask.class.getName()); + jo.put("create_time", DateUtil.now()); + jo.put("priority", "1"); + jo.put("acs_task_type", "9"); + jo.put("response_param", "1"); + WQLObject.getWQLObject("SCH_BASE_Task").insert(jo); noticeService.createNotice("套轴气胀轴缓存架空位不足", "套轴气胀轴缓存架空位不足" , NoticeTypeEnum.WARN.getCode()); result.put("status", HttpStatus.OK.value()); @@ -1354,9 +1410,15 @@ 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")) { + return result; + } task_jo.put("point_code2", struct_jo.getString("point_code")); } if ("010606".equals(task_jo.getString("task_type"))) { + if(!task_jo.getString("point_code1").contains("FHD")) { + return result; + } task_jo.put("point_code1", struct_jo.getString("point_code")); } @@ -1409,21 +1471,54 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { //todo:创建桁架任务搬运一个符合的气涨轴 JSONObject jo = new JSONObject(); jo.put("task_type", "010602"); - JSONObject qhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '6' AND product_area = '" + public_area + "'").uniqueResult(0); + 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"; + } jo.put("point_code1", qhd_jo.getString("point_code")); jo.put("point_code2", cbz_jo.getString("point_code")); - jo.put("truss_type", "8"); jo.put("vehicle_code", tggw_jo.getString("container_name1") + "-qzz"); jo.put("product_area", product_area); JSONObject tas_param = new JSONObject(); tas_param.put("need_size", tggw_jo.getString("qzz_size")); tas_param.put("need_generation", tggw_jo.getString("qzz_generation")); + tas_param.put("flag", flag); jo.put("request_param", tas_param.toString()); paperTrussTask.createTask(jo); } } } } + // 扫码异常放货到人工RGV + if ("10".equals(type)) { + 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("remark", "桁架异常自动到人工RGV"); + task_jo.put("update_time", DateUtil.now()); + task_jo.put("update_optid", SecurityUtils.getCurrentUserId()); + task_jo.put("update_optname", SecurityUtils.getCurrentNickName()); + task_jo.put("task_status", TaskStatusEnum.FINISHED.getCode()); + WQLObject.getWQLObject("sch_base_task").update(task_jo); + } WQLObject.getWQLObject("sch_base_task").update(task_jo); result.put("status", HttpStatus.OK.value()); result.put("device_code", struct_jo.getString("point_code")); @@ -1472,12 +1567,24 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject jo = new JSONObject(); jo.put("task_type", "010603"); jo.put("point_code1", cbz_jo.getString("point_code")); - // A1_FHD_01 - JSONObject fhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '7' AND product_area = '" + product_area + "'").uniqueResult(0); + 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"); + } 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"); - jo.put("truss_type", "8"); JSONObject request_param = new JSONObject(); request_param.put("have_size", cbz_size); request_param.put("have_generation", cbz_generation); @@ -1536,15 +1643,19 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { String product_area = task_jo.getString("product_area"); //判断对应的内包间区域是否启用 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") && pack_jo.getString("is_used").equals("1")) { + if ((task_jo.getString("task_type").equals("010401") || task_jo.getString("task_type").equals("010409")) && pack_jo.getString("is_used").equals("1")) { String vehicle_code = task_jo.getString("vehicle_code2"); + // 托盘属性 JSONObject vehicle_jo = WQLObject.getWQLObject("md_pb_vehiclearea").query("vehicle_code = '" + vehicle_code + "'").uniqueResult(0); + // 托盘所对应的区域位置 String point_location = vehicle_jo.getString("point_location"); + // in点位置 JSONObject in_jo = WQLObject.getWQLObject("sch_base_point").query("product_area = '" + product_area + "' AND point_type = '6'").uniqueResult(0); //查询呼叫时间最早的分切计划 + // 1:套管工位有轴,切计划的位置符合 + // 2:010606 的半条任务:通过任务material_code字段判断分切计划对应的设备的位置是否符合。(也就是直接到达分切IN点的半条任务) JSONObject plan_jo = WQL.getWO("PDA_02").addParam("flag", "23").addParam("point_location", point_location) .addParam("product_area", product_area).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(plan_jo)) { //将载具号维护到IN口 in_jo.put("vehicle_code", vehicle_code); @@ -1604,14 +1715,15 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { /** * 判断等待 - * @param product_area - * @param vehicle_jo + * @param product_area 区域:A1-4 + * @param vehicle_jo 载具对象 * @return */ private boolean judgeWait(String product_area, JSONObject vehicle_jo) { boolean need_wait = false; + // 纸管库的任务 JSONArray task_rows = WQL.getWO("QAUTO_QUERY").addParam("flag", "8").addParam("product_area", product_area).process().getResultJSONArray(0); - //取当前 + //取当前(托盘的区域) String point_location = vehicle_jo.getString("point_location"); String task_num = ""; if ("0".equals(point_location)) { @@ -1639,6 +1751,20 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } } + // 判断当前托盘区域位置与当前即将套轴的位置是否一致,一致则等待 + if (RenUtils.isOpenTempArea(product_area) && !need_wait) { + JSONObject tggw_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '4' AND product_area = '" + product_area + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(tggw_jo.getString("container_name1"))) { + return need_wait; + } + PdmBiSlittingproductionplan plan = slittingproductionplanService.getByContainerName(tggw_jo.getString("tube_code1")); + // 查询设备 + StIvtCutpointivt device = cutpointivtService.getPintByExtCode(plan.getResource_name(), false); + if (device.getPoint_location().equals(point_location)) { + need_wait = true; + } + } + return need_wait; } @@ -1651,6 +1777,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { throw new BadRequestException("输入的设备号不能为空!"); } + // hint: 上报的时候任务不在导致上报失败 //查询该设备对应的输送线点位 JSONObject deliver_jo = WQLObject.getWQLObject("st_ivt_deliverypointivt").query("point_code = '" + device_code + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(deliver_jo)) { @@ -1658,7 +1785,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { //判断该点位是否存在未完成的任务 if (Integer.valueOf(String.valueOf(dtl_type)) % 2 != 0) { //如果为分切输送线上料位,判断该点位是否存在未完成的任务类型为分切输送出的任务 - JSONArray left_arr = WQLObject.getWQLObject("sch_base_task").query("task_type = '010401' AND point_code1 = '" + device_code + "' AND is_delete = '0' AND task_status < '07'").getResultJSONArray(0); + JSONArray left_arr = WQLObject.getWQLObject("sch_base_task").query("point_code1 = '" + device_code + "' AND (task_type = '010401' OR task_type = '010409') AND is_delete = '0' AND task_status < '07'").getResultJSONArray(0); if (ObjectUtil.isEmpty(left_arr)) { log.info("shipDeviceUpdate请求参数:---------------------------------------------" + whereJson.toString() + ",ACS上报无货且此时LMS该点位没有任何任务!"); JSONObject result = new JSONObject(); 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 902edad25..6ce64d629 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 @@ -517,4 +517,12 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { } return result; } + + @Override + public JSONObject queryRGVStatus(JSONObject jo) { + String api = "api/wms/queryRGVStatus"; + 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/InController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/InController.java index be52d5ea5..69e0c1c4c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/InController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/InController.java @@ -1,5 +1,6 @@ package org.nl.wms.pda.mps.rest; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -55,5 +56,11 @@ public class InController { public ResponseEntity conveyConfirm(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(inService.conveyConfirm(whereJson), HttpStatus.OK); } + @PostMapping("/cutUpShaft") + @Log("分切上轴") + @SaIgnore + public ResponseEntity cutUpShaft(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(inService.cutUpShaft(whereJson), HttpStatus.OK); + } } 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 c57bdbfa5..d362e9342 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 @@ -1,5 +1,6 @@ package org.nl.wms.pda.mps.rest; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -51,13 +52,33 @@ public class PaperTubeController { @PostMapping("/shaftGoBack") @Log("气胀轴回库") + @SaIgnore public ResponseEntity shaftGoBack(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(paperTubeService.shaftGoBack(whereJson), HttpStatus.OK); } @PostMapping("/callPaperShaft") @Log("一期新呼叫送轴") + @SaIgnore public ResponseEntity callPaperShaft(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(paperTubeService.callPaperShaft(whereJson), HttpStatus.OK); } + @PostMapping("/callNeedShaft") + @Log("一期呼叫空轴(气胀轴库->人工RGV)") + @SaIgnore + public ResponseEntity callNeedShaft(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(paperTubeService.callNeedShaft(whereJson), HttpStatus.OK); + } + @PostMapping("/labourShaftBack") + @Log("一期人工送轴(人工RGV->分切车间)") + @SaIgnore + public ResponseEntity labourShaftBack(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(paperTubeService.labourShaftBack(whereJson), HttpStatus.OK); + } + @PostMapping("/remainShaftBack") + @Log("一期余轴退回(分切车间->人工RGV/气胀轴库)") + @SaIgnore + public ResponseEntity remainShaftBack(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(paperTubeService.remainShaftBack(whereJson), HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/InService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/InService.java index c831ecfca..ecd7a392a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/InService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/InService.java @@ -44,4 +44,10 @@ public interface InService { */ JSONObject conveyConfirm(JSONObject whereJson); + /** + * 分切上轴 + * @param whereJson + * @return + */ + JSONObject cutUpShaft(JSONObject whereJson); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/PaperTubeService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/PaperTubeService.java index dc26d8d5d..229dbd432 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/PaperTubeService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/PaperTubeService.java @@ -50,4 +50,25 @@ public interface PaperTubeService { * @return */ JSONObject callPaperShaft(JSONObject param); + + /** + * 人工送轴 + * @param whereJson + * @return + */ + JSONObject labourShaftBack(JSONObject whereJson); + + /** + * 呼叫空轴 + * @param param + * @return + */ + JSONObject callNeedShaft(JSONObject param); + + /** + * 剩余轴退回 + * @param param + * @return + */ + JSONObject remainShaftBack(JSONObject param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/InServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/InServiceImpl.java index a43fe7be9..6379987c7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/InServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/InServiceImpl.java @@ -6,11 +6,16 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; +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.basedata.st.service.impl.UserAreaServiceImpl; import org.nl.wms.pda.mps.service.InService; +import org.nl.wms.pdm.ivt.deliverycache.service.IDeliverycachepointivtService; +import org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.tasks.CutConveyorTask; import org.nl.wms.sch.tasks.CutTrussTask; @@ -19,6 +24,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; @Service @RequiredArgsConstructor @@ -26,6 +34,8 @@ import java.util.HashMap; public class InServiceImpl implements InService { private final CutTrussTask cutTrussTask; + private final IDeliverycachepointivtService deliverycachepointivtService; + private final IschBaseTaskService taskService; @Override public JSONObject queryMaterialInfo(JSONObject whereJson) { @@ -161,4 +171,72 @@ public class InServiceImpl implements InService { jo.put("message", "操作成功!"); return jo; } + + @Override + public JSONObject cutUpShaft(JSONObject param) { + // param: area, device_code, point_code, left_spec, right_spec + String area = param.getString("area"); + String device_code = param.getString("device_code"); + String point_code = param.getString("point_code"); + String left_spec = param.getString("left_spec"); + String right_spec = param.getString("right_spec"); + List specs = Stream.of(left_spec, right_spec).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList()); + //查询该点位对应的机台编号 + 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("未查询到对应的分切机!"); + } + + if (!StrUtil.equals(device_code, cut_ivt.getString("ext_code"))) { + throw new BadRequestException("请选择和分切计划相同的设备点位进行上空轴!"); + } + // todo: 判断是否存在任务 + List tasks = taskService.checkHaveTask(point_code); + if (tasks.size() > 0) { + throw new BadRequestException("该点位已经创建过任务"); + } + + // 获取管芯的点位 + // 套好纸管的空轴点位 + Deliverycachepointivt dec = null; + if (specs.size() > 0) { + // hint: 虚拟分切计划不动,直到搬运成功后清除点位时删除(*) + if (specs.size() == 1) { + String tubeCode = specs.get(0); + // 找单根单管 + List deliverycachepointivts = deliverycachepointivtService.getOneConformShaft( + tubeCode, + cut_ivt.getString("product_area"), + cut_ivt.getString("point_location")); + if (deliverycachepointivts.size() > 0) { + dec = deliverycachepointivts.get(0); + } + } else { + // 找单根双管 + List deliverycachepointivts = deliverycachepointivtService.getMoreConformShaft( + left_spec, + right_spec, + cut_ivt.getString("product_area"), + cut_ivt.getString("point_location")); + if (deliverycachepointivts.size() > 0) { + dec = deliverycachepointivts.get(0); + } + } + } + if (dec == null) { + throw new BadRequestException("不存在相应管芯的点位!"); + } + JSONObject jo = new JSONObject(); + jo.put("point_code1", dec.getPoint_code()); + jo.put("point_code2", point_code); + jo.put("vehicle_code", dec.getQzzno()); + jo.put("product_area", area); + jo.put("task_type", "010405"); + 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/OutServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/OutServiceImpl.java index a19e7cc38..89857eb6e 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 @@ -222,8 +222,8 @@ public class OutServiceImpl implements OutService { // 子卷出站、空轴进站的任务 jo.put("point_code1", dec.getPoint_code()); jo.put("point_code2", point_code); - jo.put("point_code3", cachePoint.getPoint_code()); - jo.put("point_code4", point_code); + jo.put("point_code3", point_code); + jo.put("point_code4", cachePoint.getPoint_code()); jo.put("vehicle_code2", cut_qzzno); jo.put("vehicle_code", dec.getQzzno()); jo.put("task_type", "010403"); @@ -267,8 +267,8 @@ public class OutServiceImpl implements OutService { // 子卷出站、空轴进站的任务 jo.put("point_code1", dec.getPoint_code()); jo.put("point_code2", point_code); - jo.put("point_code3", empty_vehicle.getString("point_code")); - jo.put("point_code4", point_code); + jo.put("point_code3", point_code); + jo.put("point_code4", empty_vehicle.getString("point_code")); jo.put("vehicle_code", dec.getQzzno()); jo.put("vehicle_code2", cut_qzzno); jo.put("task_type", "010403"); @@ -282,7 +282,7 @@ public class OutServiceImpl implements OutService { // jo.put("point_code2", ""); if (isOpen) { if (ObjectUtil.isNotEmpty(dec)) { - jo.put("point_code3", ""); + jo.put("point_code4", ""); } } else { jo.put("point_code2", ""); @@ -332,11 +332,11 @@ public class OutServiceImpl implements OutService { throw new BadRequestException("请求失败,中转架与靠近分切机的输送线移栽台均没空载具位置,如果远离分切机有位置,则先手动横移!"); } } else { - jo.put("point_code3", empty_vehicle.getString("point_code")); + jo.put("point_code4", empty_vehicle.getString("point_code")); } jo.put("point_code1", delivery_point.getString("point_code")); jo.put("point_code2", point_code); - jo.put("point_code4", point_code); + jo.put("point_code3", point_code); jo.put("vehicle_code", delivery_point.getString("qzzno")); jo.put("vehicle_code2", cut_qzzno); jo.put("product_area", cut_ivt.getString("product_area")); @@ -367,56 +367,6 @@ public class OutServiceImpl implements OutService { return result; } - public boolean doCheckUpShaft(String order_type, JSONObject cut_ivt, String parent_container_name, String restruct_container_name, - String resource_name, String split_group, String point_code) { - // 这里还需要多加一步判断,有没有下一趟分切计划,需要在缓存架找到对应的管芯。 - List allPlans = slittingproductionplanService.list(new LambdaQueryWrapper() - .eq(order_type.equals("1"), PdmBiSlittingproductionplan::getParent_container_name, parent_container_name) - .eq(order_type.equals("2"), PdmBiSlittingproductionplan::getRestruct_container_name, restruct_container_name) - .eq(PdmBiSlittingproductionplan::getResource_name, resource_name) - .ne(PdmBiSlittingproductionplan::getSplit_group, split_group)); - if (allPlans.size() > 0) { - List nextPlan = null; - // 判断当前是分切机的什么位置(上/下) - if (cut_ivt.getString("up_point_code").equals(point_code)) { - // 上轴 - nextPlan = allPlans.stream().filter(p -> "1".equals(p.getUp_or_down())).collect(Collectors.toList()); - } else { - // 下轴 - nextPlan = allPlans.stream().filter(p -> "2".equals(p.getUp_or_down())).collect(Collectors.toList()); - } - if (nextPlan.size() > 0) { - if (nextPlan.size() == 1) { - PdmBiSlittingproductionplan onePlan = nextPlan.get(0); - // 找单根单管 - List deliverycachepointivts = deliverycachepointivtService.getOneConformShaft( - onePlan.getPaper_tube_or_FRP().equals("1") ? onePlan.getPaper_tube_material() : onePlan.getFRP_material(), - cut_ivt.getString("product_area"), - cut_ivt.getString("point_location")); - if (deliverycachepointivts.size() > 0) { - Deliverycachepointivt dec = deliverycachepointivts.get(0); - - } - } else { - PdmBiSlittingproductionplan onePlan = nextPlan.get(0); - PdmBiSlittingproductionplan twoPlan = nextPlan.get(1); - // 找单根双管 - List deliverycachepointivts = deliverycachepointivtService.getMoreConformShaft( - onePlan.getPaper_tube_or_FRP().equals("1") ? onePlan.getPaper_tube_material() : onePlan.getFRP_material(), - twoPlan.getPaper_tube_or_FRP().equals("1") ? twoPlan.getPaper_tube_material() : twoPlan.getFRP_material(), - cut_ivt.getString("product_area"), - cut_ivt.getString("point_location")); - if (deliverycachepointivts.size() > 0) { - Deliverycachepointivt dec = deliverycachepointivts.get(0); - - } - } - - } - } - return true; - } - @Override @Transactional(rollbackFor = Exception.class) public JSONObject disuseConfirm(JSONObject whereJson) { 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 9dd8c6529..fa727df13 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 @@ -20,16 +20,25 @@ import org.nl.common.utils.TaskUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.pda.mps.service.PaperTubeService; +import org.nl.wms.pdm.ivt.deliverycache.service.IDeliverycachepointivtService; +import org.nl.wms.pdm.ivt.deliverycache.service.dao.Deliverycachepointivt; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.tasks.CutConveyorTask; +import org.nl.wms.sch.tasks.CutTrussTask; import org.nl.wms.sch.tasks.PaperTrussTask; +import org.nl.wms.sch.tasks.renovation.util.RenUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -41,6 +50,9 @@ public class PaperTubeServiceImpl implements PaperTubeService { private final IschBaseTaskService taskService; private final IstIvtCutpointivtService cutpointivtService; private final IPdmBiSlittingproductionplanService pdmBiSlittingproductionplanService; + private final CutConveyorTask cutConveyorTask; + private final CutTrussTask cutTrussTask; + private final IDeliverycachepointivtService deliverycachepointivtService; @Override public JSONObject queryDeviceList(JSONObject whereJson) { @@ -165,20 +177,42 @@ public class PaperTubeServiceImpl implements PaperTubeService { if (tasks.size() > 0) { throw new BadRequestException(startPoint + "任务已存在!"); } - // A1_FHD_01 - JSONObject fhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '7' AND product_area = '" + area + "'").uniqueResult(0); + // 判断是否有空位 JSONObject jo = new JSONObject(); + JSONObject fhd_jo; + // 判断是不是3寸的 + if (RenUtils.isOpenTzArea(area) && "3".equals(qzzSize) && RenUtils.isOpenTempArea(area)) { + //查询可用的空点位 + fhd_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6001") + .addParam("need_size", qzzSize) + .addParam("need_generation", qzzGeneration) + .addParam("product_area", 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 = '" + area + "'").uniqueResult(0); + jo.put("truss_type", "8"); + } jo.put("task_type", "010603"); jo.put("point_code1", startPoint); jo.put("point_code2", fhd_jo.getString("point_code")); jo.put("product_area", area); jo.put("vehicle_code", DateUtil.format(DateUtil.date(), "HHmm") + "qzz"); - jo.put("truss_type", "8"); JSONObject request_param = new JSONObject(); request_param.put("have_size", qzzSize); request_param.put("have_generation", qzzGeneration); jo.put("request_param", request_param.toString()); paperTrussTask.createTask(jo); + // 通知RGV进去 + JSONArray action_rows = new JSONArray(); + JSONObject action_jo = new JSONObject(); + action_jo.put("device_code", area + "_RG_RGV"); + action_jo.put("code", "to_command"); + action_jo.put("product_area", area); + action_jo.put("value", "1"); + action_rows.add(action_jo); + wmsToAcsService.action(action_rows); JSONObject result = new JSONObject(); result.put("message", "操作成功!"); return result; @@ -191,6 +225,26 @@ public class PaperTubeServiceImpl implements PaperTubeService { // 纸制筒管|纸管|3英寸|12|650 // 玻璃纤维及其制品|FRP管|6英寸|15-20|1700|阶梯 // 玻璃纤维及其制品|FRP管|6英寸|15|1700|高强 + // param: area, device_code, up_left_size_k,up_right_size_k, up_left_size_v,up_right_size_v + // location, qzz_size, qzz_generation + // 虚拟设备:A1_XNFQ_01 + String area = param.getString("area"); + if (!area.startsWith("A")) { + throw new BadRequestException("该功能只对一期有用!"); + } + doInsertPlan(param); + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "呼叫送轴成功!"); + return res; + } + + /** + * 插入分切计划(提取方法) + * @param param + * @return + */ + public JSONObject doInsertPlan(JSONObject param) { // param: area, device_code, up_left_size_k,up_right_size_k, up_left_size_v,up_right_size_v // location, qzz_size, qzz_generation // 虚拟设备:A1_XNFQ_01 @@ -199,6 +253,17 @@ public class PaperTubeServiceImpl implements PaperTubeService { throw new BadRequestException("该功能只对一期有用!"); } String location = param.getString("location"); + String qzz_size = param.getString("qzz_size"); + Integer number = param.getInteger("qqz_num"); + // 判断还有没有位置(没有就不给创建) + List canUsePoint = deliverycachepointivtService.list(new LambdaQueryWrapper() + .eq(Deliverycachepointivt::getProduct_area, area) + .eq(Deliverycachepointivt::getPoint_location, location) + .eq(Deliverycachepointivt::getIs_used, "1") + .like(Deliverycachepointivt::getCan_size, qzz_size)); + if (canUsePoint.size() < number) { + throw new BadRequestException("该半区该尺寸类型的位置剩余【" + canUsePoint.size() + "】个"); + } String qzz_generation = param.getString("qzz_generation"); StIvtCutpointivt xnDevice = cutpointivtService.getOne(new LambdaQueryWrapper() .eq(StIvtCutpointivt::getPoint_location, location) @@ -211,7 +276,6 @@ public class PaperTubeServiceImpl implements PaperTubeService { } // mes的设备号 String deviceCode = xnDevice.getExt_code(); - Integer number = param.getInteger("qqz_num"); // 当前轴需要的管芯名称 ... String upLeftSizeK = param.getString("up_left_size_k"); String upRightSizeK = param.getString("up_right_size_k"); @@ -305,10 +369,248 @@ public class PaperTubeServiceImpl implements PaperTubeService { pdmBiSlittingproductionplanService.saveBatch(plans); JSONObject res = new JSONObject(); res.put("status", HttpStatus.HTTP_OK); + res.put("plans", plans); res.put("message", "呼叫送轴成功!"); return res; } + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject labourShaftBack(JSONObject param) { + // param: area, device_code, up_left_size_k,up_right_size_k, up_left_size_v,up_right_size_v + // location, qzz_size, qzz_generation + String area = param.getString("area"); + String deviceCode = area + "_RG_RGV"; + List tasks = taskService.checkHaveTask(deviceCode); + if (tasks.size() > 0) { + throw new BadRequestException("该人工RGV存在未完成的任务!"); + } + // 呼叫空托盘 + param.put("qqz_num", "1"); + if (!area.startsWith("A")) { + throw new BadRequestException("该功能只对一期有用!"); + } + // 通知RGV进去 + JSONArray action_rows = new JSONArray(); + JSONObject action_jo = new JSONObject(); + action_jo.put("device_code", deviceCode); + action_jo.put("code", "to_command"); + action_jo.put("product_area", area); + action_jo.put("value", "1"); + action_rows.add(action_jo); + JSONObject action = wmsToAcsService.action(action_rows); + if (!action.getString("status").equals("200")) { + throw new BadRequestException("该区域人工RGV异常!"); + } + String location = param.getString("location"); + String qzz_generation = param.getString("qzz_generation"); + // 插入分切计划 + JSONObject planObj = doInsertPlan(param); + JSONArray plansArray = planObj.getJSONArray("plans"); + List plans = plansArray.toJavaList(PdmBiSlittingproductionplan.class); + // 呼叫空盘 + doCallEmptyVehicle(area, location); + // 创建半条任务,等待空盘横移后触发。 + doCreateTask(area, location, qzz_generation, plans); + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("plans", plans); + res.put("message", "呼叫送轴成功!"); + return res; + } + + @Override + public JSONObject callNeedShaft(JSONObject param) { + // param: area,qzz_size, qzz_generation + String product_area = param.getString("area"); + String need_size = param.getString("qzz_size"); + String qzzGeneration = param.getString("qzz_generation"); + String endPoint = product_area + "_RG_RGV"; + if (!product_area.startsWith("A")) { + throw new BadRequestException("此功能用于一期区域!"); + } + List tasks = taskService.checkHaveTask(endPoint); + if (tasks.size() > 0) { + throw new BadRequestException("该人工RGV存在未完成的任务!"); + } + JSONObject jo = new JSONObject(); + jo.put("task_type", "010602"); + JSONObject qhd_jo; + String flag; + // 判断是不是3寸的 + if (RenUtils.isOpenTzArea(product_area) && "3".equals(need_size) && RenUtils.isOpenTempArea(product_area)) { + //查询可用的空点位 + qhd_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6002") + .addParam("need_size", need_size) + .addParam("need_generation", qzzGeneration) + .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 = '" + product_area + "'").uniqueResult(0); + jo.put("truss_type", "8"); + flag = "2"; + } + jo.put("point_code1", qhd_jo.getString("point_code")); + jo.put("point_code2", endPoint); + jo.put("vehicle_code", "XN-qzz"); + jo.put("product_area", product_area); + JSONObject tas_param = new JSONObject(); + tas_param.put("need_size", need_size); + tas_param.put("need_generation", qzzGeneration); + tas_param.put("flag", flag); + jo.put("request_param", tas_param.toString()); + + // 通知RGV进去 + JSONArray action_rows = new JSONArray(); + JSONObject action_jo = new JSONObject(); + action_jo.put("device_code", endPoint); + action_jo.put("code", "to_command"); + action_jo.put("product_area", product_area); + action_jo.put("value", "1"); + action_rows.add(action_jo); + JSONObject action = wmsToAcsService.action(action_rows); + if (!action.getString("status").equals("200")) { + throw new BadRequestException("该区域人工RGV异常!"); + } + paperTrussTask.createTask(jo); + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "呼叫空轴成功!"); + return res; + } + + @Override + public JSONObject remainShaftBack(JSONObject param) { + // param : point_code、flag、qzz_size、qzz_generation + String pointCode = param.getString("point_code"); + String flag = param.getString("flag"); + String qzzSize = param.getString("qzz_size"); + String qzzGeneration = param.getString("qzz_generation"); + BigDecimal sortSeq; + String area; + String location; + List tasks = taskService.checkHaveTask(pointCode); + if (tasks.size() > 0) { + throw new BadRequestException("当前位置有未完成的任务!"); + } + // 创建桁架任务,到内测输送线,新的任务类型 + Deliverycachepointivt deliverCachePoint = deliverycachepointivtService.getOneByPointCode(pointCode, true); + if (ObjectUtil.isNotEmpty(deliverCachePoint)) { + if (!deliverCachePoint.getPoint_status().equals("03")) { + throw new BadRequestException("该点位在系统中不是气胀轴!"); + } + sortSeq = deliverCachePoint.getSort_seq(); + area = deliverCachePoint.getProduct_area(); + location = deliverCachePoint.getPoint_location(); +// throw new BadRequestException("缓存架点位不存在或者被禁用!"); + } else { + StIvtCutpointivt cutDevice = cutpointivtService.getPintByUpOrDownCode(pointCode, true); + if (ObjectUtil.isEmpty(cutDevice)) { + throw new BadRequestException("分切机设备不存在或被禁用!"); + } + sortSeq = cutDevice.getSort_seq(); + area = cutDevice.getProduct_area(); + location = cutDevice.getPoint_location(); + } + // 查找空盘位 + JSONObject empty_vehicle = WQL.getWO("PDA_02") + .addParam("sort_seq", sortSeq) + .addParam("sql_str", " ORDER BY abs(" + sortSeq + "-sort_seq),point_code") + .addParam("product_area", area) + .addParam("point_location", location) + .addParam("flag", "3001").process().uniqueResult(0); + if (ObjectUtil.isEmpty(empty_vehicle)) { + throw new BadRequestException("没有可用的托盘,等待托盘空闲或者对向横移完毕"); + } + // 创建任务 + JSONObject jo = new JSONObject(); + jo.put("point_code1", pointCode); + jo.put("point_code2", empty_vehicle.getString("point_code")); + jo.put("vehicle_code",empty_vehicle.getString("vehicle_code")); + jo.put("product_area", area); + jo.put("flag", flag); + jo.put("qzz_size", qzzSize); + jo.put("qzz_generation", qzzGeneration); + jo.put("task_type", "010409"); + cutTrussTask.createTask(jo); + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "退回呼叫成功!"); + return res; + } + + + public void doCreateTask(String area, String location, String qzz_generation, List plans) { + PdmBiSlittingproductionplan demoPlan = plans.get(0); + // 获取管芯 + PdmBiSlittingproductionplan leftPlan = plans.stream().filter(p -> p.getLeft_or_right().equals("1")).findFirst().orElse(null); + PdmBiSlittingproductionplan rightPlan = plans.stream().filter(p -> p.getLeft_or_right().equals("2")).findFirst().orElse(null); + JSONObject in_jo = WQLObject.getWQLObject("sch_base_point").query("product_area = '" + area + "' AND point_type = '6'").uniqueResult(0); + // 获取点位 + JSONObject jo = new JSONObject(); + jo.put("task_type", "010606"); + jo.put("task_id", IdUtil.getSnowflake(1,1).nextIdStr()); + jo.put("task_code", IdUtil.getSnowflake(1,1).nextIdStr()); + jo.put("point_code1", area + "_RG_RGV"); + jo.put("point_code2", in_jo.getString("point_code")); + jo.put("product_area", area); + jo.put("vehicle_code", leftPlan.getContainer_name()); + jo.put("material_code", leftPlan.getContainer_name()); + jo.put("task_status", TaskStatusEnum.SURE_START.getCode()); + JSONObject request_param = new JSONObject(); + request_param.put("temp", "2"); + request_param.put("need_size", demoPlan.getQzz_size()); + request_param.put("need_generation", qzz_generation); + request_param.put("need_location", location); + request_param.put("container_name1", ObjectUtil.isNotEmpty(leftPlan) ? leftPlan.getContainer_name() : ""); + request_param.put("container_name2", ObjectUtil.isNotEmpty(rightPlan) ? rightPlan.getContainer_name() : ""); + jo.put("request_param", request_param.toString()); + jo.put("handle_class", PaperTrussTask.class.getName()); + jo.put("create_time", DateUtil.now()); + jo.put("priority", "1"); + jo.put("acs_task_type", "9"); + jo.put("response_param", "1"); + WQLObject.getWQLObject("SCH_BASE_Task").insert(jo); + } + + public void doCallEmptyVehicle(String area, String location) { + JSONObject empty_vehicle = WQL.getWO("PDA_02") + .addParam("sql_str", " ORDER BY point_code") + .addParam("product_area", area) + .addParam("point_location", location) + .addParam("flag", "302").process().uniqueResult(0); + // 创建输送线任务规则:(内测保持空载具、外侧先出的逻辑) + JSONObject form = new JSONObject(); + if (ObjectUtil.isEmpty(empty_vehicle)) { + // todo: 如果还有需要空载具,但是此时这个区域已经没有位置了,创建半条任务,等待载具送达时候,触发。 + if (RenUtils.isOpenTzArea(area)) { + JSONObject tips = new JSONObject(); + tips.put("product_area", area); + tips.put("point_location", location); + form.put("point_code1", ""); + form.put("vehicle_code2", ""); + form.put("task_status", TaskStatusEnum.SURE_END.getCode()); + form.put("tips", tips); + } else { + return ; + } + } else { + form.put("point_code1", empty_vehicle.getString("point_code")); + form.put("vehicle_code2", empty_vehicle.getString("vehicle_code")); + if (StrUtil.isEmpty(empty_vehicle.getString("vehicle_code"))) { + throw new BadRequestException("点位:" + empty_vehicle.getString("point_code") + "载具号为空!"); + } + } + //查询该区域点位类型为出口的点位 + JSONObject ss_jo = WQLObject.getWQLObject("sch_base_point").query("product_area = '" + area + "' AND point_type = '7'").uniqueResult(0); + form.put("point_code2", ss_jo.getString("point_code")); + form.put("task_type", "010401"); + form.put("product_area", area); + cutConveyorTask.createTask(form); + } + @Override public JSONObject queryPaperMaterial(JSONObject whereJson) { String material_code = whereJson.getString("material_code"); 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 27bdf6ff6..92d36cccc 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 @@ -102,6 +102,7 @@ public class ShippingServiceImpl implements ShippingService { @Transactional(rollbackFor = Exception.class) public JSONObject confirm(JSONObject whereJson) { // todo: 输送线配送套好轴的气胀轴到分切车间(分切机对面的移栽台位置-这里需要注意,任务完成之后需要创建桁架任务挪到空轴取轴位) + JSONObject jo = new JSONObject(); // 分切计划 JSONArray rows = whereJson.getJSONArray("cut_rows"); // 载具号 @@ -181,37 +182,41 @@ public class ShippingServiceImpl implements ShippingService { JSONObject cut_jo = WQLObject.getWQLObject("st_ivt_cutpointivt").query("ext_code = '" + resource_name + "'").uniqueResult(0); String product_area = cut_jo.getString("product_area"); String point_location = cut_jo.getString("point_location"); - + boolean openTzArea = RenUtils.isOpenTzArea(product_area); //判断该气涨轴对应的分切计划是否呼叫,如果没有呼叫不允许配送 //判断该接口是否需要卡MES是否呼叫 - JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'callNextAssAndMomRoll'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(back_jo) && "1".equals(back_jo.getString("is_back"))) { - String product_areas = back_jo.getString("product_area"); - if (StrUtil.isNotEmpty(product_areas) && product_areas.contains(product_area)) { - for (int i = 0; i < plan.size(); i++) { - JSONObject plan_jos = plan.getJSONObject(i); - String is_call = plan_jos.getString("is_call"); - if (StrUtil.equals("0", is_call)) { - throw new BadRequestException("子卷号为:" + plan_jos.getString("container_name") + "的分切计划未呼叫,不允许进行配送!"); + if (openTzArea) { + JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'callNextAssAndMomRoll'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(back_jo) && "1".equals(back_jo.getString("is_back"))) { + String product_areas = back_jo.getString("product_area"); + if (StrUtil.isNotEmpty(product_areas) && product_areas.contains(product_area)) { + for (int i = 0; i < plan.size(); i++) { + JSONObject plan_jos = plan.getJSONObject(i); + String is_call = plan_jos.getString("is_call"); + if (StrUtil.equals("0", is_call)) { + throw new BadRequestException("子卷号为:" + plan_jos.getString("container_name") + "的分切计划未呼叫,不允许进行配送!"); + } } } } } - //判断当前输送线上是否超过最大负荷任务数量组3组 - JSONArray cut_rows = WQL.getWO("PDA_02") - .addParam("flag", "13") - .addParam("qzzno", qzzno) - .addParam("product_area", product_area) - .addParam("point_location", point_location) - .process().getResultJSONArray(0); - // todo: 输送线最大负荷需要重新定义-需要能够配置 - if (cut_rows.size() > 3) { - if ("0".equals(point_location)) { - throw new BadRequestException("已超过上半段输送线最大负荷任务数,请等下一子卷送出再进行配送,并将该空载具送回!"); - } - if ("1".equals(point_location)) { - throw new BadRequestException("已超过下半段输送线最大负荷任务数,请等下一子卷送出再进行配送,并将该空载具送回!"); + if (!openTzArea) { + //判断当前输送线上是否超过最大负荷任务数量组3组 + JSONArray cut_rows = WQL.getWO("PDA_02") + .addParam("flag", "13") + .addParam("qzzno", qzzno) + .addParam("product_area", product_area) + .addParam("point_location", point_location) + .process().getResultJSONArray(0); + // todo: 输送线最大负荷需要重新定义-需要能够配置 + if (cut_rows.size() > 3) { + if ("0".equals(point_location)) { + throw new BadRequestException("已超过上半段输送线最大负荷任务数,请等下一子卷送出再进行配送,并将该空载具送回!"); + } + if ("1".equals(point_location)) { + throw new BadRequestException("已超过下半段输送线最大负荷任务数,请等下一子卷送出再进行配送,并将该空载具送回!"); + } } } @@ -225,7 +230,8 @@ public class ShippingServiceImpl implements ShippingService { //查询离该分切计划包含机台最近的一个空点位 // hint: 只能在外侧point_type=01 JSONObject empty_point; - if (RenUtils.isOpenTzArea(product_area)) { + if (openTzArea) { + // todo: 校验无任务 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")) @@ -287,7 +293,7 @@ public class ShippingServiceImpl implements ShippingService { } // hint: 改造后的右边一定存放的是空载具 - if (Integer.valueOf(String.valueOf(dtl_type)) % 2 == 0 && !RenUtils.isOpenTzArea(product_area)) { + 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); JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("(point_code1 = '" + left_point.getString("point_code") + "' OR point_code2 = '" + left_point.getString("point_code") + "') AND task_status < '07' AND is_delete = '0'").uniqueResult(0); @@ -307,8 +313,6 @@ public class ShippingServiceImpl implements ShippingService { cutConveyorTask.createTask(form2); } } - - JSONObject jo = new JSONObject(); jo.put("message", "操作成功!"); return jo; } 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 173e50cdd..28c3b1692 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 @@ -155,6 +155,45 @@ ENDQUERY ENDIF + IF 输入.flag = "3001" + QUERY + SELECT + ivt.* + FROM + st_ivt_deliverypointivt ivt + INNER JOIN ( + SELECT + * + FROM + ( SELECT RIGHT ( point_code, 1 ) AS goal_code, point_code FROM st_ivt_deliverypointivt ) a + WHERE + MOD ( goal_code, 2 ) = 1 + ) b ON b.point_code = ivt.point_code + WHERE + point_status = '02' + AND ivt.is_used = '1' + AND 0 = ( + SELECT + COUNT(*) + FROM + sch_base_task + WHERE + ( point_code1 = ivt.point_code OR point_code2 = ivt.point_code ) + AND task_status < '07' + AND is_delete = '0' + ) + OPTION 输入.product_area <> "" + ivt.product_area = 输入.product_area + ENDOPTION + OPTION 输入.product_area <> "" + ivt.point_location = 输入.point_location + ENDOPTION + 输入.sql_str + + ENDSELECT + ENDQUERY + ENDIF + IF 输入.flag = "302" QUERY SELECT @@ -164,6 +203,7 @@ WHERE point_status = '02' AND ivt.is_used = '1' + AND ivt.point_type = '02' AND NOT EXISTS ( SELECT * @@ -951,6 +991,7 @@ ivt.product_area = 输入.product_area AND cut.point_location = 输入.point_location AND plan.is_delete = '0' + AND ivt.point_type = '2' AND have_qzz > 0 UNION SELECT task.task_code AS start_code, diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/deliverycache/service/dao/mapper/DeliverycachepointivtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/deliverycache/service/dao/mapper/DeliverycachepointivtMapper.xml index e6dd651fa..442355c2f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/deliverycache/service/dao/mapper/DeliverycachepointivtMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/deliverycache/service/dao/mapper/DeliverycachepointivtMapper.xml @@ -99,5 +99,11 @@ FROM pdm_bi_slittingproductionplan p3 WHERE p3.qzzno = de.qzzno ) = 2; + AND 0 = ( + SELECT COUNT(*) + FROM sch_base_task t + WHERE t.task_status '07' AND t.is_delete = '0' AND ( + t.point_code1 = de.point_code OR t.point_code2 = de.point_code + ) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/deliverycache/service/impl/DeliverycachepointivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/deliverycache/service/impl/DeliverycachepointivtServiceImpl.java index c3e772ecf..e53038b34 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/deliverycache/service/impl/DeliverycachepointivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/deliverycache/service/impl/DeliverycachepointivtServiceImpl.java @@ -96,7 +96,7 @@ public class DeliverycachepointivtServiceImpl extends ServiceImpl lam = new LambdaQueryWrapper<>(); lam.eq(Deliverycachepointivt::getPoint_code, code) - .eq(flag, Deliverycachepointivt::getIs_used, flag); + .eq(flag, Deliverycachepointivt::getIs_used, "1"); return getOne(lam); } 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 5b65d7be5..4b610b8f8 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 @@ -77,7 +77,7 @@ public class AcsUtil { log.info("下发ACS任务失败,原因是:----------------------------------------+"+ msg); } //acs抛异常这里 - if (!StrUtil.equals(result.getString("status"), "200")) { + if (StrUtil.equals(result.getString("status"), "400")) { log.info("下发acs任务失败,原因是:----------------------------------------+"+ result.getString("message")); throw new BadRequestException(result.getString("message")); } else { 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 13c1caaa3..b07146998 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 @@ -140,12 +140,13 @@ public class AutoCallEmptyVehicle { JSONArray in_task = WQL.getWO("QAUTO_QUERY").addParam("flag", "5").addParam("point_location", point_location).addParam("product_area", product_area).process().getResultJSONArray(0); donw_num -= in_task.size(); + log.info("此时需要呼叫托盘的数量:{}", donw_num); //如果需要空载具数量大于0,进行呼叫载具 if (donw_num > 0) { for (int i = 0; i < donw_num; i++) { // 这里最多就6个位置 JSONObject empty_vehicle = WQL.getWO("PDA_02") - .addParam("sql_str", " ORDER BY point_type, point_code") + .addParam("sql_str", " ORDER BY point_code") .addParam("product_area", product_area) .addParam("point_location", point_location) .addParam("flag", "302").process().uniqueResult(0); @@ -153,7 +154,7 @@ public class AutoCallEmptyVehicle { // 创建输送线任务规则:(内测保持空载具、外侧先出的逻辑) JSONObject form = new JSONObject(); if (ObjectUtil.isEmpty(empty_vehicle)) { - // todo: 如果还有需要空载具,但是此时这个区域已经没有位置了,创建半条任务,等待载具送达时候,触发。 + // todo: 如果还有需要空载具,但是此时这个区域已经没有位置了,创建半条任务,等待载具送达时候(横移完毕),触发。 if (RenUtils.isOpenTzArea(product_area)) { JSONObject tips = new JSONObject(); tips.put("product_area", product_area); @@ -459,18 +460,36 @@ public class AutoCallEmptyVehicle { JSONObject jo = new JSONObject(); jo.put("task_type", "010606"); - jo.put("truss_type", "8"); +// jo.put("truss_type", "8"); jo.put("task_status", TaskStatusEnum.SURE_START.getCode()); // 气胀轴-取货点(point_type=6) - JSONObject qhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '6' AND product_area = '" + product_area + "'").uniqueResult(0); + JSONObject qhd_jo; + String flag = "1"; + // 判断是不是3寸的 + if ("3".equals(need_size) && RenUtils.isOpenTempArea(product_area) && RenUtils.isOpenTzArea(product_area)) { + //查询可用的空点位 + 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 = '" + product_area + "'").uniqueResult(0); + jo.put("truss_type", "8"); + flag = "2"; + } +// JSONObject qhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '6' AND product_area = '" + product_area + "'").uniqueResult(0); jo.put("point_code1", qhd_jo.getString("point_code")); - // todo: 如果in点没空载具呢? + // todo: 如果in点没空载具呢? 再此已经呼叫过空载具,如果载具回流,需要在某处进行判断 JSONObject in_jo = WQLObject.getWQLObject("sch_base_point").query("product_area = '" + product_area + "' AND point_type = '6'").uniqueResult(0); jo.put("point_code2", in_jo.getString("point_code")); // 构建请求参数 JSONObject request_param = new JSONObject(); request_param.put("need_size", need_size); request_param.put("need_generation", need_generation); + request_param.put("flag", flag); JSONArray cut_rows = new JSONArray(); String qzzno = ""; if (same_flag) { 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 new file mode 100644 index 000000000..1917d030c --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendOutShaft.java @@ -0,0 +1,75 @@ +package org.nl.wms.sch.manage; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.point.dao.StIvtShaftivt; +import org.nl.b_lms.sch.point.service.IstIvtShaftivtService; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.sch.tasks.PaperTrussTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 成品卷到拔轴机 + * @Author: lyd + * @Date: 2025/2/26 + */ +@Slf4j +@Component +public class AutoSendOutShaft { + + @Autowired + private IschBaseTaskService taskService; + @Autowired + private WmsToAcsService wmsToAcsService; + @Autowired + private IstIvtShaftivtService shaftivtService; + public void run() { + List list = shaftivtService.list(new LambdaQueryWrapper() + .eq(StIvtShaftivt::getPoint_type, "11") + .eq(StIvtShaftivt::getHave_qzz, "1") + .eq(StIvtShaftivt::getIs_used, "1")); + for (StIvtShaftivt stIvtShaftivt : list) { + 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(); + queryRgvParam.put("device_code", rgv_jo.getString("point_code")); + queryRgvParam.put("product_area", rgv_jo.getString("product_area")); + JSONObject canUseRgv = wmsToAcsService.queryRGVStatus(queryRgvParam); + String rgvResStatus = canUseRgv.getString("status"); + boolean canUse = true; + if (rgvResStatus.equals("200")) { + int qty = canUseRgv.getInteger("qty"); + IschBaseTaskService taskService = SpringContextHolder.getBean(IschBaseTaskService.class); + int taskNum = taskService.count(new LambdaQueryWrapper() + .eq(SchBaseTask::getPoint_code2, rgv_jo.getString("point_code")) + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(SchBaseTask::getIs_delete, "0")); + canUse = qty > taskNum; + } + if (canUse) { + // 创建任务到RGV + JSONObject jo = new JSONObject(); + jo.put("task_type", "010605"); + jo.put("point_code1", stIvtShaftivt.getPoint_code()); + jo.put("point_code2", rgv_jo.getString("point_code")); + jo.put("truss_type", "6"); + jo.put("vehicle_code", stIvtShaftivt.getContainer_name1()); + jo.put("product_area", stIvtShaftivt.getProduct_area()); + JSONObject request_param = new JSONObject(); + request_param.put("have_generation", stIvtShaftivt.getQzz_generation()); + jo.put("request_param", request_param.toString()); + // 成品卷下线拔轴 - 取货完成动作做完后,ACS请求LMS尺寸。 + PaperTrussTask paperTrussTask = SpringContextHolder.getBean(PaperTrussTask.class); + paperTrussTask.createTask(jo); + } + } + } +} 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 c9b40e350..5435148ac 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 @@ -7,10 +7,15 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; 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.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.impl.PdmBiSlittingproductionplanServiceImpl; +import org.nl.b_lms.sch.point.dao.StIvtShaftivt; +import org.nl.b_lms.sch.point.service.IstIvtShaftivtService; +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.slitter.util.SlitterTaskUtil; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; @@ -88,6 +93,7 @@ public class CutConveyorTask extends AbstractAcsTask { WQLObject ivtTab = WQLObject.getWQLObject("ST_IVT_DeliveryPointIvt"); WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation"); ReNbjService reNbjService = SpringContextHolder.getBean(ReNbjService.class); + WmsToAcsService wmsToAcsService = SpringContextHolder.getBean(WmsToAcsService.class); PdmBiSlittingproductionplanServiceImpl planService = SpringContextHolder.getBean(PdmBiSlittingproductionplanServiceImpl.class); String task_id = taskObj.getString("task_id"); @@ -223,22 +229,68 @@ public class CutConveyorTask extends AbstractAcsTask { JSONObject jo = new JSONObject(); jo.put("task_type", "010605"); jo.put("point_code1", jsonTask.getString("point_code2")); + jo.put("truss_type", "6"); if (RenUtils.isOpenTzArea(out_jo.getString("product_area"))) { - // hint: 超过1400需要送到新增的人工处理RGV上。 - List list = JSON.parseArray(jsonTask.getString("request_param"), String.class); - List plans = planService.getByContainerNames(list); - PdmBiSlittingproductionplan demoPlan = plans.get(0); - Integer paperLength = Integer.valueOf(SlitterTaskUtil.getPaperLength(demoPlan)); - if (paperLength >= 1400) { - JSONObject rgv_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '10' AND product_area = '" + jsonTask.getString("product_area") + "'").uniqueResult(0); + // hint: 超过1400 或者 饵料 需要送到新增的人工处理RGV上。 + JSONObject rgv_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '10' AND product_area = '" + jsonTask.getString("product_area") + "'").uniqueResult(0); + if (out_jo.getString("vehicle_code").contains("废箔")) { jo.put("point_code2", rgv_jo.getString("point_code")); + } else { + List list = JSON.parseArray(jsonTask.getString("request_param"), String.class); + List plans = planService.getByContainerNames(list); + PdmBiSlittingproductionplan demoPlan = plans.get(0); + Integer paperLength = Integer.valueOf(SlitterTaskUtil.getPaperLength(demoPlan)); + if (paperLength >= 1400) { + jo.put("point_code2", rgv_jo.getString("point_code")); + } } + jo.put("truss_type", "1"); } if (ObjectUtil.isEmpty(jo.getString("point_code2"))) { JSONObject rgv_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '5' AND product_area = '" + jsonTask.getString("product_area") + "'").uniqueResult(0); + // 查询ACS是否有可用的RGV + JSONObject queryRgvParam = new JSONObject(); + queryRgvParam.put("device_code", rgv_jo.getString("point_code")); + queryRgvParam.put("product_area", rgv_jo.getString("product_area")); + JSONObject canUseRgv = wmsToAcsService.queryRGVStatus(queryRgvParam); + String rgvResStatus = canUseRgv.getString("status"); + boolean canUse = true; + if (rgvResStatus.equals("200")) { + int qty = canUseRgv.getInteger("qty"); + IschBaseTaskService taskService = SpringContextHolder.getBean(IschBaseTaskService.class); + int taskNum = taskService.count(new LambdaQueryWrapper() + .eq(SchBaseTask::getPoint_code2, rgv_jo.getString("point_code")) + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(SchBaseTask::getIs_delete, "0")); + canUse = qty > taskNum; + } + if (!rgvResStatus.equals("200") || !canUse) { + log.warn("RGV不可用或者不够用,送到暂存架,{}", canUseRgv.getString("message")); + // hint: 创建到子卷暂存架 + IstIvtShaftivtService shaftivtService = SpringContextHolder.getBean(IstIvtShaftivtService.class); + List caches = shaftivtService.getCachePointNoTask(rgv_jo.getString("product_area")); + if (caches.size() > 0) { + StIvtShaftivt shaftivt = caches.get(0); + // 创建任务 + JSONObject pa = new JSONObject(); + pa.put("task_type", "010610"); + pa.put("point_code1", jsonTask.getString("point_code2")); + pa.put("point_code2", shaftivt.getPoint_code()); + pa.put("truss_type", "1"); + pa.put("vehicle_code", jsonTask.getString("vehicle_code")); + pa.put("product_area", jsonTask.getString("product_area")); + JSONObject request_param = new JSONObject(); + request_param.put("have_generation", qzz_generation); + pa.put("request_param", request_param.toString()); + PaperTrussTask paperTrussTask = SpringContextHolder.getBean(PaperTrussTask.class); + paperTrussTask.createTask(pa); + return; + } + } + // 如果没找到或者暂存也没位置,那就卡在桁架任务上 jo.put("point_code2", rgv_jo.getString("point_code")); + jo.put("truss_type", "6"); } - jo.put("truss_type", "6"); jo.put("vehicle_code", jsonTask.getString("vehicle_code")); jo.put("product_area", jsonTask.getString("product_area")); JSONObject request_param = new JSONObject(); @@ -251,7 +303,6 @@ public class CutConveyorTask extends AbstractAcsTask { //给输送线OUT点下发acition1,让载具进行横移 // hint: 横移后由ACS请求横移完毕,将载具号设置到IN点 String device_code = jsonTask.getString("point_code2"); - WmsToAcsService wmsToAcsService = SpringContextHolder.getBean(WmsToAcsService.class); JSONArray action_rows = new JSONArray(); JSONObject action_jo = new JSONObject(); action_jo.put("device_code", device_code); @@ -284,11 +335,12 @@ public class CutConveyorTask extends AbstractAcsTask { if (RenUtils.isOpenTzArea(jsonIvt.getString("product_area"))) { // 任务完成需要创建桁架任务到空轴取轴位! - reNbjService.sendShaftToCache(taskObj); - return; + if (jsonIvt.getString("point_status").equals("03")) { + log.info("任务完成需要创建桁架任务到空轴取轴位"); + reNbjService.sendShaftToCache(jsonTask); + return; + } } - - // todo: 分切计划考虑放到桁架任务结束 //更新对应气涨轴的分切计划表为配送完成 HashMap map = new HashMap(); @@ -446,6 +498,55 @@ public class CutConveyorTask extends AbstractAcsTask { } } } + // 退轴 + if ("010409".equals(jsonTask.getString("task_type"))) { + String product_area = jsonTask.getString("product_area"); + JSONObject requestParam = JSONObject.parseObject(jsonTask.getString("request_param")); + String flag = requestParam.getString("flag"); + String qzzSize = requestParam.getString("qzz_size"); + String qzzGeneration = requestParam.getString("qzz_generation"); + //判断内包间是否启用 + JSONObject package_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query( + "point_type = '9' AND product_area = '" + jsonTask.getString("product_area") + "'") + .uniqueResult(0); + if (package_jo.getString("is_used").equals("1")) { + PaperTrussTask paperTrussTask = SpringContextHolder.getBean(PaperTrussTask.class); + JSONObject jo = new JSONObject(); + jo.put("task_type", "010603"); + jo.put("point_code1", jsonTask.getString("point_code2")); + if ("1".equals(flag)) { + // 空轴 + JSONObject fhd_jo; + // 判断是不是3寸的 + if (RenUtils.isOpenTzArea(product_area) && "3".equals(qzzSize) && RenUtils.isOpenTempArea(product_area)) { + //查询可用的空点位 + fhd_jo = WQL.getWO("QAUTO_QUERY").addParam("flag", "6001") + .addParam("need_size", qzzSize) + .addParam("need_generation", qzzGeneration) + .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"); + } + jo.put("point_code2", fhd_jo.getString("point_code")); + } else { + // hint: 管轴 需要送到新增的人工处理RGV上。 + JSONObject rgv_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '10' AND product_area = '" + jsonTask.getString("product_area") + "'").uniqueResult(0); + jo.put("point_code2", rgv_jo.getString("point_code")); + jo.put("truss_type", "1"); + } + jo.put("product_area", product_area); + jo.put("vehicle_code", DateUtil.format(DateUtil.date(), "HHmm") + "qzz"); + JSONObject request_param = new JSONObject(); + request_param.put("have_size", qzzSize); + request_param.put("have_generation", qzzGeneration); + jo.put("request_param", request_param.toString()); + paperTrussTask.createTask(jo); + } + } } } @@ -497,6 +598,9 @@ public class CutConveyorTask extends AbstractAcsTask { if (ObjectUtil.isNotEmpty(form.get("tips"))) { json.put("request_param", form.getJSONObject("tips").toJSONString()); } + if (ObjectUtil.isNotEmpty(form.get("flag"))) { + json.put("request_param", form.getJSONObject("flag").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 fcd16d18a..ef29dd3a6 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 @@ -252,7 +252,7 @@ public class CutTrussTask extends AbstractAcsTask { delivery_cache_point.put("point_status", "01"); cacheTab.update(delivery_cache_point); // 终点设置值 - String deliveryCode = jsonTask.getString("point_code3"); + String deliveryCode = jsonTask.getString("point_code4"); JSONObject delivery_point = WQLObject.getWQLObject("ST_IVT_DeliveryPointIvt") .query("point_code = '" + deliveryCode + "'").uniqueResult(0); if (ObjectUtil.isEmpty(delivery_point)) { @@ -391,6 +391,10 @@ public class CutTrussTask extends AbstractAcsTask { for (int i = 0; i < plan_jo.size(); i++) { JSONObject plan_row = plan_jo.getJSONObject(i); + if (plan_row.getString("container_name").contains("虚拟")) { + WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").delete(plan_row); + continue; + } plan_row.put("status", "05"); plan_row.put("end_time", DateUtil.now()); WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").update(plan_row); @@ -486,25 +490,25 @@ public class CutTrussTask extends AbstractAcsTask { jsonTask.getString("vehicle_code") + "' AND is_child_tz_ok = '1' AND is_child_ps_ok = '0' " + "AND is_delete ='0' AND status = '02'"); - LmsToMesService lmsToMesService = SpringContextHolder.getBean(LmsToMesService.class); - // 调用MES配送完成接口 +// LmsToMesService lmsToMesService = SpringContextHolder.getBean(LmsToMesService.class); +// // 调用MES配送完成接口 JSONArray rows = WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan") .query("qzzno = '" + jsonTask.getString("vehicle_code") + "' AND is_child_tz_ok = '1' AND is_child_ps_ok = '1' AND is_delete ='0' AND status = '03'") .getResultJSONArray(0); JSONObject demoPlan = rows.getJSONObject(0); - for (int i = 0; i < rows.size(); i++) { - JSONObject row = rows.getJSONObject(i); - String ContainerName = row.getString("container_name"); - JSONObject jo = new JSONObject(); - jo.put("ContainerName", ContainerName); - //判断该接口是否需要回传 - JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query( - "interface_name = 'airSwellWithPaperTubeAssArrival'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(back_jo) && "1".equals(back_jo.getString("is_back"))) { - lmsToMesService.airSwellWithPaperTubeAssArrival(row); - } - } +// for (int i = 0; i < rows.size(); i++) { +// JSONObject row = rows.getJSONObject(i); +// String ContainerName = row.getString("container_name"); +// JSONObject jo = new JSONObject(); +// jo.put("ContainerName", ContainerName); +// //判断该接口是否需要回传 +// JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query( +// "interface_name = 'airSwellWithPaperTubeAssArrival'").uniqueResult(0); +// if (ObjectUtil.isNotEmpty(back_jo) && "1".equals(back_jo.getString("is_back"))) { +// lmsToMesService.airSwellWithPaperTubeAssArrival(row); +// } +// } String point_code1 = jsonTask.getString("point_code1"); // 起点清空 JSONObject jsonIvt = ivtTab.query("point_code ='" + point_code1 + "'").uniqueResult(0); @@ -551,7 +555,7 @@ public class CutTrussTask extends AbstractAcsTask { needTask.setVehicle_code2(jsonTask.getString("vehicle_code2")); needTask.setUpdate_time(DateUtil.now()); taskService.updateById(needTask); - this.immediateNotifyAcs(null); + cutConveyorTask.immediateNotifyAcs(null); return; } // 否则查看是否横移 @@ -619,6 +623,48 @@ public class CutTrussTask extends AbstractAcsTask { form.put("product_area", delivery_point.getString("product_area")); cutConveyorTask.createTask(form); } + // 气胀轴推回 + if ("010409".equals(jsonTask.getString("task_type"))) { + JSONObject requestParam = JSONObject.parseObject(jsonTask.getString("request_param")); + if (ObjectUtil.isEmpty(requestParam)) { + throw new BadRequestException("该任务请求参数为空!"); + } + JSONObject flag = new JSONObject(); + flag.put("flag", requestParam.getString("flag")); + flag.put("qzz_size", requestParam.getString("qzz_size")); + flag.put("qzz_generation", requestParam.getString("qzz_generation")); + // 终点设置值 + JSONObject delivery_point = WQLObject.getWQLObject("ST_IVT_DeliveryPointIvt").query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); + delivery_point.put("qzzno", jsonTask.getString("vehicle_code")); + delivery_point.put("point_status", "03"); + WQLObject.getWQLObject("ST_IVT_DeliveryPointIvt").update(delivery_point); + // 起点清空 + IDeliverycachepointivtService bean = SpringContextHolder.getBean(IDeliverycachepointivtService.class); + Deliverycachepointivt startPoint = bean.getOneByPointCode(jsonTask.getString("point_code1"), false); + if (ObjectUtil.isNotEmpty(startPoint)) { + LambdaUpdateWrapper lam = new LambdaUpdateWrapper<>(); + lam.set(Deliverycachepointivt::getQzzno, null) + .set(Deliverycachepointivt::getPoint_status, "01") + .set(Deliverycachepointivt::getUpdate_optid, SecurityUtils.getCurrentUserId()) + .set(Deliverycachepointivt::getUpdate_optname, SecurityUtils.getCurrentNickName()) + .set(Deliverycachepointivt::getUpdate_time, DateUtil.now()) + .eq(Deliverycachepointivt::getPoint_code, startPoint.getPoint_code()); + bean.update(lam); + } + //生成一个输送线出库任务(将轴送到内包间) + JSONObject form = new JSONObject(); + form.put("point_code1", jsonTask.getString("point_code2")); + JSONObject out_jo = WQLObject.getWQLObject("sch_base_point").query("product_area = '" + jsonTask.getString("product_area") + "' AND point_type = '7'").uniqueResult(0); + form.put("point_code2", out_jo.getString("point_code")); + if (StrUtil.isEmpty(delivery_point.getString("vehicle_code"))) { + throw new BadRequestException("点位:" + delivery_point.getString("point_code") + "载具号为空!"); + } + form.put("vehicle_code2", delivery_point.getString("vehicle_code")); + form.put("flag", flag); + form.put("task_type", "010409"); + form.put("product_area", delivery_point.getString("product_area")); + cutConveyorTask.createTask(form); + } } } @@ -656,6 +702,7 @@ public class CutTrussTask extends AbstractAcsTask { json.put("point_code4", form.getString("point_code4")); json.put("product_area", form.getString("product_area")); json.put("handle_class", THIS_CLASS); + json.put("request_param", JSONObject.toJSONString(form)); json.put("create_id", currentUserId); json.put("create_name", currentUsername); json.put("create_time", DateUtil.now()); 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 3b8c91492..d743e7cda 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 @@ -6,8 +6,11 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; 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.StIvtShaftivt; +import org.nl.b_lms.sch.point.service.IstIvtShaftivtService; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; @@ -16,6 +19,7 @@ import org.nl.wms.pda.mps.service.ShippingService; import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.tasks.renovation.util.RenUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -107,6 +111,23 @@ public class PaperTrussTask extends AbstractAcsTask { goal_point.put("qzz_generation", qzz_generation); goal_point.put("have_qzz", "1"); ivt_shaftivt.update(goal_point); + String flag = request_param.getString("flag"); + if (ObjectUtil.isNotEmpty(flag) && "1".equals(flag)) { + JSONObject qzz3_point = ivt_shaftivt.query("point_code = '" + task_jo.getString("point_code1") + "'").uniqueResult(0); + qzz3_point.put("have_qzz", "0"); + ivt_shaftivt.update(qzz3_point); + } + } + //空轴放货货任务 + if ("010603".equals(task_type)) { + String point_code = task_jo.getString("point_code2"); + JSONObject goal_point = ivt_shaftivt.query("point_code = '" + point_code + "'").uniqueResult(0); + JSONObject request_param = task_jo.getJSONObject("request_param"); + String qzz_size = request_param.getString("have_size"); + if ("3".equals(qzz_size) && RenUtils.isOpenTempArea(taskObj.getString("product_area"))) { + goal_point.put("have_qzz", "1"); + ivt_shaftivt.update(goal_point); + } } //空轴换货任务 if ("010604".equals(task_type)) { @@ -134,14 +155,18 @@ public class PaperTrussTask extends AbstractAcsTask { if ("010606".equals(task_type)) { String point_code = task_jo.getString("point_code1"); JSONObject goal_point = ivt_shaftivt.query("point_code = '" + point_code + "'").uniqueResult(0); + JSONObject request_param_jo = task_jo.getJSONObject("request_param"); if ("2".equals(goal_point.getString("point_type"))) { goal_point.put("qzz_size", ""); goal_point.put("qzz_generation", ""); goal_point.put("have_qzz", "0"); ivt_shaftivt.update(goal_point); } + if (ObjectUtil.isNotEmpty(request_param_jo.getString("flag")) && "1".equals(request_param_jo.getString("flag"))) { + goal_point.put("have_qzz", "0"); + ivt_shaftivt.update(goal_point); + } //桁架任务完成后创建输送线配送任务 - JSONObject request_param_jo = task_jo.getJSONObject("request_param"); String container_name1 = request_param_jo.getString("container_name1"); // 根据子卷号获取对应的分切计划,最多就两条记录 JSONArray cut_rows = new JSONArray(); @@ -187,6 +212,17 @@ public class PaperTrussTask extends AbstractAcsTask { ivt_shaftivt.update(goal_point2); } } + // 放到暂存架子存放 + if ("010610".equals(task_type)) { + String pointCode2 = taskObj.getString("point_code2"); + JSONObject requestParam = taskObj.getJSONObject("request_param"); + IstIvtShaftivtService shaftivtService = SpringContextHolder.getBean(IstIvtShaftivtService.class); + StIvtShaftivt one = shaftivtService.getOne(new LambdaQueryWrapper().eq(StIvtShaftivt::getPoint_code, pointCode2)); + one.setHave_qzz("1"); + one.setQzz_generation(requestParam.getString("have_generation")); + one.setContainer_name1(taskObj.getString("vehicle_code")); + shaftivtService.updateById(one); + } } map.put("update_optid", currentUserId); map.put("update_optname", nickName); 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 fcaf9700d..07bcae5aa 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 @@ -10,12 +10,14 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; 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; import org.nl.modules.wql.util.SpringContextHolder; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.tasks.renovation.util.RenUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -137,15 +139,34 @@ public class PaperTubeTask extends AbstractAcsTask { if (product_area.equals("A3") || product_area.equals("A4")) { public_area = "A3"; }*/ - JSONObject qhd_jo = WQLObject.getWQLObject("st_ivt_shaftivt").query("point_type = '6' AND product_area = '" + product_area + "'").uniqueResult(0); + JSONObject qhd_jo = null; + String flag = "1"; + if ("3".equals(need_size) && RenUtils.isOpenTempArea(product_area)) { + // 判断是不是3寸的 + if (RenUtils.isOpenTzArea(product_area)) { + //查询可用的空点位 + 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 = '" + product_area + "'").uniqueResult(0); + jo.put("truss_type", "8"); + flag = "2"; + } + jo.put("point_code1", qhd_jo.getString("point_code")); jo.put("point_code2", cbz_jo.getString("point_code")); - jo.put("truss_type", "8"); jo.put("vehicle_code", req_param.getString("container_name1") + "-qzz"); jo.put("product_area", product_area); JSONObject request_param = new JSONObject(); request_param.put("need_size", need_size); request_param.put("need_generation", need_generation); + request_param.put("flag", flag); jo.put("request_param", request_param.toString()); paperTrussTask.createTask(jo); } else { @@ -172,6 +193,7 @@ public class PaperTubeTask extends AbstractAcsTask { //更新出库口的库存信息 out_jo.put("qzz_size", need_size); out_jo.put("qzz_generation", need_generation); + out_jo.put("have_qzz", "1"); WQLObject.getWQLObject("st_ivt_shaftivt").update(out_jo); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/renovation/service/impl/ReNbjServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/renovation/service/impl/ReNbjServiceImpl.java index afee8ecf6..56f712370 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/renovation/service/impl/ReNbjServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/renovation/service/impl/ReNbjServiceImpl.java @@ -48,7 +48,7 @@ public class ReNbjServiceImpl implements ReNbjService { // "status", "03" List plans = planService.getByQzzNoByStatus(qzzno, "02"); if (plans.size() == 0) { - return; + throw new BadRequestException("计划未找到!"); } PdmBiSlittingproductionplan demoPlan = plans.get(0); JSONObject cut_ivt = cutTab.query("ext_code = '" + demoPlan.getResource_name() + "'").uniqueResult(0); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/renovation/util/RenUtils.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/renovation/util/RenUtils.java index a7ffb57fc..415ad596c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/renovation/util/RenUtils.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/renovation/util/RenUtils.java @@ -30,4 +30,19 @@ public class RenUtils { List list = Arrays.asList(openOneTzArea.getValue().split("[,,]")); return list.contains(area); } + + /** + * 判断该区域是否为定义开放(3寸临时摆放)的区域 + * @param area + * @return + */ + public static boolean isOpenTempArea(String area) { + SysParamServiceImpl bean = SpringContextHolder.getBean(SysParamServiceImpl.class); + Param openOneTzArea = bean.findByCode("open_one_temp_area"); + if (ObjectUtil.isEmpty(openOneTzArea)) { + throw new BadRequestException("请配置[open_one_temp_area]参数"); + } + List list = Arrays.asList(openOneTzArea.getValue().split("[,,]")); + return list.contains(area); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QAUTO_QUERY.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QAUTO_QUERY.wql index 365716bad..917ba72a9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QAUTO_QUERY.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QAUTO_QUERY.wql @@ -94,7 +94,6 @@ split_group ORDER BY call_time - LIMIT 4 ENDSELECT ENDQUERY ENDIF @@ -263,7 +262,7 @@ AND ivt.qzz_size = 输入.need_size AND ivt.qzz_generation = 输入.need_generation AND ivt.product_area = 输入.product_area - AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.point_code2 = ivt.point_code AND t.task_status < '07' AND t.is_delete = '0') + AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status < '07' AND (t.point_code2 = ivt.point_code OR t.point_code1 = ivt.point_code) AND t.is_delete = '0') ORDER BY sort_seq DESC ENDSELECT