From 67c68ae05b0cebf08d30ee5546de8dc74196078f Mon Sep 17 00:00:00 2001 From: psh Date: Wed, 17 Jul 2024 16:17:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B6=85=E5=A8=81fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../run/OneNDCSocketConnectionAutoRun.java | 261 ++++++++++-------- .../nl/wms/sch/task_manage/AbstractTask.java | 2 +- 2 files changed, 141 insertions(+), 122 deletions(-) diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java index b3ff96d..f37781f 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java @@ -28,6 +28,7 @@ import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -100,154 +101,155 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { break; } - int[] arr = new int[count]; + int[] arrAll = 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; + arrAll[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; - log.info("接收agv上报信息:" + bs); - if (arr[8] * 256 + arr[9] == 0x73) { - byte[] data = null; - //执行阶段 - 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 link_inst = null; - Instruction inst = null; - List insts = null; - boolean link_flag = false; - Device agv_device = null; - if (carno != 0) { - agv_device = deviceAppService.findDeviceByCode(String.valueOf(carno)); - } - if (ikey != 0) { - inst = instructionService.findByCodeFromCache(String.valueOf(ikey)); - if (ObjectUtil.isEmpty(inst)) { - inst = instructionService.findByCode(String.valueOf(ikey)); + int chunkSize = 28; + List chunks = this.splitArray(arrAll, chunkSize); + for (int i = 0; i < chunks.size(); i++) { + int[] arr = chunks.get(i); + if (arr[8] * 256 + arr[9] == 0x73) { + byte[] data = null; + //执行阶段 + 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 link_inst = null; + Instruction inst = null; + List insts = null; + boolean link_flag = false; + Device agv_device = null; + if (carno != 0) { + agv_device = deviceAppService.findDeviceByCode(String.valueOf(carno)); } - } - if (!ObjectUtil.isEmpty(link_inst)) { - link_flag = true; - } - 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; - 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]; - } else { - device_code = old_device_code; + if (ikey != 0) { + inst = instructionService.findByCodeFromCache(String.valueOf(ikey)); + if (ObjectUtil.isEmpty(inst)) { + inst = instructionService.findByCode(String.valueOf(ikey)); + } + } + if (!ObjectUtil.isEmpty(link_inst)) { + link_flag = true; + } + 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; + 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]; + } else { + device_code = old_device_code; + } + device = deviceAppService.findDeviceByCode(device_code); } - device = deviceAppService.findDeviceByCode(device_code); - } - // - AgvNdcOneDeviceDriver agvNdcOneDeviceDriver; - StandardAutodoorDeviceDriver standardAutodoorDeviceDriver; - - //开始任务/上报订单号 - if (phase == 0x01) { - if (!ObjectUtil.isEmpty(inst)) { - inst.setInstruction_status("1"); - inst.setAgv_jobno(String.valueOf(index)); - inst.setSend_status("1"); - instructionService.update(inst); + // + AgvNdcOneDeviceDriver agvNdcOneDeviceDriver; + StandardAutodoorDeviceDriver standardAutodoorDeviceDriver; + + //开始任务/上报订单号 + 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.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); } - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); - } - //任务完毕 - //(无车id及状态) - else if (phase == 0x0A) { - if (!ObjectUtil.isEmpty(inst)) { - instructionService.finish(inst.getInstruction_id()); - } else { - log.warn("指令号:{},未反馈wms任务完成,因为agv上报指令号查询指令为空!"); + //任务完毕 + //(无车id及状态) + else if (phase == 0x0A) { + if (!ObjectUtil.isEmpty(inst)) { + instructionService.finish(inst.getInstruction_id()); + } else { + log.warn("指令号:{},未反馈wms任务完成,因为agv上报指令号查询指令为空!"); + } + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); + log.info("指令号:{},已反馈agv任务完成!"); } - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); - log.info("指令号:{},已反馈agv任务完成!"); - } - //请求删除任务 - //(需要WCS反馈) - else if (phase == 0x30) { - data = NDCAgvService.sendAgvOneModeInst(0x8F, index, 0, 0, 0, 0, 0); - } //进入区域 - else if (phase == 0x50) { - //开门 - if (device!=null&&device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { - standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); - standardAutodoorDeviceDriver.OpenOrClose("1"); - if (standardAutodoorDeviceDriver.getAction() == 1) { + //请求删除任务 + //(需要WCS反馈) + else if (phase == 0x30) { + data = NDCAgvService.sendAgvOneModeInst(0x8F, index, 0, 0, 0, 0, 0); + } //进入区域 + else if (phase == 0x50) { + //开门 + if (device != null && device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); standardAutodoorDeviceDriver.OpenOrClose("1"); - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); + if (standardAutodoorDeviceDriver.getAction() == 1) { + standardAutodoorDeviceDriver.OpenOrClose("1"); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); + } } } - } - //离开区域 - else if (phase == 0x51) { - //关门 - if (device!=null&&device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { - standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); - standardAutodoorDeviceDriver.OpenOrClose("2"); - if (standardAutodoorDeviceDriver.getAction() == 2) { - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); + //离开区域 + else if (phase == 0x51) { + //关门 + if (device != null && device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); + standardAutodoorDeviceDriver.OpenOrClose("2"); + if (standardAutodoorDeviceDriver.getAction() == 2) { + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); + } } - } - //任务删除确认 - //(需要WCS反馈) - }else if (phase == 0xFF) { + //任务删除确认 + //(需要WCS反馈) + } else if (phase == 0xFF) { - if (!ObjectUtil.isEmpty(inst)) { if (!ObjectUtil.isEmpty(inst)) { - instructionService.cancelNOSendAgv(inst.getInstruction_id()); - taskService.cancel(inst.getTask_id()); + if (!ObjectUtil.isEmpty(inst)) { + instructionService.cancelNOSendAgv(inst.getInstruction_id()); + taskService.cancel(inst.getTask_id()); + } } - } - data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); + data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); - } else { - //上报异常信息 - //(不需要WCS反馈) - if (phase == 0x67) { - device = deviceAppService.findDeviceByCode(Integer.toString(arr[27])); } else { - device = deviceAppService.findDeviceByCode(Integer.toString(arr[20])); - } - if (ObjectUtil.isNotEmpty(device)) { - if (device.getDeviceDriver() instanceof AgvNdcOneDeviceDriver) { - agvNdcOneDeviceDriver = (AgvNdcOneDeviceDriver) device.getDeviceDriver(); - agvNdcOneDeviceDriver.processSocket(arr); + //上报异常信息 + //(不需要WCS反馈) + if (phase == 0x67) { + device = deviceAppService.findDeviceByCode(Integer.toString(arr[27])); + } else { + device = deviceAppService.findDeviceByCode(Integer.toString(arr[20])); + } + if (ObjectUtil.isNotEmpty(device)) { + if (device.getDeviceDriver() instanceof AgvNdcOneDeviceDriver) { + agvNdcOneDeviceDriver = (AgvNdcOneDeviceDriver) device.getDeviceDriver(); + agvNdcOneDeviceDriver.processSocket(arr); + } } - } + } + if (!ObjectUtil.isEmpty(data)) { + write(data); + } + } else { + log.info("agv上报不是0073类型动作,不处理"); } - if (!ObjectUtil.isEmpty(data)) { - write(data); - } - - } else { - log.info("agv上报不是0073类型动作,不处理"); } } @@ -301,5 +303,22 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { } } + + public static List splitArray(int[] array, int chunkSize) { + List resultList = new ArrayList<>(); + int length = array.length; + + for (int i = 0; i < length; i += chunkSize) { + // 计算当前子数组的大小 + int currentChunkSize = Math.min(chunkSize, length - i); + + // 创建并填充新的子数组 + int[] chunk = new int[currentChunkSize]; + System.arraycopy(array, i, chunk, 0, currentChunkSize); + resultList.add(chunk); + } + + return resultList; + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java index ae6e24a..25d950f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java @@ -163,7 +163,7 @@ public abstract class AbstractTask { * @param param * @throws BadRequestException */ - public void apply(JSONObject param) throws BadRequestException { + public synchronized void apply(JSONObject param) throws BadRequestException { // 申请任务 SchBaseTask task = new SchBaseTask(); // 任务实体 String apply_point_code = param.getString("device_code"); // 请求点