puzhibing
2023-06-23 85fefef6c862c543117ad8d2691817bfeae69f41
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
@@ -34,7 +34,6 @@
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@@ -110,8 +109,6 @@
    @Value("${callbackPath}")
    private String callbackPath;//支付回调网关地址
    private Map<String, Timer> timerMap = new HashMap<>();
@@ -196,14 +193,16 @@
                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
            city = null != weatherCity ? weatherCity.getId().toString() : "";
        }
        order.setCreateTime(new Date());
        order = getOrderPrice(1, d, 0, order, city);
        order.setState(null == order.getDriverId() ? 101 : 102);
        order.setStatus(1);
        order.setCreateTime(new Date());
        this.insert(order);
        driverService.updateById(driver);
        //推送状态
        if(null != order.getDriverId()){
            //推动订单数据
            redisUtil.addSetValue("orderService", order.getId().toString());
            pushUtil.pushOrderStatus(uid, 2, order.getId(), order.getStatus());
        }else{
            //开始推单
@@ -211,7 +210,7 @@
            new Thread(new Runnable() {
                @Override
                public void run() {
                    pushOrder(finalOrder);
                    pushOrder(finalOrder.getId());
                }
            }).start();
        }
@@ -230,6 +229,7 @@
     */
    public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city){
        distance = new BigDecimal(distance).setScale(0, BigDecimal.ROUND_UP).doubleValue();
        waitTime = new BigDecimal(waitTime).setScale(0, BigDecimal.ROUND_UP).intValue();
        order = getOrderInitialPrice(order);
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5));
        if(null == systemConfig){
@@ -244,7 +244,7 @@
        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
        JSONArray chargeStandard = jsonObject.getJSONArray("ChargeStandard");
        JSONObject extraCost = jsonObject.getJSONObject("ExtraCost");
        Date date = new Date();
        Date date = order.getCreateTime();
        for (int i = 0; i < chargeStandard.size(); i++) {
            JSONObject jsonObject1 = chargeStandard.getJSONObject(i);
            String num1 = jsonObject1.getString("num1");
@@ -332,12 +332,12 @@
        Double num9 = extraCost.getDouble("num9");//恶劣天气最高收取金额
        //等待费用
        if(waitTime.compareTo(num1) >= 0){
        if(waitTime.compareTo(num1 * 60) >= 0){
            order.setWaitTime(num1);//等待时长
            order.setWaitTimePrice(num2);//等待费用
            Integer w = waitTime - num3;
            BigDecimal multiply = new BigDecimal(w).multiply(new BigDecimal(num4));
            Integer w = waitTime - (num3 * 60);
            BigDecimal multiply = new BigDecimal(w).divide(new BigDecimal(60), 0, RoundingMode.UP).multiply(new BigDecimal(num4));
            order.setOutWaitTime(w);//等待时长超出分钟
            order.setOutWaitTimePrice(multiply.doubleValue());//等待时长超出费用
        }
@@ -425,10 +425,17 @@
    /**
     * 订单推送逻辑
     * @param order
     */
    public void pushOrder(Order order){
    public void pushOrder(Long orderId){
        try {
            Order order = this.selectById(orderId);
            /**
             * 1.先找最大推单范围内的优推司机 -》 距离最近
             * 没有1 - 》
             *      2.按照后台推送配置在范围内查找合适司机
             *        合适司:积分 > 评分 > 距离
             *      3.司机没有接单直接将订单置入大厅
             */
            boolean lock = redisUtil.lock(5);
            if(!lock){
                int num1 = 1;
@@ -442,13 +449,12 @@
                    }
                }
            }
            /**
             * 1.先找最大推单范围内的优推司机 -》 距离最近
             * 没有1 - 》
             *      2.按照后台推送配置在范围内查找合适司机
             *        合适司:积分 > 评分 > 距离
             *      3.司机没有接单直接将订单置入大厅
             */
            if(!lock){
                order.setHallOrder(1);
                this.updateById(order);
                ExtraPushOrder(order);
                redisUtil.unlock();
            }
            SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1));
            if(null == systemConfig){
                redisUtil.unlock();
@@ -476,14 +482,18 @@
            YouTuiDriver youTuiDriver1 = null;
            if(driverIds.size() > 0){
                List<YouTuiDriver> youTuiDrivers = youTuiDriverService.selectList(new EntityWrapper<YouTuiDriver>().in("driverId", driverIds)
                        .eq("state", 2).last(" and (surplusQuantity > 0 or now() < endTime) and now() < failureTime"));
                        .eq("state", 2).last(" and surplusQuantity > 0 and now() < endTime and now() < failureTime"));
                Double d = null;
                for (YouTuiDriver youTuiDriver : youTuiDrivers) {
                    String value = redisUtil.getValue("DRIVER" + youTuiDriver.getDriverId());
                    if(ToolUtil.isEmpty(value)){
                        continue;
                    }
                    DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", youTuiDriver.getDriverId()).eq("status", 1));
                    Driver driver1 = driverService.selectById(youTuiDriver.getDriverId());
                    if(driver1.getServerStatus() == 2 || driver1.getOpenOrderQRCode() == 1){
                        continue;
                    }
                    DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driver1.getId()).eq("status", 1));
                    if(null == driverWork){
                        continue;
                    }
@@ -496,7 +506,6 @@
                    }
                }
            }
            if(null != youTuiDriver1 && youTuiDriver1.getType() == 1){
                youTuiDriver1.setSurplusQuantity(youTuiDriver1.getSurplusQuantity() - 1);
                youTuiDriverService.updateById(youTuiDriver1);
@@ -519,13 +528,14 @@
                    driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList());
                    if(driverIds.size() > 0){
                        List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().eq("approvalStatus", 2).eq("serverStatus", 1).eq("status", 1).in("id", driverIds));
                        List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().eq("approvalStatus", 2)
                                .eq("serverStatus", 1).eq("openOrderQRCode", 0).eq("status", 1).in("id", driverIds));
                        if(drivers.size() == 0){
                            continue;
                        }
                        Integer integral = null;
                        Double score = null;
                        Integer integral = null;//积分
                        Double score = null;//评分
                        Double d = null;
                        for (Driver driver1 : drivers) {
                            String value = redisUtil.getValue("DRIVER" + driver1.getId());
@@ -536,27 +546,32 @@
                            if(null == driverWork){
                                continue;
                            }
                            if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大
                                integral = driver1.getIntegral();
                                score = driver1.getScore();
                                driver = driver1.getId();
                                Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
                                Double wgs84 = distance.get("WGS84");
                                d = wgs84;
                                continue;
                            }
                            if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) < 0){//积分相同对比评分
                                integral = driver1.getIntegral();
                                score = driver1.getScore();
                                driver = driver1.getId();
                                Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
                                Double wgs84 = distance.get("WGS84");
                                d = wgs84;
                                continue;
                            }
                            if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) == 0){//积分相同/评分相同对比距离
                                String value1 = redisUtil.getValue("DRIVER" + driver1.getId());
                                if(ToolUtil.isEmpty(value1)){
                                    continue;
                                }
                                Map<String, Double> distance = GeodesyUtil.getDistance(value1, order.getStartLng() + "," + order.getStartLat());
                                Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
                                Double wgs84 = distance.get("WGS84");
                                if(d == null || d.compareTo(wgs84) > 0){
                                if(d.compareTo(wgs84) > 0){
                                    d = wgs84;
                                    integral = driver1.getIntegral();
                                    score = driver1.getScore();
                                    driver = driver1.getId();
                                    continue;
                                }
@@ -578,12 +593,17 @@
                    @Override
                    public void run() {
                        Order order1 = OrderServiceImpl.this.selectById(order.getId());
                        if(order1.getState() == 101 || order1.getState() == 201){
                            order1.setHallOrder(1);
                            OrderServiceImpl.this.updateById(order1);
                        if(order1.getState() != 101 && order1.getState() != 201 && order1.getDriverId().compareTo(driver1.getId()) != 0){
                            driver1.setServerStatus(1);
                            driverService.updateById(driver1);
                        }
                        if(order1.getState() == 201 || (order1.getState() == 101 && null == order1.getDriverId())){
                            driver1.setServerStatus(1);
                            driverService.updateById(driver1);
                            order1.setHallOrder(1);
                            OrderServiceImpl.this.updateById(order1);
                            ExtraPushOrder(order);
                        }
                    }
@@ -595,8 +615,8 @@
            }
            redisUtil.unlock();
        }catch (Exception e){
            redisUtil.unlock();
            e.printStackTrace();
            redisUtil.unlock();
        }
    }
