zhuml4
2026-03-05 b46d1fa468a64ddccd6061d2ab29ef209b78b08a
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
@@ -102,8 +102,9 @@
     */
    @Scheduled(cron = "0/5 * * * * ?")
    public void taskOrder() {
        System.out.println("5秒执行一次");
        log.info("5秒执行一次");
        Set<String> quoteMatchName = redisService.getQuoteMatchName(CacheConstants.QUEUE_POINT_ID);
        log.info("quoteMatchName:{}", quoteMatchName);
        for (String name : quoteMatchName) {
            String firstElement = redisService.getFirstElement(name);
            if (firstElement != null) {
@@ -128,7 +129,7 @@
     * @param firstElement 队列第一个元素
     */
    private void orderProcess(String quoteName, String firstElement) {
        System.out.println("进入处理环节");
        log.info("进入处理环节 quoteName:{} firstElement:{}", quoteName, firstElement);
        XpTradingStrategy xpTradingStrategy = xpTradingStrategyService.getOne(null);
        String orderId = firstElement.split("_")[0];
        String lonLat = firstElement.split("_")[1];
@@ -211,12 +212,7 @@
        // 最终没找到车
//        redisService.popFirstElement(quoteName);
        // 取消订单
        R<XpOrder> xpOrderR = xpOrderClient.queryOrderById(Long.valueOf(orderId));
        if(xpOrderR.getCode()==200){
            if (xpOrderR.getData().getStatus()==1) {
                xpOrderClient.cancelOrder(orderId);
            }
        }
        xpOrderClient.cancelOrder(orderId);
    }
@@ -232,7 +228,7 @@
     */
    @SneakyThrows
    private void processPushOrder(String quoteName, int count, String uid, String[] split, String orderNo, XpTradingStrategy xpTradingStrategy, String distance, String duration, String planRule) {
        System.out.println("进入推单环环节");
        log.info("进入推单环环节 orderNo: {}, quoteName:{} distance:{} duration:{} planRule:{}", orderNo, quoteName, distance, duration, planRule);
        if (count == 0) {
            count = 1;
        }
@@ -253,13 +249,13 @@
        for (int i = 0; i < count; i++) {
            System.out.println("进入找车环节");
            log.info("进入找车环节 orderNo: {}", orderNo);
            // 根据距离找车
            // 车多则根据配置找具体车数量 根据距离最近
            // 更改 暂不限制数量
            List<VehiclePosition> positionList = vehiclePositionService.findAvailableVehiclesNearby(Double.parseDouble(split[0]), Double.parseDouble(split[1]), xpTradingStrategy.getOnePushDistance(), xpTradingStrategy.getSimultaneouslyOrderCount());
            log.info("根据距离找车 {}", positionList);
            // 获取车辆的区域信息
            if (positionList.isEmpty()) {
                continue;
@@ -268,10 +264,10 @@
            // 获取车辆的信息 筛选出可用车辆
            R<List<String>> vehiclePositionVos = xpVehicleClient.queryVehiclePositionByVin(new VehiclePositionByVinDto(xpElectronicFence.getId(), vinList, xpTradingStrategy.getSimultaneouslyOrderCount()));
            log.info("筛选可用车辆结果 {}", vehiclePositionVos);
            if (vehiclePositionVos.getCode() != 200) {
                continue;
            }
            List<VehiclePositionVo> availableVehiclesNearby = BeanUtil.copyToList(positionList, VehiclePositionVo.class);
            List<String> data = vehiclePositionVos.getData();
@@ -282,7 +278,6 @@
            if (!availableVehiclesNearby.isEmpty()) {
                if (availableVehiclesNearby.size() > 1) {
                    log.info("附近有 {} 辆车,进入权重按断流程", availableVehiclesNearby.size());
                    // 走权重
                    // 订单价值
@@ -765,7 +760,7 @@
                    RLock lock = redissonClient.getLock("FIND_CAR_" + vehiclePositionVo.getVin());
                    lock.lock(10, TimeUnit.SECONDS);
                    System.err.println("队列:" + quoteName + "  车辆:" + vehiclePositionVo.getVin() + "订单" + orderNo);
                    log.error("队列:" + quoteName + "  车辆:" + vehiclePositionVo.getVin() + "订单" + orderNo);
                    try {
//                        VehiclePosition vehiclePosition = vehiclePositionService.findByVehicleId(vehiclePositionVo.getVehicle_id());
                        R<XpVehicle> vehiclePositionR = xpVehicleClient.findByVehicleVin(vehiclePositionVo.getVin());
@@ -773,9 +768,8 @@
                            continue;
                        }
                        XpVehicle vehiclePosition = vehiclePositionR.getData();
                        log.info("符合条件的车辆 {} ,直接推单XPU", vehiclePosition.getPlateNumber());
                        log.info("当前车辆状态 {}", vehiclePosition.getStatus());
                        if (vehiclePosition.getStatus() != 1 || vehiclePosition.getState() != 0 || vehiclePosition.getVehicleType()==1) {
                            lock.unlock();
                            continue;
                        }
                        //  关闭巡游单子
@@ -792,11 +786,9 @@
                        pushOrderDto.setOrderType(OrderType.USER_ORDER);
                        pushOrderDto.setStage(1);
                        // 调用推送服务  orderId + carVin
//                        orderMissionClient.pushOrder(pushOrderDto);
                        log.info("开始推送 {} 订单到XPU", xpOrder.getOrderNumber());
                        orderMissionClient.pushOrder(pushOrderDto);
                        redisService.popFirstElement(quoteName);
                        log.info("将订单 {} 从队列 {} 弹出去", xpOrder.getOrderNumber(), quoteName);
                        return;
                    } catch (Exception e) {
                        e.printStackTrace();
@@ -818,8 +810,6 @@
                            continue;
                        }
                        XpVehicle vehicleId1 = vehicleR.getData();
                        log.info("附近只有一个车辆 {} ,直接推单XPU", vehicleId1.getPlateNumber());
                        log.info("当前车辆状态 {}", vehicleId1.getStatus());
                        if (vehicleId1.getStatus() != 1 || vehicleId1.getState() != 0 || vehicleId1.getVehicleType()==1) {
                            lock.unlock();
                            continue;
@@ -837,10 +827,8 @@
                        pushOrderDto.setOrderType(OrderType.USER_ORDER);
                        pushOrderDto.setStage(1);
                        // 调用推送服务  orderId + carVin
//                        orderMissionClient.pushOrder(pushOrderDto);
                        log.info("开始推送 {} 订单到XPU", xpOrder.getOrderNumber());
                        orderMissionClient.pushOrder(pushOrderDto);
                        redisService.popFirstElement(quoteName);
                        log.info("将订单 {} 从队列 {} 弹出去", xpOrder.getOrderNumber(), quoteName);
                        return;
                    } catch (Exception e) {
@@ -864,7 +852,7 @@
     */
    @SneakyThrows
    public void reassignPushOrder(int count, String uid, Double longitude, Double latitude, String orderNo) {
        System.out.println("进入推单环环节");
        log.info("进入推单环环节 orderNo:{} longitude:{} latitude:{}",  orderNo, longitude, latitude);
        if (count == 0) {
            count = 1;
        }
@@ -879,7 +867,7 @@
        XpOrder data = xpOrderR.getData();
        XpTradingStrategy xpTradingStrategy = xpTradingStrategyService.getOne(null);
        for (int i = 0; i < count; i++) {
            log.info("进入找车环节");
            log.info("进入找车环节 orderNo:{} longitude:{} latitude:{}",  orderNo, longitude, latitude);
            List<VehiclePosition> positionList = vehiclePositionService.findAvailableVehiclesNearby(longitude, latitude, xpTradingStrategy.getOnePushDistance(), xpTradingStrategy.getSimultaneouslyOrderCount());
            // 获取车辆的区域信息