zhongrj
2023-03-30 79eed644343484a5bdd639cd8f021c26195b7c43
新增海康设备查询
5 files modified
4 files added
476 ■■■■■ changed files
.idea/misc.xml 9 ●●●● patch | view | raw | blame | history
.idea/modules.xml 30 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/constant/LauncherConstant.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/launch/LauncherServiceImpl.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java 65 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/ProtocolConstant.java 37 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkController.java 37 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraPreviewURL.java 285 ●●●●● patch | view | raw | blame | history
.idea/misc.xml
@@ -1,6 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ProjectRootManager">
    <output url="file://$PROJECT_DIR$/out" />
  <component name="MavenProjectsManager">
    <option name="originalFiles">
      <list>
        <option value="$PROJECT_DIR$/pom.xml" />
      </list>
    </option>
  </component>
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>
.idea/modules.xml
@@ -2,7 +2,35 @@
<project version="4">
  <component name="ProjectModuleManager">
    <modules>
      <module fileurl="file://$PROJECT_DIR$/.idea/manager.iml" filepath="$PROJECT_DIR$/.idea/manager.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager.iml" filepath="$PROJECT_DIR$/skjcmanager.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-admin/skjcmanager-admin.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-admin/skjcmanager-admin.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-auth/skjcmanager-auth.iml" filepath="$PROJECT_DIR$/skjcmanager-auth/skjcmanager-auth.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-common/skjcmanager-common.iml" filepath="$PROJECT_DIR$/skjcmanager-common/skjcmanager-common.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-service/skjcmanager-desk/skjcmanager-desk.iml" filepath="$PROJECT_DIR$/skjcmanager-service/skjcmanager-desk/skjcmanager-desk.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-desk-api/skjcmanager-desk-api.iml" filepath="$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-desk-api/skjcmanager-desk-api.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-develop/skjcmanager-develop.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-develop/skjcmanager-develop.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-dict-api/skjcmanager-dict-api.iml" filepath="$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-dict-api/skjcmanager-dict-api.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-flow/skjcmanager-flow.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-flow/skjcmanager-flow.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops-api/skjcmanager-flow-api/skjcmanager-flow-api.iml" filepath="$PROJECT_DIR$/skjcmanager-ops-api/skjcmanager-flow-api/skjcmanager-flow-api.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-gateway/skjcmanager-gateway.iml" filepath="$PROJECT_DIR$/skjcmanager-gateway/skjcmanager-gateway.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-log/skjcmanager-log.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-log/skjcmanager-log.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-ops.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-ops.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops-api/skjcmanager-ops-api.iml" filepath="$PROJECT_DIR$/skjcmanager-ops-api/skjcmanager-ops-api.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-plugin/skjcmanager-plugin.iml" filepath="$PROJECT_DIR$/skjcmanager-plugin/skjcmanager-plugin.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-plugin-api/skjcmanager-plugin-api.iml" filepath="$PROJECT_DIR$/skjcmanager-plugin-api/skjcmanager-plugin-api.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-report/skjcmanager-report.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-report/skjcmanager-report.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-resource/skjcmanager-resource.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-resource/skjcmanager-resource.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops-api/skjcmanager-resource-api/skjcmanager-resource-api.iml" filepath="$PROJECT_DIR$/skjcmanager-ops-api/skjcmanager-resource-api/skjcmanager-resource-api.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-scope-api/skjcmanager-scope-api.iml" filepath="$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-scope-api/skjcmanager-scope-api.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-service/skjcmanager-service.iml" filepath="$PROJECT_DIR$/skjcmanager-service/skjcmanager-service.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-service-api.iml" filepath="$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-service-api.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-swagger/skjcmanager-swagger.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-swagger/skjcmanager-swagger.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-service/skjcmanager-system/skjcmanager-system.iml" filepath="$PROJECT_DIR$/skjcmanager-service/skjcmanager-system/skjcmanager-system.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-system-api/skjcmanager-system-api.iml" filepath="$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-system-api/skjcmanager-system-api.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-service/skjcmanager-user/skjcmanager-user.iml" filepath="$PROJECT_DIR$/skjcmanager-service/skjcmanager-user/skjcmanager-user.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-user-api/skjcmanager-user-api.iml" filepath="$PROJECT_DIR$/skjcmanager-service-api/skjcmanager-user-api/skjcmanager-user-api.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-xxljob/skjcmanager-xxljob.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-xxljob/skjcmanager-xxljob.iml" />
      <module fileurl="file://$PROJECT_DIR$/skjcmanager-ops/skjcmanager-xxljob-admin/skjcmanager-xxljob-admin.iml" filepath="$PROJECT_DIR$/skjcmanager-ops/skjcmanager-xxljob-admin/skjcmanager-xxljob-admin.iml" />
    </modules>
  </component>
