Pu Zhibing
2025-06-06 b1f2f102034b4433201225b67a9fc78c08e532f0
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -232,8 +232,7 @@
        Driver driver = driverService.selectById(uid);
        orderPrivateCar.setDriverId(uid);
        orderPrivateCar.setCarId(driver.getCarId());
        orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : (
                driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1));
        orderPrivateCar.setCompanyId(driver.getCompanyId());
        orderPrivateCar.setState(2);
        orderPrivateCar.setSnatchOrderTime(new Date());
        if(!StringUtils.hasLength(orderPrivateCar.getTripId())){
@@ -596,6 +595,9 @@
                }
                break;
            case 6://结束服务(专车可以返回继续服务)不修改状态
                if(null == lon || null == lat){
                    return ResultUtil.error(language == 1 ? "无效的经纬度" : language == 2 ? "Invalid longitude and latitude" : "Longitude et latitude non valides");
                }
                orderPrivateCar.setState(6);
                orderPrivateCar.setGetoffLon(lon);
                orderPrivateCar.setGetoffLat(lat);
@@ -674,7 +676,26 @@
            orderPrivateCar.setArriveTime(orderPrivateCar.getStartServiceTime());
        }
        
        //使用原始里程计算费用
        orderPrivateCar = this.setMoney(orderPrivateCar, 0D, 0D);//计算费用
        Double mileage = orderPrivateCar.getMileage();
        Double orderMoney1 = orderPrivateCar.getOrderMoney();
        //使用预估里程计算费用
        Double startLat = orderPrivateCar.getStartLat();
        Double startLon = orderPrivateCar.getStartLon();
        Double getoffLon = orderPrivateCar.getGetoffLon();
        Double getoffLat = orderPrivateCar.getGetoffLat();
        DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(startLat, startLon, getoffLat, getoffLon, orderPrivateCar.getTripId());
        orderPrivateCar.setMileage(distancematrix.getDistance().doubleValue());
        orderPrivateCar = this.setMoney(orderPrivateCar, 0D, 0D);
        Double orderMoney2 = orderPrivateCar.getOrderMoney();
        //如果原始金额小于预估金额,且比例小于95%,则使用预估金额
        if(orderMoney1.compareTo(orderMoney2) >= 0 || orderMoney1 / orderMoney2 >= 0.95){
            //原始金额大于预估金额或者比例大于0.95,则使用原始里程重新计算费用
            orderPrivateCar.setMileage(mileage);
            orderPrivateCar = this.setMoney(orderPrivateCar, 0D, 0D);//计算费用
        }
        orderPrivateCar.setPayManner(type);
        orderPrivateCar.setParkMoney(null == parkingFee ? 0D : parkingFee);
        orderPrivateCar.setRoadTollMoney(null == crossingFee ? 0D : crossingFee);