From c98d3f2fc620b3f5d699e2be34eaabc1033b42b2 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 11 三月 2026 16:17:32 +0800
Subject: [PATCH] 修改巡游订单部分逻辑
---
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java | 89 ++++++++++++++++++++++++++------------------
1 files changed, 52 insertions(+), 37 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 31261c9..c681993 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
@@ -6,11 +6,14 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xiaopeng.api.dto.account.XpOperationsUserQueryDTO;
import com.xiaopeng.api.dto.pushMessage.AliPushMessageDTO;
import com.xiaopeng.api.feignClient.account.SysUserClient;
import com.xiaopeng.api.feignClient.account.XpOperationUserClient;
import com.xiaopeng.api.feignClient.account.XpOperationUserNotificationClient;
import com.xiaopeng.api.feignClient.pushMessage.XpAliPushMessageClient;
+import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetOperationsClient;
+import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetVehicleClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.account.SysUser;
import com.xiaopeng.api.model.account.XpOperationsRole;
@@ -18,7 +21,9 @@
import com.xiaopeng.api.model.account.XpOperationsUserNotification;
import com.xiaopeng.api.model.maintenance.*;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
+import com.xiaopeng.api.vo.account.XpOperationsUserWithRoleVO;
import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
+import com.xiaopeng.api.vo.maintenance.TaskScheduleConstants;
import com.xiaopeng.common.core.constant.AliPushTypeConstant;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.enums.NotificationTypeEnum;
@@ -40,6 +45,7 @@
import com.xiaopeng.maintenance.service.IXpTaskRuleRoleService;
import com.xiaopeng.maintenance.service.IXpTaskRuleService;
import com.xiaopeng.maintenance.service.XpTaskService;
+import com.xiaopeng.maintenance.utils.GDMapGeocodingUtil;
import com.xiaopeng.maintenance.utils.UUIDUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -118,6 +124,15 @@
private IXpTaskRuleRoleService xpTaskRuleRoleService;
@Autowired
private IXpTaskRuleService xpTaskRuleService;
+
+ @Resource
+ private GDMapGeocodingUtil gdMapGeocodingUtil;
+
+ @Resource
+ private XpFleetVehicleClient xpFleetVehicleClient;
+
+ @Resource
+ private XpFleetOperationsClient xpFleetOperationsClient;
@Override
public PageInfo<WorkBenchVO> workbench(WorkBenchQuery query) {
@@ -1088,50 +1103,50 @@
@Override
public void saveVehicleAccidentError(Long vehicleId) {
- XpTask xpTask = new XpTask();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
- String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
- xpTask.setTaskCode(code);
- xpTask.setTaskCategory(2);
- // todo 事故类型待客户确定
- xpTask.setTaskTypeId("1");
- xpTask.setTaskUrgencyLevel(0);
- xpTask.setTaskDescription("车辆发生异常");
- XpVehicle vehicle = xpVehicleClient.queryById(xpTask.getVehicleId()).getData();
- if (vehicle!=null){
- VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vehicle.getVehicleVin())), VehiclePosition.class);
- if (vehiclePosition != null) {
- double x = vehiclePosition.getPoint().getX();
- double y = vehiclePosition.getPoint().getY();
- xpTask.setVehicleLon(new BigDecimal(x));
- xpTask.setVehicleLat(new BigDecimal(y));
- }
- }
-
- xpTask.setVehicleId(vehicleId);
- // 系统上传异常任务标识
- xpTask.setReportUserId(0L);
- xpTask.setReportTime(LocalDateTime.now());
- xpTask.setStatus(0);
- xpTask.setCreateBy("admin");
+ XpVehicle vehicle = xpVehicleClient.queryById(vehicleId).getData();
XpTaskRule taskRule = xpTaskRuleService.lambdaQuery().last("limit 1").one();
XpTaskRuleRole taskRuleRole = xpTaskRuleRoleService.lambdaQuery().eq(XpTaskRuleRole::getRuleType, 9).last("limit 1").one();
if (Objects.isNull(taskRuleRole) || Objects.isNull(taskRule)) {
throw new ServiceException("未配置车辆事故任务分配规则");
}
- R<List<XpOperationsRole>> xpOperationsRoleResult = xpOperationUserClient.getXpOperationsRoleByRoleId(taskRuleRole.getRoleId());
- if (CollUtil.isNotEmpty(xpOperationsRoleResult.getData())) {
- List<Long> userIds = xpOperationsRoleResult.getData().stream().map(XpOperationsRole::getOperationsUserId).collect(Collectors.toList());
- xpTask.setHandleUserId(StringUtils.join(userIds, ","));
- }
- // 根据事故处理限时配置设置任务截止时间
- LocalDateTime endTime = LocalDateTime.now().plusMinutes(taskRule.getProcessingTimeLimit());
- xpTask.setEndTime(endTime);
- this.save(xpTask);
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+ //查找事故处理人,处理角色和车辆所属的车队
+ Long fleetId = xpFleetVehicleClient.getFleetIdByVehicleId(vehicle.getId()).getData();
+ XpOperationsUserQueryDTO dto = new XpOperationsUserQueryDTO();
+ dto.setRoleId(taskRuleRole.getRoleId());
+ List<XpOperationsUserWithRoleVO> data = xpOperationUserClient.queryByConditions(dto).getData();
+ List<Long> ids = xpFleetOperationsClient.getOperationsIdsByFleetId(fleetId).getData();
+ List<XpOperationsUserWithRoleVO> collect = data.stream().filter(x -> ids.contains(x.getId())).collect(Collectors.toList());
+ String belongUserIds = collect.stream().map(XpOperationsUserWithRoleVO::getId).collect(Collectors.toSet()).stream().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() + "");
+ String address = geocode.get("address");
+
+ XpTask task = new XpTask();
+ String taskCode = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+ task.setTaskCode(taskCode);
+ task.setTaskCategory(TaskScheduleConstants.TASK_CATEGORY_ACCIDENT);
+ task.setTaskTypeId("8,10");
+ task.setTaskUrgencyLevel(TaskScheduleConstants.URGENCY_LEVEL_P0);
+ String taskDescription = "车辆" + vehicle.getPlateNumber() + "在" + address + "发生紧急事故,请在" + taskRule.getProcessingTimeLimit() + "内到达现场!";
+ task.setTaskDescription(taskDescription);
+ task.setVehicleId(vehicle.getId());
+ task.setVehicleLocation(address);
+ task.setVehicleLat(new BigDecimal(vehiclePosition.getPoint().getY()));
+ task.setVehicleLon(new BigDecimal(vehiclePosition.getPoint().getX()));
+ task.setHandleUserId(belongUserIds);
+ task.setAssigneeTime(LocalDateTime.now());
+ task.setReportUserId(0L);
+ task.setReportTime(LocalDateTime.now());
+ task.setEndTime(LocalDateTime.now().plusMinutes(taskRule.getProcessingTimeLimit()));
+ task.setExpiredNoticeSent(0);
+ task.setStatus(TaskScheduleConstants.TASK_STATUS_PENDING_ARRIVE);
+ task.setCreateBy("系统自动生成");
+ task.setCreateTime(LocalDateTime.now());
+ this.save(task);
// 异步发送消息通知
- String plateNumber = Objects.nonNull(vehicle) ? vehicle.getPlateNumber() : "";
- sendAccidentNotificationAsync(xpTask, plateNumber, taskRule.getProcessingTimeLimit());
+ sendAccidentNotificationAsync(task, vehicle.getPlateNumber(), taskRule.getProcessingTimeLimit());
}
@Override
--
Gitblit v1.7.1