src/main/java/cc/mrbird/febs/mall/controller/AdminMallTeamLeaderController.java
@@ -6,6 +6,7 @@ import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; import cc.mrbird.febs.mall.dto.AdminLeaderAddDto; import cc.mrbird.febs.mall.dto.AdminLeaderAddFenceDto; import cc.mrbird.febs.mall.dto.AdminLeaderUpdateDto; import cc.mrbird.febs.mall.dto.ApiApplayLeaderDto; import cc.mrbird.febs.mall.entity.*; @@ -133,4 +134,14 @@ return new FebsResponse().success(); } /** * 团长--设置电子围栏 */ @PostMapping("addFence") @ControllerEndpoint(operation = "团长信息--设置电子围栏", exceptionMessage = "设置失败") public FebsResponse addFence(@Valid AdminLeaderAddFenceDto adminLeaderAddFenceDto) { return iAdminMallTeamLeaderService.addFence(adminLeaderAddFenceDto); } } src/main/java/cc/mrbird/febs/mall/conversion/MallElectronicFenceConversion.java
New file @@ -0,0 +1,13 @@ package cc.mrbird.febs.mall.conversion; import cc.mrbird.febs.mall.dto.AdminLeaderAddFenceDto; import cc.mrbird.febs.mall.entity.MallElectronicFence; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @Mapper public abstract class MallElectronicFenceConversion { public static final MallElectronicFenceConversion INSTANCE = Mappers.getMapper(MallElectronicFenceConversion.class); public abstract MallElectronicFence dtoToEntity(AdminLeaderAddFenceDto adminLeaderAddFenceDto); } src/main/java/cc/mrbird/febs/mall/dto/AdminLeaderAddFenceDto.java
New file @@ -0,0 +1,14 @@ package cc.mrbird.febs.mall.dto; import io.swagger.annotations.ApiModel; import lombok.Data; @Data @ApiModel(value = "AdminLeaderAddFenceDto", description = "接收参数类") public class AdminLeaderAddFenceDto { private String fenceName;//电子围栏名称 private Integer fenceType;//电子围栏类型,1:POI围栏,2:行政区围栏,3:圆形围栏,4:多边形围栏 private String longlatiarr;//经纬度集合 private String teamLeaderCode;//团长特征码 private String gaodeKey;//高德地图Key } src/main/java/cc/mrbird/febs/mall/entity/MallElectronicFence.java
New file @@ -0,0 +1,18 @@ package cc.mrbird.febs.mall.entity; import cc.mrbird.febs.common.entity.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; //电子围栏 @Data @TableName("mall_electronic_fence") public class MallElectronicFence extends BaseEntity { private String fenceName;//电子围栏名称 private Integer fenceType;//电子围栏类型,1:POI围栏,2:行政区围栏,3:圆形围栏,4:多边形围栏 private Integer prohibit;//是否禁用(1:启用 2:禁用) private Integer delFlag;//逻辑删除标志 1:正常 2已删除 private String longlatiarr;//经纬度集合 private String teamLeaderCode;//团长特征码 private String gaodeKey;//高德地图Key private String gid;//高德地图ID } src/main/java/cc/mrbird/febs/mall/mapper/MallElectronicFenceMapper.java
New file @@ -0,0 +1,7 @@ package cc.mrbird.febs.mall.mapper; import cc.mrbird.febs.mall.entity.MallElectronicFence; import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface MallElectronicFenceMapper extends BaseMapper<MallElectronicFence> { } src/main/java/cc/mrbird/febs/mall/service/IAdminMallTeamLeaderService.java
@@ -3,6 +3,7 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.mall.dto.AdminLeaderAddDto; import cc.mrbird.febs.mall.dto.AdminLeaderAddFenceDto; import cc.mrbird.febs.mall.dto.AdminLeaderUpdateDto; import cc.mrbird.febs.mall.entity.MallLeaderStock; import cc.mrbird.febs.mall.entity.MallTeamLeader; @@ -32,4 +33,6 @@ FebsResponse startProfit(Long id); FebsResponse closeProfit(Long id); FebsResponse addFence(AdminLeaderAddFenceDto adminLeaderAddFenceDto); } src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java
@@ -4,14 +4,14 @@ import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.common.enumerates.FlowTypeEnum; import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; import cc.mrbird.febs.common.utils.HttpCurlUtil; import cc.mrbird.febs.mall.conversion.MallElectronicFenceConversion; import cc.mrbird.febs.mall.conversion.MallTeamLeaderConversion; import cc.mrbird.febs.mall.dto.AdminLeaderAddDto; import cc.mrbird.febs.mall.dto.AdminLeaderAddFenceDto; import cc.mrbird.febs.mall.dto.AdminLeaderUpdateDto; import cc.mrbird.febs.mall.dto.ApiApplayLeaderDto; import cc.mrbird.febs.mall.entity.MallGoodsCategory; import cc.mrbird.febs.mall.entity.MallLeaderStock; import cc.mrbird.febs.mall.entity.MallMember; import cc.mrbird.febs.mall.entity.MallTeamLeader; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IAdminMallTeamLeaderService; import cc.mrbird.febs.mall.vo.AdminMallActSetVo; @@ -19,19 +19,33 @@ import cc.mrbird.febs.mall.vo.AdminSelectListLeaderVo; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.http.Consts; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.HttpClientUtils; import org.apache.http.entity.ContentType; import org.apache.http.message.BasicNameValuePair; import org.apache.poi.ss.formula.functions.T; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Slf4j @Service @@ -43,6 +57,7 @@ private final MallGoodsMapper mallGoodsMapper; private final MallMemberMapper mallMemberMapper; private final MallMoneyFlowMapper mallMoneyFlowMapper; private final MallElectronicFenceMapper mallElectronicFenceMapper; @Override public IPage<AdminMallTeamLeaderVo> getLeaderListInPage(MallTeamLeader mallTeamLeader, QueryRequest request) { @@ -198,4 +213,64 @@ this.baseMapper.updateById(mallTeamLeader); return new FebsResponse().success(); } @Override public FebsResponse addFence(AdminLeaderAddFenceDto adminLeaderAddFenceDto) { String gdFence = createGDFence(adminLeaderAddFenceDto); if("fail".equals(gdFence)){ return new FebsResponse().fail().message("高德创建电子围栏失败!"); } MallElectronicFence mallElectronicFence = MallElectronicFenceConversion.INSTANCE.dtoToEntity(adminLeaderAddFenceDto); mallElectronicFence.setDelFlag(1); mallElectronicFence.setProhibit(1); mallElectronicFence.setGid(gdFence); mallElectronicFence.setGaodeKey(adminLeaderAddFenceDto.getGaodeKey()); mallElectronicFenceMapper.insert(mallElectronicFence); return new FebsResponse().success(); } public String createGDFence(AdminLeaderAddFenceDto adminLeaderAddFenceDto){ String url = "https://restapi.amap.com/v4/geofence/meta?key="; String gaodeKey = adminLeaderAddFenceDto.getGaodeKey(); url =url+gaodeKey; HttpPost httpPost = new HttpPost(url); Map<String,String> map = new HashMap<>(); String fenceName = adminLeaderAddFenceDto.getFenceName(); map.put("name",fenceName); String longlatiarr = adminLeaderAddFenceDto.getLonglatiarr(); if(null!=longlatiarr&&!"".equals(longlatiarr)){ map.put("points",longlatiarr); } map.put("enable","true"); map.put("valid_time","2054-12-30"); map.put("repeat","Mon,Tues,Wed,Thur,Fri,Sat,Sun"); //map.put("time","00:00,11:59;13:00,20:59"); map.put("desc",fenceName); map.put("alert_condition","enter;leave"); System.out.println(map); String param= JSON.toJSONString(map); String result = null; try { result = HttpCurlUtil.sendPostHttp(url, param); } catch (IOException e) { e.printStackTrace(); } System.out.println("==高德返回"+result); JSONObject maps = JSONUtil.parseObj(result); String errmsg = maps.get("errmsg").toString(); String str2 = maps.get("data").toString(); JSONObject maps2 = JSONUtil.parseObj(str2); String statusGaode = maps2.get("status").toString(); String gid=""; if(statusGaode.equals("0")){ gid = maps2.get("gid").toString(); } if(null!=gid&&!"".equals(gid)){ return gid; }else{ return "fail"; } } } src/main/resources/templates/febs/views/modules/leader/leaderMapSetting.html
@@ -40,7 +40,6 @@ }); var polyEditor = new AMap.PolyEditor(map); //为地图注册click事件获取鼠标点击出的经纬度坐标 var path = []; // 折线的节点坐标数组,每个元素为 AMap.LngLat 对象 @@ -87,8 +86,6 @@ $createPolygon.on('click', function () { febs.alert.success('点击新建'); polyEditor.close(); polyEditor.open(); }); $open.on('click', function () { @@ -105,6 +102,8 @@ lineJoin: 'round' // 折线拐点连接处样式 }); // 将折线添加至地图实例 // map.cleanData(polyline); map.add(polyline); }); src/main/resources/templates/index.html
@@ -20,7 +20,7 @@ securityJsCode:'8fd9b92f6e07b1f18d3ae39b42ff71bc', } </script> <script src="https://webapi.amap.com/maps?v=1.4.15&key=04934a2cf5cfa8a29ffcf0fdcfaabb5f&plugin=AMap.Autocomplete,AMap.PolyEditor,AMap.Geocoder"></script> <script src="https://webapi.amap.com/maps?v=1.4.15&key=04934a2cf5cfa8a29ffcf0fdcfaabb5f&plugin=AMap.Autocomplete,AMap.PolyEditor,AMap.Geocoder,AMap.PolylineEditor"></script> <link href="https://unpkg.com/@wangeditor/editor@5.0.1/dist/css/style.css" rel="stylesheet"> <script src="https://unpkg.com/@wangeditor/editor@latest/dist/index.js"></script> <link rel="icon" th:href="@{febs/images/favicon.ico}" type="image/x-icon"/>