From 29cb451ff17a63edbe87abf93a51a2b0fa2f7e18 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期二, 21 四月 2026 11:46:28 +0800
Subject: [PATCH] [fix] 改派详情

---
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/XpTaskService.java                  |    2 
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java            |    5 
 /dev/null                                                                                                       |   97 ------------------------
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpTask.java                                    |   33 +++++++
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java         |   46 +++++------
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java |    2 
 6 files changed, 55 insertions(+), 130 deletions(-)

diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpTask.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpTask.java
index ef3e2ec..17e2a13 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpTask.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpTask.java
@@ -44,7 +44,7 @@
     @ApiModelProperty(value = "任务类型id 任务类别为2时对应数据字典,多个逗号分割,为1的时候 枚举1车辆检查 2车辆充电 3车辆整备 4整备洗车 5车辆维修 6车辆保养 7车辆保险到期 8车辆年检到期 9车辆运营资质到期")
     private String taskTypeId;
 
-    @ApiModelProperty(value = "任务类型id 任务类别为2时对应数据字典,多个逗号分割,为1的时候 枚举1车辆检查 2车辆充电 3车辆整备 4整备洗车 5车辆维修 6车辆保养 7车辆保险到期 8车辆年检到期 9车辆运营资质到期")
+    @ApiModelProperty(value = "事故类型id")
     private String accidentTypeId;
 
     @ApiModelProperty(value = "任务紧急程度 0=P0 1=P1 2=P2 3=P3")
@@ -107,5 +107,34 @@
 
     @ApiModelProperty(value = "申请改派的用户id")
     @TableField(typeHandler = JacksonTypeHandler.class)
-    private List<Long> excluded;
+    private List<Reject> excluded;
+
+
+    public Reject reject(String msg) {
+        Reject reject = new Reject();
+        reject.setRejectTime(LocalDateTime.now());
+        reject.setRejectUserId(handleUserId);
+        reject.setRejectReason(msg);
+        return reject;
+    }
+    @Data
+    public static class Reject {
+
+        @ApiModelProperty(value = "拒绝原因")
+        private String rejectReason;
+
+        @ApiModelProperty(value = "拒绝时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        private LocalDateTime rejectTime;
+
+        @ApiModelProperty(value = "拒绝人id")
+        private String rejectUserId;
+
+        @ApiModelProperty(value = "拒绝人姓名")
+        private String rejectUserName;
+
+
+        @ApiModelProperty(value = "拒绝人角色名称")
+        private String rejectUserRoleName;
+    }
 }
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
index 93ff612..9c3ba56 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
@@ -54,7 +54,6 @@
 import javax.validation.Valid;
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -333,8 +332,8 @@
 
     @ApiOperation(value = "改派详情", tags = {"管理后台-运维执行-任务工单-待改派工单"})
     @GetMapping("/api/v1/task/reassign/detail")
-    public R<TaskReassignDetailVO> reassignDetail(@RequestParam Long taskId) {
-        return R.ok(xpTaskService.detail(taskId));
+    public R<XpTask> reassignDetail(@RequestParam Long taskId) {
+        return R.ok(xpTaskService.getById(taskId));
     }
 
     @ApiOperation(value = "执行保险年检检测定时任务", tags = {"定时任务"})
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/XpTaskService.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/XpTaskService.java
index c971c38..989ed0e 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/XpTaskService.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/XpTaskService.java
@@ -16,7 +16,6 @@
 import com.xiaopeng.maintenance.model.vo.*;
 import com.xiaopeng.maintenance.model.query.TaskPageListQuery;
 import com.xiaopeng.maintenance.vo.TaskDetectionDetailVO;
-import com.xiaopeng.maintenance.vo.TaskReassignDetailVO;
 
 import javax.validation.Valid;
 import java.io.UnsupportedEncodingException;
@@ -105,5 +104,4 @@
 
     PageInfo<TaskVO> reassignTaskPageList(TaskPageListQuery query);
 
-    TaskReassignDetailVO detail(Long taskId);
 }
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 c18da89..3252d3c 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
@@ -13,6 +13,7 @@
 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.account.XpOperationsRoleClient;
 import com.xiaopeng.api.feignClient.operation.SmsClient;
 import com.xiaopeng.api.feignClient.pushMessage.WebSocketMessageClient;
 import com.xiaopeng.api.feignClient.pushMessage.XpAliPushMessageClient;
@@ -26,6 +27,7 @@
 import com.xiaopeng.api.model.maintenance.*;
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
 import com.xiaopeng.api.vo.TaskVO;
+import com.xiaopeng.api.vo.account.XpOperationsUserWithRoleVO;
 import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
 import com.xiaopeng.api.vo.maintenance.TaskScheduleConstants;
 import com.xiaopeng.api.vo.operation.SmsVo;
