From 64f0f0a32de7a638d4a2a60eb1613269734eefdc Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Fri, 24 Jan 2025 11:18:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=BA=E5=99=A8=E4=BA=BA=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mqtt/service/RobotStatusServiceImpl.java | 7 +- .../system/api/robot/RobotStatusApi.java | 11 +++ .../system/api/robot/dto/RobotStatusDTO.java | 26 +++++ .../api/robot/dto/RobotStatusDataDTO.java | 40 ++++++++ .../robot/dto/RobotStatusDataErrorDTO.java | 18 ++++ .../api/robot/dto/RobotStatusDataPoseDTO.java | 13 +++ .../robot/dto/RobotStatusDataSpeedDTO.java | 18 ++++ .../system/enums/ErrorCodeConstants.java | 3 + .../system/api/robot/RobotStatusApiImpl.java | 50 ++++++++++ .../robot/RobotStatusCodeConstant.java | 11 +++ .../robot/RobotTaskChcheConstant.java | 12 +++ .../admin/robot/RobotWarnMsgController.java | 97 +++++++++++++++++++ .../admin/robot/vo/RobotWarnMsgPageReqVO.java | 41 ++++++++ .../admin/robot/vo/RobotWarnMsgRespVO.java | 47 +++++++++ .../admin/robot/vo/RobotWarnMsgSaveReqVO.java | 36 +++++++ .../dal/dataobject/robot/RobotWarnMsgDO.java | 56 +++++++++++ .../dal/mysql/robot/RobotWarnMsgMapper.java | 32 ++++++ .../robot/RobotInformationService.java | 7 ++ .../robot/RobotInformationServiceImpl.java | 26 +++++ .../service/robot/RobotWarnMsgService.java | 56 +++++++++++ .../robot/RobotWarnMsgServiceImpl.java | 74 ++++++++++++++ .../robot/job/DistributeTasksServiceImpl.java | 62 +++++++++++- .../job/RobotTaskAutoMoveServiceImpl.java | 4 +- 23 files changed, 740 insertions(+), 7 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDTO.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataDTO.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataErrorDTO.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataPoseDTO.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataSpeedDTO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApiImpl.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotStatusCodeConstant.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotWarnMsgController.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotWarnMsgPageReqVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotWarnMsgRespVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotWarnMsgSaveReqVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotWarnMsgDO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotWarnMsgMapper.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgService.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgServiceImpl.java diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/RobotStatusServiceImpl.java b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/RobotStatusServiceImpl.java index 995218f99..207537929 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/RobotStatusServiceImpl.java +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/RobotStatusServiceImpl.java @@ -1,6 +1,9 @@ package cn.iododer.yudao.module.mqtt.service; import cn.iocoder.yudao.module.system.api.robot.RobotStatusApi; +import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDTO; +import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataDTO; +import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -18,6 +21,8 @@ public class RobotStatusServiceImpl implements MqttService{ */ @Override public void analysisMessage(String message) { -// log.info("处理RobotStatusServiceImpl的消息 :{}",message); + log.info("处理RobotStatusServiceImpl的消息 :{}",message); + RobotStatusDTO robotStatusData = JSON.parseObject(message , RobotStatusDTO.class); + robotStatusApi.robotStatusUpdate(robotStatusData); } } diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApi.java index 14faea548..626912b4a 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApi.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApi.java @@ -1,11 +1,22 @@ package cn.iocoder.yudao.module.system.api.robot; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.system.api.robot.dto.RobotCompleteTaskDTO; +import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDTO; +import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataDTO; import cn.iocoder.yudao.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; @FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = @Tag(name = "RPC 服务 - 机器人点位上报") public interface RobotStatusApi { + String PREFIX = ApiConstants.PREFIX + "/task"; + @PostMapping(PREFIX + "/robotStatusUpdate") + @Operation(summary = "机器人点位状态/异常/是否能做任务上报") + void robotStatusUpdate(@RequestBody RobotStatusDTO robotStatusDataDTO); } diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDTO.java new file mode 100644 index 000000000..7a4cde4eb --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDTO.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.system.api.robot.dto; + +import lombok.Data; + +@Data +public class RobotStatusDTO { + + /** + * 错误码 + */ + public String status_code; + /** + * 错误信息 + */ + public String message; + /** + * 解决方法 + */ + public String solution; + /** + * mac地址 + */ + public String mac; + + public RobotStatusDataDTO data; +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataDTO.java new file mode 100644 index 000000000..3a1d15bc5 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataDTO.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.system.api.robot.dto; + +import lombok.Data; + +import java.util.List; + +/** + * 机器人点位/异常/能否做任务 + */ +@Data +public class RobotStatusDataDTO { + /** + * 机器人位姿 + */ + public RobotStatusDataPoseDTO pose2d; + + /** + * 货叉高度 + */ + public String forkHeight; + + /** + * 车辆运行速度 + */ + public RobotStatusDataSpeedDTO agv_speed; + + /** + * 错误信息 + */ + public List err_code; + + /** + * 货物到位传感器触发状态:被按下则 true,否则 false + */ + public Boolean cargo_detected; + /** + * IDLE 和 RUNNING,类型string + */ + public String task_status; +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataErrorDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataErrorDTO.java new file mode 100644 index 000000000..7bc2e9bde --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataErrorDTO.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.system.api.robot.dto; + +import lombok.Data; + +/** + * 错误信息 + */ +@Data +public class RobotStatusDataErrorDTO { + /** + * 错误码 + */ + public String error_code; + /** + * 错误等级 + */ + public String code_level; +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataPoseDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataPoseDTO.java new file mode 100644 index 000000000..719b6a24f --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataPoseDTO.java @@ -0,0 +1,13 @@ +package cn.iocoder.yudao.module.system.api.robot.dto; + +import lombok.Data; + +/** + * 位姿 + */ +@Data +public class RobotStatusDataPoseDTO { + public String y; + public String x; + public String yaw; +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataSpeedDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataSpeedDTO.java new file mode 100644 index 000000000..b1e2808a8 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/robot/dto/RobotStatusDataSpeedDTO.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.system.api.robot.dto; + +import lombok.Data; + +/** + * 车辆运行速度 + */ +@Data +public class RobotStatusDataSpeedDTO { + /** + * 线速度 float 单位m/s + */ + public String linear_speed; + /** + * 角速度 float rad/s + */ + public String angle_speed; +} 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 e26a81efe..e2a5ee87f 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 @@ -217,4 +217,7 @@ public interface ErrorCodeConstants { // ========== 机器人自动移库 1-002-039-000 ========== ErrorCode TASK_AUTO_MOVE_NOT_EXISTS = new ErrorCode(1_002_039_001, "机器人自动移库不存在"); + // ========== 机器人告警信息 1_002_040_001========== + ErrorCode WARN_MSG_NOT_EXISTS = new ErrorCode(1_002_040_001, "机器人告警信息不存在"); + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApiImpl.java new file mode 100644 index 000000000..11dde6259 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApiImpl.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.module.system.api.robot; + +import cn.hutool.core.util.ObjectUtil; +import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDTO; +import cn.iocoder.yudao.module.system.constant.robot.RobotStatusCodeConstant; +import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant; +import cn.iocoder.yudao.module.system.util.redis.RedisUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@Slf4j +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class RobotStatusApiImpl implements RobotStatusApi { + + @Resource + private RedisUtil redisUtil; + + /** + * 更新机器人点位/异常/能否做任务 + * @param robotStatusDataDTO + * @return + */ + @Override + public void robotStatusUpdate(RobotStatusDTO robotStatusDataDTO) { + if (ObjectUtil.isNotNull(robotStatusDataDTO) || RobotStatusCodeConstant.OK.equals(robotStatusDataDTO.getStatus_code()) + || ObjectUtil.isEmpty(robotStatusDataDTO.getMac())) { + + } + + String doTaskKey = RobotTaskChcheConstant.ROBOT_DO_TASK+robotStatusDataDTO.getMac(); + String haveTrayKey = RobotTaskChcheConstant.ROBOT_HAVE_TRAY+robotStatusDataDTO.getMac(); + String pose2dKey = RobotTaskChcheConstant.ROBOT_POSE2D+robotStatusDataDTO.getMac(); + redisUtil.set(doTaskKey, robotStatusDataDTO.getData().getTask_status(),10*60); + redisUtil.set(haveTrayKey,robotStatusDataDTO.getData().getCargo_detected(),10*60); + redisUtil.set(pose2dKey,String.valueOf(robotStatusDataDTO.getData().getCargo_detected()),10*60); + + if (ObjectUtil.isNotNull(robotStatusDataDTO.getData().getErr_code())) { + + } + + + } + + + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotStatusCodeConstant.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotStatusCodeConstant.java new file mode 100644 index 000000000..cd91406bf --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotStatusCodeConstant.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.system.constant.robot; + +/** + * 机器人错误码 + */ +public class RobotStatusCodeConstant { + /** + * 成功、正常 + */ + public static final String OK = "1000"; +} 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 cce69f5f9..e12b5ca79 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 @@ -3,4 +3,16 @@ package cn.iocoder.yudao.module.system.constant.robot; public class RobotTaskChcheConstant { //机器人电量 public static String ROBOT_ELECTRICITY = "robot:information:electricity"; + + //机器人能否做任务 + public static String ROBOT_DO_TASK = "robot:information:do:task"; + + //机器人身上是否有货 + public static String ROBOT_HAVE_TRAY = "robot:information:have:tray"; + + //机器人点位 + public static String ROBOT_POSE2D = "robot:information:pose2d"; + + //机器人mac地址和机器人编号映射 + public static String ROBOT_NO_MAPPING_MAC = "robot:information:no:mapping:mac"; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotWarnMsgController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotWarnMsgController.java new file mode 100644 index 000000000..14576b934 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotWarnMsgController.java @@ -0,0 +1,97 @@ +package cn.iocoder.yudao.module.system.controller.admin.robot; + +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnMsgPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnMsgRespVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnMsgSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO; +import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService; +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("/robot/warn-msg") +@Validated +public class RobotWarnMsgController { + + @Resource + private RobotWarnMsgService warnMsgService; + + @PostMapping("/create") + @Operation(summary = "创建机器人告警信息") + @PreAuthorize("@ss.hasPermission('robot:warn-msg:create')") + public CommonResult createWarnMsg(@Valid @RequestBody RobotWarnMsgSaveReqVO createReqVO) { + return success(warnMsgService.createWarnMsg(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新机器人告警信息") + @PreAuthorize("@ss.hasPermission('robot:warn-msg:update')") + public CommonResult updateWarnMsg(@Valid @RequestBody RobotWarnMsgSaveReqVO updateReqVO) { + warnMsgService.updateWarnMsg(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除机器人告警信息") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('robot:warn-msg:delete')") + public CommonResult deleteWarnMsg(@RequestParam("id") Long id) { + warnMsgService.deleteWarnMsg(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得机器人告警信息") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('robot:warn-msg:query')") + public CommonResult getWarnMsg(@RequestParam("id") Long id) { + RobotWarnMsgDO warnMsg = warnMsgService.getWarnMsg(id); + return success(BeanUtils.toBean(warnMsg, RobotWarnMsgRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得机器人告警信息分页") + @PreAuthorize("@ss.hasPermission('robot:warn-msg:query')") + public CommonResult> getWarnMsgPage(@Valid RobotWarnMsgPageReqVO pageReqVO) { + PageResult pageResult = warnMsgService.getWarnMsgPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, RobotWarnMsgRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出机器人告警信息 Excel") + @PreAuthorize("@ss.hasPermission('robot:warn-msg:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportWarnMsgExcel(@Valid RobotWarnMsgPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = warnMsgService.getWarnMsgPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "机器人告警信息.xls", "数据", RobotWarnMsgRespVO.class, + BeanUtils.toBean(list, RobotWarnMsgRespVO.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/robot/vo/RobotWarnMsgPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotWarnMsgPageReqVO.java new file mode 100644 index 000000000..760e3aff4 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotWarnMsgPageReqVO.java @@ -0,0 +1,41 @@ +package cn.iocoder.yudao.module.system.controller.admin.robot.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 RobotWarnMsgPageReqVO extends PageParam { + + @Schema(description = "AGV编号") + private String robotNo; + + @Schema(description = "告警等级 (1,2,3,4)") + private Integer warnLevel; + + @Schema(description = "告警编号") + private String warnCode; + + @Schema(description = "告警信息") + private String warnMsg; + + @Schema(description = "告警解决方法") + private String warnSolve; + + @Schema(description = "结束时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] solveTime; + + @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/robot/vo/RobotWarnMsgRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotWarnMsgRespVO.java new file mode 100644 index 000000000..366e326d7 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotWarnMsgRespVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.system.controller.admin.robot.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 RobotWarnMsgRespVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26180") + @ExcelProperty("主键ID") + private Long id; + + @Schema(description = "AGV编号") + @ExcelProperty("AGV编号") + private String robotNo; + + @Schema(description = "告警等级 (1,2,3,4)") + @ExcelProperty("告警等级 (1,2,3,4)") + private Integer warnLevel; + + @Schema(description = "告警编号") + @ExcelProperty("告警编号") + private String warnCode; + + @Schema(description = "告警信息") + @ExcelProperty("告警信息") + private String warnMsg; + + @Schema(description = "告警解决方法") + @ExcelProperty("告警解决方法") + private String warnSolve; + + @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("结束时间") + private LocalDateTime solveTime; + + @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/robot/vo/RobotWarnMsgSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotWarnMsgSaveReqVO.java new file mode 100644 index 000000000..7eb9c5aa9 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotWarnMsgSaveReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.system.controller.admin.robot.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 机器人告警信息新增/修改 Request VO") +@Data +public class RobotWarnMsgSaveReqVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26180") + private Long id; + + @Schema(description = "AGV编号") + private String robotNo; + + @Schema(description = "告警等级 (1,2,3,4)") + private Integer warnLevel; + + @Schema(description = "告警编号") + private String warnCode; + + @Schema(description = "告警信息") + private String warnMsg; + + @Schema(description = "告警解决方法") + private String warnSolve; + + @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "结束时间不能为空") + private LocalDateTime solveTime; + +} \ 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/robot/RobotWarnMsgDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotWarnMsgDO.java new file mode 100644 index 000000000..42e1f0a29 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotWarnMsgDO.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.system.dal.dataobject.robot; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +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_warn_msg") +@KeySequence("robot_warn_msg_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RobotWarnMsgDO extends BaseDO { + + /** + * 主键ID + */ + @TableId + private Long id; + /** + * AGV编号 + */ + private String robotNo; + /** + * 告警等级 (1,2,3,4) + */ + private Integer warnLevel; + /** + * 告警编号 + */ + private String warnCode; + /** + * 告警信息 + */ + private String warnMsg; + /** + * 告警解决方法 + */ + private String warnSolve; + /** + * 结束时间 + */ + private LocalDateTime solveTime; + +} \ 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/robot/RobotWarnMsgMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotWarnMsgMapper.java new file mode 100644 index 000000000..a6887c000 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotWarnMsgMapper.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.system.dal.mysql.robot; + +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 cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnMsgPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 机器人告警信息 Mapper + * + * @author 陈宾顺 + */ +@Mapper +public interface RobotWarnMsgMapper extends BaseMapperX { + + default PageResult selectPage(RobotWarnMsgPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(RobotWarnMsgDO::getRobotNo, reqVO.getRobotNo()) + .eqIfPresent(RobotWarnMsgDO::getWarnLevel, reqVO.getWarnLevel()) + .eqIfPresent(RobotWarnMsgDO::getWarnCode, reqVO.getWarnCode()) + .eqIfPresent(RobotWarnMsgDO::getWarnMsg, reqVO.getWarnMsg()) + .eqIfPresent(RobotWarnMsgDO::getWarnSolve, reqVO.getWarnSolve()) + .betweenIfPresent(RobotWarnMsgDO::getSolveTime, reqVO.getSolveTime()) + .betweenIfPresent(RobotWarnMsgDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(RobotWarnMsgDO::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/service/robot/RobotInformationService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationService.java index eb04f4044..24dbcbb89 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationService.java @@ -73,4 +73,11 @@ public interface RobotInformationService { */ List getAllRobot(); + /** + * 查询机器人编号 + * @param mac + * @return + */ + String getRobotNoByMac(String mac); + } \ 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/robot/RobotInformationServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java index e4d05ad32..920cde5a8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java @@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapMapper; import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotInformationMapper; import cn.iocoder.yudao.module.system.enums.robot.RobotTaskModelEnum; import cn.iocoder.yudao.module.system.util.redis.RedisUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -179,4 +180,29 @@ public class RobotInformationServiceImpl implements RobotInformationService { return informationMapper.queryAllByLimit(query); } + /** + * 根据mac查询机器人编号 + * @param mac + * @return + */ + @Override + public String getRobotNoByMac(String mac) { + if (ObjectUtil.isEmpty(mac)) { + return ""; + } + String robotNo = (String) redisUtil.get(RobotTaskChcheConstant.ROBOT_NO_MAPPING_MAC + mac); + + if (ObjectUtil.isNotEmpty(robotNo)) { + return robotNo; + } + + RobotInformationDO robotInformationDO = informationMapper.selectOne(new LambdaQueryWrapper() + .eq(RobotInformationDO::getMacAddress, mac) + .last("limit 1")); + if (ObjectUtil.isNotEmpty(robotInformationDO)) { + return robotInformationDO.getRobotNo(); + } + return ""; + } + } \ 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/robot/RobotWarnMsgService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgService.java new file mode 100644 index 000000000..09c52e5b0 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.system.service.robot; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnMsgPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnMsgSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO; + +/** + * 机器人告警信息 Service 接口 + * + * @author 陈宾顺 + */ +public interface RobotWarnMsgService { + + /** + * 创建机器人告警信息 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createWarnMsg(@Valid RobotWarnMsgSaveReqVO createReqVO); + + /** + * 更新机器人告警信息 + * + * @param updateReqVO 更新信息 + */ + void updateWarnMsg(@Valid RobotWarnMsgSaveReqVO updateReqVO); + + /** + * 删除机器人告警信息 + * + * @param id 编号 + */ + void deleteWarnMsg(Long id); + + /** + * 获得机器人告警信息 + * + * @param id 编号 + * @return 机器人告警信息 + */ + RobotWarnMsgDO getWarnMsg(Long id); + + /** + * 获得机器人告警信息分页 + * + * @param pageReqVO 分页查询 + * @return 机器人告警信息分页 + */ + PageResult getWarnMsgPage(RobotWarnMsgPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgServiceImpl.java new file mode 100644 index 000000000..e9ec9f83f --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotWarnMsgServiceImpl.java @@ -0,0 +1,74 @@ +package cn.iocoder.yudao.module.system.service.robot; + +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnMsgPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnMsgSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO; +import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotWarnMsgMapper; +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.WARN_MSG_NOT_EXISTS; + +/** + * 机器人告警信息 Service 实现类 + * + * @author 陈宾顺 + */ +@Service +@Validated +public class RobotWarnMsgServiceImpl implements RobotWarnMsgService { + + @Resource + private RobotWarnMsgMapper warnMsgMapper; + + @Override + public Long createWarnMsg(RobotWarnMsgSaveReqVO createReqVO) { + // 插入 + RobotWarnMsgDO warnMsg = BeanUtils.toBean(createReqVO, RobotWarnMsgDO.class); + warnMsgMapper.insert(warnMsg); + // 返回 + return warnMsg.getId(); + } + + @Override + public void updateWarnMsg(RobotWarnMsgSaveReqVO updateReqVO) { + // 校验存在 + validateWarnMsgExists(updateReqVO.getId()); + // 更新 + RobotWarnMsgDO updateObj = BeanUtils.toBean(updateReqVO, RobotWarnMsgDO.class); + warnMsgMapper.updateById(updateObj); + } + + @Override + public void deleteWarnMsg(Long id) { + // 校验存在 + validateWarnMsgExists(id); + // 删除 + warnMsgMapper.deleteById(id); + } + + private void validateWarnMsgExists(Long id) { + if (warnMsgMapper.selectById(id) == null) { + throw exception(WARN_MSG_NOT_EXISTS); + } + } + + @Override + public RobotWarnMsgDO getWarnMsg(Long id) { + return warnMsgMapper.selectById(id); + } + + @Override + public PageResult getWarnMsgPage(RobotWarnMsgPageReqVO pageReqVO) { + return warnMsgMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/DistributeTasksServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/DistributeTasksServiceImpl.java index 195403b9a..e2f2c66d0 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/DistributeTasksServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/DistributeTasksServiceImpl.java @@ -29,6 +29,8 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.*; +import java.util.stream.Collectors; + import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; @@ -161,15 +163,17 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { Set taskIds = new HashSet<>(); //需要更新的机器人编号 Set robotNos = new HashSet<>(); + //当前需要移动的库位id + Set doingLocationIds = new HashSet<>(); for (RobotTaskDetailDO taskDetailDO : taskDetailDOS) { if (ObjectUtil.isEmpty(robots)) { break; } - +// todo 后续建个移库记录表, 记录 库位A移动到库位B RobotTaskTypeEnum robotTaskType = RobotTaskTypeEnum.getRobotTaskType(taskDetailDO.getTaskType()); switch (robotTaskType) { case TAKE_RELEASE: - doTakeReleaseDistribute(taskDetailDO, robots,robotTaskDOS,taskIds,updateTaskDetails,robotNos); + doTakeReleaseDistribute(taskDetailDO, robots,robotTaskDOS,taskIds,updateTaskDetails,robotNos,doingLocationIds); break; /*case PARK: doParkDistribute(taskDetailDO, robots,robotTaskDOS); @@ -397,7 +401,8 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { @Transactional(rollbackFor = Exception.class) public void doTakeReleaseDistribute(RobotTaskDetailDO taskDetailDO, List robots, List robotTaskDOS,Set taskIdSet, - List updateTaskDetail, Set robotNos) { + List updateTaskDetail, Set robotNos + ,Set doingLocationIds) { WareHouseLocationDO query = WareHouseLocationDO.builder().id(taskDetailDO.getFromLocationId()).build(); WareHouseLocationDO fromLocation = locationMapper.queryAllByLimit(query); @@ -413,7 +418,15 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { return; } - // todo 需要校验取放线库, 都没有移库的任务 + // 取货/放货 校验有没有其他库位挡住 + Boolean fromCanMove = checkCanMove(fromLocation,doingLocationIds); + if (!fromCanMove) { + return; + } + Boolean toCanMove = checkCanMove(toLocation,doingLocationIds); + if (!toCanMove) { + return; + } RobotAcceptTaskDTO robotTaskDO = new RobotAcceptTaskDTO(); robotTaskDO.setOrder_id(taskDetailDO.getId().toString()); @@ -603,6 +616,47 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { taskIdSet.add(taskDetailDO.getRobotTaskId()); } + /** + * 校验当前库位能否取放 + * @param fromLocation + * @return false : 有货,不能移动 ; true: 没货, 能移动 + */ + private Boolean checkCanMove(WareHouseLocationDO fromLocation, Set locationIds) { + Long laneId = fromLocation.getLaneId(); + if (ObjectUtil.isEmpty(laneId)) { + Set doingLocationIds = new HashSet<>(); + doingLocationIds.add(fromLocation.getId()); + List locationDOS = locationMapper.selectNeedMoveLocation(doingLocationIds); + locationDOS = locationDOS.stream() + .filter(v -> !locationIds.contains(v.getId())) + .collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(locationDOS)) { + // todo 后续记录到异常表 + log.info("普通库位--库位上有其他货物, 库位号:{} ,无法进行移动 :{}",fromLocation.getLocationNo() ,locationDOS); + return false; + } + } else { + List locations = new ArrayList<>(); + WareHouseLocationDO location = WareHouseLocationDO.builder().locationNumber(fromLocation.getLocationNumber()) + .locationUseStatus(LocationUseStatusEnum.YES.getType()) + .laneId(fromLocation.getLaneId()).build(); + locations.add(location); + + List wareHouseLocationDOS = locationMapper.selectLocationByList(locations); + wareHouseLocationDOS = wareHouseLocationDOS.stream() + .filter(v -> !locationIds.contains(v.getId())) + .collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(wareHouseLocationDOS)) { + // todo 后续记录到异常表 + log.info("线库-当前库位上有其他货物, 库位号:{},无法进行移动 :{}",fromLocation.getLocationNo() ,wareHouseLocationDOS); + return false; + } + } + + locationIds.add(fromLocation.getId()); + return true; + } + public Pair getMadAddressRobotNo(RobotTaskDetailDO taskDetailDO, List robots, WareHouseLocationDO fromLocation, WareHouseLocationDO toLocation) { String macAddress = ""; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotTaskAutoMoveServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotTaskAutoMoveServiceImpl.java index 2f0b5c50e..642879895 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotTaskAutoMoveServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotTaskAutoMoveServiceImpl.java @@ -213,13 +213,13 @@ public class RobotTaskAutoMoveServiceImpl implements RobotTaskAutoMoveService { } List locationDOS = locationMapper.selectNeedMoveLocation(doingLocationIds); if (ObjectUtil.isEmpty(locationDOS)) { - log.info("暂无需要自动移库的库位 :{}" ,robotTaskDetailDO); + log.info("暂无需要自动移库的库位 :{}" ,String.valueOf(robotTaskDetailDO)); continue; } boolean enableOrLock = locationDOS.stream().anyMatch(v -> LocationEnableEnum.NO.getType().equals(v.getLocationEnable()) || LocationLockEnum.NO.getType().equals(v.getLocationLock())); if (enableOrLock) { - log.info("此库位被锁定或者禁用,无法执行移库 :{}",locationDOS); + log.info("此库位被锁定或者禁用,无法执行移库 :{}",String.valueOf(locationDOS)); //todo 后期加到告警表里面 方便排查问题 continue; }