From 811b14aa5cd2bd6d4313b43dc38ce87cd938f3b0 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: 星期二, 23 七月 2024 17:12:42 +0800
Subject: [PATCH] 优化:通道同步任务 增加:根据用户统计未读总数

---
 ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java    |    2 +
 ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java          |    1 
 ard-work/src/main/java/com/ruoyi/call/service/IArdCallUnreadMessagesService.java         |    8 ++++
 ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java         |   22 +++++------
 ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallUnreadMessagesMapper.java            |    2 +
 ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallUnreadMessagesServiceImpl.java |    5 ++
 ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java                    |   13 ++++++
 ard-work/src/main/java/com/ruoyi/call/controller/ArdCallHistoryController.java           |    9 ++++
 ard-work/src/main/resources/mapper/call/ArdCallUnreadMessagesMapper.xml                  |    3 +
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java                           |    5 +-
 ard-work/src/main/java/com/ruoyi/utils/sdk/common/GlobalVariable.java                    |    8 +++
 ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java              |   18 +++-----
 12 files changed, 70 insertions(+), 26 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallHistoryController.java b/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallHistoryController.java
index 9f38bea..a0779aa 100644
--- a/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallHistoryController.java
+++ b/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallHistoryController.java
@@ -4,6 +4,7 @@
 import javax.servlet.http.HttpServletResponse;
 
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.ruoyi.call.service.IArdCallUnreadMessagesService;
 import com.ruoyi.common.annotation.Anonymous;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -39,6 +40,8 @@
 public class ArdCallHistoryController extends BaseController {
     @Autowired
     private IArdCallHistoryService ardCallHistoryService;
+    @Autowired
+    private IArdCallUnreadMessagesService ardCallUnreadMessagesService;
 
     /**
      * 鏌ヨ浼氳瘽娑堟伅鍒楄〃
@@ -85,4 +88,10 @@
     public AjaxResult remove(@PathVariable String[] ids) {
         return toAjax(ardCallHistoryService.deleteArdCallHistoryByIds(ids));
     }
+
+    @ApiOperation("鑾峰彇鏈娑堟伅鎬绘暟")
+    @GetMapping("/getTotalUnreadCount")
+    public AjaxResult getTotalUnreadCount(String userId) {
+        return AjaxResult.success(ardCallUnreadMessagesService.totalUnReadCount(userId));
+    }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallUnreadMessagesMapper.java b/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallUnreadMessagesMapper.java
index 81383ec..0157656 100644
--- a/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallUnreadMessagesMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallUnreadMessagesMapper.java
@@ -65,4 +65,6 @@
     int countBySessionIdAnduserId(String sessionId, String userId);
 
     public ArdCallUnreadMessages  getUnreadMessage(@Param("sessionId") String sessionId, @Param("targetId")String targetId);
+
+    public int totalUnReadCount(String userId);
 }
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/IArdCallUnreadMessagesService.java b/ard-work/src/main/java/com/ruoyi/call/service/IArdCallUnreadMessagesService.java
index f891eaa..3ff250d 100644
--- a/ard-work/src/main/java/com/ruoyi/call/service/IArdCallUnreadMessagesService.java
+++ b/ard-work/src/main/java/com/ruoyi/call/service/IArdCallUnreadMessagesService.java
@@ -67,4 +67,12 @@
      * @return 缁撴灉
      */
     public int clearUnReadCount(String sessionId,String userId);
+    /**
+     * @Author 鍒樿嫃涔�
+     * @Description 缁熻鏈鎬绘暟
+     * @Date 2024/7/23 16:36
+     * @Param
+     * @return
+     */
+    public int totalUnReadCount(String userId);
 }
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java
index cde19dc..ed8859c 100644
--- a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java
@@ -68,6 +68,7 @@
     @Override
     public String insertArdCallGroup(ArdCallGroup ardCallGroup) {
         ardCallGroup.setId(IdUtils.simpleUUID());
+        ardCallGroup.setCreateBy(SecurityUtils.getUserId());
         ardCallGroup.setCreateTime(DateUtils.getNowDate());
         ardCallGroup.getUserIds().stream().forEach(userId -> {
             ArdCallGroupUser groupUser = new ArdCallGroupUser();
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallUnreadMessagesServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallUnreadMessagesServiceImpl.java
index 2a6644c..b91c6c8 100644
--- a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallUnreadMessagesServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallUnreadMessagesServiceImpl.java
@@ -105,4 +105,9 @@
         }
         return 1;
     }
+
+    @Override
+    public int totalUnReadCount(String userId) {
+        return ardCallUnreadMessagesMapper.totalUnReadCount(userId);
+    }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java b/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java
index 317c818..50321c3 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java
@@ -202,4 +202,17 @@
      * 閫氶亾
      */
     private List<ArdChannel> channelList;
+
+    @Override
+    public int hashCode() {
+        return id.hashCode();
+    }
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof ArdCameras){
+            return id.equals(((ArdCameras)obj).getId());
+        }else {
+            return false;
+        }
+    }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
index d271176..0209056 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
@@ -25,8 +25,10 @@
 import com.ruoyi.utils.sdk.common.GlobalVariable;
 import com.ruoyi.utils.tools.ArdTool;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/common/GlobalVariable.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/common/GlobalVariable.java