@@ -57,7 +59,6 @@
 import com.xiaopeng.maintenance.utils.UUIDUtil;
 import com.xiaopeng.maintenance.vo.TaskCleanDetailVO;
 import com.xiaopeng.maintenance.vo.TaskDetectionDetailVO;
-import com.xiaopeng.maintenance.vo.TaskReassignDetailVO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
@@ -121,22 +122,22 @@
 
     @Autowired
     private XpVehicleCleanMapper vehicleCleanMapper;
-    @Autowired
+    @Resource
     private XpOperationUserClient xpOperationUserClient;
-    @Autowired
+    @Resource
     private SysUserClient sysUserClient;
     @Autowired
     private XpTaskHandleDetailRoutineMapper xpTaskHandleDetailRoutineMapper;
 
-    @Autowired
+    @Resource
     private XpVehicleClient xpVehicleClient;
     @Autowired
     private XpTaskRuleMapper xpTaskRuleMapper;
     @Autowired
     private MongoTemplate mongoTemplate;
-    @Autowired
+    @Resource
     private XpAliPushMessageClient xpAliPushMessageClient;
-    @Autowired
+    @Resource
     private XpOperationUserNotificationClient xpOperationUserNotificationClient;
     @Autowired
     private IXpTaskRuleRoleService xpTaskRuleRoleService;
@@ -1389,21 +1390,28 @@
         XpTask task = getById(taskId);
         XpVehicle vehicle = xpVehicleClient.queryById(task.getVehicleId()).getData();
         XpTaskRule taskRule = xpTaskRuleService.lambdaQuery().last("limit 1").one();
+
         List<XpTaskRuleRole> taskRuleRole = xpTaskRuleRoleService.lambdaQuery().eq(XpTaskRuleRole::getRuleType, 9).list();
         if (Objects.isNull(taskRuleRole) || Objects.isNull(taskRule)) {
             throw new ServiceException("未配置车辆事故任务分配规则");
         }
-        List<Long> excludedUserIds = Optional.ofNullable(task.getExcluded()).orElse(new ArrayList<>());
-        excludedUserIds.addAll(Arrays.asList(task.getHandleUserId().split(",")).stream().map(Long::parseLong).collect(Collectors.toList()));
-        task.setExcluded(excludedUserIds);
+
+        List<XpTask.Reject> rejects = Optional.ofNullable(task.getExcluded()).orElse(new ArrayList<>());
+        XpTask.Reject reject = task.reject(msg);
+        rejects.add(reject);
+        task.setExcluded(rejects);
+        Set<String> excludedUserIds = rejects.stream().map(XpTask.Reject::getRejectUserId).collect(Collectors.toSet());
+
         Long fleetId = xpFleetVehicleClient.getFleetIdByVehicleId(vehicle.getId()).getData();
         List<Long> roleIds = taskRuleRole.stream().map(XpTaskRuleRole::getRoleId).collect(Collectors.toList());
         List<Long> ids = xpFleetOperationsClient.getOperationsIdsByFleetId(fleetId).getData();
         String belongUserIds = xpOperationUserClient.getXpOperationsRoleByRoleIds(roleIds).getData().stream()
                 .map(XpOperationsRole::getOperationsUserId)
                 .filter(ids::contains)
-                .filter(id -> !excludedUserIds.contains(id))
+                .filter(id -> !excludedUserIds.contains(id.toString()))
                 .map(String::valueOf).collect(Collectors.joining(","));
+
+
 //        VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vehicle.getVehicleVin())), VehiclePosition.class);
         VehiclePosition vehiclePosition = new VehiclePosition();
         vehiclePosition.setPoint(new GeoJsonPoint(103.12615621, 30.264561));
@@ -1413,10 +1421,11 @@
             task.setStatus(4);
             noticeAdministrator(task);//TODO 需要通知管理员手动处理,考虑再AliPushUtil 中给管理员发送消息
         }
-
         updateById(task);
-
         if(StringUtils.isNotBlank(task.getHandleUserId())){
+            List<Long> id = Collections.singletonList(Long.parseLong(task.getHandleUserId()));
+            String roleName = xpOperationUserClient.listByIdsWithRole(id).getData().get(0).getRoleName();
+            reject.setRejectUserRoleName(roleName);
             sendAccidentNotificationAsync(task, vehicle.getPlateNumber(), taskRule.getProcessingTimeLimit());
         }
     }
