puzhibing
2026-04-17 547a4a0b1d130c6d2fb854b31a15e2bf7e75c811
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -318,7 +318,7 @@
            XpVehicle vehicle = vehicleMap.get(order.getVehicleId());
            if (Objects.nonNull(vehicle)) {
                vo.setPlateNumber(vehicle.getPlateNumber());
                vo.setVehicleModel(vehicle.getVehicleModel());
                vo.setVehicleModel(vehicle.getVehicleModelName());
            }
        }
@@ -607,7 +607,7 @@
        if (Objects.nonNull(order.getVehicleId()) && vehicleMap.containsKey(order.getVehicleId())) {
            XpVehicle vehicle = vehicleMap.get(order.getVehicleId());
            vo.setPlateNumber(vehicle.getPlateNumber());
            vo.setVehicleModel(vehicle.getVehicleModel());
            vo.setVehicleModel(vehicle.getVehicleModelName());
        }
        // 车队信息
@@ -3465,7 +3465,7 @@
            R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(xpOrder.getVehicleId());
            XpVehicle vehicle = xpVehicleR.getData();
            xpOrderDetailVO.setVehicleVin(vehicle.getVehicleVin());
            xpOrderDetailVO.setVehicleModel(vehicle.getVehicleModel());
            xpOrderDetailVO.setVehicleModel(vehicle.getVehicleModelName());
            xpOrderDetailVO.setVehicleColor(vehicle.getVehicleColor());
            xpOrderDetailVO.setPlateNumber(vehicle.getPlateNumber());
            xpOrderDetailVO.setVehiclePictures(vehicle.getVehiclePictures());
@@ -3493,7 +3493,7 @@
            R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(xpOrder.getVehicleId());
            XpVehicle vehicle = xpVehicleR.getData();
            xpOrderDetailVO.setVehicleVin(vehicle.getVehicleVin());
            xpOrderDetailVO.setVehicleModel(vehicle.getVehicleModel());
            xpOrderDetailVO.setVehicleModel(vehicle.getVehicleModelName());
            xpOrderDetailVO.setVehicleColor(vehicle.getVehicleColor());
            xpOrderDetailVO.setPlateNumber(vehicle.getPlateNumber());
@@ -3513,21 +3513,28 @@
     */
    private boolean isCancelShow(XpOrder xpOrder,String vehicleVin) {
        boolean isCancel = false;
        //获取系统配置
        XpSystemSetting systemSetting = xpSystemSettingClient.getSystemSettingOne().getData();
        if(systemSetting == null){
            throw new ServiceException("获取行程配置错误");
        }
        //获取配置文件
        int sylc = 800;//单位米 todo yyy 需要读取后台配置文件
        int sysj = 5;//单位分钟 todo yyy 需要读取后台配置文件
        int sylc = systemSetting.getXczSyDistance();  // 行程中剩余里程单位米  需要读取后台配置文件
        int sysj = systemSetting.getXczSyTime();//行程中剩余时间 单位分钟  需要读取后台配置文件
        // 减少3分钟 获取3分账内的 行程数据
        long minute =3;//todo yyy 需要读取后台配置文件
        Integer xczSpeedPerHour = systemSetting.getXczHmSpeedPerHour();//行程中豁免时速 km/h
        Integer xczHmDuration = systemSetting.getXczHmDuration();//行程中豁免持续时间 分钟  需要读取后台配置文件
        List<OrderTrajectory> orderTrajectories = queryOrderTrajectories(xpOrder.getId());
        if(!orderTrajectories.isEmpty()){// 减少3分钟 获取3分账内的 行程数据
            //3千米/小时 转换成分钟 50米/分钟
            BigDecimal suduDefault = new BigDecimal("3");//3千米/小时
            BigDecimal suduDefault = new BigDecimal(xczSpeedPerHour);//3千米/小时
            BigDecimal suduDefault1 = suduDefault.multiply(BigDecimal.valueOf(1000)) ;
            BigDecimal suduDefaultNew =suduDefault1.divide(BigDecimal.valueOf(60),2,RoundingMode.HALF_EVEN);
            LocalDateTime minutesBefore = LocalDateTime.now().minusMinutes(minute);
            LocalDateTime minutesBefore = LocalDateTime.now().minusMinutes(xczHmDuration);
            long milliseconds = DateUtils.getMilliseconds(minutesBefore);
            List<OrderTrajectory> orderTrajectoriesNew = new ArrayList<>();
            for (OrderTrajectory orderTrajectory : orderTrajectories) {
@@ -3540,7 +3547,7 @@
             */
            //计算行驶总距离和时长
            Double reduce = orderTrajectoriesNew.stream().map(OrderTrajectory::getDistance).reduce(0.0, Double::sum);
            BigDecimal xcsudu = new BigDecimal(reduce).divide(new BigDecimal(minute),2, RoundingMode.HALF_EVEN);//米/分钟
            BigDecimal xcsudu = new BigDecimal(reduce).divide(new BigDecimal(xczHmDuration),2, RoundingMode.HALF_EVEN);//米/分钟
            //特殊豁免:若系统检测到车辆在当前坐标时速 < 3km/h 且持续时间 > 3分钟(后台配置)(判定为极度拥堵或异常停滞),此时解除限制,允许用户修改目的地或新增途径点以寻找更近的下车位置。
            if(xcsudu.compareTo(suduDefaultNew)<0){