From a7425394028cbfb0274cc188ff9f6485a2e0b70d Mon Sep 17 00:00:00 2001 From: yanps Date: Mon, 26 Aug 2024 15:47:51 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E6=B7=BB=E5=8A=A0=E6=89=8B=E6=8C=81?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- acs/nladmin-system/nlsso-server/pom.xml | 55 +++++- .../agv/ndcone/AgvNdcOneDeviceDriver.java | 174 +++++++++++++----- .../basedriver/plc_to_agv/ItemProtocol.java | 60 +++++- .../plc_to_agv/PlcToAgvDeviceDriver.java | 67 ++++++- .../java/org/nl/config/SwaggerConfig.java | 22 ++- .../org/nl/quartz/task/AutoCreateInst.java | 3 + .../lucene/impl/LuceneServiceImpl.java | 2 + .../views/acs/device/driver/plc_to_agv.vue | 29 ++- .../src/views/system/monitor/device/index.vue | 12 ++ .../nl/common/enums/region/RegionEnum.java | 1 + .../acs/service/impl/AcsToWmsServiceImpl.java | 50 ++++- .../controller/HandheldController.java | 38 +++- .../ext/handheld/service/HandheldService.java | 21 ++- .../service/impl/HandheldServiceImpl.java | 112 ++++++++--- .../service/impl/SortingServiceImpl.java | 22 ++- .../service/dao/mapper/SchBasePointMapper.xml | 2 - .../service/impl/SchBasePointServiceImpl.java | 3 +- .../sch/task/service/ISchBaseTaskService.java | 19 ++ .../service/impl/SchBaseTaskServiceImpl.java | 60 ++++++ .../nl/wms/sch/task_manage/AbstractTask.java | 7 +- .../sch/task_manage/task/core/TaskStatus.java | 4 +- .../task/tasks/handheld/EmptyCageTask.java | 17 +- .../task/tasks/handheld/MtTask.java | 166 +++++++++++++++++ .../task/tasks/handheld/RackTask.java | 172 +++++++++++++++++ .../task/tasks/sorting/SortingCNTTask.java | 2 +- .../task/tasks/sorting/SortingSMTTask.java | 9 + .../task/tasks/sorting/SortingTwoCNTTask.java | 47 ++++- 27 files changed, 1029 insertions(+), 147 deletions(-) create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/MtTask.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/RackTask.java diff --git a/acs/nladmin-system/nlsso-server/pom.xml b/acs/nladmin-system/nlsso-server/pom.xml index f6fabd4..2f3e8f7 100644 --- a/acs/nladmin-system/nlsso-server/pom.xml +++ b/acs/nladmin-system/nlsso-server/pom.xml @@ -22,10 +22,10 @@ 1.1.22 1.2.0.Final 1.31.0 - 5.7.14 + 5.8.22 0.11.1 8.2.0 - + 5.9.0 1.9 @@ -48,10 +48,15 @@ org.dromara.dynamictp dynamic-tp-spring-boot-starter-adapter-webserver - 1.1.6 + 1.1.6.1 + + com.yomahub + tlog-all-spring-boot-starter + 1.5.0 + org.apache.lucene lucene-core @@ -88,11 +93,11 @@ - + @@ -184,7 +189,7 @@ - + + @@ -439,7 +444,7 @@ org.bouncycastle bcprov-jdk15on - 1.50 + 1.54 @@ -449,6 +454,36 @@ ${commons-csv.version} + + org.apache.poi + poi + 4.1.2 + + + org.apache.poi + poi-ooxml + 4.1.2 + + + org.apache.poi + poi-ooxml-schemas + 4.1.2 + + + org.springframework.retry + spring-retry + 1.2.5.RELEASE + + + io.swagger + swagger-annotations + 1.5.22 + + diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java index 2e9f7c1..71ca3ee 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java @@ -1,5 +1,6 @@ package org.nl.acs.device_driver.basedriver.agv.ndcone; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -41,6 +42,8 @@ import org.nl.system.service.param.ISysParamService; import org.nl.config.SpringContextHolder; import org.nl.system.service.param.impl.SysParamServiceImpl; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -155,19 +158,6 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic return; } device_code = deviceService.queryDeviceCodeByAddress(agvaddr); - /*if (agvaddr != 0) { - old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr); - if (StrUtil.contains(old_device_code, "-")) { - String[] point = old_device_code.split("-"); - device_code = point[0]; - } else if (StrUtil.contains(old_device_code, ".")) { - String[] point = old_device_code.split("\\."); - device_code = point[0]; - emptyNum = point[1]; - } else { - device_code = old_device_code; - } - }*/ if (agvaddr != 0) { old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr); @@ -188,20 +178,34 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic } if (device.getDeviceDriver() instanceof PlcToAgvDeviceDriver) { PlcToAgvDeviceDriver plcToAgvDeviceDriver = (PlcToAgvDeviceDriver) device.getDeviceDriver(); + Map extraValue = plcToAgvDeviceDriver.getExtraValue(); if (plcToAgvDeviceDriver.getAGVEnable() != 0) { - if (ObjectUtil.isNotEmpty(plcToAgvDeviceDriver.getExtraValue().get("upper_lower_levels"))) { - Object plc_to_agv = plcToAgvDeviceDriver.getExtraValue().get("upper_lower_levels"); - if ("1".equals(plc_to_agv)) { + if (device_code.contains("_01")) { + if (plcToAgvDeviceDriver.getAGVSetOutUpperAllowed() == 1) { + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); + } + } else if (device_code.contains("_02")) { + Object plc_to_agv = extraValue.get("upper_lower_levels"); + if (ObjectUtil.isNotNull(plc_to_agv) && "1".equals(plc_to_agv)) { plcToAgvDeviceDriver.writing("AGVSetOutReqUpper", "1"); if (plcToAgvDeviceDriver.getAGVSetOutUpperAllowed() == 1) { + plcToAgvDeviceDriver.writing("AGVInOP", "1"); data = feedBackStatus(data, index, 1, inst, task, 2, false); + } + } + } else if (ObjectUtil.isNotEmpty(extraValue.get("upper_lower_levels"))) { + Object plc_to_agv = extraValue.get("upper_lower_levels"); + if ("1".equals(plc_to_agv)) { + plcToAgvDeviceDriver.writing("AGVSetOutReqUpper", "1"); + if (plcToAgvDeviceDriver.getAGVSetOutUpperAllowed() == 1) { plcToAgvDeviceDriver.writing("AGVInOP", "1"); + data = feedBackStatus(data, index, 1, inst, task, 2, false); } } else if ("2".equals(plc_to_agv)) { plcToAgvDeviceDriver.writing("AGVSetOutReqLower", "1"); if (plcToAgvDeviceDriver.getAGVSetOutLowerAllowed() == 1) { - data = feedBackStatus(data, index, 1, inst, task, 2, false); plcToAgvDeviceDriver.writing("AGVInOP", "1"); + data = feedBackStatus(data, index, 1, inst, task, 2, false); } } } else { @@ -252,14 +256,49 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic } if (device.getDeviceDriver() instanceof PlcToAgvDeviceDriver) { PlcToAgvDeviceDriver plcToAgvDeviceDriver = (PlcToAgvDeviceDriver) device.getDeviceDriver(); - try { - plcToAgvDeviceDriver.writing("AGVInOP", "0"); - plcToAgvDeviceDriver.writing("AGVSetOutReqUpper", "0"); - plcToAgvDeviceDriver.writing("AGVSetOutReqLower", "0"); - } catch (Exception e) { - log.info("下发AGVInOP信号:{}失败", "0"); + if (device_code.contains("_01")) { + try { + List list = new ArrayList<>(); + Map map = new HashMap(); + map.put("code", "AGVInOP"); + map.put("value", "0"); + Map map1 = new HashMap(); + map1.put("code", "AGVSetOutReqUpper"); + map1.put("value", "0"); + Map map2 = new HashMap(); + map2.put("code", "AGVSetOutReqLower"); + map2.put("value", "0"); + list.add(map); + list.add(map1); + list.add(map2); + plcToAgvDeviceDriver.writing(list); + } catch (Exception e) { + log.info("下发AGVInOP信号:{}失败", "0"); + } + data = feedBackStatus(data, index, 2, inst, task, 2, false); + } else if (device_code.contains("_02")) { + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); + } else { + try { + List list = new ArrayList<>(); + Map map = new HashMap(); + map.put("code", "AGVInOP"); + map.put("value", "0"); + Map map1 = new HashMap(); + map1.put("code", "AGVSetOutReqUpper"); + map1.put("value", "0"); + Map map2 = new HashMap(); + map2.put("code", "AGVSetOutReqLower"); + map2.put("value", "0"); + list.add(map); + list.add(map1); + list.add(map2); + plcToAgvDeviceDriver.writing(list); + } catch (Exception e) { + log.info("下发AGVInOP信号:{}失败", "0"); + } + data = feedBackStatus(data, index, 2, inst, task, 2, false); } - data = feedBackStatus(data, index, 2, inst, task, 2, false); } else if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { try { data = feedBackStatus(data, index, 2, inst, task, 1, false); @@ -300,19 +339,33 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic if (device.getDeviceDriver() instanceof PlcToAgvDeviceDriver) { PlcToAgvDeviceDriver plcToAgvDeviceDriver = (PlcToAgvDeviceDriver) device.getDeviceDriver(); if (plcToAgvDeviceDriver.getAGVEnable() != 0) { - if (ObjectUtil.isNotEmpty(plcToAgvDeviceDriver.getExtraValue().get("upper_lower_levels"))) { - Object plc_to_agv = plcToAgvDeviceDriver.getExtraValue().get("upper_lower_levels"); - if ("1".equals(plc_to_agv)) { + Map extraValue = plcToAgvDeviceDriver.getExtraValue(); + if (device_code.contains("_01")) { + Object plc_to_agv = extraValue.get("upper_lower_levels"); + if (ObjectUtil.isNotNull(plc_to_agv) && "1".equals(plc_to_agv)) { plcToAgvDeviceDriver.writing("AGVSetInReqUpper", "1"); if (plcToAgvDeviceDriver.getAGVSetInUpperAllowed() == 1) { + plcToAgvDeviceDriver.writing("AGVInOP", "1"); data = feedBackStatus(data, index, 3, inst, task, 2, false); + } + } + } else if (device_code.contains("_02")) { + if (plcToAgvDeviceDriver.getAGVSetInUpperAllowed() == 1) { + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); + } + } else if (ObjectUtil.isNotEmpty(extraValue.get("upper_lower_levels"))) { + Object plc_to_agv = extraValue.get("upper_lower_levels"); + if ("1".equals(plc_to_agv)) { + plcToAgvDeviceDriver.writing("AGVSetInReqUpper", "1"); + if (plcToAgvDeviceDriver.getAGVSetInUpperAllowed() == 1) { plcToAgvDeviceDriver.writing("AGVInOP", "1"); + data = feedBackStatus(data, index, 3, inst, task, 2, false); } } else if ("2".equals(plc_to_agv)) { plcToAgvDeviceDriver.writing("AGVSetInReqLower", "1"); if (plcToAgvDeviceDriver.getAGVSetInLowerAllowed() == 1) { - data = feedBackStatus(data, index, 3, inst, task, 2, false); plcToAgvDeviceDriver.writing("AGVInOP", "1"); + data = feedBackStatus(data, index, 3, inst, task, 2, false); } } } else { @@ -347,20 +400,6 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic logServer.deviceExecuteLog(this.device_code, "", "", "agv地址参数有误,phase:" + phase); return; } - /*if (agvaddr != 0) { - old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr); - if (StrUtil.contains(old_device_code, "-")) { - String[] point = old_device_code.split("-"); - device_code = point[0]; - } else if (StrUtil.contains(old_device_code, ".")) { - String[] point = old_device_code.split("\\."); - device_code = point[0]; - emptyNum = point[1]; - } else { - device_code = old_device_code; - } - }*/ - if (agvaddr != 0) { old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr); device_code = old_device_code; @@ -383,21 +422,56 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic transportOrder = ""; if (device.getDeviceDriver() instanceof PlcToAgvDeviceDriver) { PlcToAgvDeviceDriver plcToAgvDeviceDriver = (PlcToAgvDeviceDriver) device.getDeviceDriver(); - try { - plcToAgvDeviceDriver.writing("AGVInOP", "0"); - plcToAgvDeviceDriver.writing("AGVSetInReqUpper", "0"); - plcToAgvDeviceDriver.writing("AGVSetInReqLower", "0"); - } catch (Exception e) { - log.info("下发AGVInOP信号失败"); + if (device_code.contains("_01")) { + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); + } else if (device_code.contains("_02")) { + try { + List list = new ArrayList<>(); + Map map = new HashMap(); + map.put("code", "AGVInOP"); + map.put("value", "0"); + Map map1 = new HashMap(); + map1.put("code", "AGVSetInReqUpper"); + map1.put("value", "0"); + Map map2 = new HashMap(); + map2.put("code", "AGVSetInReqLower"); + map2.put("value", "0"); + list.add(map); + list.add(map1); + list.add(map2); + plcToAgvDeviceDriver.writing(list); + } catch (Exception e) { + log.info("下发AGVInOP信号:{}失败", "0"); + } + data = feedBackStatus(data, index, 4, inst, task, 2, false); + } else { + try { + List list = new ArrayList<>(); + Map map = new HashMap(); + map.put("code", "AGVInOP"); + map.put("value", "0"); + Map map1 = new HashMap(); + map1.put("code", "AGVSetInReqUpper"); + map1.put("value", "0"); + Map map2 = new HashMap(); + map2.put("code", "AGVSetInReqLower"); + map2.put("value", "0"); + list.add(map); + list.add(map1); + list.add(map2); + plcToAgvDeviceDriver.writing(list); + } catch (Exception e) { + log.info("下发AGVInOP信号:{}失败", "0"); + } + data = feedBackStatus(data, index, 4, inst, task, 2, false); } - data = feedBackStatus(data, index, 4, inst, task, 2, false); } else if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { try { StandardOrdinarySiteDeviceDriver standar = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); Map extraValue = standar.getDevice().getExtraValue(); boolean is_empty = false; if (ObjectUtil.isNotEmpty(extraValue.get("is_empty"))) { - is_empty = extraValue.get("is_empty").equals("true") ? true : false; + is_empty = extraValue.get("is_empty").equals("true"); } data = feedBackStatus(data, index, 4, inst, task, 1, is_empty); } catch (Exception e) { diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/plc_to_agv/ItemProtocol.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/plc_to_agv/ItemProtocol.java index 968d8a1..0fcd889 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/plc_to_agv/ItemProtocol.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/plc_to_agv/ItemProtocol.java @@ -22,6 +22,8 @@ public class ItemProtocol { public static String item_AGVSetInReqUpper = "AGVSetInReqUpper"; public static String item_AGVSetOutReqUpper = "AGVSetOutReqUpper"; public static String item_AGVInOP = "AGVInOP"; + public static String item_Heartbeat = "heartbeat"; + public static String item_Heartbeat1 = "heartbeat1"; private PlcToAgvDeviceDriver driver; @@ -31,6 +33,10 @@ public class ItemProtocol { this.driver = driver; } + public short getHeartbeat() { + return this.getOpcShortValue(item_Heartbeat); + } + public int getAGVSetInLowerAllowed() { return this.getOpcIntegerValue(item_AGVSetInLowerAllowed); } @@ -51,6 +57,26 @@ public class ItemProtocol { return this.getOpcIntegerValue(item_AGVEnable); } + public int getAGVInOP() { + return this.getOpcIntegerValue(item_AGVInOP); + } + + public int getAGVSetInReqUpper() { + return this.getOpcIntegerValue(item_AGVSetInReqUpper); + } + + public int getAGVSetInReqLower() { + return this.getOpcIntegerValue(item_AGVSetInReqLower); + } + + public int getAGVSetOutReqUpper() { + return this.getOpcIntegerValue(item_AGVSetOutReqUpper); + } + + public int getAGVSetOutReqLower() { + return this.getOpcIntegerValue(item_AGVSetOutReqLower); + } + //是否有货 public int hasGoods(int move) { @@ -59,11 +85,14 @@ public class ItemProtocol { Boolean isonline; + int last_value = 0; + long date = 0; + private static final long STABILITY_DURATION_MS = 3000; // 稳定时间 3 秒 + public int getOpcIntegerValue(String protocol) { getExends(); Integer value = this.driver.getIntegeregerValue(protocol); if (value == null) { - // log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!"); setIsonline(false); } else { setIsonline(true); @@ -73,33 +102,48 @@ public class ItemProtocol { } - public void getExends(){ + + public Short getOpcShortValue(String protocol) { + getExends(); + Short value = this.driver.getShortValue(protocol); + if (value == null) { + setIsonline(false); + } else { + setIsonline(true); + return value; + } + return 0; + + } + + public void getExends() { Object upper_lower_levels = this.driver.getExtraValue().get("upper_lower_levels"); - if(ObjectUtil.isNotEmpty(upper_lower_levels)){ - msg = upper_lower_levels; + if (ObjectUtil.isNotEmpty(upper_lower_levels)) { + msg = upper_lower_levels; } } public static List getReadableItemDtos() { ArrayList list = new ArrayList(); - if(ObjectUtil.isNotEmpty(msg) && "1".equals(msg)){ + if (ObjectUtil.isNotEmpty(msg) && "1".equals(msg)) { list.add(new ItemDto(item_AGVSetInUpperAllowed, "上层允许上料", "DB600.B3")); list.add(new ItemDto(item_AGVSetOutUpperAllowed, "上层允许下料", "DB600.B4")); - }else if(ObjectUtil.isNotEmpty(msg) && "2".equals(msg)){ + } else if (ObjectUtil.isNotEmpty(msg) && "2".equals(msg)) { list.add(new ItemDto(item_AGVSetInLowerAllowed, "下层允许上料", "DB600.B0")); list.add(new ItemDto(item_AGVSetOutLowerAllowed, "下层允许下料", "DB600.B2")); } list.add(new ItemDto(item_AGVEnable, "agv动作使能", "DB600.D6")); + list.add(new ItemDto(item_Heartbeat, "心跳", "DB600.D6")); return list; } public static List getWriteableItemDtos() { ArrayList list = new ArrayList(); - if(ObjectUtil.isNotEmpty(msg) && "1".equals(msg)){ + if (ObjectUtil.isNotEmpty(msg) && "1".equals(msg)) { list.add(new ItemDto(item_AGVSetInReqUpper, "上层上料请求", "DB600.B3")); list.add(new ItemDto(item_AGVSetOutReqUpper, "上层下料请求", "DB600.B4")); - }else if(ObjectUtil.isNotEmpty(msg) && "2".equals(msg)){ + } else if (ObjectUtil.isNotEmpty(msg) && "2".equals(msg)) { list.add(new ItemDto(item_AGVSetInReqLower, "下层上料请求", "DB600.B0")); list.add(new ItemDto(item_AGVSetOutReqLower, "下层下料请求", "DB600.B2")); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/plc_to_agv/PlcToAgvDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/plc_to_agv/PlcToAgvDeviceDriver.java index 38f5b9c..9d53d9b 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/plc_to_agv/PlcToAgvDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/plc_to_agv/PlcToAgvDeviceDriver.java @@ -36,6 +36,7 @@ import org.nl.system.service.lucene.LuceneExecuteLogService; import org.nl.system.service.lucene.dto.LuceneLogDto; import org.openscada.opc.lib.da.Server; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; import java.util.*; @@ -69,9 +70,24 @@ public class PlcToAgvDeviceDriver extends AbstractOpcDeviceDriver implements Dev int AGVSetOutUpperAllowed = 0; int AGVEnable = 0; + int AGVSetInReqUpper = 0; + int AGVSetInReqLower = 0; + int AGVSetOutReqUpper = 0; + int AGVSetOutReqLower = 0; + int AGVInOP = 0; + + Boolean flag = false; String device_code; + String writing_heartbeat = "0"; + + private long STABILITY_DURATION_MS = 8000; + + int heartbeat = 0; + int last_heartbeat = 0; + private Date instruction_require_time = new Date(); + @Override public Device getDevice() { return this.device; @@ -88,15 +104,25 @@ public class PlcToAgvDeviceDriver extends AbstractOpcDeviceDriver implements Dev AGVSetInUpperAllowed = this.itemProtocol.getAGVSetInUpperAllowed(); AGVSetOutUpperAllowed = this.itemProtocol.getAGVSetOutUpperAllowed(); AGVEnable = this.itemProtocol.getAGVEnable(); - + AGVInOP = this.itemProtocol.getAGVInOP(); + AGVSetInReqUpper = this.itemProtocol.getAGVSetInReqUpper(); + AGVSetInReqLower = this.itemProtocol.getAGVSetInReqLower(); + AGVSetOutReqUpper = this.itemProtocol.getAGVSetOutReqUpper(); + AGVSetOutReqLower = this.itemProtocol.getAGVSetOutReqLower(); + heartbeat = this.itemProtocol.getHeartbeat(); + + if (heartbeat == 1) { + writing("heartbeat", writing_heartbeat); + } } catch (Exception var17) { log.info("读取信号失败,失败原因:{}", var17.getMessage()); throw new BadRequestException("读取信号失败,失败原因:" + var17.getMessage()); } - + last_heartbeat = heartbeat; } + /** * 多个信号一起下发电气 * @@ -131,6 +157,7 @@ public class PlcToAgvDeviceDriver extends AbstractOpcDeviceDriver implements Dev itemMap.put(to_param, Integer.parseInt(value)); try { + Thread.sleep(1000); this.checkcontrol(itemMap); } catch (Exception e) { e.printStackTrace(); @@ -143,6 +170,36 @@ public class PlcToAgvDeviceDriver extends AbstractOpcDeviceDriver implements Dev luceneExecuteLogService.deviceExecuteLog(logDto); } + public void writing(List list) { + Map itemMap = new HashMap(); + for (int i = 0; i < list.size(); i++) { + Object ob = list.get(i); + JSONObject json = (JSONObject) JSONObject.toJSON(ob); + if (!StrUtil.isEmpty(json.getString("value"))) { + String to_param = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + json.getString("code"); + itemMap.put(to_param, json.getString("value")); + } + } + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("下发电气信号:" + itemMap) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + try { + this.checkcontrol(itemMap); + } catch (Exception e) { + e.printStackTrace(); + try { + this.checkcontrol(itemMap); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + + } + public String getToParam() { return this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + "."; } @@ -172,6 +229,12 @@ public class PlcToAgvDeviceDriver extends AbstractOpcDeviceDriver implements Dev @Override public JSONObject getDeviceStatusName() { JSONObject jo = new JSONObject(); + jo.put("signals_are_allowed", AGVSetInLowerAllowed == 1 ? "下层允许上料请求" : AGVSetOutLowerAllowed == 1 ? "下层允许下料请求" + : AGVSetInUpperAllowed == 1 ? "上层允许上料请求" : AGVSetOutUpperAllowed == 1 ? "上层允许下料请求" : "未允许"); + jo.put("agv_enable", AGVEnable == 1 ? "启用" : "禁用"); + jo.put("request_a_signal",AGVSetInReqUpper == 1 ? "上层上料请求" : AGVSetInReqLower == 1 ? "下层上料请求" + : AGVSetOutReqUpper == 1 ? "上层下料请求" : AGVSetOutReqLower == 1 ? "下层下料请求" : "未请求"); + jo.put("agv_inop", AGVInOP == 1 ? "AGV动作中" : "AGV空闲"); return jo; } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/config/SwaggerConfig.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/config/SwaggerConfig.java index fa7ae74..f8e510e 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/config/SwaggerConfig.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/config/SwaggerConfig.java @@ -1,5 +1,4 @@ -/* - * Copyright 2019-2020 Zheng Jie +/* * Copyright 2019-2020 Zheng Jie * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -11,8 +10,10 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License. - */ + * limitations under the License.*//* + + + package org.nl.config; import com.fasterxml.classmate.TypeResolver; @@ -40,11 +41,14 @@ import java.util.List; import static com.google.common.collect.Lists.newArrayList; import static springfox.documentation.schema.AlternateTypeRules.newRule; +*/ /** * api页面 /doc.html * @author Zheng Jie - * @date 2018-11-23 - */ + * @date 2018-11-23*//* + + + @Configuration @EnableSwagger2 public class SwaggerConfig { @@ -125,9 +129,10 @@ public class SwaggerConfig { } } -/** +* * 将Pageable转换展示在swagger中 - */ + + @Configuration class SwaggerDataConfig { @@ -159,3 +164,4 @@ class SwaggerDataConfig { private List sort; } } +*/ diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/AutoCreateInst.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/AutoCreateInst.java index 921e2d1..810c3d3 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/AutoCreateInst.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/AutoCreateInst.java @@ -22,7 +22,9 @@ import org.nl.system.service.param.ISysParamService; import org.springframework.stereotype.Component; import java.util.Arrays; +import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; /** * 自动创建指令 @@ -40,6 +42,7 @@ public class AutoCreateInst { RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineService.class); ISysParamService acsConfigService = SpringContextHolder.getBean(ISysParamService.class); List list = taskserver.queryByStauts("0"); + list = list.stream().sorted(Comparator.comparing(TaskDto::getPriority)).collect(Collectors.toList()); DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); for (int i = 0; i < list.size(); i++) { TaskDto acsTask = list.get(i); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneServiceImpl.java index 92350d4..e5b0a0c 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneServiceImpl.java @@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.lucene.document.Document; +import org.apache.lucene.document.NumericDocValuesField; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.Term; import org.apache.lucene.search.*; @@ -67,6 +68,7 @@ public class LuceneServiceImpl implements LuceneService { } else { endDate = getDate(endDate); } + TermRangeQuery termRangeQuery = new TermRangeQuery("logTime", new BytesRef(startDate), new BytesRef(endDate), true, true); booleanQueryBuilder.add(termRangeQuery, BooleanClause.Occur.MUST); if (whereJson.get("device_code") != null){ diff --git a/acs/nladmin-ui/src/views/acs/device/driver/plc_to_agv.vue b/acs/nladmin-ui/src/views/acs/device/driver/plc_to_agv.vue index 94fd810..8292ce4 100644 --- a/acs/nladmin-ui/src/views/acs/device/driver/plc_to_agv.vue +++ b/acs/nladmin-ui/src/views/acs/device/driver/plc_to_agv.vue @@ -71,17 +71,34 @@ - - + + + + + + + + + + + + + + + + + + + - @@ -330,7 +347,11 @@ export default { is_pickup: true, is_release: true, link_device_code: [], - address: '' + address: '', + is_wait: true, + is_wait_finish: true, + is_releases: true, + is_releases_finish: true }, rules: {}, levels: [ diff --git a/acs/nladmin-ui/src/views/system/monitor/device/index.vue b/acs/nladmin-ui/src/views/system/monitor/device/index.vue index 484f28b..99ba46b 100644 --- a/acs/nladmin-ui/src/views/system/monitor/device/index.vue +++ b/acs/nladmin-ui/src/views/system/monitor/device/index.vue @@ -597,6 +597,18 @@ export default { } else if (val === 'task_id') { const obj = { name: '任务号', value: data[val] } this.arr.push(obj) + } else if (val === 'signals_are_allowed') { + const obj = { name: '允许信号', value: data[val] } + this.arr.push(obj) + } else if (val === 'agv_enable') { + const obj = { name: '动作使能', value: data[val] } + this.arr.push(obj) + } else if (val === 'request_a_signal') { + const obj = { name: '请求信号', value: data[val] } + this.arr.push(obj) + } else if (val === 'agv_inop') { + const obj = { name: '工位内', value: data[val] } + this.arr.push(obj) } } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/enums/region/RegionEnum.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/enums/region/RegionEnum.java index e58a04c..107f81d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/enums/region/RegionEnum.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/enums/region/RegionEnum.java @@ -11,6 +11,7 @@ public enum RegionEnum { TRUBEND_SHELVES_3_1_1("TruBend 7036货架03-01-01","111-07"), ZDFJ("分拣工序","111-08"), DDLK("堆叠笼框工序","111-20"), + NBJG("内部加工区","111-10"), ; private final String region_name; private final String region_code; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 39e9b71..c3f265d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -400,8 +400,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject json = new JSONObject(); json.put("vehicle_code", schBaseTask.getVehicle_code()); json.put("status", status); + String point_code2 = schBaseTask.getPoint_code2(); + if (point_code2.contains("_0")) { + point_code2 = point_code2.substring(0, point_code2.length() - 3); + } + String task_code = schBaseTask.getTask_code(); + String substring = task_code.substring(task_code.length() - 1); + if ("A".equals(substring) || "B".equals(substring)) { + task_code = task_code.substring(0, task_code.length() - 1); + } json.put("device_code", schBaseTask.getPoint_code2()); - json.put("task_code", schBaseTask.getTask_code()); + json.put("task_code", task_code); AcsResponse acsResponse = sortingService.feedAgvTaskStatus(json); } } @@ -448,8 +457,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject json = new JSONObject(); json.put("vehicle_code", vehicle_code); json.put("status", status); - json.put("device_code", schBaseTask.getPoint_code1()); - json.put("task_code", schBaseTask.getTask_code()); + String point_code1 = schBaseTask.getPoint_code1(); + if (point_code1.contains("_0")) { + point_code1 = point_code1.substring(0, point_code1.length() - 3); + } + json.put("device_code", point_code1); + String task_code = schBaseTask.getTask_code(); + String substring = task_code.substring(task_code.length() - 1); + if ("A".equals(substring) || "B".equals(substring)) { + task_code = task_code.substring(0, task_code.length() - 1); + } + json.put("task_code", task_code); AcsResponse acsResponse = sortingService.feedAgvTaskStatus(json); } } @@ -502,8 +520,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject json = new JSONObject(); json.put("vehicle_code", schBaseTask.getVehicle_code()); json.put("status", status); - json.put("device_code", schBaseTask.getPoint_code1()); - json.put("task_code", schBaseTask.getTask_code()); + String point_code1 = schBaseTask.getPoint_code1(); + if (point_code1.contains("_0")) { + point_code1 = point_code1.substring(0, point_code1.length() - 3); + } + json.put("device_code", point_code1); + String task_code = schBaseTask.getTask_code(); + String substring = task_code.substring(task_code.length() - 1); + if ("A".equals(substring) || "B".equals(substring)) { + task_code = task_code.substring(0, task_code.length() - 1); + } + json.put("task_code", task_code); boolean flag = true; AcsResponse acsResponse = sortingService.feedAgvTaskStatus(json); if (acsResponse.getStatus() != 200 || StringUtils.isNotEmpty(acsResponse.getErrMsg())) { @@ -525,8 +552,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject json = new JSONObject(); json.put("vehicle_code", schBaseTask.getVehicle_code()); json.put("status", status); - json.put("device_code", schBaseTask.getPoint_code1()); - json.put("task_code", schBaseTask.getTask_code()); + String point_code2 = schBaseTask.getPoint_code2(); + if (point_code2.contains("_0")) { + point_code2 = point_code2.substring(0, point_code2.length() - 3); + } + json.put("device_code", point_code2); + String task_code = schBaseTask.getTask_code(); + String substring = task_code.substring(task_code.length() - 1); + if ("A".equals(substring) || "B".equals(substring)) { + task_code = task_code.substring(0, task_code.length() - 1); + } + json.put("task_code", task_code); boolean flag = true; AcsResponse acsResponse = sortingService.feedAgvTaskStatus(json); if (acsResponse.getStatus() != 200 || StringUtils.isNotEmpty(acsResponse.getErrMsg())) { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/controller/HandheldController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/controller/HandheldController.java index a3810ac..7716b07 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/controller/HandheldController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/controller/HandheldController.java @@ -28,9 +28,9 @@ public class HandheldController { @Autowired private HandheldService handheldService; - @PostMapping("/task") - @Log("手持空料笼入库") - @ApiOperation("手持空料笼入库") + @PostMapping("/cageFrame") + @Log("外协区空笼框送回") + @ApiOperation("外协区空笼框送回") @SaIgnore public ResponseEntity createEmptyCageStorageTask(@RequestBody JSONObject param) { handheldService.emptyCageStorageTask(param); @@ -38,7 +38,27 @@ public class HandheldController { } - @PostMapping("/emptyVehicle") + @PostMapping("/rack") + @Log("外协区空料架送回") + @ApiOperation("外协区空料架送回") + @SaIgnore + public ResponseEntity applyRackSendItBask(@RequestBody JSONObject param) { + handheldService.rackSendItBask(param); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/transhipment") + @Log("物料转运") + @ApiOperation("物料转运") + @SaIgnore + public ResponseEntity applyMaterialTransfer(@RequestBody JSONObject param) { + handheldService.materialTransfer(param); + return new ResponseEntity<>(HttpStatus.OK); + } + + + + @PostMapping("/callEmptyRack") @Log("手持呼叫空料笼") @ApiOperation("手持呼叫空料笼") @SaIgnore @@ -65,8 +85,16 @@ public class HandheldController { return new ResponseEntity<>(handheldService.pointLock(param), HttpStatus.OK); } + @PostMapping("/pointStatus") + @Log("修改点位货物状态") + @ApiOperation("修改点位货物状态") + @SaIgnore + public ResponseEntity applyPointStatus(@RequestBody JSONObject param) { + return new ResponseEntity<>(handheldService.pointStatus(param), HttpStatus.OK); + } + - @PostMapping("/sourehouse") + @PostMapping("/storehouse") @Log("补空框") @ApiOperation("补空框") @SaIgnore diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/service/HandheldService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/service/HandheldService.java index 8e2c56a..e3fa069 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/service/HandheldService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/service/HandheldService.java @@ -9,7 +9,7 @@ public interface HandheldService { /** - * 手持创建空料笼入库任务 + * 外协区空料笼送回 * @param param * @return */ @@ -40,4 +40,23 @@ public interface HandheldService { * @param param */ void toStorehouse(JSONObject param); + + /** + * 外协区空料架送回 + * @param param + */ + void rackSendItBask(JSONObject param); + + /** + * 物料转运 + * @param param + */ + void materialTransfer(JSONObject param); + + /** + * 修改点位货物状态 + * @param param + * @return + */ + Object pointStatus(JSONObject param); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/service/impl/HandheldServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/service/impl/HandheldServiceImpl.java index 70cb01f..cb7cdc9 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/service/impl/HandheldServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/service/impl/HandheldServiceImpl.java @@ -8,8 +8,12 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import nl.basjes.shaded.org.springframework.util.Assert; +import org.nl.common.enums.VehicleTypeEnum; +import org.nl.common.enums.region.RegionEnum; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.database.vehicle.service.IMdBaseVehicleService; +import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle; import org.nl.wms.ext.handheld.service.HandheldService; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; @@ -42,15 +46,19 @@ public class HandheldServiceImpl implements HandheldService { private ISchBaseVehiclematerialgroupService iSchBaseVehiclematerialgroupService; @Autowired private ISchBaseTaskService iSchBaseTaskService; + @Autowired + private IMdBaseVehicleService iMdBaseVehicleService; @Override public void emptyCageStorageTask(JSONObject param) { Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("vehicle_list") - , param.getString("vehicle_type")}, "参数不能为空!"); + }, "参数不能为空!"); JSONArray vehicle_list = param.getJSONArray("vehicle_list"); String device_code = param.getString("device_code"); - String vehicle_type = param.getString("vehicle_type"); + if (vehicle_list.size() != 2 && vehicle_list.size() != 4) { + throw new BadRequestException("笼框数量不匹配,请确认笼框数量后重新扫码!"); + } SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code); if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!"); AbstractTask connectorTask = taskFactory.getTask("EMPTYCAGETask"); @@ -61,44 +69,33 @@ public class HandheldServiceImpl implements HandheldService { jo.put("create_mode", GeneralDefinition.AUTO_CREATION); jo.put("vehicle_qty", vehicle_list.size()); jo.put("vehicle_code", vehicle_list); - jo.put("vehicle_type", vehicle_type); jo.put("ext_data", param); connectorTask.apply(jo); } @Override public Object applyEmptyVehicle(JSONObject param) { - /* Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("vehicle_type")}, "参数不能为空!"); - String device_code = param.getString("device_code"); - String vehicle_type = param.getString("vehicle_type"); - SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code); - if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!"); - AbstractTask connectorTask = taskFactory.getTask("CALLEMPTYTask"); - // 准备参数:设备编码 - JSONObject jo = new JSONObject(); - jo.put("device_code", device_code); - jo.put("config_code", "CALLEMPTYTask"); - jo.put("create_mode", GeneralDefinition.AUTO_CREATION); - jo.put("vehicle_type", vehicle_type); - jo.put("ext_data", param); - connectorTask.apply(jo);*/ return null; } @Override public void cageBlankingTask(JSONObject param) { - Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("vehicle_code") - , param.getString("material_qty"), param.getString("region_code"), param.getString("order_code")}, "参数不能为空!"); + Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("region_code"),}, "当前点位或目的地不能为空!"); + if (!param.getString("region_code").equals(RegionEnum.NBJG.getRegion_code())) { + Assert.noNullElements(new Object[]{param.getString("vehicle_code"), param.getString("material_code") + , param.getString("material_qty"), param.getString("order_code")}, "参数不能为空!"); + } String device_code = param.getString("device_code"); String vehicle_code = param.getString("vehicle_code"); String material_qty = param.getString("material_qty"); + String material_code = param.getString("material_code"); String region_code = param.getString("region_code"); - String order_code = param.getString("order_id"); + String order_code = param.getString("order_code"); SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code); if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!"); iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class) .eq(SchBasePoint::getPoint_code, device_code) - .set(SchBasePoint::getIs_lock,true)); + .set(SchBasePoint::getIs_lock, true)); AbstractTask connectorTask = taskFactory.getTask("BLANKINGTask"); // 准备参数:设备编码 JSONObject jo = new JSONObject(); @@ -114,6 +111,7 @@ public class HandheldServiceImpl implements HandheldService { SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup(); schBaseVehiclematerialgroup.setVehicle_code(vehicle_code); schBaseVehiclematerialgroup.setMaterial_qty(Integer.parseInt(material_qty)); + schBaseVehiclematerialgroup.setMaterial_code(material_code); schBaseVehiclematerialgroup.setOrder_code(order_code); iSchBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup); } @@ -126,14 +124,20 @@ public class HandheldServiceImpl implements HandheldService { SchBaseRegion schBaseRegion = iSchBaseRegionService.getOne(Wrappers.lambdaQuery(SchBaseRegion.class) .eq(SchBaseRegion::getRegion_code, region_code)); if (ObjectUtil.isEmpty(schBaseRegion)) throw new BadRequestException("该区域不存在!"); - List byRegionCode = iSchBasePointService.getByRegionCode(region_code); + List pointCodes = iSchBasePointService.getByRegionCode(region_code); + boolean is_executing = iSchBaseTaskService.selectByPointCodeAndStatus(pointCodes); + if (is_executing) { + return "当前区域有任务正在执行,请等待任务执行完在锁定!"; + } + iSchBaseTaskService.selectByPointCodeAndTaskStatus(pointCodes); if (StrUtil.equals(status, "0")) { iSchBasePointService.releasePoint(region_code); + iSchBaseTaskService.updateTaskStatusByPointCode(pointCodes); } else if (StrUtil.equals(status, "1")) { iSchBasePointService.lockPoint(region_code); } - if(CollUtil.isNotEmpty(byRegionCode) && byRegionCode.size()>0){ - return "当前区域已存在的任务有" + byRegionCode.size() + "个"; + if (CollUtil.isNotEmpty(pointCodes) && pointCodes.size() > 0) { + return "当前区域已存在的任务有" + pointCodes.size() + "个"; } return "操作成功"; } @@ -160,5 +164,65 @@ public class HandheldServiceImpl implements HandheldService { connectorTask.apply(jo); } + @Override + public void rackSendItBask(JSONObject param) { + Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("vehicle_code")}, "参数不能为空!"); + String vehicle_code = param.getString("vehicle_code"); + String device_code = param.getString("device_code"); + MdBaseVehicle mdBaseVehicle = iMdBaseVehicleService.selectByVehicleCode(vehicle_code); + if(ObjectUtil.isEmpty(mdBaseVehicle)) throw new BadRequestException("载具不存在!"); + if(!mdBaseVehicle.getVehicle_type().equals(VehicleTypeEnum.RACKS_S04.getVehicleCode()) + || !mdBaseVehicle.getVehicle_type().equals(VehicleTypeEnum.RACKS_S06.getVehicleCode())){ + throw new BadRequestException("不是料架,生成搬运任务失败!"); + } + SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code); + if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!"); + AbstractTask connectorTask = taskFactory.getTask("RACKTask"); + // 准备参数:设备编码 + JSONObject jo = new JSONObject(); + jo.put("device_code", device_code); + jo.put("config_code", "RACKTask"); + jo.put("create_mode", GeneralDefinition.AUTO_CREATION); + jo.put("vehicle_code", vehicle_code); + jo.put("vehicle_type", mdBaseVehicle.getVehicle_type()); + jo.put("ext_data", param); + connectorTask.apply(jo); + } + + @Override + public void materialTransfer(JSONObject param) { + Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("vehicle_code")}, "参数不能为空!"); + // String vehicle_code = param.getString("vehicle_code"); + String device_code = param.getString("device_code"); + SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code); + if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!"); + AbstractTask connectorTask = taskFactory.getTask("MTTask"); + // 准备参数:设备编码 + JSONObject jo = new JSONObject(); + jo.put("device_code", device_code); + jo.put("config_code", "MTTask"); + jo.put("create_mode", GeneralDefinition.AUTO_CREATION); + /*jo.put("vehicle_code", vehicle_code); + jo.put("vehicle_type", mdBaseVehicle.getVehicle_type());*/ + jo.put("ext_data", param); + connectorTask.apply(jo); + } + + @Override + public Object pointStatus(JSONObject param) { + Assert.noNullElements(new Object[]{param.getString("point_code"),param.getString("point_status")}, "参数不能为空!"); + String point_code = param.getString("point_code"); + String point_status = param.getString("point_status"); + SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(point_code); + if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!"); + iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class) + .eq(SchBasePoint::getPoint_code,point_code) + .set(SchBasePoint::getPoint_status,point_status) + .set(SchBasePoint::getIs_lock,false) + .set(SchBasePoint::getVehicle_code,null) + ); + return null; + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/sorting/service/impl/SortingServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/sorting/service/impl/SortingServiceImpl.java index e5f023c..e45b5e5 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/sorting/service/impl/SortingServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/sorting/service/impl/SortingServiceImpl.java @@ -89,6 +89,7 @@ public class SortingServiceImpl implements SortingService { .set("remark", task_code) .eq("point_code", pointCode)); if (SortingEnum.TASK_TYPE_ONE.getValue().equals(task_type) && SortingEnum.IS_EMPTY.getValue().equals(is_empty)) { + taskParam.put("vehicle_type", "G01"); taskParam.put("config_code", "SortingCNTTask"); connectorTask.apply(taskParam); //TODO:叫料 @@ -107,17 +108,30 @@ public class SortingServiceImpl implements SortingService { } else if ("1".equals(vehicle_type)) { //TODO:呼叫两个空笼框 if (SortingEnum.TASK_TYPE_ONE.getValue().equals(task_type) && SortingEnum.IS_EMPTY.getValue().equals(is_empty)) { - taskParam.put("device_code", pointCode + "_1"); + taskParam.put("device_code", pointCode + "_01"); + taskParam.put("task_seq","1"); taskParam.put("config_code", "SortingTwoCNTTask"); + taskParam.put("task_code", task_code + "A"); connectorTask.apply(taskParam); - taskParam.put("device_code", pointCode + "_2"); + taskParam.put("device_code", pointCode + "_02"); + taskParam.put("task_seq","2"); + taskParam.put("task_code", task_code + "B"); connectorTask.apply(taskParam); //TODO:将两个笼框放到线边库 } else if (SortingEnum.TASK_TYPE_TWO.getValue().equals(task_type) && SortingEnum.NOT_EMPTY.getValue().equals(is_empty)) { + if (StrUtil.isEmpty(jsonObject.getString("vehicle_code2"))) { + return MapOf.of("status", 400, "msg", "第二个笼框载具号未传递!"); + } taskParam.put("config_code", "SortingSMTTask"); - taskParam.put("device_code", pointCode + "_1"); + taskParam.put("task_seq","1"); + taskParam.put("vehicle_code", jsonObject.getString("vehicle_code2")); + taskParam.put("device_code", pointCode + "_02"); + taskParam.put("task_code", task_code + "B"); connectorTask.apply(taskParam); - taskParam.put("device_code", pointCode + "_2"); + taskParam.put("vehicle_code", vehicle_code); + taskParam.put("task_seq","2"); + taskParam.put("device_code", pointCode + "_01"); + taskParam.put("task_code", task_code + "A"); connectorTask.apply(taskParam); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml index 4fb5794..1ed12d4 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml @@ -54,7 +54,5 @@ sch_base_point sbp where sbp.region_code = #{region_code} - and sbp.is_lock = true - and sbp.is_used = true diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java index 5879e8b..be2606c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java @@ -461,8 +461,7 @@ public class SchBasePointServiceImpl extends ServiceImpl getByRegionCode(String region_code) { - List list = pointMapper.selectByRegionCode(region_code); - return list; + return pointMapper.selectByRegionCode(region_code); } @Override diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java index 331278c..367b2f0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java @@ -101,4 +101,23 @@ public interface ISchBaseTaskService extends IService { void operation(Map param); SchBaseTask getByCode(String taskCode); + + /** + * 根据设备点位查询是否有执行中的任务 + * @param pointCodes + * @return + */ + boolean selectByPointCodeAndStatus(List pointCodes); + + /** + * 根据设备查询未执行的任务 + * @param pointCodes + */ + boolean selectByPointCodeAndTaskStatus(List pointCodes); + + /** + * 根据设备修改任务状态 + * @param pointCodes + */ + void updateTaskStatusByPointCode(List pointCodes); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java index 7f728d6..a22ef2b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java @@ -1,5 +1,6 @@ package org.nl.wms.sch.task.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.IdUtil; @@ -9,6 +10,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; @@ -261,4 +263,62 @@ public class SchBaseTaskServiceImpl extends ServiceImpl pointCodes) { + for (String pointCode : pointCodes) { + List schBaseTasks = schBaseTaskMapper.selectList(Wrappers.lambdaQuery(SchBaseTask.class) + .eq(SchBaseTask::getPoint_code1, pointCode) + .or() + .eq(SchBaseTask::getPoint_code2, pointCode) + .in(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode())); + if (CollUtil.isNotEmpty(schBaseTasks) && schBaseTasks.size() > 0) { + return true; + } + } + return false; + } + + @Override + public boolean selectByPointCodeAndTaskStatus(List pointCodes) { + boolean flag = false; + for (String pointCode : pointCodes) { + List schBaseTasks = schBaseTaskMapper.selectList(Wrappers.lambdaQuery(SchBaseTask.class) + .eq(SchBaseTask::getPoint_code1, pointCode) + .or() + .eq(SchBaseTask::getPoint_code2, pointCode) + .le(SchBaseTask::getTask_status, TaskStatus.ISSUED.getCode())); + if (CollUtil.isNotEmpty(schBaseTasks) && schBaseTasks.size() > 0) { + schBaseTasks.forEach(task -> { + update(Wrappers.lambdaUpdate(SchBaseTask.class) + .eq(SchBaseTask::getTask_code, task.getTask_code()) + .set(SchBaseTask::getTask_status, TaskStatus.TIMEOUT.getCode()) + .set(SchBaseTask::getHandle_status, task.getTask_status()) + ); + }); + flag = true; + } + } + return flag; + } + + @Override + public void updateTaskStatusByPointCode(List pointCodes) { + for (String pointCode : pointCodes) { + List schBaseTasks = schBaseTaskMapper.selectList(Wrappers.lambdaQuery(SchBaseTask.class) + .eq(SchBaseTask::getPoint_code1, pointCode) + .or() + .eq(SchBaseTask::getPoint_code2, pointCode) + .eq(SchBaseTask::getTask_status, TaskStatus.TIMEOUT.getCode())); + if (CollUtil.isNotEmpty(schBaseTasks) && schBaseTasks.size() > 0) { + schBaseTasks.forEach(task -> { + update(Wrappers.lambdaUpdate(SchBaseTask.class) + .eq(SchBaseTask::getTask_code, task.getTask_code()) + .set(SchBaseTask::getTask_status, task.getHandle_status()) + .set(SchBaseTask::getHandle_status, null) + ); + }); + } + } + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java index be9c0c4..1ba8646 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java @@ -105,8 +105,6 @@ public abstract class AbstractTask { } else { taskDto.setNext_device_code(task.getPoint_code2()); } -// taskDto.setStart_wait_code(task.getStart_wait_point()); -// taskDto.setNext_wait_code(task.getNext_wait_point()); taskDto.setVehicle_code(task.getVehicle_code()); this.setTask(task.getConfig_code(), taskDto, task); list.add(taskDto); @@ -127,7 +125,7 @@ public abstract class AbstractTask { private AcsTaskDto setTask(String config_code, AcsTaskDto taskDto, SchBaseTask task) { SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, config_code)); - taskDto.setPriority(taskConfig.getPriority()); + taskDto.setPriority(StrUtil.isNotEmpty(task.getAcs_trace_id()) ? task.getAcs_trace_id() : taskConfig.getPriority()); taskDto.setTask_type(StrUtil.isNotEmpty(task.getTask_type()) ? task.getTask_type() : taskConfig.getTask_type()); taskDto.setAgv_task_type(taskConfig.getAcs_task_type()); taskDto.setRoute_plan_code(taskConfig.getRoute_plan_code()); @@ -267,7 +265,7 @@ public abstract class AbstractTask { return; } // 2、创建申请任务 - task.setAcs_trace_id(requestNo); + //task.setAcs_trace_id(requestNo); task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr()); task.setTask_code(StrUtil.isNotEmpty(param.getString("task_code")) ? task_code : IdUtil.getSnowflake(1, 1).nextIdStr()); task.setConfig_code(config_code); @@ -282,6 +280,7 @@ public abstract class AbstractTask { task.setTask_type(StrUtil.isNotEmpty(param.getString("task_type")) ? param.getString("task_type") : taskConfig.getTask_type()); task.setWorkshop_code(taskConfig.getWorkshop_code()); task.setRemark(param.getString("remark")); + task.setAcs_trace_id(param.getString("task_seq")); // 设置起/终点 this.setTaskPoint(taskConfig, task, apply_point_code); task.setRequest_param(JSONObject.toJSONString(param.get("ext_data"))); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/core/TaskStatus.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/core/TaskStatus.java index 02ef58d..ef866c8 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/core/TaskStatus.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/core/TaskStatus.java @@ -7,7 +7,9 @@ public enum TaskStatus { EXECUTING("4", "执行中", "执行中"), FINISHED("5", "完成", "完成"), CANCELED("6", "已取消", "已取消"), - UNFINISHED("7", "未完成", "未完成"); + UNFINISHED("7", "未完成", "未完成"), + TIMEOUT("8", "暂停", "暂停"), + ; TaskStatus(String code, String name, String desc) { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/EmptyCageTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/EmptyCageTask.java index 3bce5b9..ecebd0e 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/EmptyCageTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/EmptyCageTask.java @@ -11,6 +11,8 @@ import org.nl.common.enums.VehicleTypeEnum; import org.nl.common.enums.region.RegionEnum; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.database.vehicle.service.IMdBaseVehicleService; +import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle; import org.nl.wms.ext.acs.service.dto.to.BaseResponse; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.point.service.ISchBasePointService; @@ -50,6 +52,8 @@ public class EmptyCageTask extends AbstractTask { private ISchBasePointService schBasePointService; @Autowired private ISchBaseVehiclematerialgroupService schBaseVehiclematerialgroupService; + @Autowired + private IMdBaseVehicleService iMdBaseVehicleService; @Override protected void create() throws BadRequestException { @@ -60,22 +64,23 @@ public class EmptyCageTask extends AbstractTask { TaskUtils.setUpdateByAcs(task); // 查询是空料笼还是,空料架 String vehicle_type = task.getVehicle_type(); - /*String vehicle_code = task.getVehicle_code(); - if(StrUtil.isNotEmpty(vehicle_code)){ + String vehicle_code = task.getVehicle_code(); + if (StrUtil.isNotEmpty(vehicle_code)) { JSONArray json = JSONUtil.parseArray(vehicle_code); String s = json.get(0, String.class); - - }*/ + MdBaseVehicle mdBaseVehicle = iMdBaseVehicleService.selectByVehicleCode(s); + vehicle_type = mdBaseVehicle.getVehicle_type(); + } SchBasePoint schBasePoint = null; switch (vehicle_type) { - case "S04": + /*case "S04": //空料架 schBasePoint = schBasePointService.selectByGroundPoint(null, GoodsEnum.OUT_OF_STOCK.getValue(), task.getVehicle_type(), 1); break; case "S06": //空料架 schBasePoint = schBasePointService.selectByGroundPoint(null, GoodsEnum.OUT_OF_STOCK.getValue(), task.getVehicle_type(), 1); - break; + break;*/ case "R01": //RO1空料容 schBasePoint = schBasePointService.selectByGroundPoint(RegionEnum.DDLK.getRegion_code(), diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/MtTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/MtTask.java new file mode 100644 index 0000000..6999c2c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/MtTask.java @@ -0,0 +1,166 @@ +package org.nl.wms.sch.task_manage.task.tasks.handheld; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.nl.common.enums.GoodsEnum; +import org.nl.common.enums.region.RegionEnum; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.database.vehicle.service.IMdBaseVehicleService; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author LENOVO + * 手持创建空料笼入库 + */ +@Component("MTTask") +public class MtTask extends AbstractTask { + + private static final String TASK_CONFIG_CODE = "MTTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private ISchBasePointService schBasePointService; + @Autowired + private ISchBaseVehiclematerialgroupService schBaseVehiclematerialgroupService; + @Autowired + private IMdBaseVehicleService iMdBaseVehicleService; + + @Override + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + for (SchBaseTask task : tasks) { + String vehicle_type = task.getVehicle_type(); + SchBasePoint schBasePoint = schBasePointService.selectByGroundPoint(RegionEnum.NBJG.getRegion_code(), + GoodsEnum.OUT_OF_STOCK.getValue(),null, 1); + if (ObjectUtil.isEmpty(schBasePoint)) { + task.setRemark("未找到所需点位!"); + taskService.updateById(task); + // 消息通知 + noticeService.createNotice("未找到所需点位!", TASK_CONFIG_CODE + task.getTask_code(), + NoticeTypeEnum.WARN.getCode()); + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code2(schBasePoint.getPoint_code()); + task.setVehicle_type(schBasePoint.getCan_vehicle_type()); + task.setRemark(""); + task.setTask_status(TaskStatus.CREATED.getCode()); + TaskUtils.setUpdateByAcs(task); + taskService.updateById(task); + + + schBasePoint.setVehicles(task.getVehicle_code()); + schBasePoint.setPoint_status(GoodsEnum.IN_STOCK.getValue()); + schBasePoint.setIs_lock(true); + PointUtils.setUpdateByAcs(schBasePoint); + pointService.updateById(schBasePoint); + } + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + //TODO:完成任务的时候将int_task_code的清除 + + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_CONNECTOR); + } + + @Override + public void cancel(String task_code) { + //TODO:取消任务的时候将int_task_code的清除 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_CONNECTOR); + } + + @Override + protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { + + } + + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String startPoint = taskObj.getPoint_code1(); + SchBasePoint schBasePoint = pointService.selectByPointCode(startPoint); + // 起点清空 + if (ObjectUtil.isNotEmpty(schBasePoint)) { + PointUtils.updateByIngTaskCode(schBasePoint); + pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, startPoint) + .set(SchBasePoint::getIs_lock, false)); + } + String point_code2 = taskObj.getPoint_code2(); + SchBasePoint schBasePoint2 = pointService.selectByPointCode(point_code2); + if (ObjectUtil.isNotEmpty(schBasePoint2)) { + PointUtils.updateByIngTaskCode(schBasePoint2); + pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, point_code2) + .set(SchBasePoint::getIs_lock, false)); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String startPoint = taskObj.getPoint_code1(); + SchBasePoint schBasePoint = pointService.selectByPointCode(startPoint); + // 起点清空 + if (ObjectUtil.isNotEmpty(schBasePoint)) { + PointUtils.updateByIngTaskCode(schBasePoint); + pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, startPoint) + .set(SchBasePoint::getIs_lock, false)); + } + String point_code2 = taskObj.getPoint_code2(); + SchBasePoint schBasePoint2 = pointService.selectByPointCode(point_code2); + if (ObjectUtil.isNotEmpty(schBasePoint2)) { + PointUtils.updateByIngTaskCode(schBasePoint2); + pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, point_code2) + .set(SchBasePoint::getIs_lock, false)); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/RackTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/RackTask.java new file mode 100644 index 0000000..7200001 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/RackTask.java @@ -0,0 +1,172 @@ +package org.nl.wms.sch.task_manage.task.tasks.handheld; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.nl.common.enums.GoodsEnum; +import org.nl.common.enums.VehicleTypeEnum; +import org.nl.common.enums.region.RegionEnum; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.database.vehicle.service.IMdBaseVehicleService; +import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author LENOVO + * 手持创建空料笼入库 + */ +@Component("RACKTask") +public class RackTask extends AbstractTask { + + private static final String TASK_CONFIG_CODE = "RACKTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private ISchBasePointService schBasePointService; + @Autowired + private ISchBaseVehiclematerialgroupService schBaseVehiclematerialgroupService; + @Autowired + private IMdBaseVehicleService iMdBaseVehicleService; + + @Override + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + for (SchBaseTask task : tasks) { + + String vehicle_type = task.getVehicle_type(); + SchBasePoint schBasePoint = schBasePointService.selectByGroundPoint(null, + GoodsEnum.OUT_OF_STOCK.getValue(),vehicle_type, 1); + if (ObjectUtil.isEmpty(schBasePoint)) { + task.setRemark("未找到所需点位!"); + taskService.updateById(task); + // 消息通知 + noticeService.createNotice("未找到所需点位!", TASK_CONFIG_CODE + task.getTask_code(), + NoticeTypeEnum.WARN.getCode()); + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code2(schBasePoint.getPoint_code()); + task.setVehicle_type(schBasePoint.getCan_vehicle_type()); + task.setRemark(""); + task.setTask_status(TaskStatus.CREATED.getCode()); + TaskUtils.setUpdateByAcs(task); + taskService.updateById(task); + + + schBasePoint.setVehicles(task.getVehicle_code()); + schBasePoint.setPoint_status(GoodsEnum.IN_STOCK.getValue()); + schBasePoint.setIs_lock(true); + PointUtils.setUpdateByAcs(schBasePoint); + pointService.updateById(schBasePoint); + } + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + //TODO:完成任务的时候将int_task_code的清除 + + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_CONNECTOR); + } + + @Override + public void cancel(String task_code) { + //TODO:取消任务的时候将int_task_code的清除 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_CONNECTOR); + } + + @Override + protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { + + } + + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String startPoint = taskObj.getPoint_code1(); + SchBasePoint schBasePoint = pointService.selectByPointCode(startPoint); + // 起点清空 + if (ObjectUtil.isNotEmpty(schBasePoint)) { + PointUtils.updateByIngTaskCode(schBasePoint); + pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, startPoint) + .set(SchBasePoint::getIs_lock, false)); + } + String point_code2 = taskObj.getPoint_code2(); + SchBasePoint schBasePoint2 = pointService.selectByPointCode(point_code2); + if (ObjectUtil.isNotEmpty(schBasePoint2)) { + PointUtils.updateByIngTaskCode(schBasePoint2); + pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, point_code2) + .set(SchBasePoint::getIs_lock, false)); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String startPoint = taskObj.getPoint_code1(); + SchBasePoint schBasePoint = pointService.selectByPointCode(startPoint); + // 起点清空 + if (ObjectUtil.isNotEmpty(schBasePoint)) { + PointUtils.updateByIngTaskCode(schBasePoint); + pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, startPoint) + .set(SchBasePoint::getIs_lock, false)); + } + String point_code2 = taskObj.getPoint_code2(); + SchBasePoint schBasePoint2 = pointService.selectByPointCode(point_code2); + if (ObjectUtil.isNotEmpty(schBasePoint2)) { + PointUtils.updateByIngTaskCode(schBasePoint2); + pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, point_code2) + .set(SchBasePoint::getIs_lock, false)); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingCNTTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingCNTTask.java index 8c982f1..8392a47 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingCNTTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingCNTTask.java @@ -59,7 +59,7 @@ public class SortingCNTTask extends AbstractTask { for (SchBaseTask task : tasks) { TaskUtils.setUpdateByAcs(task); // 找起点 - SchBasePoint basePoint = schBasePointService.selectEmpVehicleByRegionCode(RegionEnum.ZDFJ.getRegion_code(), Vehicle_Type); + SchBasePoint basePoint = schBasePointService.selectEmpVehicleByRegionCode(RegionEnum.ZDFJ.getRegion_code(), task.getVehicle_type()); if (basePoint==null){ task.setRemark("未找到所需点位!"); taskService.updateById(task); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingSMTTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingSMTTask.java index 11bf11b..e382e45 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingSMTTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingSMTTask.java @@ -1,5 +1,6 @@ package org.nl.wms.sch.task_manage.task.tasks.sorting; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -61,6 +62,7 @@ public class SortingSMTTask extends AbstractTask { // 配置信息 SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + tasks.stream().sorted((task1, task2) -> Long.compare(getTime(task2.getCreate_time()), getTime(task1.getCreate_time()))); for (SchBaseTask task : tasks) { TaskUtils.setUpdateByAcs(task); // 找起点 @@ -113,6 +115,13 @@ public class SortingSMTTask extends AbstractTask { } } + private Long getTime(String dateString){ + String pattern = "yyyy-MM-dd HH:mm:ss"; + java.util.Date date = DateUtil.parse(dateString, pattern); + long timestamp = date.getTime(); + return timestamp; + } + @Override protected void updateStatus(String task_code, TaskStatus status) { //TODO:完成任务的时候将int_task_code的清除 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingTwoCNTTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingTwoCNTTask.java index 2a8f34e..c5d03d6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingTwoCNTTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingTwoCNTTask.java @@ -1,9 +1,12 @@ package org.nl.wms.sch.task_manage.task.tasks.sorting; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.unit.DataUnit; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.mysql.cj.util.TimeUtil; import org.nl.common.enums.GoodsEnum; import org.nl.common.enums.VehicleEnum; import org.nl.common.enums.VehicleTypeEnum; @@ -26,6 +29,8 @@ import org.nl.wms.util.TaskUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.Collections; +import java.util.Comparator; import java.util.List; /** @@ -54,8 +59,8 @@ public class SortingTwoCNTTask extends AbstractTask { protected void create() throws BadRequestException { // 获取任务 List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + tasks.stream().sorted((task1, task2) -> Long.compare(getTime(task2.getCreate_time()), getTime(task1.getCreate_time()))); for (SchBaseTask task : tasks) { - TaskUtils.setUpdateByAcs(task); // 找起点 SchBasePoint basePoint = schBasePointService.selectByEmptyCage(RegionEnum.DDLK.getRegion_code(), VehicleTypeEnum.FRAME_R02.getVehicleCode(),GoodsEnum.EMPTY_PALLETS.getValue(),true,task); @@ -64,11 +69,37 @@ public class SortingTwoCNTTask extends AbstractTask { taskService.updateById(task); continue; } - taskService.update(new UpdateWrapper() - .set("task_status",TaskStatus.CREATED.getCode()) - .set("point_code1",basePoint.getPoint_code()) - .set("vehicle_code",basePoint.getVehicle_code()) - .eq("task_id",task.getTask_id())); + TaskUtils.setUpdateByAcs(task); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setPoint_code1(basePoint.getPoint_code()); + task.setVehicle_code(basePoint.getVehicle_code()); + taskService.update(task); + schBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class) + .eq(SchBasePoint::getPoint_code,basePoint.getPoint_code()) + .set(SchBasePoint::getIs_lock,true) + .set(SchBasePoint::getPoint_status,GoodsEnum.OUT_OF_STOCK.getValue())); + } + } + + private Long getTime(String dateString){ + String pattern = "yyyy-MM-dd HH:mm:ss"; + java.util.Date date = DateUtil.parse(dateString, pattern); + long timestamp = date.getTime(); + return timestamp; + } + + + private static int extractLastDigit(String value) { + if (value == null || value.isEmpty()) { + throw new IllegalArgumentException("Value is null or empty"); + } + // 提取最后一位字符 + char lastChar = value.charAt(value.length() - 1); + // 转换为数字 + if (Character.isDigit(lastChar)) { + return Character.getNumericValue(lastChar); + } else { + throw new IllegalArgumentException("Last character is not a digit"); } } @@ -103,7 +134,7 @@ public class SortingTwoCNTTask extends AbstractTask { } public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { - /*// 获取参数 + // 获取参数 String startPoint = taskObj.getPoint_code1(); SchBasePoint schBasePoint = pointService.selectByPointCode(startPoint); // 起点清空 @@ -118,7 +149,7 @@ public class SortingTwoCNTTask extends AbstractTask { PointUtils.updateByIngTaskCode(schBasePoint2); pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, point_code2) .set(SchBasePoint::getIs_lock, false)); - }*/ + } // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark(GeneralDefinition.TASK_FINISH);