puzhibing
2023-08-17 9e4440e8ce1ed3c72932f3f62f4d05f55c9080e6
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
@@ -111,6 +111,12 @@
    @Autowired
    private IAgentService agentService;
    @Autowired
    private IOrderPositionService orderPositionService;
    @Autowired
    private ICompanyFundFlowService companyFundFlowService;
    @Value("${callbackPath}")
    private String callbackPath;//支付回调网关地址
@@ -155,10 +161,14 @@
            return ResultUtil.error("该用户还有未完成的订单", "");
        }
        Driver driver = driverService.selectById(uid);
        DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", uid).eq("status", 1));
        Order order1 = this.selectOne(new EntityWrapper<Order>().eq("driverId", uid).eq("status", 1).in("state", Arrays.asList(102, 103, 104, 105, 201, 401)));
        Order order = new Order();
        if(driverWork != null && null == order1){
        if(driver.getServerStatus().equals(1)){
            order.setDriverId(driver.getId());
            order.setState(104);
        }else if(driverWork != null && null == order1){
            order.setDriverId(uid);
            driver.setServerStatus(2);
            order.setOrderTakingTime(new Date());
@@ -170,6 +180,19 @@
        if(null != appUser){
            order.setUserId(appUser.getId());
        }
        String startAddress = addOrderWarpper.getStartAddress();
        startAddress = startAddress.replaceAll("& #40;", "(");
        startAddress = startAddress.replaceAll("& #41;", ")");
        addOrderWarpper.setStartAddress(startAddress);
        if(ToolUtil.isNotEmpty(addOrderWarpper.getEndAddress())){
            String endAddress = addOrderWarpper.getEndAddress();
            endAddress = endAddress.replaceAll("& #40;", "(");
            endAddress = endAddress.replaceAll("& #41;", ")");
            addOrderWarpper.setEndAddress(endAddress);
        }
        order.setUserName(addOrderWarpper.getUserName());
        order.setUserPhone(addOrderWarpper.getPhone());
        order.setAgentId(driver.getAgentId());
@@ -199,8 +222,11 @@
        }
        order.setCreateTime(new Date());
        order = getOrderPrice(1, d, 0, order, city);
        order.setState(null == order.getDriverId() ? 101 : 102);
        if(!driver.getServerStatus().equals(1)) {
            order.setState(null == order.getDriverId() ? 101 : 102);
        }
        order.setStatus(1);
        this.insert(order);
        driverService.updateById(driver);
        //推送状态
@@ -218,6 +244,7 @@
                }
            }).start();
        }
        redisUtil.setStrValue("newOrder", "true");
        return ResultUtil.success(order.getState() == 102 ? order.getId() : null);
    }
