From 7364df4a2d06a054ab0555d4117d13dd875c0d01 Mon Sep 17 00:00:00 2001 From: "USER-20220102CG\\noblelift" <546428999@qq.com> Date: Mon, 15 May 2023 17:06:04 +0800 Subject: [PATCH 1/7] =?UTF-8?q?fix=20ndc=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../run/OneNDCSocketConnectionAutoRun.java | 2 +- .../run/TwoNDCSocketConnectionAutoRun.java | 20 ++++++++++--------- .../SiemensConveyorDeviceDriver.java | 1 - 3 files changed, 12 insertions(+), 11 deletions(-) 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(); } } From 0ba8940acff1c76285bd9520708af1ce6ad4d386 Mon Sep 17 00:00:00 2001 From: liuxy Date: Tue, 16 May 2023 18:41:08 +0800 Subject: [PATCH 2/7] =?UTF-8?q?fix:=E7=AB=8B=E5=BA=93=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mnt/service/impl/AutoRiKuServiceImpl.java | 75 ++++++++++++++----- .../java/org/nl/modules/mnt/wql/AUTORIKU.wql | 69 +++++++++++++++++ .../service/impl/StructattrServiceImpl.java | 17 +++++ .../wms/basedata/st/wql/QST_STRUCT_ATTR.wql | 4 + .../acs/service/impl/WmsToAcsServiceImpl.java | 18 ++++- .../editor/components/node/html/htmlNode.js | 4 + .../system/logicflow/editor/image/red.svg | 1 + .../src/views/wms/agvrush/charge/index.vue | 12 ++- .../src/views/wms/pub/StructDialog.vue | 58 +++++++------- .../src/views/wms/riku/rikuone/index.vue | 49 +++++++++++- .../src/views/wms/riku/rikustat/PieChart.vue | 10 +++ .../src/views/wms/riku/rikutthree/index.vue | 13 +++- .../src/views/wms/riku/rikutwo/index.vue | 13 +++- .../wms/st/inStor/moveStor/AddDialog.vue | 7 +- .../views/wms/st/inStor/moveStor/AddDtl.vue | 52 +++++++++---- 15 files changed, 326 insertions(+), 76 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/modules/mnt/wql/AUTORIKU.wql create mode 100644 lms/nladmin-ui/src/views/system/logicflow/editor/image/red.svg 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..712df3106 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,7 +194,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", "立库汇总统计"); 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/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..80b68f522 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; 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..54ef02c8c 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; @@ -169,7 +170,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { result.put("message", "下发成功,但未连接ACS!"); result.put("data", new JSONArray()); - /* // 测试数据 + // 测试数据 JSONArray data = result.getJSONArray("data"); JSONObject a = new JSONObject(); a.put("electricity", "86"); @@ -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); } @@ -211,7 +218,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { } nowJson.put("jsonA1",ArrA1); nowJson.put("jsonLK",ArrLk); - result.put("data", nowJson);*/ + result.put("data", nowJson); return result; } @@ -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-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/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 @@ @@ -243,7 +243,7 @@ import crudUserStor from '@/views/wms/basedata/st/userStor/userStor' const defaultForm = { bill_code: '', - stor_id: '', + stor_id: '1582991156504039424', stor_code: '', stor_name: '', bill_status: '10', @@ -278,6 +278,7 @@ export default { nowindex: '', storlist: [], invtypelist: [], + layer_num: null, rules: { stor_id: [ { required: true, message: '仓库不能为空', trigger: 'blur' } @@ -350,6 +351,7 @@ export default { this.form.stor_name = item.stor_name } }) + this.form.tableData = [] }, async queryDtl() { if (!this.form.stor_id) { @@ -359,6 +361,7 @@ export default { this.dtlShow = true }, async queryStruct(index, row) { + this.layer_num = row.turnout_struct_code.charAt(row.turnout_struct_code.length - 1) this.structShow = true this.$refs.child.getMsg(false) this.nowindex = index diff --git a/lms/nladmin-ui/src/views/wms/st/inStor/moveStor/AddDtl.vue b/lms/nladmin-ui/src/views/wms/st/inStor/moveStor/AddDtl.vue index 4d27080f7..ad139b5bd 100644 --- a/lms/nladmin-ui/src/views/wms/st/inStor/moveStor/AddDtl.vue +++ b/lms/nladmin-ui/src/views/wms/st/inStor/moveStor/AddDtl.vue @@ -9,18 +9,36 @@ @close="close" @open="open" > - - - + + + - - + + + + + - - + + - - + + - - - - - - + + +
{ @@ -186,6 +205,7 @@ export default { this.crud.query.stor_id = val[0] this.crud.query.sect_id = val[1] } + this.crud.toQuery() }, submit() { debugger From 4b68ad11ce677f134a46e183ca1fa7ee081b4431 Mon Sep 17 00:00:00 2001 From: liuxy Date: Wed, 17 May 2023 18:17:19 +0800 Subject: [PATCH 3/7] =?UTF-8?q?rev=EF=BC=9A=E9=94=81=E8=B6=85=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/nl/modules/system/util/CodeUtil.java | 6 ++++-- .../st/outbill/service/impl/CheckOutBillServiceImpl.java | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) 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/st/outbill/service/impl/CheckOutBillServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java index 39b0f1dea..c5c5c1388 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); From 60b5b44e90f9225c6aa79640333976097b1b2ab7 Mon Sep 17 00:00:00 2001 From: "USER-20220102CG\\noblelift" <546428999@qq.com> Date: Wed, 17 May 2023 19:58:56 +0800 Subject: [PATCH 4/7] =?UTF-8?q?fix=20=E7=AB=8B=E5=BA=93=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E6=8C=87=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nl/acs/ext/wms/service/impl/LiKuToAcsServiceImpl.java | 8 ++++++++ acs/nladmin-system/src/main/resources/initsql.txt | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) 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 From 1ab3878fe2a083e2411a31e76b36bc7af95b1b17 Mon Sep 17 00:00:00 2001 From: liuxy Date: Thu, 18 May 2023 17:37:02 +0800 Subject: [PATCH 5/7] =?UTF-8?q?add=EF=BC=9A=E4=B8=B4=E6=97=B6=E9=80=9A?= =?UTF-8?q?=E9=81=93=E7=A7=BB=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/mnt/service/AutoRiKuService.java | 4 + .../mnt/service/impl/AutoRiKuServiceImpl.java | 18 ++ .../mnt/websocket/AutoWebSocketRiKu.java | 7 + .../service/impl/StructattrServiceImpl.java | 12 + .../acs/service/impl/WmsToAcsServiceImpl.java | 4 +- .../st/inbill/wql/QST_IVT_RAWASSISTISTOR.wql | 8 + .../service/impl/HandMoveStorServiceImpl.java | 264 +++++++++++++++--- .../nl/wms/st/instor/task/EmpMoveTask.java | 199 +++++++++++++ .../st/instor/wql/QST_IVT_HANDMOVESTOR.wql | 42 +++ .../system/monitor/device/structStage.js | 8 + .../views/wms/agvrush/devicecharge/index.vue | 1 + .../src/views/wms/sendout/outone/index.vue | 78 +++++- .../wms/st/inStor/moveStor/AddDialog.vue | 80 +++++- .../views/wms/st/inStor/moveStor/index.vue | 11 + 14 files changed, 675 insertions(+), 61 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/st/instor/task/EmpMoveTask.java 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 712df3106..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 @@ -209,4 +209,22 @@ public class AutoRiKuServiceImpl implements AutoRiKuService { 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/wms/basedata/st/service/impl/StructattrServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java index 80b68f522..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 @@ -325,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/ext/acs/service/impl/WmsToAcsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java index 54ef02c8c..cd8294b2f 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 @@ -170,7 +170,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { result.put("message", "下发成功,但未连接ACS!"); result.put("data", new JSONArray()); - // 测试数据 + /* // 测试数据 JSONArray data = result.getJSONArray("data"); JSONObject a = new JSONObject(); a.put("electricity", "86"); @@ -218,7 +218,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { } nowJson.put("jsonA1",ArrA1); nowJson.put("jsonLK",ArrLk); - result.put("data", nowJson); + result.put("data", nowJson);*/ return result; } 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/service/impl/HandMoveStorServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/HandMoveStorServiceImpl.java index 566ed315f..0158fc989 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("'"); } @@ -522,7 +691,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 +1156,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 +1169,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); 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_HANDMOVESTOR.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_HANDMOVESTOR.wql index 11996e66b..b868cc15f 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 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/devicecharge/index.vue b/lms/nladmin-ui/src/views/wms/agvrush/devicecharge/index.vue index b4bf611c4..4fd838db7 100644 --- a/lms/nladmin-ui/src/views/wms/agvrush/devicecharge/index.vue +++ b/lms/nladmin-ui/src/views/wms/agvrush/devicecharge/index.vue @@ -146,6 +146,7 @@ export default { } }, mounted() { + this.query.is_fault = '1' this.init() }, beforeDestroy() { diff --git a/lms/nladmin-ui/src/views/wms/sendout/outone/index.vue b/lms/nladmin-ui/src/views/wms/sendout/outone/index.vue index aa65a3386..db617289a 100644 --- a/lms/nladmin-ui/src/views/wms/sendout/outone/index.vue +++ b/lms/nladmin-ui/src/views/wms/sendout/outone/index.vue @@ -1,5 +1,47 @@