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