From a721f2949a80666751ed7390a9ecba97454f140e Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 15 Sep 2022 17:48:09 +0800
Subject: [PATCH] 20220902

---
 src/main/resources/templates/febs/views/modules/leader/leaderFenceAdd.html          |   40 +++++----
 src/main/java/cc/mrbird/febs/mall/controller/AdminMallTeamLeaderController.java     |   18 ++++
 src/main/resources/mapper/modules/MallTeamLeaderMapper.xml                          |    2 
 src/main/java/cc/mrbird/febs/mall/vo/AdminMallTeamLeaderVo.java                     |    2 
 src/main/java/cc/mrbird/febs/mall/service/IAdminMallTeamLeaderService.java          |    4 +
 src/main/java/cc/mrbird/febs/mall/entity/MallTeamLeader.java                        |    4 
 src/main/java/cc/mrbird/febs/mall/service/impl/IMallElectronicFenceServiceImpl.java |   40 ++++++++++
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java     |   14 +++
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java  |   30 +++++++
 src/main/resources/templates/febs/views/modules/leader/leaderList.html              |   31 +++++++
 src/main/java/cc/mrbird/febs/mall/service/IMallElectronicFenceService.java          |    2 
 11 files changed, 165 insertions(+), 22 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallTeamLeaderController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallTeamLeaderController.java
index 4e7e9e4..28e0f4c 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallTeamLeaderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallTeamLeaderController.java
@@ -144,4 +144,22 @@
         return iAdminMallTeamLeaderService.addFence(adminLeaderAddFenceDto);
     }
 
+    /**
+     * 团长--在线
+     */
+    @GetMapping("startOnline/{id}")
+    @ControllerEndpoint(operation = "团长--在线", exceptionMessage = "操作失败")
+    public FebsResponse startOnline(@NotNull(message = "{required}") @PathVariable Long id) {
+        return iAdminMallTeamLeaderService.startOnline(id);
+    }
+
+    /**
+     * 团长--离线
+     */
+    @GetMapping("closeOnline/{id}")
+    @ControllerEndpoint(operation = "团长--离线", exceptionMessage = "操作失败")
+    public FebsResponse closeOnline(@NotNull(message = "{required}") @PathVariable Long id) {
+        return iAdminMallTeamLeaderService.closeOnline(id);
+    }
+
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallTeamLeader.java b/src/main/java/cc/mrbird/febs/mall/entity/MallTeamLeader.java
index 12d4d6f..822aad0 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallTeamLeader.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallTeamLeader.java
@@ -55,6 +55,8 @@
     private String bonusPercent;
 
     @TableField(exist = false)
-    private int isOk;
+    private Integer isOk;
+    //在线状态 1:在线 2:离线
+    private Integer onlineState;
 
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallTeamLeaderService.java b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallTeamLeaderService.java
index 5ff9324..154747b 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallTeamLeaderService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallTeamLeaderService.java
@@ -35,4 +35,8 @@
     FebsResponse closeProfit(Long id);
 
     FebsResponse addFence(AdminLeaderAddFenceDto adminLeaderAddFenceDto);
+
+    FebsResponse startOnline(Long id);
+
+    FebsResponse closeOnline(Long id);
 }
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 2386301..32dc633 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IMallElectronicFenceService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IMallElectronicFenceService.java
@@ -15,4 +15,6 @@
     String fenceList(String gaodeKey,String serviceId,String fenceIds);
 
     String fenceDelete(String gaodeKey,String serviceId,String fenceId);
+
+    String fenceToLocation(String gaodeKey,String serviceId,String locationLonglat,String fenceId);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java
index 806d8cb..b0649c3 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java
@@ -318,4 +318,34 @@
         return new FebsResponse().success();
     }
 
+    @Override
+    public FebsResponse startOnline(Long id) {
+        MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id);
+        if(ObjectUtil.isEmpty(mallTeamLeader)){
+            return new FebsResponse().fail().message("团长信息不存在,刷新重试");
+        }
+        Integer state = mallTeamLeader.getState();
+        if(1!=state){
+            return new FebsResponse().fail().message("目前还不是团长,无法操作");
+        }
+        MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode());
+        if(ObjectUtil.isEmpty(mallElectronicFence)){
+            return new FebsResponse().fail().message("请先设置配送范围");
+        }
+        mallTeamLeader.setOnlineState(1);
+        this.baseMapper.updateById(mallTeamLeader);
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public FebsResponse closeOnline(Long id) {
+        MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id);
+        if(ObjectUtil.isEmpty(mallTeamLeader)){
+            return new FebsResponse().fail().message("团长信息不存在,刷新重试");
+        }
+        mallTeamLeader.setOnlineState(2);
+        this.baseMapper.updateById(mallTeamLeader);
+        return new FebsResponse().success();
+    }
+
 }
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 c803616..86f5b94 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
@@ -76,6 +76,8 @@
     private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
     private final MallLeaderAchieveMapper mallLeaderAchieveMapper;
     private final IApiMallTeamLeaderService iApiMallTeamLeaderService;
