From 1cad14bca191807e18705c3a5526eda8151be439 Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期一, 14 四月 2025 23:10:22 +0800
Subject: [PATCH] 批量审核和图片保存bug

---
 ycl-platform/src/main/java/com/ycl/util/VideoUtil.java |  283 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 221 insertions(+), 62 deletions(-)

diff --git a/ycl-platform/src/main/java/com/ycl/util/VideoUtil.java b/ycl-platform/src/main/java/com/ycl/util/VideoUtil.java
index 62116ec..bfee0ef 100644
--- a/ycl-platform/src/main/java/com/ycl/util/VideoUtil.java
+++ b/ycl-platform/src/main/java/com/ycl/util/VideoUtil.java
@@ -1,13 +1,19 @@
 package com.ycl.util;
 
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import cn.hutool.json.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.ycl.api.CommonResult;
+import com.hikvision.artemis.sdk.ArtemisHttpUtil;
+import com.hikvision.artemis.sdk.config.ArtemisConfig;
 import com.ycl.dto.v1.Req.FirstReq;
 import com.ycl.dto.v1.Req.SecondReq;
 import com.ycl.dto.v1.Res.FirstRes;
+import com.ycl.dto.video.Camera;
+import com.ycl.dto.video.HttpResponseResult;
+import com.ycl.dto.video.PageResult;
 import com.ycl.utils.MD5Util;
 import lombok.SneakyThrows;
+import org.apache.http.HttpResponse;
+import org.apache.http.util.EntityUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.*;
 import org.springframework.http.client.ClientHttpResponse;
