diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/task/TaskToPathPlanningDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/task/TaskToPathPlanningDTO.java index e16700e1b..db9a985dc 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/task/TaskToPathPlanningDTO.java +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/task/TaskToPathPlanningDTO.java @@ -33,7 +33,7 @@ public class TaskToPathPlanningDTO { private Long takeLocationNumber; @Schema(description = "取货任务的终点id") - private Long takePointId; + private String takePointId; //线库: LINE + 线库号 //普通库位: POINT + 点位号 @@ -44,7 +44,7 @@ public class TaskToPathPlanningDTO { private Long releaseLocationNumber; @Schema(description = "放货任务的终点id") - private Long releasePointId; + private String releasePointId; @Schema(description = "优先级(不同的组编号时:越大越先执行, 相同组编号时:组序号越大的越先执行)") private Long priority; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java index c1a384a76..1557d2de3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java @@ -18,6 +18,7 @@ import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAcceptTaskDTO; import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotRcsHeartBeatDTO; import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotSimulationPoseDTO; import cn.iocoder.yudao.module.mqtt.enums.task.ExecutionTypeEnum; +import cn.iocoder.yudao.module.system.api.path.vo.RobotClosePathPlantingDTO; import cn.iocoder.yudao.module.system.api.robot.processor.RequestProcessor; import cn.iocoder.yudao.module.system.api.robot.dto.FloorZoneDTO; import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDTO; @@ -1171,6 +1172,14 @@ public class RobotInformationServiceImpl extends ServiceImpl() + .eq(RobotInformationDO::getRobotNo, robotNo) + .last("limit 1")); + + if (RobotTaskModelEnum.REJECTION.getType().equals(robotInformationDO.getRobotTaskModel())) { + throw exception(ROBOT_REJECTION); + } + String mac = getMacByRobotNo(robotNo); robotCloseTaskDetail(actionLog.getTaskDetailId() + "", mac, actionLog.getCommandType()); @@ -1180,18 +1189,17 @@ public class RobotInformationServiceImpl extends ServiceImpl() - .eq(RobotInformationDO::getRobotNo, robotNo) - .last("limit 1")); - - if (RobotTaskModelEnum.REJECTION.getType().equals(robotInformationDO.getRobotTaskModel())) { - throw exception(ROBOT_REJECTION); - } - /*String taskStatusKey = RobotTaskChcheConstant.ROBOT_TASK_STATUS + robotInformationDO.getMacAddress(); Object taskStatus = redisUtil.get(taskStatusKey); if (ObjectUtil.isEmpty(taskStatus) || !RobotStatusCodeConstant.CAN_DO_TASK.equals(Boolean.parseBoolean(String.valueOf(taskStatus)))) { @@ -1465,7 +1473,7 @@ public class RobotInformationServiceImpl extends ServiceImpl fromLaneMap = detailDOS.stream() - .filter(v -> ObjectUtil.isNotEmpty(v.getFromLaneId())) - .collect(Collectors.groupingBy(RobotTaskDetailDO::getFromLaneId, - Collectors.collectingAndThen(Collectors.minBy(Comparator.comparingLong(RobotTaskDetailDO::getFromLocationNumber)), Optional::get))); + Map fromLaneMap = getFromLaneMap(detailDOS); //放货线库 - Map toLaneMap = detailDOS.stream() - .filter(v -> ObjectUtil.isNotEmpty(v.getToLaneId())) - .collect(Collectors.groupingBy(RobotTaskDetailDO::getToLaneId, - Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingLong(RobotTaskDetailDO::getToLocationNumber)), Optional::get))); + Map toLaneMap = getToLaneMap(detailDOS); //取货点位--最小 - Map fromLocationMap = detailDOS.stream() - .filter(v -> ObjectUtil.isNotEmpty(v.getFromMapItemId())) - .collect(Collectors.groupingBy(RobotTaskDetailDO::getFromMapItemId, - Collectors.collectingAndThen(Collectors.minBy(Comparator.comparingLong(RobotTaskDetailDO::getFromLocationNumber)), - a -> a.isPresent() ? a.get().getFromLocationNumber() : null))); + Map fromLocationMap = getFromLocationMap(detailDOS); //放货点位--最大 - Map toLocationMap = detailDOS.stream() - .filter(v -> ObjectUtil.isNotEmpty(v.getToMapItemId())) - .collect(Collectors.groupingBy(RobotTaskDetailDO::getToMapItemId, - Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingLong(RobotTaskDetailDO::getToLocationNumber)), - a -> a.isPresent() ? a.get().getToLocationNumber() : null))); + Map toLocationMap =getToLocationMap(detailDOS); //返回的数据 List list = new ArrayList<>(); @@ -796,6 +784,55 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService { return list; } + private Map getToLocationMap(List detailDOS) { + List collect = detailDOS.stream() + .filter(v -> ObjectUtil.isNotEmpty(v.getToMapItemId())) + .collect(Collectors.toList()); + if (ObjectUtil.isEmpty(collect)) { + return new HashMap<>(); + } + return collect.stream().collect(Collectors.groupingBy(RobotTaskDetailDO::getToMapItemId, + Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingLong(RobotTaskDetailDO::getToLocationNumber)), + a -> a.isPresent() ? a.get().getToLocationNumber() : null))); + } + + private Map getFromLocationMap(List detailDOS) { + List collect = detailDOS.stream() + .filter(v -> ObjectUtil.isNotEmpty(v.getFromMapItemId())) + .collect(Collectors.toList()); + if (ObjectUtil.isEmpty(collect)) { + return new HashMap<>(); + } + return collect.stream().collect(Collectors.groupingBy(RobotTaskDetailDO::getFromMapItemId, + Collectors.collectingAndThen(Collectors.minBy(Comparator.comparingLong(RobotTaskDetailDO::getFromLocationNumber)), + a -> a.isPresent() ? a.get().getFromLocationNumber() : null))); + } + + private Map getToLaneMap(List detailDOS) { + + List collect = detailDOS.stream() + .filter(v -> ObjectUtil.isNotEmpty(v.getToLaneId())) + .collect(Collectors.toList()); + if (ObjectUtil.isEmpty(collect)) { + return new HashMap<>(); + } + return collect.stream().collect(Collectors.groupingBy(RobotTaskDetailDO::getToLaneId, + Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingLong(RobotTaskDetailDO::getToLocationNumber)), Optional::get))); + } + + private Map getFromLaneMap(List detailDOS) { + List collect = detailDOS.stream() + .filter(v -> ObjectUtil.isNotEmpty(v.getFromLaneId())) + .collect(Collectors.toList()); + if (ObjectUtil.isEmpty(collect)) { + return new HashMap<>(); + } + + return collect.stream() + .collect(Collectors.groupingBy(RobotTaskDetailDO::getFromLaneId, + Collectors.collectingAndThen(Collectors.minBy(Comparator.comparingLong(RobotTaskDetailDO::getFromLocationNumber)), Optional::get))); + } + /** * 仅取货设置任务