From 8fb7dde57b835463a6786a2e038f0ecd3dba827b Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期三, 11 三月 2026 16:21:54 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi

---
 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