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 82cb07491..fdf0bfdb9 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 @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.system.api.robot; import cn.hutool.core.util.ObjectUtil; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi; @@ -11,6 +12,7 @@ import cn.iocoder.yudao.module.system.api.robot.dto.RobotCompleteTaskDTO; import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant; import cn.iocoder.yudao.module.system.constant.robot.RobotExecutionStateConstant; import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant; +import cn.iocoder.yudao.module.system.controller.admin.log.vo.RobotTaskDetailActionLogSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.log.RobotTaskDetailActionLogDO; import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.*; @@ -29,6 +31,7 @@ import cn.iocoder.yudao.module.system.enums.robot.task.RobotStatusCodeEnum; 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.information.DeviceInformationService; +import cn.iocoder.yudao.module.system.service.log.RobotTaskDetailActionLogService; 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; @@ -67,6 +70,9 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { @Resource private RobotTaskDetailActionLogMapper taskDetailActionLogMapper; + @Resource + private RobotTaskDetailActionLogService taskDetailActionLogService; + @Autowired private RobotInformationService robotInformationService; @@ -134,17 +140,37 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { } } + /** + * 上一条明细设置为完成 + * @param mac + * @return + */ + public RobotTaskDetailActionLogDO setLastLogDone(String mac){ + String robotNo = robotInformationService.getRobotNoByMac(mac); + RobotTaskDetailActionLogDO lastLog = taskDetailActionLogService.getLastTaskByRobotNo(robotNo); + if (ObjectUtil.isNotEmpty(lastLog)) { + lastLog.setEndTime(LocalDateTime.now()); + lastLog.setActionStatus(ActionStatusEnum.DONE.getType()); + RobotTaskDetailActionLogSaveReqVO updateObj = BeanUtils.toBean(lastLog, RobotTaskDetailActionLogSaveReqVO.class); + taskDetailActionLogService.updateTaskDetailActionLog(updateObj); + } + return lastLog; + } + /** * @param robotCompleteTaskDTO */ private void robotTaskDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey) { + String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); + RobotTaskDetailActionLogDO lastLog = setLastLogDone(robotCompleteTaskDTO.getMac()); + if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) { - chargeDoing(robotCompleteTaskDTO, robotDoingActionKey); + chargeDoing(robotCompleteTaskDTO, robotDoingActionKey,lastLog); } else if (PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(robotCompleteTaskDTO.getOrderType())) { RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO(); logOne.setActionMsg("车辆正在前往等待点"); - String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); logOne.setRobotNo(robotNo); + logOne.setStartTime(LocalDateTime.now()); logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId()); taskDetailActionLogMapper.insert(logOne); redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime); @@ -191,6 +217,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { * @param robotCompleteTaskDTO */ private void robotTaskDone(RobotCompleteTaskDTO robotCompleteTaskDTO) { + setLastLogDone(robotCompleteTaskDTO.getMac()); //todo 后面考虑下充电,车机目前对充电的逻辑未定义 if (PathTaskTypeEnum.MOVE.getType().equals(robotCompleteTaskDTO.getOrderType()) || PathTaskTypeEnum.MOVE_TO_WAIT_STOP.getType().equals(robotCompleteTaskDTO.getOrderType()) @@ -302,21 +329,27 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { * * @param robotCompleteTaskDTO */ - private void chargeDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey) { + private void chargeDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey,RobotTaskDetailActionLogDO lastLog) { RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO(); RobotCommandStateDTO commandStatus = robotCompleteTaskDTO.getCommandStatus(); Integer taskStatus = ChargeTaskStatusEnum.CHARGEING.getType(); if (ObjectUtil.isNotEmpty(commandStatus) && CommandTypeEnum.MOVE_POSES.getType().equals(commandStatus.getCommandType())) { RobotChargeLogDO robotChargeLogDO = chargeLogMapper.selectById(robotCompleteTaskDTO.getOrderId()); logOne.setActionMsg("车辆正在前往充电点" + robotChargeLogDO.getDeviceNo()); + logOne.setTaskStage(RobotTaskStageEnum.MOVE.getType()); taskStatus = ChargeTaskStatusEnum.DOING.getType(); } else if (ObjectUtil.isNotEmpty(commandStatus)) { logOne.setActionMsg("车辆正在充电"); + logOne.setTaskStage(RobotTaskStageEnum.CHARGEING.getType()); } String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); logOne.setRobotNo(robotNo); logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId()); + + logOne.setCommandType(lastLog.getCommandType()); + logOne.setTaskNo(lastLog.getTaskNo()); + logOne.setStartTime(LocalDateTime.now()); taskDetailActionLogMapper.insert(logOne); redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime); RobotChargeLogDO build = RobotChargeLogDO @@ -380,6 +413,8 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId()); Long taskStage = robotTaskDetailDO.getTaskStage(); + RobotTaskDO robotTask = robotTaskMapper.selectById(robotTaskDetailDO.getRobotTaskId()); + RobotCommandStateDTO commandStatus = robotCompleteTaskDTO.getCommandStatus(); String commandType = commandStatus.getCommandType(); @@ -441,6 +476,10 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); logOne.setRobotNo(robotNo); logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId()); + logOne.setTaskStage(robotTaskDetailDO.getTaskStage()); + logOne.setCommandType(PathTaskTypeEnum.getTaskType(robotTaskDetailDO.getTaskType())); + logOne.setTaskNo(robotTask.getTaskNo()); + logOne.setStartTime(LocalDateTime.now()); taskDetailActionLogMapper.insert(logOne); redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime); robotTaskDetailMapper.updateById(robotTaskDetailDO); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/log/vo/RobotTaskDetailActionLogPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/log/vo/RobotTaskDetailActionLogPageReqVO.java index 2e946c8a5..6d49d4036 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/log/vo/RobotTaskDetailActionLogPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/log/vo/RobotTaskDetailActionLogPageReqVO.java @@ -26,7 +26,7 @@ public class RobotTaskDetailActionLogPageReqVO extends PageParam { @Schema(description = "车辆当前正在做的动作") private String actionMsg; - @Schema(description = "动作状态(0:未开始、1:正在进行、2:完成)", example = "2") + @Schema(description = "动作状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "2") private Integer actionStatus; @Schema(description = "AGV编号") @@ -39,4 +39,16 @@ public class RobotTaskDetailActionLogPageReqVO extends PageParam { @Schema(description = "robot_task_detail的id") private Long taskDetailId; + @Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电、8:取消、9:人工完成、10:异常)") + private Long taskStage; + + @Schema(description = "任务号") + private String taskNo; + + @Schema(description = "开始时间") + private LocalDateTime startTime; + + @Schema(description = "结束时间") + private LocalDateTime endTime; + } \ 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/log/vo/RobotTaskDetailActionLogRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/log/vo/RobotTaskDetailActionLogRespVO.java index 4ec0be31b..fdc740e06 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/log/vo/RobotTaskDetailActionLogRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/log/vo/RobotTaskDetailActionLogRespVO.java @@ -31,8 +31,8 @@ public class RobotTaskDetailActionLogRespVO { @ExcelProperty("车辆当前正在做的动作") private String actionMsg; - @Schema(description = "动作状态(0:未开始、1:正在进行、2:完成)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - @ExcelProperty("动作状态(0:未开始、1:正在进行、2:完成)") + @Schema(description = "动作状态(动作状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常))", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("动作状态(动作状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常))") private Integer actionStatus; @Schema(description = "AGV编号") @@ -46,4 +46,19 @@ public class RobotTaskDetailActionLogRespVO { @Schema(description = "robot_task_detail的id") private Long taskDetailId; + @Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电、8:取消、9:人工完成、10:异常)") + private Long taskStage; + + @Schema(description = "任务号") + @ExcelProperty("任务号") + private String taskNo; + + @Schema(description = "开始时间") + @ExcelProperty("开始时间") + private LocalDateTime startTime; + + @Schema(description = "结束时间") + @ExcelProperty("结束时间") + private LocalDateTime endTime; + } \ 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/log/vo/RobotTaskDetailActionLogSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/log/vo/RobotTaskDetailActionLogSaveReqVO.java index 88f72c267..484f5d03a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/log/vo/RobotTaskDetailActionLogSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/log/vo/RobotTaskDetailActionLogSaveReqVO.java @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import javax.validation.constraints.*; +import java.time.LocalDateTime; @Schema(description = "管理后台 - 车辆动作记录新增/修改 Request VO") @Data @@ -24,8 +25,8 @@ public class RobotTaskDetailActionLogSaveReqVO { @Schema(description = "车辆当前正在做的动作") private String actionMsg; - @Schema(description = "动作状态(0:未开始、1:正在进行、2:完成)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - @NotNull(message = "动作状态(0:未开始、1:正在进行、2:完成)不能为空") + @Schema(description = "动作状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "动作状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)不能为空") private Integer actionStatus; @Schema(description = "AGV编号") @@ -34,4 +35,13 @@ public class RobotTaskDetailActionLogSaveReqVO { @Schema(description = "robot_task_detail的id") private Long taskDetailId; + @Schema(description = "任务号") + private String taskNo; + + @Schema(description = "开始时间") + private LocalDateTime startTime; + + @Schema(description = "结束时间") + private LocalDateTime endTime; + } \ 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/log/RobotTaskDetailActionLogDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/log/RobotTaskDetailActionLogDO.java index af7595ec3..3061aeb55 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/log/RobotTaskDetailActionLogDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/log/RobotTaskDetailActionLogDO.java @@ -5,6 +5,8 @@ import lombok.*; import com.baomidou.mybatisplus.annotation.*; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import java.time.LocalDateTime; + /** * 车辆动作记录 DO * @@ -42,7 +44,7 @@ public class RobotTaskDetailActionLogDO extends BaseDO { */ private String actionMsg; /** - * 动作状态(0:未开始、1:正在进行、2:完成) + * 动作状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常) */ private Integer actionStatus; /** @@ -59,4 +61,19 @@ public class RobotTaskDetailActionLogDO extends BaseDO { */ private Long taskStage; + /** + * 任务号 + */ + private String taskNo; + + /** + * 开始时间 + */ + private LocalDateTime startTime; + + /** + * 结束时间 + */ + private LocalDateTime endTime; + } \ 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/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 bb48170ff..deac22f1f 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 @@ -22,10 +22,12 @@ public interface RobotTaskDetailActionLogMapper extends BaseMapperX