From 75fccfaf1774b0902eec6e7dd8b2dac8105fa04b Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期三, 01 十一月 2023 10:45:36 +0800
Subject: [PATCH] 使用zlm原生接口删除录像文件

---
 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java             |   12 +++++-
 src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java |   17 +++++---
 src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java          |   10 -----
 src/main/java/com/genersoft/iot/vmp/conf/CloudRecordTimer.java                 |   31 +++++++++++----
 4 files changed, 43 insertions(+), 27 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/conf/CloudRecordTimer.java b/src/main/java/com/genersoft/iot/vmp/conf/CloudRecordTimer.java
index 9424750..7e11833 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/CloudRecordTimer.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/CloudRecordTimer.java
@@ -3,8 +3,10 @@
 
 import com.alibaba.fastjson2.JSONObject;
 import com.genersoft.iot.vmp.media.zlm.AssistRESTfulUtils;
+import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.genersoft.iot.vmp.service.IMediaServerService;
+import com.genersoft.iot.vmp.service.bean.CloudRecordItem;
 import com.genersoft.iot.vmp.storager.dao.CloudRecordServiceMapper;
 import com.genersoft.iot.vmp.vmanager.cloudRecord.CloudRecordController;
 import org.slf4j.Logger;
@@ -13,6 +15,7 @@
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
@@ -33,12 +36,13 @@
     private CloudRecordServiceMapper cloudRecordServiceMapper;
 
     @Autowired
-    private AssistRESTfulUtils assistRESTfulUtils;
+    private ZLMRESTfulUtils zlmresTfulUtils;
 
     /**
      * 瀹氭椂鏌ヨ寰呭垹闄ょ殑褰曞儚鏂囦欢
      */
     @Scheduled(cron = "0 0 0 * * ?")   //姣忓ぉ鐨�0鐐规墽琛�
+//    @Scheduled(fixedRate = 5000)
     public void execute(){
         logger.info("[褰曞儚鏂囦欢瀹氭椂娓呯悊] 寮�濮嬫竻鐞嗚繃鏈熷綍鍍忔枃浠�");
         // 鑾峰彇閰嶇疆浜哸ssist鐨勬祦濯掍綋鑺傜偣
@@ -55,18 +59,29 @@
                 // 鑾峰彇淇濆瓨鐨勬渶鍚庢埅鑷虫棩鏈燂紝鍥犱负姣忎釜鑺傜偣閮芥湁涓�涓棩鏈燂紝涔熷氨鏄敮鎸佹瘡涓妭鐐硅缃笉鍚岀殑淇濆瓨鏃ユ湡锛�
                 lastCalendar.add(Calendar.DAY_OF_MONTH, -mediaServerItem.getRecordDate());
                 Long lastDate = lastCalendar.getTimeInMillis();
+
                 // 鑾峰彇鍒版埅鑷虫棩鏈熶箣鍓嶇殑褰曞儚鏂囦欢鍒楄〃锛屾枃浠跺垪琛ㄦ弧瓒虫湭琚敹钘忓拰淇濇寔鐨勩�傝繖涓や釜瀛楁鐩墠鍏辫兘涓�鑷达紝
                 // 涓烘垜鑷繁涓氬姟绯荤粺鐩稿叧鐨勪唬鐮侊紝澶у浣跨敤鐨勬椂鍊欑洿鎺ヤ娇鐢ㄦ敹钘忥紙collect锛夎繖涓�涓被鍨嬪嵆鍙�
-                List<String> filePathList = cloudRecordServiceMapper.queryRecordFilePathListForDelete(lastDate,  mediaServerItem.getId());
-                if (filePathList.isEmpty()) {
+                List<CloudRecordItem> cloudRecordItemList = cloudRecordServiceMapper.queryRecordListForDelete(lastDate, mediaServerItem.getId());
+                if (cloudRecordItemList.isEmpty()) {
                     continue;
                 }
-                // 鍏堣皟鐢╝ssist鍒犻櫎纾佺洏鏂囦欢锛屽垹闄ゆ垚鍔熷悗鍐嶅垹闄ゆ暟鎹簱璁板綍
-                JSONObject jsonObject = assistRESTfulUtils.deleteFiles(mediaServerItem, filePathList);
-                if (jsonObject != null && jsonObject.getInteger("code") == 0 && jsonObject.getInteger("data") > 0) {
-                    result += jsonObject.getInteger("data");
-                    cloudRecordServiceMapper.deleteByFileList(filePathList, mediaServerItem.getId());
+                List<Integer> cloudRecordItemIdList = new ArrayList<>();
+                for (CloudRecordItem cloudRecordItem : cloudRecordItemList) {
+                    String date = new File(cloudRecordItem.getFilePath()).getParentFile().getName();
+                    JSONObject jsonObject = zlmresTfulUtils.deleteRecordDirectory(mediaServerItem, cloudRecordItem.getApp(),
+                            cloudRecordItem.getStream(), date, cloudRecordItem.getFileName());
+                    if (jsonObject.getInteger("code") == 0) {
+                        cloudRecordItemIdList.add(cloudRecordItem.getId());
+                    }else {
+                        logger.warn("[褰曞儚鏂囦欢瀹氭椂娓呯悊] 鍒犻櫎纾佺洏鏂囦欢閿欒锛� {}", jsonObject);
+                    }
                 }
+                if (cloudRecordItemIdList.isEmpty()) {
+                    continue;
+                }
+                cloudRecordServiceMapper.deleteList(cloudRecordItemIdList, mediaServerItem.getId());
+                result += cloudRecordItemIdList.size();
             }
         }
         logger.info("[褰曞儚鏂囦欢瀹氭椂娓呯悊] 鍏辨竻鐞唟}涓繃鏈熷綍鍍忔枃浠�", result);
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java
index fd63ce6..4f6d3e9 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/AssistRESTfulUtils.java
@@ -268,14 +268,4 @@
 
         return sendGet(mediaServerItem, "api/record/file/download/task/list", param, null);
     }