@@ -231,14 +258,14 @@
     * @param city          查询天气的城市
     * @return
     */
    public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city){
    public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city) {
        order = getOrderInitialPrice(order);
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5));
        if(null == systemConfig){
            if(type == 1){//预估金额
        if (null == systemConfig) {
            if (type == 1) {//预估金额
                order.setEstimatedPrice(0D);
            }
            if(type == 2){//订单金额
            if (type == 2) {//订单金额
                order.setOrderMoney(0D);
            }
            return order;
@@ -278,19 +305,19 @@
            e.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
            e.set(Calendar.SECOND, 0);
            if(hour1 > hour2){
                if(s.getTimeInMillis() > date.getTime()){
            if (hour1 > hour2) {
                if (s.getTimeInMillis() > date.getTime()) {
                    s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
                }else{
                } else {
                    e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
                }
            }
            if(date.getTime() >= s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()){
                if(num3.compareTo(distance) >= 0){//起步里程内
            if (date.getTime() >= s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()) {
                if (num3.compareTo(distance) >= 0) {//起步里程内
                    order.setStartDistance(distance);//起步里程
                    order.setStartPrice(num4);//起步价
                }else{
                } else {
                    Double distance1 = distance;//原始里程
                    order.setStartDistance(num3);//起步里程
                    order.setStartPrice(num4);//起步价
@@ -302,7 +329,7 @@
                    order.setOverDrivePrice(multiply.doubleValue());//超出起步里程费
                    //计算长途费(超出长途起始公里,费用开始按照长途规则计算。)
                    if(distance.compareTo(num7) > 0){
                    if (distance.compareTo(num7) > 0) {
                        order.setStartDistance(0D);//起步里程
                        order.setStartPrice(0D);//起步价
                        order.setOverDriveDistance(0D);//超出起步里程
@@ -312,7 +339,7 @@
                        order.setLongDistancePrice(num9);//长途费
                    }
                    //计算长途里程超出的部分
                    if(distance.compareTo(num8) > 0){
                    if (distance.compareTo(num8) > 0) {
                        order.setOverLongDistance(new BigDecimal(distance1 - num8).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//超出长途里程
                        BigDecimal divide1 = new BigDecimal(distance - num8).divide(new BigDecimal(num10), 2, BigDecimal.ROUND_HALF_EVEN);
@@ -336,7 +363,7 @@
        Double num9 = extraCost.getDouble("num9");//恶劣天气最高收取金额
        //等待费用
        if(waitTime.compareTo(num1 * 60) >= 0){
        if (waitTime.compareTo(num1 * 60) >= 0) {
            order.setWaitTime(num1 * 60);//等待时长
            order.setWaitTimePrice(num2);//等待费用
@@ -344,19 +371,22 @@
            BigDecimal multiply = new BigDecimal(w).divide(new BigDecimal(60), 0, RoundingMode.UP).multiply(new BigDecimal(num4));
            order.setOutWaitTime(w);//等待时长超出分钟
            order.setOutWaitTimePrice(multiply.doubleValue());//等待时长超出费用
        }else{
            order.setWaitTime(waitTime);//等待时长
            order.setWaitTimePrice(num2);//等待费用
        }
        //恶劣天气
        systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 8));
        if(null != systemConfig) {
        if (null != systemConfig) {
            JSONObject jsonObject1 = JSON.parseObject(systemConfig.getContent());
            Integer num11 = jsonObject1.getInteger("num1");//开启恶劣天气计价
            if(1 == num11){
            if (1 == num11) {
                boolean badWeather = WeatherUtil.isBadWeather(city);
                if(badWeather){
                if (badWeather) {
                    order.setBadWeatherDistance(num5);//恶劣天气公里
                    order.setBadWeatherPrice(num6);//恶劣天气费
                    if(distance.compareTo(num7) > 0){
                    if (distance.compareTo(num7) > 0) {
                        BigDecimal subtract = new BigDecimal(distance).subtract(new BigDecimal(num7));
                        BigDecimal multiply = subtract.multiply(new BigDecimal(num8));
                        order.setOverBadWeatherDistance(subtract.doubleValue());//恶劣天气超出公里
@@ -364,37 +394,39 @@
                    }
                    double add = new BigDecimal(order.getOverBadWeatherPrice()).add(new BigDecimal(order.getBadWeatherPrice())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
                    if(num9.compareTo(add) < 0){//超出最高金额(重新调整金额)
                        if(num9.compareTo(num6) < 0){//如果恶劣天气费大于最高金额
                    if (num9.compareTo(add) < 0) {//超出最高金额(重新调整金额)
                        if (num9.compareTo(num6) < 0) {//如果恶劣天气费大于最高金额
                            order.setBadWeatherPrice(num9);//恶劣天气费
                            order.setOverBadWeatherPrice(0D);//恶劣天气超出公里费
                        }else{
                        } else {
                            BigDecimal subtract = new BigDecimal(num9).subtract(new BigDecimal(add));
                            order.setOverBadWeatherPrice(subtract.doubleValue());//恶劣天气超出公里费
                        }
                    }
                }
            }
        }
        //计算折扣
        if(null != order.getUserId()){
            //计算折扣
            if (null != order.getUserId()) {
        }
            }
        //计算总金额
        BigDecimal bigDecimal = new BigDecimal(order.getStartPrice() + order.getOverDrivePrice() + order.getLongDistancePrice() + order.getOverLongDistancePrice() +
                order.getWaitTimePrice() + order.getOutWaitTimePrice() + order.getBadWeatherPrice() + order.getOverBadWeatherPrice() - order.getDiscountAmount()).setScale(2, BigDecimal.ROUND_HALF_EVEN);
            //计算总金额
            BigDecimal bigDecimal = new BigDecimal(order.getStartPrice() + order.getOverDrivePrice() + order.getLongDistancePrice() + order.getOverLongDistancePrice() +
                    order.getWaitTimePrice() + order.getOutWaitTimePrice() + order.getBadWeatherPrice() + order.getOverBadWeatherPrice() - order.getDiscountAmount()).setScale(2, BigDecimal.ROUND_HALF_EVEN);
        if(type == 1){//预估价
            order.setEstimatedPrice(bigDecimal.doubleValue());
        }
        if(type == 2){//订单金额
            order.setOrderMoney(bigDecimal.doubleValue());
            if (type == 1) {//预估价
                order.setEstimatedPrice(bigDecimal.doubleValue());
            }
            if (type == 2) {//订单金额
                order.setOrderMoney(bigDecimal.doubleValue());
            }
            return order;
        }
        return order;
    }
    /**
@@ -440,12 +472,12 @@
             *        合适司:积分 > 评分 > 距离
             *      3.司机没有接单直接将订单置入大厅
             */
            boolean lock = redisUtil.lock(5);
            boolean lock = redisUtil.lock(orderId.toString(), 5);
            if(!lock){
                int num1 = 1;
                while (num1 <= 10){
                    Thread.sleep(3000);//等待3秒
                    lock = redisUtil.lock(5);
                    lock = redisUtil.lock(orderId.toString(),5);
                    if(lock){
                        break;
                    }else{
@@ -457,11 +489,12 @@
                order.setHallOrder(1);
                this.updateById(order);
                ExtraPushOrder(order);
                redisUtil.unlock();
                redisUtil.unlock(orderId.toString());
                return;
            }
            SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1));
            if(null == systemConfig){
                redisUtil.unlock();
                redisUtil.unlock(orderId.toString());
                return;
            }
            JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
@@ -614,6 +647,7 @@
                            order1.setHallOrder(1);
                            OrderServiceImpl.this.updateById(order1);
                            ExtraPushOrder(order);
                            redisUtil.setStrValue("lobbyOrder", "true");
                        }
@@ -623,11 +657,12 @@
                order.setHallOrder(1);
                this.updateById(order);
                ExtraPushOrder(order);
                redisUtil.setStrValue("lobbyOrder", "true");
            }
            redisUtil.unlock();
            redisUtil.unlock(orderId.toString());
        }catch (Exception e){
            e.printStackTrace();
            redisUtil.unlock();
            redisUtil.unlock(orderId.toString());
        }
    }
@@ -780,12 +815,12 @@
            if(count > 0){
                return ResultUtil.error("还有未完成的订单");
            }
            boolean lock = redisUtil.lock(5);
            boolean lock = redisUtil.lock(orderId.toString(), 5);
            if(!lock){
                int num1 = 1;
                while (num1 <= 10){
                    Thread.sleep(3000);//等待3秒
                    lock = redisUtil.lock(5);
                    lock = redisUtil.lock(orderId.toString(),5);
                    if(lock){
                        break;
                    }else{
@@ -794,17 +829,18 @@
                }
            }
            if(!lock){
                redisUtil.unlock(orderId.toString());
                return ResultUtil.error("请重试");
            }
            Order order = this.selectById(orderId);
            Integer state = order.getState();
            Integer oldDriverId = order.getDriverId();
            if(state == 301){
                redisUtil.unlock();
                redisUtil.unlock(orderId.toString());
                return ResultUtil.error("订单已被取消");
            }
            if(state != 101 && state != 201){
                redisUtil.unlock();
                redisUtil.unlock(orderId.toString());
                return ResultUtil.error("手速慢了哦");
            }
            order.setDriverId(uid);
@@ -813,7 +849,7 @@
            order.setState(102);
            order.setOrderTakingTime(new Date());
            this.updateById(order);
            redisUtil.unlock();
            redisUtil.unlock(orderId.toString());
            if(null != order.getUserId()){
                AppUser appUser = appUserService.selectById(order.getUserId());
@@ -853,9 +889,10 @@
                    orderTransfer.setSuccessTime(new Date());
                    orderTransferService.insert(orderTransfer);
                }
                pushUtil.pushTransferSuccessful(order.getUserId(), 1, order.getId());
                pushUtil.pushTransferSuccessful(oldDriverId, 2, order.getId());
                if(null != order.getUserId()){
                    pushUtil.pushTransferSuccessful(order.getUserId(), 1, order.getId());
                }
            }
            //推动订单数据
@@ -868,7 +905,7 @@
                pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
            }
        }catch (Exception e){
            redisUtil.unlock();
            redisUtil.unlock(orderId.toString());
            e.printStackTrace();
            throw e;
        }
@@ -917,6 +954,7 @@
            Map<String, String> distance1 = MapUtil.getDistance(orderInfoWarpper.getStartLng() + "," + orderInfoWarpper.getStartLat(), value, 0);
            orderInfoWarpper.setPickUpTime(Integer.valueOf(distance1.get("duration")) / 60);
        }
        orderInfoWarpper.setDriverId(order.getDriverId());
        return orderInfoWarpper;
    }
@@ -958,13 +996,22 @@
                    order.setStartTime(new Date());
                }
                //计算等待用户时长
                Integer w = new BigDecimal(Double.valueOf(System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 1000).intValue();
                order.setWaitTime(order.getWaitTime() + w);
                if(null != order.getStartWaitTime()){
                    Integer w = new BigDecimal(Double.valueOf(System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 1000).intValue();
                    order.setWaitTime(order.getWaitTime() + w);
                }
                order.setStartWaitTime(null);
                orderPositionService.initMap(order.getId());
                break;
            case 106:
                order.setGetoffTime(new Date());
                if(ToolUtil.isEmpty(order.getEndAddress())){
                    String endAddress = processOperationsWarpper.getEndAddress();
                    endAddress = endAddress.replaceAll("& #40;", "(");
                    endAddress = endAddress.replaceAll("& #41;", ")");
                    processOperationsWarpper.setEndAddress(endAddress);
                    order.setEndAddress(processOperationsWarpper.getEndAddress());
                    order.setEndLng(processOperationsWarpper.getEndLng());
                    order.setEndLat(processOperationsWarpper.getEndLat());
@@ -977,7 +1024,12 @@
                            .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
                    city = null != weatherCity ? weatherCity.getId().toString() : "";
                }
                order = getOrderPrice(2, Double.valueOf(order.getActualMileage()) / 1000, order.getWaitTime(), order, city);
                try {
                    order = getOrderPrice(2, Double.valueOf(order.getActualMileage()) / 1000, order.getWaitTime(), order, city);
                }catch (Exception e){
                    e.printStackTrace();
                    return ResultUtil.error("计算费用异常");
                }
                Coupon coupon = userToCouponService.queryCoupon(order.getUserId(), order.getOrderMoney());
                if(null != coupon){
                    order.setCouponId(coupon.getId());
@@ -990,10 +1042,6 @@
                    order.setPayMoney(order.getOrderMoney());
                }
                //修改司机状态和积分
                Driver driver = driverService.selectById(order.getDriverId());
                driver.setServerStatus(1);
                driverService.updateById(driver);
                saveIntegral(order);
                redisUtil.delSetValue("orderService", order.getId().toString());
                break;
@@ -1125,34 +1173,68 @@
     * @throws Exception
     */
    @Override
    public ResultUtil transferOrder(Integer uid, Long orderId, String cause) throws Exception {
    public ResultUtil transferOrder(Integer uid, Long orderId, String cause, String phone) throws Exception {
        // 7.13改动
        Driver driver=null;
        OrderTransfer orderTransfer = new OrderTransfer();
        Order order = this.selectById(orderId);
        if(order.getDriverId().compareTo(uid) != 0){
            return ResultUtil.error("无权操作");
        if(phone!=null && !"".equals(phone)) {
            Integer oldId = order.getDriverId();
            List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().eq("phone", phone));
            if (drivers.size() == 0) {
                return ResultUtil.error("暂无该司机,无法转单");
            } else {
                 driver = drivers.get(0);
                if (driver.getServerStatus() != 1) {
                    return ResultUtil.error("司机正在服务中,无法转单。");
                }
                if (driver.getStatus() != 1) {
                    return ResultUtil.error("该司机已被冻结,无法转单。");
                }
                order.setDriverId(driver.getId());
                orderTransfer.setNewDriverId(driver.getId());
            }
            order.setState(104);
            driver.setServerStatus(2);
            driverService.updateById(driver);
            Driver driver1 = driverService.selectById(oldId);
            driver1.setServerStatus(1);
            driverService.updateById(driver1);
        }else {
            order.setState(201);
        }
        if(order.getState() > 104){
            return ResultUtil.error("订单不支持转单");
        }
        order.setOldState(order.getState());
        order.setState(201);
        this.updateById(order);
        OrderTransfer orderTransfer = new OrderTransfer();
        orderTransfer.setOrderId(orderId);
        orderTransfer.setOldDriverId(order.getDriverId());
        orderTransfer.setCause(cause);
        orderTransfer.setStatus(1);
        orderTransfer.setCreateTime(new Date());
        orderTransferService.insert(orderTransfer);
        //开始派单
        Order finalOrder = order;
        new Thread(new Runnable() {
            @Override
            public void run() {
                pushOrder(finalOrder.getId());
        if(phone==null ||"".equals(phone)){
            //开始派单
            Order finalOrder = order;
            new Thread(new Runnable() {
                @Override
                public void run() {
                    pushOrder(finalOrder.getId());
                }
            }).start();
        }else {
            if(driver!=null){
                PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
                pushOrderInfoWarpper.setId(order.getId());
                pushOrderInfoWarpper.setState(201);
                pushUtil.pushGrabOrder(driver.getId(), 2, order.getId(),1);
            }
        }).start();
        }
        return ResultUtil.success();
    }
@@ -1167,6 +1249,12 @@
    @Override
    public ResultUtil setOrderEndAddress(Integer uid, OrderEndAddressWarpper orderEndAddressWarpper) throws Exception {
        Order order = this.selectById(orderEndAddressWarpper.getOrderId());
        String endAddress = orderEndAddressWarpper.getEndAddress();
        endAddress = endAddress.replaceAll("& #40;", "(");
        endAddress = endAddress.replaceAll("& #41;", ")");
        orderEndAddressWarpper.setEndAddress(endAddress);
        order.setEndLat(orderEndAddressWarpper.getEndLat());
        order.setEndLng(orderEndAddressWarpper.getEndLng());
        order.setEndAddress(orderEndAddressWarpper.getEndAddress());
@@ -1228,6 +1316,9 @@
    @Override
    public ResultUtil driverCancelOrder(Integer uid, Long orderId, String cause) throws Exception {
        Order order = this.selectById(orderId);
        if(null == order){
            return ResultUtil.error("订单数据异常");
        }
        if(uid.compareTo(order.getDriverId()) != 0){
            return ResultUtil.error("无法取消订单");
        }
@@ -1256,6 +1347,7 @@
        if(null != order.getUserId()){
            pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getStatus());
        }
        redisUtil.setStrValue("cancelOrder", "true");
        return ResultUtil.success();
    }
@@ -1281,11 +1373,13 @@
            orderPriceWarpper.setOverDriveDistance(order.getOverDriveDistance());
            orderPriceWarpper.setMileageFee(order.getOverDrivePrice());
        }else{
            String[] split = order.getLongDistance().split("-");
            orderPriceWarpper.setStartPrice(order.getLongDistancePrice());
            orderPriceWarpper.setStartDistance(Double.valueOf(split[1]));
            orderPriceWarpper.setOverDriveDistance(order.getOverLongDistance());
            orderPriceWarpper.setMileageFee(order.getOverLongDistancePrice());
            if(order.getLongDistance().indexOf("-") >= 0){
                String[] split = order.getLongDistance().split("-");
                orderPriceWarpper.setStartPrice(order.getLongDistancePrice());
                orderPriceWarpper.setStartDistance(Double.valueOf(split[1]));
                orderPriceWarpper.setOverDriveDistance(order.getOverLongDistance());
                orderPriceWarpper.setMileageFee(order.getOverLongDistancePrice());
            }
        }
        Integer waitTime = order.getWaitTime() + order.getOutWaitTime();
        Integer s = waitTime % 60;
@@ -1315,111 +1409,142 @@
     */
    @Override
    public ResultUtil setOrderStatus(Integer uid, Long orderId, Integer payType, Integer state) throws Exception {
        if(108 == state){
            String value = redisUtil.getValue("repeat_" + orderId);
            if(ToolUtil.isEmpty(value)){
                redisUtil.setStrValue("repeat_" + orderId, System.currentTimeMillis() + "", 600);//10分钟
            }else{
                Long s = System.currentTimeMillis() - Long.valueOf(value);
                if(s.compareTo(60000L) < 0){//1分钟
                    return ResultUtil.error("数据处理中");
                }
                redisUtil.setStrValue("repeat_" + orderId, System.currentTimeMillis() + "", 600);//10分钟
            }
        }
        List<Integer> s = Arrays.asList(107, 108);
        if(!s.contains(state)){
            return ResultUtil.error("操作失败,请刷新订单");
        }
        Order order = this.selectById(orderId);
        if(order.getState().compareTo(state) == 0){
            return ResultUtil.error("不能重复操作");
        }
        order.setState(state);
        if(payType == 2 && state == 107){
            order.setPayType(3);
        }
        if(payType == 2 && state == 108){
            order.setPayTime(new Date());
            if(null != order.getCouponId()){
                UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId());
                Coupon coupon = couponService.selectById(userToCoupon.getCouponId());
                Driver driver = driverService.selectById(order.getDriverId());
                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
                accountChangeDetail.setUserType(2);
                accountChangeDetail.setUserId(order.getDriverId());
                accountChangeDetail.setCreateTime(new Date());
                accountChangeDetail.setOldData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                accountChangeDetail.setType(1);
                accountChangeDetail.setChangeType(7);
                accountChangeDetail.setOrderId(order.getId());
                accountChangeDetail.setExplain("优惠券收入");
                driver.setCommission(new BigDecimal(driver.getCommission()).add(new BigDecimal(coupon.getCouponPreferentialAmount())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                accountChangeDetail.setNewData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                driverService.updateById(driver);
                accountChangeDetailService.insert(accountChangeDetail);
                //补贴中分账
                Double discountedPrice = order.getDiscountedPrice();
                List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                for (RechargeRecord rechargeRecord : rechargeRecords) {
                    Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                    if(surplusDividedAmount.compareTo(discountedPrice) >= 0){
                        ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback");
                        if(10000 == zhaunzhang.getCode()){
                            Double remainAmount = zhaunzhang.getData();
                            rechargeRecord.setSurplusDividedAmount(remainAmount);
                            rechargeRecordService.updateById(rechargeRecord);
                        }
        try {
            boolean lock = redisUtil.lock(orderId + "",5);
            if(!lock){
                int num1 = 1;
                while (num1 <= 10){
                    Thread.sleep(3000);//等待3秒
                    lock = redisUtil.lock(orderId + "",5);
                    if(lock){
                        break;
                    }else{
                        ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                        if(10000 == zhaunzhang.getCode()){
                            Double remainAmount = zhaunzhang.getData();
                            rechargeRecord.setSurplusDividedAmount(remainAmount);
                            rechargeRecordService.updateById(rechargeRecord);
                            discountedPrice = new BigDecimal(discountedPrice).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                        }else{
                            break;
                        }
                        num1++;
                    }
                }
            }
            if(!lock){
                redisUtil.unlock(orderId + "");
                return ResultUtil.error("请稍后重试");
            }
        }
        this.updateById(order);
            Order order = this.selectById(orderId);
            if(state == 107 && order.getState() != 106){
                redisUtil.unlock(orderId + "");
                return ResultUtil.error("操作失败,请刷新数据");
            }
            if(state == 108 && order.getState() != 107){
                redisUtil.unlock(orderId + "");
                return ResultUtil.error("操作失败,请刷新数据");
            }
        if(payType == 2 && state == 108){//计算抽成
            saveRevenue(order);
        }
            order.setState(state);
        PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
        pushOrderInfoWarpper.setId(order.getId());
        pushOrderInfoWarpper.setState(order.getState());
        pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
        if(null != order.getUserId()){
            pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
        }
            if(payType == 2 && state == 107){
                order.setPayType(3);
            }
        if(payType == 2 && state == 107){
            new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    Order order1 = OrderServiceImpl.this.selectById(orderId);
                    if(order1.getState() == 107){
                        completeCollection_(order1);
            if(payType == 2 && state == 108){
                order.setPayTime(new Date());
                if(null != order.getCouponId()){
                    UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId());
                    Coupon coupon = couponService.selectById(userToCoupon.getCouponId());
                    Driver driver = driverService.selectById(order.getDriverId());
                    AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                    accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
                    accountChangeDetail.setUserType(2);
                    accountChangeDetail.setUserId(order.getDriverId());
                    accountChangeDetail.setCreateTime(new Date());
                    accountChangeDetail.setOldData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                    accountChangeDetail.setType(1);
                    accountChangeDetail.setChangeType(7);
                    accountChangeDetail.setOrderId(order.getId());
                    accountChangeDetail.setExplain("优惠券收入");
                    driver.setCommission(new BigDecimal(driver.getCommission()).add(new BigDecimal(coupon.getCouponPreferentialAmount())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                    accountChangeDetail.setNewData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                    driverService.updateById(driver);
                    accountChangeDetailService.insert(accountChangeDetail);
                    //补贴中分账
                    Double balance = revenueService.queryCompanyBalance();//平台账户余额
                    Double discountedPrice = order.getDiscountedPrice();
                    List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                    for (RechargeRecord rechargeRecord : rechargeRecords) {
                        Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                        // TODO 测试屏蔽
//                        if(surplusDividedAmount.compareTo(discountedPrice) >= 0){
//                            ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback");
//                            if(10000 == zhaunzhang.getCode()){
//                                Double remainAmount = zhaunzhang.getData();
//                                rechargeRecord.setSurplusDividedAmount(remainAmount);
//                                rechargeRecordService.updateById(rechargeRecord);
//                            }
//                            break;
//                        }else{
//                            ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
//                            if(10000 == zhaunzhang.getCode()){
//                                Double remainAmount = zhaunzhang.getData();
//                                rechargeRecord.setSurplusDividedAmount(remainAmount);
//                                rechargeRecordService.updateById(rechargeRecord);
//                                discountedPrice = new BigDecimal(discountedPrice).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
//                            }else{
//                                break;
//                            }
//                        }
                    }
                    CompanyFundFlow companyFundFlow = new CompanyFundFlow();
                    companyFundFlow.setType(5);
                    companyFundFlow.setObjectType(1);
                    companyFundFlow.setDriverId(driver.getId());
                    companyFundFlow.setBalance(new BigDecimal(balance));
                    companyFundFlow.setMoney(new BigDecimal(order.getDiscountedPrice()));
                    companyFundFlow.setCreateTime(new Date());
                    companyFundFlowService.insert(companyFundFlow);
                }
            }, 60000);
            }
            this.updateById(order);
            if((payType == 1 && state == 107) || (payType == 2 && state == 108)){
                //修改司机状态和积分
                Driver driver = driverService.selectById(order.getDriverId());
                driver.setServerStatus(1);
                driverService.updateById(driver);
            }
            if(payType == 2 && state == 108){//计算抽成
                saveRevenue(order);
            }
            PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
            pushOrderInfoWarpper.setId(order.getId());
            pushOrderInfoWarpper.setState(order.getState());
            pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
            if(null != order.getUserId()){
                pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
            }
            if(payType == 2 && state == 107){
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        try {
                            OrderServiceImpl.this.setOrderStatus(uid, orderId, payType, 108);
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                }, 60000);
            }
            redisUtil.unlock(orderId + "");
            return ResultUtil.success();
        }catch (Exception e){
            redisUtil.unlock(orderId + "");
            e.printStackTrace();
            return ResultUtil.error("系统异常");
        }
        return ResultUtil.success();
    }
@@ -1502,6 +1627,8 @@
            JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
            Double num2 = jsonObject.getDouble("num2");
            Double num3 = jsonObject.getDouble("num3");
            Double num4_ = jsonObject.getDouble("num4");
            if(order.getOrderMoney() >= num2){//订单金额大于num2才有抽佣金
                driver = driverService.selectById(order.getDriverId());
                AccountChangeDetail accountChangeDetail1 = new AccountChangeDetail();
@@ -1559,23 +1686,24 @@
                            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 fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num1_1, 3);
                                    if(fengzhang.getCode() == 10000){
                                        rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num1_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                                        rechargeRecordService.updateById(rechargeRecord);
                                    }
                                    break;
                                }else{
                                    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 = new BigDecimal(num1_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                                    }else{
                                        break;
                                    }
                                }
                                // TODO 测试屏蔽
//                                if(surplusDividedAmount.compareTo(num1_1) >= 0){
//                                    ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num1_1, 3);
//                                    if(fengzhang.getCode() == 10000){
//                                        rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num1_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
//                                        rechargeRecordService.updateById(rechargeRecord);
//                                    }
//                                    break;
//                                }else{
//                                    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 = new BigDecimal(num1_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
//                                    }else{
//                                        break;
//                                    }
//                                }
                            }
                        }
@@ -1622,23 +1750,24 @@
                                    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 fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num5_1, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num5_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                                                rechargeRecordService.updateById(rechargeRecord);
                                            }
                                            break;
                                        }else{
                                            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 = new BigDecimal(num5_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                                            }else{
                                                break;
                                            }
                                        }
                                        // TODO 测试屏蔽
//                                        if(surplusDividedAmount.compareTo(num5_1) >= 0){
//                                            ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num5_1, 3);
//                                            if(fengzhang.getCode() == 10000){
//                                                rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num5_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
//                                                rechargeRecordService.updateById(rechargeRecord);
//                                            }
//                                            break;
//                                        }else{
//                                            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 = new BigDecimal(num5_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
//                                            }else{
//                                                break;
//                                            }
//                                        }
                                    }
                                    double v = new BigDecimal(num3).subtract(new BigDecimal(num5)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                                    num3 = (num3 >= num5 ? v : 0);
@@ -1672,23 +1801,24 @@
                                    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 fengzhang = fengzhang(1, driver2.getId(), driver2.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num6_1, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num6_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                                                rechargeRecordService.updateById(rechargeRecord);
                                            }
                                            break;
                                        }else{
                                            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 = new BigDecimal(num6_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                                            }else{
                                                break;
                                            }
                                        }
                                        // TODO 测试屏蔽
//                                        if(surplusDividedAmount.compareTo(num6_1) >= 0){
//                                            ResultUtil fengzhang = fengzhang(1, driver2.getId(), driver2.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num6_1, 3);
//                                            if(fengzhang.getCode() == 10000){
//                                                rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num6_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
//                                                rechargeRecordService.updateById(rechargeRecord);
//                                            }
//                                            break;
//                                        }else{
//                                            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 = new BigDecimal(num6_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
//                                            }else{
//                                                break;
//                                            }
//                                        }
                                    }
                                    double v = new BigDecimal(num3).subtract(new BigDecimal(num6)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                                    num3 = (num3 >= num6 ? v : 0);
@@ -1722,23 +1852,24 @@
                                    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 fengzhang = fengzhang(1, driver3.getId(), driver3.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num7_1, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num7_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                                                rechargeRecordService.updateById(rechargeRecord);
                                            }
                                            break;
                                        }else{
                                            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 = new BigDecimal(num7_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                                            }else{
                                                break;
                                            }
                                        }
                                        // TODO 测试屏蔽
//                                        if(surplusDividedAmount.compareTo(num7_1) >= 0){
//                                            ResultUtil fengzhang = fengzhang(1, driver3.getId(), driver3.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num7_1, 3);
//                                            if(fengzhang.getCode() == 10000){
//                                                rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num7_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
//                                                rechargeRecordService.updateById(rechargeRecord);
//                                            }
//                                            break;
//                                        }else{
//                                            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 = new BigDecimal(num7_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
//                                            }else{
//                                                break;
//                                            }
//                                        }
                                    }
                                    double v = new BigDecimal(num3).subtract(new BigDecimal(num7)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                                    num3 = (num3 >= num7 ? v : 0);
@@ -1775,23 +1906,24 @@
                                    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 fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num3_1, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num3_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                                                rechargeRecordService.updateById(rechargeRecord);
                                            }
                                            break;
                                        }else{
                                            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 = new BigDecimal(num3_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                                            }else{
                                                break;
                                            }
                                        }
                                        // TODO 测试屏蔽
//                                        if(surplusDividedAmount.compareTo(num3_1) >= 0){
//                                            ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num3_1, 3);
//                                            if(fengzhang.getCode() == 10000){
//                                                rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num3_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
//                                                rechargeRecordService.updateById(rechargeRecord);
//                                            }
//                                            break;
//                                        }else{
//                                            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 = new BigDecimal(num3_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
//                                            }else{
//                                                break;
//                                            }
//                                        }
                                    }
                                    double v = new BigDecimal(num3).subtract(new BigDecimal(num3_)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                                    num3 = (num3 >= num3_ ? v : 0);
@@ -1825,23 +1957,24 @@
                                    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 fengzhang = fengzhang(1, driver2.getId(), driver2.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num4_1, 3);
                                            if(fengzhang.getCode() == 10000){
                                                rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num4_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                                                rechargeRecordService.updateById(rechargeRecord);
                                            }
                                            break;
                                        }else{
                                            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 = new BigDecimal(num4_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                                            }else{
                                                break;
                                            }
                                        }
                                        // TODO 测试屏蔽
//                                        if(surplusDividedAmount.compareTo(num4_1) >= 0){
//                                            ResultUtil fengzhang = fengzhang(1, driver2.getId(), driver2.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num4_1, 3);
//                                            if(fengzhang.getCode() == 10000){
//                                                rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num4_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
//                                                rechargeRecordService.updateById(rechargeRecord);
//                                            }
//                                            break;
//                                        }else{
//                                            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 = new BigDecimal(num4_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
//                                            }else{
//                                                break;
//                                            }
//                                        }
                                    }
                                    double v = new BigDecimal(num3).subtract(new BigDecimal(num4)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                                    num3 = (num3 >= num4 ? v : 0);
@@ -1878,33 +2011,86 @@
                                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 fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num2_1, 3);
                                        if(fengzhang.getCode() == 10000){
                                            rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num2_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                                            rechargeRecordService.updateById(rechargeRecord);
                                        }
                                        break;
                                    }else{
                                        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 = new BigDecimal(num2_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                                        }else{
                                            break;
                                        }
                                    }
                                    // TODO 测试屏蔽
//                                    if(surplusDividedAmount.compareTo(num2_1) >= 0){
//                                        ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num2_1, 3);
//                                        if(fengzhang.getCode() == 10000){
//                                            rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num2_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
//                                            rechargeRecordService.updateById(rechargeRecord);
//                                        }
//                                        break;
//                                    }else{
//                                        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 = new BigDecimal(num2_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
//                                        }else{
//                                            break;
//                                        }
//                                    }
                                }
                                double v = new BigDecimal(num3).subtract(new BigDecimal(num2_)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                                num3 = (num3 >= num2_ ? v : 0);
                            }
                        }
                    }
                    //处理代理商抽佣
                    if(num3 > 0){
                    //处理平台抽佣
                    if(num4_ > 0){
                        //先平台抽佣
                        num4_ = (num3 >= num4_ ? num4_ : num3);
                        Double balance = revenueService.queryCompanyBalance();
                        Revenue revenue = new Revenue();
                        revenue.setType(1);
                        revenue.setType(2);
                        revenue.setUserType(4);
                        revenue.setUserId(null);
                        revenue.setOrderId(order.getId());
                        revenue.setAmount(num4_);
                        revenue.setCreateTime(new Date());
                        revenueService.insert(revenue);
                        Double num4_1 = num4_;
                        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();
                            // TODO 测试屏蔽
//                            if(surplusDividedAmount.compareTo(num4_1) >= 0){
//                                ResultUtil fengzhang = fengzhang(3, null, "553021440975", order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num4_1, 3);
//                                if(fengzhang.getCode() == 10000){
//                                    rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num4_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
//                                    rechargeRecordService.updateById(rechargeRecord);
//                                }
//                                break;
//                            }else{
//                                ResultUtil fengzhang = fengzhang(3, null, "553021440975", order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), surplusDividedAmount, 3);
//                                if(fengzhang.getCode() == 10000){
//                                    rechargeRecord.setSurplusDividedAmount(0d);
//                                    rechargeRecordService.updateById(rechargeRecord);
//                                    num4_1 = new BigDecimal(num4_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
//                                }else{
//                                    break;
//                                }
//                            }
                        }
                        CompanyFundFlow companyFundFlow = new CompanyFundFlow();
                        companyFundFlow.setType(3);
                        companyFundFlow.setObjectType(1);
                        companyFundFlow.setObjectId(null);
                        companyFundFlow.setBalance(new BigDecimal(balance));
                        companyFundFlow.setMoney(new BigDecimal(num4_));
                        companyFundFlow.setCreateTime(new Date());
                        companyFundFlowService.insert(companyFundFlow);
                        double v = new BigDecimal(num3).subtract(new BigDecimal(num4_)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                        num3 = (num3 >= num4_ ? v : 0);
                    }
                    //处理代理商抽佣
                    if(num3 > 0 && null != driver){
                        Double balance = revenueService.queryAgentBalance(driver.getAgentId());
                        Revenue revenue = new Revenue();
                        revenue.setType(2);
                        revenue.setUserType(3);
                        revenue.setUserId(driver.getAgentId());
                        revenue.setOrderId(order.getId());
@@ -1913,27 +2099,38 @@
                        revenueService.insert(revenue);
                        Agent agent = agentService.selectById(driver.getAgentId());
                        Double num3_1 = num3;
                        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 fengzhang = fengzhang(2, agent.getId(), agent.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num3, 3);
                                if(fengzhang.getCode() == 10000){
                                    rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num3)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                                    rechargeRecordService.updateById(rechargeRecord);
                                }
                                break;
                            }else{
                                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 = new BigDecimal(num3).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                                }else{
                                    break;
                                }
                            }
                            // TODO 测试屏蔽
//                            if(surplusDividedAmount.compareTo(num3_1) >= 0){
//                                ResultUtil fengzhang = fengzhang(2, agent.getId(), agent.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num3_1, 3);
//                                if(fengzhang.getCode() == 10000){
//                                    rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num3_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
//                                    rechargeRecordService.updateById(rechargeRecord);
//                                }
//                                break;
//                            }else{
//                                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_1 = new BigDecimal(num3_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
//                                }else{
//                                    break;
//                                }
//                            }
                        }
                        CompanyFundFlow companyFundFlow = new CompanyFundFlow();
                        companyFundFlow.setType(3);
                        companyFundFlow.setObjectType(2);
                        companyFundFlow.setObjectId(driver.getAgentId());
                        companyFundFlow.setBalance(new BigDecimal(balance));
                        companyFundFlow.setMoney(new BigDecimal(num3));
                        companyFundFlow.setCreateTime(new Date());
                        companyFundFlowService.insert(companyFundFlow);
                    }
                }
            }
