From a09e15adf955b2ff63064746ec5570f7727a00d4 Mon Sep 17 00:00:00 2001 From: LENOVO <1793460677@qq.com> Date: Mon, 22 Apr 2024 15:16:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=90=8C=E6=8E=92=E7=A7=BB=E5=BA=93?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E8=A1=A5=E7=A0=81=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BeltConveyorDeviceDriver.java | 77 +------- .../service/InstructionService.java | 8 + .../service/impl/InstructionServiceImpl.java | 23 +++ .../task/service/impl/TaskServiceImpl.java | 13 +- .../service/quartz/task/CreateDDJInst.java | 186 +++++++++++------- 5 files changed, 152 insertions(+), 155 deletions(-) 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 6d3411345..23e931e1c 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 @@ -464,8 +464,10 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements requireSucess = true; return true; } else { + //查看是否存在输送线到对接为的指令 + Instruction byNextDeviceCodeFromCache = instructionService.findByNextDeviceCodeFromCache(this.device_code); //补码生成堆垛机对接位到货架的指令 - if (StrUtil.isNotEmpty(hand_barcode)) { + if (StrUtil.isNotEmpty(hand_barcode) && ObjectUtil.isEmpty(byNextDeviceCodeFromCache)) { TaskDto taskDtoHandCode = taskserver.findByVehicleCodeCodeAndReady(hand_barcode); if (Objects.nonNull(taskDtoHandCode)) { String taskid = taskDtoHandCode.getTask_id(); @@ -518,79 +520,6 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements return false; } } - /** - * 目前没有从标准输送线为起点的任务 - */ - //判断是否有相同起点的,任务状态就绪的任务 - /** - TaskDto taskdto = taskserver.findByStartCodeAndReady(device_code); - if (ObjectUtil.isNotNull(taskdto)) { - //判断指令的起点和当前的设备号相同 - if (!taskdto.getStart_device_code().equals(device_code)) { - return false; - } - //判断当前任务号是否存在指令 - String taskid = taskdto.getTask_id(); - String taskcode = taskdto.getTask_code(); - String priority = taskdto.getPriority(); - String start_point_code = taskdto.getStart_point_code(); - String start_device_code = taskdto.getStart_device_code(); - String route_plan_code = taskdto.getRoute_plan_code(); - String next_device_code = ""; - String containerType = ""; - String interactionJson = taskdto.getInteraction_json(); - if (StrUtil.isNotEmpty(interactionJson)) { - InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class); - containerType = interactionJsonDTO.getContainerType(); - } - - String this_coevice_code = taskserver.queryAssignedByDevice(device_code, taskdto.getNext_device_code()); - if (StrUtil.isEmpty(this_coevice_code)) { - List shortPathsList = routeLineService.getShortPathLines(start_device_code, taskdto.getNext_device_code(), route_plan_code); - RouteLineDto routeLineDto = shortPathsList.get(0); - - String path = routeLineDto.getPath(); - String type = routeLineDto.getType(); - String[] str = path.split("->"); - - List pathlist = Arrays.asList(str); - int index = 0; - for (int m = 0; m < pathlist.size(); m++) { - if (pathlist.get(m).equals(start_device_code)) { - index = m + 1; - break; - } - } - next_device_code = pathlist.get(index); - } else { - next_device_code = this_coevice_code; - } - //校验路由关系 - List shortPathsList = routeLineService.getShortPathLines(start_device_code, next_device_code, route_plan_code); - if (ObjectUtils.isEmpty(shortPathsList) || shortPathsList.size() < 1) { - throw new RuntimeException("路由不通!"); - } - Device startdevice = deviceAppservice.findDeviceByCode(start_device_code); - Device nextdevice = deviceAppservice.findDeviceByCode(next_device_code); - String next_point_code; - if (StrUtil.equals(deviceAppservice.findDeviceTypeByCode(next_device_code), "storage")) { - next_point_code = taskdto.getTo_x() + "-" + taskdto.getTo_y() + "-" + taskdto.getTo_z(); - } else { - next_point_code = next_device_code; - } - Instruction instdto = new Instruction(); - packageData(instdto, route_plan_code, taskdto, taskid, taskcode, start_device_code, next_device_code, start_point_code, next_point_code, priority, containerType); - log.error("=================================,{}", instdto.getCreate_by()); - try { - instructionService.create(instdto); - } catch (Exception e) { - e.printStackTrace(); - log.error("指令创建失败!,{}", e.getMessage()); - return false; - } - return updateTask(taskdto, nextdevice, instdto); - } - **/ } return false; diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/InstructionService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/InstructionService.java index 39346beda..7e0f8d102 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/InstructionService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/InstructionService.java @@ -333,6 +333,14 @@ public interface InstructionService extends CommonService { */ Instruction findByDeviceCodeFromCache(String devicecode); + + /** + * 根据终点查询指令 + * @param devicecode + * @return + */ + Instruction findByNextDeviceCodeFromCache(String devicecode); + /** * 根据设备id查询 * 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 65d5f5a41..d18aff16d 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 @@ -1520,6 +1520,29 @@ public class InstructionServiceImpl extends CommonServiceImpl instructionList = instructions; + ListUtil.sort( + instructionList, + new Comparator() { + @Override + public int compare(Instruction o1, Instruction o2) { + return o1.getCreate_time().compareTo(o2.getCreate_time()); + } + }); + Iterator it = instructions.iterator(); + while (it.hasNext()) { + Instruction inst = it.next(); + if (StrUtil.equals(devicecode, inst.getNext_device_code())) { + return inst; + } + } + + return null; + } + @Override public List findAllInstFromCache() { return instructions; 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 4df16ee8a..247c199da 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 @@ -568,11 +568,14 @@ public class TaskServiceImpl extends CommonServiceImpl impleme // 判断起点终点设备类型 String startDeviceType = deviceAppService.findDeviceTypeByCode(dto.getStart_device_code()); String nextDeviceType = deviceAppService.findDeviceTypeByCode(dto.getNext_device_code()); - if (routeLineService - .getShortPathLines(dto.getStart_device_code(), dto.getNext_device_code(), plan_code) - .size() - == 0) { - throw new BadRequestException(dto.getStart_point_code() + "->" + dto.getNext_point_code() + " " + LangProcess.msg("route_isNull")); + // 同一排转库任务不做路由校验 + if (!(StrUtil.equals(DeviceType.storage.toString(), startDeviceType) && StrUtil.equals(DeviceType.storage.toString(), nextDeviceType) && StrUtil.equals(start_device_code, next_device_code))) { + if (routeLineService + .getShortPathLines(dto.getStart_device_code(), dto.getNext_device_code(), plan_code) + .size() + == 0) { + throw new BadRequestException(dto.getStart_point_code() + "->" + dto.getNext_point_code() + " " + LangProcess.msg("route_isNull")); + } } String createTaskCheck = paramService.findByCode(AcsConfig.CREATETASKCHECK).getValue(); DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/CreateDDJInst.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/CreateDDJInst.java index bb180cf97..2e2714405 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/CreateDDJInst.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/task/CreateDDJInst.java @@ -69,49 +69,15 @@ public class CreateDDJInst { if (CollUtil.isNotEmpty(taskDtoList)) { taskDtoList = sortInst(taskDtoList); for (TaskDto taskDto : taskDtoList) { - List list = - routeLineService.getShortPathLines( - taskDto.getStart_device_code(), taskDto.getNext_device_code(), taskDto.getRoute_plan_code()); - if (ObjectUtils.isEmpty(list)) { - throw new BadRequestException("路由不通"); - } - RouteLineDto routeLineDto = list.get(0); - String[] path = routeLineDto.getPath().split("->"); - List pathlist = Arrays.asList(path); - String deviceType = appService.findDeviceByCode(pathlist.get(1)).getDevice_type(); - if (pathlist.size() < 3 || (!deviceType.equals(DeviceType.stacker.name()))) { - return; - } - Device deviceByCode = appService.findDeviceByCode(pathlist.get(1)); - if (ObjectUtils.isEmpty(deviceByCode)) { - log.error("没有找到DDJ设备"); - return; - } - StandardStackerDeviceDriver standardStackerDeviceDriver; - if (deviceByCode.getDeviceDriver() instanceof StandardStackerDeviceDriver) { - standardStackerDeviceDriver = (StandardStackerDeviceDriver) deviceByCode.getDeviceDriver(); -// if (standardStackerDeviceDriver.getMode() != 3 || standardStackerDeviceDriver.getMove() == 1 || standardStackerDeviceDriver.getCommand() != 0) { -// log.error("堆垛机,{}未联机或者在执行中", deviceByCode.getDevice_code()); -// return; -// } - } - String next_device_code = taskDto.getNext_device_code(); - Device nextDevice = appService.findDeviceByCode(next_device_code); - BeltConveyorDeviceDriver beltConveyorDeviceDriver; -// if (nextDevice.getDeviceDriver() instanceof BeltConveyorDeviceDriver) { -// beltConveyorDeviceDriver = (BeltConveyorDeviceDriver) nextDevice.getDeviceDriver(); -// if (beltConveyorDeviceDriver.getMode() != 2 || beltConveyorDeviceDriver.getMove() == 1) { -// log.error("输送机,{}未联机或执行中", next_device_code); -// return; -// } -// } + String next_device_code = ""; + Device nextDevice = null; + List pathlist; + Device deviceByCode = null; String taskid = taskDto.getTask_id(); String taskcode = taskDto.getTask_code(); String task_type = taskDto.getTask_type(); String vehiclecode = taskDto.getVehicle_code(); - String storage_task_type = taskDto.getStorage_task_type(); String priority = taskDto.getPriority(); - String is_send = taskDto.getIs_send(); String start_device_code = taskDto.getStart_device_code(); Device startDevice = appService.findDeviceByCode(start_device_code); @@ -134,40 +100,102 @@ public class CreateDDJInst { String start_height = taskDto.getStart_height(); String next_height = taskDto.getNext_height(); - /** - * 开始平均分配 - */ - String this_coevice_code = taskserver.queryAssignedByDeviceCode(start_device_code, next_device_code); - if (StrUtil.isEmpty(this_coevice_code)) { - List shortPathsList = routeLineService.getShortPathLines(start_device_code, next_device_code, route_plan_code); - RouteLineDto routeLineDto1 = shortPathsList.get(0); - - String path1 = routeLineDto1.getPath(); - String[] str = path1.split("->"); - - List pathlist1 = Arrays.asList(str); - int index = 0; - for (int m = 0; m < pathlist1.size(); m++) { - String deviceType1 = appService.findDeviceByCode(pathlist1.get(m)).getDevice_type(); - if (deviceType1.equals(DeviceType.stacker.name())) { - index = m + 1; - break; + //同排的货位移库任务 + if (StrUtil.equals(taskDto.getStart_device_code(), taskDto.getNext_device_code())) { + //通过起点找路由 + List list = + routeLineService.getShortPathLinesByCode( + taskDto.getStart_device_code(), taskDto.getRoute_plan_code()); + if (ObjectUtils.isEmpty(list)) { + throw new BadRequestException("路由不通"); + } + RouteLineDto routeLineDto = list.get(0); + String[] path = routeLineDto.getPath().split("->"); + pathlist = Arrays.asList(path); + deviceByCode = appService.findDeviceByCode(pathlist.get(1)); + if (ObjectUtils.isEmpty(deviceByCode)) { + log.error("没有找到DDJ设备"); + return; + } + StandardStackerDeviceDriver standardStackerDeviceDriver; + if (deviceByCode.getDeviceDriver() instanceof StandardStackerDeviceDriver) { + standardStackerDeviceDriver = (StandardStackerDeviceDriver) deviceByCode.getDeviceDriver(); + if (standardStackerDeviceDriver.getMode() != 3 || standardStackerDeviceDriver.getMove() == 1 || standardStackerDeviceDriver.getCommand() != 0) { + log.error("堆垛机,{}未联机或者在执行中", deviceByCode.getDevice_code()); + return; } + } + next_device_code = start_device_code; + nextDevice = appService.findDeviceByCode(next_device_code); + } else { + List list = + routeLineService.getShortPathLines( + taskDto.getStart_device_code(), taskDto.getNext_device_code(), taskDto.getRoute_plan_code()); + if (ObjectUtils.isEmpty(list)) { + throw new BadRequestException("路由不通"); + } + RouteLineDto routeLineDto = list.get(0); + String[] path = routeLineDto.getPath().split("->"); + pathlist = Arrays.asList(path); + deviceByCode = appService.findDeviceByCode(pathlist.get(1)); + + if (ObjectUtils.isEmpty(deviceByCode)) { + log.error("没有找到DDJ设备"); + return; + } + StandardStackerDeviceDriver standardStackerDeviceDriver; + if (deviceByCode.getDeviceDriver() instanceof StandardStackerDeviceDriver) { + standardStackerDeviceDriver = (StandardStackerDeviceDriver) deviceByCode.getDeviceDriver(); + if (standardStackerDeviceDriver.getMode() != 3 || standardStackerDeviceDriver.getMove() == 1 || standardStackerDeviceDriver.getCommand() != 0) { + log.error("堆垛机,{}未联机或者在执行中", deviceByCode.getDevice_code()); + return; + } + } + + next_device_code = taskDto.getNext_device_code(); + nextDevice = appService.findDeviceByCode(next_device_code); + BeltConveyorDeviceDriver beltConveyorDeviceDriver; + if (nextDevice.getDeviceDriver() instanceof BeltConveyorDeviceDriver) { + beltConveyorDeviceDriver = (BeltConveyorDeviceDriver) nextDevice.getDeviceDriver(); + if (beltConveyorDeviceDriver.getMode() != 2 || beltConveyorDeviceDriver.getMove() == 1) { + log.error("输送机,{}未联机或执行中", next_device_code); + return; + } + } + /** + * 开始平均分配 + */ + String this_coevice_code = taskserver.queryAssignedByDeviceCode(start_device_code, next_device_code); + if (StrUtil.isEmpty(this_coevice_code)) { + List shortPathsList = routeLineService.getShortPathLines(start_device_code, next_device_code, route_plan_code); + RouteLineDto routeLineDto1 = shortPathsList.get(0); + + String path1 = routeLineDto1.getPath(); + String[] str = path1.split("->"); + + List pathlist1 = Arrays.asList(str); + int index = 0; + for (int m = 0; m < pathlist1.size(); m++) { + String deviceType1 = appService.findDeviceByCode(pathlist1.get(m)).getDevice_type(); + if (deviceType1.equals(DeviceType.stacker.name())) { + index = m + 1; + break; + } /*if (pathlist1.get(m).equals(start_device_code)) { }*/ + } + next_device_code = pathlist1.get(index); + } else { + next_device_code = this_coevice_code; + } + //校验路由关系 + List shortPathsList = routeLineService.getShortPathLines(start_device_code, next_device_code, route_plan_code); + if (ObjectUtils.isEmpty(shortPathsList) || shortPathsList.size() < 1) { + throw new RuntimeException("路由不通!"); } - next_device_code = pathlist1.get(index); - } else { - next_device_code = this_coevice_code; } - //校验路由关系 - List shortPathsList = routeLineService.getShortPathLines(start_device_code, next_device_code, route_plan_code); - if (ObjectUtils.isEmpty(shortPathsList) || shortPathsList.size()<1) { - throw new RuntimeException("路由不通!"); - } -// Device startdevice = appService.findDeviceByCode(start_device_code); -// Device nextdevice = appService.findDeviceByCode(next_device_code); + if (StrUtil.equals(appService.findDeviceTypeByCode(next_device_code), "storage")) { next_point_code = next_device_code + "-" + taskDto.getTo_y() + "-" + taskDto.getTo_z(); } else { @@ -268,19 +296,27 @@ public class CreateDDJInst { } } int max = 0; + //非同排的路径 for (Instruction inst : insts) { - List shortPathLines = routeLineService.getShortPathLines(inst.getStart_device_code(), inst.getNext_device_code(), - inst.getRoute_plan_code()); - if (CollUtil.isEmpty(shortPathLines) || shortPathLines.size() < 1) { - log.error("没有此路由"); - throw new BadRequestException("路由不通"); + List shortPathLines =new ArrayList<>(); + if (!(inst.getStart_device_code().equals(inst.getNext_device_code()))) { + shortPathLines = routeLineService.getShortPathLines(inst.getStart_device_code(), inst.getNext_device_code(), + inst.getRoute_plan_code()); + if (CollUtil.isEmpty(shortPathLines) || shortPathLines.size() < 1) { + log.error("没有此路由"); + throw new BadRequestException("路由不通"); + } + }else { + //同排路径 + shortPathLines = routeLineService.getShortPathLinesByCode(inst.getStart_device_code(), inst.getRoute_plan_code()); + if (CollUtil.isEmpty(shortPathLines) || shortPathLines.size() < 1) { + log.error("没有此路由"); + throw new BadRequestException("路由不通"); + } } RouteLineDto routeLineDto1 = (RouteLineDto) shortPathLines.get(0); String[] path1 = routeLineDto1.getPath().split("->"); List pathlist1 = Arrays.asList(path1); - if (pathlist1.size() < 3 || pathlist1.get(1).equals(DeviceType.stacker.name())) { - //return; - } if (pathlist1.get(1).equals(pathlist.get(1))) { max++; } @@ -371,8 +407,6 @@ public class CreateDDJInst { continue; } } - - } } }