</project>
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/constant/LauncherConstant.java
@@ -40,7 +40,7 @@
    /**
     * nacos dev 地址
     */
    String NACOS_DEV_ADDR = "172.16.13.144:8848";
    String NACOS_DEV_ADDR = "172.16.13.150:8848";
    /**
     * nacos prod 地址
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/launch/LauncherServiceImpl.java
@@ -38,6 +38,11 @@
        // 通用注册
        PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.server-addr", LauncherConstant.nacosAddr(profile));
        PropsUtil.setProperty(props, "spring.cloud.nacos.config.server-addr", LauncherConstant.nacosAddr(profile));
        //自定义注册
        PropsUtil.setProperty(props, "spring.cloud.nacos.config.namespace", "zhongrijian");
        PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.namespace", "zhongrijian");
        PropsUtil.setProperty(props, "spring.cloud.sentinel.transport.dashboard", LauncherConstant.sentinelAddr(profile));
        PropsUtil.setProperty(props, "spring.zipkin.base-url", LauncherConstant.zipkinAddr(profile));
        PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "false");
skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml
@@ -18,6 +18,12 @@
            <groupId>org.springblade</groupId>
            <artifactId>blade-core-boot</artifactId>
        </dependency>
        <!--hk Hikvision AI 安全认证库-->
        <dependency>
            <groupId>com.hikvision.ga</groupId>
            <artifactId>artemis-http-client</artifactId>
            <version>1.1.3</version>
        </dependency>
    </dependencies>
    <build>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java
New file
@@ -0,0 +1,65 @@
package cn.gistack.sm.hk.constant;
/**
 * @author zhongrj
 * @since 2021-08-06
 */
