处理车机上报的信息

This commit is contained in:
cbs 2025-03-01 09:10:46 +08:00
parent ecfcac2b65
commit 3aaff006c2
4 changed files with 75 additions and 101 deletions

View File

@ -749,50 +749,34 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
List<TaskPPDistribution> list = Arrays.asList(distribution); List<TaskPPDistribution> list = Arrays.asList(distribution);
List<TaskPPDistribution> taskList = list.stream()
.filter(v -> TaskTypeEnum.TASK.getType().equals(v.getType()))
.collect(Collectors.toList());
List<TaskPPDistribution> chargeList = list.stream()
.filter(v -> TaskTypeEnum.CHARGE.getType().equals(v.getType()))
.collect(Collectors.toList());
List<Long> detailIds = new ArrayList<>(); List<Long> detailIds = new ArrayList<>();
Map<Long, TaskPPDistribution> taskMap =
list.stream().collect(Collectors.toMap(v -> v.getId(), Function.identity()));
Map<Long,String> deviceNoMap = new HashMap<>(); Map<Long,String> deviceNoMap = new HashMap<>();
List<RobotChargeLogDO> robotChargeLogs = null; RobotChargeLogDO robotChargeLogs = null;
Set<String> robotNos = new HashSet<>();
robotNos.add(distribution.getRobotNo());
/** /**
* 充电 * 充电
*/ */
if (ObjectUtil.isNotEmpty(chargeList)) { if (TaskTypeEnum.CHARGE.getType().equals(distribution.getType())) {
List<Long> chargeIds = chargeList.stream().map(TaskPPDistribution::getId).collect(Collectors.toList()); robotChargeLogs = chargeLogMapper.selectById(distribution.getId());
robotChargeLogs = chargeLogMapper.selectBatchIds(chargeIds);
robotChargeLogs.stream().forEach(taskDetailDO -> { robotChargeLogs.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType());
taskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType());
});
chargeLogMapper.updateBatch(robotChargeLogs); chargeLogMapper.updateBatch(robotChargeLogs);
Set<String> robotNos = chargeList.stream().map(TaskPPDistribution::getRobotNo).collect(Collectors.toSet());
robotInformationMapper.updateRobotListStatus(robotNos,RobotStatusEnum.CHARGE.getType()); robotInformationMapper.updateRobotListStatus(robotNos,RobotStatusEnum.CHARGE.getType());
robotChargeLogs.stream() if (ObjectUtil.isNotEmpty(robotChargeLogs.getTaskDetailId())) {
.filter(v -> ObjectUtil.isNotEmpty(v.getTaskDetailId())) deviceNoMap.put(robotChargeLogs.getTaskDetailId(),robotChargeLogs.getDeviceNo());
.forEach(v -> { detailIds.add(robotChargeLogs.getTaskDetailId());
deviceNoMap.put(v.getTaskDetailId(),v.getDeviceNo()); }
detailIds.add(v.getTaskDetailId());
});
} }
/** /**
* 任务 * 任务
*/ */
if (ObjectUtil.isNotEmpty(taskList)) { if (TaskTypeEnum.TASK.getType().equals(distribution.getType())) {
Set<String> robotNos = taskList.stream().map(TaskPPDistribution::getRobotNo).collect(Collectors.toSet());
robotInformationMapper.updateRobotListStatus(robotNos,RobotStatusEnum.DOING.getType()); robotInformationMapper.updateRobotListStatus(robotNos,RobotStatusEnum.DOING.getType());
detailIds.add(distribution.getId());
List<Long> ids = taskList.stream().map(TaskPPDistribution::getId).collect(Collectors.toList());
detailIds.addAll(ids);
} }
if (ObjectUtil.isNotEmpty(detailIds)) { if (ObjectUtil.isNotEmpty(detailIds)) {
@ -800,9 +784,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
taskDetailDOS.stream().forEach(taskDetailDO -> { taskDetailDOS.stream().forEach(taskDetailDO -> {
taskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType()); taskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType());
taskDetailDO.setStartTime(LocalDateTime.now()); taskDetailDO.setStartTime(LocalDateTime.now());
TaskPPDistribution taskPPDistribution = taskMap.get(taskDetailDO.getId()); if ( ObjectUtil.isEmpty(taskDetailDO.getRobotNo())) {
if (ObjectUtil.isNotEmpty(taskPPDistribution) && ObjectUtil.isEmpty(taskDetailDO.getRobotNo())) { taskDetailDO.setRobotNo(distribution.getRobotNo());
taskDetailDO.setRobotNo(taskPPDistribution.getRobotNo());
} }
if (ObjectUtil.isEmpty(taskDetailDO.getToLocationNo()) if (ObjectUtil.isEmpty(taskDetailDO.getToLocationNo())
&& ObjectUtil.isNotEmpty(deviceNoMap.get(taskDetailDO.getId()))) { && ObjectUtil.isNotEmpty(deviceNoMap.get(taskDetailDO.getId()))) {
@ -821,8 +804,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
taskMapper.updateBatch(tasks); taskMapper.updateBatch(tasks);
} }
robotCommonTaskService.sendTaskToRobot(taskList); robotCommonTaskService.sendTaskToRobot(distribution);
robotCommonTaskService.sendChargeTaskToRobot(chargeList,robotChargeLogs); robotCommonTaskService.sendChargeTaskToRobot(distribution,robotChargeLogs);
} }
/** /**

View File

@ -16,11 +16,11 @@ public interface RobotCommonTaskService {
* 组装任务下发给车机 * 组装任务下发给车机
* @param list * @param list
*/ */
void sendTaskToRobot(List<TaskPPDistribution> list); void sendTaskToRobot(TaskPPDistribution taskPPDistribution);
/** /**
* 发送充电任务给车机 * 发送充电任务给车机
* @param chargeList * @param chargeList
*/ */
void sendChargeTaskToRobot(List<TaskPPDistribution> chargeList,List<RobotChargeLogDO> robotChargeLogs); void sendChargeTaskToRobot(TaskPPDistribution chargeList,RobotChargeLogDO robotChargeLogs);
} }