-
-    public JSONObject addCollect(MediaServerItem mediaServerItem, JSONObject jsonObject) {
-        return sendPost(mediaServerItem, "api/record/file/collection/add", jsonObject, null, 30);
-    }
-
-    public JSONObject deleteFiles(MediaServerItem mediaServerItem, List<String> filePathList) {
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("filePathList", filePathList);
-        return sendPost(mediaServerItem, "api/record/file/delete", jsonObject, null, 15*60);
-    }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
index 52bc902..ea0b224 100755
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
@@ -25,8 +25,6 @@
 
     private OkHttpClient client;
 
-
-
     public interface RequestCallback{
         void run(JSONObject response);
     }
@@ -398,4 +396,14 @@
         param.put("stream_id", streamId);
         return sendPost(mediaServerItem, "updateRtpServerSSRC",param, null);
     }
+
+    public JSONObject deleteRecordDirectory(MediaServerItem mediaServerItem, String app, String stream, String date, String fileName) {
+        Map<String, Object> param = new HashMap<>(1);
+        param.put("vhost", "__defaultVhost__");
+        param.put("app", app);
+        param.put("stream", stream);
+        param.put("period", date);
+        param.put("name", fileName);
+        return sendPost(mediaServerItem, "deleteRecordDirectory",param, null);
+    }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java
index 5fdf2f5..775fe29 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java
@@ -82,25 +82,28 @@
     int updateCollectList(@Param("collect") boolean collect, List<CloudRecordItem> cloudRecordItemList);
 
     @Delete(" <script>" +
-            "delete from wvp_cloud_record where media_server_id=#{mediaServerId} file_path in " +
+            "delete from wvp_cloud_record where media_server_id=#{mediaServerId} and file_path in " +
             " <foreach collection='filePathList'  item='item'  open='(' separator=',' close=')' > #{item}</foreach>" +
             " </script>")
     void deleteByFileList(List<String> filePathList, @Param("mediaServerId") String mediaServerId);
 
 
     @Select(" <script>" +
-            "select file_path" +
+            "select *" +
             " from wvp_cloud_record " +
-            " where collect = false " +
-            " <if test= 'endTimeStamp != null '> and start_time &lt;= #{endTimeStamp}</if>" +
-            " <if test= 'callId != null '> and call_id = #{callId}</if>" +
-            " <if test= 'mediaServerId != null  ' > and media_server_id  = #{mediaServerId} </if>" +
+            " where end_time &lt;= #{endTimeStamp} and media_server_id  = #{mediaServerId} " +
             " </script>")
-    List<String> queryRecordFilePathListForDelete(@Param("endTimeStamp")Long endTimeStamp, String mediaServerId);
+    List<CloudRecordItem> queryRecordListForDelete(@Param("endTimeStamp")Long endTimeStamp, String mediaServerId);
 
     @Update(" <script>" +
             "update wvp_cloud_record set collect = #{collect} where id = #{recordId} " +
             " </script>")
     int changeCollectById(@Param("collect") boolean collect, @Param("recordId") Integer recordId);
 
+    @Delete(" <script>" +
+            "delete from wvp_cloud_record where media_server_id=#{mediaServerId} and id in " +
+            " <foreach collection='cloudRecordItemIdList'  item='item'  open='(' separator=',' close=')' > #{item}</foreach>" +
+            " </script>")
+    int deleteList(List<Integer> cloudRecordItemIdList, @Param("mediaServerId") String mediaServerId);
+
 }

--
Gitblit v1.8.0