index a15d575..c410500 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/common/GlobalVariable.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/common/GlobalVariable.java
@@ -1,6 +1,10 @@
 package com.ruoyi.utils.sdk.common;
 
+import cn.hutool.core.collection.ConcurrentHashSet;
+import com.ruoyi.device.camera.domain.ArdCameras;
 import lombok.Data;
+import org.ehcache.impl.internal.concurrent.ConcurrentHashMap;
+
 import java.util.HashMap;
 import java.util.Map;
 
@@ -18,8 +22,10 @@
     //鐩告満棰勮瀛楀吀
     public static Map<String, Integer> previewMap = new HashMap<>();
     //绾跨▼瀛楀吀
-    public static Map<String,String>threadMap=new HashMap<>();
+    public static Map<String, String> threadMap = new HashMap<>();
 
     //淇濆瓨鐩告満鐧诲綍淇℃伅(loginId:Camera)
     public static Map<Integer, Object> loginCameraMap = new HashMap<>();
+    //鐧诲綍杩囩浉鏈洪泦鍚�
+    public static ConcurrentHashSet<ArdCameras> loginedSet = new ConcurrentHashSet<>();
 }
diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
index 492e5ff..fe9af52 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
@@ -7,45 +7,38 @@
 import com.ruoyi.common.config.ARDConfig;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.common.utils.file.MimeTypeUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
-import com.ruoyi.device.camera.factory.CameraSDK;
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.camera.factory.CameraSDK;
 import com.ruoyi.device.camera.service.IArdCamerasService;
 import com.ruoyi.device.camera.service.ICameraSdkService;
 import com.ruoyi.device.channel.domain.ArdChannel;
 import com.ruoyi.device.channel.service.IArdChannelService;
-import com.ruoyi.media.domain.Vtdu;
 import com.ruoyi.media.service.IVtduService;
 import com.ruoyi.utils.gis.GisUtil;
 import com.ruoyi.utils.minio.MinioUtil;
 import com.ruoyi.utils.sdk.common.GlobalVariable;
-import com.ruoyi.utils.sdk.common.SdkErrorCodeEnum;
 import com.ruoyi.utils.sdk.dhsdk.common.ErrorCode;
 import com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib;
-import com.ruoyi.utils.sdk.dhsdk.lib.ToolKits;
 import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.EM_NEW_CONFIG;
 import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE;
 import com.ruoyi.utils.sdk.dhsdk.lib.structure.CFG_INFRARED_INFO;
 import com.ruoyi.utils.sdk.dhsdk.lib.structure.CFG_VIDEO_IN_FOCUS;
 import com.ruoyi.utils.sdk.dhsdk.lib.structure.DH_OUT_PTZ_VIEW_RANGE_STATUS;
 import com.ruoyi.utils.sdk.dhsdk.module.*;
-import com.sun.jna.Native;
 import com.sun.jna.Pointer;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
 import java.io.*;
-import java.nio.ByteBuffer;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.text.DecimalFormat;
@@ -53,7 +46,6 @@
 import java.util.concurrent.PriorityBlockingQueue;
 
 import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.*;
-import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.NET_DEVSTATE_PTZ_VIEW_RANGE;
 import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_MOVE_CONTROL;
 import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_SET_CONTROL;
 import static com.ruoyi.utils.sdk.dhsdk.lib.ToolKits.getErrorCodePrint;
@@ -132,6 +124,8 @@
             ardCamerasService.updateArdCameras(camera);
             //鍒涘缓寮曞闃熷垪
             createGuideQueue(camera);
