From 41bf5bed58cfbdd4da32ffdb9ce9852ed90e5d0c Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Mon, 16 Jun 2025 16:25:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../path/dto/PathToRobotChangeXYArgDTO.java | 1 + .../module/mqtt/api/common/CommonApiImpl.java | 14 +++- .../src/main/resources/application-local.yaml | 3 +- .../api/robot/RobotTaskStatusApiImpl.java | 31 ++++++-- .../api/robot/RobotWorkStatusApiImpl.java | 62 +++++++++++++++ .../config/poperties/ZnConfigConstant.java | 34 ++++++++ .../config/poperties/dto/RobotConfig.java | 9 +++ .../poperties/dto/RobotDoingAction.java | 8 ++ .../system/config/poperties/dto/Task.java | 9 +++ .../robot/RobotInformationController.java | 2 +- .../enums/robot/task/RobotStatusCodeEnum.java | 3 +- .../enums/robot/task/WorkProgressEnum.java | 17 ++++ .../module/system/job/robot/RobotJob.java | 24 ++++-- .../system/schedul/RcsMapScheduled.java | 2 + .../robot/RobotInformationService.java | 2 +- .../robot/RobotInformationServiceImpl.java | 79 ++++++++++--------- .../service/robot/RobotTaskServiceImpl.java | 4 +- .../service/robot/job/CycleServiceImpl.java | 22 ++++-- .../robot/job/DistributeTasksServiceImpl.java | 2 +- .../RobotPathPlanningServiceImpl.java | 6 +- .../src/main/resources/application-local.yaml | 6 +- 21 files changed, 269 insertions(+), 71 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/ZnConfigConstant.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/dto/RobotConfig.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/dto/RobotDoingAction.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/dto/Task.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/WorkProgressEnum.java diff --git a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathToRobotChangeXYArgDTO.java b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathToRobotChangeXYArgDTO.java index 6bb0bf2de..7b67dc6df 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathToRobotChangeXYArgDTO.java +++ b/yudao-module-mqtt/yudao-module-mqtt-api/src/main/java/cn/iocoder/yudao/module/mqtt/api/path/dto/PathToRobotChangeXYArgDTO.java @@ -13,6 +13,7 @@ import java.util.List; @AllArgsConstructor public class PathToRobotChangeXYArgDTO { private List pose2ds; + private PathToRobotChangeXYArgMovePoseDTO pose2d; private PathToRobotChangeXYArgPoseDTO backPose; private PathToRobotChangeXYArgPoseDTO cargoPose; private Double height; diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/api/common/CommonApiImpl.java b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/api/common/CommonApiImpl.java index e47489ebe..32cc4f78c 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/api/common/CommonApiImpl.java +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/java/cn/iododer/yudao/module/mqtt/api/common/CommonApiImpl.java @@ -23,11 +23,14 @@ public class CommonApiImpl implements CommonApi { try { String str = JSON.toJSONString(obj); mqttUtils.pub(topic, JSON.toJSONString(obj)); - /*if (str.length() > 510) { + if(topic.equals("AGV_POSE")) { + return; + } + if (str.length() > 510) { log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str.substring(0, 500)); }else { log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str); - }*/ + } } catch (MqttException e) { log.info("MQTT消息发送异常 :{}",e); } @@ -37,11 +40,14 @@ public class CommonApiImpl implements CommonApi { public void commonMethodStr(String str, String topic) { try { mqttUtils.pub(topic, str); - /*if (str.length() > 510) { + if(topic.equals("AGV_POSE")) { + return; + } + if (str.length() > 510) { log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str.substring(0, 500)); }else { log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str); - }*/ + } } catch (MqttException e) { log.info("MQTT消息发送异常 :{}",e); } diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-local.yaml b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-local.yaml index 13e70cf30..032ce0325 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-local.yaml +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/application-local.yaml @@ -33,9 +33,10 @@ management: # MQTT mqtt: - host: tcp://123.57.12.40:1883 +# host: tcp://123.57.12.40:1883 # host: tcp://127.0.0.1:1883 # host: tcp://10.10.7.116:1883 + host: tcp://10.10.7.114:1883 username: adminuser password: adminuser qos: 2 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java index 70de26f1f..71be94842 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java @@ -140,8 +140,9 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { if (!RobotStatusCodeEnum.SUCCESS.getType().equals(robotCompleteTaskDTO.getStatusCode())) { log.info("车机上报异常 :{}", JSON.toJSONString(robotCompleteTaskDTO)); - closeTask(robotCompleteTaskDTO);//todo 取不了和放不了的异常 + //todo 取不了和放不了的异常 redisUtil.del(robotDoingActionKey); + closeTask(robotCompleteTaskDTO); return; } @@ -396,6 +397,12 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { */ @Transactional(rollbackFor = Exception.class) public void closeTask(RobotCompleteTaskDTO robotCompleteTaskDTO) { + + if (RobotStatusCodeEnum.EXCEEDING_SECONDS.getType().equals(robotCompleteTaskDTO.getStatusCode())) { + doTaskContinue(robotCompleteTaskDTO); + return; + } + PPCloseOrder(robotCompleteTaskDTO); // taskService.closeTaskDetail(robotCompleteTaskDTO.getOrderId().toString(),robotCompleteTaskDTO.getMac()); String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); @@ -470,6 +477,12 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { warnMsgService.sendWarnMsgToWebsocket(warnMsg.getWarnMsg()); } + private void doTaskContinue(RobotCompleteTaskDTO robotCompleteTaskDTO) { + log.info("恢复任务"); + String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); + robotInformationService.doTaskContinue(robotNo, true); + } + /** * 处理充电中 * @@ -566,13 +579,17 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType()); } else if (CommandTypeEnum.WORK_PICK_UP_GOODS.getType().equals(commandType)) { logOne.setActionMsg("车辆正在取货"); - robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType()); + if (!RobotTaskStageEnum.GO_RELEASE.getType().equals(taskStage)) { + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType()); + } } else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(commandType)) { logOne.setActionMsg("车辆正在放货"); robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING.getType()); } else if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) { logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo() + "放货"); - robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType()); + if (!RobotTaskStageEnum.DONE.getType().equals(taskStage)) { + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType()); + } } } else if (PathTaskTypeEnum.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType()) @@ -604,7 +621,9 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType()); } else if (CommandTypeEnum.WORK_PICK_UP_GOODS.getType().equals(commandType)) { logOne.setActionMsg("车辆正在取货"); - robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType()); + if (!RobotTaskStageEnum.DONE.getType().equals(taskStage)) { + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType()); + } } } else if (PathTaskTypeEnum.RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) { @@ -613,7 +632,9 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType()); } else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(commandType)) { logOne.setActionMsg("车辆正在放货"); - robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING.getType()); + if (!RobotTaskStageEnum.DONE.getType().equals(taskStage)) { + robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING.getType()); + } } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotWorkStatusApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotWorkStatusApiImpl.java index 1a22bb6c3..3a6a07552 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotWorkStatusApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotWorkStatusApiImpl.java @@ -4,9 +4,15 @@ import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; import cn.iocoder.yudao.module.system.api.robot.vo.RobotWorkStatusDTO; import cn.iocoder.yudao.module.system.constant.robot.RobotExecutionStateConstant; import cn.iocoder.yudao.module.system.controller.admin.log.vo.RobotOperationLogSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO; +import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskDetailMapper; import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum; import cn.iocoder.yudao.module.system.enums.path.PathIsReachEnum; import cn.iocoder.yudao.module.system.enums.robot.CommandTypeEnum; +import cn.iocoder.yudao.module.system.enums.robot.RobotTaskDetailStatusEnum; +import cn.iocoder.yudao.module.system.enums.robot.RobotTaskTypeEnum; +import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaskStageEnum; +import cn.iocoder.yudao.module.system.enums.robot.task.WorkProgressEnum; import cn.iocoder.yudao.module.system.service.log.RobotOperationLogService; import cn.iocoder.yudao.module.system.service.path.PathPlanningService; import cn.iocoder.yudao.module.system.service.robot.RobotInformationService; @@ -32,6 +38,9 @@ public class RobotWorkStatusApiImpl implements RobotWorkStatusApi { @Resource private PathPlanningService pathPlanningService; + @Autowired + private RobotTaskDetailMapper robotTaskDetailMapper; + @Override public void robotWorkStatus(String message) { log.info("111111作业实时行为上报: {}", message); @@ -61,6 +70,59 @@ public class RobotWorkStatusApiImpl implements RobotWorkStatusApi { , data.getCommandType(), PathIsReachEnum.END_WORK.getType()); } + if (CommandTypeEnum.WORK_PICK_UP_GOODS.getType().equals(data.getCommandType()) + && RobotExecutionStateConstant.DONE.equals(Integer.valueOf(data.getExecutionState())) + && WorkProgressEnum.FORK_OFFSET.getType().equals(data.getWorkProgress())) { + setTakeDone(data.getOrderId()); + }else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(data.getCommandType()) + && RobotExecutionStateConstant.DONE.equals(Integer.valueOf(data.getExecutionState())) + && WorkProgressEnum.FORK_OFFSET.getType().equals(data.getWorkProgress())) { + setReleaseDone(data.getOrderId()); + } + } + private void setReleaseDone(String orderId) { + RobotTaskDetailDO data = new RobotTaskDetailDO(); + data.setId(Long.valueOf(orderId)); + data.setTaskStage(RobotTaskStageEnum.DONE.getType()); + data.setTaskStatus(RobotTaskDetailStatusEnum.DONE.getType()); + robotTaskDetailMapper.updateRobotDetailById(data); + } + + private void setTakeDone(String orderId) { + RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(orderId); + if (RobotTaskTypeEnum.TAKE_RELEASE.getType().equals(robotTaskDetailDO.getTaskType())) { + RobotTaskDetailDO data = new RobotTaskDetailDO(); + data.setId(robotTaskDetailDO.getId()); + data.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType()); + robotTaskDetailMapper.updateRobotDetailById(data); + }else if (RobotTaskTypeEnum.TAKE.getType().equals(robotTaskDetailDO.getTaskType())){ + RobotTaskDetailDO data = new RobotTaskDetailDO(); + data.setId(robotTaskDetailDO.getId()); + data.setTaskStage(RobotTaskStageEnum.DONE.getType()); + data.setTaskStatus(RobotTaskDetailStatusEnum.DONE.getType()); + robotTaskDetailMapper.updateRobotDetailById(data); + } + } + + + + + + + + + + + + + + + + + + + + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/ZnConfigConstant.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/ZnConfigConstant.java new file mode 100644 index 000000000..3e4295bba --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/ZnConfigConstant.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.system.config.poperties; + +import cn.iocoder.yudao.module.system.config.poperties.dto.RobotConfig; +import cn.iocoder.yudao.module.system.config.poperties.dto.RobotDoingAction; +import cn.iocoder.yudao.module.system.config.poperties.dto.Task; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.stereotype.Component; + +@Data +@RefreshScope +@Component +@ConfigurationProperties(prefix = "zn") +public class ZnConfigConstant { + private String taskNo; + private String moveNo; + private String chargeNo; + private String cameraSecretKey; + private Boolean doCycle; + private Boolean laneAutoMove; + private Long robotPositionCacheTime; + private Boolean cycleDoAutoMove; + private String fullElectricity; + private String taskNeedSingle; + private String locationNumberReduce; + private RobotDoingAction robotDoingAction; + private Task task ; + private RobotConfig robotConfig; + private Boolean openRateLimiter; + private Boolean isSimulation ; + private Boolean sendRobotInitPose; + private Boolean synchronousAllMapNode; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/dto/RobotConfig.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/dto/RobotConfig.java new file mode 100644 index 000000000..b481f7fe6 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/dto/RobotConfig.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.module.system.config.poperties.dto; + +import lombok.Data; + +@Data +public class RobotConfig { + private Double offsetHeight; + private Double defaultTrayHeight; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/dto/RobotDoingAction.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/dto/RobotDoingAction.java new file mode 100644 index 000000000..91c3f27c3 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/dto/RobotDoingAction.java @@ -0,0 +1,8 @@ +package cn.iocoder.yudao.module.system.config.poperties.dto; + +import lombok.Data; + +@Data +public class RobotDoingAction { + private Long doingActionCacheTime; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/dto/Task.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/dto/Task.java new file mode 100644 index 000000000..474a1db4a --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/config/poperties/dto/Task.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.module.system.config.poperties.dto; + +import lombok.Data; + +@Data +public class Task { + private Boolean checkSkuInfo; + private Long taskChcheTime; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotInformationController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotInformationController.java index 50e3ff803..e278d79b9 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotInformationController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotInformationController.java @@ -153,7 +153,7 @@ public class RobotInformationController { @Operation(summary = "恢复任务") @PreAuthorize("@ss.hasPermission('robot:information:doTaskContinue')") public CommonResult doTaskContinue(@RequestParam("robotNo") String robotNo) { - informationService.doTaskContinue(robotNo); + informationService.doTaskContinue(robotNo,false); return success(true); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotStatusCodeEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotStatusCodeEnum.java index bfda718ca..271064018 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotStatusCodeEnum.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/RobotStatusCodeEnum.java @@ -13,7 +13,8 @@ public enum RobotStatusCodeEnum { FAIL_JSON("10001","入参JSON解析失败"), FAIL_SYSTEM("10002","系统内部异常"), FAIL_UN_KNOW("10003","未知错误"), - FAIL_UN_SUPPOD("10004","未支持该指令执行"); + FAIL_UN_SUPPOD("10004","未支持该指令执行"), + EXCEEDING_SECONDS("10017","PP发送的任务超过5秒到达"); /** * 类型 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/WorkProgressEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/WorkProgressEnum.java new file mode 100644 index 000000000..ffe96d5ef --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/task/WorkProgressEnum.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.system.enums.robot.task; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum WorkProgressEnum { + + FORK_OFFSET("FORK_OFFSET","取放货"); + + /** + * 类型 + */ + 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/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 06e8faf9f..cd91eace5 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 @@ -84,9 +84,11 @@ public class RobotJob { RLock lock = redissonUtils.getLock(RobotCacheLockEnum.ROBOT_TASK_DISTRIBUTE_LOCK.getKey()); if (lock.tryLock()){ try { - log.info("----下发自动充电任务----"); + log.info("----111111下发自动充电任务----"); autoChargeService.autoChargeJob(); - } finally { + } catch (Exception e) { + log.info("自动充电异常 :{}",e); + } finally { lock.unlock(); } }else { @@ -105,9 +107,11 @@ public class RobotJob { RLock lock = redissonUtils.getLock(RobotCacheLockEnum.ROBOT_TASK_DISTRIBUTE_LOCK.getKey()); if (lock.tryLock()){ try { - log.info("----下发任务给路径规划----"); + log.info("----111111下发任务给路径规划----"); robotPathPlanningService.sendTaskToPP(); - } finally { + } catch (Exception e) { + log.info("----分配任务异常---- :{}",e); + } finally { lock.unlock(); } }else { @@ -127,12 +131,16 @@ public class RobotJob { RLock lock = redissonUtils.getLock(RobotCacheLockEnum.ROBOT_TASK_ADD_LOCK.getKey()); if (lock.tryLock()){ + try { - log.info("----创建循环任务----"); + log.info("----111111创建循环任务----"); cycleService.cycleTaskJob(); - } finally { + } catch (Exception e) { + log.error("创建循环任务异常 :{}",e); + } finally { lock.unlock(); } + }else { log.info("下发任务给路径规划未获取到锁"); throw exception(REDISSON_NOT_OBTAIN_LOCK); @@ -173,7 +181,9 @@ public class RobotJob { log.info("----统计时长开始----"); TenantContextHolder.setTenantId(1L); robotWorkingHoursStatisticsService.statisticsRobotDuration(); - } finally { + } catch (Exception e) { + log.info("统计工作时长异常 :{}",e); + } finally { lock.unlock(); } }else { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/schedul/RcsMapScheduled.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/schedul/RcsMapScheduled.java index 50a033b12..5ce817ae3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/schedul/RcsMapScheduled.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/schedul/RcsMapScheduled.java @@ -11,12 +11,14 @@ import cn.iocoder.yudao.module.system.util.redis.RedisUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; @EnableScheduling @Component 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 065612054..4c4441984 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 @@ -162,7 +162,7 @@ public interface RobotInformationService extends IService { * 继续做任务 * @param robotNo */ - void doTaskContinue(String robotNo); + void doTaskContinue(String robotNo,Boolean isRobot); /** * 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 0ad5cc38e..8e43dab3b 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 @@ -162,13 +162,10 @@ public class RobotInformationServiceImpl extends ServiceImpl() .eq(PositionMapItemDO::getRobotNo, robotInformationDO.getRobotNo()) .eq(PositionMapItemDO::getUseStatus, UseStatusEnum.USEING.getType()) .eq(PositionMapItemDO::getType, PositionMapItemEnum.STOP.getType()) .last("limit 1")); if (ObjectUtil.isNotEmpty(positionMapItem) && ObjectUtil.isEmpty(updateReqVO.getFloorAreaJson())) { - log.info("车辆 :{} ,停靠在 :{},",robotInformationDO.getRobotNo(), positionMapItem.getPositionMapId()); + log.info("车辆 :{} ,停靠在 :{},", robotInformationDO.getRobotNo(), positionMapItem.getPositionMapId()); throw exception(ROBOT_PART_AREA); - }else if (ObjectUtil.isNotEmpty(positionMapItem) && ObjectUtil.isNotEmpty(updateReqVO.getFloorAreaJson()) - && !updateReqVO.getFloorAreaJson().contains(positionMapItem.getPositionMapId())) { + } else if (ObjectUtil.isNotEmpty(positionMapItem) && ObjectUtil.isNotEmpty(updateReqVO.getFloorAreaJson()) + && !updateReqVO.getFloorAreaJson().contains(positionMapItem.getPositionMapId())) { throw exception(ROBOT_PART_AREA); } } @@ -1167,7 +1164,7 @@ public class RobotInformationServiceImpl extends ServiceImpl robotNoLimitions = Arrays.asList(taskRobotNoLimittationAreaDTO); pathPlanning.setRobotNoLimitationAreaDTOS(robotNoLimitions); - if (!isSimulation || !restoreTaskRestart) { - resendToPPData(pathPlanning, actionLog, robotInformationDO, false); - } + resendToPPData(pathPlanning, actionLog, robotInformationDO, false); List pathPlanningList = new ArrayList<>(); pathPlanningList.add(pathPlanning); @@ -1329,27 +1328,35 @@ public class RobotInformationServiceImpl extends ServiceImpl> taskIdMap = detailDOS.stream().collect(Collectors.groupingBy(RobotTaskDetailDO::getRobotTaskId)); - String incrementByKey = redisUtil.getIncrementByKey(RobotCacheLockEnum.TASK_NO.getKey()); + List taskDOList = new ArrayList<>(); List taskDetailList = new LinkedList<>(); for (RobotTaskDO v : taskList) { + String incrementByKey = redisUtil.getIncrementByKey(RobotCacheLockEnum.TASK_NO.getKey()); RobotTaskDO taskData = getTaskData(incrementByKey, v); List taskDetailDOS = getTaskDetailData(taskData,taskIdMap,v.getId()); taskDOList.add(taskData); @@ -102,10 +103,21 @@ public class CycleServiceImpl implements CycleService { v.setRemainingCycleNumber(0l); } - taskMapper.insertBatch(taskDOList); + taskMapper.insert(taskDOList); taskMapper.updateById(taskList); - Collections.reverse(taskDetailList); - taskDetailMapper.insertBatch(taskDetailList); + + List moves = taskDetailList.stream().filter(v -> RobotTaskTypeEnum.MOVE_TO_POINT.getType().equals(v.getTaskType())).collect(Collectors.toList()); + List takes = taskDetailList.stream().filter(v -> !RobotTaskTypeEnum.MOVE_TO_POINT.getType().equals(v.getTaskType())).collect(Collectors.toList()); + List taskDetails= new LinkedList<>(); + if (ObjectUtil.isNotEmpty(moves)) { + taskDetails.addAll(moves); + } + if (ObjectUtil.isNotEmpty(takes)) { + Collections.reverse(takes); + taskDetails.addAll(takes); + } + + taskDetailMapper.insert(taskDetails); List fromLocationIds = taskDetailList.stream().map(RobotTaskDetailDO::getFromLocationId).collect(Collectors.toList()); List toLocationIds = taskDetailList.stream().map(RobotTaskDetailDO::getToLocationId).collect(Collectors.toList()); @@ -118,7 +130,7 @@ public class CycleServiceImpl implements CycleService { locationMapper.updateLocationLockList(list, -1l, LocationLockEnum.NO.getType()); }); - List bean = BeanUtils.toBean(taskDetailList, RobotTaskDetailAddVO.class); + List bean = BeanUtils.toBean(taskDetails, RobotTaskDetailAddVO.class); Map> taskDetailMap = bean.stream().collect(Collectors.groupingBy(RobotTaskDetailAddVO::getRobotTaskId)); taskDetailMap.forEach((k,v) ->{ 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 7ddcb96a6..cab931e09 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 @@ -92,7 +92,7 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { .in(RobotInformationDO::getRobotStatus, RobotStatusEnum.STAND_BY.getType(), RobotStatusEnum.CHARGE.getType()) .eq(RobotInformationDO::getRobotTaskModel, RobotTaskModelEnum.NORMAL.getType())); - if (robots.isEmpty()) { + if (ObjectUtil.isEmpty(robots)) { log.info("暂无空闲的机器人"); return pair; } 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 403795f61..c919f5aaf 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 @@ -95,7 +95,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService { @Value("${zn.robot_config.offset_height}") private Double offsetHeight; - @Value("${zn.path_planning.task_chche_time:604800}") + @Value("${zn.task.task_chche_time:604800}") private Long taskChcheTime; @Value("${zn.move-no:MOVE}") @@ -148,8 +148,8 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService { return; } - log.info("-------查找车子------ ,:{}",JSON.toJSONString(robots)); - log.info("-------查找任务------ ,:{}",JSON.toJSONString(taskDetailDOS)); + log.info("-------可以分配任务的车辆编号------ ,:{}",JSON.toJSONString(robots.stream().map(RobotInformationDO::getRobotNo).collect(Collectors.toList()))); + log.info("-------需要执行的任务id------ ,:{}",JSON.toJSONString(taskDetailDOS.stream().map(RobotTaskDetailDO::getId).collect(Collectors.toList()))); distributeTasksToPP(robots, taskDetailDOS); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml index f10ee789e..b7c36c941 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml @@ -238,16 +238,16 @@ zn: priority_config: 50 #优先级 task: #任务相关的配置 check_sku_info: true #校验物料信息 + task_chche_time: 1209600 #任务缓存的时间, 默认一星期 robot_config: #机器人取放货默认配置 offset_height: 0.1 #叉起货需要在原来高度基础上偏移的高度 default_tray_height: 0.82 #默认每层高度 open_rate_limiter: true #是否开启限流 path_planning: task_chche_time: 1209600 #任务缓存的时间, 默认一星期 - is_simulation: true # 是否为仿真环境 + is_simulation: false # 是否为仿真环境 send_robot_init_pose: true # 是否为发送默认的车辆所在地图和点位 - restore_task_restart: true # 恢复任务是否全部重新执行 true:全部重新开始 - synchronous_all_map_node: 500 # 点位信息每次发送的数据量 +# synchronous_all_map_node: 500 # 点位信息每次发送的数据量 task_not_check: true # 创建任务不校验 logging: