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)); } } 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); } 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); } 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(); 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); } } 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; } } } 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; 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<>(); } 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()); 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 @@ } } /** 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> 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("定时同步通道任务开始"); //获取所有nvr设备 List<ArdCameras> ardCamerasList = iArdCamerasService.selectArdCamerasListNoDataScope(new ArdCameras()); List<ArdCameras> ardCamerasList = GlobalVariable.loginedSet.stream().collect(Collectors.toList()); if (ardCamerasList.size() > 0) { ardCamerasList.stream() .forEach(ardCameras -> {