diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java b/acs/nladmin-system/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java index f006cffd4..e8672f2da 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java @@ -197,7 +197,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { } else { //上报异常信息 //(不需要WCS反馈) - if (phase == 0x67 || phase == 0x71 || phase == 0x72 || phase == 0x73 || phase == 0x74 || phase == 0x75) { + if (phase == 0x67 || phase == 0x70 || phase == 0x71 || phase == 0x72 || phase == 0x73 || phase == 0x74 ) { device = deviceAppService.findDeviceByCode(Integer.toString(arr[18] * 256 + arr[19])); } else { device = deviceAppService.findDeviceByCode(Integer.toString(arr[20])); diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java b/acs/nladmin-system/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java index eee214ae0..6ca2e9736 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java @@ -72,16 +72,17 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { } public void autoRun() throws IOException { + ParamService paramService = SpringContextHolder.getBean(ParamServiceImpl.class); + InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class); + AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class); + NDCAgvService ndcAgvService = SpringContextHolder.getBean(NDCAgvService.class); + DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); + DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class); + DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class); try { System.out.println("2楼1区域AGV系统链接开始"); - ParamService paramService = SpringContextHolder.getBean(ParamServiceImpl.class); - InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class); - AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class); - NDCAgvService ndcAgvService = SpringContextHolder.getBean(NDCAgvService.class); - DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); - DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class); - DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class); + ip = paramService.findByCode(AcsConfig.AGVURL2).getValue(); port = Integer.parseInt(paramService.findByCode(AcsConfig.AGVPORT2).getValue()); byte[] b = new byte[1024]; @@ -242,7 +243,7 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { } else { //上报异常信息 //(不需要WCS反馈) - if (phase == 0x67 || phase == 0x71 || phase == 0x72 || phase == 0x73 || phase == 0x74 || phase == 0x75) { + if (phase == 0x67 || phase == 0x70 || phase == 0x71 || phase == 0x72 || phase == 0x73 || phase == 0x74) { device = deviceAppService.findDeviceByCode(Integer.toString(arr[18] * 256 + arr[19])); } else { device = deviceAppService.findDeviceByCode(Integer.toString(arr[20])); @@ -267,11 +268,12 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { System.out.println("TwoAgv链接异常"); log.info("TwoAgv链接异常"); log.error("agv连接出现异常:{}", e); + logServer.deviceExecuteLog("NDC2", "", "", "agv异常" + e.getMessage()); + logServer.deviceExecuteLog("NDC2", "", "", "agv异常" + e); if (ObjectUtil.isNotEmpty(s)) { s.close(); } System.out.println(e.getMessage()); - e.printStackTrace(); } finally { diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/siemens_conveyor/SiemensConveyorDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/siemens_conveyor/SiemensConveyorDeviceDriver.java index 1a8477b8b..ef44259ef 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/siemens_conveyor/SiemensConveyorDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/siemens_conveyor/SiemensConveyorDeviceDriver.java @@ -1023,7 +1023,6 @@ public class SiemensConveyorDeviceDriver extends AbstractOpcDeviceDriver impleme message = "申请空盘出库成功"; requireSucess = true; } else { - requireSucess = true; message = "申请空盘出库失败," + jo.get("message").toString(); } } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/LiKuToAcsServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/LiKuToAcsServiceImpl.java index 0acfcf874..79701f989 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/LiKuToAcsServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/LiKuToAcsServiceImpl.java @@ -10,6 +10,7 @@ import org.nl.acs.device.address.service.AddressService; import org.nl.acs.device_driver.basedriver.hongxiang_device.HongXiangConveyorDeviceDriver; import org.nl.acs.device_driver.basedriver.siemens_conveyor.SiemensConveyorDeviceDriver; import org.nl.acs.device_driver.basedriver.standard_conveyor_control_with_scanner.StandardCoveyorControlWithScannerDeviceDriver; +import org.nl.acs.device_driver.basedriver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; import org.nl.acs.ext.wms.AcsUtil; import org.nl.acs.ext.wms.RespUtil; import org.nl.acs.ext.wms.data.UpdateLKTaskRequest; @@ -46,6 +47,8 @@ public class LiKuToAcsServiceImpl implements LiKuToAcsService { private final InstructionService instructionService; + private final DeviceAppService deviceAppService; + private final AcsToWmsService acsToWmsService; private final AcsToLiKuService acsToLiKuService; @@ -164,6 +167,11 @@ public class LiKuToAcsServiceImpl implements LiKuToAcsService { inst.setInstruction_status("2"); instructionService.finish(inst.getInstruction_id()); } else { + Device device = deviceAppService.findDeviceByCode(inst.getNext_device_code()); + if(device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver){ + inst.setInstruction_status("2"); + instructionService.finish(inst.getInstruction_id()); + } inst.setRemark("立库已反馈完成,待输送上报任务号"); instructionService.update(inst); } diff --git a/acs/nladmin-system/src/main/resources/initsql.txt b/acs/nladmin-system/src/main/resources/initsql.txt index dc704cbe0..14c375f07 100644 --- a/acs/nladmin-system/src/main/resources/initsql.txt +++ b/acs/nladmin-system/src/main/resources/initsql.txt @@ -13,4 +13,5 @@ delete from acs_task_feedback; delete from sys_quartz_log; delete from acs_storage_cell; update acs_stage_actor set device_code='',image_name ='1'; -update sys_code_rule_detail set current_value=0; \ No newline at end of file +update sys_code_rule_detail set current_value=0; +update stage set stage_data = null \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/mnt/service/AutoRiKuService.java b/lms/nladmin-system/src/main/java/org/nl/modules/mnt/service/AutoRiKuService.java index 3a916c61e..b4474fb49 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/mnt/service/AutoRiKuService.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/mnt/service/AutoRiKuService.java @@ -25,4 +25,8 @@ public interface AutoRiKuService { * */ JSONObject getAllPoint(); + /** + * 获取发货区 + * */ + JSONObject queryNum(JSONObject whereJson); } diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/mnt/service/impl/AutoRiKuServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/modules/mnt/service/impl/AutoRiKuServiceImpl.java index 294252fdc..80da282a1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/mnt/service/impl/AutoRiKuServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/mnt/service/impl/AutoRiKuServiceImpl.java @@ -1,12 +1,20 @@ package org.nl.modules.mnt.service.impl; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import org.nl.modules.mnt.service.AutoRiKuService; +import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.List; +import java.util.stream.Collectors; + @Service @RequiredArgsConstructor public class AutoRiKuServiceImpl implements AutoRiKuService { @@ -18,21 +26,22 @@ public class AutoRiKuServiceImpl implements AutoRiKuService { JSONArray dataArr = new JSONArray(); // 获取有货货位 - JSONArray haveArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01') and IFNULL(storagevehicle_code,'') <> '' and layer_num = '1' and is_delete = '0'").getResultJSONArray(0); + JSONArray haveArr = WQL.getWO("AUTORIKU").addParam("flag", "1").addParam("layer_num", "1").process().getResultJSONArray(0); + JSONObject jsonHave = new JSONObject(); jsonHave.put("name", "有货"); jsonHave.put("value", haveArr.size()); // 获取无货货位 - JSONArray notHaveArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01') and IFNULL(storagevehicle_code,'') = '' and layer_num = '1' and is_delete = '0'").getResultJSONArray(0); + JSONArray notHaveArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01','FTD01') and IFNULL(storagevehicle_code,'') = '' and layer_num = '1' and is_delete = '0'").getResultJSONArray(0); JSONObject jsonNotHave = new JSONObject(); jsonNotHave.put("name", "空闲"); jsonNotHave.put("value", notHaveArr.size()); // 获取禁用货位 - JSONArray usedArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01') and is_used = '0' and IFNULL(storagevehicle_code,'') = '' and layer_num = '1' and is_delete = '0'").getResultJSONArray(0); + JSONArray usedArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01','FTD01') and is_used = '0' and IFNULL(storagevehicle_code,'') = '' and layer_num = '1' and is_delete = '0'").getResultJSONArray(0); JSONObject jsonUsed = new JSONObject(); jsonUsed.put("name", "禁用"); @@ -43,7 +52,15 @@ public class AutoRiKuServiceImpl implements AutoRiKuService { dataArr.add(jsonUsed); int num = haveArr.size() + notHaveArr.size() + usedArr.size(); - jsonAll.put("pieSubTest", "总仓位:"+num); + + // 获取净重 + BigDecimal net_weight = haveArr.stream() + .map(row -> (JSONObject) row) + .filter(row -> !StrUtil.equals(row.getString("sect_code"), "KTP01") && ObjectUtil.isNotEmpty(row.getString("net_weight"))) + .map(row -> row.getBigDecimal("net_weight")) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + jsonAll.put("pieSubTest", "总仓位: "+num+" "+"总净重: "+ NumberUtil.round(net_weight,2)+"KG"); jsonAll.put("data", dataArr); jsonAll.put("name", "立库1层统计"); @@ -58,21 +75,21 @@ public class AutoRiKuServiceImpl implements AutoRiKuService { JSONArray dataArr = new JSONArray(); // 获取有货货位 - JSONArray haveArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01') and IFNULL(storagevehicle_code,'') <> '' and layer_num = '2' and is_delete = '0'").getResultJSONArray(0); + JSONArray haveArr = WQL.getWO("AUTORIKU").addParam("flag", "1").addParam("layer_num", "2").process().getResultJSONArray(0); JSONObject jsonHave = new JSONObject(); jsonHave.put("name", "有货"); jsonHave.put("value", haveArr.size()); // 获取无货货位 - JSONArray notHaveArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01') and IFNULL(storagevehicle_code,'') = '' and layer_num = '2' and is_delete = '0'").getResultJSONArray(0); + JSONArray notHaveArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01','FTD01') and IFNULL(storagevehicle_code,'') = '' and layer_num = '2' and is_delete = '0'").getResultJSONArray(0); JSONObject jsonNotHave = new JSONObject(); jsonNotHave.put("name", "空闲"); jsonNotHave.put("value", notHaveArr.size()); // 获取禁用货位 - JSONArray usedArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01') and is_used = '0' and IFNULL(storagevehicle_code,'') = '' and layer_num = '2' and is_delete = '0'").getResultJSONArray(0); + JSONArray usedArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01','FTD01') and is_used = '0' and IFNULL(storagevehicle_code,'') = '' and layer_num = '2' and is_delete = '0'").getResultJSONArray(0); JSONObject jsonUsed = new JSONObject(); jsonUsed.put("name", "禁用"); @@ -83,7 +100,15 @@ public class AutoRiKuServiceImpl implements AutoRiKuService { dataArr.add(jsonUsed); int num = haveArr.size() + notHaveArr.size() + usedArr.size(); - jsonAll.put("pieSubTest", "总仓位:"+num); + + // 获取净重 + BigDecimal net_weight = haveArr.stream() + .map(row -> (JSONObject) row) + .filter(row -> !StrUtil.equals(row.getString("sect_code"), "KTP01") && ObjectUtil.isNotEmpty(row.getString("net_weight"))) + .map(row -> row.getBigDecimal("net_weight")) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + jsonAll.put("pieSubTest", "总仓位: "+num+" "+"总净重: "+ NumberUtil.round(net_weight,2)+"KG"); jsonAll.put("data", dataArr); jsonAll.put("name", "立库2层统计"); @@ -98,21 +123,20 @@ public class AutoRiKuServiceImpl implements AutoRiKuService { JSONArray dataArr = new JSONArray(); // 获取有货货位 - JSONArray haveArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01') and IFNULL(storagevehicle_code,'') <> '' and layer_num = '3' and is_delete = '0'").getResultJSONArray(0); - + JSONArray haveArr = WQL.getWO("AUTORIKU").addParam("flag", "1").addParam("layer_num", "3").process().getResultJSONArray(0); JSONObject jsonHave = new JSONObject(); jsonHave.put("name", "有货"); jsonHave.put("value", haveArr.size()); // 获取无货货位 - JSONArray notHaveArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01') and IFNULL(storagevehicle_code,'') = '' and layer_num = '3' and is_delete = '0'").getResultJSONArray(0); + JSONArray notHaveArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01','FTD01') and IFNULL(storagevehicle_code,'') = '' and layer_num = '3' and is_delete = '0'").getResultJSONArray(0); JSONObject jsonNotHave = new JSONObject(); jsonNotHave.put("name", "空闲"); jsonNotHave.put("value", notHaveArr.size()); // 获取禁用货位 - JSONArray usedArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01') and is_used = '0' and IFNULL(storagevehicle_code,'') = '' and layer_num = '3' and is_delete = '0'").getResultJSONArray(0); + JSONArray usedArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01','FTD01') and is_used = '0' and IFNULL(storagevehicle_code,'') = '' and layer_num = '3' and is_delete = '0'").getResultJSONArray(0); JSONObject jsonUsed = new JSONObject(); jsonUsed.put("name", "禁用"); @@ -123,7 +147,15 @@ public class AutoRiKuServiceImpl implements AutoRiKuService { dataArr.add(jsonUsed); int num = haveArr.size() + notHaveArr.size() + usedArr.size(); - jsonAll.put("pieSubTest", "总仓位:"+num); + + // 获取净重 + BigDecimal net_weight = haveArr.stream() + .map(row -> (JSONObject) row) + .filter(row -> !StrUtil.equals(row.getString("sect_code"), "KTP01") && ObjectUtil.isNotEmpty(row.getString("net_weight"))) + .map(row -> row.getBigDecimal("net_weight")) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + jsonAll.put("pieSubTest", "总仓位: "+num+" "+"总净重: "+ NumberUtil.round(net_weight,2)+"KG"); jsonAll.put("data", dataArr); jsonAll.put("name", "立库3层统计"); @@ -138,21 +170,20 @@ public class AutoRiKuServiceImpl implements AutoRiKuService { JSONArray dataArr = new JSONArray(); // 获取有货货位 - JSONArray haveArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01') and IFNULL(storagevehicle_code,'') <> '' and is_delete = '0'").getResultJSONArray(0); - + JSONArray haveArr = WQL.getWO("AUTORIKU").addParam("flag", "1").process().getResultJSONArray(0); JSONObject jsonHave = new JSONObject(); jsonHave.put("name", "有货"); jsonHave.put("value", haveArr.size()); // 获取无货货位 - JSONArray notHaveArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01') and IFNULL(storagevehicle_code,'') = '' and is_delete = '0'").getResultJSONArray(0); + JSONArray notHaveArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01','FTD01') and IFNULL(storagevehicle_code,'') = '' and is_delete = '0'").getResultJSONArray(0); JSONObject jsonNotHave = new JSONObject(); jsonNotHave.put("name", "空闲"); jsonNotHave.put("value", notHaveArr.size()); // 获取禁用货位 - JSONArray usedArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01') and is_used = '0' and IFNULL(storagevehicle_code,'') = '' and is_delete = '0'").getResultJSONArray(0); + JSONArray usedArr = attrTab.query("sect_code in ('ZC01','KTP01','ZZ01','PD01','FTD01') and is_used = '0' and IFNULL(storagevehicle_code,'') = '' and is_delete = '0'").getResultJSONArray(0); JSONObject jsonUsed = new JSONObject(); jsonUsed.put("name", "禁用"); @@ -163,11 +194,37 @@ public class AutoRiKuServiceImpl implements AutoRiKuService { dataArr.add(jsonUsed); int num = haveArr.size() + notHaveArr.size() + usedArr.size(); - jsonAll.put("pieSubTest", "总仓位:"+num); + + // 获取净重 + BigDecimal net_weight = haveArr.stream() + .map(row -> (JSONObject) row) + .filter(row -> !StrUtil.equals(row.getString("sect_code"), "KTP01") && ObjectUtil.isNotEmpty(row.getString("net_weight"))) + .map(row -> row.getBigDecimal("net_weight")) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + jsonAll.put("pieSubTest", "总仓位: "+num+" "+"总净重: "+ NumberUtil.round(net_weight,2)+"KG"); jsonAll.put("data", dataArr); jsonAll.put("name", "立库汇总统计"); return jsonAll; } + @Override + public JSONObject queryNum(JSONObject whereJson) { + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + String layer_num = whereJson.getString("layer_num"); + + // 有货个数 + JSONArray haveMoney = pointTab.query("layer_num = '" + layer_num + "' and point_type = '9' and IFNULL(vehicle_code,'')<>'' and is_delete = '0' and is_used = '1'").getResultJSONArray(0); + + // 无货个数 + JSONArray unMoney = pointTab.query("layer_num = '" + layer_num + "' and point_type = '9' and IFNULL(vehicle_code,'')='' and is_delete = '0' and is_used = '1'").getResultJSONArray(0); + + JSONObject result = new JSONObject(); + result.put("haveMoney",haveMoney.size()); + result.put("unMoney",unMoney.size()); + return result; + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/mnt/websocket/AutoWebSocketRiKu.java b/lms/nladmin-system/src/main/java/org/nl/modules/mnt/websocket/AutoWebSocketRiKu.java index 0ef94b083..ab4b116c5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/mnt/websocket/AutoWebSocketRiKu.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/mnt/websocket/AutoWebSocketRiKu.java @@ -37,4 +37,11 @@ public class AutoWebSocketRiKu { return new ResponseEntity<>(data, HttpStatus.OK); } + + @PostMapping("/queryNum") + @Log("查询发货区") + @ApiOperation("查询发货区") + public ResponseEntity queryNum(@RequestBody JSONObject whereJson){ + return new ResponseEntity<>(autoRiKuService.queryNum(whereJson), HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/mnt/wql/AUTORIKU.wql b/lms/nladmin-system/src/main/java/org/nl/modules/mnt/wql/AUTORIKU.wql new file mode 100644 index 000000000..e082f0d57 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/modules/mnt/wql/AUTORIKU.wql @@ -0,0 +1,69 @@ +[交易说明] + 交易名: 立库监控 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.layer_num TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + IF 输入.flag = "1" + QUERY + SELECT + attr.*, + sub.net_weight + FROM + st_ivt_structattr attr + LEFT JOIN ( + SELECT + SUM(net_weight) AS net_weight, + package_box_sn + FROM + pdm_bi_subpackagerelation + WHERE + 1 = 1 + group by package_box_sn + ) sub ON attr.storagevehicle_code = sub.package_box_sn + WHERE + attr.sect_code in ('ZC01','KTP01','ZZ01','PD01','FTD01') + and IFNULL(attr.storagevehicle_code,'') <> '' + and attr.is_delete = '0' + + OPTION 输入.layer_num <> "" + attr.layer_num = 输入.layer_num + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/system/util/CodeUtil.java b/lms/nladmin-system/src/main/java/org/nl/modules/system/util/CodeUtil.java index 3a7ff5a09..969ce5163 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/system/util/CodeUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/system/util/CodeUtil.java @@ -2,18 +2,20 @@ package org.nl.modules.system.util; import org.nl.modules.system.service.GenCodeService; import org.nl.modules.system.service.impl.GenCodeServiceImpl; +import org.nl.modules.wql.util.SpringContextHolder; +import org.springframework.boot.SpringApplication; import java.util.HashMap; public class CodeUtil { public static String getNewCode(String ruleCode){ - GenCodeService service=new GenCodeServiceImpl(); + GenCodeService bean = SpringContextHolder.getBean(GenCodeService.class); String flag = "1"; HashMap map = new HashMap<>(); map.put("flag",flag); map.put("code",ruleCode); - return service.codeDemo(map); + return bean.codeDemo(map); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/FaultDeviceServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/FaultDeviceServiceImpl.java index 8fd1c03d2..b6d40112a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/FaultDeviceServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/FaultDeviceServiceImpl.java @@ -78,7 +78,41 @@ public class FaultDeviceServiceImpl implements FaultDeviceService { JSONObject result = SpringContextHolder.getBean(WmsToAcsServiceImpl.class).realTimefaultInfo(param); JSONArray data = result.getJSONArray("data"); - JSONObject test1 = new JSONObject(); + JSONObject result2 = SpringContextHolder.getBean(WmsToAcsServiceImpl.class).queryDeviceInfo(null); + JSONObject jsonData = result2.getJSONObject("data"); + JSONArray data1 = new JSONArray(); + + if (ObjectUtil.isNotEmpty(jsonData)) { + JSONArray jsonA1 = jsonData.getJSONArray("jsonA1"); + JSONArray jsonLK = jsonData.getJSONArray("jsonLK"); + + data1.addAll(jsonA1); + data1.addAll(jsonLK); + } + + for (int i = 0; i < data1.size(); i++) { + JSONObject jsonObject = data1.getJSONObject(i); + double electricity = jsonObject.getDoubleValue("electricity"); + + if (electricity <= 30) { + // 新增一条agv报警信息 + JSONObject json = new JSONObject(); + String car_no = jsonObject.getString("car_no"); + + if (StrUtil.equals(car_no, "1")) { + json.put("device_name", "一楼1号AGV"); + } else if (StrUtil.equals(car_no, "2")) { + json.put("device_name", "二楼1号AGV"); + } else if (StrUtil.equals(car_no, "3")) { + json.put("device_name", "二楼2号AGV"); + } + json.put("device_code", jsonObject.getString("car_no")); + json.put("fault_code", "99"); + json.put("fault_info", "电量不足"); + json.put("fault_type", "agv_error_type"); + data.add(json); + } + } // 根据入参处理对应数据 JSONArray objects = new JSONArray(); @@ -124,7 +158,6 @@ public class FaultDeviceServiceImpl implements FaultDeviceService { } - // 获取报警码 JSONObject jsonFault = faultTab.query("fault_type = '" + json.getString("fault_type") + "' and fault_code = '" + json.getString("fault_code") + "'").uniqueResult(0); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java index 72ec5e9c8..d750a0fcb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java @@ -28,9 +28,11 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @author zhouz @@ -58,6 +60,7 @@ public class StructattrServiceImpl implements StructattrService { map.put("stor_id", (String) whereJson.get("stor_id")); map.put("sect_id", (String) whereJson.get("sect_id")); map.put("lock_type", (String) whereJson.get("lock_type")); + map.put("layer_num", (String) whereJson.get("layer_num")); //获取人员对应的仓库 UserStorServiceImpl userStorService = new UserStorServiceImpl(); @@ -264,6 +267,17 @@ public class StructattrServiceImpl implements StructattrService { .addParamMap(MapOf.of("struct_id", struct_id, "flag", "1")) .process() .getResultJSONArray(0); + // 计算合计 + JSONObject json = array.getJSONObject(0); + if (ObjectUtil.isNotEmpty(json.getString("net_weight"))) { + BigDecimal container_weight = array.stream().map(row -> ((JSONObject) row).getBigDecimal("net_weight")).reduce(BigDecimal.ZERO, BigDecimal::add); + + for (int j = 0; j < array.size(); j++) { + JSONObject jsonObject = array.getJSONObject(j); + jsonObject.put("container_weight",container_weight); + } + } + // 获取仓位表中的信息 JSONObject strInfo = attrTab .query("struct_id = '" + struct_id + "'") @@ -271,6 +285,9 @@ public class StructattrServiceImpl implements StructattrService { if (strInfo.getString("is_used").equals("0")) { // 被禁用 struct_status = 4; + } else if (strInfo.getString("sect_code").equals("PD01")) { + // 盘点位 + struct_status = 5; } else if (ObjectUtil.isEmpty(strInfo.getString("storagevehicle_code"))) { // 空位 struct_status = 3; @@ -308,6 +325,18 @@ public class StructattrServiceImpl implements StructattrService { .addParamMap(MapOf.of("struct_id", struct_id, "flag", "2")) .process() .getResultJSONArray(0); + + // 计算子卷净重 + JSONObject json = array.getJSONObject(0); + if (ObjectUtil.isNotEmpty(json.getString("net_weight"))) { + BigDecimal container_weight = array.stream().map(row -> ((JSONObject) row).getBigDecimal("net_weight")).reduce(BigDecimal.ZERO, BigDecimal::add); + + for (int j = 0; j < array.size(); j++) { + JSONObject jsonObject = array.getJSONObject(j); + jsonObject.put("container_weight",container_weight); + } + } + // 获取仓位表中的信息 JSONObject strInfo = attrTab .query("point_id = '" + struct_id + "'") diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCT_ATTR.wql b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCT_ATTR.wql index 0dc567b28..f5c2eff71 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCT_ATTR.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCT_ATTR.wql @@ -22,6 +22,7 @@ 输入.is_used TYPEAS s_string 输入.is_delete TYPEAS s_string 输入.have_vehicle TYPEAS s_string + 输入.layer_num TYPEAS s_string 输入.in_stor_id TYPEAS f_string [临时表] @@ -71,6 +72,9 @@ OPTION 输入.lock_type <> "" struct.lock_type = 输入.lock_type ENDOPTION + OPTION 输入.layer_num <> "" + struct.layer_num = 输入.layer_num + ENDOPTION OPTION 输入.lock_type = "1" (struct.storagevehicle_code is null or struct.storagevehicle_code = '') ENDOPTION 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 8cffb0fe3..2c5fcdfa7 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 @@ -1,5 +1,6 @@ package org.nl.wms.ext.acs.service.impl; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; import com.alibaba.fastjson.JSONArray; @@ -172,7 +173,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { /* // 测试数据 JSONArray data = result.getJSONArray("data"); JSONObject a = new JSONObject(); - a.put("electricity", "86"); + a.put("electricity", "30"); a.put("status_name", "空闲"); a.put("car_no", "1"); a.put("task_code", ""); @@ -199,9 +200,15 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { JSONArray ArrA1 = new JSONArray(); // A1车间 JSONArray ArrLk = new JSONArray(); // LK车间 + String run_time = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("AGV_RUN_TIME").getValue(); + for (int i = 0; i < data.size(); i++) { JSONObject json = data.getJSONObject(i); + // 工作时长:电量百分比*6 + String electricity = json.getString("electricity"); + json.put("run_time", NumberUtil.round(NumberUtil.div(NumberUtil.mul(electricity, run_time),100), 1)); + if ("2,3".contains(json.getString("car_no"))) { ArrA1.add(json); } @@ -233,9 +240,16 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { JSONArray ArrA1 = new JSONArray(); // A1车间 JSONArray ArrLk = new JSONArray(); // LK车间 + String run_time = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("AGV_RUN_TIME").getValue(); + + for (int i = 0; i < data.size(); i++) { JSONObject json = data.getJSONObject(i); + // 工作时长:电量百分比*6 + String electricity = json.getString("electricity"); + json.put("run_time", NumberUtil.round(NumberUtil.div(NumberUtil.mul(electricity, run_time),100), 1)); + if ("2,3".contains(json.getString("car_no"))) { ArrA1.add(json); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/eum/RegionTypeEnum.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/eum/RegionTypeEnum.java index feba6d636..71e61f9ef 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/eum/RegionTypeEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/eum/RegionTypeEnum.java @@ -18,7 +18,9 @@ public enum RegionTypeEnum { ZZ01("15","中转区","1582995342054526976"), LKRK("16","密集库入库输送线","1585164789083148288"), LKCK("17","密集库出库输送线","1585167595403874304"), - XN01("18","虚拟区","1586913215886004224"); + XN01("18","虚拟区","1586913215886004224"), + PD01("19","盘点区","1645705331612979200") + ; private String name; private String code; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/InbillServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/InbillServiceImpl.java index 5fd42a750..768a719bb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/InbillServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/InbillServiceImpl.java @@ -13,10 +13,12 @@ import org.nl.modules.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; import org.nl.system.service.user.ISysUserService; import org.nl.system.service.user.dao.SysUser; import org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl; import org.nl.wms.st.inbill.service.StorPublicService; +import org.nl.wms.st.returns.service.impl.InAndOutRetrunServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -187,17 +189,23 @@ public class InbillServiceImpl { //回传MES if (StrUtil.equals(mst_jo.getString("bill_type"), "0001")) { - //1.回传MES - //查询该入库单下的所有箱子回传 - JSONArray box_rows = WQL.getWO("QST_IVT_INANDOUTRETRUN").addParam("iostorinv_id",mst_jo.getString("iostorinv_id")).addParam("flag","2").process().getResultJSONArray(0); - for (int j = 0; j < box_rows.size(); j++) { - JSONObject box_row = box_rows.getJSONObject(j); - // 调用接口回传 - JSONObject paramMesMst = new JSONObject(); - paramMesMst.put("PackageBoxSN",box_row.getString("box_no")); - SysUser sysUser = iSysUserService.getById(box_row.getString("input_optid")); - paramMesMst.put("User",sysUser.getUsername()); - // new LmsToMesServiceImpl().childRollFGInboundComplete(paramMesMst); + InAndOutRetrunServiceImpl bean = SpringContextHolder.getBean(InAndOutRetrunServiceImpl.class); + + JSONObject param = new JSONObject(); + JSONArray rows = new JSONArray(); + rows.add(mst_jo); + param.put("rows", rows); + try { + bean.uploadMES(param); + } catch (Exception e) { + System.out.println(e.getMessage()); + log.info(e.getMessage()); + } finally { + mst_jo.put("is_upload", "1"); + mst_jo.put("upload_mes", "1"); + mst_jo.put("upload_optid", SecurityUtils.getCurrentUserId()); + mst_jo.put("upload_time", DateUtil.now()); + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst_jo); } } //回传SAP 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 04a79af2b..f0b1aaaab 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 @@ -35,6 +35,7 @@ 输入.sect_id TYPEAS s_string 输入.point_code TYPEAS s_string 输入.row_num TYPEAS s_string + 输入.block_num TYPEAS s_string 输入.sql_str TYPEAS f_string 输入.in_stor_id TYPEAS f_string @@ -805,6 +806,13 @@ AND sa.lock_type = '1' AND sa.is_delete = '0' AND sa.is_used = '1' + OPTION 输入.block_num <> "" + sa.block_num <> 输入.block_num + ENDOPTION + OPTION 输入.row_num <> "" + sa.row_num <> 输入.row_num + ENDOPTION + GROUP BY sa.block_num, sa.row_num, diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/rest/HandMoveStorController.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/rest/HandMoveStorController.java index 69c12c95a..884bfb0c3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/rest/HandMoveStorController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/rest/HandMoveStorController.java @@ -97,4 +97,12 @@ public class HandMoveStorController { handMoveStorService.handdown(whereJson); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } + + @PostMapping("/checkReturn") + @Log("盘点回库") + @ApiOperation("盘点回库") + public ResponseEntity checkReturn() { + handMoveStorService.checkReturn(); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/HandMoveStorService.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/HandMoveStorService.java index bbfbf3bb2..ec2fc6439 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/HandMoveStorService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/HandMoveStorService.java @@ -85,4 +85,9 @@ public interface HandMoveStorService { * @param whereJson / */ void handdown(JSONObject whereJson); + + /** + * 盘点回库 + */ + void checkReturn(); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/CheckServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/CheckServiceImpl.java index 2b6e1065d..6a42c29d5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/CheckServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/CheckServiceImpl.java @@ -731,12 +731,14 @@ public class CheckServiceImpl implements CheckService { map.put("物料名称", jo.getString("material_name")); if (ObjectUtil.isEmpty(jsonSub)) { + map.put("生产日期", ""); map.put("厚度", ""); map.put("幅宽", ""); map.put("标准厚度", ""); map.put("客户要求幅宽", ""); map.put("备注", ""); } else { + map.put("生产日期", jsonSub.getString("date_of_production")); map.put("厚度", jsonSub.getString("thickness")); map.put("幅宽", jsonSub.getString("width")); map.put("标准厚度", jsonSub.getString("thickness_request")); @@ -863,11 +865,17 @@ public class CheckServiceImpl implements CheckService { @Transactional(rollbackFor = Exception.class) public void confirmBtn(JSONObject whereJson) { WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_CheckMst"); + WQLObject dtlTab = WQLObject.getWQLObject("st_ivt_checkdtl"); JSONObject jsonMst = mstTab.query("check_id = '" + whereJson.getString("check_id") + "'").uniqueResult(0); jsonMst.put("status", "99"); mstTab.update(jsonMst); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("status", "99"); + + dtlTab.update(jsonObject,"check_id = '"+whereJson.getString("check_id")+"'"); } @Override diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/HandMoveStorServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/HandMoveStorServiceImpl.java index 566ed315f..08b4a84c3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/HandMoveStorServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/HandMoveStorServiceImpl.java @@ -1,6 +1,7 @@ package org.nl.wms.st.instor.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -17,19 +18,20 @@ import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; import org.nl.modules.wql.util.WqlUtil; import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl; +import org.nl.wms.pda.mps.eum.RegionTypeEnum; import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.st.inbill.service.RawAssistIStorService; import org.nl.wms.st.inbill.service.StorPublicService; import org.nl.wms.st.instor.service.HandMoveStorService; +import org.nl.wms.st.instor.task.EmpMoveTask; import org.nl.wms.st.instor.task.HandMoveStorAcsTask; import org.nl.wms.st.outbill.service.impl.CheckOutBillServiceImpl; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** * PC端出入库新增 @@ -40,6 +42,7 @@ import java.util.Map; public class HandMoveStorServiceImpl implements HandMoveStorService { private final StorPublicService storPublicService; private final HandMoveStorAcsTask handMoveStorAcsTask; + private final EmpMoveTask empMoveTask; @Override public Map pageQuery(Map whereJson, Pageable page) { @@ -153,39 +156,205 @@ public class HandMoveStorServiceImpl implements HandMoveStorService { @Override @Transactional(rollbackFor = Exception.class) public void insertDtl(Map map) { - //主表 - WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_MoveInv"); - ArrayList rows = (ArrayList) map.get("tableData"); - map.remove("tableData"); - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); - String moveinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; - String bill_code = CodeUtil.getNewCode("MOVE_CODE"); - String biz_date = (String) map.get("biz_date"); - biz_date = biz_date.substring(0, 10); - map.put("moveinv_id", moveinv_id); - map.put("bill_code", bill_code); - map.put("buss_type", ""); - map.put("create_mode", "01"); - map.put("input_optid", currentUserId + ""); - map.put("input_optname", nickName); - map.put("input_time", now); - map.put("update_optid", currentUserId + ""); - map.put("update_optname", nickName); - map.put("update_time", now); - map.put("is_delete", "0"); - map.put("is_upload", "0"); - map.put("biz_date", biz_date); - Long deptId = SecurityUtils.getDeptId(); - map.put("sysdeptid", deptId); - map.put("syscompanyid", deptId); - JSONObject jo_mst = JSONObject.parseObject(JSON.toJSONString(map)); - //调用明细处理方法 - JSONObject ret = this.insertDtlByRows(jo_mst, rows); - map.put("detail_count", ret.getString("detail_count")); - map.put("total_qty", ret.getString("total_qty")); - wo_mst.insert(map); + String bill_type = MapUtil.getStr(map, "bill_type"); + + if (StrUtil.equals(bill_type, "30")) { + // 辅道移库: 调用辅道出库方法 + map = roadInsertDtl(map); + } + + if (ObjectUtil.isNotEmpty(map.get("tableData"))) { + //主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_MoveInv"); + ArrayList rows = (ArrayList) map.get("tableData"); + map.remove("tableData"); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + String moveinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + String bill_code = CodeUtil.getNewCode("MOVE_CODE"); + String biz_date = (String) map.get("biz_date"); + biz_date = biz_date.substring(0, 10); + map.put("moveinv_id", moveinv_id); + map.put("bill_code", bill_code); + map.put("buss_type", ""); + map.put("create_mode", "01"); + map.put("input_optid", currentUserId + ""); + map.put("input_optname", nickName); + map.put("input_time", now); + map.put("update_optid", currentUserId + ""); + map.put("update_optname", nickName); + map.put("update_time", now); + map.put("is_delete", "0"); + map.put("is_upload", "0"); + map.put("biz_date", biz_date); + Long deptId = SecurityUtils.getDeptId(); + map.put("sysdeptid", deptId); + map.put("syscompanyid", deptId); + JSONObject jo_mst = JSONObject.parseObject(JSON.toJSONString(map)); + //调用明细处理方法 + JSONObject ret = this.insertDtlByRows(jo_mst, rows); + map.put("detail_count", ret.getString("detail_count")); + map.put("total_qty", ret.getString("total_qty")); + wo_mst.insert(map); + } + } + + @Transactional(rollbackFor = Exception.class) + public Map roadInsertDtl(Map map) { + WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); + /* + 1.货位上是空托盘:直接生成点对点任务 + 2.货位上是木箱:走正常流程 + */ + RawAssistIStorService rawAssistIStorService = SpringContextHolder.getBean(RawAssistIStorService.class); + // 1.找出此区域 第 7 排所有有货货位 + String block_num = MapUtil.getStr(map, "block_num"); + + // 判断此区有没有被锁住的货位 + JSONArray resultJSONArray = attrTab.query("block_num = '" + block_num + "' and is_used = '1' and is_delete = '0' and row_num = '7' and lock_type <> '1'").getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(resultJSONArray)) throw new BadRequestException("有正在运行的任务或已锁定未生成任务"); + + // 找出所有货位 + JSONArray boxArr = attrTab.query("block_num = '" + block_num + "' and is_used = '1' and is_delete = '0' and IFNULL(storagevehicle_code,'') <> '' and lock_type = '1' and row_num = '7' order by out_order_seq DESC").getResultJSONArray(0); + + // 判断是否是空托盘区 + boolean is_ktp = boxArr.stream() + .map(row -> (JSONObject) row) + .anyMatch(row -> StrUtil.equals(row.getString("sect_code"), "KTP01")); + + ArrayList dtlArr = new ArrayList<>(); + + if (is_ktp) { + // 空托盘 + for (int i = 0; i < boxArr.size(); i++) { + JSONObject json = boxArr.getJSONObject(i); + // 调用空托盘入库 + JSONObject param = new JSONObject(); + param.put("block_num", json.getString("block_num")); + param.put("row_num", json.getString("row_num")); + JSONObject jsonEmp = queryEmp(param); + + // 生成空托盘移库任务 + JSONObject param2 = new JSONObject(); + param2.put("task_type", "010505"); + param2.put("task_name", "空托盘转库任务"); + param2.put("vehicle_code", json.getString("storagevehicle_code")); + param2.put("point_code1", json.getString("struct_code")); + param2.put("point_code2", jsonEmp.getString("struct_code")); + String task_id = empMoveTask.createTask(param2); + + // 下发任务 + empMoveTask.immediateNotifyAcs(task_id); + } + } else { + // 货位 + for (int i = 0; i < boxArr.size(); i++) { + JSONObject json = boxArr.getJSONObject(i); + + // 找到一个移入货位 + JSONObject moveParam = new JSONObject(); + moveParam.put("box_no", json.getString("storagevehicle_code")); + moveParam.put("sect_id", RegionTypeEnum.ZZ01.getId()); + moveParam.put("layer_num", json.getString("layer_num")); + + JSONObject jsonMove = rawAssistIStorService.autoDisMove(moveParam); + + if (ObjectUtil.isEmpty(jsonMove)) throw new BadRequestException("没有可用暂存位"); + + // 组织明细 + + JSONArray jsonIvt = WQL.getWO("QST_IVT_HANDMOVESTOR").addParam("flag", "35").addParam("package_box_sn", json.getString("storagevehicle_code")).process().getResultJSONArray(0); + List collect = jsonIvt.stream().map(row -> (Map) row).collect(Collectors.toList()); + collect.forEach(row -> { + row.put("wrok_status", "10"); + row.put("turnin_sect_id", jsonMove.getString("sect_id")); + row.put("turnin_sect_code", jsonMove.getString("sect_code")); + row.put("turnin_sect_name", jsonMove.getString("sect_name")); + row.put("turnin_struct_id", jsonMove.getString("struct_id")); + row.put("turnin_struct_code", jsonMove.getString("struct_code")); + row.put("turnin_struct_name", jsonMove.getString("struct_name")); + dtlArr.add(row); + }); + jsonMove.put("lock_type", "7"); + attrTab.update(jsonMove); + } + } + map.put("tableData",dtlArr); + return map; + } + + @Transactional(rollbackFor = Exception.class) + public JSONObject queryEmp(JSONObject whereJson) { + whereJson.put("flag", "21"); + + JSONArray emptyArr = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(whereJson).process().getResultJSONArray(0); + + JSONObject struct_jo = new JSONObject(); + for (int i = 0; i < emptyArr.size(); i++) { + JSONObject empty_row = emptyArr.getJSONObject(i); + + String block_num = empty_row.getString("block_num"); + String row_num = empty_row.getString("row_num"); + String placement_type = empty_row.getString("placement_type"); + + JSONArray isLock = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('4','5') AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1'").getResultJSONArray(0); + + if (ObjectUtil.isEmpty(isLock)) { + + if (placement_type.equals("03")) { + // 右通 + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq desc").uniqueResult(0); + break; + } else if (placement_type.equals("02")) { + // 左通 + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq").uniqueResult(0); + break; + } else { + // 双通 + + // 先倒序找到第一个托盘、判断上一个是否有货位 + JSONObject jsonDescStruct = new JSONObject(); + JSONObject jsonDescBox = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq DESC").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonDescBox)) { + String out_order_seq = jsonDescBox.getString("out_order_seq"); + // 上一个货位顺序号 + jsonDescStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } else { + // 倒序找到第一个空位 + jsonDescStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq DESC").uniqueResult(0); + } + + if (ObjectUtil.isNotEmpty(jsonDescStruct)) { + struct_jo = jsonDescStruct; + break; + } else { + // 没有就正序找到第一个托盘、判断上一个是否有货位 + JSONObject jsonAscStruct = new JSONObject(); + JSONObject jsonAscBox = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq ASC").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonAscBox)) { + String out_order_seq2 = jsonAscBox.getString("out_order_seq"); + // 上一个货位顺序号 + jsonAscStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } else { + jsonAscStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq ASC").uniqueResult(0); + } + + if (ObjectUtil.isNotEmpty(jsonAscStruct)) { + struct_jo = jsonAscStruct; + break; + } + } + } + } else { + continue; + } + } + + if (ObjectUtil.isEmpty(struct_jo)) { + throw new BadRequestException("未查询到可用的空载具存放点位!"); + } + return struct_jo; } /** @@ -194,7 +363,7 @@ public class HandMoveStorServiceImpl implements HandMoveStorService { * @param rows */ @Transactional(rollbackFor = Exception.class) - JSONObject insertDtlByRows(JSONObject jo_mst, ArrayList rows) { + JSONObject insertDtlByRows(JSONObject jo_mst, ArrayList rows) { //明细表 WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_MoveInvDtl"); //主表 @@ -213,9 +382,9 @@ public class HandMoveStorServiceImpl implements HandMoveStorService { HashMap Struct_map = new HashMap(); StringBuffer ids = new StringBuffer(); for (int i = 0; i < rows.size(); i++) { - HashMap row = rows.get(i); + Map row = rows.get(i); JSONObject jo_row = (JSONObject) JSONObject.toJSON(row); - String storagevehicle_code = row.get("storagevehicle_code"); + String storagevehicle_code = (String) row.get("storagevehicle_code"); if (i == 0) { ids.append("'"); } @@ -388,7 +557,9 @@ public class HandMoveStorServiceImpl implements HandMoveStorService { for (int i = 0; i < rows.size(); i++) { JSONObject row = rows.getJSONObject(i); String storagevehicle_code = row.getString("storagevehicle_code"); - ids.append("'"); + if (i == 0) { + ids.append("'"); + } if (!Struct_map.containsKey(storagevehicle_code)) { Struct_map.put(storagevehicle_code, row); } @@ -441,6 +612,7 @@ public class HandMoveStorServiceImpl implements HandMoveStorService { task.put("task_id", task_id); task.put("task_code", task_code); task.put("task_type", "010505"); + task.put("acs_task_type", "7"); task.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); task.put("point_code1", jo.getString("start_point_code")); task.put("point_code2", point.getString("point_code")); @@ -522,7 +694,7 @@ public class HandMoveStorServiceImpl implements HandMoveStorService { //调用删除明细,还原库存方法 this.deleteById(moveinv_id + ""); //获取明细 - ArrayList rows = (ArrayList) whereJson.get("tableData"); + ArrayList rows = (ArrayList) whereJson.get("tableData"); //调用明细处理方法 JSONObject ret = this.insertDtlByRows(jo_mst, rows); jo_mst.put("remark", whereJson.get("remark")); @@ -987,6 +1159,7 @@ public class HandMoveStorServiceImpl implements HandMoveStorService { String now = DateUtil.now(); String moveinv_id = whereJson.getString("moveinv_id"); + String bill_type = whereJson.getString("bill_type"); //查询所有载具的库存 JSONArray ja = WQL.getWO("QST_IVT_HANDMOVESTOR") .addParam("flag", "4") @@ -999,11 +1172,13 @@ public class HandMoveStorServiceImpl implements HandMoveStorService { JSONObject jo = ja.getJSONObject(i); String task_id = jo.getString("task_id"); - // 判断起点是否被挡 - JSONObject jsonTask = wo_Task.query("task_id = '" + task_id + "'").uniqueResult(0); - JSONObject jsonAttr = wo_attr.query("struct_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); - // 调用共用判断是否阻挡并生成任务、移库单 - this.isBlock(jsonAttr); + if (!StrUtil.equals(bill_type, "30")) { + // 判断起点是否被挡 + JSONObject jsonTask = wo_Task.query("task_id = '" + task_id + "'").uniqueResult(0); + JSONObject jsonAttr = wo_attr.query("struct_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); + // 调用共用判断是否阻挡并生成任务、移库单 + this.isBlock(jsonAttr); + } JSONObject result = handMoveStorAcsTask.immediateNotifyAcs(task_id); JSONObject task = wo_Task.query("task_id='" + task_id + "'").uniqueResult(0); @@ -1016,11 +1191,11 @@ public class HandMoveStorServiceImpl implements HandMoveStorService { map.put("work_status", "02"); wo_dtl.update(map, "is_issued='0' and task_id='" + task.getString("task_id") + "'"); //更新任务为已下发 - map.put("task_status", "02"); + map.put("task_status", "05"); map.put("update_optid", currentUserId + ""); map.put("update_optname", nickName); map.put("update_time", now); - wo_Task.update(map, "is_delete ='0' and task_status='01' and task_id='" + task_id + "'"); + wo_Task.update(map, "is_delete ='0' and task_id='" + task_id + "'"); } else { throw new BadRequestException("任务下发失败,请稍后重试!"); } @@ -1033,6 +1208,91 @@ public class HandMoveStorServiceImpl implements HandMoveStorService { wo_mst.update(map, "moveinv_id='" + moveinv_id + "'"); } + @Override + @Transactional(rollbackFor = Exception.class) + public void checkReturn() { + /* + * 将所有盘点位上的木箱生成移库单并下发任务 + */ + WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); // 仓位表 + + // 1.找出所有需要盘点的移库的木箱 + JSONArray boxArr = attrTab.query("sect_id = '" + RegionTypeEnum.PD01.getId() + "' and IFNULL(storagevehicle_code,'') <> '' and is_used = '1' and is_delete = '0' order by block_num ASC,out_order_seq DESC").getResultJSONArray(0); + if (ObjectUtil.isEmpty(boxArr)) throw new BadRequestException("没有需要盘点回库的木箱!"); + + // 2.判断是否有被锁定的木箱 + boolean is_lock = boxArr.stream().map(row -> (JSONObject) row) + .anyMatch(row -> !StrUtil.equals(row.getString("lock_type"), "1")); + + if (is_lock) throw new BadRequestException("木箱存在被锁定,请检查!"); + + /* for (int i = 0; i < boxArr.size(); i++) { + JSONObject json = boxArr.getJSONObject(i); + + // 3.判断木箱是否存在未完成的盘点单 + WQL.getWO("QST_IVT_HANDMOVESTOR").addParam("flag", "8").addParam("storagevehicle_code",json.getString("storagevehicle_code")); + + }*/ + + // 3.判断木箱是否存在未完成的盘点单 + boxArr.forEach(row -> { + JSONObject json = WQL.getWO("QST_IVT_HANDMOVESTOR").addParam("flag", "8").addParam("storagevehicle_code", ((JSONObject) row).getString("storagevehicle_code")).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) + throw new BadRequestException("此木箱的盘点单据未完成:"+json.getString("storagevehicle_code")); + }); + + // 4.生成移库单 + for (int i = 0; i < boxArr.size(); i++) { + JSONObject json = boxArr.getJSONObject(i); + + // 找一个移入仓位 + RawAssistIStorService rawAssistIStorService = SpringContextHolder.getBean(RawAssistIStorService.class); + + JSONObject moveParamIn = new JSONObject(); + moveParamIn.put("box_no", json.getString("storagevehicle_code")); + moveParamIn.put("sect_id", RegionTypeEnum.ZC01.getId()); + moveParamIn.put("layer_num", json.getString("layer_num")); + JSONObject jsonMoveIn = rawAssistIStorService.autoDisMove(moveParamIn); + + if (ObjectUtil.isEmpty(jsonMoveIn)) throw new BadRequestException("没有可用暂存位"); + + JSONObject jsonMst = new JSONObject(); // 主表 + jsonMst.put("bill_type", "31"); + jsonMst.put("buss_type", "31"); + jsonMst.put("bill_status", "10"); + jsonMst.put("biz_date", DateUtil.today()); + jsonMst.put("stor_code", "CP01"); + jsonMst.put("stor_id", "1582991156504039424"); + jsonMst.put("stor_name", "成品仓库"); + jsonMst.put("is_task", "1"); + + JSONArray dtlArr = new JSONArray(); // 明细 + + // 组织明细 + JSONArray jsonIvt = WQL.getWO("QST_IVT_HANDMOVESTOR").addParam("flag", "35").addParam("package_box_sn", json.getString("storagevehicle_code")).process().getResultJSONArray(0); + jsonIvt.forEach(row -> { + ((JSONObject) row).put("wrok_status", "10"); + ((JSONObject) row).put("turnin_sect_id", jsonMoveIn.getString("sect_id")); + ((JSONObject) row).put("turnin_sect_code", jsonMoveIn.getString("sect_code")); + ((JSONObject) row).put("turnin_sect_name", jsonMoveIn.getString("sect_name")); + ((JSONObject) row).put("turnin_struct_id", jsonMoveIn.getString("struct_id")); + ((JSONObject) row).put("turnin_struct_code", jsonMoveIn.getString("struct_code")); + ((JSONObject) row).put("turnin_struct_name", jsonMoveIn.getString("struct_name")); + dtlArr.add(row); + }); + + jsonMst.put("tableData", dtlArr); + String moveinv_id = insertDtl2(jsonMst); + + // 下发任务 + JSONObject taskParam = new JSONObject(); + taskParam.put("moveinv_id",moveinv_id); + taskParam.put("bill_type",jsonMst.getString("jsonMst")); + + handdown(taskParam); + } + } + @Transactional(rollbackFor = Exception.class) public Integer isBlock(JSONObject whereJson) { String placement_type = whereJson.getString("placement_type"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/task/EmpMoveTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/task/EmpMoveTask.java new file mode 100644 index 000000000..1ff943fb3 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/task/EmpMoveTask.java @@ -0,0 +1,199 @@ +package org.nl.wms.st.instor.task; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.sch.AcsTaskDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.st.instor.service.impl.HandMoveStorServiceImpl; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +@Component +@RequiredArgsConstructor +public class EmpMoveTask extends AbstractAcsTask { + private final String THIS_CLASS = EmpMoveTask.class.getName(); + + @Override + public List addTask() { + /* + * 下发给ACS时需要特殊处理 + */ + JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); + + ArrayList resultList = new ArrayList<>(); + for (int i = 0; i < arr.size(); i++) { + JSONObject json = arr.getJSONObject(i); + + char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length()-1); + AcsTaskDto dto = AcsTaskDto.builder() + .ext_task_id(json.getString("task_id")) + .task_code(json.getString("task_code")) + .task_type(json.getString("acs_task_type")) + .start_device_code(json.getString("point_code1")) + .next_device_code(json.getString("point_code2")) + .vehicle_code(json.getString("vehicle_code")) + .priority(json.getString("priority")) + .dtl_type(String.valueOf(dtl_type)) + .remark(json.getString("remark")) + .build(); + resultList.add(dto); + } + return resultList; + } + + /** + * + * @param taskObj 代表一条任务对象 + * @param status 代表wcs任务完成状态: //1:执行中,2:完成 ,3:acs取消 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject taskObj, String status) { + + WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task"); //任务表 + WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); // 仓位表 + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 + + + String task_id = taskObj.getString("task_id"); + if (StrUtil.isEmpty(task_id)) { + throw new BadRequestException("任务id不能为空!"); + } + + JSONObject jsonTask = wo_Task.query("task_id='"+task_id+"'").uniqueResult(0); + + if(jsonTask==null){ + throw new BadRequestException("查询不到操作的任务记录!"); + } + + if(TaskStatusEnum.EXECUTING.getCode().equals(status)){ + // 执行中 + jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + jsonTask.put("update_time", DateUtil.now()); + wo_Task.update(jsonTask); + + }else if(TaskStatusEnum.FINISHED.getCode().equals(status)){ + // 完成 + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + + JSONObject param = new JSONObject(); + + // 更新仓位 + param.put("lock_type", "1"); + param.put("storagevehicle_code", ""); + attrTab.update(param,"struct_code = '"+jsonTask.getString("point_code1")+"'"); + + param.put("storagevehicle_code",jsonTask.getString("vehicle_code")); + attrTab.update(param,"struct_code = '"+jsonTask.getString("point_code2")+"'"); + + // 更新点位 + JSONObject param2 = new JSONObject(); + param2.put("lock_type", "1"); + param2.put("vehicle_code", ""); + param2.put("point_status", "1"); + pointTab.update(param2,"point_code = '"+jsonTask.getString("point_code1")+"'"); + + param2.put("vehicle_code", jsonTask.getString("vehicle_code")); + param2.put("point_status", "3"); + pointTab.update(param2,"point_code = '"+jsonTask.getString("point_code2")+"'"); + + // 更新任务为完成 + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("update_optid", currentUserId); + jsonTask.put("update_optname", currentUsername); + jsonTask.put("update_time", DateUtil.now()); + wo_Task.update(jsonTask); + + }else if("0".equals(status)){ + // 取消 + if (jsonTask.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.START_AND_POINT.getCode())) { + throw new BadRequestException("任务:" + jsonTask.getString("task_code") + "已下发,不可取消"); + } + + // 更新删除字段 + jsonTask.put("is_delete", "1"); + jsonTask.put("update_time", DateUtil.now()); + wo_Task.update(jsonTask); + + // 更新仓位 + JSONObject param = new JSONObject(); + param.put("lock_type", "1"); + attrTab.update(param,"struct_code = '"+jsonTask.getString("point_code1")+"'"); + attrTab.update(param,"struct_code = '"+jsonTask.getString("point_code2")+"'"); + + }else{ + throw new BadRequestException("任务状态更新异常!"); + } + } + + /** + * + * @param form 创建任务需要的参数 + * @return + */ + @Override + public String createTask(JSONObject form) { + WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + + JSONObject json = new JSONObject(); + json.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); + json.put("task_code", IdUtil.getSnowflake(1, 1).nextId()); + + json.put("task_type", form.getString("task_type")); + json.put("vehicle_code", form.getString("vehicle_code")); + json.put("task_name", form.getString("task_name")); + json.put("point_code1", form.getString("point_code1")); + json.put("point_code2", form.getString("point_code2")); + json.put("material_id", form.getString("material_id")); + json.put("task_group_id", form.getString("task_group_id")); + json.put("sort_seq", form.getString("sort_seq")); + + json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + json.put("handle_class", THIS_CLASS); + json.put("create_id", currentUserId); + json.put("create_name", currentUsername); + json.put("create_time", DateUtil.now()); + json.put("acs_task_type", "7"); + WQLObject.getWQLObject("SCH_BASE_Task").insert(json); + + // 锁定起点 + JSONObject param = new JSONObject(); + param.put("lock_type", "4"); + attrTab.update(param,"struct_code = '"+form.getString("point_code1")+"'"); + + // 锁定终点 + param.put("lock_type", "5"); + attrTab.update(param,"struct_code = '"+form.getString("point_code2")+"'"); + return json.getString("task_id"); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void forceFinish(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); + } + + @Override + public void cancel(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, "0"); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_CHECK.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_CHECK.wql index 28779db57..814501562 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_CHECK.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_CHECK.wql @@ -160,12 +160,23 @@ struct.sect_code, mb.material_code, mb.material_name, - user1.person_name AS process_optname + user1.person_name AS process_optname, + sub.date_of_production FROM ST_IVT_CheckDtl CheckDtl LEFT JOIN md_me_materialbase mb ON mb.material_id = CheckDtl.material_id LEFT JOIN st_ivt_structattr struct ON struct.struct_id = CheckDtl.struct_id LEFT JOIN sys_user user1 ON user1.user_id = CheckDtl.process_optid + LEFT JOIN ( + SELECT + MIN(date_of_production) AS date_of_production, + package_box_sn + FROM + pdm_bi_subpackagerelation + WHERE + 1=1 + group by package_box_sn + ) sub ON sub.package_box_sn = CheckDtl.storagevehicle_code WHERE CheckDtl.status <> '1' OPTION 输入.check_id <> "" @@ -185,12 +196,23 @@ struct.sect_code, mb.material_code, mb.material_name, - user1.person_name AS process_optname + user1.person_name AS process_optname, + sub.date_of_production FROM ST_IVT_CheckDtl CheckDtl LEFT JOIN md_me_materialbase mb ON mb.material_id = CheckDtl.material_id LEFT JOIN st_ivt_structattr struct ON struct.struct_id = CheckDtl.struct_id LEFT JOIN sys_user user1 ON user1.user_id = CheckDtl.process_optid + LEFT JOIN ( + SELECT + MIN(date_of_production) AS date_of_production, + package_box_sn + FROM + pdm_bi_subpackagerelation + WHERE + 1=1 + group by package_box_sn + ) sub ON sub.package_box_sn = CheckDtl.storagevehicle_code WHERE CheckDtl.status = '1' OPTION 输入.check_id <> "" diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_HANDMOVESTOR.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_HANDMOVESTOR.wql index 11996e66b..0370a6bad 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_HANDMOVESTOR.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_HANDMOVESTOR.wql @@ -219,6 +219,48 @@ ENDPAGEQUERY ENDIF + IF 输入.flag = "35" + QUERY + SELECT + ivt2.stockrecord_id, + ivt2.material_id, + ivt2.pcsn, + ivt2.quality_scode, + ivt2.qty_unit_id, + ivt2.ivt_qty AS qty, + mb.material_code, + mb.material_name, + struct.struct_id AS turnout_struct_id, + struct.struct_code AS turnout_struct_code, + struct.struct_name AS turnout_struct_name, + struct.sect_id AS turnout_sect_id, + struct.sect_name AS turnout_sect_name, + struct.sect_code AS turnout_sect_code, + struct.storagevehicle_id, + struct.storagevehicle_code, + mu.unit_name AS qty_unit_name, + sub.sale_order_name, + sub.customer_name, + sub.customer_description, + sub.sap_pcsn + FROM + st_ivt_structattr struct + INNER JOIN ST_IVT_StructIvt ivt2 ON struct.struct_id = ivt2.struct_id + LEFT JOIN md_me_materialbase mb ON mb.material_id = ivt2.material_id + LEFT JOIN md_pb_measureunit mu ON mu.measure_unit_id = ivt2.qty_unit_id + LEFT JOIN pdm_bi_subpackagerelation sub ON sub.container_name = ivt2.pcsn AND sub.package_box_sn = struct.storagevehicle_code + WHERE + 1 = 1 + AND struct.lock_type = '1' + + OPTION 输入.package_box_sn <> "" + sub.package_box_sn = 输入.package_box_sn + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF + IF 输入.flag = "33" QUERY SELECT @@ -371,5 +413,24 @@ ENDQUERY ENDIF + IF 输入.flag = "8" + QUERY + SELECT + dtl.* + FROM + st_ivt_checkdtl dtl + LEFT JOIN st_ivt_checkmst mst ON mst.check_id = dtl.check_id + WHERE + mst.is_delete = '0' + and dtl.status not in ('3','5','99') + + OPTION 输入.storagevehicle_code <> "" + dtl.storagevehicle_code = 输入.storagevehicle_code + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java index 39b0f1dea..615e3d975 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java @@ -3660,11 +3660,11 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { for (int i = 0; i < arr.size(); i++) { JSONObject json = arr.getJSONObject(i); String struct_code = json.getString("struct_code"); + String vehicle_code = json.getString("storagevehicle_code"); - JSONObject jsonTask1 = taskTab.query("point_code1 = '" + struct_code + "' and task_status in ('05','06')").uniqueResult(0); - JSONObject jsonTask2 = taskTab.query("point_code2 = '" + struct_code + "' and task_status in ('05','06')").uniqueResult(0); + JSONObject jsonTask1 = taskTab.query("point_code1 = '" + struct_code + "' and task_status in ('05','06','07') and vehicle_code = '"+vehicle_code+"'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonTask1) || ObjectUtil.isNotEmpty(jsonTask2)) { + if (ObjectUtil.isNotEmpty(jsonTask1)) { } else { result.add(json); @@ -4208,7 +4208,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { jo_mst.put("update_optid", currentUserId + ""); jo_mst.put("update_optname", nickName); jo_mst.put("update_time", now); - jo_mst.put("out_stor_id", ""); + jo_mst.put("out_stor_id", out_jo.getString("stor_id")); mst_wql.insert(jo_mst); for (int i = 0; i < dis_rows.size(); i++) { @@ -4222,9 +4222,10 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { dis_row.put("seq_no", i + 1); dis_row.put("bill_status", "30"); dis_row.put("real_qty", "0"); + dis_row.put("vbeln", dtl_row.getString("vbeln")); dis_row.put("source_billdtl_id", dtl_row.getString("iostorinvdtl_id")); dis_row.put("source_bill_type", mst_row.getString("bill_type")); - dis_row.put("source_bill_code", mst_row.getString("bill_code")); + dis_row.put("source_bill_code", dtl_row.getString("source_bill_code")); dis_row.put("source_bill_table", "ST_IVT_IOStorInvDtl"); dis_row.put("assign_qty", dis_row.getString("plan_qty")); dis_row.put("unassign_qty", "0"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java index e7bc9128a..92baef6fa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java @@ -2,6 +2,7 @@ package org.nl.wms.st.returns.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; @@ -534,20 +535,20 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { JSONObject jsonDis = disArr.getJSONObject(j); JSONObject paramDis = new JSONObject(); paramDis.put("ZDBSQD", jsonDtl.getString("vbeln")); - paramDis.put("VBELN", jsonDtl.getString("source_bill_code")); + paramDis.put("ZVBELN", jsonDtl.getString("source_bill_code")); JSONObject jsonMater = materTab.query("material_id = '" + jsonDis.getString("material_id") + "'").uniqueResult(0); paramDis.put("MATNR", jsonMater.getString("material_code")); - paramDis.put("LGORT1", jo_mst.getString("stor_code")); + paramDis.put("LGORT2", jo_mst.getString("stor_code")); JSONObject jsonStorOut = WQLObject.getWQLObject("st_ivt_bsrealstorattr").query("stor_id = '" + jo_mst.getString("out_stor_id") + "'").uniqueResult(0); - paramDis.put("LGORT2", jsonStorOut.getString("stor_code")); + paramDis.put("LGORT1", jsonStorOut.getString("stor_code")); JSONObject jsonSub = subTab.query("container_name = '" + jsonDis.getString("pcsn") + "'").uniqueResult(0); paramDis.put("ZHL02", jsonSub.getString("width")); paramDis.put("ZZWLHD", jsonSub.getString("thickness")); - paramDis.put("CHARG", jsonDis.getString("pcsn")); - paramDis.put("KALAB", jsonDis.getString("plan_qty")); + paramDis.put("CHARG", jsonSub.getString("sap_pcsn")); + paramDis.put("KALAB", NumberUtil.round(jsonDis.getDoubleValue("plan_qty"),3)); paramDis.put("WERKS", "2460"); paramSapMstArr.add(paramDis); } @@ -563,7 +564,6 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { jo_mst.put("upload_optid", SecurityUtils.getCurrentUserId()); jo_mst.put("upload_time", DateUtil.now()); WQLObject.getWQLObject("ST_IVT_IOStorInv").update(jo_mst); - } // 改切出库 @@ -881,20 +881,20 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { JSONObject jsonDis = disArr.getJSONObject(j); JSONObject paramDis = new JSONObject(); paramDis.put("ZDBSQD", jsonDtl.getString("vbeln")); - paramDis.put("VBELN", jsonDtl.getString("source_bill_code")); + paramDis.put("ZVBELN", jsonDtl.getString("source_bill_code")); JSONObject jsonMater = materTab.query("material_id = '" + jsonDis.getString("material_id") + "'").uniqueResult(0); paramDis.put("MATNR", jsonMater.getString("material_code")); - paramDis.put("LGORT1", jo_mst.getString("stor_code")); + paramDis.put("LGORT2", jo_mst.getString("stor_code")); JSONObject jsonStorOut = WQLObject.getWQLObject("st_ivt_bsrealstorattr").query("stor_id = '" + jo_mst.getString("out_stor_id") + "'").uniqueResult(0); - paramDis.put("LGORT2", jsonStorOut.getString("stor_code")); + paramDis.put("LGORT1", jsonStorOut.getString("stor_code")); JSONObject jsonSub = subTab.query("container_name = '" + jsonDis.getString("pcsn") + "'").uniqueResult(0); paramDis.put("ZHL02", jsonSub.getString("width")); paramDis.put("ZZWLHD", jsonSub.getString("thickness")); - paramDis.put("CHARG", jsonDis.getString("pcsn")); - paramDis.put("KALAB", jsonDis.getString("plan_qty")); + paramDis.put("CHARG", jsonSub.getString("sap_pcsn")); + paramDis.put("KALAB", NumberUtil.round(jsonDis.getDoubleValue("plan_qty"),3)); paramDis.put("WERKS", "2460"); paramSapMstArr.add(paramDis); } diff --git a/lms/nladmin-ui/src/views/system/logicflow/editor/components/node/html/htmlNode.js b/lms/nladmin-ui/src/views/system/logicflow/editor/components/node/html/htmlNode.js index 9f541d8e4..5efdfbae7 100644 --- a/lms/nladmin-ui/src/views/system/logicflow/editor/components/node/html/htmlNode.js +++ b/lms/nladmin-ui/src/views/system/logicflow/editor/components/node/html/htmlNode.js @@ -6,6 +6,7 @@ import green from '../../../image/green.svg' import yellow from '../../../image/yellow.svg' import grey from '../../../image/grey.svg' import blue from '../../../image/blue.svg' +import red from '../../../image/red.svg' class ButtonNodeModel extends HtmlResize.model { initNodeData(data) { @@ -47,6 +48,9 @@ class ButtonNode extends HtmlResize.view { case 4: imageUrl = grey break + case 5: + imageUrl = red + break default: break } diff --git a/lms/nladmin-ui/src/views/system/logicflow/editor/image/red.svg b/lms/nladmin-ui/src/views/system/logicflow/editor/image/red.svg new file mode 100644 index 000000000..257610237 --- /dev/null +++ b/lms/nladmin-ui/src/views/system/logicflow/editor/image/red.svg @@ -0,0 +1 @@ + diff --git a/lms/nladmin-ui/src/views/system/monitor/device/structStage.js b/lms/nladmin-ui/src/views/system/monitor/device/structStage.js index 11cd4133e..439617434 100644 --- a/lms/nladmin-ui/src/views/system/monitor/device/structStage.js +++ b/lms/nladmin-ui/src/views/system/monitor/device/structStage.js @@ -30,3 +30,11 @@ export function autoWeb() { // 查询立库监控数据 method: 'post' }) } + +export function queryNum(data) { // 获取个数 + return request({ + url: 'api/autoWeb/queryNum', + method: 'post', + data + }) +} diff --git a/lms/nladmin-ui/src/views/wms/agvrush/charge/index.vue b/lms/nladmin-ui/src/views/wms/agvrush/charge/index.vue index a5e491d5d..e394ceab4 100644 --- a/lms/nladmin-ui/src/views/wms/agvrush/charge/index.vue +++ b/lms/nladmin-ui/src/views/wms/agvrush/charge/index.vue @@ -33,7 +33,7 @@ -
+
+ +
+ + 运行时长: + + + {{ agvObj.run_time }} + +
+
- - + + - - + + + /> + - - - - + + { this.sects = res.content }) - if (this.sect) { - this.query.sect = this.sect - if (this.sect.length === 1) { - this.query.stor_id = this.sect[0] - this.query.stor_id = this.storId - } - if (this.sect.length === 0) { - this.query.sect_id = '' - this.query.stor_id = '' - } - if (this.sect.length === 2) { - this.query.stor_id = this.sect[0] - this.query.sect_id = this.sect[1] - } - } this.query.is_lock = '1' this.query.lock_type = this.lock this.query.is_used = '1' - debugger - this.query.stor_id = this.storId this.crud.toQuery() }, handleSelectionChange(val, row) { @@ -182,6 +179,7 @@ export default { this.crud.query.stor_id = val[0] this.crud.query.sect_id = val[1] } + this.crud.toQuery() }, onSelectAll() { this.$refs.table.clearSelection() diff --git a/lms/nladmin-ui/src/views/wms/riku/rikuone/index.vue b/lms/nladmin-ui/src/views/wms/riku/rikuone/index.vue index 34ac82a40..363acbfd8 100644 --- a/lms/nladmin-ui/src/views/wms/riku/rikuone/index.vue +++ b/lms/nladmin-ui/src/views/wms/riku/rikuone/index.vue @@ -1,5 +1,31 @@