无关风月
2026-02-25 fed716c054f5be36b38ad049407f9d505b4847e5
管理后台任务列表查询
13个文件已添加
5个文件已修改
1283 ■■■■■ 已修改文件
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskManagementController.java 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/dto/SaveErrorTaskDto.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/mapper/XpTaskMapper.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/query/TaskManagementPageListQuery.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementAccidentDetailVO.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementChargingDetailVO.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementCleanDetailVO.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementDetailVO.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementDetectionDetailVO.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementPageListVO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementPreparationDetailVO.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementRepairDetailVO.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementRoutineDetailVO.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/XpTaskService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/utils/UUIDUtil.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/resources/mapper/maintenance/XpTaskMapper.xml 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
@@ -65,7 +65,7 @@
    @ApiOperation(value = "事故任务确认到达", tags = "运维APP-任务中心")
    @GetMapping("/api/v1/task/confirmArrive")
    @Transactional
    public R confirmArrive( Integer id) {
    public R confirmArrive( Long id) {
        return xpTaskService.confirmArrive(id);
    }
    @ApiOperation(value = "查询车辆不分页列表", tags = "运维APP-任务中心")
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskManagementController.java
New file
@@ -0,0 +1,203 @@
package com.xiaopeng.maintenance.controller;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetOperationsClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.account.XpOperationsUser;
import com.xiaopeng.api.model.maintenance.XpErrorType;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.vo.account.LoginOperationUser;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.common.security.service.TokenService;
import com.xiaopeng.maintenance.dto.HandleVehicleAccidentDto;
import com.xiaopeng.maintenance.dto.SaveErrorTaskDto;
import com.xiaopeng.maintenance.dto.SaveRoutineDetailDto;
import com.xiaopeng.maintenance.dto.SaveVehicleAccidentDto;
import com.xiaopeng.maintenance.model.query.TaskManagementPageListQuery;
import com.xiaopeng.maintenance.model.query.TaskPageListQuery;
import com.xiaopeng.maintenance.model.query.XpTaskRecordPageQuery;
import com.xiaopeng.maintenance.model.vo.*;
import com.xiaopeng.maintenance.service.IXpErrorTypeService;
import com.xiaopeng.maintenance.service.XpTaskService;
import com.xiaopeng.maintenance.vo.VehicleListVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
/**
 * <p>
 * 运维APP 任务中心
 * </p>
 *
 * @author mitao
 * @since 2026-02-03
 */
@RestController
@Slf4j
@Api(tags = "管理后台-任务工单")
@RequestMapping("/api/v1/taskManagement")
public class XpTaskManagementController {
    @Resource
    private XpTaskService xpTaskService;
    @Resource
    private TokenService tokenService;
    @Resource
    private IXpErrorTypeService xpErrorTypeService;
    @Resource
    private XpFleetOperationsClient xpFleetOperationsClient;
    @Resource
    private XpVehicleClient xpVehicleClient;
    @ApiOperation(value = "事故类型列表", response = XpErrorType.class)
    @GetMapping("/errorTypeList")
    public R<List<XpErrorType>> errorTypeList() {
        return xpErrorTypeService.errorTypeList();
    }
    @ApiOperation(value = "任务中心列表", response = TaskPageListVO.class)
    @PostMapping("/pageList")
    public R<PageInfo<TaskManagementPageListVO>> pageListManagement(@RequestBody TaskManagementPageListQuery query) {
        PageInfo<TaskManagementPageListVO> pageList = xpTaskService.pageListManagement(query);
        return R.ok(pageList);
    }
    /**
     * 管理后台-车辆管理-运营车辆管理-删除任务/事故
     * @param id
     * @return
     */
    @ApiOperation(value = "删除任务/事故")
    @DeleteMapping("/deleteTaskById")
    public R<?> deleteTaskById(@ApiParam(name = "id", value = "任务ID")Long id){
        xpTaskService.deleteTaskById(id);
        return R.ok();
    }
    @ApiOperation(value = "任务分配")
    @GetMapping("/assigneeTask")
    public R assigneeTask(@ApiParam(name = "id", value = "任务ID") Long id, @ApiParam(name = "handlerUserId", value = "处理人id")Long handlerUserId) {
        Long assigneeUserId = tokenService.getLoginUser().getSysUser().getId();
        return xpTaskService.assigneeTask(id, handlerUserId,assigneeUserId);
    }
    @ApiOperation(value = "创建任务事故")
    @PostMapping("/saveTask")
    public R saveTask(@RequestBody SaveErrorTaskDto dto) {
        Long reportUserId = tokenService.getLoginUser().getSysUser().getId();
        xpTaskService.saveTask(dto, reportUserId);
        return R.ok();
    }
    @ApiOperation(value = "任务详情")
    @GetMapping("/taskDetail")
    public R<TaskManagementDetailVO> taskDetail(Long id) {
        return xpTaskService.taskDetail(id);
    }
    @ApiOperation(value = "查询车辆不分页列表")
    @PostMapping(" /listVehicle")
    public R<List<VehicleListVO>> listVehicle() {
        LoginOperationUser loginOperationUser = tokenService.getLoginOperationUser();
        XpOperationsUser xpOperationsUser = loginOperationUser.getXpOperationsUser();
        // 查询当前人员所属车队 查询车队关联车辆
        R<List<Long>> vehicleByUserId = xpFleetOperationsClient.getVehicleByUserId(xpOperationsUser.getId());
        List<Long> vehicleIds = vehicleByUserId.getData();
        if (vehicleIds != null && !vehicleIds.isEmpty()){
            // todo 查询车辆列表 获取经纬度
            List<XpVehicle> data = xpVehicleClient.listByIds(vehicleIds).getData();
            if (data!=null){
                List<VehicleListVO> vehicleListVOS = new ArrayList<>();
                for (XpVehicle xpVehicle : data) {
                    VehicleListVO vehicleListVO = new VehicleListVO();
                    vehicleListVO.setId(xpVehicle.getId());
//                    vehicleListVO.setVehicleLon(xpVehicle.getVehicleLon());
//                    vehicleListVO.setVehicleLat(xpVehicle.getVehicleLat());
                    vehicleListVO.setVehicleCode(xpVehicle.getVehicleCode());
                    vehicleListVO.setVehicleColor(xpVehicle.getVehicleColor());
                    vehicleListVO.setPlateNumber(xpVehicle.getPlateNumber());
                    vehicleListVO.setOperatingStatus(xpVehicle.getOperatingStatus());
                    vehicleListVOS.add(vehicleListVO);
                }
                return R.ok(vehicleListVOS);
            }
        }
        return R.ok(new ArrayList<>());
    }
    @ApiOperation(value = "上传车辆事故", tags = "运维APP-任务中心")
    @PostMapping(" /saveVehicleAccident")
    public R saveVehicleAccident(@RequestBody SaveVehicleAccidentDto dto) {
        LoginOperationUser loginOperationUser = tokenService.getLoginOperationUser();
        XpOperationsUser xpOperationsUser = loginOperationUser.getXpOperationsUser();
        xpTaskService.saveVehicleAccident(dto, xpOperationsUser);
        return R.ok();
    }
    @ApiOperation(value = "车辆其他常规任务详情", tags = "运维APP-任务中心")
    @GetMapping(" /vehicleRoutineDetail")
    public R<TaskRoutineDetailVO> vehicleRoutineDetail(Long id) {
        return xpTaskService.vehicleRoutineDetail(id);
    }
    @ApiOperation(value = "上传车辆其他常规任务详情", tags = "运维APP-任务中心")
    @PostMapping(" /saveRoutineDetail")
    public R saveRoutineDetail(@RequestBody SaveRoutineDetailDto dto) {
        LoginOperationUser loginOperationUser = tokenService.getLoginOperationUser();
        Long id = loginOperationUser.getId();
        return xpTaskService.saveRoutineDetail(dto, id);
    }
    @ApiOperation(value = "车辆常规充电任务详情", tags = "运维APP-任务中心")
    @GetMapping(" /chargingDetail")
    public R<TaskChargingDetailVO> chargingDetail(Long id) {
        return xpTaskService.chargingDetail(id);
    }
    @ApiOperation(value = "车辆常规维修任务详情", tags = "运维APP-任务中心")
    @GetMapping(" /repairDetail")
    public R<com.xiaopeng.maintenance.vo.TaskRepairDetailVO> repairDetail(Long id) {
        return xpTaskService.repairDetail(id);
    }
    @ApiOperation(value = "车辆常规整备任务详情", tags = "运维APP-任务中心")
    @GetMapping(" /preparationDetail")
    public R<com.xiaopeng.maintenance.vo.TaskPreparationDetailVO> preparationDetail(Long id) {
        return xpTaskService.preparationDetail(id);
    }
    @ApiOperation(value = "车辆常规检测任务详情", tags = "运维APP-任务中心")
    @GetMapping(" /detectionDetail")
    public R<com.xiaopeng.maintenance.vo.TaskDetectionDetailVO> detectionDetail(Long id) {
        return xpTaskService.detectionDetail(id);
    }
    @ApiOperation(value = "车辆常规洗车任务详情", tags = "运维APP-任务中心")
    @GetMapping(" /cleanDetail")
    public R<com.xiaopeng.maintenance.vo.TaskCleanDetailVO> cleanDetail(Long id) {
        return xpTaskService.cleanDetail(id);
    }
    @ApiOperation(value = "处理车辆事故", tags = "运维APP-任务中心")
    @PostMapping(" /handleVehicleAccident")
    @Transactional
    public R handleVehicleAccident(@RequestBody HandleVehicleAccidentDto dto) {
        LoginOperationUser loginOperationUser = tokenService.getLoginOperationUser();
        XpOperationsUser xpOperationsUser = loginOperationUser.getXpOperationsUser();
        return xpTaskService.handleVehicleAccident(dto,xpOperationsUser);
    }
    /**
     * 通过车辆id查询任务事故分页列表
     * @return
     */
    @ApiOperation(value = "通过车辆id查询任务事故分页列表", tags = {"管理后台-车辆管理-运营车辆管理"})
    @PostMapping("/api/v1/vehicle/queryTaskByVehicleId")
    public R<PageInfo<XpTaskRecordVO>> queryTaskByVehicleId(@Valid @RequestBody XpTaskRecordPageQuery query) {
        return R.ok(xpTaskService.queryTaskByVehicleId(query));
    }
    @ApiOperation(value = "事故类型列表", response = XpErrorType.class, tags = "管理后台-车辆管理-运营车辆管理")
    @GetMapping(" /errorTypeTreeList")
    public R<List<XpErrorType>> errorTypeTreeList() {
        return xpErrorTypeService.errorTypeList();
    }
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/dto/SaveErrorTaskDto.java
New file
@@ -0,0 +1,31 @@
package com.xiaopeng.maintenance.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel(value = "管理后台创建事故任务DTO")
public class SaveErrorTaskDto {
    @ApiModelProperty(value = "车辆ids")
    private List<Long> vehicleIds;
    @ApiModelProperty(value = "任务类型id 对应数据字典,多个逗号分割")
    private String taskTypeId;
    @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")
    private Long vehicleId;
    @ApiModelProperty(value = "车辆位置")
    private String vehicleLocation;
    @ApiModelProperty(value = "车辆经度")
    private BigDecimal vehicleLon;
    @ApiModelProperty(value = "车辆纬度")
    private BigDecimal vehicleLat;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/mapper/XpTaskMapper.java
@@ -4,7 +4,9 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xiaopeng.api.model.maintenance.XpTask;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.maintenance.model.query.TaskManagementPageListQuery;
import com.xiaopeng.maintenance.model.query.WorkBenchQuery;
import com.xiaopeng.maintenance.model.vo.TaskManagementPageListVO;
import com.xiaopeng.maintenance.model.vo.WorkBenchVO;
import com.xiaopeng.maintenance.model.query.TaskPageListQuery;
import com.xiaopeng.maintenance.model.vo.TaskPageListVO;
@@ -25,4 +27,6 @@
    List<WorkBenchVO> workbench(@Param("pageInfo") PageInfo<WorkBenchVO> pageInfo, @Param("query")WorkBenchQuery query);
    List<TaskPageListVO> pageList(@Param("pageInfo")PageInfo<TaskPageListVO> pageInfo, @Param("query")TaskPageListQuery query);
    List<TaskManagementPageListVO> pageListManagement(@Param("pageInfo")PageInfo<TaskManagementPageListVO> pageInfo,@Param("query") TaskManagementPageListQuery query);
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/query/TaskManagementPageListQuery.java
New file
@@ -0,0 +1,29 @@
package com.xiaopeng.maintenance.model.query;
import com.xiaopeng.common.core.web.page.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "管理后台任务工单列表查询query")
public class TaskManagementPageListQuery extends BasePage {
    @ApiModelProperty(value = "车牌号")
    private String plateNumber;
    @ApiModelProperty(value = "任务类别1常规 2事故")
    private Integer taskCategory;
    @ApiModelProperty(value = "常规任务类型枚举1车辆检查 2车辆充电 3车辆整备 4整备洗车 5车辆维修 6车辆保养 7车辆保险到期 8车辆年检到期 9车辆运营资质到期")
    private Integer taskGeneralId;
    @ApiModelProperty(value = "事故任务类型id")
    private Long taskErrorId;
    @ApiModelProperty(value = "任务优先级 0=P0 1=P1 2=P2 3=P3 不传为全部")
    private Integer taskUrgencyLevel;
    @ApiModelProperty(value = "状态0=待到达 1=待处理 2=已完成 3=已取消")
    private Integer status;
    @ApiModelProperty(value = " 开始时间 yyyy-MM-dd HH:mm:ss")
    private String startTime;
    @ApiModelProperty(value = " 结束时间 yyyy-MM-dd HH:mm:ss")
    private String endTime;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementAccidentDetailVO.java
New file
@@ -0,0 +1,102 @@
package com.xiaopeng.maintenance.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xiaopeng.api.model.maintenance.XpErrorType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
 * <p>
 * 运维APP 任务事故详情
 * </p>
 *
 * @author mitao
 * @since 2026-02-06
 */
@Data
@ApiModel(value = "管理后台任务事故详情VO")
public class TaskManagementAccidentDetailVO implements Serializable {
    @ApiModelProperty(value = "任务id")
    private Long id;
    @ApiModelProperty(value = "状态 0=待到达 1=待处理 2=已完成 3=已取消")
    private Integer status;
    @ApiModelProperty(value = "任务紧急程度 0=P0 1=P1 2=P2 3=P3")
    private Integer taskUrgencyLevel;
    @ApiModelProperty(value = "车辆id")
    private Long vehicleId;
    @ApiModelProperty(value = "任务类型名称 任务类别为2时返回")
    private List<XpErrorType> errorTypeList;
    @ApiModelProperty(value = "任务描述")
    private String taskDescription;
    @ApiModelProperty(value = "任务描述图片")
    private String taskImage;
    @ApiModelProperty(value = "车牌号")
    private String plateNumber;
    @ApiModelProperty(value = "车辆颜色")
    private String vehicleColor;
    @ApiModelProperty(value = "车辆编码")
    private String vehicleCode;
    @ApiModelProperty(value = "车辆vin")
    private String vehicleVin;
    @ApiModelProperty(value = "车辆图片")
    private String vehiclePictures;
    @ApiModelProperty(value = "上报地址")
    private String vehicleLocation;
    @ApiModelProperty(value = "上报人id")
    private Long reportUserId;
    @ApiModelProperty(value = "上报人名称")
    private String reportUserName;
    @ApiModelProperty(value = "上报人电话")
    private String reportUserPhone;
    @ApiModelProperty(value = "上报人头像")
    private String reportUserAvatar;
    @ApiModelProperty(value = "处理id")
    private Long handleUserId;
    @ApiModelProperty(value = "处理名称")
    private String handleUserName;
    @ApiModelProperty(value = "处理电话")
    private String handleUserPhone;
    @ApiModelProperty(value = "处理头像")
    private String handleUserAvatar;
    @ApiModelProperty(value = "死亡人数")
    private Integer deathCount;
    @ApiModelProperty(value = "重伤人数")
    private Integer severeCount;
    @ApiModelProperty(value = "轻伤人数")
    private Integer minorCount;
    @ApiModelProperty(value = "责任判断 1我方主责 2我方无责 3双方同责")
    private Integer responsibilityJudgment;
    @ApiModelProperty(value = "交警判责现场情况")
    private String responsibleDescription;
    @ApiModelProperty(value = "交警判责现场照片")
    private String responsibleImage;
    @ApiModelProperty(value = "处置情况描述")
    private String disposalDescription;
    @ApiModelProperty(value = "处置情况照片")
    private String disposalImage;
    @ApiModelProperty(value = "现场情况描述")
    private String situationDescription;
    @ApiModelProperty(value = "现场情况照片")
    private String situationImage;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementChargingDetailVO.java
New file
@@ -0,0 +1,61 @@
package com.xiaopeng.maintenance.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * 运维APP 常规任务详情VO
 * </p>
 *
 * @author mitao
 * @since 2026-02-06
 */
@Data
@ApiModel(value = "管理后台常规充电任务详情VO")
public class TaskManagementChargingDetailVO implements Serializable {
    @ApiModelProperty(value = "任务id")
    private Long id;
    @ApiModelProperty(value = "车辆id")
    private Long vehicleId;
    @ApiModelProperty(value = "任务紧急程度 0=P0 1=P1 2=P2 3=P3")
    private Integer taskUrgencyLevel;
    @ApiModelProperty(value = "车牌号")
    private String plateNumber;
    @ApiModelProperty(value = "车辆颜色")
    private String vehicleColor;
    @ApiModelProperty(value = "车辆编码")
    private String vehicleCode;
    @ApiModelProperty(value = "车辆Vin")
    private String vehicleVin;
    @ApiModelProperty(value = "车辆地址")
    private String vehicleLocation;
    @ApiModelProperty(value = "任务编号")
    private String taskCode;
    @ApiModelProperty(value = "开始剩余电量")
    private Integer startRemainingBattery;
    @ApiModelProperty(value = "开始充电图片")
    private String startChargingPicture;
    @ApiModelProperty(value = "开始充电时间")
    private LocalDateTime startTime;
    @ApiModelProperty(value = "结束剩余电量")
    private Integer endRemainingBattery;
    @ApiModelProperty(value = "结束充电图片")
    private String endChargingPicture;
    @ApiModelProperty(value = "结束充电时间")
    private LocalDateTime endTime;
    @ApiModelProperty(value = "开始充电操作人")
    private Long startOperationsUserId;
    @ApiModelProperty(value = "开始充电操作人名称")
    private String startOperationsUserName;
    @ApiModelProperty(value = "结束充电操作人")
    private Long endOperationsUserId;
    @ApiModelProperty(value = "结束充电操作人名称")
    private String endOperationsUserName;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementCleanDetailVO.java
New file
@@ -0,0 +1,50 @@
package com.xiaopeng.maintenance.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * 运维APP 常规洗车任务详情VO
 * </p>
 *
 * @author mitao
 * @since 2026-02-06
 */
@Data
@ApiModel(value = "管理后台常规洗车任务详情VO")
public class TaskManagementCleanDetailVO implements Serializable {
    @ApiModelProperty(value = "任务id")
    private Long id;
    @ApiModelProperty(value = "车辆id")
    private Long vehicleId;
    @ApiModelProperty(value = "任务紧急程度 0=P0 1=P1 2=P2 3=P3")
    private Integer taskUrgencyLevel;
    @ApiModelProperty(value = "车牌号")
    private String plateNumber;
    @ApiModelProperty(value = "车辆颜色")
    private String vehicleColor;
    @ApiModelProperty(value = "车辆编码")
    private String vehicleCode;
    @ApiModelProperty(value = "车辆Vin")
    private String vehicleVin;
    @ApiModelProperty(value = "车辆地址")
    private String vehicleLocation;
    @ApiModelProperty(value = "任务编号")
    private String taskCode;
    @ApiModelProperty(value = "完成情况图片")
    private String taskImage;
    @ApiModelProperty(value = "操作人id")
    private Long operationUserId;
    @ApiModelProperty(value = "操作人名称")
    private String operationsUserName;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementDetailVO.java
New file
@@ -0,0 +1,41 @@
package com.xiaopeng.maintenance.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * 运维APP 常规检测任务详情VO
 * </p>
 *
 * @author mitao
 * @since 2026-02-06
 */
@Data
@ApiModel(value = "管理后台任务详情VO")
public class TaskManagementDetailVO implements Serializable {
    @ApiModelProperty(value = "事故任务详情")
    private TaskManagementAccidentDetailVO accidentDetailVO;
    @ApiModelProperty(value = "充电任务详情")
    private TaskManagementChargingDetailVO chargingDetailVO;
    @ApiModelProperty(value = "检测任务详情")
    private TaskManagementDetectionDetailVO detectionDetailVO;
    @ApiModelProperty(value = "洗车任务详情")
    private TaskManagementCleanDetailVO cleanDetailVO;
    @ApiModelProperty(value = "整备任务详情")
    private TaskManagementPreparationDetailVO preparationDetailVO;
    @ApiModelProperty(value = "维修任务详情")
    private TaskManagementRepairDetailVO repairDetailVO;
    @ApiModelProperty(value = "保养、年检、保险、营运资质任务详情")
    private TaskManagementRoutineDetailVO routineDetailVO;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementDetectionDetailVO.java
New file
@@ -0,0 +1,98 @@
package com.xiaopeng.maintenance.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * 运维APP 常规检测任务详情VO
 * </p>
 *
 * @author mitao
 * @since 2026-02-06
 */
@Data
@ApiModel(value = "管理后台常规检测任务详情VO")
public class TaskManagementDetectionDetailVO implements Serializable {
    @ApiModelProperty(value = "任务id")
    private Long id;
    @ApiModelProperty(value = "车辆id")
    private Long vehicleId;
    @ApiModelProperty(value = "任务紧急程度 0=P0 1=P1 2=P2 3=P3")
    private Integer taskUrgencyLevel;
    @ApiModelProperty(value = "车牌号")
    private String plateNumber;
    @ApiModelProperty(value = "车辆颜色")
    private String vehicleColor;
    @ApiModelProperty(value = "车辆编码")
    private String vehicleCode;
    @ApiModelProperty(value = "车辆Vin")
    private String vehicleVin;
    @ApiModelProperty(value = "车辆地址")
    private String vehicleLocation;
    @ApiModelProperty(value = "任务编号")
    private String taskCode;
    @ApiModelProperty(value = "网络检测")
    private Integer networkDetection;
    @ApiModelProperty(value = "版本核对")
    private Integer versionVerification;
    @ApiModelProperty(value = "通讯自检")
    private Integer communicationSelfCheck;
    @ApiModelProperty(value = "远程自检")
    private Integer remoteSelfCheck;
    @ApiModelProperty(value = "防撞激活")
    private Integer collisionPrevention;
    @ApiModelProperty(value = "传感器自检")
    private Integer sensorSelfCheck;
    @ApiModelProperty(value = "传感器清洁")
    private Integer sensorCleaning;
    @ApiModelProperty(value = "传感器清洁检测图")
    private String sensorCleaningPicture;
    @ApiModelProperty(value = "交互屏")
    private Integer interactiveScreen;
    @ApiModelProperty(value = "交互屏检测图")
    private String interactiveScreenPicture;
    @ApiModelProperty(value = "求助按钮")
    private Integer helpButton;
    @ApiModelProperty(value = "求助按钮图")
    private String helpButtonPicture;
    @ApiModelProperty(value = "支付功能")
    private Integer paymentFunction;
    @ApiModelProperty(value = "支付功能图")
    private String paymentFunctionPicture;
    @ApiModelProperty(value = "系统检查")
    private Integer systemCheck;
    @ApiModelProperty(value = "系统检查图")
    private String systemCheckPicture;
    @ApiModelProperty(value = "检查人id")
    private Long operationsUserId;
    @ApiModelProperty(value = "检查人名称")
    private String operationsUserName;
    @ApiModelProperty(value = "检测时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime checkTime;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementPageListVO.java
New file
@@ -0,0 +1,48 @@
package com.xiaopeng.maintenance.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * <p>
 * 运维APP 任务中心分页列表VO
 * </p>
 *
 * @author mitao
 * @since 2026-02-06
 */
@Data
@ApiModel(value = "管理后台任务中心分页列表VO")
public class TaskManagementPageListVO implements Serializable {
    @ApiModelProperty(value = "任务")
    private Long id;
    @ApiModelProperty(value = "车牌号")
    private String plateNumber;
    @ApiModelProperty(value = "任务类别1常规 2事故")
    private Integer taskCategory;
    @ApiModelProperty(value = "任务类型id 任务类别为2时对应数据字典,多个逗号分割,为1的时候 枚举1车辆检查 2车辆充电 3车辆整备 4整备洗车 5车辆维修 6车辆保养 7车辆保险到期 8车辆年检到期 9车辆运营资质到期")
    private String taskTypeId;
    @ApiModelProperty(value = "任务类型名称 任务类别为2时返回")
    private String taskTypeName;
    @ApiModelProperty(value = "任务紧急程度 0=P0 1=P1 2=P2 3=P3")
    private Integer taskUrgencyLevel;
    @ApiModelProperty(value = "上报时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;
    @ApiModelProperty(value = "状态 0=待到达 1=待处理 2=已完成 3=已取消")
    private Integer status;
    @ApiModelProperty(value = "处理人id")
    private Integer handleUserId;
    @ApiModelProperty(value = "处理人名称")
    private String handleUserName;
    @ApiModelProperty(value = "任务描述")
    private String taskDescription;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementPreparationDetailVO.java
New file
@@ -0,0 +1,81 @@
package com.xiaopeng.maintenance.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * 运维APP 常规整备任务详情VO
 * </p>
 *
 * @author mitao
 * @since 2026-02-06
 */
@Data
@ApiModel(value = "管理后台常规整备任务详情VO")
public class TaskManagementPreparationDetailVO implements Serializable {
    @ApiModelProperty(value = "任务id")
    private Long id;
    @ApiModelProperty(value = "车辆id")
    private Long vehicleId;
    @ApiModelProperty(value = "任务紧急程度 0=P0 1=P1 2=P2 3=P3")
    private Integer taskUrgencyLevel;
    @ApiModelProperty(value = "车牌号")
    private String plateNumber;
    @ApiModelProperty(value = "车辆颜色")
    private String vehicleColor;
    @ApiModelProperty(value = "车辆编码")
    private String vehicleCode;
    @ApiModelProperty(value = "车辆Vin")
    private String vehicleVin;
    @ApiModelProperty(value = "车辆地址")
    private String vehicleLocation;
    @ApiModelProperty(value = "任务编号")
    private String taskCode;
    @ApiModelProperty(value = "左前轮")
    private String leftFrontWheel;
    @ApiModelProperty(value = "右前轮")
    private String rightFrontWheel;
    @ApiModelProperty(value = "左后轮")
    private String leftRearWheel;
    @ApiModelProperty(value = "右后轮")
    private String rightRearWheel;
    @ApiModelProperty(value = "大灯")
    private String headLight;
    @ApiModelProperty(value = "转向灯")
    private String turnSignal;
    @ApiModelProperty(value = "刹车灯")
    private String brakeLight;
    @ApiModelProperty(value = "雾灯")
    private String fogLight;
    @ApiModelProperty(value = "车身标识")
    private String bodyEmblem;
    @ApiModelProperty(value = "舱内清洁")
    private String cabinCleaning;
    @ApiModelProperty(value = "遗失物品")
    private String lostItems;
    @ApiModelProperty(value = "备注")
    private String remarks;
    @ApiModelProperty(value = "操作人id")
    private Long operationsUserId;
    @ApiModelProperty(value = "操作人名称")
    private String operationsUserName;
    @ApiModelProperty(value = "操作时间")
    private LocalDateTime operationsTime;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementRepairDetailVO.java
New file
@@ -0,0 +1,79 @@
package com.xiaopeng.maintenance.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * 运维APP 常规维修任务详情VO
 * </p>
 *
 * @author mitao
 * @since 2026-02-06
 */
@Data
@ApiModel(value = "管理后台常规维修任务详情VO")
public class TaskManagementRepairDetailVO implements Serializable {
    @ApiModelProperty(value = "任务id")
    private Long id;
    @ApiModelProperty(value = "车辆id")
    private Long vehicleId;
    @ApiModelProperty(value = "任务紧急程度 0=P0 1=P1 2=P2 3=P3")
    private Integer taskUrgencyLevel;
    @ApiModelProperty(value = "车牌号")
    private String plateNumber;
    @ApiModelProperty(value = "车辆颜色")
    private String vehicleColor;
    @ApiModelProperty(value = "车辆编码")
    private String vehicleCode;
    @ApiModelProperty(value = "车辆Vin")
    private String vehicleVin;
    @ApiModelProperty(value = "车辆地址")
    private String vehicleLocation;
    @ApiModelProperty(value = "任务编号")
    private String taskCode;
    @ApiModelProperty(value = "开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate startTime;
    @ApiModelProperty(value = "结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate endTime;
    @ApiModelProperty(value = "维修原因")
    private String repairReason;
    @ApiModelProperty(value = "维修前图片")
    private String startRepairPicture;
    @ApiModelProperty(value = "维修费用")
    private Double repairMoney;
    @ApiModelProperty(value = "维修费用明细")
    private String repairMoneyDetail;
    @ApiModelProperty(value = "送修人")
    private Long sendUserId;
    @ApiModelProperty(value = "送修人名称")
    private String sendUserName;
    @ApiModelProperty(value = "送修时间")
    private LocalDateTime sendTime;
    @ApiModelProperty(value = "取回人")
    private Long returnUserId;
    @ApiModelProperty(value = "取回人名称")
    private String returnUserName;
    @ApiModelProperty(value = "取回时间")
    private LocalDateTime returnTime;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/TaskManagementRoutineDetailVO.java
New file
@@ -0,0 +1,51 @@
package com.xiaopeng.maintenance.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * <p>
 * 运维APP 常规任务详情VO
 * </p>
 *
 * @author mitao
 * @since 2026-02-06
 */
@Data
@ApiModel(value = "管理后台常规任务保养、年检、保险、营运资质任务详情")
public class TaskManagementRoutineDetailVO implements Serializable {
    @ApiModelProperty(value = "任务id")
    private Long id;
    @ApiModelProperty(value = "任务紧急程度 0=P0 1=P1 2=P2 3=P3")
    private Integer taskUrgencyLevel;
    @ApiModelProperty(value = "车牌号")
    private String plateNumber;
    @ApiModelProperty(value = "车辆颜色")
    private String vehicleColor;
    @ApiModelProperty(value = "车辆编码")
    private String vehicleCode;
    @ApiModelProperty(value = "车辆Vin")
    private String vehicleVin;
    @ApiModelProperty(value = "车辆地址")
    private String vehicleLocation;
    @ApiModelProperty(value = "任务编号")
    private String taskCode;
    @ApiModelProperty(value = "完成任务情况描述")
    private String taskDescription;
    @ApiModelProperty(value = "完成图片")
    private String taskImage;
    @ApiModelProperty(value = "处理人id")
    private Long handleUserId;
    @ApiModelProperty(value = "处理人姓名")
    private String handleUserName;
    @ApiModelProperty(value = "处理时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime handleTime;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/XpTaskService.java
@@ -6,8 +6,10 @@
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.maintenance.dto.HandleVehicleAccidentDto;
import com.xiaopeng.maintenance.dto.SaveErrorTaskDto;
import com.xiaopeng.maintenance.dto.SaveRoutineDetailDto;
import com.xiaopeng.maintenance.dto.SaveVehicleAccidentDto;
import com.xiaopeng.maintenance.model.query.TaskManagementPageListQuery;
import com.xiaopeng.maintenance.model.query.WorkBenchQuery;
import com.xiaopeng.maintenance.model.query.XpTaskRecordPageQuery;
import com.xiaopeng.maintenance.model.vo.*;
@@ -49,7 +51,7 @@
    R<com.xiaopeng.maintenance.vo.TaskCleanDetailVO> cleanDetail(Long id);
    R confirmArrive(Integer id);
    R confirmArrive(Long id);
    /**
     * 通过车辆id查询任务事故分页列表
@@ -70,4 +72,12 @@
     * @param status
     */
    void updateTaskStatus(Long taskId, Integer status);
    PageInfo<TaskManagementPageListVO> pageListManagement(TaskManagementPageListQuery query);
    R assigneeTask(Long id, Long handlerUserId,Long assigneeUserId);
    void saveTask(SaveErrorTaskDto dto, Long reportUserId);
    R<TaskManagementDetailVO> taskDetail(Long id);
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -3,8 +3,10 @@
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.feignClient.account.SysUserClient;
import com.xiaopeng.api.feignClient.account.XpOperationUserClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.account.SysUser;
import com.xiaopeng.api.model.account.XpOperationsUser;
import com.xiaopeng.api.model.maintenance.*;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
@@ -14,20 +16,24 @@
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.maintenance.constant.I18nKeyConstant;
import com.xiaopeng.maintenance.dto.HandleVehicleAccidentDto;
import com.xiaopeng.maintenance.dto.SaveErrorTaskDto;
import com.xiaopeng.maintenance.dto.SaveRoutineDetailDto;
import com.xiaopeng.maintenance.dto.SaveVehicleAccidentDto;
import com.xiaopeng.maintenance.mapper.*;
import com.xiaopeng.maintenance.model.query.TaskManagementPageListQuery;
import com.xiaopeng.maintenance.model.query.TaskPageListQuery;
import com.xiaopeng.maintenance.model.query.WorkBenchQuery;
import com.xiaopeng.maintenance.model.query.XpTaskRecordPageQuery;
import com.xiaopeng.maintenance.model.vo.*;
import com.xiaopeng.maintenance.service.XpTaskService;
import com.xiaopeng.maintenance.utils.UUIDUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
@@ -77,6 +83,8 @@
    private XpVehicleCleanMapper vehicleCleanMapper;
    @Autowired
    private XpOperationUserClient xpOperationUserClient;
    @Autowired
    private SysUserClient sysUserClient;
    @Autowired
    private XpTaskHandleDetailRoutineMapper xpTaskHandleDetailRoutineMapper;
@@ -138,7 +146,9 @@
    @Override
    public void saveVehicleAccident(SaveVehicleAccidentDto dto, XpOperationsUser xpOperationsUser) {
        XpTask xpTask = new XpTask();
        xpTask.setTaskCode("1");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
        xpTask.setTaskCode(code);
        xpTask.setTaskCategory(2);
        xpTask.setTaskTypeId(dto.getTaskTypeId());
        xpTask.setTaskUrgencyLevel(dto.getTaskUrgencyLevel());
@@ -466,13 +476,6 @@
    @Override
    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){
            throw new ServiceException(
@@ -614,7 +617,7 @@
    }
    @Override
    public R confirmArrive(Integer id) {
    public R confirmArrive(Long id) {
        XpTask task = this.getById(id);
        if (task!=null){
            task.setStatus(1);
@@ -734,4 +737,170 @@
        }
    }
    @Override
    public PageInfo<TaskManagementPageListVO> pageListManagement(TaskManagementPageListQuery query) {
        PageInfo<TaskManagementPageListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TaskManagementPageListVO> list = this.baseMapper.pageListManagement(pageInfo, query);
        pageInfo.setRecords(list);
        return pageInfo;
    }
    @Override
    public R assigneeTask(Long id, Long handlerUserId,Long assigneeUserId) {
        XpTask task = this.getById(id);
        task.setAssigneeTime(LocalDateTime.now());
        task.setHandleUserId(handlerUserId);
        task.setAssigneeUserId(assigneeUserId);
        this.updateById(task);
        return R.ok();
    }
    @Override
    public void saveTask(SaveErrorTaskDto dto, Long reportUserId) {
        XpTask task = new XpTask();
        BeanUtils.copyProperties(dto, task);
        task.setReportTime(LocalDateTime.now());
        task.setStatus(0);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
        task.setTaskCode(code);
        // 查询规则
        XpTaskRule taskRule = xpTaskRuleMapper.selectOne(null);
        if (taskRule != null){
            task.setEndTime(LocalDateTime.now().plusMinutes(taskRule.getProcessingTimeLimit()));
        }
    }
    @Override
    public R<TaskManagementDetailVO> taskDetail(Long id) {
        TaskManagementDetailVO managementDetailVO = new TaskManagementDetailVO();
        XpTask task = this.getById(id);
        if (task == null){
            throw new ServiceException(
                    "任务不存在",
                    I18nKeyConstant.TASK_NOT_EXIST
            );
        }
        XpVehicle vehicle = xpVehicleClient.queryById(task.getVehicleId()).getData();
        if (vehicle == null){
            throw new ServiceException(
                    "车辆不存在",
                    I18nKeyConstant.VEHICLE_NOT_EXIST
            );
        }
        if (task.getTaskCategory()==1){
            // 常规任务
                switch (task.getTaskTypeId()){
                    case "1":
                        // 检测
                        TaskManagementDetectionDetailVO taskManagementDetectionDetailVO = new TaskManagementDetectionDetailVO();
                        break;
                    case "2":
                        // 充电
                        TaskManagementChargingDetailVO taskManagementChargingDetailVO = new TaskManagementChargingDetailVO();
                        break;
                    case "3":
                        // 整备
                        TaskManagementPreparationDetailVO taskManagementPreparationDetailVO = new TaskManagementPreparationDetailVO();
                        break;
                    case "4":
                        // 洗车
                        TaskManagementCleanDetailVO taskManagementCleanDetailVO = new TaskManagementCleanDetailVO();
                        break;
                    case "5":
                        // 维修
                        TaskManagementRepairDetailVO taskManagementRepairDetailVO = new TaskManagementRepairDetailVO();
                        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());
                        res.setTaskDescription(task.getTaskDescription());
                        res.setTaskImage(task.getTaskImage());
                        res.setHandleUserId(task.getHandleUserId());
                        XpOperationsUser operationsUser = xpOperationUserClient.queryById(task.getHandleUserId()).getData();
                        if (operationsUser != null){
                            res.setHandleUserId(operationsUser.getId());
                            res.setHandleUserName(operationsUser.getNickName());
                        }
                        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());
                        break;
                }
        }else{
            // 事故任务
            TaskManagementAccidentDetailVO res = new TaskManagementAccidentDetailVO();
            Map<Long, List<XpErrorType>> errorType = errorTypeMapper.selectList(new LambdaQueryWrapper<XpErrorType>()
                            .in(XpErrorType::getId, Arrays.asList(task.getTaskTypeId().split(","))))
                    .stream().collect(Collectors.groupingBy(XpErrorType::getParentId));
            List<XpErrorType> xpErrorTypes = errorType.get(0L);
            for (XpErrorType xpErrorType : xpErrorTypes) {
                xpErrorType.setChild(errorType.get(xpErrorType.getId()));
            }
            res.setErrorTypeList(xpErrorTypes);
            res.setStatus(task.getStatus());
            res.setTaskDescription(task.getTaskDescription());
            res.setTaskImage(task.getTaskImage());
            res.setId(id);
            res.setVehicleId(vehicle.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());
            List<Long> reportUserIds = new ArrayList<>();
            reportUserIds.add(task.getReportUserId());
            List<SysUser> sysUsers = sysUserClient.listByIds(reportUserIds).getData();
            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());
            }
            XpTaskHandleDetail xpTaskHandleDetail = xpTaskHandleDetailMapper.selectOne(new LambdaQueryWrapper<XpTaskHandleDetail>()
                    .eq(XpTaskHandleDetail::getTaskId, id));
            res.setDeathCount(xpTaskHandleDetail.getDeathCount());
            res.setSevereCount(xpTaskHandleDetail.getSevereCount());
            res.setMinorCount(xpTaskHandleDetail.getMinorCount());
            res.setResponsibilityJudgment(xpTaskHandleDetail.getResponsibilityJudgment());
            res.setResponsibleDescription(xpTaskHandleDetail.getResponsibleDescription());
            res.setResponsibleImage(xpTaskHandleDetail.getResponsibleImage());
            res.setDisposalDescription(xpTaskHandleDetail.getDisposalDescription());
            res.setDisposalImage(xpTaskHandleDetail.getDisposalImage());
            res.setSituationDescription(xpTaskHandleDetail.getSituationDescription());
            res.setSituationImage(xpTaskHandleDetail.getSituationImage());
            managementDetailVO.setAccidentDetailVO(res);
        }
        return R.ok(managementDetailVO);
    }
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/utils/UUIDUtil.java
New file
@@ -0,0 +1,103 @@
package com.xiaopeng.maintenance.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
/**
 * 定义生成随机码的工具类
 */
public class UUIDUtil {
    private int i = 1;
    /**
     * 定义生成原生的UUID随机码
     *
     * @return
     */
    public static String getNativeUUID() {
        return UUID.randomUUID().toString();
    }
    /**
     * 生成32位随机码
     *
     * @return
     */
    public static String getRandomCode() {
        return UUIDUtil.getNativeUUID().replaceAll("-", "");
    }
    /**
     * 获取给定长度的随机码
     *
     * @param num
     * @return
     * @throws Exception
     */
    public static String getRandomCode(Integer num) throws Exception {
        String str = null;
        if (0 < num) {
            if (num % 32 > 0) {
                Integer s = num / 32;
                Integer l = num % 32;
                StringBuffer sb = new StringBuffer();
                for (int i = 0; i < s; i++) {
                    sb.append(UUIDUtil.getRandomCode());
                }
                sb.append(UUIDUtil.getRandomCode().substring(0, l));
                str = sb.toString();
            } else if (num % 32 == 0) {
                Integer s = num / 32;
                StringBuffer sb = new StringBuffer();
                for (int i = 0; i < s; i++) {
                    sb.append(UUIDUtil.getRandomCode());
                }
                str = sb.toString();
            } else {
                str = UUIDUtil.getRandomCode().substring(0, num);
            }
        } else {
            throw new Exception("参数只能大于0");
        }
        return str;
    }
    /**
     * 获取根据当前时间的字符串数据
     *
     * @return
     */
    public synchronized static String getTimeStr() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddhhmmssS");
        return simpleDateFormat.format(new Date());
    }
    /**
     * @Description: 获取数字随机码
     * @Author pzb
     * @Date 2021/8/11 16:52
     * @Param
     * @Return
     * @Exception
     */
    public static String getNumberRandom(Integer num) {
        if (null == num) {
            num = 32;
        }
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < num; i++) {
            sb.append(Double.valueOf(Math.random() * 10).intValue());
        }
        return sb.toString();
    }
}
xp-robotaxi-maintenance-boot/src/main/resources/mapper/maintenance/XpTaskMapper.xml
@@ -4,47 +4,56 @@
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.xiaopeng.api.model.maintenance.XpTask">
        <id column="id" property="id" />
        <result column="task_code" property="taskCode" />
        <result column="task_category" property="taskCategory" />
        <result column="task_type_id" property="taskTypeId" />
        <result column="task_urgency_level" property="taskUrgencyLevel" />
        <result column="task_description" property="taskDescription" />
        <result column="vehicle_location" property="vehicleLocation" />
        <result column="vehicle_id" property="vehicleId" />
        <result column="vehicle_lon" property="vehicleLon" />
        <result column="vehicle_lat" property="vehicleLat" />
        <result column="handle_user_id" property="handleUserId" />
        <result column="handle_time" property="handleTime" />
        <result column="assignee_user_id" property="assigneeUserId" />
        <result column="assignee_time" property="assigneeTime" />
        <result column="report_user_id" property="reportUserId" />
        <result column="report_time" property="reportTime" />
        <result column="status" property="status" />
        <result column="is_deleted" property="deleted" />
        <result column="create_time" property="createTime" />
        <result column="update_time" property="updateTime" />
        <result column="create_by" property="createBy" />
        <result column="update_by" property="updateBy" />
        <id column="id" property="id"/>
        <result column="task_code" property="taskCode"/>
        <result column="task_category" property="taskCategory"/>
        <result column="task_type_id" property="taskTypeId"/>
        <result column="task_urgency_level" property="taskUrgencyLevel"/>
        <result column="task_description" property="taskDescription"/>
        <result column="vehicle_location" property="vehicleLocation"/>
        <result column="vehicle_id" property="vehicleId"/>
        <result column="vehicle_lon" property="vehicleLon"/>
        <result column="vehicle_lat" property="vehicleLat"/>
        <result column="handle_user_id" property="handleUserId"/>
        <result column="handle_time" property="handleTime"/>
        <result column="assignee_user_id" property="assigneeUserId"/>
        <result column="assignee_time" property="assigneeTime"/>
        <result column="report_user_id" property="reportUserId"/>
        <result column="report_time" property="reportTime"/>
        <result column="status" property="status"/>
        <result column="is_deleted" property="deleted"/>
        <result column="create_time" property="createTime"/>
        <result column="update_time" property="updateTime"/>
        <result column="create_by" property="createBy"/>
        <result column="update_by" property="updateBy"/>
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, task_code, task_category,end_time, task_type_id,task_image, task_urgency_level, task_description, vehicle_location, vehicle_id, vehicle_lon, vehicle_lat, handle_user_id, handle_time, assignee_user_id, assignee_time, report_user_id, report_time, status, is_deleted, create_time, update_time, create_by, update_by
        id
        , task_code, task_category,end_time, task_type_id,task_image, task_urgency_level, task_description, vehicle_location, vehicle_id, vehicle_lon, vehicle_lat, handle_user_id, handle_time, assignee_user_id, assignee_time, report_user_id, report_time, status, is_deleted, create_time, update_time, create_by, update_by
    </sql>
    <select id="workbench" resultType="com.xiaopeng.maintenance.model.vo.WorkBenchVO">
        select t1.*,t2.vehicle_vin as vehicleVin,t2.plate_number as plateNumber,
               t2.vehicle_color as vehicleColor,t2.vehicle_pictures as vehiclePictures
        select t1.*,
               t2.vehicle_vin      as vehicleVin,
               t2.plate_number     as plateNumber,
               t2.vehicle_color    as vehicleColor,
               t2.vehicle_pictures as vehiclePictures
        from xp_task t1
            left join xp_vehicle t2 on t1.vehicle_id = t2.id
                 left join xp_vehicle t2 on t1.vehicle_id = t2.id
        where t1.handle_user_id = #{query.operationId}
        and t1.status = 1
        and t1.is_deleted = 0
          and t1.status = 1
          and t1.is_deleted = 0
        order by t1.assignee_time asc
    </select>
    <select id="pageList" resultType="com.xiaopeng.maintenance.model.vo.TaskPageListVO">
        select t1.id,t1.task_code as taskCode,t1.end_time as endTime,t1.task_category as taskCategory,t1.task_type_id as taskTypeId,t1.task_urgency_level as taskUrgencyLevel,t1.task_description as taskDescription,t1.vehicle_location as vehicleLocation,t1.vehicle_id as vehicleId,t1.vehicle_lon as vehicleLon,t1.vehicle_lat as vehicleLat,t1.handle_user_id as handleUserId,t1.handle_time as handleTime,t1.assignee_user_id as assigneeUserId
        ,t1.assignee_time as assigneeTime,t1.task_image as taskImage,t1.report_user_id as reportUserId,t1.report_time as reportTime,t1.status as status,t1.is_deleted as isDeleted,t1.create_time as createTime,t1.update_time as updateTime,t1.create_by as createBy,t1.update_by as updateBy,t2.plate_number as plateNumber
        select t1.id,t1.task_code as taskCode,t1.end_time as endTime,t1.task_category as taskCategory,t1.task_type_id as
        taskTypeId,t1.task_urgency_level as taskUrgencyLevel,t1.task_description as taskDescription,t1.vehicle_location
        as vehicleLocation,t1.vehicle_id as vehicleId,t1.vehicle_lon as vehicleLon,t1.vehicle_lat as
        vehicleLat,t1.handle_user_id as handleUserId,t1.handle_time as handleTime,t1.assignee_user_id as assigneeUserId
        ,t1.assignee_time as assigneeTime,t1.task_image as taskImage,t1.report_user_id as reportUserId,t1.report_time as
        reportTime,t1.status as status,t1.is_deleted as isDeleted,t1.create_time as createTime,t1.update_time as
        updateTime,t1.create_by as createBy,t1.update_by as updateBy,t2.plate_number as plateNumber
        from xp_task t1
        left join xp_vehicle t2 on t1.vehicle_id = t2.id
        where t1.is_deleted = 0
@@ -89,5 +98,37 @@
    </select>
    <select id="pageListManagement" resultType="com.xiaopeng.maintenance.model.vo.TaskManagementPageListVO">
        select t.id,t.task_category as taskCategory,t.task_type_id as taskTypeId,t.task_urgency_level as
        taskUrgencyLevel,t.task_description as taskDescription,t.handle_user_id as handleUserId,t.create_time as
        createTime,t.status as status,
        v.plate_number as plateNumber
        from xp_task t
        left join xp_vehicle v on t.vehicle_id = v.id
        where t.is_deleted = 0
        <if test="query.taskCategory != null">
            and t.task_category = #{query.taskCategory}
        </if>
        <if test="query.taskUrgencyLevel != null">
            and t.task_urgency_level = #{query.taskUrgencyLevel}
        </if>
        <if test="query.status != null">
            and t.status = #{query.status}
        </if>
        <if test="query.plateNumber != null and query.plateNumber != ''">
            and v.plate_number like concat('%',#{query.plateNumber},'%')
        </if>
        <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
            and t.create_time between #{query.startTime} and #{query.endTime}
        </if>
        <if test="query.taskGeneralId != null">
            and t.task_type_id = #{query.taskGeneralId}
        </if>
        <if test="query.taskErrorId != null">
            and find_in_set(#{query.taskErrorId}, t.task_type_id)
            and t.task_category = 2
        </if>
        order by t.status,t.task_urgency_level asc, t.create_time desc
    </select>
</mapper>