puzhibing
2026-04-28 37c87f161b418e0e5d0b03aedb302fbba5156e50
新增加任务改派接口
1个文件已添加
9个文件已修改
120 ■■■■■ 已修改文件
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/constant/I18nKeyConstant.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/XpTaskService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/TaskReassignmentVo.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/XpCruiseCheckInRuleInfoVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages.properties 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages_en_US.properties 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages_zh_CN.properties 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/constant/I18nKeyConstant.java
@@ -15,4 +15,5 @@
    String ACCIDENT_TYPE_NOT_EXIST = "accident.type.not.exist";
    String CHECK_IN_LOCATION_DOES_NOT_EXIST = "check.in.location.does.not.exist";
    String CANNOT_REPEAT_CLOCKING_IN = "cannot.repeat.clocking.in";
    String TASK_HAS_BEEN_REASSIGNED = "task.has.been.reassigned";
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
@@ -100,6 +100,12 @@
    @Resource
    private AccidentTaskQuartzScheduler accidentTaskQuartzScheduler;
    @Resource
    private XpOperationUserClient operationUserClient;
    @Resource
    XpFleetClient xpFleetClient;
    @ApiOperation(value = "事故类型列表", response = XpErrorType.class, tags = "运维APP-任务中心")
    @GetMapping("/maintenance-app/api/v1/task/errorTypeList")
    public R<List<XpErrorType>> errorTypeList() {
@@ -298,7 +304,8 @@
                if (Objects.isNull(jsonObject)) {
                    continue;
                }
                String downloadUrl = jsonObject.getString("url");;
                String downloadUrl = jsonObject.getString("url");
                ;
                try {
                    downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true);
                } catch (UnsupportedEncodingException e) {
@@ -320,7 +327,7 @@
    @ApiOperation(value = "待改派的工单导出", tags = {"管理后台-运维执行-任务工单-待改派工单"})
    @PostMapping("/api/v1/task/reassign/export")
    public R<?> export(@RequestBody TaskPageListQuery query, HttpServletResponse response) {
        List<XpTaskVO> list= xpTaskService.exportList(query);
        List<XpTaskVO> list = xpTaskService.exportList(query);
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), XpCruiseCheckInRecordVO.class, list);
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
@@ -348,8 +355,6 @@
        return R.ok();
    }
    @Resource
    XpFleetClient xpFleetClient;
    @ApiOperation(value = "可改派的运维人员列表", tags = {"管理后台-运维执行-任务工单-待改派工单"})
    @PostMapping("/api/v1/task/reassign/availableUsers")
@@ -357,12 +362,12 @@
        XpTask task = xpTaskService.getById(query.getTaskId());
        GeoJsonPoint point =
            new GeoJsonPoint(
                task.getVehicleLon().doubleValue(),
                task.getVehicleLat().doubleValue()
            );
                new GeoJsonPoint(
                        task.getVehicleLon().doubleValue(),
                        task.getVehicleLat().doubleValue()
                );
        Query q = new Query(Criteria.where("location").near(point)
            .maxDistance(new Distance(10, Metrics.KILOMETERS).getNormalizedValue()));
                .maxDistance(new Distance(10, Metrics.KILOMETERS).getNormalizedValue()));
        q.with(Sort.by(Sort.Direction.ASC, "dis"));
        List<XpOperationsUserPositionDTO> up = mongoTemplate.find(q, XpOperationsUserPositionDTO.class);
@@ -389,8 +394,6 @@
        return R.ok(ret);
    }
    @Resource
    private XpOperationUserClient operationUserClient;
    @ApiOperation(value = "改派详情", tags = {"管理后台-运维执行-任务工单-待改派工单"})
    @GetMapping("/api/v1/task/detail")
