puzhibing
2026-04-17 f20da867145561eeabe3427de5ab9abac06bcdd1
修改连环派的推单逻辑
1个文件已添加
1个文件已修改
85 ■■■■■ 已修改文件
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/job/jobs/PushChainReactionOrderJob.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/job/jobs/PushChainReactionOrderJob.java
New file
@@ -0,0 +1,66 @@
package com.xiaopeng.order.job.jobs;
import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
import com.xiaopeng.api.model.order.XpOrder;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.vo.OrderType;
import com.xiaopeng.api.vo.vehicleConvoy.AddTaxiPassengerVo;
import com.xiaopeng.api.vo.vehicleConvoy.CancelTaxiPassengerVo;
import com.xiaopeng.order.job.base.AbstractJob;
import lombok.extern.slf4j.Slf4j;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
 * 连环单推送
 * @author Administrator
 *
 */
@Slf4j
public class PushChainReactionOrderJob extends AbstractJob {
    public static final String name = "pushChainReactionOrder_";
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        JobDataMap maps = context.getMergedJobDataMap();
        Long orderId = maps.getLong("id");
        String appid = maps.getString("appid");
        XpOrder xpOrder = xpOrderService.getById(orderId);
        // 解绑用户与车辆关系
        CancelTaxiPassengerVo cancelTaxiPassengerVo = new CancelTaxiPassengerVo();
        XpVehicle vehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData();
        if (vehicle != null) {
            cancelTaxiPassengerVo.setVin(vehicle.getVehicleVin());
            cancelTaxiPassengerVo.setUid(xpOrder.getAppUserId().toString());
            cancelTaxiPassengerVo.setOrderNo(xpOrder.getOrderNumber());
            cancelTaxiPassengerVo.setAppId(appid);
            userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo);
            log.info("车辆到达终点后的定时任务解绑用户和车辆关系 {}", xpOrder.getOrderNumber());
            //开始添加新的车辆用户绑定关系
            AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo();
            addTaxiPassengerVo.setVin(vehicle.getVehicleVin());
            addTaxiPassengerVo.setUid(xpOrder.getAppUserId().toString());
            addTaxiPassengerVo.setOrderNo(xpOrder.getOrderNumber());
            addTaxiPassengerVo.setAppId(appid);
            userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
            log.info("完成连环单用户车辆绑定关系 {}", xpOrder.getOrderNumber());
            //开始将新订单推送给车端
            PushOrderDto pushOrderDto = new PushOrderDto();
            pushOrderDto.setOrderId(xpOrder.getId().toString());
            pushOrderDto.setStartLatitude(xpOrder.getStartLat());
            pushOrderDto.setStartLongitude(xpOrder.getStartLon());
            pushOrderDto.setEndLatitude(xpOrder.getEndLat());
            pushOrderDto.setEndLongitude(xpOrder.getEndLon());
            pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
            pushOrderDto.setOrderType(OrderType.USER_ORDER);
            pushOrderDto.setStage(1);
            pushOrderDto.setVin(vehicle.getVehicleVin());
            orderMissionClient.pushOrder(pushOrderDto);
            log.info("完成连环单推送给车端 {}", xpOrder.getOrderNumber());
        }
    }
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -73,6 +73,7 @@
import com.xiaopeng.order.job.jobs.AddCruiseMissionJob;
import com.xiaopeng.order.job.jobs.EndTripJob;
import com.xiaopeng.order.job.jobs.OrderCancelJob;
import com.xiaopeng.order.job.jobs.PushChainReactionOrderJob;
import com.xiaopeng.order.mangodb.model.OrderTrajectory;
import com.xiaopeng.order.mangodb.service.OrderTrajectoryService;
import com.xiaopeng.order.mapper.XpCruiseOrderMapper;
@@ -1921,24 +1922,12 @@
                                .put("orderType", OrderType.USER_ORDER)
                                .build();
                //判断是否有连环单
                Long id = redisService.getCacheObject(CacheConstants.nextOrder(xpOrder.getId().toString()));
                if(id != null){
                    XpOrder nextOrder = getById(id);
                    XpVehicle nextVehicle = xpVehicleClient.queryById(nextOrder.getVehicleId()).getData();
                    PushOrderDto pushOrderDto = new PushOrderDto();
                    pushOrderDto.setOrderId(nextOrder.getId().toString());
                    pushOrderDto.setStartLatitude(nextOrder.getStartLat());
                    pushOrderDto.setStartLongitude(nextOrder.getStartLon());
                    pushOrderDto.setEndLatitude(nextOrder.getEndLat());
                    pushOrderDto.setEndLongitude(nextOrder.getEndLon());
                    pushOrderDto.setEndPoiName(nextOrder.getEndPointName());
                    pushOrderDto.setOrderType(OrderType.USER_ORDER);
                    pushOrderDto.setStage(1);
                    pushOrderDto.setVin(nextVehicle.getVehicleVin());
                    orderMissionClient.pushOrder(pushOrderDto);
                    QuartzManager.addJob(
                            AddCruiseMissionJob.class,
                            (AddCruiseMissionJob.name + nextOrder.getId()).toUpperCase(),
                            PushChainReactionOrderJob.class,
                            (PushChainReactionOrderJob.name + id).toUpperCase(),
                            TimeJobType.ADD_CRUISE_MISSION,
                            DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(point.getParkingTimeLimit())),
                            jobMaps