diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDTO.java new file mode 100644 index 000000000..10d13a78d --- /dev/null +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDTO.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.mqtt.api.path.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PathPosedsDTO { + private String order_id; + private String order_type; + private String robotNo; + private List data; +} diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDataArgDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDataArgDTO.java new file mode 100644 index 000000000..ef72824b1 --- /dev/null +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDataArgDTO.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.module.mqtt.api.path.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PathPosedsDataArgDTO { + private List pose2ds; +} diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDataArgPosedDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDataArgPosedDTO.java new file mode 100644 index 000000000..c24e91545 --- /dev/null +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDataArgPosedDTO.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.mqtt.api.path.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PathPosedsDataArgPosedDTO { + @Schema(description = "唯一key,导航下发给RCS应用", example = "20863") + private Integer poseId; + + private Double x; + + private Double y; + + private Double yaw; + + @Schema(description = "开始控制点x轴") + private Double beginControlX; + + @Schema(description = "开始控制点y轴") + private Double beginControlY; + + @Schema(description = "结束控制点x轴") + private Double endControlX; + + @Schema(description = "结束控制点y轴") + private Double endControlY; + + @Schema(description = "是否是新路径,存在旧路径表示有切换任务,只有新路径表示无切换任务", example = "20863") + private Integer isNewPose; +} diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDataDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDataDTO.java new file mode 100644 index 000000000..b8452f95c --- /dev/null +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathPosedsDataDTO.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.mqtt.api.path.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PathPosedsDataDTO { + private PathPosedsDataArgDTO arg; + private Integer is_work; +} diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/config/MqttFactory.java b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/config/MqttFactory.java index c564b3c18..d073045e2 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/config/MqttFactory.java +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/config/MqttFactory.java @@ -143,6 +143,8 @@ public class MqttFactory { return BeanUtils.getBean(PathPlanningDistributionTaskServiceImpl.class); case TASK_ASSIGNMENT_FAIL: return BeanUtils.getBean(PathPlanningDistributionFailServiceImpl.class); + case ROBOT_TASK_MOVE: + return BeanUtils.getBean(PathPlanningMoveServiceImpl.class); default : return BeanUtils.getBean(RobotTaskStatusServiceImpl.class); } diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/enums/DefineSubTopicEnum.java b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/enums/DefineSubTopicEnum.java index 713276f20..fb2e37cff 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/enums/DefineSubTopicEnum.java +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/enums/DefineSubTopicEnum.java @@ -20,6 +20,7 @@ public enum DefineSubTopicEnum { ROBOT_GENERICS_STATUS("ROBOT_GENERICS_STATUS", 0,"机器人异常"), SYNCHRONOUS_ALL_MAP_REQUEST("SYNCHRONOUS_ALL_MAP_REQUEST", 0,"路径规划需要初始数据上报"), TASK_ASSIGNMENT_FEEDBACK("TASK_ASSIGNMENT_FEEDBACK", 0,"路径规划任务分配上报"), + ROBOT_TASK_MOVE ("ROBOT_TASK_MOVE ", 0,"路径规划上报实时路径"), TASK_ASSIGNMENT_FAIL("TASK_ASSIGNMENT_FAIL", 0,"路径规划失败上报"); diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/PathPlanningMoveServiceImpl.java b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/PathPlanningMoveServiceImpl.java new file mode 100644 index 000000000..0bfb8ce31 --- /dev/null +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/service/PathPlanningMoveServiceImpl.java @@ -0,0 +1,21 @@ +package cn.iododer.yudao.module.mqtt.service; + +import cn.iocoder.yudao.module.system.api.path.PathApi; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Slf4j +@Service +public class PathPlanningMoveServiceImpl implements MqttService{ + + @Resource + private PathApi pathApi; + + @Override + public void analysisMessage(String message) { + log.info("收到路径规划的消息"); + pathApi.pathPlanningMove(message); + } +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApi.java index 617f30fe3..eb079e8d4 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApi.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/path/PathApi.java @@ -24,4 +24,8 @@ public interface PathApi { @PostMapping(PREFIX + "/ppDistributionTaskFail") @Operation(summary = "路径规划需要初始化信息") void ppDistributionTaskFail(@RequestParam("message") String message); + + @PostMapping(PREFIX + "/pathPlanningMove") + @Operation(summary = "路径规划需要初始化信息") + void pathPlanningMove(@RequestParam("message") String message); } 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 381daed68..7e31eabcd 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 @@ -85,5 +85,13 @@ public class PathApiImpl implements PathApi { warnMsgService.addWarnMsg(message); } + @Override + public void pathPlanningMove(String message) { + log.info("收到路径规划路径的消息 :{}", message); + taskExecutor.execute(() -> { + pathPlanningService.sendPosedsToRobot(message); + }); + } + } 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 62a43ec2d..f6a174850 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 @@ -80,5 +80,10 @@ public class PathPlanningTopicConstant { */ public static String CLEAN_AGV = "CLEAN_AGV"; + /** + * 实时行为上报 + */ + public static String UPDATE_ACTION = "UPDATE_ACTION"; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTopicConstant.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTopicConstant.java index 591c2cf0c..3b5e3c92d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTopicConstant.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/robot/RobotTopicConstant.java @@ -8,4 +8,8 @@ public class RobotTopicConstant { * 下发任务给车机的topic (拼接mac地址) */ public static String ROBOT_TASK_TOPIC = "ROBOT_TASK_"; + /** + * 下发让车子移动 + */ + public static String ROBOT_TASK_MOVE_TOPIC = "ROBOT_TASK_MOVE"; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tool/ToolsController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tool/ToolsController.java index 5eff65d6c..6899a65bc 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tool/ToolsController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tool/ToolsController.java @@ -2,16 +2,17 @@ package cn.iocoder.yudao.module.system.controller.admin.tool; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationSaveReqVO; import cn.iocoder.yudao.module.system.service.tool.ToolsService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -21,6 +22,20 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Validated public class ToolsController { + @Resource + private ToolsService toolsService; + @PostMapping("/cleanAgv") + @Operation(summary = "路径规划---清除交管") + @PreAuthorize("@ss.hasPermission('robot:information:cleanAgv')") + public CommonResult cleanAgv(@Valid @RequestParam @NotBlank(message = "请传机器人编号") String robotNo) { + return success(toolsService.cleanAgv(robotNo)); + } + @PostMapping("/closeTaskDetail") + @Operation(summary = "关闭任务(同步路径规划和车机)-不改变数据库任务状态") + @PreAuthorize("@ss.hasPermission('robot:information:closeTaskDetail')") + public CommonResult closeTaskDetail(@Valid @RequestParam @NotBlank(message = "请传任务id") String taskDetailId) { + return success(toolsService.closeTaskDetail(taskDetailId)); + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tool/dto/CleanAgvDTO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tool/dto/CleanAgvDTO.java new file mode 100644 index 000000000..209bd877f --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tool/dto/CleanAgvDTO.java @@ -0,0 +1,14 @@ +package cn.iocoder.yudao.module.system.controller.admin.tool.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CleanAgvDTO { + private String robotNo; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/robot/RobotJob.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/robot/RobotJob.java index 4f6abe99c..88d23ff61 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/robot/RobotJob.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/robot/RobotJob.java @@ -46,25 +46,6 @@ public class RobotJob { @Autowired private RobotPathPlanningService robotPathPlanningService; - //下发任务给车机---废弃---因为这一版没有结合路径规划 -// @XxlJob("DistributeTasksJob") - @TenantJob - public void distributeTasksJob() throws InterruptedException { - log.info("----下发任务给车机----"); - RLock lock = redissonUtils.getLock(RobotCacheLockEnum.ROBOT_TASK_DISTRIBUTE_LOCK.getKey()); - if (lock.tryLock()){ - try { - distributeTasksService.distributeTasks(); - } catch (Exception e) { - log.error("下发任务给车机出现异常 :{}",e); - } finally { - lock.unlock(); - } - }else { - log.info("下发任务未获取到锁"); - throw exception(REDISSON_NOT_OBTAIN_LOCK); - } - } //下发自动移库任务--- 废弃---产品不要自动移库 // @XxlJob("DistributeAutoMoveJob") 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 9a8cc5869..cdcbca115 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 @@ -23,4 +23,10 @@ public interface PathPlanningService { void synchronousItemUpdate(PositionMapItemSaveReqVO positionMapItemSaveReqVO); void robotDimensions(); + + /** + * 发送路径给车机 + * @param message + */ + void sendPosedsToRobot(String message); } 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 88abea16f..0c44e712a 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 @@ -2,12 +2,15 @@ package cn.iocoder.yudao.module.system.service.path; import cn.hutool.core.util.ObjectUtil; 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.system.constant.path.PathPlanningTopicConstant; +import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemSaveReqVO; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLineSaveReqVO; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapSaveReqVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskAssignDTO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapLineDO; @@ -18,7 +21,10 @@ 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.line.DirectionEnum; import cn.iocoder.yudao.module.system.enums.path.PathTypeEnum; +import cn.iocoder.yudao.module.system.service.robot.RobotInformationService; +import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -59,6 +65,12 @@ public class PathPlanningServiceImpl implements PathPlanningService { @Resource private RobotInformationMapper informationMapper; + @Autowired + private RobotInformationService robotInformationService; + + @Resource + private CommonApi commonApi; + /** * 同步ware_position_map_line的点位信息 */ @@ -372,6 +384,18 @@ public class PathPlanningServiceImpl implements PathPlanningService { pathPlanningApi.synchronousLineObject(list, PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS); } + /** + * 发送路径给车机 + * @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; + commonApi.commonMethod(message, topic); + } + 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/RobotInformationService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationService.java index 60280db8d..080ff0191 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 @@ -131,4 +131,6 @@ public interface RobotInformationService extends IService { * @return */ List getListByMapId(Long mapId); + + RobotInformationDO getRobotInformationByDetailId(String taskDetailId); } 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 2f0c592b1..4c3d84c53 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 @@ -558,4 +558,12 @@ public class RobotInformationServiceImpl extends ServiceImpl getListByMapId(Long mapId) { return informationMapper.getListByMapId(mapId); } + + @Override + public RobotInformationDO getRobotInformationByDetailId(String taskDetailId) { + RobotInformationDO robotInformationDO = informationMapper.selectOne(new LambdaQueryWrapper() + .eq(RobotInformationDO::getTaskDetailId, taskDetailId) + .last("limit 1")); + return robotInformationDO; + } } 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 7f71af3ac..62ee6a491 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 @@ -68,7 +68,7 @@ public interface RobotTaskService extends IService { * PP分配的任务 * @param message */ - void ppDistributionTask(String message); +// void ppDistributionTask(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 71927bca4..64232bebe 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 @@ -54,7 +54,7 @@ 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.service.robot.job.RobotCommonTaskService; import cn.iocoder.yudao.module.system.util.redis.RedisUtil; import cn.iocoder.yudao.module.system.util.redis.RedissonUtils; import com.alibaba.fastjson.JSON; @@ -124,9 +124,6 @@ public class RobotTaskServiceImpl extends ServiceImpl deviceNoMap = new HashMap<>(); RobotChargeLogDO robotChargeLogs = null; - /** + *//** * 充电 - */ + *//* if (TaskTypeEnum.CHARGE.getType().equals(distribution.getType())) { robotChargeLogs = chargeLogMapper.selectById(distribution.getId()); @@ -1174,9 +1171,9 @@ public class RobotTaskServiceImpl extends ServiceImpl, List> robotAndTaskDetails = getRobotAndTaskDetails(); - List robots = robotAndTaskDetails.getLeft(); - if (ObjectUtil.isEmpty(robots)) { - return; - } - - List taskDetailDOS = robotAndTaskDetails.getRight(); - if (ObjectUtil.isEmpty(taskDetailDOS)) { - return; - } - -// List cycleTaskDetails = robotTaskMapper.getCycleTaskDetails(); - //任务下发给机器人 - distributeTasks(robots, taskDetailDOS); - } /** * 获取待执行的机器人和任务 @@ -295,558 +272,9 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { return robotTaskDetailMapper.getUnDoTaskDetail(montageTaskIds, singleTaskIds); } - /** - * 下发任务给机器人 - * - * @param robots - * @param taskDetailDOS - */ - @Transactional(rollbackFor = Exception.class) - public void distributeTasks(List robots, List taskDetailDOS) { - List robotTaskDOS = new ArrayList<>(); - //需要更新的任务明细id - List updateTaskDetails = new ArrayList<>(); - //需要更新的任务id - 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, doingLocationIds); - break; - /*case PARK: - doParkDistribute(taskDetailDO, robots,robotTaskDOS); - break; - case CHARGE: - doChargeDistribute(taskDetailDO,robots,robotTaskDOS); - break; - case MOVE: - doMoveDistribute(taskDetailDO, robots,robotTaskDOS); - break; - case TAKE: - doTakeDistribute(taskDetailDO, robots,robotTaskDOS); - break; - case RELEASE: - doReleaseDistribute(taskDetailDO, robots,robotTaskDOS); - break; - case SCAN: - doScanDistribute(taskDetailDO,robots,robotTaskDOS); - break; - case DETECTING_TRAYS: - doDetectingTraysDistribute(taskDetailDO,robots,robotTaskDOS); - break;*/ - default: - log.error("下发任务的类型不存在"); - } - } - if (ObjectUtil.isNotEmpty(robotTaskDOS)) { - log.info("任务下发给车机 :{}", JSON.toJSONString(robotTaskDOS)); - robotTaskApi.sendTaskToRobot(robotTaskDOS); - } - if (ObjectUtil.isNotEmpty(taskIds)) { - List taskDOS = robotTaskMapper.selectBatchIds(taskIds); - for (RobotTaskDO taskDO : taskDOS) { - if (RobotTaskStatusEnum.NEW.getType().equals(taskDO.getTaskStatus())) { - taskDO.setTaskStatus(RobotTaskStatusEnum.DOING.getType()); - taskDO.setStartTime(LocalDateTime.now()); - } - } - robotTaskMapper.updateBatch(taskDOS); - } - if (ObjectUtil.isNotEmpty(updateTaskDetails)) { - robotTaskDetailMapper.updateBatch(updateTaskDetails); - } - } - /** - * 检测托盘类型 - * - * @param taskDetailDO - * @param robots - * @param robotTaskDOS - */ - @Transactional(rollbackFor = Exception.class) - public void doDetectingTraysDistribute(RobotTaskDetailDO taskDetailDO, List robots, - List robotTaskDOS) { - - } - - /** - * 扫描码 - * - * @param taskDetailDO - * @param robots - * @param robotTaskDOS - */ - @Transactional(rollbackFor = Exception.class) - public void doScanDistribute(RobotTaskDetailDO taskDetailDO, List robots, - List robotTaskDOS) { - - } - - /** - * 仅放货 - * - * @param taskDetailDO - * @param robots - * @param robotTaskDOS - */ - @Transactional(rollbackFor = Exception.class) - public void doReleaseDistribute(RobotTaskDetailDO taskDetailDO, List robots, - List robotTaskDOS) { - - } - - /** - * 取放货 - * - * @param taskDetailDO - * @param robots - * @param robotTaskDOS - */ - @Transactional(rollbackFor = Exception.class) - public void doTakeDistribute(RobotTaskDetailDO taskDetailDO, List robots, - List robotTaskDOS) { - - } - - /** - * 移动 - * - * @param taskDetailDO - * @param robots - * @param robotTaskDOS - */ - @Transactional(rollbackFor = Exception.class) - public void doMoveDistribute(RobotTaskDetailDO taskDetailDO, List robots, - List robotTaskDOS) { - String macAddress = ""; - String robotNo = taskDetailDO.getRobotNo(); - if (ObjectUtil.isNotEmpty(taskDetailDO.getRobotNo())) { - macAddress = robots.stream() - .filter(v -> v.getRobotNo().equals(taskDetailDO.getRobotNo())) - .map(RobotInformationDO::getMacAddress) - .findFirst() - .orElse(""); - if (ObjectUtil.isEmpty(macAddress)) { - return; - } - } else { - macAddress = robots.get(0).getMacAddress(); - robotNo = robots.get(0).getRobotNo(); - } - - RobotAcceptTaskDTO robotTaskDO = new RobotAcceptTaskDTO(); - robotTaskDO.setOrder_id(taskDetailDO.getId().toString()); - robotTaskDO.setOrder_type("出库");//未定 - robotTaskDO.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + macAddress); - - //1 - RobotAcceptTaskData taskOne = new RobotAcceptTaskData(); - taskOne.setSerial("1"); - taskOne.setCommand_id(taskDetailDO.getId().toString()); - taskOne.setCommand_type(CommandTypeEnum.MOVE_POSES.getType()); - - List pose2ds = new ArrayList<>(); - Pose2ds pose2d1 = new Pose2ds(); - pose2d1.setX(-1.305); - pose2d1.setY(-0.553); - pose2d1.setYaw(0.091); - Pose2ds pose2d2 = new Pose2ds(); - pose2d2.setX(-0.407); - pose2d2.setY(-0.566); - pose2d2.setYaw(0.117); - pose2ds.add(pose2d1); - pose2ds.add(pose2d2); - -// taskOne.setPose2ds(pose2ds); - - List data = new ArrayList<>(); - data.add(taskOne); - - robotTaskDO.setData(data); - robotTaskDOS.add(robotTaskDO); - - updateTaskStatus(robotNo, taskDetailDO); - } - - /** - * 充电 - * - * @param taskDetailDO - * @param robots - * @param robotTaskDOS - */ - @Transactional(rollbackFor = Exception.class) - public void doChargeDistribute(RobotTaskDetailDO taskDetailDO, List robots, - List robotTaskDOS) { - - } - - /** - * 停车 - * - * @param taskDetailDO - * @param robots - * @param robotTaskDOS - */ - @Transactional(rollbackFor = Exception.class) - public void doParkDistribute(RobotTaskDetailDO taskDetailDO, List robots, - List robotTaskDOS) { - String macAddress = ""; - String robotNo = taskDetailDO.getRobotNo(); - if (ObjectUtil.isNotEmpty(taskDetailDO.getRobotNo())) { - macAddress = robots.stream() - .filter(v -> v.getRobotNo().equals(taskDetailDO.getRobotNo())) - .map(RobotInformationDO::getMacAddress) - .findFirst() - .orElse(""); - if (ObjectUtil.isEmpty(macAddress)) { - return; - } - } - - RobotAcceptTaskDTO robotTaskDO = new RobotAcceptTaskDTO(); - robotTaskDO.setOrder_id(taskDetailDO.getId().toString()); - robotTaskDO.setOrder_type("出库");//未定 - robotTaskDO.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + macAddress); - - RobotAcceptTaskData taskOne = new RobotAcceptTaskData(); - taskOne.setSerial("1"); - taskOne.setCommand_id(taskDetailDO.getId().toString()); - taskOne.setCommand_type(CommandTypeEnum.STOP.getType()); - - List data = new ArrayList<>(); - data.add(taskOne); - - robotTaskDO.setData(data); - robotTaskDOS.add(robotTaskDO); - - final String mac = macAddress; - robots.removeIf(v -> v.getMacAddress().equals(mac)); - - updateTaskStatus(robotNo, taskDetailDO); - - } - - /** - * 取放货 - * - * @param taskDetailDO - * @param robots - * @param robotTaskDOS - */ - @Transactional(rollbackFor = Exception.class) - public void doTakeReleaseDistribute(RobotTaskDetailDO taskDetailDO, List robots, - List robotTaskDOS, Set taskIdSet, - List updateTaskDetail, Set robotNos - , Set doingLocationIds) { - WareHouseLocationDO query = WareHouseLocationDO.builder().id(taskDetailDO.getFromLocationId()).build(); - WareHouseLocationDO fromLocation = locationMapper.queryAllByLimit(query); - - WareHouseLocationDO toQuery = WareHouseLocationDO.builder().id(taskDetailDO.getToLocationId()).build(); - WareHouseLocationDO toLocation = locationMapper.queryAllByLimit(toQuery); - - Pair pair = getMadAddressRobotNo(taskDetailDO, robots, fromLocation, toLocation); - String macAddress = pair.getLeft(); - String robotNo = pair.getRight(); - - if (ObjectUtil.isEmpty(macAddress) || ObjectUtil.isEmpty(robotNo)) { - log.info("mac地址为空 :{}, 机器人编号 :{}", macAddress, robotNo); - return; - } - - // 取货/放货 校验有没有其他库位挡住 - 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()); - robotTaskDO.setOrder_type("出库");//未定 - robotTaskDO.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + macAddress); - - //1 - RobotAcceptTaskData taskOne = new RobotAcceptTaskData(); - taskOne.setSerial("1"); - taskOne.setCommand_id(taskDetailDO.getId().toString()); - taskOne.setCommand_type(CommandTypeEnum.MOVE_POSES.getType()); - - List pose2ds = new ArrayList<>(); - Pose2ds pose2 = positionMapItemMapper.selectByLocationId(taskDetailDO.getFromLocationId()); - pose2ds.add(pose2); -// taskOne.setPose2ds(pose2ds); - - //2 - RobotAcceptTaskData taskTwo = new RobotAcceptTaskData(); - taskTwo.setSerial("1"); - taskTwo.setCommand_id(taskDetailDO.getId().toString()); - taskTwo.setCommand_type(CommandTypeEnum.FORK.getType()); -// taskTwo.setTarget_height(initHeight); - - //3 - RobotAcceptTaskData taskThree = new RobotAcceptTaskData(); - taskThree.setSerial("2"); - taskThree.setCommand_id(taskDetailDO.getId().toString()); - taskThree.setCommand_type(CommandTypeEnum.FORK.getType()); -// taskThree.setTarget_height(scanHeight); - - //4 - RobotAcceptTaskData taskFour = new RobotAcceptTaskData(); - taskFour.setSerial("3"); - taskFour.setCommand_id(taskDetailDO.getId().toString()); - taskFour.setCommand_type(CommandTypeEnum.WAIT.getType()); -// taskFour.setParm(parm); - - //5 - RobotAcceptTaskData taskFive = new RobotAcceptTaskData(); - taskFive.setSerial("4"); - taskFive.setCommand_id(taskDetailDO.getId().toString()); - taskFive.setCommand_type(CommandTypeEnum.GET_PALLET_TOPIC.getType()); - - //6 - RobotAcceptTaskData taskSix = new RobotAcceptTaskData(); - taskSix.setSerial("5"); - taskSix.setCommand_id(taskDetailDO.getId().toString()); - taskSix.setCommand_type(CommandTypeEnum.FORK.getType()); - - - double fromLocationTotalHeight = fromLocation.getLocationTotalHeight().doubleValue(); -// taskSix.setTarget_height(fromLocationTotalHeight); - - //7 - RobotAcceptTaskData taskSeven = new RobotAcceptTaskData(); - taskSeven.setSerial("6"); - taskSeven.setCommand_id(taskDetailDO.getId().toString()); - taskSeven.setCommand_type(CommandTypeEnum.MOVE_TO_PALLET_POSE.getType()); - - - //8 - RobotAcceptTaskData taskEigth = new RobotAcceptTaskData(); - taskEigth.setSerial("7"); - taskEigth.setCommand_id(taskDetailDO.getId().toString()); - taskEigth.setCommand_type(CommandTypeEnum.FORK.getType()); - BigDecimal b1 = new BigDecimal(Double.toString(fromLocationTotalHeight)); - BigDecimal b2 = new BigDecimal(Double.toString(liftHeight)); -// taskEigth.setTarget_height(b1.add(b2).doubleValue()); - - - //8-2 - RobotAcceptTaskData taskEigth2 = new RobotAcceptTaskData(); - taskEigth2.setSerial("8"); - taskEigth2.setCommand_id(taskDetailDO.getId().toString()); - taskEigth2.setCommand_type(CommandTypeEnum.MOVE_POSE.getType()); - Pose2ds poseWait1 = positionMapItemMapper.selectByLocationId(100l); -// taskEigth2.setPose2d(poseWait1); - - //9 - RobotAcceptTaskData taskNigth = new RobotAcceptTaskData(); - taskNigth.setSerial("9"); - taskNigth.setCommand_id(taskDetailDO.getId().toString()); - taskNigth.setCommand_type(CommandTypeEnum.MOVE_POSES.getType()); - List pose2dsNight = new ArrayList<>(); - - /* WareHouseLocationDO ware = WareHouseLocationDO.builder() - .laneId(-2l) - .build(); - List releaseStockList = - locationMapper.selectLocations(ware, new ArrayList<>(), new HashSet<>()); - for (WareHouseLocationDO wareHouseLocationDO : releaseStockList) { - Pose2ds pose = positionMapItemMapper.selectByLocationId(wareHouseLocationDO.getId()); - pose2dsNight.add(pose); - }*/ - - -// taskNigth.setPose2ds(pose2dsNight); - - //10 - RobotAcceptTaskData taskTen = new RobotAcceptTaskData(); - taskTen.setSerial("9"); - taskTen.setCommand_id(taskDetailDO.getId().toString()); - taskTen.setCommand_type(CommandTypeEnum.FORK.getType()); -// taskTen.setTarget_height(moveHeight); - - //11 - RobotAcceptTaskData taskEleven = new RobotAcceptTaskData(); - taskEleven.setSerial("10"); - taskEleven.setCommand_id(taskDetailDO.getId().toString()); - taskEleven.setCommand_type(CommandTypeEnum.FORK.getType()); - - double toLocationTotalHeight = toLocation.getLocationTotalHeight().doubleValue(); - BigDecimal b3 = new BigDecimal(Double.toString(toLocationTotalHeight)); - BigDecimal b4 = new BigDecimal(Double.toString(liftHeight)); -// taskEleven.setTarget_height(b3.add(b4).doubleValue()); - - //12 - RobotAcceptTaskData taskTwelve = new RobotAcceptTaskData(); - taskTwelve.setSerial("11"); - taskTwelve.setCommand_id(taskDetailDO.getId().toString()); - taskTwelve.setCommand_type(CommandTypeEnum.MOVE_POSE.getType()); - Pose2ds poseEnd = positionMapItemMapper.selectByLocationId(taskDetailDO.getToLocationId()); -// taskTwelve.setPose2d(poseEnd); - - //13 - RobotAcceptTaskData taskThirteen = new RobotAcceptTaskData(); - taskThirteen.setSerial("12"); - taskThirteen.setCommand_id(taskDetailDO.getId().toString()); - taskThirteen.setCommand_type(CommandTypeEnum.FORK.getType()); -// taskThirteen.setTarget_height(toLocationTotalHeight); - - //14 - RobotAcceptTaskData taskFourteen = new RobotAcceptTaskData(); - taskFourteen.setSerial("13"); - taskFourteen.setCommand_id(taskDetailDO.getId().toString()); - taskFourteen.setCommand_type(CommandTypeEnum.MOVE_POSE.getType()); - Pose2ds poseWait = positionMapItemMapper.selectByLocationId(99l); -// taskFourteen.setPose2d(poseWait); - /* - Pose2ds poseWait = new Pose2ds(); - poseWait.setX(3.046); - poseWait.setY(3.219); - poseWait.setYaw(-3.141); - taskFourteen.setPose2d(poseWait);*/ - - //15 - RobotAcceptTaskData taskFifteen = new RobotAcceptTaskData(); - taskFifteen.setSerial("14"); - taskFifteen.setCommand_id(taskDetailDO.getId().toString()); - taskFifteen.setCommand_type(CommandTypeEnum.FORK.getType()); -// taskFifteen.setTarget_height(initHeight); - - List data = new ArrayList<>(); - data.add(taskOne); - data.add(taskTwo); - data.add(taskThree); - data.add(taskFour); - data.add(taskFive); - data.add(taskSix); - data.add(taskSeven); - data.add(taskEigth); - data.add(taskEigth2); - data.add(taskNigth); - data.add(taskTen); - data.add(taskEleven); - data.add(taskTwelve); - data.add(taskThirteen); - data.add(taskFourteen); - data.add(taskFifteen); - - - robotTaskDO.setData(data); - - robotTaskDOS.add(robotTaskDO); - - final String mac = macAddress; - robots.removeIf(v -> v.getMacAddress().equals(mac)); - - taskDetailDO.setRobotNo(robotNo); - taskDetailDO.setStartTime(LocalDateTime.now()); - taskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType()); - updateTaskDetail.add(taskDetailDO); - - robotNos.add(robotNo); - 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 = ""; - String robotNo = taskDetailDO.getRobotNo(); - if (ObjectUtil.isNotEmpty(robotNo)) { - macAddress = robots.stream() - .filter(v -> v.getRobotNo().equals(taskDetailDO.getRobotNo())) - .map(RobotInformationDO::getMacAddress) - .findFirst() - .orElse(""); - } else { - RobotInformationDO robotInformationDO = robots.stream() - .filter(v -> - ObjectUtil.isNotEmpty(v.getMacAddress()) - && v.getFloorAreaJson().contains(fromLocation.getMapId()) - && v.getFloorAreaJson().contains(toLocation.getMapId())) - .findFirst() - .orElse(new RobotInformationDO()); - macAddress = robotInformationDO.getMacAddress(); - robotNo = robotInformationDO.getRobotNo(); - } - Pair pair = new ImmutablePair<>(macAddress, robotNo); - return pair; - } - - @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(String robotNo, RobotTaskDetailDO taskDetailDO) { - - RobotTaskDO robotTaskDO = new RobotTaskDO(); - robotTaskDO.setId(taskDetailDO.getRobotTaskId()); - robotTaskDO.setStartTime(LocalDateTime.now()); - robotTaskDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType()); - robotTaskMapper.updateRobot(robotTaskDO); - - RobotTaskDetailDO detailDO = new RobotTaskDetailDO(); - detailDO.setId(taskDetailDO.getId()); - detailDO.setStartTime(LocalDateTime.now()); - detailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType()); - robotTaskDetailMapper.updateRobotDetailById(detailDO); - - robotInformationMapper.updateRobotStatus(robotNo, RobotStatusEnum.DOING.getType()); - } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskService.java index 43ade6073..95c35ec6a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskService.java @@ -1,3 +1,4 @@ +/* package cn.iocoder.yudao.module.system.service.robot.job; import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskPPDistribution; @@ -6,21 +7,28 @@ import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO; import java.util.List; public interface RobotCommonTaskService { - /** + */ +/** * 让机器人自动充电 * @param robotNo - */ + *//* + public void startAutoCharge(String robotNo) ; - /** + */ +/** * 组装任务下发给车机 * @param list - */ + *//* + void sendTaskToRobot(TaskPPDistribution taskPPDistribution); - /** + */ +/** * 发送充电任务给车机 * @param chargeList - */ + *//* + void sendChargeTaskToRobot(TaskPPDistribution chargeList,RobotChargeLogDO robotChargeLogs); } +*/ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskServiceImpl.java index eab0603f2..4c636dd3f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/RobotCommonTaskServiceImpl.java @@ -1,3 +1,4 @@ +/* package cn.iocoder.yudao.module.system.service.robot.job; import cn.hutool.core.util.ObjectUtil; @@ -114,11 +115,13 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { private static String SERIAL_KEY = "SERIAL_KEY"; - /** + */ +/** * 让机器人自动充电 * * @param robotNo - */ + *//* + @Override @Async(NOTIFY_THREAD_POOL_TASK_EXECUTOR) public void startAutoCharge(String robotNo) { @@ -127,10 +130,12 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { } - /** + */ +/** * 客户下发的任务 * - */ + *//* + @Override @Async(NOTIFY_THREAD_POOL_TASK_EXECUTOR) public void sendTaskToRobot(TaskPPDistribution v) { @@ -183,14 +188,16 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { taskDetailActionLogService.addLogInCache(logs); } - /** + */ +/** * 仅放货 * * @param v * @param robotTaskDetailDO * @param locationMap * @return - */ + *//* + private Pair, List> releaseTask(TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO, Map locationMap) { @@ -231,14 +238,16 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { return pair; } - /** + */ +/** * 仅取货任务 * * @param v * @param robotTaskDetailDO * @param locationMap * @return - */ + *//* + private Pair, List> takeTask(TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO, Map locationMap) { @@ -293,14 +302,16 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { return pair; } - /** + */ +/** * 移动的任务、充电任务 * * @param v * @param robotTaskDetailDO * @param locationMap * @return - */ + *//* + private Pair, List> moveTask(TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO, Map locationMap) { @@ -322,12 +333,14 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { return pair; } - /** + */ +/** * 仅放货、移动 * * @param logOne * @param v - */ + *//* + private RobotAcceptTaskData onlyMove(RobotTaskDetailActionLogDO logOne, TaskPPDistribution v, String msg,Map serialMap) { logOne.setCommandId(getId()); @@ -350,13 +363,15 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { return robotAcceptTaskData; } - /** + */ +/** * 取放 * * @param v * @param robotTaskDetailDO * @return - */ + *//* + private Pair, List> takeReleaseTask(TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO, Map locationMap) { @@ -454,14 +469,16 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { } - /** + */ +/** * 行走--放 * * @param logNight * @param v * @param robotTaskDetailDO * @return - */ + *//* + private RobotAcceptTaskData getToMovePose(RobotTaskDetailActionLogDO logNight, TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO,Map serialMap) { List releases = v.getReleases(); @@ -486,7 +503,8 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { return robotAcceptTaskData; } - /** + */ +/** * 移动到最后一个点位 * * @param logEight @@ -494,7 +512,8 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { * @param robotTaskDetailDO * @param locationMap * @return - */ + *//* + private RobotAcceptTaskData getMovePose(RobotTaskDetailActionLogDO logEight, TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO, Map locationMap, Boolean isTake, String msg,Map serialMap) { @@ -523,14 +542,16 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { return robotAcceptTaskData; } - /** + */ +/** * 移动到取货终点 * * @param logSix * @param v * @param robotTaskDetailDO * @return - */ + *//* + private RobotAcceptTaskData moveToPalletPose(RobotTaskDetailActionLogDO logSix, TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO, String msg,Map serialMap) { logSix.setCommandId(getId()); @@ -546,14 +567,16 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { return robotAcceptTaskData; } - /** + */ +/** * 获取托盘位置 * * @param logFour * @param v * @param robotTaskDetailDO * @return - */ + *//* + private RobotAcceptTaskData getPalletTopic(RobotTaskDetailActionLogDO logFour, TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO,Map serialMap) { logFour.setCommandId(getId()); @@ -588,14 +611,16 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { return robotAcceptTaskData; } - /** + */ +/** * 默认取的抬叉 * * @param logTwo * @param v * @param robotTaskDetailDO * @return - */ + *//* + private RobotAcceptTaskData getTakeFork(RobotTaskDetailActionLogDO logTwo, TaskPPDistribution v, RobotTaskDetailDO robotTaskDetailDO, Boolean isTake, Map locationMap, Double addHeight, @@ -675,9 +700,11 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { } - /** + */ +/** * 充电任务 - */ + *//* + @Override @Async(NOTIFY_THREAD_POOL_TASK_EXECUTOR) public void sendChargeTaskToRobot(TaskPPDistribution v, RobotChargeLogDO chargeLogDO) { @@ -715,3 +742,4 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService { } +*/ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningServiceImpl.java index 2dd0acad4..dbc330c06 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/pathplanning/RobotPathPlanningServiceImpl.java @@ -545,299 +545,13 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService { } } - public Pair getMadAddressRobotNo(RobotTaskDetailDO taskDetailDO, List robots, - WareHouseLocationDO fromLocation, WareHouseLocationDO toLocation) { - String macAddress = ""; - String robotNo = taskDetailDO.getRobotNo(); - if (ObjectUtil.isNotEmpty(robotNo)) { - macAddress = robots.stream() - .filter(v -> v.getRobotNo().equals(taskDetailDO.getRobotNo())) - .map(RobotInformationDO::getMacAddress) - .findFirst() - .orElse(""); - } else { - RobotInformationDO robotInformationDO = robots.stream() - .filter(v -> - ObjectUtil.isNotEmpty(v.getMacAddress()) - && v.getFloorAreaJson().contains(fromLocation.getMapId()) - && v.getFloorAreaJson().contains(toLocation.getMapId())) - .findFirst() - .orElse(new RobotInformationDO()); - macAddress = robotInformationDO.getMacAddress(); - robotNo = robotInformationDO.getRobotNo(); - } - Pair pair = new ImmutablePair<>(macAddress, robotNo); - return pair; - } - /** - * 取放货 - * - * @param taskDetailDO - * @param robots - * @param robotTaskDOS - */ - @Transactional(rollbackFor = Exception.class) - public void doTakeReleaseDistribute(RobotTaskDetailDO taskDetailDO, List robots, - List robotTaskDOS, Set taskIdSet, - List updateTaskDetail, Set robotNos, - Set doingLocationIds, Map locationMp, - List taskToPathPlanningDTOS) { - - WareHouseLocationDO fromLocation = locationMp.get(taskDetailDO.getFromLocationId()); - WareHouseLocationDO toLocation = locationMp.get(taskDetailDO.getToLocationId()); - - TaskToPathPlanningDTO taskToPathPlanningDTO = new TaskToPathPlanningDTO(); - - Pair pair = getMadAddressRobotNo(taskDetailDO, robots, fromLocation, toLocation); - String macAddress = pair.getLeft(); - String robotNo = pair.getRight(); - - if (ObjectUtil.isEmpty(macAddress) || ObjectUtil.isEmpty(robotNo)) { - log.info("mac地址为空 :{}, 机器人编号 :{}", macAddress, robotNo); - return; - } - - // 取货/放货 校验有没有其他库位挡住 - 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()); - robotTaskDO.setOrder_type("出库");//未定 - robotTaskDO.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + macAddress); - - //1 - RobotAcceptTaskData taskOne = new RobotAcceptTaskData(); - taskOne.setSerial("1"); - taskOne.setCommand_id(taskDetailDO.getId().toString()); - taskOne.setCommand_type(CommandTypeEnum.MOVE_POSES.getType()); - - List pose2ds = new ArrayList<>(); - Pose2ds pose2 = positionMapItemMapper.selectByLocationId(taskDetailDO.getFromLocationId()); - pose2ds.add(pose2); -// taskOne.setPose2ds(pose2ds); - - //2 - RobotAcceptTaskData taskTwo = new RobotAcceptTaskData(); - taskTwo.setSerial("1"); - taskTwo.setCommand_id(taskDetailDO.getId().toString()); - taskTwo.setCommand_type(CommandTypeEnum.FORK.getType()); -// taskTwo.setTarget_height(initHeight); - - //3 - RobotAcceptTaskData taskThree = new RobotAcceptTaskData(); - taskThree.setSerial("2"); - taskThree.setCommand_id(taskDetailDO.getId().toString()); - taskThree.setCommand_type(CommandTypeEnum.FORK.getType()); -// taskThree.setTarget_height(scanHeight); - - //4 - RobotAcceptTaskData taskFour = new RobotAcceptTaskData(); - taskFour.setSerial("3"); - taskFour.setCommand_id(taskDetailDO.getId().toString()); - taskFour.setCommand_type(CommandTypeEnum.WAIT.getType()); -// taskFour.setParm(parm); - - //5 - RobotAcceptTaskData taskFive = new RobotAcceptTaskData(); - taskFive.setSerial("4"); - taskFive.setCommand_id(taskDetailDO.getId().toString()); - taskFive.setCommand_type(CommandTypeEnum.GET_PALLET_TOPIC.getType()); - - //6 - RobotAcceptTaskData taskSix = new RobotAcceptTaskData(); - taskSix.setSerial("5"); - taskSix.setCommand_id(taskDetailDO.getId().toString()); - taskSix.setCommand_type(CommandTypeEnum.FORK.getType()); - double fromLocationTotalHeight = fromLocation.getLocationTotalHeight().doubleValue(); -// taskSix.setTarget_height(fromLocationTotalHeight); - - //7 - RobotAcceptTaskData taskSeven = new RobotAcceptTaskData(); - taskSeven.setSerial("6"); - taskSeven.setCommand_id(taskDetailDO.getId().toString()); - taskSeven.setCommand_type(CommandTypeEnum.MOVE_TO_PALLET_POSE.getType()); - //8 - RobotAcceptTaskData taskEigth = new RobotAcceptTaskData(); - taskEigth.setSerial("7"); - taskEigth.setCommand_id(taskDetailDO.getId().toString()); - taskEigth.setCommand_type(CommandTypeEnum.FORK.getType()); - BigDecimal b1 = new BigDecimal(Double.toString(fromLocationTotalHeight)); - BigDecimal b2 = new BigDecimal(Double.toString(liftHeight)); -// taskEigth.setTarget_height(b1.add(b2).doubleValue()); - //8-2 - RobotAcceptTaskData taskEigth2 = new RobotAcceptTaskData(); - taskEigth2.setSerial("8"); - taskEigth2.setCommand_id(taskDetailDO.getId().toString()); - taskEigth2.setCommand_type(CommandTypeEnum.MOVE_POSE.getType()); - Pose2ds poseWait1 = positionMapItemMapper.selectByLocationId(100l); -// taskEigth2.setPose2d(poseWait1); - - //9 - RobotAcceptTaskData taskNigth = new RobotAcceptTaskData(); - taskNigth.setSerial("9"); - taskNigth.setCommand_id(taskDetailDO.getId().toString()); - taskNigth.setCommand_type(CommandTypeEnum.MOVE_POSES.getType()); - List pose2dsNight = new ArrayList<>(); - - /*WareHouseLocationDO ware = WareHouseLocationDO.builder() - .laneId(-2l) - .build(); - List releaseStockList = - locationMapper.selectLocations(ware, new ArrayList<>(), new HashSet<>()); - for (WareHouseLocationDO wareHouseLocationDO : releaseStockList) { - Pose2ds pose = positionMapItemMapper.selectByLocationId(wareHouseLocationDO.getId()); - pose2dsNight.add(pose); - }*/ - - -// taskNigth.setPose2ds(pose2dsNight); - - //10 - RobotAcceptTaskData taskTen = new RobotAcceptTaskData(); - taskTen.setSerial("9"); - taskTen.setCommand_id(taskDetailDO.getId().toString()); - taskTen.setCommand_type(CommandTypeEnum.FORK.getType()); -// taskTen.setTarget_height(moveHeight); - - //11 - RobotAcceptTaskData taskEleven = new RobotAcceptTaskData(); - taskEleven.setSerial("10"); - taskEleven.setCommand_id(taskDetailDO.getId().toString()); - taskEleven.setCommand_type(CommandTypeEnum.FORK.getType()); - - double toLocationTotalHeight = toLocation.getLocationTotalHeight().doubleValue(); - BigDecimal b3 = new BigDecimal(Double.toString(toLocationTotalHeight)); - BigDecimal b4 = new BigDecimal(Double.toString(liftHeight)); -// taskEleven.setTarget_height(b3.add(b4).doubleValue()); - - //12 - RobotAcceptTaskData taskTwelve = new RobotAcceptTaskData(); - taskTwelve.setSerial("11"); - taskTwelve.setCommand_id(taskDetailDO.getId().toString()); - taskTwelve.setCommand_type(CommandTypeEnum.MOVE_POSE.getType()); - Pose2ds poseEnd = positionMapItemMapper.selectByLocationId(taskDetailDO.getToLocationId()); -// taskTwelve.setPose2d(poseEnd); - - //13 - RobotAcceptTaskData taskThirteen = new RobotAcceptTaskData(); - taskThirteen.setSerial("12"); - taskThirteen.setCommand_id(taskDetailDO.getId().toString()); - taskThirteen.setCommand_type(CommandTypeEnum.FORK.getType()); -// taskThirteen.setTarget_height(toLocationTotalHeight); - - //14 - RobotAcceptTaskData taskFourteen = new RobotAcceptTaskData(); - taskFourteen.setSerial("13"); - taskFourteen.setCommand_id(taskDetailDO.getId().toString()); - taskFourteen.setCommand_type(CommandTypeEnum.MOVE_POSE.getType()); - Pose2ds poseWait = positionMapItemMapper.selectByLocationId(99l); -// taskFourteen.setPose2d(poseWait); - /* - Pose2ds poseWait = new Pose2ds(); - poseWait.setX(3.046); - poseWait.setY(3.219); - poseWait.setYaw(-3.141); - taskFourteen.setPose2d(poseWait);*/ - - //15 - RobotAcceptTaskData taskFifteen = new RobotAcceptTaskData(); - taskFifteen.setSerial("14"); - taskFifteen.setCommand_id(taskDetailDO.getId().toString()); - taskFifteen.setCommand_type(CommandTypeEnum.FORK.getType()); -// taskFifteen.setTarget_height(initHeight); - - List data = new ArrayList<>(); - data.add(taskOne); - data.add(taskTwo); - data.add(taskThree); - data.add(taskFour); - data.add(taskFive); - data.add(taskSix); - data.add(taskSeven); - data.add(taskEigth); - data.add(taskEigth2); - data.add(taskNigth); - data.add(taskTen); - data.add(taskEleven); - data.add(taskTwelve); - data.add(taskThirteen); - data.add(taskFourteen); - data.add(taskFifteen); - - - robotTaskDO.setData(data); - - robotTaskDOS.add(robotTaskDO); - - final String mac = macAddress; - robots.removeIf(v -> v.getMacAddress().equals(mac)); - - taskDetailDO.setRobotNo(robotNo); - taskDetailDO.setStartTime(LocalDateTime.now()); - taskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType()); - updateTaskDetail.add(taskDetailDO); - - robotNos.add(robotNo); - 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; - } - } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsService.java index 02d11f773..14a004433 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsService.java @@ -1,6 +1,12 @@ package cn.iocoder.yudao.module.system.service.tool; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; + public interface ToolsService { String sendPPsortConfig(); + String cleanAgv( String agvNo); + + String closeTaskDetail(String taskDetailId); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsServiceImpl.java index 45dc81b37..0c78e1c8f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tool/ToolsServiceImpl.java @@ -2,20 +2,30 @@ package cn.iocoder.yudao.module.system.service.tool; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; +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.task.dto.RobotAcceptTaskDTO; +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.constant.path.PathPlanningTopicConstant; +import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant; import cn.iocoder.yudao.module.system.controller.admin.config.dto.TaskOrderConfigDTO; import cn.iocoder.yudao.module.system.controller.admin.config.vo.CommonConfigVO; +import cn.iocoder.yudao.module.system.controller.admin.tool.dto.CleanAgvDTO; import cn.iocoder.yudao.module.system.dal.dataobject.config.CommonConfigDO; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO; import cn.iocoder.yudao.module.system.dal.mysql.config.CommonConfigMapper; import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotWarnMsgMapper; import cn.iocoder.yudao.module.system.enums.config.CommandConfigTypeEnum; import cn.iocoder.yudao.module.system.enums.robot.RobotWarnType; +import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaksOrderTypeEnum; +import cn.iocoder.yudao.module.system.service.robot.RobotInformationService; import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -28,7 +38,7 @@ import java.util.Arrays; public class ToolsServiceImpl implements ToolsService { @Resource - private PathPlanningApi pathPlanningApi; + private CommonApi commonApi; @Resource private CommonConfigMapper configMapper; @@ -39,6 +49,12 @@ public class ToolsServiceImpl implements ToolsService { @Resource private RobotWarnMsgMapper warnMsgMapper; + @Resource + private RobotInformationService informationService; + + @Autowired + private RobotInformationService robotInformationService; + /** * 发送时间、优先级、距离的权重给PP * @@ -70,12 +86,50 @@ public class ToolsServiceImpl implements ToolsService { } TaskOrderConfigDTO taskOrderConfigDTO = JSONUtil.toBean(config.getConfigStr(), TaskOrderConfigDTO.class); - pathPlanningApi.synchronousLineObject(taskOrderConfigDTO, + commonApi.commonMethod(taskOrderConfigDTO, PathPlanningTopicConstant.SEND_SORT_CONFIG_TO_PP); return "发送数据库权重配置成功"; } + /** + * 清除交管 + * + * @param agvNo + * @return + */ + @Override + public String cleanAgv(String robotNo) { + CleanAgvDTO build = CleanAgvDTO.builder().robotNo(robotNo).build(); + commonApi.commonMethod(build, PathPlanningTopicConstant.CLEAN_AGV); + return "清除交管成功 " + robotNo; + } + + /** + * 关闭任务 + * @param taskDetailId + * @return + */ + @Override + public String closeTaskDetail(String taskDetailId) { + RobotInformationDO informationDO = informationService.getRobotInformationByDetailId(taskDetailId); + RobotClosePathPlantingDTO closePathPlanting = RobotClosePathPlantingDTO.builder() + .robotNo(informationDO.getRobotNo()) + .id(taskDetailId) + .build(); + commonApi.commonMethod(closePathPlanting, PathPlanningTopicConstant.KILL_TASK); + + RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO(); + robotTask.setOrder_id(taskDetailId); + String mac = robotInformationService.getMacByRobotNo(informationDO.getRobotNo()); + robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac); + robotTask.setOrder_type(RobotTaksOrderTypeEnum.TASK.getType()); + robotTask.setExecution_type(ExecutionTypeEnum.CANCEL.getType()); + commonApi.commonMethod(robotTask, robotTask.getTopic()); + + return "关闭任务成功"; + } + public void addWarnMsg() { RobotWarnMsgDO warnMsg = RobotWarnMsgDO.builder().warnLevel(4) @@ -90,7 +144,4 @@ public class ToolsServiceImpl implements ToolsService { } - - - }