@@ -2092,6 +2289,14 @@
        }
        if(type == 3){//收入
            performanceRankingWarppers = revenueService.queryDriverRank(1, time, dayType);
            // 通过司机id 去差订单的优惠金额
            for (PerformanceRankingWarpper performanceRankingWarpper : performanceRankingWarppers) {
                List<Order> orders = this.baseMapper.selectList(new EntityWrapper<Order>().eq("driverId", performanceRankingWarpper.getDriverId()).isNotNull("payMoney"));
                double sum = orders.stream().mapToDouble(Order::getDiscountedPrice).sum();
                double sum1 = orders.stream().mapToDouble(Order::getDiscountAmount).sum();
                performanceRankingWarpper.setAmountOfData(new BigDecimal(performanceRankingWarpper.getAmountOfData()+sum+sum1).setScale(2,RoundingMode.HALF_UP).doubleValue());
            }
        }
        for (int i = 0; i < performanceRankingWarppers.size(); i++) {
            PerformanceRankingWarpper performanceRankingWarpper = performanceRankingWarppers.get(i);
@@ -2131,10 +2336,6 @@
            if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                break;
            }
            if(i == performanceRankingWarppers.size() - 1){
                position = 0;
                d = 0D;
            }
        }
        MyAchievementWarpper myAchievementWarpper = new MyAchievementWarpper();
        myAchievementWarpper.setType("订单");