View File

@ -133,54 +133,51 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
*/ */
@Override @Override
@Async(NOTIFY_THREAD_POOL_TASK_EXECUTOR) @Async(NOTIFY_THREAD_POOL_TASK_EXECUTOR)
public void sendTaskToRobot(List<TaskPPDistribution> list) { public void sendTaskToRobot(TaskPPDistribution v) {
List<Long> detailIds = list.stream().map(TaskPPDistribution::getId).collect(Collectors.toList()); RobotTaskDetailDO robotTaskDetailDO = taskDetailMapper.selectById(v.getId());
List<RobotTaskDetailDO> taskDetailDOS = taskDetailMapper.selectBatchIds(detailIds);
Map<Long, RobotTaskDetailDO> taskDetailMap =
taskDetailDOS.stream().collect(Collectors.toMap(v -> v.getId(), Function.identity()));
Set<Long> fromLocationIds = taskDetailDOS.stream().map(v -> v.getFromLocationId()).collect(Collectors.toSet());
Set<Long> toLocationIds = taskDetailDOS.stream().map(v -> v.getToLocationId()).collect(Collectors.toSet());
Set<Long> locationIds = new HashSet<>(); Set<Long> locationIds = new HashSet<>();
locationIds.addAll(fromLocationIds); if (ObjectUtil.isNotEmpty(robotTaskDetailDO.getFromLocationId())) {
locationIds.addAll(toLocationIds); locationIds.add(robotTaskDetailDO.getFromLocationId());
}
if (ObjectUtil.isNotEmpty(robotTaskDetailDO.getToLocationId())) {
locationIds.add(robotTaskDetailDO.getToLocationId());
}
List<WareHouseLocationDO> wareHouseLocationDOS = List<WareHouseLocationDO> wareHouseLocationDOS =
houseLocationMapper.selectList(new LambdaQueryWrapperX<WareHouseLocationDO>() houseLocationMapper.selectList(new LambdaQueryWrapperX<WareHouseLocationDO>()
.in(WareHouseLocationDO::getId, locationIds)); .in(WareHouseLocationDO::getId, locationIds));
Map<Long, WareHouseLocationDO> locationMap = Map<Long, WareHouseLocationDO> locationMap =
wareHouseLocationDOS.stream().collect(Collectors.toMap(v -> v.getId(), Function.identity())); wareHouseLocationDOS.stream().collect(Collectors.toMap(s -> s.getId(), Function.identity()));
List<RobotTaskDetailActionLogDO> logs = new ArrayList<>(); List<RobotTaskDetailActionLogDO> logs = new ArrayList<>();
for (TaskPPDistribution v : list) {
RobotTaskDetailDO robotTaskDetailDO = taskDetailMap.get(v.getId());
RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
robotTask.setOrder_id(v.getId().toString());
String mac = robotInformationService.getMacByRobotNo(v.getRobotNo()); RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac); robotTask.setOrder_id(v.getId().toString());
robotTask.setOrder_type(RobotTaksOrderTypeEnum.TASK.getType());
//取放
Pair<List<RobotAcceptTaskData>, List<RobotTaskDetailActionLogDO>> pair = null;
if (RobotTaskTypeEnum.TAKE_RELEASE.getType().equals(robotTaskDetailDO.getTaskType())) {
pair = takeReleaseTask(v, robotTaskDetailDO, locationMap);
//移动
} else if (RobotTaskTypeEnum.MOVE.getType().equals(robotTaskDetailDO.getTaskType())) {
pair = moveTask(v, robotTaskDetailDO, locationMap);
//仅取货
} else if (RobotTaskTypeEnum.TAKE.getType().equals(robotTaskDetailDO.getTaskType())) {
pair = takeTask(v, robotTaskDetailDO, locationMap);
//仅放货
} else if (RobotTaskTypeEnum.RELEASE.getType().equals(robotTaskDetailDO.getTaskType())) {
pair = releaseTask(v, robotTaskDetailDO, locationMap);
}
if (ObjectUtil.isNotEmpty(pair)) { String mac = robotInformationService.getMacByRobotNo(v.getRobotNo());
robotTask.setData(pair.getLeft()); robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac);
logs.addAll(pair.getRight()); robotTask.setOrder_type(RobotTaksOrderTypeEnum.TASK.getType());
log.info("发送给车机下发任务 :{}", JSON.toJSONString(robotTask)); //取放
commonApi.commonMethod(robotTask, robotTask.getTopic()); Pair<List<RobotAcceptTaskData>, List<RobotTaskDetailActionLogDO>> pair = null;
} if (RobotTaskTypeEnum.TAKE_RELEASE.getType().equals(robotTaskDetailDO.getTaskType())) {
pair = takeReleaseTask(v, robotTaskDetailDO, locationMap);
//移动
} else if (RobotTaskTypeEnum.MOVE.getType().equals(robotTaskDetailDO.getTaskType())) {
pair = moveTask(v, robotTaskDetailDO, locationMap);
//仅取货
} else if (RobotTaskTypeEnum.TAKE.getType().equals(robotTaskDetailDO.getTaskType())) {
pair = takeTask(v, robotTaskDetailDO, locationMap);
//仅放货
} else if (RobotTaskTypeEnum.RELEASE.getType().equals(robotTaskDetailDO.getTaskType())) {
pair = releaseTask(v, robotTaskDetailDO, locationMap);
}
if (ObjectUtil.isNotEmpty(pair)) {
robotTask.setData(pair.getLeft());
logs.addAll(pair.getRight());
log.info("发送给车机下发任务 :{}", JSON.toJSONString(robotTask));
commonApi.commonMethod(robotTask, robotTask.getTopic());
} }
taskDetailActionLogService.addLogInCache(logs); taskDetailActionLogService.addLogInCache(logs);
@ -667,41 +664,35 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
*/ */
@Override @Override
@Async(NOTIFY_THREAD_POOL_TASK_EXECUTOR) @Async(NOTIFY_THREAD_POOL_TASK_EXECUTOR)
public void sendChargeTaskToRobot(List<TaskPPDistribution> chargeList, List<RobotChargeLogDO> robotChargeLogs) { public void sendChargeTaskToRobot(TaskPPDistribution v, RobotChargeLogDO chargeLogDO) {
if (ObjectUtil.isEmpty(chargeList) || ObjectUtil.isEmpty(robotChargeLogs)) { if (ObjectUtil.isEmpty(v) || ObjectUtil.isEmpty(chargeLogDO)) {
return; return;
} }
Map<Long, RobotChargeLogDO> chargeMap =
robotChargeLogs.stream().collect(Collectors.toMap(v -> v.getId(), Function.identity()));
List<RobotTaskDetailActionLogDO> logList = new ArrayList<>(); List<RobotTaskDetailActionLogDO> logList = new ArrayList<>();
for (TaskPPDistribution v : chargeList) {
RobotChargeLogDO chargeLogDO = chargeMap.get(v.getId());
RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
robotTask.setOrder_id(v.getId().toString());
String mac = robotInformationService.getMacByRobotNo(v.getRobotNo()); RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac); robotTask.setOrder_id(v.getId().toString());
robotTask.setOrder_type(RobotTaksOrderTypeEnum.AUTO_CHARGE.getType());
Integer serial = 1; String mac = robotInformationService.getMacByRobotNo(v.getRobotNo());
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac);
robotTask.setOrder_type(RobotTaksOrderTypeEnum.AUTO_CHARGE.getType());
List<RobotAcceptTaskData> list = new ArrayList<>(); Integer serial = 1;
//移动
RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
String msg = charge + chargeLogDO.getDeviceNo();
RobotAcceptTaskData oneMoveAndFork = onlyMove(logOne, serial, v, msg);
list.add(oneMoveAndFork); List<RobotAcceptTaskData> list = new ArrayList<>();
robotTask.setData(list); //移动
logList.add(logOne); RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
String msg = charge + chargeLogDO.getDeviceNo();
RobotAcceptTaskData oneMoveAndFork = onlyMove(logOne, serial, v, msg);
log.info("发送给车机下发--充电任务 :{}", JSON.toJSONString(robotTask)); list.add(oneMoveAndFork);
commonApi.commonMethod(robotTask, robotTask.getTopic()); robotTask.setData(list);
} logList.add(logOne);
log.info("发送给车机下发--充电任务 :{}", JSON.toJSONString(robotTask));
commonApi.commonMethod(robotTask, robotTask.getTopic());
//todo 充电后往 task_detail更新下 to_location_no
taskDetailActionLogService.addLogInCache(logList); taskDetailActionLogService.addLogInCache(logList);
} }

View File

@ -245,8 +245,8 @@ zn:
scan: 机器人正在扫描 scan: 机器人正在扫描
parking_space: 机器人正在前往停车位 parking_space: 机器人正在前往停车位
charge: 机器人正在前往充电位 charge: 机器人正在前往充电位
action_entity_cache_time: 8*60*60 #机器人所有动作缓存时间 action_entity_cache_time: 28800 #机器人所有动作缓存时间 8小时
doing_action_cache_time: 3*60*60 #单个动作缓存时间 doing_action_cache_time: 28800 #单个动作缓存时间 8小时
robot_chearg: #机器人充电的配置 robot_chearg: #机器人充电的配置
release_location_number_config: 50 #同一组序号,越大越先执行 release_location_number_config: 50 #同一组序号,越大越先执行
priority_config: 50 #优先级 priority_config: 50 #优先级