+    private final IMallElectronicFenceService iMallElectronicFenceService;
+    private final MallElectronicFenceMapper mallElectronicFenceMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -90,6 +92,17 @@
         MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(takeUniqueCode);
         if(ObjectUtil.isEmpty(mallTeamLeader)){
             throw new FebsException("请重新选择团长");
+        }
+
+        //订单范围内才允许下单
+        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("不在当前团长的配送范围内");
+            }
         }
 
         String orderNo = MallUtils.getOrderNum();
@@ -207,7 +220,6 @@
         }
         orderInfo.setAmount(total);
 
-        MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId());
         orderInfo.setName(address.getName());
         orderInfo.setPhone(address.getPhone());
         orderInfo.setIsHome(addOrderDto.getIsHome());
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 5c07a1c..bc83c2f 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
@@ -241,4 +241,44 @@
             return "fail";
         }
     }
+
+    @Override
+    public String fenceToLocation(String gaodeKey, String serviceId, String locationLonglat, String fenceId) {
+        String url = "https://tsapi.amap.com/v1/track/geofence/status/location";
+        HttpPost httpPost = new HttpPost(url);
+        Map<String,String> map = new HashMap<>();
+        //高德Key
+        //用户在高德地图官网申请Web服务API类型Key
+        map.put("key",gaodeKey);
+        //服务唯一编号
+        //sid为猎鹰service唯一编号
+        map.put("sid",serviceId);
+        //指定坐标
+        //格式:x,y
+        map.put("location",locationLonglat);
+        //围栏的唯一标识
+        //支持一次传入多个,以","分割;
+        //单次最多支持100个,如超出将只截取前100个作为输入。
+        map.put("gfids",fenceId);
+        log.info("查询指定坐标与围栏关系"+JSON.toJSONString(map));
+        String result = null;
+        try {
+            result = HttpCurlUtil.sendGetHttp(url, map);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        log.info("查询指定坐标与围栏关系"+result);
+        cn.hutool.json.JSONObject maps = JSONUtil.parseObj(result);
+        String errCode = maps.get("errcode").toString();
+        if("10000".equals(errCode)){
+            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;
+        }else{
+            return "fail";
+        }
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AdminMallTeamLeaderVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AdminMallTeamLeaderVo.java
index d135053..b4d4c8a 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/AdminMallTeamLeaderVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/AdminMallTeamLeaderVo.java
@@ -47,4 +47,6 @@
     private String bonusPercent;
 
     private String longlatiarr;
+
+    private Integer onlineState;
 }
diff --git a/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml b/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml
index f738740..b66b32e 100644
--- a/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml
+++ b/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml
@@ -33,7 +33,7 @@
         ) AS distance
         from mall_team_leader a
         <where>
