From dae9cfa94a169a22aadcbcaedda4e92ee3e93d44 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期日, 01 三月 2026 00:53:17 +0800
Subject: [PATCH] bug修改

---
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java |  139 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 139 insertions(+), 0 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 0ffb655..6789a28 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
@@ -952,6 +952,73 @@
     @Override
     public List<TaskManagementPageListVO> exportList(TaskManagementPageListQuery query) {
         List<TaskManagementPageListVO> list = this.baseMapper.exportList(query);
+        for (TaskManagementPageListVO taskManagementPageListVO : list) {
+            if (org.springframework.util.StringUtils.hasLength(taskManagementPageListVO.getHandleUserId())){
+                String[] split = taskManagementPageListVO.getHandleUserId().split(",");
+                List<XpOperationsUser> users = operationUserClient.listByIds(Arrays.stream(split).map(Long::parseLong).collect(Collectors.toList())).getData();
+                if (users!=null){
+                    StringBuilder handleUserName = new StringBuilder();
+                    for (XpOperationsUser user : users) {
+                        handleUserName.append(user.getNickName()).append(";");
+                    }
+                    taskManagementPageListVO.setHandleUserName(handleUserName.toString());
+                }
+            }
+            if (taskManagementPageListVO.getTaskCategory() == 1) {
+                switch (taskManagementPageListVO.getTaskTypeId()) {
+                    case "1":
+                        taskManagementPageListVO.setTaskTypeName("车辆检查");
+                        break;
+                    case "2":
+                        taskManagementPageListVO.setTaskTypeName("车辆充电");
+                        break;
+                    case "3":
+                        taskManagementPageListVO.setTaskTypeName("车辆整备");
+                        break;
+                    case "4":
+                        taskManagementPageListVO.setTaskTypeName("整备洗车");
+                        break;
+                    case "5":
+                        taskManagementPageListVO.setTaskTypeName("车辆维修");
+                        break;
+                    case "6":
+                        taskManagementPageListVO.setTaskTypeName("车辆保养");
+                        break;
+                    case "7":
+                        taskManagementPageListVO.setTaskTypeName("车辆保险到期");
+                        break;
+                    case "8":
+                        taskManagementPageListVO.setTaskTypeName("车辆年检到期");
+                        break;
+                    case "9":
+                        taskManagementPageListVO.setTaskTypeName("车辆运营资质到期");
+                        break;
+                    default:
+                        taskManagementPageListVO.setTaskTypeName("");
+                        break;
+                }
+            } else {
+                StringBuilder taskTypeName = new StringBuilder();
+                String[] typeIds = taskManagementPageListVO.getTaskTypeId().split(",");
+                List<XpErrorType> xpErrorTypes = errorTypeMapper.selectList(new LambdaQueryWrapper<XpErrorType>()
+                        .in(XpErrorType::getId, Arrays.asList(typeIds)).orderByAsc(XpErrorType::getParentId));
+                List<XpErrorType> parents = new ArrayList<>();
+                for (XpErrorType xpErrorType : xpErrorTypes) {
+                    if (xpErrorType.getParentId() == 0) {
+                        parents.add(xpErrorType);
+                    }
+                }
+                for (XpErrorType parent : parents) {
+                    List<XpErrorType> children = xpErrorTypes.stream().filter(e -> e.getParentId().equals(parent.getId())).collect(Collectors.toList());
+                    taskTypeName.append(parent.getErrorName()).append(">");
+                    for (XpErrorType child : children) {
+                        taskTypeName.append(child.getErrorName()).append(";");
+                    }
+                }
+
+                taskManagementPageListVO.setTaskTypeName(taskTypeName.substring(0, taskTypeName.length() - 1));
+            }
+        }
         return list;
     }
 
@@ -961,6 +1028,78 @@
     }
 
     @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");
+        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);
+
+        // 发送消息通知
+        List<Long> userIds = Arrays.stream(xpTask.getHandleUserId().split(",")).map(Long::valueOf).collect(Collectors.toList());
+        if (CollUtil.isNotEmpty(userIds)) {
+            R<List<XpOperationsUser>> xpOperationUserResult = xpOperationUserClient.listByIds(userIds);
+            List<XpOperationsUser> data = xpOperationUserResult.getData();
+            if (CollUtil.isNotEmpty(data)) {
+
+                String plateNumber = Objects.nonNull(vehicle) ? vehicle.getPlateNumber() : "";
+                // 车辆${车牌号}在${车辆位置信息}发生了紧急事故,请在${到达现场限时}内到达现场!${APP链接}
+                String content = String.format("车辆%s在%s发生了紧急事故,请在%d分钟内到达现场!", plateNumber, xpTask.getVehicleLocation(), taskRule.getProcessingTimeLimit());
+                List<XpOperationsUserNotification> notifications = data.stream().map(item -> {
+                    XpOperationsUserNotification notification = new XpOperationsUserNotification();
+                    notification.setOperationsUserId(item.getId());
+                    notification.setNotificationContent(content);
+                    notification.setReadStatus(0);
+                    notification.setCreateTime(LocalDateTime.now());
+                    return notification;
+                }).collect(Collectors.toList());
+                xpOperationUserNotificationClient.addNotificationBatch(notifications);
+                // 发送阿里云推送
+                Map<Integer, List<XpOperationsUser>> operationUserMap = data.stream().collect(Collectors.groupingBy(XpOperationsUser::getDeviceType));
+                for (Map.Entry<Integer, List<XpOperationsUser>> integerListEntry : operationUserMap.entrySet()) {
+                    List<XpOperationsUser> value = integerListEntry.getValue();
+                    pushAliMessage(value, content, xpTask);
+                }
+            }
+        }
+    }
+
+    @Override
     public R assigneeTask(Long id, Long handlerUserId, Long assigneeUserId) {
         XpTask task = this.getById(id);
         task.setAssigneeTime(LocalDateTime.now());

--
Gitblit v1.7.1