From aa72a1d1d8c792b322281f5ab01996bc62820b13 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期二, 16 九月 2025 15:31:07 +0800
Subject: [PATCH] 修改bug及数据加密传输

---
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java |   80 +++++++++++++++++++++++++++++++++++++--
 1 files changed, 75 insertions(+), 5 deletions(-)

diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java
index 03f0c2a..a42183a 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java
@@ -1,6 +1,7 @@
 package com.stylefeng.guns.modular.system.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.stylefeng.guns.modular.system.dao.ServerCarModelMapper;
@@ -15,11 +16,13 @@
 import com.stylefeng.guns.modular.system.util.ResultUtil;
 import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
 import com.stylefeng.guns.modular.system.warpper.ServerCarModelWarpper;
+import lombok.Data;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 
 
@@ -97,7 +100,9 @@
         first = baseWarppers.stream().filter(s->s.getId() == 2).findFirst();
         if(first.isPresent()){
             serverCarModelWarpper = this.getTextPrice(query.getId(), distance1_, duration_, 0, 2, geocode);
-            price.add(serverCarModelWarpper);
+            if(serverCarModelWarpper!=null){
+                price.add(serverCarModelWarpper);
+            }
         }
         return ResultUtil.success(price);
     }
@@ -127,15 +132,19 @@
      * @throws Exception
      */
     public List<ServerCarModelWarpper> getPrice(Integer companyId, double distance, long duration, long wait, Integer type, Map<String, String> geocode) throws Exception {
+        System.err.println("预估里程:" + distance);
+        System.err.println("预估时间:" + duration);
         String provinceCode = geocode.get("provinceCode");
         String cityCode = geocode.get("cityCode");
         String districtCode = geocode.get("districtCode");
         //获取匹配的城市价格配置
         SystemPriceCity systemPriceCity = systemPriceCityService.queryOne(provinceCode, cityCode, districtCode);
+        System.err.println("获取匹配的城市价格配置:" + systemPriceCity);
         if (null == systemPriceCity) {
             return new ArrayList<>();
         }
         List<Map<String, Object>> list = serverCarModelMapper.queryServerCarModel(type);
+        System.err.println("获取匹配的城市价格配置111:" + list);
         List<ServerCarModelWarpper> data = new ArrayList<>();
         for (Map<String, Object> map : list) {
             Map<String, Object> query1 = systemPriceMapper.query(companyId, type, Integer.valueOf(map.get("id").toString()), systemPriceCity.getId());
@@ -220,13 +229,12 @@
         JSONObject jsonObject = JSON.parseObject(query1.get("content").toString());//等待费
         Double num1 = jsonObject.getDouble("num1");
         Double num2 = jsonObject.getDouble("num2");
-        Double num3 = jsonObject.getDouble("num3");
+        JSONArray mileageList = jsonObject.getJSONArray("mileageList");
         Double num4 = jsonObject.getDouble("num4");
         Double num5 = jsonObject.getDouble("num5");
         String num6 = jsonObject.getString("num6");
         Double num7 = jsonObject.getDouble("num7");
         Double num8 = jsonObject.getDouble("num8");
-        Double num9 = jsonObject.getDouble("num9");
 
         String[] split = num6.split(" - ");
         Integer time1 = Integer.valueOf(split[0].replace(":", ""));
@@ -271,7 +279,34 @@
             BigDecimal multiply = BigDecimal.ZERO;
             BigDecimal yt = BigDecimal.ZERO;
             if (d > num8) {
-                multiply = new BigDecimal(d).subtract(new BigDecimal(num8)).multiply(new BigDecimal(num9));
+
+                if(null != mileageList){
+                    List<MileageObject> list = new ArrayList<>();
+                    for (int i = 0; i < mileageList.size(); i++) {
+                        MileageObject mileageObject = mileageList.getObject(i, MileageObject.class);
+                        list.add(mileageObject);
+                    }
+                    //根据配置的里程倒序排序
+                    list.sort(new Comparator<MileageObject>() {
+                        @Override
+                        public int compare(MileageObject o1, MileageObject o2) {
+                            return o1.getMileage().compareTo(o2.getMileage()) * -1;
+                        }
+                    });
+                    //计算每个阶段的增加费用
+                    Double last = new BigDecimal(d).setScale(0, RoundingMode.DOWN).doubleValue();
+                    for (int i = 0; i < list.size(); i++) {
+                        Double mileage = list.get(i).getMileage();
+                        Double price = list.get(i).getPrice();
+                        if(d > mileage){
+                            if(last <= num2){
+                                break;
+                            }
+                            multiply = multiply.add((new BigDecimal(last).subtract(new BigDecimal(mileage))).multiply(new BigDecimal(price)));
+                            last = mileage;
+                        }
+                    }
+                }
                 if (d > num4) {
                     yt = new BigDecimal(d).subtract(new BigDecimal(num4)).multiply(new BigDecimal(num5));
                 }
@@ -286,7 +321,34 @@
             BigDecimal multiply = BigDecimal.ZERO;
             BigDecimal yt = BigDecimal.ZERO;
             if (d > num2) {
-                multiply = new BigDecimal(d).subtract(new BigDecimal(num2)).multiply(new BigDecimal(num3));
+                if(null != mileageList){
+                    List<MileageObject> list = new ArrayList<>();
+                    for (int i = 0; i < mileageList.size(); i++) {
+                        MileageObject mileageObject = mileageList.getObject(i, MileageObject.class);
+                        list.add(mileageObject);
+                    }
+                    //根据配置的里程倒序排序
+                    list.sort(new Comparator<MileageObject>() {
+                        @Override
+                        public int compare(MileageObject o1, MileageObject o2) {
+                            return o1.getMileage().compareTo(o2.getMileage()) * -1;
+                        }
+                    });
+                    //计算每个阶段的增加费用
+                    Double last = new BigDecimal(d).setScale(0, RoundingMode.DOWN).doubleValue();
+                    for (int i = 0; i < list.size(); i++) {
+                        Double mileage = list.get(i).getMileage();
+                        Double price = list.get(i).getPrice();
+                        if(d > mileage){
+                            if(last <= num2){
+                                break;
+                            }
+                            multiply = multiply.add((new BigDecimal(last).subtract(new BigDecimal(mileage))).multiply(new BigDecimal(price)));
+                            last = mileage;
+                        }
+                    }
+                }
+
                 if (d > num4) {
                     yt = new BigDecimal(d).subtract(new BigDecimal(num4)).multiply(new BigDecimal(num5));
                 }
@@ -422,4 +484,12 @@
         }
         return map;
     }
+
+
+    @Data
+    public static class MileageObject{
+        private Double mileage;
+        private Double price;
+
+    }
 }

--
Gitblit v1.7.1