@@ -694,6 +714,9 @@
        orderRefusalService.insert(orderRefusal);
        Driver driver = driverService.selectById(uid);
        driver.setServerStatus(1);
        driverService.updateById(driver);
        //扣除积分
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
        if(null != systemConfig) {
@@ -752,6 +775,9 @@
                    }
                }
            }
            if(!lock){
                return ResultUtil.error("请重试");
            }
            Order order = this.selectById(orderId);
            Integer state = order.getState();
            Integer oldDriverId = order.getDriverId();
@@ -782,20 +808,16 @@
            driverService.updateById(driver);
            if(state == 201){//转单的订单
                //停止定时任务
                Timer timer = timerMap.get(order.getId().toString());
                if(null != timer){
                    timer.cancel();
                    timerMap.remove(order.getId().toString());
                }
                //原司机下班
                redisUtil.delSetValue("orderService", order.getId().toString());
                //原司机下班 TODO 2023-06-21 客户说取消此功能
                Driver oldDriver = driverService.selectById(oldDriverId);
                oldDriver.setServerStatus(1);
                driverService.updateById(oldDriver);
                DriverWork driverWork1 = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", oldDriverId).eq("status", 1));
                driverWork1.setStatus(2);
                driverWork1.setOffWorkTime(new Date());
                driverWorkService.updateById(driverWork1);
//                DriverWork driverWork1 = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", oldDriverId).eq("status", 1));
//                driverWork1.setStatus(2);
//                driverWork1.setOffWorkTime(new Date());
//                driverWorkService.updateById(driverWork1);
                //添加关系数据
                OrderTransfer orderTransfer = orderTransferService.selectOne(new EntityWrapper<OrderTransfer>().eq("orderId", order.getId()).eq("status", 1).isNull("successTime"));
@@ -819,7 +841,7 @@
            }
            //推动订单数据
            pushOrderInfo(order.getId(), uid);//开始推送订单数据
            redisUtil.addSetValue("orderService", order.getId().toString());
            //发送系统消息
            systemMessageService.addSystemMessage(uid, 2, "接单成功", "您已成功接到用户订单,请尽快联系客户!");
            pushUtil.pushOrderStatus(order.getDriverId(), 2, order.getId(), order.getState());
