xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -28,6 +28,8 @@
import com.xiaopeng.maintenance.service.XpTaskService;
import com.xiaopeng.maintenance.utils.UUIDUtil;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -38,6 +40,7 @@
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -50,11 +53,15 @@
 */
@Service
public class XpTaskServiceImpl extends ServiceImpl<XpTaskMapper, XpTask> implements XpTaskService {
    @Autowired
    private RedissonClient redissonClient;
    @Autowired
    private XpErrorTypeMapper errorTypeMapper;
    /**
     * 常规任务类型映射
     */
    private static final Map<String, String> TASK_TYPE_MAP = new java.util.HashMap<>();
    static {
        TASK_TYPE_MAP.put("1", "车辆检查");
        TASK_TYPE_MAP.put("2", "车辆充电");
@@ -77,8 +84,7 @@
    private XpVehiclePreparationMapper vehiclePreparationMapper;
    @Autowired
    private XpVehicleDetectionMapper vehicleDetectionMapper;
    @Autowired
    private XpErrorTypeMapper errorTypeMapper;
    @Autowired
    private XpVehicleCleanMapper vehicleCleanMapper;
    @Autowired
@@ -92,6 +98,7 @@
    private XpVehicleClient xpVehicleClient;
    @Autowired
    private XpTaskRuleMapper xpTaskRuleMapper;
    @Override
    public PageInfo<WorkBenchVO> workbench(WorkBenchQuery query) {
        PageInfo<WorkBenchVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
@@ -135,7 +142,7 @@
        List<TaskPageListVO> list = this.baseMapper.pageList(pageInfo, query);
        XpTaskRule xpTaskRule = xpTaskRuleMapper.selectOne(new LambdaQueryWrapper<XpTaskRule>().last("limit 1"));
        if (Objects.nonNull(xpTaskRule)) {
            list.stream().filter(item -> item.getTaskCategory().equals(2)).forEach(item->{
            list.stream().filter(item -> item.getTaskCategory().equals(2)).forEach(item -> {
                item.setCanArriveRange(xpTaskRule.getCanArriveRange());
            });
        }
@@ -169,14 +176,14 @@
    public R<TaskAccidentDetailVO> vehicleAccidentDetail(Long id) {
        TaskAccidentDetailVO res = new TaskAccidentDetailVO();
        XpTask task = this.getById(id);
        if (task == null){
        if (task == null) {
            throw new ServiceException(
                    "任务不存在",
                    I18nKeyConstant.TASK_NOT_EXIST
            );
        }
        XpVehicle vehicle = xpVehicleClient.queryById(task.getVehicleId()).getData();
        if (vehicle == null){
        if (vehicle == null) {
            throw new ServiceException(
                    "车辆不存在",
                    I18nKeyConstant.VEHICLE_NOT_EXIST
@@ -218,7 +225,7 @@
    @Override
    public R handleVehicleAccident(HandleVehicleAccidentDto dto, XpOperationsUser xpOperationsUser) {
        XpTask task = this.getById(dto.getId());
        if (task == null){
        if (task == null) {
            throw new ServiceException(
                    "任务不存在",
                    I18nKeyConstant.TASK_NOT_EXIST
@@ -226,7 +233,7 @@
        }
        task.setHandleTime(LocalDateTime.now());
        task.setHandleUserId(xpOperationsUser.getId());
        task.setHandleUserId(xpOperationsUser.getId().toString());
        task.setStatus(2);
        // 存储事故处理日志
        XpTaskHandleDetail xpTaskHandleDetail = new XpTaskHandleDetail();
@@ -249,14 +256,14 @@
    public R<TaskRoutineDetailVO> vehicleRoutineDetail(Long id) {
        TaskRoutineDetailVO res = new TaskRoutineDetailVO();
        XpTask task = this.getById(id);
        if (task == null){
        if (task == null) {
            throw new ServiceException(
                    "任务不存在",
                    I18nKeyConstant.TASK_NOT_EXIST
            );
        }
        XpVehicle vehicle = xpVehicleClient.queryById(task.getVehicleId()).getData();
        if (vehicle == null){
        if (vehicle == null) {
            throw new ServiceException(
                    "车辆不存在",
                    I18nKeyConstant.VEHICLE_NOT_EXIST
@@ -282,8 +289,8 @@
        res.setTaskImage(task.getTaskImage());
        res.setHandleUserId(task.getHandleUserId());
        res.setHandleTime(task.getHandleTime());
        if (Objects.nonNull(task.getHandleUserId())) {
            XpOperationsUser data = xpOperationUserClient.queryById(task.getHandleUserId()).getData();
        if (Objects.nonNull(task.getHandleUserId()) && task.getHandleUserId().split(",").length == 1) {
            XpOperationsUser data = xpOperationUserClient.queryById(Long.valueOf(task.getHandleUserId())).getData();
            if (Objects.nonNull(data)) {
                res.setHandleUserName(data.getNickName());
            }
@@ -295,14 +302,14 @@
    public R<TaskChargingDetailVO> chargingDetail(Long id) {
        TaskChargingDetailVO res = new TaskChargingDetailVO();
        XpTask task = this.getById(id);
        if (task == null){
        if (task == null) {
            throw new ServiceException(
                    "任务不存在",
                    I18nKeyConstant.TASK_NOT_EXIST
            );
        }
        XpVehicle vehicle = xpVehicleClient.queryById(task.getVehicleId()).getData();
        if (vehicle == null){
        if (vehicle == null) {
            throw new ServiceException(
                    "车辆不存在",
                    I18nKeyConstant.VEHICLE_NOT_EXIST
@@ -323,7 +330,7 @@
        res.setStatus(task.getStatus());
        XpChargingRecord chargingRecord = chargingRecordMapper.selectOne(new LambdaQueryWrapper<XpChargingRecord>()
                .eq(XpChargingRecord::getTaskId, id).last("limit 1"));
        if (chargingRecord != null){
        if (chargingRecord != null) {
            res.setStartRemainingBattery(chargingRecord.getStartRemainingBattery());
            res.setStartChargingPicture(chargingRecord.getStartChargingPicture());
            res.setStartTime(chargingRecord.getStartTime());
@@ -332,15 +339,15 @@
            res.setEndTime(chargingRecord.getEndTime());
            res.setStartOperationsUserId(chargingRecord.getStartOperationsUserId());
            res.setEndOperationsUserId(chargingRecord.getEndOperationsUserId());
            if (chargingRecord.getStartOperationsUserId() != null){
            if (chargingRecord.getStartOperationsUserId() != null) {
                XpOperationsUser operationsUser = xpOperationUserClient.queryById(chargingRecord.getStartOperationsUserId()).getData();
                if (operationsUser != null){
                if (operationsUser != null) {
                    res.setStartOperationsUserName(operationsUser.getNickName());
                }
            }
            if (chargingRecord.getEndOperationsUserId() != null){
            if (chargingRecord.getEndOperationsUserId() != null) {
                XpOperationsUser operationsUser = xpOperationUserClient.queryById(chargingRecord.getEndOperationsUserId()).getData();
                if (operationsUser != null){
                if (operationsUser != null) {
                    res.setEndOperationsUserName(operationsUser.getNickName());
                }
            }
@@ -355,14 +362,14 @@
        XpTask task = this.getById(id);
        if (task == null){
        if (task == null) {
            throw new ServiceException(
                    "任务不存在",
                    I18nKeyConstant.TASK_NOT_EXIST
            );
        }
        XpVehicle vehicle = xpVehicleClient.queryById(task.getVehicleId()).getData();
        if (vehicle == null){
        if (vehicle == null) {
            throw new ServiceException(
                    "车辆不存在",
                    I18nKeyConstant.VEHICLE_NOT_EXIST
@@ -383,7 +390,7 @@
        res.setStatus(task.getStatus());
        XpVehicleRepair vehicleRepair = vehicleRepairMapper.selectOne(new LambdaQueryWrapper<XpVehicleRepair>()
                .eq(XpVehicleRepair::getTaskId, id).last("limit 1"));
        if (vehicleRepair != null){
        if (vehicleRepair != null) {
            res.setStartTime(vehicleRepair.getStartTime());
            res.setEndTime(vehicleRepair.getEndTime());
            res.setRepairReason(vehicleRepair.getRepairReason());
@@ -394,15 +401,15 @@
            res.setSendTime(vehicleRepair.getSendTime());
            res.setReturnUserId(vehicleRepair.getReturnUserId());
            res.setReturnTime(vehicleRepair.getReturnTime());
            if (vehicleRepair.getReturnUserId() != null){
            if (vehicleRepair.getReturnUserId() != null) {
                XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleRepair.getReturnUserId()).getData();
                if (operationsUser != null){
                if (operationsUser != null) {
                    res.setReturnUserName(operationsUser.getNickName());
                }
            }
            if (vehicleRepair.getSendUserId() != null){
            if (vehicleRepair.getSendUserId() != null) {
                XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleRepair.getSendUserId()).getData();
                if (operationsUser != null){
                if (operationsUser != null) {
                    res.setSendUserName(operationsUser.getNickName());
                }
            }
@@ -416,18 +423,15 @@
        com.xiaopeng.maintenance.vo.TaskPreparationDetailVO res = new com.xiaopeng.maintenance.vo.TaskPreparationDetailVO();
        XpTask task = this.getById(id);
        if (task == null){
        if (task == null) {
            throw new ServiceException(
                    "任务不存在",
                    I18nKeyConstant.TASK_NOT_EXIST
            );
        }
        XpVehicle vehicle = xpVehicleClient.queryById(task.getVehicleId()).getData();
        if (vehicle == null){
        if (vehicle == null) {
            throw new ServiceException(
                    "车辆不存在",
                    I18nKeyConstant.VEHICLE_NOT_EXIST
@@ -448,7 +452,7 @@
        res.setStatus(task.getStatus());
        XpVehiclePreparation vehiclePreparation = vehiclePreparationMapper.selectOne(new LambdaQueryWrapper<XpVehiclePreparation>()
                .eq(XpVehiclePreparation::getTaskId, id).last("limit 1"));
        if (vehiclePreparation != null){
        if (vehiclePreparation != null) {
            res.setLeftFrontWheel(vehiclePreparation.getLeftFrontWheel());
            res.setRightFrontWheel(vehiclePreparation.getRightFrontWheel());
            res.setLeftRearWheel(vehiclePreparation.getLeftRearWheel());
@@ -463,9 +467,9 @@
            res.setRemarks(vehiclePreparation.getRemarks());
            res.setOperationsUserId(vehiclePreparation.getOperationsUserId());
            res.setOperationsTime(vehiclePreparation.getCreateTime());
            if (vehiclePreparation.getOperationsUserId() != null){
            if (vehiclePreparation.getOperationsUserId() != null) {
                XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehiclePreparation.getOperationsUserId()).getData();
                if (operationsUser != null){
                if (operationsUser != null) {
                    res.setOperationsUserName(operationsUser.getNickName());
                }
            }
@@ -477,14 +481,14 @@
    public R<com.xiaopeng.maintenance.vo.TaskDetectionDetailVO> detectionDetail(Long id) {
        com.xiaopeng.maintenance.vo.TaskDetectionDetailVO res = new com.xiaopeng.maintenance.vo.TaskDetectionDetailVO();
        XpTask task = this.getById(id);
        if (task == null){
        if (task == null) {
            throw new ServiceException(
                    "任务不存在",
                    I18nKeyConstant.TASK_NOT_EXIST
            );
        }
        XpVehicle vehicle = xpVehicleClient.queryById(task.getVehicleId()).getData();
        if (vehicle == null){
        if (vehicle == null) {
            throw new ServiceException(
                    "车辆不存在",
                    I18nKeyConstant.VEHICLE_NOT_EXIST
@@ -505,7 +509,7 @@
        res.setStatus(task.getStatus());
        XpVehicleDetection vehicleDetection = vehicleDetectionMapper.selectOne(new LambdaQueryWrapper<XpVehicleDetection>()
                .eq(XpVehicleDetection::getTaskId, id).last("limit 1"));
        if (vehicleDetection != null){
        if (vehicleDetection != null) {
            res.setNetworkDetection(vehicleDetection.getNetworkDetection());
            res.setVersionVerification(vehicleDetection.getVersionVerification());
            res.setCommunicationSelfCheck(vehicleDetection.getCommunicationSelfCheck());
@@ -524,9 +528,9 @@
            res.setSystemCheckPicture(vehicleDetection.getSystemCheckPicture());
            res.setCheckTime(vehicleDetection.getCheckTime());
            res.setOperationsUserId(vehicleDetection.getOperationsUserId());
            if (vehicleDetection.getOperationsUserId() != null){
            if (vehicleDetection.getOperationsUserId() != null) {
                XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleDetection.getOperationsUserId()).getData();
                if (operationsUser != null){
                if (operationsUser != null) {
                    res.setOperationsUserName(operationsUser.getNickName());
                }
            }
@@ -537,7 +541,7 @@
    @Override
    public R saveRoutineDetail(SaveRoutineDetailDto dto, Long id) {
        XpTask task = this.getById(dto.getId());
        if (task == null){
        if (task == null) {
            throw new ServiceException(
                    "任务不存在",
                    I18nKeyConstant.TASK_NOT_EXIST
@@ -546,7 +550,7 @@
        XpTaskHandleDetailRoutine xpTaskHandleDetailRoutine = new XpTaskHandleDetailRoutine();
        xpTaskHandleDetailRoutine.setTaskId(task.getId());
        String taskTypeId = task.getTaskTypeId();
        switch (taskTypeId){
        switch (taskTypeId) {
            case "6":
                xpTaskHandleDetailRoutine.setTaskType(1);
                break;
@@ -575,14 +579,14 @@
    public R<com.xiaopeng.maintenance.vo.TaskCleanDetailVO> cleanDetail(Long id) {
        com.xiaopeng.maintenance.vo.TaskCleanDetailVO res = new com.xiaopeng.maintenance.vo.TaskCleanDetailVO();
        XpTask task = this.getById(id);
        if (task == null){
        if (task == null) {
            throw new ServiceException(
                    "任务不存在",
                    I18nKeyConstant.TASK_NOT_EXIST
            );
        }
        XpVehicle vehicle = xpVehicleClient.queryById(task.getVehicleId()).getData();
        if (vehicle == null){
        if (vehicle == null) {
            throw new ServiceException(
                    "车辆不存在",
                    I18nKeyConstant.VEHICLE_NOT_EXIST
@@ -603,12 +607,12 @@
        res.setStatus(task.getStatus());
        XpVehicleClean vehicleDetection = vehicleCleanMapper.selectOne(new LambdaQueryWrapper<XpVehicleClean>()
                .eq(XpVehicleClean::getTaskId, id).last("limit 1"));
        if (vehicleDetection != null){
        if (vehicleDetection != null) {
            res.setTaskImage(vehicleDetection.getTaskImage());
            res.setOperationUserId(vehicleDetection.getOperationsUserId());
            if (vehicleDetection.getOperationsUserId() != null){
            if (vehicleDetection.getOperationsUserId() != null) {
                XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleDetection.getOperationsUserId()).getData();
                if (operationsUser != null){
                if (operationsUser != null) {
                    res.setOperationsUserName(operationsUser.getNickName());
                }
            }
@@ -617,13 +621,43 @@
    }
    @Override
    public R confirmArrive(Long id) {
        XpTask task = this.getById(id);
        if (task!=null){
    public R confirmArrive(Long id, Long userId) {
        RLock lock = redissonClient.getLock("TASK_CONFIRM_" + id);
        try {
            // 尝试获取锁,最多等待3秒
            boolean isLocked = lock.tryLock(3, 10, TimeUnit.SECONDS);
            if (!isLocked) {
                return R.fail("系统繁忙,请稍后重试");
            }
            // 查询任务
            XpTask task = this.getById(id);
            if (task == null) {
                return R.fail("任务不存在");
            }
            // 检查任务状态
            if (task.getStatus() != 0) {
                return R.fail("任务已被处理");
            }
            // 更新任务
            task.setStatus(1);
            task.setHandleUserId(userId.toString());
            this.updateById(task);
            return R.ok();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            return R.fail("操作被中断");
        } finally {
            // 确保锁被释放
            if (lock.isHeldByCurrentThread()) {
                lock.unlock();
            }
        }
        return R.ok();
    }
    @Override
@@ -662,7 +696,7 @@
            Set<Long> errorTypeIds = new HashSet<>();
            for (XpTask task : resultPage.getRecords()) {
                if (task.getTaskCategory() != null && task.getTaskCategory() == 2
                    && StringUtils.isNotBlank(task.getTaskTypeId())) {
                        && StringUtils.isNotBlank(task.getTaskTypeId())) {
                    String[] ids = task.getTaskTypeId().split(",");
                    for (String id : ids) {
                        try {
@@ -741,9 +775,66 @@
    public PageInfo<TaskManagementPageListVO> pageListManagement(TaskManagementPageListQuery query) {
        PageInfo<TaskManagementPageListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TaskManagementPageListVO> list = this.baseMapper.pageListManagement(pageInfo, query);
        for (TaskManagementPageListVO taskManagementPageListVO : list) {
            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));
            }
        }
        pageInfo.setRecords(list);
        return pageInfo;
    }
    @Override
    public List<TaskManagementPageListVO> exportList(TaskManagementPageListQuery query) {
        List<TaskManagementPageListVO> list = this.baseMapper.exportList(query);
@@ -756,10 +847,11 @@
    }
    @Override
    public R assigneeTask(Long id, Long handlerUserId,Long assigneeUserId) {
    public R assigneeTask(Long id, Long handlerUserId, Long assigneeUserId) {
        XpTask task = this.getById(id);
        task.setAssigneeTime(LocalDateTime.now());
        task.setHandleUserId(handlerUserId);
        task.setHandleUserId(handlerUserId.toString());
        task.setVehicleId(null);
        task.setAssigneeUserId(assigneeUserId);
        this.updateById(task);
        return R.ok();
@@ -779,7 +871,7 @@
            task.setTaskCode(code);
            // 查询规则
            XpTaskRule taskRule = xpTaskRuleMapper.selectOne(null);
            if (taskRule != null){
            if (taskRule != null) {
                task.setEndTime(LocalDateTime.now().plusMinutes(taskRule.getProcessingTimeLimit()));
            }
            task.setTaskCategory(2);
@@ -802,251 +894,251 @@
    public R<TaskManagementDetailVO> taskDetail(Long id) {
        TaskManagementDetailVO managementDetailVO = new TaskManagementDetailVO();
        XpTask task = this.getById(id);
        if (task == null){
        if (task == null) {
            throw new ServiceException(
                    "任务不存在",
                    I18nKeyConstant.TASK_NOT_EXIST
            );
        }
        XpVehicle vehicle = xpVehicleClient.queryById(task.getVehicleId()).getData();
        if (vehicle == null){
        if (vehicle == null) {
            throw new ServiceException(
                    "车辆不存在",
                    I18nKeyConstant.VEHICLE_NOT_EXIST
            );
        }
        if (task.getTaskCategory()==1){
        if (task.getTaskCategory() == 1) {
            // 常规任务
                switch (task.getTaskTypeId()){
                    case "1":
                        // 检测
                        TaskManagementDetectionDetailVO taskManagementDetectionDetailVO = new TaskManagementDetectionDetailVO();
                        taskManagementDetectionDetailVO.setId(task.getId());
                        taskManagementDetectionDetailVO.setVehicleId(vehicle.getId());
                        taskManagementDetectionDetailVO.setTaskUrgencyLevel(task.getTaskUrgencyLevel());
                        taskManagementDetectionDetailVO.setPlateNumber(vehicle.getPlateNumber());
                        taskManagementDetectionDetailVO.setVehicleColor(vehicle.getVehicleColor());
                        taskManagementDetectionDetailVO.setVehicleCode(vehicle.getVehicleCode());
                        taskManagementDetectionDetailVO.setVehicleVin(vehicle.getVehicleVin());
                        taskManagementDetectionDetailVO.setVehicleLocation(task.getVehicleLocation());
                        taskManagementDetectionDetailVO.setTaskCode(task.getTaskCode());
                        XpVehicleDetection vehicleDetection = vehicleDetectionMapper.selectOne(new LambdaQueryWrapper<XpVehicleDetection>()
                                .eq(XpVehicleDetection::getTaskId, id).last("limit 1"));
                        if (vehicleDetection != null){
                            taskManagementDetectionDetailVO.setNetworkDetection(vehicleDetection.getNetworkDetection());
                            taskManagementDetectionDetailVO.setVersionVerification(vehicleDetection.getVersionVerification());
                            taskManagementDetectionDetailVO.setCommunicationSelfCheck(vehicleDetection.getCommunicationSelfCheck());
                            taskManagementDetectionDetailVO.setRemoteSelfCheck(vehicleDetection.getRemoteSelfCheck());
                            taskManagementDetectionDetailVO.setCollisionPrevention(vehicleDetection.getCollisionPrevention());
                            taskManagementDetectionDetailVO.setSensorSelfCheck(vehicleDetection.getSensorSelfCheck());
                            taskManagementDetectionDetailVO.setSensorCleaning(vehicleDetection.getSensorCleaning());
                            taskManagementDetectionDetailVO.setSensorCleaningPicture(vehicleDetection.getSensorCleaningPicture());
                            taskManagementDetectionDetailVO.setInteractiveScreen(vehicleDetection.getInteractiveScreen());
                            taskManagementDetectionDetailVO.setInteractiveScreenPicture(vehicleDetection.getInteractiveScreenPicture());
                            taskManagementDetectionDetailVO.setHelpButton(vehicleDetection.getHelpButton());
                            taskManagementDetectionDetailVO.setHelpButtonPicture(vehicleDetection.getHelpButtonPicture());
                            taskManagementDetectionDetailVO.setPaymentFunction(vehicleDetection.getPaymentFunction());
                            taskManagementDetectionDetailVO.setPaymentFunctionPicture(vehicleDetection.getPaymentFunctionPicture());
                            taskManagementDetectionDetailVO.setSystemCheck(vehicleDetection.getSystemCheck());
                            taskManagementDetectionDetailVO.setSystemCheckPicture(vehicleDetection.getSystemCheckPicture());
                            taskManagementDetectionDetailVO.setCheckTime(vehicleDetection.getCheckTime());
                            taskManagementDetectionDetailVO.setOperationsUserId(vehicleDetection.getOperationsUserId());
                            if (vehicleDetection.getOperationsUserId() != null){
                                XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleDetection.getOperationsUserId()).getData();
                                if (operationsUser != null){
                                    taskManagementDetectionDetailVO.setOperationsUserName(operationsUser.getNickName());
                                }
            switch (task.getTaskTypeId()) {
                case "1":
                    // 检测
                    TaskManagementDetectionDetailVO taskManagementDetectionDetailVO = new TaskManagementDetectionDetailVO();
                    taskManagementDetectionDetailVO.setId(task.getId());
                    taskManagementDetectionDetailVO.setVehicleId(vehicle.getId());
                    taskManagementDetectionDetailVO.setTaskUrgencyLevel(task.getTaskUrgencyLevel());
                    taskManagementDetectionDetailVO.setPlateNumber(vehicle.getPlateNumber());
                    taskManagementDetectionDetailVO.setVehicleColor(vehicle.getVehicleColor());
                    taskManagementDetectionDetailVO.setVehicleCode(vehicle.getVehicleCode());
                    taskManagementDetectionDetailVO.setVehicleVin(vehicle.getVehicleVin());
                    taskManagementDetectionDetailVO.setVehicleLocation(task.getVehicleLocation());
                    taskManagementDetectionDetailVO.setTaskCode(task.getTaskCode());
                    XpVehicleDetection vehicleDetection = vehicleDetectionMapper.selectOne(new LambdaQueryWrapper<XpVehicleDetection>()
                            .eq(XpVehicleDetection::getTaskId, id).last("limit 1"));
                    if (vehicleDetection != null) {
                        taskManagementDetectionDetailVO.setNetworkDetection(vehicleDetection.getNetworkDetection());
                        taskManagementDetectionDetailVO.setVersionVerification(vehicleDetection.getVersionVerification());
                        taskManagementDetectionDetailVO.setCommunicationSelfCheck(vehicleDetection.getCommunicationSelfCheck());
                        taskManagementDetectionDetailVO.setRemoteSelfCheck(vehicleDetection.getRemoteSelfCheck());
                        taskManagementDetectionDetailVO.setCollisionPrevention(vehicleDetection.getCollisionPrevention());
                        taskManagementDetectionDetailVO.setSensorSelfCheck(vehicleDetection.getSensorSelfCheck());
                        taskManagementDetectionDetailVO.setSensorCleaning(vehicleDetection.getSensorCleaning());
                        taskManagementDetectionDetailVO.setSensorCleaningPicture(vehicleDetection.getSensorCleaningPicture());
                        taskManagementDetectionDetailVO.setInteractiveScreen(vehicleDetection.getInteractiveScreen());
                        taskManagementDetectionDetailVO.setInteractiveScreenPicture(vehicleDetection.getInteractiveScreenPicture());
                        taskManagementDetectionDetailVO.setHelpButton(vehicleDetection.getHelpButton());
                        taskManagementDetectionDetailVO.setHelpButtonPicture(vehicleDetection.getHelpButtonPicture());
                        taskManagementDetectionDetailVO.setPaymentFunction(vehicleDetection.getPaymentFunction());
                        taskManagementDetectionDetailVO.setPaymentFunctionPicture(vehicleDetection.getPaymentFunctionPicture());
                        taskManagementDetectionDetailVO.setSystemCheck(vehicleDetection.getSystemCheck());
                        taskManagementDetectionDetailVO.setSystemCheckPicture(vehicleDetection.getSystemCheckPicture());
                        taskManagementDetectionDetailVO.setCheckTime(vehicleDetection.getCheckTime());
                        taskManagementDetectionDetailVO.setOperationsUserId(vehicleDetection.getOperationsUserId());
                        if (vehicleDetection.getOperationsUserId() != null) {
                            XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleDetection.getOperationsUserId()).getData();
                            if (operationsUser != null) {
                                taskManagementDetectionDetailVO.setOperationsUserName(operationsUser.getNickName());
                            }
                        }
                        managementDetailVO.setDetectionDetailVO(taskManagementDetectionDetailVO);
                        break;
                    case "2":
                        // 充电
                        TaskManagementChargingDetailVO taskManagementChargingDetailVO = new TaskManagementChargingDetailVO();
                        taskManagementChargingDetailVO.setId(task.getId());
                        taskManagementChargingDetailVO.setVehicleId(vehicle.getId());
                        taskManagementChargingDetailVO.setTaskUrgencyLevel(task.getTaskUrgencyLevel());
                        taskManagementChargingDetailVO.setPlateNumber(vehicle.getPlateNumber());
                        taskManagementChargingDetailVO.setVehicleColor(vehicle.getVehicleColor());
                        taskManagementChargingDetailVO.setVehicleCode(vehicle.getVehicleCode());
                        taskManagementChargingDetailVO.setVehicleVin(vehicle.getVehicleVin());
                        taskManagementChargingDetailVO.setVehicleLocation(task.getVehicleLocation());
                        taskManagementChargingDetailVO.setTaskCode(task.getTaskCode());
                        XpChargingRecord chargingRecord = chargingRecordMapper.selectOne(new LambdaQueryWrapper<XpChargingRecord>()
                                .eq(XpChargingRecord::getTaskId, id).last("limit 1"));
                        if (chargingRecord != null){
                            taskManagementChargingDetailVO.setStartRemainingBattery(chargingRecord.getStartRemainingBattery());
                            taskManagementChargingDetailVO.setStartChargingPicture(chargingRecord.getStartChargingPicture());
                            taskManagementChargingDetailVO.setStartTime(chargingRecord.getStartTime());
                            taskManagementChargingDetailVO.setEndRemainingBattery(chargingRecord.getEndRemainingBattery());
                            taskManagementChargingDetailVO.setEndChargingPicture(chargingRecord.getEndChargingPicture());
                            taskManagementChargingDetailVO.setEndTime(chargingRecord.getEndTime());
                            taskManagementChargingDetailVO.setStartOperationsUserId(chargingRecord.getStartOperationsUserId());
                            taskManagementChargingDetailVO.setEndOperationsUserId(chargingRecord.getEndOperationsUserId());
                            if (chargingRecord.getStartOperationsUserId() != null){
                                XpOperationsUser operationsUser = xpOperationUserClient.queryById(chargingRecord.getStartOperationsUserId()).getData();
                                if (operationsUser != null){
                                    taskManagementChargingDetailVO.setStartOperationsUserName(operationsUser.getNickName());
                                }
                            }
                            if (chargingRecord.getEndOperationsUserId() != null){
                                XpOperationsUser operationsUser = xpOperationUserClient.queryById(chargingRecord.getEndOperationsUserId()).getData();
                                if (operationsUser != null){
                                    taskManagementChargingDetailVO.setEndOperationsUserName(operationsUser.getNickName());
                                }
                    }
                    managementDetailVO.setDetectionDetailVO(taskManagementDetectionDetailVO);
                    break;
                case "2":
                    // 充电
                    TaskManagementChargingDetailVO taskManagementChargingDetailVO = new TaskManagementChargingDetailVO();
                    taskManagementChargingDetailVO.setId(task.getId());
                    taskManagementChargingDetailVO.setVehicleId(vehicle.getId());
                    taskManagementChargingDetailVO.setTaskUrgencyLevel(task.getTaskUrgencyLevel());
                    taskManagementChargingDetailVO.setPlateNumber(vehicle.getPlateNumber());
                    taskManagementChargingDetailVO.setVehicleColor(vehicle.getVehicleColor());
                    taskManagementChargingDetailVO.setVehicleCode(vehicle.getVehicleCode());
                    taskManagementChargingDetailVO.setVehicleVin(vehicle.getVehicleVin());
                    taskManagementChargingDetailVO.setVehicleLocation(task.getVehicleLocation());
                    taskManagementChargingDetailVO.setTaskCode(task.getTaskCode());
                    XpChargingRecord chargingRecord = chargingRecordMapper.selectOne(new LambdaQueryWrapper<XpChargingRecord>()
                            .eq(XpChargingRecord::getTaskId, id).last("limit 1"));
                    if (chargingRecord != null) {
                        taskManagementChargingDetailVO.setStartRemainingBattery(chargingRecord.getStartRemainingBattery());
                        taskManagementChargingDetailVO.setStartChargingPicture(chargingRecord.getStartChargingPicture());
                        taskManagementChargingDetailVO.setStartTime(chargingRecord.getStartTime());
                        taskManagementChargingDetailVO.setEndRemainingBattery(chargingRecord.getEndRemainingBattery());
                        taskManagementChargingDetailVO.setEndChargingPicture(chargingRecord.getEndChargingPicture());
                        taskManagementChargingDetailVO.setEndTime(chargingRecord.getEndTime());
                        taskManagementChargingDetailVO.setStartOperationsUserId(chargingRecord.getStartOperationsUserId());
                        taskManagementChargingDetailVO.setEndOperationsUserId(chargingRecord.getEndOperationsUserId());
                        if (chargingRecord.getStartOperationsUserId() != null) {
                            XpOperationsUser operationsUser = xpOperationUserClient.queryById(chargingRecord.getStartOperationsUserId()).getData();
                            if (operationsUser != null) {
                                taskManagementChargingDetailVO.setStartOperationsUserName(operationsUser.getNickName());
                            }
                        }
                        managementDetailVO.setChargingDetailVO(taskManagementChargingDetailVO);
                        break;
                    case "3":
                        // 整备
                        TaskManagementPreparationDetailVO taskManagementPreparationDetailVO = new TaskManagementPreparationDetailVO();
                        taskManagementPreparationDetailVO.setId(task.getId());
                        taskManagementPreparationDetailVO.setVehicleId(vehicle.getId());
                        taskManagementPreparationDetailVO.setTaskUrgencyLevel(task.getTaskUrgencyLevel());
                        taskManagementPreparationDetailVO.setPlateNumber(vehicle.getPlateNumber());
                        taskManagementPreparationDetailVO.setVehicleColor(vehicle.getVehicleColor());
                        taskManagementPreparationDetailVO.setVehicleCode(vehicle.getVehicleCode());
                        taskManagementPreparationDetailVO.setVehicleVin(vehicle.getVehicleVin());
                        taskManagementPreparationDetailVO.setVehicleLocation(task.getVehicleLocation());
                        taskManagementPreparationDetailVO.setTaskCode(task.getTaskCode());
                        XpVehiclePreparation vehiclePreparation = vehiclePreparationMapper.selectOne(new LambdaQueryWrapper<XpVehiclePreparation>()
                                .eq(XpVehiclePreparation::getTaskId, id).last("limit 1"));
                        if (vehiclePreparation != null){
                            taskManagementPreparationDetailVO.setLeftFrontWheel(vehiclePreparation.getLeftFrontWheel());
                            taskManagementPreparationDetailVO.setRightFrontWheel(vehiclePreparation.getRightFrontWheel());
                            taskManagementPreparationDetailVO.setLeftRearWheel(vehiclePreparation.getLeftRearWheel());
                            taskManagementPreparationDetailVO.setRightRearWheel(vehiclePreparation.getRightRearWheel());
                            taskManagementPreparationDetailVO.setHeadLight(vehiclePreparation.getHeadLight());
                            taskManagementPreparationDetailVO.setTurnSignal(vehiclePreparation.getTurnSignal());
                            taskManagementPreparationDetailVO.setBrakeLight(vehiclePreparation.getBrakeLight());
                            taskManagementPreparationDetailVO.setFogLight(vehiclePreparation.getFogLight());
                            taskManagementPreparationDetailVO.setBodyEmblem(vehiclePreparation.getBodyEmblem());
                            taskManagementPreparationDetailVO.setCabinCleaning(vehiclePreparation.getCabinCleaning());
                            taskManagementPreparationDetailVO.setLostItems(vehiclePreparation.getLostItems());
                            taskManagementPreparationDetailVO.setRemarks(vehiclePreparation.getRemarks());
                            taskManagementPreparationDetailVO.setOperationsUserId(vehiclePreparation.getOperationsUserId());
                            taskManagementPreparationDetailVO.setOperationsTime(vehiclePreparation.getCreateTime());
                            if (vehiclePreparation.getOperationsUserId() != null){
                                XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehiclePreparation.getOperationsUserId()).getData();
                                if (operationsUser != null){
                                    taskManagementPreparationDetailVO.setOperationsUserName(operationsUser.getNickName());
                                }
                        if (chargingRecord.getEndOperationsUserId() != null) {
                            XpOperationsUser operationsUser = xpOperationUserClient.queryById(chargingRecord.getEndOperationsUserId()).getData();
                            if (operationsUser != null) {
                                taskManagementChargingDetailVO.setEndOperationsUserName(operationsUser.getNickName());
                            }
                        }
                        managementDetailVO.setPreparationDetailVO(taskManagementPreparationDetailVO);
                    }
                    managementDetailVO.setChargingDetailVO(taskManagementChargingDetailVO);
                        break;
                    case "4":
                        // 洗车
                        TaskManagementCleanDetailVO taskManagementCleanDetailVO = new TaskManagementCleanDetailVO();
                        taskManagementCleanDetailVO.setId(task.getId());
                        taskManagementCleanDetailVO.setVehicleId(vehicle.getId());
                        taskManagementCleanDetailVO.setTaskUrgencyLevel(task.getTaskUrgencyLevel());
                        taskManagementCleanDetailVO.setPlateNumber(vehicle.getPlateNumber());
                        taskManagementCleanDetailVO.setVehicleColor(vehicle.getVehicleColor());
                        taskManagementCleanDetailVO.setVehicleCode(vehicle.getVehicleCode());
                        taskManagementCleanDetailVO.setVehicleVin(vehicle.getVehicleVin());
                        taskManagementCleanDetailVO.setVehicleLocation(task.getVehicleLocation());
                        taskManagementCleanDetailVO.setTaskCode(task.getTaskCode());
                        XpVehicleClean vehicleClean = vehicleCleanMapper.selectOne(new LambdaQueryWrapper<XpVehicleClean>()
                                .eq(XpVehicleClean::getTaskId, id).last("limit 1"));
                        if (vehicleClean != null){
                            taskManagementCleanDetailVO.setTaskImage(vehicleClean.getTaskImage());
                            taskManagementCleanDetailVO.setOperationUserId(vehicleClean.getOperationsUserId());
                            if (vehicleClean.getOperationsUserId() != null){
                                XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleClean.getOperationsUserId()).getData();
                                if (operationsUser != null){
                                    taskManagementCleanDetailVO.setOperationsUserName(operationsUser.getNickName());
                                }
                    break;
                case "3":
                    // 整备
                    TaskManagementPreparationDetailVO taskManagementPreparationDetailVO = new TaskManagementPreparationDetailVO();
                    taskManagementPreparationDetailVO.setId(task.getId());
                    taskManagementPreparationDetailVO.setVehicleId(vehicle.getId());
                    taskManagementPreparationDetailVO.setTaskUrgencyLevel(task.getTaskUrgencyLevel());
                    taskManagementPreparationDetailVO.setPlateNumber(vehicle.getPlateNumber());
                    taskManagementPreparationDetailVO.setVehicleColor(vehicle.getVehicleColor());
                    taskManagementPreparationDetailVO.setVehicleCode(vehicle.getVehicleCode());
                    taskManagementPreparationDetailVO.setVehicleVin(vehicle.getVehicleVin());
                    taskManagementPreparationDetailVO.setVehicleLocation(task.getVehicleLocation());
                    taskManagementPreparationDetailVO.setTaskCode(task.getTaskCode());
                    XpVehiclePreparation vehiclePreparation = vehiclePreparationMapper.selectOne(new LambdaQueryWrapper<XpVehiclePreparation>()
                            .eq(XpVehiclePreparation::getTaskId, id).last("limit 1"));
                    if (vehiclePreparation != null) {
                        taskManagementPreparationDetailVO.setLeftFrontWheel(vehiclePreparation.getLeftFrontWheel());
                        taskManagementPreparationDetailVO.setRightFrontWheel(vehiclePreparation.getRightFrontWheel());
                        taskManagementPreparationDetailVO.setLeftRearWheel(vehiclePreparation.getLeftRearWheel());
                        taskManagementPreparationDetailVO.setRightRearWheel(vehiclePreparation.getRightRearWheel());
                        taskManagementPreparationDetailVO.setHeadLight(vehiclePreparation.getHeadLight());
                        taskManagementPreparationDetailVO.setTurnSignal(vehiclePreparation.getTurnSignal());
                        taskManagementPreparationDetailVO.setBrakeLight(vehiclePreparation.getBrakeLight());
                        taskManagementPreparationDetailVO.setFogLight(vehiclePreparation.getFogLight());
                        taskManagementPreparationDetailVO.setBodyEmblem(vehiclePreparation.getBodyEmblem());
                        taskManagementPreparationDetailVO.setCabinCleaning(vehiclePreparation.getCabinCleaning());
                        taskManagementPreparationDetailVO.setLostItems(vehiclePreparation.getLostItems());
                        taskManagementPreparationDetailVO.setRemarks(vehiclePreparation.getRemarks());
                        taskManagementPreparationDetailVO.setOperationsUserId(vehiclePreparation.getOperationsUserId());
                        taskManagementPreparationDetailVO.setOperationsTime(vehiclePreparation.getCreateTime());
                        if (vehiclePreparation.getOperationsUserId() != null) {
                            XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehiclePreparation.getOperationsUserId()).getData();
                            if (operationsUser != null) {
                                taskManagementPreparationDetailVO.setOperationsUserName(operationsUser.getNickName());
                            }
                        }
                        managementDetailVO.setCleanDetailVO(taskManagementCleanDetailVO);
                    }
                    managementDetailVO.setPreparationDetailVO(taskManagementPreparationDetailVO);
                        break;
                    case "5":
                        // 维修
                        TaskManagementRepairDetailVO taskManagementRepairDetailVO = new TaskManagementRepairDetailVO();
                        taskManagementRepairDetailVO.setId(task.getId());
                        taskManagementRepairDetailVO.setVehicleId(vehicle.getId());
                        taskManagementRepairDetailVO.setTaskUrgencyLevel(task.getTaskUrgencyLevel());
                        taskManagementRepairDetailVO.setPlateNumber(vehicle.getPlateNumber());
                        taskManagementRepairDetailVO.setVehicleColor(vehicle.getVehicleColor());
                        taskManagementRepairDetailVO.setVehicleCode(vehicle.getVehicleCode());
                        taskManagementRepairDetailVO.setVehicleVin(vehicle.getVehicleVin());
                        taskManagementRepairDetailVO.setVehicleLocation(task.getVehicleLocation());
                        taskManagementRepairDetailVO.setTaskCode(task.getTaskCode());
                        XpVehicleRepair vehicleRepair = vehicleRepairMapper.selectOne(new LambdaQueryWrapper<XpVehicleRepair>()
                                .eq(XpVehicleRepair::getTaskId, id).last("limit 1"));
                        if (vehicleRepair != null){
                            taskManagementRepairDetailVO.setStartTime(vehicleRepair.getStartTime());
                            taskManagementRepairDetailVO.setEndTime(vehicleRepair.getEndTime());
                            taskManagementRepairDetailVO.setRepairReason(vehicleRepair.getRepairReason());
                            taskManagementRepairDetailVO.setStartRepairPicture(vehicleRepair.getStartRepairPicture());
                            taskManagementRepairDetailVO.setRepairMoney(vehicleRepair.getRepairMoney());
                            taskManagementRepairDetailVO.setRepairMoneyDetail(vehicleRepair.getRepairMoneyDetail());
                            taskManagementRepairDetailVO.setSendUserId(vehicleRepair.getSendUserId());
                            taskManagementRepairDetailVO.setSendTime(vehicleRepair.getSendTime());
                            taskManagementRepairDetailVO.setReturnUserId(vehicleRepair.getReturnUserId());
                            taskManagementRepairDetailVO.setReturnTime(vehicleRepair.getReturnTime());
                            if (vehicleRepair.getReturnUserId() != null){
                                XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleRepair.getReturnUserId()).getData();
                                if (operationsUser != null){
                                    taskManagementRepairDetailVO.setReturnUserName(operationsUser.getNickName());
                                }
                            }
                            if (vehicleRepair.getSendUserId() != null){
                                XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleRepair.getSendUserId()).getData();
                                if (operationsUser != null){
                                    taskManagementRepairDetailVO.setSendUserName(operationsUser.getNickName());
                                }
                    break;
                case "4":
                    // 洗车
                    TaskManagementCleanDetailVO taskManagementCleanDetailVO = new TaskManagementCleanDetailVO();
                    taskManagementCleanDetailVO.setId(task.getId());
                    taskManagementCleanDetailVO.setVehicleId(vehicle.getId());
                    taskManagementCleanDetailVO.setTaskUrgencyLevel(task.getTaskUrgencyLevel());
                    taskManagementCleanDetailVO.setPlateNumber(vehicle.getPlateNumber());
                    taskManagementCleanDetailVO.setVehicleColor(vehicle.getVehicleColor());
                    taskManagementCleanDetailVO.setVehicleCode(vehicle.getVehicleCode());
                    taskManagementCleanDetailVO.setVehicleVin(vehicle.getVehicleVin());
                    taskManagementCleanDetailVO.setVehicleLocation(task.getVehicleLocation());
                    taskManagementCleanDetailVO.setTaskCode(task.getTaskCode());
                    XpVehicleClean vehicleClean = vehicleCleanMapper.selectOne(new LambdaQueryWrapper<XpVehicleClean>()
                            .eq(XpVehicleClean::getTaskId, id).last("limit 1"));
                    if (vehicleClean != null) {
                        taskManagementCleanDetailVO.setTaskImage(vehicleClean.getTaskImage());
                        taskManagementCleanDetailVO.setOperationUserId(vehicleClean.getOperationsUserId());
                        if (vehicleClean.getOperationsUserId() != null) {
                            XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleClean.getOperationsUserId()).getData();
                            if (operationsUser != null) {
                                taskManagementCleanDetailVO.setOperationsUserName(operationsUser.getNickName());
                            }
                        }
                        managementDetailVO.setRepairDetailVO(taskManagementRepairDetailVO);
                    }
                    managementDetailVO.setCleanDetailVO(taskManagementCleanDetailVO);
                        break;
                    default:
                        // 保养、年检、保险、营运资质
                        TaskManagementRoutineDetailVO res = new TaskManagementRoutineDetailVO();
                        res.setId(task.getId());
                        res.setTaskUrgencyLevel(task.getTaskUrgencyLevel());
                        res.setPlateNumber(vehicle.getPlateNumber());
                        res.setVehicleColor(vehicle.getVehicleColor());
                        res.setVehicleCode(vehicle.getVehicleCode());
                        res.setVehicleLocation(task.getVehicleLocation());
                        res.setVehicleVin(vehicle.getVehicleVin());
                        res.setTaskCode(task.getTaskCode());
                        XpTaskHandleDetailRoutine xpTaskHandleDetailRoutine = xpTaskHandleDetailRoutineMapper.selectOne(new LambdaQueryWrapper<XpTaskHandleDetailRoutine>()
                                .eq(XpTaskHandleDetailRoutine::getTaskId, id));
                        if (xpTaskHandleDetailRoutine!=null){
                            res.setTaskDescription(xpTaskHandleDetailRoutine.getTaskDescription());
                            res.setTaskImage(xpTaskHandleDetailRoutine.getTaskImage());
                            res.setHandleUserId(task.getHandleUserId());
                            XpOperationsUser operationsUser = xpOperationUserClient.queryById(xpTaskHandleDetailRoutine.getOperationsUserId()).getData();
                            if (operationsUser != null){
                                res.setHandleUserId(operationsUser.getId());
                                res.setHandleUserName(operationsUser.getNickName());
                    break;
                case "5":
                    // 维修
                    TaskManagementRepairDetailVO taskManagementRepairDetailVO = new TaskManagementRepairDetailVO();
                    taskManagementRepairDetailVO.setId(task.getId());
                    taskManagementRepairDetailVO.setVehicleId(vehicle.getId());
                    taskManagementRepairDetailVO.setTaskUrgencyLevel(task.getTaskUrgencyLevel());
                    taskManagementRepairDetailVO.setPlateNumber(vehicle.getPlateNumber());
                    taskManagementRepairDetailVO.setVehicleColor(vehicle.getVehicleColor());
                    taskManagementRepairDetailVO.setVehicleCode(vehicle.getVehicleCode());
                    taskManagementRepairDetailVO.setVehicleVin(vehicle.getVehicleVin());
                    taskManagementRepairDetailVO.setVehicleLocation(task.getVehicleLocation());
                    taskManagementRepairDetailVO.setTaskCode(task.getTaskCode());
                    XpVehicleRepair vehicleRepair = vehicleRepairMapper.selectOne(new LambdaQueryWrapper<XpVehicleRepair>()
                            .eq(XpVehicleRepair::getTaskId, id).last("limit 1"));
                    if (vehicleRepair != null) {
                        taskManagementRepairDetailVO.setStartTime(vehicleRepair.getStartTime());
                        taskManagementRepairDetailVO.setEndTime(vehicleRepair.getEndTime());
                        taskManagementRepairDetailVO.setRepairReason(vehicleRepair.getRepairReason());
                        taskManagementRepairDetailVO.setStartRepairPicture(vehicleRepair.getStartRepairPicture());
                        taskManagementRepairDetailVO.setRepairMoney(vehicleRepair.getRepairMoney());
                        taskManagementRepairDetailVO.setRepairMoneyDetail(vehicleRepair.getRepairMoneyDetail());
                        taskManagementRepairDetailVO.setSendUserId(vehicleRepair.getSendUserId());
                        taskManagementRepairDetailVO.setSendTime(vehicleRepair.getSendTime());
                        taskManagementRepairDetailVO.setReturnUserId(vehicleRepair.getReturnUserId());
                        taskManagementRepairDetailVO.setReturnTime(vehicleRepair.getReturnTime());
                        if (vehicleRepair.getReturnUserId() != null) {
                            XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleRepair.getReturnUserId()).getData();
                            if (operationsUser != null) {
                                taskManagementRepairDetailVO.setReturnUserName(operationsUser.getNickName());
                            }
                        }
                        if (vehicleRepair.getSendUserId() != null) {
                            XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleRepair.getSendUserId()).getData();
                            if (operationsUser != null) {
                                taskManagementRepairDetailVO.setSendUserName(operationsUser.getNickName());
                            }
                        }
                    }
                    managementDetailVO.setRepairDetailVO(taskManagementRepairDetailVO);
                        res.setHandleTime(task.getHandleTime());
                        res.setId(id);
                        res.setTaskUrgencyLevel(task.getTaskUrgencyLevel());
                        res.setPlateNumber(vehicle.getPlateNumber());
                        res.setVehicleColor(vehicle.getVehicleColor());
                        res.setVehicleCode(vehicle.getVehicleCode());
                        res.setVehicleLocation(task.getVehicleLocation());
                        res.setVehicleVin(vehicle.getVehicleVin());
                        managementDetailVO.setRoutineDetailVO(res);
                    break;
                default:
                    // 保养、年检、保险、营运资质
                    TaskManagementRoutineDetailVO res = new TaskManagementRoutineDetailVO();
                    res.setId(task.getId());
                    res.setTaskUrgencyLevel(task.getTaskUrgencyLevel());
                    res.setPlateNumber(vehicle.getPlateNumber());
                    res.setVehicleColor(vehicle.getVehicleColor());
                    res.setVehicleCode(vehicle.getVehicleCode());
                    res.setVehicleLocation(task.getVehicleLocation());
                    res.setVehicleVin(vehicle.getVehicleVin());
                    res.setTaskCode(task.getTaskCode());
                    XpTaskHandleDetailRoutine xpTaskHandleDetailRoutine = xpTaskHandleDetailRoutineMapper.selectOne(new LambdaQueryWrapper<XpTaskHandleDetailRoutine>()
                            .eq(XpTaskHandleDetailRoutine::getTaskId, id));
                    if (xpTaskHandleDetailRoutine != null) {
                        res.setTaskDescription(xpTaskHandleDetailRoutine.getTaskDescription());
                        res.setTaskImage(xpTaskHandleDetailRoutine.getTaskImage());
                        res.setHandleUserId(task.getHandleUserId());
                        XpOperationsUser operationsUser = xpOperationUserClient.queryById(xpTaskHandleDetailRoutine.getOperationsUserId()).getData();
                        if (operationsUser != null) {
                            res.setHandleUserId(operationsUser.getId().toString());
                            res.setHandleUserName(operationsUser.getNickName());
                        }
                    }
                        break;
                }
                    res.setHandleTime(task.getHandleTime());
                    res.setId(id);
                    res.setTaskUrgencyLevel(task.getTaskUrgencyLevel());
                    res.setPlateNumber(vehicle.getPlateNumber());
                    res.setVehicleColor(vehicle.getVehicleColor());
                    res.setVehicleCode(vehicle.getVehicleCode());
                    res.setVehicleLocation(task.getVehicleLocation());
                    res.setVehicleVin(vehicle.getVehicleVin());
                    managementDetailVO.setRoutineDetailVO(res);
                    break;
            }
        }else{
        } else {
            // 事故任务
            TaskManagementAccidentDetailVO res = new TaskManagementAccidentDetailVO();
@@ -1072,19 +1164,21 @@
            List<Long> reportUserIds = new ArrayList<>();
            reportUserIds.add(task.getReportUserId());
            List<SysUser> sysUsers = sysUserClient.listByIds(reportUserIds).getData();
            if (sysUsers!=null && !sysUsers.isEmpty()){
            if (sysUsers != null && !sysUsers.isEmpty()) {
                SysUser sysUser = sysUsers.get(0);
                res.setReportUserId(sysUser.getId());
                res.setReportUserName(sysUser.getNickName());
                res.setReportUserPhone(sysUser.getPhoneNumber());
                res.setReportUserAvatar(sysUser.getAvatar());
            }
            XpOperationsUser operationsUser = xpOperationUserClient.queryById(task.getHandleUserId()).getData();
            if (operationsUser != null){
                res.setHandleUserId(operationsUser.getId());
                res.setHandleUserName(operationsUser.getNickName());
                res.setHandleUserPhone(operationsUser.getPhoneNumber());
                res.setHandleUserAvatar(operationsUser.getAvatar());
            if (task.getHandleUserId().split(",").length == 1) {
                XpOperationsUser operationsUser = xpOperationUserClient.queryById(Long.valueOf(task.getHandleUserId())).getData();
                if (operationsUser != null) {
                    res.setHandleUserId(operationsUser.getId());
                    res.setHandleUserName(operationsUser.getNickName());
                    res.setHandleUserPhone(operationsUser.getPhoneNumber());
                    res.setHandleUserAvatar(operationsUser.getAvatar());
                }
            }
            XpTaskHandleDetail xpTaskHandleDetail = xpTaskHandleDetailMapper.selectOne(new LambdaQueryWrapper<XpTaskHandleDetail>()
                    .eq(XpTaskHandleDetail::getTaskId, id));
@@ -1102,7 +1196,6 @@
        }
        return R.ok(managementDetailVO);
    }
}