From 36695821ea10197d7758babc7bc2b5dfb66dd88e Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期六, 24 六月 2023 09:30:26 +0800
Subject: [PATCH] 修改bug

---
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java |   29 ++++++++++++++++-------------
 1 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
index d9ceaf8..a87c1fc 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
@@ -228,8 +228,6 @@
      * @return
      */
     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){
@@ -289,12 +287,14 @@
                     order.setStartDistance(distance);//起步里程
                     order.setStartPrice(num4);//起步价
                 }else{
-                    BigDecimal subtract = new BigDecimal(distance).subtract(new BigDecimal(num3)).setScale(2, BigDecimal.ROUND_HALF_EVEN);//超出起步里程
-                    BigDecimal divide = subtract.divide(new BigDecimal(num5), 2, BigDecimal.ROUND_HALF_EVEN);
-                    BigDecimal multiply = divide.multiply(new BigDecimal(num6));
+                    Double distance1 = distance;//原始里程
                     order.setStartDistance(num3);//起步里程
                     order.setStartPrice(num4);//起步价
-                    order.setOverDriveDistance(subtract.doubleValue());//超出起步里程
+                    order.setOverDriveDistance(new BigDecimal(distance1 - num3).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//超出起步里程
+
+                    distance = new BigDecimal(distance).setScale(0, RoundingMode.UP).doubleValue();//向上取整
+                    BigDecimal divide = new BigDecimal(distance - num3).divide(new BigDecimal(num5), 2, BigDecimal.ROUND_HALF_EVEN);
+                    BigDecimal multiply = divide.multiply(new BigDecimal(num6));
                     order.setOverDrivePrice(multiply.doubleValue());//超出起步里程费
 
                     //计算长途费(超出长途起始公里,费用开始按照长途规则计算。)
@@ -309,10 +309,10 @@
                     }
                     //计算长途里程超出的部分
                     if(distance.compareTo(num8) > 0){
-                        BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num8)).setScale(2, BigDecimal.ROUND_HALF_EVEN);
-                        BigDecimal divide1 = subtract1.divide(new BigDecimal(num10), 2, BigDecimal.ROUND_HALF_EVEN);
+                        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);
                         BigDecimal multiply1 = divide1.multiply(new BigDecimal(num11));
-                        order.setOverLongDistance(subtract1.doubleValue());//超出长途里程
                         order.setOverLongDistancePrice(multiply1.doubleValue());//超出长途里程费
                     }
                 }
@@ -333,10 +333,10 @@
 
         //等待费用
         if(waitTime.compareTo(num1 * 60) >= 0){
-            order.setWaitTime(num1);//等待时长
+            order.setWaitTime(num1 * 60);//等待时长
             order.setWaitTimePrice(num2);//等待费用
 
-            Integer w = waitTime - (num3 * 60);
+            Integer w = waitTime - (num1 * 60);
             BigDecimal multiply = new BigDecimal(w).divide(new BigDecimal(60), 0, RoundingMode.UP).multiply(new BigDecimal(num4));
             order.setOutWaitTime(w);//等待时长超出分钟
             order.setOutWaitTimePrice(multiply.doubleValue());//等待时长超出费用
@@ -858,6 +858,9 @@
     }
 
 
+
+
+
     /**
      * 获取订单详情
      * @param orderId
@@ -876,7 +879,7 @@
         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());
+        orderInfoWarpper.setActualMileage(new BigDecimal(actualMileage / 1000).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
 
         if(orderInfoWarpper.getTravelTime() == null){
             orderInfoWarpper.setTravelTime(0);
@@ -956,7 +959,7 @@
                             .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);
+                order = getOrderPrice(2, Double.valueOf(order.getActualMileage()) / 1000, order.getWaitTime(), order, city);
 
                 //修改司机状态和积分
                 Driver driver = driverService.selectById(order.getDriverId());

--
Gitblit v1.7.1