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