-            a.state = 1
+            a.state = 1 and a.online_state = 1
             <if test="record.query != null and record.query != ''">
                 and (a.name like CONCAT('%', CONCAT(#{record.query}, '%'))
                     or a.phone like CONCAT('%', CONCAT(#{record.query}, '%'))
diff --git a/src/main/resources/templates/febs/views/modules/leader/leaderFenceAdd.html b/src/main/resources/templates/febs/views/modules/leader/leaderFenceAdd.html
index e8d4a60..bf83d95 100644
--- a/src/main/resources/templates/febs/views/modules/leader/leaderFenceAdd.html
+++ b/src/main/resources/templates/febs/views/modules/leader/leaderFenceAdd.html
@@ -204,27 +204,29 @@
             //配送范围回显
             // var pathPolygon = [];
             let fenceLongLat = leaderInfo.longlatiarr;
-            let splitList = [];
-            splitList = fenceLongLat.split(';');
-            if(splitList.length > 0){
-                for(let splitIndex = 0;splitIndex < splitList.length-1;splitIndex++){
-                    let splitLngLat = splitList[splitIndex].split(',');
-                    console.log(splitLngLat[0]);
-                    console.log(splitLngLat[1]);
-                    let lngLat = new AMap.LngLat(splitLngLat[0],splitLngLat[1]);
-                    pathPolygon.push(lngLat)
+            if(fenceLongLat != '' && fenceLongLat != null){
+                let splitList = [];
+                splitList = fenceLongLat.split(';');
+                if(splitList.length > 0){
+                    for(let splitIndex = 0;splitIndex < splitList.length-1;splitIndex++){
+                        let splitLngLat = splitList[splitIndex].split(',');
+                        console.log(splitLngLat[0]);
+                        console.log(splitLngLat[1]);
+                        let lngLat = new AMap.LngLat(splitLngLat[0],splitLngLat[1]);
+                        pathPolygon.push(lngLat)
+                    }
                 }
+                var polygon = new AMap.Polygon({
+                    path: pathPolygon,
+                    fillColor: '#00B2D5', // 多边形填充颜色
+                    fillOpacity : 0.5, // 多边形填充透明度,取值范围 [0,1] ,0表示完全透明,1表示不透明。默认为0.5
+                    strokeStyle : 'dashed', // 轮廓线样式,实线:solid,虚线:dashed
+                    borderWeight: 2, // 线条宽度,默认为 1
+                    strokeColor: 'green', // 线条颜色
+                });
+                polygonClear = polygon;
+                map.add(polygon);
             }
-            var polygon = new AMap.Polygon({
-                path: pathPolygon,
-                fillColor: '#00B2D5', // 多边形填充颜色
-                fillOpacity : 0.5, // 多边形填充透明度,取值范围 [0,1] ,0表示完全透明,1表示不透明。默认为0.5
-                strokeStyle : 'dashed', // 轮廓线样式,实线:solid,虚线:dashed
-                borderWeight: 2, // 线条宽度,默认为 1
-                strokeColor: 'green', // 线条颜色
-            });
-            polygonClear = polygon;
-            map.add(polygon);
 
             form.val("user-addLeaderFence-form", {
                 "id": leaderInfo.id,
diff --git a/src/main/resources/templates/febs/views/modules/leader/leaderList.html b/src/main/resources/templates/febs/views/modules/leader/leaderList.html
index c7ca5e1..f10fb07 100644
--- a/src/main/resources/templates/febs/views/modules/leader/leaderList.html
+++ b/src/main/resources/templates/febs/views/modules/leader/leaderList.html
@@ -62,6 +62,13 @@
     <a lay-event="edit" shiro:hasPermission="user:update"><i
             class="layui-icon febs-edit-area febs-blue">&#xe7a5;</i></a>
 </script>
+<script type="text/html" id="onlineStateSwitch">
+    {{# if(d.onlineState === 1) { }}
+    <input type="checkbox" value={{d.id}} lay-text="在线|离线" checked lay-skin="switch" lay-filter="onlineStateSwitch">
+    {{# } else { }}
+    <input type="checkbox" value={{d.id}} lay-text="在线|离线" lay-skin="switch" lay-filter="onlineStateSwitch">
+    {{# } }}
+</script>
 <script type="text/html" id="upOrDownSwitch">
     {{# if(d.profitSwitch === 1) { }}
     <input type="checkbox" value={{d.id}} lay-text="开启|关闭" checked lay-skin="switch" lay-filter="upOrDownSwitch">
@@ -187,6 +194,7 @@
                     {field: 'addressArea', title: '自提点名称', minWidth: 150,align:'left'},
                     {field: 'detailAddress', title: '自提点地址', minWidth: 150,align:'left'},
                     {field: 'totalProfit', title: '收益', minWidth: 150,align:'left'},
+                    {field: 'onlineState', title: '在线状态', templet: '#onlineStateSwitch', minWidth: 100,align:'center'},
                     {field: 'profitSwitch', title: '是否返利', templet: '#upOrDownSwitch', minWidth: 100,align:'center'},
                     {field: 'bonusPercent', title: '返利比例', minWidth: 150,align:'left'},
                     // {field: 'phone', title: '电话', minWidth: 150,align:'left'},
@@ -223,6 +231,29 @@
             });
         }
 
+        form.on('switch(onlineStateSwitch)', function (data) {
+            if (data.elem.checked) {
+                startOnline(data.value);
+            } else {
+                closeOnline(data.value);
+            }
+            $query.click();
+        })
+
+        function startOnline(id) {
+            febs.get(ctx + 'admin/leader/startOnline/' + id, null, function () {
+                febs.alert.success('在线成功');
+                $query.click();
+            });
+        }
+
+        function closeOnline(id) {
+            febs.get(ctx + 'admin/leader/closeOnline/' + id, null, function () {
+                febs.alert.success('离线成功');
+                $query.click();
+            });
+        }
+
         form.on('switch(upOrDownSwitch)', function (data) {
             if (data.elem.checked) {
                 startProfit(data.value);

--
Gitblit v1.9.1