处理车机上报的信息

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

View File

@ -16,11 +16,11 @@ public interface RobotCommonTaskService {
* 组装任务下发给车机
* @param list
*/
void sendTaskToRobot(List<TaskPPDistribution> list);
void sendTaskToRobot(TaskPPDistribution taskPPDistribution);
/**
* 发送充电任务给车机
* @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
@Async(NOTIFY_THREAD_POOL_TASK_EXECUTOR)
public void sendTaskToRobot(List<TaskPPDistribution> list) {
List<Long> detailIds = list.stream().map(TaskPPDistribution::getId).collect(Collectors.toList());
List<RobotTaskDetailDO> taskDetailDOS = taskDetailMapper.selectBatchIds(detailIds);
Map<Long, RobotTaskDetailDO> taskDetailMap =
taskDetailDOS.stream().collect(Collectors.toMap(v -> v.getId(), Function.identity()));
public void sendTaskToRobot(TaskPPDistribution v) {
RobotTaskDetailDO robotTaskDetailDO = taskDetailMapper.selectById(v.getId());
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<>();
locationIds.addAll(fromLocationIds);
locationIds.addAll(toLocationIds);
if (ObjectUtil.isNotEmpty(robotTaskDetailDO.getFromLocationId())) {
locationIds.add(robotTaskDetailDO.getFromLocationId());
}
if (ObjectUtil.isNotEmpty(robotTaskDetailDO.getToLocationId())) {
locationIds.add(robotTaskDetailDO.getToLocationId());
}
List<WareHouseLocationDO> wareHouseLocationDOS =
houseLocationMapper.selectList(new LambdaQueryWrapperX<WareHouseLocationDO>()
.in(WareHouseLocationDO::getId, locationIds));
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<>();
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());
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac);
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);
}
RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
robotTask.setOrder_id(v.getId().toString());
if (ObjectUtil.isNotEmpty(pair)) {
robotTask.setData(pair.getLeft());
logs.addAll(pair.getRight());
log.info("发送给车机下发任务 :{}", JSON.toJSONString(robotTask));
commonApi.commonMethod(robotTask, robotTask.getTopic());
}
String mac = robotInformationService.getMacByRobotNo(v.getRobotNo());
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac);
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)) {
robotTask.setData(pair.getLeft());
logs.addAll(pair.getRight());
log.info("发送给车机下发任务 :{}", JSON.toJSONString(robotTask));
commonApi.commonMethod(robotTask, robotTask.getTopic());
}
taskDetailActionLogService.addLogInCache(logs);
@ -667,41 +664,35 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
*/
@Override
@Async(NOTIFY_THREAD_POOL_TASK_EXECUTOR)
public void sendChargeTaskToRobot(List<TaskPPDistribution> chargeList, List<RobotChargeLogDO> robotChargeLogs) {
if (ObjectUtil.isEmpty(chargeList) || ObjectUtil.isEmpty(robotChargeLogs)) {
public void sendChargeTaskToRobot(TaskPPDistribution v, RobotChargeLogDO chargeLogDO) {
if (ObjectUtil.isEmpty(v) || ObjectUtil.isEmpty(chargeLogDO)) {
return;
}
Map<Long, RobotChargeLogDO> chargeMap =
robotChargeLogs.stream().collect(Collectors.toMap(v -> v.getId(), Function.identity()));
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());
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac);
robotTask.setOrder_type(RobotTaksOrderTypeEnum.AUTO_CHARGE.getType());
RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
robotTask.setOrder_id(v.getId().toString());
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<>();
//移动
RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
String msg = charge + chargeLogDO.getDeviceNo();
RobotAcceptTaskData oneMoveAndFork = onlyMove(logOne, serial, v, msg);
Integer serial = 1;
list.add(oneMoveAndFork);
robotTask.setData(list);
logList.add(logOne);
List<RobotAcceptTaskData> list = new ArrayList<>();
//移动
RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
String msg = charge + chargeLogDO.getDeviceNo();
RobotAcceptTaskData oneMoveAndFork = onlyMove(logOne, serial, v, msg);
log.info("发送给车机下发--充电任务 :{}", JSON.toJSONString(robotTask));
commonApi.commonMethod(robotTask, robotTask.getTopic());
}
list.add(oneMoveAndFork);
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);
}

View File

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