From b0ac304a8f4f68a7e3ef21cfd5c753e9736c6751 Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Fri, 6 Jun 2025 19:29:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E4=B8=8B=E5=8F=91=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/logback-spring.xml | 2 +- .../api/robot/RobotReactiveStatusApiImpl.java | 2 +- .../api/robot/processor/RequestProcessor.java | 2 +- .../vo/DeviceInformationPageReqVO.java | 5 +- .../vo/DeviceInformationRespVO.java | 6 ++- .../vo/DeviceInformationSaveReqVO.java | 5 +- .../information/DeviceInformationDO.java | 6 ++- .../dataobject/positionmap/PositionMapDO.java | 1 - .../system/enums/device/DeviceTypeEnum.java | 3 +- .../DeviceInformationServiceImpl.java | 43 ++++++++++++---- .../service/robot/RobotTaskServiceImpl.java | 50 ++++++++++++++++--- .../robot/camera/RobotCameraServiceImpl.java | 19 +------ .../robot/job/DistributeTasksServiceImpl.java | 26 ++++------ .../RobotPathPlanningServiceImpl.java | 44 +++++++++++----- .../system/util/aes/AESEncryptionUtil.java | 21 ++++++++ 15 files changed, 163 insertions(+), 72 deletions(-) diff --git a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/logback-spring.xml b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/logback-spring.xml index b1b9f3faf..7ba7f8595 100644 --- a/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/logback-spring.xml +++ b/yudao-module-mqtt/yudao-module-mqtt-biz/src/main/resources/logback-spring.xml @@ -31,7 +31,7 @@ ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false} - ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB} + 50MB ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotReactiveStatusApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotReactiveStatusApiImpl.java index b82d2bca9..a29d20572 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotReactiveStatusApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotReactiveStatusApiImpl.java @@ -62,7 +62,7 @@ public class RobotReactiveStatusApiImpl implements RobotReactiveStatusApi { @Override public void robotReactiveStatus(String message) { TenantContextHolder.setTenantId(1L); - log.info("车辆所在楼层和异常信息 :{}", message); +// log.info("车辆所在楼层和异常信息 :{}", message); RobotReactiveStatusDTO data = JSON.parseObject(message, RobotReactiveStatusDTO.class); String floorAreaKey = RobotTaskChcheConstant.ROBOT_FLOOR_AREA + data.getMac(); String robotNo = robotInformationService.getRobotNoByMac(data.getMac()); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/processor/RequestProcessor.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/processor/RequestProcessor.java index e49e231c3..08e9489a2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/processor/RequestProcessor.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/processor/RequestProcessor.java @@ -47,7 +47,7 @@ public class RequestProcessor { private void sendData(String map, Map data) { // -- 发送给对应的websocket // System.out.println("key:" + map + "发送数据:" + data); - log.info("key:" + map + "发送数据:" + data); +// log.info("key:" + map + "发送数据:" + data); webSocketSenderApi.sendObject(map, WebSocketConstant.MAP_PUSH, data); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java index d2f81e82d..4662d3f8e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java @@ -35,7 +35,7 @@ public class DeviceInformationPageReqVO extends PageParam { @Schema(description = "深度") private BigDecimal locationDeep; - //1:充电桩,2:输送线,3:码垛机,4:自动门,5:提升机,6:信号灯,7:按钮盒,8:拆垛机 + //1:充电桩,2:输送线,3:码垛机,4:自动门,5:提升机,6:信号灯,7:按钮盒,8:拆垛机, 9:摄像头 @Schema(description = "设备类型 字典device_type", example = "2") private Integer deviceType; @@ -89,4 +89,7 @@ public class DeviceInformationPageReqVO extends PageParam { @Schema(description = "最后使用者") private String lastUser; + @Schema(description = "摄像头类型(1 枪机 2半球 3球机 4云台枪机)") + private String cameraType; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java index 9622469d3..0c969f726 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java @@ -42,7 +42,7 @@ public class DeviceInformationRespVO { @ExcelProperty("深度") private BigDecimal locationDeep; - //1:充电桩,2:输送线,3:码垛机,4:自动门,5:提升机,6:信号灯,7:按钮盒,8:拆垛机 + //1:充电桩,2:输送线,3:码垛机,4:自动门,5:提升机,6:信号灯,7:按钮盒,8:拆垛机, 9:摄像头 @Schema(description = "设备类型 字典device_type", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @ExcelProperty("设备类型 字典device_type") private Integer deviceType; @@ -120,4 +120,8 @@ public class DeviceInformationRespVO { @ExcelProperty("最后使用者") private String lastUser; + @Schema(description = "摄像头类型(1 枪机 2半球 3球机 4云台枪机)") + @ExcelProperty("摄像头类型(1 枪机 2半球 3球机 4云台枪机)") + private String cameraType; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java index a4bf74ce7..ffcd03b2f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java @@ -35,7 +35,7 @@ public class DeviceInformationSaveReqVO { @Schema(description = "深度") private BigDecimal locationDeep; - //1:充电桩,2:输送线,3:码垛机,4:自动门,5:提升机,6:信号灯,7:按钮盒,8:拆垛机 + //1:充电桩,2:输送线,3:码垛机,4:自动门,5:提升机,6:信号灯,7:按钮盒,8:拆垛机 9:摄像头 @Schema(description = "设备类型 字典device_type", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @NotNull(message = "设备类型不能为空") private Integer deviceType; @@ -89,4 +89,7 @@ public class DeviceInformationSaveReqVO { @Schema(description = "最后使用者") private String lastUser; + @Schema(description = "摄像头类型(1 枪机 2半球 3球机 4云台枪机)") + private String cameraType; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java index 4d710c3a5..7b5738991 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java @@ -67,7 +67,7 @@ public class DeviceInformationDO extends BaseDO { */ private BigDecimal locationDeep; /** - * 1:充电桩,2:输送线,3:码垛机,4:自动门,5:提升机,6:信号灯,7:按钮盒,8:拆垛机 + * 1:充电桩,2:输送线,3:码垛机,4:自动门,5:提升机,6:信号灯,7:按钮盒,8:拆垛机, 9:摄像头 * 设备类型 字典device_type */ private Integer deviceType; @@ -135,4 +135,8 @@ public class DeviceInformationDO extends BaseDO { */ private String lastUser; + /** + * 摄像头类型(1 枪机 2半球 3球机 4云台枪机) + */ + private String cameraType; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapDO.java index 7099a5160..d2d002890 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapDO.java @@ -25,7 +25,6 @@ public class PositionMapDO extends BaseDO { /** * 主键ID */ - @TableId(type = IdType.ASSIGN_ID) private Long id; /** * 楼层 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceTypeEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceTypeEnum.java index 3e39d0a5c..c426c0eca 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceTypeEnum.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceTypeEnum.java @@ -14,7 +14,8 @@ public enum DeviceTypeEnum { HOIST(5, "提升机"), SIGNAL_LIGHT(6, "信号灯"), BUTTON_BOX(7, "按钮盒"), - DISMANTLING_MACHINE(8, "拆垛机"); + DISMANTLING_MACHINE(8, "拆垛机"), + CAMERA(9, "摄像头"); /** * 类型 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java index 384afd2a7..8932804a6 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java @@ -32,6 +32,7 @@ import cn.iocoder.yudao.module.system.service.dict.DictDataService; import cn.iocoder.yudao.module.system.service.log.UserOperationLogService; import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService; import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService; +import cn.iocoder.yudao.module.system.util.aes.AESEncryptionUtil; import cn.iocoder.yudao.module.system.util.modbus3.ModbusUtils; import cn.iocoder.yudao.module.system.util.redis.RedisUtil; import com.alibaba.fastjson.JSON; @@ -42,6 +43,7 @@ import com.serotonin.modbus4j.ModbusMaster; import com.serotonin.modbus4j.exception.ModbusInitException; import com.serotonin.modbus4j.exception.ModbusTransportException; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -92,6 +94,9 @@ public class DeviceInformationServiceImpl extends ServiceImpl map = new HashMap(); + Map map = new HashMap(); map = gson.fromJson(dataJson, map.getClass()); - map.put("deviceType",updateObj.getDeviceType()); - map.put("deviceNo",updateObj.getDeviceNo()); - map.put("mapImageUrl",updateObj.getMapImageUrl()); + map.put("deviceType", updateObj.getDeviceType()); + map.put("deviceNo", updateObj.getDeviceNo()); + map.put("mapImageUrl", updateObj.getMapImageUrl()); positionMapItem.setDataJson(JSON.toJSONString(map)); positionMapItemService.updateById(positionMapItem); @@ -228,7 +247,7 @@ public class DeviceInformationServiceImpl extends ServiceImpl { + list.get(2).forEach(a -> { a.setPositionMapItemId(null); a.setPositionMapId(null); }); @@ -349,7 +368,9 @@ public class DeviceInformationServiceImpl extends ServiceImpl pointList = new ArrayList<>(); + List takeRobotNos = new ArrayList<>(); + List releaseRobotNos = new ArrayList<>(); + for (RobotTaskDetailAddVO robotTaskDetail : createReqVO.getTaskDetailList()) { - if (!RobotTaskTypeEnum.MOVE_TO_POINT.getType().equals(robotTaskDetail.getTaskType())) { - continue; + if (RobotTaskTypeEnum.MOVE_TO_POINT.getType().equals(robotTaskDetail.getTaskType())) { + if (pointList.contains(robotTaskDetail.getReleaseId())) { + PositionMapItemDO positionMapItem = positionMapItemService.getPositionMapItem(robotTaskDetail.getReleaseId()); + throw exception0(TASK_CHECK_EXCEPTION.getCode(), "以下移动的点位重复 " + positionMapItem.getSortNum(), positionMapItem.getSortNum()); + } + pointList.add(robotTaskDetail.getReleaseId()); + }else if (RobotTaskTypeEnum.TAKE.getType().equals(robotTaskDetail.getTaskType())) { + if (takeRobotNos.contains(robotTaskDetail.getRobotNo())) { + throw exception0(TASK_CHECK_EXCEPTION.getCode(), "一辆车只能有一个仅取货任务 " + robotTaskDetail.getRobotNo(), robotTaskDetail.getRobotNo()); + } + takeRobotNos.add(robotTaskDetail.getRobotNo()); + }else if (RobotTaskTypeEnum.RELEASE.getType().equals(robotTaskDetail.getTaskType())) { + if (releaseRobotNos.contains(robotTaskDetail.getRobotNo())) { + throw exception0(TASK_CHECK_EXCEPTION.getCode(), "一辆车只能有一个仅放货任务 " + robotTaskDetail.getRobotNo(), robotTaskDetail.getRobotNo()); + } + releaseRobotNos.add(robotTaskDetail.getRobotNo()); } - if (pointList.contains(robotTaskDetail.getReleaseId())) { - PositionMapItemDO positionMapItem = positionMapItemService.getPositionMapItem(robotTaskDetail.getReleaseId()); - throw exception0(TASK_CHECK_EXCEPTION.getCode(), "以下移动的点位重复 " + positionMapItem.getSortNum(), positionMapItem.getSortNum()); - } - pointList.add(robotTaskDetail.getReleaseId()); } if (ObjectUtil.isNotEmpty(pointList)) { @@ -285,6 +297,28 @@ public class RobotTaskServiceImpl extends ServiceImpl() + .in(RobotTaskDetailDO::getRobotNo, takeRobotNos) + .in(RobotTaskDetailDO::getTaskStatus,RobotTaskStatusEnum.NEW.getType(), RobotTaskStatusEnum.DOING.getType()) + .eq(RobotTaskDetailDO::getTaskType, RobotTaskTypeEnum.TAKE.getType()) + .last("limit 1")); + if (ObjectUtil.isNotEmpty(takeTask)) { + throw exception0(TASK_CHECK_EXCEPTION.getCode(), "一辆车只能有一个仅取货任务 " + takeTask.getRobotNo(), takeTask.getRobotNo()); + } + } + + if (ObjectUtil.isNotEmpty(releaseRobotNos)) { + RobotTaskDetailDO releaseTask = taskDetailMapper.selectOne(new LambdaQueryWrapperX() + .in(RobotTaskDetailDO::getRobotNo, releaseRobotNos) + .in(RobotTaskDetailDO::getTaskStatus,RobotTaskStatusEnum.NEW.getType(), RobotTaskStatusEnum.DOING.getType()) + .eq(RobotTaskDetailDO::getTaskType, RobotTaskTypeEnum.RELEASE.getType()) + .last("limit 1")); + if (ObjectUtil.isNotEmpty(releaseTask)) { + throw exception0(TASK_CHECK_EXCEPTION.getCode(), "一辆车只能有一个仅放货任务 " + releaseTask.getRobotNo(), releaseTask.getRobotNo()); + } + } } public String getSortNumStr(List pointList) { @@ -1123,7 +1157,7 @@ public class RobotTaskServiceImpl extends ServiceImpl lastTaskDetails = robotTaskDetailMapper.getLastTaskGroupByRobotNo(); + /*List lastTaskDetails = robotTaskDetailMapper.getLastTaskGroupByRobotNo(); Map lastTaskDetailMap = null; if (ObjectUtil.isNotEmpty(lastTaskDetails)) { lastTaskDetailMap = lastTaskDetails.stream().collect(Collectors.toMap(v -> v.getRobotNo(), Function.identity())); - } + }*/ CommonConfigVO chargeConfig = JSONUtil.toBean(commonConfigDO.getConfigStr(), CommonConfigVO.class); @@ -113,7 +113,7 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { } String taskStatusKey = RobotTaskChcheConstant.ROBOT_TASK_STATUS + robot.getMacAddress(); - String cargoDetectedKey = RobotTaskChcheConstant.ROBOT_CARGO_DETECTED + robot.getMacAddress(); + Object taskStatus = redisUtil.get(taskStatusKey); if (ObjectUtil.isEmpty(taskStatus) || !RobotStatusCodeConstant.CAN_DO_TASK.equals(Boolean.parseBoolean(String.valueOf(taskStatus)))) { robot.setRobotStatus(RobotStatusEnum.DOING.getType()); @@ -121,12 +121,12 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { continue; } - Object cargoDetected = redisUtil.get(cargoDetectedKey); + //取货的,先执行放货再去充电 - if (ObjectUtil.isNotEmpty(lastTaskDetailMap) && ObjectUtil.isNotEmpty(lastTaskDetailMap.get(robot.getRobotNo()))) { + /*if (ObjectUtil.isNotEmpty(lastTaskDetailMap) && ObjectUtil.isNotEmpty(lastTaskDetailMap.get(robot.getRobotNo()))) { robot.setRobotStatus(RobotStatusEnum.LAST_TASK_IS_TAKE.getType()); continue; - } + }*/ if (ObjectUtil.isNotEmpty(chargeConfig) && ObjectUtil.isNotEmpty(chargeConfig.getStartAutoCharge())) { String socKey = RobotTaskChcheConstant.ROBOT_INFORMATION_SOC +robot.getMacAddress(); @@ -146,11 +146,7 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { } } - if (ObjectUtil.isEmpty(cargoDetected) || RobotStatusCodeConstant.CARGO_DETECTED.equals(Boolean.parseBoolean(String.valueOf(cargoDetected)))) { - robot.setRobotStatus(RobotStatusEnum.DOING.getType()); - log.info("车机上报传感器被按下--不允许接任务 :{}",robot.getRobotNo()); - continue; - } + //自动充电的车子,电量到达设定的阀值,也能执行任务 /*if (ChargeTypeEnum.AUTOMATIC.getType().equals(robot.getChargeType()) && RobotStatusEnum.CHARGE.getType().equals(robot.getRobotStatus())) { @@ -162,15 +158,15 @@ public class DistributeTasksServiceImpl implements DistributeTasksService { } } - robots = robots.stream() + /*robots = robots.stream() .filter(v -> (RobotStatusEnum.STAND_BY.getType().equals(v.getRobotStatus()) || RobotStatusEnum.LAST_TASK_IS_TAKE.getType().equals(v.getRobotStatus()))) - .collect(Collectors.toList()); + .collect(Collectors.toList());*/ - if (robots.isEmpty()) { + /*if (robots.isEmpty()) { log.info("暂无可用的机器人,可能正在充电,可能车机上报不允许接任务"); return pair; - } + }*/ log.info("完成查找车子"); 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 4b828a6ea..14e07d975 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 @@ -12,6 +12,8 @@ import cn.iocoder.yudao.module.mqtt.api.path.task.TaskRobotNoLimittationAreaDTO; import cn.iocoder.yudao.module.mqtt.api.path.task.TaskToPathPlanningDTO; import cn.iocoder.yudao.module.system.constant.path.PathPlanningChcheConstant; import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant; +import cn.iocoder.yudao.module.system.constant.robot.RobotStatusCodeConstant; +import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant; import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailAddVO; import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO; @@ -34,6 +36,7 @@ import cn.iocoder.yudao.module.system.enums.redis.RobotCacheLockEnum; import cn.iocoder.yudao.module.system.enums.robot.*; import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeModelEnum; import cn.iocoder.yudao.module.system.enums.robot.information.ChargeTypeEnum; +import cn.iocoder.yudao.module.system.service.robot.RobotInformationService; import cn.iocoder.yudao.module.system.service.robot.RobotTaskService; import cn.iocoder.yudao.module.system.service.robot.job.DistributeTasksService; import cn.iocoder.yudao.module.system.util.redis.RedisUtil; @@ -111,6 +114,10 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService { @Lazy private RobotTaskService taskService; + @Resource + @Lazy + private RobotInformationService informationService; + /** * 下发任务给PP */ @@ -230,7 +237,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService { if (ObjectUtil.isNotEmpty(robotNos)) { List emptyMapItems = positionMapItems.stream() - .filter(v -> UseStatusEnum.FREE.getType().equals(v.getUseStatus())) + .filter(v -> UseStatusEnum.FREE.getType().equals(v.getUseStatus())) .collect(Collectors.toList()); if (ObjectUtil.isNotEmpty(emptyMapItems)) { for (PositionMapItemDO positionMapItem : emptyMapItems) { @@ -404,7 +411,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService { List robotNoLimitationArea = pair.getLeft(); //前一个任务是仅取货 - List robotDoTake = getRobotDoTake(robots); +// List robotDoTake = getRobotDoTake(robots); for (RobotInformationDO robot : robots) { taskService.chargeDone(robot.getRobotNo()); @@ -445,10 +452,17 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService { moveToPoint(pathPlanning, taskDetailDO); } - if (ObjectUtil.isNotEmpty(robotDoTake) && ObjectUtil.isNotEmpty(taskDetailDO.getRobotNo()) - && robotDoTake.contains(taskDetailDO.getRobotNo()) - && !RobotTaskTypeEnum.RELEASE.getType().equals(taskDetailDO.getTaskType())) { - log.info("机器人前一个任务是仅取货,当前任务非仅放货,所以当前任务不执行 :{}", taskDetailDO.getId()); + String mac = informationService.getMacByRobotNo(taskDetailDO.getRobotNo()); + String cargoDetectedKey = RobotTaskChcheConstant.ROBOT_CARGO_DETECTED + mac; + Object cargoDetected = redisUtil.get(cargoDetectedKey); + log.info("传感器是否按下 :{}", cargoDetected); + if (ObjectUtil.isEmpty(cargoDetected) || (RobotStatusCodeConstant.CARGO_DETECTED.equals(Boolean.parseBoolean(String.valueOf(cargoDetected))) + && !RobotTaskTypeEnum.RELEASE.getType().equals(taskDetailDO.getTaskType()))) { + log.info("车机上报传感器为空, 或者 被按下且任务非仅放货任务 :{} ,任务id :{}", taskDetailDO.getRobotNo(), taskDetailDO.getId()); + continue; + } else if (!RobotStatusCodeConstant.CARGO_DETECTED.equals(Boolean.parseBoolean(String.valueOf(cargoDetected))) + && RobotTaskTypeEnum.RELEASE.getType().equals(taskDetailDO.getTaskType())) { + log.info("仅放货任务,传感器未被按下,所以不执行任务 :{}, 任务id :{}", taskDetailDO.getRobotNo(), taskDetailDO.getId()); continue; } @@ -457,7 +471,11 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService { robotNoLimitions = robotNoLimitationArea; } else { TaskRobotNoLimittationAreaDTO taskRobotNoLimittationAreaDTO = robotDoReleaseMap.get(taskDetailDO.getRobotNo()); - robotNoLimitions = Arrays.asList(taskRobotNoLimittationAreaDTO); + if (ObjectUtil.isEmpty(taskRobotNoLimittationAreaDTO)) { + log.info("车辆没有能行走的区域 :{}", taskDetailDO.getRobotNo()); + continue; + } + robotNoLimitions = Collections.singletonList(taskRobotNoLimittationAreaDTO); } if (ObjectUtil.isEmpty(robotNoLimitions)) { @@ -587,14 +605,14 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService { } } + if (positionMapDOS.size() == limitationAreaList.size()) { + log.info("车辆不能行走所有的区域所以不下发任务 :{}", robot.getRobotNo()); + continue; + } robotNoLimitationAreaDTO.setLimitationAreaList(limitationAreaList); - if (RobotStatusEnum.LAST_TASK_IS_TAKE.getType().equals(robot.getRobotStatus())) { - map.put(robot.getRobotNo(), robotNoLimitationAreaDTO); - } else { - robotNoLimitationAreaDTOS.add(robotNoLimitationAreaDTO); - map.put(robot.getRobotNo(), robotNoLimitationAreaDTO); - } + robotNoLimitationAreaDTOS.add(robotNoLimitationAreaDTO); + map.put(robot.getRobotNo(), robotNoLimitationAreaDTO); } return ImmutablePair.of(robotNoLimitationAreaDTOS, map); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/util/aes/AESEncryptionUtil.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/util/aes/AESEncryptionUtil.java index 88233092c..9730e6065 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/util/aes/AESEncryptionUtil.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/util/aes/AESEncryptionUtil.java @@ -48,4 +48,25 @@ public class AESEncryptionUtil { String decryptedText = decrypt(encryptedText, key); System.out.println("Decrypted Text: " + decryptedText); } + + /** + * 获取解密后数据 + * @param str + * @param cameraSecretKey + * @return + */ + public static String getEncrypt(String str, String cameraSecretKey){ + try { + AESEncryptionUtil.decrypt(str, cameraSecretKey); + return str; + } catch (Exception ignored) { + + } + + try { + return AESEncryptionUtil.encrypt(str, cameraSecretKey); + } catch (Exception e) { + throw new RuntimeException(e); + } + } }