@@ -844,7 +866,18 @@
     */
    @Override
    public OrderInfoWarpper queryOrderInfo(Integer uid, Long orderId) throws Exception {
        Order order = this.selectById(orderId);
        OrderInfoWarpper orderInfoWarpper = this.baseMapper.queryOrderInfo(orderId);
        Integer wait = Integer.valueOf(orderInfoWarpper.getWaitTime());
        if(null != order.getStartWaitTime()){
            wait += Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 1000).intValue();
        }
        Integer s = wait % 60;
        int m = Double.valueOf(wait / 60).intValue();
        orderInfoWarpper.setWaitTime((m < 10 ? ("0" + m) : m) + ":" + (s < 10 ? ("0" + s) : s));
        Double actualMileage = orderInfoWarpper.getActualMileage();
        orderInfoWarpper.setActualMileage(new BigDecimal(actualMileage).divide(new BigDecimal(1000), 2, RoundingMode.HALF_EVEN).doubleValue());
        if(orderInfoWarpper.getTravelTime() == null){
            orderInfoWarpper.setTravelTime(0);
        }
@@ -904,7 +937,7 @@
                    order.setStartTime(new Date());
                }
                //计算等待用户时长
                Integer w = new BigDecimal((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 60000).setScale(0, BigDecimal.ROUND_UP).intValue();
                Integer w = new BigDecimal(Double.valueOf(System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 1000).intValue();
                order.setWaitTime(order.getWaitTime() + w);
                order.setStartWaitTime(null);
                break;
@@ -930,6 +963,7 @@
                driver.setServerStatus(1);
                driverService.updateById(driver);
                saveIntegral(order);
                redisUtil.delSetValue("orderService", order.getId().toString());
                break;
            case 401:
                order.setStartWaitTime(new Date());
@@ -944,6 +978,9 @@
        }
        return ResultUtil.success();
    }
    /**
@@ -1005,55 +1042,45 @@
    /**
     * 定时任务推送订单数据
     * @param orderId
     * @param uid
     */
    public void pushOrderInfo(Long orderId, Integer uid){
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                String value = redisUtil.getValue("DRIVER" + uid);
                Order order = OrderServiceImpl.this.selectById(orderId);
                if(order.getState() == 106 || order.getState() == 301){
                    Timer timer = timerMap.get(order.getId().toString());
                    if(null != timer){
                        timer.cancel();
                        timerMap.remove(order.getId().toString());
                    }
                }
    @Override
    public void pushOrderInfo(Long orderId){
        Order order = this.selectById(orderId);
        Integer driverId = order.getDriverId();
        String value = redisUtil.getValue("DRIVER" + driverId);
        if(order.getState() == 106 || order.getState() == 301){
            redisUtil.delSetValue("orderService", orderId.toString());
            return;
        }
                PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
                pushOrderInfoWarpper.setId(orderId);
                if(ToolUtil.isNotEmpty(value)){
                    String[] split = value.split(",");
                    pushOrderInfoWarpper.setDriverLat(split[1]);
                    pushOrderInfoWarpper.setDriverLng(split[0]);
                }
                int w = 0;
                if(null != order.getStartWaitTime()){
                    w = Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 60000).intValue();
                }
                pushOrderInfoWarpper.setWaitTime(order.getWaitTime() + w);
                pushOrderInfoWarpper.setState(order.getState());
                pushOrderInfoWarpper.setActualMileage(Double.valueOf(order.getActualMileage() / 1000));
                pushOrderInfoWarpper.setTravelTime(0);
                if(null != order.getStartTime()){
                    int travelTime = Double.valueOf((System.currentTimeMillis() - order.getStartTime().getTime()) / 60000).intValue();
                    pushOrderInfoWarpper.setTravelTime(travelTime);
                }
                if(null != order.getUserId()){
                    pushUtil.pushOrderInfo(order.getUserId(), 1, pushOrderInfoWarpper);
                }
                if(order.getState() == 301){//司机取消不推送给司机
                    CancelOrder cancelOrder = cancelOrderService.selectOne(new EntityWrapper<CancelOrder>().eq("orderId", order.getId()).eq("status", 1));
                    if(null != cancelOrder && cancelOrder.getUserType() == 2){
                        return;
                    }
                }
                pushUtil.pushOrderInfo(uid, 2, pushOrderInfoWarpper);
        PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
        pushOrderInfoWarpper.setId(orderId);
        if(ToolUtil.isNotEmpty(value)){
            String[] split = value.split(",");
            pushOrderInfoWarpper.setDriverLat(split[1]);
            pushOrderInfoWarpper.setDriverLng(split[0]);
        }
        Integer w = 0;
        if(null != order.getStartWaitTime()){
            w = Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 1000).intValue();
        }
        Integer wait = order.getWaitTime() + w;
        Integer s = wait % 60;
        Integer m = wait / 60;
        pushOrderInfoWarpper.setWaitTime((m < 10 ? ("0" + m) : m) + ":" + (s < 10 ? ("0" + s) : s));
        pushOrderInfoWarpper.setState(order.getState());
        pushOrderInfoWarpper.setActualMileage(new BigDecimal(order.getActualMileage()).divide(new BigDecimal(1000), 2, RoundingMode.HALF_EVEN).doubleValue());
        pushOrderInfoWarpper.setTravelTime("0");
        if(null != order.getUserId()){
            pushUtil.pushOrderInfo(order.getUserId(), 1, pushOrderInfoWarpper);
        }
        if(order.getState() == 301){//司机取消不推送给司机
            CancelOrder cancelOrder = cancelOrderService.selectOne(new EntityWrapper<CancelOrder>().eq("orderId", order.getId()).eq("status", 1));
            if(null != cancelOrder && cancelOrder.getUserType() == 2){
                return;
            }
        },0, 10000);
        timerMap.put(orderId.toString(), timer);
        }
        pushUtil.pushOrderInfo(driverId, 2, pushOrderInfoWarpper);
    }
