From 1c40baaf9ca0183945b9881d11ceed5aeebc8290 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 23 十月 2025 11:35:44 +0800
Subject: [PATCH] 修改bug
---
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java | 105 ++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 96 insertions(+), 9 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 7987767..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,23 +1,28 @@
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;
import com.stylefeng.guns.modular.system.dao.SystemPriceMapper;
import com.stylefeng.guns.modular.system.model.Company;
+import com.stylefeng.guns.modular.system.model.OpenCity;
import com.stylefeng.guns.modular.system.model.ServerCarModel;
import com.stylefeng.guns.modular.system.model.SystemPriceCity;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.GDMapElectricFenceUtil;
import com.stylefeng.guns.modular.system.util.GDMapGeocodingUtil;
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.*;
@@ -69,7 +74,6 @@
return ResultUtil.success(new ArrayList<>());
}
- // TODO: 2023/11/4 无法修改
Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLonLat, endLonLat, 1);
if (null == distance) {
return ResultUtil.error("获取预估距离出错", new ArrayList<>());
@@ -78,10 +82,28 @@
double distance1_ = Double.valueOf(distance1).doubleValue();
String duration = distance.get("duration");//时间(秒)
long duration_ = Long.valueOf(duration).longValue();
- List<ServerCarModelWarpper> price = this.getPrice(query.getId(), distance1_, duration_, 0, 1, geocode);
- //添加出租车车型和价格
- ServerCarModelWarpper serverCarModelWarpper = this.getTextPrice(query.getId(), distance1_, duration_, 0, 2, geocode);
- price.add(serverCarModelWarpper);
+ OpenCity openCity = openCityService.openCity1(geocode.get("districtCode"));
+ if(null == openCity){
+ return ResultUtil.error("起点暂未开通");
+ }
+
+ //专车车型
+ List<ServerCarModelWarpper> price = new ArrayList<>();
+ List<BaseWarpper> baseWarppers = openCityBusinessService.queryBusinessById(openCity.getId());
+ Optional<BaseWarpper> first = baseWarppers.stream().filter(s->s.getId() == 1).findFirst();
+ if(first.isPresent()){
+ price = this.getPrice(query.getId(), distance1_, duration_, 0, 1, geocode);
+ }
+
+ //出租车车型
+ ServerCarModelWarpper serverCarModelWarpper = null;
+ first = baseWarppers.stream().filter(s->s.getId() == 2).findFirst();
+ if(first.isPresent()){
+ serverCarModelWarpper = this.getTextPrice(query.getId(), distance1_, duration_, 0, 2, geocode);
+ if(serverCarModelWarpper!=null){
+ price.add(serverCarModelWarpper);
+ }
+ }
return ResultUtil.success(price);
}
@@ -110,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());
@@ -203,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(":", ""));
@@ -254,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));
}
@@ -269,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));
}
@@ -405,4 +484,12 @@
}
return map;
}
+
+
+ @Data
+ public static class MileageObject{
+ private Double mileage;
+ private Double price;
+
+ }
}
--
Gitblit v1.7.1