From a57374f2c09315a9be1e91359b28d769213c2095 Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Sat, 8 Mar 2025 17:04:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E4=BB=BB=E5=8A=A1=E4=B8=8B=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/task/dto/RobotAssignTaskArgDTO.java | 17 ++ .../mqtt/api/task/dto/RobotAssignTaskDTO.java | 18 +++ .../api/task/dto/RobotAssignTaskDataDTO.java | 11 ++ .../module/system/api/path/PathApiImpl.java | 3 +- .../system/api/robot/RobotStatusApiImpl.java | 12 +- .../admin/positionmap/dto/NodeBaseDTO.java | 3 + .../vo/PositionMapItemPageReqVO.java | 4 + .../positionmap/vo/PositionMapItemRespVO.java | 4 + .../vo/PositionMapItemSaveReqVO.java | 3 + .../admin/robot/task/TaskAssignDTO.java | 25 +++ .../positionmap/PositionMapItemDO.java | 6 + .../system/enums/path/PathTaskType.java | 46 ++++++ .../robot/task/RobotCommandTypeEnum.java | 18 +++ .../service/robot/RobotTaskService.java | 6 + .../service/robot/RobotTaskServiceImpl.java | 153 +++++++++++++++++- .../src/main/resources/application-local.yaml | 3 + 16 files changed, 321 insertions(+), 11 deletions(-) create mode 100644 yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskArgDTO.java create mode 100644 yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskDTO.java create mode 100644 yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskDataDTO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/task/TaskAssignDTO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/path/PathTaskType.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java 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 new file mode 100644 index 000000000..9d8ed7fa8 --- /dev/null +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskArgDTO.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.mqtt.api.task.dto; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class RobotAssignTaskArgDTO { + //检测托盘时需要抬叉的高度,现在是需要,以后不用了 + private Double check_pallet_height; + //取货高度 + private Double height; + //整型 取第几层货 + private Double level; + //叉起货需要在原来高度基础上偏移的高度 + private Double offset_height; +} 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 new file mode 100644 index 000000000..e91d9ed97 --- /dev/null +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskDTO.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.mqtt.api.task.dto; + +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +/** + * 下发任务给机器人 + */ +@Data +@Builder +public class RobotAssignTaskDTO { + private String topic; + private String order_id; + private String order_type; + 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 new file mode 100644 index 000000000..9bf995ea6 --- /dev/null +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/task/dto/RobotAssignTaskDataDTO.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.mqtt.api.task.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class RobotAssignTaskDataDTO { + private String command_type; + private List arg; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApiImpl.java index bbb598a38..381daed68 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApiImpl.java @@ -68,10 +68,11 @@ public class PathApiImpl implements PathApi { public void ppDistributionTask(String message) { taskExecutor.execute(() -> { TenantContextHolder.setTenantId(1L); + taskService.assignTasks(message); if (ObjectUtil.isEmpty(message)) { return; } - taskService.ppDistributionTask(message); +// taskService.ppDistributionTask(message); 废弃了 }); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApiImpl.java index fb3296c3e..10f59f2b7 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotStatusApiImpl.java @@ -84,10 +84,10 @@ public class RobotStatusApiImpl implements RobotStatusApi { String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT_SOC + robotStatusDataDTO.getMac(); // todo 后续需要改为从车机上报 - /*redisUtil.set(taskStatusKey, robotStatusDataDTO.getData().getTask_status(), robotPositionCacheTime); - redisUtil.set(cargoDetectedKey, robotStatusDataDTO.getData().getCargo_detected(), robotPositionCacheTime);*/ - redisUtil.set(taskStatusKey, "IDLE", robotPositionCacheTime); - redisUtil.set(cargoDetectedKey, false, robotPositionCacheTime); + redisUtil.set(taskStatusKey, robotStatusDataDTO.getData().getTask_status(), robotPositionCacheTime); + redisUtil.set(cargoDetectedKey, robotStatusDataDTO.getData().getCargo_detected(), robotPositionCacheTime); + /*redisUtil.set(taskStatusKey, "IDLE", robotPositionCacheTime); + redisUtil.set(cargoDetectedKey, false, robotPositionCacheTime);*/ Object object = redisUtil.get(pose2dKey); RobotStatusDataPoseDTO robotStatusDataPoseDTO = JSONUtil.toBean((String) object, RobotStatusDataPoseDTO.class); @@ -105,8 +105,8 @@ public class RobotStatusApiImpl implements RobotStatusApi { robotStatusDataPoseDTO.setArea(robotStatusDataDTO.getData().getFloor_zone().getArea()); } - robotStatusDataPoseDTO.setFloor("1"); - robotStatusDataPoseDTO.setArea("D区"); + /*robotStatusDataPoseDTO.setFloor("1"); + robotStatusDataPoseDTO.setArea("C区");*/ robotStatusDataPoseDTO.setRobotNo(robotNo); redisUtil.set(pose2dKey, JSON.toJSONString(robotStatusDataPoseDTO), robotPositionCacheTime); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/NodeBaseDTO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/NodeBaseDTO.java index c49a8c187..3380705a2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/NodeBaseDTO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/NodeBaseDTO.java @@ -43,4 +43,7 @@ public class NodeBaseDTO { @Schema(description = "排序的位置,越大越优先堆放") private Long locationNumber; + + @Schema(description = " 弧度") + private String locationYaw; } 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 6f9f734d1..4241ed9bf 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 @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.system.controller.admin.positionmap.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -48,4 +49,7 @@ public class PositionMapItemPageReqVO extends PageParam { @Schema(description = "弧度") private String locationYaw; + @Schema(description = "排序的位置,越大越优先堆放") + private Long locationNumber; + } 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 12c3b278b..81ce4f63e 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 @@ -66,4 +66,8 @@ public class PositionMapItemRespVO { @ExcelProperty("弧度") private String locationYaw; + @Schema(description = "排序的位置,越大越优先堆放") + @ExcelProperty("排序的位置,越大越优先堆放") + private Long locationNumber; + } 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 d445ceab8..424f8793d 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 @@ -39,4 +39,7 @@ public class PositionMapItemSaveReqVO { @Schema(description = "弧度") private String locationYaw; + + @Schema(description = "排序的位置,越大越优先堆放") + private Long locationNumber; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/task/TaskAssignDTO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/task/TaskAssignDTO.java new file mode 100644 index 000000000..d19977dd5 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/task/TaskAssignDTO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.system.controller.admin.robot.task; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * PP分配的任务 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TaskAssignDTO { + @Schema(description = "robot_task_detail/robot_charge_log 的 id") + private Long id; + + @Schema(description = "任务类型(TAKE_RELEASE、CHARGE、MOVE、TAKE、RELEASE、AUTO_CHARGE)") + private String type; + + @Schema(description = "AGV编号") + private String robotNo; +} 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 ca59fd72b..346067a29 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 @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.system.dal.dataobject.positionmap; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.*; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; @@ -72,4 +73,9 @@ public class PositionMapItemDO extends BaseDO { */ private String locationYaw; + /** + * 排序的位置,越大越优先堆放 + */ + private Long locationNumber; + } 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 new file mode 100644 index 000000000..17c1163ca --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/path/PathTaskType.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.system.enums.path; + +import cn.iocoder.yudao.module.system.enums.robot.RobotTaskTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 下发路径规划的任务类型 + */ +@Getter +@AllArgsConstructor +public enum PathTaskType { + TAKE_RELEASE("TAKE_RELEASE","取放货"), + CHARGE("CHARGE","充电任务"), + MOVE("MOVE","移动任务"), + TAKE("TAKE","仅取货"), + RELEASE("RELEASE","仅放货"), + AUTO_CHARGE("AUTO_CHARGE","自动充电"); + /** + * 类型 + */ + private final String type; + + private final String msg; + + /** + * 仅设计个别类型 + * @param taskType + * @return + */ + public static String getTaskType(Integer taskType) { + if (RobotTaskTypeEnum.TAKE_RELEASE.getType().equals(taskType)) { + return TAKE_RELEASE.getType(); + }else if (RobotTaskTypeEnum.CHARGE.getType().equals(taskType)) { + return CHARGE.getType(); + }else if (RobotTaskTypeEnum.MOVE.getType().equals(taskType)) { + return MOVE.getType(); + }else if (RobotTaskTypeEnum.TAKE.getType().equals(taskType)) { + return TAKE.getType(); + }else if (RobotTaskTypeEnum.RELEASE.getType().equals(taskType)) { + return RELEASE.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/task/RobotCommandTypeEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java new file mode 100644 index 000000000..da0fbcc47 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotCommandTypeEnum.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.system.enums.robot.task; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum RobotCommandTypeEnum { + WORD_PICK_UP_GOODS("WORD_PICK_UP_GOODS","取货"), + WORD_DROP_OFF_GOODS("WORD_DROP_OFF_GOODS","放货"); + /** + * 类型 + */ + 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/service/robot/RobotTaskService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java index 8272391bf..7f71af3ac 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java @@ -85,4 +85,10 @@ public interface RobotTaskService extends IService { void addCycle(Long id, List taskDetailList); void closeTask(@Valid RobotTaskSaveReqVO updateReqVO); + + /** + * PP分配任务 + * @param message + */ + void assignTasks(String message); } 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 dc687acc8..71927bca4 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 @@ -11,6 +11,9 @@ 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.enums.task.ExecutionTypeEnum; import cn.iocoder.yudao.module.system.api.path.vo.RobotClosePathPlantingDTO; @@ -21,6 +24,7 @@ import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant; import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant; import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogResoVO; import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskAssignDTO; import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskPPDistribution; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*; import cn.iocoder.yudao.module.system.dal.dataobject.cycle.TaskCycleDO; @@ -44,9 +48,11 @@ import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskDetailMapper; import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskMapper; 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.PathTaskType; 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; @@ -133,6 +139,12 @@ public class RobotTaskServiceImpl extends ServiceImpl deviceNoMap = new HashMap<>(); + RobotChargeLogDO robotChargeLogs = null; + + /** + * 充电 + */ + if (PathTaskType.AUTO_CHARGE.getType().equals(taskAssignDTO.getType())) { + robotChargeLogs = chargeLogMapper.selectById(taskAssignDTO.getId()); + + robotChargeLogs.setTaskStatus(ChargeTaskStatusEnum.DOING.getType()); + chargeLogMapper.updateBatch(robotChargeLogs); + + robotInformationMapper.updateRobotListStatus(taskAssignDTO.getRobotNo(), RobotStatusEnum.CHARGE.getType(), taskAssignDTO.getId()); + if (ObjectUtil.isNotEmpty(robotChargeLogs.getTaskDetailId())) { + deviceNoMap.put(robotChargeLogs.getTaskDetailId(), robotChargeLogs.getDeviceNo()); + detailId = robotChargeLogs.getTaskDetailId(); + } + } else { + chargeDone(taskAssignDTO.getRobotNo()); + robotInformationMapper.updateRobotListStatus(taskAssignDTO.getRobotNo(), RobotStatusEnum.DOING.getType(), taskAssignDTO.getId()); + detailId = taskAssignDTO.getId(); + } + + RobotTaskDetailDO robotTaskDetailDO = null; + if (ObjectUtil.isNotEmpty(detailId)) { + robotTaskDetailDO = setTaskDoing(detailId, taskAssignDTO.getRobotNo(), deviceNoMap); + } + + if (ObjectUtil.isNotEmpty(robotTaskDetailDO)) { + sendTaskToRobot(robotTaskDetailDO, taskAssignDTO); + } + } + + /** + * 发送任务给车机 + * + * @param v + */ + private void sendTaskToRobot(RobotTaskDetailDO v, TaskAssignDTO taskAssignDTO) { + String mac = robotInformationService.getMacByRobotNo(v.getRobotNo()); + String orderType = PathTaskType.getTaskType(v.getTaskType()); + RobotAssignTaskDTO build = RobotAssignTaskDTO.builder() + .topic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac) + .order_type(orderType) + .order_id(v.getId().toString()) + .build(); + if (PathTaskType.TAKE_RELEASE.getType().equals(taskAssignDTO.getType()) + || PathTaskType.TAKE.getType().equals(taskAssignDTO.getType()) + || PathTaskType.RELEASE.getType().equals(taskAssignDTO.getType())) { + List robotAssignTaskData = getRobotAssignTaskData(v,taskAssignDTO); + build.setData(robotAssignTaskData); + } + log.info("发送任务给车机 :{}",JSON.toJSONString(build)); + commonApi.commonMethod(build, build.getTopic()); + } + + public List getRobotAssignTaskData(RobotTaskDetailDO v,TaskAssignDTO taskAssignDTO) { + + RobotAssignTaskDataDTO take = null; + RobotAssignTaskDataDTO release = 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() + .level(Double.valueOf(location.getLocationStorey())) + .height(Double.valueOf(location.getLocationTrayHeight() + "")) + .check_pallet_height(checkPalletHeight) + .offset_height(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() + .level(Double.valueOf(location.getLocationStorey())) + .height(Double.valueOf(location.getLocationTrayHeight() + "")) + .check_pallet_height(checkPalletHeight) + .offset_height(offsetHeight) + .build(); + release.setArg(Arrays.asList(build)); + } + + List list = new ArrayList<>(); + if (ObjectUtil.isNotEmpty(take)) { + list.add(take); + } + if (ObjectUtil.isNotEmpty(release)) { + list.add(release); + } + return list; + } + + public RobotTaskDetailDO setTaskDoing(Long detailId, String robotNo, Map deviceNoMap) { + RobotTaskDetailDO taskDetailDO = taskDetailMapper.selectById(detailId); + taskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType()); + taskDetailDO.setStartTime(LocalDateTime.now()); + if (ObjectUtil.isEmpty(taskDetailDO.getRobotNo())) { + taskDetailDO.setRobotNo(robotNo); + } + if (ObjectUtil.isEmpty(taskDetailDO.getToLocationNo()) + && ObjectUtil.isNotEmpty(deviceNoMap.get(taskDetailDO.getId()))) { + taskDetailDO.setToLocationNo(deviceNoMap.get(taskDetailDO.getId())); + } + + taskDetailMapper.updateBatch(taskDetailDO); + RobotTaskDO task = taskMapper.selectById(taskDetailDO.getRobotTaskId()); + task.setTaskStatus(RobotTaskStatusEnum.DOING.getType()); + taskMapper.updateBatch(task); + return taskDetailDO; + } + /** * 设置放货和取货的id * @@ -994,11 +1138,12 @@ public class RobotTaskServiceImpl extends ServiceImpl