package com.xiaopeng.maintenance.service.impl; 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.XpOperationUserClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; import com.xiaopeng.api.model.account.XpOperationsUser; import com.xiaopeng.api.model.maintenance.*; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.enums.TaskTypeEnum; import com.xiaopeng.common.core.exception.ServiceException; 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.SaveRoutineDetailDto; import com.xiaopeng.maintenance.dto.SaveVehicleAccidentDto; import com.xiaopeng.maintenance.mapper.*; 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 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.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; /** *

* 任务管理 服务实现类 *

* * @author WuGuanFengYue * @since 2026-02-03 */ @Service public class XpTaskServiceImpl extends ServiceImpl implements XpTaskService { /** * 常规任务类型映射 */ private static final Map TASK_TYPE_MAP = new java.util.HashMap<>(); static { TASK_TYPE_MAP.put("1", "车辆检查"); TASK_TYPE_MAP.put("2", "车辆充电"); TASK_TYPE_MAP.put("3", "车辆整备"); TASK_TYPE_MAP.put("4", "整备洗车"); TASK_TYPE_MAP.put("5", "车辆维修"); TASK_TYPE_MAP.put("6", "车辆保养"); TASK_TYPE_MAP.put("7", "车辆保险到期"); TASK_TYPE_MAP.put("8", "车辆年检到期"); TASK_TYPE_MAP.put("9", "车辆运营资质到期"); } @Autowired private XpTaskHandleDetailMapper xpTaskHandleDetailMapper; @Autowired private XpChargingRecordMapper chargingRecordMapper; @Autowired private XpVehicleRepairMapper vehicleRepairMapper; @Autowired private XpVehiclePreparationMapper vehiclePreparationMapper; @Autowired private XpVehicleDetectionMapper vehicleDetectionMapper; @Autowired private XpErrorTypeMapper errorTypeMapper; @Autowired private XpVehicleCleanMapper vehicleCleanMapper; @Autowired private XpOperationUserClient xpOperationUserClient; @Autowired private XpTaskHandleDetailRoutineMapper xpTaskHandleDetailRoutineMapper; @Autowired private XpVehicleClient xpVehicleClient; @Autowired private XpTaskRuleMapper xpTaskRuleMapper; @Override public PageInfo workbench(WorkBenchQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List list = this.baseMapper.workbench(pageInfo, query); pageInfo.setRecords(list); return pageInfo; } @Override public PageInfo pageList(TaskPageListQuery query) { if (query.getDistributeType() != null) { LocalDateTime now = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); switch (query.getDistributeType()) { case 1: // 今天 query.setStartTime(now.with(LocalTime.MIN).format(formatter)); query.setEndTime(now.with(LocalTime.MAX).format(formatter)); break; case 2: // 昨天 LocalDateTime yesterdayStart = now.minusDays(1).with(LocalTime.MIN); LocalDateTime yesterdayEnd = now.minusDays(1).with(LocalTime.MAX); query.setStartTime(yesterdayStart.format(formatter)); query.setEndTime(yesterdayEnd.format(formatter)); break; case 3: // 近一周 LocalDateTime weekAgoStart = now.minusDays(7).with(LocalTime.MIN); query.setStartTime(weekAgoStart.format(formatter)); query.setEndTime(now.with(LocalTime.MAX).format(formatter)); break; case 4: // 近一月 LocalDateTime monthAgoStart = now.minusDays(30).with(LocalTime.MIN); query.setStartTime(monthAgoStart.format(formatter)); query.setEndTime(now.with(LocalTime.MAX).format(formatter)); break; default: // 默认不设置时间范围 break; } } PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List list = this.baseMapper.pageList(pageInfo, query); XpTaskRule xpTaskRule = xpTaskRuleMapper.selectOne(new LambdaQueryWrapper().last("limit 1")); if (Objects.nonNull(xpTaskRule)) { list.stream().filter(item -> item.getTaskCategory().equals(2)).forEach(item->{ item.setCanArriveRange(xpTaskRule.getCanArriveRange()); }); } pageInfo.setRecords(list); return pageInfo; } @Override public void saveVehicleAccident(SaveVehicleAccidentDto dto, XpOperationsUser xpOperationsUser) { XpTask xpTask = new XpTask(); xpTask.setTaskCode("1"); xpTask.setTaskCategory(2); xpTask.setTaskTypeId(dto.getTaskTypeId()); xpTask.setTaskUrgencyLevel(dto.getTaskUrgencyLevel()); xpTask.setTaskDescription(dto.getTaskDescription()); // todo 获取车辆当前位置 // xpTask.setVehicleLocation(); // xpTask.setVehicleId(); // xpTask.setVehicleLon(); // xpTask.setVehicleLat(); xpTask.setReportUserId(xpOperationsUser.getId()); xpTask.setReportTime(LocalDateTime.now()); xpTask.setStatus(0); xpTask.setCreateBy(xpOperationsUser.getNickName()); this.save(xpTask); } @Override public R vehicleAccidentDetail(Long id) { TaskAccidentDetailVO res = new TaskAccidentDetailVO(); 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 ); } res.setId(id); res.setVehicleId(vehicle.getId()); res.setTaskUrgencyLevel(task.getTaskUrgencyLevel()); res.setEndTime(task.getEndTime()); res.setPlateNumber(vehicle.getPlateNumber()); res.setVehicleColor(vehicle.getVehicleColor()); res.setVehicleCode(vehicle.getVehicleCode()); res.setVehicleLocation(task.getVehicleLocation()); res.setCreateBy(task.getCreateBy()); res.setCreateTime(task.getCreateTime()); res.setTaskCode(task.getTaskCode()); res.setTaskCategory(task.getTaskCategory()); res.setTaskTypeId(task.getTaskTypeId()); res.setVehicleLon(task.getVehicleLon()); res.setVehicleLat(task.getVehicleLat()); Map> errorType = errorTypeMapper.selectList(new LambdaQueryWrapper() .in(XpErrorType::getId, Arrays.asList(task.getTaskTypeId().split(",")))) .stream().collect(Collectors.groupingBy(XpErrorType::getParentId)); List 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()); XpTaskRule xpTaskRule = xpTaskRuleMapper.selectOne(new LambdaQueryWrapper().last("limit 1")); if (Objects.nonNull(xpTaskRule)) { res.setCanArriveRange(xpTaskRule.getCanArriveRange()); } return R.ok(res); } @Override public R handleVehicleAccident(HandleVehicleAccidentDto dto, XpOperationsUser xpOperationsUser) { XpTask task = this.getById(dto.getId()); if (task == null){ throw new ServiceException( "任务不存在", I18nKeyConstant.TASK_NOT_EXIST ); } task.setHandleTime(LocalDateTime.now()); task.setHandleUserId(xpOperationsUser.getId()); task.setStatus(2); // 存储事故处理日志 XpTaskHandleDetail xpTaskHandleDetail = new XpTaskHandleDetail(); xpTaskHandleDetail.setTaskId(task.getId()); xpTaskHandleDetail.setDeathCount(dto.getDeathCount()); xpTaskHandleDetail.setSevereCount(dto.getSevereCount()); xpTaskHandleDetail.setMinorCount(dto.getMinorCount()); xpTaskHandleDetail.setResponsibilityJudgment(dto.getResponsibilityJudgment()); xpTaskHandleDetail.setResponsibleDescription(dto.getResponsibleDescription()); xpTaskHandleDetail.setResponsibleImage(dto.getResponsibleImage()); xpTaskHandleDetail.setDisposalDescription(dto.getDisposalDescription()); xpTaskHandleDetail.setDisposalImage(dto.getDisposalImage()); xpTaskHandleDetail.setSituationDescription(dto.getSituationDescription()); xpTaskHandleDetail.setSituationImage(dto.getSituationImage()); xpTaskHandleDetailMapper.insert(xpTaskHandleDetail); return R.ok(); } @Override public R vehicleRoutineDetail(Long id) { TaskRoutineDetailVO res = new TaskRoutineDetailVO(); 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 ); } res.setId(id); res.setTaskUrgencyLevel(task.getTaskUrgencyLevel()); res.setEndTime(task.getEndTime()); res.setVehicleId(task.getVehicleId()); res.setVehicleLat(task.getVehicleLat()); res.setVehicleLon(task.getVehicleLon()); res.setPlateNumber(vehicle.getPlateNumber()); res.setVehicleColor(vehicle.getVehicleColor()); res.setVehicleCode(vehicle.getVehicleCode()); res.setVehicleLocation(task.getVehicleLocation()); res.setCreateBy(task.getCreateBy()); res.setCreateTime(task.getCreateTime()); res.setTaskCode(task.getTaskCode()); res.setTaskCategory(task.getTaskCategory()); res.setTaskTypeId(task.getTaskTypeId()); res.setStatus(task.getStatus()); res.setTaskDescription(task.getTaskDescription()); 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(data)) { res.setHandleUserName(data.getNickName()); } } return R.ok(res); } @Override public R chargingDetail(Long id) { TaskChargingDetailVO res = new TaskChargingDetailVO(); 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 ); } res.setVehicleId(task.getVehicleId()); res.setId(id); res.setTaskUrgencyLevel(task.getTaskUrgencyLevel()); res.setPlateNumber(vehicle.getPlateNumber()); res.setVehicleColor(vehicle.getVehicleColor()); res.setVehicleCode(vehicle.getVehicleCode()); res.setVehicleLocation(task.getVehicleLocation()); res.setCreateBy(task.getCreateBy()); res.setCreateTime(task.getCreateTime()); res.setTaskCode(task.getTaskCode()); res.setTaskCategory(task.getTaskCategory()); res.setTaskTypeId(task.getTaskTypeId()); res.setStatus(task.getStatus()); XpChargingRecord chargingRecord = chargingRecordMapper.selectOne(new LambdaQueryWrapper() .eq(XpChargingRecord::getTaskId, id).last("limit 1")); if (chargingRecord != null){ res.setStartRemainingBattery(chargingRecord.getStartRemainingBattery()); res.setStartChargingPicture(chargingRecord.getStartChargingPicture()); res.setStartTime(chargingRecord.getStartTime()); res.setEndRemainingBattery(chargingRecord.getEndRemainingBattery()); res.setEndChargingPicture(chargingRecord.getEndChargingPicture()); res.setEndTime(chargingRecord.getEndTime()); res.setStartOperationsUserId(chargingRecord.getStartOperationsUserId()); res.setEndOperationsUserId(chargingRecord.getEndOperationsUserId()); if (chargingRecord.getStartOperationsUserId() != null){ XpOperationsUser operationsUser = xpOperationUserClient.queryById(chargingRecord.getStartOperationsUserId()).getData(); if (operationsUser != null){ res.setStartOperationsUserName(operationsUser.getNickName()); } } if (chargingRecord.getEndOperationsUserId() != null){ XpOperationsUser operationsUser = xpOperationUserClient.queryById(chargingRecord.getEndOperationsUserId()).getData(); if (operationsUser != null){ res.setEndOperationsUserName(operationsUser.getNickName()); } } } return R.ok(res); } @Override public R repairDetail(Long id) { com.xiaopeng.maintenance.vo.TaskRepairDetailVO res = new com.xiaopeng.maintenance.vo.TaskRepairDetailVO(); 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 ); } res.setVehicleId(task.getVehicleId()); res.setId(id); res.setTaskUrgencyLevel(task.getTaskUrgencyLevel()); res.setPlateNumber(vehicle.getPlateNumber()); res.setVehicleColor(vehicle.getVehicleColor()); res.setVehicleCode(vehicle.getVehicleCode()); res.setVehicleLocation(task.getVehicleLocation()); res.setCreateBy(task.getCreateBy()); res.setCreateTime(task.getCreateTime()); res.setTaskCode(task.getTaskCode()); res.setTaskCategory(task.getTaskCategory()); res.setTaskTypeId(task.getTaskTypeId()); res.setStatus(task.getStatus()); XpVehicleRepair vehicleRepair = vehicleRepairMapper.selectOne(new LambdaQueryWrapper() .eq(XpVehicleRepair::getTaskId, id).last("limit 1")); if (vehicleRepair != null){ res.setStartTime(vehicleRepair.getStartTime()); res.setEndTime(vehicleRepair.getEndTime()); res.setRepairReason(vehicleRepair.getRepairReason()); res.setStartRepairPicture(vehicleRepair.getStartRepairPicture()); res.setRepairMoney(vehicleRepair.getRepairMoney()); res.setRepairMoneyDetail(vehicleRepair.getRepairMoneyDetail()); res.setSendUserId(vehicleRepair.getSendUserId()); res.setSendTime(vehicleRepair.getSendTime()); res.setReturnUserId(vehicleRepair.getReturnUserId()); res.setReturnTime(vehicleRepair.getReturnTime()); if (vehicleRepair.getReturnUserId() != null){ XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleRepair.getReturnUserId()).getData(); if (operationsUser != null){ res.setReturnUserName(operationsUser.getNickName()); } } if (vehicleRepair.getSendUserId() != null){ XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleRepair.getSendUserId()).getData(); if (operationsUser != null){ res.setSendUserName(operationsUser.getNickName()); } } } return R.ok(res); } @Override public R preparationDetail(Long id) { com.xiaopeng.maintenance.vo.TaskPreparationDetailVO res = new com.xiaopeng.maintenance.vo.TaskPreparationDetailVO(); 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 ); } res.setVehicleId(task.getVehicleId()); res.setId(id); res.setTaskUrgencyLevel(task.getTaskUrgencyLevel()); res.setPlateNumber(vehicle.getPlateNumber()); res.setVehicleColor(vehicle.getVehicleColor()); res.setVehicleCode(vehicle.getVehicleCode()); res.setVehicleLocation(task.getVehicleLocation()); res.setCreateBy(task.getCreateBy()); res.setCreateTime(task.getCreateTime()); res.setTaskCode(task.getTaskCode()); res.setTaskCategory(task.getTaskCategory()); res.setTaskTypeId(task.getTaskTypeId()); res.setStatus(task.getStatus()); XpVehiclePreparation vehiclePreparation = vehiclePreparationMapper.selectOne(new LambdaQueryWrapper() .eq(XpVehiclePreparation::getTaskId, id).last("limit 1")); if (vehiclePreparation != null){ res.setLeftFrontWheel(vehiclePreparation.getLeftFrontWheel()); res.setRightFrontWheel(vehiclePreparation.getRightFrontWheel()); res.setLeftRearWheel(vehiclePreparation.getLeftRearWheel()); res.setRightRearWheel(vehiclePreparation.getRightRearWheel()); res.setHeadLight(vehiclePreparation.getHeadLight()); res.setTurnSignal(vehiclePreparation.getTurnSignal()); res.setBrakeLight(vehiclePreparation.getBrakeLight()); res.setFogLight(vehiclePreparation.getFogLight()); res.setBodyEmblem(vehiclePreparation.getBodyEmblem()); res.setCabinCleaning(vehiclePreparation.getCabinCleaning()); res.setLostItems(vehiclePreparation.getLostItems()); res.setRemarks(vehiclePreparation.getRemarks()); res.setOperationsUserId(vehiclePreparation.getOperationsUserId()); res.setOperationsTime(vehiclePreparation.getCreateTime()); if (vehiclePreparation.getOperationsUserId() != null){ XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehiclePreparation.getOperationsUserId()).getData(); if (operationsUser != null){ res.setOperationsUserName(operationsUser.getNickName()); } } } return R.ok(res); } @Override public R 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( "任务不存在", I18nKeyConstant.TASK_NOT_EXIST ); } XpVehicle vehicle = xpVehicleClient.queryById(task.getVehicleId()).getData(); if (vehicle == null){ throw new ServiceException( "车辆不存在", I18nKeyConstant.VEHICLE_NOT_EXIST ); } res.setVehicleId(task.getVehicleId()); res.setId(id); res.setTaskUrgencyLevel(task.getTaskUrgencyLevel()); res.setPlateNumber(vehicle.getPlateNumber()); res.setVehicleColor(vehicle.getVehicleColor()); res.setVehicleCode(vehicle.getVehicleCode()); res.setVehicleLocation(task.getVehicleLocation()); res.setCreateBy(task.getCreateBy()); res.setCreateTime(task.getCreateTime()); res.setTaskCode(task.getTaskCode()); res.setTaskCategory(task.getTaskCategory()); res.setTaskTypeId(task.getTaskTypeId()); res.setStatus(task.getStatus()); XpVehicleDetection vehicleDetection = vehicleDetectionMapper.selectOne(new LambdaQueryWrapper() .eq(XpVehicleDetection::getTaskId, id).last("limit 1")); if (vehicleDetection != null){ res.setNetworkDetection(vehicleDetection.getNetworkDetection()); res.setVersionVerification(vehicleDetection.getVersionVerification()); res.setCommunicationSelfCheck(vehicleDetection.getCommunicationSelfCheck()); res.setRemoteSelfCheck(vehicleDetection.getRemoteSelfCheck()); res.setCollisionPrevention(vehicleDetection.getCollisionPrevention()); res.setSensorSelfCheck(vehicleDetection.getSensorSelfCheck()); res.setSensorCleaning(vehicleDetection.getSensorCleaning()); res.setSensorCleaningPicture(vehicleDetection.getSensorCleaningPicture()); res.setInteractiveScreen(vehicleDetection.getInteractiveScreen()); res.setInteractiveScreenPicture(vehicleDetection.getInteractiveScreenPicture()); res.setHelpButton(vehicleDetection.getHelpButton()); res.setHelpButtonPicture(vehicleDetection.getHelpButtonPicture()); res.setPaymentFunction(vehicleDetection.getPaymentFunction()); res.setPaymentFunctionPicture(vehicleDetection.getPaymentFunctionPicture()); res.setSystemCheck(vehicleDetection.getSystemCheck()); res.setSystemCheckPicture(vehicleDetection.getSystemCheckPicture()); res.setCheckTime(vehicleDetection.getCheckTime()); res.setOperationsUserId(vehicleDetection.getOperationsUserId()); if (vehicleDetection.getOperationsUserId() != null){ XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleDetection.getOperationsUserId()).getData(); if (operationsUser != null){ res.setOperationsUserName(operationsUser.getNickName()); } } } return R.ok(res); } @Override public R saveRoutineDetail(SaveRoutineDetailDto dto, Long id) { XpTask task = this.getById(dto.getId()); if (task == null){ throw new ServiceException( "任务不存在", I18nKeyConstant.TASK_NOT_EXIST ); } XpTaskHandleDetailRoutine xpTaskHandleDetailRoutine = new XpTaskHandleDetailRoutine(); xpTaskHandleDetailRoutine.setTaskId(task.getId()); String taskTypeId = task.getTaskTypeId(); switch (taskTypeId){ case "6": xpTaskHandleDetailRoutine.setTaskType(1); break; case "7": xpTaskHandleDetailRoutine.setTaskType(2); break; case "8": xpTaskHandleDetailRoutine.setTaskType(3); break; case "9": xpTaskHandleDetailRoutine.setTaskType(4); break; } xpTaskHandleDetailRoutine.setTaskDescription(dto.getTaskDescription()); xpTaskHandleDetailRoutine.setTaskImage(dto.getTaskImage()); xpTaskHandleDetailRoutine.setOperationsUserId(id); xpTaskHandleDetailRoutineMapper.insert(xpTaskHandleDetailRoutine); task.setStatus(2); this.updateById(task); return null; } @Override public R cleanDetail(Long id) { com.xiaopeng.maintenance.vo.TaskCleanDetailVO res = new com.xiaopeng.maintenance.vo.TaskCleanDetailVO(); 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 ); } res.setVehicleId(task.getVehicleId()); res.setId(id); res.setTaskUrgencyLevel(task.getTaskUrgencyLevel()); res.setPlateNumber(vehicle.getPlateNumber()); res.setVehicleColor(vehicle.getVehicleColor()); res.setVehicleCode(vehicle.getVehicleCode()); res.setVehicleLocation(task.getVehicleLocation()); res.setCreateBy(task.getCreateBy()); res.setCreateTime(task.getCreateTime()); res.setTaskCode(task.getTaskCode()); res.setTaskCategory(task.getTaskCategory()); res.setTaskTypeId(task.getTaskTypeId()); res.setStatus(task.getStatus()); XpVehicleClean vehicleDetection = vehicleCleanMapper.selectOne(new LambdaQueryWrapper() .eq(XpVehicleClean::getTaskId, id).last("limit 1")); if (vehicleDetection != null){ res.setTaskImage(vehicleDetection.getTaskImage()); res.setOperationUserId(vehicleDetection.getOperationsUserId()); if (vehicleDetection.getOperationsUserId() != null){ XpOperationsUser operationsUser = xpOperationUserClient.queryById(vehicleDetection.getOperationsUserId()).getData(); if (operationsUser != null){ res.setOperationsUserName(operationsUser.getNickName()); } } } return R.ok(res); } @Override public R confirmArrive(Integer id) { XpTask task = this.getById(id); if (task!=null){ task.setStatus(1); this.updateById(task); } return R.ok(); } @Override public PageInfo queryTaskByVehicleId(XpTaskRecordPageQuery query) { // 1. 构建查询条件 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(XpTask::getVehicleId, query.getVehicleId()); if (query.getTaskCategory() != null) { wrapper.eq(XpTask::getTaskCategory, query.getTaskCategory()); } if (StringUtils.isNotBlank(query.getTaskTypeId())) { wrapper.eq(XpTask::getTaskTypeId, query.getTaskTypeId()); } if (query.getStartTime() != null) { wrapper.ge(XpTask::getCreateTime, query.getStartTime().atStartOfDay()); } if (query.getEndTime() != null) { wrapper.le(XpTask::getCreateTime, query.getEndTime().atTime(23, 59, 59)); } wrapper.orderByDesc(XpTask::getCreateTime); // 2. 执行分页查询 Page page = new Page<>(query.getPageNum(), query.getPageSize()); Page resultPage = this.page(page, wrapper); // 3. 转换为 VO 并填充 typeName List records = new ArrayList<>(); if (!CollectionUtils.isEmpty(resultPage.getRecords())) { // 3.1 收集所有事故任务的 errorType ID Set errorTypeIds = new HashSet<>(); for (XpTask task : resultPage.getRecords()) { if (task.getTaskCategory() != null && task.getTaskCategory() == 2 && StringUtils.isNotBlank(task.getTaskTypeId())) { String[] ids = task.getTaskTypeId().split(","); for (String id : ids) { try { errorTypeIds.add(Long.parseLong(id.trim())); } catch (NumberFormatException e) { // 忽略格式错误的ID } } } } // 3.2 批量查询 errorType Map errorTypeMap = new HashMap<>(); if (!errorTypeIds.isEmpty()) { List errorTypes = errorTypeMapper.selectBatchIds(errorTypeIds); for (XpErrorType errorType : errorTypes) { errorTypeMap.put(errorType.getId(), errorType.getErrorName()); } } // 3.3 填充 typeName for (XpTask task : resultPage.getRecords()) { XpTaskRecordVO vo = new XpTaskRecordVO(); BeanUtils.copyProperties(task, vo); // 填充 typeName if (task.getTaskCategory() != null && task.getTaskCategory() == 1) { // 常规任务: 使用枚举映射 vo.setTypeName(TaskTypeEnum.getEnumDescByCode(Integer.valueOf(task.getTaskTypeId()))); } else if (task.getTaskCategory() != null && task.getTaskCategory() == 2) { // 事故任务: 拼接父子级名称 if (StringUtils.isNotBlank(task.getTaskTypeId())) { String[] ids = task.getTaskTypeId().split(","); if (ids.length >= 2) { try { String parentName = errorTypeMap.get(Long.parseLong(ids[0].trim())); String childName = errorTypeMap.get(Long.parseLong(ids[1].trim())); if (parentName != null && childName != null) { vo.setTypeName(parentName + "->" + childName); } } catch (NumberFormatException e) { // 忽略格式错误的ID } } } } records.add(vo); } } // 4. 构建分页结果 PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); pageInfo.setRecords(records); pageInfo.setTotal(resultPage.getTotal()); return pageInfo; } @Override public void deleteTaskById(Long id) { removeById(id); } @Override public void updateTaskStatus(Long taskId, Integer status) { if (Objects.nonNull(taskId)) { XpTask task = this.getById(taskId); if (Objects.nonNull(task)) { task.setStatus(status); this.updateById(task); } } } }