From 55ac5e29404dd2e74c77a604a63e4dd991a38bb0 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期四, 12 二月 2026 16:43:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpChargingRecordServiceImpl.java | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 106 insertions(+), 1 deletions(-)
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpChargingRecordServiceImpl.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpChargingRecordServiceImpl.java
index bc92f56..79f3ee0 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpChargingRecordServiceImpl.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpChargingRecordServiceImpl.java
@@ -1,22 +1,31 @@
package com.xiaopeng.maintenance.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.XpChargingRecord;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
+import com.xiaopeng.maintenance.model.query.XpChargingRecordPageQuery;
+import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.maintenance.dto.XpChargingRecordStartDTO;
import com.xiaopeng.maintenance.dto.XpChargingRecordStopDTO;
import com.xiaopeng.maintenance.mapper.XpChargingRecordMapper;
import com.xiaopeng.maintenance.model.vo.XpChargingRecordVO;
import com.xiaopeng.maintenance.service.IXpChargingRecordService;
+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.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
/**
* <p>
@@ -81,4 +90,100 @@
}
return xpChargingRecordVO;
}
+
+ @Override
+ public PageInfo<XpChargingRecordVO> queryChargingByVehicleId(XpChargingRecordPageQuery query) {
+ // 1. 如果有操作人姓名过滤条件,先查询符合条件的用户ID列表
+ List<Long> userIds = null;
+ if (StringUtils.isNotBlank(query.getOperationsUserName())) {
+ R<List<XpOperationsUser>> userResult = xpOperationUserClient.listByName(query.getOperationsUserName());
+ 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<XpChargingRecord> wrapper = new LambdaQueryWrapper<>();
+
+ // 必填条件: 车辆ID
+ wrapper.eq(XpChargingRecord::getVehicleId, query.getVehicleId());
+
+ // 可选条件: 操作人ID列表
+ if (!CollectionUtils.isEmpty(userIds)) {
+ wrapper.in(XpChargingRecord::getStartOperationsUserId, userIds);
+ }
+
+ // 可选条件: 开始时间
+ if (query.getStartTime() != null) {
+ wrapper.ge(XpChargingRecord::getCreateTime, query.getStartTime().atStartOfDay());
+ }
+
+ // 可选条件: 结束时间
+ if (query.getEndTime() != null) {
+ wrapper.le(XpChargingRecord::getCreateTime, query.getEndTime().atTime(23, 59, 59));
+ }
+
+ // 排序: 按创建时间倒序
+ wrapper.orderByDesc(XpChargingRecord::getCreateTime);
+
+ // 3. 执行分页查询
+ Page<XpChargingRecord> page = new Page<>(query.getPageNum(), query.getPageSize());
+ Page<XpChargingRecord> resultPage = this.page(page, wrapper);
+
+ // 4. 转换为 VO 并填充操作人姓名
+ List<XpChargingRecordVO> records = new ArrayList<>();
+ if (!CollectionUtils.isEmpty(resultPage.getRecords())) {
+ // 提取所有操作人ID
+ List<Long> allUserIds = resultPage.getRecords().stream()
+ .flatMap(record -> Stream.of(
+ record.getStartOperationsUserId(),
+ record.getEndOperationsUserId()
+ ))
+ .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 (XpChargingRecord chargingRecord : resultPage.getRecords()) {
+ XpChargingRecordVO vo = new XpChargingRecordVO();
+ BeanUtils.copyProperties(chargingRecord, vo);
+ vo.setOperationTime(chargingRecord.getCreateTime());
+
+ // 填充操作人姓名
+ if (chargingRecord.getStartOperationsUserId() != null) {
+ String userName = userNameMap.get(chargingRecord.getStartOperationsUserId());
+ vo.setOperatorStartName(userName);
+ }
+ if (chargingRecord.getEndOperationsUserId() != null) {
+ String userName = userNameMap.get(chargingRecord.getEndOperationsUserId());
+ vo.setOperatorEndName(userName);
+ }
+ records.add(vo);
+ }
+ }
+
+ // 5. 构建分页结果
+ PageInfo<XpChargingRecordVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
+ pageInfo.setRecords(records);
+ pageInfo.setTotal(resultPage.getTotal());
+ return pageInfo;
+ }
}
--
Gitblit v1.7.1