From 7f2d3e9bcb89311a5cbfaa617fde71ea412f9bc3 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 16 Sep 2022 11:01:34 +0800
Subject: [PATCH] 20220902

---
 src/main/resources/mapper/modules/MallElectronicFenceMapper.xml                     |   11 +++
 src/main/resources/mapper/modules/MallTeamLeaderMapper.xml                          |   18 ++++++
 src/main/java/cc/mrbird/febs/mall/conversion/MallTeamLeaderConversion.java          |    2 
 src/main/java/cc/mrbird/febs/mall/service/impl/IMallElectronicFenceServiceImpl.java |   20 +++++-
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java    |   59 +++++++++++++++----
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java     |   16 ++--
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java       |    2 
 src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java            |    2 
 src/main/java/cc/mrbird/febs/mall/mapper/MallElectronicFenceMapper.java             |    4 +
 src/main/java/cc/mrbird/febs/mall/service/IMallElectronicFenceService.java          |    3 +
 src/main/java/cc/mrbird/febs/mall/mapper/MallTeamLeaderMapper.java                  |    2 
 11 files changed, 113 insertions(+), 26 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java
index 6db1995..70544d8 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java
@@ -44,7 +44,7 @@
     })
     @PostMapping(value = "/leaderList")
     public FebsResponse leaderList(@RequestBody @Valid ApiLeaderListDto apiLeaderListDto) {
-        return new FebsResponse().success().data(iApiMallTeamLeaderService.findLeaderListInPage(apiLeaderListDto));
+        return iApiMallTeamLeaderService.findLeaderListInPage(apiLeaderListDto);
     }
 
     /**
diff --git a/src/main/java/cc/mrbird/febs/mall/conversion/MallTeamLeaderConversion.java b/src/main/java/cc/mrbird/febs/mall/conversion/MallTeamLeaderConversion.java
index fb408d8..b5ed132 100644
--- a/src/main/java/cc/mrbird/febs/mall/conversion/MallTeamLeaderConversion.java
+++ b/src/main/java/cc/mrbird/febs/mall/conversion/MallTeamLeaderConversion.java
@@ -25,5 +25,5 @@
 
     public abstract MallTeamLeader adminDtoToEntity(AdminLeaderAddDto adminLeaderAddDto);
 
-
+    public abstract ApiLeaderListVo entityToApiVo(MallTeamLeader mallTeamLeader);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallElectronicFenceMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallElectronicFenceMapper.java
index 67fbc22..3e0e550 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallElectronicFenceMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallElectronicFenceMapper.java
@@ -4,7 +4,11 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 public interface MallElectronicFenceMapper extends BaseMapper<MallElectronicFence> {
 
     MallElectronicFence selectByTeamLeaderCode(@Param("teamLeaderCode")String uniqueCode);
+
+    List<MallElectronicFence> selectAllOnlineLeader();
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallTeamLeaderMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallTeamLeaderMapper.java
index c44fce7..499da52 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallTeamLeaderMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallTeamLeaderMapper.java
@@ -32,4 +32,6 @@
     IPage<MallLeaderStock> selectleaderGoodsStockListInPage(Page<MallLeaderStock> page, @Param("record")MallLeaderStock mallLeaderStock);
 
     MallTeamLeader selectLeaderByUniqueCodeAndOrderBycreateTime(@Param("uniqueCode")String inviteId);
+
+    MallTeamLeader selectByFenceIdAndFenceNameAndLonAndLat(@Param("longitude")Double longitude, @Param("latitude")Double latitude,@Param("fenceId")String gfid, @Param("fenceName")String gfname);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java
index 12b69cc..83825fa 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java
@@ -14,7 +14,7 @@
 
     FebsResponse applyLeader(ApiApplayLeaderDto apiApplayLeaderDto);
 
-    List<ApiLeaderListVo> findLeaderListInPage(ApiLeaderListDto apiLeaderListDto);
+    FebsResponse findLeaderListInPage(ApiLeaderListDto apiLeaderListDto);
 
     FebsResponse leaderState();
 
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMallElectronicFenceService.java b/src/main/java/cc/mrbird/febs/mall/service/IMallElectronicFenceService.java
index 32dc633..a7c9f40 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IMallElectronicFenceService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IMallElectronicFenceService.java
@@ -16,5 +16,8 @@
 
     String fenceDelete(String gaodeKey,String serviceId,String fenceId);
 
+    /*
+    {"data":{"count":1,"results":[{"gfid":800899,"gfname":"87053658_fence","in":0}]},"errcode":10000,"errdetail":null,"errmsg":"OK"}
+     */
     String fenceToLocation(String gaodeKey,String serviceId,String locationLonglat,String fenceId);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 86f5b94..f9b0dc0 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -96,14 +96,14 @@
 
         //订单范围内才允许下单
         MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId());
