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