| package cc.mrbird.febs.mall.service.impl; | 
|   | 
| import cc.mrbird.febs.common.utils.HttpCurlUtil; | 
| 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; | 
| import lombok.RequiredArgsConstructor; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.apache.http.client.methods.HttpPost; | 
| import org.springframework.stereotype.Service; | 
|   | 
| import java.io.IOException; | 
| import java.util.HashMap; | 
| import java.util.Map; | 
|   | 
| @Slf4j | 
| @Service | 
| @RequiredArgsConstructor | 
| public class IMallElectronicFenceServiceImpl  extends ServiceImpl<MallElectronicFenceMapper, MallElectronicFence> implements IMallElectronicFenceService { | 
|     @Override | 
|     public String trackServiceAdd(String gaodeKey, String serviceName) { | 
|         String url = "https://tsapi.amap.com/v1/track/service/add?key="+gaodeKey+"&name="+serviceName; | 
|         HttpPost httpPost = new HttpPost(url); | 
|         Map<String,String> map = new HashMap<>(); | 
|         map.put("key",gaodeKey); | 
|         map.put("name",serviceName); | 
|         String  param= JSON.toJSONString(map); | 
|         log.info(param); | 
|         String result = null; | 
|         try { | 
|             result = HttpCurlUtil.sendPostHttp(url, param); | 
|         } 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)){ | 
|             return "fail"; | 
|         } | 
|         String str2 = maps.get("data").toString(); | 
|         cn.hutool.json.JSONObject maps2 = JSONUtil.parseObj(str2); | 
|         String serviceId = maps2.get("sid").toString(); | 
|         if(null!=serviceId&&!"".equals(serviceId)){ | 
|             return serviceId; | 
|         }else{ | 
|             return "fail"; | 
|         } | 
|     } | 
|   | 
|     @Override | 
|     public String trackServiceInfo(String gaodeKey) { | 
|         String url = "https://tsapi.amap.com/v1/track/service/list"; | 
|         HttpPost httpPost = new HttpPost(url); | 
|         Map<String,String> map = new HashMap<>(); | 
|         //高德Key | 
|         //用户在高德地图官网申请Web服务API类型Key | 
|         map.put("key",gaodeKey); | 
|         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(); | 
|             return dataStr; | 
|         }else{ | 
|             return "fail"; | 
|         } | 
|     } | 
|   | 
|     @Override | 
|     public String fenceAdd(String gaodeKey, String serviceId, String fenceName, String points) { | 
|         String url = "https://tsapi.amap.com/v1/track/geofence/add/polygon?key="+gaodeKey+"" + | 
|                 "&sid="+serviceId+"&name="+fenceName+"&points="+points; | 
|         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); | 
|         //围栏名称 | 
|         //在同一个 sid 下不可重复,不可为空。 | 
|         //支持中文、英文大小字母、英文下划线"_"、英文横线"-"和数字,长度不大于128个字符 | 
|         map.put("name",fenceName); | 
|         //多边形顶点坐标 | 
|         //格式 X1,Y1;X2,Y2;... | 
|         //顶点顺序可按顺时针或逆时针排列; | 
|         //1. 普通地理围栏:顶点个数在3-100个之间,外接矩形面积<100平方公里; | 
|         //2. 大范围地理围栏:顶点个数在3-100个之间,外接矩形面积小于1000平方公里,请您通过工单与我们联系。 | 
|         map.put("points",points); | 
|         String  param= JSON.toJSONString(map); | 
|   | 
|         log.info("创建多边形围栏"+param); | 
|         String result = null; | 
|         try { | 
|             result = HttpCurlUtil.sendPostHttp(url, param); | 
|         } 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 data = maps.get("data").toString(); | 
|             cn.hutool.json.JSONObject dataObject = JSONUtil.parseObj(data); | 
|             String gfid = dataObject.get("gfid").toString(); | 
|             if(null!=gfid&&!"".equals(gfid)){ | 
|                 return gfid; | 
|             }else{ | 
|                 return "fail"; | 
|             } | 
|         }else{ | 
|             return "fail"; | 
|         } | 
|     } | 
|   | 
|     @Override | 
|     public String fenceUpdate(String gaodeKey, String serviceId, String fenceId, String fenceName, String points) { | 
|         String url = "https://tsapi.amap.com/v1/track/geofence/update/polygon?key="+gaodeKey | 
|                 +"&sid="+serviceId+"&gfid="+fenceId+"&name="+fenceName+"&points="+points; | 
|         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); | 
|         //围栏id | 
|         //围栏唯一标识,指定要更新的围栏 | 
|         map.put("gfid",fenceId); | 
|         //围栏名称 | 
|         //在同一个 sid 下不可重复,不可为空。 | 
|         //支持中文、英文大小字母、英文下划线"_"、英文横线"-"和数字,长度不大于128个字符 | 
|         map.put("name",fenceName); | 
|         //多边形顶点坐标 | 
|         //格式 X1,Y1;X2,Y2;... | 
|         //顶点顺序可按顺时针或逆时针排列; | 
|         //1. 普通地理围栏:顶点个数在3-100个之间,外接矩形面积<100平方公里; | 
|         //2. 大范围地理围栏:顶点个数在3-100个之间,外接矩形面积小于1000平方公里,请您通过工单与我们联系。 | 
|         map.put("points",points); | 
|         String  param= JSON.toJSONString(map); | 
|         log.info("更新多边形围栏"+param); | 
|         String result = null; | 
|         try { | 
|             result = HttpCurlUtil.sendPostHttp(url, param); | 
|         } 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)){ | 
|             return errCode; | 
|         }else{ | 
|             return "fail"; | 
|         } | 
|     } | 
|   | 
|     @Override | 
|     public String fenceList(String gaodeKey, String serviceId, String fenceIds) { | 
|         String url = "https://tsapi.amap.com/v1/track/geofence/list"; | 
|         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); | 
|         //围栏的唯一标识 | 
|         //支持一次传入多个,以","分割; | 
|         //单次最多支持100个,如超出将只截取前100个作为输入。 | 
|         //否; | 
|         //如传入,则只返回由 gfids 所指定的围栏,不分页(忽略 page 和 pagesize 参数); | 
|         //如不传,则分页返回所有围栏; | 
|         map.put("gfids",fenceIds); | 
|         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(); | 
|             return resultsStr; | 
|         }else{ | 
|             return "fail"; | 
|         } | 
|     } | 
|     //电子围栏删除 | 
|     public String fenceDel(String gaodeKey, String sid,String fenceId) { | 
|         String url = "https://tsapi.amap.com/v1/track/geofence/delete?key="+gaodeKey+"&sid="+sid+"&gfids="+fenceId; | 
|         HttpPost httpPost = new HttpPost(url); | 
|         Map<String,String> map = new HashMap<>(); | 
|         map.put("key",gaodeKey); | 
|         map.put("sid",sid); | 
|         map.put("gfids",fenceId); | 
|         String  param= JSON.toJSONString(map); | 
|         String result = null; | 
|         try { | 
|             result = HttpCurlUtil.sendPostHttp(url, param); | 
|         } catch (IOException e) { | 
|             e.printStackTrace(); | 
|         } | 
|         cn.hutool.json.JSONObject maps = JSONUtil.parseObj(result); | 
|         System.out.println(maps); | 
|         String errcode = maps.get("errcode").toString(); | 
|         if(!"10000".equals(errcode)){ | 
|             return "fail"; | 
|         }else{ | 
|             return maps.toString(); | 
|         } | 
|     } | 
|     @Override | 
|     public String fenceDelete(String gaodeKey, String serviceId, String fenceId) { | 
|         String url = "https://tsapi.amap.com/v1/track/geofence/delete?key="+gaodeKey+"&sid="+serviceId+"&gfids="+fenceId; | 
|         HttpPost httpPost = new HttpPost(url); | 
|         Map<String,String> map = new HashMap<>(); | 
|         map.put("key",gaodeKey); | 
|         map.put("sid",serviceId); | 
|         map.put("gfids",fenceId); | 
|         String  param= JSON.toJSONString(map); | 
|         String result = null; | 
|         try { | 
|             result = HttpCurlUtil.sendPostHttp(url, param); | 
|         } catch (IOException e) { | 
|             e.printStackTrace(); | 
|         } | 
|         log.info("删除围栏"+result); | 
|   | 
|         cn.hutool.json.JSONObject maps = JSONUtil.parseObj(result); | 
|         System.out.println(maps); | 
|         String errcode = maps.get("errcode").toString(); | 
|         if(!"10000".equals(errcode)){ | 
|             return "fail"; | 
|         }else{ | 
|             return maps.toString(); | 
|         } | 
|     } | 
|   | 
|     @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(); | 
|             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); | 
|     } | 
| } |