From 7e37f213b5047297f3b095874b8f8d435fd15596 Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Sat, 22 Mar 2025 17:49:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E8=81=94=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../path/dto/PathPosedsDataArgPosedDTO.java | 2 +- .../module/system/api/path/PathApiImpl.java | 3 --- .../api/robot/RobotReactiveStatusApiImpl.java | 14 ++-------- .../system/api/robot/RobotStatusApiImpl.java | 13 ++++++---- .../api/robot/RobotTaskStatusApiImpl.java | 16 ++++-------- .../robot/RobotTaskChcheConstant.java | 3 +++ .../constant/robot/RobotTopicConstant.java | 4 +-- .../vo/DeviceInformationPageReqVO.java | 3 +++ .../vo/DeviceInformationRespVO.java | 4 +++ .../vo/DeviceInformationSaveReqVO.java | 3 +++ .../admin/robot/task/TaskAssignDTO.java | 26 +++++++++++++++++++ .../information/DeviceInformationDO.java | 5 ++++ .../log/RobotTaskDetailActionLogMapper.java | 8 ++++++ .../robot/actionlog/ActionStatusEnum.java | 21 +++++++++++++++ .../DeviceInformationServiceImpl.java | 15 ++++++++--- .../service/path/PathPlanningServiceImpl.java | 9 ++++--- .../robot/RobotInformationServiceImpl.java | 16 +++++++++--- .../service/robot/RobotTaskServiceImpl.java | 14 ++++++++++ .../RobotPathPlanningServiceImpl.java | 7 ++++- .../robot/RobotTaskDetailActionLogMapper.xml | 9 +++++++ .../mapper/robot/RobotWarnMsgMapper.xml | 4 ++- 21 files changed, 151 insertions(+), 48 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/actionlog/ActionStatusEnum.java diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDataArgPosedDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDataArgPosedDTO.java index c24e91545..b9420ab2e 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDataArgPosedDTO.java +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDataArgPosedDTO.java @@ -12,7 +12,7 @@ import lombok.NoArgsConstructor; @AllArgsConstructor public class PathPosedsDataArgPosedDTO { @Schema(description = "唯一key,导航下发给RCS应用", example = "20863") - private Integer poseId; + private String poseId; private Double x; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApiImpl.java index 089c4469f..3798f5154 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApiImpl.java @@ -71,9 +71,6 @@ public class PathApiImpl implements PathApi { taskExecutor.execute(() -> { TenantContextHolder.setTenantId(1L); taskService.assignTasks(message); - if (ObjectUtil.isEmpty(message)) { - return; - } // taskService.ppDistributionTask(message); 废弃了 }); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotReactiveStatusApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotReactiveStatusApiImpl.java index 77182d170..a69a76792 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotReactiveStatusApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotReactiveStatusApiImpl.java @@ -37,9 +37,6 @@ public class RobotReactiveStatusApiImpl implements RobotReactiveStatusApi { @Resource private RedisUtil redisUtil; - @Value("${zn.robot_position_cache_time:600}") - private Long robotPositionCacheTime; - @Value("${zn.robot_error_level_time:30}") private Long robotErrorLevelTime; @@ -59,15 +56,8 @@ public class RobotReactiveStatusApiImpl implements RobotReactiveStatusApi { public void robotReactiveStatus(String message) { TenantContextHolder.setTenantId(1L); RobotReactiveStatusDTO data = JSON.parseObject(message, RobotReactiveStatusDTO.class); - String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT_SOC + data.getMac(); - Object object = redisUtil.get(pose2dKey); - RobotStatusDataPoseDTO robotStatusDataPoseDTO = JSONUtil.toBean((String) object, RobotStatusDataPoseDTO.class); - - if (ObjectUtil.isNotEmpty(data.getFloorZone())) { - robotStatusDataPoseDTO.setFloor(data.getFloorZone().getFloor()); - robotStatusDataPoseDTO.setArea(data.getFloorZone().getArea()); - } - redisUtil.set(pose2dKey, JSON.toJSONString(robotStatusDataPoseDTO), robotPositionCacheTime); + String floorAreaKey = RobotTaskChcheConstant.ROBOT_FLOOR_AREA + data.getMac(); + redisUtil.set(floorAreaKey, JSON.toJSONString(data.getFloorZone())); //机器人异常等级 if (ObjectUtil.isEmpty(data.getErrCode())) { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApiImpl.java index 433538879..357be6164 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApiImpl.java @@ -4,10 +4,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; import cn.iocoder.yudao.module.mqtt.api.path.PathPlanningApi; -import cn.iocoder.yudao.module.system.api.robot.dto.RobotPoseStatusDTO; -import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDTO; -import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataErrorDTO; -import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO; +import cn.iocoder.yudao.module.system.api.robot.dto.*; import cn.iocoder.yudao.module.system.api.robot.vo.RobotInformationVO; import cn.iocoder.yudao.module.system.config.ratelimiter.SystemRateLimiter; import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant; @@ -80,6 +77,9 @@ public class RobotStatusApiImpl implements RobotStatusApi { log.info("机器人上报的信息不全 :{}", JSON.toJSONString(robotStatusDataDTO)); return; } + String floorAreaKey = RobotTaskChcheConstant.ROBOT_FLOOR_AREA + robotStatusDataDTO.getMac(); + Object floorAreaObject = redisUtil.get(floorAreaKey); + FloorZoneDTO floorZoneDTO = JSONUtil.toBean((String) floorAreaObject, FloorZoneDTO.class); String robotNo = robotInformationService.getRobotNoByMac(robotStatusDataDTO.getMac()); String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT_SOC + robotStatusDataDTO.getMac(); Object object = redisUtil.get(pose2dKey); @@ -91,6 +91,8 @@ public class RobotStatusApiImpl implements RobotStatusApi { robotStatusDataPoseDTO.setYaw(robotStatusDataDTO.getPose2d().getYaw()); } robotStatusDataPoseDTO.setRobotNo(robotNo); + robotStatusDataPoseDTO.setFloor(floorZoneDTO.getFloor()); + robotStatusDataPoseDTO.setArea(floorZoneDTO.getArea()); redisUtil.set(pose2dKey, JSON.toJSONString(robotStatusDataPoseDTO), robotPositionCacheTime); //机器人身上是否有货 @@ -106,8 +108,9 @@ public class RobotStatusApiImpl implements RobotStatusApi { robotInformationVO = robotInformationService.getRobotByRedis(robotStatusDataDTO.getMac()); } robotInformationVO.setPose2d(robotStatusDataPoseDTO); + // 合并请求 - 这里接受到的数据都丢给 RequestProcessor - 再整合数据通过WebSocket丢给前端 - processor.handleRequest(robotStatusDataPoseDTO.getFloor() + "_" + robotStatusDataPoseDTO.getArea(), + processor.handleRequest(floorZoneDTO.getFloor() + "_" + floorZoneDTO.getArea(), robotStatusDataDTO.getMac(), JSONUtil.toJsonStr(robotInformationVO)); sendToPP(robotStatusDataPoseDTO); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java index 5b84969a1..82cb07491 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java @@ -23,6 +23,7 @@ import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum; import cn.iocoder.yudao.module.system.enums.path.PathIsReachEnum; import cn.iocoder.yudao.module.system.enums.path.PathTaskTypeEnum; import cn.iocoder.yudao.module.system.enums.robot.*; +import cn.iocoder.yudao.module.system.enums.robot.actionlog.ActionStatusEnum; import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeTaskStatusEnum; import cn.iocoder.yudao.module.system.enums.robot.task.RobotStatusCodeEnum; import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaskStageEnum; @@ -48,8 +49,6 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; -import static com.baomidou.mybatisplus.core.toolkit.IdWorker.getId; - @Slf4j @RestController // 提供 RESTful API 接口,给 Feign 调用 @Validated @@ -89,9 +88,6 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { @Resource private CommonApi commonApi; - @Resource - public WebSocketSenderApi webSocketSenderApi; - @Resource private RobotTaskDetailService taskDetailService; @@ -101,18 +97,12 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { @Resource private RobotWarnMsgService warnMsgService; - @Resource - private DeviceInformationMapper deviceInformationMapper; - @Resource private MoveToWaitService moveToWaitService; @Resource private PathPlanningService pathPlanningService; - @Resource - private RobotTaskService taskService; - @Resource private DeviceInformationService deviceInformationService; @@ -175,6 +165,8 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { sendStartDoActionToPP(robotCompleteTaskDTO.getCommandStatus(), robotCompleteTaskDTO.getMac(), String.valueOf(robotCompleteTaskDTO.getOrderId())); + + taskDetailActionLogMapper.updateActionStatus(robotCompleteTaskDTO.getOrderId(), ActionStatusEnum.DOING.getType()); } /** @@ -225,6 +217,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { .build(); chargeLogMapper.updateById(build); } + taskDetailActionLogMapper.updateActionStatus(robotCompleteTaskDTO.getOrderId(), ActionStatusEnum.DONE.getType()); } @@ -344,6 +337,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { RobotTaskDetailDO detailDO = new RobotTaskDetailDO(); detailDO.setId(robotCompleteTaskDTO.getOrderId()); detailDO.setEndTime(LocalDateTime.now()); + detailDO.setTaskStage(RobotTaskStageEnum.DONE.getType()); detailDO.setTaskStatus(RobotTaskDetailStatusEnum.DONE.getType()); robotTaskDetailMapper.updateRobotDetailById(detailDO); //更新任务状态 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTaskChcheConstant.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTaskChcheConstant.java index ddc5feefd..3bd6671a8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTaskChcheConstant.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTaskChcheConstant.java @@ -11,6 +11,9 @@ public class RobotTaskChcheConstant { //机器人点位和电量 (拼接的是mac地址) public static String ROBOT_INFORMATION_POSE_BAT_SOC = "robot:information:pose:bat:soc"; + //机器人楼层和区域 (拼接的是mac地址) + public static String ROBOT_FLOOR_AREA = "robot:floor:area"; + //机器人mac地址和机器人编号映射(通过mac地址。查询机器人编号) (拼接的是mac地址) public static String ROBOT_GET_ROBOTNO_BY_MAC = "robot:information:getRobotNo:ByMac"; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTopicConstant.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTopicConstant.java index f351bf16d..d5c5a970c 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTopicConstant.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTopicConstant.java @@ -11,7 +11,7 @@ public class RobotTopicConstant { /** * 下发让车子移动 */ - public static String ROBOT_TASK_MOVE_TOPIC = "ROBOT_TASK_MOVE"; + public static String ROBOT_TASK_MOVE_TOPIC = "ROBOT_TASK_MOVE_"; /** *RCS发送心跳给车机 */ @@ -19,5 +19,5 @@ public class RobotTopicConstant { /** * 让机器人同步告警码值映射的topic (拼接mac地址) */ - public static String UPDATE_ERROR_TOPIC = "UPDATE_ERROR"; + public static String UPDATE_ERROR_TOPIC = "UPDATE_ERROR_"; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java index b7faa7ef4..d64fd51e9 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java @@ -86,4 +86,7 @@ public class DeviceInformationPageReqVO extends PageParam { @Schema(description = "端口") private String devicePort; + @Schema(description = "最后使用者") + private String lastUser; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java index ff5e8806b..265291dd3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java @@ -116,4 +116,8 @@ public class DeviceInformationRespVO { @ExcelProperty("端口") private String devicePort; + @Schema(description = "最后使用者") + @ExcelProperty("最后使用者") + private String lastUser; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java index 252a16dc6..523268ad6 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java @@ -82,4 +82,7 @@ public class DeviceInformationSaveReqVO { @Schema(description = "端口") private String devicePort; + @Schema(description = "最后使用者") + private String lastUser; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/task/TaskAssignDTO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/task/TaskAssignDTO.java index 238c50d32..f5be27fd4 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/task/TaskAssignDTO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/task/TaskAssignDTO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.controller.admin.robot.task; +import cn.iocoder.yudao.module.system.enums.path.PathTaskTypeEnum; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; @@ -22,4 +23,29 @@ public class TaskAssignDTO { @Schema(description = "AGV编号") private String robotNo; + + /** + * 获取机器人要做的任务描述 + * @return + */ + public String getRobotActionMsg() { + if (PathTaskTypeEnum.TAKE_RELEASE.getType().equals(orderType)) { + return "机器人分配到取放货任务"; + }if (PathTaskTypeEnum.CHARGE.getType().equals(orderType)) { + return "机器人分配到充电任务"; + }if (PathTaskTypeEnum.MOVE.getType().equals(orderType)) { + return "机器人分配到移动任务"; + }if (PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(orderType)) { + return "机器人分配移动到等待点的任务"; + }if (PathTaskTypeEnum.MOVE_TO_WAIT_STOP.getType().equals(orderType)) { + return "机器人分配停车任务"; + }if (PathTaskTypeEnum.TAKE.getType().equals(orderType)) { + return "机器人分配到仅取货任务"; + }if (PathTaskTypeEnum.RELEASE.getType().equals(orderType)) { + return "机器人分配到仅放货任务"; + }if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(orderType)) { + return "机器人分配到自动充电任务"; + } + return "未知任务"; + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java index bd7322788..df185bc94 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java @@ -130,4 +130,9 @@ public class DeviceInformationDO extends BaseDO { */ private String devicePort; + /** + * 最后使用者 + */ + private String lastUser; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/log/RobotTaskDetailActionLogMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/log/RobotTaskDetailActionLogMapper.java index 13572d30c..bb48170ff 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/log/RobotTaskDetailActionLogMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/log/RobotTaskDetailActionLogMapper.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.system.controller.admin.log.vo.RobotTaskDetailActionLogPageReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.log.RobotTaskDetailActionLogDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 车辆动作记录 Mapper @@ -27,4 +28,11 @@ public interface RobotTaskDetailActionLogMapper extends BaseMapperX + + update + robot_task_detail_action_log + set + action_status = #{actionStatus} + where + task_detail_id = #{taskDetailId} + and command_id = '-1' + \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotWarnMsgMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotWarnMsgMapper.xml index c1708cdb0..8021c8e8e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotWarnMsgMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotWarnMsgMapper.xml @@ -13,8 +13,10 @@ update robot_warn_msg set - read_status = '1' + read_status = '1', + read_time = now() where read_status = '0' + LIMIT 1000 \ No newline at end of file