From 443acea3113ba7680d1247a36f3ef73da80778e0 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期四, 16 四月 2026 23:31:25 +0800
Subject: [PATCH] [feat]工单改派接口
---
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java | 26 +++++++++++++++++---------
1 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
index aa94db6..0841363 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -1371,7 +1371,9 @@
@Autowired
private XpOperationsUserRepository repository;
- public void reassign(Long taskId,String msg) {
+ @Override
+ @Transactional
+ public void reassign(Long taskId, String msg) {
XpTask task = getById(taskId);
XpVehicle vehicle = xpVehicleClient.queryById(task.getVehicleId()).getData();
@@ -1380,15 +1382,19 @@
if (Objects.isNull(taskRuleRole) || Objects.isNull(taskRule)) {
throw new ServiceException("未配置车辆事故任务分配规则");
}
+ List<Long> excludedUserIds = Optional.ofNullable(task.getExcluded()).orElse(new ArrayList<>());
+ excludedUserIds.add(Long.valueOf(task.getHandleUserId()));
+ task.setExcluded(excludedUserIds);
Long fleetId = xpFleetVehicleClient.getFleetIdByVehicleId(vehicle.getId()).getData();
List<Long> roleIds = taskRuleRole.stream().map(XpTaskRuleRole::getRoleId).collect(Collectors.toList());
- List<XpOperationsRole> data = xpOperationUserClient.getXpOperationsRoleByRoleIds(roleIds).getData();
List<Long> ids = xpFleetOperationsClient.getOperationsIdsByFleetId(fleetId).getData();
- List<XpOperationsRole> collect = data.stream().filter(x -> ids.contains(x.getOperationsUserId())).collect(Collectors.toList());
- String belongUserIds = collect.stream().map(XpOperationsRole::getOperationsUserId).collect(Collectors.toSet()).stream().map(String::valueOf).collect(Collectors.joining(","));
- String idsWithoutMe = belongUserIds.replace(task.getHandleUserId(), "");
+ String belongUserIds = xpOperationUserClient.getXpOperationsRoleByRoleIds(roleIds).getData().stream()
+ .map(XpOperationsRole::getOperationsUserId)
+ .filter(ids::contains)
+ .filter(id -> !excludedUserIds.contains(id))
+ .map(String::valueOf).collect(Collectors.joining(","));
VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vehicle.getVehicleVin())), VehiclePosition.class);
- String handlerUser = chooseNearestAvailableOperationsUser(idsWithoutMe, vehiclePosition);
+ String handlerUser = chooseNearestAvailableOperationsUser(belongUserIds, vehiclePosition);
task.setHandleUserId(handlerUser);
if(handlerUser == null) {
task.setStatus(4);
@@ -1414,10 +1420,11 @@
}
Long fleetId = xpFleetVehicleClient.getFleetIdByVehicleId(vehicle.getId()).getData();
List<Long> roleIds = taskRuleRole.stream().map(XpTaskRuleRole::getRoleId).collect(Collectors.toList());
- List<XpOperationsRole> data = xpOperationUserClient.getXpOperationsRoleByRoleIds(roleIds).getData();
List<Long> ids = xpFleetOperationsClient.getOperationsIdsByFleetId(fleetId).getData();
- List<XpOperationsRole> collect = data.stream().filter(x -> ids.contains(x.getOperationsUserId())).collect(Collectors.toList());
- String belongUserIds = collect.stream().map(XpOperationsRole::getOperationsUserId).collect(Collectors.toSet()).stream().map(String::valueOf).collect(Collectors.joining(","));
+ String belongUserIds = xpOperationUserClient.getXpOperationsRoleByRoleIds(roleIds).getData().stream()
+ .map(XpOperationsRole::getOperationsUserId)
+ .filter(ids::contains)
+ .map(String::valueOf).collect(Collectors.joining(","));
VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vehicle.getVehicleVin())), VehiclePosition.class);
Map<String, String> geocode = gdMapGeocodingUtil.geocode(vehiclePosition.getPoint().getX() + "", vehiclePosition.getPoint().getY() + "");
@@ -1477,6 +1484,7 @@
private String chooseNearestAvailableOperationsUser(String belongUserIds, VehiclePosition vehiclePosition) {
+ if (StringUtils.isBlank(belongUserIds)) return null;
List<Long> ids = Arrays.stream(belongUserIds.split(",")).filter(StringUtils::isNotBlank).map(Long::valueOf).collect(Collectors.toList());
// 让mongo根据[id in ids]返回距离排序的users
--
Gitblit v1.7.1