diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java b/acs/nladmin-system/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java index 4b622fb7a..0170adba8 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java @@ -184,8 +184,8 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { if (ObjectUtil.isEmpty(inst)) { log.info("未找到指令号{}对应的指令", ikey); } else { - if("1".equals(inst.getInstruction_type()) || "2".equals(inst.getInstruction_type()) || "3".equals(inst.getInstruction_type())) { - String agvcar = inst.getCarno(); + String agvcar = inst.getCarno(); + if(StrUtil.isNotEmpty(agvcar) && !StrUtil.equals(agvcar,"0")) { Device agvDevice = deviceAppService.findDeviceByCode(agvcar); if (agvDevice != null) { if (agvDevice.getDeviceDriver() instanceof AgvNdcTwoDeviceDriver) { 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 65b183682..d42558a7d 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 @@ -16,6 +16,7 @@ import org.nl.acs.agv.server.AgvService; 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.service.dto.DeviceDto; import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.device_driver.RouteableDeviceDriver; import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; @@ -49,6 +50,8 @@ import org.nl.config.lucene.service.dto.LuceneLogDto; import org.nl.system.service.param.ISysParamService; import org.springframework.beans.factory.annotation.Autowired; +import java.io.PrintWriter; +import java.io.StringWriter; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -345,13 +348,28 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements this.iserror = true; message = "读取信号值时出现异常"; String extracted = DeviceErrorUtil.extracted(var17); - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(device_code) - .content(this.device_code + extracted + ",报错信息:" + var17.getMessage()) - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); - var17.printStackTrace(); + if (var17 instanceof NullPointerException) { + message += " - 空指针异常"; + // 记录详细的堆栈跟踪信息 + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + var17.printStackTrace(pw); + String stackTrace = sw.toString(); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content(this.device_code + extracted + ",报错信息:" + var17.getMessage() + ",堆栈跟踪:" + stackTrace) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + } else { + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content(this.device_code + extracted + ",报错信息:" + var17.getMessage()) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + var17.printStackTrace(); + } } last_heartbeat = heartbeat; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/fold_disc_site/FoldDiscSiteDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/fold_disc_site/FoldDiscSiteDeviceDriver.java index b1d16d288..28353d701 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/fold_disc_site/FoldDiscSiteDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/fold_disc_site/FoldDiscSiteDeviceDriver.java @@ -527,7 +527,7 @@ public class FoldDiscSiteDeviceDriver extends AbstractOpcDeviceDriver implements this.writing(list); LuceneLogDto logDto = LuceneLogDto.builder() .device_code(device_code) - .content(device_code + inst.getInstruction_code() + "再次下发电气信号") + .content(device_code + instdto.getInstruction_code() + "再次下发电气信号") .build(); logDto.setLog_level(3); luceneExecuteLogService.deviceExecuteLog(logDto); 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 57c1bedea..d4c2268fc 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 @@ -59,6 +59,8 @@ import org.nl.config.lucene.service.dto.LuceneLogDto; import org.nl.system.service.param.ISysParamService; import org.springframework.beans.factory.annotation.Autowired; +import java.io.PrintWriter; +import java.io.StringWriter; import java.time.LocalDateTime; import java.util.*; @@ -112,8 +114,8 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv int heartbeat = 0; int last_heartbeat = 0; - int to_command = 0; - int last_to_command = 0; + String to_command = null; + String last_to_command = null; String to_target = null; String last_to_target = null; @@ -246,7 +248,19 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv barcode = this.itemProtocol.getBarcode(); material_barcode = this.itemProtocol.getMaterialBarcode(); to_height_level = this.itemProtocol.getTo_height_level(); + }catch (Exception e){ + this.iserror = true; + String extracted = DeviceErrorUtil.extracted(e); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content(this.device_code + extracted + ",读取信号异常:" + e.getMessage()) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + e.printStackTrace(); + } + try { if (mode != last_mode) { JSONObject param = new JSONObject(); param.put("device_code", this.device_code); @@ -264,30 +278,6 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv clearWrite(); } - -// if (move != last_move) { -// if (ObjectUtil.isNotEmpty(inst)) { -// if (move == 0) { -// Thread.sleep(10000); -// led_message = clearMessage(); -// List deviceCodes = this.getExtraDeviceCodes("link_device_code"); -// String device = null; -// if (ObjectUtil.isNotEmpty(deviceCodes)) { -// for (String deviceCode : deviceCodes) { -// Device linkDevice = deviceAppService.findDeviceByCode(deviceCode); -// if (ObjectUtil.isEmpty(linkDevice)) { -// throw new BadRequestException("设备:" + device_code + "关联设备->" + deviceCode + "为空!"); -// } -// if (linkDevice.getDeviceDriver() instanceof LedScreenDeviceDriver) { -// device = deviceCode; -// } -// } -// } -// taskScreenService.getLedMessage(device); -// } -// } -// requireSucess = false; -// } if (move != 0 && task > 0) { update_instruction_status(); } @@ -412,14 +402,28 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv this.iserror = true; log.error("空指针:{}", e); String extracted = DeviceErrorUtil.extracted(e); - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(device_code) - .content(this.device_code + extracted + ",报错信息:" + e.getMessage()) - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); - message = "读取信号值时出现异常"; - e.printStackTrace(); + if (e instanceof NullPointerException) { + message += " - 空指针异常"; + // 记录详细的堆栈跟踪信息 + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + e.printStackTrace(pw); + String stackTrace = sw.toString(); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content(this.device_code + extracted + ",报错信息:" + e.getMessage() + ",堆栈跟踪:" + stackTrace) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + } else { + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content(this.device_code + extracted + ",报错信息:" + e.getMessage()) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + e.printStackTrace(); + } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/scanner_weight_conveyor/ItemProtocol.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/scanner_weight_conveyor/ItemProtocol.java index 7b378b39c..4ca977019 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/scanner_weight_conveyor/ItemProtocol.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_conveyor/scanner_weight_conveyor/ItemProtocol.java @@ -136,8 +136,8 @@ public class ItemProtocol { return this.getOpcStringValue(item_to_task); } - public int getTo_command() { - return this.getOpcIntegerValue(item_to_command); + public String getTo_command() { + return this.getOpcStringValue(item_to_command); } public String getTo_target() { diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/return_good_manipulator/ItemProtocol.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/return_good_manipulator/ItemProtocol.java index fb5ca6ccd..210e91fab 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/return_good_manipulator/ItemProtocol.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/one_manipulator/return_good_manipulator/ItemProtocol.java @@ -1,5 +1,6 @@ package org.nl.acs.device_driver.one_manipulator.return_good_manipulator; +import cn.hutool.core.util.StrUtil; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.nl.acs.device.device_driver.standard_inspect.ItemDto; @@ -144,14 +145,14 @@ public class ItemProtocol { - public int getTo_task() { - return this.getOpcIntegerValue(item_to_task); + public String getTo_task() { + return this.getOpcStringValue(item_to_task); } - public int getTo_command() { - return this.getOpcIntegerValue(item_to_command); + public String getTo_command() { + return this.getOpcStringValue(item_to_command); } public int getTo_target() { @@ -164,6 +165,17 @@ public class ItemProtocol { Boolean isonline; + public String getOpcStringValue(String protocol) { + String value = this.driver.getStringValue(protocol); + if (StrUtil.isBlank(value)) { + //throw new BusinessException("{} : {}", new Object[]{protocol, DeviceErrorProtocol.getMessage(10000)}); + + } else { + return value; + } + return ""; + } + public float getOpcFloatValue(String protocol) { Float value = this.driver.getDoubleValue(protocol); if (value == null) { 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 9bc11527a..e9a4e90a7 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 @@ -47,6 +47,8 @@ import org.nl.config.language.LangProcess; import org.nl.config.lucene.service.LuceneExecuteLogService; import org.nl.config.lucene.service.dto.LuceneLogDto; +import java.io.PrintWriter; +import java.io.StringWriter; import java.util.*; import java.util.stream.Collectors; @@ -91,8 +93,8 @@ public class ReturnGoodManipulatorDeviceDriver extends AbstractOpcDeviceDriver i int heartbeat = 0; int last_heartbeat = 0; - int to_command = 0; - int last_to_command = 0; + String to_command = null; + String last_to_command = null; int to_target = 0; int last_to_target = 0; @@ -100,8 +102,8 @@ public class ReturnGoodManipulatorDeviceDriver extends AbstractOpcDeviceDriver i int to_onset = 0; int last_to_onset = 0; - int to_task = 0; - int last_to_task = 0; + String to_task = null; + String last_to_task = null; int to_layer = 0; int last_to_layer = 0; int to_barcode = 0; @@ -231,14 +233,45 @@ public class ReturnGoodManipulatorDeviceDriver extends AbstractOpcDeviceDriver i this.iserror = true; log.error("空指针:{}",e); String extracted = DeviceErrorUtil.extracted(e); - LuceneLogDto logDto = LuceneLogDto.builder() - .device_code(device_code) - .content(this.device_code + extracted + ",报错信息:" + e.getMessage()) - .build(); - logDto.setLog_level(4); - luceneExecuteLogService.deviceExecuteLog(logDto); - message = "universal_remark8"; - e.printStackTrace(); + if (e == null) { + message += " - 捕获到的异常为 null"; + // 获取堆栈跟踪信息 + StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); + StringBuilder stackTrace = new StringBuilder(); + for (StackTraceElement element : stackTraceElements) { + stackTrace.append(element.toString()).append("\n"); + } + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content(this.device_code + ",捕获到的异常为 null,堆栈跟踪:\n" + stackTrace.toString()) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + // 打印堆栈跟踪信息到控制台 + log.info("捕获到的异常为 null,堆栈跟踪:\n" + stackTrace.toString()); + } + if (e instanceof NullPointerException) { + message += " - 空指针异常"; + // 记录详细的堆栈跟踪信息 + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + e.printStackTrace(pw); + String stackTrace = sw.toString(); + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content(this.device_code + extracted + ",报错信息:" + e.getMessage() + ",堆栈跟踪:" + stackTrace) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + } else { + LuceneLogDto logDto = LuceneLogDto.builder() + .device_code(device_code) + .content(this.device_code + extracted + ",报错信息:" + e.getMessage()) + .build(); + logDto.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto); + e.printStackTrace(); + } } 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 9fead9f26..f1edd9a57 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 @@ -1,6 +1,7 @@ package org.nl.acs.device_driver.stacker.standard_stacker; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; @@ -42,6 +43,7 @@ import org.nl.acs.route.service.dto.RouteLineDto; import org.nl.acs.route.service.impl.RouteLineServiceImpl; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; +import org.nl.common.exception.BadRequestException; import org.nl.common.utils.RedisUtils; import org.nl.config.SpringContextHolder; import org.nl.config.language.LangProcess; @@ -732,9 +734,10 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme logDto1.setLog_level(4); luceneExecuteLogService.deviceExecuteLog(logDto1); String response = acsToWmsService.applyUpdatePointCode(param); - JSONObject jo = JSON.parseObject(response); + JSONObject jo = JSON.parseObject("{\"message\":\"下发成功!\",\"vehicle_code\":\"L9-12-01\",\"point_code\":\"L9-12-01\",\"status\":200}"); if (jo.getInteger("status") == 200) { try { + verifyPoint(type,jo); //清警 cleanErro(); LuceneLogDto logDto2 = LuceneLogDto.builder() @@ -791,6 +794,49 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme } } + /** + * 校验点位是否存在路由 + * @param jo + */ + private void verifyPoint(String type,JSONObject jo) { + Instruction instruction = checkInst(); + if (type.equals(StandarStirageErroEnum.BLOCK_IN.getType()) || type.equals(StandarStirageErroEnum.FILL.getType())) { + List routeLineDtos = routeLineService.getShortPathLines(instruction.getStart_device_code(), + jo.getString("point_code"), instruction.getRoute_plan_code()); + if(CollUtil.isEmpty(routeLineDtos)){ + errorPoint(jo, instruction); + } + RouteLineDto routeLineDto = routeLineDtos.get(0); + String[] path = routeLineDto.getPath().split("->"); + if(CollUtil.isEmpty(Arrays.asList(path)) || path.length != 3){ + errorPoint(jo, instruction); + } + } else if(type.equals(StandarStirageErroEnum.VOIDANCE.getType())){ + List routeLineDtos = routeLineService.getShortPathLines(jo.getString("point_code"),instruction.getNext_device_code(), + instruction.getRoute_plan_code()); + if(CollUtil.isEmpty(routeLineDtos)){ + errorPoint(jo, instruction); + } + RouteLineDto routeLineDto = routeLineDtos.get(0); + String[] path = routeLineDto.getPath().split("->"); + if(CollUtil.isEmpty(Arrays.asList(path)) || path.length != 3){ + errorPoint(jo, instruction); + } + } + } + + private void errorPoint(JSONObject jo, Instruction instruction) { + LuceneLogDto logDto2 = LuceneLogDto.builder() + .device_code(device_code) + .content("申请更新点位,点位路由不存在:" + jo + ",指令号:"+ instruction.getInstruction_code()) + .build(); + logDto2.setLog_level(4); + luceneExecuteLogService.deviceExecuteLog(logDto2); + errorRequireSucess = true; + notCreateInstMessage = "申请更新点位,点位路由不存在:" + jo + ",指令号:"+ instruction.getInstruction_code(); + throw new BadRequestException("路由不存在!"); + } + private void updateData1(String poinCode, Device point, String[] split, String vehicleCode) { Instruction instructionUpdate = checkInst(); TaskDto taskUpdate = new TaskDto();