-        MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode());
-        if(ObjectUtil.isNotEmpty(mallElectronicFence)){
-            String inStr = iMallElectronicFenceService.fenceToLocation(mallElectronicFence.getGKey(),
-                    mallElectronicFence.getServiceId(), address.getLongitude() + "," + address.getLatitude(), mallElectronicFence.getGid());
-            if("1".equals(inStr)){
-                throw new FebsException("不在当前团长的配送范围内");
-            }
-        }
+//        MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode());
+//        if(ObjectUtil.isNotEmpty(mallElectronicFence)){
+//            String inStr = iMallElectronicFenceService.fenceToLocation(mallElectronicFence.getGKey(),
+//                    mallElectronicFence.getServiceId(), address.getLongitude() + "," + address.getLatitude(), mallElectronicFence.getGid());
+//            if("1".equals(inStr)){
+//                throw new FebsException("不在当前团长的配送范围内");
+//            }
+//        }
 
         String orderNo = MallUtils.getOrderNum();
         MallOrderInfo orderInfo = new MallOrderInfo();
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
index 52a049b..8c0aa60 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
@@ -2,9 +2,9 @@
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.enumerates.*;
+import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.common.properties.XcxProperties;
 import cc.mrbird.febs.common.utils.LoginUserUtil;
-import cc.mrbird.febs.common.utils.ShareCodeUtil;
 import cc.mrbird.febs.common.utils.SpringContextHolder;
 import cc.mrbird.febs.mall.conversion.MallLeaderAchieveConversion;
 import cc.mrbird.febs.mall.conversion.MallOrderInfoConversion;
@@ -12,19 +12,20 @@
 import cc.mrbird.febs.mall.dto.*;
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.mapper.*;
-import cc.mrbird.febs.mall.service.IAdminMallOrderService;
 import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
 import cc.mrbird.febs.mall.service.IApiMallTeamLeaderService;
 import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
 import cc.mrbird.febs.mall.vo.*;
 import cc.mrbird.febs.pay.model.OrderStateDto;
 import cc.mrbird.febs.pay.service.IXcxPayService;
-import cc.mrbird.febs.pay.util.WechatConfigure;
 import cc.mrbird.febs.pay.util.WeixinServiceUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -36,10 +37,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Slf4j
 @Service
@@ -64,6 +62,8 @@
     private final MallMoneyFlowMapper mallMoneyFlowMapper;
     private final MallGoodsMapper mallGoodsMapper;
     private final MallGoodsSkuMapper mallGoodsSkuMapper;
+    private final MallElectronicFenceMapper mallElectronicFenceMapper;
+    private final IMallElectronicFenceServiceImpl iMallElectronicFenceService;
 
     @Override
     @Transactional
@@ -89,11 +89,47 @@
         return new FebsResponse().success().message("申请成功");
     }
 
+
+
     @Override
-    public List<ApiLeaderListVo> findLeaderListInPage(ApiLeaderListDto apiLeaderListDto) {
-        Page<MallTeamLeader> page = new Page<>(apiLeaderListDto.getPageNum(), apiLeaderListDto.getPageSize());
-        IPage<MallTeamLeader> mallTeamLeaderIPage = this.baseMapper.selectApiLeaderListInPage(page, apiLeaderListDto);
-        return MallTeamLeaderConversion.INSTANCE.entitysToVos(mallTeamLeaderIPage.getRecords());
+    public FebsResponse findLeaderListInPage(ApiLeaderListDto apiLeaderListDto) {
+        //根据当前位置的经纬度查询在所属配送区域内的团长
+        List<MallElectronicFence> mallElectronicFences = mallElectronicFenceMapper.selectAllOnlineLeader();
+        List<ApiLeaderListVo> apiLeaderListVos = new ArrayList<>();
+        if(CollUtil.isEmpty(mallElectronicFences)){
+            return new FebsResponse().success().data(apiLeaderListVos);
+        }
+        StringBuffer fenceIdStringBuffer = new StringBuffer();
+        for(MallElectronicFence mallElectronicFence : mallElectronicFences){
+            fenceIdStringBuffer.append(mallElectronicFence.getGid()).append(",");
+        }
+        String fenceIdStr = fenceIdStringBuffer.substring(0, fenceIdStringBuffer.length() - 1);
+        //{"data":{"count":1,"results":[{"gfid":800899,"gfname":"87053658_fence","in":0}]},"errcode":10000,"errdetail":null,"errmsg":"OK"}
+        String resultsStr = iMallElectronicFenceService.fenceToLocation(mallElectronicFences.get(0).getGKey(),
+                mallElectronicFences.get(0).getServiceId(),
+                apiLeaderListDto.getLongitude() + "," + apiLeaderListDto.getLatitude(),
+                fenceIdStr);
+        if("fail".equals(resultsStr)){
+            return new FebsResponse().success().data(apiLeaderListVos);
+        }
+
+        JSONArray objects = JSONUtil.parseArray(resultsStr);
+        for(Object obj : objects){
+            //{"gfid":800899,"gfname":"87053658_fence","in":0}
+            JSONObject jsonObject = JSONUtil.parseObj(obj);
+            String gfid = jsonObject.get("gfid").toString();
+            String in = jsonObject.get("in").toString();
+            String gfname = jsonObject.get("gfname").toString();
+            //指定坐标是否在围栏中
+            //1:在,
+            //0:不在;
+            if("1".equals(in)){
+                MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectByFenceIdAndFenceNameAndLonAndLat(apiLeaderListDto.getLongitude(), apiLeaderListDto.getLatitude(),gfid,gfname);
+                ApiLeaderListVo apiLeaderListVo = MallTeamLeaderConversion.INSTANCE.entityToApiVo(mallTeamLeader);
+                apiLeaderListVos.add(apiLeaderListVo);
+            }
+        }
+        return new FebsResponse().success().data(apiLeaderListVos);
     }
 
     @Override
@@ -237,7 +273,6 @@
         //经纬度定位
         }else if(longitude != 0 && latitude != 0){
             mallTeamLeader = this.baseMapper.selectLeaderByLonAndLat(longitude,latitude);
-
         //直接进入,默认选择列表第一个
         }else{
             List<MallTeamLeader> mallTeamLeaderList = this.baseMapper.getMallTeamLeaderList();
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/IMallElectronicFenceServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/IMallElectronicFenceServiceImpl.java
index bc83c2f..4ae5911 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/IMallElectronicFenceServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/IMallElectronicFenceServiceImpl.java
@@ -4,6 +4,8 @@
 import cc.mrbird.febs.mall.entity.MallElectronicFence;
 import cc.mrbird.febs.mall.mapper.MallElectronicFenceMapper;
 import cc.mrbird.febs.mall.service.IMallElectronicFenceService;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -274,11 +276,23 @@
             String dataStr = maps.get("data").toString();
             cn.hutool.json.JSONObject dataResults = JSONUtil.parseObj(dataStr);
             String resultsStr = dataResults.get("results").toString();
-            cn.hutool.json.JSONObject resultsStrJson = JSONUtil.parseObj(resultsStr);
-            String in = resultsStrJson.get("in").toString();
-            return in;
+            return resultsStr;
         }else{
             return "fail";
         }
     }
