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;
|
|
/**
|
* <p>
|
* 任务管理 服务实现类
|
* </p>
|
*
|
* @author WuGuanFengYue
|
* @since 2026-02-03
|
*/
|
@Service
|
public class XpTaskServiceImpl extends ServiceImpl<XpTaskMapper, XpTask> implements XpTaskService {
|
|
/**
|
* 常规任务类型映射
|
*/
|
private static final Map<String, String> 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<WorkBenchVO> workbench(WorkBenchQuery query) {
|
PageInfo<WorkBenchVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
|
List<WorkBenchVO> list = this.baseMapper.workbench(pageInfo, query);
|
pageInfo.setRecords(list);
|
return pageInfo;
|
}
|
|
@Override
|
public PageInfo<TaskPageListVO> 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<TaskPageListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
|
List<TaskPageListVO> list = this.baseMapper.pageList(pageInfo, query);
|
XpTaskRule xpTaskRule = xpTaskRuleMapper.selectOne(new LambdaQueryWrapper<XpTaskRule>().last("limit 1"));
|
if (Objects.nonNull(xpTaskRule)) {
|
list.stream().filter(item -> item.getTaskCategory().equals(2)).forEach(item->{
|
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<TaskAccidentDetailVO> 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<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());
|
XpTaskRule xpTaskRule = xpTaskRuleMapper.selectOne(new LambdaQueryWrapper<XpTaskRule>().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<TaskRoutineDetailVO> 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.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());
|
return R.ok(res);
|
}
|
|
@Override
|
public R<TaskChargingDetailVO> 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<XpChargingRecord>()
|
.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<com.xiaopeng.maintenance.vo.TaskRepairDetailVO> 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<XpVehicleRepair>()
|
.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<com.xiaopeng.maintenance.vo.TaskPreparationDetailVO> 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<XpVehiclePreparation>()
|
.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<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(
|
"任务不存在",
|
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<XpVehicleDetection>()
|
.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<com.xiaopeng.maintenance.vo.TaskCleanDetailVO> cleanDetail(Long id) {
|
com.xiaopeng.maintenance.vo.TaskCleanDetailVO res = new com.xiaopeng.maintenance.vo.TaskCleanDetailVO();
|
XpTask task = this.getById(id);
|
if (task == null){
|
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<XpVehicleClean>()
|
.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<XpTaskRecordVO> queryTaskByVehicleId(XpTaskRecordPageQuery query) {
|
// 1. 构建查询条件
|
LambdaQueryWrapper<XpTask> 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<XpTask> page = new Page<>(query.getPageNum(), query.getPageSize());
|
Page<XpTask> resultPage = this.page(page, wrapper);
|
|
// 3. 转换为 VO 并填充 typeName
|
List<XpTaskRecordVO> records = new ArrayList<>();
|
|
if (!CollectionUtils.isEmpty(resultPage.getRecords())) {
|
// 3.1 收集所有事故任务的 errorType ID
|
Set<Long> 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<Long, String> errorTypeMap = new HashMap<>();
|
if (!errorTypeIds.isEmpty()) {
|
List<XpErrorType> 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<XpTaskRecordVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
|
pageInfo.setRecords(records);
|
pageInfo.setTotal(resultPage.getTotal());
|
return pageInfo;
|
}
|
|
@Override
|
public void deleteTaskById(Long id) {
|
removeById(id);
|
}
|
}
|