diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotGenericsStatusApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotGenericsStatusApiImpl.java index 156b42e91..054bd5578 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotGenericsStatusApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotGenericsStatusApiImpl.java @@ -43,6 +43,9 @@ public class RobotGenericsStatusApiImpl implements RobotGenericsStatusApi { if (ObjectUtil.isNotEmpty(batSoc)) { String[] split = batSoc.split("\\."); batSoc = split[1].substring(0,2); + if (batSoc.startsWith("0")) { + batSoc = batSoc.substring(1); + } redisUtil.set(socKey,batSoc); } } 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 891e634f6..41b477523 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 @@ -157,30 +157,8 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { * @param robotCompleteTaskDTO */ private void robotTaskDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey) { - String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); - RobotTaskDetailActionLogDO lastLog = setLastLogDone(robotCompleteTaskDTO.getOrderId()); - if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) { - chargeDoing(robotCompleteTaskDTO, robotDoingActionKey, lastLog); - } else if (PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(robotCompleteTaskDTO.getOrderType())) { - RobotTaskDetailActionLogSaveReqVO logOne = new RobotTaskDetailActionLogSaveReqVO(); - logOne.setActionMsg("车辆正在前往等待点"); - logOne.setRobotNo(robotNo); - logOne.setStartTime(LocalDateTime.now()); - logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId()); - if (ObjectUtil.isNotEmpty(lastLog)) { - logOne.setCommandType(lastLog.getCommandType()); - logOne.setTaskNo(lastLog.getTaskNo()); - } - Long mapId = robotInformationService.getRobotMapIdByRobotNo(robotNo); - if (ObjectUtil.isNotEmpty(mapId)) { - logOne.setPositionMapId(mapId); - } - taskDetailActionLogService.createTaskDetailActionLog(logOne); - redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime); - } else { - taskDoing(robotCompleteTaskDTO, robotDoingActionKey); - } + taskDoing(robotCompleteTaskDTO, robotDoingActionKey); if ((PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType()) || PathTaskTypeEnum.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) @@ -197,6 +175,10 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { taskDetailActionLogMapper.updateActionStatus(robotCompleteTaskDTO.getOrderId(), ActionStatusEnum.DOING.getType() , null); + + if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) { + chargeDoing(robotCompleteTaskDTO); + } } /** @@ -243,7 +225,10 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { } else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(robotCompleteTaskDTO.getCommandStatus().getCommandType())) { taskDone(robotCompleteTaskDTO); } - } else if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) { + } + + if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType()) + || PathTaskTypeEnum.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) { RobotChargeLogDO build = RobotChargeLogDO .builder() .id(robotCompleteTaskDTO.getOrderId()) @@ -355,19 +340,10 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { * * @param robotCompleteTaskDTO */ - private void chargeDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey, RobotTaskDetailActionLogDO lastLog) { - RobotTaskDetailActionLogSaveReqVO logOne = new RobotTaskDetailActionLogSaveReqVO(); + private void chargeDoing(RobotCompleteTaskDTO robotCompleteTaskDTO) { + RobotCommandStateDTO commandStatus = robotCompleteTaskDTO.getCommandStatus(); Integer taskStatus = ChargeTaskStatusEnum.CHARGEING.getType(); - if (ObjectUtil.isNotEmpty(commandStatus) && CommandTypeEnum.MOVE_POSES.getType().equals(commandStatus.getCommandType())) { - RobotChargeLogDO robotChargeLogDO = chargeLogMapper.selectById(robotCompleteTaskDTO.getOrderId()); - logOne.setActionMsg("车辆正在前往充电点" + robotChargeLogDO.getDeviceNo()); - logOne.setTaskStage(RobotTaskStageEnum.MOVE.getType()); - taskStatus = ChargeTaskStatusEnum.DOING.getType(); - } else if (ObjectUtil.isNotEmpty(commandStatus)) { - logOne.setActionMsg("车辆正在充电"); - logOne.setTaskStage(RobotTaskStageEnum.CHARGEING.getType()); - } //编辑地图会判断这表的状态,所以自动充电任务,移动到充电点就改为完成 if (ObjectUtil.isNotEmpty(commandStatus) && CommandTypeEnum.MOVE_POSES.getType().equals(commandStatus.getCommandType()) @@ -375,19 +351,6 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { taskDetailActionLogMapper.updateActionStatus(robotCompleteTaskDTO.getOrderId(), ActionStatusEnum.DONE.getType(), LocalDateTime.now()); } - String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac()); - logOne.setRobotNo(robotNo); - logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId()); - - logOne.setCommandType(lastLog.getCommandType()); - logOne.setTaskNo(lastLog.getTaskNo()); - logOne.setStartTime(LocalDateTime.now()); - Long mapId = robotInformationService.getRobotMapIdByRobotNo(robotNo); - if (ObjectUtil.isNotEmpty(mapId)) { - logOne.setPositionMapId(mapId); - } - taskDetailActionLogService.createTaskDetailActionLog(logOne); - redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime); RobotChargeLogDO build = RobotChargeLogDO .builder() .id(robotCompleteTaskDTO.getOrderId()) @@ -470,7 +433,8 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType()); } - } else if (PathTaskTypeEnum.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) { + } else if (PathTaskTypeEnum.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType()) + || PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) { RobotChargeLogDO robotChargeLogDO = chargeLogMapper.selectById(robotCompleteTaskDTO.getOrderId()); if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) { logOne.setActionMsg("车辆正在前往" + robotChargeLogDO.getDeviceNo() + "充电"); @@ -480,7 +444,9 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.CHARGEING.getType()); } - } else if (PathTaskTypeEnum.MOVE.getType().equals(robotCompleteTaskDTO.getOrderType())) { + } else if (PathTaskTypeEnum.MOVE.getType().equals(robotCompleteTaskDTO.getOrderType()) + || PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(robotCompleteTaskDTO.getOrderType()) + || PathTaskTypeEnum.MOVE_TO_POINT.getType().equals(robotCompleteTaskDTO.getOrderType())) { if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) { logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo()); robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.MOVE.getType()); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/redis/RobotCacheLockEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/redis/RobotCacheLockEnum.java index 67c93284b..c075ce4f4 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/redis/RobotCacheLockEnum.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/redis/RobotCacheLockEnum.java @@ -12,6 +12,7 @@ public enum RobotCacheLockEnum { TASK_NO("task:robot:no", "任务号"), MOVE_TASK_NO("task:robot:no:move", "移动任务号"), + CHARGE_TASK_NO("task:robot:no:charge", "自动充电任务号"), ROBOT_TASK_ADD_LOCK("robot:task:add:lock", "所有创建机器人任务的锁"), ROBOT_RCS_HEART_BEAT_LOCK("robot:rcs:heart:beat:lock", "RCS维持与车机心跳的锁"), ROBOT_STATISTICS_DURATION_LOCK("robot:statistics:duration:lock", "统计车辆工作时长的锁"), diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemService.java index edf7a19b1..c3f9d356e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemService.java @@ -114,10 +114,10 @@ public interface PositionMapItemService extends IService { /** * 批量查询 - * @param pointList + * @param ids * @return */ - List getPositionMapItemByIds(List pointList); + List getPositionMapItemByIds(List ids); /** * 获取随机数id 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 e844907cb..9ab18ad76 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 @@ -548,15 +548,13 @@ public class RobotTaskServiceImpl extends ServiceImpl deviceNoMap = new HashMap<>(); Integer robotStatus = RobotStatusEnum.DOING.getType(); //释放ware_position_map_item的使用状态,并且将ActionLog设置为完成 releaseMapItemUseStatus(taskAssignDTO.getRobotNo()); RobotChargeLogDO robotChargeLogs = null; - String taskNo = ""; + if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(taskAssignDTO.getOrderType()) || PathTaskTypeEnum.CHARGE.getType().equals(taskAssignDTO.getOrderType())) { robotChargeLogs = chargeLogMapper.selectById(taskAssignDTO.getOrderId()); @@ -568,24 +566,14 @@ public class RobotTaskServiceImpl extends ServiceImpl() .eq(RobotChargeLogDO::getRobotNo, robotNo) .orderByDesc(RobotChargeLogDO::getCreateTime) @@ -1484,11 +1476,22 @@ public class RobotTaskServiceImpl extends ServiceImpl() + .eq(DeviceInformationDO::getLastUser, robotNo) + .eq(DeviceInformationDO::getDeviceNo, robotChargeLogDO.getDeviceNo())); + log.info("结束充电任务 :{}", robotNo); robotChargeLogDO.setEndTime(LocalDateTime.now()); - deviceInformationService.chargeDeviceShrink(robotChargeLogDO.getDeviceNo()); + if (ObjectUtil.isNotEmpty(deviceInformationDO)) { + log.info("充电桩设置为空闲 :{}", deviceInformationDO.getDeviceNo()); + deviceInformationService.chargeDeviceShrink(robotChargeLogDO.getDeviceNo()); + deviceInformationDO.setDeviceUseStatus(DeviceUseStatusEnum.IDLE.getType()); + deviceInformationDO.setLastUser(null); + deviceInformationMapper.updateById(deviceInformationDO); + } - String socKey = RobotTaskChcheConstant.ROBOT_INFORMATION_SOC +robotInformationDO.getMacAddress(); + String socKey = RobotTaskChcheConstant.ROBOT_INFORMATION_SOC + robotInformationDO.getMacAddress(); Object socObject = redisUtil.get(socKey); if (ObjectUtil.isNotEmpty(socObject)) { @@ -1497,18 +1500,11 @@ public class RobotTaskServiceImpl extends ServiceImpl() - .eq(DeviceInformationDO::getDeviceNo, robotChargeLogDO.getDeviceNo())); - deviceInformationDO.setDeviceUseStatus(DeviceUseStatusEnum.IDLE.getType()); - deviceInformationDO.setLastUser(null); - deviceInformationMapper.updateById(deviceInformationDO); - log.info("充电桩设置为空闲 :{}", deviceInformationDO.getDeviceNo()); - if (ObjectUtil.isEmpty(robotChargeLogDO.getTaskDetailId())) { return; } RobotTaskDetailDO taskDetail = taskDetailMapper.selectById(robotChargeLogDO.getTaskDetailId()); - if (ObjectUtil.isNotEmpty(taskDetail)) { + if (ObjectUtil.isNotEmpty(taskDetail) && RobotTaskTypeEnum.CHARGE.getType().equals(taskDetail.getTaskType())) { taskDetail.setTaskStatus(RobotTaskDetailStatusEnum.DONE.getType()); taskDetailMapper.updateById(taskDetail); RobotTaskDO robotTask = taskMapper.selectById(taskDetail.getRobotTaskId()); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/AutoChargeServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/AutoChargeServiceImpl.java index 51e9d5f2c..6316f772b 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/AutoChargeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/job/AutoChargeServiceImpl.java @@ -1,16 +1,21 @@ package cn.iocoder.yudao.module.system.service.robot.job; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; +import cn.iocoder.yudao.framework.common.util.date.DateUtils; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO; import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant; import cn.iocoder.yudao.module.system.controller.admin.config.vo.CommonConfigVO; +import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailAddVO; import cn.iocoder.yudao.module.system.dal.dataobject.config.CommonConfigDO; import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO; import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO; import cn.iocoder.yudao.module.system.dal.mysql.config.CommonConfigMapper; import cn.iocoder.yudao.module.system.dal.mysql.information.DeviceInformationMapper; @@ -22,8 +27,10 @@ import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum; import cn.iocoder.yudao.module.system.enums.config.CommandConfigTypeEnum; import cn.iocoder.yudao.module.system.enums.device.DeviceTypeEnum; import cn.iocoder.yudao.module.system.enums.device.DeviceUseStatusEnum; +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.service.positionmap.PositionMapItemService; import cn.iocoder.yudao.module.system.service.robot.pathplanning.RobotPathPlanningService; import cn.iocoder.yudao.module.system.util.redis.RedisUtil; import com.alibaba.fastjson.JSON; @@ -37,10 +44,10 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @Service @Slf4j @@ -70,6 +77,9 @@ public class AutoChargeServiceImpl implements AutoChargeService { @Value("${zn.full_electricity:100}") private String fullElectricity; + @Value("${zn.charge-no:CHARGE}") + private String chargeNo; + @Autowired private RobotPathPlanningService robotPathPlanningService; @@ -89,7 +99,7 @@ public class AutoChargeServiceImpl implements AutoChargeService { return; } - CommonConfigVO chargeConfig= JSONUtil.toBean(commonConfigDO.getConfigStr(),CommonConfigVO.class); + CommonConfigVO chargeConfig = JSONUtil.toBean(commonConfigDO.getConfigStr(), CommonConfigVO.class); List robots = robotInformationMapper.selectList(new LambdaQueryWrapperX() .eq(RobotInformationDO::getRobotStatus, RobotStatusEnum.STAND_BY.getType()) @@ -116,7 +126,7 @@ public class AutoChargeServiceImpl implements AutoChargeService { List chargeFullNos = new ArrayList<>(); if (ObjectUtil.isNotEmpty(chargeConfig.getChanceCycle())) { //查询充满电 - chargeFullNos = chargeLogMapper.getChargeFullRobotNos(chargeConfig.getChanceCycle(),robotNos); + chargeFullNos = chargeLogMapper.getChargeFullRobotNos(chargeConfig.getChanceCycle(), robotNos); } List taskDetailDOS = robotTaskDetailMapper.getChargeTaskDetail(); @@ -126,28 +136,37 @@ public class AutoChargeServiceImpl implements AutoChargeService { } List logs = new ArrayList<>(); + List tasks = new ArrayList<>(); + List taskDetails = new ArrayList<>(); //组装充电任务 - assembleChargeTask(robots,deviceInformationDOS,chargeConfig,chargeFullNos,logs,detailMap); + assembleChargeTask(robots, deviceInformationDOS, chargeConfig, chargeFullNos, logs, detailMap, tasks, taskDetails); if (ObjectUtil.isEmpty(logs)) { log.info("没有需要执行的充电任务"); return; } - + + if (ObjectUtil.isNotEmpty(tasks)) { + robotTaskMapper.insertBatch(tasks); + List bean = BeanUtils.toBean(taskDetails, RobotTaskDetailDO.class); + robotTaskDetailMapper.insertBatch(bean); + } + chargeLogMapper.insertBatch(logs); - robotPathPlanningService.sendChargeTaskToPP(logs,taskDetailDOS,robots); + robotPathPlanningService.sendChargeTaskToPP(logs, taskDetailDOS, robots); //改成异步 logs.stream().forEach(v -> { - String chargeModelKey = RobotTaskChcheConstant.ROBOT_CHARGE_MODEL +v.getRobotNo(); - redisUtil.set(chargeModelKey,v.getChargeModel()); + String chargeModelKey = RobotTaskChcheConstant.ROBOT_CHARGE_MODEL + v.getRobotNo(); + redisUtil.set(chargeModelKey, v.getChargeModel()); }); } /** * 组装充电任务 + * * @param robots * @param deviceInformationDOS * @param chargeConfig @@ -157,33 +176,34 @@ public class AutoChargeServiceImpl implements AutoChargeService { */ public void assembleChargeTask(List robots, List deviceInformationDOS, CommonConfigVO chargeConfig, List chargeFullNos, - List logs, Map> detailMap) { + List logs, Map> detailMap, + List tasks, List taskDetails) { //判断机器人身上的电量少于设定的电量 for (RobotInformationDO robot : robots) { - String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT +robot.getMacAddress(); + String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT + robot.getMacAddress(); Object poseCache = redisUtil.get(pose2dKey); - RobotStatusDataPoseDTO dataPoseDTO= JSON.parseObject((String)poseCache, RobotStatusDataPoseDTO.class); + RobotStatusDataPoseDTO dataPoseDTO = JSON.parseObject((String) poseCache, RobotStatusDataPoseDTO.class); - String socKey = RobotTaskChcheConstant.ROBOT_INFORMATION_SOC +robot.getMacAddress(); + String socKey = RobotTaskChcheConstant.ROBOT_INFORMATION_SOC + robot.getMacAddress(); Object socObject = redisUtil.get(socKey); if (ObjectUtil.isEmpty(dataPoseDTO) || ObjectUtil.isEmpty(socObject)) { - log.info("当前机器人查不到电量信息,所以不执行充电 :{}",robot.getRobotNo()); + log.info("当前机器人查不到电量信息,所以不执行充电 :{}", robot.getRobotNo()); continue; } if (ObjectUtil.isEmpty(deviceInformationDOS)) { - log.info("充电桩分配完成 :{}",robot.getRobotNo()); + log.info("充电桩分配完成 :{}", robot.getRobotNo()); break; } DeviceInformationDO deviceInformationDO = deviceInformationDOS.stream() .filter(v -> v.getDeviceAttribute().equals(robot.getChargeType()) - && robot.getFloorAreaJson().contains(v.getPositionMapId())) + && robot.getFloorAreaJson().contains(v.getPositionMapId())) .findFirst() .orElse(new DeviceInformationDO()); if (ObjectUtil.isEmpty(deviceInformationDO.getDeviceNo())) { - log.info("当前机器人查不到对应的充电桩类型、或者机器人不能在此区域充电 :{}",robot.getRobotNo()); + log.info("当前机器人查不到对应的充电桩类型、或者机器人不能在此区域充电 :{}", robot.getRobotNo()); continue; } @@ -202,9 +222,12 @@ public class AutoChargeServiceImpl implements AutoChargeService { && robotRemainingElectricity.compareTo(robotFullElectricity) < 0) { //充满电 logDo.setChargeModel(ChargeModelEnum.FULL.getType()); + Long taskDetailId = createChargeTask(robot.getRobotNo(), tasks, taskDetails, deviceInformationDO.getPositionMapItemId(), deviceInformationDO.getDeviceNo()); + logDo.setTaskDetailId(taskDetailId); + logDo.setId(logDo.getTaskDetailId()); logs.add(logDo); deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo())); - log.info("分配到充满电充电任务 :{} ,充电设备编号是 :{}, 任务id :{}",logDo.getRobotNo(),logDo.getDeviceNo(),logDo.getTaskDetailId()); + log.info("分配到充满电充电任务 :{} ,充电设备编号是 :{}, 任务id :{}", logDo.getRobotNo(), logDo.getDeviceNo(), logDo.getTaskDetailId()); continue; } @@ -217,8 +240,9 @@ public class AutoChargeServiceImpl implements AutoChargeService { deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo())); logDo.setChargeModel(ChargeModelEnum.TASK.getType()); logDo.setTaskDetailId(robotTaskDetailDO.getId()); + logDo.setId(logDo.getTaskDetailId()); logs.add(logDo); - log.info("分配到任务充电任务 :{} ,充电设备编号是 :{}, 任务id :{}",logDo.getRobotNo(),logDo.getDeviceNo(),logDo.getTaskDetailId()); + log.info("分配到任务充电任务 :{} ,充电设备编号是 :{}, 任务id :{}", logDo.getRobotNo(), logDo.getDeviceNo(), logDo.getTaskDetailId()); continue; } } @@ -232,8 +256,9 @@ public class AutoChargeServiceImpl implements AutoChargeService { deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo())); logDo.setChargeModel(ChargeModelEnum.TASK.getType()); logDo.setTaskDetailId(robotTaskDetailDO.getId()); + logDo.setId(logDo.getTaskDetailId()); logs.add(logDo); - log.info("分配到任务充电任务 :{} ,充电设备编号是 :{}, 任务id :{}",logDo.getRobotNo(),logDo.getDeviceNo(),logDo.getTaskDetailId()); + log.info("分配到任务充电任务 :{} ,充电设备编号是 :{}, 任务id :{}", logDo.getRobotNo(), logDo.getDeviceNo(), logDo.getTaskDetailId()); continue; } } @@ -247,8 +272,9 @@ public class AutoChargeServiceImpl implements AutoChargeService { deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo())); logDo.setChargeModel(ChargeModelEnum.TASK.getType()); logDo.setTaskDetailId(robotTaskDetailDO.getId()); + logDo.setId(logDo.getTaskDetailId()); logs.add(logDo); - log.info("分配到任务充电任务 :{} ,充电设备编号是 :{}, 任务id :{}",logDo.getRobotNo(),logDo.getDeviceNo(),logDo.getTaskDetailId()); + log.info("分配到任务充电任务 :{} ,充电设备编号是 :{}, 任务id :{}", logDo.getRobotNo(), logDo.getDeviceNo(), logDo.getTaskDetailId()); continue; } } @@ -258,9 +284,12 @@ public class AutoChargeServiceImpl implements AutoChargeService { BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(robot.getAutoCharge())); if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) { logDo.setChargeModel(ChargeModelEnum.AUTO.getType()); + Long taskDetailId = createChargeTask(robot.getRobotNo(), tasks, taskDetails, deviceInformationDO.getPositionMapItemId(), deviceInformationDO.getDeviceNo()); + logDo.setTaskDetailId(taskDetailId); + logDo.setId(logDo.getTaskDetailId()); logs.add(logDo); deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo())); - log.info("分配到自动充电任务 :{} ,充电设备编号是 :{}",logDo.getRobotNo(),logDo.getDeviceNo()); + log.info("分配到自动充电任务 :{} ,充电设备编号是 :{}", logDo.getRobotNo(), logDo.getDeviceNo()); continue; } } @@ -270,9 +299,12 @@ public class AutoChargeServiceImpl implements AutoChargeService { BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(chargeConfig.getStartAutoCharge())); if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) { logDo.setChargeModel(ChargeModelEnum.AUTO.getType()); + Long taskDetailId = createChargeTask(robot.getRobotNo(), tasks, taskDetails, deviceInformationDO.getPositionMapItemId(), deviceInformationDO.getDeviceNo()); + logDo.setTaskDetailId(taskDetailId); + logDo.setId(logDo.getTaskDetailId()); logs.add(logDo); deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo())); - log.info("分配到自动充电任务 :{} ,充电设备编号是 :{}",logDo.getRobotNo(),logDo.getDeviceNo()); + log.info("分配到自动充电任务 :{} ,充电设备编号是 :{}", logDo.getRobotNo(), logDo.getDeviceNo()); continue; } } @@ -282,12 +314,40 @@ public class AutoChargeServiceImpl implements AutoChargeService { BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(chargeConfig.getChanceChargeStart())); if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) { logDo.setChargeModel(ChargeModelEnum.CHANCE.getType()); + Long taskDetailId = createChargeTask(robot.getRobotNo(), tasks, taskDetails, deviceInformationDO.getPositionMapItemId(), deviceInformationDO.getDeviceNo()); + logDo.setTaskDetailId(taskDetailId); + logDo.setId(logDo.getTaskDetailId()); logs.add(logDo); deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo())); - log.info("分配到机会充电任务 :{} ,充电设备编号是 :{}",logDo.getRobotNo(),logDo.getDeviceNo()); + log.info("分配到机会充电任务 :{} ,充电设备编号是 :{}", logDo.getRobotNo(), logDo.getDeviceNo()); } } } } + /** + * 自动充电 + */ + public Long createChargeTask(String robotNo, List tasks, List taskDetails, Long positionMapItemId, String deviceNo) { + RobotTaskDO task = new RobotTaskDO(); + String incrementByKey = redisUtil.getIncrementByKey(RobotCacheLockEnum.CHARGE_TASK_NO.getKey()); + task.setTaskNo(chargeNo + DateUtils.getYearMonthDay() + incrementByKey); + task.setId(IdUtil.getSnowflakeNextId()); + task.setCycleNumber(0L); + task.setRemainingCycleNumber(0L); + task.setStartTime(LocalDateTime.now()); + + RobotTaskDetailAddVO detailAddVO = new RobotTaskDetailAddVO(); + detailAddVO.setId(IdUtil.getSnowflakeNextId()); + detailAddVO.setRobotTaskId(task.getId()); + detailAddVO.setTaskType(RobotTaskTypeEnum.CHARGE.getType()); + detailAddVO.setReleaseType(ReleaseTakeEnum.TO_LOCATION.getType()); + detailAddVO.setReleaseId(positionMapItemId); + detailAddVO.setToLocationNo(deviceNo); + detailAddVO.setRobotNo(robotNo); + tasks.add(task); + taskDetails.add(detailAddVO); + return detailAddVO.getId(); + } + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml index ecffa2903..05a901949 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml @@ -187,6 +187,7 @@ justauth: zn: task-no: TASK #任务号开头 move-no: MOVE #自动移动任务号开头 + charge-no: CHARGE #自动充电任务号开头 camera_secret_key: A2C4rv7DY012c9ef #摄像头秘钥 do_cycle: true #是否开启循环 lane_auto_move: true #线库是否自动移库 true:线库执行自动移库 、false:线库关闭执行自动移库 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 818a06191..4fe7c8781 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 @@ -222,6 +222,7 @@ map: zn: task-no: TASK #任务号开头 move-no: MOVE #自动移动任务号开头 + charge-no: CHARGE #自动充电任务号开头 camera_secret_key: A2C4rv7DY012c9ef #摄像头秘钥 do_cycle: true #是否开启循环 lane_auto_move: true #线库是否自动移库 true:线库执行自动移库 、false:线库关闭执行自动移库 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-test.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-test.yaml index 70407b60c..91a5abe2d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-test.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-test.yaml @@ -215,6 +215,7 @@ map: zn: task-no: TASK #任务号开头 move-no: MOVE #自动移动任务号开头 + charge-no: CHARGE #自动充电任务号开头 camera_secret_key: A2C4rv7DY012c9ef #摄像头秘钥 do_cycle: true #是否开启循环 lane_auto_move: true #线库是否自动移库 true:线库执行自动移库 、false:线库关闭执行自动移库