+
+    public static void main(String[] args) {
+        String result = "{\"data\":{\"count\":1,\"results\":[{\"gfid\":800899,\"gfname\":\"87053658_fence\",\"in\":0}]},\"errcode\":10000,\"errdetail\":null,\"errmsg\":\"OK\"}";
+        cn.hutool.json.JSONObject maps = JSONUtil.parseObj(result);
+        String dataStr = maps.get("data").toString();
+        cn.hutool.json.JSONObject dataResults = JSONUtil.parseObj(dataStr);
+        String resultsStr = dataResults.get("results").toString();
+        JSONArray jsonArray = JSONUtil.parseArray(resultsStr);
+        System.out.print(jsonArray);
+        Object o = jsonArray.get(0);
+        JSONObject jsonObject1 = JSONUtil.parseObj(jsonArray.get(0));
+        String in = jsonObject1.get("in").toString();
+        System.out.print(in);
+    }
 }
diff --git a/src/main/resources/mapper/modules/MallElectronicFenceMapper.xml b/src/main/resources/mapper/modules/MallElectronicFenceMapper.xml
index 10b5edf..3d4f944 100644
--- a/src/main/resources/mapper/modules/MallElectronicFenceMapper.xml
+++ b/src/main/resources/mapper/modules/MallElectronicFenceMapper.xml
@@ -5,4 +5,15 @@
     <select id="selectByTeamLeaderCode" resultType="cc.mrbird.febs.mall.entity.MallElectronicFence">
         select * from mall_electronic_fence where team_leader_code=#{teamLeaderCode}
     </select>
+
+    <select id="selectAllOnlineLeader" resultType="cc.mrbird.febs.mall.entity.MallElectronicFence">
+        SELECT
+            a.*
+        FROM
+            mall_electronic_fence a
+                INNER JOIN mall_team_leader b ON a.team_leader_code = b.unique_code
+        WHERE
+            b.state = 1
+          AND b.online_state = 1
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml b/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml
index 90324c4..2b6fb88 100644
--- a/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml
+++ b/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml
@@ -186,4 +186,22 @@
         limit 1
     </select>
 
+    <select id="selectByFenceIdAndFenceNameAndLonAndLat" resultType="cc.mrbird.febs.mall.entity.MallTeamLeader">
+        select
+            a.*,
+            ROUND(
+                        6378.138 * 2 * ASIN(
+                            SQRT(
+                                        POW(SIN((#{latitude} * PI() / 180 - a.latitude * PI() / 180) / 2),2)
+                                        + COS(40.0497810000 * PI() / 180) * COS(a.latitude * PI() / 180)
+                                            * POW(SIN((#{longitude}  * PI() / 180 - a.longitude * PI() / 180) / 2),2)
+                                )
+                        ) * 1000
+                ) AS distance
+        from mall_team_leader a
+        inner join mall_electronic_fence b on b.team_leader_code = a.unique_code
+        where b.gid = #{fenceId}
+        and b.fence_name = #{fenceName}
+    </select>
+
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1