@@ -1487,19 +1496,6 @@
     @Override
     public PageInfo<TaskVO> reassignTaskPageList(TaskPageListQuery query) {
         return baseMapper.reassignTaskPageList(query);
-    }
-
-    @Override
-    public TaskReassignDetailVO detail(Long taskId) {
-        XpTask task = getById(taskId);
-
-        // 根据taskId去查询XpTaskHandleDetail,
-//        XpTaskHandleDetail taskHandleDetail = xpTaskHandleDetailClient.queryByTaskId(taskId).getData();
-
-
-//        return baseMapper.detail(taskId);
-        // todo
-        return null;
     }
 
     @Value("${robotaxi.sms.app-id:1476153389173952512}")
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/TaskReassignDetailVO.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/TaskReassignDetailVO.java
deleted file mode 100644
index a587bbf..0000000
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/TaskReassignDetailVO.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.xiaopeng.maintenance.vo;
-
-import com.baomidou.mybatisplus.annotation.FieldStrategy;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.xiaopeng.api.model.maintenance.XpTaskHandleDetail;
-import io.swagger.annotations.ApiModelProperty;
-
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.util.List;
-
-public class TaskReassignDetailVO {
-
-    @ApiModelProperty(value = "自增id")
-    @TableId(value = "id", type = IdType.NONE)
-    private Long id;
-
-    @ApiModelProperty(value = "任务编号")
-    private String taskCode;
-
-    @ApiModelProperty(value = "任务类别1常规 2事故")
-    private Integer taskCategory;
-    //1:车辆检查,2:车辆充电,3:车辆整备,4:整备洗车,5:车辆维修,6:车辆保养,7:车辆保险到期,8:车辆年检到期9:车辆运营资质到期
-    @ApiModelProperty(value = "任务类型id 任务类别为2时对应数据字典,多个逗号分割,为1的时候 枚举1车辆检查 2车辆充电 3车辆整备 4整备洗车 5车辆维修 6车辆保养 7车辆保险到期 8车辆年检到期 9车辆运营资质到期")
-    private String taskTypeId;
-
-    @ApiModelProperty(value = "任务类型id 任务类别为2时对应数据字典,多个逗号分割,为1的时候 枚举1车辆检查 2车辆充电 3车辆整备 4整备洗车 5车辆维修 6车辆保养 7车辆保险到期 8车辆年检到期 9车辆运营资质到期")
-    private String accidentTypeId;
-
-    @ApiModelProperty(value = "任务紧急程度 0=P0 1=P1 2=P2 3=P3")
-    private Integer taskUrgencyLevel;
-
-    @ApiModelProperty(value = "任务描述")
-    private String taskDescription;
-
-    @ApiModelProperty(value = "任务描述图片")
-    private String taskImage;
-
-    @ApiModelProperty(value = "车辆id")
-    @TableField(updateStrategy = FieldStrategy.NEVER)
-    private Long vehicleId;
-    @ApiModelProperty(value = "车辆位置")
-    private String vehicleLocation;
-    @ApiModelProperty(value = "车辆经度")
-    private BigDecimal vehicleLon;
-    @ApiModelProperty(value = "车辆纬度")
-    private BigDecimal vehicleLat;
-
-    @ApiModelProperty(value = "处理人id")
-    private String handleUserId;
-
-    @ApiModelProperty(value = "处理时间")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private LocalDateTime handleTime;
-
-    @ApiModelProperty(value = "分配人id")
-    private Long assigneeUserId;
-
-    @ApiModelProperty(value = "分配时间")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private LocalDateTime assigneeTime;
-
-    @ApiModelProperty(value = "上报人id")
-    private Long reportUserId;
-
-    @ApiModelProperty(value = "上报时间")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private LocalDateTime reportTime;
-    @ApiModelProperty(value = "任务时限结束时间")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private LocalDateTime endTime;
-
-    @ApiModelProperty(value = "是否已发送过期通知 0=未发送 1=已发送")
-    private Integer expiredNoticeSent;
-
-    @ApiModelProperty(value = "事故即将超时通知是否已发送 0=未发送 1=已发送")
-    private Integer willTimeoutNoticeSent;
-
-    @ApiModelProperty(value = "状态 0=待到达 1=待处理 2=已完成 3=已取消 4=改派中")
-    private Integer status;
-
-    @ApiModelProperty(value = "状态 2=已处理 1=改派中")
-    private Integer reassignmentStatus;
-
-    @ApiModelProperty(value = "任务来源 1-运维APP 2-管理后台")
-    private Integer taskSource;
-
-    @ApiModelProperty(value = "申请改派的用户id")
-    @TableField(typeHandler = JacksonTypeHandler.class)
-    private List<Long> excluded;
-
-    private List<XpTaskHandleDetail> logs;
-}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
index 3f3de89..3a0a198 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
@@ -1217,7 +1217,7 @@
         List<XpVehicle> list = this.list(new QueryWrapper<XpVehicle>().eq("vehicle_type", 2)
                 .eq("status", 2).eq("operating_status", 1)
                 .eq("is_deleted", 0).like(StringUtils.isNotBlank(dto.getPlateNumber()), "plate_number", dto.getPlateNumber())
-                .like(StringUtils.isNotBlank(dto.getVim()), "vehicle_vin", dto.getVim())
+                .like(StringUtils.isNotBlank(dto.getVin()), "vehicle_vin", dto.getVin())
                 .last(" order by create_time desc limit " + dto.getPageNo() + "," + dto.getPageSize())
         );
 

--
Gitblit v1.7.1