@@ -1091,7 +1118,7 @@
        new Thread(new Runnable() {
            @Override
            public void run() {
                pushOrder(finalOrder);
                pushOrder(finalOrder.getId());
            }
        }).start();
        return ResultUtil.success();
@@ -1178,6 +1205,7 @@
        order.setState(301);
        this.updateById(order);
        redisUtil.delSetValue("orderService", orderId.toString());
        CancelOrder cancelOrder = new CancelOrder();
        cancelOrder.setOrderId(orderId);
@@ -1193,7 +1221,9 @@
            driverService.updateById(driver);
        }
        pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getStatus());
        if(null != order.getUserId()){
            pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getStatus());
        }
        return ResultUtil.success();
    }
@@ -1210,23 +1240,32 @@
        Driver driver = driverService.selectById(uid);
        Order order = this.selectById(orderId);
        OrderPriceWarpper orderPriceWarpper = new OrderPriceWarpper();
        BeanUtils.copyProperties(order, orderPriceWarpper);
        orderPriceWarpper.setWaitTime(orderPriceWarpper.getWaitTime() + orderPriceWarpper.getOutWaitTime());
        orderPriceWarpper.setWaitTimePrice(orderPriceWarpper.getWaitTimePrice() + orderPriceWarpper.getOutWaitTimePrice());
        orderPriceWarpper.setLongDistance(0D);
        if(ToolUtil.isNotEmpty(order.getLongDistance())){
        orderPriceWarpper.setStartTime(order.getArrivalTimeAtTheAppointmentPoint().getTime());
        orderPriceWarpper.setEndTime(order.getGetoffTime().getTime());
        orderPriceWarpper.setActualMileage(Double.valueOf(order.getActualMileage() / 1000));
        if(null != order.getStartPrice() && 0 != order.getStartPrice()){
            orderPriceWarpper.setStartPrice(order.getStartPrice());
            orderPriceWarpper.setStartDistance(order.getStartDistance());
            orderPriceWarpper.setOverDriveDistance(order.getOverDriveDistance());
            orderPriceWarpper.setMileageFee(order.getOverDrivePrice());
        }else{
            String[] split = order.getLongDistance().split("-");
            Double longDistanc = Double.valueOf(split[1]) - Double.valueOf(split[0]) + orderPriceWarpper.getOverLongDistance();
            orderPriceWarpper.setLongDistance(longDistanc);
            orderPriceWarpper.setStartPrice(order.getLongDistancePrice());
            orderPriceWarpper.setStartDistance(Double.valueOf(split[1]));
            orderPriceWarpper.setOverDriveDistance(order.getOverLongDistance());
            orderPriceWarpper.setMileageFee(order.getOverLongDistancePrice());
        }
        orderPriceWarpper.setLongDistancePrice(orderPriceWarpper.getLongDistancePrice() + orderPriceWarpper.getOverLongDistancePrice());
        orderPriceWarpper.setBadWeatherDistance(orderPriceWarpper.getBadWeatherDistance() + orderPriceWarpper.getOverBadWeatherDistance());
        orderPriceWarpper.setBadWeatherPrice(orderPriceWarpper.getBadWeatherPrice() + orderPriceWarpper.getOverBadWeatherPrice());
        orderPriceWarpper.setActualMileage(new BigDecimal(order.getActualMileage() / 1000).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
        orderPriceWarpper.setTravelTime(0);
        if(null != order.getGetoffTime()){
            orderPriceWarpper.setTravelTime(Double.valueOf((order.getGetoffTime().getTime() - order.getStartTime().getTime()) / 60000).intValue());
        Integer waitTime = order.getWaitTime() + order.getOutWaitTime();
        Integer s = waitTime % 60;
        Integer m = waitTime / 60;
        orderPriceWarpper.setWaitTime((m < 10 ? "0" + m : m) + ":" + (s < 10 ? "0" + s : s));
        orderPriceWarpper.setWaitTimePrice(order.getWaitTimePrice() + order.getOutWaitTimePrice());
        orderPriceWarpper.setDiscountAmount(order.getDiscountAmount());
        orderPriceWarpper.setDiscountedPrice(order.getDiscountedPrice());
        orderPriceWarpper.setBadWeatherPrice(order.getBadWeatherPrice());
        orderPriceWarpper.setPayMoney(order.getPayMoney());
        if(order.getState() < 107){
            orderPriceWarpper.setPayMoney(order.getOrderMoney());
        }
        orderPriceWarpper.setWxCollectionCode(driver.getWxCollectionCode());
        orderPriceWarpper.setZfbCollectionCode(driver.getZfbCollectionCode());
@@ -1246,7 +1285,7 @@
    public ResultUtil setOrderStatus(Integer uid, Long orderId, Integer payType, Integer state) throws Exception {
        List<Integer> s = Arrays.asList(107, 108);
        if(!s.contains(state)){
            return ResultUtil.error("操作失败");
            return ResultUtil.error("操作失败,请刷新订单");
        }
        Order order = this.selectById(orderId);
        order.setState(state);
@@ -1256,7 +1295,7 @@
            Coupon coupon = userToCouponService.queryCoupon(order.getUserId(), order.getOrderMoney());
            if(null != coupon){
                order.setCouponId(coupon.getId());
                order.setDiscountAmount(coupon.getCouponPreferentialAmount());
                order.setDiscountedPrice(coupon.getCouponPreferentialAmount());
                order.setPayMoney(order.getOrderMoney() - coupon.getCouponPreferentialAmount());
            }else{
                order.setPayMoney(order.getOrderMoney());
@@ -1420,47 +1459,63 @@
        Driver driver = driverService.selectById(order.getDriverId());
        AppUser appUser = appUserService.selectById(order.getUserId());
        //司机推荐首单收入
        List<Integer> state = Arrays.asList(107, 108, 109);
        int count = this.selectCount(new EntityWrapper<Order>().eq("userId", order.getUserId()).eq("status", 1).in("state", state));
        if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){
            Driver driver1 = driverService.selectById(appUser.getInviterId());
            //首单积分奖励
            SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
            JSONObject jsonObject2 = JSON.parseObject(systemConfig1.getContent());
            Integer num4 = jsonObject2.getInteger("num4");
            AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
            accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
            accountChangeDetail.setUserType(2);
            accountChangeDetail.setUserId(driver1.getId());
            accountChangeDetail.setType(2);
            accountChangeDetail.setChangeType(5);
            accountChangeDetail.setOrderId(order.getId());
            accountChangeDetail.setOldData(driver1.getIntegral().doubleValue());
            accountChangeDetail.setExplain("邀请用户首单积分奖励");
            accountChangeDetail.setCreateTime(new Date());
            driver1.setIntegral(driver1.getIntegral() + num4);
            accountChangeDetail.setNewData(driver1.getIntegral().doubleValue());
            accountChangeDetailService.insert(accountChangeDetail);
            driverService.updateById(driver1);
        if(null != order.getUserId()){
            //司机推荐首单收入
            List<Integer> state = Arrays.asList(107, 108, 109);
            int count = this.selectCount(new EntityWrapper<Order>().eq("userId", order.getUserId()).eq("status", 1).in("state", state));
            if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){
                Driver driver1 = driverService.selectById(appUser.getInviterId());
                //首单积分奖励
                SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
                JSONObject jsonObject2 = JSON.parseObject(systemConfig1.getContent());
                Integer num4 = jsonObject2.getInteger("num4");
                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                accountChangeDetail.setUserType(2);
                accountChangeDetail.setUserId(driver1.getId());
                accountChangeDetail.setType(2);
                accountChangeDetail.setChangeType(5);
                accountChangeDetail.setOrderId(order.getId());
                accountChangeDetail.setOldData(driver1.getIntegral().doubleValue());
                accountChangeDetail.setExplain("邀请用户首单积分奖励");
                accountChangeDetail.setCreateTime(new Date());
                driver1.setIntegral(driver1.getIntegral() + num4);
                accountChangeDetail.setNewData(driver1.getIntegral().doubleValue());
                accountChangeDetailService.insert(accountChangeDetail);
                driverService.updateById(driver1);
            }
        }
        Double payMoney = order.getPayMoney();
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 3));
        if(null != systemConfig){
            JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
            Double num2 = jsonObject.getDouble("num2");
            Double num3 = jsonObject.getDouble("num3");
            if(order.getOrderMoney() >= num2){//订单金额大于num2才有抽佣金
                payMoney = payMoney - num3;
                driver = driverService.selectById(order.getDriverId());
                AccountChangeDetail accountChangeDetail1 = new AccountChangeDetail();
                accountChangeDetail1.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                accountChangeDetail1.setUserType(2);
                accountChangeDetail1.setUserId(driver.getId());
                accountChangeDetail1.setType(1);
                accountChangeDetail1.setChangeType(9);
                accountChangeDetail1.setOrderId(order.getId());
                accountChangeDetail1.setOldData(driver.getBalance() + driver.getBackgroundBalance());
                accountChangeDetail1.setExplain("线下收款服务费支出");
                accountChangeDetail1.setCreateTime(new Date());
                driver.setBalance(driver.getBalance() - num3);
                accountChangeDetail1.setNewData(driver.getBalance() + driver.getBackgroundBalance());
                driverService.updateById(driver);
                accountChangeDetailService.saveData(accountChangeDetail1);
                //有分佣的情况,分佣的金额从司机充值金额中扣除转给平台,再由平台转账给各个分佣对象
                //有分佣的情况,分佣的金额从司机充值金额中扣除转给分佣对象
                SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 2));
                if(null != systemConfig1){
                    JSONObject jsonObject1 = JSON.parseObject(systemConfig1.getContent());
                    //司机推荐首单收入
                    if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){
                    //司机推荐用户收入
                    if(null != appUser && null != appUser.getInviterType() && appUser.getInviterType() == 2){
                        Double num1 = jsonObject1.getDouble("num1");
                        num1 = (num3 >= num1 ? num1 : num3);
@@ -1474,7 +1529,7 @@
                            accountChangeDetail.setType(1);
                            accountChangeDetail.setChangeType(5);
                            accountChangeDetail.setOldData(driver1.getCouponBalance() + driver1.getCommission());
                            accountChangeDetail.setExplain("邀请用户首单奖励");
                            accountChangeDetail.setExplain("邀请用户奖励");
                            accountChangeDetail.setCreateTime(new Date());
                            driver1.setCommission(driver1.getCommission() + num1);
                            accountChangeDetail.setNewData(driver1.getCouponBalance() + driver1.getCommission());
@@ -1491,19 +1546,19 @@
                            revenueService.insert(revenue);
                            Double num1_1 = num1;
                            List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                            List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2).eq("userId", driver.getId()).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                            for (RechargeRecord rechargeRecord : rechargeRecords) {
                                Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                                if(surplusDividedAmount.compareTo(num1_1) >= 0){
                                    ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), num1_1, callbackPath + "/base/order/zhaunzhangCallback");
                                    if(zhaunzhang.getCode() == 10000){
                                    ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num1_1, 3);
                                    if(fengzhang.getCode() == 10000){
                                        rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num1_1);
                                        rechargeRecordService.updateById(rechargeRecord);
                                    }
                                    break;
                                }else{
                                    ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                    if(zhaunzhang.getCode() == 10000){
                                    ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), surplusDividedAmount, 3);
                                    if(fengzhang.getCode() == 10000){
                                        rechargeRecord.setSurplusDividedAmount(0d);
                                        rechargeRecordService.updateById(rechargeRecord);
                                        num1_1 -= surplusDividedAmount;
@@ -1553,19 +1608,19 @@
                                    accountChangeDetailService.saveData(accountChangeDetail);
                                    Double num5_1 = num5;
                                    List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                                    List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2).eq("userId", driver.getId()).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                                    for (RechargeRecord rechargeRecord : rechargeRecords) {
                                        Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                                        if(surplusDividedAmount.compareTo(num5_1) >= 0){
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), num5_1, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(zhaunzhang.getCode() == 10000){
                                            ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num5_1, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num5_1);
                                                rechargeRecordService.updateById(rechargeRecord);
                                            }
                                            break;
                                        }else{
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(zhaunzhang.getCode() == 10000){
                                            ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), surplusDividedAmount, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(0d);
                                                rechargeRecordService.updateById(rechargeRecord);
                                                num5_1 -= surplusDividedAmount;
@@ -1603,19 +1658,19 @@
                                    accountChangeDetailService.saveData(accountChangeDetail);
                                    Double num6_1 = num6;
                                    List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                                    List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2).eq("userId", driver.getId()).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                                    for (RechargeRecord rechargeRecord : rechargeRecords) {
                                        Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                                        if(surplusDividedAmount.compareTo(num6_1) >= 0){
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver2.getMerchantNumber(), num6_1, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(zhaunzhang.getCode() == 10000){
                                            ResultUtil fengzhang = fengzhang(1, driver2.getId(), driver2.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num6_1, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num6_1);
                                                rechargeRecordService.updateById(rechargeRecord);
                                            }
                                            break;
                                        }else{
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver2.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(zhaunzhang.getCode() == 10000){
                                            ResultUtil fengzhang = fengzhang(1, driver2.getId(), driver2.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), surplusDividedAmount, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(0d);
                                                rechargeRecordService.updateById(rechargeRecord);
                                                num6_1 -= surplusDividedAmount;
@@ -1653,19 +1708,19 @@
                                    accountChangeDetailService.saveData(accountChangeDetail);
                                    Double num7_1 = num7;
                                    List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                                    List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2).eq("userId", driver.getId()).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                                    for (RechargeRecord rechargeRecord : rechargeRecords) {
                                        Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                                        if(surplusDividedAmount.compareTo(num7_1) >= 0){
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver3.getMerchantNumber(), num7_1, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(zhaunzhang.getCode() == 10000){
                                            ResultUtil fengzhang = fengzhang(1, driver3.getId(), driver3.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num7_1, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num7_1);
                                                rechargeRecordService.updateById(rechargeRecord);
                                            }
                                            break;
                                        }else{
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver3.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(zhaunzhang.getCode() == 10000){
                                            ResultUtil fengzhang = fengzhang(1, driver3.getId(), driver3.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), surplusDividedAmount, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(0d);
                                                rechargeRecordService.updateById(rechargeRecord);
                                                num7_1 -= surplusDividedAmount;
@@ -1706,19 +1761,19 @@
                                    accountChangeDetailService.saveData(accountChangeDetail);
                                    Double num3_1 = num3_;
                                    List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                                    List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2).eq("userId", driver.getId()).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                                    for (RechargeRecord rechargeRecord : rechargeRecords) {
                                        Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                                        if(surplusDividedAmount.compareTo(num3_1) >= 0){
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), num3_1, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(zhaunzhang.getCode() == 10000){
                                            ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num3_1, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num3_1);
                                                rechargeRecordService.updateById(rechargeRecord);
                                            }
                                            break;
                                        }else{
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(zhaunzhang.getCode() == 10000){
                                            ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), surplusDividedAmount, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(0d);
                                                rechargeRecordService.updateById(rechargeRecord);
                                                num3_1 -= surplusDividedAmount;
@@ -1756,19 +1811,19 @@
                                    accountChangeDetailService.saveData(accountChangeDetail);
                                    Double num4_1 = num4;
                                    List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                                    List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2).eq("userId", driver.getId()).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                                    for (RechargeRecord rechargeRecord : rechargeRecords) {
                                        Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                                        if(surplusDividedAmount.compareTo(num4_1) >= 0){
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver2.getMerchantNumber(), num4_1, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(zhaunzhang.getCode() == 10000){
                                            ResultUtil fengzhang = fengzhang(1, driver2.getId(), driver2.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num4_1, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num4_1);
                                                rechargeRecordService.updateById(rechargeRecord);
                                            }
                                            break;
                                        }else{
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver2.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(zhaunzhang.getCode() == 10000){
                                            ResultUtil fengzhang = fengzhang(1, driver2.getId(), driver2.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), surplusDividedAmount, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(0d);
                                                rechargeRecordService.updateById(rechargeRecord);
                                                num4_1 -= surplusDividedAmount;
@@ -1809,19 +1864,19 @@
                                accountChangeDetailService.saveData(accountChangeDetail);
                                Double num2_1 = num2_;
                                List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                                List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2).eq("userId", driver.getId()).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                                for (RechargeRecord rechargeRecord : rechargeRecords) {
                                    Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                                    if(surplusDividedAmount.compareTo(num2_1) >= 0){
                                        ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), num2_1, callbackPath + "/base/order/zhaunzhangCallback");
                                        if(zhaunzhang.getCode() == 10000){
                                        ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num2_1, 3);
                                        if(fengzhang.getCode() == 10000){
                                            rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num2_1);
                                            rechargeRecordService.updateById(rechargeRecord);
                                        }
                                        break;
                                    }else{
                                        ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                        if(zhaunzhang.getCode() == 10000){
                                        ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), surplusDividedAmount, 3);
                                        if(fengzhang.getCode() == 10000){
                                            rechargeRecord.setSurplusDividedAmount(0d);
                                            rechargeRecordService.updateById(rechargeRecord);
                                            num2_1 -= surplusDividedAmount;
@@ -1846,19 +1901,19 @@
                        revenueService.insert(revenue);
                        Agent agent = agentService.selectById(driver.getAgentId());
                        List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                        List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2).eq("userId", driver.getId()).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                        for (RechargeRecord rechargeRecord : rechargeRecords) {
                            Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                            if(surplusDividedAmount.compareTo(num3) >= 0){
                                ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), agent.getMerchantNumber(), num3, callbackPath + "/base/order/zhaunzhangCallback");
                                if(zhaunzhang.getCode() == 10000){
                                ResultUtil fengzhang = fengzhang(2, agent.getId(), agent.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num3, 3);
                                if(fengzhang.getCode() == 10000){
                                    rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num3);
                                    rechargeRecordService.updateById(rechargeRecord);
                                }
                                break;
                            }else{
                                ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), agent.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                if(zhaunzhang.getCode() == 10000){
                                ResultUtil fengzhang = fengzhang(2, agent.getId(), agent.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), surplusDividedAmount, 3);
                                if(fengzhang.getCode() == 10000){
                                    rechargeRecord.setSurplusDividedAmount(0d);
                                    rechargeRecordService.updateById(rechargeRecord);
                                    num3 -= surplusDividedAmount;
@@ -1867,47 +1922,6 @@
                                }
                            }
                        }
                    }
                }
            }
        }
        //司机余额扣减抽佣金额,将金额先分账给平台
        if(order.getPayMoney() > payMoney){
            driver = driverService.selectById(order.getDriverId());
            Double m = order.getPayMoney() - payMoney;
            AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
            accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
            accountChangeDetail.setUserType(2);
            accountChangeDetail.setUserId(driver.getId());
            accountChangeDetail.setType(1);
            accountChangeDetail.setChangeType(9);
            accountChangeDetail.setOrderId(order.getId());
            accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance());
            accountChangeDetail.setExplain("线下收款服务费支出");
            accountChangeDetail.setCreateTime(new Date());
            driver.setBalance(driver.getBalance() - m);
            accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance());
            driverService.updateById(driver);
            accountChangeDetailService.saveData(accountChangeDetail);
            List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2).eq("userId", driver.getId()).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
            for (RechargeRecord rechargeRecord : rechargeRecords) {
                Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                if(surplusDividedAmount.compareTo(m) >= 0){
                    ResultUtil fengzhang = fengzhang(3, null, "553021440975", rechargeRecord.getId().longValue(), rechargeRecord.getOrderNumber(), m, 1);
                    if(fengzhang.getCode() == 10000){
                        rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - m);
                        rechargeRecordService.updateById(rechargeRecord);
                    }
                    break;
                }else{
                    ResultUtil fengzhang = fengzhang(3, null, "553021440975", rechargeRecord.getId().longValue(), rechargeRecord.getOrderNumber(), surplusDividedAmount, 1);
                    if(fengzhang.getCode() == 10000){
                        rechargeRecord.setSurplusDividedAmount(0d);
                        rechargeRecordService.updateById(rechargeRecord);
                        m -= surplusDividedAmount;
                    }else{
                        break;
                    }
                }
            }
