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