liusuyi
2024-07-23 811b14aa5cd2bd6d4313b43dc38ce87cd938f3b0
优化:通道同步任务
增加:根据用户统计未读总数
已修改12个文件
96 ■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallHistoryController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallUnreadMessagesMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/IArdCallUnreadMessagesService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallUnreadMessagesServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/common/GlobalVariable.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/call/ArdCallUnreadMessagesMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 -> {