liusuyi
2024-07-23 811b14aa5cd2bd6d4313b43dc38ce87cd938f3b0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package com.ruoyi.quartz.task;
 
 
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.uuid.IdUtils;
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.factory.CameraSDKFactory;
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.channel.service.impl.ArdChannelServiceImpl;
import com.ruoyi.media.domain.Vtdu;
import com.ruoyi.media.service.IMediaService;
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;
import org.springframework.stereotype.Component;
 
import javax.annotation.Resource;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
 
/**
 * @Description: 同步任务
 * @ClassName: syncDeviceStateTask
 * @Author: 刘苏义
 * @Date: 2023年10月08日11:06:42
 **/
@Component("SyncTask")
@Slf4j
public class SyncTask {
    @Resource
    ISysUserService sysUserService;
    @Resource
    RongCloudService rongCloudService;
    @Resource
    IArdCamerasService iArdCamerasService;
    @Resource
    IVtduService vtduService;
    @Resource
    IMediaService mediaService;
    @Resource
    private ICameraSdkService cameraSdkService;
    @Resource
    private CameraSDKFactory cameraSDKFactory;
    @Resource
    private IArdChannelService ardChannelService;
 
    /**
     * 同步相机在线状态
     * 刘苏义
     * 2023/10/8 14:54:41
     */
    public void cameraState() {
        try {
            ArdCameras ardCamera = new ArdCameras();
            //调用查询方法
            List<ArdCameras> ardCameras = iArdCamerasService.selectArdCamerasListNoDataScope(ardCamera);
            for (ArdCameras camera : ardCameras) {
                CameraCmd cmd = new CameraCmd();
                cmd.setCameraId(camera.getId());
                boolean onLineNew = cameraSdkService.isOnLine(cmd);
                boolean onLineOld = "1".equals(camera.getState());
                if (onLineNew != onLineOld) {
                    if (onLineNew) {
                        camera.setState("1");
                    } else {
                        camera.setState("0");
                    }
                    iArdCamerasService.updateArdCameras(camera);
                }
            }
        } catch (Exception ex) {
            log.error("同步相机在线状态异常:" + ex.getMessage());
        }
    }
 
    /**
     * @Author 刘苏义
     * @Description 同步通道状态实时同步流媒体
     * @Date 2024/7/9 16:01
     */
    public void syncChannelState(){
        log.debug("定时同步通道任务开始");
        //获取所有nvr设备
        List<ArdCameras> ardCamerasList = GlobalVariable.loginedSet.stream().collect(Collectors.toList());
        if (ardCamerasList.size() > 0) {
            ardCamerasList.stream()
                    .forEach(ardCameras -> {
                        if (ardCameras.getLoginId() > 0) {
                            //通过SDK获取NVR实际通道
                            CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(ardCameras.getFactory());
                            List<ArdChannel> ardChannelList = cameraSDK.getChannels(ardCameras);
                            //同步通道表
                            ArdChannel ardChannel = new ArdChannel();
                            ardChannel.setDeviceId(ardCameras.getId());
                            List<ArdChannel> ardChannelListDb = ardChannelService.selectArdChannelList(ardChannel);
                            ardChannelService.asyncChannel(ardCameras, ardChannelListDb, ardChannelList);
                        }
                    });
        }
    }
 
    /**
     * 定时获取app用户在线状态
     * 刘苏义
     * 2023/8/9 9:17:48
     */
    public void appUserState() {
        try {
            List<SysUser> SysUserList = sysUserService.selectAllAppUserList(new SysUser());
            if (SysUserList.size() > 0) {
                for (SysUser sysUser : SysUserList) {
                    String state = sysUser.getAppOnlineState();//获取当前用户的在线状态
                    Boolean online = rongCloudService.checkOnline(sysUser.getUserId());//从融云获取在线状态
                    if (state != null) {
                        Boolean appOnlineState = state.equals("1");
                        if (appOnlineState == online) {
                            continue;
                        }
                    }
                    sysUser.setAppOnlineState(online ? "1" : "0");
                    sysUserService.updateUserProfile(sysUser);
                }
            }
        } catch (Exception ex) {
            log.error("融云在线接口异常:" + ex.getMessage());
        }
    }
 
    /**
     * 同步流媒体
     * 刘苏义
     * 2023/10/13 14:13:53
     */
    public void syncVtdu() {
        log.debug("定时同步流媒体任务开始");
        List<String> nameList = mediaService.getNameList();
        List<Vtdu> vtduList = vtduService.selectVtduList(new Vtdu());
        vtduService.asyncVtdu(vtduList, nameList);
    }
}