From df8c8b28c6e13361447b036430ba4cafa5752d2e Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Wed, 12 Mar 2025 15:53:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/path/task/TaskPathPlanningDTO.java | 17 + .../api/path/task/TaskToPathPlanningDTO.java | 4 +- .../api/task/dto/RobotAssignTaskArgDTO.java | 8 +- .../mqtt/api/task/dto/RobotAssignTaskDTO.java | 5 +- .../api/task/dto/RobotAssignTaskDataDTO.java | 2 +- .../module/mqtt/enums/path/TaskTypeEnum.java | 6 +- .../system/api/robot/RobotTaskStatusApi.java | 2 +- .../api/robot/dto/RobotCommandStateDTO.java | 8 +- .../api/robot/dto/RobotCompleteTaskDTO.java | 10 +- .../system/enums/ErrorCodeConstants.java | 2 + .../api/robot/RobotTaskStatusApiImpl.java | 313 ++++++++++++------ .../path/PathPlanningTopicConstant.java | 2 +- .../robot/RobotTaskChcheConstant.java | 4 +- .../admin/config/dto/TaskOrderConfigDTO.java | 8 +- .../vo/PositionMapItemPageReqVO.java | 3 + .../positionmap/vo/PositionMapItemRespVO.java | 4 + .../vo/PositionMapItemSaveReqVO.java | 3 + .../robot/vo/RobotTaskDetailPageReqVO.java | 2 +- .../admin/robot/vo/RobotTaskDetailRespVO.java | 4 +- .../robot/vo/RobotTaskDetailSaveReqVO.java | 2 +- .../admin/wait/MoveToWaitController.java | 97 ++++++ .../admin/wait/vo/MoveToWaitPageReqVO.java | 31 ++ .../admin/wait/vo/MoveToWaitRespVO.java | 35 ++ .../admin/wait/vo/MoveToWaitSaveReqVO.java | 24 ++ .../positionmap/PositionMapItemDO.java | 4 + .../dataobject/robot/RobotTaskDetailDO.java | 2 +- .../dal/dataobject/wait/MoveToWaitDO.java | 43 +++ .../dal/mysql/wait/MoveToWaitMapper.java | 29 ++ .../system/enums/path/PathIsReachEnum.java | 18 + .../system/enums/path/PathTaskType.java | 4 + .../system/enums/robot/CommandTypeEnum.java | 16 +- .../robot/task/RobotCommandTypeEnum.java | 2 + .../robot/task/RobotTaksOrderTypeEnum.java | 12 +- .../enums/robot/task/RobotTaskStageEnum.java | 22 ++ .../system/enums/wait/WaitStatusEnum.java | 22 ++ .../strategy/HouseLocationStrategyImpl.java | 6 +- .../service/path/PathPlanningService.java | 9 + .../service/path/PathPlanningServiceImpl.java | 20 +- .../service/robot/RobotTaskServiceImpl.java | 118 ++++--- .../RobotPathPlanningServiceImpl.java | 16 +- .../system/service/tool/ToolsServiceImpl.java | 3 - .../service/wait/MoveToWaitService.java | 56 ++++ .../service/wait/MoveToWaitServiceImpl.java | 82 +++++ .../src/main/resources/application-local.yaml | 6 +- .../mapper/wait/MoveToWaitMapper.xml | 12 + 45 files changed, 868 insertions(+), 230 deletions(-) create mode 100644 yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/task/TaskPathPlanningDTO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/wait/MoveToWaitController.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/wait/vo/MoveToWaitPageReqVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/wait/vo/MoveToWaitRespVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/wait/vo/MoveToWaitSaveReqVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/wait/MoveToWaitDO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/wait/MoveToWaitMapper.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/path/PathIsReachEnum.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotTaskStageEnum.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/wait/WaitStatusEnum.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/wait/MoveToWaitService.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/wait/MoveToWaitServiceImpl.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/wait/MoveToWaitMapper.xml diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/task/TaskPathPlanningDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/task/TaskPathPlanningDTO.java new file mode 100644 index 000000000..06f9ba6e3 --- /dev/null +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/task/TaskPathPlanningDTO.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.mqtt.api.path.task; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TaskPathPlanningDTO { + private String orderId; + private String robotNo; + private String behaviorId; + private String isReach; +} 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 a10f71729..e8066d72d 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,10 +19,10 @@ import java.util.List; public class TaskToPathPlanningDTO { @Schema(description = "robot_task_detail/robot_charge_log 的 id") - private String id; + private String orderId; @Schema(description = "任务类型(TASK:robot_task的任务、CHARGE:充电任务)") - private String type; + private String orderType; //线库: LINE + 线库号 //普通库位: POINT + 点位号 diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskArgDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskArgDTO.java index 9d8ed7fa8..b61c22291 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskArgDTO.java +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskArgDTO.java @@ -3,15 +3,19 @@ package cn.iocoder.yudao.module.mqtt.api.task.dto; import lombok.Builder; import lombok.Data; +import java.util.List; + @Data @Builder public class RobotAssignTaskArgDTO { //检测托盘时需要抬叉的高度,现在是需要,以后不用了 - private Double check_pallet_height; +// private Double check_pallet_height; //取货高度 private Double height; //整型 取第几层货 private Double level; //叉起货需要在原来高度基础上偏移的高度 - private Double offset_height; + private Double offsetHeight; + + private List pose2ds; } diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskDTO.java index e91d9ed97..de9ede89a 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskDTO.java +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskDTO.java @@ -12,7 +12,8 @@ import java.util.List; @Builder public class RobotAssignTaskDTO { private String topic; - private String order_id; - private String order_type; + private String orderId; + private String orderType; + private String executionType; private List data; } diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskDataDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskDataDTO.java index 9bf995ea6..81ef6348b 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskDataDTO.java +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskDataDTO.java @@ -6,6 +6,6 @@ import java.util.List; @Data public class RobotAssignTaskDataDTO { - private String command_type; + private String commandType; private List arg; } diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/enums/path/TaskTypeEnum.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/enums/path/TaskTypeEnum.java index f8ee2a379..32551343a 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/enums/path/TaskTypeEnum.java +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/enums/path/TaskTypeEnum.java @@ -1,11 +1,14 @@ +/* package cn.iocoder.yudao.module.mqtt.enums.path; import lombok.AllArgsConstructor; import lombok.Getter; +*/ /** *TaskToPathPlanningDTO的type - */ + *//* + @Getter @AllArgsConstructor public enum TaskTypeEnum { @@ -15,3 +18,4 @@ public enum TaskTypeEnum { private final String type; } +*/ diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApi.java index 6ae66e039..a8de525e4 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApi.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApi.java @@ -18,5 +18,5 @@ public interface RobotTaskStatusApi { @PostMapping(PREFIX + "/updateStatus") @Operation(summary = "机器人完成任务上报") - CommonResult robotDoneTask(@RequestBody RobotCompleteTaskDTO robotCompleteTaskDTO); + void robotDoneTask(@RequestBody RobotCompleteTaskDTO robotCompleteTaskDTO); } diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotCommandStateDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotCommandStateDTO.java index 9d405007f..25c9caf2a 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotCommandStateDTO.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotCommandStateDTO.java @@ -7,19 +7,19 @@ public class RobotCommandStateDTO { /** * 命令id */ - private String command_id; +// private String command_id; /** * 命令类型 */ - private String command_type; + private String commandType; /** * 执行状态 */ - private String execution_state; + private Integer executionState; /** * 响应的状态码 */ - private String status_code; + private String statusCode; /** * 失败时的错误原因 */ diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotCompleteTaskDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotCompleteTaskDTO.java index 2ade49fff..a9952dce4 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotCompleteTaskDTO.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotCompleteTaskDTO.java @@ -13,19 +13,19 @@ public class RobotCompleteTaskDTO { /** * robot_task_detail 表id */ - private Long order_id; + private Long orderId; /** * 任务类型,暂时未定义 */ - private String order_type; + private String orderType; /** * 执行状态 */ - private Integer execution_state; + private Integer executionState; /** * 响应的状态码 */ - private String status_code; + private String statusCode; /** * 失败时的错误原因 */ @@ -37,5 +37,5 @@ public class RobotCompleteTaskDTO { /** * 子任务 */ - private List command_state; + private RobotCommandStateDTO commandStatus; } diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index c482d1cc1..47532b60f 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java @@ -241,5 +241,7 @@ public interface ErrorCodeConstants { ErrorCode TASK_CYCLE_NOT_EXISTS = new ErrorCode(1_002_046_001, "循环任务点位不存在"); // ========== 用户操作记录 1_002_047_001 ========== ErrorCode OPERATE_LOG_NOT_EXISTS = new ErrorCode(1_002_047_001, "用户操作记录不存在"); + // ========== 车辆前往等待点记录 1_002_048_001 ========== + ErrorCode MOVE_TO_WAIT_NOT_EXISTS = new ErrorCode(1_002_048_001, "车辆前往等待点记录不存在"); } 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 5f83c4322..4c81fc666 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 @@ -21,10 +21,8 @@ import cn.iocoder.yudao.module.system.constant.webSocket.WebSocketConstant; import cn.iocoder.yudao.module.system.dal.dataobject.actionlog.RobotTaskDetailActionLogDO; import cn.iocoder.yudao.module.system.dal.dataobject.config.CommonConfigDO; 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.RobotTaskDO; -import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO; -import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.*; import cn.iocoder.yudao.module.system.dal.mysql.actionlog.RobotTaskDetailActionLogMapper; import cn.iocoder.yudao.module.system.dal.mysql.cycle.TaskCycleMapper; import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper; @@ -32,13 +30,18 @@ import cn.iocoder.yudao.module.system.dal.mysql.information.DeviceInformationMap import cn.iocoder.yudao.module.system.dal.mysql.robot.*; import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum; import cn.iocoder.yudao.module.system.enums.device.DeviceUseStatusEnum; +import cn.iocoder.yudao.module.system.enums.path.PathIsReachEnum; +import cn.iocoder.yudao.module.system.enums.path.PathTaskType; import cn.iocoder.yudao.module.system.enums.robot.*; 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.RobotTaksOrderTypeEnum; +import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaskStageEnum; +import cn.iocoder.yudao.module.system.enums.wait.WaitStatusEnum; +import cn.iocoder.yudao.module.system.service.path.PathPlanningService; import cn.iocoder.yudao.module.system.service.robot.RobotInformationService; import cn.iocoder.yudao.module.system.service.robot.RobotTaskDetailService; import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService; +import cn.iocoder.yudao.module.system.service.wait.MoveToWaitService; import cn.iocoder.yudao.module.system.util.redis.RedisUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -112,7 +115,13 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { @Resource private DeviceInformationMapper deviceInformationMapper; - @Value("${zn.robot_doing_action.doing_action_cache_time:3*60*60}") + @Resource + private MoveToWaitService moveToWaitService; + + @Resource + private PathPlanningService pathPlanningService; + + @Value("${zn.robot_doing_action.doing_action_cache_time:2*24*60*60}") private Long doingActionCacheTime; @Transactional(rollbackFor = Exception.class) @@ -121,33 +130,103 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { TenantContextHolder.setTenantId(1L); String robotDoingActionKey = RobotTaskChcheConstant.ROBOT_QUERY_DOING_ACTION + robotCompleteTaskDTO.getMac(); - if (!RobotStatusCodeEnum.SUCCESS.getType().equals(robotCompleteTaskDTO.getStatus_code())) { + if (!RobotStatusCodeEnum.SUCCESS.getType().equals(robotCompleteTaskDTO.getStatusCode())) { log.info("车机上报异常 :{}", JSON.toJSONString(robotCompleteTaskDTO)); - closeTask(robotCompleteTaskDTO); + closeTask(robotCompleteTaskDTO);//todo 取不了和放不了的异常 redisUtil.del(robotDoingActionKey); return; } - if (RobotExecutionStateConstant.UN_DO.equals(robotCompleteTaskDTO.getExecution_state())) { + if (RobotExecutionStateConstant.UN_DO.equals(robotCompleteTaskDTO.getExecutionState()) + || RobotExecutionStateConstant.STOP.equals(robotCompleteTaskDTO.getExecutionState()) + || RobotExecutionStateConstant.CLOSE.equals(robotCompleteTaskDTO.getExecutionState())) { + log.info("任务未开始/暂停/取消 :{}", robotCompleteTaskDTO.getOrderId()); return; - } - - if (RobotExecutionStateConstant.DOING.equals(robotCompleteTaskDTO.getExecution_state()) - && RobotTaksOrderTypeEnum.TASK.getType().equals(robotCompleteTaskDTO.getOrder_type())) { - taskDoing(robotCompleteTaskDTO, robotDoingActionKey); - - } else if (RobotExecutionStateConstant.DONE.equals(robotCompleteTaskDTO.getExecution_state()) - && RobotTaksOrderTypeEnum.TASK.getType().equals(robotCompleteTaskDTO.getOrder_type())) { - taskDone(robotCompleteTaskDTO); + } else if (RobotExecutionStateConstant.DONE.equals(robotCompleteTaskDTO.getExecutionState())) { + robotTaskDone(robotCompleteTaskDTO); redisUtil.del(robotDoingActionKey); - } else if (RobotExecutionStateConstant.DOING.equals(robotCompleteTaskDTO.getExecution_state()) - && RobotTaksOrderTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrder_type())) { + } else if (RobotExecutionStateConstant.DOING.equals(robotCompleteTaskDTO.getExecutionState())) { + robotTaskDoing(robotCompleteTaskDTO, robotDoingActionKey); + } + } + + /** + * @param robotCompleteTaskDTO + */ + private void robotTaskDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey) { + if (PathTaskType.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) { chargeDoing(robotCompleteTaskDTO, robotDoingActionKey); - - } else if (RobotExecutionStateConstant.DONE.equals(robotCompleteTaskDTO.getExecution_state()) - && RobotTaksOrderTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrder_type())) { - chargeDone(robotCompleteTaskDTO, robotDoingActionKey); + } else if (PathTaskType.MOVE_TO_WAIT.getType().equals(robotCompleteTaskDTO.getOrderType())) { + RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO(); + logOne.setActionMsg("车辆正在前往等待点"); + String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); + logOne.setRobotNo(robotNo); + logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId()); + taskDetailActionLogMapper.insert(logOne); + redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime); + moveToWaitService.setMoveToWaitDoing(robotCompleteTaskDTO.getOrderId(), WaitStatusEnum.GO_TO_WAIT.getType()); + } else { + taskDoing(robotCompleteTaskDTO, robotDoingActionKey); } + + sendStartDoActionToPP(robotCompleteTaskDTO.getCommandStatus(), robotCompleteTaskDTO.getMac(), + String.valueOf(robotCompleteTaskDTO.getOrderId())); + } + + /** + * 告诉PP开始作业 + * + * @param commandStatus + * @param mac + * @param orderId + */ + public void sendStartDoActionToPP(RobotCommandStateDTO commandStatus, String mac, String orderId) { + if (ObjectUtil.isNotEmpty(commandStatus) && RobotExecutionStateConstant.DOING.equals(commandStatus.getExecutionState()) + && !CommandTypeEnum.MOVE_POSES.getType().equals(commandStatus.getCommandType())) { + String robotNo = robotInformationService.getRobotNoByMac(mac); + pathPlanningService.updateBehavior(orderId, robotNo + , "", PathIsReachEnum.START_WORK.getType()); + } + } + + /** + * 机器人完成任务 + * + * @param robotCompleteTaskDTO + */ + private void robotTaskDone(RobotCompleteTaskDTO robotCompleteTaskDTO) { + //todo 后面考虑下充电,车机目前对充电的逻辑未定义 + if (PathTaskType.MOVE.getType().equals(robotCompleteTaskDTO.getOrderType()) + || PathTaskType.MOVE_TO_WAIT_STOP.getType().equals(robotCompleteTaskDTO.getOrderType()) + || PathTaskType.TAKE.getType().equals(robotCompleteTaskDTO.getOrderType()) + || PathTaskType.RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) { + taskDone(robotCompleteTaskDTO); + + } else if (PathTaskType.TAKE_RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) { + RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId()); + if (RobotTaskStageEnum.TAKEING.getType().equals(robotTaskDetailDO.getTaskStage())) { + pathPlanningService.updateBehavior(String.valueOf(robotCompleteTaskDTO.getOrderId()), robotTaskDetailDO.getRobotNo() + , "", PathIsReachEnum.END_WORK.getType()); + } else if (RobotTaskStageEnum.RELEASEING.getType().equals(robotTaskDetailDO.getTaskStage())) { + taskDone(robotCompleteTaskDTO); + } + } + } + + + /** + * 通知PP关闭任务 + * + * @param robotCompleteTaskDTO + */ + public void PPCloseOrder(RobotCompleteTaskDTO robotCompleteTaskDTO) { + String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); + RobotClosePathPlantingDTO closePathPlanting = RobotClosePathPlantingDTO.builder() + .robotNo(robotNo) + .id(robotCompleteTaskDTO.getOrderId().toString()) + .build(); + commonApi.commonMethod(closePathPlanting, PathPlanningTopicConstant.KILL_TASK); + log.info("车机上报异常, 通知PP把任务取消 :{}", robotCompleteTaskDTO.getOrderId()); } /** @@ -157,16 +236,10 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { */ @Transactional(rollbackFor = Exception.class) public void closeTask(RobotCompleteTaskDTO robotCompleteTaskDTO) { - String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); - RobotClosePathPlantingDTO closePathPlanting = RobotClosePathPlantingDTO.builder() - .robotNo(robotNo) - .id(robotCompleteTaskDTO.getOrder_id().toString()) - .build(); - commonApi.commonMethod(closePathPlanting, PathPlanningTopicConstant.KILL_TASK); - log.info("车机上报异常, 通知PP把任务取消 :{}", robotCompleteTaskDTO.getOrder_id()); + PPCloseOrder(robotCompleteTaskDTO); - if (RobotTaksOrderTypeEnum.TASK.getType().equals(robotCompleteTaskDTO.getOrder_type())) { - RobotTaskDetailDO robotTaskDetailDO = closeTaskDetail(robotCompleteTaskDTO.getOrder_id()); + /*if (RobotTaksOrderTypeEnum.TASK.getType().equals(robotCompleteTaskDTO.getOrderType())) { + RobotTaskDetailDO robotTaskDetailDO = closeTaskDetail(robotCompleteTaskDTO.getOrderId()); List locationIds = new ArrayList<>(); if (ObjectUtil.isNotEmpty(robotTaskDetailDO.getFromLocationId())) { locationIds.add(robotTaskDetailDO.getFromLocationId()); @@ -179,22 +252,22 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { , LocationLockEnum.YES.getType()); } - } else if (RobotTaksOrderTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrder_type())) { + } else if (RobotTaksOrderTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) { RobotChargeLogDO robotChargeLogDO = chargeLogMapper.selectOne(new LambdaQueryWrapper() - .eq(RobotChargeLogDO::getId, robotCompleteTaskDTO.getOrder_id())); + .eq(RobotChargeLogDO::getId, robotCompleteTaskDTO.getOrderId())); robotChargeLogDO.setTaskStatus(ChargeTaskStatusEnum.ABNORMAL.getType()); chargeLogMapper.updateById(robotChargeLogDO); if (ObjectUtil.isNotEmpty(robotChargeLogDO.getTaskDetailId())) { - closeTaskDetail(robotCompleteTaskDTO.getOrder_id()); + closeTaskDetail(robotCompleteTaskDTO.getOrderId()); } deviceInformationMapper.updateDeviceUseStatus(robotChargeLogDO.getDeviceNo(), DeviceUseStatusEnum.IDLE.getType(), ZeroOneEnum.ZERO.getType()); - } + }*/ - RobotWarnMsgDO warnMsg = RobotWarnMsgDO.builder().warnLevel(4) - .warnCode(robotCompleteTaskDTO.getStatus_code()) + /* RobotWarnMsgDO warnMsg = RobotWarnMsgDO.builder().warnLevel(4) + .warnCode(robotCompleteTaskDTO.getStatusCode()) .robotNo(robotNo) .warnType(RobotWarnType.ROBOT_WARN.getType()) .warnMsg(robotNo +"_"+robotCompleteTaskDTO.getMessage()) @@ -202,11 +275,12 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { .build(); warnMsgMapper.insert(warnMsg); - warnMsgService.sendWarnMsgToWebsocket(warnMsg.getWarnMsg()); + warnMsgService.sendWarnMsgToWebsocket(warnMsg.getWarnMsg());*/ } /** * 关闭订单 + * * @param taskDetailId */ public RobotTaskDetailDO closeTaskDetail(Long taskDetailId) { @@ -224,7 +298,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { logOne.setActionMsg("车辆正在充电"); String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); logOne.setRobotNo(robotNo); - logOne.setTaskDetailId(robotCompleteTaskDTO.getOrder_id()); + logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId()); taskDetailActionLogMapper.insert(logOne); redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime); } @@ -236,11 +310,20 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { * @param robotCompleteTaskDTO */ private void chargeDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey) { - List commandState = robotCompleteTaskDTO.getCommand_state(); - if (ObjectUtil.isEmpty(commandState)) { - return; + RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO(); + RobotCommandStateDTO commandStatus = robotCompleteTaskDTO.getCommandStatus(); + if (ObjectUtil.isNotEmpty(commandStatus) && CommandTypeEnum.MOVE_POSES.getType().equals(commandStatus.getCommandType())) { + RobotChargeLogDO robotChargeLogDO = chargeLogMapper.selectById(robotCompleteTaskDTO.getOrderId()); + logOne.setActionMsg("车辆正在前往充电点" + robotChargeLogDO.getDeviceNo()); + } else if (ObjectUtil.isNotEmpty(commandStatus)) { + logOne.setActionMsg("车辆正在充电"); } - addActionLog(commandState, robotDoingActionKey); + + String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); + logOne.setRobotNo(robotNo); + logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId()); + taskDetailActionLogMapper.insert(logOne); + redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime); } /** @@ -251,12 +334,12 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { private void taskDone(RobotCompleteTaskDTO robotCompleteTaskDTO) { //更新任务状态 RobotTaskDetailDO detailDO = new RobotTaskDetailDO(); - detailDO.setId(robotCompleteTaskDTO.getOrder_id()); + detailDO.setId(robotCompleteTaskDTO.getOrderId()); detailDO.setEndTime(LocalDateTime.now()); - detailDO.setTaskStatus(robotCompleteTaskDTO.getExecution_state()); + detailDO.setTaskStatus(RobotTaskDetailStatusEnum.DONE.getType()); robotTaskDetailMapper.updateRobotDetailById(detailDO); //更新任务状态 - RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrder_id()); + RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId()); List taskDetails = robotTaskDetailMapper.queryByTaskId(robotTaskDetailDO.getRobotTaskId()); boolean done = taskDetails.stream().noneMatch(v -> (v.getTaskStatus().equals(RobotTaskDetailStatusEnum.NEW.getType()))); @@ -269,31 +352,20 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { taskCycleMapper.deletByRobotTaskId(taskDetails.get(0).getRobotTaskId()); } - if (RobotTaskTypeEnum.MOVE.getType().equals(robotTaskDetailDO.getTaskType())) { - robotInformationMapper.updateRobotTaskModel(robotTaskDetailDO.getRobotNo(), RobotTaskModelEnum.REJECTION.getType()); + RobotInformationDO robotInformationDO = robotInformationMapper.selectOne(new LambdaQueryWrapperX() + .eq(RobotInformationDO::getRobotNo, robotTaskDetailDO.getRobotNo())); + robotInformationDO.setRobotStatus(RobotStatusEnum.STAND_BY.getType()); + if (RobotTaskTypeEnum.MOVE.getType().equals(robotTaskDetailDO.getTaskType()) + || (RobotTaskTypeEnum.PARK.getType().equals(robotTaskDetailDO.getTaskType()) + && ZeroOneEnum.ONE.getType().equals(robotTaskDetailDO.getNeedLock()))) { + robotInformationDO.setRobotTaskModel(RobotTaskModelEnum.REJECTION.getType()); } + robotInformationMapper.updateBatch(robotInformationDO); + //同步任务完成给PP + pathPlanningService.updateBehavior(String.valueOf(robotCompleteTaskDTO.getOrderId()), robotTaskDetailDO.getRobotNo() + , "", PathIsReachEnum.END_WORK.getType()); } - /** - * 添加操作日志 - * - * @param commandState - */ - public void addActionLog(List commandState, String robotDoingActionKey) { - RobotCommandStateDTO robotCommandStateDTO = commandState.stream() - .filter(v -> RobotExecutionStateConstant.DOING.equals(Integer.valueOf(v.getExecution_state()))) - .findFirst() - .orElse(null); - if (ObjectUtil.isNotEmpty(robotCommandStateDTO)) { - String robotDoingActionLogKey = RobotTaskChcheConstant.ROBOT_ACTION_LOG_ENTITY + robotCommandStateDTO.getCommand_id(); - Object o = redisUtil.get(robotDoingActionLogKey); - if (ObjectUtil.isNotEmpty(o)) { - RobotTaskDetailActionLogDO actionLog = JSON.parseObject(JSON.toJSONString(o), RobotTaskDetailActionLogDO.class); - taskDetailActionLogMapper.insert(actionLog); - redisUtil.set(robotDoingActionKey, actionLog.getActionMsg(), doingActionCacheTime); - } - } - } /** * 任务处理中 @@ -302,51 +374,74 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { */ @Transactional(rollbackFor = Exception.class) public void taskDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey) { - List commandState = robotCompleteTaskDTO.getCommand_state(); - if (ObjectUtil.isEmpty(commandState)) { - return; - } - addActionLog(commandState, robotDoingActionKey); - String robotActionTakeGoodsKey = RobotTaskChcheConstant.ROBOT_ACTION_TAKE_GOODS + robotCompleteTaskDTO.getOrder_id(); - Object o1 = redisUtil.get(robotActionTakeGoodsKey); + RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId()); + Long taskStage = robotTaskDetailDO.getTaskStage(); - String robotActionReleaseGoodsKey = RobotTaskChcheConstant.ROBOT_ACTION_RELEASE_GOODS + robotCompleteTaskDTO.getOrder_id(); - Object o2 = redisUtil.get(robotActionReleaseGoodsKey); + RobotCommandStateDTO commandStatus = robotCompleteTaskDTO.getCommandStatus(); + String commandType = commandStatus.getCommandType(); - if (ObjectUtil.isEmpty(o1) && ObjectUtil.isEmpty(o2)) { - return; - } - - String takeCommonId = ObjectUtil.isNotEmpty(o1) ? String.valueOf(o1) : null; - String releaseCommonId = ObjectUtil.isNotEmpty(o2) ? String.valueOf(o2) : null; - - for (RobotCommandStateDTO commandStateDTO : commandState) { - //释放取的库位 - if (RobotExecutionStateConstant.DONE.equals(Integer.valueOf(commandStateDTO.getExecution_state())) - && ObjectUtil.isNotEmpty(takeCommonId) && takeCommonId.equals(commandStateDTO.getCommand_id())) { - RobotTaskDetailActionLogDO actionLogDO = - taskDetailActionLogMapper.selectOne(new LambdaQueryWrapperX() - .eq(RobotTaskDetailActionLogDO::getCommandId, commandStateDTO.getCommand_id())); - if (ObjectUtil.isNotEmpty(actionLogDO) && ObjectUtil.isNotEmpty(actionLogDO.getTaskDetailId())) { - freeLocation(true, actionLogDO.getTaskDetailId()); - redisUtil.del(robotActionTakeGoodsKey); - } + RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO(); + if (PathTaskType.TAKE_RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) { + if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType) && RobotTaskStageEnum.UN_START.getType().equals(taskStage)) { + logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getFromLocationNo() + "取货"); + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType()); + } else if (CommandTypeEnum.WORK_PICK_UP_GOODS.getType().equals(commandType)) { + logOne.setActionMsg("车辆正在取货"); + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType()); + } else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(commandType)) { + logOne.setActionMsg("车辆正在放货"); + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING.getType()); + } else if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) { + logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo() + "放货"); + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType()); } - //释放放的库位 - if (RobotExecutionStateConstant.DONE.equals(Integer.valueOf(commandStateDTO.getExecution_state())) - && ObjectUtil.isNotEmpty(releaseCommonId) && releaseCommonId.equals(commandStateDTO.getCommand_id())) { - RobotTaskDetailActionLogDO actionLogDO = - taskDetailActionLogMapper.selectOne(new LambdaQueryWrapperX() - .eq(RobotTaskDetailActionLogDO::getCommandId, commandStateDTO.getCommand_id())); - if (ObjectUtil.isNotEmpty(actionLogDO) && ObjectUtil.isNotEmpty(actionLogDO.getTaskDetailId())) { - freeLocation(false, actionLogDO.getTaskDetailId()); - redisUtil.del(robotActionReleaseGoodsKey); - } + } else if (PathTaskType.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) { + RobotChargeLogDO robotChargeLogDO = chargeLogMapper.selectById(robotCompleteTaskDTO.getOrderId()); + if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) { + logOne.setActionMsg("车辆正在前往" + robotChargeLogDO.getDeviceNo() + "充电"); + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.MOVE.getType()); + } else { + logOne.setActionMsg("车辆正在充电"); + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.CHARGEING.getType()); + } + + } else if (PathTaskType.MOVE.getType().equals(robotCompleteTaskDTO.getOrderType())) { + if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) { + logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo()); + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.MOVE.getType()); + } + } else if (PathTaskType.MOVE_TO_WAIT_STOP.getType().equals(robotCompleteTaskDTO.getOrderType())) { + if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) { + logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo()); + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.MOVE.getType()); + } + } else if (PathTaskType.TAKE.getType().equals(robotCompleteTaskDTO.getOrderType())) { + if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType) && RobotTaskStageEnum.UN_START.getType().equals(taskStage)) { + logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getFromLocationNo() + "取货"); + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType()); + } else if (CommandTypeEnum.WORK_PICK_UP_GOODS.getType().equals(commandType)) { + logOne.setActionMsg("车辆正在取货"); + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType()); + } + + } else if (PathTaskType.RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) { + if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType) && RobotTaskStageEnum.UN_START.getType().equals(taskStage)) { + logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo() + "放货"); + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType()); + } else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(commandType)) { + logOne.setActionMsg("车辆正在放货"); + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING.getType()); } } + String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); + logOne.setRobotNo(robotNo); + logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId()); + taskDetailActionLogMapper.insert(logOne); + redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime); + robotTaskDetailMapper.updateBatch(robotTaskDetailDO); } public void freeLocation(Boolean isTake, Long taskDetailId) { @@ -385,11 +480,9 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { */ @Override @Transactional(rollbackFor = Exception.class) - public CommonResult robotDoneTask(RobotCompleteTaskDTO robotCompleteTaskDTO) { + public void robotDoneTask(RobotCompleteTaskDTO robotCompleteTaskDTO) { taskExecutor.execute(() -> { doRobotDoneTask(robotCompleteTaskDTO); }); - - return CommonResult.success(true); } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/path/PathPlanningTopicConstant.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/path/PathPlanningTopicConstant.java index f6a174850..38fb6a4cf 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/path/PathPlanningTopicConstant.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/path/PathPlanningTopicConstant.java @@ -83,7 +83,7 @@ public class PathPlanningTopicConstant { /** * 实时行为上报 */ - public static String UPDATE_ACTION = "UPDATE_ACTION"; + public static String UPDATE_BEHAVIOR = "UPDATE_BEHAVIOR"; } 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 5b5ed7cc7..ddc5feefd 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 @@ -36,8 +36,8 @@ public class RobotTaskChcheConstant { public static String ROBOT_ACTION_LOG_ENTITY = "robot:action:log:entity"; //机器人取货完成(拼接robot_task_detail的id) - public static String ROBOT_ACTION_TAKE_GOODS = "robot:take:"; +// public static String ROBOT_ACTION_TAKE_GOODS = "robot:take:"; //机器人放货完成(拼接robot_task_detail的id) - public static String ROBOT_ACTION_RELEASE_GOODS = "robot:release:"; +// public static String ROBOT_ACTION_RELEASE_GOODS = "robot:release:"; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/dto/TaskOrderConfigDTO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/dto/TaskOrderConfigDTO.java index 925fb3a94..ff65abc35 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/dto/TaskOrderConfigDTO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/config/dto/TaskOrderConfigDTO.java @@ -5,8 +5,8 @@ import lombok.Data; @Data public class TaskOrderConfigDTO { - private String task_assignment_strategy; - private String priority_factor; - private String time_factor; - private String time_difference_threshold_second; + private String taskAssignmentStrategy; + private String priorityFactor; + private String timeFactor; + private String timeDifferenceThresholdSecond; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemPageReqVO.java index 4241ed9bf..d90bcc21a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemPageReqVO.java @@ -52,4 +52,7 @@ public class PositionMapItemPageReqVO extends PageParam { @Schema(description = "排序的位置,越大越优先堆放") private Long locationNumber; + @Schema(description = "等待点使用状态(0.空闲 1.使用中)") + private Integer useStatus; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java index 81ce4f63e..ca1d05c7c 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java @@ -70,4 +70,8 @@ public class PositionMapItemRespVO { @ExcelProperty("排序的位置,越大越优先堆放") private Long locationNumber; + @Schema(description = "等待点使用状态(0.空闲 1.使用中)") + @ExcelProperty("等待点使用状态(0.空闲 1.使用中)") + private Integer useStatus; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemSaveReqVO.java index 424f8793d..eb927a3af 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemSaveReqVO.java @@ -42,4 +42,7 @@ public class PositionMapItemSaveReqVO { @Schema(description = "排序的位置,越大越优先堆放") private Long locationNumber; + + @Schema(description = "等待点使用状态(0.空闲 1.使用中)") + private Integer useStatus; } 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 01e92c14b..1de374568 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 @@ -56,7 +56,7 @@ public class RobotTaskDetailPageReqVO extends PageParam { @Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1") private Integer taskStatus; - @Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)") + @Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电)") private Long taskStage; @Schema(description = "开始时间") 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 6074e21ba..98b8b0849 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 @@ -62,8 +62,8 @@ public class RobotTaskDetailRespVO { @ExcelProperty("任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)") private Integer taskStatus; - @Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)") - @ExcelProperty("任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)") + @Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电)") + @ExcelProperty("任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电)") private Long taskStage; @Schema(description = "开始时间") 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 e2f22728f..a61f01d11 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 @@ -62,7 +62,7 @@ public class RobotTaskDetailSaveReqVO { @Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1") private Integer taskStatus; - @Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)") + @Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电)") private Long taskStage; @Schema(description = "开始时间") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/wait/MoveToWaitController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/wait/MoveToWaitController.java new file mode 100644 index 000000000..8500174d6 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/wait/MoveToWaitController.java @@ -0,0 +1,97 @@ +package cn.iocoder.yudao.module.system.controller.admin.wait; + +import cn.iocoder.yudao.module.system.controller.admin.wait.vo.MoveToWaitPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.wait.vo.MoveToWaitRespVO; +import cn.iocoder.yudao.module.system.controller.admin.wait.vo.MoveToWaitSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.wait.MoveToWaitDO; +import cn.iocoder.yudao.module.system.service.wait.MoveToWaitService; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + + +@Tag(name = "管理后台 - 车辆前往等待点记录") +@RestController +@RequestMapping("/wait/move-to-wait") +@Validated +public class MoveToWaitController { + + @Resource + private MoveToWaitService moveToWaitService; + + @PostMapping("/create") + @Operation(summary = "创建车辆前往等待点记录") + @PreAuthorize("@ss.hasPermission('wait:move-to-wait:create')") + public CommonResult createMoveToWait(@Valid @RequestBody MoveToWaitSaveReqVO createReqVO) { + return success(moveToWaitService.createMoveToWait(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新车辆前往等待点记录") + @PreAuthorize("@ss.hasPermission('wait:move-to-wait:update')") + public CommonResult updateMoveToWait(@Valid @RequestBody MoveToWaitSaveReqVO updateReqVO) { + moveToWaitService.updateMoveToWait(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除车辆前往等待点记录") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wait:move-to-wait:delete')") + public CommonResult deleteMoveToWait(@RequestParam("id") Long id) { + moveToWaitService.deleteMoveToWait(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得车辆前往等待点记录") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('wait:move-to-wait:query')") + public CommonResult getMoveToWait(@RequestParam("id") Long id) { + MoveToWaitDO moveToWait = moveToWaitService.getMoveToWait(id); + return success(BeanUtils.toBean(moveToWait, MoveToWaitRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得车辆前往等待点记录分页") + @PreAuthorize("@ss.hasPermission('wait:move-to-wait:query')") + public CommonResult> getMoveToWaitPage(@Valid MoveToWaitPageReqVO pageReqVO) { + PageResult pageResult = moveToWaitService.getMoveToWaitPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, MoveToWaitRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出车辆前往等待点记录 Excel") + @PreAuthorize("@ss.hasPermission('wait:move-to-wait:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportMoveToWaitExcel(@Valid MoveToWaitPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = moveToWaitService.getMoveToWaitPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "车辆前往等待点记录.xls", "数据", MoveToWaitRespVO.class, + BeanUtils.toBean(list, MoveToWaitRespVO.class)); + } + +} \ 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/wait/vo/MoveToWaitPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/wait/vo/MoveToWaitPageReqVO.java new file mode 100644 index 000000000..37b65cd9b --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/wait/vo/MoveToWaitPageReqVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.system.controller.admin.wait.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 车辆前往等待点记录分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MoveToWaitPageReqVO extends PageParam { + + @Schema(description = "AGV编号") + private String robotNo; + + @Schema(description = "地图字表节点id", example = "15970") + private Long positionMapItemId; + + @Schema(description = "任务状态(0:未开始、1:前往等待点、2:已到达等待点、3:已离开等待点)", example = "1") + private Integer waitStatus; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ 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/wait/vo/MoveToWaitRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/wait/vo/MoveToWaitRespVO.java new file mode 100644 index 000000000..c6e54395d --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/wait/vo/MoveToWaitRespVO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.system.controller.admin.wait.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 车辆前往等待点记录 Response VO") +@Data +@ExcelIgnoreUnannotated +public class MoveToWaitRespVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19107") + @ExcelProperty("主键ID") + private Long id; + + @Schema(description = "AGV编号") + @ExcelProperty("AGV编号") + private String robotNo; + + @Schema(description = "地图字表节点id", example = "15970") + @ExcelProperty("地图字表节点id") + private Long positionMapItemId; + + @Schema(description = "任务状态(0:未开始、1:前往等待点、2:已到达等待点、3:已离开等待点)", example = "1") + @ExcelProperty("任务状态(0:未开始、1:前往等待点、2:已到达等待点、3:已离开等待点)") + private Integer waitStatus; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ 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/wait/vo/MoveToWaitSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/wait/vo/MoveToWaitSaveReqVO.java new file mode 100644 index 000000000..c415197ad --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/wait/vo/MoveToWaitSaveReqVO.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.system.controller.admin.wait.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 车辆前往等待点记录新增/修改 Request VO") +@Data +public class MoveToWaitSaveReqVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19107") + private Long id; + + @Schema(description = "AGV编号") + private String robotNo; + + @Schema(description = "地图字表节点id", example = "15970") + private Long positionMapItemId; + + @Schema(description = "任务状态(0:未开始、1:前往等待点、2:已到达等待点、3:已离开等待点)", example = "1") + private Integer waitStatus; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java index 346067a29..727432fd1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java @@ -77,5 +77,9 @@ public class PositionMapItemDO extends BaseDO { * 排序的位置,越大越优先堆放 */ private Long locationNumber; + /** + * 等待点使用状态(0.空闲 1.使用中) + */ + private Integer useStatus; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotTaskDetailDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotTaskDetailDO.java index 481c6472b..f93ed4aa5 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotTaskDetailDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotTaskDetailDO.java @@ -96,7 +96,7 @@ public class RobotTaskDetailDO extends BaseDO { */ private Integer taskStatus; /** - * 任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束) + * 任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电) */ private Long taskStage; /** diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/wait/MoveToWaitDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/wait/MoveToWaitDO.java new file mode 100644 index 000000000..5d78bbb14 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/wait/MoveToWaitDO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.system.dal.dataobject.wait; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 车辆前往等待点记录 DO + * + * @author 陈宾顺 + */ +@TableName("robot_move_to_wait") +@KeySequence("robot_move_to_wait_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MoveToWaitDO extends BaseDO { + + /** + * 主键ID + */ + @TableId + private Long id; + /** + * AGV编号 + */ + private String robotNo; + /** + * 地图字表节点id + */ + private Long positionMapItemId; + /** + * 任务状态(0:未开始、1:前往等待点、2:已到达等待点、3:已离开等待点) + */ + private Integer waitStatus; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/wait/MoveToWaitMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/wait/MoveToWaitMapper.java new file mode 100644 index 000000000..0aa57f816 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/wait/MoveToWaitMapper.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.system.dal.mysql.wait; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import org.apache.ibatis.annotations.Mapper; + +import cn.iocoder.yudao.module.system.controller.admin.wait.vo.*; +import cn.iocoder.yudao.module.system.dal.dataobject.wait.MoveToWaitDO; +/** + * 车辆前往等待点记录 Mapper + * + * @author 陈宾顺 + */ +@Mapper +public interface MoveToWaitMapper extends BaseMapperX { + + default PageResult selectPage(MoveToWaitPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(MoveToWaitDO::getRobotNo, reqVO.getRobotNo()) + .eqIfPresent(MoveToWaitDO::getPositionMapItemId, reqVO.getPositionMapItemId()) + .eqIfPresent(MoveToWaitDO::getWaitStatus, reqVO.getWaitStatus()) + .betweenIfPresent(MoveToWaitDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MoveToWaitDO::getId)); + } + +} \ 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/path/PathIsReachEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/path/PathIsReachEnum.java new file mode 100644 index 000000000..2b5d71173 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/path/PathIsReachEnum.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.system.enums.path; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum PathIsReachEnum { + REACH("REACH","到达"), + MOVE("MOVE","前进"), + START_WORK("START_WORK","开始作业"), + END_WORK("END_WORK","完成作业"); + /** + * 类型 + */ + private final String type; + private final String msg; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/path/PathTaskType.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/path/PathTaskType.java index 17c1163ca..f300be3dc 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/path/PathTaskType.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/path/PathTaskType.java @@ -13,6 +13,8 @@ public enum PathTaskType { TAKE_RELEASE("TAKE_RELEASE","取放货"), CHARGE("CHARGE","充电任务"), MOVE("MOVE","移动任务"), + MOVE_TO_WAIT("MOVE_TO_WAIT","移动到等待点(没任务时去等待点)"), + MOVE_TO_WAIT_STOP("MOVE_TO_WAIT_STOP","停车任务"), TAKE("TAKE","仅取货"), RELEASE("RELEASE","仅放货"), AUTO_CHARGE("AUTO_CHARGE","自动充电"); @@ -39,6 +41,8 @@ public enum PathTaskType { return TAKE.getType(); }else if (RobotTaskTypeEnum.RELEASE.getType().equals(taskType)) { return RELEASE.getType(); + }else if (RobotTaskTypeEnum.PARK.getType().equals(taskType)) { + return MOVE_TO_WAIT_STOP.getType(); }else { return AUTO_CHARGE.getType(); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/CommandTypeEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/CommandTypeEnum.java index 85ca1a3dc..75befb511 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/CommandTypeEnum.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/CommandTypeEnum.java @@ -9,19 +9,11 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum CommandTypeEnum { - MOVE_POSES_AND_FORK("MOVE_POSES_AND_FORK","移动且降叉"), + WORK_PICK_UP_GOODS("WORK_PICK_UP_GOODS","取货控叉"), + WORK_DROP_OFF_GOODS("WORK_DROP_OFF_GOODS","放货控叉"), MOVE_POSES("MOVE_POSES","移动"), - MOVE_POSE("MOVE_POSE","移动"), - JOY_AGV("JOY_AGV","遥感AGV移动"), - JOY_FORK("JOY_FORK","遥控货叉上下移动"), - SHUT_DOWN("SHUT_DOWN","关机"), - RESTART("RESTART","重启"), - STOP("STOP","停止"), - START("START","启动"), - WAIT("WAIT","等待"), - GET_PALLET_TOPIC("GET_PALLET_TOPIC","获取托盘位置"), - MOVE_TO_PALLET_POSE("MOVE_TO_PALLET_POSE","移动到取货终点"), - FORK("FORK","控制货叉上下移动"); + WORK_AUTO_CHARGE("WORK_AUTO_CHARGE","自动充电"), + WORK_MANUAL_CHARGEC("WORK_MANUAL_CHARGEC","手动充电"); /** * 类型 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java index da0fbcc47..9b8987cda 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java @@ -6,6 +6,8 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum RobotCommandTypeEnum { + MOVE_POSES("MOVE_POSES","移动"), + WORK_START_CHARGE("WORK_START_CHARGE","充电"), WORD_PICK_UP_GOODS("WORD_PICK_UP_GOODS","取货"), WORD_DROP_OFF_GOODS("WORD_DROP_OFF_GOODS","放货"); /** diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotTaksOrderTypeEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotTaksOrderTypeEnum.java index 8edfafba9..c17339a9e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotTaksOrderTypeEnum.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotTaksOrderTypeEnum.java @@ -1,11 +1,14 @@ +/* package cn.iocoder.yudao.module.system.enums.robot.task; import lombok.AllArgsConstructor; import lombok.Getter; +*/ /** * RobotAcceptTaskDTO的order_type - */ + *//* + @Getter @AllArgsConstructor public enum RobotTaksOrderTypeEnum { @@ -13,8 +16,11 @@ public enum RobotTaksOrderTypeEnum { AUTO_MOVE("AUTO_MOVE"), //自动移库任务 TASK("TASK"), //客户下发的任务 AUTO_CHARGE("AUTO_CHARGE"); //自动充电任务 - /** + */ +/** * 类型 - */ + *//* + private final String type; } +*/ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotTaskStageEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotTaskStageEnum.java new file mode 100644 index 000000000..88e8bc88e --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotTaskStageEnum.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.system.enums.robot.task; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum RobotTaskStageEnum { + UN_START(0L,"待执行"), + GO_TAKE(1L,"前往取货"), + TAKEING(2L,"取货中"), + GO_RELEASE(3L,"前往放货"), + RELEASEING(4L,"放货中"), + DONE(5L,"结束"), + MOVE(6L,"移动中"), + CHARGEING(7L,"待执行正在充电"); + /** + * 类型 + */ + private final Long type; + private final String msg; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/wait/WaitStatusEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/wait/WaitStatusEnum.java new file mode 100644 index 000000000..c19b038ae --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/wait/WaitStatusEnum.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.system.enums.wait; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 任务状态(0:未开始、1:前往等待点、2:已到达等待点、3:已离开等待点) + */ +@Getter +@AllArgsConstructor +public enum WaitStatusEnum { + UN_START(0,"未开始"), + GO_TO_WAIT(1,"前往等待点"), + REACH_WAIT(2,"已到达等待点"), + LEAVE_WAIT(3,"已离开等待点"); + /** + * 类型 + */ + 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 3b7f49622..de7e8af56 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 @@ -45,11 +45,11 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy { // -- 筛选出 库位编号不为空 - 并且第最后一组数据 最大的值 - 如果没有则为0 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 = null; if (ObjectUtil.isNotEmpty(item.getLocationNumber())) { locationNumber = item.getLocationNumber(); } + int locationStorey = 1; for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) { wareHouseLocationDO.setLocationX(item.getLocationX()); wareHouseLocationDO.setLocationY(item.getLocationY()); @@ -58,6 +58,8 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy { if (wareHouseLocationDO.getId() == null) { wareHouseLocationDO.setId(getId()); } + wareHouseLocationDO.setLocationStorey(locationStorey); + locationStorey ++; if (StrUtil.isEmpty(wareHouseLocationDO.getLocationNo())) { // -- 生成库位编号 - String locationNo = String.format(KW_NO_FORMAT, positionMapId, RandomUtil.randomNumbers(4), max++); @@ -69,8 +71,6 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy { wareHouseLocationDO.setLocationNumber(locationNumber); locationNumber = locationNumber - 10; } - wareHouseLocationDO.setLocationStorey(locationStorey); - locationStorey = locationStorey+1; newList.add(wareHouseLocationDO); } item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS)); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningService.java index cdcbca115..f1aca0a5d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningService.java @@ -29,4 +29,13 @@ public interface PathPlanningService { * @param message */ void sendPosedsToRobot(String message); + + /** + * 同步PP任务状态 + * @param orderId + * @param robotNo + * @param s + * @param type + */ + void updateBehavior(String orderId, String robotNo, String s, String type); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningServiceImpl.java index 0c44e712a..eb8902d59 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/path/PathPlanningServiceImpl.java @@ -5,6 +5,7 @@ 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.path.PathPlanningApi; import cn.iocoder.yudao.module.mqtt.api.path.dto.*; +import cn.iocoder.yudao.module.mqtt.api.path.task.TaskPathPlanningDTO; import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant; import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemSaveReqVO; @@ -100,7 +101,7 @@ public class PathPlanningServiceImpl implements PathPlanningService { relatedPathNode.setFloor(positionMapDO.getFloor()); relatedPathNode.setArea(positionMapDO.getArea()); relatedPathNode.setType(PathTypeEnum.INIT.getType()); - List positionMapLineDOS = positionMapLineMap.get(positionMapDO.getId()+""); + List positionMapLineDOS = positionMapLineMap.get(positionMapDO.getId() + ""); if (ObjectUtil.isEmpty(positionMapLineDOS)) { continue; } @@ -386,16 +387,31 @@ public class PathPlanningServiceImpl implements PathPlanningService { /** * 发送路径给车机 + * * @param message */ @Override public void sendPosedsToRobot(String message) { PathPosedsDTO pathPosedsDTO = JSON.parseObject(message, PathPosedsDTO.class); String mac = robotInformationService.getMacByRobotNo(pathPosedsDTO.getRobotNo()); - String topic = RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC+mac; + String topic = RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + mac; commonApi.commonMethod(message, topic); } + /** + * 实时行为上报 + * @param orderId + * @param robotNo + * @param behaviorId + * @param isReach + */ + @Override + public void updateBehavior(String orderId, String robotNo, String behaviorId, String isReach) { + TaskPathPlanningDTO build = TaskPathPlanningDTO.builder().orderId(orderId).robotNo(robotNo) + .behaviorId(behaviorId).isReach(isReach).build(); + commonApi.commonMethod(build, PathPlanningTopicConstant.UPDATE_BEHAVIOR); + } + public PositionMapLineDTO setPositionMapLineDTOData(PositionMapLineDTO positionMapLineDO) { PositionMapLineDTO build = PositionMapLineDTO.builder() .id(positionMapLineDO.getId()) 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 64232bebe..db5fd009e 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 @@ -10,11 +10,7 @@ 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.api.common.CommonApi; -import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAcceptTaskDTO; -import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAssignTaskArgDTO; -import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAssignTaskDTO; -import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAssignTaskDataDTO; -import cn.iocoder.yudao.module.mqtt.enums.path.TaskTypeEnum; +import cn.iocoder.yudao.module.mqtt.api.task.dto.*; import cn.iocoder.yudao.module.mqtt.enums.task.ExecutionTypeEnum; import cn.iocoder.yudao.module.system.api.path.vo.RobotClosePathPlantingDTO; import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO; @@ -53,7 +49,6 @@ 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.ChargeTaskStatusEnum; import cn.iocoder.yudao.module.system.enums.robot.task.RobotCommandTypeEnum; -import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaksOrderTypeEnum; //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; @@ -136,12 +131,12 @@ public class RobotTaskServiceImpl extends ServiceImpl robotAssignTaskData = getRobotAssignTaskData(v,taskAssignDTO); - build.setData(robotAssignTaskData); + || PathTaskType.TAKE.getType().equals(taskAssignDTO.getType()) + || PathTaskType.RELEASE.getType().equals(taskAssignDTO.getType())) { + RobotAssignTaskDataDTO robotAssignTaskData = getRobotAssignTaskData(v, taskAssignDTO); + List data = build.getData(); + data.add(robotAssignTaskData); + } else if (PathTaskType.CHARGE.getType().equals(taskAssignDTO.getType()) + || PathTaskType.AUTO_CHARGE.getType().equals(taskAssignDTO.getType())) { + RobotAssignTaskDataDTO robotAssignTaskData = new RobotAssignTaskDataDTO(); + robotAssignTaskData.setCommandType(RobotCommandTypeEnum.WORK_START_CHARGE.getType()); + List data = build.getData(); + data.add(robotAssignTaskData); } - log.info("发送任务给车机 :{}",JSON.toJSONString(build)); + log.info("发送任务给车机 :{}", JSON.toJSONString(build)); commonApi.commonMethod(build, build.getTopic()); } - public List getRobotAssignTaskData(RobotTaskDetailDO v,TaskAssignDTO taskAssignDTO) { + public RobotAssignTaskDataDTO getEmptyRobotAssignTaskData() { + RobotAssignTaskDataDTO take = new RobotAssignTaskDataDTO(); + take.setCommandType(RobotCommandTypeEnum.MOVE_POSES.getType()); + List pose2ds = new ArrayList<>(); + RobotAssignTaskArgDTO build = RobotAssignTaskArgDTO.builder().pose2ds(pose2ds).build(); + take.setArg(Arrays.asList(build)); + return take; + } - RobotAssignTaskDataDTO take = null; - RobotAssignTaskDataDTO release = null; + public RobotAssignTaskDataDTO getRobotAssignTaskData(RobotTaskDetailDO v, TaskAssignDTO taskAssignDTO) { + + RobotAssignTaskDataDTO take = new RobotAssignTaskDataDTO(); + RobotAssignTaskArgDTO build = null; + WareHouseLocationDO location = null; if (PathTaskType.TAKE_RELEASE.getType().equals(taskAssignDTO.getType()) || PathTaskType.TAKE.getType().equals(taskAssignDTO.getType())) { - take = new RobotAssignTaskDataDTO(); - take.setCommand_type(RobotCommandTypeEnum.WORD_PICK_UP_GOODS.getType()); - WareHouseLocationDO location = locationMapper.selectById(v.getFromLocationId()); - RobotAssignTaskArgDTO build = RobotAssignTaskArgDTO.builder() + take.setCommandType(RobotCommandTypeEnum.WORD_PICK_UP_GOODS.getType()); + location = locationMapper.selectById(v.getFromLocationId()); + build = RobotAssignTaskArgDTO.builder() .level(Double.valueOf(location.getLocationStorey())) - .height(Double.valueOf(location.getLocationTrayHeight() + "")) - .check_pallet_height(checkPalletHeight) - .offset_height(offsetHeight) + .offsetHeight(offsetHeight) .build(); take.setArg(Arrays.asList(build)); - } - if (PathTaskType.TAKE_RELEASE.getType().equals(taskAssignDTO.getType()) || - PathTaskType.RELEASE.getType().equals(taskAssignDTO.getType())) { - release = new RobotAssignTaskDataDTO(); - release.setCommand_type(RobotCommandTypeEnum.WORD_DROP_OFF_GOODS.getType()); - WareHouseLocationDO location = locationMapper.selectById(v.getToLocationId()); - RobotAssignTaskArgDTO build = RobotAssignTaskArgDTO.builder() + } else if (PathTaskType.RELEASE.getType().equals(taskAssignDTO.getType())) { + take.setCommandType(RobotCommandTypeEnum.WORD_DROP_OFF_GOODS.getType()); + location = locationMapper.selectById(v.getToLocationId()); + build = RobotAssignTaskArgDTO.builder() .level(Double.valueOf(location.getLocationStorey())) - .height(Double.valueOf(location.getLocationTrayHeight() + "")) - .check_pallet_height(checkPalletHeight) - .offset_height(offsetHeight) + .offsetHeight(offsetHeight) .build(); - release.setArg(Arrays.asList(build)); } - List list = new ArrayList<>(); - if (ObjectUtil.isNotEmpty(take)) { - list.add(take); + if (ObjectUtil.isEmpty(location.getLocationTrayHeight())) { + setRobotAssignTaskArgHeigth(location, build); + } else { + build.setHeight(Double.valueOf(location.getLocationTrayHeight() + "")); } - if (ObjectUtil.isNotEmpty(release)) { - list.add(release); - } - return list; + + take.setArg(Arrays.asList(build)); + + return take; + } + + private void setRobotAssignTaskArgHeigth(WareHouseLocationDO location, RobotAssignTaskArgDTO build) { + Integer locationStorey = location.getLocationStorey() - 1; + double height = locationStorey * defaultTrayHeight; + build.setHeight(height); } public RobotTaskDetailDO setTaskDoing(Long detailId, String robotNo, Map deviceNoMap) { @@ -1156,8 +1166,8 @@ public class RobotTaskServiceImpl extends ServiceImpl getMoveToWaitPage(MoveToWaitPageReqVO pageReqVO); + + void setMoveToWaitDoing(Long orderId,Integer status); +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/wait/MoveToWaitServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/wait/MoveToWaitServiceImpl.java new file mode 100644 index 000000000..07514852c --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/wait/MoveToWaitServiceImpl.java @@ -0,0 +1,82 @@ +package cn.iocoder.yudao.module.system.service.wait; + +import cn.iocoder.yudao.module.system.controller.admin.wait.vo.*; +import cn.iocoder.yudao.module.system.dal.dataobject.wait.MoveToWaitDO; +import cn.iocoder.yudao.module.system.dal.mysql.wait.MoveToWaitMapper; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MOVE_TO_WAIT_NOT_EXISTS; + +/** + * 车辆前往等待点记录 Service 实现类 + * + * @author 陈宾顺 + */ +@Service +@Validated +public class MoveToWaitServiceImpl implements MoveToWaitService { + + @Resource + private MoveToWaitMapper moveToWaitMapper; + + @Override + public Long createMoveToWait(MoveToWaitSaveReqVO createReqVO) { + // 插入 + MoveToWaitDO moveToWait = BeanUtils.toBean(createReqVO, MoveToWaitDO.class); + moveToWaitMapper.insert(moveToWait); + // 返回 + return moveToWait.getId(); + } + + @Override + public void updateMoveToWait(MoveToWaitSaveReqVO updateReqVO) { + // 校验存在 + validateMoveToWaitExists(updateReqVO.getId()); + // 更新 + MoveToWaitDO updateObj = BeanUtils.toBean(updateReqVO, MoveToWaitDO.class); + moveToWaitMapper.updateById(updateObj); + } + + @Override + public void deleteMoveToWait(Long id) { + // 校验存在 + validateMoveToWaitExists(id); + // 删除 + moveToWaitMapper.deleteById(id); + } + + private void validateMoveToWaitExists(Long id) { + if (moveToWaitMapper.selectById(id) == null) { + throw exception(MOVE_TO_WAIT_NOT_EXISTS); + } + } + + @Override + public MoveToWaitDO getMoveToWait(Long id) { + return moveToWaitMapper.selectById(id); + } + + @Override + public PageResult getMoveToWaitPage(MoveToWaitPageReqVO pageReqVO) { + return moveToWaitMapper.selectPage(pageReqVO); + } + + @Override + public void setMoveToWaitDoing(Long orderId,Integer status) { + MoveToWaitDO updateObj = new MoveToWaitDO(); + updateObj.setId(orderId); + updateObj.setWaitStatus(status); + moveToWaitMapper.updateById(updateObj); + } + +} \ No newline at end of file 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 4b0a4dcf4..f16395021 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 @@ -245,14 +245,14 @@ zn: scan: 机器人正在扫描 parking_space: 机器人正在前往停车位 charge: 机器人正在前往充电位 - action_entity_cache_time: 28800 #机器人所有动作缓存时间 8小时 - doing_action_cache_time: 28800 #单个动作缓存时间 8小时 + action_entity_cache_time: 172800 #机器人所有动作缓存时间 8小时 + doing_action_cache_time: 172800 #单个动作缓存时间 8小时 robot_chearg: #机器人充电的配置 release_location_number_config: 50 #同一组序号,越大越先执行 priority_config: 50 #优先级 task: #任务相关的配置 check_sku_info: true #校验物料信息 robot_config: #机器人取放货默认配置 - check_pallet_height: 0.0 #检测托盘时需要抬叉的高度,现在是需要,以后不用了 offset_height: 0.1 #叉起货需要在原来高度基础上偏移的高度 + default_tray_height: 1.1 #默认每层高度 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/wait/MoveToWaitMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/wait/MoveToWaitMapper.xml new file mode 100644 index 000000000..c2d16c898 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/wait/MoveToWaitMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file