From b4d12cf03d954f85d85a57bca3d5eaf0fff94e95 Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Thu, 6 Mar 2025 10:16:04 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=AF=E5=BE=84=E8=A7=84=E5=88=92=E6=9D=83?= =?UTF-8?q?=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/config/dto/TaskOrderConfigDTO.java | 8 +- .../config/vo/CommonConfigPageReqVO.java | 2 +- .../admin/config/vo/CommonConfigRespVO.java | 2 +- .../config/vo/CommonConfigSaveReqVO.java | 2 +- .../admin/config/vo/CommonConfigVO.java | 3 + .../dal/dataobject/config/CommonConfigDO.java | 2 +- .../enums/config/CommandConfigTypeEnum.java | 4 +- .../strategy/HouseLocationStrategyImpl.java | 8 +- .../config/CommonConfigServiceImpl.java | 9 +- .../robot/job/RobotCommonTaskServiceImpl.java | 168 ++++++++++-------- .../system/service/tool/ToolsServiceImpl.java | 58 +++++- 11 files changed, 171 insertions(+), 95 deletions(-) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/dto/TaskOrderConfigDTO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/dto/TaskOrderConfigDTO.java index 0a5fdbfec..925fb3a94 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/dto/TaskOrderConfigDTO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/dto/TaskOrderConfigDTO.java @@ -5,8 +5,8 @@ import lombok.Data; @Data public class TaskOrderConfigDTO { - private Double task_assignment_strategy; - private Double priority_factor; - private Double time_factor; - private Double time_difference_threshold_second; + private String task_assignment_strategy; + private String priority_factor; + private String time_factor; + private String time_difference_threshold_second; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigPageReqVO.java index 807a43706..3b2dcccfb 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigPageReqVO.java @@ -15,7 +15,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @ToString(callSuper = true) public class CommonConfigPageReqVO extends PageParam { - @Schema(description = "类型(1:参数配置)", example = "1") + @Schema(description = "类型(1:参数配置、2:优先级>时间>路径、3:优先级=时间>路径、4:优先级=时间=路径)", example = "1") private Integer configType; @Schema(description = "配置信息") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigRespVO.java index 63dd9f47b..65ec546b2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigRespVO.java @@ -17,7 +17,7 @@ public class CommonConfigRespVO { private Long id; @Schema(description = "类型(1:参数配置)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty("类型(1:参数配置、2:充满电周期对应的冲电量、3:能做任务的最低电量)") + @ExcelProperty("类型(1:参数配置、2:优先级>时间>路径、3:优先级=时间>路径、4:优先级=时间=路径)") private Integer configType; @Schema(description = "配置信息") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigSaveReqVO.java index e8d328cfe..b7fe412b6 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigSaveReqVO.java @@ -17,7 +17,7 @@ public class CommonConfigSaveReqVO implements Serializable { private Long id; //查看 CommandConfigTypeEnum - @Schema(description = "类型(1:参数配置)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @Schema(description = "类型(1:参数配置、2:优先级>时间>路径、3:优先级=时间>路径、4:优先级=时间=路径)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private Integer configType; @Schema(description = "配置信息") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigVO.java index e4d313189..93b0756ca 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/vo/CommonConfigVO.java @@ -50,4 +50,7 @@ public class CommonConfigVO { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime onceEndTime; + @Schema(description = "路径规划权重") + private Integer pathSortConfig; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/config/CommonConfigDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/config/CommonConfigDO.java index 97fce95e2..ef15c17e9 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/config/CommonConfigDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/config/CommonConfigDO.java @@ -28,7 +28,7 @@ public class CommonConfigDO extends BaseDO { @TableId(type = IdType.ASSIGN_ID) private Long id; /** - * 类型(1:参数配置) + * 类型(1:参数配置、2:优先级>时间>路径、3:优先级=时间>路径、4:优先级=时间=路径) */ private Integer configType; /** diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/config/CommandConfigTypeEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/config/CommandConfigTypeEnum.java index bbbf193d9..f4f019258 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/config/CommandConfigTypeEnum.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/config/CommandConfigTypeEnum.java @@ -11,7 +11,9 @@ import lombok.Getter; @AllArgsConstructor public enum CommandConfigTypeEnum { CHARG_CONFIG(1,"充电设置(页面)"), - PP_WEIGHT_CONFIG(2,"PP任务执行权重配置"); + PP_CONFIG_PRIORITY(2,"优先级>时间>路径"), + PP_CONFIG_TIME(3,"优先级=时间>路径"), + PP_CONFIG_PATH(4,"优先级=时间=路径"); /** * 类型 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java index 247388548..1edf8096f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java @@ -34,10 +34,6 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy { // -- 策略1 处理库位点 // -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作 List newList = new ArrayList<>(); - Long locationNumber = 0l; - if (ObjectUtil.isNotEmpty(nodeBaseDTOS)) { - locationNumber = nodeBaseDTOS.get(0).getLocationNumber(); - } for (NodeBaseDTO item : nodeBaseDTOS) { if (item.getId() == null) { @@ -50,6 +46,10 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy { int max = wareHouseLocationDOS.stream().map(WareHouseLocationDO::getLocationNo).filter(StrUtil::isNotEmpty) .mapToInt(s -> Integer.parseInt(s.substring(s.length() - 1))).max().orElse(1); int locationStorey = wareHouseLocationDOS.size(); + Long locationNumber = 0l; + if (ObjectUtil.isNotEmpty(nodeBaseDTOS)) { + locationNumber = nodeBaseDTOS.get(0).getLocationNumber(); + } for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) { wareHouseLocationDO.setLocationX(item.getLocationX()); wareHouseLocationDO.setLocationY(item.getLocationY()); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/CommonConfigServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/CommonConfigServiceImpl.java index 032a9f063..eff37aace 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/CommonConfigServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/config/CommonConfigServiceImpl.java @@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO; import cn.iocoder.yudao.module.system.dal.mysql.config.CommonConfigMapper; import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum; import cn.iocoder.yudao.module.system.enums.config.CommandConfigTypeEnum; +import cn.iocoder.yudao.module.system.service.tool.ToolsService; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.stereotype.Service; @@ -43,6 +44,9 @@ public class CommonConfigServiceImpl implements CommonConfigService { @Resource private CommonConfigMapper configMapper; + @Resource + private ToolsService toolsService; + @Override public Long createConfig(CommonConfigSaveReqVO createReqVO) { // 插入 @@ -58,6 +62,7 @@ public class CommonConfigServiceImpl implements CommonConfigService { } configMapper.insert(config); + toolsService.sendPPsortConfig(); // 返回 return config.getId(); } @@ -107,8 +112,8 @@ public class CommonConfigServiceImpl implements CommonConfigService { // 更新 CommonConfigDO updateObj = BeanUtils.toBean(updateReqVO, CommonConfigDO.class); + CommonConfigVO chargeConfig = JSONUtil.toBean(updateReqVO.getConfigStr(), CommonConfigVO.class); if (CommandConfigTypeEnum.CHARG_CONFIG.getType().equals(updateReqVO.getConfigType())) { - CommonConfigVO chargeConfig = JSONUtil.toBean(updateReqVO.getConfigStr(), CommonConfigVO.class); //一次 if (ZeroOneEnum.ZERO.getType().equals(chargeConfig.getEveryDay()) && ObjectUtil.isNotEmpty(chargeConfig.getScheduleChargeStartTime())) { @@ -123,6 +128,8 @@ public class CommonConfigServiceImpl implements CommonConfigService { } configMapper.updateById(updateObj); + + toolsService.sendPPsortConfig(); } @Override diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskServiceImpl.java index 11ff87785..eab0603f2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskServiceImpl.java @@ -112,6 +112,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { @Resource private RedisUtil redisUtil; + private static String SERIAL_KEY = "SERIAL_KEY"; /** * 让机器人自动充电 @@ -129,7 +130,6 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { /** * 客户下发的任务 * - * @param list */ @Override @Async(NOTIFY_THREAD_POOL_TASK_EXECUTOR) @@ -194,24 +194,26 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { private Pair, List> releaseTask(TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO, Map locationMap) { - Integer serial = 1; + + Map serialMap = new HashMap<>(); + serialMap.put(SERIAL_KEY, 1); List list = new ArrayList<>(); List logList = new ArrayList<>(); //行走-放 RobotTaskDetailActionLogDO logNight = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData nightMove = getToMovePose(logNight, serial, v, robotTaskDetailDO); + RobotAcceptTaskData nightMove = getToMovePose(logNight, v, robotTaskDetailDO,serialMap); //抬高高度 RobotTaskDetailActionLogDO logTen = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData tenFork = getTakeFork(logTen, serial, v, robotTaskDetailDO, false, locationMap, takeForkHeight, - dongReleaseMsg); + RobotAcceptTaskData tenFork = getTakeFork(logTen, v, robotTaskDetailDO, false, locationMap, takeForkHeight, + dongReleaseMsg,serialMap); //放货点位 RobotTaskDetailActionLogDO logEleven = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData elevenFork = getMovePose(logEleven, serial, v, robotTaskDetailDO, locationMap, false, - dongReleaseMsg); + RobotAcceptTaskData elevenFork = getMovePose(logEleven, v, robotTaskDetailDO, locationMap, false, + dongReleaseMsg,serialMap); //抬高高度 RobotTaskDetailActionLogDO logTwelve = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData twelveFork = getInitFork(logTwelve, serial, v, robotTaskDetailDO, true, locationMap); + RobotAcceptTaskData twelveFork = getInitFork(logTwelve, v, robotTaskDetailDO, true, locationMap,serialMap); //放货完成使用 String robotActionReleaseGoodsKey = RobotTaskChcheConstant.ROBOT_ACTION_RELEASE_GOODS + robotTaskDetailDO.getId(); @@ -239,38 +241,40 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { */ private Pair, List> takeTask(TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO, Map locationMap) { - Integer serial = 1; + + Map serialMap = new HashMap<>(); + serialMap.put(SERIAL_KEY, 1); List list = new ArrayList<>(); List logList = new ArrayList<>(); //移动 RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData oneMoveAndFork = getOneMoveAndFork(logOne, serial, v, robotTaskDetailDO); + RobotAcceptTaskData oneMoveAndFork = getOneMoveAndFork(logOne, v, robotTaskDetailDO,serialMap); //抬叉 RobotTaskDetailActionLogDO logTwo = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData twoFork = getTakeFork(logTwo, serial, v, robotTaskDetailDO, true, locationMap, getPalletTopicHeight, - dongTakeMsg); + RobotAcceptTaskData twoFork = getTakeFork(logTwo, v, robotTaskDetailDO, true, locationMap, getPalletTopicHeight, + dongTakeMsg,serialMap); //等待 RobotTaskDetailActionLogDO logThree = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData threeWait = getWait(logThree, serial, v, robotTaskDetailDO); + RobotAcceptTaskData threeWait = getWait(logThree, v, robotTaskDetailDO,serialMap); //获取托盘位置 RobotTaskDetailActionLogDO logFour = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData fourGetPalletTopic = getPalletTopic(logFour, serial, v, robotTaskDetailDO); + RobotAcceptTaskData fourGetPalletTopic = getPalletTopic(logFour, v, robotTaskDetailDO,serialMap); //抬高高度 RobotTaskDetailActionLogDO logFive = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData fiveFork = getTakeFork(logFive, serial, v, robotTaskDetailDO, true, locationMap, null, - dongTakeMsg); + RobotAcceptTaskData fiveFork = getTakeFork(logFive, v, robotTaskDetailDO, true, locationMap, null, + dongTakeMsg,serialMap); //移动到取货终点 RobotTaskDetailActionLogDO logSix = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData sixMoveToPalletPose = moveToPalletPose(logSix, serial, v, robotTaskDetailDO, dongTakeMsg); + RobotAcceptTaskData sixMoveToPalletPose = moveToPalletPose(logSix, v, robotTaskDetailDO, dongTakeMsg,serialMap); //抬高高度 RobotTaskDetailActionLogDO logSeven = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData sevenFork = getTakeFork(logSeven, serial, v, robotTaskDetailDO, true, locationMap, takeForkHeight, - dongTakeMsg); + RobotAcceptTaskData sevenFork = getTakeFork(logSeven, v, robotTaskDetailDO, true, locationMap, takeForkHeight, + dongTakeMsg,serialMap); //路径最后一个点 RobotTaskDetailActionLogDO logEight = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData eightFork = getMovePose(logEight, serial, v, robotTaskDetailDO, locationMap, true, - dongTakeMsg); + RobotAcceptTaskData eightFork = getMovePose(logEight, v, robotTaskDetailDO, locationMap, true, + dongTakeMsg,serialMap); //取货完成使用 String robotActionTakeGoodsKey = RobotTaskChcheConstant.ROBOT_ACTION_TAKE_GOODS + robotTaskDetailDO.getId(); @@ -300,14 +304,16 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { private Pair, List> moveTask(TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO, Map locationMap) { - Integer serial = 1; + + Map serialMap = new HashMap<>(); + serialMap.put(SERIAL_KEY, 1); List list = new ArrayList<>(); List logList = new ArrayList<>(); //移动 RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO(); String msg = parkingSpace + robotTaskDetailDO.getToLocationNo(); - RobotAcceptTaskData oneMoveAndFork = onlyMove(logOne, serial, v, msg); + RobotAcceptTaskData oneMoveAndFork = onlyMove(logOne, v, msg,serialMap); list.add(oneMoveAndFork); logList.add(logOne); @@ -320,17 +326,19 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { * 仅放货、移动 * * @param logOne - * @param serial * @param v */ - private RobotAcceptTaskData onlyMove(RobotTaskDetailActionLogDO logOne, Integer serial, TaskPPDistribution v, - String msg) { + private RobotAcceptTaskData onlyMove(RobotTaskDetailActionLogDO logOne, TaskPPDistribution v, + String msg,Map serialMap) { logOne.setCommandId(getId()); logOne.setTaskDetailId(v.getId()); RobotAcceptTaskData robotAcceptTaskData = new RobotAcceptTaskData(); + int serial = serialMap.get(SERIAL_KEY); robotAcceptTaskData.setSerial(String.valueOf(serial)); + serialMap.put(SERIAL_KEY, ++serial); + robotAcceptTaskData.setCommand_id(String.valueOf(logOne.getCommandId())); - serial++; + robotAcceptTaskData.setCommand_type(CommandTypeEnum.MOVE_POSES_AND_FORK.getType()); List takes = v.getReleases(); List pose2ds = BeanUtils.toBean(takes, Pose2ds.class); @@ -351,55 +359,57 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { */ private Pair, List> takeReleaseTask(TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO, Map locationMap) { - Integer serial = 1; + + Map serialMap = new HashMap<>(); + serialMap.put(SERIAL_KEY, 1); List list = new ArrayList<>(); List logList = new ArrayList<>(); //移动 RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData oneMoveAndFork = getOneMoveAndFork(logOne, serial, v, robotTaskDetailDO); + RobotAcceptTaskData oneMoveAndFork = getOneMoveAndFork(logOne, v, robotTaskDetailDO,serialMap); //抬叉 RobotTaskDetailActionLogDO logTwo = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData twoFork = getTakeFork(logTwo, serial, v, robotTaskDetailDO, true, locationMap, getPalletTopicHeight, - dongTakeMsg); + RobotAcceptTaskData twoFork = getTakeFork(logTwo, v, robotTaskDetailDO, true, locationMap, getPalletTopicHeight, + dongTakeMsg,serialMap); //等待 RobotTaskDetailActionLogDO logThree = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData threeWait = getWait(logThree, serial, v, robotTaskDetailDO); + RobotAcceptTaskData threeWait = getWait(logThree, v, robotTaskDetailDO,serialMap); //获取托盘位置 RobotTaskDetailActionLogDO logFour = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData fourGetPalletTopic = getPalletTopic(logFour, serial, v, robotTaskDetailDO); + RobotAcceptTaskData fourGetPalletTopic = getPalletTopic(logFour, v, robotTaskDetailDO,serialMap); //抬高高度 RobotTaskDetailActionLogDO logFive = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData fiveFork = getTakeFork(logFive, serial, v, robotTaskDetailDO, true, locationMap, null, - dongTakeMsg); + RobotAcceptTaskData fiveFork = getTakeFork(logFive, v, robotTaskDetailDO, true, locationMap, null, + dongTakeMsg,serialMap); //移动到取货终点 RobotTaskDetailActionLogDO logSix = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData sixMoveToPalletPose = moveToPalletPose(logSix, serial, v, robotTaskDetailDO, dongTakeMsg); + RobotAcceptTaskData sixMoveToPalletPose = moveToPalletPose(logSix, v, robotTaskDetailDO, dongTakeMsg,serialMap); //抬高高度 RobotTaskDetailActionLogDO logSeven = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData sevenFork = getTakeFork(logSeven, serial, v, robotTaskDetailDO, true, locationMap, takeForkHeight, - dongTakeMsg); + RobotAcceptTaskData sevenFork = getTakeFork(logSeven, v, robotTaskDetailDO, true, locationMap, takeForkHeight, + dongTakeMsg,serialMap); //路径最后一个点 RobotTaskDetailActionLogDO logEight = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData eightFork = getMovePose(logEight, serial, v, robotTaskDetailDO, locationMap, true, - dongTakeMsg); + RobotAcceptTaskData eightFork = getMovePose(logEight, v, robotTaskDetailDO, locationMap, true, + dongTakeMsg,serialMap); //取货完成使用 String robotActionTakeGoodsKey = RobotTaskChcheConstant.ROBOT_ACTION_TAKE_GOODS + robotTaskDetailDO.getId(); redisUtil.set(robotActionTakeGoodsKey, eightFork.getCommand_id()); //行走-放 RobotTaskDetailActionLogDO logNight = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData nightMove = getToMovePose(logNight, serial, v, robotTaskDetailDO); + RobotAcceptTaskData nightMove = getToMovePose(logNight, v, robotTaskDetailDO,serialMap); //抬高高度 RobotTaskDetailActionLogDO logTen = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData tenFork = getTakeFork(logTen, serial, v, robotTaskDetailDO, false, locationMap, takeForkHeight, - dongReleaseMsg); + RobotAcceptTaskData tenFork = getTakeFork(logTen, v, robotTaskDetailDO, false, locationMap, takeForkHeight, + dongReleaseMsg,serialMap); //放货点位 RobotTaskDetailActionLogDO logEleven = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData elevenFork = getMovePose(logEleven, serial, v, robotTaskDetailDO, locationMap, false, - dongReleaseMsg); + RobotAcceptTaskData elevenFork = getMovePose(logEleven, v, robotTaskDetailDO, locationMap, false, + dongReleaseMsg,serialMap); //抬初始化高度 RobotTaskDetailActionLogDO logTwelve = new RobotTaskDetailActionLogDO(); - RobotAcceptTaskData twelveFork = getInitFork(logTwelve, serial, v, robotTaskDetailDO, true, locationMap); + RobotAcceptTaskData twelveFork = getInitFork(logTwelve, v, robotTaskDetailDO, true, locationMap,serialMap); //放货完成使用 String robotActionReleaseGoodsKey = RobotTaskChcheConstant.ROBOT_ACTION_RELEASE_GOODS + robotTaskDetailDO.getId(); redisUtil.set(robotActionReleaseGoodsKey, twelveFork.getCommand_id()); @@ -423,13 +433,15 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { return pair; } - private RobotAcceptTaskData getInitFork(RobotTaskDetailActionLogDO logTwelve, Integer serial, TaskPPDistribution v, - RobotTaskDetailDO robotTaskDetailDO, boolean b, Map locationMap - ) { + private RobotAcceptTaskData getInitFork(RobotTaskDetailActionLogDO logTwelve, TaskPPDistribution v, + RobotTaskDetailDO robotTaskDetailDO, boolean b, Map locationMap, + Map serialMap) { logTwelve.setCommandId(getId()); logTwelve.setTaskDetailId(robotTaskDetailDO.getId()); RobotAcceptTaskData robotAcceptTaskData = new RobotAcceptTaskData(); + int serial = serialMap.get(SERIAL_KEY); robotAcceptTaskData.setSerial(String.valueOf(serial)); + serialMap.put(SERIAL_KEY, ++serial); robotAcceptTaskData.setCommand_id(String.valueOf(logTwelve.getCommandId())); robotAcceptTaskData.setCommand_type(CommandTypeEnum.FORK.getType()); @@ -446,13 +458,12 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { * 行走--放 * * @param logNight - * @param serial * @param v * @param robotTaskDetailDO * @return */ - private RobotAcceptTaskData getToMovePose(RobotTaskDetailActionLogDO logNight, Integer serial, TaskPPDistribution v, - RobotTaskDetailDO robotTaskDetailDO) { + private RobotAcceptTaskData getToMovePose(RobotTaskDetailActionLogDO logNight, TaskPPDistribution v, + RobotTaskDetailDO robotTaskDetailDO,Map serialMap) { List releases = v.getReleases(); if (releases.size() == 1) { return null; @@ -460,9 +471,10 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { logNight.setCommandId(getId()); logNight.setTaskDetailId(robotTaskDetailDO.getId()); RobotAcceptTaskData robotAcceptTaskData = new RobotAcceptTaskData(); + int serial = serialMap.get(SERIAL_KEY); robotAcceptTaskData.setSerial(String.valueOf(serial)); + serialMap.put(SERIAL_KEY, ++serial); robotAcceptTaskData.setCommand_id(String.valueOf(logNight.getCommandId())); - serial++; robotAcceptTaskData.setCommand_type(CommandTypeEnum.MOVE_POSES_AND_FORK.getType()); releases.remove(releases.size() - 1); List pose2ds = BeanUtils.toBean(releases, Pose2ds.class); @@ -478,21 +490,21 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { * 移动到最后一个点位 * * @param logEight - * @param serial * @param v * @param robotTaskDetailDO * @param locationMap * @return */ - private RobotAcceptTaskData getMovePose(RobotTaskDetailActionLogDO logEight, Integer serial, TaskPPDistribution v, + private RobotAcceptTaskData getMovePose(RobotTaskDetailActionLogDO logEight, TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO, Map locationMap, - Boolean isTake, String msg) { + Boolean isTake, String msg,Map serialMap) { logEight.setCommandId(getId()); logEight.setTaskDetailId(robotTaskDetailDO.getId()); RobotAcceptTaskData robotAcceptTaskData = new RobotAcceptTaskData(); + int serial = serialMap.get(SERIAL_KEY); robotAcceptTaskData.setSerial(String.valueOf(serial)); + serialMap.put(SERIAL_KEY, ++serial); robotAcceptTaskData.setCommand_id(String.valueOf(logEight.getCommandId())); - serial++; robotAcceptTaskData.setCommand_type(CommandTypeEnum.MOVE_POSE.getType()); TaskPathPlanningDTO taskPathPlanningDTO = null; @@ -515,19 +527,19 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { * 移动到取货终点 * * @param logSix - * @param serial * @param v * @param robotTaskDetailDO * @return */ - private RobotAcceptTaskData moveToPalletPose(RobotTaskDetailActionLogDO logSix, Integer serial, TaskPPDistribution v, - RobotTaskDetailDO robotTaskDetailDO, String msg) { + private RobotAcceptTaskData moveToPalletPose(RobotTaskDetailActionLogDO logSix, TaskPPDistribution v, + RobotTaskDetailDO robotTaskDetailDO, String msg,Map serialMap) { logSix.setCommandId(getId()); logSix.setTaskDetailId(robotTaskDetailDO.getId()); RobotAcceptTaskData robotAcceptTaskData = new RobotAcceptTaskData(); + int serial = serialMap.get(SERIAL_KEY); robotAcceptTaskData.setSerial(String.valueOf(serial)); + serialMap.put(SERIAL_KEY, ++serial); robotAcceptTaskData.setCommand_id(String.valueOf(logSix.getCommandId())); - serial++; robotAcceptTaskData.setCommand_type(CommandTypeEnum.MOVE_TO_PALLET_POSE.getType()); logSix.setActionMsg(msg); setCommand(logSix, robotAcceptTaskData, robotTaskDetailDO.getRobotNo()); @@ -538,19 +550,19 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { * 获取托盘位置 * * @param logFour - * @param serial * @param v * @param robotTaskDetailDO * @return */ - private RobotAcceptTaskData getPalletTopic(RobotTaskDetailActionLogDO logFour, Integer serial, TaskPPDistribution v, - RobotTaskDetailDO robotTaskDetailDO) { + private RobotAcceptTaskData getPalletTopic(RobotTaskDetailActionLogDO logFour, TaskPPDistribution v, + RobotTaskDetailDO robotTaskDetailDO,Map serialMap) { logFour.setCommandId(getId()); logFour.setTaskDetailId(robotTaskDetailDO.getId()); RobotAcceptTaskData robotAcceptTaskData = new RobotAcceptTaskData(); + int serial = serialMap.get(SERIAL_KEY); robotAcceptTaskData.setSerial(String.valueOf(serial)); + serialMap.put(SERIAL_KEY, ++serial); robotAcceptTaskData.setCommand_id(String.valueOf(logFour.getCommandId())); - serial++; robotAcceptTaskData.setCommand_type(CommandTypeEnum.GET_PALLET_TOPIC.getType()); logFour.setActionMsg(getPalletTopic); setCommand(logFour, robotAcceptTaskData, robotTaskDetailDO.getRobotNo()); @@ -558,14 +570,15 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { } //等待 - private RobotAcceptTaskData getWait(RobotTaskDetailActionLogDO logThree, Integer serial, TaskPPDistribution v, - RobotTaskDetailDO robotTaskDetailDO) { + private RobotAcceptTaskData getWait(RobotTaskDetailActionLogDO logThree, TaskPPDistribution v, + RobotTaskDetailDO robotTaskDetailDO,Map serialMap) { logThree.setCommandId(getId()); logThree.setTaskDetailId(robotTaskDetailDO.getId()); RobotAcceptTaskData robotAcceptTaskData = new RobotAcceptTaskData(); + int serial = serialMap.get(SERIAL_KEY); robotAcceptTaskData.setSerial(String.valueOf(serial)); + serialMap.put(SERIAL_KEY, ++serial); robotAcceptTaskData.setCommand_id(String.valueOf(logThree.getCommandId())); - serial++; robotAcceptTaskData.setCommand_type(CommandTypeEnum.WAIT.getType()); RobotArgDTO arg = RobotArgDTO.builder().time(parm).build(); @@ -579,21 +592,21 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { * 默认取的抬叉 * * @param logTwo - * @param serial * @param v * @param robotTaskDetailDO * @return */ - private RobotAcceptTaskData getTakeFork(RobotTaskDetailActionLogDO logTwo, Integer serial, TaskPPDistribution v, + private RobotAcceptTaskData getTakeFork(RobotTaskDetailActionLogDO logTwo, TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO, Boolean isTake, Map locationMap, Double addHeight, - String msg) { + String msg,Map serialMap) { logTwo.setCommandId(getId()); logTwo.setTaskDetailId(robotTaskDetailDO.getId()); RobotAcceptTaskData robotAcceptTaskData = new RobotAcceptTaskData(); + int serial = serialMap.get(SERIAL_KEY); robotAcceptTaskData.setSerial(String.valueOf(serial)); + serialMap.put(SERIAL_KEY, ++serial); robotAcceptTaskData.setCommand_id(String.valueOf(logTwo.getCommandId())); - serial++; robotAcceptTaskData.setCommand_type(CommandTypeEnum.FORK.getType()); WareHouseLocationDO wareHouseLocationDO = null; @@ -620,7 +633,8 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { } //移动 - public RobotAcceptTaskData getOneMoveAndFork(RobotTaskDetailActionLogDO logOne, Integer serial, TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO) { + public RobotAcceptTaskData getOneMoveAndFork(RobotTaskDetailActionLogDO logOne, TaskPPDistribution v, + RobotTaskDetailDO robotTaskDetailDO,Map serialMap) { List takes = v.getTakes(); //说明机器人不需要移动 if (takes.size() == 1) { @@ -630,9 +644,10 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { logOne.setCommandId(getId()); logOne.setTaskDetailId(robotTaskDetailDO.getId()); RobotAcceptTaskData robotAcceptTaskData = new RobotAcceptTaskData(); + int serial = serialMap.get(SERIAL_KEY); robotAcceptTaskData.setSerial(String.valueOf(serial)); + serialMap.put(SERIAL_KEY, ++serial); robotAcceptTaskData.setCommand_id(String.valueOf(logOne.getCommandId())); - serial++; robotAcceptTaskData.setCommand_type(CommandTypeEnum.MOVE_POSES_AND_FORK.getType()); if (takes.size() > 0) { @@ -679,13 +694,14 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac); robotTask.setOrder_type(RobotTaksOrderTypeEnum.AUTO_CHARGE.getType()); - Integer serial = 1; + Map serialMap = new HashMap<>(); + serialMap.put(SERIAL_KEY, 1); List list = new ArrayList<>(); //移动 RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO(); String msg = charge + chargeLogDO.getDeviceNo(); - RobotAcceptTaskData oneMoveAndFork = onlyMove(logOne, serial, v, msg); + RobotAcceptTaskData oneMoveAndFork = onlyMove(logOne, v, msg,serialMap); list.add(oneMoveAndFork); robotTask.setData(list); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsServiceImpl.java index 361835eff..45dc81b37 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsServiceImpl.java @@ -5,9 +5,14 @@ import cn.hutool.json.JSONUtil; import cn.iocoder.yudao.module.mqtt.api.path.PathPlanningApi; import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant; import cn.iocoder.yudao.module.system.controller.admin.config.dto.TaskOrderConfigDTO; +import cn.iocoder.yudao.module.system.controller.admin.config.vo.CommonConfigVO; import cn.iocoder.yudao.module.system.dal.dataobject.config.CommonConfigDO; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO; import cn.iocoder.yudao.module.system.dal.mysql.config.CommonConfigMapper; +import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotWarnMsgMapper; import cn.iocoder.yudao.module.system.enums.config.CommandConfigTypeEnum; +import cn.iocoder.yudao.module.system.enums.robot.RobotWarnType; +import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; @@ -15,6 +20,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.Arrays; @Slf4j @Service @@ -27,6 +33,12 @@ public class ToolsServiceImpl implements ToolsService { @Resource private CommonConfigMapper configMapper; + @Resource + private RobotWarnMsgService warnMsgService; + + @Resource + private RobotWarnMsgMapper warnMsgMapper; + /** * 发送时间、优先级、距离的权重给PP * @@ -36,13 +48,49 @@ public class ToolsServiceImpl implements ToolsService { public String sendPPsortConfig() { CommonConfigDO commonConfigDO = configMapper.selectOne(new LambdaQueryWrapper() - .eq(CommonConfigDO::getConfigType, CommandConfigTypeEnum.PP_WEIGHT_CONFIG.getType())); - if (ObjectUtil.isNotEmpty(commonConfigDO)) { - TaskOrderConfigDTO taskOrderConfigDTO = JSONUtil.toBean(commonConfigDO.getConfigStr(), TaskOrderConfigDTO.class); - pathPlanningApi.synchronousLineObject(taskOrderConfigDTO, - PathPlanningTopicConstant.SEND_SORT_CONFIG_TO_PP); + .eq(CommonConfigDO::getConfigType, CommandConfigTypeEnum.CHARG_CONFIG.getType())); + + if (ObjectUtil.isEmpty(commonConfigDO) || ObjectUtil.isEmpty(commonConfigDO.getConfigStr())) { + log.info("没有配置路径规划权重"); + addWarnMsg(); + return "没有配置路径规划权重"; } + CommonConfigVO chargeConfig = JSONUtil.toBean(commonConfigDO.getConfigStr(), CommonConfigVO.class); + if (ObjectUtil.isEmpty(chargeConfig.getPathSortConfig())) { + addWarnMsg(); + return "没有配置路径规划权重"; + } + + CommonConfigDO config = configMapper.selectOne(new LambdaQueryWrapper() + .eq(CommonConfigDO::getConfigType, chargeConfig.getPathSortConfig())); + if (ObjectUtil.isEmpty(config)) { + addWarnMsg(); + return "没有配置路径规划权重"; + } + + TaskOrderConfigDTO taskOrderConfigDTO = JSONUtil.toBean(config.getConfigStr(), TaskOrderConfigDTO.class); + pathPlanningApi.synchronousLineObject(taskOrderConfigDTO, + PathPlanningTopicConstant.SEND_SORT_CONFIG_TO_PP); + return "发送数据库权重配置成功"; } + + + public void addWarnMsg() { + RobotWarnMsgDO warnMsg = RobotWarnMsgDO.builder().warnLevel(4) + .warnCode("NOT_PP_CONFIG") + .robotNo("PP") + .warnType(RobotWarnType.ROBOT_WARN.getType()) + .warnMsg("没有配置路径规划权重") + .warnSolve("配置页面设置") + .build(); + warnMsgService.sendWarnMsgToWebsocket(warnMsg.getWarnMsg()); + warnMsgMapper.insertBatch(Arrays.asList(warnMsg)); + } + + + + + }