From 39f561130fdd53bdc385e4cae9595e0db0f76c66 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期四, 18 七月 2024 17:04:01 +0800
Subject: [PATCH] 代码提交

---
 server/service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java |   55 +++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 39 insertions(+), 16 deletions(-)

diff --git a/server/service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
index 2c79efd..a556d35 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
@@ -41,6 +41,7 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
@@ -897,33 +898,32 @@
 
     @Override
     public PageData<Shop> queryShopByLL(PageWrap<Shop> pageWrap) {
-//        if(Objects.isNull(pageWrap.getModel())
-//                || Objects.isNull(pageWrap.getModel().getLatitude())
-//                || Objects.isNull(pageWrap.getModel().getLongitude())){
-//            return null;
-//        }
+        if(Objects.isNull(pageWrap.getModel())
+                || Objects.isNull(pageWrap.getModel().getLatitude())
+                || Objects.isNull(pageWrap.getModel().getLongitude())){
+            return null;
+        }
         IPage<Shop> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
         MPJLambdaWrapper<Shop> queryWrapper = new MPJLambdaWrapper<>();
-//        queryWrapper.select("ID,NAME,ADDRESS,PROVINCE_NAME,CITY_NAME,AREA_NAME,TOWN,AREA_NAME,LEGAL_PHONE" +
-//                        " ,CONVERT (ST_Distance_Sphere (point ("+pageWrap.getModel().getLongitude()+", "+pageWrap.getModel().getLatitude()+" ), point ( LONGITUDE, LATITUDE )) /1000,decimal(15,2)) as distance ")
-        queryWrapper.select("ID,NAME,ADDRESS,PROVINCE_NAME,CITY_NAME,AREA_NAME,TOWN,AREA_NAME,LEGAL_PHONE ")
+        queryWrapper.select("ID,NAME,ADDRESS,PROVINCE_NAME,CITY_NAME,AREA_NAME,TOWN,AREA_NAME,LEGAL_PHONE " +
+                " ,  (6371 * ACOS(COS(RADIANS("+pageWrap.getModel().getLatitude()+")) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS("+pageWrap.getModel().getLongitude()+")) + SIN(RADIANS("+pageWrap.getModel().getLatitude()+")) * SIN(RADIANS(latitude)) ) ) as distance  " )
                 .eq("isdeleted",Constants.ZERO)
-//                .isNotNull("LATITUDE")
-//                .isNotNull("LONGITUDE")
+                .isNotNull("LATITUDE")
+                .isNotNull("LONGITUDE")
                 .eq("TYPE",Constants.TWO)
                 .eq("SECOND_TYPE",Constants.THREE)
-                .eq("STATUS",Constants.ONE);
-//                .orderByAsc(" distance ")
+                .eq("STATUS",Constants.ONE)
+                .orderByAsc(" distance ");
         Utils.MP.blankToNull(pageWrap.getModel());
         PageData<Shop> pageData = PageData.from(shopMapper.selectPage(page, queryWrapper));
         String prefix = StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH).getCode()) +
         StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.USERS_FILE).getCode());
         for (Shop shop:pageData.getRecords()) {
+            this.dealDistance(shop);
             //鏌ヨ闂ㄥ簵涓嬪璐暟鎹�
             List<Users> usersList =usersMapper.selectList(new QueryWrapper<Users>().lambda().eq(Users::getDepartmentId,shop.getId())
                     .eq(Users::getIsdeleted,Constants.ZERO)
                     .eq(Users::getStatus,Constants.ONE)
-                    .eq(Users::getType,Constants.ZERO)
             );
             for (Users users:usersList) {
                 if(StringUtils.isNotBlank(users.getImgurl())){
@@ -935,6 +935,29 @@
         return pageData;
     }
 
+    /**
+     * 澶勭悊闂ㄥ簵璺濈鏄剧ず
+     * @param shop
+     */
+    public void dealDistance(Shop shop){
+        if(Objects.isNull(shop.getDistance())){
+            shop.setDistanceStr("-");
+        }else{
+            //璺濈灏忎簬1鍏噷 鏄剧ず绫�
+            if(shop.getDistance().compareTo(BigDecimal.ONE)<Constants.ZERO){
+                BigDecimal distanceM = shop.getDistance().multiply(new BigDecimal(1000).setScale(0));
+                //100绫充箣鍐�
+                if(distanceM.compareTo(new BigDecimal(100))<0){
+                    shop.setDistanceStr("<100绫�");
+                }else{
+                    shop.setDistanceStr(distanceM.divide(BigDecimal.valueOf(1)).setScale(2,BigDecimal.ROUND_HALF_UP) + "m");
+                }
+            }else{
+                shop.setDistanceStr(shop.getDistance().divide(BigDecimal.valueOf(1)).setScale(2,BigDecimal.ROUND_HALF_UP) + "km");
+            }
+        }
+    }
+
     @Override
     public Shop shopDetail(Long id,Long memberId) {
         QueryWrapper<Shop> queryWrapper = new QueryWrapper<Shop>();
@@ -942,8 +965,8 @@
             Member member = memberMapper.selectById(memberId);
             //濡傛灉浜哄憳娌℃湁缁忕含搴︿俊鎭紝鍒欎笉鏌ヨ璺濈
             if(Objects.nonNull(member)&&Objects.nonNull(member.getLatitude())&&Objects.nonNull(member.getLongitude())){
-                queryWrapper.select("ID,NAME,ADDRESS,PROVINCE_NAME,CITY_NAME,AREA_NAME,TOWN,AREA_NAME,LEGAL_PHONE," +
-                        " CONVERT (ST_Distance_Sphere (point ("+member.getLongitude()+", "+member.getLatitude()+" ), point ( LONGITUDE, LATITUDE )) /1000,decimal(15,2)) as distance ");
+                queryWrapper.select("ID,NAME,ADDRESS,PROVINCE_NAME,CITY_NAME,AREA_NAME,TOWN,AREA_NAME,LEGAL_PHONE " +
+                        " ,  (6371 * ACOS(COS(RADIANS("+member.getLatitude()+")) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS("+member.getLongitude()+")) + SIN(RADIANS("+member.getLatitude()+")) * SIN(RADIANS(latitude)) ) ) as distance  " );
             }
         }
         queryWrapper.eq("id",id);
@@ -956,8 +979,8 @@
         List<Users> usersList =usersMapper.selectList(new QueryWrapper<Users>().lambda().eq(Users::getDepartmentId,shop.getId())
                 .eq(Users::getIsdeleted,Constants.ZERO)
                 .eq(Users::getStatus,Constants.ONE)
-                .eq(Users::getType,Constants.ZERO)
         );
+        this.dealDistance(shop);
         for (Users users:usersList) {
             if(StringUtils.isNotBlank(users.getImgurl())){
                 users.setImgurlFull(prefix + users.getImgurl());

--
Gitblit v1.9.3