From 6da99e2db8f325bd36f55b0b56343b5fafa50a2f Mon Sep 17 00:00:00 2001 From: yanps Date: Mon, 29 Jan 2024 08:52:14 +0800 Subject: [PATCH 01/21] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=83=98?= =?UTF-8?q?=E7=AE=B1=E6=8A=A5=E8=AD=A6=E8=BF=98=E5=87=BA=E5=85=A5=E7=83=98?= =?UTF-8?q?=E7=AE=B1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oven_manipulator/OvenGantryManipulatorDeviceDriver.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/oven_manipulator/OvenGantryManipulatorDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/oven_manipulator/OvenGantryManipulatorDeviceDriver.java index f6c3817c7..86e9b7d11 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/oven_manipulator/OvenGantryManipulatorDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/oven_manipulator/OvenGantryManipulatorDeviceDriver.java @@ -933,8 +933,9 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i int door = hongXiangConveyorDeviceDriver.getDoor(); int action = hongXiangConveyorDeviceDriver.getAction(); int error1 = hongXiangConveyorDeviceDriver.getError1(); + int error = hongXiangConveyorDeviceDriver.getError(); int move = hongXiangConveyorDeviceDriver.getMove(); - if (mode == 1 && door == 1 && action == 1 && error1 == 0 && move == 1) { + if (mode == 1 && door == 1 && action == 1 && error1 == 0 && error == 0 && move == 1) { if (this.getNow_steps_type() == 2) { this.writing("to_command", "2"); this.setNow_steps_type(3); @@ -1038,8 +1039,9 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i int door = hongXiangConveyorDeviceDriver.getDoor(); int action = hongXiangConveyorDeviceDriver.getAction(); int error1 = hongXiangConveyorDeviceDriver.getError1(); + int error = hongXiangConveyorDeviceDriver.getError(); int move = hongXiangConveyorDeviceDriver.getMove(); - if (mode == 1 && door == 1 && action == 1 && error1 == 0 && move == 0) { + if (mode == 1 && door == 1 && action == 1 && error1 == 0 && error == 0 && move == 0) { if (this.getNow_steps_type() == 4) { this.writing("to_command", "4"); this.setNow_steps_type(5); From 10c25d60a60dc8e397abfceb4f9eb326f1881936 Mon Sep 17 00:00:00 2001 From: lishuai <1793460677@qq.com> Date: Wed, 31 Jan 2024 08:56:34 +0800 Subject: [PATCH 02/21] =?UTF-8?q?fix=20:=20=E6=B5=8B=E8=AF=95=E6=B5=81?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AddressServiceImpl.java | 3 +- .../device_driver/driver/OpcDeviceDriver.java | 2 +- .../return_good_manipulator.vue | 38 ++++++++++++++++++- .../one_manipulator/trapped_manipulator.vue | 38 ++++++++++++++++++- 4 files changed, 76 insertions(+), 5 deletions(-) diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/service/impl/AddressServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/service/impl/AddressServiceImpl.java index e6558cc23..ef0cc7e30 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/service/impl/AddressServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/service/impl/AddressServiceImpl.java @@ -132,10 +132,9 @@ public class AddressServiceImpl extends CommonServiceImpl - + + + + + + + + + + + + + + + + diff --git a/acs2/nladmin-ui/src/views/acs/device/driver/one_manipulator/trapped_manipulator.vue b/acs2/nladmin-ui/src/views/acs/device/driver/one_manipulator/trapped_manipulator.vue index b71606f9b..d9df1cab2 100644 --- a/acs2/nladmin-ui/src/views/acs/device/driver/one_manipulator/trapped_manipulator.vue +++ b/acs2/nladmin-ui/src/views/acs/device/driver/one_manipulator/trapped_manipulator.vue @@ -41,7 +41,43 @@ - + + + + + + + + + + + + + + + + From 065f422e55355dd9bccd097aaaaa688f6f2a73cd Mon Sep 17 00:00:00 2001 From: yanps Date: Thu, 1 Feb 2024 10:37:01 +0800 Subject: [PATCH 03/21] =?UTF-8?q?add:=20=E7=83=98=E7=AE=B1=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HongXiangStationDeviceDriver.java | 62 +++------------- .../hongxiang_conveyor/ItemProtocol.java | 73 +++++++++++++++++-- .../OvenGantryManipulatorDeviceDriver.java | 52 ++----------- 3 files changed, 86 insertions(+), 101 deletions(-) diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/hongxiang_conveyor/HongXiangStationDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/hongxiang_conveyor/HongXiangStationDeviceDriver.java index c8c1536c0..01fa6cdc6 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/hongxiang_conveyor/HongXiangStationDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/hongxiang_conveyor/HongXiangStationDeviceDriver.java @@ -63,40 +63,14 @@ public class HongXiangStationDeviceDriver extends AbstractOpcDeviceDriver implem public int move = 0; public int action = 0; public int error = 0; - public int door = 0; - public int temperature = 0; - public int countdown = 0; - public int finish = 0; - public int task = 0; - public int error1 = 0; - public int material = 0; - public int consumption = 0; - public int voltageA = 0; - public int voltageB = 0; - public int voltageC = 0; - public int currentA = 0; - public int currentB = 0; - public int currentC = 0; + public String task = null; public int last_heartbeat = 0; public int last_mode = 0; public int last_move = 0; public int last_action = 0; public int last_error = 0; - public int last_door = 0; - public int last_temperature = 0; - public int last_countdown = 0; - public int last_finish = 0; - public int last_task = 0; - public int last_error1 = 0; - public int last_material = 0; - public int last_consumption = 0; - public int last_voltageA = 0; - public int last_voltageB = 0; - public int last_voltageC = 0; - public int last_currentA = 0; - public int last_currentB = 0; - public int last_currentC = 0; + public String last_task = null; Boolean isonline = true; @@ -122,23 +96,17 @@ public class HongXiangStationDeviceDriver extends AbstractOpcDeviceDriver implem @Override public void execute() { String message = null; - device_code = this.getDeviceCode(); + heartbeat = itemProtocol.getItem_heartbeat(); + mode = itemProtocol.getItem_mode(); + move = itemProtocol.getItem_move(); + task = itemProtocol.getItem_task(); + error = itemProtocol.getItem_error(); + action = itemProtocol.getItem_action(); } - public synchronized boolean instruction_apply(String container_code) throws Exception { - Date date = new Date(); - if (date.getTime() - this.instruction_apply_time.getTime() < (long) this.instruction_require_time_out) { - log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_require_time_out); - return false; - } else { - this.instruction_apply_time = date; - requireSucess = true; - return true; - } - } protected void thingToNothing() { this.setRequireSucess(false); @@ -147,8 +115,8 @@ public class HongXiangStationDeviceDriver extends AbstractOpcDeviceDriver implem public void writing(int command) { String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + "." + ItemProtocol.item_to_command; - //String opcservcerid = this.getDevice().getOpc_server_id(); -//Server server = ReadUtil.getServer(opcservcerid); + // String opcservcerid = this.getDevice().getOpc_server_id(); + // Server server = ReadUtil.getServer(opcservcerid); Map itemMap = new HashMap(); itemMap.put(to_command, command); this.control(itemMap); @@ -177,12 +145,9 @@ public class HongXiangStationDeviceDriver extends AbstractOpcDeviceDriver implem String to_param = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + "." + param; - //String opcservcerid = this.getDevice().getOpc_server_id(); -//Server server = ReadUtil.getServer(opcservcerid); Map itemMap = new HashMap(); itemMap.put(to_param, value); -// itemMap.put(to_param, Integer.parseInt(value)); this.control(itemMap); } @@ -190,12 +155,9 @@ public class HongXiangStationDeviceDriver extends AbstractOpcDeviceDriver implem @Override public JSONObject getDeviceStatusName() { JSONObject jo = new JSONObject(); - String mode = ""; - String action = ""; - String move = ""; jo.put("device_name", this.getDevice().getDevice_name()); - jo.put("mode", "联机"); - jo.put("action", action); + jo.put("mode", mode ==2 ? "待机": "脱机"); + jo.put("action", action == 1 ? "允许取放": "不允许取放"); jo.put("isOnline", true); jo.put("error", this.getError()); jo.put("isError", this.getIserror()); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/hongxiang_conveyor/ItemProtocol.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/hongxiang_conveyor/ItemProtocol.java index 72992ccec..59ec84678 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/hongxiang_conveyor/ItemProtocol.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/hongxiang_conveyor/ItemProtocol.java @@ -1,5 +1,6 @@ package org.nl.acs.device_driver.two_conveyor.hongxiang_conveyor; +import cn.hutool.core.util.StrUtil; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.nl.acs.device.device_driver.standard_inspect.ItemDto; @@ -11,10 +12,24 @@ import java.util.List; @Data public class ItemProtocol { + public static String item_heartbeat = "heartbeat"; + + public static String item_mode = "mode"; + + public static String item_move = "move"; + public static String item_action = "action"; + public static String item_error = "error"; + + public static String item_task = "task"; + public static String item_to_command = "to_command"; + public static String item_target = "target"; + + public static String item_to_task = "task"; + private HongXiangStationDeviceDriver driver; public ItemProtocol(HongXiangStationDeviceDriver driver) { @@ -22,11 +37,42 @@ public class ItemProtocol { } + public int getItem_heartbeat() { + return this.getOpcIntegerValue(item_heartbeat); + } + + public int getItem_mode() { + return this.getOpcIntegerValue(item_mode); + } + + public int getItem_move() { + return this.getOpcIntegerValue(item_move); + } + + public int getItem_error() { + return this.getOpcIntegerValue(item_error); + } + + public String getItem_task() { + return this.getOpcStringValue(item_task); + } + public int getItem_action() { return this.getOpcIntegerValue(item_action); } - ; + public int getItem_to_command() { + return this.getOpcIntegerValue(item_to_command); + } + + public int getItem_target() { + return this.getOpcIntegerValue(item_target); + } + + public String getItem_to_task() { + return this.getOpcStringValue(item_to_task); + } + Boolean isonline; @@ -42,17 +88,34 @@ public class ItemProtocol { } + public String getOpcStringValue(String protocol) { + String stringValue = this.driver.getStringValue(protocol); + if (StrUtil.isEmpty(stringValue)) { + setIsonline(false); + } else { + setIsonline(true); + return stringValue; + } + return "0"; + + } + public static List getReadableItemDtos() { ArrayList list = new ArrayList(); - - list.add(new ItemDto(item_action, "动作信号", "450")); - + list.add(new ItemDto(item_heartbeat, "心跳", "DB100.10")); + list.add(new ItemDto(item_mode, "模式", "DB100.12")); + list.add(new ItemDto(item_move, "光电信号", "DB100.13")); + list.add(new ItemDto(item_error, "error", "DB100.14")); + list.add(new ItemDto(item_task, "任务号", "DB100.15")); + list.add(new ItemDto(item_action, "取放信号", "DB100.11 ")); return list; } public static List getWriteableItemDtos() { ArrayList list = new ArrayList(); - list.add(new ItemDto(item_to_command, "下发命令", "226")); + list.add(new ItemDto(item_to_command, "下发命令", "DB101.11")); + list.add(new ItemDto(item_target, "下发目标站", "DB101.12")); + list.add(new ItemDto(item_to_task, "下发任务号", "DB101.13")); return list; } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/OvenGantryManipulatorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/OvenGantryManipulatorDeviceDriver.java index d025e19d4..348e34738 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/OvenGantryManipulatorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/OvenGantryManipulatorDeviceDriver.java @@ -348,17 +348,9 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i String next_device_code = instruction.getNext_device_code(); Device nextdevice = deviceAppService.findDeviceByCode(next_device_code); Device startdevice = deviceAppService.findDeviceByCode(start_device_code); - //PhotoelectricInspectionSiteDeviceDriver photoelectricInspectionSiteDeviceDriver; HongXiangConveyorDeviceDriver hongXiangConveyorDeviceDriver; StandardInspectSiteDeviceDriver standardInspectSiteDeviceDriver; OvenInspectSiteDeviceDriver ovenInspectSiteDeviceDriver; -// if (startdevice.getDeviceDriver() instanceof PhotoelectricInspectionSiteDeviceDriver) { -// photoelectricInspectionSiteDeviceDriver = (PhotoelectricInspectionSiteDeviceDriver) startdevice.getDeviceDriver(); -// if (photoelectricInspectionSiteDeviceDriver.getMove() != 1) { -// notCreateInstMessage = "手动创建指令未下发电气信号原因->取货位-烘箱对接位:" + photoelectricInspectionSiteDeviceDriver.getDevice_code() + "无货,无法下发指令!指令号:" + instruction.getInstruction_code(); -// return false; -// } -// } if(startdevice.getDeviceDriver() instanceof OvenInspectSiteDeviceDriver && nextdevice.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver){ ovenInspectSiteDeviceDriver = (OvenInspectSiteDeviceDriver) startdevice.getDeviceDriver(); standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) nextdevice.getDeviceDriver(); @@ -485,13 +477,6 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i HongXiangConveyorDeviceDriver hongXiangConveyorDeviceDriver; StandardInspectSiteDeviceDriver standardInspectSiteDeviceDriver; OvenInspectSiteDeviceDriver ovenInspectSiteDeviceDriver; -// if (startdevice.getDeviceDriver() instanceof PhotoelectricInspectionSiteDeviceDriver) { -// photoelectricInspectionSiteDeviceDriver = (PhotoelectricInspectionSiteDeviceDriver) startdevice.getDeviceDriver(); -// if (photoelectricInspectionSiteDeviceDriver.getMove() != 1) { -// notCreateInstMessage = "就绪任务未创建指令原因->取货位-烘箱对接位:" + photoelectricInspectionSiteDeviceDriver.getDevice_code() + "光电无货,无法生成指令!"; -// return false; -// } -// } if(startdevice.getDeviceDriver() instanceof OvenInspectSiteDeviceDriver && nextdevice.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver){ ovenInspectSiteDeviceDriver = (OvenInspectSiteDeviceDriver) startdevice.getDeviceDriver(); standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) nextdevice.getDeviceDriver(); @@ -544,13 +529,6 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i return false; } } -// if (nextdevice.getDeviceDriver() instanceof PhotoelectricInspectionSiteDeviceDriver) { -// photoelectricInspectionSiteDeviceDriver = (PhotoelectricInspectionSiteDeviceDriver) nextdevice.getDeviceDriver(); -// if (photoelectricInspectionSiteDeviceDriver.getMove() != 0) { -// notCreateInstMessage = "就绪任务未创建指令原因->放货位-烘箱对接位:" + photoelectricInspectionSiteDeviceDriver.getDevice_code() + "光电有货,无法生成指令!"; -// return false; -// } -// } if (nextdevice.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) nextdevice.getDeviceDriver(); if (standardInspectSiteDeviceDriver.getMove() != 0) { @@ -699,7 +677,12 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i return flag; } - //判断取货位或放货位为烘箱设备时关联的同一列烘箱设备是否有开门 + /** + * 判断取货位或放货位为烘箱设备时关联的同一列烘箱设备是否有开门 + * @param start_device_code + * @param next_device_code + * @return + */ public boolean judgeCloseDoor(String start_device_code, String next_device_code) { Boolean isClose = false; try { @@ -774,7 +757,6 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i this.instruction_update_time = date; //更改任务状态 if (task > 0) { - //inst_message Instruction inst1 = checkInst(); if (inst1 != null) { if (StrUtil.equals(inst1.getInstruction_status(), "0")) { @@ -794,7 +776,6 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i HongXiangConveyorDeviceDriver hongXiangConveyorDeviceDriver; if (device.getDeviceDriver() instanceof HongXiangConveyorDeviceDriver) { hongXiangConveyorDeviceDriver = (HongXiangConveyorDeviceDriver) device.getDeviceDriver(); - //hongXiangConveyorDeviceDriver.writing("to_open_door", "1"); int mode = hongXiangConveyorDeviceDriver.getMode(); int door = hongXiangConveyorDeviceDriver.getDoor(); int action = hongXiangConveyorDeviceDriver.getAction(); @@ -804,8 +785,6 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i if (this.getNow_steps_type() == 2) { this.writing("to_command", "2"); this.setNow_steps_type(3); - } else { - //logServer.deviceExecuteLog(this.device_code, "", "", "未反馈电气信号原因:当前步骤不为下发电气信号(now_steps_type!=2)"); } } else { if (this.getNow_steps_type() == 2) { @@ -831,8 +810,6 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i if (this.getNow_steps_type() == 2) { this.writing("to_command", "2"); this.setNow_steps_type(3); - } else { - //logServer.deviceExecuteLog(this.device_code, "", "", "未反馈电气信号原因:当前步骤不为下发电气信号(now_steps_type!=2)\")"); } } } @@ -868,8 +845,6 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i if (this.getNow_steps_type() == 3) { this.writing("to_command", "3"); this.setNow_steps_type(4); - } else { - //logServer.deviceExecuteLog(this.device_code, "", "", "未反馈电气信号原因:当前步骤不为允许取货(now_steps_type!=3)"); } } } else { @@ -899,7 +874,6 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i StandardInspectSiteDeviceDriver standardInspectSiteDeviceDriver; if (nextDevice.getDeviceDriver() instanceof HongXiangConveyorDeviceDriver) { hongXiangConveyorDeviceDriver = (HongXiangConveyorDeviceDriver) nextDevice.getDeviceDriver(); - //hongXiangConveyorDeviceDriver.writing("to_open_door", "1"); int mode = hongXiangConveyorDeviceDriver.getMode(); int door = hongXiangConveyorDeviceDriver.getDoor(); int action = hongXiangConveyorDeviceDriver.getAction(); @@ -911,7 +885,6 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i this.setNow_steps_type(5); } else { feedMessage = "未反馈电气信号原因:当前步骤不为允许放货(now_steps_type!=4)"; - //logServer.deviceExecuteLog(this.device_code, "", "", "未反馈电气信号原因:当前步骤不为允许放货(now_steps_type!=4)"); } } else { if (this.getNow_steps_type() == 4) { @@ -937,10 +910,7 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i if (this.getNow_steps_type() == 4) { this.writing("to_command", "4"); this.setNow_steps_type(5); - } else { - //logServer.deviceExecuteLog(this.device_code, "", "", "未反馈电气信号原因:当前步骤不为允许放货(now_steps_type!=4)"); } - } } else { if (this.getNow_steps_type() == 4) { @@ -965,20 +935,12 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i Instruction inst2 = checkInst(); if (inst2 != null) { if (StrUtil.equals(inst2.getInstruction_status(), "1")) { - TaskDto taskDto = taskserver.findByCode(inst2.getTask_code()); - String next_device_code = inst2.getNext_device_code(); - //String start_device_code = taskDto.getStart_device_code(); - //Device startDevice = deviceAppService.findDeviceByCode(start_device_code); Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); HongXiangConveyorDeviceDriver hongXiangConveyorDeviceDriver; StandardInspectSiteDeviceDriver standardInspectSiteDeviceDriver; LampThreecolorDeviceDriver lampThreecolorDeviceDriver; -// if (startDevice.getDeviceDriver() instanceof HongXiangConveyorDeviceDriver) { -// hongXiangConveyorDeviceDriver = (HongXiangConveyorDeviceDriver) startDevice.getDeviceDriver(); -// hongXiangConveyorDeviceDriver.writing("to_close_door", "1"); -// } if (nextDevice.getDeviceDriver() instanceof HongXiangConveyorDeviceDriver) { hongXiangConveyorDeviceDriver = (HongXiangConveyorDeviceDriver) nextDevice.getDeviceDriver(); hongXiangConveyorDeviceDriver.writing("to_close_door", "1"); @@ -994,8 +956,6 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i if (nextDevice.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) nextDevice.getDeviceDriver(); -// hongXiangConveyorDeviceDriver.writing("to_close_door", "1"); - if (!StrUtil.startWith(taskDto.getTask_code(), "-")) { if (ObjectUtil.isNotEmpty(nextDevice.getExtraValue().get("link_three_lamp"))) { String lamp = nextDevice.getExtraValue().get("link_three_lamp").toString(); From 0bd35e99bde29e9fee95e62c0498efcd7fd73332 Mon Sep 17 00:00:00 2001 From: yanps Date: Thu, 1 Feb 2024 14:48:42 +0800 Subject: [PATCH 04/21] =?UTF-8?q?add:=20ACS=E4=B8=8ELMS=E7=9A=84=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=97=A5=E5=BF=97=E6=B7=BB=E5=8A=A0=E5=88=B0Lucene?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nl/acs/agv/server/XianGongAgvService.java | 7 +- .../server/impl/XianGongAgvServiceImpl.java | 125 ++++++++---------- .../service/impl/DeviceServiceImpl.java | 4 + .../agv/xg_agv_car/XgAgvCarDeviceDriver.java | 2 +- .../StandardStackerDeviceDriver.java | 5 +- .../wms/service/impl/AcsToWmsServiceImpl.java | 26 +++- .../wms/service/impl/WmsToAcsServiceImpl.java | 16 ++- .../service/impl/InstructionServiceImpl.java | 21 ++- .../lucene/service/dto/LuceneLogDto.java | 11 ++ .../src/views/monitor/log/search.vue | 2 +- .../src/views/monitor/lucene/index.vue | 20 +-- 11 files changed, 142 insertions(+), 97 deletions(-) diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java index a0a3d1c72..b252885c3 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java @@ -78,7 +78,7 @@ public interface XianGongAgvService { public HttpResponse sendOrderSequencesToXZ(Instruction inst) throws Exception; /** - * 添加 + * 追加运单 * @param inst * @return * @throws Exception @@ -109,11 +109,6 @@ public interface XianGongAgvService { */ JSONObject xgAGVWaitPointRequest(JSONObject requestParam); - /** - * 运单号查询运单状态 - */ - public HttpResponse selectOrderByInstCode(String instCode); - /** * 查询场景中指定机器人信息 diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java index 2472995e7..630d92e0f 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java @@ -245,46 +245,29 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { @LokiLog(type = LokiLogType.AGV) @Override public HttpResponse sendOrderSequencesToXZ(Instruction inst) throws Exception { - /*JSONObject jo = new JSONObject(); - jo.put("intendedVehicle", ""); - jo.put("category", ""); - jo.put("failureFatal", false); - jo.put("complete", false); - JSONArray transports = new JSONArray(); - JSONObject orderjo = new JSONObject(); - orderjo.put("name", inst.getInstruction_code()); - orderjo.put("order", createOrederData(inst, CommonFinalParam.ONE)); - transports.add(orderjo); - jo.put("transports", transports); - - JSONArray ja1 = new JSONArray(); - JSONObject jo1 = new JSONObject(); - jo1.put("key", ""); - jo1.put("value", ""); - ja1.add(jo1); - jo.put("properties", ja1); - log.info("任务号:{},指令号{},下发agv订单序列参数:{}", inst.getTask_code(), inst.getInstruction_code(), jo.toString());*/ - com.alibaba.fastjson.JSONObject jo = new com.alibaba.fastjson.JSONObject(); jo.put("id", inst.getInstruction_code()); + //运单封口,true=创建运单之后不可添加动作块;false=创建运单可以添加动作块 jo.put("complete", true); + //动作块 jo.put("blocks", createBlocksData(inst)); + //运单优先级 jo.put("priority", inst.getPriority()); - log.info("任务号:{},指令号{},下发agv订单序列参数:{}", inst.getTask_code(), inst.getInstruction_code(), jo.toString()); + log.info("任务号:{},指令号{},下发agv订单序列参数:{}", inst.getTask_code(), inst.getInstruction_code(), jo); if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), CommonFinalParam.ONE)) { String agvurl = paramService.findByCode(AcsConfig.AGVURL).getValue(); String agvport = paramService.findByCode(AcsConfig.AGVPORT).getValue(); - agvurl = agvurl + ":" + agvport + "/api/route/orderSequences/" + inst.getTask_code(); + agvurl = agvurl + ":" + agvport + "/setOrder"; + log.info(agvurl); HttpResponse result = HttpRequest.post(agvurl) //表单内容 .body(String.valueOf(jo)) //超时,毫秒 .timeout(20000) .execute(); - log.info(agvurl); log.info("任务号:{},指令号{},状态{},下发agv订单序列反馈:{}", inst.getTask_code(), inst.getInstruction_code(), result.getStatus(), result.body()); return result; @@ -294,41 +277,57 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { } /** - * 下发运单 + * 下发动作块信号 + * * @param inst * @return */ public JSONArray createBlocksData(Instruction inst) { JSONArray ja = new JSONArray(); - sendStartDeviceOrder(ja,inst.getStart_device_code(), inst.getStart_point_code(),inst.getInstruction_code()); - sendEndDeviceOrder(ja,inst.getStart_device_code(),inst.getInstruction_code(),inst.getNext_point_code(),inst.getNext_device_code()); - if(StrUtil.isNotEmpty(inst.getStart_device_code2())){ - sendStartDeviceOrder(ja,inst.getStart_device_code2(), inst.getStart_point_code2(),inst.getInstruction_code()); + String instruction_code = inst.getInstruction_code(); + String start_device_code = inst.getStart_device_code(); + String start_point_code = inst.getStart_point_code(); + String next_device_code = inst.getNext_device_code(); + String next_point_code = inst.getNext_point_code(); + sendStartDeviceOrder(ja, start_device_code, start_point_code, instruction_code); + sendEndDeviceOrder(ja, start_device_code, instruction_code, next_point_code, next_device_code); + String start_device_code2 = inst.getStart_device_code2(); + String start_point_code2 = inst.getStart_point_code2(); + if (StrUtil.isNotEmpty(start_device_code2)) { + sendStartDeviceOrder(ja, start_device_code2, start_point_code2, instruction_code); } - if(StrUtil.isNotEmpty(inst.getNext_device_code2())){ - sendEndDeviceOrder(ja,inst.getNext_device_code2(),inst.getInstruction_code(),inst.getNext_point_code2(),inst.getNext_device_code2()); + String next_device_code2 = inst.getNext_device_code2(); + String next_point_code2 = inst.getNext_point_code2(); + if (StrUtil.isNotEmpty(next_device_code2)) { + sendEndDeviceOrder(ja, start_device_code2, instruction_code, next_device_code2, next_point_code2); } return ja; } /** - * 下发取货 - * @param device_code - * @param instCode + * 下发取货信号 + * @param ja + * @param pointCode 起始点位 + * @param device_code 起始设备 + * @param instCode 指令号 */ - public void sendStartDeviceOrder(JSONArray ja,String pointCode, String device_code,String instCode){ - + public void sendStartDeviceOrder(JSONArray ja, String pointCode, String device_code, String instCode) { Device startDevice = deviceAppService.findDeviceByCode(device_code); //忽略取货校验 if ("true".equals(startDevice.getExtraValue().get("ignore_pickup_check"))) { //取货前等待 JSONObject jo = new JSONObject(); + //动作块id jo.put("blockId", IdUtil.simpleUUID()); + //目的地名称 jo.put("location", pointCode + "INGET"); + //执行脚本 jo.put("operation", "script"); jo.put("id", pointCode + "INGET"); + //通信脚本,动作前后与现场设备交互的场景 jo.put("script_name", "userpy/interact.py"); JSONObject script_args = new JSONObject(); + //更改为现场设备IP及PORT script_args.put("addr", addr); JSONObject data = new JSONObject(); JSONObject reach = new JSONObject(); @@ -340,7 +339,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { jo.put("script_args", script_args); ja.add(jo); } - + //将货物顶起来 JSONObject jo1 = new JSONObject(); jo1.put("blockId", IdUtil.simpleUUID()); jo1.put("location", pointCode); @@ -368,11 +367,14 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { } /** - * 下发放货 - * @param device_code - * @param instCode + * 下发放货信号 + * @param ja + * @param device_code 起始设备 + * @param instCode 指令号 + * @param pointCode 终点点位 + * @param nextDeviceCode 终点设备 */ - public void sendEndDeviceOrder(JSONArray ja,String device_code,String instCode,String pointCode,String nextDeviceCode){ + public void sendEndDeviceOrder(JSONArray ja, String device_code, String instCode, String pointCode, String nextDeviceCode) { Device nextDevice = deviceAppService.findDeviceByCode(nextDeviceCode); //忽略放货校验 if ("true".equals(nextDevice.getExtraValue().get("ignore_release_check"))) { @@ -398,24 +400,27 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { //放货前下发旋转角度 JSONObject json1 = new JSONObject(); - AcsPointAngle acsPointAngleDto = acsPointAngleService.findByCode(device_code,nextDeviceCode); - if (ObjectUtil.isNotEmpty(acsPointAngleDto)){ + AcsPointAngle acsPointAngleDto = acsPointAngleService.findByCode(device_code, nextDeviceCode); + if (ObjectUtil.isNotEmpty(acsPointAngleDto)) { log.info("acsPointAngleDto----參數,{}", acsPointAngleDto.toString()); com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject(); BigDecimal next_point_angle = acsPointAngleDto.getNext_point_angle(); - operation_args.put("increase_spin_angle",next_point_angle);//弧度值,如3.14 - operation_args.put("skill_name","GoByOdometer"); + operation_args.put("increase_spin_angle", next_point_angle);//弧度值,如3.14 + operation_args.put("skill_name", "GoByOdometer"); json1.put("blockId", IdUtil.simpleUUID()); json1.put("location", pointCode + "INPUT"); - json1.put("operation_args",operation_args); + json1.put("operation_args", operation_args); ja.add(json1); } + //将货物放下 com.alibaba.fastjson.JSONObject jo4 = new com.alibaba.fastjson.JSONObject(); jo4.put("blockId", IdUtil.simpleUUID()); jo4.put("location", pointCode); jo4.put("operation", "JackUnload"); ja.add(jo4); + + //忽略放货校验 if ("true".equals(nextDevice.getExtraValue().get("ignore_release_check"))) { //放货完成等待 @@ -523,8 +528,8 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { Device startdevice = deviceAppService.findDeviceByCode(startAddress); Device nextdevice = deviceAppService.findDeviceByCode(nextAddress); break; - default: - break; + default: + break; } orderjo.put("destinations", ja); @@ -711,35 +716,13 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { throw new BadRequestException("请求失败,IN OUT 站点错误!"); } - @Override - public HttpResponse selectOrderByInstCode(String instCode) { - if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), "1")) { - String agvurl =paramService.findByCode(AcsConfig.AGVURL).getValue(); - String agvport = paramService.findByCode(AcsConfig.AGVPORT).getValue(); - - com.alibaba.fastjson.JSONObject param = new com.alibaba.fastjson.JSONObject(); - param.put("id", instCode); - param.put("disableVehicle", false); - agvurl = agvurl + ":" + agvport + "/" + instCode; - log.info("根据运单号查询运单状态的请求:{}", agvurl); - HttpResponse result = HttpRequest.post(agvurl) - .body(param.toJSONString()) - .timeout(20000)//超时,毫秒 - .execute(); - log.info("根据运单号查询运单状态的请求反馈:{}", result); - return result; - } else { - return null; - } - } - @Override public HttpResponse getRobotInfo(String robotCode) { if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), "1")) { - String agvurl =paramService.findByCode(AcsConfig.AGVURL).getValue(); + String agvurl = paramService.findByCode(AcsConfig.AGVURL).getValue(); String agvport = paramService.findByCode(AcsConfig.AGVPORT).getValue(); - agvurl = agvurl + ":" + agvport + "/"+ " robotsStatus?vehicles=" + robotCode; + agvurl = agvurl + ":" + agvport + "/" + " robotsStatus?vehicles=" + robotCode; log.info("根据指定机器人查询状态的请求:{}", agvurl); HttpResponse result = HttpRequest.get(agvurl) .timeout(20000)//超时,毫秒 diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java index 6ad4e3b4c..732c2b7ed 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java @@ -26,6 +26,7 @@ import org.nl.acs.device.enums.DeviceType; import org.nl.acs.device.service.mapper.DeviceExtraMapper; import org.nl.acs.device.domain.DeviceRunpoint; import org.nl.acs.device.service.mapper.DeviceRunpointMapper; +import org.nl.acs.device_driver.stacker.standard_stacker.StandardStackerDeviceDriver; import org.nl.acs.device_driver.two_conveyor.oven_manipulator.OvenGantryManipulatorDeviceDriver; import org.nl.acs.device_driver.two_conveyor.slit_two_manipulator.SlitTwoManipulatorDeviceDriver; import org.nl.acs.monitor.DeviceStageMonitor; @@ -1021,6 +1022,9 @@ public class DeviceServiceImpl extends CommonServiceImpl i } else if (device.getDeviceDriver() instanceof DeviceStageMonitor) { DeviceStageMonitor deviceStageMonitor = (DeviceStageMonitor) device.getDeviceDriver(); deviceStageMonitor.setDeviceStatus(form); + }else if (device.getDeviceDriver() instanceof StandardStackerDeviceDriver) { + StandardStackerDeviceDriver standardStackerDeviceDriver = (StandardStackerDeviceDriver) device.getDeviceDriver(); + standardStackerDeviceDriver.setDeviceStatus(form); } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/xg_agv_car/XgAgvCarDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/xg_agv_car/XgAgvCarDeviceDriver.java index 436891663..e83dd157e 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/xg_agv_car/XgAgvCarDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/xg_agv_car/XgAgvCarDeviceDriver.java @@ -31,7 +31,7 @@ import java.util.Date; /** - * 普通站点仙工AGV + * 仙工AGV */ @Slf4j @Data diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/stacker/standard_stacker/StandardStackerDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/stacker/standard_stacker/StandardStackerDeviceDriver.java index 2df4b6367..781718470 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/stacker/standard_stacker/StandardStackerDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/stacker/standard_stacker/StandardStackerDeviceDriver.java @@ -725,7 +725,10 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme @Override public JSONObject getDeviceStatusName() throws Exception { - return null; + JSONObject jsonObject = new JSONObject(); + jsonObject.put("device_code", this.getDevice().getDevice_code()); + jsonObject.put("is_click", true); + return jsonObject; } @Override diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java index 0e3cb2320..c8ffead76 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java @@ -28,6 +28,8 @@ import org.nl.acs.instruction.domain.Instruction; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; +import org.nl.config.lucene.service.LuceneExecuteLogService; +import org.nl.config.lucene.service.dto.LuceneLogDto; import org.nl.system.service.param.ISysParamService; import org.slf4j.MDC; import org.springframework.beans.factory.annotation.Autowired; @@ -55,6 +57,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Autowired DeviceExecuteLogService logServer; + @Autowired + private LuceneExecuteLogService luceneLogService; + public String token; @@ -92,6 +97,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { type = "error"; } log.info("applyTaskToWms-----输出参数{}", result2.body()); + LuceneLogDto luceneLogDto = new LuceneLogDto("applyTaskToWms", String.valueOf(result2.getStatus()), + JSON.toJSONString(jo), String.valueOf(result2.body()), "ACS向LMS申请生箔按钮任务"); + luceneLogService.interfaceExecuteLog(luceneLogDto); return result2.body(); } finally { @@ -183,6 +191,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { map.put("message", e.getMessage()); return JSONObject.toJavaObject(map, ApplyGreenFoilButtonResponse.class); } + LuceneLogDto luceneLogDto = new LuceneLogDto("ApplyGreenFoilButtonRequest", String.valueOf(applyGreenFoilButtonResponse.getCode()), + JSON.toJSONString(param), String.valueOf(applyGreenFoilButtonResponse.getMessage()), "ACS向LMS申请生箔按钮任务"); + luceneLogService.interfaceExecuteLog(luceneLogDto); } return applyGreenFoilButtonResponse; } finally { @@ -215,6 +226,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { map.put("message", e.getMessage()); return JSONObject.toJavaObject(map, BlankingButtonResponse.class); } + LuceneLogDto luceneLogDto = new LuceneLogDto("BlankingButtonRequest", String.valueOf(blankingButtonResponse.getCode()), + JSON.toJSONString(param), String.valueOf(blankingButtonResponse.getMessage()), "ACS向LMS申请表处下料位按钮任务"); + luceneLogService.interfaceExecuteLog(luceneLogDto); } return blankingButtonResponse; } finally { @@ -248,6 +262,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { map.put("message", e.getMessage()); return JSONObject.toJavaObject(map, ApplyPlugPullSitResponse.class); } + LuceneLogDto luceneLogDto = new LuceneLogDto("ApplyPlugPullSiteRequest", String.valueOf(applyPlugPullSitResponse.getCode()), + JSON.toJSONString(param), String.valueOf(applyPlugPullSitResponse.getMessage()), "ACS向LMS申请套管"); + luceneLogService.interfaceExecuteLog(luceneLogDto); } return applyPlugPullSitResponse; } finally { @@ -281,6 +298,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { map.put("message", e.getMessage()); return JSONObject.toJavaObject(map, ApplyManipulatorActionResponse.class); } + LuceneLogDto luceneLogDto = new LuceneLogDto("ApplyManipulatorActionRequest", String.valueOf(applyManipulatorActionResponse.getCode()), + JSON.toJSONString(param), String.valueOf(applyManipulatorActionResponse), "ACS向LMS申请反馈"); + luceneLogService.interfaceExecuteLog(luceneLogDto); } return applyManipulatorActionResponse; } finally { @@ -303,7 +323,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { .execute() .body(); log.info("gccQueryStationState - 响应参数{}", responseBody); - + JSONObject jsonObject = JSONObject.parseObject(responseBody); + LuceneLogDto luceneLogDto = new LuceneLogDto("gccQueryStationState", String.valueOf(jsonObject.get("code")), + JSON.toJSONString("StartStationCode=" + inst.getStart_point_code() + "&EndStationCode=" + inst.getNext_point_code()), + String.valueOf(jsonObject), "ACS查询站点有无货状态"); + luceneLogService.interfaceExecuteLog(luceneLogDto); return JSONObject.parseObject(responseBody); } catch (Exception e) { JSONObject result = new JSONObject(); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java index 242dc8197..8eb0f533f 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import lombok.Builder; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.acs.device.domain.Device; @@ -28,7 +29,11 @@ import org.nl.acs.ext.wms.service.WmsToAcsService; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.storage_cell.domain.StorageCell; import org.nl.acs.storage_cell.service.mapper.StorageCellMapper; +import org.nl.common.enums.LogTypeEnum; import org.nl.common.exception.BadRequestException; +import org.nl.config.lucene.service.LuceneExecuteLogService; +import org.nl.config.lucene.service.dto.LuceneLogDto; +import org.nl.config.lucene.service.impl.LuceneExecuteLogServiceImpl; import org.slf4j.MDC; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -48,6 +53,9 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { @Autowired private DeviceAppService deviceAppService; + @Autowired + private LuceneExecuteLogService luceneExecuteLogService; + private String log_file_type = "log_file_type"; private String log_type = "LMS请求ACS"; @@ -118,6 +126,9 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { } response.setCode(200); response.setMessage("success"); + LuceneLogDto luceneLogDto = new LuceneLogDto("putAction", String.valueOf(response.getCode()), + jsonObject, String.valueOf(response), "LMS下发动作"); + luceneExecuteLogService.interfaceExecuteLog(luceneLogDto); log.info("putAction--------------:输出参数:" + response); return response; } finally { @@ -156,7 +167,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { String parent_device_code = data.getString("device_code"); String device_code = ""; LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.like(StringUtils.isNotBlank(parent_device_code), StorageCell::getParent_storage_code, parent_device_code); + wrapper.in(StringUtils.isNotBlank(parent_device_code), StorageCell::getParent_storage_code, parent_device_code); StorageCell storageCell = storageCellMapper.selectOne(wrapper); final JSONObject device_json = (JSONObject) JSON.toJSON(storageCell); if (!ObjectUtil.isEmpty(device_json)) { @@ -280,6 +291,9 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { resultJson.put("status", HttpStatus.OK.value()); resultJson.put("message", "操作成功"); resultJson.put("data", backja); + LuceneLogDto luceneLogDto = new LuceneLogDto("queryDevice", String.valueOf(resultJson.get("status")), + jsonObject, String.valueOf(resultJson), "LMS查询设备状态"); + luceneExecuteLogService.interfaceExecuteLog(luceneLogDto); return resultJson; } finally { MDC.remove(log_file_type); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index 2de58000d..19f56d5ae 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -445,12 +445,23 @@ public class InstructionServiceImpl extends CommonServiceImpl - + - - + + - - - - - - - - + + + + + + + + From bf368ec156a331c48022fe6bdc273452bd86cde6 Mon Sep 17 00:00:00 2001 From: lishuai <1793460677@qq.com> Date: Thu, 1 Feb 2024 16:37:50 +0800 Subject: [PATCH 05/21] =?UTF-8?q?fix=20:=20=E7=94=B3=E8=AF=B7=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=85=88=E6=89=BE=E6=8C=87=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task/service/impl/TaskServiceImpl.java | 7 - .../BeltConveyorDeviceDriver.java | 8 +- .../DoubleBeltConveyorDeviceDriver.java | 3 +- .../BoxStorageOutConveyorDeviceDriver.java | 6 +- .../BoxSubvolumesConveyorDeviceDriver.java | 40 +-- ...nishedProductOutBindLableDeviceDriver.java | 3 +- ...ConveyorWithScannerWeightDeviceDriver.java | 3 +- .../UnBoxLableConveyorDeviceDriver.java | 3 +- .../BoxPackageManipulatorDeviceDriver.java | 238 ++++++++------ .../BoxStorageManipulatorDeviceDriver.java | 292 ++++++++++-------- .../ReturnGoodManipulatorDeviceDriver.java | 256 +++++++++------ ...pedManipulatorManipulatorDeviceDriver.java | 257 +++++++++------ ...TwoManipulatorManipulatorDeviceDriver.java | 249 +++++++++------ .../PaperTubeConveyor2DeviceDriver.java | 2 +- .../StandardStackerDeviceDriver.java | 112 +++++-- .../SlitTwoManipulatorDeviceDriver.java | 3 +- .../org/nl/acs/enums/RequestSucessEnum.java | 20 ++ .../org/nl/acs/task/service/TaskService.java | 7 + .../task/service/impl/TaskServiceImpl.java | 28 ++ .../main/resources/config/application-dev.yml | 5 +- .../src/views/acs/monitor/device/index.vue | 5 +- .../src/views/system/monitor/device/index.vue | 38 ++- 22 files changed, 972 insertions(+), 613 deletions(-) create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/enums/RequestSucessEnum.java diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index 1504c8294..34740dbfd 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -443,13 +443,6 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial { } } else { if (StrUtil.equals(task.getTask_type(), "9") && StrUtil.isNotEmpty(task.getPut_device_code())) { -// if(task.getNext_device_code().equals(device_code) -// && StrUtil.equals(task.getTask_status(), "1")){ -// Instruction instruction = instructionService.findByTaskcodeAndStatus(task.getTask_code()); -// if (ObjectUtil.isNotEmpty(instruction)) { -// list.add(task); -// } -// } Instruction instruction = instructionService.findByDeviceCodeFromCache(task.getNext_device_code()); if (ObjectUtil.isNotEmpty(instruction)) { if (StrUtil.equals(instruction.getStart_device_code(), device_code)) { diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/BeltConveyorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/BeltConveyorDeviceDriver.java index db13c6e8b..f9b0b526f 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/BeltConveyorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/BeltConveyorDeviceDriver.java @@ -747,6 +747,7 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements jo.put("inventory_qty", inventory_qty); jo.put("out_finish", out_finish); jo.put("material", material); + jo.put("is_click", true); jo.put("isOnline", this.getIsonline()); return jo; @@ -822,7 +823,12 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements @Override public void setDeviceStatus(JSONObject data) { - + String requestSucess = data.getString("requireSucess"); + if (StrUtil.equals(requestSucess, "0")) { + this.requireSucess = false; + } else if (StrUtil.equals(requestSucess, "1")) { + this.requireSucess = true; + } } public static boolean arrayEquals(int[] a, int[] b) { diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_belt_conveyor/DoubleBeltConveyorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_belt_conveyor/DoubleBeltConveyorDeviceDriver.java index d9116a778..bcec9130a 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_belt_conveyor/DoubleBeltConveyorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/double_belt_conveyor/DoubleBeltConveyorDeviceDriver.java @@ -27,6 +27,7 @@ import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.dto.RouteLineDto; +import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; import org.nl.config.SpringContextHolder; @@ -494,7 +495,7 @@ public class DoubleBeltConveyorDeviceDriver extends AbstractOpcDeviceDriver impl log.error("指令创建失败!", e.getMessage()); return false; } - taskdto.setTask_status("1"); + taskdto.setTask_status(TaskStatusEnum.BUSY.getIndex()); taskserver.update(taskdto); requireSucess = true; Map map = new LinkedHashMap<>(); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/box_storage_out_conveyor/BoxStorageOutConveyorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/box_storage_out_conveyor/BoxStorageOutConveyorDeviceDriver.java index 904130d24..cb3ccc486 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/box_storage_out_conveyor/BoxStorageOutConveyorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/box_storage_out_conveyor/BoxStorageOutConveyorDeviceDriver.java @@ -30,6 +30,7 @@ import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.dto.RouteLineDto; +import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; import org.nl.config.SpringContextHolder; @@ -172,8 +173,7 @@ public class BoxStorageOutConveyorDeviceDriver extends AbstractOpcDeviceDriver i heartbeat = this.itemProtocol.getHeartbeat(); - - if (move != 0 && task > 0) { + if (move != 0 && task > 0) { update_instruction_status(); } @@ -421,7 +421,7 @@ public class BoxStorageOutConveyorDeviceDriver extends AbstractOpcDeviceDriver i return false; } //创建指令后修改任务状态 - taskdto.setTask_status("1"); + taskdto.setTask_status(TaskStatusEnum.BUSY.getIndex()); taskserver.update(taskdto); requireSucess = true; String next_addr = nextdevice.getExtraValue().get("address").toString(); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/box_subvolumes_conveyor/BoxSubvolumesConveyorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/box_subvolumes_conveyor/BoxSubvolumesConveyorDeviceDriver.java index 4fcb21da1..eb0c4f787 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/box_subvolumes_conveyor/BoxSubvolumesConveyorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/box_subvolumes_conveyor/BoxSubvolumesConveyorDeviceDriver.java @@ -28,6 +28,7 @@ import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.dto.RouteLineDto; +import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; import org.nl.config.SpringContextHolder; @@ -169,47 +170,12 @@ public class BoxSubvolumesConveyorDeviceDriver extends AbstractOpcDeviceDriver i to_task = this.itemProtocol.getTo_task(); heartbeat = this.itemProtocol.getHeartbeat(); material_barcode = this.itemProtocol.getMaterialBarCode(); - - - - if (to_length != last_to_length) { - logServer.deviceExecuteLog(this.device_code, "", "", "信号to_length:" + last_to_length + "->" + to_length); - } - if (to_weight != last_to_weight) { - logServer.deviceExecuteLog(this.device_code, "", "", "信号to_weight:" + last_to_weight + "->" + to_weight); - } - if (to_height != last_to_height) { - logServer.deviceExecuteLog(this.device_code, "", "", "信号to_height:" + last_to_height + "->" + to_height); - } - if (to_command != last_to_command) { - logServer.deviceExecuteLog(this.device_code, "", "", "信号to_command:" + last_to_command + "->" + to_command); - } - if (to_target != last_to_target) { - logServer.deviceExecuteLog(this.device_code, "", "", "信号to_target:" + last_to_target + "->" + to_target); - } - if (to_task != last_to_task) { - logServer.deviceExecuteLog(this.device_code, "", "", "信号to_task:" + last_to_task + "->" + to_task); - } - if (mode != last_mode) { - logServer.deviceExecuteLog(this.device_code, "", "", "信号mode:" + last_mode + "->" + mode + "复位请求标记:" + requireSucess); - logServer.deviceExecuteLog(this.device_code, "", "", "信号mode:" + last_mode + "->" + mode); - } - - if (carrier_direction != last_carrier_direction) { - logServer.deviceItemValue(this.device_code, "carrier_direction", String.valueOf(carrier_direction)); - logServer.deviceExecuteLog(this.device_code, "", "", "信号carrier_direction:" + last_carrier_direction + "->" + carrier_direction); - } - if (error != last_error) { - - logServer.deviceItemValue(this.device_code, "error", String.valueOf(error)); - logServer.deviceExecuteLog(this.device_code, "", "", "信号error:" + last_error + "->" + error); - } + // 更新指令状态 if (move != 0 && task > 0) { update_instruction_status(); } - } catch (Exception var17) { var17.printStackTrace(); logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + var17.getMessage() + ",this.itemProtocol is null:" + ObjectUtil.isEmpty(this.itemProtocol)); @@ -531,7 +497,7 @@ public class BoxSubvolumesConveyorDeviceDriver extends AbstractOpcDeviceDriver i return false; } //创建指令后修改任务状态 - taskdto.setTask_status("1"); + taskdto.setTask_status(TaskStatusEnum.BUSY.getIndex()); taskserver.update(taskdto); requireSucess = true; String next_addr = nextdevice.getExtraValue().get("address").toString(); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/finished_product_out_with_bind_lable_conveyor/FinishedProductOutBindLableDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/finished_product_out_with_bind_lable_conveyor/FinishedProductOutBindLableDeviceDriver.java index 9159cdb3d..393693a31 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/finished_product_out_with_bind_lable_conveyor/FinishedProductOutBindLableDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/finished_product_out_with_bind_lable_conveyor/FinishedProductOutBindLableDeviceDriver.java @@ -34,6 +34,7 @@ import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.dto.RouteLineDto; import org.nl.acs.storage_cell.domain.StorageCell; import org.nl.acs.storage_cell.service.mapper.StorageCellMapper; +import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; import org.nl.config.SpringContextHolder; @@ -638,7 +639,7 @@ public class FinishedProductOutBindLableDeviceDriver extends AbstractOpcDeviceDr return false; } //创建指令后修改任务状态 - taskdto.setTask_status("1"); + taskdto.setTask_status(TaskStatusEnum.BUSY.getIndex()); taskserver.update(taskdto); requireSucess = true; String next_addr = nextdevice.getExtraValue().get("address").toString(); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/scanner_weight_conveyor/ConveyorWithScannerWeightDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/scanner_weight_conveyor/ConveyorWithScannerWeightDeviceDriver.java index b939ac8ef..ccdf499c0 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/scanner_weight_conveyor/ConveyorWithScannerWeightDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/scanner_weight_conveyor/ConveyorWithScannerWeightDeviceDriver.java @@ -35,6 +35,7 @@ import org.nl.acs.opc.DeviceAppServiceImpl; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.dto.RouteLineDto; import org.nl.acs.route.service.impl.RouteLineServiceImpl; +import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.enums.TaskTypeEnum; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; @@ -409,7 +410,7 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv Device nextdevice = deviceAppservice.findDeviceByCode(taskdto.getNext_device_code()); //创建指令后修改任务状态 - taskdto.setTask_status("1"); + taskdto.setTask_status(TaskStatusEnum.BUSY.getIndex()); taskserver.update(taskdto); String next_addr = nextdevice.getExtraValue().get("address").toString(); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/un_box_lable_conveyor/UnBoxLableConveyorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/un_box_lable_conveyor/UnBoxLableConveyorDeviceDriver.java index 27ae88f9a..c67e6aff5 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/un_box_lable_conveyor/UnBoxLableConveyorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/un_box_lable_conveyor/UnBoxLableConveyorDeviceDriver.java @@ -31,6 +31,7 @@ import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.dto.RouteLineDto; +import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; import org.nl.config.SpringContextHolder; @@ -519,7 +520,7 @@ public class UnBoxLableConveyorDeviceDriver extends AbstractOpcDeviceDriver impl return false; } //创建指令后修改任务状态 - taskdto.setTask_status("1"); + taskdto.setTask_status(TaskStatusEnum.BUSY.getIndex()); taskserver.update(taskdto); requireSucess = true; String next_addr = nextdevice.getExtraValue().get("address").toString(); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/box_package_manipulator/BoxPackageManipulatorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/box_package_manipulator/BoxPackageManipulatorDeviceDriver.java index 76cee61c0..602435f47 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/box_package_manipulator/BoxPackageManipulatorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/box_package_manipulator/BoxPackageManipulatorDeviceDriver.java @@ -1,5 +1,6 @@ package org.nl.acs.device_driver.one_manipulator.box_package_manipulator; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; @@ -30,9 +31,11 @@ import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppServiceImpl; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.impl.RouteLineServiceImpl; +import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.enums.TaskTypeEnum; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; +import org.nl.common.exception.BadRequestException; import org.nl.config.SpringContextHolder; import java.util.*; @@ -319,101 +322,103 @@ public class BoxPackageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i //找终点为入库输送线工位任务类型为行架的任务 for (int i = 0; i < getDeviceCodeList.size(); i++) { String startDeviceCode = getDeviceCodeList.get(i); - TaskDto taskDto = taskserver.findByStartCodeAndReady(startDeviceCode); - if (ObjectUtil.isNotEmpty(taskDto) && TaskTypeEnum.Truss_Task.getIndex().equals(taskDto.getTask_type())) { - String interactionJson = taskDto.getInteraction_json(); - InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); - String start_device_code = taskDto.getStart_device_code(); - String next_device_code = taskDto.getNext_device_code(); - Device startDevice = deviceAppService.findDeviceByCode(start_device_code); - Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); - String start_addr = startDevice.getExtraValue().get("address").toString(); - String next_addr = nextDevice.getExtraValue().get("address").toString(); - String taskid = taskDto.getTask_id(); - String taskcode = taskDto.getTask_code(); - String start_point_code = taskDto.getStart_point_code(); - String route_plan_code = taskDto.getRoute_plan_code(); - String next_point_code = taskDto.getNext_point_code(); - Instruction instdto = new Instruction(); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - instdto.setCreate_by("auto"); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setInstruction_status("0"); - instdto.setExecute_device_code(device_code); + //先查指令 + List taskDtoInstruction = taskserver.queryTaskByDeviceCodeAndStatus2(startDeviceCode); + if (CollUtil.isNotEmpty(taskDtoInstruction)){ + TaskDto taskDtoIns = taskDtoInstruction.get(0); + if (TaskTypeEnum.Truss_Task.getIndex().equals(taskDtoIns.getTask_type())) { + Instruction instruction = instructionService.findByTaskcodeAndStatus(taskDtoIns.getTask_code()); + String interactionJson = taskDtoIns.getInteraction_json(); + InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); + String start_device_code = taskDtoIns.getStart_device_code(); + String next_device_code = taskDtoIns.getNext_device_code(); + Device startDevice = deviceAppService.findDeviceByCode(start_device_code); + Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); + String start_addr = startDevice.getExtraValue().get("address").toString(); + String next_addr = nextDevice.getExtraValue().get("address").toString(); + if (ObjectUtil.isEmpty(start_addr)) { + throw new BadRequestException("设备:" + startDevice.getDevice_code() + "未设置电气调度号!"); + } + if (ObjectUtil.isEmpty(next_addr)) { + throw new BadRequestException("设备:" + nextDevice.getDevice_code() + "未设置电气调度号!"); + } + Map map1 = new HashMap<>(); + Map map2 = new HashMap<>(); + Map map3 = new HashMap<>(); + Map map4 = new HashMap<>(); + Map map5 = new HashMap<>(); + Map map6 = new HashMap<>(); + Map map7 = new HashMap<>(); + Map map8 = new HashMap<>(); + try { + pushPLC(map1, map2, next_addr, map3, start_addr, map4, instruction.getInstruction_code(), interactionJsonDTO, map5, map6, map7, map8); + } catch (Exception e) { - try { - instructionService.create(instdto); - } catch (Exception e) { - notCreateInstMessage = e.getMessage(); - logServer.deviceExecuteLog(this.getDevice_code(), "", "", "创建指令时出现异常:" + e.getMessage()); - return false; + logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" + + instruction.getInstruction_code() + ",指令起点:" + instruction.getStart_device_code() + + ",指令终点:" + instruction.getNext_device_code() + ",交互参数:" + interactionJsonDTO.toString() + ",指令执行失败:" + e.getMessage()); + } + this.setRequireSucess(true); + return true; } - //创建指令后修改任务状态 - taskDto.setTask_status("1"); - taskserver.update(taskDto); - requireSucess = true; + }else { + TaskDto taskDto = taskserver.findByStartCodeAndReady(startDeviceCode); + if (ObjectUtil.isNotEmpty(taskDto) && TaskTypeEnum.Truss_Task.getIndex().equals(taskDto.getTask_type())) { + String interactionJson = taskDto.getInteraction_json(); + InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); + String start_device_code = taskDto.getStart_device_code(); + String next_device_code = taskDto.getNext_device_code(); + Device startDevice = deviceAppService.findDeviceByCode(start_device_code); + Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); + String start_addr = startDevice.getExtraValue().get("address").toString(); + String next_addr = nextDevice.getExtraValue().get("address").toString(); + if (ObjectUtil.isEmpty(start_addr)) { + throw new BadRequestException("设备:" + startDevice.getDevice_code() + "未设置电气调度号!"); + } + if (ObjectUtil.isEmpty(next_addr)) { + throw new BadRequestException("设备:" + nextDevice.getDevice_code() + "未设置电气调度号!"); + } - Map map1 = new HashMap<>(); - List list = new ArrayList(); - map1.put("code", "to_command"); - map1.put("value", 1); - list.add(map1); - Map map2 = new HashMap<>(); - map2.put("code", "to_target"); - map2.put("value", next_addr); - list.add(map2); - Map map3 = new HashMap<>(); - map3.put("code", "to_onset"); - map3.put("value", start_addr); - list.add(map3); - Map map4 = new HashMap<>(); - map4.put("code", "to_task"); - map4.put("value", instdto.getInstruction_code()); - list.add(map4); - if (ObjectUtil.isNotEmpty(interactionJsonDTO)) { - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getSeq())) { - Map map5 = new HashMap<>(); - map5.put("code", "to_seq"); - map5.put("value", interactionJsonDTO.getSeq()); - list.add(map5); - } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getLastOne())) { - Map map6 = new HashMap<>(); - map6.put("code", "to_last_one"); - map6.put("value", interactionJsonDTO.getLastOne()); - list.add(map6); - } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getDirection())) { - Map map7 = new HashMap<>(); - map7.put("code", "to_direction"); - map7.put("value", interactionJsonDTO.getDirection()); - list.add(map7); - } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getMaxNo())) { - Map map8 = new HashMap<>(); - map8.put("code", "to_max_no"); - map8.put("value", interactionJsonDTO.getMaxNo()); - list.add(map8); - } - } + String taskid = taskDto.getTask_id(); + String taskcode = taskDto.getTask_code(); + String start_point_code = taskDto.getStart_point_code(); + String route_plan_code = taskDto.getRoute_plan_code(); + String next_point_code = taskDto.getNext_point_code(); + Instruction instdto = new Instruction(); + packageData(instdto, route_plan_code, taskid, taskcode, start_device_code, next_device_code, start_point_code, next_point_code); - try { - this.writing(list); - } catch (Exception e) { - logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" - + instdto.getInstruction_code() + ",指令起点:" + instdto.getStart_device_code() - + ",指令终点:" + instdto.getNext_device_code() + ",交互参数:" + interactionJsonDTO.toString() + ",指令执行失败:" + e.getMessage()); + try { + instructionService.create(instdto); + } catch (Exception e) { + notCreateInstMessage = e.getMessage(); + logServer.deviceExecuteLog(this.getDevice_code(), "", "", "创建指令时出现异常:" + e.getMessage()); + return false; + } + //创建指令后修改任务状态 + taskDto.setTask_status(TaskStatusEnum.BUSY.getIndex()); + taskserver.update(taskDto); + requireSucess = true; + + Map map1 = new HashMap<>(); + Map map2 = new HashMap<>(); + Map map3 = new HashMap<>(); + Map map4 = new HashMap<>(); + Map map5 = new HashMap<>(); + Map map6 = new HashMap<>(); + Map map7 = new HashMap<>(); + Map map8 = new HashMap<>(); + try { + pushPLC(map1, map2, next_addr, map3, start_addr, map4, instdto.getInstruction_code(), interactionJsonDTO, map5, map6, map7, map8); + } catch (Exception e) { + logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" + + instdto.getInstruction_code() + ",指令起点:" + instdto.getStart_device_code() + + ",指令终点:" + instdto.getNext_device_code() + ",交互参数:" + interactionJsonDTO.toString() + ",指令执行失败:" + e.getMessage()); + } + this.setRequireSucess(true); + return true; + } else { + notCreateInstMessage = "未找到关联设备的任务,指令无法创建"; } - this.setRequireSucess(true); - return true; - }else{ - notCreateInstMessage = "未找到关联设备的任务,指令无法创建"; } } return true; @@ -421,6 +426,59 @@ public class BoxPackageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i } + private void pushPLC(Map map1, Map map2, String next_addr, Map map3, String start_addr, Map map4, String task, InteractionJsonDTO interactionJsonDTO, Map map5, Map map6, Map map7, Map map8) { + List list = new ArrayList(); + map1.put("code", "to_command"); + map1.put("value", 1); + list.add(map1); + map2.put("code", "to_target"); + map2.put("value", next_addr); + list.add(map2); + map3.put("code", "to_onset"); + map3.put("value", start_addr); + list.add(map3); + map4.put("code", "to_task"); + map4.put("value", task); + list.add(map4); + if (ObjectUtil.isNotEmpty(interactionJsonDTO)) { + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getSeq())) { + map5.put("code", "to_seq"); + map5.put("value", interactionJsonDTO.getSeq()); + list.add(map5); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getLastOne())) { + map6.put("code", "to_last_one"); + map6.put("value", interactionJsonDTO.getLastOne()); + list.add(map6); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getDirection())) { + map7.put("code", "to_direction"); + map7.put("value", interactionJsonDTO.getDirection()); + list.add(map7); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getMaxNo())) { + map8.put("code", "to_max_no"); + map8.put("value", interactionJsonDTO.getMaxNo()); + list.add(map8); + } + } + this.writing(list); + } + + private void packageData(Instruction instdto, String route_plan_code, String taskid, String taskcode, String start_device_code, String next_device_code, String start_point_code, String next_point_code) { + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setCreate_by("auto"); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(device_code); + } + public synchronized boolean finish_instruction(Instruction inst) throws Exception { instructionService.finish(inst); return true; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/box_storage_manipulator/BoxStorageManipulatorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/box_storage_manipulator/BoxStorageManipulatorDeviceDriver.java index 52c86bc27..ed13d1187 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/box_storage_manipulator/BoxStorageManipulatorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/box_storage_manipulator/BoxStorageManipulatorDeviceDriver.java @@ -1,5 +1,6 @@ package org.nl.acs.device_driver.one_manipulator.box_storage_manipulator; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; @@ -31,10 +32,14 @@ import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppServiceImpl; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.impl.RouteLineServiceImpl; +import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.enums.TaskTypeEnum; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; +import org.nl.common.exception.BadRequestException; import org.nl.config.SpringContextHolder; +import org.nl.config.lucene.service.LuceneExecuteLogService; +import org.nl.config.lucene.service.dto.LuceneLogDto; import java.util.*; @@ -61,37 +66,21 @@ public class BoxStorageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i DeviceExtraService deviceExtraService = SpringContextHolder.getBean(DeviceExtraServiceImpl.class); DeviceErrorLogService errorLogServer = SpringContextHolder.getBean(DeviceErrorLogServiceImpl.class); - + LuceneExecuteLogService luceneExecuteLogService = SpringContextHolder.getBean("luceneExecuteLogServiceImpl"); int mode = 0; - int last_mode = 0; int move = 0; - int last_move = 0; int action = 0; - int last_action = 0; int error = 0; - int last_error = 0; int task = 0; - int last_task = 0; - - int heartbeat = 0; - int last_heartbeat = 0; int to_command = 0; - int last_to_command = 0; - int to_target = 0; - int last_to_target = 0; - int to_onset = 0; - int last_to_onset = 0; int to_task = 0; - int last_to_task = 0; int to_layer = 0; - int last_to_layer = 0; String to_barcode = null; - String last_to_barcode = null; Boolean isonline = true; int hasGoods = 0; @@ -161,7 +150,11 @@ public class BoxStorageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i } } catch (Exception e) { - logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + Arrays.toString(e.getStackTrace())); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("读取信号值时出现异常" + this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.device_code + "." + Arrays.toString(e.getStackTrace())) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); } @@ -209,17 +202,6 @@ public class BoxStorageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i } } - last_mode = mode; - last_move = move; - last_action = action; - last_error = error; - last_task = task; - last_heartbeat = heartbeat; - last_to_task = to_task; - last_to_command = to_command; - last_to_target = to_target; - last_to_layer = to_layer; - last_to_barcode = to_barcode; } @@ -299,110 +281,104 @@ public class BoxStorageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i //找终点为入库输送线工位任务类型为行架的任务 for (int i = 0; i < getDeviceCodeList.size(); i++) { String startDeviceCode = getDeviceCodeList.get(i); - TaskDto taskDto = taskserver.findByStartCodeAndReady(startDeviceCode); - if (ObjectUtil.isNotEmpty(taskDto) && TaskTypeEnum.Truss_Task.getIndex().equals(taskDto.getTask_type())) { - String interactionJson = taskDto.getInteraction_json(); - InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); - String start_device_code = taskDto.getStart_device_code(); - String next_device_code = taskDto.getNext_device_code(); - Device startDevice = deviceAppService.findDeviceByCode(start_device_code); - Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); - String start_addr = startDevice.getExtraValue().get("address").toString(); - String next_addr = nextDevice.getExtraValue().get("address").toString(); - String taskid = taskDto.getTask_id(); - String taskcode = taskDto.getTask_code(); - String start_point_code = taskDto.getStart_point_code(); - String route_plan_code = taskDto.getRoute_plan_code(); - String next_point_code = taskDto.getNext_point_code(); - Instruction instdto = new Instruction(); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - instdto.setCreate_by("auto"); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setInstruction_status("0"); - instdto.setExecute_device_code(device_code); - - try { - instructionService.create(instdto); - } catch (Exception e) { - notCreateInstMessage = e.getMessage(); - logServer.deviceExecuteLog(this.getDevice_code(), "", "", "创建指令时出现异常:" + e.getMessage()); - return false; + //先查指令 + List taskDtoInstruction = taskserver.queryTaskByDeviceCodeAndStatus2(startDeviceCode); + if (CollUtil.isNotEmpty(taskDtoInstruction)) { + TaskDto taskDtoIns = taskDtoInstruction.get(0); + if (TaskTypeEnum.Truss_Task.getIndex().equals(taskDtoIns.getTask_type())) { + Instruction instruction = instructionService.findByTaskcodeAndStatus(taskDtoIns.getTask_code()); + String interactionJson = taskDtoIns.getInteraction_json(); + InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); + String start_device_code = taskDtoIns.getStart_device_code(); + String next_device_code = taskDtoIns.getNext_device_code(); + Device startDevice = deviceAppService.findDeviceByCode(start_device_code); + Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); + String start_addr = startDevice.getExtraValue().get("address").toString(); + String next_addr = nextDevice.getExtraValue().get("address").toString(); + if (ObjectUtil.isEmpty(start_addr)) { + throw new BadRequestException("设备:" + startDevice.getDevice_code() + "未设置电气调度号!"); + } + if (ObjectUtil.isEmpty(next_addr)) { + throw new BadRequestException("设备:" + nextDevice.getDevice_code() + "未设置电气调度号!"); + } + Map map1 = new HashMap<>(); + Map map2 = new HashMap<>(); + Map map3 = new HashMap<>(); + Map map4 = new HashMap<>(); + Map map5 = new HashMap<>(); + Map map6 = new HashMap<>(); + Map map7 = new HashMap<>(); + Map map8 = new HashMap<>(); + Map map9 = new HashMap<>(); + try { + pushPLC(map1, map2, next_addr, map3, start_addr, map4, instruction.getInstruction_code(), interactionJsonDTO, map5, map6, map7, map8, map9); + } catch (Exception e) { + logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" + + instruction.getInstruction_code() + ",指令起点:" + instruction.getStart_device_code() + + ",指令终点:" + instruction.getNext_device_code() + ",交互参数:" + interactionJsonDTO.toString() + ",指令执行失败:" + e.getMessage()); + } + this.setRequireSucess(true); + return true; } - logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" - + instdto.getInstruction_code() + ",指令起点:" + instdto.getStart_device_code() - + ",指令终点:" + instdto.getNext_device_code() + ",交互参数:" + interactionJsonDTO); - //创建指令后修改任务状态 - taskDto.setTask_status("1"); - taskserver.update(taskDto); - requireSucess = true; + } else { + TaskDto taskDto = taskserver.findByStartCodeAndReady(startDeviceCode); + if (ObjectUtil.isNotEmpty(taskDto) && TaskTypeEnum.Truss_Task.getIndex().equals(taskDto.getTask_type())) { + String interactionJson = taskDto.getInteraction_json(); + InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); + String start_device_code = taskDto.getStart_device_code(); + String next_device_code = taskDto.getNext_device_code(); + Device startDevice = deviceAppService.findDeviceByCode(start_device_code); + Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); + String start_addr = startDevice.getExtraValue().get("address").toString(); + String next_addr = nextDevice.getExtraValue().get("address").toString(); + if (ObjectUtil.isEmpty(start_addr)) { + throw new BadRequestException("设备:" + startDevice.getDevice_code() + "未设置电气调度号!"); + } + if (ObjectUtil.isEmpty(next_addr)) { + throw new BadRequestException("设备:" + nextDevice.getDevice_code() + "未设置电气调度号!"); + } - Map map1 = new HashMap<>(); - List list = new ArrayList(); - map1.put("code", "to_command"); - map1.put("value", 1); - list.add(map1); - Map map2 = new HashMap<>(); - map2.put("code", "to_target"); - map2.put("value", next_addr); - list.add(map2); - Map map3 = new HashMap<>(); - map3.put("code", "to_onset"); - map3.put("value", start_addr); - list.add(map3); - Map map4 = new HashMap<>(); - map4.put("code", "to_task"); - map4.put("value", instdto.getInstruction_code()); - list.add(map4); - if (ObjectUtil.isNotEmpty(interactionJsonDTO)) { - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getWeight())) { - Map map5 = new HashMap<>(); - map5.put("code", "to_weight"); - map5.put("value", interactionJsonDTO.getWeight()); - list.add(map5); - } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getLength())) { - Map map6 = new HashMap<>(); - map6.put("code", "to_length"); - map6.put("value", interactionJsonDTO.getLength()); - list.add(map6); - } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getHeight())) { - Map map7 = new HashMap<>(); - map7.put("code", "to_height"); - map7.put("value", interactionJsonDTO.getHeight()); - list.add(map7); - } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getBarcode())) { - Map map8 = new HashMap<>(); - map8.put("code", "to_barcode"); - map8.put("value", interactionJsonDTO.getBarcode()); - list.add(map8); - } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getLayer())) { - Map map9 = new HashMap<>(); - map9.put("code", "to_layer"); - map9.put("value", interactionJsonDTO.getLayer()); - list.add(map9); - } - } + String taskid = taskDto.getTask_id(); + String taskcode = taskDto.getTask_code(); + String start_point_code = taskDto.getStart_point_code(); + String route_plan_code = taskDto.getRoute_plan_code(); + String next_point_code = taskDto.getNext_point_code(); + Instruction instdto = new Instruction(); + packageData(instdto, route_plan_code, taskid, taskcode, start_device_code, next_device_code, start_point_code, next_point_code); - try { - this.writing(list); - } catch (Exception e) { - logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" - + instdto.getInstruction_code() + ",指令起点:" + instdto.getStart_device_code() - + ",指令终点:" + instdto.getNext_device_code() + ",交互参数:" + interactionJsonDTO.toString() + ",指令执行失败:" + e.getMessage()); + try { + instructionService.create(instdto); + } catch (Exception e) { + notCreateInstMessage = e.getMessage(); + logServer.deviceExecuteLog(this.getDevice_code(), "", "", "创建指令时出现异常:" + e.getMessage()); + return false; + } + //创建指令后修改任务状态 + taskDto.setTask_status(TaskStatusEnum.BUSY.getIndex()); + taskserver.update(taskDto); + requireSucess = true; + + Map map1 = new HashMap<>(); + Map map2 = new HashMap<>(); + Map map3 = new HashMap<>(); + Map map4 = new HashMap<>(); + Map map5 = new HashMap<>(); + Map map6 = new HashMap<>(); + Map map7 = new HashMap<>(); + Map map8 = new HashMap<>(); + Map map9 = new HashMap<>(); + try { + pushPLC(map1, map2, next_addr, map3, start_addr, map4, instdto.getInstruction_code(), interactionJsonDTO, map5, map6, map7, map8, map9); + } catch (Exception e) { + logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" + + instdto.getInstruction_code() + ",指令起点:" + instdto.getStart_device_code() + + ",指令终点:" + instdto.getNext_device_code() + ",交互参数:" + interactionJsonDTO.toString() + ",指令执行失败:" + e.getMessage()); + } + this.setRequireSucess(true); + return true; + } else { + notCreateInstMessage = "未找到关联设备的任务,指令无法创建"; } - this.setRequireSucess(true); - return true; - }else{ - notCreateInstMessage = "未找到关联设备的任务,指令无法创建"; } } return true; @@ -410,6 +386,64 @@ public class BoxStorageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i } + private void pushPLC(Map map1, Map map2, String next_addr, Map map3, String start_addr, Map map4, String task, InteractionJsonDTO interactionJsonDTO, Map map5, Map map6, Map map7, Map map8, Map map9) { + + List list = new ArrayList(); + map1.put("code", "to_command"); + map1.put("value", 1); + list.add(map1); + map2.put("code", "to_target"); + map2.put("value", next_addr); + list.add(map2); + map3.put("code", "to_onset"); + map3.put("value", start_addr); + list.add(map3); + map4.put("code", "to_task"); + map4.put("value", task); + list.add(map4); + if (ObjectUtil.isNotEmpty(interactionJsonDTO)) { + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getWeight())) { + map5.put("code", "to_weight"); + map5.put("value", interactionJsonDTO.getWeight()); + list.add(map5); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getLength())) { + map6.put("code", "to_length"); + map6.put("value", interactionJsonDTO.getLength()); + list.add(map6); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getHeight())) { + map7.put("code", "to_height"); + map7.put("value", interactionJsonDTO.getHeight()); + list.add(map7); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getBarcode())) { + map8.put("code", "to_barcode"); + map8.put("value", interactionJsonDTO.getBarcode()); + list.add(map8); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getLayer())) { + map9.put("code", "to_layer"); + map9.put("value", interactionJsonDTO.getLayer()); + list.add(map9); + } + } + this.writing(list); + } + + private void packageData(Instruction instdto, String route_plan_code, String taskid, String taskcode, String start_device_code, String next_device_code, String start_point_code, String next_point_code) { + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setCreate_by("auto"); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(device_code); + } public void writing(List list) { diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/return_good_manipulator/ReturnGoodManipulatorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/return_good_manipulator/ReturnGoodManipulatorDeviceDriver.java index 7e0cb7383..e7fc8f369 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/return_good_manipulator/ReturnGoodManipulatorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/return_good_manipulator/ReturnGoodManipulatorDeviceDriver.java @@ -1,5 +1,6 @@ package org.nl.acs.device_driver.one_manipulator.return_good_manipulator; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; @@ -32,9 +33,11 @@ import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppServiceImpl; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.impl.RouteLineServiceImpl; +import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.enums.TaskTypeEnum; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; +import org.nl.common.exception.BadRequestException; import org.nl.config.SpringContextHolder; import java.util.*; @@ -296,116 +299,169 @@ public class ReturnGoodManipulatorDeviceDriver extends AbstractOpcDeviceDriver i //找终点为入库输送线工位任务类型为行架的任务 for (int i = 0; i < getDeviceCodeList.size(); i++) { String startDeviceCode = getDeviceCodeList.get(i); - TaskDto taskDto = taskserver.findByStartCodeAndReady(startDeviceCode); - if (ObjectUtil.isNotEmpty(taskDto) && TaskTypeEnum.Truss_Task.getIndex().equals(taskDto.getTask_type())) { - String interactionJson = taskDto.getInteraction_json(); - InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); - String start_device_code = taskDto.getStart_device_code(); - String next_device_code = taskDto.getNext_device_code(); - Device startDevice = deviceAppService.findDeviceByCode(start_device_code); - Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); - String start_addr = startDevice.getExtraValue().get("address").toString(); - String next_addr = nextDevice.getExtraValue().get("address").toString(); - String taskid = taskDto.getTask_id(); - String taskcode = taskDto.getTask_code(); - String start_point_code = taskDto.getStart_point_code(); - String route_plan_code = taskDto.getRoute_plan_code(); - String next_point_code = taskDto.getNext_point_code(); - Instruction instdto = new Instruction(); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - instdto.setCreate_by("auto"); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setInstruction_status("0"); - instdto.setExecute_device_code(device_code); - - try { - instructionService.create(instdto); - } catch (Exception e) { - notCreateInstMessage = e.getMessage(); - logServer.deviceExecuteLog(this.getDevice_code(), "", "", "创建指令时出现异常:" + e.getMessage()); - return false; + //先查指令 + List taskDtoInstruction = taskserver.queryTaskByDeviceCodeAndStatus2(startDeviceCode); + if (CollUtil.isNotEmpty(taskDtoInstruction)) { + TaskDto taskDtoIns = taskDtoInstruction.get(0); + if (TaskTypeEnum.Truss_Task.getIndex().equals(taskDtoIns.getTask_type())) { + Instruction instruction = instructionService.findByTaskcodeAndStatus(taskDtoIns.getTask_code()); + String interactionJson = taskDtoIns.getInteraction_json(); + InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); + String start_device_code = taskDtoIns.getStart_device_code(); + String next_device_code = taskDtoIns.getNext_device_code(); + Device startDevice = deviceAppService.findDeviceByCode(start_device_code); + Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); + String start_addr = startDevice.getExtraValue().get("address").toString(); + String next_addr = nextDevice.getExtraValue().get("address").toString(); + if (ObjectUtil.isEmpty(start_addr)) { + throw new BadRequestException("设备:" + startDevice.getDevice_code() + "未设置电气调度号!"); + } + if (ObjectUtil.isEmpty(next_addr)) { + throw new BadRequestException("设备:" + nextDevice.getDevice_code() + "未设置电气调度号!"); + } + Map map1 = new HashMap<>(); + Map map2 = new HashMap<>(); + Map map3 = new HashMap<>(); + Map map4 = new HashMap<>(); + Map map5 = new HashMap<>(); + Map map6 = new HashMap<>(); + Map map7 = new HashMap<>(); + Map map8 = new HashMap<>(); + Map map9 = new HashMap<>(); + try { + pushPLC(map1, map2, next_addr, map3, start_addr, map4, instruction.getInstruction_code(), interactionJsonDTO, map5, map6, map7, map8, map9); + } catch (Exception e) { + logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" + + instruction.getInstruction_code() + ",指令起点:" + instruction.getStart_device_code() + + ",指令终点:" + instruction.getNext_device_code() + ",交互参数:" + interactionJsonDTO.toString() + ",指令执行失败:" + e.getMessage()); + } + this.setRequireSucess(true); + return true; } - logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" - + instdto.getInstruction_code() + ",指令起点:" + instdto.getStart_device_code() - + ",指令终点:" + instdto.getNext_device_code() + ",交互参数:" + interactionJsonDTO); - //创建指令后修改任务状态 - taskDto.setTask_status("1"); - taskserver.update(taskDto); - requireSucess = true; + } else { + TaskDto taskDto = taskserver.findByStartCodeAndReady(startDeviceCode); + if (ObjectUtil.isNotEmpty(taskDto) && TaskTypeEnum.Truss_Task.getIndex().equals(taskDto.getTask_type())) { + String interactionJson = taskDto.getInteraction_json(); + InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); + String start_device_code = taskDto.getStart_device_code(); + String next_device_code = taskDto.getNext_device_code(); + Device startDevice = deviceAppService.findDeviceByCode(start_device_code); + Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); + String start_addr = startDevice.getExtraValue().get("address").toString(); + String next_addr = nextDevice.getExtraValue().get("address").toString(); + if (ObjectUtil.isEmpty(start_addr)) { + throw new BadRequestException("设备:" + startDevice.getDevice_code() + "未设置电气调度号!"); + } + if (ObjectUtil.isEmpty(next_addr)) { + throw new BadRequestException("设备:" + nextDevice.getDevice_code() + "未设置电气调度号!"); + } - Map map1 = new HashMap<>(); - List list = new ArrayList(); - map1.put("code", "to_command"); - map1.put("value", 1); - list.add(map1); - Map map2 = new HashMap<>(); - map2.put("code", "to_target"); - map2.put("value", next_addr); - list.add(map2); - Map map3 = new HashMap<>(); - map3.put("code", "to_onset"); - map3.put("value", start_addr); - list.add(map3); - Map map4 = new HashMap<>(); - map4.put("code", "to_task"); - map4.put("value", instdto.getInstruction_code()); - list.add(map4); - if (ObjectUtil.isNotEmpty(interactionJsonDTO)) { - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getWeight())) { - Map map5 = new HashMap<>(); - map5.put("code", "to_weight"); - map5.put("value", interactionJsonDTO.getWeight()); - list.add(map5); - } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getLength())) { - Map map6 = new HashMap<>(); - map6.put("code", "to_length"); - map6.put("value", interactionJsonDTO.getLength()); - list.add(map6); - } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getHeight())) { - Map map7 = new HashMap<>(); - map7.put("code", "to_height"); - map7.put("value", interactionJsonDTO.getHeight()); - list.add(map7); - } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getBarcode())) { - Map map8 = new HashMap<>(); - map8.put("code", "to_barcode"); - map8.put("value", interactionJsonDTO.getBarcode()); - list.add(map8); - } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getContainerType())) { - Map map9 = new HashMap<>(); - map9.put("code", "to_container_type"); - map9.put("value", interactionJsonDTO.getContainerType()); - list.add(map9); - } - } + String taskid = taskDto.getTask_id(); + String taskcode = taskDto.getTask_code(); + String start_point_code = taskDto.getStart_point_code(); + String route_plan_code = taskDto.getRoute_plan_code(); + String next_point_code = taskDto.getNext_point_code(); + Instruction instdto = new Instruction(); + packageData(instdto, route_plan_code, taskid, taskcode, start_device_code, next_device_code, start_point_code, next_point_code); - try { - this.writing(list); - } catch (Exception e) { - logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" - + instdto.getInstruction_code() + ",指令起点:" + instdto.getStart_device_code() - + ",指令终点:" + instdto.getNext_device_code() + ",交互参数:" + interactionJsonDTO.toString() + ",指令执行失败:" + e.getMessage()); + try { + instructionService.create(instdto); + } catch (Exception e) { + notCreateInstMessage = e.getMessage(); + logServer.deviceExecuteLog(this.getDevice_code(), "", "", "创建指令时出现异常:" + e.getMessage()); + return false; + } + //创建指令后修改任务状态 + taskDto.setTask_status(TaskStatusEnum.BUSY.getIndex()); + taskserver.update(taskDto); + requireSucess = true; + + Map map1 = new HashMap<>(); + Map map2 = new HashMap<>(); + Map map3 = new HashMap<>(); + Map map4 = new HashMap<>(); + Map map5 = new HashMap<>(); + Map map6 = new HashMap<>(); + Map map7 = new HashMap<>(); + Map map8 = new HashMap<>(); + Map map9 = new HashMap<>(); + try { + pushPLC(map1, map2, next_addr, map3, start_addr, map4, instdto.getInstruction_code(), interactionJsonDTO, map5, map6, map7, map8, map9); + } catch (Exception e) { + logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" + + instdto.getInstruction_code() + ",指令起点:" + instdto.getStart_device_code() + + ",指令终点:" + instdto.getNext_device_code() + ",交互参数:" + interactionJsonDTO.toString() + ",指令执行失败:" + e.getMessage()); + } + this.setRequireSucess(true); + return true; + } else { + notCreateInstMessage = "未找到关联设备的任务,指令无法创建"; } - this.setRequireSucess(true); - return true; - }else{ - notCreateInstMessage = "未找到关联设备的任务,指令无法创建"; } } return true; } } + private void pushPLC(Map map1, Map map2, String next_addr, Map map3, String start_addr, Map map4, String task, InteractionJsonDTO interactionJsonDTO, Map map5, Map map6, Map map7, Map map8, Map map9) { + List list = new ArrayList(); + map1.put("code", "to_command"); + map1.put("value", 1); + list.add(map1); + map2.put("code", "to_target"); + map2.put("value", next_addr); + list.add(map2); + map3.put("code", "to_onset"); + map3.put("value", start_addr); + list.add(map3); + map4.put("code", "to_task"); + map4.put("value", task); + list.add(map4); + if (ObjectUtil.isNotEmpty(interactionJsonDTO)) { + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getWeight())) { + map5.put("code", "to_weight"); + map5.put("value", interactionJsonDTO.getWeight()); + list.add(map5); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getLength())) { + map6.put("code", "to_length"); + map6.put("value", interactionJsonDTO.getLength()); + list.add(map6); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getHeight())) { + map7.put("code", "to_height"); + map7.put("value", interactionJsonDTO.getHeight()); + list.add(map7); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getBarcode())) { + map8.put("code", "to_barcode"); + map8.put("value", interactionJsonDTO.getBarcode()); + list.add(map8); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getContainerType())) { + map9.put("code", "to_container_type"); + map9.put("value", interactionJsonDTO.getContainerType()); + list.add(map9); + } + } + + this.writing(list); + } + + private void packageData(Instruction instdto, String route_plan_code, String taskid, String taskcode, String start_device_code, String next_device_code, String start_point_code, String next_point_code) { + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setCreate_by("auto"); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(device_code); + } + /** * 下发 * @param list diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/trapped_manipulator/TrappedManipulatorManipulatorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/trapped_manipulator/TrappedManipulatorManipulatorDeviceDriver.java index ea180aaea..328042826 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/trapped_manipulator/TrappedManipulatorManipulatorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/trapped_manipulator/TrappedManipulatorManipulatorDeviceDriver.java @@ -1,5 +1,6 @@ package org.nl.acs.device_driver.one_manipulator.trapped_manipulator; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; @@ -30,9 +31,11 @@ import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppServiceImpl; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.impl.RouteLineServiceImpl; +import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.enums.TaskTypeEnum; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; +import org.nl.common.exception.BadRequestException; import org.nl.config.SpringContextHolder; import java.util.*; @@ -295,116 +298,172 @@ public class TrappedManipulatorManipulatorDeviceDriver extends AbstractOpcDevice //找终点为入库输送线工位任务类型为行架的任务 for (int i = 0; i < getDeviceCodeList.size(); i++) { String startDeviceCode = getDeviceCodeList.get(i); - TaskDto taskDto = taskserver.findByStartCodeAndReady(startDeviceCode); - if (ObjectUtil.isNotEmpty(taskDto) && TaskTypeEnum.Truss_Task.getIndex().equals(taskDto.getTask_type())) { - String interactionJson = taskDto.getInteraction_json(); - InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); - String start_device_code = taskDto.getStart_device_code(); - String next_device_code = taskDto.getNext_device_code(); - Device startDevice = deviceAppService.findDeviceByCode(start_device_code); - Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); - String start_addr = startDevice.getExtraValue().get("address").toString(); - String next_addr = nextDevice.getExtraValue().get("address").toString(); - String taskid = taskDto.getTask_id(); - String taskcode = taskDto.getTask_code(); - String start_point_code = taskDto.getStart_point_code(); - String route_plan_code = taskDto.getRoute_plan_code(); - String next_point_code = taskDto.getNext_point_code(); - Instruction instdto = new Instruction(); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - instdto.setCreate_by("auto"); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setInstruction_status("0"); - instdto.setExecute_device_code(device_code); + //先查指令 + List taskDtoInstruction = taskserver.queryTaskByDeviceCodeAndStatus2(startDeviceCode); + if (CollUtil.isNotEmpty(taskDtoInstruction)) { + TaskDto taskDtoIns = taskDtoInstruction.get(0); + if (TaskTypeEnum.Truss_Task.getIndex().equals(taskDtoIns.getTask_type())) { + Instruction instruction = instructionService.findByTaskcodeAndStatus(taskDtoIns.getTask_code()); + String interactionJson = taskDtoIns.getInteraction_json(); + InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); + String start_device_code = taskDtoIns.getStart_device_code(); + String next_device_code = taskDtoIns.getNext_device_code(); + Device startDevice = deviceAppService.findDeviceByCode(start_device_code); + Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); + String start_addr = startDevice.getExtraValue().get("address").toString(); + String next_addr = nextDevice.getExtraValue().get("address").toString(); + if (ObjectUtil.isEmpty(start_addr)) { + throw new BadRequestException("设备:" + startDevice.getDevice_code() + "未设置电气调度号!"); + } + if (ObjectUtil.isEmpty(next_addr)) { + throw new BadRequestException("设备:" + nextDevice.getDevice_code() + "未设置电气调度号!"); + } + Map map1 = new HashMap<>(); + Map map2 = new HashMap<>(); + Map map3 = new HashMap<>(); + Map map4 = new HashMap<>(); + Map map5 = new HashMap<>(); + Map map6 = new HashMap<>(); + Map map7 = new HashMap<>(); + Map map8 = new HashMap<>(); + Map map9 = new HashMap<>(); + try { + pushPLC(map1, map2, next_addr, map3, start_addr, map4, instruction.getInstruction_code(), interactionJsonDTO, map5, map6, map7, map8, map9); + } catch (Exception e) { + logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" + + instruction.getInstruction_code() + ",指令起点:" + instruction.getStart_device_code() + + ",指令终点:" + instruction.getNext_device_code() + ",交互参数:" + interactionJsonDTO.toString() + ",指令执行失败:" + e.getMessage()); + } + this.setRequireSucess(true); + return true; + } + } else { + TaskDto taskDto = taskserver.findByStartCodeAndReady(startDeviceCode); + if (ObjectUtil.isNotEmpty(taskDto) && TaskTypeEnum.Truss_Task.getIndex().equals(taskDto.getTask_type())) { + String interactionJson = taskDto.getInteraction_json(); + InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); + String start_device_code = taskDto.getStart_device_code(); + String next_device_code = taskDto.getNext_device_code(); + Device startDevice = deviceAppService.findDeviceByCode(start_device_code); + Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); + String start_addr = startDevice.getExtraValue().get("address").toString(); + String next_addr = nextDevice.getExtraValue().get("address").toString(); + if (ObjectUtil.isEmpty(start_addr)) { + throw new BadRequestException("设备:" + startDevice.getDevice_code() + "未设置电气调度号!"); + } + if (ObjectUtil.isEmpty(next_addr)) { + throw new BadRequestException("设备:" + nextDevice.getDevice_code() + "未设置电气调度号!"); + } - try { - instructionService.create(instdto); - } catch (Exception e) { - notCreateInstMessage = e.getMessage(); - logServer.deviceExecuteLog(this.getDevice_code(), "", "", "创建指令时出现异常:" + e.getMessage()); - return false; - } - logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" - + instdto.getInstruction_code() + ",指令起点:" + instdto.getStart_device_code() - + ",指令终点:" + instdto.getNext_device_code() + ",交互参数:" + interactionJsonDTO); - //创建指令后修改任务状态 - taskDto.setTask_status("1"); - taskserver.update(taskDto); - requireSucess = true; + String taskid = taskDto.getTask_id(); + String taskcode = taskDto.getTask_code(); + String start_point_code = taskDto.getStart_point_code(); + String route_plan_code = taskDto.getRoute_plan_code(); + String next_point_code = taskDto.getNext_point_code(); + Instruction instdto = new Instruction(); + packageData(instdto, route_plan_code, taskid, taskcode, start_device_code, next_device_code, start_point_code, next_point_code); - Map map1 = new HashMap<>(); - List list = new ArrayList(); - map1.put("code", "to_command"); - map1.put("value", 1); - list.add(map1); - Map map2 = new HashMap<>(); - map2.put("code", "to_target"); - map2.put("value", next_addr); - list.add(map2); - Map map3 = new HashMap<>(); - map3.put("code", "to_onset"); - map3.put("value", start_addr); - list.add(map3); - Map map4 = new HashMap<>(); - map4.put("code", "to_task"); - map4.put("value", instdto.getInstruction_code()); - list.add(map4); - if (ObjectUtil.isNotEmpty(interactionJsonDTO)) { - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getWeight())) { - Map map5 = new HashMap<>(); - map5.put("code", "to_weight"); - map5.put("value", interactionJsonDTO.getWeight()); - list.add(map5); + try { + instructionService.create(instdto); + } catch (Exception e) { + notCreateInstMessage = e.getMessage(); + logServer.deviceExecuteLog(this.getDevice_code(), "", "", "创建指令时出现异常:" + e.getMessage()); + return false; } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getLength())) { - Map map6 = new HashMap<>(); - map6.put("code", "to_length"); - map6.put("value", interactionJsonDTO.getLength()); - list.add(map6); - } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getHeight())) { - Map map7 = new HashMap<>(); - map7.put("code", "to_height"); - map7.put("value", interactionJsonDTO.getHeight()); - list.add(map7); - } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getTemplate())) { - Map map8 = new HashMap<>(); - map8.put("code", "to_template"); - map8.put("value", interactionJsonDTO.getTemplate()); - list.add(map8); - } - if (ObjectUtil.isNotEmpty(interactionJsonDTO.getTemplate())) { - Map map9 = new HashMap<>(); - map9.put("code", "to_last_one"); - map9.put("value", interactionJsonDTO.getIsLastOne()); - list.add(map9); + //创建指令后修改任务状态 + taskDto.setTask_status(TaskStatusEnum.BUSY.getIndex()); + taskserver.update(taskDto); + requireSucess = true; + + Map map1 = new HashMap<>(); + Map map2 = new HashMap<>(); + Map map3 = new HashMap<>(); + Map map4 = new HashMap<>(); + Map map5 = new HashMap<>(); + Map map6 = new HashMap<>(); + Map map7 = new HashMap<>(); + Map map8 = new HashMap<>(); + Map map9 = new HashMap<>(); + try { + pushPLC(map1, map2, next_addr, map3, start_addr, map4, instdto.getInstruction_code(), interactionJsonDTO, map5, map6, map7, map8, map9); + } catch (Exception e) { + logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" + + instdto.getInstruction_code() + ",指令起点:" + instdto.getStart_device_code() + + ",指令终点:" + instdto.getNext_device_code() + ",交互参数:" + interactionJsonDTO.toString() + ",指令执行失败:" + e.getMessage()); } + this.setRequireSucess(true); + return true; + } else { + notCreateInstMessage = "未找到关联设备的任务,指令无法创建"; } - try { - this.writing(list); - } catch (Exception e) { - logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" - + instdto.getInstruction_code() + ",指令起点:" + instdto.getStart_device_code() - + ",指令终点:" + instdto.getNext_device_code() + ",交互参数:" + interactionJsonDTO.toString() + ",指令执行失败:" + e.getMessage()); - } - this.setRequireSucess(true); - return true; - }else{ - notCreateInstMessage = "未找到关联设备的任务,指令无法创建"; } } return true; } - } + + + private void pushPLC(Map map1, Map map2, String next_addr, Map map3, String start_addr, Map map4, String task, InteractionJsonDTO interactionJsonDTO, Map map5, Map map6, Map map7, Map map8, Map map9) { + + List list = new ArrayList(); + map1.put("code", "to_command"); + map1.put("value", 1); + list.add(map1); + map2.put("code", "to_target"); + map2.put("value", next_addr); + list.add(map2); + map3.put("code", "to_onset"); + map3.put("value", start_addr); + list.add(map3); + map4.put("code", "to_task"); + map4.put("value", task); + list.add(map4); + if (ObjectUtil.isNotEmpty(interactionJsonDTO)) { + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getWeight())) { + map5.put("code", "to_weight"); + map5.put("value", interactionJsonDTO.getWeight()); + list.add(map5); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getLength())) { + map6.put("code", "to_length"); + map6.put("value", interactionJsonDTO.getLength()); + list.add(map6); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getHeight())) { + map7.put("code", "to_height"); + map7.put("value", interactionJsonDTO.getHeight()); + list.add(map7); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getTemplate())) { + map8.put("code", "to_template"); + map8.put("value", interactionJsonDTO.getTemplate()); + list.add(map8); + } + if (ObjectUtil.isNotEmpty(interactionJsonDTO.getTemplate())) { + map9.put("code", "to_last_one"); + map9.put("value", interactionJsonDTO.getIsLastOne()); + list.add(map9); + } + } + + this.writing(list); + } + + private void packageData(Instruction instdto, String route_plan_code, String taskid, String taskcode, String start_device_code, String next_device_code, String start_point_code, String next_point_code) { + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setCreate_by("auto"); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(device_code); + } + /** * 完成指令 * @param inst diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/volume_two_manipulator/VolumeTwoManipulatorManipulatorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/volume_two_manipulator/VolumeTwoManipulatorManipulatorDeviceDriver.java index 9f1ba4199..1404b130b 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/volume_two_manipulator/VolumeTwoManipulatorManipulatorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/volume_two_manipulator/VolumeTwoManipulatorManipulatorDeviceDriver.java @@ -1,5 +1,6 @@ package org.nl.acs.device_driver.one_manipulator.volume_two_manipulator; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -30,9 +31,11 @@ import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppServiceImpl; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.impl.RouteLineServiceImpl; +import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.enums.TaskTypeEnum; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; +import org.nl.common.exception.BadRequestException; import org.nl.config.SpringContextHolder; import java.util.*; @@ -265,10 +268,10 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi } //放货完成 - if ( action == 4 && move == 0) { + if (action == 4 && move == 0) { if (inst != null) { try { - logServer.deviceExecuteLog(this.device_code,"","","放货完成"); + logServer.deviceExecuteLog(this.device_code, "", "", "放货完成"); finish_instruction(inst); Map map1 = new HashMap<>(); List list = new ArrayList(); @@ -282,7 +285,7 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi e.printStackTrace(); } feedMessage = ""; - }else { + } else { feedMessage = "行架机械手:"; if (mode != 3) { feedMessage = feedMessage + "工作模式(mode)不为运行中状态,"; @@ -319,104 +322,96 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi //找终点为入库输送线工位任务类型为行架的任务 for (int i = 0; i < getDeviceCodeList.size(); i++) { String startDeviceCode = getDeviceCodeList.get(i); - TaskDto taskDto = taskserver.findByStartCodeAndReady(startDeviceCode); - if (ObjectUtil.isNotEmpty(taskDto) && TaskTypeEnum.Truss_Task.getIndex().equals(taskDto.getTask_type())) { - String start_device_code = taskDto.getStart_device_code(); - String next_device_code = taskDto.getNext_device_code(); - String start_device_code2 = taskDto.getStart_device_code2(); - String next_device_code2 = taskDto.getNext_device_code2(); - Device startDevice = deviceAppService.findDeviceByCode(start_device_code); - Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); - String start_addr = startDevice.getExtraValue().get("address").toString(); - String next_addr = nextDevice.getExtraValue().get("address").toString(); - - String taskid = taskDto.getTask_id(); - String taskcode = taskDto.getTask_code(); - String start_point_code = taskDto.getStart_point_code(); - String next_point_code = taskDto.getNext_point_code(); - String start_point_code2 = taskDto.getStart_point_code2(); - String next_point_code2 = taskDto.getNext_point_code2(); - String route_plan_code = taskDto.getRoute_plan_code(); - Instruction instdto = new Instruction(); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - instdto.setCreate_by("auto"); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setStart_device_code2(start_device_code2); - instdto.setNext_device_code2(next_device_code2); - instdto.setStart_point_code2(start_point_code2); - instdto.setNext_point_code2(next_point_code2); - instdto.setInstruction_status("0"); - instdto.setExecute_device_code(device_code); - - try { - instructionService.create(instdto); - } catch (Exception e) { - notCreateInstMessage = e.getMessage(); - logServer.deviceExecuteLog(this.getDevice_code(), "", "", "创建指令时出现异常:" + e.getMessage()); - return false; - } - logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" - + instdto.getInstruction_code() + ",指令起点:" + instdto.getStart_device_code() - + ",指令终点:" + instdto.getNext_device_code() ); - //创建指令后修改任务状态 - taskDto.setTask_status("1"); - taskserver.update(taskDto); - requireSucess = true; - - Map map1 = new HashMap<>(); - List list = new ArrayList(); - map1.put("code", "to_command"); - map1.put("value", 1); - list.add(map1); - Map map2 = new HashMap<>(); - map2.put("code", "to_target"); - map2.put("value", next_addr); - list.add(map2); - Map map3 = new HashMap<>(); - map3.put("code", "to_onset"); - map3.put("value", start_addr); - list.add(map3); - Map map4 = new HashMap<>(); - map4.put("code", "to_task"); - map4.put("value", instdto.getInstruction_code()); - list.add(map4); - String toType = VolumeTwoTypeEnum.TOW.getType(); - if (StrUtil.isNotEmpty(start_device_code2)) { - toType = VolumeTwoTypeEnum.FOUR.getType(); - Device startDevice2 = deviceAppService.findDeviceByCode(start_device_code2); - Device nextDevice2 = deviceAppService.findDeviceByCode(next_device_code2); - String start_addr2 = startDevice2.getExtraValue().get("address").toString(); - String next_addr2 = nextDevice2.getExtraValue().get("address").toString(); + //先查指令 + List taskDtoInstruction = taskserver.queryTaskByDeviceCodeAndStatus2(startDeviceCode); + if (CollUtil.isNotEmpty(taskDtoInstruction)) { + TaskDto taskDtoIns = taskDtoInstruction.get(0); + if (TaskTypeEnum.Truss_Task.getIndex().equals(taskDtoIns.getTask_type())) { + Instruction instruction = instructionService.findByTaskcodeAndStatus(taskDtoIns.getTask_code()); + String interactionJson = taskDtoIns.getInteraction_json(); + InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); + String start_device_code = taskDtoIns.getStart_device_code(); + String next_device_code = taskDtoIns.getNext_device_code(); + Device startDevice = deviceAppService.findDeviceByCode(start_device_code); + Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); + String start_addr = startDevice.getExtraValue().get("address").toString(); + String next_addr = nextDevice.getExtraValue().get("address").toString(); + if (ObjectUtil.isEmpty(start_addr)) { + throw new BadRequestException("设备:" + startDevice.getDevice_code() + "未设置电气调度号!"); + } + if (ObjectUtil.isEmpty(next_addr)) { + throw new BadRequestException("设备:" + nextDevice.getDevice_code() + "未设置电气调度号!"); + } + Map map1 = new HashMap<>(); + Map map2 = new HashMap<>(); + Map map3 = new HashMap<>(); + Map map4 = new HashMap<>(); Map map5 = new HashMap<>(); - map5.put("code", "to_target2"); - map5.put("value", next_addr2); - list.add(map5); Map map6 = new HashMap<>(); - map6.put("code", "to_onset2"); - map6.put("value", start_addr2); - list.add(map6); + Map map7 = new HashMap<>(); + + try { + pushPLC(map1, map2, next_addr, map3, start_addr, map4, instruction.getInstruction_code(), map5, map6,map7,taskDtoIns); + } catch (Exception e) { + logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" + + instruction.getInstruction_code() + ",指令起点:" + instruction.getStart_device_code() + + ",指令终点:" + instruction.getNext_device_code() + ",交互参数:" + interactionJsonDTO.toString() + ",指令执行失败:" + e.getMessage()); + } + this.setRequireSucess(true); + return true; } - Map map7 = new HashMap<>(); - map7.put("code", "to_type"); - map7.put("value", toType); - list.add(map7); - try { - this.writing(list); - } catch (Exception e) { + }else { + TaskDto taskDto = taskserver.findByStartCodeAndReady(startDeviceCode); + if (ObjectUtil.isNotEmpty(taskDto) && TaskTypeEnum.Truss_Task.getIndex().equals(taskDto.getTask_type())) { + String start_device_code = taskDto.getStart_device_code(); + String next_device_code = taskDto.getNext_device_code(); + String start_device_code2 = taskDto.getStart_device_code2(); + String next_device_code2 = taskDto.getNext_device_code2(); + Device startDevice = deviceAppService.findDeviceByCode(start_device_code); + Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); + String start_addr = startDevice.getExtraValue().get("address").toString(); + String next_addr = nextDevice.getExtraValue().get("address").toString(); + String taskid = taskDto.getTask_id(); + String taskcode = taskDto.getTask_code(); + String start_point_code = taskDto.getStart_point_code(); + String next_point_code = taskDto.getNext_point_code(); + String route_plan_code = taskDto.getRoute_plan_code(); + Instruction instdto = new Instruction(); + packageData(instdto, route_plan_code, taskid, taskcode, start_device_code, next_device_code, start_point_code, next_point_code,start_device_code2,next_device_code2); + try { + instructionService.create(instdto); + } catch (Exception e) { + notCreateInstMessage = e.getMessage(); + logServer.deviceExecuteLog(this.getDevice_code(), "", "", "创建指令时出现异常:" + e.getMessage()); + return false; + } logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" + instdto.getInstruction_code() + ",指令起点:" + instdto.getStart_device_code() - + ",指令终点:" + instdto.getNext_device_code() + ",指令执行失败:" + e.getMessage()); + + ",指令终点:" + instdto.getNext_device_code()); + //创建指令后修改任务状态 + taskDto.setTask_status(TaskStatusEnum.BUSY.getIndex()); + taskserver.update(taskDto); + requireSucess = true; + + this.setRequireSucess(true); + Map map1 = new HashMap<>(); + Map map2 = new HashMap<>(); + Map map3 = new HashMap<>(); + Map map4 = new HashMap<>(); + Map map5 = new HashMap<>(); + Map map6 = new HashMap<>(); + Map map7 = new HashMap<>(); + try { + pushPLC(map1, map2, next_addr, map3, start_addr, map4, instdto.getInstruction_code(), map5, map6,map7,taskDto); + } catch (Exception e) { + logServer.deviceExecuteLog(device_code, "", "", "当前设备:" + device_code + ",下发指令:" + + instdto.getInstruction_code() + ",指令起点:" + instdto.getStart_device_code() + + ",指令终点:" + instdto.getNext_device_code() + ",指令执行失败:" + e.getMessage()); + } + return true; + } else { + notCreateInstMessage = "未找到关联设备的任务,指令无法创建"; } - this.setRequireSucess(true); - return true; - }else{ - notCreateInstMessage = "未找到关联设备的任务,指令无法创建"; } } return true; @@ -424,8 +419,70 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi } + private void packageData(Instruction instdto, String route_plan_code, String taskid, String taskcode, String start_device_code, String next_device_code, String start_point_code, String next_point_code, String start_device_code2, String next_device_code2) { + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setCreate_by("auto"); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setStart_device_code2(start_device_code2); + instdto.setNext_device_code2(next_device_code2); + instdto.setStart_point_code2(start_device_code2); + instdto.setNext_point_code2(next_device_code2); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(device_code); + } + + private void pushPLC(Map map1, Map map2, String next_addr, Map map3, String start_addr, Map map4, String task, Map map5, Map map6, Map map7, TaskDto taskDtoIns) { + + List list = new ArrayList(); + map1.put("code", "to_command"); + map1.put("value", 1); + list.add(map1); + map2.put("code", "to_target"); + map2.put("value", next_addr); + list.add(map2); + map3.put("code", "to_onset"); + map3.put("value", start_addr); + list.add(map3); + map4.put("code", "to_task"); + map4.put("value", task); + list.add(map4); + String toType = VolumeTwoTypeEnum.TOW.getType(); + if (StrUtil.isNotEmpty(taskDtoIns.getStart_device_code2())) { + toType = VolumeTwoTypeEnum.FOUR.getType(); + Device startDevice2 = deviceAppService.findDeviceByCode(taskDtoIns.getStart_device_code2()); + Device nextDevice2 = deviceAppService.findDeviceByCode(taskDtoIns.getNext_device_code2()); + String start_addr2 = startDevice2.getExtraValue().get("address").toString(); + String next_addr2 = nextDevice2.getExtraValue().get("address").toString(); + if (ObjectUtil.isEmpty(start_addr2)) { + throw new BadRequestException("设备:" + startDevice2.getDevice_code() + "未设置电气调度号!"); + } + if (ObjectUtil.isEmpty(next_addr2)) { + throw new BadRequestException("设备:" + nextDevice2.getDevice_code() + "未设置电气调度号!"); + } + map5.put("code", "to_target2"); + map5.put("value", next_addr2); + list.add(map5); + map6.put("code", "to_onset2"); + map6.put("value", start_addr2); + list.add(map6); + } + + map7.put("code", "to_type"); + map7.put("value", toType); + list.add(map7); + + this.writing(list); + } + /** * 完成指令 + * * @param inst * @return * @throws Exception @@ -437,6 +494,7 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi /** * 下发信号 + * * @param list */ public void writing(List list) { @@ -473,6 +531,7 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi public String getToParam() { return this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + "."; } + @Override public JSONObject getDeviceStatusName() { JSONObject jo = new JSONObject(); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/paper_tube_device2/PaperTubeConveyor2DeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/paper_tube_device2/PaperTubeConveyor2DeviceDriver.java index 36226b70a..e2a9e3a68 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/paper_tube_device2/PaperTubeConveyor2DeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/paper_tube_device2/PaperTubeConveyor2DeviceDriver.java @@ -592,7 +592,7 @@ public class PaperTubeConveyor2DeviceDriver extends AbstractOpcDeviceDriver impl log.error("指令创建失败!{}", e.getMessage()); return false; } - taskdto.setTask_status("1"); + taskDto.setTask_status(TaskStatusEnum.BUSY.getIndex()); taskserver.update(taskdto); requireSucess = true; Map map = new HashMap(); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/stacker/standard_stacker/StandardStackerDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/stacker/standard_stacker/StandardStackerDeviceDriver.java index 2df4b6367..384b301bd 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/stacker/standard_stacker/StandardStackerDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/stacker/standard_stacker/StandardStackerDeviceDriver.java @@ -66,7 +66,21 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme @Autowired DeviceErrorLogService errorLogServer = SpringContextHolder.getBean(DeviceErrorLogServiceImpl.class); - /** + + /** + * 禁止入库 + */ + private boolean prohibitInWarehouse = false; + /** + * 禁止出库 + */ + private boolean prohibitOutWarehouse = false; + /** + * 停止接收任务 + */ + private boolean stopReceiveTask = false; + + /** * 心跳 */ Integer heartbeat = 0; @@ -76,17 +90,17 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme */ Integer item_deviceCode = 0; Integer last_item_deviceCode = 0; - /** + /** * 工作模式 */ Integer mode = 0; Integer last_mode = 0; /** - *作业状态 + * 作业状态 */ Integer command = 0; Integer last_command = 0; - /** + /** * 任务号 */ Integer task = 0; @@ -111,7 +125,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme */ Integer y = 0; Integer last_y = 0; - /** + /** * 行走开关信号 */ Float move = 0F; @@ -121,12 +135,12 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme */ Float cargoMove = 0F; Float last_cargoMove = 0F; - /** + /** * 行走动作信号 */ Float action = 0F; Float last_action = 0F; - /** + /** * 行走激光数值 */ Integer distancex = 0; @@ -137,41 +151,41 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme Integer distancey = 0; Integer last_distancey = 0; /** - *载货台超限信号 + * 载货台超限信号 */ Float cargoError = 0F; Float last_cargoError = 0F; /** - *货叉探货信号 + * 货叉探货信号 */ Float forkCargo = 0F; Float last_forkCargo = 0F; /** - *货叉位置信号 + * 货叉位置信号 */ Float forkLocation = 0F; Float last_forkLocation = 0F; /** - *货叉动作信号 + * 货叉动作信号 */ Float forkAction = 0F; Float last_forkAction = 0F; - /** + /** * 特殊开关量1 */ Float special1 = 0F; Float last_special1 = 0F; - /** + /** * 特殊开关量2 */ Float special2 = 0F; Float last_special2 = 0F; /** - *托盘条码 + * 托盘条码 */ int[] trayCode; int[] last_trayCode; - /** + /** * 水箱和消防缓存位有无货 */ Float storage_cache = 0F; @@ -181,58 +195,58 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme */ Integer stacker_rpm = 0; Integer last_stacker_rpm = 0; - /** + /** * 电流 */ Integer stacker_electricCurrent = 0; Integer last_stacker_electricCurrent = 0; - /** + /** * 轴运行次数 */ Integer stacker_runing_time = 0; Integer last_stacker_runing_time = 0; - /** + /** * 轴工作时间(小时) */ Integer stacker_workingHours = 0; Integer last_stacker_workingHours = 0; /** - *载货台速度(转/分钟) + * 载货台速度(转/分钟) */ Integer cargo_rpm = 0; Integer last_cargo_rpm = 0; /** - *载货台电流 + * 载货台电流 */ Integer cargo_electric_Current = 0; Integer last_cargo_electric_Current = 0; /** - *载货台轴工作小时数 + * 载货台轴工作小时数 */ Integer cargo_workingHour = 0; Integer last_cargo_workingHour = 0; /** - *载货台轴运行次数 + * 载货台轴运行次数 */ Integer cargo_runingTimes = 0; Integer last_cargo_runingTimes = 0; /** - *货叉速度(转/分钟 + * 货叉速度(转/分钟 */ Integer fork_rpm = 0; Integer last_fork_rpm = 0; /** - *货叉电流 + * 货叉电流 */ Integer fork_electric_Current = 0; Integer last_fork_electric_Current = 0; /** - *货叉轴工作时间(小时 + * 货叉轴工作时间(小时 */ Integer fork_workingHours = 0; Integer last_fork_workingHours = 0; /** - *货叉轴运行次数 + * 货叉轴运行次数 */ Integer fork_runingTimes = 0; Integer last_fork_runingTimes = 0; @@ -250,7 +264,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme List getDeviceCodeList = null; List putDeviceCodeList = null; - /** + /** * 请求成功标记 */ Boolean requireSucess = false; @@ -368,7 +382,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme if (ObjectUtil.isNotEmpty(nextDevice.getExtraValue().get("z"))) { Map map = new HashMap(); map.put("code", "to_x"); - map.put("value", nextDevice.getExtraValue().get("z")); + map.put("value", nextDevice.getExtraValue().get("z")); list.add(map); } if (ObjectUtil.isNotEmpty(nextDevice.getExtraValue().get("x"))) { @@ -616,7 +630,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme } map.put("to_x", inst.getFrom_y()); } - if(ObjectUtil.isNotEmpty(map)){ + if (ObjectUtil.isNotEmpty(map)) { list.add(map); this.writing(list); } @@ -714,7 +728,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme if (command == 8) { map.put("to_command", 8); } - if(ObjectUtil.isNotEmpty(map)){ + if (ObjectUtil.isNotEmpty(map)) { list.add(map); this.writing(list); } @@ -725,12 +739,43 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme @Override public JSONObject getDeviceStatusName() throws Exception { - return null; + JSONObject jo = new JSONObject(); + jo.put("device_name", this.getDevice().getDevice_name()); + jo.put("is_click", true); + String requireSucess = "0"; + if (this.requireSucess) { + requireSucess = "1"; + } + jo.put("prohibitInWarehouse", this.prohibitInWarehouse); + jo.put("prohibitOutWarehouse", this.prohibitOutWarehouse); + jo.put("stopReceiveTask", this.stopReceiveTask); + jo.put("requireSucess", requireSucess); + jo.put("driver_type", "standard_stacker"); + return jo; } @Override public void setDeviceStatus(JSONObject data) { - + String requestSucess = data.getString("requireSucess"); + if (StrUtil.equals(requestSucess, "0")) { + this.requireSucess = false; + } else if (StrUtil.equals(requestSucess, CommonFinalParam.ONE)) { + this.requireSucess = true; + } + //监控大屏下发作业命令清警-5、召回-7、急停-8 + Integer toCommand = data.getInteger("toCommand"); + if (toCommand != null) { + Map map = new HashMap<>(); + map.put("to_command", toCommand); + this.writing(map); + } + //ACS监控大屏设置禁止入库、禁止出库、停止接收任务 + Boolean prohibitInWarehouse = data.getBoolean("prohibitInWarehouse"); + this.prohibitInWarehouse = prohibitInWarehouse; + Boolean prohibitOutWarehouse = data.getBoolean("prohibitOutWarehouse"); + this.prohibitOutWarehouse = prohibitOutWarehouse; + Boolean stopReceiveTask = data.getBoolean("stopReceiveTask"); + this.stopReceiveTask = stopReceiveTask; } @@ -759,6 +804,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme } } + /** * 完成指令 * @@ -812,7 +858,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme } - /** + /** * 将扩展表中的字符串数据转换成集合 */ @Override diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/slit_two_manipulator/SlitTwoManipulatorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/slit_two_manipulator/SlitTwoManipulatorDeviceDriver.java index 00f37490d..389447f02 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/slit_two_manipulator/SlitTwoManipulatorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/slit_two_manipulator/SlitTwoManipulatorDeviceDriver.java @@ -24,6 +24,7 @@ import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppServiceImpl; import org.nl.acs.route.service.RouteLineService; +import org.nl.acs.task.enums.TaskStatusEnum; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; import org.nl.common.exception.BadRequestException; @@ -488,7 +489,7 @@ public class SlitTwoManipulatorDeviceDriver extends AbstractOpcDeviceDriver impl logServer.deviceExecuteLog(device_code, "", instdto.getInstruction_code(), "指令创建失败,原因->" + e.getMessage()); } //创建指令后修改任务状态 - taskDto.setTask_status("1"); + taskDto.setTask_status(TaskStatusEnum.BUSY.getIndex()); taskDto.setUpdate_time(DateUtil.now()); taskserver.update(taskDto); try { diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/enums/RequestSucessEnum.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/enums/RequestSucessEnum.java new file mode 100644 index 000000000..a25e5b6d2 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/enums/RequestSucessEnum.java @@ -0,0 +1,20 @@ +package org.nl.acs.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum RequestSucessEnum { + YES("1", "是"), + + NO("0", "否"); + /** + * 状态 + */ + private String type; + /** + * 描述 + */ + private String value; +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java index d29f850d9..00b7bdea1 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java @@ -48,6 +48,13 @@ public interface TaskService extends CommonService { */ Task getById(String id); + /** + * 根据设备号和任务状态查询 + * @param device_code + * @return + */ + List queryTaskByDeviceCodeAndStatus2(String device_code); + /** * 根据ID查询 * diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index 9cb91930a..f1a38fbc5 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -44,6 +44,7 @@ import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.dto.RouteLineDto; import org.nl.acs.route.service.mapper.RoutePlanMapper; import org.nl.acs.task.enums.TaskStatusEnum; +import org.nl.acs.task.enums.TaskTypeEnum; import org.nl.acs.task.service.TaskFeedbackService; import org.nl.acs.task.service.dto.TaskFeedbackDto; import org.nl.acs.common.base.PageInfo; @@ -133,6 +134,33 @@ public class TaskServiceImpl extends CommonServiceImpl impleme return taskMapper.selectById(id); } + @Override + public List queryTaskByDeviceCodeAndStatus2(String device_code) { + List list = new ArrayList<>(); + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + TaskDto task = iterator.next(); + if (task.getStart_device_code().equals(device_code) + && StrUtil.equals(task.getTask_status(), TaskStatusEnum.BUSY.getIndex())) { + Instruction instruction = instructionService.findByTaskcodeAndStatus(task.getTask_code()); + if (ObjectUtil.isNotEmpty(instruction)) { + list.add(task); + } + } else { + if (StrUtil.equals(task.getTask_type(), TaskTypeEnum.Inner_Truss_Task.getIndex()) && StrUtil.isNotEmpty(task.getPut_device_code())) { + Instruction instruction = instructionService.findByDeviceCodeFromCache(task.getNext_device_code()); + if (ObjectUtil.isNotEmpty(instruction)) { + if (StrUtil.equals(instruction.getStart_device_code(), device_code)) { + list.add(task); + } + } + } + } + } + return list; + } + + @Override public TaskDto findById(String id) { return ConvertUtil.convert(getById(id), TaskDto.class); diff --git a/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml index b335b9386..372569df2 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml +++ b/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml @@ -9,10 +9,11 @@ spring: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy # url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:stand_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:lzhl_two_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true +# url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:lzhl_two_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:lzhl_two_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} # password: ${DB_PWD:Root.123456} - password: ${DB_PWD:p@ssw0rd} + password: ${DB_PWD:root} # 初始连接数 initial-size: 5 # 最小连接数 diff --git a/acs2/nladmin-ui/src/views/acs/monitor/device/index.vue b/acs2/nladmin-ui/src/views/acs/monitor/device/index.vue index d800fc2b2..c55970dee 100644 --- a/acs2/nladmin-ui/src/views/acs/monitor/device/index.vue +++ b/acs2/nladmin-ui/src/views/acs/monitor/device/index.vue @@ -240,6 +240,7 @@ export default { dialogFormVisible2: false, dialogFormVisible3: false, dialogFormVisible4: false, + dialogFormVisible5: false, arr2: [], currentItem: '', stageSelectList: [], @@ -283,7 +284,9 @@ export default { this.dialogFormVisible4 = true } else if (clickObj.data.driver_type === 'hailiang_xj_plc_test') { this.$refs.child1.setForm(clickObj) - } else { + } else if (clickObj.data.driver_type === 'standard_stacker') { + this.dialogFormVisible4 = true + }else { this.dialogFormVisible = true } } diff --git a/acs2/nladmin-ui/src/views/system/monitor/device/index.vue b/acs2/nladmin-ui/src/views/system/monitor/device/index.vue index c876040a9..398bdba82 100644 --- a/acs2/nladmin-ui/src/views/system/monitor/device/index.vue +++ b/acs2/nladmin-ui/src/views/system/monitor/device/index.vue @@ -32,15 +32,16 @@ - + - - - - 禁止进出 - 允许进入 - 允许离开 + + + + + + + @@ -49,7 +50,6 @@ 确 定 - @@ -186,7 +186,7 @@ - 召回 + 召回 急停 清警 @@ -387,7 +387,7 @@ export default { this.dialogFormVisible7 = true } else if (clickObj.data.driver_type === 'standard_conveyor_control_with_scanner') { this.dialogFormVisible6 = true - } else if (clickObj.data.driver_type === 'double_station_stacker') { + } else if (clickObj.data.driver_type === 'standard_stacker') { this.dialogFormVisible8 = true } else { this.dialogFormVisible = true @@ -750,4 +750,22 @@ body { z-index: 10; background: #e5e5e5; } + +::v-deep.el-radio-button{ + margin-right: 15px; + border-radius:4px; + .el-radio-button__inner { + width: 90px; + height: 30px; + background: #F7F8FA; + color:#333; + border: 0 !important; + } + .el-radio-button__orig-radio:checked + .el-radio-button__inner { + color: #fff; + background-color: blue; + border-color: blue; + box-shadow: -1px 0 0 0 blue; + } +} From e846b623fac8519262e80cdcdcc1b02f761c086b Mon Sep 17 00:00:00 2001 From: tuqiang <437016993@qq.com> Date: Fri, 2 Feb 2024 09:39:02 +0800 Subject: [PATCH 06/21] =?UTF-8?q?add:=E6=B7=BB=E5=8A=A0agv=E4=BA=A4?= =?UTF-8?q?=E4=BA=92=E9=80=BB=E8=BE=91=E5=92=8C=E9=A9=B1=E5=8A=A8=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agv/ndctwo/AgvNdcTwoDeviceDriver.java | 681 +++++++++++++++++- .../StandardOrdinarySiteDeviceDriver.java | 3 + .../BlankManipulatorDeviceDriver.java | 95 ++- .../blanking_button/BlankingButtonDriver.java | 3 + .../PlugPullDeviceSiteDeviceDriver.java | 32 +- .../sub_roll_conveyor_site/ItemProtocol.java | 121 ++++ .../SubRollConveyorSiteDefination.java | 62 ++ .../SubRollConveyorSiteDeviceDriver.java | 271 +++++++ .../sub_roll_manipulator/ItemProtocol.java | 4 + .../SubRollManipulatorDefination.java | 4 + .../SubRollManipulatorDeviceDriver.java | 4 + .../wms/data/ApplyPlugPullSiteRequest.java | 21 +- .../org/nl/acs/task/service/TaskService.java | 8 + .../task/service/impl/TaskServiceImpl.java | 14 + acs2/nladmin-ui/src/views/acs/angle/index.vue | 181 ++++- 15 files changed, 1412 insertions(+), 92 deletions(-) create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_conveyor_site/ItemProtocol.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_conveyor_site/SubRollConveyorSiteDefination.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_conveyor_site/SubRollConveyorSiteDeviceDriver.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_manipulator/ItemProtocol.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_manipulator/SubRollManipulatorDefination.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_manipulator/SubRollManipulatorDeviceDriver.java diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java index 9121e9760..894b0ed7b 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java @@ -10,9 +10,12 @@ import org.nl.acs.common.base.CommonFinalParam; import org.nl.acs.device.domain.Device; import org.nl.acs.device.service.DeviceService; import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.conveyor.standard_inspect_site.StandardInspectSiteDeviceDriver; import org.nl.acs.device_driver.conveyor.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; +import org.nl.acs.device_driver.paper_tube_pick_site.PaperTubePickSiteDeviceDriver; import org.nl.acs.device_driver.storage.standard_storage.StandardStorageDeviceDriver; import org.nl.acs.device_driver.driver.AbstractDeviceDriver; +import org.nl.acs.device_driver.two_conveyor.hongxiang_conveyor.HongXiangStationDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.instruction.domain.Instruction; @@ -22,9 +25,16 @@ import org.nl.acs.log.LokiLog; import org.nl.acs.log.LokiLogType; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.dto.TaskDto; +import org.nl.acs.task.service.impl.TaskServiceImpl; +import org.nl.config.lucene.service.LuceneExecuteLogService; +import org.nl.config.lucene.service.dto.LuceneLogDto; import org.nl.system.service.param.ISysParamService; import org.nl.config.SpringContextHolder; +import java.util.Arrays; + /** * NDC双工位AGV @@ -36,11 +46,14 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic ISysParamService ISysParamService = SpringContextHolder.getBean(ISysParamService.class); InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class); + TaskService taskService = SpringContextHolder.getBean(TaskServiceImpl.class); AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class); NDCAgvService ndcAgvService = SpringContextHolder.getBean(NDCAgvService.class); DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class); DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class); + LuceneExecuteLogService luceneExecuteLogService = SpringContextHolder.getBean(LuceneExecuteLogService.class); + int agvaddr = 0; int agvaddr_copy = 0; int weight = 0; @@ -48,6 +61,8 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic String device_code = ""; int phase = 0; int region = 0; + private Instruction instruction; + String message = null; @LokiLog(type = LokiLogType.ACS_TO_LMS) public synchronized void processSocket(int[] arr) throws Exception { @@ -56,9 +71,9 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic phase = arr[16] * 256 + arr[17]; // agv任务号 int index = arr[12] * 256 + arr[13]; - /** - * 任务号 - */ + /** + * 任务号 + */ int ikey = arr[26] * 256 + arr[27]; //站点号 agvaddr = arr[18] * 256 + arr[19]; @@ -69,8 +84,19 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic if (carno != 0) { agv_device = deviceAppService.findDeviceByCode(String.valueOf(carno)); } + TaskDto task = null; if (ikey != 0) { - inst = instructionService.findByCodeFromCache(String.valueOf(ikey)); + if (phase != 0x67 && phase != 0x71 && phase != 0x72 && phase != 0x73 && phase != 0x74 && phase != 0x75) { + inst = instructionService.findByCodeFromCache(String.valueOf(ikey)); + this.instruction = inst; + } + if (ObjectUtil.isNotEmpty(inst)) { +// log.info("该指令号未找到对应指令:" + ikey); +// message = "该指令号未找到对应指令:" + ikey; +// logServer.deviceExecuteLog(this.device_code, "", "", "该指令号未找到对应指令:" + ikey); +// return; + task = taskService.findByTaskCode(inst.getTask_code()); + } } @@ -99,6 +125,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic StandardOrdinarySiteDeviceDriver standardOrdinarySiteDeviceDriver; //货架 StandardStorageDeviceDriver standardStorageDeviceDriver; + //纸管抓取位 + PaperTubePickSiteDeviceDriver paperTubePickSiteDeviceDriver; + //标准-光电检测 + StandardInspectSiteDeviceDriver standardInspectSiteDeviceDriver; + //烘箱对接位 + HongXiangStationDeviceDriver hongXiangStationDeviceDriver; + if (phase == 0x02) { if (ObjectUtil.isEmpty(inst)) { @@ -107,7 +140,11 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic } inst.setCarno(String.valueOf(carno)); instructionService.update(inst); - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + "反馈:" + data); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agvphase:" + "反馈:" + data) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); } //到达取货点 //(Itype=1/2/3,需要WCS反馈Phase) @@ -138,16 +175,109 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic device = deviceAppService.findDeviceByCode(device_code); if (ObjectUtil.isEmpty(device_code)) { log.info(agvaddr + "对应设备号为空!"); - logServer.deviceExecuteLog(this.device_code, "", "", agvaddr + "对应设备号为空"); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content(agvaddr + "对应设备号为空") + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); return; } if (ObjectUtil.isEmpty(inst)) { log.info("未找到指令号{}对应的指令", ikey); return; } - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + if (ObjectUtil.isEmpty(inst.getCarno())) { + inst.setCarno(String.valueOf(carno)); + instructionService.update(inst); + } + + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (ObjectUtil.isNotEmpty(device.getExtraValue().get("wait")) + && StrUtil.equals("true", device.getExtraValue().get("wait").toString()) + && StrUtil.equals(task.getTask_type(), "1")) { + if (standardOrdinarySiteDeviceDriver.getMove() == 1) { + String task_code = standardOrdinarySiteDeviceDriver.getTask_code(); + log.info("当前任务号{},创建任务号{}", task.getTask_code(), task_code); + if (StrUtil.isEmpty(task_code) || !task_code.equals(task.getTask_code())) { + log.info("等待LMS系统进行确认允许取货,设备号{},指令号{},任务号{}", device_code, ikey, task.getTask_code()); + message = "等待LMS系统进行确认允许取货,设备号:" + device_code + ",指令号:" + ikey; + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("等待LMS系统进行确认允许取货,设备号" + device.getDevice_code() + ",指令号" + ikey) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); + } else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + } else { + log.info("等待LMS系统进行确认允许取货,设备号{},指令号{}", device_code, ikey); + message = "等待LMS系统进行确认允许取货,设备号:" + device_code + ",指令号:" + ikey; + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("等待LMS系统进行确认允许取货,设备号" + device.getDevice_code() + ",指令号" + ikey) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); + } + } else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + } + else if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + + try { + standardInspectSiteDeviceDriver.writing(1); + } catch (Exception e) { + e.printStackTrace(); + } + if ((standardInspectSiteDeviceDriver.getMove() == 1 && standardInspectSiteDeviceDriver.getAction() == 1 && standardInspectSiteDeviceDriver.getError() == 0)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + standardInspectSiteDeviceDriver.getMove() + ",动作信号:" + standardInspectSiteDeviceDriver.getAction() + "报警信号:" + standardInspectSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, standardInspectSiteDeviceDriver.getMove(), standardInspectSiteDeviceDriver.getAction() + , standardInspectSiteDeviceDriver.getError(), ikey); + } + } + else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { + hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); + try { + hongXiangStationDeviceDriver.writing(1); + } catch (Exception e) { + e.printStackTrace(); + } + if (hongXiangStationDeviceDriver.getMove() > 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + hongXiangStationDeviceDriver.getMove() + ",动作信号:" + hongXiangStationDeviceDriver.getAction() + "报警信号:" + hongXiangStationDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, hongXiangStationDeviceDriver.getMove(), hongXiangStationDeviceDriver.getAction() + , hongXiangStationDeviceDriver.getError(), ikey); + } + } + else if (device.getDeviceDriver() instanceof PaperTubePickSiteDeviceDriver) { + paperTubePickSiteDeviceDriver = (PaperTubePickSiteDeviceDriver) device.getDeviceDriver(); + try { + paperTubePickSiteDeviceDriver.writing(2); + } catch (Exception e) { + e.printStackTrace(); + } + if (paperTubePickSiteDeviceDriver.getMove() > 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + paperTubePickSiteDeviceDriver.getMove() + ",动作信号:" + paperTubePickSiteDeviceDriver.getAction() + "报警信号:" + paperTubePickSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, paperTubePickSiteDeviceDriver.getMove(), paperTubePickSiteDeviceDriver.getAction() + , paperTubePickSiteDeviceDriver.getError(), ikey); + } + } else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); + } } + // 取货完毕 //(Itype=1/2/3,需要WCS反馈Phase) else if (phase == 0x05) { @@ -155,7 +285,11 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic agvaddr = agvaddr_copy; } if (agvaddr < 1) { - logServer.deviceExecuteLog(this.device_code, "", "", "agv地址参数有误,phase:" + phase); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agv地址参数有误,phase:" + phase) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); return; } if (agvaddr != 0) { @@ -176,15 +310,106 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic if (ObjectUtil.isEmpty(device_code)) { log.info(agvaddr + "对应设备号为空!"); - logServer.deviceExecuteLog(this.device_code, "", "", "对应设备号为空" + device_code); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("对应设备号为空" + device_code) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); return; } if (ObjectUtil.isEmpty(inst)) { log.info("未找到指令号{}对应的指令", ikey); return; } - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + if (ObjectUtil.isEmpty(inst.getCarno())) { + inst.setCarno(String.valueOf(carno)); + instructionService.update(inst); + } + + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (ObjectUtil.isNotEmpty(device.getExtraValue().get("wait")) + && StrUtil.equals("true", device.getExtraValue().get("wait").toString()) + && StrUtil.equals(task.getTask_type(), "1")) { + if (standardOrdinarySiteDeviceDriver.getMove() == 1) { + String task_code = standardOrdinarySiteDeviceDriver.getTask_code(); + log.info("当前任务号{},创建任务号{}", task.getTask_code(), task_code); + if (StrUtil.isEmpty(task_code) || !task_code.equals(task.getTask_code())) { + log.info("等待LMS系统进行确认允许取货,设备号{},指令号{},任务号{}", device_code, ikey, task.getTask_code()); + message = "等待LMS系统进行确认允许取货,设备号:" + device_code + ",指令号:" + ikey; + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("等待LMS系统进行确认允许取货,设备号" + device.getDevice_code() + ",指令号" + ikey) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); + } else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + } else { + log.info("等待LMS系统进行确认允许取货,设备号{},指令号{}", device_code, ikey); + message = "等待LMS系统进行确认允许取货,设备号:" + device_code + ",指令号:" + ikey; + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("等待LMS系统进行确认允许取货,设备号" + device.getDevice_code() + ",指令号" + ikey) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); + } + } else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + } + else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { + hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); + try { + hongXiangStationDeviceDriver.writing(0); + } catch (Exception e) { + e.printStackTrace(); + } + if (hongXiangStationDeviceDriver.getMove() > 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + hongXiangStationDeviceDriver.getMove() + ",动作信号:" + hongXiangStationDeviceDriver.getAction() + "报警信号:" + hongXiangStationDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, hongXiangStationDeviceDriver.getMove(), hongXiangStationDeviceDriver.getAction() + , hongXiangStationDeviceDriver.getError(), ikey); + } + } + else if (device.getDeviceDriver() instanceof PaperTubePickSiteDeviceDriver) { + paperTubePickSiteDeviceDriver = (PaperTubePickSiteDeviceDriver) device.getDeviceDriver(); + try { + paperTubePickSiteDeviceDriver.writing(3); + } catch (Exception e) { + e.printStackTrace(); + } + if (paperTubePickSiteDeviceDriver.getMove() == 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + paperTubePickSiteDeviceDriver.getMove() + ",动作信号:" + paperTubePickSiteDeviceDriver.getAction() + "报警信号:" + paperTubePickSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, paperTubePickSiteDeviceDriver.getMove(), paperTubePickSiteDeviceDriver.getAction() + , paperTubePickSiteDeviceDriver.getError(), ikey); + } + } else if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + + try { + standardInspectSiteDeviceDriver.writing(0); + } catch (Exception e) { + e.printStackTrace(); + } + if ((standardInspectSiteDeviceDriver.getMove() == 1 && standardInspectSiteDeviceDriver.getAction() == 1 && standardInspectSiteDeviceDriver.getError() == 0)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + standardInspectSiteDeviceDriver.getMove() + ",动作信号:" + standardInspectSiteDeviceDriver.getAction() + "报警信号:" + standardInspectSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, standardInspectSiteDeviceDriver.getMove(), standardInspectSiteDeviceDriver.getAction() + , standardInspectSiteDeviceDriver.getError(), ikey); + } + } else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); + } } //到达取货点(Itype=1、3,需要WCS反馈) else if (phase == 0x08) { @@ -192,7 +417,11 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic agvaddr = agvaddr_copy; } if (agvaddr < 1) { - logServer.deviceExecuteLog(this.device_code, "", "", "agv地址参数有误,phase:" + phase); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agv地址参数有误,phase:" + phase) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); return; } if (agvaddr != 0) { @@ -218,10 +447,97 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic log.info("未找到指令号{}对应的指令", ikey); return; } + if (ObjectUtil.isEmpty(inst.getCarno())) { + inst.setCarno(String.valueOf(carno)); + instructionService.update(inst); + } + String agv_inst_type = inst.getAgv_inst_type(); if (StrUtil.equals(agv_inst_type, CommonFinalParam.ONE) || StrUtil.equals(agv_inst_type, "3")) { - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (ObjectUtil.isNotEmpty(device.getExtraValue().get("wait")) + && StrUtil.equals("true", device.getExtraValue().get("wait").toString()) + && StrUtil.equals(task.getTask_type(), "1")) { + if (standardOrdinarySiteDeviceDriver.getMove() == 1) { + String task_code = standardOrdinarySiteDeviceDriver.getTask_code(); + log.info("当前任务号{},创建任务号{}", task.getTask_code(), task_code); + if (StrUtil.isEmpty(task_code) || !task_code.equals(task.getTask_code())) { + log.info("等待LMS系统进行确认允许取货,设备号{},指令号{},任务号{}", device_code, ikey, task.getTask_code()); + message = "等待LMS系统进行确认允许取货,设备号:" + device_code + ",指令号:" + ikey; + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("等待LMS系统进行确认允许取货,设备号" + device.getDevice_code() + ",指令号" + ikey) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); + } else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + } else { + log.info("等待LMS系统进行确认允许取货,设备号{},指令号{}", device_code, ikey); + message = "等待LMS系统进行确认允许取货,设备号:" + device_code + ",指令号:" + ikey; + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("等待LMS系统进行确认允许取货,设备号" + device.getDevice_code() + ",指令号" + ikey) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); + } + } else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + } else if (device.getDeviceDriver() instanceof PaperTubePickSiteDeviceDriver) { + paperTubePickSiteDeviceDriver = (PaperTubePickSiteDeviceDriver) device.getDeviceDriver(); + try { + paperTubePickSiteDeviceDriver.writing(4); + } catch (Exception e) { + e.printStackTrace(); + } + if (paperTubePickSiteDeviceDriver.getMove() == 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + paperTubePickSiteDeviceDriver.getMove() + ",动作信号:" + paperTubePickSiteDeviceDriver.getAction() + "报警信号:" + paperTubePickSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, paperTubePickSiteDeviceDriver.getMove(), paperTubePickSiteDeviceDriver.getAction() + , paperTubePickSiteDeviceDriver.getError(), ikey); + } + } + else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { + hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); + try { + hongXiangStationDeviceDriver.writing(0); + } catch (Exception e) { + e.printStackTrace(); + } + if (hongXiangStationDeviceDriver.getMove() > 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + hongXiangStationDeviceDriver.getMove() + ",动作信号:" + hongXiangStationDeviceDriver.getAction() + "报警信号:" + hongXiangStationDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, hongXiangStationDeviceDriver.getMove(), hongXiangStationDeviceDriver.getAction() + , hongXiangStationDeviceDriver.getError(), ikey); + } + } + else if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + + try { + standardInspectSiteDeviceDriver.writing(1); + } catch (Exception e) { + e.printStackTrace(); + } + if ((standardInspectSiteDeviceDriver.getMove() == 1 && standardInspectSiteDeviceDriver.getAction() == 1 && standardInspectSiteDeviceDriver.getError() == 0)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + standardInspectSiteDeviceDriver.getMove() + ",动作信号:" + standardInspectSiteDeviceDriver.getAction() + "报警信号:" + standardInspectSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, standardInspectSiteDeviceDriver.getMove(), standardInspectSiteDeviceDriver.getAction() + , standardInspectSiteDeviceDriver.getError(), ikey); + } + } else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); + } } } // 取货完毕 @@ -231,7 +547,11 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic agvaddr = agvaddr_copy; } if (agvaddr < 1) { - logServer.deviceExecuteLog(this.device_code, "", "", "agv地址参数有误,phase:" + phase); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agv地址参数有误,phase:" + phase) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); return; } if (agvaddr != 0) { @@ -260,8 +580,90 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic } String agv_inst_type = inst.getAgv_inst_type(); if (StrUtil.equals(agv_inst_type, CommonFinalParam.ONE) || StrUtil.equals(agv_inst_type, "3")) { + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (ObjectUtil.isNotEmpty(device.getExtraValue().get("wait")) + && StrUtil.equals("true", device.getExtraValue().get("wait").toString()) + && StrUtil.equals(task.getTask_type(), "1")) { + if (standardOrdinarySiteDeviceDriver.getMove() == 1) { + String task_code = standardOrdinarySiteDeviceDriver.getTask_code(); + log.info("当前任务号{},创建任务号{}", task.getTask_code(), task_code); + if (StrUtil.isEmpty(task_code) || !task_code.equals(task.getTask_code())) { + log.info("等待LMS系统进行确认允许取货,设备号{},指令号{},任务号{}", device_code, ikey, task.getTask_code()); + message = "等待LMS系统进行确认允许取货,设备号:" + device_code + ",指令号:" + ikey; + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("等待LMS系统进行确认允许取货,设备号" + device.getDevice_code() + ",指令号" + ikey) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); + } else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + } else { + log.info("等待LMS系统进行确认允许取货,设备号{},指令号{}", device_code, ikey); + message = "等待LMS系统进行确认允许取货,设备号:" + device_code + ",指令号:" + ikey; + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("等待LMS系统进行确认允许取货,设备号" + device.getDevice_code() + ",指令号" + ikey) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); + } + } + else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { + hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); + try { + hongXiangStationDeviceDriver.writing(0); + } catch (Exception e) { + e.printStackTrace(); + } + if (hongXiangStationDeviceDriver.getMove() > 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + hongXiangStationDeviceDriver.getMove() + ",动作信号:" + hongXiangStationDeviceDriver.getAction() + "报警信号:" + hongXiangStationDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, hongXiangStationDeviceDriver.getMove(), hongXiangStationDeviceDriver.getAction() + , hongXiangStationDeviceDriver.getError(), ikey); + } + } + else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + } else if (device.getDeviceDriver() instanceof PaperTubePickSiteDeviceDriver) { + paperTubePickSiteDeviceDriver = (PaperTubePickSiteDeviceDriver) device.getDeviceDriver(); + try { + paperTubePickSiteDeviceDriver.writing(5); + } catch (Exception e) { + e.printStackTrace(); + } + if (paperTubePickSiteDeviceDriver.getMove() == 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + paperTubePickSiteDeviceDriver.getMove() + ",动作信号:" + paperTubePickSiteDeviceDriver.getAction() + "报警信号:" + paperTubePickSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, paperTubePickSiteDeviceDriver.getMove(), paperTubePickSiteDeviceDriver.getAction() + , paperTubePickSiteDeviceDriver.getError(), ikey); + } + } + } else if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + + try { + standardInspectSiteDeviceDriver.writing(1); + } catch (Exception e) { + e.printStackTrace(); + } + if ((standardInspectSiteDeviceDriver.getMove() == 1 && standardInspectSiteDeviceDriver.getAction() == 1 && standardInspectSiteDeviceDriver.getError() == 0)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + standardInspectSiteDeviceDriver.getMove() + ",动作信号:" + standardInspectSiteDeviceDriver.getAction() + "报警信号:" + standardInspectSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, standardInspectSiteDeviceDriver.getMove(), standardInspectSiteDeviceDriver.getAction() + , standardInspectSiteDeviceDriver.getError(), ikey); + } + } else { data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); } } @@ -278,7 +680,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic // inst.setWeight(String.valueOf(weight)); // instructionService.update(inst); data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); } } // 到达放货点 @@ -288,7 +695,11 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic agvaddr = agvaddr_copy; } if (agvaddr < 1) { - logServer.deviceExecuteLog(this.device_code, "", "", "agv地址参数有误,phase:" + phase); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agv地址参数有误,phase:" + phase) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); return; } if (agvaddr != 0) { @@ -315,8 +726,48 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic log.info("未找到指令号{}对应的指令", ikey); return; } - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + + standardOrdinarySiteDeviceDriver.setAgvphase(phase); + standardOrdinarySiteDeviceDriver.setIndex(index); + standardOrdinarySiteDeviceDriver.setInst(inst); + + } else if (device.getDeviceDriver() instanceof PaperTubePickSiteDeviceDriver) { + paperTubePickSiteDeviceDriver = (PaperTubePickSiteDeviceDriver) device.getDeviceDriver(); + if (paperTubePickSiteDeviceDriver.getMove() == 0) + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { + hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); + try { + hongXiangStationDeviceDriver.writing(0); + } catch (Exception e) { + e.printStackTrace(); + } + if (hongXiangStationDeviceDriver.getMove() > 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + hongXiangStationDeviceDriver.getMove() + ",动作信号:" + hongXiangStationDeviceDriver.getAction() + "报警信号:" + hongXiangStationDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, hongXiangStationDeviceDriver.getMove(), hongXiangStationDeviceDriver.getAction() + , hongXiangStationDeviceDriver.getError(), ikey); + } + } + else if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + standardInspectSiteDeviceDriver.writing(1); + if ((standardInspectSiteDeviceDriver.getMove() == 0 && standardInspectSiteDeviceDriver.getAction() == 1 && standardInspectSiteDeviceDriver.getError() == 0)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + }else { + message = "设备号:" + device_code + "光电信号:" + standardInspectSiteDeviceDriver.getMove() + ",动作信号:" + standardInspectSiteDeviceDriver.getAction()+ "报警信号:" + standardInspectSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足放货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,报警信号{},不满足放货条件,指令号{}", device_code, standardInspectSiteDeviceDriver.getMove(), standardInspectSiteDeviceDriver.getAction() + ,standardInspectSiteDeviceDriver.getError(), ikey); + } + } else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } } //放货完成 //(Itype=1/2/3,需要WCS反馈) @@ -325,7 +776,11 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic agvaddr = agvaddr_copy; } if (agvaddr < 1) { - logServer.deviceExecuteLog(this.device_code, "", "", "agv地址参数有误,phase:" + phase); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agv地址参数有误,phase:" + phase) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); return; } if (agvaddr != 0) { @@ -352,8 +807,49 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic log.info("未找到指令号{}对应的指令", ikey); return; } - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); +// if (ObjectUtil.isNotEmpty(standardOrdinarySiteDeviceDriver.getDevice().getExtraValue().get("wait")) +// && StrUtil.equals("true", standardOrdinarySiteDeviceDriver.getDevice().getExtraValue().get("wait").toString()) +// && StrUtil.equals(task.getTask_type(), "1")) { +// // +// if (standardOrdinarySiteDeviceDriver.getOption() == 2) { +// data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); +// standardOrdinarySiteDeviceDriver.setOption(0); +// } else { +// log.info("等待LMS系统进行确认离开,设备号{},指令号:{}", device_code, ikey); +// message = "等待LMS系统进行确认离开,设备号:" + device_code + ",指令号:" + ikey; +// } +// } else { +// data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); +// } + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + this.setPhase(phase); + } + else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { + hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); + try { + hongXiangStationDeviceDriver.writing(0); + } catch (Exception e) { + e.printStackTrace(); + } + if (hongXiangStationDeviceDriver.getMove() > 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + hongXiangStationDeviceDriver.getMove() + ",动作信号:" + hongXiangStationDeviceDriver.getAction() + "报警信号:" + hongXiangStationDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, hongXiangStationDeviceDriver.getMove(), hongXiangStationDeviceDriver.getAction() + , hongXiangStationDeviceDriver.getError(), ikey); + } + } + else if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + standardInspectSiteDeviceDriver.writing(0); + if ((standardInspectSiteDeviceDriver.getMove() == 1)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + } else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } } //到达放货点 //(Itype=1、3,需要WCS反馈) @@ -362,7 +858,11 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic agvaddr = agvaddr_copy; } if (agvaddr < 1) { - logServer.deviceExecuteLog(this.device_code, "", "", "agv地址参数有误,phase:" + phase); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agv地址参数有误,phase:" + phase) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); return; } if (agvaddr != 0) { @@ -391,8 +891,44 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic } String agv_inst_type = inst.getAgv_inst_type(); if (StrUtil.equals(agv_inst_type, CommonFinalParam.ONE) || StrUtil.equals(agv_inst_type, "3")) { - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); +// if (ObjectUtil.isNotEmpty(standardOrdinarySiteDeviceDriver.getDevice().getExtraValue().get("wait")) +// && StrUtil.equals("true", standardOrdinarySiteDeviceDriver.getDevice().getExtraValue().get("wait").toString()) +// && StrUtil.equals(task.getTask_type(), "1")) { +// // +// if (standardOrdinarySiteDeviceDriver.getOption() == 2) { +// data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); +// standardOrdinarySiteDeviceDriver.setOption(0); +// } else { +// log.info("等待LMS系统进行确认离开,设备号{},指令号:{}", device_code, ikey); +// message = "等待LMS系统进行确认离开,设备号:" + device_code + ",指令号:" + ikey; +// } +// } else { +// data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); +// } + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + this.setPhase(phase); + + } + else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { + hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); + try { + hongXiangStationDeviceDriver.writing(0); + } catch (Exception e) { + e.printStackTrace(); + } + if (hongXiangStationDeviceDriver.getMove() > 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + hongXiangStationDeviceDriver.getMove() + ",动作信号:" + hongXiangStationDeviceDriver.getAction() + "报警信号:" + hongXiangStationDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, hongXiangStationDeviceDriver.getMove(), hongXiangStationDeviceDriver.getAction() + , hongXiangStationDeviceDriver.getError(), ikey); + } + } + else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } } } //放货完成 @@ -402,7 +938,11 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic agvaddr = agvaddr_copy; } if (agvaddr < 1) { - logServer.deviceExecuteLog(this.device_code, "", "", "agv地址参数有误,phase:" + phase); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agv地址参数有误,phase:" + phase) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); return; } if (agvaddr != 0) { @@ -431,8 +971,59 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic } String agv_inst_type = inst.getAgv_inst_type(); if (StrUtil.equals(agv_inst_type, CommonFinalParam.ONE) || StrUtil.equals(agv_inst_type, "3")) { - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { + standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); +// if (ObjectUtil.isNotEmpty(standardOrdinarySiteDeviceDriver.getDevice().getExtraValue().get("wait")) +// && StrUtil.equals("true", standardOrdinarySiteDeviceDriver.getDevice().getExtraValue().get("wait").toString()) +// && StrUtil.equals(task.getTask_type(), "1")) { +// // +// if (standardOrdinarySiteDeviceDriver.getOption() == 2) { +// data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); +// standardOrdinarySiteDeviceDriver.setOption(0); +// } else { +// log.info("等待LMS系统进行确认离开,设备号{},指令号:{}", device_code, ikey); +// message = "等待LMS系统进行确认离开,设备号:" + device_code + ",指令号:" + ikey; +// } +// } else { +// data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); +// } + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + this.setPhase(phase); + + } + else if (device.getDeviceDriver() instanceof PaperTubePickSiteDeviceDriver) { + paperTubePickSiteDeviceDriver = (PaperTubePickSiteDeviceDriver) device.getDeviceDriver(); + try { + paperTubePickSiteDeviceDriver.writing(0); + } catch (Exception e) { + e.printStackTrace(); + } + if (paperTubePickSiteDeviceDriver.getMove() > 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + paperTubePickSiteDeviceDriver.getMove() + ",动作信号:" + paperTubePickSiteDeviceDriver.getAction() + "报警信号:" + paperTubePickSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, paperTubePickSiteDeviceDriver.getMove(), paperTubePickSiteDeviceDriver.getAction() + , paperTubePickSiteDeviceDriver.getError(), ikey); + } + } + else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { + hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); + try { + hongXiangStationDeviceDriver.writing(0); + } catch (Exception e) { + e.printStackTrace(); + } + if (hongXiangStationDeviceDriver.getMove() > 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + hongXiangStationDeviceDriver.getMove() + ",动作信号:" + hongXiangStationDeviceDriver.getAction() + "报警信号:" + hongXiangStationDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, hongXiangStationDeviceDriver.getMove(), hongXiangStationDeviceDriver.getAction() + , hongXiangStationDeviceDriver.getError(), ikey); + } + } + else { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } } } //上传AGV电量 @@ -443,7 +1034,11 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic } agv_power = ikey; data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); } //进入区域(phase值) else if (phase == 0x50) { @@ -453,7 +1048,11 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic } region = agvaddr; data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); } //离开区域(phase值) @@ -464,7 +1063,11 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic } region = agvaddr; data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); } //上报异常信息 @@ -474,10 +1077,18 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic if (agvaddr == 0) { } - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); } if (!ObjectUtil.isEmpty(data)) { - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); // if (StrUtil.equals(inst.getAgv_system_type(), "2")) { // TwoNDCSocketConnectionAutoRun.write(data); // } else if (StrUtil.equals(inst.getAgv_system_type(), "3")) { diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/standard_ordinary_site/StandardOrdinarySiteDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/standard_ordinary_site/StandardOrdinarySiteDeviceDriver.java index b1b3c322a..9f339c2b7 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/standard_ordinary_site/StandardOrdinarySiteDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/standard_ordinary_site/StandardOrdinarySiteDeviceDriver.java @@ -116,6 +116,9 @@ public class StandardOrdinarySiteDeviceDriver extends AbstractDeviceDriver imple */ private int flag; + //任务号 + String task_code; + /** * 人工确认信号 默认0 agv到达后请求置1 等人工确认后变为2 反馈agv后继续为0 */ diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/blank_manipulator/BlankManipulatorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/blank_manipulator/BlankManipulatorDeviceDriver.java index abfb2f655..f4fdaa6f6 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/blank_manipulator/BlankManipulatorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/blank_manipulator/BlankManipulatorDeviceDriver.java @@ -41,6 +41,8 @@ import org.nl.acs.task.service.dto.TaskDto; import org.nl.common.exception.BadRequestException; import org.nl.config.SpringContextHolder; import org.nl.config.language.LangProcess; +import org.nl.config.lucene.service.LuceneExecuteLogService; +import org.nl.config.lucene.service.dto.LuceneLogDto; import org.springframework.beans.factory.annotation.Autowired; import java.util.*; @@ -69,6 +71,8 @@ public class BlankManipulatorDeviceDriver extends AbstractOpcDeviceDriver implem DeviceErrorLogService errorLogServer = SpringContextHolder.getBean(DeviceErrorLogServiceImpl.class); @Autowired AcsToWmsService acsToWmsService = SpringContextHolder.getBean("acsToWmsServiceImpl"); + @Autowired + LuceneExecuteLogService luceneExecuteLogService = SpringContextHolder.getBean(LuceneExecuteLogService.class); //工作模式 int mode = 0; int last_mode = 0; @@ -170,49 +174,6 @@ public class BlankManipulatorDeviceDriver extends AbstractOpcDeviceDriver implem weight = this.itemProtocol.getWeight(); barcode = this.itemProtocol.getBarcode(); - if (to_onset != last_to_onset) { - logServer.deviceExecuteLog(this.device_code, "", "", "信号to_onset:" + last_to_onset + "->" + to_onset); - } - if (to_command != last_to_command) { - logServer.deviceExecuteLog(this.device_code, "", "", "信号to_command:" + last_to_command + "->" + to_command); - } - if (to_target != last_to_target) { - logServer.deviceExecuteLog(this.device_code, "", "", "信号to_target:" + last_to_target + "->" + to_target); - } - if (to_task != last_to_task) { - logServer.deviceExecuteLog(this.device_code, "", "", "信号to_task:" + last_to_task + "->" + to_task); - } - if (weight != last_weight) { - logServer.deviceExecuteLog(this.device_code, "", "", "信号weight:" + last_weight + "->" + weight); - } - if (barcode != last_barcode) { - logServer.deviceExecuteLog(this.device_code, "", "", "信号barcode:" + last_barcode + "->" + barcode); - } - if (mode != last_mode) { - requireSucess = false; - logServer.deviceItemValue(this.device_code, "mode", String.valueOf(mode)); - logServer.deviceExecuteLog(this.device_code, "", "", "信号mode:" + last_mode + "->" + mode); - } - if (move != last_move) { - logServer.deviceItemValue(this.device_code, "move", String.valueOf(move)); - logServer.deviceExecuteLog(this.device_code, "", "", "信号move:" + last_move + "->" + move); - } - if (action != last_action) { - logServer.deviceItemValue(this.device_code, "action", String.valueOf(action)); - logServer.deviceExecuteLog(this.device_code, "", "", "信号action:" + last_action + "->" + action); - } - if (error != last_error) { - logServer.deviceItemValue(this.device_code, "error", String.valueOf(error)); - logServer.deviceExecuteLog(this.device_code, "", "", "信号error:" + last_error + "->" + error); - } - if (walk_y != last_walk_y) { - logServer.deviceItemValue(this.device_code, "walk_y", String.valueOf(walk_y)); - logServer.deviceExecuteLog(this.device_code, "", "", "信号walk_y:" + last_walk_y + "->" + walk_y); - } - if (task != last_task) { - logServer.deviceItemValue(this.device_code, "task", String.valueOf(task)); - logServer.deviceExecuteLog(this.device_code, "", "", "信号task:" + last_task + "->" + task); - } // 更新指令状态 if (mode == 3 && task > 0) { @@ -254,17 +215,29 @@ public class BlankManipulatorDeviceDriver extends AbstractOpcDeviceDriver implem if (body.getStatus() == 200) { message = "反馈重量以及收卷轴LMS成功..."; requireSucess = true; - logServer.deviceExecuteLog(this.device_code, "", "", "反馈尺寸成请求成功,响应参数:" + JSON.toJSONString(body)); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("反馈尺寸成请求成功,响应参数:" + JSON.toJSONString(body)) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); Map map = new LinkedHashMap<>(); map.put("to_command", "5"); this.writing(map); } else { message = "反馈重量以及收卷轴LMS失败..."; requireSucess = false; - message = "反馈LMS尺寸失败"; + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("反馈重量以及收卷轴LMS失败...") + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); } } else { - logServer.deviceExecuteLog(this.device_code, "", "", "当前指令号为空"); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("当前指令号为空") + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); } } else { feedMessage = "行架机械手:"; @@ -305,7 +278,11 @@ public class BlankManipulatorDeviceDriver extends AbstractOpcDeviceDriver implem } catch (Exception var17) { var17.printStackTrace(); feedMessage = var17.getMessage(); - logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + var17.getMessage() + ",this.itemProtocol is null:" + ObjectUtil.isEmpty(this.itemProtocol)); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("读取信号值时出现异常:" + var17.getMessage() + ",this.itemProtocol is null:" + ObjectUtil.isEmpty(this.itemProtocol)) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); } @@ -469,7 +446,11 @@ public class BlankManipulatorDeviceDriver extends AbstractOpcDeviceDriver implem instructionService.create(instdto); } catch (Exception e) { notCreateInstMessage = e.getMessage(); - logServer.deviceExecuteLog(this.getDevice_code(), "", "", "创建指令时出现异常:" + e.getMessage()); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("创建指令时出现异常:" + e.getMessage()) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); return false; } //创建指令后修改任务状态 @@ -481,12 +462,20 @@ public class BlankManipulatorDeviceDriver extends AbstractOpcDeviceDriver implem Device nextDevice = deviceAppService.findDeviceByCode(instdto.getNext_device_code()); if (ObjectUtil.isEmpty(startDevice.getExtraValue().get("address"))) { notCreateInstMessage = "设备:" + startDevice.getDevice_code() + "未设置电气调度号!"; - logServer.deviceExecuteLog(this.getDevice_code(), "", "", "设备:" + startDevice.getDevice_code() + "未设置电气调度号!"); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("设备:" + startDevice.getDevice_code() + "未设置电气调度号!") + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); throw new BadRequestException(LangProcess.msg("device_checkAdd", startDevice.getDevice_code())); } if (ObjectUtil.isEmpty(nextDevice.getExtraValue().get("address"))) { notCreateInstMessage = "设备:" + nextDevice.getDevice_code() + "未设置电气调度号!"; - logServer.deviceExecuteLog(this.getDevice_code(), "", "", "设备:" + nextDevice.getDevice_code() + "未设置电气调度号!"); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("设备:" + nextDevice.getDevice_code() + "未设置电气调度号!") + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); throw new BadRequestException(LangProcess.msg("device_checkAdd", nextDevice.getDevice_code())); } @@ -533,7 +522,11 @@ public class BlankManipulatorDeviceDriver extends AbstractOpcDeviceDriver implem }); if (ObjectUtil.isNotEmpty(itemMap)) { this.control(itemMap); - logServer.deviceExecuteLog(this.getDevice().getDevice_code(), "", "", "下发多个电气信号:" + itemMap); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("下发多个电气信号:" + itemMap) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/blanking_button/BlankingButtonDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/blanking_button/BlankingButtonDriver.java index 86e043824..9a51082be 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/blanking_button/BlankingButtonDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/blanking_button/BlankingButtonDriver.java @@ -28,6 +28,7 @@ import org.nl.acs.opc.DeviceAppService; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.task.service.TaskService; import org.nl.config.SpringContextHolder; +import org.nl.config.lucene.service.LuceneExecuteLogService; import org.nl.system.service.param.ISysParamService; import org.springframework.beans.factory.annotation.Autowired; @@ -66,6 +67,8 @@ public class BlankingButtonDriver extends AbstractOpcDeviceDriver implements Dev ISysParamService paramService = SpringContextHolder.getBean(ISysParamService.class); @Autowired AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsService.class); + @Autowired + LuceneExecuteLogService luceneExecuteLogService = SpringContextHolder.getBean(LuceneExecuteLogService.class); DeviceErrorLogService deviceErrorLogService = SpringContextHolder.getBean(DeviceErrorLogServiceImpl.class); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/plug_pull_device_site/PlugPullDeviceSiteDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/plug_pull_device_site/PlugPullDeviceSiteDeviceDriver.java index 36b906812..7b01b42db 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/plug_pull_device_site/PlugPullDeviceSiteDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/plug_pull_device_site/PlugPullDeviceSiteDeviceDriver.java @@ -130,7 +130,7 @@ public class PlugPullDeviceSiteDeviceDriver extends AbstractOpcDeviceDriver impl //当前指令 Instruction inst = null; - /** + /** * 1-执行任务;2-取货完成;3-放货完成; */ int flag; @@ -295,7 +295,7 @@ public class PlugPullDeviceSiteDeviceDriver extends AbstractOpcDeviceDriver impl case 8: if (!requireSucess && task > 0) { //缓存线已满,申请行架任务 -// applyTask(); + applyTask(); } break; default: @@ -361,6 +361,10 @@ public class PlugPullDeviceSiteDeviceDriver extends AbstractOpcDeviceDriver impl String task_code1 = inst1.getTask_code(); applyPlugPullSiteRequest.setDevice_code(device_code); applyPlugPullSiteRequest.setTask_code(task_code1); + applyPlugPullSiteRequest.setWeight1(String.valueOf(weight1)); + applyPlugPullSiteRequest.setMaterial1(String.valueOf(material1)); + applyPlugPullSiteRequest.setWeight2(String.valueOf(weight2)); + applyPlugPullSiteRequest.setMaterial2(String.valueOf(material2)); applyPlugPullSiteRequest.setType("2"); applyPlugPullSitResponse = acsToWmsService.applyPlugPullSiteRequest(applyPlugPullSiteRequest); if (applyPlugPullSitResponse.getCode() == 200) { @@ -389,6 +393,7 @@ public class PlugPullDeviceSiteDeviceDriver extends AbstractOpcDeviceDriver impl String task_code1 = inst1.getTask_code(); applyPlugPullSiteRequest.setDevice_code(device_code); applyPlugPullSiteRequest.setTask_code(task_code1); + applyPlugPullSiteRequest.setBarcode(String.valueOf(barcode)); applyPlugPullSiteRequest.setType("3"); applyPlugPullSitResponse = acsToWmsService.applyPlugPullSiteRequest(applyPlugPullSiteRequest); if (applyPlugPullSitResponse.getCode() == 200) { @@ -406,6 +411,29 @@ public class PlugPullDeviceSiteDeviceDriver extends AbstractOpcDeviceDriver impl } } + /** + * 缓存线已满,生成行架任务 + */ + private synchronized void applyTask() { + ApplyPlugPullSiteRequest applyPlugPullSiteRequest = new ApplyPlugPullSiteRequest(); + ApplyPlugPullSitResponse applyPlugPullSitResponse; + Instruction inst1 = instructionService.findByCode(String.valueOf(task)); + String task_code1 = inst1.getTask_code(); + applyPlugPullSiteRequest.setDevice_code(device_code); + applyPlugPullSiteRequest.setTask_code(task_code1); + applyPlugPullSiteRequest.setType("4"); + applyPlugPullSitResponse = acsToWmsService.applyPlugPullSiteRequest(applyPlugPullSiteRequest); + if (applyPlugPullSitResponse.getCode() == 200) { + logServer.deviceExecuteLog(this.device_code, "", "", "申请拔轴,返回参数:" + applyPlugPullSitResponse); + message = "拔轴完成成功"; + } else { + message = applyPlugPullSitResponse.getMessage(); + requireSucess = true; + message = "申请行架任务失败"; + logServer.deviceExecuteLog(this.device_code, "", "", "申请拔轴反馈失败,返回参数:" + applyPlugPullSitResponse); + } + } + /** * 下发电气信号 * @param mode diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_conveyor_site/ItemProtocol.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_conveyor_site/ItemProtocol.java new file mode 100644 index 000000000..ddd9a1fb3 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_conveyor_site/ItemProtocol.java @@ -0,0 +1,121 @@ +package org.nl.acs.device_driver.two_conveyor.sub_roll_conveyor_site; + + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Data +public class ItemProtocol { + + //心跳 + public static String item_heartbeat = "heartbeat"; + //工作模式 + public static String item_mode = "mode"; + //光电信号 + public static String item_move = "move"; + //动作信号 + public static String item_action = "action"; + //任务号 + public static String item_task = "task"; + //报警 + public static String item_error = "error"; + //载具类型 + public static String item_container_type = "container_type"; + //托盘方向 + public static String item_carrier_direction = "carrier_direction"; + + //下发命令 + public static String item_to_command = "to_command"; + + //下发目标站 + public static String item_to_target = "to_target"; + //下发任务号 + public static String item_to_task = "to_task"; + //下发托盘类型 + public static String item_to_container_type = "to_container_type"; + + private SubRollConveyorSiteDeviceDriver driver; + + public ItemProtocol(SubRollConveyorSiteDeviceDriver driver){ + this.driver=driver; + } + + public int getHeartbeat() { + return this.getOpcIntegerValue(item_heartbeat); + } + + public int getMode() { + return this.getOpcIntegerValue(item_mode); + } + + public int getMove() { + return this.getOpcIntegerValue(item_move); + } + + public int getAction() { + return this.getOpcIntegerValue(item_action); + } + + public int getError() { + return this.getOpcIntegerValue(item_error); + } + + public int getTask() { + return this.getOpcIntegerValue(item_task); + } + + public int getContainer_type(){ + return this.getOpcIntegerValue(item_container_type); + } + + public int getCarrier_direction(){ + return this.getOpcIntegerValue(item_carrier_direction); + } + + Boolean isonline; + + public int getOpcIntegerValue(String protocol) { + Integer value = this.driver.getIntegeregerValue(protocol); + if (value == null) { + setIsonline(false); + } else { + setIsonline(true); + return value; + } + return 0; + + } + + public static List getReadableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_heartbeat, "心跳", "DB29.B0")); + list.add(new ItemDto(item_mode, "工作模式", "DB29.B1")); + list.add(new ItemDto(item_move, "光电信号", "DB29.B2")); + list.add(new ItemDto(item_action, "动作信号", "DB29.B3")); + list.add(new ItemDto(item_container_type, "载具类型", "DB29.B4")); + list.add(new ItemDto(item_to_container_type, "托盘方向", "DB29.B5")); + list.add(new ItemDto(item_error, "报警信号", "DB29.B9")); + list.add(new ItemDto(item_task, "任务号", "DB29.D10")); + return list; + } + + public static List getWriteableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_to_command, "下发命令", "DB30.W0")); + list.add(new ItemDto(item_to_target, "下发目标站", "DB30.W2")); + list.add(new ItemDto(item_to_task, "下发任务号", "DB30.W4")); + list.add(new ItemDto(item_to_container_type, "下发托盘类型", "DB30.W6")); + return list; + } + + @Override + public String toString() { + return ""; + } + +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_conveyor_site/SubRollConveyorSiteDefination.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_conveyor_site/SubRollConveyorSiteDefination.java new file mode 100644 index 000000000..a52e09e9f --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_conveyor_site/SubRollConveyorSiteDefination.java @@ -0,0 +1,62 @@ +package org.nl.acs.device_driver.two_conveyor.sub_roll_conveyor_site; + +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; +import org.nl.acs.device.domain.Device; +import org.nl.acs.device.enums.DeviceType; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; + +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +/** + * 子卷下卷输送线工位 + */ +@Service +public class SubRollConveyorSiteDefination implements OpcDeviceDriverDefination { + + @Override + public String getDriverCode() { + return "sub_roll_conveyor_site"; + } + + @Override + public String getDriverName() { + return "子卷下卷输送线工位"; + } + + @Override + public String getDriverDescription() { + return "子卷下卷输送线工位"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new SubRollConveyorSiteDeviceDriver()).setDevice(device).setDriverDefination(this); + } + + @Override + public Class getDeviceDriverType() { + return SubRollConveyorSiteDeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList(); + types.add(DeviceType.conveyor); + return types; + } + + @Override + public List getReadableItemDtos() { + return ItemProtocol.getReadableItemDtos(); + } + + @Override + public List getWriteableItemDtos() { + return ItemProtocol.getWriteableItemDtos(); + } + +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_conveyor_site/SubRollConveyorSiteDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_conveyor_site/SubRollConveyorSiteDeviceDriver.java new file mode 100644 index 000000000..2c8dffa93 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_conveyor_site/SubRollConveyorSiteDeviceDriver.java @@ -0,0 +1,271 @@ +package org.nl.acs.device_driver.two_conveyor.sub_roll_conveyor_site; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.agv.server.AgvService; +import org.nl.acs.device.domain.Device; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.RouteableDeviceDriver; +import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; +import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.ext.wms.service.AcsToWmsService; +import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; +import org.nl.acs.instruction.domain.Instruction; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.log.service.DeviceExecuteLogService; +import org.nl.acs.monitor.DeviceStageMonitor; +import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.route.service.RouteLineService; +import org.nl.acs.task.service.TaskService; +import org.nl.config.SpringContextHolder; +import org.nl.system.service.param.ISysParamService; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.*; + +/** + * 子卷下卷输送线工位 + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class SubRollConveyorSiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver, DeviceStageMonitor { + protected ItemProtocol itemProtocol = new ItemProtocol(this); + @Autowired + DeviceAppService deviceAppservice = SpringContextHolder.getBean(DeviceAppService.class); + @Autowired + InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class); + @Autowired + DeviceService deviceservice = SpringContextHolder.getBean(DeviceService.class); + @Autowired + TaskService taskserver = SpringContextHolder.getBean(TaskService.class); + @Autowired + RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineService.class); + @Autowired + AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class); + @Autowired + ISysParamService paramService = SpringContextHolder.getBean(ISysParamService.class); + @Autowired + DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class); + @Autowired + AgvService agvService = SpringContextHolder.getBean(AgvService.class); + + //工作模式 + int mode = 0; + int last_mode = 0; + //光电信号 + int move = 0; + int last_move = 0; + //动作信号 + int action = 0; + int last_action = 0; + + //报警信号 + int error = 0; + int last_error = 0; + //任务号 + int task = 0; + int last_task = 0; + + int heartbeat = 0; + int last_heartbeat = 0; + int to_command = 0; + int last_to_command = 0; + + //载具类型 + int container_type = 0; + int last_container_type = 0; + + //托盘方向 + int carrier_direction = 0; + int last_carrier_direction = 0; + + int to_target = 0; + int last_to_target = 0; + + int to_container_type = 0; + int last_to_container_type = 0; + + int to_task = 0; + int last_to_task = 0; + + + Boolean isonline = true; + + Boolean iserror = false; + //当前指令 + Instruction inst = null; + + /** + * 1-执行任务;2-取货完成;3-放货完成; + */ + int flag; + + String device_code; + + String message = null; + + @Override + public Device getDevice() { + return this.device; + } + + /** + * 请求成功标记 + */ + Boolean requireSucess = false; + String feedMessage = ""; + + @Override + public void execute() { + String message = null; + device_code = this.getDeviceCode(); + mode = this.itemProtocol.getMode(); + move = this.itemProtocol.getMove(); + action = this.itemProtocol.getAction(); + error = this.itemProtocol.getError(); + task = this.itemProtocol.getTask(); + heartbeat = this.itemProtocol.getHeartbeat(); + container_type = this.itemProtocol.getContainer_type(); + carrier_direction = this.itemProtocol.getCarrier_direction(); + + if (mode == 0) { + this.setIsonline(false); + message = "未联机"; + //有报警 + } else if (error != 0) { + this.setIserror(true); + message = "有报警"; + //无报警 + } else { + this.setIsonline(true); + this.setIserror(false); + message = ""; + Instruction instruction = null; + List toInstructions; + + //插拔轴机工位申请任务 + switch (mode) { + case 1: + log.debug("弃用(留作兼容)"); + break; + case 2: + log.info("待机"); + break; + case 3: + //收到行架任务任务号并且有货 + if (task > 0 && move == 1) { + Map map = new LinkedHashMap<>(); + map.put("to_command", 1); + this.writing(map); + } + break; + default: + log.info("未知模式"); + break; + } + } + last_mode = mode; + last_move = move; + last_action = action; + last_error = error; + last_task = task; + last_heartbeat = heartbeat; + last_to_command = to_command; + last_container_type = container_type; + last_carrier_direction = carrier_direction; + } + + public void writing(Map map) { + DeviceExecuteLogService logServer = SpringContextHolder.getBean("deviceExecuteLogServiceImpl"); + Map itemMap = new LinkedHashMap<>(); + map.forEach((key, value) -> { + if (ObjectUtil.isNotEmpty(value)) { + itemMap.put(getToParam() + key, value); + } + }); + if (ObjectUtil.isNotEmpty(itemMap)) { + this.control(itemMap); + logServer.deviceExecuteLog(this.getDevice().getDevice_code(), "", "", "下发多个电气信号:" + itemMap); + } + } + + public String getToParam() { + return this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + "."; + } + + /** + * 将扩展表中的字符串数据转换成集合 + */ + @Override + public List getExtraDeviceCodes(String extraName) { + String extraValue = (String) this.getDevice().getExtraValue().get(extraName); + if (StrUtil.isEmpty(extraValue)) { + return new ArrayList<>(); + } + String devicesString = extraValue.substring(1, extraValue.length() - 1); + List devicesList = new ArrayList<>(); + String[] devices = devicesString.split(","); + for (int i = 0; i < devices.length; i++) { + String s = devices[i].replace("\"", "").replace("\"", ""); + devicesList.add(s); + } + return devicesList; + } + + + @Override + public JSONObject getDeviceStatusName() { + JSONObject jo = new JSONObject(); + String mode = ""; + String action = ""; + String move = ""; + if (this.getMode() == 0) { + mode = "未联机"; + } else if (this.getMode() == 1) { + mode = "单机"; + } else if (this.getMode() == 2) { + mode = "联机"; + } else if (this.getMode() == 3) { + mode = "运行中"; + } + + if (this.getMove() == 0) { + move = "无货"; + jo.put("hasGoods", false); + } else if (this.getMove() == 1) { + move = "有货"; + jo.put("hasGoods", true); + } + jo.put("device_name", this.getDevice().getDevice_name()); + jo.put("mode", mode); + jo.put("move", move); + jo.put("action", action); + jo.put("isOnline", this.getIsonline()); + jo.put("isError", this.getIserror()); + return jo; + } + + @Override + public void setDeviceStatus(JSONObject data) { + + } + + public void writing(String param, String value) { + + String to_param = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + param; + //String opcservcerid = this.getDevice().getOpc_server_id(); +//Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + + itemMap.put(to_param, value); +// itemMap.put(to_param, Integer.parseInt(value)); + this.control(itemMap); + } +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_manipulator/ItemProtocol.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_manipulator/ItemProtocol.java new file mode 100644 index 000000000..22ea96b6b --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_manipulator/ItemProtocol.java @@ -0,0 +1,4 @@ +package org.nl.acs.device_driver.two_conveyor.sub_roll_manipulator; + +public class ItemProtocol { +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_manipulator/SubRollManipulatorDefination.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_manipulator/SubRollManipulatorDefination.java new file mode 100644 index 000000000..5f4847ce8 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_manipulator/SubRollManipulatorDefination.java @@ -0,0 +1,4 @@ +package org.nl.acs.device_driver.two_conveyor.sub_roll_manipulator; + +public class SubRollManipulatorDefination { +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_manipulator/SubRollManipulatorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_manipulator/SubRollManipulatorDeviceDriver.java new file mode 100644 index 000000000..489fcbea0 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/sub_roll_manipulator/SubRollManipulatorDeviceDriver.java @@ -0,0 +1,4 @@ +package org.nl.acs.device_driver.two_conveyor.sub_roll_manipulator; + +public class SubRollManipulatorDeviceDriver { +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/ApplyPlugPullSiteRequest.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/ApplyPlugPullSiteRequest.java index 0df1f9734..22a1f83b9 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/ApplyPlugPullSiteRequest.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/ApplyPlugPullSiteRequest.java @@ -10,6 +10,7 @@ public class ApplyPlugPullSiteRequest extends BaseRequest { * 1-申请套管 * 2-套管完成 * 3-拔轴完成 + * 4-缓存线已满,生成行架任务 */ private String type; @@ -19,9 +20,25 @@ public class ApplyPlugPullSiteRequest extends BaseRequest { private String task_code; /** - * 重量 + * 纸管1重量 */ - private String weight; + private String weight1; + + /** + * 纸管1规格 + */ + private String material1; + + /** + * 纸管2规格 + */ + private String material2; + + /** + * 纸管2重量 + */ + private String weight2; + /** * 条码 diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java index 00b7bdea1..f53e36461 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/TaskService.java @@ -494,4 +494,12 @@ public interface TaskService extends CommonService { * @return 指令终点 B */ String queryAssignedByDeviceCode(String device_code, String task_nextDeice_code); + + /** + * 根据编号查询 + * + * @param task_code + * @return AcsTask + */ + TaskDto findByTaskCode(String task_code); } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index f1a38fbc5..e842c7561 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -1458,6 +1458,20 @@ public class TaskServiceImpl extends CommonServiceImpl impleme return null; } + @Override + public TaskDto findByTaskCode(String task_code) { + + List list = new ArrayList<>(); + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + TaskDto task = iterator.next(); + if (StrUtil.equals(task.getTask_code(), task_code)) { + return task; + } + } + return null; + } + /** * 把多个字符串拼接的inst_nextDevice_code解析成集合 * diff --git a/acs2/nladmin-ui/src/views/acs/angle/index.vue b/acs2/nladmin-ui/src/views/acs/angle/index.vue index 3240cd309..2a0b13def 100644 --- a/acs2/nladmin-ui/src/views/acs/angle/index.vue +++ b/acs2/nladmin-ui/src/views/acs/angle/index.vue @@ -27,13 +27,41 @@ - + + + - + + + { + this.deviceList = data + }) + routeCurd.selectList().then(data => { + this.routeList = data + }) + getDicts().then(data => { + this.dicts = data + }) + }, methods: { // 钩子:在获取表格数据之前执行,false 则代表不获取数据 [CRUD.HOOK.beforeRefresh]() { return true }, + showStartStorage(val) { + let obj = {} + obj = this.deviceList.find((item) => { + return item.device_code === val + }) + if (obj.device_type === 'storage') { + this.start_flag = true + let storage_obj = {} + deviceCrud.queryStorageExtra(obj.device_code).then(data => { + storage_obj = data + const n1 = storage_obj.minY + const n2 = storage_obj.maxY + const m1 = storage_obj.minZ + const m2 = storage_obj.maxZ + const from_y = [] + const from_z = [] + for (let i = n1; i <= n2; i++) { + const y = {} + if (i < 10) { + y.id = '0' + i + } else { + y.id = i + } + y.value = i + '列' + from_y.push(y) + } + for (let i = m1; i <= m2; i++) { + const z = {} + if (i < 10) { + z.id = '0' + i + } else { + z.id = i + } + z.value = i + '层' + from_z.push(z) + } + this.fromYList = from_y + this.fromZList = from_z + this.form.from_x = storage_obj.tunnel + }) + } else { + this.start_flag = false + this.form.from_x = '' + this.form.from_y = '' + this.form.from_z = '' + } + this.isDisabled = false + }, updateIsOn(id, is_active) { crudAcsPointAngle.updateOn(id, is_active).then(res => { this.notify('保存成功', 'success') }).catch(err => { console.log(err.response.data.message) }) + }, + showEndStorage(val) { + let obj = {} + obj = this.deviceList.find((item) => { + return item.device_code === val + }) + if (obj.device_type === 'storage') { + this.end_flag = true + let storage_obj = {} + deviceCrud.queryStorageExtra(obj.device_code).then(data => { + storage_obj = data + const n1 = storage_obj.minY + const n2 = storage_obj.maxY + const m1 = storage_obj.minZ + const m2 = storage_obj.maxZ + const to_y = [] + const to_z = [] + for (let i = n1; i <= n2; i++) { + const y = {} + if (i < 10) { + y.id = '0' + i + } else { + y.id = i + } + y.value = i + '列' + to_y.push(y) + } + for (let i = m1; i <= m2; i++) { + const z = {} + if (i < 10) { + z.id = '0' + i + } else { + z.id = i + } + z.value = i + '层' + to_z.push(z) + } + this.toYList = to_y + this.toZList = to_z + this.form.to_x = storage_obj.tunnel + }) + } else { + this.end_flag = false + this.form.to_x = '' + this.form.to_y = '' + this.form.to_z = '' + } + this.isDisabled = false } } } From 2ce8ed9ae144a5c7bd85b1b88085b18ca9b1a8e8 Mon Sep 17 00:00:00 2001 From: lishuai <1793460677@qq.com> Date: Fri, 2 Feb 2024 14:34:06 +0800 Subject: [PATCH 07/21] =?UTF-8?q?fix=20:=20=E6=B5=8B=E8=AF=95=E6=B5=81?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FoldDiscSiteDefination.java | 4 +- .../UnBoxLableConveyorDeviceDriver.java | 83 +++++++++++++++++-- .../one/ApplyLabelingAndBindingRequest.java | 2 +- 3 files changed, 77 insertions(+), 12 deletions(-) diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/fold_disc_site/FoldDiscSiteDefination.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/fold_disc_site/FoldDiscSiteDefination.java index 83b4f4a0b..5f25a5629 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/fold_disc_site/FoldDiscSiteDefination.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/fold_disc_site/FoldDiscSiteDefination.java @@ -19,12 +19,12 @@ public class FoldDiscSiteDefination implements OpcDeviceDriverDefination { @Override public String getDriverName() { - return "叠盘机"; + return "叠盘机位"; } @Override public String getDriverDescription() { - return "叠盘机"; + return "叠盘机位"; } @Override diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/un_box_lable_conveyor/UnBoxLableConveyorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/un_box_lable_conveyor/UnBoxLableConveyorDeviceDriver.java index c67e6aff5..b3f615b27 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/un_box_lable_conveyor/UnBoxLableConveyorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/un_box_lable_conveyor/UnBoxLableConveyorDeviceDriver.java @@ -4,7 +4,6 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import lombok.Data; import lombok.RequiredArgsConstructor; @@ -18,17 +17,18 @@ import org.nl.acs.device_driver.FeedLmsRealFailed; import org.nl.acs.device_driver.RouteableDeviceDriver; import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; -import org.nl.acs.enums.StorageTypeEnum; +import org.nl.acs.ext.wms.data.one.ApplyLabelingAndBindingRequest; +import org.nl.acs.ext.wms.data.one.ApplyLabelingAndBindingResponse; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.history.ErrorUtil; import org.nl.acs.history.service.DeviceErrorLogService; -import org.nl.acs.history.service.dto.DeviceErrorLogDto; import org.nl.acs.history.service.impl.DeviceErrorLogServiceImpl; import org.nl.acs.instruction.domain.Instruction; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.opc.DeviceAppServiceImpl; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.route.service.dto.RouteLineDto; import org.nl.acs.task.enums.TaskStatusEnum; @@ -71,6 +71,8 @@ public class UnBoxLableConveyorDeviceDriver extends AbstractOpcDeviceDriver impl NDCAgvService agvService = SpringContextHolder.getBean(NDCAgvService.class); DeviceErrorLogService deviceErrorLogService = SpringContextHolder.getBean(DeviceErrorLogServiceImpl.class); + + DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); //当前指令 Instruction inst = null; @@ -192,11 +194,11 @@ public class UnBoxLableConveyorDeviceDriver extends AbstractOpcDeviceDriver impl } List toInstructions; + Instruction instruction = instructionService.findByCode(String.valueOf(task)); //空箱出库开盖位,申请开盖 if (mode == 7 && move == 1 && task > 0) { //不允许开盖,完成出库任务,自动去扫码位 - if (!applyUnbox()){ - Instruction instruction = instructionService.findByCode(String.valueOf(task)); + if (!applyUnbox(instruction)){ if (ObjectUtil.isNotEmpty(instruction)) { try { instructionService.finish(instruction); @@ -225,7 +227,7 @@ public class UnBoxLableConveyorDeviceDriver extends AbstractOpcDeviceDriver impl last_to_height =to_height; } - private Boolean applyUnbox() { + private Boolean applyUnbox(Instruction instruction) { Date date = new Date(); if (date.getTime() - this.require_apply_strangulation_time.getTime() < (long) this.instruction_require_time_out) { @@ -233,15 +235,20 @@ public class UnBoxLableConveyorDeviceDriver extends AbstractOpcDeviceDriver impl return false; } else { try { + ApplyLabelingAndBindingRequest applyLabelingAndBindingRequest = new ApplyLabelingAndBindingRequest(); JSONObject param = new JSONObject(); param.put("device_code", device_code); param.put("task", task); logServer.deviceExecuteLog(this.device_code, "", "", "木箱申请开盖任务,参数:" + param); - HttpResponse response = acsToWmsService.shipDeviceUpdate(param); - if (response == null || response.getStatus() == 200) { - logServer.deviceExecuteLog(this.device_code, "", "", "木箱申请开盖任务,接口返回:" + response.body()); + ApplyLabelingAndBindingResponse response = acsToWmsService.applyLabelingAndBindingRequest(applyLabelingAndBindingRequest); + if (response == null || response.getstatus() == 200) { + Map datas = response.getData(); + packagePLCData(datas,instruction); + this.setRequireSucess(true); return true; } + + } catch (Exception e) { e.printStackTrace(); } @@ -249,6 +256,64 @@ public class UnBoxLableConveyorDeviceDriver extends AbstractOpcDeviceDriver impl return false; } + private void packagePLCData(Map datas, Instruction instruction) { + String length = datas.get("length").toString(); + String weight = datas.get("weight").toString(); + String height = datas.get("height").toString(); + String printQty = datas.get("printQty").toString(); + String printDevice = datas.get("printDevice").toString(); + String bundleTimes = datas.get("bundleTimes").toString(); + String next_device_code = instruction.getNext_device_code(); + Device nextDevice = deviceAppService.findDeviceByCode(next_device_code); + String next_addr = nextDevice.getExtraValue().get("address").toString(); + + List list = new ArrayList(); + Map map = new HashMap(); + map.put("code", "to_task"); + map.put("value", task); + list.add(map); + Map map2 = new HashMap(); + map2.put("code", "to_container_type"); + map2.put("value", instruction.getVehicle_code()); + list.add(map2); + Map map3 = new HashMap(); + map3.put("code", "to_target"); + map3.put("value", next_addr); + list.add(map3); + Map map4 = new HashMap(); + map4.put("code", "to_leight"); + map4.put("value", length); + list.add(map4); + Map map5 = new HashMap(); + map5.put("code", "to_wedth"); + map5.put("value", weight); + list.add(map5); + Map map6 = new HashMap(); + map6.put("code", "to_height"); + map6.put("value", height); + list.add(map6); + Map map7 = new HashMap(); + map7.put("code", "to_print_qty"); + map7.put("value", printQty); + list.add(map7); + Map map9 = new HashMap(); + map9.put("code", "to_print_device"); + map9.put("value", printDevice); + list.add(map9); + Map map11 = new HashMap(); + map11.put("code", "to_binding_times"); + map11.put("value", bundleTimes); + list.add(map11); + try { + this.writing(list); + } catch (Exception e) { + message = "写入信号失败"; + } + this.setRequireSucess(true); + + } + + public boolean exe_error() { if (this.error == 0) { return true; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/ApplyLabelingAndBindingRequest.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/ApplyLabelingAndBindingRequest.java index d058547b1..35f041992 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/ApplyLabelingAndBindingRequest.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/data/one/ApplyLabelingAndBindingRequest.java @@ -9,7 +9,7 @@ public class ApplyLabelingAndBindingRequest extends BaseRequest { /** * 1:贴标、捆扎申请 * 2:烘箱 - * + * 3:开盖 */ private String type; From 9f25ba7b59fc3083cb4c6332d0ecbbee50ebd41b Mon Sep 17 00:00:00 2001 From: tuqiang <437016993@qq.com> Date: Fri, 2 Feb 2024 15:17:31 +0800 Subject: [PATCH 08/21] =?UTF-8?q?add:=E6=96=B0=E5=A2=9E=E8=A1=8C=E6=9E=B6-?= =?UTF-8?q?agv=E5=AF=B9=E6=8E=A5=E4=BD=8D=E9=A9=B1=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agv/ndctwo/AgvNdcTwoDeviceDriver.java | 241 ++++++-- .../PaperTubePickSiteDeviceDriver.java | 2 +- .../manipulator_agv_station/ItemProtocol.java | 67 +++ .../ManipulatorAgvStationDefination.java | 57 ++ .../ManipulatorAgvStationDeviceDriver.java | 198 +++++++ .../main/resources/config/application-dev.yml | 6 +- .../src/views/acs/device/config.vue | 4 +- .../device/driver/manipulator_agv_station.vue | 539 ++++++++++++++++++ 8 files changed, 1068 insertions(+), 46 deletions(-) create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/manipulator_agv_station/ItemProtocol.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/manipulator_agv_station/ManipulatorAgvStationDefination.java create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/manipulator_agv_station/ManipulatorAgvStationDeviceDriver.java create mode 100644 acs2/nladmin-ui/src/views/acs/device/driver/manipulator_agv_station.vue diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java index 894b0ed7b..c53147485 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java @@ -16,6 +16,7 @@ import org.nl.acs.device_driver.paper_tube_pick_site.PaperTubePickSiteDeviceDriv import org.nl.acs.device_driver.storage.standard_storage.StandardStorageDeviceDriver; import org.nl.acs.device_driver.driver.AbstractDeviceDriver; import org.nl.acs.device_driver.two_conveyor.hongxiang_conveyor.HongXiangStationDeviceDriver; +import org.nl.acs.device_driver.two_conveyor.manipulator_agv_station.ManipulatorAgvStationDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.instruction.domain.Instruction; @@ -131,7 +132,8 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic StandardInspectSiteDeviceDriver standardInspectSiteDeviceDriver; //烘箱对接位 HongXiangStationDeviceDriver hongXiangStationDeviceDriver; - + //行架-agv对接位 + ManipulatorAgvStationDeviceDriver manipulatorAgvStationDeviceDriver; if (phase == 0x02) { if (ObjectUtil.isEmpty(inst)) { @@ -239,6 +241,21 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic , standardInspectSiteDeviceDriver.getError(), ikey); } } + else if (device.getDeviceDriver() instanceof ManipulatorAgvStationDeviceDriver) { + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) device.getDeviceDriver(); + + try { + manipulatorAgvStationDeviceDriver.writing(2); + } catch (Exception e) { + e.printStackTrace(); + } + if ((manipulatorAgvStationDeviceDriver.getAction() == 1)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + ",动作信号:" + manipulatorAgvStationDeviceDriver.getAction() + "报警信号:" + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{},动作信号{} ,不满足取货条件,指令号{}", device_code, manipulatorAgvStationDeviceDriver.getAction(), ikey); + } + } else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); try { @@ -358,6 +375,21 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); } } + else if (device.getDeviceDriver() instanceof ManipulatorAgvStationDeviceDriver) { + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) device.getDeviceDriver(); + + try { + manipulatorAgvStationDeviceDriver.writing(3); + } catch (Exception e) { + e.printStackTrace(); + } + if ((manipulatorAgvStationDeviceDriver.getAction() == 1)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + ",动作信号:" + manipulatorAgvStationDeviceDriver.getAction() + "报警信号:" + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{},动作信号{} ,不满足取货条件,指令号{}", device_code, manipulatorAgvStationDeviceDriver.getAction(), ikey); + } + } else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); try { @@ -485,14 +517,30 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic } else { data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); } - } else if (device.getDeviceDriver() instanceof PaperTubePickSiteDeviceDriver) { - paperTubePickSiteDeviceDriver = (PaperTubePickSiteDeviceDriver) device.getDeviceDriver(); + } + else if (device.getDeviceDriver() instanceof ManipulatorAgvStationDeviceDriver) { + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) device.getDeviceDriver(); + try { - paperTubePickSiteDeviceDriver.writing(4); + manipulatorAgvStationDeviceDriver.writing(2); } catch (Exception e) { e.printStackTrace(); } - if (paperTubePickSiteDeviceDriver.getMove() == 0) { + if ((manipulatorAgvStationDeviceDriver.getAction() == 1)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + ",动作信号:" + manipulatorAgvStationDeviceDriver.getAction() + "报警信号:" + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{},动作信号{} ,不满足取货条件,指令号{}", device_code, manipulatorAgvStationDeviceDriver.getAction(), ikey); + } + } + else if (device.getDeviceDriver() instanceof PaperTubePickSiteDeviceDriver) { + paperTubePickSiteDeviceDriver = (PaperTubePickSiteDeviceDriver) device.getDeviceDriver(); + try { + paperTubePickSiteDeviceDriver.writing(2); + } catch (Exception e) { + e.printStackTrace(); + } + if (paperTubePickSiteDeviceDriver.getMove() == 1) { data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); } else { message = "设备号:" + device_code + "光电信号:" + paperTubePickSiteDeviceDriver.getMove() + ",动作信号:" + paperTubePickSiteDeviceDriver.getAction() + "报警信号:" + paperTubePickSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; @@ -503,7 +551,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); try { - hongXiangStationDeviceDriver.writing(0); + hongXiangStationDeviceDriver.writing(1); } catch (Exception e) { e.printStackTrace(); } @@ -608,29 +656,41 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic .build(); luceneExecuteLogService.deviceExecuteLog(logDto); } - } - else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { + } else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); try { hongXiangStationDeviceDriver.writing(0); } catch (Exception e) { e.printStackTrace(); } - if (hongXiangStationDeviceDriver.getMove() > 0) { + if (hongXiangStationDeviceDriver.getMove() == 0) { data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); } else { message = "设备号:" + device_code + "光电信号:" + hongXiangStationDeviceDriver.getMove() + ",动作信号:" + hongXiangStationDeviceDriver.getAction() + "报警信号:" + hongXiangStationDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, hongXiangStationDeviceDriver.getMove(), hongXiangStationDeviceDriver.getAction() , hongXiangStationDeviceDriver.getError(), ikey); } - } - else { + } else { data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); } + } else if (device.getDeviceDriver() instanceof ManipulatorAgvStationDeviceDriver) { + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) device.getDeviceDriver(); + + try { + manipulatorAgvStationDeviceDriver.writing(3); + } catch (Exception e) { + e.printStackTrace(); + } + if ((manipulatorAgvStationDeviceDriver.getAction() == 1)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + ",动作信号:" + manipulatorAgvStationDeviceDriver.getAction() + "报警信号:" + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{},动作信号{} ,不满足取货条件,指令号{}", device_code, manipulatorAgvStationDeviceDriver.getAction(), ikey); + } } else if (device.getDeviceDriver() instanceof PaperTubePickSiteDeviceDriver) { paperTubePickSiteDeviceDriver = (PaperTubePickSiteDeviceDriver) device.getDeviceDriver(); try { - paperTubePickSiteDeviceDriver.writing(5); + paperTubePickSiteDeviceDriver.writing(3); } catch (Exception e) { e.printStackTrace(); } @@ -641,31 +701,30 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, paperTubePickSiteDeviceDriver.getMove(), paperTubePickSiteDeviceDriver.getAction() , paperTubePickSiteDeviceDriver.getError(), ikey); } - } - } else if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { - standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); + } else if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { + standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); - try { - standardInspectSiteDeviceDriver.writing(1); - } catch (Exception e) { - e.printStackTrace(); - } - if ((standardInspectSiteDeviceDriver.getMove() == 1 && standardInspectSiteDeviceDriver.getAction() == 1 && standardInspectSiteDeviceDriver.getError() == 0)) { - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + try { + standardInspectSiteDeviceDriver.writing(1); + } catch (Exception e) { + e.printStackTrace(); + } + if ((standardInspectSiteDeviceDriver.getMove() == 1 && standardInspectSiteDeviceDriver.getAction() == 1 && standardInspectSiteDeviceDriver.getError() == 0)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + standardInspectSiteDeviceDriver.getMove() + ",动作信号:" + standardInspectSiteDeviceDriver.getAction() + "报警信号:" + standardInspectSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, standardInspectSiteDeviceDriver.getMove(), standardInspectSiteDeviceDriver.getAction() + , standardInspectSiteDeviceDriver.getError(), ikey); + } } else { - message = "设备号:" + device_code + "光电信号:" + standardInspectSiteDeviceDriver.getMove() + ",动作信号:" + standardInspectSiteDeviceDriver.getAction() + "报警信号:" + standardInspectSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; - log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, standardInspectSiteDeviceDriver.getMove(), standardInspectSiteDeviceDriver.getAction() - , standardInspectSiteDeviceDriver.getError(), ikey); + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content("agvphase:" + phase + "反馈:" + data) + .build(); + luceneExecuteLogService.deviceExecuteLog(logDto); } - } else { - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(device_code) - .content("agvphase:" + phase + "反馈:" + data) - .build(); - luceneExecuteLogService.deviceExecuteLog(logDto); } - } //(Itype=1,上传称重数据) else if (phase == 0x64) { @@ -737,17 +796,42 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic } else if (device.getDeviceDriver() instanceof PaperTubePickSiteDeviceDriver) { paperTubePickSiteDeviceDriver = (PaperTubePickSiteDeviceDriver) device.getDeviceDriver(); - if (paperTubePickSiteDeviceDriver.getMove() == 0) + try { + paperTubePickSiteDeviceDriver.writing(4); + } catch (Exception e) { + e.printStackTrace(); + } + if (paperTubePickSiteDeviceDriver.getMove() == 0) { data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + paperTubePickSiteDeviceDriver.getMove() + ",动作信号:" + paperTubePickSiteDeviceDriver.getAction() + "报警信号:" + paperTubePickSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, paperTubePickSiteDeviceDriver.getMove(), paperTubePickSiteDeviceDriver.getAction() + , paperTubePickSiteDeviceDriver.getError(), ikey); + } + } + else if (device.getDeviceDriver() instanceof ManipulatorAgvStationDeviceDriver) { + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) device.getDeviceDriver(); + + try { + manipulatorAgvStationDeviceDriver.writing(4); + } catch (Exception e) { + e.printStackTrace(); + } + if ((manipulatorAgvStationDeviceDriver.getAction() == 1)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + ",动作信号:" + manipulatorAgvStationDeviceDriver.getAction() + "报警信号:" + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{},动作信号{} ,不满足取货条件,指令号{}", device_code, manipulatorAgvStationDeviceDriver.getAction(), ikey); + } } else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); try { - hongXiangStationDeviceDriver.writing(0); + hongXiangStationDeviceDriver.writing(1); } catch (Exception e) { e.printStackTrace(); } - if (hongXiangStationDeviceDriver.getMove() > 0) { + if (hongXiangStationDeviceDriver.getMove() == 0) { data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); } else { message = "设备号:" + device_code + "光电信号:" + hongXiangStationDeviceDriver.getMove() + ",动作信号:" + hongXiangStationDeviceDriver.getAction() + "报警信号:" + hongXiangStationDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; @@ -826,6 +910,21 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); this.setPhase(phase); } + else if (device.getDeviceDriver() instanceof ManipulatorAgvStationDeviceDriver) { + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) device.getDeviceDriver(); + + try { + manipulatorAgvStationDeviceDriver.writing(5); + } catch (Exception e) { + e.printStackTrace(); + } + if ((manipulatorAgvStationDeviceDriver.getAction() == 1)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + ",动作信号:" + manipulatorAgvStationDeviceDriver.getAction() + "报警信号:" + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{},动作信号{} ,不满足取货条件,指令号{}", device_code, manipulatorAgvStationDeviceDriver.getAction(), ikey); + } + } else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); try { @@ -841,6 +940,21 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic , hongXiangStationDeviceDriver.getError(), ikey); } } + else if (device.getDeviceDriver() instanceof PaperTubePickSiteDeviceDriver) { + paperTubePickSiteDeviceDriver = (PaperTubePickSiteDeviceDriver) device.getDeviceDriver(); + try { + paperTubePickSiteDeviceDriver.writing(5); + } catch (Exception e) { + e.printStackTrace(); + } + if (paperTubePickSiteDeviceDriver.getMove() > 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + paperTubePickSiteDeviceDriver.getMove() + ",动作信号:" + paperTubePickSiteDeviceDriver.getAction() + "报警信号:" + paperTubePickSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, paperTubePickSiteDeviceDriver.getMove(), paperTubePickSiteDeviceDriver.getAction() + , paperTubePickSiteDeviceDriver.getError(), ikey); + } + } else if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) { standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver(); standardInspectSiteDeviceDriver.writing(0); @@ -911,14 +1025,29 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic this.setPhase(phase); } - else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { - hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); + else if (device.getDeviceDriver() instanceof ManipulatorAgvStationDeviceDriver) { + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) device.getDeviceDriver(); + try { - hongXiangStationDeviceDriver.writing(0); + manipulatorAgvStationDeviceDriver.writing(4); } catch (Exception e) { e.printStackTrace(); } - if (hongXiangStationDeviceDriver.getMove() > 0) { + if ((manipulatorAgvStationDeviceDriver.getAction() == 1)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + ",动作信号:" + manipulatorAgvStationDeviceDriver.getAction() + "报警信号:" + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{},动作信号{} ,不满足取货条件,指令号{}", device_code, manipulatorAgvStationDeviceDriver.getAction(), ikey); + } + } + else if (device.getDeviceDriver() instanceof HongXiangStationDeviceDriver) { + hongXiangStationDeviceDriver = (HongXiangStationDeviceDriver) device.getDeviceDriver(); + try { + hongXiangStationDeviceDriver.writing(1); + } catch (Exception e) { + e.printStackTrace(); + } + if (hongXiangStationDeviceDriver.getMove() == 0) { data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); } else { message = "设备号:" + device_code + "光电信号:" + hongXiangStationDeviceDriver.getMove() + ",动作信号:" + hongXiangStationDeviceDriver.getAction() + "报警信号:" + hongXiangStationDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; @@ -926,6 +1055,21 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic , hongXiangStationDeviceDriver.getError(), ikey); } } + else if (device.getDeviceDriver() instanceof PaperTubePickSiteDeviceDriver) { + paperTubePickSiteDeviceDriver = (PaperTubePickSiteDeviceDriver) device.getDeviceDriver(); + try { + paperTubePickSiteDeviceDriver.writing(4); + } catch (Exception e) { + e.printStackTrace(); + } + if (paperTubePickSiteDeviceDriver.getMove() == 0) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + "光电信号:" + paperTubePickSiteDeviceDriver.getMove() + ",动作信号:" + paperTubePickSiteDeviceDriver.getAction() + "报警信号:" + paperTubePickSiteDeviceDriver.getError() + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{}当前光电信号{},动作信号{} ,错误信号{},不满足取货条件,指令号{}", device_code, paperTubePickSiteDeviceDriver.getMove(), paperTubePickSiteDeviceDriver.getAction() + , paperTubePickSiteDeviceDriver.getError(), ikey); + } + } else { data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); } @@ -991,10 +1135,25 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic this.setPhase(phase); } + else if (device.getDeviceDriver() instanceof ManipulatorAgvStationDeviceDriver) { + manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) device.getDeviceDriver(); + + try { + manipulatorAgvStationDeviceDriver.writing(5); + } catch (Exception e) { + e.printStackTrace(); + } + if ((manipulatorAgvStationDeviceDriver.getAction() == 1)) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else { + message = "设备号:" + device_code + ",动作信号:" + manipulatorAgvStationDeviceDriver.getAction() + "报警信号:" + ",指令号:" + ikey + "不满足取货条件"; + log.info("设备{},动作信号{} ,不满足取货条件,指令号{}", device_code, manipulatorAgvStationDeviceDriver.getAction(), ikey); + } + } else if (device.getDeviceDriver() instanceof PaperTubePickSiteDeviceDriver) { paperTubePickSiteDeviceDriver = (PaperTubePickSiteDeviceDriver) device.getDeviceDriver(); try { - paperTubePickSiteDeviceDriver.writing(0); + paperTubePickSiteDeviceDriver.writing(5); } catch (Exception e) { e.printStackTrace(); } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/paper_tube_pick_site/PaperTubePickSiteDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/paper_tube_pick_site/PaperTubePickSiteDeviceDriver.java index cd0105ac6..91a18ba9d 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/paper_tube_pick_site/PaperTubePickSiteDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/paper_tube_pick_site/PaperTubePickSiteDeviceDriver.java @@ -31,7 +31,7 @@ import java.util.List; import java.util.Map; /** - * + * 纸管抓取位 */ @Slf4j @Data diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/manipulator_agv_station/ItemProtocol.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/manipulator_agv_station/ItemProtocol.java new file mode 100644 index 000000000..311cf9a33 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/manipulator_agv_station/ItemProtocol.java @@ -0,0 +1,67 @@ +package org.nl.acs.device_driver.two_conveyor.manipulator_agv_station; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Data +public class ItemProtocol { + public static String item_heartbeat = "heartbeat"; + public static String item_mode = "mode"; + public static String item_action = "action"; + + public static String item_to_command = "to_command"; + + private ManipulatorAgvStationDeviceDriver driver; + + public ItemProtocol(ManipulatorAgvStationDeviceDriver driver){ + this.driver=driver; + } + + public int getItem_heartbeat(){ + return this.getOpcIntegerValue(item_heartbeat); + } ; + public int getItem_mode(){ + return this.getOpcIntegerValue(item_mode); + } + public int getItem_action(){ + return this.getOpcIntegerValue(item_action); + } + + Boolean isonline; + + public int getOpcIntegerValue(String protocol) { + Integer value = this.driver.getIntegeregerValue(protocol); + if (value == null) { + setIsonline(false); + } else { + setIsonline(true); + return value; + } + return 0; + + } + + public static List getReadableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_heartbeat, "心跳", "DB19.B0")); + list.add(new ItemDto(item_mode, "工作模式", "DB19.B1")); + list.add(new ItemDto(item_action, "取放信号", "DB19.B3")); + return list; + } + + public static List getWriteableItemDtos() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_to_command, "下发命令", "DB20.W0")); + return list; + } + + @Override + public String toString() { + return ""; + } +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/manipulator_agv_station/ManipulatorAgvStationDefination.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/manipulator_agv_station/ManipulatorAgvStationDefination.java new file mode 100644 index 000000000..a6605ec17 --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/manipulator_agv_station/ManipulatorAgvStationDefination.java @@ -0,0 +1,57 @@ +package org.nl.acs.device_driver.two_conveyor.manipulator_agv_station; + +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; +import org.nl.acs.device.domain.Device; +import org.nl.acs.device.enums.DeviceType; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; +import org.springframework.stereotype.Service; + + +import java.util.LinkedList; +import java.util.List; + +@Service +public class ManipulatorAgvStationDefination implements OpcDeviceDriverDefination { + @Override + public String getDriverCode() { + return "manipulator_agv_station"; + } + + @Override + public String getDriverName() { + return "行架-agv对接位"; + } + + @Override + public String getDriverDescription() { + return "行架-agv对接位"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new ManipulatorAgvStationDeviceDriver()).setDevice(device).setDriverDefination(this); + } + + @Override + public Class getDeviceDriverType() { + return ManipulatorAgvStationDeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList(); + types.add(DeviceType.conveyor); + return types; + } + + @Override + public List getReadableItemDtos() { + return ItemProtocol.getReadableItemDtos(); + } + + @Override + public List getWriteableItemDtos() { + return ItemProtocol.getWriteableItemDtos(); + } +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/manipulator_agv_station/ManipulatorAgvStationDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/manipulator_agv_station/ManipulatorAgvStationDeviceDriver.java new file mode 100644 index 000000000..ea0fcff4b --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/manipulator_agv_station/ManipulatorAgvStationDeviceDriver.java @@ -0,0 +1,198 @@ +package org.nl.acs.device_driver.two_conveyor.manipulator_agv_station; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device.domain.Device; +import org.nl.acs.device.service.DeviceExtraService; +import org.nl.acs.device.service.impl.DeviceExtraServiceImpl; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.FeedLmsRealFailed; +import org.nl.acs.device_driver.RouteableDeviceDriver; +import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; +import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.history.service.DeviceErrorLogService; +import org.nl.acs.history.service.impl.DeviceErrorLogServiceImpl; +import org.nl.acs.instruction.domain.Instruction; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.log.service.DeviceExecuteLogService; +import org.nl.acs.monitor.DeviceStageMonitor; +import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.opc.DeviceAppServiceImpl; +import org.nl.acs.route.service.RouteLineService; +import org.nl.acs.route.service.impl.RouteLineServiceImpl; +import org.nl.acs.task.service.TaskService; +import org.nl.config.SpringContextHolder; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +/** + * 行架-agv对接位 + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class ManipulatorAgvStationDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver, DeviceStageMonitor, FeedLmsRealFailed { + protected ItemProtocol itemProtocol = new ItemProtocol(this); + @Autowired + DeviceExecuteLogService logServer = SpringContextHolder.getBean("deviceExecuteLogServiceImpl"); + @Autowired + TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); + @Autowired + InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); + @Autowired + DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); + @Autowired + RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineServiceImpl.class); + @Autowired + DeviceExtraService deviceExtraService = SpringContextHolder.getBean(DeviceExtraServiceImpl.class); + @Autowired + DeviceErrorLogService errorLogServer = SpringContextHolder.getBean(DeviceErrorLogServiceImpl.class); + + private Date instruction_require_time = new Date(); + private Date instruction_finished_time = new Date(); + private Date instruction_apply_time = new Date(); + private int instruction_require_time_out = 3000; + + //工作模式 + int mode = 0; + int last_mode = 0; + //动作信号 + int action = 0; + int last_action = 0; + int heartbeat = 0; + int last_heartbeat = 0; + + + int to_command = 0; + int last_to_command = 0; + + + Boolean isonline = true; + + Boolean iserror = false; + + /** + * 1-执行任务;2-取货完成;3-放货完成; + */ + int flag; + + String device_code; + + @Override + public Device getDevice() { + return this.device; + } + + /** + * 请求成功标记 + */ + Boolean requireSucess = false; + + @Override + public void execute() { + String message = null; + try { + device_code = this.getDeviceCode(); + mode = this.itemProtocol.getItem_mode(); + action = this.itemProtocol.getItem_action(); + if (mode != last_mode) { + this.setRequireSucess(false); + if (mode == 2) { + this.writing(0); + } + } + } catch (Exception var17) { + return; + } + + if (!this.itemProtocol.getIsonline()) { + this.setIsonline(false); + this.setIserror(true); + message = "信号量同步异常"; + //未联机 + } else if (mode == 0) { + this.setIsonline(false); + this.setIserror(true); + message = "未联机"; + //有报警 + } else { + this.setIsonline(true); + this.setIserror(false); + message = ""; + Instruction instruction = null; + List toInstructions; + switch (mode) { + case 1: + log.debug("设备运转模式:等待工作"); + return; + case 2: + break; + case 3: + break; + default: + break; + } + + switch (flag) { + //取货完成 + case 1: + writing(3); + return; + //放货完成 + case 2: + writing(5); + return; + default: + break; + } + + } + last_mode = mode; + last_action = action; + last_heartbeat = heartbeat; + last_to_command = to_command; + + } + + protected void thingToNothing() { + this.setRequireSucess(false); + } + + public void writing(int command) { + String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + org.nl.acs.device_driver.two_conveyor.hongxiang_conveyor.ItemProtocol.item_to_command; + //String opcservcerid = this.getDevice().getOpc_server_id(); +//Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_command, command); + this.control(itemMap); + } + + @Override + public JSONObject getDeviceStatusName() { + JSONObject jo = new JSONObject(); + String mode = ""; + String action = ""; + jo.put("device_name", this.getDevice().getDevice_name()); + jo.put("mode", "联机"); + jo.put("action", action); + jo.put("isOnline", true); + jo.put("isError", this.getIserror()); + return jo; + } + + @Override + public void setDeviceStatus(JSONObject data) { + + } + + @Override + public JSONObject feedLmsRealFailedInfo() { + return null; + } +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml index 372569df2..ae420fba8 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml +++ b/acs2/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml @@ -9,11 +9,11 @@ spring: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy # url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:stand_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true -# url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:lzhl_two_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:lzhl_two_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:lzhl_two_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true +# url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:lzhl_two_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} # password: ${DB_PWD:Root.123456} - password: ${DB_PWD:root} + password: ${DB_PWD:p@ssw0rd} # 初始连接数 initial-size: 5 # 最小连接数 diff --git a/acs2/nladmin-ui/src/views/acs/device/config.vue b/acs2/nladmin-ui/src/views/acs/device/config.vue index 31c7a4d3d..8248b018d 100644 --- a/acs2/nladmin-ui/src/views/acs/device/config.vue +++ b/acs2/nladmin-ui/src/views/acs/device/config.vue @@ -114,6 +114,7 @@ import pull_head_manipulator from '@/views/acs/device/driver/pull_head_manipulat import pull_tail_manipulator from '@/views/acs/device/driver/pull_tail_manipulator.vue' import green_foil_machine_button from '@/views/acs/device/driver/green_foil_machine_button.vue' import inflatable_shaft_library from '@/views/acs/device/driver/inflatable_shaft_library.vue' +import manipulator_agv_station from '@/views/acs/device/driver/manipulator_agv_station.vue' import subvolume_weighing_station from '@/views/acs/device/driver/subvolume_weighing_station.vue' import waste_foil_weighing_station from '@/views/acs/device/driver/waste_foil_weighing_station.vue' import blank_manipulator from '@/views/acs/device/driver/blank_manipulator.vue' @@ -184,7 +185,8 @@ export default { inflatable_shaft_library, green_foil_machine_button, xg_agv_car, - oven_inspect_site + oven_inspect_site, + manipulator_agv_station }, dicts: ['device_type'], mixins: [crud], diff --git a/acs2/nladmin-ui/src/views/acs/device/driver/manipulator_agv_station.vue b/acs2/nladmin-ui/src/views/acs/device/driver/manipulator_agv_station.vue new file mode 100644 index 000000000..b807fccae --- /dev/null +++ b/acs2/nladmin-ui/src/views/acs/device/driver/manipulator_agv_station.vue @@ -0,0 +1,539 @@ + + + + + From a85c88139b0ffdee1105727f4eee1a5f17a70293 Mon Sep 17 00:00:00 2001 From: ludj Date: Fri, 2 Feb 2024 15:41:34 +0800 Subject: [PATCH 09/21] =?UTF-8?q?rev:=E7=A7=BB=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acs/address/rest/AddressController.java | 7 ------- .../acs/address/service/dto/AddressDto.java | 11 +---------- .../service/dto/AddressQueryParam.java | 6 ------ .../nl/acs/common/base/CommonFinalParam.java | 1 - .../CustomerStragetyCacheService.java | 1 - .../custompolicy/WaitingInstructionDeque.java | 5 ----- .../acs/custompolicy/domain/CustomPolicy.java | 4 ---- .../rest/CustomPolicyController.java | 10 ---------- .../server/CustomPolicyService.java | 1 - .../server/impl/CustomPolicyServiceImpl.java | 3 --- .../device/rest/DeviceAssignedController.java | 2 -- .../nl/acs/device/rest/DeviceController.java | 1 - .../device/rest/DeviceDbitemController.java | 4 ---- .../rest/DeviceErpmappingController.java | 8 -------- .../device/rest/DeviceExtraController.java | 3 --- .../device/rest/DeviceRunpointController.java | 5 ----- .../device/rest/DeviceisonlineController.java | 7 ------- .../service/dto/AcsDeviceErpmappingDto.java | 9 +-------- .../device/service/dto/DeviceDbitemDto.java | 9 +-------- .../service/dto/DeviceDbitemQueryParam.java | 6 ------ .../nl/acs/device/service/dto/DeviceDto.java | 11 ++--------- .../dto/DeviceErpmappingQueryParam.java | 7 ------- .../device/service/dto/DeviceExtraDto.java | 1 - .../device/service/dto/DeviceQueryParam.java | 6 ------ .../device/service/dto/DeviceRunpointDto.java | 8 +------- .../service/dto/DeviceRunpointQueryParam.java | 6 ------ .../device/service/dto/DeviceisonlineDto.java | 9 +-------- .../service/dto/DeviceisonlineQueryParam.java | 6 ------ .../impl/DeviceErpmappingServiceImpl.java | 16 +++++++--------- .../service/impl/DeviceExtraServiceImpl.java | 15 ++++++--------- .../service/impl/DeviceServiceImpl.java | 8 -------- .../org/nl/acs/opc/OpcServerServiceImpl.java | 2 -- .../org/nl/acs/plc/service/OpcPlcService.java | 3 +-- .../plc/service/impl/OpcPlcServiceImpl.java | 19 +++++++------------ 34 files changed, 28 insertions(+), 192 deletions(-) diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/rest/AddressController.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/rest/AddressController.java index 02927bb23..1908f1bdf 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/rest/AddressController.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/rest/AddressController.java @@ -1,7 +1,5 @@ package org.nl.acs.address.rest; - - import lombok.RequiredArgsConstructor; import org.nl.acs.address.service.AddressService; import org.nl.acs.address.service.dto.AddressDto; @@ -29,14 +27,12 @@ public class AddressController { @GetMapping @Log("查询接口方法地址") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { return new ResponseEntity<>(addressService.queryAll(whereJson, page), HttpStatus.OK); } @PostMapping @Log("新增接口方法地址") - public ResponseEntity create(@Validated @RequestBody AddressDto dto) { addressService.create(dto); return new ResponseEntity<>(HttpStatus.CREATED); @@ -44,14 +40,12 @@ public class AddressController { @PutMapping @Log("修改接口方法地址") - public ResponseEntity update(@Validated @RequestBody AddressDto dto) { addressService.update(dto); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除接口方法地址") - @DeleteMapping public ResponseEntity delete(@RequestBody String[] ids) { addressService.deleteAll(ids); @@ -59,7 +53,6 @@ public class AddressController { } @Log("导出接口方法地址") - @GetMapping(value = "/download") public void download(HttpServletResponse response, @RequestParam Map whereJson) throws IOException { addressService.download(addressService.queryAll(whereJson), response); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/service/dto/AddressDto.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/service/dto/AddressDto.java index b4893a78a..5b6faa312 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/service/dto/AddressDto.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/service/dto/AddressDto.java @@ -1,17 +1,8 @@ package org.nl.acs.address.service.dto; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.EqualsAndHashCode; +import lombok.*; import lombok.experimental.Accessors; - import java.io.Serializable; -import java.util.Date; -import java.sql.Timestamp; - - /** * @author jiaolm diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/service/dto/AddressQueryParam.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/service/dto/AddressQueryParam.java index 8600eb053..77f621a57 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/service/dto/AddressQueryParam.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/address/service/dto/AddressQueryParam.java @@ -3,12 +3,6 @@ package org.nl.acs.address.service.dto; import lombok.Getter; import lombok.Setter; -import java.util.List; -import java.util.Date; - -import org.nl.common.annotation.Query; -import org.springframework.format.annotation.DateTimeFormat; - /** * @author jiaolm * @date 2023-05-10 diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/common/base/CommonFinalParam.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/common/base/CommonFinalParam.java index f5ba681d1..68ca91154 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/common/base/CommonFinalParam.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/common/base/CommonFinalParam.java @@ -5,7 +5,6 @@ package org.nl.acs.common.base; import lombok.Data; -import org.springframework.stereotype.Component; @Data public class CommonFinalParam { diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/CustomerStragetyCacheService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/CustomerStragetyCacheService.java index c1f2bbf5c..7ae5ad02e 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/CustomerStragetyCacheService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/CustomerStragetyCacheService.java @@ -1,7 +1,6 @@ package org.nl.acs.custompolicy; import org.nl.acs.auto.initial.ApplicationAutoInitial; - import java.util.HashMap; import java.util.Map; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/WaitingInstructionDeque.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/WaitingInstructionDeque.java index 89561654b..58b6f6562 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/WaitingInstructionDeque.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/WaitingInstructionDeque.java @@ -5,12 +5,7 @@ import cn.hutool.core.util.StrUtil; import org.nl.acs.instruction.domain.Instruction; import org.nl.acs.instruction.enums.InstructionStatusEnum; import org.nl.acs.instruction.service.InstructionService; -import org.nl.acs.log.service.DeviceExecuteLogService; -import org.nl.acs.opc.ObjectUtl; -import org.nl.acs.route.service.RouteLineService; -import org.nl.acs.route.service.impl.RouteLineServiceImpl; import org.nl.config.SpringContextHolder; -import org.springframework.beans.factory.annotation.Autowired; import java.util.Iterator; import java.util.LinkedList; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/domain/CustomPolicy.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/domain/CustomPolicy.java index 791c97809..45e45b325 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/domain/CustomPolicy.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/domain/CustomPolicy.java @@ -1,14 +1,10 @@ package org.nl.acs.custompolicy.domain; -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; - import lombok.*; import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; -import javax.validation.constraints.NotBlank; import java.io.Serializable; import java.util.Date; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/rest/CustomPolicyController.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/rest/CustomPolicyController.java index 802954a0e..9a544a6fa 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/rest/CustomPolicyController.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/rest/CustomPolicyController.java @@ -1,11 +1,8 @@ package org.nl.acs.custompolicy.rest; - import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.nl.acs.address.service.dto.AddressDto; -import org.nl.acs.agv.server.MagicAgvService; import org.nl.acs.custompolicy.server.CustomPolicyService; import org.nl.acs.custompolicy.server.dto.CustomPolicyDTO; import org.nl.acs.custompolicy.server.vo.CustomPolicyPlantVO; @@ -31,14 +28,12 @@ public class CustomPolicyController { @GetMapping @Log("查询自定义策略") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { return new ResponseEntity<>(customPolicyService.queryAll(whereJson, page), HttpStatus.OK); } @PostMapping @Log("新增自定义策略基础信息") - public ResponseEntity create(@Validated @RequestBody CustomPolicyDTO dto) { customPolicyService.create(dto); return new ResponseEntity<>(HttpStatus.CREATED); @@ -53,7 +48,6 @@ public class CustomPolicyController { } @Log("删除自定义策略") - @DeleteMapping public ResponseEntity delete(@RequestBody String[] ids) { customPolicyService.deleteAll(ids); @@ -63,7 +57,6 @@ public class CustomPolicyController { @PostMapping("/plantAdd") @Log("新增自定义策略") - public ResponseEntity createPlant(@RequestBody CustomPolicyPlantVO customPolicyPlantVO) { customPolicyService.createPlant(customPolicyPlantVO); return new ResponseEntity<>(HttpStatus.CREATED); @@ -71,14 +64,12 @@ public class CustomPolicyController { @GetMapping("/plantList") @Log("自定义策略列表") - public ResponseEntity plantList(@RequestParam Long id) { return new ResponseEntity<>(customPolicyService.plantList(id), HttpStatus.OK); } @GetMapping("/updateOn") @Log("是否启用") - public ResponseEntity updateOn(@RequestParam Long id, @RequestParam Integer is_on) { customPolicyService.updateOn(id, is_on); return new ResponseEntity<>(HttpStatus.OK); @@ -87,7 +78,6 @@ public class CustomPolicyController { @GetMapping("/getStrategy") @Log("自定义策略列表") - public ResponseEntity updateOn() { List list = customPolicyService.findDeviceStrategyOption(); return new ResponseEntity<>(list, HttpStatus.OK); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/server/CustomPolicyService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/server/CustomPolicyService.java index 1d4bebb62..abf4ab228 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/server/CustomPolicyService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/server/CustomPolicyService.java @@ -2,7 +2,6 @@ package org.nl.acs.custompolicy.server; import org.nl.acs.common.base.CommonService; import org.nl.acs.common.base.PageInfo; -import org.nl.acs.custompolicy.DeviceStrategy; import org.nl.acs.custompolicy.domain.CustomPolicy; import org.nl.acs.custompolicy.server.dto.CustomPolicyDTO; import org.nl.acs.custompolicy.server.vo.CustomPolicyPlantVO; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/server/impl/CustomPolicyServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/server/impl/CustomPolicyServiceImpl.java index 1638e092a..f40e27ad7 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/server/impl/CustomPolicyServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/custompolicy/server/impl/CustomPolicyServiceImpl.java @@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import jodd.util.StringUtil; import lombok.AllArgsConstructor; - import org.nl.acs.auto.initial.ApplicationAutoInitial; import org.nl.acs.common.base.PageInfo; import org.nl.acs.common.base.impl.CommonServiceImpl; @@ -19,7 +18,6 @@ import org.nl.acs.custompolicy.server.dto.CustomPolicyDTO; import org.nl.acs.custompolicy.server.dto.CustomPolicyPlantDTO; import org.nl.acs.custompolicy.server.mapper.CustomPolicyMapper; import org.nl.acs.custompolicy.server.vo.CustomPolicyPlantVO; -import org.nl.acs.task.TaskInstructionLock; import org.nl.acs.utils.ConvertUtil; import org.nl.acs.utils.PageUtil; import org.nl.common.utils.SecurityUtils; @@ -173,7 +171,6 @@ public class CustomPolicyServiceImpl extends CommonServiceImpl(deviceDbitemService.queryAll(query, pageable), HttpStatus.OK); } @PostMapping @Log("新增设备DB项") - public ResponseEntity create(@Validated @RequestBody DeviceDbitemDto resources) { return new ResponseEntity<>(deviceDbitemService.insert(resources), HttpStatus.CREATED); } @PutMapping @Log("修改设备DB项") - public ResponseEntity update(@Validated @RequestBody DeviceDbitemDto resources) { deviceDbitemService.updateById(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); @@ -50,7 +47,6 @@ public class DeviceDbitemController { @DeleteMapping @Log("删除设备DB项") - public ResponseEntity delete(@RequestBody Set ids) { deviceDbitemService.removeByIds(ids); return new ResponseEntity<>(HttpStatus.OK); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceErpmappingController.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceErpmappingController.java index 0efc7ec8b..cc1d26cad 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceErpmappingController.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceErpmappingController.java @@ -21,7 +21,6 @@ import java.util.Map; **/ @RestController @RequiredArgsConstructor - @RequestMapping("/api/acsDeviceErpmapping") public class DeviceErpmappingController { @@ -30,14 +29,11 @@ public class DeviceErpmappingController { @GetMapping @Log("查询设备-ERP映射") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { return new ResponseEntity<>(acsDeviceErpmappingService.queryAll(whereJson, page), HttpStatus.OK); } - @PostMapping @Log("新增设备-ERP映射") - public ResponseEntity create(@Validated @RequestBody AcsDeviceErpmappingDto dto) { acsDeviceErpmappingService.create(dto); return new ResponseEntity<>(HttpStatus.CREATED); @@ -45,22 +41,18 @@ public class DeviceErpmappingController { @PutMapping @Log("修改设备-ERP映射") - public ResponseEntity update(@Validated @RequestBody AcsDeviceErpmappingDto dto) { acsDeviceErpmappingService.update(dto); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @Log("删除设备-ERP映射") - @DeleteMapping public ResponseEntity delete(@RequestBody String[] ids) { acsDeviceErpmappingService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); } - @Log("导出设备-ERP映射") - @GetMapping(value = "/download") public void download(HttpServletResponse response, @RequestParam Map whereJson) throws IOException { acsDeviceErpmappingService.download(acsDeviceErpmappingService.queryAll(whereJson), response); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceExtraController.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceExtraController.java index f28f1b382..54571672b 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceExtraController.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceExtraController.java @@ -36,14 +36,12 @@ public class DeviceExtraController { @PostMapping @Log("新增设备扩展") - public ResponseEntity create(@Validated @RequestBody DeviceExtraDto resources) { return new ResponseEntity<>(deviceExtraService.insert(resources), HttpStatus.CREATED); } @PutMapping @Log("修改设备扩展") - public ResponseEntity update(@Validated @RequestBody DeviceExtraDto resources) { deviceExtraService.updateById(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); @@ -51,7 +49,6 @@ public class DeviceExtraController { @DeleteMapping @Log("删除设备扩展") - public ResponseEntity delete(@RequestBody Set ids) { deviceExtraService.removeByIds(ids); return new ResponseEntity<>(HttpStatus.OK); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceRunpointController.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceRunpointController.java index ebb71be1d..0fae6b0ba 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceRunpointController.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceRunpointController.java @@ -20,7 +20,6 @@ import java.util.Set; **/ @RestController @RequiredArgsConstructor - @RequestMapping("/api/deviceRunpoint") public class DeviceRunpointController { @@ -28,21 +27,18 @@ public class DeviceRunpointController { @GetMapping @Log("查询设备点位") - public ResponseEntity query(DeviceRunpointQueryParam query, Pageable pageable) { return new ResponseEntity<>(deviceRunpointService.queryAll(query, pageable), HttpStatus.OK); } @PostMapping @Log("新增设备点位") - public ResponseEntity create(@Validated @RequestBody DeviceRunpointDto resources) { return new ResponseEntity<>(deviceRunpointService.insert(resources), HttpStatus.CREATED); } @PutMapping @Log("修改设备点位") - public ResponseEntity update(@Validated @RequestBody DeviceRunpointDto resources) { deviceRunpointService.updateById(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); @@ -50,7 +46,6 @@ public class DeviceRunpointController { @DeleteMapping @Log("删除设备点位") - public ResponseEntity delete(@RequestBody Set ids) { deviceRunpointService.removeByIds(ids); return new ResponseEntity<>(HttpStatus.OK); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceisonlineController.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceisonlineController.java index d6278b231..3cf784cf0 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceisonlineController.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/rest/DeviceisonlineController.java @@ -10,8 +10,6 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; - - import java.util.Set; /** @@ -20,7 +18,6 @@ import java.util.Set; **/ @RestController @RequiredArgsConstructor - @RequestMapping("/api/deviceisonline") public class DeviceisonlineController { @@ -28,21 +25,18 @@ public class DeviceisonlineController { @GetMapping @Log("查询设备在线状态") - public ResponseEntity query(DeviceisonlineQueryParam query, Pageable pageable) { return new ResponseEntity<>(deviceisonlineService.queryAll(query, pageable), HttpStatus.OK); } @PostMapping @Log("新增设备在线状态") - public ResponseEntity create(@Validated @RequestBody DeviceisonlineDto resources) { return new ResponseEntity<>(deviceisonlineService.insert(resources), HttpStatus.CREATED); } @PutMapping @Log("修改设备在线状态") - public ResponseEntity update(@Validated @RequestBody DeviceisonlineDto resources) { deviceisonlineService.updateById(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); @@ -50,7 +44,6 @@ public class DeviceisonlineController { @DeleteMapping @Log("删除设备在线状态") - public ResponseEntity delete(@RequestBody Set ids) { deviceisonlineService.removeByIds(ids); return new ResponseEntity<>(HttpStatus.OK); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/AcsDeviceErpmappingDto.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/AcsDeviceErpmappingDto.java index 5d06d516c..b5d6c8af4 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/AcsDeviceErpmappingDto.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/AcsDeviceErpmappingDto.java @@ -1,15 +1,8 @@ package org.nl.acs.device.service.dto; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.EqualsAndHashCode; +import lombok.*; import lombok.experimental.Accessors; - import java.io.Serializable; -import java.util.Date; -import java.sql.Timestamp; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceDbitemDto.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceDbitemDto.java index bc81a5752..955a3bbc0 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceDbitemDto.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceDbitemDto.java @@ -1,15 +1,8 @@ package org.nl.acs.device.service.dto; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.EqualsAndHashCode; +import lombok.*; import lombok.experimental.Accessors; - import java.io.Serializable; -import java.util.Date; -import java.sql.Timestamp; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceDbitemQueryParam.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceDbitemQueryParam.java index 73f313251..7429e0b6b 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceDbitemQueryParam.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceDbitemQueryParam.java @@ -3,12 +3,6 @@ package org.nl.acs.device.service.dto; import lombok.Getter; import lombok.Setter; -import java.util.List; -import java.util.Date; - -import org.nl.common.annotation.Query; -import org.springframework.format.annotation.DateTimeFormat; - /** * @author jiaolm * @date 2023-05-09 diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceDto.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceDto.java index 79cc86b0b..8fc4f1d9b 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceDto.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceDto.java @@ -1,16 +1,9 @@ package org.nl.acs.device.service.dto; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.EqualsAndHashCode; +import lombok.*; import lombok.experimental.Accessors; - -import java.math.BigDecimal; import java.io.Serializable; -import java.util.Date; -import java.sql.Timestamp; +import java.math.BigDecimal; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceErpmappingQueryParam.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceErpmappingQueryParam.java index d316c0c87..fa0440f1c 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceErpmappingQueryParam.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceErpmappingQueryParam.java @@ -2,13 +2,6 @@ package org.nl.acs.device.service.dto; import lombok.Getter; import lombok.Setter; - -import java.util.List; -import java.util.Date; - -import org.nl.common.annotation.Query; -import org.springframework.format.annotation.DateTimeFormat; - /** * @author jiaolm * @date 2023-05-09 diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceExtraDto.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceExtraDto.java index 02d94b9c0..e9f11db4a 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceExtraDto.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceExtraDto.java @@ -3,7 +3,6 @@ package org.nl.acs.device.service.dto; import lombok.*; import lombok.experimental.Accessors; - import java.io.Serializable; import java.math.BigDecimal; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceQueryParam.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceQueryParam.java index 33df8d5c6..42bdf3fb9 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceQueryParam.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceQueryParam.java @@ -3,12 +3,6 @@ package org.nl.acs.device.service.dto; import lombok.Getter; import lombok.Setter; -import java.util.List; -import java.util.Date; - -import org.nl.common.annotation.Query; -import org.springframework.format.annotation.DateTimeFormat; - /** * @author jiaolm * @date 2023-05-09 diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceRunpointDto.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceRunpointDto.java index 1ee656af4..d3820c301 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceRunpointDto.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceRunpointDto.java @@ -1,15 +1,9 @@ package org.nl.acs.device.service.dto; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.EqualsAndHashCode; +import lombok.*; import lombok.experimental.Accessors; import java.io.Serializable; -import java.util.Date; -import java.sql.Timestamp; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceRunpointQueryParam.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceRunpointQueryParam.java index b6f5cd65e..5ea2de24d 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceRunpointQueryParam.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceRunpointQueryParam.java @@ -3,12 +3,6 @@ package org.nl.acs.device.service.dto; import lombok.Getter; import lombok.Setter; -import java.util.List; -import java.util.Date; - -import org.nl.common.annotation.Query; -import org.springframework.format.annotation.DateTimeFormat; - /** * @author jiaolm * @date 2023-05-09 diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceisonlineDto.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceisonlineDto.java index 7e4065f6f..9fe6bb7e9 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceisonlineDto.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceisonlineDto.java @@ -1,15 +1,8 @@ package org.nl.acs.device.service.dto; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.EqualsAndHashCode; +import lombok.*; import lombok.experimental.Accessors; - import java.io.Serializable; -import java.util.Date; -import java.sql.Timestamp; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceisonlineQueryParam.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceisonlineQueryParam.java index ed509f377..2dae32d1e 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceisonlineQueryParam.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/dto/DeviceisonlineQueryParam.java @@ -3,12 +3,6 @@ package org.nl.acs.device.service.dto; import lombok.Getter; import lombok.Setter; -import java.util.List; -import java.util.Date; - -import org.nl.common.annotation.Query; -import org.springframework.format.annotation.DateTimeFormat; - /** * @author jiaolm * @date 2023-05-09 diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceErpmappingServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceErpmappingServiceImpl.java index c99e57fc0..6bf940914 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceErpmappingServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceErpmappingServiceImpl.java @@ -1,6 +1,5 @@ package org.nl.acs.device.service.impl; -import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; @@ -9,26 +8,25 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import lombok.AllArgsConstructor; -import org.nl.acs.device.domain.Device; -import org.nl.acs.device.service.mapper.DeviceMapper; import org.nl.acs.common.base.PageInfo; import org.nl.acs.common.base.QueryHelpMybatisPlus; import org.nl.acs.common.base.impl.CommonServiceImpl; -import org.nl.common.exception.BadRequestException; -import org.nl.acs.utils.ConvertUtil; -import org.nl.common.utils.FileUtil; -import org.nl.acs.utils.PageUtil; +import org.nl.acs.device.domain.Device; import org.nl.acs.device.domain.DeviceErpmapping; import org.nl.acs.device.service.DeviceErpmappingService; import org.nl.acs.device.service.dto.AcsDeviceErpmappingDto; import org.nl.acs.device.service.dto.DeviceErpmappingQueryParam; import org.nl.acs.device.service.mapper.DeviceErpmappingMapper; -import org.nl.common.utils.SecurityUtils; +import org.nl.acs.device.service.mapper.DeviceMapper; +import org.nl.acs.utils.ConvertUtil; +import org.nl.acs.utils.PageUtil; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.FileUtil; import org.nl.config.language.LangProcess; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import org.springframework.data.domain.Pageable; import javax.servlet.http.HttpServletResponse; import java.io.IOException; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceExtraServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceExtraServiceImpl.java index a2bb403a2..6335155d5 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceExtraServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceExtraServiceImpl.java @@ -3,25 +3,22 @@ package org.nl.acs.device.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import lombok.AllArgsConstructor; -import org.nl.acs.device.domain.DeviceAssigned; -import org.nl.acs.device.domain.DeviceExtra; -import org.nl.acs.device.service.DeviceExtraService; -import org.nl.acs.device.service.dto.DeviceAssignedDto; -import org.nl.acs.device.service.dto.DeviceExtraDto; -import org.nl.acs.device.service.dto.DeviceExtraQueryParam; -import org.nl.acs.device.service.mapper.DeviceExtraMapper; import org.nl.acs.common.base.PageInfo; import org.nl.acs.common.base.QueryHelpMybatisPlus; import org.nl.acs.common.base.impl.CommonServiceImpl; -import org.nl.common.exception.BadRequestException; +import org.nl.acs.device.domain.DeviceExtra; +import org.nl.acs.device.service.DeviceExtraService; +import org.nl.acs.device.service.dto.DeviceExtraDto; +import org.nl.acs.device.service.dto.DeviceExtraQueryParam; +import org.nl.acs.device.service.mapper.DeviceExtraMapper; import org.nl.acs.utils.ConvertUtil; import org.nl.acs.utils.PageUtil; +import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; import org.nl.config.language.LangProcess; import org.springframework.data.domain.Pageable; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java index 732c2b7ed..01eb0eb07 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java @@ -32,10 +32,6 @@ import org.nl.acs.device_driver.two_conveyor.slit_two_manipulator.SlitTwoManipul import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.route.domain.RouteLine; import org.nl.acs.route.service.mapper.RouteLineMapper; -//import org.nl.acs.stage.domain.Stage; -//import org.nl.acs.stage.domain.StageActor; -//import org.nl.acs.stage.service.mapper.StageActorMapper; -//import org.nl.acs.stage.service.mapper.StageMapper; import org.nl.acs.storage_cell.domain.StorageCell; import org.nl.acs.storage_cell.service.mapper.StorageCellMapper; import org.nl.acs.utils.ConvertUtil; @@ -84,10 +80,6 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -// 默认不使用缓存 -//import org.springframework.cache.annotation.CacheConfig; -//import org.springframework.cache.annotation.CacheEvict; -//import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Pageable; import org.springframework.web.multipart.MultipartFile; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/OpcServerServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/OpcServerServiceImpl.java index 8dcd2e507..0629b1ecb 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/OpcServerServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/OpcServerServiceImpl.java @@ -5,8 +5,6 @@ import org.jinterop.dcom.common.JIException; import org.nl.acs.auto.initial.ApplicationAutoInitial; import org.nl.acs.device_driver.driver.ItemValue; import org.nl.acs.opc.service.dto.OpcServerManageDto; - -import org.nl.common.exception.BadRequestException; import org.openscada.opc.lib.common.NotConnectedException; import org.openscada.opc.lib.da.Group; import org.openscada.opc.lib.da.Server; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/OpcPlcService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/OpcPlcService.java index 280f346ba..8cdad9d01 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/OpcPlcService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/OpcPlcService.java @@ -1,8 +1,7 @@ package org.nl.acs.plc.service; -import com.alibaba.fastjson.JSONArray; -import org.nl.acs.common.base.PageInfo; import org.nl.acs.common.base.CommonService; +import org.nl.acs.common.base.PageInfo; import org.nl.acs.opc.domain.OpcPlc; import org.nl.acs.opc.service.dto.OpcPlcDto; import org.nl.acs.opc.service.dto.OpcPlcQueryParam; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/impl/OpcPlcServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/impl/OpcPlcServiceImpl.java index 857b03171..d969ae14b 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/impl/OpcPlcServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/plc/service/impl/OpcPlcServiceImpl.java @@ -1,7 +1,5 @@ package org.nl.acs.plc.service.impl; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; @@ -9,24 +7,21 @@ import org.nl.acs.common.base.CommonFinalParam; import org.nl.acs.common.base.PageInfo; import org.nl.acs.common.base.QueryHelpMybatisPlus; import org.nl.acs.common.base.impl.CommonServiceImpl; -import org.nl.acs.utils.ConvertUtil; -import org.nl.acs.utils.PageUtil; import org.nl.acs.opc.domain.OpcPlc; -import org.nl.acs.plc.service.OpcPlcService; import org.nl.acs.opc.service.dto.OpcPlcDto; import org.nl.acs.opc.service.dto.OpcPlcQueryParam; import org.nl.acs.opc.service.mapper.OpcPlcMapper; -import org.nl.system.service.logicflow.dao.StageImage; +import org.nl.acs.plc.service.OpcPlcService; +import org.nl.acs.utils.ConvertUtil; +import org.nl.acs.utils.PageUtil; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -// 默认不使用缓存 -//import org.springframework.cache.annotation.CacheConfig; -//import org.springframework.cache.annotation.CacheEvict; -//import org.springframework.cache.annotation.Cacheable; -import org.springframework.data.domain.Pageable; -import java.util.*; +import java.util.HashSet; +import java.util.List; +import java.util.Set; /** * @author jiaolm From 709d15f977be493dc27020afc1e3fea4b69c3fba Mon Sep 17 00:00:00 2001 From: ludj Date: Fri, 2 Feb 2024 15:55:00 +0800 Subject: [PATCH 10/21] =?UTF-8?q?rev:=E7=A7=BB=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/nl/acs/device.xls | Bin 217088 -> 0 bytes .../rest/LimitRegionalController.java | 1 - .../server/LimitRegionalService.java | 2 -- .../src/main/java/org/nl/acs/opc/OpcUtl.java | 8 -------- .../org/nl/acs/opc/rest/OpcController.java | 8 ++------ .../org/nl/acs/task/rest/TaskController.java | 10 ++-------- .../acs/task/rest/TaskFeedbackController.java | 5 ----- .../service/impl/UdwManagerServiceImpl.java | 1 - 8 files changed, 4 insertions(+), 31 deletions(-) delete mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device.xls diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device.xls b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device.xls deleted file mode 100644 index 1c3db516e0eeb180f94b3fb3d8125c1b63eb9290..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217088 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

wOYd2Dz7NZ|^rB*WUx$ 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 Date: Fri, 2 Feb 2024 16:32:30 +0800 Subject: [PATCH 11/21] =?UTF-8?q?rev=20=20=E5=8E=BB=E9=99=A4loki?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agv/server/impl/MagicAgvServiceImpl.java | 28 ++++----- .../agv/server/impl/NDCAgvServiceImpl.java | 8 +-- .../server/impl/XianGongAgvServiceImpl.java | 22 ++++--- .../agv/server/impl/ZheDaAgvServiceImpl.java | 12 ++-- .../agv/ndctwo/AgvNdcTwoDeviceDriver.java | 5 -- .../main/java/org/nl/acs/ext/wms/AcsUtil.java | 5 +- .../src/main/java/org/nl/acs/log/LokiLog.java | 15 ----- .../java/org/nl/acs/log/LokiLogAspect.java | 59 ------------------- .../main/java/org/nl/acs/log/LokiLogType.java | 27 --------- .../config/lucene/config/LuceneAppender.java | 2 +- .../src/main/resources/logback-spring.xml | 3 - 11 files changed, 32 insertions(+), 154 deletions(-) delete mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/log/LokiLog.java delete mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/log/LokiLogAspect.java delete mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/log/LokiLogType.java diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/MagicAgvServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/MagicAgvServiceImpl.java index 4aea8f442..5b2d6f09a 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/MagicAgvServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/MagicAgvServiceImpl.java @@ -20,8 +20,6 @@ import org.nl.acs.device_driver.storage.standard_storage.StandardStorageDeviceDr import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.instruction.domain.Instruction; import org.nl.acs.instruction.service.InstructionService; -import org.nl.acs.log.LokiLog; -import org.nl.acs.log.LokiLogType; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppServiceImpl; import org.nl.acs.device.enums.DeviceType; @@ -36,8 +34,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import static org.nl.acs.device_driver.conveyor.double_station_stacker.enums.CommandEnum.PICKUP_COMPLETE; - /** * @author 20220102CG\noblelift */ @@ -115,7 +111,7 @@ public class MagicAgvServiceImpl implements MagicAgvService { - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse sendAgvInstToMagic(String instcode) throws Exception { InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class); @@ -124,7 +120,7 @@ public class MagicAgvServiceImpl implements MagicAgvService { return result; } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse queryAgvInstStatus(String instCode) { if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), CommonFinalParam.ONE)) { @@ -145,7 +141,7 @@ public class MagicAgvServiceImpl implements MagicAgvService { } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse sendAgvInstToMagic(Instruction inst) throws Exception { @@ -367,7 +363,7 @@ public class MagicAgvServiceImpl implements MagicAgvService { return destinationOrder; } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse queryMagicAgvDeviceStatus() { if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), CommonFinalParam.ONE)) { @@ -415,7 +411,7 @@ public class MagicAgvServiceImpl implements MagicAgvService { } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse deleteAgvInst(String instCode) { if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), CommonFinalParam.ONE)) { @@ -451,7 +447,7 @@ public class MagicAgvServiceImpl implements MagicAgvService { * @param processingVehicle * @return */ - @LokiLog(type = LokiLogType.AGV) + @Override public synchronized String process(String jobno, String type, String address, String action, String processingVehicle) { log.info("查询到AGV请求参数,jobno:{},address:{}", jobno + ",address:" + address + ",type:" + type + ",action:" + action); @@ -613,7 +609,7 @@ public class MagicAgvServiceImpl implements MagicAgvService { } - @LokiLog(type = LokiLogType.AGV) + @Override public String requestAck(String address) { log.info("AGV请求离开参数:{}", address); @@ -689,7 +685,7 @@ public class MagicAgvServiceImpl implements MagicAgvService { } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse pause() throws Exception { if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), CommonFinalParam.ONE)) { @@ -717,7 +713,7 @@ public class MagicAgvServiceImpl implements MagicAgvService { } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse pause(String device_code) throws Exception { if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), CommonFinalParam.ONE)) { @@ -741,7 +737,7 @@ public class MagicAgvServiceImpl implements MagicAgvService { } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse resume() throws Exception { if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), CommonFinalParam.ONE)) { @@ -770,7 +766,7 @@ public class MagicAgvServiceImpl implements MagicAgvService { } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse resume(String device_code) throws Exception { if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), CommonFinalParam.ONE)) { @@ -792,7 +788,7 @@ public class MagicAgvServiceImpl implements MagicAgvService { } } - @LokiLog(type = LokiLogType.AGV) + @Override public String queryDoorStatus(String device) { log.info("AGV查询自动门状态,参数:{}", device); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java index 1f918fcbc..f865d6aa9 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java @@ -12,8 +12,6 @@ import org.nl.acs.device.service.DeviceService; import org.nl.acs.device.service.impl.DeviceServiceImpl; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.instruction.domain.Instruction; -import org.nl.acs.log.LokiLog; -import org.nl.acs.log.LokiLogType; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppServiceImpl; @@ -41,7 +39,7 @@ public class NDCAgvServiceImpl implements NDCAgvService { Map AGVDeviceStatus = new HashMap(); - @LokiLog(type = LokiLogType.AGV) + @Override public void deleteAgvInstToNDC(Instruction inst) throws Exception { if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), CommonFinalParam.ONE)) { @@ -74,7 +72,7 @@ public class NDCAgvServiceImpl implements NDCAgvService { } - @LokiLog(type = LokiLogType.AGV) + @Override public void sendAgvInstToNDC(String agv_system_type, Instruction inst) { if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), CommonFinalParam.ONE)) { @@ -309,7 +307,7 @@ public class NDCAgvServiceImpl implements NDCAgvService { } - @LokiLog(type = LokiLogType.AGV) + @Override public Map findAllAgvFromCache() { return AGVDeviceStatus; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java index 630d92e0f..3cdcca2bc 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/XianGongAgvServiceImpl.java @@ -21,8 +21,6 @@ import org.nl.acs.device.domain.Device; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.instruction.domain.Instruction; import org.nl.acs.instruction.service.InstructionService; -import org.nl.acs.log.LokiLog; -import org.nl.acs.log.LokiLogType; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.device.enums.DeviceType; import org.nl.common.exception.BadRequestException; @@ -67,7 +65,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { @Value("${agvToAcs.addr}") private String addr; - @LokiLog(type = LokiLogType.AGV) + @Override public String waitPointRequest(String param) { log.info("收到AGV请求参数:{}", param); @@ -112,7 +110,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse markComplete(String code) throws Exception { @@ -138,7 +136,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse queryXZAgvDeviceStatus() { @@ -199,7 +197,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse queryXZAgvInstStatus(String instCode) { @@ -222,7 +220,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { } } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse deleteXZAgvInst(String instCode) { if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), CommonFinalParam.ONE)) { @@ -242,7 +240,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { } } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse sendOrderSequencesToXZ(Instruction inst) throws Exception { com.alibaba.fastjson.JSONObject jo = new com.alibaba.fastjson.JSONObject(); @@ -444,7 +442,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { } } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse addOrderSequences(Instruction inst) throws Exception { JSONObject orderjo = createOrederData(inst, CommonFinalParam.ONE); @@ -471,7 +469,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { } } - @LokiLog(type = LokiLogType.AGV) + @Override public String sendOrderSequencesParam(Instruction inst) throws Exception { JSONObject jo = new JSONObject(); @@ -489,7 +487,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { return jo.toString(); } - @LokiLog(type = LokiLogType.AGV) + @Override public JSONObject createOrederData(Instruction inst, String inst_type) { String inst_code = inst.getInstruction_code(); @@ -626,7 +624,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService { return destinationOrder; } - @LokiLog(type = LokiLogType.AGV) + @Override public String queryDoorStatus(String device) { log.info("AGV查询自动门状态,参数:{}", device); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/ZheDaAgvServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/ZheDaAgvServiceImpl.java index 1f731235f..0d66afd52 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/ZheDaAgvServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/ZheDaAgvServiceImpl.java @@ -17,8 +17,6 @@ import org.nl.acs.device_driver.two_conveyor.hongxiang_device.HongXiangConveyorD import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.instruction.domain.Instruction; import org.nl.acs.instruction.service.InstructionService; -import org.nl.acs.log.LokiLog; -import org.nl.acs.log.LokiLogType; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppServiceImpl; import org.nl.acs.task.service.TaskService; @@ -61,7 +59,7 @@ public class ZheDaAgvServiceImpl implements ZheDaAgvService { */ private static final String UNLOAD = "Unload"; - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse sendAgvInstToAgv(Instruction inst) throws Exception { JSONObject jo = new JSONObject(); @@ -127,7 +125,7 @@ public class ZheDaAgvServiceImpl implements ZheDaAgvService { * @param type * @return */ - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse queryAgvInstStatus(String type) { if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), CommonFinalParam.ONE)) { @@ -165,7 +163,7 @@ public class ZheDaAgvServiceImpl implements ZheDaAgvService { * @param processingVehicle * @return */ - @LokiLog(type = LokiLogType.AGV) + @Override public synchronized String process(String jobno, String type, String address, String action, String processingVehicle) { log.info("查询到AGV请求参数,jobno:{},address:{}", jobno + ",address:" + address + ",type:" + type + ",action:" + action); @@ -341,7 +339,7 @@ public class ZheDaAgvServiceImpl implements ZheDaAgvService { } - @LokiLog(type = LokiLogType.AGV) + @Override public HttpResponse markComplete(String code) { @@ -378,7 +376,7 @@ public class ZheDaAgvServiceImpl implements ZheDaAgvService { * demo:destination("cz14", "JackUnload", "3", "") * @return */ - @LokiLog(type = LokiLogType.AGV) + public static JSONObject destination(String locationName, String operation, String propertiesType, String pro) { //新增业务订单 JSONObject destinationOrder = new JSONObject(); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java index c53147485..b965f64c0 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java @@ -22,8 +22,6 @@ import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.instruction.domain.Instruction; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.instruction.service.impl.InstructionServiceImpl; -import org.nl.acs.log.LokiLog; -import org.nl.acs.log.LokiLogType; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.task.service.TaskService; @@ -34,8 +32,6 @@ import org.nl.config.lucene.service.dto.LuceneLogDto; import org.nl.system.service.param.ISysParamService; import org.nl.config.SpringContextHolder; -import java.util.Arrays; - /** * NDC双工位AGV @@ -65,7 +61,6 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic private Instruction instruction; String message = null; - @LokiLog(type = LokiLogType.ACS_TO_LMS) public synchronized void processSocket(int[] arr) throws Exception { device_code = this.getDeviceCode(); byte[] data = null; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/AcsUtil.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/AcsUtil.java index b877bcb85..f8736f0e9 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/AcsUtil.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/AcsUtil.java @@ -7,8 +7,6 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.nl.acs.common.base.CommonFinalParam; -import org.nl.acs.log.LokiLog; -import org.nl.acs.log.LokiLogType; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.common.exception.BadRequestException; import org.nl.config.language.LangProcess; @@ -23,7 +21,7 @@ import org.nl.system.service.param.impl.SysParamServiceImpl; public class AcsUtil { - @LokiLog(type = LokiLogType.ACS_TO_LK) + public static String notifyAcs(String api, W requestParam) { DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class); ; @@ -35,7 +33,6 @@ public class AcsUtil { } String liKu_wcs_url = paramService.findByCode("liKu_wcs_url").getValue(); try { - logServer.extLog(LokiLogType.ACS_TO_LK.name(), "下发立库任务请求参数:{}" + JSON.toJSONString(requestParam)); log.info("下发立库任务请求参数:{}", JSON.toJSONString(requestParam)); String body = HttpRequest .post(liKu_wcs_url + api).setConnectionTimeout(3000) diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/log/LokiLog.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/log/LokiLog.java deleted file mode 100644 index b6a684d60..000000000 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/log/LokiLog.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.nl.acs.log; - -import java.lang.annotation.*; - -/** - * @author: lyd - * @description: 自定义日志注解, 用作LOKI日志分类 - * @Date: 2022/10/10 - */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD}) -@Documented -public @interface LokiLog { - LokiLogType type() default LokiLogType.DEFAULT; -} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/log/LokiLogAspect.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/log/LokiLogAspect.java deleted file mode 100644 index 1fac8ab79..000000000 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/log/LokiLogAspect.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.nl.acs.log; - -import com.alibaba.fastjson.JSONObject; -import lombok.extern.slf4j.Slf4j; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.Signature; -import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Pointcut; -import org.aspectj.lang.reflect.MethodSignature; -import org.slf4j.MDC; -import org.springframework.stereotype.Component; - -import java.lang.reflect.Method; - - -/** - * @author: lyd - * @description: 自定义日志切面:https://cloud.tencent.com/developer/article/1655923 - * @Date: 2022/10/10 - */ -@Aspect -@Slf4j -@Component -public class LokiLogAspect { - /** - * 切到所有OperatorLog注解修饰的方法 - */ - @Pointcut("@annotation(org.nl.acs.log.LokiLog)") - public void operatorLog() { - // 空方法 - } - - /** - * 利用@Around环绕增强 - * - * @return - */ - @Around("operatorLog()") - public Object around(ProceedingJoinPoint pjp) throws Throwable { - - Signature signature = pjp.getSignature(); - MethodSignature methodSignature = (MethodSignature) signature; - Method method = methodSignature.getMethod(); - LokiLog lokiLog = method.getAnnotation(LokiLog.class); - // 获取描述信息 - LokiLogType logType = lokiLog.type(); - - MDC.put("log_file_type", logType.getDesc()); - log.info("输入参数:" + JSONObject.toJSONString(pjp.getArgs())); - - Object proceed = pjp.proceed(); - - log.info("返回参数:" + JSONObject.toJSONString(proceed)); - MDC.remove("log_file_type"); - return proceed; - - } -} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/log/LokiLogType.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/log/LokiLogType.java deleted file mode 100644 index a20940bf0..000000000 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/log/LokiLogType.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.nl.acs.log; - -/** - * @author: lyd - * @description: - * @Date: 2022/10/11 - */ -public enum LokiLogType { - // 默认 - DEFAULT("默认"), - // AGV接口日志 - AGV("AGV接口日志"), - // ACS请求LMS - ACS_TO_LMS("ACS请求LMS"), - // ACS请求立库 - ACS_TO_LK("ACS请求立库"); - - private String desc; - - LokiLogType(String desc) { - this.desc = desc; - } - - public String getDesc() { - return desc; - } -} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/config/LuceneAppender.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/config/LuceneAppender.java index 734537b8d..9e9bdcd1d 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/config/LuceneAppender.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/config/LuceneAppender.java @@ -79,7 +79,7 @@ public class LuceneAppender extends AppenderBase { //向document对象中添加域。 Map mdcPropertyMap = event.getMDCPropertyMap(); String traceId = mdcPropertyMap.get("traceId"); - System.out.println("---追踪号---"+traceId); +// System.out.println("---追踪号---"+traceId); if (ObjectUtil.isNotEmpty(traceId)) { document.add(new StringField("trace_id", traceId, Field.Store.YES)); } diff --git a/acs2/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml b/acs2/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml index e15810b10..5e8238e7f 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml +++ b/acs2/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml @@ -14,9 +14,6 @@ https://juejin.cn/post/6844903775631572999 - - - From bd2b3057baa25ec05b9144c6dcba1bfb12de7ec8 Mon Sep 17 00:00:00 2001 From: yanps Date: Fri, 2 Feb 2024 16:56:42 +0800 Subject: [PATCH 12/21] =?UTF-8?q?add:=20=E6=B7=BB=E5=8A=A0=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=B8=85=E7=90=86=E4=BB=BB=E5=8A=A1=E5=92=8C=E6=8C=87?= =?UTF-8?q?=E4=BB=A4,=E4=BC=98=E5=8C=96=E6=93=8D=E4=BD=9C=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/acs/autotask/CleanTaskAndInst.java | 33 ++++++ .../service/impl/DeviceServiceImpl.java | 4 +- .../HongXiangStationDeviceDriver.java | 5 +- .../OvenGantryManipulatorDeviceDriver.java | 4 +- .../org/nl/common/logging/annotation/Log.java | 32 ++++++ .../nl/common/logging/aspect/LogAspect.java | 93 +++++++--------- .../service/logging/ISysLogService.java | 14 +++ .../nl/system/service/logging/dao/SysLog.java | 7 +- .../logging/impl/SysLogServiceImpl.java | 72 +++++++++++++ .../quartz/task/DeleteDeviceErrorLog.java | 18 ++++ .../service/role/impl/SysRoleServiceImpl.java | 8 +- acs2/nladmin-ui/src/views/acs/task/index.vue | 1 + .../nladmin-ui/src/views/screen/bigScreen.vue | 100 ++++++++++-------- .../src/views/system/dept/index.vue | 12 +-- .../src/views/system/menu/index.vue | 12 +-- .../src/views/system/user/index.vue | 39 ++++--- 16 files changed, 313 insertions(+), 141 deletions(-) create mode 100644 acs/nladmin-system/src/main/java/org/nl/acs/autotask/CleanTaskAndInst.java diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/autotask/CleanTaskAndInst.java b/acs/nladmin-system/src/main/java/org/nl/acs/autotask/CleanTaskAndInst.java new file mode 100644 index 000000000..082574baa --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/autotask/CleanTaskAndInst.java @@ -0,0 +1,33 @@ +package org.nl.acs.autotask; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.task.service.TaskService; +import org.nl.modules.system.service.ParamService; +import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.stereotype.Component; + +/** + * 定时清理任务和指令 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CleanTaskAndInst { + + private final TaskService taskService; + private final ParamService paramService; + + public void run(){ + + WQLObject acsTask = WQLObject.getWQLObject("acs_task"); + int days = Integer.parseInt(paramService.findByCode("task_inst_time").getValue()); + acsTask.delete("DATE(create_time) <= DATE(DATE_SUB(NOW(),INTERVAL " + days + " day))"); + log.info("自动清理任务日志执行成功...!"); + + WQLObject acsInst = WQLObject.getWQLObject("acs_instruction"); + acsInst.delete("DATE(create_time) <= DATE(DATE_SUB(NOW(),INTERVAL " + days + " day))"); + log.info("自动清理指令日志执行成功...!"); + + } +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java index 01eb0eb07..d32e195ed 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java @@ -1011,10 +1011,10 @@ public class DeviceServiceImpl extends CommonServiceImpl i StandardCoveyorControlWithScannerDeviceDriver standardCoveyorControlWithScannerDeviceDriver = (StandardCoveyorControlWithScannerDeviceDriver) device.getDeviceDriver(); standardCoveyorControlWithScannerDeviceDriver.setDeviceStatus(form); - } else if (device.getDeviceDriver() instanceof DeviceStageMonitor) { + }/* else if (device.getDeviceDriver() instanceof DeviceStageMonitor) { DeviceStageMonitor deviceStageMonitor = (DeviceStageMonitor) device.getDeviceDriver(); deviceStageMonitor.setDeviceStatus(form); - }else if (device.getDeviceDriver() instanceof StandardStackerDeviceDriver) { + }*/else if (device.getDeviceDriver() instanceof StandardStackerDeviceDriver) { StandardStackerDeviceDriver standardStackerDeviceDriver = (StandardStackerDeviceDriver) device.getDeviceDriver(); standardStackerDeviceDriver.setDeviceStatus(form); } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/hongxiang_conveyor/HongXiangStationDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/hongxiang_conveyor/HongXiangStationDeviceDriver.java index 01fa6cdc6..7cf2fa7f2 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/hongxiang_conveyor/HongXiangStationDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/hongxiang_conveyor/HongXiangStationDeviceDriver.java @@ -63,14 +63,14 @@ public class HongXiangStationDeviceDriver extends AbstractOpcDeviceDriver implem public int move = 0; public int action = 0; public int error = 0; - public String task = null; + public String task = ""; public int last_heartbeat = 0; public int last_mode = 0; public int last_move = 0; public int last_action = 0; public int last_error = 0; - public String last_task = null; + public String last_task = ""; Boolean isonline = true; @@ -160,7 +160,6 @@ public class HongXiangStationDeviceDriver extends AbstractOpcDeviceDriver implem jo.put("action", action == 1 ? "允许取放": "不允许取放"); jo.put("isOnline", true); jo.put("error", this.getError()); - jo.put("isError", this.getIserror()); jo.put("task", this.getTask()); return jo; } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/OvenGantryManipulatorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/OvenGantryManipulatorDeviceDriver.java index 348e34738..cdd378323 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/OvenGantryManipulatorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/two_conveyor/oven_manipulator/OvenGantryManipulatorDeviceDriver.java @@ -1031,9 +1031,9 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i move = "有货"; } - String requireSucess = "0"; + String requireSucess = "复位"; if (this.requireSucess) { - requireSucess = "1"; + requireSucess = "未复位"; } jo.put("requireSucess", requireSucess); if (this.getAction() == 1) { diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/common/logging/annotation/Log.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/common/logging/annotation/Log.java index 4d8105bd8..afe7f42a2 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/common/logging/annotation/Log.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/common/logging/annotation/Log.java @@ -15,6 +15,8 @@ */ package org.nl.common.logging.annotation; +import org.nl.acs.enums.InterfaceLogType; + import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -28,4 +30,34 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) public @interface Log { String value() default ""; + + + /** + * 是否打印到日志文件 + * + * @return + */ + boolean isPrintToLogFile() default false; + + + /** + * 是否插入操作日志表 + * + * @return + */ + boolean isAddLogTable() default true; + + /** + * 是否接口日志 + * + * @return + */ + boolean isInterfaceLog() default false; + + /** + * 接口日志类型 + * + * @return + */ + InterfaceLogType interfaceLogType() default InterfaceLogType.DEFAULT; } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/common/logging/aspect/LogAspect.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/common/logging/aspect/LogAspect.java index 297b3dd70..228e6c057 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/common/logging/aspect/LogAspect.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/common/logging/aspect/LogAspect.java @@ -12,12 +12,14 @@ * 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. - *//* + */ package org.nl.common.logging.aspect; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; @@ -31,6 +33,10 @@ import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.StringUtils; import org.nl.common.utils.ThrowableUtil; import org.nl.common.logging.domain.Log; +import org.nl.config.IdUtil; +import org.nl.system.service.logging.ISysLogService; +import org.nl.system.service.logging.dao.SysLog; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; @@ -41,79 +47,67 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; import java.lang.reflect.Parameter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; -*/ -/** - * @author Zheng Jie - * @date 2018-11-24 - *//* @Component @Aspect @Slf4j public class LogAspect { - private final LogService logService; + @Autowired + private ISysLogService logService; ThreadLocal currentTime = new ThreadLocal<>(); - public LogAspect(LogService logService) { + public LogAspect(ISysLogService logService) { this.logService = logService; } - */ -/** - * 配置切入点 - *//* + @Pointcut("@annotation(org.nl.common.logging.annotation.Log)") public void logPointcut() { // 该方法无方法体,主要为了让同类中其他方法使用此切入点 } - */ -/** - * 配置环绕通知,使用在方法logPointcut()上注册的切入点 - * - * @param joinPoint join point for advice - *//* - @Around("logPointcut()") public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { - ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - HttpServletRequest request = attributes.getRequest(); - HttpServletResponse response = attributes.getResponse(); -// HttpServletRequest request = RequestHolder.getHttpServletRequest(); - - + String trackId = UUID.randomUUID().toString(); MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); // 方法路径 String methodName = joinPoint.getTarget().getClass().getName() + "." + signature.getName() + "()"; - String params=getParameter(method, joinPoint.getArgs()); + String params = getParameter(method, joinPoint.getArgs()); - log.info("请求uri:{}", request.getRequestURI()); - log.info("请求方法:{}",methodName); - log.info("请求方法参数:{}",params); + org.nl.common.logging.annotation.Log logInfo = method.getAnnotation(org.nl.common.logging.annotation.Log.class); + //是否输出到日志文件 + if (logInfo.isPrintToLogFile()) { + log.info("track_id:{},请求方法:{},请求方法参数:{}", trackId, methodName, params); + } + HttpServletRequest request = RequestHolder.getHttpServletRequest(); + String requestIp = StringUtils.getIp(request); Object result; - currentTime.set(System.currentTimeMillis()); - result = joinPoint.proceed(); - Log log = new Log("INFO",System.currentTimeMillis() - currentTime.get()); - currentTime.remove(); - - logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request),joinPoint, log); + long startTime = System.currentTimeMillis(); + try { + result = joinPoint.proceed(); + //是否把日志存到日志表 + if (logInfo.isAddLogTable()) { + SysLog log = new SysLog("INFO", System.currentTimeMillis() - startTime); + logService.save(getUsername(), StringUtils.getBrowser(request), requestIp, joinPoint, log); + } + } catch (Exception ex) { + log.error("track_id:{},error:{}", trackId, ex.getMessage()); + SysLog log = new SysLog("ERROR", System.currentTimeMillis() - startTime); + log.setException_detail(ThrowableUtil.getStackTrace(ex).getBytes()); + logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint) joinPoint, log); + throw ex; + } return result; } - */ -/** - * 根据方法和传入的参数获取请求参数 - *//* + private String getParameter(Method method, Object[] args) { List argList = new ArrayList<>(); @@ -142,19 +136,13 @@ public class LogAspect { return argList.size() == 1 ? JSONUtil.toJsonStr(argList.get(0)) : JSONUtil.toJsonStr(argList); } - */ -/** - * 配置异常通知 - * - * @param joinPoint join point for advice - * @param e exception - *//* + @AfterThrowing(pointcut = "logPointcut()", throwing = "e") public void logAfterThrowing(JoinPoint joinPoint, Throwable e) { - Log log = new Log("ERROR",System.currentTimeMillis() - currentTime.get()); + SysLog log = new SysLog("ERROR",System.currentTimeMillis() - currentTime.get()); currentTime.remove(); - log.setExceptionDetail(ThrowableUtil.getStackTrace(e).getBytes()); + log.setException_detail(ThrowableUtil.getStackTrace(e).getBytes()); HttpServletRequest request = RequestHolder.getHttpServletRequest(); logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint)joinPoint, log); } @@ -167,4 +155,3 @@ public class LogAspect { } } } -*/ diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/ISysLogService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/ISysLogService.java index 5ae003c7f..458f00919 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/ISysLogService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/ISysLogService.java @@ -2,8 +2,10 @@ package org.nl.system.service.logging; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import org.aspectj.lang.ProceedingJoinPoint; import org.nl.common.domain.query.PageQuery; import org.nl.system.service.logging.dao.SysLog; +import org.springframework.scheduling.annotation.Async; import java.util.Map; @@ -32,6 +34,18 @@ public interface ISysLogService extends IService { */ Object findByErrDetail(String id); + + /** + * 保存日志数据 + * @param username 用户 + * @param browser 浏览器 + * @param ip 请求IP + * @param joinPoint / + * @param log 日志实体 + */ + @Async + void save(String username, String browser, String ip, ProceedingJoinPoint joinPoint, SysLog log); + /** * 删除所有异常日志 */ diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/dao/SysLog.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/dao/SysLog.java index 60673419a..8bdbe11d4 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/dao/SysLog.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/dao/SysLog.java @@ -6,6 +6,7 @@ import java.time.LocalDateTime; import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; /** *

@@ -18,6 +19,7 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = false) @TableName("sys_log") +@NoArgsConstructor public class SysLog implements Serializable { private static final long serialVersionUID = 1L; @@ -51,5 +53,8 @@ public class SysLog implements Serializable { private String create_time; - + public SysLog(String logType, Long time) { + this.log_type = logType; + this.time = time; + } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/impl/SysLogServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/impl/SysLogServiceImpl.java index 9042e2fb3..283604011 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/impl/SysLogServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/impl/SysLogServiceImpl.java @@ -1,20 +1,36 @@ package org.nl.system.service.logging.impl; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Dict; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.reflect.MethodSignature; import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.common.utils.StringUtils; import org.nl.common.utils.ValidationUtil; import org.nl.system.service.logging.ISysLogService; import org.nl.system.service.logging.dao.SysLog; import org.nl.system.service.logging.dao.mapper.SysLogMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -62,6 +78,62 @@ public class SysLogServiceImpl extends ServiceImpl impleme return Dict.create().set("exception", new String(ObjectUtil.isNotNull(details) ? details : "".getBytes())); } + @Override + @Transactional(rollbackFor = Exception.class) + public void save(String username, String browser, String ip, ProceedingJoinPoint joinPoint, SysLog logDto) { + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + Log aopLog = method.getAnnotation(Log.class); + + // 方法路径 + String methodName = joinPoint.getTarget().getClass().getName() + "." + signature.getName() + "()"; + + // 描述 + if (logDto != null) { + logDto.setDescription(aopLog.value()); + } + assert logDto != null; + logDto.setRequest_ip(ip); + logDto.setLog_id(RandomUtil.randomString(5)); + logDto.setAddress(StringUtils.getCityInfo(logDto.getRequest_ip())); + logDto.setMethod(methodName); + logDto.setUsername(username); + logDto.setParams(getParameter(method, joinPoint.getArgs())); + logDto.setBrowser(browser); + long currentTimeMillis = System.currentTimeMillis(); + String dateString = DateUtil.date(currentTimeMillis).toString(); + logDto.setCreate_time(dateString); + logMapper.insert(logDto); + } + + private String getParameter(Method method, Object[] args) { + List argList = new ArrayList<>(); + Parameter[] parameters = method.getParameters(); + for (int i = 0; i < parameters.length; i++) { + //将RequestBody注解修饰的参数作为请求参数 + RequestBody requestBody = parameters[i].getAnnotation(RequestBody.class); + if (requestBody != null) { + argList.add(args[i]); + } + //将RequestParam注解修饰的参数作为请求参数 + RequestParam requestParam = parameters[i].getAnnotation(RequestParam.class); + if (requestParam != null) { + Map map = new HashMap<>(); + String key = parameters[i].getName(); + if (!StrUtil.isEmpty(requestParam.value())) { + key = requestParam.value(); + } + map.put(key, args[i]); + argList.add(map); + } + } + if (argList.size() == 0) { + return ""; + } + return argList.size() == 1 ? JSONUtil.toJsonStr(argList.get(0)) : JSONUtil.toJsonStr(argList); + } + @Override public void delAllByError() { logMapper.delete(new LambdaQueryWrapper().eq(SysLog::getLog_type, "ERROR")); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/DeleteDeviceErrorLog.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/DeleteDeviceErrorLog.java index 93949becd..b8a052274 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/DeleteDeviceErrorLog.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/DeleteDeviceErrorLog.java @@ -4,6 +4,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.extern.slf4j.Slf4j; import org.nl.acs.history.domain.AcsDeviceErrorLog; import org.nl.acs.history.service.impl.DeviceErrorLogServiceImpl; +import org.nl.acs.instruction.domain.InstructionMybatis; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.task.domain.Task; +import org.nl.acs.task.service.TaskService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -19,11 +23,25 @@ public class DeleteDeviceErrorLog { @Autowired private DeviceErrorLogServiceImpl errorLogServer; + @Autowired + private TaskService taskService; + + @Autowired + private InstructionService instructionService; + public void run(){ log.info("开始删除设备报警记录"); errorLogServer.remove(Wrappers.lambdaQuery(AcsDeviceErrorLog.class) .lt(AcsDeviceErrorLog::getError_time, LocalDateTime.now().minusDays(15))); log.info("已将设备报警记录中超过十五天的删除成功"); + + taskService.remove(Wrappers.lambdaQuery(Task.class) + .lt(Task::getCreate_time, LocalDateTime.now().minusDays(30))); + log.info("已将任务记录中超过三十天的删除成功"); + + instructionService.remove(Wrappers.lambdaQuery(InstructionMybatis.class) + .lt(InstructionMybatis::getCreate_time, LocalDateTime.now().minusDays(30))); + log.info("已将指令记录中超过三十天的删除成功"); } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java index f450af135..aa1154673 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; +import org.nl.acs.common.base.CommonFinalParam; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; @@ -140,8 +141,11 @@ public class SysRoleServiceImpl extends ServiceImpl impl public List getPermissionList(JSONObject userDto) { List permission = new LinkedList<>(); // 查看是否为管理员 - permission.add("admin"); - permission.addAll(sysMenuMapper.getPermissionByUserId(userDto.getString("userId"))); + // 是管理员 + if (userDto.getBooleanValue("is_admin")) { + permission.add("admin"); + } + permission.addAll(sysMenuMapper.getPermissionByUserId(userDto.getString("user_id"))); return permission; } diff --git a/acs2/nladmin-ui/src/views/acs/task/index.vue b/acs2/nladmin-ui/src/views/acs/task/index.vue index bef15b6f9..01e89d96d 100644 --- a/acs2/nladmin-ui/src/views/acs/task/index.vue +++ b/acs2/nladmin-ui/src/views/acs/task/index.vue @@ -91,6 +91,7 @@
-

- {{ $t('task.screen.task_screen') }}

+

+ {{ $t('task.screen.task_screen') }}

- - - - - - - + + + + + + +
@@ -48,54 +49,61 @@ + ref="form" + style="margin-top: 50px;padding-top: 10px" + :model="form" + :rules="rules" + size="small" + label-width="200px" + > - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + -
- +
+ http://127.0.0.1:8014/bigScreen/screen
diff --git a/acs2/nladmin-ui/src/views/system/dept/index.vue b/acs2/nladmin-ui/src/views/system/dept/index.vue index a0806baa0..3da3b5956 100644 --- a/acs2/nladmin-ui/src/views/system/dept/index.vue +++ b/acs2/nladmin-ui/src/views/system/dept/index.vue @@ -10,7 +10,7 @@ label-position="right" label-suffix=":" > - + - + @@ -69,8 +69,8 @@ - {{ $t('common.true') }} - {{ $t('common.false') }} + {{ $t('auto.common.true') }} + {{ $t('auto.common.false') }} @@ -279,7 +279,7 @@ export default { }, // 改变状态 changeEnabled(data, val) { - const satus = this.enabledTypeOptions.find(item => { return item.key == data.is_used }) + const satus = this.enabledTypeOptions.find(item => { return item.key === data.is_used }) debugger this.$confirm('此操作将 "' + satus.display_name + '" ' + data.name + '部门, 是否继续?', '提示', { confirmButtonText: '确定', diff --git a/acs2/nladmin-ui/src/views/system/menu/index.vue b/acs2/nladmin-ui/src/views/system/menu/index.vue index 34735ffa2..47cb7c79f 100644 --- a/acs2/nladmin-ui/src/views/system/menu/index.vue +++ b/acs2/nladmin-ui/src/views/system/menu/index.vue @@ -76,20 +76,20 @@ - {{ $t('common.true') }} - {{ $t('common.false') }} + {{ $t('auto.common.true') }} + {{ $t('auto.common.false') }} - {{ $t('common.true') }} - {{ $t('common.false') }} + {{ $t('auto.common.true') }} + {{ $t('auto.common.false') }} - {{ $t('common.true') }} - {{ $t('common.false') }} + {{ $t('auto.common.true') }} + {{ $t('auto.common.false') }} diff --git a/acs2/nladmin-ui/src/views/system/user/index.vue b/acs2/nladmin-ui/src/views/system/user/index.vue index a5d3396d9..dd2e0dfa4 100644 --- a/acs2/nladmin-ui/src/views/system/user/index.vue +++ b/acs2/nladmin-ui/src/views/system/user/index.vue @@ -10,7 +10,7 @@ label-position="right" label-suffix=":" > - + - + - + @@ -135,7 +135,7 @@ multiple active-value="1" inactive-value="0" - :placeholder="$t('common.please')" + :placeholder="$t('auto.common.please')" @remove-tag="deleteTag" @change="changeRole" > @@ -150,8 +150,8 @@ @@ -349,7 +349,6 @@ import { getAll, getLevel } from '@/views/system/role/role' import CRUD, { crud, form, header, presenter } from '@crud/crud' import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' -import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' import Treeselect, { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect' import { mapGetters } from 'vuex' @@ -373,7 +372,7 @@ const defaultForm = { } export default { name: 'User', - components: { RelevanceDeptDialog, RelevanceUserDialog, Treeselect, crudOperation, rrOperation, udOperation, pagination }, + components: { RelevanceDeptDialog, RelevanceUserDialog, Treeselect, crudOperation, rrOperation, pagination }, cruds() { return CRUD({ title: i18n.t('user.table_value.User'), idField: 'user_id', url: 'api/users', crudMethod: { ...crudUser }}) }, @@ -682,7 +681,7 @@ export default { this.$nextTick(function() { for (let j = 0; j < row.roles.length; j++) { for (let i = 0; i < this.rolesDatas.length; i++) { - if (this.rolesDatas[i].roleId == row.roles[j].roleId) { + if (this.rolesDatas[i].roleId === row.roles[j].roleId) { this.$refs.roleTable.toggleRowSelection(this.rolesDatas[i], true) break } @@ -718,7 +717,7 @@ export default { this.$nextTick(function() { for (var index = 0; index < res.length; index++) { for (var i = 0; i < this.dataDialog.dataScopeType.length; i++) { - if (this.dataDialog.dataScopeType[i].value == res[index].permissionScopeType) { + if (this.dataDialog.dataScopeType[i].value === res[index].permissionScopeType) { this.dataDialog.dataScopeType[i].permission_id = res[index].permission_id if (res[index].users) this.dataDialog.dataScopeType[i].users = res[index].users if (res[index].depts) this.dataDialog.dataScopeType[i].depts = res[index].depts @@ -738,7 +737,7 @@ export default { }, openRelevance(row, index) { for (var i = 0; i < this.permissions.length; i++) { - if (this.permissions[i].permission_id != undefined && this.permissions[i].permission_id && this.permissions[i].permission_id != row.permission_id) { + if (this.permissions[i].permission_id !== undefined && this.permissions[i].permission_id && this.permissions[i].permission_id !== row.permission_id) { this.$delete(this.dataDialog.dataScopeType[index], this.permissions[i].permission_id.toString()) } } @@ -746,15 +745,15 @@ export default { this.rowData = {} this.deptIds = [] this.userIds = [] - if (row.permission_id == '1605129738328870912') { // 选择用户 + if (row.permission_id === '1605129738328870912') { // 选择用户 this.userIds = this.dataDialog.dataScopeType[index].users this.rowData = row this.relevanceUser = true - } else if (row.permission_id == '1605129882164137984') { // 选择部门 + } else if (row.permission_id === '1605129882164137984') { // 选择部门 this.deptIds = this.dataDialog.dataScopeType[index].depts this.rowData = row this.relevanceDept = true - } else if (row.permission_id == '1605128919449735168') { // 自身 + } else if (row.permission_id === '1605128919449735168') { // 自身 const param = { userId: this.dataDialog.userId } @@ -767,8 +766,8 @@ export default { }, selectUsers(row) { // row对话框传来的数据 for (var i = 0; i < this.dataDialog.dataScopeType.length; i++) { - if (this.dataDialog.dataScopeType[i].dict_id == this.rowData.dict_id) { - if (this.dataDialog.dataScopeType[i].depts != undefined && this.dataDialog.dataScopeType[i].depts.length > 0) this.dataDialog.dataScopeType[i].depts = [] + if (this.dataDialog.dataScopeType[i].dict_id === this.rowData.dict_id) { + if (this.dataDialog.dataScopeType[i].depts !== undefined && this.dataDialog.dataScopeType[i].depts.length > 0) this.dataDialog.dataScopeType[i].depts = [] this.dataDialog.dataScopeType[i].users = row break } @@ -777,8 +776,8 @@ export default { }, selectDepts(row) { for (var i = 0; i < this.dataDialog.dataScopeType.length; i++) { - if (this.dataDialog.dataScopeType[i].dict_id == this.rowData.dictId) { - if (this.dataDialog.dataScopeType[i].users != undefined && this.dataDialog.dataScopeType[i].users.length > 0) this.dataDialog.dataScopeType[i].users = [] + if (this.dataDialog.dataScopeType[i].dict_id === this.rowData.dictId) { + if (this.dataDialog.dataScopeType[i].users !== undefined && this.dataDialog.dataScopeType[i].users.length > 0) this.dataDialog.dataScopeType[i].users = [] this.dataDialog.dataScopeType[i].depts = row break } @@ -875,7 +874,7 @@ export default { checkNode.parent.indeterminate = false } // 如果取消所有第二节点的勾选状态,则第一层父节点也取消勾选 - if (checkNode.level == 2 && checkNode.parent.childNodes.every(ele => !ele.checked)) { + if (checkNode.level === 2 && checkNode.parent.childNodes.every(ele => !ele.checked)) { checkNode.parent.checked = false checkNode.parent.indeterminate = false } From 74ca7e58ef5df1da7dcb4f8eef2e7c4a80e606fa Mon Sep 17 00:00:00 2001 From: yanps Date: Sun, 4 Feb 2024 14:12:51 +0800 Subject: [PATCH 13/21] =?UTF-8?q?opt:=20=E4=BC=98=E5=8C=96=E6=B5=81?= =?UTF-8?q?=E9=87=8F=E9=99=90=E5=88=B6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agv/xg_agv_car/XgAgvCarDeviceDriver.java | 31 ++++++------ .../rest/LimitRegionalController.java | 6 +++ .../server/LimitRegionalService.java | 7 +++ .../server/impl/LimitRegionalServiceImpl.java | 15 ++++++ .../java/org/nl/acs/opc/DeviceAppService.java | 5 ++ .../org/nl/acs/opc/DeviceAppServiceImpl.java | 9 ++++ .../quartz/task/DeleteDeviceErrorLog.java | 23 +++++++-- .../src/api/acs/regional/acsRegional.js | 9 +++- .../src/views/acs/regional/index.vue | 48 +++++++++++++++++-- 9 files changed, 129 insertions(+), 24 deletions(-) diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/xg_agv_car/XgAgvCarDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/xg_agv_car/XgAgvCarDeviceDriver.java index e83dd157e..68dfce5ba 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/xg_agv_car/XgAgvCarDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/xg_agv_car/XgAgvCarDeviceDriver.java @@ -181,24 +181,24 @@ public class XgAgvCarDeviceDriver extends AbstractDeviceDriver implements Device getAgvStatus(); JSONObject jo = new JSONObject(); String isError; - if(is_error){ + if (is_error) { isError = "报错"; - }else{ + } else { isError = "正常"; } - if(CommonFinalParam.ONE.equals(upload_scene_status)){ + if (CommonFinalParam.ONE.equals(upload_scene_status)) { upload_scene_status = "正在更新场景"; - }else if(CommonFinalParam.TWO.equals(upload_scene_status)){ + } else if (CommonFinalParam.TWO.equals(upload_scene_status)) { upload_scene_status = "正在执行运单"; - }else if(CommonFinalParam.DELETE.equals(upload_scene_status)){ + } else if (CommonFinalParam.DELETE.equals(upload_scene_status)) { upload_scene_status = "可推送"; } - jo.put("is_error",isError); - jo.put("upload_scene_status",upload_scene_status); - jo.put("procBusiness",procBusiness); - jo.put("current_order",current_order); - jo.put("connection_status",connection_status); - jo.put("dispatchable",dispatchable); + jo.put("is_error", isError); + jo.put("upload_scene_status", upload_scene_status); + jo.put("procBusiness", procBusiness); + jo.put("current_order", current_order); + jo.put("connection_status", connection_status); + jo.put("dispatchable", dispatchable); return jo; } @@ -209,13 +209,12 @@ public class XgAgvCarDeviceDriver extends AbstractDeviceDriver implements Device } - /** * 获取机器人信息 */ private void getAgvStatus() { HttpResponse robotInfo = xianGongAgvService.getRobotInfo(this.getDevice().getDevice_name()); - if(robotInfo.getStatus() == 200){ + if (robotInfo.getStatus() == 200) { JSONObject jsonObject = JSONObject.parseObject(robotInfo.body()); String report = jsonObject.getString("report"); //core出错标识 @@ -223,8 +222,8 @@ public class XgAgvCarDeviceDriver extends AbstractDeviceDriver implements Device //是否推送场景的状态 0=可推送 1=正在更新场景 2=正在执行运单 upload_scene_status = jsonObject.getString("upload_scene_status"); JSONArray objects = JSONObject.parseArray(report); - for (int i = 0; i < objects.size(); i++) { - JSONObject json = (JSONObject)objects.get(i); + for (Object object : objects) { + JSONObject json = (JSONObject) object; //是否正在执行用户下发的运单 procBusiness = json.getBooleanValue("procBusiness"); //机器人当前运单 @@ -234,7 +233,7 @@ public class XgAgvCarDeviceDriver extends AbstractDeviceDriver implements Device //机器人可接单状态 true=可接单 false=不可接单 dispatchable = json.getString("dispatchable"); } - }else{ + } else { log.info("请求{}机器人状态失败", this.getDevice().getDevice_name()); } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/rest/LimitRegionalController.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/rest/LimitRegionalController.java index 9112a0b81..3399b236f 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/rest/LimitRegionalController.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/rest/LimitRegionalController.java @@ -55,6 +55,12 @@ public class LimitRegionalController { return new ResponseEntity<>( HttpStatus.OK); } + @GetMapping("selectByRegion") + @Log("查询区域") + public ResponseEntity selectByRegion() { + return new ResponseEntity<>(limitRegionalService.selectByRegion(), HttpStatus.OK); + } + @GetMapping("updateActive") @Log("修改流量限制状态") public ResponseEntity updateStatusById(@RequestParam Map whereJson) { diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/LimitRegionalService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/LimitRegionalService.java index ed795fe71..b1a14b129 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/LimitRegionalService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/LimitRegionalService.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; +import java.util.TreeSet; @Service public interface LimitRegionalService extends CommonService { @@ -61,4 +62,10 @@ public interface LimitRegionalService extends CommonService { * @param nextRegion */ LimitRegionalDto selectByReging(String startdevice, String nextRegion); + + /** + * 查询区域 + * @return + */ + TreeSet selectByRegion(); } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/impl/LimitRegionalServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/impl/LimitRegionalServiceImpl.java index e74b812ba..da33cd9f7 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/impl/LimitRegionalServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/impl/LimitRegionalServiceImpl.java @@ -18,6 +18,7 @@ import org.nl.acs.limit_regional.domain.LimitRegional; import org.nl.acs.limit_regional.server.LimitRegionalService; import org.nl.acs.limit_regional.server.dto.LimitRegionalDto; import org.nl.acs.limit_regional.server.mapper.LimitRegionalMapper; +import org.nl.acs.opc.DeviceAppService; import org.nl.acs.utils.ConvertUtil; import org.nl.acs.utils.PageUtil; import org.nl.common.utils.SecurityUtils; @@ -30,6 +31,8 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.util.*; +import static sun.audio.AudioDevice.device; + @Service @AllArgsConstructor @Slf4j @@ -39,6 +42,9 @@ public class LimitRegionalServiceImpl extends CommonServiceImpl dataList; @@ -75,6 +81,8 @@ public class LimitRegionalServiceImpl extends CommonServiceImpl add(JSONObject json) { + TreeSet integers = deviceAppService.selectRegion(); + integers.remove(0); LimitRegional limitRegional = new LimitRegional(); limitRegional.setId(RandomUtil.randomString(8)); limitRegional.setStart_regional(json.getString("start_regional")); @@ -144,4 +152,11 @@ public class LimitRegionalServiceImpl extends CommonServiceImpl selectByRegion() { + TreeSet integers = deviceAppService.selectRegion(); + integers.remove(0); + return integers; + } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceAppService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceAppService.java index c912d0f5b..bc74092b9 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceAppService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceAppService.java @@ -7,6 +7,7 @@ import org.nl.acs.device_driver.LinewayDeviceDriver; import java.util.List; import java.util.Map; +import java.util.TreeSet; /** * @author 20220102CG\noblelift @@ -123,4 +124,8 @@ public interface DeviceAppService { */ void addDevice(String deviceCode); + /** + * 查找设备区域 + */ + TreeSet selectRegion(); } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceAppServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceAppServiceImpl.java index 1077a5976..55fd5088c 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceAppServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/opc/DeviceAppServiceImpl.java @@ -400,4 +400,13 @@ public class DeviceAppServiceImpl implements DeviceAppService, ApplicationAutoIn } } + @Override + public TreeSet selectRegion() { + TreeSet set = new TreeSet<>(); + for (Device device : devices) { + set.add(Integer.parseInt(StrUtil.isEmpty(device.getRegion()) ? "0" : device.getRegion())); + } + return set; + } + } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/DeleteDeviceErrorLog.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/DeleteDeviceErrorLog.java index b8a052274..b783d0ae3 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/DeleteDeviceErrorLog.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/DeleteDeviceErrorLog.java @@ -8,6 +8,9 @@ import org.nl.acs.instruction.domain.InstructionMybatis; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.task.domain.Task; import org.nl.acs.task.service.TaskService; +import org.nl.system.service.logging.ISysLogService; +import org.nl.system.service.logging.dao.SysLog; +import org.nl.system.service.param.ISysParamService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -29,19 +32,31 @@ public class DeleteDeviceErrorLog { @Autowired private InstructionService instructionService; + @Autowired + private ISysLogService sysLogService; + + @Autowired + private ISysParamService paramService; + public void run(){ - log.info("开始删除设备报警记录"); + + int days = Integer.parseInt(paramService.findByCode("logs_day").getValue()); + log.info("开始自动清理日志"); errorLogServer.remove(Wrappers.lambdaQuery(AcsDeviceErrorLog.class) - .lt(AcsDeviceErrorLog::getError_time, LocalDateTime.now().minusDays(15))); + .lt(AcsDeviceErrorLog::getError_time, LocalDateTime.now().minusDays(days))); log.info("已将设备报警记录中超过十五天的删除成功"); taskService.remove(Wrappers.lambdaQuery(Task.class) - .lt(Task::getCreate_time, LocalDateTime.now().minusDays(30))); + .lt(Task::getCreate_time, LocalDateTime.now().minusDays(days))); log.info("已将任务记录中超过三十天的删除成功"); instructionService.remove(Wrappers.lambdaQuery(InstructionMybatis.class) - .lt(InstructionMybatis::getCreate_time, LocalDateTime.now().minusDays(30))); + .lt(InstructionMybatis::getCreate_time, LocalDateTime.now().minusDays(days))); log.info("已将指令记录中超过三十天的删除成功"); + + sysLogService.remove(Wrappers.lambdaQuery(SysLog.class) + .lt(SysLog::getCreate_time, LocalDateTime.now().minusDays(days))); + log.info("已将日志记录中超过三十天的删除成功"); } } diff --git a/acs2/nladmin-ui/src/api/acs/regional/acsRegional.js b/acs2/nladmin-ui/src/api/acs/regional/acsRegional.js index 23da64ade..a9c4e9609 100644 --- a/acs2/nladmin-ui/src/api/acs/regional/acsRegional.js +++ b/acs2/nladmin-ui/src/api/acs/regional/acsRegional.js @@ -38,4 +38,11 @@ export function updateOn(id, is_active) { }) } -export default { add, edit, del, updateOn, reload } +export function deviceByRegion() { + return request({ + url: '/api/acsRegional/selectByRegion', + method: 'get' + }) +} + +export default { add, edit, del, updateOn, reload, deviceByRegion } diff --git a/acs2/nladmin-ui/src/views/acs/regional/index.vue b/acs2/nladmin-ui/src/views/acs/regional/index.vue index c33d1c132..76b9bc1a3 100644 --- a/acs2/nladmin-ui/src/views/acs/regional/index.vue +++ b/acs2/nladmin-ui/src/views/acs/regional/index.vue @@ -40,13 +40,42 @@ :label="$t('regional.table.origin_region')" prop="start_regional" > - + + + + - + + + + { + console.log(res) + this.deviceRegion = res + }) + .catch(err => { + console.log(err.response.data.message) + }) + }, updateIsOn(id, is_active) { var msg = this.$t('regional.table.disabled') if (is_active === '1') { From 95c0ce68a78cd39e9994ab70cd16c477be3320d7 Mon Sep 17 00:00:00 2001 From: yanps Date: Sun, 4 Feb 2024 15:48:38 +0800 Subject: [PATCH 14/21] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E5=8F=82=E6=95=B0=E5=88=86=E9=A1=B5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rest/LimitRegionalController.java | 3 ++- .../server/LimitRegionalService.java | 2 +- .../server/impl/LimitRegionalServiceImpl.java | 15 +++++++++------ .../controller/param/SysParamController.java | 3 ++- .../nl/system/service/param/ISysParamService.java | 4 +++- .../service/param/impl/SysParamServiceImpl.java | 11 ++++++++--- 6 files changed, 25 insertions(+), 13 deletions(-) diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/rest/LimitRegionalController.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/rest/LimitRegionalController.java index 3399b236f..22685142c 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/rest/LimitRegionalController.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/rest/LimitRegionalController.java @@ -37,7 +37,8 @@ public class LimitRegionalController { @PostMapping @Log("新增流量限制") public ResponseEntity add(@RequestBody JSONObject json) { - return new ResponseEntity<>(limitRegionalService.add(json), HttpStatus.OK); + limitRegionalService.add(json); + return new ResponseEntity<>(HttpStatus.OK); } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/LimitRegionalService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/LimitRegionalService.java index b1a14b129..67a6de721 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/LimitRegionalService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/LimitRegionalService.java @@ -35,7 +35,7 @@ public interface LimitRegionalService extends CommonService { * @param json * @return */ - List add(JSONObject json); + void add(JSONObject json); /** diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/impl/LimitRegionalServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/impl/LimitRegionalServiceImpl.java index da33cd9f7..b4b88e2d2 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/impl/LimitRegionalServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/limit_regional/server/impl/LimitRegionalServiceImpl.java @@ -80,11 +80,9 @@ public class LimitRegionalServiceImpl extends CommonServiceImpl add(JSONObject json) { - TreeSet integers = deviceAppService.selectRegion(); - integers.remove(0); + public void add(JSONObject json) { LimitRegional limitRegional = new LimitRegional(); - limitRegional.setId(RandomUtil.randomString(8)); + limitRegional.setId(String.valueOf(RandomUtil.randomInt(8))); limitRegional.setStart_regional(json.getString("start_regional")); limitRegional.setNext_regional(json.getString("next_regional")); limitRegional.setStart_exclude_device(json.getString("startExcludeDevice")); @@ -99,7 +97,6 @@ public class LimitRegionalServiceImpl extends CommonServiceImpl query(@RequestParam Map whereJson, PageQuery page){ + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ return new ResponseEntity<>(TableDataInfo.build(paramService.queryPage(whereJson, page)), HttpStatus.OK); } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/ISysParamService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/ISysParamService.java index 8a2a61a02..9e9107d1b 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/ISysParamService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/ISysParamService.java @@ -1,9 +1,11 @@ package org.nl.system.service.param; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.common.domain.query.PageQuery; import org.nl.system.service.param.dao.Param; +import org.springframework.data.domain.Pageable; import java.util.List; import java.util.Map; @@ -25,7 +27,7 @@ public interface ISysParamService extends IService { * @param page 分页信息 * @return */ - Page queryPage(Map whereJson, PageQuery page); + IPage queryPage(Map whereJson, Pageable page); /** * 创建参数 diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/impl/SysParamServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/impl/SysParamServiceImpl.java index 87d07c370..d77be167e 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/impl/SysParamServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/impl/SysParamServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; 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.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; +import org.nl.acs.task.domain.Task; +import org.nl.acs.utils.PageUtil; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; @@ -17,6 +20,7 @@ import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.dao.Param; import org.nl.system.service.param.dao.mapper.SysParamMapper; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -39,11 +43,12 @@ public class SysParamServiceImpl extends ServiceImpl impl private SysParamMapper paramMapper; @Override - public Page queryPage(Map whereJson, PageQuery page) { + public IPage queryPage(Map whereJson, Pageable page) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.orderBy(true, true, "create_time"); - Page paramPage = paramMapper.selectPage(page.build(), queryWrapper); - return paramPage; + IPage queryPage = PageUtil.toMybatisPage(page); + IPage paramIPage = paramMapper.selectPage(queryPage, queryWrapper); + return paramIPage; } @Override From 160cbd506aa099c6c5a0d4f0ac7c4fe4e670117a Mon Sep 17 00:00:00 2001 From: yanps Date: Sun, 4 Feb 2024 18:00:15 +0800 Subject: [PATCH 15/21] =?UTF-8?q?opt:=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acs/instruction/service/impl/InstructionServiceImpl.java | 1 + .../java/org/nl/acs/task/service/impl/TaskServiceImpl.java | 5 +++++ acs2/nladmin-ui/src/i18n/langs/menu/en.js | 3 ++- acs2/nladmin-ui/src/i18n/langs/menu/in.js | 3 ++- acs2/nladmin-ui/src/i18n/langs/menu/zh.js | 3 ++- acs2/nladmin-ui/src/views/system/param/index.vue | 2 +- 6 files changed, 13 insertions(+), 4 deletions(-) diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index 19f56d5ae..6ade6ee24 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -256,6 +256,7 @@ public class InstructionServiceImpl extends CommonServiceImpl insPage = instructionMapper.selectPage(queryPage, wrapper); final JSONObject json = (JSONObject) JSON.toJSON(ConvertUtil.convertPage(insPage, InstructionDto.class)); return json; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index e842c7561..5fbf0dbdf 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -237,6 +237,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme String status = (String) whereJson.get("status"); String point_code = (String) whereJson.get("point_code"); String is_over = (String) whereJson.get("is_over"); + String task_type = (String) whereJson.get("task_type"); IPage queryPage = PageUtil.toMybatisPage(page); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); @@ -255,6 +256,9 @@ public class TaskServiceImpl extends CommonServiceImpl impleme if (!StrUtil.isEmpty(point_code)) { wrapper.and(task -> task.like(Task::getStart_point_code, point_code).or().like(Task::getNext_point_code, point_code)); } + if(StrUtil.isNotEmpty(task_type)){ + wrapper.eq(Task::getTask_type, task_type); + } if (!StrUtil.isEmpty(is_over)) { if (StrUtil.equals(is_over, CommonFinalParam.ONE)) { wrapper.ge(Task::getTask_status, TaskStatusEnum.FINISHED.getIndex()); @@ -362,6 +366,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme if (!StrUtil.isEmpty(create_time) && !StrUtil.isEmpty(end_time)) { wrapper.between(Task::getCreate_time, create_time, end_time); } + wrapper.orderByDesc(Task::getCreate_time); IPage taskPage = taskMapper.selectPage(queryPage, wrapper); final JSONObject json = (JSONObject) JSON.toJSON(ConvertUtil.convertPage(taskPage, TaskDto.class)); JSONArray array = json.getJSONArray("content"); diff --git a/acs2/nladmin-ui/src/i18n/langs/menu/en.js b/acs2/nladmin-ui/src/i18n/langs/menu/en.js index 73b924ced..cf3e4a73d 100644 --- a/acs2/nladmin-ui/src/i18n/langs/menu/en.js +++ b/acs2/nladmin-ui/src/i18n/langs/menu/en.js @@ -18,7 +18,8 @@ export default { 'outside_chain': 'Out Chain', 'cache': 'Cache', 'visible': 'Visible', - 'create_time': 'Create Time' + 'create_time': 'Create Time', + 'SystemParam': 'System Parameters' }, 'dialog': { 'menu_type': 'Menu Type', diff --git a/acs2/nladmin-ui/src/i18n/langs/menu/in.js b/acs2/nladmin-ui/src/i18n/langs/menu/in.js index 25ca975c8..e53aceda1 100644 --- a/acs2/nladmin-ui/src/i18n/langs/menu/in.js +++ b/acs2/nladmin-ui/src/i18n/langs/menu/in.js @@ -18,7 +18,8 @@ export default { 'outside_chain': 'Rantai Luar', 'cache': 'Cache', 'visible': 'Terlihat', - 'create_time': 'Tarikh Penciptaan' + 'create_time': 'Tarikh Penciptaan', + 'SystemParam': 'Parameter Sistem' }, 'dialog': { 'menu_type': 'Jenis Menu', diff --git a/acs2/nladmin-ui/src/i18n/langs/menu/zh.js b/acs2/nladmin-ui/src/i18n/langs/menu/zh.js index e6815aaf3..7a1c0ae35 100644 --- a/acs2/nladmin-ui/src/i18n/langs/menu/zh.js +++ b/acs2/nladmin-ui/src/i18n/langs/menu/zh.js @@ -18,7 +18,8 @@ export default { 'outside_chain': '外链', 'cache': '缓存', 'visible': '可见', - 'create_time': '创建日期' + 'create_time': '创建日期', + 'SystemParam': '系统参数' }, 'dialog': { 'menu_type': '菜单类型', diff --git a/acs2/nladmin-ui/src/views/system/param/index.vue b/acs2/nladmin-ui/src/views/system/param/index.vue index fc67a8e1f..fb183fe4d 100644 --- a/acs2/nladmin-ui/src/views/system/param/index.vue +++ b/acs2/nladmin-ui/src/views/system/param/index.vue @@ -81,7 +81,7 @@ export default { components: { pagination, crudOperation, udOperation }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { - return CRUD({ title: 'menu.SystemParam', url: 'api/param', idField: 'id', sort: 'id,desc', crudMethod: { ...crudParam }, + return CRUD({ title: 'menu.table_title.SystemParam', url: 'api/param', idField: 'id', sort: 'id,desc', crudMethod: { ...crudParam }, optShow: { add: true, edit: true, From 3de65d80fa882e8e4efde0b340ffb7baac1679d7 Mon Sep 17 00:00:00 2001 From: tuqiang <437016993@qq.com> Date: Sun, 18 Feb 2024 13:34:11 +0800 Subject: [PATCH 16/21] =?UTF-8?q?rev:=E4=BC=98=E5=8C=96agv=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=B8=8B=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../run/TwoNDCSocketConnectionAutoRun.java | 348 ++++++++++++++++++ .../StandardAutodoorDeviceDriver.java | 7 + .../service/impl/InstructionServiceImpl.java | 44 ++- .../task/service/impl/TaskServiceImpl.java | 22 ++ 4 files changed, 417 insertions(+), 4 deletions(-) create mode 100644 acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java new file mode 100644 index 000000000..7587a9b3c --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java @@ -0,0 +1,348 @@ +package org.nl.acs.auto.run; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.AcsConfig; +import org.nl.acs.agv.server.NDCAgvService; +import org.nl.acs.device.domain.Device; +import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.agv.ndctwo.AgvNdcTwoDeviceDriver; +import org.nl.acs.device_driver.autodoor.standard_autodoor.StandardAutodoorDeviceDriver; +import org.nl.acs.ext.wms.service.AcsToWmsService; +import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; +import org.nl.acs.instruction.domain.Instruction; +import org.nl.acs.instruction.service.InstructionService; +import org.nl.acs.instruction.service.impl.InstructionServiceImpl; +import org.nl.acs.log.service.DeviceExecuteLogService; +import org.nl.acs.opc.DeviceAppService; +import org.nl.config.SpringContextHolder; +import org.nl.config.lucene.service.LuceneExecuteLogService; +import org.nl.system.service.param.ISysParamService; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.util.Date; +import java.util.List; + +import static org.nl.acs.agv.server.impl.NDCAgvServiceImpl.Bytes2HexString; + + +@Slf4j +@Component +public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { + + Socket s; + String ip = "192.168.46.225"; + int port = 1234; + static DataOutputStream dos; + static DataInputStream dis; + private int recordTimeOut = 10000; + private Date recordTime; + String[] ERROR = new String[]{ + "货叉尖部传感器触发", "S300传感器触发", "载货状态改变", "急停按钮触发", "触边开关出发", "需要复位", + "停在充电位", "取货失败", "放货失败", "轮子打滑", "没有动作码不能进入站点", "取货时有货", "丢失定位", + "抬叉停止"}; + boolean bConnected = true; + + boolean isReConnect = false; + + @Autowired + ISysParamService paramService; + @Autowired + AutoRunService autoRunService; + @Autowired + LuceneExecuteLogService luceneExecuteLogService; + + + public TwoNDCSocketConnectionAutoRun() { + this.recordTime = new Date((new Date()).getTime() - (long) this.recordTimeOut); + } + + @Override + public String getCode() { + return TwoNDCSocketConnectionAutoRun.class.getSimpleName(); + } + + @Override + public String getName() { + return "2楼1区域AGV系统"; + } + + @Override + public void autoRun() throws IOException { + ISysParamService paramService = SpringContextHolder.getBean(SysParamServiceImpl.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系统链接开始"); + ip = paramService.findByCode(AcsConfig.AGVURL2).getValue(); + port = Integer.parseInt(paramService.findByCode(AcsConfig.AGVPORT2).getValue()); +// byte[] b = new byte[1024]; +// s = new Socket(ip, port); +// System.out.println("2楼1区域Agv链接成功"); +// dos = new DataOutputStream(s.getOutputStream()); +// dis = new DataInputStream(s.getInputStream()); + + InetSocketAddress socketAddress = new InetSocketAddress(ip, port); + + byte[] b = new byte[1024]; + s = new Socket(); + s.connect(socketAddress,2*1000); + s.setKeepAlive(true);//长链接 +// s.setSoTimeout(1000* 60 * 10);//读取超时时间 + dos = new DataOutputStream(s.getOutputStream()); + dis = new DataInputStream(s.getInputStream()); + + while (bConnected) { + int count = dis.read(b); + + if (count == -1) { + log.error("agv连接出现异常:服务端被关闭"); + if (ObjectUtil.isNotEmpty(s)) { + s.close(); + } + break; + } + + int[] arr = new int[count]; + StringBuffer bs = new StringBuffer(); + + for (int i = 0; i < count; i++) { + int temp = b[i]; + if (temp < 0) + temp += 256; + arr[i] = temp; + StringBuffer bs1 = new StringBuffer("0"); + bs.append(temp < 16 ? bs1.append(Integer.toHexString(temp)) : Integer.toHexString(temp)); + } + + System.out.println("收到请求参数:" + bs); + boolean flag = false; + if (arr[8] * 256 + arr[9] == 0x73) { + byte[] data = null; + System.out.println("接收agv上报信息:" + bs); + //执行阶段 + int phase = arr[16] * 256 + arr[17]; + // agv任务号 + int index = arr[12] * 256 + arr[13]; + //任务号 + int ikey = arr[26] * 256 + arr[27]; + //站点号 + int agvaddr = arr[18] * 256 + arr[19]; + //车号 + int carno = arr[20]; + Instruction inst = null; + if (ikey != 0) { + inst = instructionService.findByCodeFromCache(String.valueOf(ikey)); + } + log.info("接收agv上报信息:" + bs); + log.info("接收agv上报信息:" + "phase--" + phase + " index--" + index + " ikey--" + ikey + " agvaddr--" + agvaddr + " Car--" + carno); + Device device = null; + String device_code = null; + String old_device_code = null; + String emptyNum = null; + //自动门 + StandardAutodoorDeviceDriver standardAutodoorDeviceDriver; + 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; + } + device = deviceAppService.findDeviceByCode(device_code); + } + + AgvNdcTwoDeviceDriver agvNdcTwoDeviceDriver; + //开始任务 + if (phase == 0x01) { + if (!ObjectUtil.isEmpty(inst)) { + inst.setInstruction_status("1"); + inst.setAgv_jobno(String.valueOf(index)); + inst.setSend_status("1"); + instructionService.update(inst); + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + flag = true; + } + //任务完毕 + //(无车id及状态) + else if (phase == 0x14) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + } else { + String agvcar = inst.getCarno(); + Device agvDevice = deviceAppService.findDeviceByCode(agvcar); + if (agvDevice != null) { + if (agvDevice.getDeviceDriver() instanceof AgvNdcTwoDeviceDriver) { + agvNdcTwoDeviceDriver = (AgvNdcTwoDeviceDriver) agvDevice.getDeviceDriver(); + agvNdcTwoDeviceDriver.setInstruction(null); + } + } + inst.setInstruction_status("2"); + try { + instructionService.finish(inst); + } catch (Exception e) { + e.printStackTrace(); + } + } + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + //请求删除任务 + //(需要WCS反馈) + else if (phase == 0x30) { + data = ndcAgvService.sendAgvTwoModeInst(0x8F, index, 0); + } + //任务删除确认 + //(需要WCS反馈) + else if (phase == 0xFF) { + if (ObjectUtil.isEmpty(inst)) { + log.info("未找到指令号{}对应的指令", ikey); + } else { + instructionService.cancelNOSendAgv(inst.getInstruction_id()); + } + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } else if (phase == 0x50) { + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + if(ObjectUtil.isNotEmpty(device)) { + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + try { + standardAutodoorDeviceDriver.writing("to_command", 1); + } catch (Exception e) { + log.info("下发电气信号失败:" + e.getMessage()); + e.printStackTrace(); + } + if (standardAutodoorDeviceDriver.getAction() == 1 && standardAutodoorDeviceDriver.getTo_command() == 1 ) { + log.info("下发开门信号值为:{}", standardAutodoorDeviceDriver.getTo_command()); + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + } + } else { + log.info(agvaddr + "对应设备号为空!"); + } + + } else if (phase == 0x51) { + if (ObjectUtil.isEmpty(device_code)) { + log.info(agvaddr + "对应设备号为空!"); + return; + } + if(ObjectUtil.isNotEmpty(device)){ + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + try { + standardAutodoorDeviceDriver.writing("to_command", 2); + } catch (Exception e) { + log.info("下发电气信号失败:" + e.getMessage()); + e.printStackTrace(); + } + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + } else { + log.info(device_code + "对应设备号为空!"); + } + + } else { + //上报异常信息 + //(不需要WCS反馈) + 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])); + } + try{ + if(ObjectUtil.isNotEmpty(device)){ + if (device.getDeviceDriver() instanceof AgvNdcTwoDeviceDriver) { + agvNdcTwoDeviceDriver = (AgvNdcTwoDeviceDriver) device.getDeviceDriver(); + agvNdcTwoDeviceDriver.processSocket(arr); + } + } else { + log.info("当前phase:"+ phase +"未找到对应设备"); + } + } catch (Exception e){ + log.info("processSocket出错:{},{}" ,e, e.getMessage()); + e.printStackTrace(); + } + } + if (!ObjectUtil.isEmpty(data)) { + write(data); + } + + } else { + System.out.println("agv上报不是0073类型动作,不处理"); + } + } + + } catch (Exception e) { + + + 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()); + + } finally { + + + } + + } + + + @Override + public void stop() { + super.after(); + try { + s.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + public static void write(byte[] b) { + try { + log.info("下发agv数据:" + Bytes2HexString(b)); + System.out.println("下发agv数据:" + Bytes2HexString(b)); + dos.write(b); + dos.flush(); + } catch (Exception e) { + // TODO Auto-generated catch block + try{ + Thread.sleep(5000); + log.info("再次下发agv数据:" + Bytes2HexString(b)); + System.out.println("再次下发agv数据:" + Bytes2HexString(b)); + dos.write(b); + dos.flush(); + } catch (Exception e1){ + e1.printStackTrace(); + } + + } + } +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDeviceDriver.java index 4d73afe1d..d86e60da9 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDeviceDriver.java @@ -85,6 +85,11 @@ public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implem private Date instruction_require_time = new Date(); private Date instruction_finished_time = new Date(); + int to_command = 0; + int last_to_command = 0; + + + private int instruction_require_time_out; boolean requireSucess = false; @@ -106,6 +111,7 @@ public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implem mode = this.itemProtocol.getMode(); action = this.itemProtocol.getAction(); error = this.itemProtocol.getError(); + to_command = this.itemProtocol.getToCommand(); if (mode != last_mode) { } if (action != last_action) { @@ -124,6 +130,7 @@ public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implem last_mode = mode; last_error = error; last_state = state; + last_to_command = to_command; //message = StringFormatUtl.format("设备报警:{}", new Object[]{}); // String manual_create_task = this.getDevice().getExtraValue().get("manual_create_task").toString(); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index 6ade6ee24..ea19e9757 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -403,7 +403,6 @@ public class InstructionServiceImpl extends CommonServiceImpl impleme instdto.setNext_point_code2(next_point_code2); instdto.setAgv_system_type(agv_system_type); instdto.setAgv_inst_type(CommonFinalParam.ONE); + + if (!StrUtil.equals(agv_system_type, "1")) { + // task_type + // 1、生箔; Itype=1:取空,取满,放空,放满; + // 2、分切 Itype=3取满、取空、放满、放空; + // 3、普通任务 Itype=2:取货、放货; + // 4、叉车任务 + // 5、输送任务 + // 6、行架 + // 7、立库 + if (StrUtil.equals(task_type, "1")) { + instdto.setAgv_inst_type("1"); + } else if (StrUtil.equals(task_type, "3")) { + instdto.setAgv_inst_type("2"); + } else if (StrUtil.equals(task_type, "2")) { + instdto.setAgv_inst_type("3"); + } else if (StrUtil.equals(task_type, "8")) { + instdto.setAgv_inst_type("2"); + } + } else { + instdto.setAgv_inst_type("4"); + } instructionservice.create2(instdto); acsTask.setTask_status(CommonFinalParam.ONE); From b0388088987ca44c81fd985a4749dc81cea1c686 Mon Sep 17 00:00:00 2001 From: lishuai <1793460677@qq.com> Date: Sun, 18 Feb 2024 13:41:31 +0800 Subject: [PATCH 17/21] =?UTF-8?q?add=20:=E7=99=BB=E5=85=A5=E7=B2=92?= =?UTF-8?q?=E5=AD=90=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VolumeTwoManipulatorDefination.java | 6 +- acs2/nladmin-ui/package.json | 2 + acs2/nladmin-ui/src/App.vue | 1 + acs2/nladmin-ui/src/main.js | 4 + .../src/views/acs/device/config.vue | 4 +- .../volume_two_manipulator.vue | 582 ++++++++++++++++++ acs2/nladmin-ui/src/views/login.vue | 29 + 7 files changed, 624 insertions(+), 4 deletions(-) create mode 100644 acs2/nladmin-ui/src/views/acs/device/driver/one_manipulator/volume_two_manipulator.vue diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/volume_two_manipulator/VolumeTwoManipulatorDefination.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/volume_two_manipulator/VolumeTwoManipulatorDefination.java index 1c2ae19fb..d951f54be 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/volume_two_manipulator/VolumeTwoManipulatorDefination.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/volume_two_manipulator/VolumeTwoManipulatorDefination.java @@ -14,17 +14,17 @@ import java.util.List; public class VolumeTwoManipulatorDefination implements OpcDeviceDriverDefination { @Override public String getDriverCode() { - return "trapped_manipulator"; + return "volume_two_manipulator"; } @Override public String getDriverName() { - return "堆叠行架"; + return "二楼到一楼子卷搬运行架行架"; } @Override public String getDriverDescription() { - return "堆叠行架"; + return "二楼到一楼子卷搬运行架行架"; } @Override diff --git a/acs2/nladmin-ui/package.json b/acs2/nladmin-ui/package.json index 4a758ddde..4e7289587 100644 --- a/acs2/nladmin-ui/package.json +++ b/acs2/nladmin-ui/package.json @@ -59,6 +59,7 @@ "mavon-editor": "^2.9.0", "normalize.css": "7.0.0", "nprogress": "0.2.0", + "particles.js": "^2.0.0", "path-to-regexp": "2.4.0", "qrcodejs2": "0.0.2", "qs": "^6.9.1", @@ -123,6 +124,7 @@ "serve-static": "^1.13.2", "svg-sprite-loader": "4.1.3", "svgo": "1.2.0", + "vue-particles": "^1.0.9", "vue-template-compiler": "2.6.10" }, "engines": { diff --git a/acs2/nladmin-ui/src/App.vue b/acs2/nladmin-ui/src/App.vue index 583814934..0bbe067db 100644 --- a/acs2/nladmin-ui/src/App.vue +++ b/acs2/nladmin-ui/src/App.vue @@ -34,3 +34,4 @@ export default { } } + diff --git a/acs2/nladmin-ui/src/main.js b/acs2/nladmin-ui/src/main.js index e4e0e81c0..8bce37da6 100644 --- a/acs2/nladmin-ui/src/main.js +++ b/acs2/nladmin-ui/src/main.js @@ -9,6 +9,10 @@ import 'font-awesome/css/font-awesome.css' import mavonEditor from 'mavon-editor' import 'mavon-editor/dist/css/index.css' + +import VueParticles from 'vue-particles' +Vue.use(VueParticles) + // 数据字典 import dict from './components/Dict' diff --git a/acs2/nladmin-ui/src/views/acs/device/config.vue b/acs2/nladmin-ui/src/views/acs/device/config.vue index 8248b018d..4ee8ce4ef 100644 --- a/acs2/nladmin-ui/src/views/acs/device/config.vue +++ b/acs2/nladmin-ui/src/views/acs/device/config.vue @@ -122,6 +122,7 @@ import trapped_manipulator from '@/views/acs/device/driver/one_manipulator/trapp import box_package_manipulator from '@/views/acs/device/driver/one_manipulator/box_package_manipulator.vue' import box_storage_manipulator from '@/views/acs/device/driver/one_manipulator/box_storage_manipulator.vue' import return_good_manipulator from '@/views/acs/device/driver/one_manipulator/return_good_manipulator.vue' +import volume_two_manipulator from '@/views/acs/device/driver/one_manipulator/volume_two_manipulator.vue' import box_storage_out_conveyor from '@/views/acs/device/driver/one_conveyor/box_storage_out_conveyor.vue' import box_subvolumes_conveyor from '@/views/acs/device/driver/one_conveyor/box_subvolumes_conveyor.vue' import finished_product_out_with_bind_lable_conveyor from '@/views/acs/device/driver/one_conveyor/finished_product_out_with_bind_lable_conveyor.vue' @@ -186,7 +187,8 @@ export default { green_foil_machine_button, xg_agv_car, oven_inspect_site, - manipulator_agv_station + manipulator_agv_station, + volume_two_manipulator }, dicts: ['device_type'], mixins: [crud], diff --git a/acs2/nladmin-ui/src/views/acs/device/driver/one_manipulator/volume_two_manipulator.vue b/acs2/nladmin-ui/src/views/acs/device/driver/one_manipulator/volume_two_manipulator.vue new file mode 100644 index 000000000..a2d26dd1f --- /dev/null +++ b/acs2/nladmin-ui/src/views/acs/device/driver/one_manipulator/volume_two_manipulator.vue @@ -0,0 +1,582 @@ + + + + + diff --git a/acs2/nladmin-ui/src/views/login.vue b/acs2/nladmin-ui/src/views/login.vue index 18d1ed90b..c1e48e667 100644 --- a/acs2/nladmin-ui/src/views/login.vue +++ b/acs2/nladmin-ui/src/views/login.vue @@ -1,5 +1,24 @@