在线文档

海康开放平台 (hikvision.com)

  • 智能应用平台对接

  • 支持在线调试

https://47.96.225.177/artemis-portal/document/46

maven 依赖 - pom.xml

1
2
3
4
5
<dependency>
<groupId>com.hikvision.ga</groupId>
<artifactId>artemis-http-client</artifactId>
<version>1.1.2</version>
</dependency>

工具类-Artemis.java

  • 此工具类用于对接海康视频平台

  • 配置平台 host,应用 appKey、appSecret。需要从海康方面获取

  • 封装了分页获取监控点资源、根据空间条件分页查询监控点资源、根据区域编号获取下级监控点列表、根据编号获取监控点详细信息、获取报警信息、获取实时预警的播放路径等数据接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
package com.bjtcrj.scm.geo.utils;

import com.alibaba.fastjson.JSON;
import com.bjtcrj.scm.common.utils.Constants;
import com.bjtcrj.scm.geo.persistence.pojo.Days;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import com.hikvision.artemis.sdk.constant.ContentType;
import org.apache.log4j.Logger;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class Artemis {

private static Logger log = Logger.getLogger(Artemis.class);

/**
* STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.
*/
static {
// 平台门户/nginx的IP和端口(必须使用https协议,https端口默认为443)
//示例:https://47.96.225.177/artemis/api/resource/v1/
ArtemisConfig.host = Constants.HIK_HOST;

// 秘钥appkey
ArtemisConfig.appKey = Constants.HIK_APPKEY;

// 秘钥appSecret
ArtemisConfig.appSecret = Constants.HIK_APPSECRET;
}
/**
* STEP2:设置OpenAPI接口的上下文
*/
private static final String ARTEMIS_PATH = "/artemis";

//调用网关成功的标志,标志位
private final static String SUCC_PRE = "2";

//调用网关重定向的标志,标志位
private final static String REDIRECT_PRE = "3";

//分页获取监控点资源
public static String cameras(CamerasRequest camerasRequest ){
String camerasDataApi = ARTEMIS_PATH +"/api/resource/v1/cameras";
Map<String,String> path = new HashMap<String,String>(2){
{
put("https://",camerasDataApi);
}
};
String body= JSON.toJSONString(camerasRequest);
String result = ArtemisHttpUtil.doPostStringArtemis(path,body,null,null,ContentType.CONTENT_TYPE_JSON);
return result;
}

//根据空间条件分页查询监控点资源
public static String getCamerasBySpatialIndexWithPage(GetCamerasBySpatialIndexWithPageRequest getCamerasBySpatialIndexWithPageRequest ){
String getCamerasBySpatialIndexWithPageDataApi = ARTEMIS_PATH +"/api/resource/v1/camera/getCamerasBySpatialIndexWithPage";
Map<String,String> path = new HashMap<String,String>(2){
{
put("https://",getCamerasBySpatialIndexWithPageDataApi);
}
};
String body= JSON.toJSONString(getCamerasBySpatialIndexWithPageRequest);
String result =ArtemisHttpUtil.doPostStringArtemis(path,body,null,null,ContentType.CONTENT_TYPE_JSON);
return result;
}

//根据区域编号获取下级监控点列表
public static String camerasByCode(CamerasRequest camerasRequest ){
String camerasDataApi = ARTEMIS_PATH +"/api/resource/v1/regions/regionIndexCode/cameras";
Map<String,String> path = new HashMap<String,String>(2){
{
put("https://",camerasDataApi);
}
};
String body= JSON.toJSONString(camerasRequest);
String result =ArtemisHttpUtil.doPostStringArtemis(path,body,null,null,ContentType.CONTENT_TYPE_JSON);
return result;
}

//根据编号获取监控点详细信息
public static String indexCode(IndexCodeRequest indexCodeRequest ){
String indexCodeDataApi = ARTEMIS_PATH +"/api/resource/v1/cameras/indexCode";
Map<String,String> path = new HashMap<String,String>(2){
{
put("https://",indexCodeDataApi);
}
};
String body= JSON.toJSONString(indexCodeRequest);
String result =ArtemisHttpUtil.doPostStringArtemis(path,body,null,null,ContentType.CONTENT_TYPE_JSON);
return result;
}



//修改监控点经纬度
/* public static String modifyCameraOperationResource(ModifyCameraOperationResourceRequest modifyCameraOperationResourceRequest ){
String modifyCameraOperationResourceDataApi = ARTEMIS_PATH +"/api/resource/v1/camera/modifyCameraOperationResource";
Map<String,String> path = new HashMaechartsp<String,String>(2){
{
put("https://",modifyCameraOperationResourceDataApi);
}
};
String body=JSON.toJSONString(modifyCameraOperationResourceRequest);
String result =ArtemisHttpUtil.doPostStringArtemis(path,body,null,null,ContentType.CONTENT_TYPE_JSON);
return result;
}*/

//获取报警信息
public static String getWarningInfo(Days days){
String warningApi = ARTEMIS_PATH+"/api/istreet/v1/istreetService/alarm/data/list";
Map<String,String> path = new HashMap<String,String>(2){
{
put("https://",warningApi);
}
};
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
Calendar calendar = Calendar.getInstance();
String endTime = sdf.format(calendar.getTime());
//由前端获取
calendar.add(Calendar.DAY_OF_MONTH,-(days.getDays()));
String beginTime = sdf.format(calendar.getTime());
Map<String,Object> data = new HashMap<>();
data.put("beginTime",beginTime);
data.put("endTime",endTime);
data.put("audited","1");
String body = JSON.toJSONString(data);
String result = ArtemisHttpUtil.doPostStringArtemis(path,body,null,null,ContentType.CONTENT_TYPE_JSON);
log.debug("定时获取的智能分析信息:"+result);
return result;
}

//获取报警信息
public static String getAllWarningInfo(){
String warningApi = ARTEMIS_PATH+"/api/istreet/v1/istreetService/alarm/data/list";
Map<String,String> path = new HashMap<String,String>(2){
{
put("https://",warningApi);
}
};
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
Map<String,Object> data = new HashMap<>();
Calendar calendar = Calendar.getInstance();
String endTime = sdf.format(calendar.getTime());
String beginTime = "2020-09-27T00:00:00.000+08:00";
data.put("beginTime",beginTime);
data.put("endTime",endTime);
data.put("audited","1");
String body = JSON.toJSONString(data);
String result = ArtemisHttpUtil.doPostStringArtemis(path,body,null,null,ContentType.CONTENT_TYPE_JSON);
log.debug("同步获取的智能分析信息:"+result);
return result;
}

//获取实时预警的播放路径
public static String getPlaybackURLs(String indexCode, Date almtime, String time){
String warningApi = ARTEMIS_PATH+"/api/video/v1/cameras/playbackURLs";
Map<String,String> path = new HashMap<String,String>(2){
{
put("https://",warningApi);
}
};
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSZZ");
int dur = Integer.valueOf(time);
String endTime = df.format(new Date(almtime.getTime() + dur * 60 * 1000));
String beginTime = df.format(new Date(almtime.getTime() - dur * 60 * 1000));
Map<String,Object> data = new HashMap<>();
data.put("beginTime",beginTime);
data.put("endTime",endTime);
data.put("cameraIndexCode",indexCode);
String body = JSON.toJSONString(data);
String result = ArtemisHttpUtil.doPostStringArtemis(path,body,null,null,ContentType.CONTENT_TYPE_JSON);
return result;
}
}

