package com.ruoyi.common.utils.security;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
public class ArtemisPost {
private static final Logger log = LoggerFactory.getLogger(ArtemisPost.class);
public static String host;
public static String appKey;
public static String appSecret;
public static String type;
public static ArtemisConfig artemisConfig;
/**
* API网关的后端服务上下文为:/artemis
*/
private static final String ARTEMIS_PATH = "/artemis";
public ArtemisPost(String host, String appKey, String appSecret){
ArtemisConfig config = new ArtemisConfig();
config.setHost(host); // 代理API网关nginx服务器ip端口
config.setAppKey(appKey); // 密钥appkey
config.setAppSecret(appSecret);// 密钥appSecret
artemisConfig = config;
}
/**
* 获取所有的监控列表
* @param pageNo 页数
* @param pageSize 每页条数
* @return String
*/
public String getAllCameras(Integer pageNo, Integer pageSize) {
final String getCamsApi = ARTEMIS_PATH + "/api/resource/v1/cameras";
Map<String, String> paramMap = new HashMap<>();// post请求参数
paramMap.put("pageNo", pageNo.toString());
paramMap.put("pageSize", pageSize.toString());
String body = JSON.toJSON(paramMap).toString();
return executeArtemisPost(getCamsApi, body);
}
/**
* 根据区域获取下级编码设备列表
*
* @param regionIndexCode 区域编号
* @return String
*/
public String getRegionDeviceList(Integer pageNo, Integer pageSize, String regionIndexCode) {
final String getCamsApi = ARTEMIS_PATH + "/api/resource/v1/encodeDevice/subResources";
Map<String, Object> paramMap = new HashMap<>();// post请求参数
List<String> list = new ArrayList<>();
paramMap.put("regionIndexCode", regionIndexCode);
paramMap.put("pageNo", pageNo.toString());
paramMap.put("pageSize", pageSize.toString());
list.add("view");
paramMap.put("authCodes", list);
String body = JSON.toJSON(paramMap).toString();
return executeArtemisPost(getCamsApi, body);
}
/**
* 名称查询监控列表
*
* @param pageNo 页数
* @param pageSize 每页条数
* @return String
*/
@SuppressWarnings("all")
public String getAllCamerasByName(Integer pageNo, Integer pageSize, String cameraName) {
final String getCamsApi = ARTEMIS_PATH + "/api/resource/v2/camera/search";
Map<String, String> paramMap = new HashMap<>();// post请求参数
paramMap.put("pageNo", pageNo.toString());
paramMap.put("pageSize", pageSize.toString());
paramMap.put("name", cameraName.toString());
paramMap.put("orderBy", "name");
paramMap.put("orderType", "desc");
String body = JSON.toJSON(paramMap).toString();
return executeArtemisPost(getCamsApi, body);
}
/**
* 获取设备流地址信息
*
* @param cameraIndexCode 摄像头编号
* @param protocol rtsp
* @return String
*/
public String getCamerasRtsp(String cameraIndexCode, String protocol) {
String getCamsApi = ARTEMIS_PATH + "/api/vnsc/mls/v1/preview/openApi/getPreviewParam";
Map<String, Object> paramMap = new HashMap<>();// post请求参数
paramMap.put("indexCode", cameraIndexCode);
paramMap.put("protocol", protocol);
paramMap.put("expireTime", -1);
if (protocol.equals("rtsp")){
paramMap.put("expand","streamform=rtp&transcode=1");
}
String body = JSON.toJSON(paramMap).toString();
return executeArtemisPost(getCamsApi,body);
}
//paramMap.put("expand","streamform=rtp&transcode=1");
/**
* 该接口用于手动触发设备抓图,返回图片的地址,抓图前请确保平台上已配置图片存储信息。抓图时间为触发手动抓图命令的时间。
* @param cameraIndexCode 摄像头唯一标识
* @return 图片路径
*/
public String manualCapture(String cameraIndexCode){
final String getCamsApi = ARTEMIS_PATH + "/api/video/v1/manualCapture";
Map<String, String> paramMap = new HashMap<>();// post请求参数
paramMap.put("cameraIndexCode", cameraIndexCode);
String body = JSON.toJSON(paramMap).toString();
return executeArtemisPost(getCamsApi, body);
}
/**
* 获取设备信息
* @param cameraIndexCode 资源编号
* @return String
*/
public String getCameraInfoByIndexCode(String cameraIndexCode){
final String getCamsApi = ARTEMIS_PATH + "/api/resource/v1/cameras/indexCode";
Map<String, String> paramMap = new HashMap<>();// post请求参数
paramMap.put("cameraIndexCode", cameraIndexCode);
String body = JSON.toJSON(paramMap).toString();
return executeArtemisPost(getCamsApi,body);
}
/**
* 执行Artemis的POST请求
*/
private String executeArtemisPost(String apiPath, String body) {
Map<String, String> path = Collections.singletonMap("https://", apiPath);
try {
return ArtemisHttpUtil.doPostStringArtemis(artemisConfig, path, body, null, null, "application/json", null);
} catch (Exception e) {
log.error("Artemis POST请求异常: {}", e.getMessage());
return null;
}
}
}
文档更新时间: 2023-12-18 03:25 作者:JeffreyCheung