| | |
| | | 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.XpVehicleRepair; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; |
| | | import com.xiaopeng.common.core.domain.R; |
| | | import com.xiaopeng.common.core.web.page.PageInfo; |
| | | import com.xiaopeng.maintenance.mapper.XpVehicleRepairMapper; |
| | | import com.xiaopeng.maintenance.model.query.XpVehicleRepairPageQuery; |
| | | import com.xiaopeng.maintenance.model.vo.XpVehicleRepairVO; |
| | | import com.xiaopeng.maintenance.service.IXpVehicleRepairService; |
| | | 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.util.Objects; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | import java.util.stream.Stream; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | } |
| | | return xpVehicleRepairVO; |
| | | } |
| | | |
| | | @Override |
| | | public PageInfo<XpVehicleRepairVO> queryDetectionByVehicleId(XpVehicleRepairPageQuery query) { |
| | | // 1. 如果有操作人姓名过滤条件,先查询符合条件的用户ID列表 |
| | | List<Long> userIds = null; |
| | | if (StringUtils.isNotBlank(query.getSendUserName())) { |
| | | R<List<XpOperationsUser>> userResult = xpOperationUserClient.listByName(query.getSendUserName()); |
| | | List<XpOperationsUser> users = userResult.getData(); |
| | | |
| | | // 如果没有匹配的用户,直接返回空结果 |
| | | if (CollectionUtils.isEmpty(users)) { |
| | | return new PageInfo<>(query.getPageNum(), query.getPageSize()); |
| | | } |
| | | |
| | | // 提取用户ID列表 |
| | | userIds = users.stream() |
| | | .map(XpOperationsUser::getId) |
| | | .collect(Collectors.toList()); |
| | | } |
| | | |
| | | // 2. 使用 MyBatis-Plus Lambda 语法构建查询条件 |
| | | LambdaQueryWrapper<XpVehicleRepair> wrapper = new LambdaQueryWrapper<>(); |
| | | |
| | | // 必填条件: 车辆ID |
| | | wrapper.eq(XpVehicleRepair::getVehicleId, query.getVehicleId()); |
| | | |
| | | // 可选条件: 操作人ID列表 |
| | | if (!CollectionUtils.isEmpty(userIds)) { |
| | | wrapper.in(XpVehicleRepair::getSendUserId, userIds); |
| | | } |
| | | |
| | | // 可选条件: 开始时间 |
| | | if (query.getStartTime() != null) { |
| | | wrapper.ge(XpVehicleRepair::getCreateTime, query.getStartTime().atStartOfDay()); |
| | | } |
| | | |
| | | // 可选条件: 结束时间 |
| | | if (query.getEndTime() != null) { |
| | | wrapper.le(XpVehicleRepair::getCreateTime, query.getEndTime().atTime(23, 59, 59)); |
| | | } |
| | | // 可选条件: 维修原因 |
| | | if (query.getRepairReason() != null) { |
| | | wrapper.like(XpVehicleRepair::getRepairReason, query.getRepairReason()); |
| | | } |
| | | // 排序: 按创建时间倒序 |
| | | wrapper.orderByDesc(XpVehicleRepair::getCreateTime); |
| | | |
| | | // 3. 执行分页查询 |
| | | Page<XpVehicleRepair> page = new Page<>(query.getPageNum(), query.getPageSize()); |
| | | Page<XpVehicleRepair> resultPage = this.page(page, wrapper); |
| | | |
| | | // 4. 转换为 VO 并填充操作人姓名 |
| | | List<XpVehicleRepairVO> records = new ArrayList<>(); |
| | | if (!CollectionUtils.isEmpty(resultPage.getRecords())) { |
| | | // 提取所有操作人ID |
| | | List<Long> allUserIds = resultPage.getRecords().stream() |
| | | .flatMap(record -> Stream.of( |
| | | record.getSendUserId(), |
| | | record.getReturnUserId() |
| | | )) |
| | | .filter(Objects::nonNull) |
| | | .distinct() |
| | | .collect(Collectors.toList()); |
| | | // 批量查询操作人信息 |
| | | Map<Long, String> userNameMap = new HashMap<>(); |
| | | if (!CollectionUtils.isEmpty(allUserIds)) { |
| | | R<List<XpOperationsUser>> userResult = xpOperationUserClient.listByIds(allUserIds); |
| | | List<XpOperationsUser> users = userResult.getData(); |
| | | if (!CollectionUtils.isEmpty(users)) { |
| | | userNameMap = users.stream() |
| | | .collect(Collectors.toMap(XpOperationsUser::getId, XpOperationsUser::getNickName)); |
| | | } |
| | | } |
| | | |
| | | // 转换并填充数据 |
| | | for (XpVehicleRepair chargingRecord : resultPage.getRecords()) { |
| | | XpVehicleRepairVO vo = new XpVehicleRepairVO(); |
| | | BeanUtils.copyProperties(chargingRecord, vo); |
| | | vo.setOperationTime(chargingRecord.getCreateTime()); |
| | | |
| | | // 填充操作人姓名 |
| | | if (chargingRecord.getSendUserId() != null) { |
| | | String userName = userNameMap.get(chargingRecord.getSendUserId()); |
| | | vo.setOperatorStartName(userName); |
| | | } |
| | | if (chargingRecord.getReturnUserId() != null) { |
| | | String userName = userNameMap.get(chargingRecord.getReturnUserId()); |
| | | vo.setOperatorEndName(userName); |
| | | } |
| | | records.add(vo); |
| | | } |
| | | } |
| | | |
| | | // 5. 构建分页结果 |
| | | PageInfo<XpVehicleRepairVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); |
| | | pageInfo.setRecords(records); |
| | | pageInfo.setTotal(resultPage.getTotal()); |
| | | |
| | | return pageInfo; |
| | | } |
| | | } |