@@ -1921,11 +1935,12 @@
     * @param amount
     */
    @Override
    public ResultUtil fengzhang(Integer userType, Integer id, String merchantNumber, Long orderId, String merOrderId, Double amount, Integer sourceType){
    public ResultUtil fengzhang(Integer userType, Integer id, String merchantNumber, Long orderId, Integer rechargeRecordId, String merOrderId, Double amount, Integer sourceType){
        DivisionRecord divisionRecord = new DivisionRecord();
        divisionRecord.setUserType(userType);
        divisionRecord.setUserId(id);
        divisionRecord.setOrderId(orderId);
        divisionRecord.setRechargeRecordId(rechargeRecordId);
        divisionRecord.setSourceType(sourceType);
        divisionRecord.setAmount(amount);
        divisionRecord.setMerchantNumber(merchantNumber);
@@ -2176,8 +2191,9 @@
    @Override
    public void completeCollection() {
        List<Order> orders = this.selectList(new EntityWrapper<Order>().eq("state", 107).eq("status", 1)
                .eq("payType", 3).last(" and UNIX_TIMESTAMP(getoffTime) + 120 <= UNIX_TIMESTAMP(now())"));
                .eq("payType", 3).last(" and UNIX_TIMESTAMP(getoffTime) + 600 <= UNIX_TIMESTAMP(now())"));
        for (Order order : orders) {
            order.setState(108);
            order.setPayTime(new Date());
            if(null != order.getCouponId()){
                UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId());