xuhy
2026-04-15 406ae5451ecde0b4b40a9ecfee07f2171fda80bc
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
@@ -2,11 +2,13 @@
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson2.JSON;
import com.xiaopeng.api.dto.account.UseUserCouponDto;
import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
import com.xiaopeng.api.dto.map.RouteAndFareDto;
import com.xiaopeng.api.dto.operation.LonLatDto;
import com.xiaopeng.api.dto.operation.VehiclePositionByVinDto;
import com.xiaopeng.api.dto.pushMessage.SendMessageDTO;
import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient;
import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient;
import com.xiaopeng.api.feignClient.map.XpMapClient;
import com.xiaopeng.api.feignClient.order.XpCruiseOrderClient;
@@ -24,6 +26,7 @@
import com.xiaopeng.common.core.constant.CacheConstants;
import com.xiaopeng.common.core.constant.Constants;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.enums.OrderStatusEnum;
import com.xiaopeng.common.redis.service.RedisService;
import com.xiaopeng.operation.mapper.XpElectronicFenceMapper;
import com.xiaopeng.operation.service.IXpElectronicFenceAreaService;
@@ -97,6 +100,8 @@
    @Resource
    private UidVinPriorityMatcher uidVinPriorityMatcher;
    @Resource
    private  XpAppUserCouponClient xpAppUserCouponClient;
    // 自定义线程池
@@ -1106,6 +1111,8 @@
        }
        XpOrder data = xpOrderR.getData();
        XpTradingStrategy xpTradingStrategy = xpTradingStrategyService.getOne(null);
        boolean orderCarStatus = false;//未派到车 默认
        //循环找车
        for (int i = 0; i < count; i++) {
            log.info("进入找车环节");
            List<VehiclePosition> positionList = vehiclePositionService.findAvailableVehiclesNearby(longitude, latitude, xpTradingStrategy.getOnePushDistance(), xpTradingStrategy.getSimultaneouslyOrderCount());
@@ -1152,12 +1159,29 @@
                // 调用推送服务  orderId + carVin
                orderMissionClient.pushOrder(pushOrderDto);
                //接单成功 将 修改 订单的状态=1 ( 状态 0=已取消,1=待接单,2=待出发,3=接驾中,4=待客上车,5=乘客已上车,6=服务中,7=待客下车,8=待付款,9=待评价,10=已完成)
                orderCarStatus = true;
                xpOrderClient.updateOrderStatus(data.getId(), OrderStatusEnum.PENDING_ORDER.getCode());
                redisService.setCacheObject("ORDER_STATUS:" + data.getId(), OrderStatusEnum.PENDING_ORDER.getCode(), 24L, TimeUnit.HOURS);
            } catch (Exception e) {
                throw new RuntimeException(e);
            } finally {
                lock.unlock();
            }
        }
        //未找到车 系统强制取消订单,状态流转至“系统自动取消”。 自动退回优惠卷
        if(!orderCarStatus){
            xpOrderClient.updateOrderStatus(data.getId(),OrderStatusEnum.CANCELED.getCode());
            redisService.setCacheObject("ORDER_STATUS:" + data.getId(), OrderStatusEnum.CANCELED.getCode(), 24L, TimeUnit.HOURS);
            //有优惠卷 自动退回优惠卷
            if(data.getCouponId() != null ){
                UseUserCouponDto useUserCouponDto = new UseUserCouponDto();
                useUserCouponDto.setUserCouponId(data.getCouponId() );
                xpAppUserCouponClient.backUserCoupon(useUserCouponDto);
            }
        }
    }