public class HkConstant {
    /**
     * post
     */
    public static final String HOST = "36.134.79.80:1443";
    /**
     * STEP2:设置OpenAPI接口的上下文
     */
    public static final String ARTEMIS_PATH = "/artemis";
    /**
     * appKey
     */
    public static final String AppKey = "25476341";
    /**
     * appSecret
     */
    public static final String AppSecret = "1eyDaLIxOU4XBC8P7Jyr";
    /**
     * 分页获取监控点资源 url
     */
    public static final String cameras = "/api/resource/v1/cameras";
    /**
     * 视频预览url
     */
    public static final String previewURLs = "/api/video/v2/cameras/previewURLs";
    public static final String previewURLshttps = "/api/vnsc/mls/v1/preview/openApi/getPreviewParam";
    /**
     * 设备查询
     */
    public static final String camerasID = "/api/irds/v2/resource/resourcesByParams";
    /**
     * 语音对讲
     */
    public static final String talkURLs = "/api/vnsc/mls/v1/talk/openApi/getTalkParam";
    /**
     * 查询编码设备列表v2
     */
    public static final String searchURLs = "/api/resource/v2/encodeDevice/search";
    /**
     * 查询编码设备列表v2
     */
    public static final String cameraSearchURLs = "/api/resource/v2/camera/search";
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/ProtocolConstant.java
New file
@@ -0,0 +1,37 @@
package cn.gistack.sm.hk.constant;
/**
 * 取流协议常量
 * @author zhongrj
 * @since 2021-08-06
 */
public interface ProtocolConstant {
    /**
     * HIK私有协议,使用视频SDK进行播放时,传入此类型;
     */
    String HIK = "hik";
    /**
     * RTSP协议
     */
    String RTSP = "rtsp";
    /**
     * RTMP协议(RTMP协议只支持海康SDK协议、EHOME协议、ONVIF协议接入的设备;只支持H264视频编码和AAC音频编码)
     */
    String RTMP = "rtmp";
    /**
     * HLS协议(HLS协议只支持海康SDK协议、EHOME协议、ONVIF协议接入的设备;只支持H264视频编码和AAC音频编码)
     */
    String HLS = "hls";
    String HLSS = "hlss";
    /**
     * Websocket协议(一般用于H5视频播放器取流播放)
     */
     String WS ="ws";
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkController.java
New file
@@ -0,0 +1,37 @@
package cn.gistack.sm.hk.controller;
import cn.gistack.sm.hk.constant.HkConstant;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
import static cn.gistack.sm.hk.util.GetCameraPreviewURL.GetCameraResourcePage;
/**
 * @author zhongrj
 * @Description: 海康设备控制层
 * @date 2023-03-30
 */
@Slf4j
@Api(tags = "海康设备")
@RestController
@RequestMapping("/hk/hk")
@AllArgsConstructor
public class HkController {
    /**
     * 分页列表查询
     * @param query 查询参数
     * @return
     */
    @ApiOperation(value = "海康设备-分页列表查询", notes = "海康设备-分页列表查询")
    @GetMapping(value = "/queryHkList")
    public R queryHkList(Query query) {
        // 查询海康设备列表并返回
        return R.data(GetCameraResourcePage(query.getCurrent(), query.getSize(), HkConstant.cameras));
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraPreviewURL.java
New file
@@ -0,0 +1,285 @@
package cn.gistack.sm.hk.util;
import cn.gistack.sm.hk.constant.HkConstant;
import cn.gistack.sm.hk.constant.ProtocolConstant;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static cn.gistack.sm.hk.constant.HkConstant.ARTEMIS_PATH;
public class GetCameraPreviewURL {
    /**
     * 获取视频预览数据
     *
     * @param url             视频预览url
     * @param cameraIndexCode 监控点唯一标识
     * @return
     */
    public static String GetCameraPreviewURL(String url, String cameraIndexCode, String protocol) {
        /**
         * STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.
         */
        // artemis网关服务器ip端口
        ArtemisConfig.host = HkConstant.HOST;
        // 秘钥appKey
        ArtemisConfig.appKey = HkConstant.AppKey;
        // 秘钥appSecret
        ArtemisConfig.appSecret = HkConstant.AppSecret;
        /**
         * STEP3:设置接口的URI地址
         */
        final String apiUrl = ARTEMIS_PATH + url;
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                //根据现场环境部署确认是http还是https
                put("https://", apiUrl);
            }
        };
        /**
         * STEP4:设置参数提交方式
         */
        String contentType = "application/json";
        /**
         * STEP5:组装请求参数
         */
//        JSONObject jsonBody = new JSONObject();
//        jsonBody.put("indexCode", cameraIndexCode);
//        jsonBody.put("streamType", 0);
//        jsonBody.put("netZoneCode", 0);
//        jsonBody.put("protocol", protocol);
//        jsonBody.put("transmode", 1);
//        jsonBody.put("expireTime", 300);
//        String body = jsonBody.toJSONString();
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("cameraIndexCode", cameraIndexCode);
        jsonBody.put("streamType", 0);
        jsonBody.put("protocol", protocol);
        jsonBody.put("transmode", 1);
//        jsonBody.put("expand", "streamform=ps");
        String body = jsonBody.toJSONString();
        /**
         * STEP6:调用接口
         */
        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);// post请求application/json类型参数
        return result;
    }
    /**
     * 获取视频预览数据
     *
     * @param url        视频预览url
     * @param cameraCode 监控点唯一标识
     * @return
     */
    public static String QueryCameraPreviewURL(String url, String cameraCode, String resourceType, String key) {
        /**
         * STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.
         */
        // artemis网关服务器ip端口
        ArtemisConfig.host = HkConstant.HOST;
        // 秘钥appKey
        ArtemisConfig.appKey = HkConstant.AppKey;
        // 秘钥appSecret
        ArtemisConfig.appSecret = HkConstant.AppSecret;
        /**
         * STEP3:设置接口的URI地址
         */
        final String apiUrl = ARTEMIS_PATH + url;
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                //根据现场环境部署确认是http还是https
                put("https://", apiUrl);
            }
        };
        /**
         * STEP4:设置参数提交方式
         */
        String contentType = "application/json";
        /**
         * STEP5:组装请求参数
         */
        JSONObject jsonBody = new JSONObject();
        List<JSONObject> list = new ArrayList<>();
        List list2 = new ArrayList();
        JSONObject map = new JSONObject();
        list2.add(cameraCode);
        map.put("key", key);
        map.put("operator", 0);
        map.put("values", list2);
        list.add(map);
        jsonBody.put("pageNo", 1);
        jsonBody.put("pageSize", 100);
        jsonBody.put("resourceType", resourceType);
        jsonBody.put("expressions", list);
        String body = jsonBody.toJSONString();
        System.out.println(jsonBody);
        /**
         * STEP6:调用接口
         */
        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);// post请求application/json类型参数
        return result;
    }
    /**
     * 语音对讲
     *
     * @param url             语音对讲url
     * @param cameraIndexCode 监控点唯一标识
     * @return
     */
    public static String GetTalkURLs(String url, String cameraIndexCode) {
        /**
         * STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.
         */
        // artemis网关服务器ip端口
        ArtemisConfig.host = HkConstant.HOST;
        // 秘钥appKey
        ArtemisConfig.appKey = HkConstant.AppKey;
        // 秘钥appSecret
        ArtemisConfig.appSecret = HkConstant.AppSecret;
        /**
         * STEP3:设置接口的URI地址
         */
        final String apiUrl = ARTEMIS_PATH + url;
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                //根据现场环境部署确认是http还是https
                put("https://", apiUrl);
            }
        };
        /**
         * STEP4:设置参数提交方式
         */
        String contentType = "application/json";
        /**
         * STEP5:组装请求参数
         */
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("cameraIndexCode", cameraIndexCode);
        jsonBody.put("streamType", "");
        jsonBody.put("expand", "");
        jsonBody.put("eurlExpand", "");
        jsonBody.put("netZoneCode", 0);
        jsonBody.put("transmode", 1);
        jsonBody.put("talkIndexCode", "ce744c4c67df464f92994185d825b6fa");
        jsonBody.put("protocol", "wss");
        String body = jsonBody.toJSONString();
        /**
         * STEP6:调用接口
         */
        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);// post请求application/json类型参数
        return result;
    }
    /**
     * 获取监控点资源分页数据
     *
     * @param url 监控资源url
     * @return
     */
    public static String GetCameraResourcePage(Integer pageNo, Integer pageSize, String url) {
        /**
         * STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.
         */
        // artemis网关服务器ip端口
        ArtemisConfig.host = HkConstant.HOST;
        // 秘钥appKey
        ArtemisConfig.appKey = HkConstant.AppKey;
        // 秘钥appSecret
        ArtemisConfig.appSecret = HkConstant.AppSecret;
        /**
         * STEP3:设置接口的URI地址
         */
        final String apiUrl = ARTEMIS_PATH + url;
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                //根据现场环境部署确认是http还是https
                put("https://", apiUrl);
            }
        };
        /**
         * STEP4:设置参数提交方式
         */
        String contentType = "application/json";
        /**
         * STEP5:组装请求参数
         */
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("pageNo", pageNo);
        jsonBody.put("pageSize", pageSize);
        String body = jsonBody.toJSONString();
        /**
         * STEP6:调用接口并返回数据
         * post请求application/json类型参数;
         */
        return ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);
    }
    public static void main(String[] args) {
        String result = GetCameraResourcePage(1, 10, HkConstant.cameras);
        //根据设备id获取设备编号
//        String result1 = QueryCameraPreviewURL(HkConstant.camerasID, "111111222", "encodeDevice", "deviceCode");
        JSONObject jsonObject1 = JSONObject.parseObject(result);
        JSONObject res1 = (JSONObject) jsonObject1.get("data");
        JSONArray arr1 = JSON.parseArray(res1.getString("list"));
        JSONObject data1 = (JSONObject) arr1.get(1);
        String code1 = data1.get("cameraIndexCode").toString();
        //根据设备编号获取子节点编号
//        String result2 = QueryCameraPreviewURL(HkConstant.camerasID, code1, "camera", "parentIndexCode");
//
//        JSONObject jsonObject2 = JSONObject.parseObject(result2);
//        JSONObject res2 = (JSONObject) jsonObject2.get("data");
//        JSONArray arr2 = JSON.parseArray(res2.getString("list"));
//        JSONObject data2 = (JSONObject) arr2.get(0);
//        String code2 = data2.get("indexCode").toString();
        //根据子节点编号获取设备播放地址
        String result3 = GetCameraPreviewURL(HkConstant.previewURLs,
            "59f945a2d0354eb3b2794979c62228f2", ProtocolConstant.HLS);
        //根据子节点编号获取音频对讲地址
//        String result4 = GetTalkURLs(HkConstant.talkURLs, code1);
        System.out.println("result结果示例: " + result);
//        System.out.println("result1 = " + result1);
//        System.out.println("result2 = " + result2);
        System.out.println("result3 = " + result3);
//        System.out.println("result4 = " + result4);
    }
}