@@ -404,4 +407,12 @@
        insuranceInspectionScheduleTask.executeInsuranceInspectionTask();
        return R.ok();
    }
    @ApiOperation(value = "运营后台改派工单", tags = {"管理后台-运维执行-任务工单-待改派工单"})
    @PostMapping("/api/v1/task/reassign/taskReassignment")
    public R<?> taskReassignment(@RequestBody TaskReassignmentVo vo){
        xpTaskService.taskReassignment(vo);
        return R.ok();
    }
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/XpTaskService.java
@@ -16,6 +16,8 @@
import com.xiaopeng.maintenance.model.vo.*;
import com.xiaopeng.maintenance.model.query.TaskPageListQuery;
import com.xiaopeng.maintenance.vo.TaskDetectionDetailVO;
import com.xiaopeng.maintenance.vo.TaskReassignmentVo;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
import java.io.UnsupportedEncodingException;
@@ -107,4 +109,11 @@
    XpTaskVO detail(Long taskId);
    List<XpTaskVO> exportList(TaskPageListQuery query);
    /**
     * 任务改派操作
     * @param vo
     */
    void taskReassignment(TaskReassignmentVo vo);
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java
@@ -350,6 +350,10 @@
        }).collect(Collectors.toList());
        info.setLocationList(collect);
        XpOperationsUser xpOperationsUser = xpOperationsUserClient.queryById(byId.getOperationsUserId()).getData();
        if(null != xpOperationsUser){
            info.setOperationsUser(xpOperationsUser.getNickName());
        }
        return info;
    }
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -57,6 +57,7 @@
import com.xiaopeng.maintenance.utils.UUIDUtil;
import com.xiaopeng.maintenance.vo.TaskCleanDetailVO;
import com.xiaopeng.maintenance.vo.TaskDetectionDetailVO;
import com.xiaopeng.maintenance.vo.TaskReassignmentVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
@@ -155,6 +156,9 @@
    private AliOssService aliOssService;
    @Autowired
    private AliOssDownloadUtil aliOssDownloadUtil;
    @Resource
    private WebSocketMessageClient xpWebSocketMessageClient;
    @Override
    public PageInfo<WorkBenchVO> workbench(WorkBenchQuery query) throws UnsupportedEncodingException {
@@ -437,8 +441,7 @@
        }
    }
    @Resource
    WebSocketMessageClient xpWebSocketMessageClient;
    /**
     * 推送阿里云通知
     *
@@ -2144,4 +2147,46 @@
    }
    /**
     * 任务改派操作
     * @param vo
     */
    @Override
    public void taskReassignment(TaskReassignmentVo vo) {
        XpTask xpTask = this.getById(vo.getTaskId());
        if(null == xpTask){
            throw new ServiceException("无效的任务", I18nKeyConstant.TASK_NOT_EXIST);
        }
        if(2 == xpTask.getReassignmentStatus()){
            throw new ServiceException("任务已改派,不能重复操作", I18nKeyConstant.TASK_HAS_BEEN_REASSIGNED);
        }
        xpTask.setReassignmentStatus(2);
        xpTask.setHandleUserId(vo.getNewOperationsUserId() + "");
        xpTask.setStatus(1);
        this.updateById(xpTask);
        //推送websocket
        XpTaskVO xpTaskVO = new XpTaskVO();
        BeanUtil.copyProperties(xpTask, xpTaskVO);
        xpWebSocketMessageClient.pushTask(xpTaskVO);
        boolean isAccidentTask = Integer.valueOf(2).equals(xpTask.getTaskCategory());
        Long vehicleId = xpTask.getVehicleId();
        Integer processingTimeLimit = null;
        String plateNumber = "";
        if (isAccidentTask) {
            // 查询规则 任务结束时间从任务分配时开始计算
            XpTaskRule taskRule = xpTaskRuleMapper.selectOne(null);
            if (taskRule != null) {
                processingTimeLimit = taskRule.getProcessingTimeLimit();
            }
            if (vehicleId != null) {
                XpVehicle vehicle = xpVehicleClient.queryById(vehicleId).getData();
                if (vehicle != null && StringUtils.isNotBlank(vehicle.getPlateNumber())) {
                    plateNumber = vehicle.getPlateNumber();
                }
            }
        }
        if (isAccidentTask && processingTimeLimit != null) {
            sendAssignedAccidentNotificationAsync(xpTask, Long.valueOf(xpTask.getHandleUserId()), plateNumber, processingTimeLimit);
        }
    }
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/TaskReassignmentVo.java
New file
@@ -0,0 +1,14 @@
package com.xiaopeng.maintenance.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel
public class TaskReassignmentVo {
    @ApiModelProperty("任务id")
    private Long taskId;
    @ApiModelProperty("新运维人id")
    private Long newOperationsUserId;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/XpCruiseCheckInRuleInfoVo.java
@@ -14,4 +14,7 @@
    @ApiModelProperty("巡游打卡点位列表")
    private List<CruiseCheckInLocationVo> locationList;
    @ApiModelProperty("关联人名称")
    private String operationsUser;
}
xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages.properties
@@ -7,4 +7,5 @@
task.vehicle.not.exist=上报失败,未获取到车辆信息
accident.type.not.exist=事故类型不存在
check.in.location.does.not.exist="打卡点位不存在"
cannot.repeat.clocking.in="不能重复打卡"
cannot.repeat.clocking.in="不能重复打卡"
task.has.been.reassigned = "任务已改派,不能重复操作"
xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages_en_US.properties
@@ -9,3 +9,4 @@
task.rule.not.config=The vehicle accident task allocation rules have not been configured
check.in.location.does.not.exist="The check-in location does not exist."
cannot.repeat.clocking.in="Cannot repeat clocking in"
task.has.been.reassigned = "The task has been reassigned and cannot be performed again."
xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages_zh_CN.properties
@@ -8,4 +8,5 @@
accident.type.not.exist=事故类型不存在
task.rule.not.config=未配置车辆事故任务分配规则
check.in.location.does.not.exist="打卡点位不存在"
cannot.repeat.clocking.in="不能重复打卡"
cannot.repeat.clocking.in="不能重复打卡"
task.has.been.reassigned = "任务已改派,不能重复操作"