From 9b515e2f04fee18a143fe036df22f11286772384 Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Thu, 27 Feb 2025 17:54:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86PP=E4=B8=8A=E6=8A=A5=E7=9A=84?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/path/task/TaskToPathPlanningDTO.java | 2 +- .../yudao/module/mqtt/config/MqttFactory.java | 2 +- .../module/mqtt/enums/DefineSubTopicEnum.java | 2 +- ...thPlanningDistributionTaskServiceImpl.java | 2 +- .../RobotTaskDetailActionLogController.java | 2 +- .../admin/robot/RobotTaskController.java | 10 ++ .../detail/RobotTaskDetailLogResoVO.java | 41 ++++++ .../robot/detail/RobotTaskDetailLogVO.java | 33 +++++ .../admin/robot/task/TaskPathPlanningDTO.java | 2 +- .../robot/vo/RobotTaskDetailPageReqVO.java | 2 +- .../admin/robot/vo/RobotTaskDetailRespVO.java | 4 +- .../robot/vo/RobotTaskDetailSaveReqVO.java | 2 +- .../RobotTaskDetailActionLogMapper.java | 2 +- .../dal/mysql/robot/RobotTaskMapper.java | 11 ++ .../enums/device/DeviceAttributeEnum.java | 23 ++++ .../strategy/HouseLocationStrategyImpl.java | 11 +- .../service/robot/RobotTaskService.java | 9 ++ .../service/robot/RobotTaskServiceImpl.java | 107 ++++++++++----- .../robot/job/AutoChargeServiceImpl.java | 127 +++++++----------- .../robot/job/DistributeTasksServiceImpl.java | 2 +- .../robot/job/RobotCommonTaskService.java | 3 +- .../robot/job/RobotCommonTaskServiceImpl.java | 112 ++++++++++++--- .../RobotPathPlanningService.java | 6 + .../RobotPathPlanningServiceImpl.java | 10 +- .../src/main/resources/application-local.yaml | 3 +- .../mapper/robot/RobotTaskMapper.xml | 40 ++++++ 26 files changed, 422 insertions(+), 148 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/detail/RobotTaskDetailLogResoVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/detail/RobotTaskDetailLogVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceAttributeEnum.java 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 dccf177ae..a10f71729 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 @@ -19,7 +19,7 @@ import java.util.List; public class TaskToPathPlanningDTO { @Schema(description = "robot_task_detail/robot_charge_log 的 id") - private Long id; + private String id; @Schema(description = "任务类型(TASK:robot_task的任务、CHARGE:充电任务)") private String type; diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/config/MqttFactory.java b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/config/MqttFactory.java index fc5b613ff..e6ed432ec 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/config/MqttFactory.java +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/config/MqttFactory.java @@ -139,7 +139,7 @@ public class MqttFactory { return BeanUtils.getBean(RobotStatusServiceImpl.class); case SYNCHRONOUS_ALL_MAP_REQUEST: return BeanUtils.getBean(PathPlanningInitDataServiceImpl.class); - case DISTRIBUTION_TASK: + case TASK_ASSIGNMENT_FEEDBACK: return BeanUtils.getBean(PathPlanningDistributionTaskServiceImpl.class); default : // case ROBOT_TASK_STATUS: diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/enums/DefineSubTopicEnum.java b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/enums/DefineSubTopicEnum.java index b0114c19a..e060d94c9 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/enums/DefineSubTopicEnum.java +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/enums/DefineSubTopicEnum.java @@ -19,7 +19,7 @@ public enum DefineSubTopicEnum { ROBOT_TASK_STATUS("ROBOT_TASK_STATUS", 0,"机器人任务完成上报"), ROBOT_GENERICS_STATUS("ROBOT_GENERICS_STATUS", 0,"机器人异常"), SYNCHRONOUS_ALL_MAP_REQUEST("SYNCHRONOUS_ALL_MAP_REQUEST", 0,"路径规划需要初始数据上报"), - DISTRIBUTION_TASK("DISTRIBUTION_TASK", 0,"路径规划任务分配上报"); + TASK_ASSIGNMENT_FEEDBACK("TASK_ASSIGNMENT_FEEDBACK", 0,"路径规划任务分配上报"); private final String topic; diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/PathPlanningDistributionTaskServiceImpl.java b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/PathPlanningDistributionTaskServiceImpl.java index 436606140..27db62cb1 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/PathPlanningDistributionTaskServiceImpl.java +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/PathPlanningDistributionTaskServiceImpl.java @@ -23,7 +23,7 @@ public class PathPlanningDistributionTaskServiceImpl implements MqttService{ */ @Override public void analysisMessage(String message) { - log.info("PP上报任务分配"); + log.info("PP上报任务分配 :{}", message); pathApi.ppDistributionTask(message); } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/actionlog/RobotTaskDetailActionLogController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/actionlog/RobotTaskDetailActionLogController.java index 0bf120553..116f454fc 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/actionlog/RobotTaskDetailActionLogController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/actionlog/RobotTaskDetailActionLogController.java @@ -33,7 +33,7 @@ import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; @Tag(name = "管理后台 - 车辆动作记录") @RestController -@RequestMapping("/robot/task-detail-action-log") +@RequestMapping("/system/robot/task-detail-action-log") @Validated public class RobotTaskDetailActionLogController { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotTaskController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotTaskController.java index b49bce36a..33ad403fb 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotTaskController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotTaskController.java @@ -1,5 +1,7 @@ package cn.iocoder.yudao.module.system.controller.admin.robot; +import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogResoVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogVO; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskRespVO; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskSaveReqVO; @@ -103,4 +105,12 @@ public class RobotTaskController { BeanUtils.toBean(list, RobotTaskRespVO.class)); } + @PostMapping("/logPage") + @Operation(summary = "任务日志分页") + @PreAuthorize("@ss.hasPermission('robot:task:logPage')") + public CommonResult> logPage(@Valid @RequestBody RobotTaskDetailLogVO pageReqVO) { + PageResult pageResult = taskService.logPage(pageReqVO); + return success(pageResult); + } + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/detail/RobotTaskDetailLogResoVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/detail/RobotTaskDetailLogResoVO.java new file mode 100644 index 000000000..5c26ef749 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/detail/RobotTaskDetailLogResoVO.java @@ -0,0 +1,41 @@ +package cn.iocoder.yudao.module.system.controller.admin.robot.detail; + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class RobotTaskDetailLogResoVO { + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26224") + private Long id; + + @Schema(description = "任务号") + private String taskNo; + + @Schema(description = "任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer taskType; + + @Schema(description = "任务内容") + private String msg; + + @Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1") + private Integer taskStatus; + + @Schema(description = "开始时间") + private LocalDateTime startTime; + + @Schema(description = "结束时间") + private LocalDateTime endTime; + + @Schema(description = "创建时间") + private LocalDateTime createTime; + + @Schema(description = "计算后的目标库位编号") + private String toLocationNo; + + @Schema(description = "计算后的来源库位编号") + private String fromLocationNo; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/detail/RobotTaskDetailLogVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/detail/RobotTaskDetailLogVO.java new file mode 100644 index 000000000..5a95b3720 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/detail/RobotTaskDetailLogVO.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.system.controller.admin.robot.detail; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Date; + + +@Data +public class RobotTaskDetailLogVO extends PageParam { + + @Schema(description = "任务号") + private String taskNo; + + @Schema(description = "任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货、)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer taskType; + + @Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1") + private Integer taskStatus; + + @Schema(description = "开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date startTime; + + @Schema(description = "结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date endTime; + + @Schema(description = "关键词") + private String msg; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/task/TaskPathPlanningDTO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/task/TaskPathPlanningDTO.java index 2a86757e6..4fe8d48a0 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/task/TaskPathPlanningDTO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/task/TaskPathPlanningDTO.java @@ -7,7 +7,7 @@ import lombok.Data; public class TaskPathPlanningDTO { @Schema(description = "出发点id(点位子表id)", example = "20863") - private String startingPointId; + private String id; private Double x; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailPageReqVO.java index 523f08dda..93402c527 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailPageReqVO.java @@ -53,7 +53,7 @@ public class RobotTaskDetailPageReqVO extends PageParam { @Schema(description = "放货线库id") private Long toLaneId; - @Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消)", example = "1") + @Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1") private Integer taskStatus; @Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailRespVO.java index 15efa78d4..e8ec3b3f8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailRespVO.java @@ -58,8 +58,8 @@ public class RobotTaskDetailRespVO { @ExcelProperty("AGV动作") private String robotAction; - @Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消)", example = "1") - @ExcelProperty("任务状态(0:未开始、1:执行中、2:已完成、3:已取消)") + @Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1") + @ExcelProperty("任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)") private Integer taskStatus; @Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailSaveReqVO.java index d43a97900..8baae17c9 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailSaveReqVO.java @@ -59,7 +59,7 @@ public class RobotTaskDetailSaveReqVO { @Schema(description = "AGV动作") private String robotAction; - @Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消)", example = "1") + @Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1") private Integer taskStatus; @Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/actionlog/RobotTaskDetailActionLogMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/actionlog/RobotTaskDetailActionLogMapper.java index 5127f293a..8c827dd9d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/actionlog/RobotTaskDetailActionLogMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/actionlog/RobotTaskDetailActionLogMapper.java @@ -22,7 +22,7 @@ public interface RobotTaskDetailActionLogMapper extends BaseMapperX { */ IPage selectPageList(@Param("mpPage") IPage mpPage, @Param("pageReqVO") RobotTaskPageReqVO pageReqVO); + + /** + * 任务日志 + * @param mpPage + * @param pageReqVO + * @return + */ + IPage selectLogPageList(@Param("mpPage") IPage mpPage, + @Param("pageReqVO") RobotTaskDetailLogVO pageReqVO); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceAttributeEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceAttributeEnum.java new file mode 100644 index 000000000..a8544ac59 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceAttributeEnum.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.system.enums.device; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * device_information的`device_attribute` tinyint DEFAULT NULL COMMENT '设备专有属性(1:自动充电类型充电桩、0:手动充电类型充电桩)', + */ +@Getter +@AllArgsConstructor +public enum DeviceAttributeEnum { + AUTO_CHARGE(1, "自动充电类型充电桩"), + HAND_MOVEMENT(0, "手动充电类型充电桩"); + + /** + * 类型 + */ + private final Integer type; + /** + * 说明 + */ + private final String msg; +} 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 d90909236..e65b55dd8 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,7 +34,10 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy { // -- 策略1 处理库位点 // -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作 List newList = new ArrayList<>(); - Long locationNumber = nodeBaseDTOS.get(0).getLocationNumber(); + Long locationNumber = 0l; + if (ObjectUtil.isNotEmpty(nodeBaseDTOS)) { + locationNumber = nodeBaseDTOS.get(0).getLocationNumber(); + } for (NodeBaseDTO item : nodeBaseDTOS) { if (item.getId() == null) { @@ -73,14 +76,14 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy { item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS)); } - //判断排序是否重复 - List locationNumbers = newList.stream().map(WareHouseLocationDO::getLocationNumber).collect(Collectors.toList()); + //判断排序是否重复 后续改成一条线库的库位编号不能重复 todo + /*List locationNumbers = newList.stream().map(WareHouseLocationDO::getLocationNumber).collect(Collectors.toList()); if (ObjectUtil.isNotEmpty(locationNumbers)) { List list = houseLocationService.getLocationByLocationNumbers(locationNumbers); if (ObjectUtil.isNotEmpty(list)) { throw exception(HOUSE_LOCATION_NO_EXIST); } - } + }*/ List oldList = houseLocationService.getByMapId(positionMapId); List> list = CollectionUtils.compareLists(oldList, newList, diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java index 542ce38d3..915f08baa 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java @@ -4,6 +4,8 @@ import java.util.*; import javax.validation.*; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogResoVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogVO; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskRespVO; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskSaveReqVO; @@ -66,4 +68,11 @@ public interface RobotTaskService extends IService { * @param message */ void ppDistributionTask(String message); + + /** + * 任务日志分页 + * @param pageReqVO + * @return + */ + PageResult logPage( RobotTaskDetailLogVO pageReqVO); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java index 422b3cc35..19c1bfeec 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.system.service.robot; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; @@ -8,6 +9,8 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; import cn.iocoder.yudao.module.mqtt.enums.path.TaskTypeEnum; +import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogResoVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogVO; import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskPPDistribution; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*; import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO; @@ -25,6 +28,7 @@ import cn.iocoder.yudao.module.system.enums.robot.*; import cn.iocoder.yudao.module.system.service.robot.job.RobotCommonTaskService; import cn.iocoder.yudao.module.system.util.redis.RedisUtil; import cn.iocoder.yudao.module.system.util.redis.RedissonUtils; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; @@ -726,11 +730,15 @@ public class RobotTaskServiceImpl extends ServiceImpl list = Arrays.asList(array); + //todo 如果车辆状态是充电中, 更新充电表的充电数据 + + TaskPPDistribution distribution = JSON.parseObject(message,TaskPPDistribution.class); + + List list = Arrays.asList(distribution); List taskList = list.stream() .filter(v -> TaskTypeEnum.TASK.getType().equals(v.getType())) @@ -740,19 +748,19 @@ public class RobotTaskServiceImpl extends ServiceImpl TaskTypeEnum.CHARGE.getType().equals(v.getType())) .collect(Collectors.toList()); - List detailIds = new ArrayList<>(); Map taskMap = list.stream().collect(Collectors.toMap(v -> v.getId(), Function.identity())); List chargeDetaildIds = null; + List robotChargeLogs = null; /** * 充电 */ if (ObjectUtil.isNotEmpty(chargeList)) { List chargeIds = chargeList.stream().map(TaskPPDistribution::getId).collect(Collectors.toList()); - List robotChargeLogs = chargeLogMapper.selectBatchIds(chargeIds); + robotChargeLogs = chargeLogMapper.selectBatchIds(chargeIds); robotChargeLogs.stream().forEach(taskDetailDO -> { taskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType()); }); @@ -797,39 +805,72 @@ public class RobotTaskServiceImpl extends ServiceImpl { task.setTaskStatus(RobotTaskStatusEnum.DOING.getType()); }); - taskDetailMapper.updateBatch(taskDetailDOS); + taskMapper.updateBatch(tasks); } robotCommonTaskService.sendTaskToRobot(taskList); - robotCommonTaskService.sendChargeTaskToRobot(chargeList); + robotCommonTaskService.sendChargeTaskToRobot(chargeList,robotChargeLogs); + } + + /** + * 任务日志分页 + * @param pageReqVO + * @return + */ + @Override + public PageResult logPage(RobotTaskDetailLogVO pageReqVO) { + PageResult dataPage = new PageResult<>(); + + IPage mpPage = MyBatisUtils.buildPage(pageReqVO); + + IPage page = taskMapper.selectLogPageList(mpPage, pageReqVO); + dataPage.setTotal(page.getTotal()); + List list = page.getRecords(); + + List targetList = BeanUtil.copyToList(list, RobotTaskDetailLogResoVO.class); + for (RobotTaskDetailLogResoVO robotTaskRespVO : targetList) { + String msg = ""; + RobotTaskTypeEnum robotTaskType = RobotTaskTypeEnum.getRobotTaskType(robotTaskRespVO.getTaskType()); + switch (robotTaskType) { + case TAKE_RELEASE: + msg = "取货点 " + robotTaskRespVO.getFromLocationNo() +" 放货点 " + robotTaskRespVO.getToLocationNo(); + break; + case PARK: + if (ObjectUtil.isNotEmpty(robotTaskRespVO.getToLocationNo())) { + msg = "停车点 " + robotTaskRespVO.getToLocationNo(); + }else { + msg = "停车点"; + } + break; + case CHARGE: + if (ObjectUtil.isNotEmpty(robotTaskRespVO.getToLocationNo())) { + msg = "充电点 " + robotTaskRespVO.getToLocationNo(); + }else { + msg = "充电点"; + } + break; + case MOVE: + if (ObjectUtil.isNotEmpty(robotTaskRespVO.getToLocationNo())) { + msg = "移动点 " + robotTaskRespVO.getToLocationNo(); + }else { + msg = "移动点"; + } + break; + case TAKE: + msg = "取货点 " + robotTaskRespVO.getFromLocationNo(); + break; + case RELEASE: + msg = "放货点 " + robotTaskRespVO.getToLocationNo(); + break; + default: + log.error("任务类型不存在"); + } + + robotTaskRespVO.setMsg(msg); + } + dataPage.setList(targetList); + return dataPage; } - - - - - - - - - - - - - - - - - - - - - - - - - - - } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/AutoChargeServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/AutoChargeServiceImpl.java index 707d0eeac..1f4929d50 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/AutoChargeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/AutoChargeServiceImpl.java @@ -27,6 +27,7 @@ import cn.iocoder.yudao.module.system.enums.device.DeviceUseStatusEnum; import cn.iocoder.yudao.module.system.enums.redis.RobotCacheLockEnum; import cn.iocoder.yudao.module.system.enums.robot.*; import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeModelEnum; +import cn.iocoder.yudao.module.system.service.robot.pathplanning.RobotPathPlanningService; import cn.iocoder.yudao.module.system.util.redis.RedisUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -76,6 +77,9 @@ public class AutoChargeServiceImpl implements AutoChargeService { @Value("${zn.full_electricity:100}") private String fullElectricity; + @Autowired + private RobotPathPlanningService robotPathPlanningService; + /** * 自动充电 */ @@ -128,43 +132,18 @@ public class AutoChargeServiceImpl implements AutoChargeService { detailMap = taskDetailDOS.stream().collect(Collectors.groupingBy(RobotTaskDetailDO::getRobotNo)); } - List updateTaskDetails = new ArrayList<>(); List logs = new ArrayList<>(); - Set taskIds = new HashSet<>(); //组装充电任务 - assembleChargeTask(robots,deviceInformationDOS,chargeConfig,chargeFullNos,updateTaskDetails,logs,taskIds,detailMap); + assembleChargeTask(robots,deviceInformationDOS,chargeConfig,chargeFullNos,logs,detailMap); if (ObjectUtil.isEmpty(logs)) { log.info("没有需要执行的充电任务"); return; } - if (ObjectUtil.isNotEmpty(updateTaskDetails)) { - robotTaskDetailMapper.updateBatch(updateTaskDetails); - } - - if (ObjectUtil.isNotEmpty(taskIds)) { - List taskDOS = robotTaskMapper.selectBatchIds(taskIds); - for (RobotTaskDO taskDO : taskDOS) { - if (RobotTaskStatusEnum.NEW.getType().equals(taskDO.getTaskStatus())) { - taskDO.setTaskStatus(RobotTaskStatusEnum.DOING.getType()); - taskDO.setStartTime(LocalDateTime.now()); - } - } - robotTaskMapper.updateBatch(taskDOS); - } - - Set robotLists = logs.stream() - .map(RobotChargeLogDO::getDeviceNo) - .collect(Collectors.toSet()); - - if (ObjectUtil.isNotEmpty(robotLists)) { - robotInformationMapper.updateRobotListStatus(robotLists,RobotStatusEnum.DOING.getType()); - } - chargeLogMapper.insertBatch(logs); - //todo 发送给路PP + robotPathPlanningService.sendChargeTaskToPP(logs); //改成异步 logs.stream().forEach(v -> { @@ -180,14 +159,12 @@ public class AutoChargeServiceImpl implements AutoChargeService { * @param deviceInformationDOS * @param chargeConfig * @param chargeFullNos - * @param updateTaskDetails * @param logs - * @param taskIds * @param detailMap */ public void assembleChargeTask(List robots, List deviceInformationDOS, - CommonConfigVO chargeConfig, List chargeFullNos, List updateTaskDetails, - List logs, Set taskIds, Map> detailMap) { + CommonConfigVO chargeConfig, List chargeFullNos, + List logs, Map> detailMap) { //判断机器人身上的电量少于设定的电量 for (RobotInformationDO robot : robots) { String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT_SOC +robot.getMacAddress(); @@ -203,12 +180,20 @@ public class AutoChargeServiceImpl implements AutoChargeService { break; } - RobotChargeLogDO log = new RobotChargeLogDO(); - log.setRobotNo(robot.getRobotNo()); - // todo 后续需要根据车辆的自动充电/手动充电来分配充电桩 - log.setDeviceNo(deviceInformationDOS.get(0).getDeviceNo()); + DeviceInformationDO deviceInformationDO = deviceInformationDOS.stream() + .filter(v -> v.getDeviceAttribute().equals(robot.getChargeType())) + .findFirst() + .orElse(new DeviceInformationDO()); + if (ObjectUtil.isEmpty(deviceInformationDO.getDeviceNo())) { + log.info("当前机器人查不到对应的充电桩类型 :{}",robot.getRobotNo()); + continue; + } + + RobotChargeLogDO logDo = new RobotChargeLogDO(); + logDo.setRobotNo(robot.getRobotNo()); + logDo.setDeviceNo(deviceInformationDO.getDeviceNo()); String[] split = dataPoseDTO.getBat_soc().split("\\."); - log.setStartElectricity(Integer.valueOf(split[0])); + logDo.setStartElectricity(Integer.valueOf(split[0])); //配置的充满电电量 BigDecimal robotFullElectricity = new BigDecimal(fullElectricity); //车子剩余电量 @@ -216,9 +201,10 @@ public class AutoChargeServiceImpl implements AutoChargeService { if (ObjectUtil.isNotEmpty(chargeConfig.getChanceCycle()) && !chargeFullNos.contains(robot.getRobotNo()) && robotRemainingElectricity.compareTo(robotFullElectricity) < 0) { //充满电 - log.setChargeModel(ChargeModelEnum.FULL.getType()); - logs.add(log); - deviceInformationDOS.removeIf(v -> log.getDeviceNo().equals(v.getDeviceNo())); + logDo.setChargeModel(ChargeModelEnum.FULL.getType()); + logs.add(logDo); + deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo())); + log.info("分配到充满电充电任务 :{} ,充电设备编号是 :{}, 任务id :{}",logDo.getRobotNo(),logDo.getDeviceNo(),logDo.getTaskDetailId()); continue; } @@ -228,15 +214,11 @@ public class AutoChargeServiceImpl implements AutoChargeService { BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(robot.getAutoCharge())); if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) { RobotTaskDetailDO robotTaskDetailDO = detailMap.get(robot.getRobotNo()).get(0); - robotTaskDetailDO.setRobotNo(robot.getRobotNo()); - robotTaskDetailDO.setStartTime(LocalDateTime.now()); - robotTaskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType()); - updateTaskDetails.add(robotTaskDetailDO); - taskIds.add(robotTaskDetailDO.getRobotTaskId()); - deviceInformationDOS.removeIf(v -> log.getDeviceNo().equals(v.getDeviceNo())); - log.setChargeModel(ChargeModelEnum.TASK.getType()); - log.setTaskDetailId(robotTaskDetailDO.getId()); - logs.add(log); + deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo())); + logDo.setChargeModel(ChargeModelEnum.TASK.getType()); + logDo.setTaskDetailId(robotTaskDetailDO.getId()); + logs.add(logDo); + log.info("分配到任务充电任务 :{} ,充电设备编号是 :{}, 任务id :{}",logDo.getRobotNo(),logDo.getDeviceNo(),logDo.getTaskDetailId()); continue; } } @@ -247,15 +229,11 @@ public class AutoChargeServiceImpl implements AutoChargeService { BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(chargeConfig.getStartAutoCharge())); if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) { RobotTaskDetailDO robotTaskDetailDO = detailMap.get(robot.getRobotNo()).get(0); - robotTaskDetailDO.setRobotNo(robot.getRobotNo()); - robotTaskDetailDO.setStartTime(LocalDateTime.now()); - robotTaskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType()); - updateTaskDetails.add(robotTaskDetailDO); - taskIds.add(robotTaskDetailDO.getRobotTaskId()); - deviceInformationDOS.removeIf(v -> log.getDeviceNo().equals(v.getDeviceNo())); - log.setChargeModel(ChargeModelEnum.TASK.getType()); - log.setTaskDetailId(robotTaskDetailDO.getId()); - logs.add(log); + deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo())); + logDo.setChargeModel(ChargeModelEnum.TASK.getType()); + logDo.setTaskDetailId(robotTaskDetailDO.getId()); + logs.add(logDo); + log.info("分配到任务充电任务 :{} ,充电设备编号是 :{}, 任务id :{}",logDo.getRobotNo(),logDo.getDeviceNo(),logDo.getTaskDetailId()); continue; } } @@ -266,15 +244,11 @@ public class AutoChargeServiceImpl implements AutoChargeService { BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(chargeConfig.getChanceChargeStart())); if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) { RobotTaskDetailDO robotTaskDetailDO = detailMap.get(robot.getRobotNo()).get(0); - robotTaskDetailDO.setRobotNo(robot.getRobotNo()); - robotTaskDetailDO.setStartTime(LocalDateTime.now()); - robotTaskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType()); - updateTaskDetails.add(robotTaskDetailDO); - taskIds.add(robotTaskDetailDO.getRobotTaskId()); - deviceInformationDOS.removeIf(v -> log.getDeviceNo().equals(v.getDeviceNo())); - log.setChargeModel(ChargeModelEnum.TASK.getType()); - log.setTaskDetailId(robotTaskDetailDO.getId()); - logs.add(log); + deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo())); + logDo.setChargeModel(ChargeModelEnum.TASK.getType()); + logDo.setTaskDetailId(robotTaskDetailDO.getId()); + logs.add(logDo); + log.info("分配到任务充电任务 :{} ,充电设备编号是 :{}, 任务id :{}",logDo.getRobotNo(),logDo.getDeviceNo(),logDo.getTaskDetailId()); continue; } } @@ -283,9 +257,10 @@ public class AutoChargeServiceImpl implements AutoChargeService { //自动充电 BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(robot.getAutoCharge())); if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) { - log.setChargeModel(ChargeModelEnum.AUTO.getType()); - logs.add(log); - deviceInformationDOS.removeIf(v -> log.getDeviceNo().equals(v.getDeviceNo())); + logDo.setChargeModel(ChargeModelEnum.AUTO.getType()); + logs.add(logDo); + deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo())); + log.info("分配到自动充电任务 :{} ,充电设备编号是 :{}",logDo.getRobotNo(),logDo.getDeviceNo()); continue; } } @@ -294,9 +269,10 @@ public class AutoChargeServiceImpl implements AutoChargeService { //自动充电 BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(chargeConfig.getStartAutoCharge())); if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) { - log.setChargeModel(ChargeModelEnum.AUTO.getType()); - logs.add(log); - deviceInformationDOS.removeIf(v -> log.getDeviceNo().equals(v.getDeviceNo())); + logDo.setChargeModel(ChargeModelEnum.AUTO.getType()); + logs.add(logDo); + deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo())); + log.info("分配到自动充电任务 :{} ,充电设备编号是 :{}",logDo.getRobotNo(),logDo.getDeviceNo()); continue; } } @@ -305,9 +281,10 @@ public class AutoChargeServiceImpl implements AutoChargeService { //机会充电 BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(chargeConfig.getChanceChargeStart())); if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) { - log.setChargeModel(ChargeModelEnum.CHANCE.getType()); - logs.add(log); - deviceInformationDOS.removeIf(v -> log.getDeviceNo().equals(v.getDeviceNo())); + logDo.setChargeModel(ChargeModelEnum.CHANCE.getType()); + logs.add(logDo); + deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo())); + log.info("分配到机会充电任务 :{} ,充电设备编号是 :{}",logDo.getRobotNo(),logDo.getDeviceNo()); } } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/DistributeTasksServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/DistributeTasksServiceImpl.java index 8f8b047a0..2dd22cb4a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/DistributeTasksServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/DistributeTasksServiceImpl.java @@ -250,7 +250,7 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { Object chargeModelCache = redisUtil.get(chargeModelKey); Object poseCache = redisUtil.get(pose2dKey); RobotStatusDataPoseDTO dataPoseDTO = JSON.parseObject((String) poseCache, RobotStatusDataPoseDTO.class); - log.info("机器人编号:{} ,信息: {}", robot.getRobotNo(), JSON.toJSONString(dataPoseDTO)); + log.info("充电机器人编号:{} ,信息: {}", robot.getRobotNo(), JSON.toJSONString(dataPoseDTO)); if (ObjectUtil.isEmpty(commonConfigDO) || ObjectUtil.isEmpty(poseCache) || ObjectUtil.isEmpty(dataPoseDTO.getBat_soc())) { return; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskService.java index 69ce2a0b7..a1b55ac8e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskService.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.system.service.robot.job; import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskPPDistribution; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO; import java.util.List; @@ -21,5 +22,5 @@ public interface RobotCommonTaskService { * 发送充电任务给车机 * @param chargeList */ - void sendChargeTaskToRobot(List chargeList); + void sendChargeTaskToRobot(List chargeList,List robotChargeLogs); } 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 7deddf6d5..13cbfafcf 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 @@ -4,7 +4,6 @@ import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.mqtt.api.common.CommonApi; -import cn.iocoder.yudao.module.mqtt.api.task.RobotTaskApi; import cn.iocoder.yudao.module.mqtt.api.task.dto.Pose2ds; import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAcceptTaskDTO; import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAcceptTaskData; @@ -14,6 +13,7 @@ import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskPPDistribu import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskPathPlanningDTO; import cn.iocoder.yudao.module.system.dal.dataobject.actionlog.RobotTaskDetailActionLogDO; import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO; import cn.iocoder.yudao.module.system.dal.mysql.actionlog.RobotTaskDetailActionLogMapper; import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper; @@ -91,8 +91,11 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { @Value("${zn.robot_doing_action.scan}") private String scan; - @Value("${zn.robot_doing_action.move}") - private String move; + @Value("${zn.robot_doing_action.parking_space}") + private String parkingSpace; + + @Value("${zn.robot_doing_action.charge}") + private String charge; @Resource private WareHouseLocationMapper houseLocationMapper; @@ -289,8 +292,8 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { List logList = new ArrayList<>(); //移动 RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO(); - String msg = move + robotTaskDetailDO.getToLocationNo(); - RobotAcceptTaskData oneMoveAndFork = onlyMove(logOne, serial, v, robotTaskDetailDO, msg); + String msg = parkingSpace + robotTaskDetailDO.getToLocationNo(); + RobotAcceptTaskData oneMoveAndFork = onlyMove(logOne, serial, v, msg); list.add(oneMoveAndFork); logList.add(logOne); @@ -305,11 +308,9 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { * @param logOne * @param serial * @param v - * @param robotTaskDetailDO - * @return */ private RobotAcceptTaskData onlyMove(RobotTaskDetailActionLogDO logOne, Integer serial, TaskPPDistribution v, - RobotTaskDetailDO robotTaskDetailDO, String msg) { + String msg) { logOne.setCommandId(getId()); RobotAcceptTaskData robotAcceptTaskData = new RobotAcceptTaskData(); robotAcceptTaskData.setSerial(String.valueOf(serial)); @@ -322,7 +323,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { robotAcceptTaskData.setArg(arg); logOne.setActionMsg(msg); - setCommand(logOne, robotAcceptTaskData, robotTaskDetailDO); + setCommand(logOne, robotAcceptTaskData, v.getRobotNo()); return robotAcceptTaskData; } @@ -414,7 +415,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { robotAcceptTaskData.setArg(arg); logTwelve.setActionMsg(completeTask); - setCommand(logTwelve, robotAcceptTaskData, robotTaskDetailDO); + setCommand(logTwelve, robotAcceptTaskData, robotTaskDetailDO.getRobotNo()); return robotAcceptTaskData; } @@ -446,7 +447,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { robotAcceptTaskData.setArg(arg); logNight.setActionMsg(String.format("机器人正在前往%s%s", robotTaskDetailDO.getToLocationNo(), "放货")); - setCommand(logNight, robotAcceptTaskData, robotTaskDetailDO); + setCommand(logNight, robotAcceptTaskData, robotTaskDetailDO.getRobotNo()); return robotAcceptTaskData; } @@ -482,7 +483,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { RobotArgDTO arg = RobotArgDTO.builder().pose2d(pose2d).build(); robotAcceptTaskData.setArg(arg); logEight.setActionMsg(msg); - setCommand(logEight, robotAcceptTaskData, robotTaskDetailDO); + setCommand(logEight, robotAcceptTaskData, robotTaskDetailDO.getRobotNo()); return robotAcceptTaskData; } @@ -504,7 +505,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { serial++; robotAcceptTaskData.setCommand_type(CommandTypeEnum.MOVE_TO_PALLET_POSE.getType()); logSix.setActionMsg(msg); - setCommand(logSix, robotAcceptTaskData, robotTaskDetailDO); + setCommand(logSix, robotAcceptTaskData, robotTaskDetailDO.getRobotNo()); return robotAcceptTaskData; } @@ -526,7 +527,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { serial++; robotAcceptTaskData.setCommand_type(CommandTypeEnum.GET_PALLET_TOPIC.getType()); logFour.setActionMsg(getPalletTopic); - setCommand(logFour, robotAcceptTaskData, robotTaskDetailDO); + setCommand(logFour, robotAcceptTaskData, robotTaskDetailDO.getRobotNo()); return robotAcceptTaskData; } @@ -543,7 +544,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { robotAcceptTaskData.setArg(arg); logThree.setActionMsg(scan); - setCommand(logThree, robotAcceptTaskData, robotTaskDetailDO); + setCommand(logThree, robotAcceptTaskData, robotTaskDetailDO.getRobotNo()); return robotAcceptTaskData; } @@ -586,7 +587,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { robotAcceptTaskData.setArg(arg); logTwo.setActionMsg(msg); - setCommand(logTwo, robotAcceptTaskData, robotTaskDetailDO); + setCommand(logTwo, robotAcceptTaskData, robotTaskDetailDO.getRobotNo()); return robotAcceptTaskData; } @@ -614,13 +615,13 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { robotAcceptTaskData.setArg(arg); logOne.setActionMsg(String.format("机器人正在前往%s%s", robotTaskDetailDO.getFromLocationNo(), "取货")); - setCommand(logOne, robotAcceptTaskData, robotTaskDetailDO); + setCommand(logOne, robotAcceptTaskData, robotTaskDetailDO.getRobotNo()); return robotAcceptTaskData; } - public void setCommand(RobotTaskDetailActionLogDO logOne, RobotAcceptTaskData robotAcceptTaskData, RobotTaskDetailDO robotTaskDetailDO) { + public void setCommand(RobotTaskDetailActionLogDO logOne, RobotAcceptTaskData robotAcceptTaskData, String robotNo) { logOne.setCommandType(robotAcceptTaskData.getCommand_type()); - logOne.setRobotNo(robotTaskDetailDO.getRobotNo()); + logOne.setRobotNo(robotNo); String str = JSON.toJSONString(robotAcceptTaskData); if (str.length() > 210) { logOne.setCommandMsg(str.substring(0, 200)); @@ -633,13 +634,82 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { /** * 充电任务 * - * @param chargeList */ @Override @Async(NOTIFY_THREAD_POOL_TASK_EXECUTOR) - public void sendChargeTaskToRobot(List chargeList) { + public void sendChargeTaskToRobot(List chargeList,List robotChargeLogs) { + if (ObjectUtil.isEmpty(chargeList) || ObjectUtil.isEmpty(robotChargeLogs)) { + return; + } + Map chargeMap = + robotChargeLogs.stream().collect(Collectors.toMap(v -> v.getId(), Function.identity())); + + List logList = new ArrayList<>(); + for (TaskPPDistribution v : chargeList) { + RobotChargeLogDO chargeLogDO = chargeMap.get(v.getId()); + RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO(); + robotTask.setOrder_id(v.getId().toString()); + + String mac = robotInformationService.getMacByRobotNo(v.getRobotNo()); + robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac); + robotTask.setOrder_type(RobotTaksOrderTypeEnum.TASK.getType()); + + Integer serial = 1; + + List list = new ArrayList<>(); + //移动 + RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO(); + String msg = charge + chargeLogDO.getDeviceNo(); + RobotAcceptTaskData oneMoveAndFork = onlyMove(logOne, serial, v, msg); + + list.add(oneMoveAndFork); + robotTask.setData(list); + logList.add(logOne); + + log.info("发送给车机下发--充电任务 :{}", JSON.toJSONString(robotTask)); + commonApi.commonMethod(robotTask, robotTask.getTopic()); + } + + //todo 充电后往 task_detail更新下 to_location_no + // todo 后续改为放缓存,等车机上报了再插入 + taskDetailActionLogMapper.insertBatch(logList); } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningService.java index 9358c0137..1cc9a3c30 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningService.java @@ -1,5 +1,11 @@ package cn.iocoder.yudao.module.system.service.robot.pathplanning; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO; + +import java.util.List; + public interface RobotPathPlanningService { void sendTaskToPP(); + + void sendChargeTaskToPP(List logs); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningServiceImpl.java index e48c9b1aa..61f981c35 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningServiceImpl.java @@ -16,6 +16,7 @@ import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant; import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant; import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO; import cn.iocoder.yudao.module.system.dal.mysql.config.CommonConfigMapper; @@ -132,6 +133,13 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService { } + @Override + public void sendChargeTaskToPP(List logs) { + for (RobotChargeLogDO robotChargeLogDO : logs) { + + } + } + @Transactional(rollbackFor = Exception.class) public void distributeTasksToPP(List robots, List taskDetailDOS) { //目前一个点位/线库, 只能派一辆车去做 @@ -168,7 +176,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService { for (RobotTaskDetailDO taskDetailDO : taskDetailDOS) { TaskToPathPlanningDTO pathPlanning = TaskToPathPlanningDTO.builder() - .id(taskDetailDO.getId()) + .id(String.valueOf(taskDetailDO.getId())) .type(TaskTypeEnum.TASK.getType()) .priority(taskDetailDO.getPriority()) .createTime(taskDetailDO.getCreateTime()) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml index ac4e4ac5c..6e5b597e8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml @@ -243,4 +243,5 @@ zn: complete_task: 机器人完成任务 get_pallet_topic: 机器人扫描托盘位置 scan: 机器人正在扫描 - move: 机器人正在前往停车位 + parking_space: 机器人正在前往停车位 + charge: 机器人正在前往充电位 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskMapper.xml index debdfaacf..69c3c054b 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskMapper.xml @@ -287,6 +287,46 @@ order by t1.create_time desc + +