From 200b75e04db9ba1364f7efbe537ec87867d3e483 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Thu, 16 May 2024 16:41:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=93=81=E5=88=97=E8=A1=A8=20?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=8C=BA=E5=9F=9F=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cashierservice/entity/TbShopInfo.java | 3 +++ .../entity/vo/ProductInfoVo.java | 3 +++ .../service/GroupOrderInfoService.java | 4 ++-- .../service/HomeDistrictService.java | 8 ++++---- .../service/ProductService.java | 11 ++++++---- .../cashierservice/util/LocationUtils.java | 20 ++++++++++++++----- .../resources/mapper/TbShopInfoMapper.xml | 5 ++++- 7 files changed, 38 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbShopInfo.java b/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbShopInfo.java index acd1778..003e451 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbShopInfo.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbShopInfo.java @@ -106,6 +106,9 @@ public class TbShopInfo implements Serializable { * 商户标签 */ private String tag; + private String provinces; + private String cities; + private String districts; private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/entity/vo/ProductInfoVo.java b/src/main/java/com/chaozhanggui/system/cashierservice/entity/vo/ProductInfoVo.java index 97b5e97..efcfe7e 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/entity/vo/ProductInfoVo.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/entity/vo/ProductInfoVo.java @@ -70,6 +70,9 @@ public class ProductInfoVo { * 距离 */ private String distances = "100"; + private String lat; + private String lng; + private String districts; /** * 地址 */ diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/GroupOrderInfoService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/GroupOrderInfoService.java index 03362d9..7183778 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/GroupOrderInfoService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/GroupOrderInfoService.java @@ -78,10 +78,10 @@ public class GroupOrderInfoService { TbShopInfo shopInfo = shopInfoMapper.selectByPrimaryKey(groupOrder.getShopId()); result.setShopName(shopInfo.getShopName()); - BigDecimal distance = LocationUtils.getDistanceFrom2LngLat( + String distance = LocationUtils.getDistanceString( Double.parseDouble(lng), Double.parseDouble(lat), Double.parseDouble(shopInfo.getLng()), Double.parseDouble(shopInfo.getLat())); - result.setDistances(distance.toString()); + result.setDistances(distance); result.setAddress(shopInfo.getAddress()); result.setShopPhone(shopInfo.getPhone()); diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/HomeDistrictService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/HomeDistrictService.java index 3f2afd7..db7e26a 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/HomeDistrictService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/HomeDistrictService.java @@ -109,10 +109,10 @@ public class HomeDistrictService { param.getAddress(), param.getLng(), param.getLat(),null);//西安市 for (SubShopVo subShopVo : subShopVos) {//距离计算 if (StringUtils.isNotBlank(subShopVo.getLat()) && StringUtils.isNotBlank(subShopVo.getLng())) { - BigDecimal distance = LocationUtils.getDistanceFrom2LngLat( + String distance = LocationUtils.getDistanceString( Double.parseDouble(param.getLng()), Double.parseDouble(param.getLat()), Double.parseDouble(subShopVo.getLng()), Double.parseDouble(subShopVo.getLat())); - subShopVo.setDistances(distance.toString()); + subShopVo.setDistances(distance); } } return Result.success(CodeEnum.SUCCESS, new PageInfo(subShopVos)); @@ -133,10 +133,10 @@ public class HomeDistrictService { for (SubShopVo subShopVo : subShopVos) {//距离计算 subShopVo.setBusinessTime(subShopVo.getBusinessStartDay()+"至"+subShopVo.getBusinessEndDay()+" "+subShopVo.getBusinessTime()); if (StringUtils.isNotBlank(subShopVo.getLat()) && StringUtils.isNotBlank(subShopVo.getLng())) { - BigDecimal distance = LocationUtils.getDistanceFrom2LngLat( + String distance = LocationUtils.getDistanceString( Double.parseDouble(param.getLng()), Double.parseDouble(param.getLat()), Double.parseDouble(subShopVo.getLng()), Double.parseDouble(subShopVo.getLat())); - subShopVo.setDistances(distance.toString()); + subShopVo.setDistances(distance); } } return Result.success(CodeEnum.SUCCESS, subShopVos); diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java index d31e44b..4458dc6 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java @@ -204,10 +204,10 @@ public class ProductService { homeVO.setShopTag(JSONUtil.parseListTNewList(tbPlatformDicts, TagVo.class)); } if (StringUtils.isNotBlank(o.getLat()) && StringUtils.isNotBlank(o.getLng())) { - BigDecimal distance = LocationUtils.getDistanceFrom2LngLat( + String distance = LocationUtils.getDistanceString( Double.parseDouble(homeDto.getLng()), Double.parseDouble(homeDto.getLat()), Double.parseDouble(o.getLng()), Double.parseDouble(o.getLat())); - homeVO.setDistances(distance.toString()); + homeVO.setDistances(distance); } homeVO.setProductName(o.getProName()); homeVO.setImage(o.getProImg()); @@ -297,12 +297,15 @@ public class ProductService { productInfo.setShopNum(i); } productInfo.setPhone(tbShopInfo.getPhone()); + productInfo.setLat(tbShopInfo.getLat()); + productInfo.setLng(tbShopInfo.getLng()); productInfo.setBusinessTime(tbShopInfo.getBusinessStartDay() + "至" + tbShopInfo.getBusinessEndDay() + " " + tbShopInfo.getBusinessTime()); - BigDecimal distance = LocationUtils.getDistanceFrom2LngLat( + String distance = LocationUtils.getDistanceString( Double.parseDouble(lng), Double.parseDouble(lat), Double.parseDouble(tbShopInfo.getLng()), Double.parseDouble(tbShopInfo.getLat())); - productInfo.setDistances(distance.toString());//距离 + productInfo.setDistances(distance);//距离 productInfo.setAddress(tbShopInfo.getAddress()); + productInfo.setDistricts(tbShopInfo.getDistricts()); List productVos = JSONUtil.parseListTNewList(tbProduct.getGroupSnap(), ProductVo.class); for (ProductVo productVo : productVos) { diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/util/LocationUtils.java b/src/main/java/com/chaozhanggui/system/cashierservice/util/LocationUtils.java index c733b2c..65565ad 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/util/LocationUtils.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/util/LocationUtils.java @@ -17,6 +17,7 @@ import static java.lang.Math.sin; public class LocationUtils { /** * 通过Ip获取定位信息 + * * @param ip * @return */ @@ -24,7 +25,7 @@ public class LocationUtils { Map param = new HashMap<>(); //超掌柜生活-用户端 param.put("key", "7a7f2e4790ea222660a027352ee3af39"); - if(StringUtils.isNotBlank(ip)){ + if (StringUtils.isNotBlank(ip)) { param.put("ip", ip); } String s = HttpClientUtil.doGet("https://restapi.amap.com/v3/ip", param); @@ -36,7 +37,7 @@ public class LocationUtils { */ public static JsonNode geocode(String location) { RestTemplate restTemplate = new RestTemplate(); - String s = restTemplate.getForObject("https://restapi.amap.com/v3/geocode/regeo?key=7a7f2e4790ea222660a027352ee3af39&location="+location, String.class); + String s = restTemplate.getForObject("https://restapi.amap.com/v3/geocode/regeo?key=7a7f2e4790ea222660a027352ee3af39&location=" + location, String.class); ObjectMapper objectMapper = new ObjectMapper(); // 将 JSON 字符串解析为 JsonNode 对象 try { @@ -49,6 +50,7 @@ public class LocationUtils { /** * 行政区域查询 + * * @param keywords * @return */ @@ -83,12 +85,21 @@ public class LocationUtils { double a = radLat1 - radLat2; double b = radLng1 - radLng2; - double dis= 2 * asin(sqrt(sin(a / 2) * sin(a / 2) + cos(radLat1) * cos(radLat2) * sin(b / 2) * sin(b / 2))) * 6378.137; + double dis = 2 * asin(sqrt(sin(a / 2) * sin(a / 2) + cos(radLat1) * cos(radLat2) * sin(b / 2) * sin(b / 2))) * 6378.137; BigDecimal bigDecimalValue = new BigDecimal(dis); bigDecimalValue = bigDecimalValue.setScale(3, RoundingMode.DOWN); return bigDecimalValue; } + public static String getDistanceString(double lng1, double lat1, double lng2, double lat2) { + BigDecimal distance = getDistanceFrom2LngLat(lng1, lat1, lng2, lat2); + if (distance.compareTo(BigDecimal.ONE) < 0) { + return distance.multiply(new BigDecimal(1000)) + "m"; + } else { + return distance + "km"; + } + } + /** * @param longitude 经度 108 * @param latitude 纬度 34 @@ -128,14 +139,13 @@ public class LocationUtils { } - - /** * 将角度转化为弧度 */ public static double radians(double d) { return d * Math.PI / 180.0; } + //1KM public static void main(String[] args) { Map stringMap = returnLLSquarePoint(108.975418, 34.280890, "5"); diff --git a/src/main/resources/mapper/TbShopInfoMapper.xml b/src/main/resources/mapper/TbShopInfoMapper.xml index 9ed5468..ff6c738 100644 --- a/src/main/resources/mapper/TbShopInfoMapper.xml +++ b/src/main/resources/mapper/TbShopInfoMapper.xml @@ -48,6 +48,9 @@ + + + @@ -60,7 +63,7 @@ detail, lat, lng, mch_id, register_type, is_wx_ma_independent, address, city, type, industry, industry_name, business_start_day,business_end_day,business_time, post_time, post_amount_line, on_sale, settle_type, settle_time, enter_at, expire_at, status, average, order_wait_pay_minute, support_device_number, - distribute_level, created_at, updated_at, proxy_id, shop_qrcode, tag,is_open_yhq + distribute_level, created_at, updated_at, proxy_id, shop_qrcode, tag,is_open_yhq,provinces,cities,districts view