路径规划权重

This commit is contained in:
cbs 2025-03-06 10:16:04 +08:00
parent 982cab4313
commit b4d12cf03d
11 changed files with 171 additions and 95 deletions

View File

@ -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;
}

View File

@ -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 = "配置信息")

View File

@ -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 = "配置信息")

View File

@ -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 = "配置信息")

View File

@ -50,4 +50,7 @@ public class CommonConfigVO {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime onceEndTime;
@Schema(description = "路径规划权重")
private Integer pathSortConfig;
}

View File

@ -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;
/**

View File

@ -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,"优先级=时间=路径");
/**
* 类型
*/

View File

@ -34,10 +34,6 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
// -- 策略1 处理库位点
// -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作
List<WareHouseLocationDO> 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());

View File

@ -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

View File

@ -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<RobotAcceptTaskData>, List<RobotTaskDetailActionLogDO>> releaseTask(TaskPPDistribution v,
RobotTaskDetailDO robotTaskDetailDO,
Map<Long, WareHouseLocationDO> locationMap) {
Integer serial = 1;
Map<String,Integer> serialMap = new HashMap<>();
serialMap.put(SERIAL_KEY, 1);
List<RobotAcceptTaskData> list = new ArrayList<>();
List<RobotTaskDetailActionLogDO> 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<RobotAcceptTaskData>, List<RobotTaskDetailActionLogDO>> takeTask(TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO,
Map<Long, WareHouseLocationDO> locationMap) {
Integer serial = 1;
Map<String,Integer> serialMap = new HashMap<>();
serialMap.put(SERIAL_KEY, 1);
List<RobotAcceptTaskData> list = new ArrayList<>();
List<RobotTaskDetailActionLogDO> 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<RobotAcceptTaskData>, List<RobotTaskDetailActionLogDO>> moveTask(TaskPPDistribution v,
RobotTaskDetailDO robotTaskDetailDO,
Map<Long, WareHouseLocationDO> locationMap) {
Integer serial = 1;
Map<String,Integer> serialMap = new HashMap<>();
serialMap.put(SERIAL_KEY, 1);
List<RobotAcceptTaskData> list = new ArrayList<>();
List<RobotTaskDetailActionLogDO> 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<String,Integer> 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<TaskPathPlanningDTO> takes = v.getReleases();
List<Pose2ds> pose2ds = BeanUtils.toBean(takes, Pose2ds.class);
@ -351,55 +359,57 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
*/
private Pair<List<RobotAcceptTaskData>, List<RobotTaskDetailActionLogDO>> takeReleaseTask(TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO,
Map<Long, WareHouseLocationDO> locationMap) {
Integer serial = 1;
Map<String,Integer> serialMap = new HashMap<>();
serialMap.put(SERIAL_KEY, 1);
List<RobotAcceptTaskData> list = new ArrayList<>();
List<RobotTaskDetailActionLogDO> 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<Long, WareHouseLocationDO> locationMap
) {
private RobotAcceptTaskData getInitFork(RobotTaskDetailActionLogDO logTwelve, TaskPPDistribution v,
RobotTaskDetailDO robotTaskDetailDO, boolean b, Map<Long, WareHouseLocationDO> locationMap,
Map<String,Integer> 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<String,Integer> serialMap) {
List<TaskPathPlanningDTO> 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> 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<Long, WareHouseLocationDO> locationMap,
Boolean isTake, String msg) {
Boolean isTake, String msg,Map<String,Integer> 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<String,Integer> 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<String,Integer> 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<String,Integer> 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<Long, WareHouseLocationDO> locationMap, Double addHeight,
String msg) {
String msg,Map<String,Integer> 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<String,Integer> serialMap) {
List<TaskPathPlanningDTO> 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<String,Integer> serialMap = new HashMap<>();
serialMap.put(SERIAL_KEY, 1);
List<RobotAcceptTaskData> 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);

View File

@ -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<CommonConfigDO>()
.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<CommonConfigDO>()
.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));
}
}