From 5628d007fc9b58fd22981d626e6f3557d8cdccb3 Mon Sep 17 00:00:00 2001
From: liusuyi <13324259@qq.com>
Date: 星期三, 14 六月 2023 21:20:08 +0800
Subject: [PATCH] 优化线程间录像抢占问题

---
 ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java |   26 ++++++++++++++------------
 ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java       |    4 ++++
 ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java                   |    2 ++
 3 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
index bd28cfe..ffdf968 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
@@ -8,7 +8,6 @@
 import com.ruoyi.alarm.stealAlarm.mapper.ArdAlarmStealelecMapper;
 import com.ruoyi.alarm.tubeAlarm.domain.ArdAlarmTube;
 import com.ruoyi.alarm.tubeAlarm.mapper.ArdAlarmTubeMapper;
-import com.ruoyi.alarm.tubeAlarm.service.IArdAlarmTubeService;
 import com.ruoyi.alarmpoints.tube.domain.ArdTubes;
 import com.ruoyi.alarmpoints.tube.domain.ArdTubesDetails;
 import com.ruoyi.alarmpoints.tube.mapper.ArdTubesDetailsMapper;
@@ -19,10 +18,10 @@
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.tools.ArdTool;
 import com.ruoyi.common.utils.uuid.IdUtils;
-import com.ruoyi.common.utils.uuid.UUID;
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
+import com.ruoyi.device.hiksdk.common.GlobalVariable;
 import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
 import com.ruoyi.device.hiksdk.service.IHikClientService;
 import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil;
@@ -30,16 +29,13 @@
 import com.ruoyi.utils.tube.GeoPoint;
 import com.ruoyi.utils.tube.TubeTools;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.ss.formula.functions.T;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
-
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static jdk.nashorn.internal.runtime.regexp.joni.Config.log;
 
 /**
  * @ClassName: globalAlarmServiceImpl
@@ -210,14 +206,20 @@
                             String recordName = minDistanceCameraId + "/" + time + "/" + simpleUUID + ".mp4";
                             cmd.setRecordObjectName(recordName);
                             hikClientService.recordToMinio(cmd);
+                            GlobalVariable.threadMap.put(minDistanceCameraId,Thread.currentThread().getName());//灏嗙浉鏈篿d涓庡綋鍓嶅鐞嗙嚎绋嬪悕绉扮粦瀹�
                             Thread.sleep(30000);
-                            cmd.setEnable(false);
-                            cmd.setUploadMinio(true);
-                            hikClientService.recordToMinio(cmd);
-                            //鏇存柊褰曞儚
-                            String url = MinioClientSingleton.domainUrl + "/" + cmd.getRecordBucketName() + "/" + recordName;
-                            ardAlarmTube.setRecordUrl(url);
-                            ardAlarmTubeMapper.updateArdAlarmTube(ardAlarmTube);
+                            String thread = GlobalVariable.threadMap.get(minDistanceCameraId);
+                            String currentThread = Thread.currentThread().getName();
+                            //鍒ゆ柇鐩告満缁戝畾绾跨▼鏄惁鏄綋鍓嶇嚎绋嬶紝濡傛灉鏄紝鍋滄褰曞儚锛屽鏋滀笉鏄紝璇存槑鐩告満琚叾浠栫嚎绋嬫姠鍗狅紝涓嶅仠姝㈠綍鍍�
+                            if(thread.equals(currentThread)) {
+                                cmd.setEnable(false);
+                                cmd.setUploadMinio(true);
+                                hikClientService.recordToMinio(cmd);
+                                //鏇存柊褰曞儚
+                                String url = MinioClientSingleton.domainUrl + "/" + cmd.getRecordBucketName() + "/" + recordName;
+                                ardAlarmTube.setRecordUrl(url);
+                                ardAlarmTubeMapper.updateArdAlarmTube(ardAlarmTube);
+                            }
                         }
                     }
                     break;
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java
index a7af79a..28bf220 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java
@@ -19,4 +19,6 @@
     public static Map<String, Integer> loginMap = new HashMap<>();
     //鐩告満棰勮瀛楀吀
     public static Map<String, Integer> previewMap = new HashMap<>();
+    //绾跨▼瀛楀吀
+    public static Map<String,String>threadMap=new HashMap<>();
 }
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
index 8034b22..cfbcf96 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -35,6 +35,8 @@
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
+
+import static com.ruoyi.device.hiksdk.common.GlobalVariable.threadMap;
 import static com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK.*;
 
 /**
@@ -210,6 +212,7 @@
             log.debug("鍔犺浇lib瀹屾垚锛�");
             List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasListNoDataScope(new ArdCameras());
             for (ArdCameras camera : ardCameras) {
+                Thread.sleep(100);
                 login(camera);
             }
         } catch (Exception ex) {
@@ -1347,6 +1350,7 @@
                     return;
                 }
                 log.info("鍙栨祦鎴愬姛");
+                GlobalVariable.threadMap.put(cameraId,Thread.currentThread().getName());
                 GlobalVariable.previewMap.put(cameraId, lRealHandle);
                 if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) {
                     log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负:  " + hCNetSDK.NET_DVR_GetLastError());

--
Gitblit v1.9.3