@@ -17,6 +23,9 @@
 import org.springframework.web.client.RestTemplate;
 
 import java.net.URI;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @Component
 public class VideoUtil {
@@ -40,74 +49,224 @@
      **/
     @SneakyThrows
     public String getVideo(String code, String scheme, Integer subType) {
-        System.out.println("寮�濮嬭棰戣姹傦細" + code);
-        String clientType = "winpc";
-        String reqUrl = "/videoService/accounts/authorize";
-        String deviceUrl = "/videoService/devicesManager/devices";
+        // System.out.println("寮�濮嬭棰戣姹傦細" + code);
+        try {
+
+            String clientType = "winpc";
+            String reqUrl = "/videoService/accounts/authorize";
+            String deviceUrl = "/videoService/devicesManager/devices";
 //        String monitorUrl = "/videoService/realmonitor/uri?subType=" + subType + "&scheme=" + scheme + "&channelId=";
 
-        String monitorUrl = "/videoService/realmonitor/uri?trackId=&encryptedInfo=&userId=&urlType=1&keyIndex=&regionId=&packtype=Private&planId=&subType=" + subType + "&isroute=false&streamType=&locationEnable=false&domainId=&duration=600&scheme=RTSP&dataType=2&extend=&channelId=";
-        if (!"RTSP".equals(scheme)) {
-            monitorUrl = "/videoService/realmonitor/uri?subType=" + subType + "&scheme=" + scheme + "&channelId=";
+            String monitorUrl = "/videoService/realmonitor/uri?trackId=&encryptedInfo=&userId=&urlType=1&keyIndex=&regionId=&packtype=Private&planId=&subType=" + subType + "&isroute=false&streamType=&locationEnable=false&domainId=&duration=600&scheme=RTSP&dataType=2&extend=&channelId=";
+            if (!"RTSP".equals(scheme)) {
+                monitorUrl = "/videoService/realmonitor/uri?subType=" + subType + "&scheme=" + scheme + "&channelId=";
+            }
+            RestTemplate restTemplate = new RestTemplate();
+            restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {
+                @Override
+                public boolean hasError(HttpStatus status) {
+                    return super.hasError(status);
+                }
+
+                @Override
+                public void handleError(URI url, HttpMethod method, ClientHttpResponse response) {
+
+                }
+            });
+            SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
+            simpleClientHttpRequestFactory.setOutputStreaming(false);
+            restTemplate.setRequestFactory(simpleClientHttpRequestFactory);
+
+            //璇锋眰澶�
+            HttpHeaders httpHeaders = new HttpHeaders();
+            httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+
+            //绗竴娆℃潈闄愯姹備綋
+            FirstReq firstReq = new FirstReq();
+            firstReq.setIpAddress(ip);
+            firstReq.setUserName(userName);
+            firstReq.setClientType(clientType);
+            ObjectMapper objectMapper = new ObjectMapper();
+
+            HttpEntity<String> firstEntity = new HttpEntity<>(objectMapper.writeValueAsString(firstReq), httpHeaders);
+            ResponseEntity<String> responseEntity = restTemplate.postForEntity(url + reqUrl, firstEntity, String.class);
+
+            FirstRes firstRes = objectMapper.readValue(responseEntity.getBody(), FirstRes.class);
+
+            String signature = MD5Util.md5Encrypt(passWord);
+            signature = MD5Util.md5Encrypt(userName + signature);
+            signature = MD5Util.md5Encrypt(signature);
+            signature = MD5Util.md5Encrypt(userName + ":" + firstRes.getRealm() + ":" + signature);
+            signature = MD5Util.md5Encrypt(signature + ":" + firstRes.getRandomKey());
+
+            SecondReq secondReq = new SecondReq();
+            secondReq.setIpAddress(ip);
+            secondReq.setEncryptType(firstRes.getEncryptType());
+            secondReq.setSignature(signature);
+            secondReq.setRandomKey(firstRes.getRandomKey());
+            secondReq.setClientType(clientType);
+            secondReq.setUserName(userName);
+
+            HttpEntity<String> secondEntity = new HttpEntity<>(objectMapper.writeValueAsString(secondReq), httpHeaders);
+            ResponseEntity<String> secondResEntity = restTemplate.postForEntity(url + reqUrl, secondEntity, String.class);
+            HttpHeaders deviceHeaders = new HttpHeaders();
+            deviceHeaders.add("X-Subject-Token", objectMapper.readTree(secondResEntity.getBody()).get("token").textValue());
+            HttpEntity<Object> deviceEntity = new HttpEntity<>(deviceHeaders);
+            // System.out.println("瑙嗛璁惧璇锋眰鍦板潃锛�" + url + deviceUrl + "/" + code);
+
+            ResponseEntity<String> exchange = restTemplate.exchange(url + deviceUrl + "/" + code, HttpMethod.GET, deviceEntity, String.class);
+            // System.out.println("寮�濮嬭棰戣韩浠借姹傜粨鏋滐細" + exchange.getBody());
+            String channelId = objectMapper.readTree(objectMapper.readTree(objectMapper.readTree(exchange.getBody()).get("encoderUnit").toString()).get("channels").get(0).toString()).get("channelId").textValue();
+            // System.out.println("瑙嗛璇锋眰鍦板潃锛�" + url + monitorUrl + channelId);
+            ResponseEntity<String> monitorReq = restTemplate.exchange(url + monitorUrl + channelId, HttpMethod.GET, deviceEntity, String.class);
+            // System.out.println("瑙嗛璇锋眰杩斿洖鍙傛暟锛�" + monitorReq.getBody());
+            return objectMapper.readTree(monitorReq.getBody()).get("url").textValue();
+
+        } catch (Exception ex) {
+            System.out.println("鑾峰彇瑙嗛寮傚父锛�" + ex.getMessage());
+            return "鑾峰彇鍦板潃澶辫触锛岃妫�鏌ode鍊�";
         }
-        RestTemplate restTemplate = new RestTemplate();
-        restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {
-            @Override
-            public boolean hasError(HttpStatus status) {
-                return super.hasError(status);
+    }
+
+
+    private final String ARTEMIS_PATH = "/artemis";
+    private final String HOST = "10.53.133.82:1443";
+    private final String APP_KEY = "29967737";
+    private final String APP_SECRET = "LElVf9Ct3ykStZHCmFNZ";
+
+    public PageResult<Camera> callPostCameras(Integer pageNo, Integer pageSize, String treeCode) throws Exception {
+
+        ArtemisConfig config = new ArtemisConfig();
+        config.setHost(HOST); // 浠g悊API缃戝叧nginx鏈嶅姟鍣╥p绔彛
+        config.setAppKey(APP_KEY);  // 绉橀挜appkey
+        config.setAppSecret(APP_SECRET);// 绉橀挜appSecret
+
+        final String getSecurityApi = ARTEMIS_PATH + "/api/resource/v1/cameras"; // 鎺ュ彛璺緞
+        Map<String, String> path = new HashMap<String, String>(2) {
+            {
+                put("https://", getSecurityApi);
             }
-
-            @Override
-            public void handleError(URI url, HttpMethod method, ClientHttpResponse response) {
-
+        };
+        Map<String, String> head = new HashMap<String, String>(2) {  //get璇锋眰鐨刪ead鍙傛暟
+            {
+                put("headpost", "sky-test");
             }
-        });
-        SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
-        simpleClientHttpRequestFactory.setOutputStreaming(false);
-        restTemplate.setRequestFactory(simpleClientHttpRequestFactory);
+        };
+        JSONObject jsonBody = new JSONObject();
+        jsonBody.put("pageNo", pageNo);
+        jsonBody.put("pageSize", pageSize);
+        jsonBody.put("treeCode", treeCode);
+        String body = jsonBody.toString();
+//        System.out.println("娴峰悍瑙嗛寮�濮嬭姹傦細");
+        //鍙傛暟鏍规嵁鎺ュ彛瀹為檯鎯呭喌璁剧疆
+        HttpResponse result = ArtemisHttpUtil.doPostStringImgArtemis(config, path, body, null, null, "application/json", head);
+        try {
+            String strResult = EntityUtils.toString(result.getEntity());
+            HttpResponseResult responseResult = com.alibaba.fastjson.JSONObject.parseObject(strResult, HttpResponseResult.class);
+//            System.out.println("娴峰悍瑙嗛缁撴灉锛�" + responseResult.toString());
+            if ("0".equals(responseResult.getCode())) {
+                com.alibaba.fastjson.JSONObject jsonObject = responseResult.getData();
+                String strList = jsonObject.getString("list");
+                Integer total = Integer.parseInt(jsonObject.getString("total"));
+                Integer resultPageSize = Integer.parseInt(jsonObject.getString("pageSize"));
+                Integer resultPageNo = Integer.parseInt(jsonObject.getString("pageNo"));
+                List<Camera> ls = com.alibaba.fastjson.JSONObject.parseArray(strList, Camera.class);
+                PageResult<Camera> pageResult = new PageResult<>(total, resultPageSize, resultPageNo, ls);
+                return pageResult;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 
-        //璇锋眰澶�
-        HttpHeaders httpHeaders = new HttpHeaders();
-        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+    public String getKHVideo(String code) throws Exception {
 
-        //绗竴娆℃潈闄愯姹備綋
-        FirstReq firstReq = new FirstReq();
-        firstReq.setIpAddress(ip);
-        firstReq.setUserName(userName);
-        firstReq.setClientType(clientType);
-        ObjectMapper objectMapper = new ObjectMapper();
+        ArtemisConfig config = new ArtemisConfig();
+        config.setHost(HOST); // 浠g悊API缃戝叧nginx鏈嶅姟鍣╥p绔彛
+        config.setAppKey(APP_KEY);  // 绉橀挜appkey
+        config.setAppSecret(APP_SECRET);// 绉橀挜appSecret
+        final String getSecurityApi = ARTEMIS_PATH + "/api/video/v1/cameras/previewURLs"; // 鎺ュ彛璺緞
+        Map<String, String> path = new HashMap<String, String>(2) {
+            {
+                put("https://", getSecurityApi);
+            }
+        };
+        Map<String, String> head = new HashMap<String, String>(2) {  //get璇锋眰鐨刪ead鍙傛暟
+            {
+                put("headpost", "sky-test");
+            }
+        };
+        Map<String, String> query = new HashMap<String, String>(2) {  //get璇锋眰鐨刪ead鍙傛暟
+            {
+                put("domainId", "0");
+            }
+        };
+        JSONObject jsonBody = new JSONObject();
+        jsonBody.put("cameraIndexCode", code);
+        jsonBody.put("streamType", 0);
+        jsonBody.put("protocol", "hls");
+        jsonBody.put("transmode", 0);
+        jsonBody.put("expand","transcode=1&videotype=h264");
+        String body = jsonBody.toString();
+        //鍙傛暟鏍规嵁鎺ュ彛瀹為檯鎯呭喌璁剧疆
+        HttpResponse result = ArtemisHttpUtil.doPostStringImgArtemis(config, path, body, null, null, "application/json", null);
+//        System.out.println("娴峰悍瀹屾垚璇锋眰");
+        try {
+            String strResult = EntityUtils.toString(result.getEntity());
+//            System.out.println("娴峰悍杩斿洖缁撴灉锛�" + strResult);
+            HttpResponseResult responseResult = com.alibaba.fastjson.JSONObject.parseObject(strResult, HttpResponseResult.class);
+            if ("0".equals(responseResult.getCode())) {
+                com.alibaba.fastjson.JSONObject jsonObject = responseResult.getData();
+                String url = jsonObject.getString("url");
+                return url;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
 
-        HttpEntity<String> firstEntity = new HttpEntity<>(objectMapper.writeValueAsString(firstReq), httpHeaders);
-        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url + reqUrl, firstEntity, String.class);
+    public String getKHPresets(String code) throws Exception {
 
-        FirstRes firstRes = objectMapper.readValue(responseEntity.getBody(), FirstRes.class);
-
-        String signature = MD5Util.md5Encrypt(passWord);
-        signature = MD5Util.md5Encrypt(userName + signature);
-        signature = MD5Util.md5Encrypt(signature);
-        signature = MD5Util.md5Encrypt(userName + ":" + firstRes.getRealm() + ":" + signature);
-        signature = MD5Util.md5Encrypt(signature + ":" + firstRes.getRandomKey());
-
-        SecondReq secondReq = new SecondReq();
-        secondReq.setIpAddress(ip);
-        secondReq.setEncryptType(firstRes.getEncryptType());
-        secondReq.setSignature(signature);
-        secondReq.setRandomKey(firstRes.getRandomKey());
-        secondReq.setClientType(clientType);
-        secondReq.setUserName(userName);
-
-        HttpEntity<String> secondEntity = new HttpEntity<>(objectMapper.writeValueAsString(secondReq), httpHeaders);
-        ResponseEntity<String> secondResEntity = restTemplate.postForEntity(url + reqUrl, secondEntity, String.class);
-        HttpHeaders deviceHeaders = new HttpHeaders();
-        deviceHeaders.add("X-Subject-Token", objectMapper.readTree(secondResEntity.getBody()).get("token").textValue());
-        HttpEntity<Object> deviceEntity = new HttpEntity<>(deviceHeaders);
-        // System.out.println("瑙嗛璁惧璇锋眰鍦板潃锛�" + url + deviceUrl + "/" + code);
-        ResponseEntity<String> exchange = restTemplate.exchange(url + deviceUrl + "/" + code, HttpMethod.GET, deviceEntity, String.class);
-        // System.out.println("寮�濮嬭棰戣韩浠借姹傜粨鏋滐細" + exchange.getBody());
-        String channelId = objectMapper.readTree(objectMapper.readTree(objectMapper.readTree(exchange.getBody()).get("encoderUnit").toString()).get("channels").get(0).toString()).get("channelId").textValue();
-        // System.out.println("瑙嗛璇锋眰鍦板潃锛�" + url + monitorUrl + channelId);
-        ResponseEntity<String> monitorReq = restTemplate.exchange(url + monitorUrl + channelId, HttpMethod.GET, deviceEntity, String.class);
-        // System.out.println("瑙嗛璇锋眰杩斿洖鍙傛暟锛�" + monitorReq.getBody());
-        return objectMapper.readTree(monitorReq.getBody()).get("url").textValue();
+        ArtemisConfig config = new ArtemisConfig();
+        config.setHost(HOST); // 浠g悊API缃戝叧nginx鏈嶅姟鍣╥p绔彛
+        config.setAppKey(APP_KEY);  // 绉橀挜appkey
+        config.setAppSecret(APP_SECRET);// 绉橀挜appSecret
+        final String getSecurityApi = ARTEMIS_PATH + "/api/video/v1/presets/searches"; // 鎺ュ彛璺緞
+        Map<String, String> path = new HashMap<String, String>(2) {
+            {
+                put("https://", getSecurityApi);
+            }
+        };
+        Map<String, String> head = new HashMap<String, String>(2) {  //get璇锋眰鐨刪ead鍙傛暟
+            {
+                put("headpost", "sky-test");
+            }
+        };
+        Map<String, String> query = new HashMap<String, String>(2) {  //get璇锋眰鐨刪ead鍙傛暟
+            {
+                put("domainId", "0");
+            }
+        };
+        JSONObject jsonBody = new JSONObject();
+        jsonBody.put("cameraIndexCode", code);
+        String body = jsonBody.toString();
+        //鍙傛暟鏍规嵁鎺ュ彛瀹為檯鎯呭喌璁剧疆
+        HttpResponse result = ArtemisHttpUtil.doPostStringImgArtemis(config, path, body, query, null, "application/json", head);
+//        System.out.println("娴峰悍瀹屾垚璇锋眰-getKHPresets");
+        try {
+            String strResult = EntityUtils.toString(result.getEntity());
+//            System.out.println("娴峰悍杩斿洖缁撴灉-getKHPresets锛�" + strResult);
+            HttpResponseResult responseResult = com.alibaba.fastjson.JSONObject.parseObject(strResult, HttpResponseResult.class);
+            if ("0".equals(responseResult.getCode())) {
+                com.alibaba.fastjson.JSONObject jsonObject = responseResult.getData();
+                String url = jsonObject.getString("url");
+                return url;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
     }
 }

--
Gitblit v1.8.0