Pu Zhibing
3 天以前 b219589d73f46bd98995bceb4caf16dadb56b869
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java
@@ -1,18 +1,22 @@
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;
@@ -69,7 +73,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 +81,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 +131,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,7 +228,7 @@
        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");
@@ -269,7 +294,28 @@
            BigDecimal multiply = BigDecimal.ZERO;
            BigDecimal yt = BigDecimal.ZERO;
            if (d > num2) {
                multiply = new BigDecimal(d).subtract(new BigDecimal(num2)).multiply(new BigDecimal(num3));
                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 = d;
                for (int i = 0; i < list.size(); i++) {
                    Double mileage = list.get(i).getMileage();
                    Double price = list.get(i).getPrice();
                    if(d > mileage){
                        multiply = 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 +451,12 @@
        }
        return map;
    }
    @Data
    public static class MileageObject{
        private Double mileage;
        private Double price;
    }
}