@@ -2156,10 +2357,6 @@
            }
            if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                break;
            }
            if(i == performanceRankingWarppers.size() - 1){
                position = 0;
                d = 0D;
            }
        }
        myAchievementWarpper = new MyAchievementWarpper();
@@ -2183,10 +2380,6 @@
            if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
                break;
            }
            if(i == performanceRankingWarppers.size() - 1){
                position = 0;
                d = 0D;
            }
        }
        myAchievementWarpper = new MyAchievementWarpper();
        myAchievementWarpper.setType("佣金");
@@ -2206,7 +2399,30 @@
        List<Order> orders = this.selectList(new EntityWrapper<Order>().eq("state", 107).eq("status", 1)
                .eq("payType", 3).last(" and UNIX_TIMESTAMP(getoffTime) + 600 <= UNIX_TIMESTAMP(now())"));
        for (Order order : orders) {
            completeCollection_(order);
            Long orderId = order.getId();
            try {
                boolean lock = redisUtil.lock(orderId + "",5);
                if(!lock){
                    int num1 = 1;
                    while (num1 <= 10){
                        Thread.sleep(3000);//等待3秒
                        lock = redisUtil.lock(orderId + "",5);
                        if(lock){
                            break;
                        }else{
                            num1++;
                        }
                    }
                }
                if(!lock){
                    redisUtil.unlock(orderId + "");
                    continue;
                }
                completeCollection_(order);
            }catch (Exception e){
                redisUtil.unlock(orderId + "");
                e.printStackTrace();
            }
        }
    }
@@ -2214,7 +2430,7 @@
    public void completeCollection_(Order order) {
    public void completeCollection_(Order order) throws Exception{
        order.setState(108);
        order.setPayTime(new Date());
        if(null != order.getCouponId()){
@@ -2265,11 +2481,6 @@
        }
        this.updateById(order);
        try {
            saveRevenue(order);
        } catch (Exception e) {
            e.printStackTrace();
        }
        saveRevenue(order);
    }
}