From 6c0d8fb2db64b8982c4162c7527e72841547110b Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期五, 27 十二月 2024 15:28:50 +0800
Subject: [PATCH] 修改推单规则

---
 UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |   72 +++++++++++++++++++++++++++---------
 1 files changed, 54 insertions(+), 18 deletions(-)

diff --git a/UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index b6c471e..3cc8479 100644
--- a/UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -41,6 +41,7 @@
 import java.math.MathContext;
 import java.math.RoundingMode;
 import java.util.*;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -841,11 +842,12 @@
             }
             
             List<Driver> drivers = driverMapper.queryIdleDriver_(1, orderPrivateCar.getServerCarModelId(), query.getId());
+            drivers = drivers.stream().filter(s->s.getBalance() > -100).collect(Collectors.toList());
             System.err.println("当前获取的司机:"+ JSON.toJSONString(drivers));
         
             //找出距离最近且评分最高的司机
             Double dis = 100000D;
-            Double pf = 0d;
+            Double pf = -1d;
             Driver driver1 = null;
             for(Driver driver : drivers){
                 List<OrderCrossCity> orderCrossCities = crossCityService.selectList(new EntityWrapper<OrderCrossCity>().eq("state", 2).eq("driverId", driver.getId()));
@@ -862,10 +864,16 @@
                     if(fraction > 0){
                         fraction = fraction / evaluates.size();
                     }
-                    if(dis > d && fraction > pf){
+                    if(dis > d){
                         dis = d;
                         pf = fraction;
                         driver1 = driver;
+                    }else if(dis == d){
+                        if(fraction > pf){
+                            dis = d;
+                            pf = fraction;
+                            driver1 = driver;
+                        }
                     }
                 }
             }
@@ -1062,14 +1070,27 @@
             BigDecimal c = null;//司机收入
             Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
             Double speMoney = driver.getSpecialCarCommission();
-            if(driver.getSpecialCarCommissionType() == 2){//固定
-                d = new BigDecimal(speMoney);
-                c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机
-            }
-            if(driver.getSpecialCarCommissionType() == 1){//比例
-                Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney();
-                d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
-                c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+            if(null == speMoney){
+                speMoney = company.getSpeMoney();
+                if(company.getIsSpeFixedOrProportional() == 2){//固定
+                    d = new BigDecimal(speMoney);
+                    c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                }
+                if(company.getIsSpeFixedOrProportional() == 1){//比例
+                    Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney();
+                    d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                    c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                }
+            }else{
+                if(driver.getSpecialCarCommissionType() == 2){//固定
+                    d = new BigDecimal(speMoney);
+                    c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                }
+                if(driver.getSpecialCarCommissionType() == 1){//比例
+                    Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney();
+                    d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                    c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                }
             }
             incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue());
             incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue());
@@ -1277,15 +1298,30 @@
             BigDecimal c = null;//司机收入
             Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
             Double taxi = driver.getSpecialCarCommission();
-            if(driver.getSpecialCarCommissionType() == 2){//固定
-                d = new BigDecimal(taxi);
-                c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+            if(null == taxi){
+                taxi = company.getSpeMoney();
+                if(company.getIsSpeFixedOrProportional() == 2){//固定
+                    d = new BigDecimal(taxi);
+                    c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                }
+                if(company.getIsSpeFixedOrProportional() == 1){//比例
+                    Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney();
+                    d = new BigDecimal(price).multiply(new BigDecimal(taxi).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                    c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                }
+            }else{
+                if(driver.getSpecialCarCommissionType() == 2){//固定
+                    d = new BigDecimal(taxi);
+                    c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                }
+                if(driver.getSpecialCarCommissionType() == 1){//比例
+                    Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney();
+                    d = new BigDecimal(price).multiply(new BigDecimal(taxi).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                    c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                }
             }
-            if(driver.getSpecialCarCommissionType() == 1){//比例
-                Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney();
-                d = new BigDecimal(price).multiply(new BigDecimal(taxi).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
-                c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
-            }
+            
+            
             incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue());
             incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue());
             

--
Gitblit v1.7.1