“mitao”
2026-02-26 d346019191b8b0bcbf7201aa0ba8947901f5cded
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpCruiseOrderServiceImpl.java
@@ -71,6 +71,7 @@
import com.xiaopeng.order.mapper.XpOrderMapper;
import com.xiaopeng.order.model.dto.XpOrderCommentDto;
import com.xiaopeng.order.model.dto.XpOrderPayDto;
import com.xiaopeng.order.model.query.XpCruiseOrderPageQuery;
import com.xiaopeng.order.model.query.XpHistoryOrderListQuery;
import com.xiaopeng.order.model.query.XpOrderPageQuery;
import com.xiaopeng.order.model.vo.*;
@@ -114,6 +115,9 @@
@RequiredArgsConstructor(onConstructor_ = @Lazy)
public class XpCruiseOrderServiceImpl extends ServiceImpl<XpCruiseOrderMapper, XpCruiseOrder> implements IXpCruiseOrderService {
    private final XpVehicleClient xpVehicleClient;
    private final XpFleetVehicleClient xpFleetVehicleClient;
    private final XpFleetClient xpFleetClient;
    /**
     * 关闭当前巡游单子
@@ -142,4 +146,101 @@
        }
        return null;
    }
    @Override
    public PageInfo<XpCruiseOrderPageVO> pageList(XpCruiseOrderPageQuery query) {
        PageInfo<XpCruiseOrderPageVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        LambdaQueryWrapper<XpCruiseOrder> wrapper = new LambdaQueryWrapper<XpCruiseOrder>()
                .eq(XpCruiseOrder::getMissionId, String.valueOf(query.getMissionId()))
                .like(StringUtils.isNotBlank(query.getOrderNumber()), XpCruiseOrder::getOrderNumber, query.getOrderNumber())
                .eq(query.getStatus() != null, XpCruiseOrder::getStatus, query.getStatus());
        if (query.getStartTime() != null) {
            wrapper.ge(BaseModel::getCreateTime, query.getStartTime().atStartOfDay());
        }
        if (query.getEndTime() != null) {
            wrapper.le(BaseModel::getCreateTime, query.getEndTime().plusDays(1).atStartOfDay());
        }
        if (query.getFleetId() != null) {
            R<List<Long>> fleetVehicleResult = xpFleetVehicleClient.listVehicleIdsByFleetId(query.getFleetId());
            if (fleetVehicleResult == null || CollectionUtils.isEmpty(fleetVehicleResult.getData())) {
                pageInfo.setRecords(Collections.emptyList());
                return pageInfo;
            }
            wrapper.in(XpCruiseOrder::getVehicleId, fleetVehicleResult.getData());
        }
        if (StringUtils.isNotBlank(query.getPlateNumber())) {
            R<List<XpVehicle>> vehicleResult = xpVehicleClient.listByPlateNumber(query.getPlateNumber());
            if (vehicleResult == null || CollectionUtils.isEmpty(vehicleResult.getData())) {
                pageInfo.setRecords(Collections.emptyList());
                return pageInfo;
            }
            List<Long> vehicleIds = vehicleResult.getData().stream().map(XpVehicle::getId).collect(Collectors.toList());
            wrapper.in(XpCruiseOrder::getVehicleId, vehicleIds);
        }
        wrapper.orderByDesc(BaseModel::getCreateTime);
        Page<XpCruiseOrder> page = new Page<>(query.getPageNum(), query.getPageSize());
        Page<XpCruiseOrder> pageResult = this.page(page, wrapper);
        if (CollectionUtils.isEmpty(pageResult.getRecords())) {
            pageInfo.setTotal(0L);
            pageInfo.setRecords(Collections.emptyList());
            return pageInfo;
        }
        Set<Long> vehicleIds = pageResult.getRecords().stream()
                .map(XpCruiseOrder::getVehicleId)
                .filter(Objects::nonNull)
                .collect(Collectors.toSet());
        Map<Long, XpVehicle> vehicleMap;
        if (!vehicleIds.isEmpty()) {
            R<List<XpVehicle>> vehicleResult = xpVehicleClient.listByIds(new ArrayList<>(vehicleIds));
            if (vehicleResult != null && !CollectionUtils.isEmpty(vehicleResult.getData())) {
                vehicleMap = vehicleResult.getData().stream().collect(Collectors.toMap(XpVehicle::getId, v -> v));
            } else {
                vehicleMap = Collections.emptyMap();
            }
        } else {
            vehicleMap = Collections.emptyMap();
        }
        Map<Long, Long> vehicleFleetIdMap = new HashMap<>();
        if (!vehicleIds.isEmpty()) {
            for (Long vehicleId : vehicleIds) {
                R<Long> fleetIdResult = xpFleetVehicleClient.getFleetIdByVehicleId(vehicleId);
                if (fleetIdResult != null && fleetIdResult.getData() != null) {
                    vehicleFleetIdMap.put(vehicleId, fleetIdResult.getData());
                }
            }
        }
        Map<Long, String> fleetNameMap;
        if (!vehicleFleetIdMap.isEmpty()) {
            List<Long> fleetIds = vehicleFleetIdMap.values().stream().distinct().collect(Collectors.toList());
            R<List<XpFleet>> fleetResult = xpFleetClient.listByIds(fleetIds);
            if (fleetResult != null && !CollectionUtils.isEmpty(fleetResult.getData())) {
                fleetNameMap = fleetResult.getData().stream()
                        .collect(Collectors.toMap(XpFleet::getId, XpFleet::getFleetName, (a, b) -> a));
            } else {
                fleetNameMap = Collections.emptyMap();
            }
        } else {
            fleetNameMap = Collections.emptyMap();
        }
        List<XpCruiseOrderPageVO> voList = pageResult.getRecords().stream().map(order -> {
            XpCruiseOrderPageVO vo = new XpCruiseOrderPageVO();
            BeanUtils.copyProperties(order, vo);
            XpVehicle vehicle = vehicleMap.get(order.getVehicleId());
            if (vehicle != null) {
                vo.setPlateNumber(vehicle.getPlateNumber());
            }
            Long fleetId = vehicleFleetIdMap.get(order.getVehicleId());
            if (fleetId != null) {
                vo.setFleetName(fleetNameMap.get(fleetId));
            }
            return vo;
        }).collect(Collectors.toList());
        pageInfo.setTotal(pageResult.getTotal());
        pageInfo.setRecords(voList);
        return pageInfo;
    }
}