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 = "任务已改派,不能重复操作"