返回数据解析

获取报警信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
String res = Artemis.getAllWarningInfo();
List<Analysis> analysisArrayList = new ArrayList<>();
if (res!=null&&res!=""){
JSONObject jsonObject = JSONObject.parseObject(res);
String code = jsonObject.getString("code");
if ("0".equals(code)){
JSONObject data = jsonObject.getJSONObject("data");
JSONArray list = data.getJSONArray("list");
if (list.size()>0){
for (int i=0;i<list.size();i++){
Analysis analysis = new Analysis();
JSONObject json = list.getJSONObject(i);
int audited = json.getInteger("audited");
if (1==audited){
analysis.setStatus(String.valueOf(audited));
if (json.containsKey("finishedTime")){
analysis.setAlmtime(new Date(json.getLong("finishedTime")));
}
if (json.containsKey("intelligentType")){
analysis.setAlmtype(json.getString("intelligentType"));
}
if (json.containsKey("id")){
analysis.setAlmcode(json.getString("id"));
}
if (json.containsKey("indexCode")){
String indexCode = json.getString("indexCode");
analysis.setAlmdvcode(indexCode);
VideomonitorDto videomonitorDto = this.videomonitorService.getObjByCode(indexCode);
if (videomonitorDto!=null){
analysis.setBdgps(videomonitorDto.getGeocoordinates());
analysis.setAlmaddress(videomonitorDto.getGeodescription());
}
List<Analysis> analysisList = getAnalysisRecent(indexCode);
if (analysisList!=null&&analysisList.size()>0){
if (analysisList.get(0)!=null){
String picurl = analysisList.get(0).getPicurl();
String url = DownloadPicture.downloadPicture(picurl, Constants.INTELLIGENT_ANALYSIS_PATH);
analysis.setPic1(url);
}
if (analysisList.size()>1&&analysisList.get(1)!=null){
String picurl = analysisList.get(1).getPicurl();
String url = DownloadPicture.downloadPicture(picurl, Constants.INTELLIGENT_ANALYSIS_PATH);
analysis.setPic2(url);
}
}
}
if (json.containsKey("picUrl")){
String picUrl = json.getString("picUrl");
String url = DownloadPicture.downloadPicture(picUrl, Constants.INTELLIGENT_ANALYSIS_PATH);
analysis.setPicurl(url);
}
analysis.setId(StringEx.valueOfNnull(UniqueIDGen.getUniqueID()));
analysis.setAddtime(new Date());
if (!bigMap.containsKey(analysis.getAlmcode())){
analysisArrayList.add(analysis);
}
}
}
Integer cou = 0;
for (Analysis a:analysisArrayList){
boolean b = this.analysisService.addAnalysis(a);
if (b){
cou++;
}
}
if (cou>0) {
j.setMsg("已成功同步" + cou + "条信息!");
j.setSuccess(true);
} else {
j.setMsg("同步失败!");
j.setSuccess(false);
}
}else {
j.setMsg("没有新数据");
j.setSuccess(false);
}

}else {
j.setMsg("数据获取失败");
j.setSuccess(false);
}
}else {
j.setMsg("连接请求失败");
j.setSuccess(false);
}