From da398766e67f9a1673032e3215eeea1bea2a3c3c Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期四, 12 二月 2026 16:30:47 +0800
Subject: [PATCH] feat(management):运营车辆管理详情列表接口

---
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleDetectionServiceImpl.java |  101 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 99 insertions(+), 2 deletions(-)

diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleDetectionServiceImpl.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleDetectionServiceImpl.java
index c0f1d86..8e884c9 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleDetectionServiceImpl.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleDetectionServiceImpl.java
@@ -1,19 +1,27 @@
 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.XpVehicleDetection;
-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.XpVehicleDetectionMapper;
+import com.xiaopeng.maintenance.model.query.XpVehicleDetectionPageQuery;
 import com.xiaopeng.maintenance.model.vo.XpVehicleDetectionVO;
 import com.xiaopeng.maintenance.service.IXpVehicleDetectionService;
+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;
 
 /**
  * <p>
@@ -52,4 +60,93 @@
         }
         return xpVehicleDetectionVO;
     }
+
+    @Override
+    public PageInfo<XpVehicleDetectionVO> queryDetectionByVehicleId(XpVehicleDetectionPageQuery 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<XpVehicleDetection> wrapper = new LambdaQueryWrapper<>();
+
+        // 必填条件: 车辆ID
+        wrapper.eq(XpVehicleDetection::getVehicleId, query.getVehicleId());
+
+        // 可选条件: 操作人ID列表
+        if (!CollectionUtils.isEmpty(userIds)) {
+            wrapper.in(XpVehicleDetection::getOperationsUserId, userIds);
+        }
+
+        // 可选条件: 开始时间
+        if (query.getStartTime() != null) {
+            wrapper.ge(XpVehicleDetection::getCreateTime, query.getStartTime().atStartOfDay());
+        }
+
+        // 可选条件: 结束时间
+        if (query.getEndTime() != null) {
+            wrapper.le(XpVehicleDetection::getCreateTime, query.getEndTime().atTime(23, 59, 59));
+        }
+
+        // 排序: 按创建时间倒序
+        wrapper.orderByDesc(XpVehicleDetection::getCreateTime);
+
+        // 3. 执行分页查询
+        Page<XpVehicleDetection> page = new Page<>(query.getPageNum(), query.getPageSize());
+        Page<XpVehicleDetection> resultPage = this.page(page, wrapper);
+
+        // 4. 转换为 VO 并填充操作人姓名
+        List<XpVehicleDetectionVO> records = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(resultPage.getRecords())) {
+            // 提取所有操作人ID
+            List<Long> allUserIds = resultPage.getRecords().stream()
+                    .map(XpVehicleDetection::getOperationsUserId)
+                    .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 (XpVehicleDetection xpVehicleDetection : resultPage.getRecords()) {
+                XpVehicleDetectionVO vo = new XpVehicleDetectionVO();
+                BeanUtils.copyProperties(xpVehicleDetection, vo);
+                vo.setOperationTime(xpVehicleDetection.getCreateTime());
+
+                // 填充操作人姓名
+                if (xpVehicleDetection.getOperationsUserId() != null) {
+                    String userName = userNameMap.get(xpVehicleDetection.getOperationsUserId());
+                    vo.setOperatorStartName(userName);
+                }
+                records.add(vo);
+            }
+        }
+
+        // 5. 构建分页结果
+        PageInfo<XpVehicleDetectionVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
+        pageInfo.setRecords(records);
+        pageInfo.setTotal(resultPage.getTotal());
+
+        return pageInfo;
+    }
 }

--
Gitblit v1.7.1