liujie
2026-04-03 199b087e97231bc602cd5ed8668f37d6f336dff4
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderEvaluateServiceImpl.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson2.JSONObject;
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.dto.account.UcUserInfo;
import com.xiaopeng.api.feignClient.account.UserResourcesClient;
@@ -54,6 +55,31 @@
    @Override
    public PageInfo<OrderEvaluatePageVO> pageList(OrderEvaluatePageQuery query) {
        List<Long> vehicleIdsFilter = null;
        if (StringUtils.isNotBlank(query.getPlateNumber())) {
            R<List<XpVehicle>> vehicleResult = xpVehicleClient.listByPlateNumber(query.getPlateNumber());
            if (vehicleResult == null || CollectionUtils.isEmpty(vehicleResult.getData())) {
                return buildEmptyEvaluatePage(query);
            }
            vehicleIdsFilter = vehicleResult.getData().stream()
                    .map(XpVehicle::getId)
                    .filter(Objects::nonNull)
                    .distinct()
                    .collect(Collectors.toList());
            if (CollectionUtils.isEmpty(vehicleIdsFilter)) {
                return buildEmptyEvaluatePage(query);
            }
        }
        Long appUserIdFilter = null;
        if (StringUtils.isNotBlank(query.getPhoneNumber())) {
            UcUserInfo userByMobile = userResourcesClient.getUserByMobile(query.getPhoneNumber());
            if (userByMobile == null || userByMobile.getUid() == null) {
                return buildEmptyEvaluatePage(query);
            }
            appUserIdFilter = userByMobile.getUid();
        }
        // 1. 构建查询条件
        LambdaQueryWrapper<XpOrderEvaluate> wrapper = new LambdaQueryWrapper<>();
@@ -70,19 +96,22 @@
        if (Objects.nonNull(query.getOrderRating())) {
            wrapper.eq(XpOrderEvaluate::getOrderRating, query.getOrderRating());
        }
        if (!CollectionUtils.isEmpty(vehicleIdsFilter)) {
            wrapper.in(XpOrderEvaluate::getVehicleId, vehicleIdsFilter);
        }
        if (Objects.nonNull(appUserIdFilter)) {
            wrapper.eq(XpOrderEvaluate::getAppUserId, appUserIdFilter);
        }
        // 排序:按评价时间降序
        wrapper.orderByDesc(XpOrderEvaluate::getEvaluateTime);
        // 2. 分页查询
        PageInfo<XpOrderEvaluate> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        PageInfo<XpOrderEvaluate> evaluatePage = this.page(pageInfo, wrapper);
        Page<XpOrderEvaluate> evaluatePage = this.page(pageInfo, wrapper);
        if (CollectionUtils.isEmpty(evaluatePage.getRecords())) {
            PageInfo<OrderEvaluatePageVO> resultPage = new PageInfo<>(query.getPageNum(), query.getPageSize());
            resultPage.setTotal(0L);
            resultPage.setRecords(new ArrayList<>());
            return resultPage;
            return buildEmptyEvaluatePage(query);
        }
        // 3. 收集关联ID
@@ -107,16 +136,22 @@
        Map<Long, XpVehicle> vehicleMap = batchGetVehicles(vehicleIds);
        Map<Long, XpOrder> orderMap = batchGetOrders(orderIds);
        // 5. 根据查询条件过滤(手机号、车牌号)
        // 5. 组装 VO
        List<OrderEvaluatePageVO> voList = evaluatePage.getRecords().stream()
                .map(evaluate -> convertToPageVO(evaluate, userInfoMap, vehicleMap, orderMap))
                .filter(vo -> filterByQuery(vo, query))
                .collect(Collectors.toList());
        // 6. 返回分页结果
        PageInfo<OrderEvaluatePageVO> resultPage = new PageInfo<>(query.getPageNum(), query.getPageSize());
        resultPage.setTotal(evaluatePage.getTotal());
        resultPage.setRecords(voList);
        return resultPage;
    }
    private PageInfo<OrderEvaluatePageVO> buildEmptyEvaluatePage(OrderEvaluatePageQuery query) {
        PageInfo<OrderEvaluatePageVO> resultPage = new PageInfo<>(query.getPageNum(), query.getPageSize());
        resultPage.setTotal(0L);
        resultPage.setRecords(new ArrayList<>());
        return resultPage;
    }
@@ -225,28 +260,5 @@
        }
        return vo;
    }
    /**
     * 根据查询条件过滤
     */
    private boolean filterByQuery(OrderEvaluatePageVO vo, OrderEvaluatePageQuery query) {
        // 手机号过滤
        if (StringUtils.isNotBlank(query.getPhoneNumber())) {
            if (StringUtils.isBlank(vo.getPhoneNumber()) ||
                    !vo.getPhoneNumber().contains(query.getPhoneNumber())) {
                return false;
            }
        }
        // 车牌号过滤
        if (StringUtils.isNotBlank(query.getPlateNumber())) {
            if (StringUtils.isBlank(vo.getPlateNumber()) ||
                    !vo.getPlateNumber().contains(query.getPlateNumber())) {
                return false;
            }
        }
        return true;
    }
}