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 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 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 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 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 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 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 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 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 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); } }