liujie
2026-03-25 d597b03477f904bc87bc9c3a984f9bfa485a906d
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpCruiseOrderServiceImpl.java
@@ -1,8 +1,11 @@
package com.xiaopeng.order.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
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.google.common.collect.Lists;
import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetClient;
@@ -17,6 +20,7 @@
import com.xiaopeng.common.core.web.domain.BaseModel;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.order.mapper.XpCruiseOrderMapper;
import com.xiaopeng.order.model.query.XpCruiseOrderExcelQuery;
import com.xiaopeng.order.model.query.XpCruiseOrderPageQuery;
import com.xiaopeng.order.model.vo.XpCruiseOrderPageVO;
import com.xiaopeng.order.service.IXpCruiseOrderService;
@@ -52,29 +56,33 @@
     * @param vin
     */
    @Override
    public Long updateCruiseOrder(String vin) {
        LambdaQueryWrapper<XpCruiseOrder> wrapper = new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleVin, vin).eq(XpCruiseOrder::getStatus, 1);
        XpCruiseOrder xpCruiseOrder = this.getOne(wrapper);
        if (xpCruiseOrder != null) {
            xpCruiseOrder.setStatus(2);
            this.update(xpCruiseOrder, wrapper);
            PushOrderDto pushOrderDto = new PushOrderDto();
            pushOrderDto.setVin(vin);
            pushOrderDto.setOrderId("XU" + xpCruiseOrder.getId());
            pushOrderDto.setOperation_type(OrderOperationType.CLOUD_CANCEL_ORDER);
            R<Boolean> booleanR = orderMissionClient.cancelOrder(pushOrderDto);
            if(booleanR==null || !booleanR.getData()){
                log.info("XPU取消巡游订单失败");
                return null;
    public Long cancelCruiseOrderByVin(String vin) {
        LambdaQueryWrapper<XpCruiseOrder> wrapper = new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleVin, vin).in(XpCruiseOrder::getStatus, Arrays.asList(0, 1));
        List<XpCruiseOrder> xpCruiseOrder = this.list(wrapper.orderByDesc(XpCruiseOrder::getCreateTime));
        if (xpCruiseOrder != null && !xpCruiseOrder.isEmpty()) {
            xpCruiseOrder.forEach(s->{
                s.setStatus(2);
                s.setVehicleId(null);
            });
            this.updateBatchById(xpCruiseOrder);
            for (XpCruiseOrder cruiseOrder : xpCruiseOrder) {
                PushOrderDto pushOrderDto = new PushOrderDto();
                pushOrderDto.setVin(vin);
                pushOrderDto.setOrderId("XU" + cruiseOrder.getId());
                pushOrderDto.setOperation_type(OrderOperationType.CLOUD_CANCEL_ORDER);
                R<Boolean> booleanR = orderMissionClient.cancelOrder(pushOrderDto);
                if(booleanR==null || !booleanR.getData()){
                    log.info("XPU取消巡游订单失败");
                }
            }
            return xpCruiseOrder.getId();
            return xpCruiseOrder.get(0).getId();
        }
        return null;
    }
    @Override
    public R updateCruiseOrderId(Long orderId) {
    public R cancelCruiseOrderById(Long orderId) {
        XpCruiseOrder xpCruiseOrder = this.getById(orderId);
        if (xpCruiseOrder != null) {
            xpCruiseOrder.setStatus(2);
@@ -95,15 +103,13 @@
    }
    @Override
    public Long closeCruiseOrder(String vin) {
        LambdaQueryWrapper<XpCruiseOrder> wrapper = new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleVin, vin).eq(XpCruiseOrder::getStatus, 1);
        XpCruiseOrder xpCruiseOrder = this.getOne(wrapper);
    public void completeCruiseOrder(Long id) {
        XpCruiseOrder xpCruiseOrder = this.getById(id);
        if (xpCruiseOrder != null) {
            xpCruiseOrder.setStatus(3);
            this.update(xpCruiseOrder, wrapper);
            return xpCruiseOrder.getId();
            xpCruiseOrder.setVehicleId(null);
            this.updateById(xpCruiseOrder);
        }
        return null;
    }
@@ -222,4 +228,133 @@
        pageInfo.setRecords(voList);
        return pageInfo;
    }
    @Override
    public List<XpCruiseOrderPageVO> getExportList(XpCruiseOrderExcelQuery query) {
        LambdaQueryWrapper<XpCruiseOrder> wrapper = new LambdaQueryWrapper<XpCruiseOrder>()
                .eq(XpCruiseOrder::getMissionId, String.valueOf(query.getMissionId()))
                .like(Objects.nonNull(query.getId()), XpCruiseOrder::getId, query.getId())
                .eq(query.getStatus() != null, XpCruiseOrder::getStatus, query.getStatus())
                .eq(Objects.nonNull(query.getFleetId()), XpCruiseOrder::getFleetId, query.getFleetId());
        if (query.getStartTime() != null) {
            wrapper.ge(BaseModel::getCreateTime, query.getStartTime().atStartOfDay());
        }
        if (query.getEndTime() != null) {
            wrapper.le(BaseModel::getCreateTime, query.getEndTime().plusDays(1).atStartOfDay());
        }
        //使用订单中的车队ID进行查询
        // 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())) {
                return Collections.emptyList();
            }
            List<Long> vehicleIds = vehicleResult.getData().stream().map(XpVehicle::getId).collect(Collectors.toList());
            wrapper.in(XpCruiseOrder::getVehicleId, vehicleIds);
        }
        if (!CollectionUtils.isEmpty(query.getIds())) {
            wrapper.in(XpCruiseOrder::getId, query.getIds());
        }
        wrapper.orderByDesc(XpCruiseOrder::getCreateTime);
        List<XpCruiseOrder> resultList = this.list(wrapper);
        if (CollectionUtils.isEmpty(resultList)) {
            return Collections.emptyList();
        }
        Set<Long> vehicleIds = resultList.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();
        // }
        Map<Long, String> fleetNameMap;
        Set<Long> fleetIds = resultList.stream()
                .map(XpCruiseOrder::getFleetId)
                .filter(Objects::nonNull)
                .collect(Collectors.toSet());
        if (!fleetIds.isEmpty()) {
            R<List<XpFleet>> fleetResult = xpFleetClient.listByIds(new ArrayList<>(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 = resultList.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());
            Long fleetId = order.getFleetId();
            if (fleetId != null) {
                vo.setFleetName(fleetNameMap.get(fleetId));
            }
            return vo;
        }).collect(Collectors.toList());
        return voList;
    }
    @Override
    public XpCruiseOrderPageVO getDetailById(Long id) {
        XpCruiseOrder cruiseOrder = getById(id);
        XpCruiseOrderPageVO xpCruiseOrderPageVO = BeanUtil.copyProperties(cruiseOrder, XpCruiseOrderPageVO.class);
        if (Objects.isNull(xpCruiseOrderPageVO)) {
            return new XpCruiseOrderPageVO();
        }
        XpVehicle vehicle = xpVehicleClient.queryById(cruiseOrder.getVehicleId()).getData();
        if (Objects.nonNull(vehicle)) {
            xpCruiseOrderPageVO.setPlateNumber(vehicle.getPlateNumber());
        }
        List<XpFleet> data = xpFleetClient.listByIds(Lists.newArrayList(cruiseOrder.getFleetId())).getData();
        if (CollUtil.isNotEmpty(data)) {
            XpFleet xpFleet = data.get(0);
            xpCruiseOrderPageVO.setFleetName(xpFleet.getFleetName());
        }
        return xpCruiseOrderPageVO;
    }
}