From 7e9c4b59d353da2d911579daf8b1e1211defe08b Mon Sep 17 00:00:00 2001 From: bai <1643359946@qq.com> Date: Tue, 18 Jun 2024 23:21:40 +0800 Subject: [PATCH] =?UTF-8?q?2024=E5=B9=B46=E6=9C=8818=E6=97=A5=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=8E=B7=E5=8F=96=E5=87=BA=E8=A1=8C=E4=BB=B7=E6=A0=BC?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sqx/common/utils/baidu/BaiduCommon.java | 90 +++++++++++++++ src/main/java/com/sqx/map/CommonMapUtils.java | 37 ++++-- .../service/impl/OrdersServiceImpl.java | 5 +- .../sqx/modules/common/enums/CommonEnum.java | 25 ++--- .../common/utils/CommonConfigUtil.java | 12 ++ .../controller/TravelConfController.java | 7 ++ .../modules/travelconf/enums/TravelEnum.java | 40 ++++--- .../travelconf/service/TravelConfService.java | 25 ++++- .../service/impl/TravelConfServiceImpl.java | 106 +++++++++++++++++- .../modules/travelconf/vo/TravelPriceVo.java | 27 +++++ 10 files changed, 321 insertions(+), 53 deletions(-) create mode 100644 src/main/java/com/sqx/common/utils/baidu/BaiduCommon.java create mode 100644 src/main/java/com/sqx/modules/travelconf/vo/TravelPriceVo.java diff --git a/src/main/java/com/sqx/common/utils/baidu/BaiduCommon.java b/src/main/java/com/sqx/common/utils/baidu/BaiduCommon.java new file mode 100644 index 0000000..156e7bf --- /dev/null +++ b/src/main/java/com/sqx/common/utils/baidu/BaiduCommon.java @@ -0,0 +1,90 @@ +package com.sqx.common.utils.baidu; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSON; +import cn.hutool.json.JSONUtil; +import cn.hutool.setting.dialect.Props; +import com.google.common.collect.Maps; + +import java.util.Map; + +/** + * @ClassName BaiduCommon + * @Description TODO + * @Author bai + * @Date 2024/6/17 下午8:22 + * @Version 1.0 + **/ +public class BaiduCommon { + + //接口版本 + public static final String VERSION = "1"; + + //接口前缀 + public static final String BASE_PREFIX_PATH = "https://pns.baidubce.com/cloud/api/v"; + + //接口前缀 + + //拼接后的完整接口前缀 + public static final String BASE_PATH = BASE_PREFIX_PATH + VERSION; + + //绑定 + public static final String API_AXB_BINDING = BASE_PATH + "/axb/binding"; + + //解绑 + public static final String API_AXB_UNBINDING = BASE_PATH + "/axb/unbinding"; + + //转绑 + public static final String API_AXB_CHANGE_BINDING = BASE_PATH + "/axb/changeBinding"; + + public static String genSigned(){ + return null; + } + + public static String getUTCDate(){ + DateTime now = DateTime.now(); + return DateUtil.format(now, DatePattern.UTC_PATTERN); + } + + //发出请求 + public static String baseSendHttp(String url, Map headerMap, String json) { + return HttpRequest + .post(url) + .headerMap(headerMap, true) + //.form(paramMap) + .body(json) + .execute() + .body(); + } + + public static Map getBaseHeaderMap(){ + Map baseHeaderMap = Maps.newHashMap(); + baseHeaderMap.put("Authorization","bce-auth-v{1}/{accessKeyId}/{timestamp}/{expirationPeriodInSeconds}/{signedHeaders}/{signature}"); + +// version是正整数。 +// timestamp是生成签名时的UTC时间。 +// expirationPeriodInSeconds表示签名有效期限。 +// signedHeaders是签名算法中涉及到的头域列表。头域名之间用分号(;)分隔,如host;x-bce-date。列表按照字典序排列。(本API签名仅使用host和x-bce-date两个header) +// signature是256位签名的十六进制表示,由64个小写字母组成。 + + baseHeaderMap.put("Content-Type","application/json; charset=utf-8"); + baseHeaderMap.put("x-bce-date", getUTCDate());//2019-10-30T10:55:26Z + return baseHeaderMap; + } + + public static JSON sendHttpToJson(String url, Map paramMap){ + // + Props props = new Props("test.properties"); + props.getStr("1111"); + return JSONUtil.parse(baseSendHttp(url, getBaseHeaderMap(), JSONUtil.toJsonStr(paramMap))); + } + + + + + +} diff --git a/src/main/java/com/sqx/map/CommonMapUtils.java b/src/main/java/com/sqx/map/CommonMapUtils.java index 0670436..8d3e2a3 100644 --- a/src/main/java/com/sqx/map/CommonMapUtils.java +++ b/src/main/java/com/sqx/map/CommonMapUtils.java @@ -215,11 +215,11 @@ public class CommonMapUtils { /** * 根据开始位置和结束位置根据出行方式获取米 * @param mapType - * @param tripWay - * @param longitude - * @param latitude - * @param toLongitude - * @param toLatitude + * @param tripWay (2:驾车/出租,其他值:公交) + * @param longitude 经度 116.307490 + * @param latitude 纬度 39.984154 + * @param toLongitude 经度 116.307490 + * @param toLatitude 纬度 39.984154 * @return */ public static JSONObject calcTaxiMoney(MapEnum mapType,Integer tripWay, String longitude, String latitude, String toLongitude, String toLatitude, String city, String cityCode){ @@ -287,11 +287,11 @@ public class CommonMapUtils { /** * 根据开始位置和结束位置根据出行方式获取米 - * @param tripWay - * @param longitude - * @param latitude - * @param toLongitude - * @param toLatitude + * @param tripWay (2:驾车/出租,其他值:公交) + * @param longitude 经度 116.307490 + * @param latitude 纬度 39.984154 + * @param toLongitude 经度 116.307490 + * @param toLatitude 纬度 39.984154 * @return */ public static JSONObject calcTaxiMoneyInfo(Integer tripWay, String longitude, String latitude, String toLongitude, String toLatitude, String city, String cityCode){ @@ -348,5 +348,22 @@ public class CommonMapUtils { } + /** + * 查询距离 (米) + * @param tripWay (2:驾车/出租,其他值:公交) + * @param longitude 经度 116.307490 + * @param latitude 纬度 39.984154 + * @param toLongitude 经度 116.307490 + * @param toLatitude 纬度 39.984154 + * @return + */ + public static JSONObject calcTaxiMoneyInfo(Integer tripWay, String longitude, String latitude, String toLongitude, String toLatitude) { + JSONObject mapAdRes = CommonMapUtils.getLocationToAdInfo(longitude, latitude); + String cityName = mapAdRes.getString("city"); + String cityCode = mapAdRes.getString("adcode"); + return calcTaxiMoneyInfo(tripWay, longitude, latitude, toLongitude, toLatitude, cityName, cityCode); + } + + } diff --git a/src/main/java/com/sqx/modules/artificer/service/impl/OrdersServiceImpl.java b/src/main/java/com/sqx/modules/artificer/service/impl/OrdersServiceImpl.java index 1435989..45159c7 100644 --- a/src/main/java/com/sqx/modules/artificer/service/impl/OrdersServiceImpl.java +++ b/src/main/java/com/sqx/modules/artificer/service/impl/OrdersServiceImpl.java @@ -152,10 +152,7 @@ public class OrdersServiceImpl extends ServiceImpl implements } //获取城市名称 - JSONObject mapAdRes = CommonMapUtils.getLocationToAdInfo(longitude, latitude); - String cityName = mapAdRes.getString("city"); - String cityCode = mapAdRes.getString("adcode"); - JSONObject mapRes = CommonMapUtils.calcTaxiMoneyInfo(artificer.getTripWay(), longitude, latitude, artificer.getLongitude(), artificer.getLatitude(), cityName, cityCode);//根据出行方式计算距离 + JSONObject mapRes = CommonMapUtils.calcTaxiMoneyInfo(artificer.getTripWay(), longitude, latitude, artificer.getLongitude(), artificer.getLatitude());//根据出行方式计算距离 //判断技师的出行方式 if (artificer.getTripWay() == null || artificer.getTripWay() == 1) { diff --git a/src/main/java/com/sqx/modules/common/enums/CommonEnum.java b/src/main/java/com/sqx/modules/common/enums/CommonEnum.java index 0c31ca3..390803b 100644 --- a/src/main/java/com/sqx/modules/common/enums/CommonEnum.java +++ b/src/main/java/com/sqx/modules/common/enums/CommonEnum.java @@ -2,8 +2,10 @@ package com.sqx.modules.common.enums; import com.sqx.modules.common.utils.CommonConfigUtil; import lombok.Getter; +import lombok.RequiredArgsConstructor; @Getter +@RequiredArgsConstructor public enum CommonEnum { NONE(null,null,null,null), @@ -32,7 +34,9 @@ public enum CommonEnum { /**白天时段从n开始~n结束*/ V3_TRAVEL_CONF_DAY(445, "v3_travel_conf", "白天时段从n开始~n结束", "2"), /**夜间时段从n开始~n结束(留空自动计算)*/ - V3_TRAVEL_CONF_NIGHT(446, "v3_travel_conf", "夜间时段从n开始~n结束(留空自动计算)", ","); + V3_TRAVEL_CONF_NIGHT(446, "v3_travel_conf", "夜间时段从n开始~n结束(留空自动计算)", ","), + + V3_TRAVEL_CONF_IS_FIXED(447, "v3_travel_conf", "出行配置使用动态价格", "true"); private final Integer key; @@ -42,13 +46,6 @@ public enum CommonEnum { private final String defValue; - CommonEnum(Integer key, String defCondition, String defName, String defValue) { - this.key = key; - this.defCondition = defCondition; - this.defName = defName; - this.defValue = defValue; - } - // private boolean defValueIsEmpty() { // return CommonConfigUtil.defValueIsEmpty(this.defValue); // } @@ -84,6 +81,7 @@ public enum CommonEnum { } @Getter + @RequiredArgsConstructor public enum GroupKeyEnum { /** @@ -131,17 +129,15 @@ public enum CommonEnum { V3_TRAVEL_CONF_DAYLIGHT_SAVING_TIME.getKey(), V3_TRAVEL_CONF_WINTER_TIME.getKey(), V3_TRAVEL_CONF_DAY.getKey(), - V3_TRAVEL_CONF_NIGHT.getKey() + V3_TRAVEL_CONF_NIGHT.getKey(), + V3_TRAVEL_CONF_IS_FIXED.getKey() }); private final Integer[] values; - - GroupKeyEnum(Integer[] values) { - this.values = values; - } } @Getter + @RequiredArgsConstructor public enum GroupConditionEnum { V3_ORDER_FORM("v3_order_form"), @@ -149,8 +145,5 @@ public enum CommonEnum { V3_TRAVEL_CONF("v3_travel_conf"); private final String value; - GroupConditionEnum(String value){ - this.value = value; - } } } diff --git a/src/main/java/com/sqx/modules/common/utils/CommonConfigUtil.java b/src/main/java/com/sqx/modules/common/utils/CommonConfigUtil.java index 7d21cfc..1fd535e 100644 --- a/src/main/java/com/sqx/modules/common/utils/CommonConfigUtil.java +++ b/src/main/java/com/sqx/modules/common/utils/CommonConfigUtil.java @@ -56,6 +56,18 @@ public class CommonConfigUtil { return Double.valueOf(value); } + /** + * 转为boolean类型 + * @param value 转换的值 + * @return 转换后的值 + */ + public static boolean getBooleanValue(String value) { + if(defValueIsEmpty(value)) return false; + return Boolean.getBoolean(value); + } + + + /** * 获取数组,默认按,分隔 * @param value 转换的值 diff --git a/src/main/java/com/sqx/modules/travelconf/controller/TravelConfController.java b/src/main/java/com/sqx/modules/travelconf/controller/TravelConfController.java index ac7dd8a..7f01d19 100644 --- a/src/main/java/com/sqx/modules/travelconf/controller/TravelConfController.java +++ b/src/main/java/com/sqx/modules/travelconf/controller/TravelConfController.java @@ -86,5 +86,12 @@ public class TravelConfController { return Result.success(); } + @GetMapping("/calcTravelPrice") + @ApiOperation("获取出行价格") + public Result calcTravelPrice(Long artificerId, String toLongitude, String toLatitude){ + return Result.success().put("data", service.calcTravelPrice(artificerId, toLongitude, toLatitude)); + } + + } \ No newline at end of file diff --git a/src/main/java/com/sqx/modules/travelconf/enums/TravelEnum.java b/src/main/java/com/sqx/modules/travelconf/enums/TravelEnum.java index 48c451f..712a9ac 100644 --- a/src/main/java/com/sqx/modules/travelconf/enums/TravelEnum.java +++ b/src/main/java/com/sqx/modules/travelconf/enums/TravelEnum.java @@ -1,8 +1,7 @@ package com.sqx.modules.travelconf.enums; -import com.sqx.modules.common.utils.CommonConfigUtil; -import com.sqx.modules.travelconf.entity.TravelConf; import lombok.Getter; +import lombok.RequiredArgsConstructor; public class TravelEnum { @@ -11,6 +10,7 @@ public class TravelEnum { * 价格类型 */ @Getter + @RequiredArgsConstructor public enum PricingType { /*** @@ -23,10 +23,25 @@ public class TravelEnum { TRENDS(2); private final Integer value; + } - PricingType(Integer value) { - this.value = value; - } + /** + * 固定价格类型 + */ + @Getter + @RequiredArgsConstructor + public enum FixedType { + + /** + * 往返 + */ + RETURN(1), + /** + * 单程 + */ + ONE_WAY(2); + + private final Integer value; } @@ -34,6 +49,7 @@ public class TravelEnum { * 出行方式 */ @Getter + @RequiredArgsConstructor public enum TravelType { /*** @@ -50,16 +66,13 @@ public class TravelEnum { FREE(3); private final Integer value; - - TravelType(Integer value) { - this.value = value; - } } /** * 时令 */ @Getter + @RequiredArgsConstructor public enum SeasonsType { /*** @@ -72,16 +85,13 @@ public class TravelEnum { WINTER_TIME(2); private final Integer value; - - SeasonsType(Integer value) { - this.value = value; - } } /** * 时段 */ @Getter + @RequiredArgsConstructor public enum TimeIntervalType { /*** @@ -94,10 +104,6 @@ public class TravelEnum { NIGHT(2); private final Integer value; - - TimeIntervalType(Integer value) { - this.value = value; - } } diff --git a/src/main/java/com/sqx/modules/travelconf/service/TravelConfService.java b/src/main/java/com/sqx/modules/travelconf/service/TravelConfService.java index a61ca36..e374dc2 100644 --- a/src/main/java/com/sqx/modules/travelconf/service/TravelConfService.java +++ b/src/main/java/com/sqx/modules/travelconf/service/TravelConfService.java @@ -3,7 +3,9 @@ package com.sqx.modules.travelconf.service; import com.baomidou.mybatisplus.extension.service.IService; import com.sqx.modules.travelconf.entity.TravelConf; +import com.sqx.modules.travelconf.vo.TravelPriceVo; +import java.math.BigDecimal; import java.util.Date; public interface TravelConfService extends IService { @@ -11,11 +13,10 @@ public interface TravelConfService extends IService { /** * - * @param pricingType 价格类型(1:固定价格,2:动态价格) * @param travelType 出行方式(1:免费,2:出租,3:公共交通) * @return */ - TravelConf getConfByAccordingCondition(Integer pricingType, Integer travelType, Date businessTime); + TravelConf getConfByAccordingCondition(Integer travelType, Date businessTime); /** * 根据类型获取出行配置 @@ -27,4 +28,24 @@ public interface TravelConfService extends IService { */ TravelConf getConfByAccordingCondition(Integer pricingType, Integer travelType, Integer seasonsType, Integer timeIntervalType); + /** + * 按ID获取出行价格 + * @param artificerId + * @param toLongitude + * @param toLatitude + * @return + */ + TravelPriceVo calcTravelPrice(Long artificerId, String toLongitude, String toLatitude); + + /** + * 最终获取出行价格 + * @param _travelType + * @param freeKilometers + * @param longitude + * @param latitude + * @param toLongitude + * @param toLatitude + * @return + */ + TravelPriceVo calcTravelPrice(Integer _travelType, BigDecimal freeKilometers, String longitude, String latitude, String toLongitude, String toLatitude); } diff --git a/src/main/java/com/sqx/modules/travelconf/service/impl/TravelConfServiceImpl.java b/src/main/java/com/sqx/modules/travelconf/service/impl/TravelConfServiceImpl.java index 12ed011..1ff07cc 100644 --- a/src/main/java/com/sqx/modules/travelconf/service/impl/TravelConfServiceImpl.java +++ b/src/main/java/com/sqx/modules/travelconf/service/impl/TravelConfServiceImpl.java @@ -2,9 +2,14 @@ package com.sqx.modules.travelconf.service.impl; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sqx.common.exception.SqxException; +import com.sqx.map.CommonMapUtils; +import com.sqx.modules.artificer.entity.Artificer; +import com.sqx.modules.artificer.service.ArtificerService; import com.sqx.modules.common.entity.CommonInfo; import com.sqx.modules.common.enums.CommonEnum; import com.sqx.modules.common.service.CommonInfoService; @@ -13,9 +18,11 @@ import com.sqx.modules.travelconf.dao.TravelConfDao; import com.sqx.modules.travelconf.entity.TravelConf; import com.sqx.modules.travelconf.enums.TravelEnum; import com.sqx.modules.travelconf.service.TravelConfService; +import com.sqx.modules.travelconf.vo.TravelPriceVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.Date; import java.util.Map; @@ -28,20 +35,36 @@ public class TravelConfServiceImpl extends ServiceImpl commonInfoMap = commonInfoService.getMapByCondition(CommonEnum.GroupConditionEnum.V3_TRAVEL_CONF.getValue()); + //价格类型 + CommonInfo pricingTypeConfig = commonInfoMap.get(CommonEnum.V3_TRAVEL_CONF_IS_FIXED.getKey()); + + if(pricingTypeConfig == null) { + //throw new SqxException("无法找到出行配置,请联系管理员!"); + pricingType = TravelEnum.PricingType.TRENDS.getValue(); + }else if(CommonConfigUtil.getBooleanValue(pricingTypeConfig.getValue())){ + pricingType = TravelEnum.PricingType.TRENDS.getValue(); + } else { + pricingType = TravelEnum.PricingType.FIXED.getValue(); + } + //夏令时段 CommonInfo daylightSavingTime = commonInfoMap.get(CommonEnum.V3_TRAVEL_CONF_DAYLIGHT_SAVING_TIME.getKey()); //冬令时段 @@ -112,7 +135,7 @@ public class TravelConfServiceImpl extends ServiceImpl