+            //鍔犲叆宸茬櫥褰曡澶囬泦鍚�
+            GlobalVariable.loginedSet.add(camera);
             return AjaxResult.success("璁惧鐧诲綍鎴愬姛");
         } catch (Exception ex) {
             log.error("璁惧鐧诲綍寮傚父:" + ex.getMessage());
@@ -178,6 +172,8 @@
             ardCamerasService.updateArdCameras(camera);
             //鍒涘缓寮曞闃熷垪
             createGuideQueue(camera);
+            //鍔犲叆宸茬櫥褰曡澶囬泦鍚�
+            GlobalVariable.loginedSet.add(camera);
             return AjaxResult.success("鐧诲綍鎴愬姛");
         } catch (Exception ex) {
             log.error("鐧诲綍寮傚父:" + ex.getMessage());
diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
index 92a3833..3dc494e 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
@@ -9,18 +9,14 @@
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.common.utils.file.MimeTypeUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
-import com.ruoyi.device.camera.service.IArdCamerasService;
-import com.ruoyi.device.camera.factory.CameraSDK;
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.camera.factory.CameraSDK;
+import com.ruoyi.device.camera.service.IArdCamerasService;
 import com.ruoyi.device.camera.service.ICameraSdkService;
 import com.ruoyi.device.channel.domain.ArdChannel;
 import com.ruoyi.device.channel.service.IArdChannelService;
-import com.ruoyi.device.terrain.domain.ArdTerrainMark;
-import com.ruoyi.device.terrain.service.IArdTerrainMarkService;
-import com.ruoyi.media.domain.Vtdu;
 import com.ruoyi.media.service.IVtduService;
 import com.ruoyi.utils.gis.GisUtil;
 import com.ruoyi.utils.minio.MinioUtil;
@@ -33,11 +29,12 @@
 import com.sun.jna.Pointer;
 import com.sun.jna.ptr.IntByReference;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.math.BigDecimal;
 import java.nio.ByteBuffer;
@@ -46,10 +43,8 @@
 import java.text.DecimalFormat;
 import java.util.*;
 import java.util.concurrent.PriorityBlockingQueue;
-import java.util.stream.Collectors;
 
 import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.*;
-import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.NET_DVR_GET_GISINFO;
 
 /**
  * @Description: 娴峰悍sdk绛栫暐
@@ -146,7 +141,7 @@
             }
             GlobalVariable.loginMap.put(camera.getId(), lUserID);
             GlobalVariable.loginCameraMap.put(lUserID, camera);
-            camera.setLoginId((long)lUserID);
+            camera.setLoginId((long) lUserID);
             camera.setState("1");
             int chanNum = m_strDeviceInfo.struDeviceV30.byChanNum;
             int startDchan = m_strDeviceInfo.struDeviceV30.byStartDChan + 1;
@@ -171,6 +166,8 @@
             ardCamerasService.updateArdCameras(camera);
             //鍒涘缓寮曞闃熷垪
             createGuideQueue(camera);
+            //鍔犲叆宸茬櫥褰曡澶囬泦鍚�
+            GlobalVariable.loginedSet.add(camera);
             return AjaxResult.success("璁惧鐧诲綍鎴愬姛");
         } catch (Exception ex) {
             log.error("璁惧鐧诲綍寮傚父", ex);
@@ -254,7 +251,7 @@
 
             GlobalVariable.loginMap.put(camera.getId(), lUserID);
             GlobalVariable.loginCameraMap.put(lUserID, camera);
-            camera.setLoginId((long)lUserID);
+            camera.setLoginId((long) lUserID);
             camera.setState("1");
             int chanNum = m_strDeviceInfo.struDeviceV30.byChanNum;
             int startDchan = m_strDeviceInfo.struDeviceV30.byStartDChan + 1;
@@ -279,6 +276,8 @@
             ardCamerasService.updateArdCameras(camera);
             //鍒涘缓寮曞闃熷垪
             createGuideQueue(camera);
+            //鍔犲叆宸茬櫥褰曡澶囬泦鍚�
+            GlobalVariable.loginedSet.add(camera);
             return AjaxResult.success("璁惧鐧诲綍鎴愬姛");
         } catch (Exception ex) {
             log.error("娉ㄥ唽璁惧寮傚父", ex);
@@ -310,7 +309,6 @@
         }
 
     }
-
 
 
     /**
diff --git a/ard-work/src/main/resources/mapper/call/ArdCallUnreadMessagesMapper.xml b/ard-work/src/main/resources/mapper/call/ArdCallUnreadMessagesMapper.xml
index 8708431..70f8271 100644
--- a/ard-work/src/main/resources/mapper/call/ArdCallUnreadMessagesMapper.xml
+++ b/ard-work/src/main/resources/mapper/call/ArdCallUnreadMessagesMapper.xml
@@ -71,4 +71,7 @@
         where user_id = #{targetId}
           and session_id = #{sessionId}
     </select>
+    <select id="totalUnReadCount" resultType="Integer">
+        select sum(unread_count) from ard_call_unread_messages where user_id = #{userId }
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java
index 1ee40ff..edd182e 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java
@@ -18,6 +18,7 @@
 import com.ruoyi.media.service.IVtduService;
 import com.ruoyi.rongcloud.service.RongCloudService;
 import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.utils.sdk.common.GlobalVariable;
 import com.ruoyi.utils.sdk.dhsdk.service.impl.DahuaSDK;
 import com.ruoyi.utils.sdk.hiksdk.service.impl.HikvisionSDK;
 import lombok.extern.slf4j.Slf4j;
@@ -88,10 +89,10 @@
      * @Description 鍚屾閫氶亾鐘舵�佸疄鏃跺悓姝ユ祦濯掍綋
      * @Date 2024/7/9 16:01
      */
-    public void syncChannelState() {
+    public void syncChannelState(){
         log.debug("瀹氭椂鍚屾閫氶亾浠诲姟寮�濮�");
         //鑾峰彇鎵�鏈塶vr璁惧
-        List<ArdCameras> ardCamerasList = iArdCamerasService.selectArdCamerasListNoDataScope(new ArdCameras());
+        List<ArdCameras> ardCamerasList = GlobalVariable.loginedSet.stream().collect(Collectors.toList());
         if (ardCamerasList.size() > 0) {
             ardCamerasList.stream()
                     .forEach(ardCameras -> {

--
Gitblit v1.9.3