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 = 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 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 ardChannelList = cameraSDK.getChannels(ardCameras); //同步通道表 ArdChannel ardChannel = new ArdChannel(); ardChannel.setDeviceId(ardCameras.getId()); List ardChannelListDb = ardChannelService.selectArdChannelList(ardChannel); ardChannelService.asyncChannel(ardCameras, ardChannelListDb, ardChannelList); } }); } } /** * 定时获取app用户在线状态 * 刘苏义 * 2023/8/9 9:17:48 */ public void appUserState() { try { List 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 nameList = mediaService.getNameList(); List vtduList = vtduService.selectVtduList(new Vtdu()); vtduService.asyncVtdu(vtduList, nameList); } }