增加设备定时更新状态任务
This commit is contained in:
@@ -69,6 +69,12 @@
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-api-system</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>sis-api</artifactId>
|
||||
<version>2.4.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
@@ -5,6 +5,7 @@ import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
|
||||
import com.aizuda.snailjob.client.job.core.dto.JobArgs;
|
||||
import com.aizuda.snailjob.client.model.ExecuteResult;
|
||||
import com.aizuda.snailjob.common.log.SnailJobLog;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.json.utils.JsonUtils;
|
||||
import org.dromara.job.entity.BillDto;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
@@ -0,0 +1,119 @@
|
||||
package org.dromara.job.snailjob.sis;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
|
||||
import com.aizuda.snailjob.client.job.core.dto.JobArgs;
|
||||
import com.aizuda.snailjob.client.model.ExecuteResult;
|
||||
import com.aizuda.snailjob.common.log.SnailJobLog;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.dromara.sis.api.RemoteHikDeviceService;
|
||||
import org.dromara.sis.api.RemoteHikSdkService;
|
||||
import org.dromara.sis.api.domain.RemoteSdkChannel;
|
||||
import org.dromara.sis.api.domain.RemoteSisDeviceChannel;
|
||||
import org.dromara.sis.api.domain.RemoteSisDeviceManage;
|
||||
import org.dromara.sis.api.enums.DeviceTypeEnum;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 海康设备定时监测状态任务
|
||||
* 执行时间为每5分钟执行一次
|
||||
*
|
||||
* @author lxj
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
@JobExecutor(name = "hikDeviceCheckStateTask")
|
||||
public class HikDeviceCheckStateTask {
|
||||
|
||||
@DubboReference
|
||||
private RemoteHikDeviceService remoteHikDeviceService;
|
||||
@DubboReference
|
||||
private RemoteHikSdkService remoteHikSdkService;
|
||||
|
||||
|
||||
/**
|
||||
* 海康设备定时监测状态任务
|
||||
*
|
||||
* @param jobArgs 任务执行参数
|
||||
* @return 返回是否执行成功
|
||||
* @throws InterruptedException
|
||||
*/
|
||||
public ExecuteResult jobExecute(JobArgs jobArgs) throws InterruptedException {
|
||||
List<RemoteSisDeviceManage> device = remoteHikDeviceService.queryHikDevices();
|
||||
if (CollUtil.isEmpty(device)) {
|
||||
SnailJobLog.REMOTE.info("需要同步的hik设备数量为0,任务执行结束");
|
||||
return ExecuteResult.success();
|
||||
}
|
||||
SnailJobLog.REMOTE.info("需要同步状态的设备数量", device.size());
|
||||
device.forEach(item -> {
|
||||
// ipc
|
||||
if (DeviceTypeEnum.IPC.getType().equals(item.getDeviceType())) {
|
||||
updateDeviceStatus(item);
|
||||
}
|
||||
|
||||
if (DeviceTypeEnum.NVR.getType().equals(item.getDeviceType())) {
|
||||
// 设备状态更新完成
|
||||
boolean b = updateDeviceStatus(item);
|
||||
if (b) {
|
||||
updateDeviceChannelStatus(item);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
return ExecuteResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新nvr设备通道信息
|
||||
*
|
||||
* @param sisDeviceManage 设备信息
|
||||
* @return
|
||||
*/
|
||||
private void updateDeviceChannelStatus(RemoteSisDeviceManage sisDeviceManage) {
|
||||
// 查询设备通道信息
|
||||
List<RemoteSisDeviceChannel> ls = remoteHikDeviceService.queryDeviceChannels(sisDeviceManage.getDeviceIp());
|
||||
SnailJobLog.REMOTE.info("设备[{}]本地通道数量={}", sisDeviceManage.getDeviceIp(), ls.size());
|
||||
List<RemoteSdkChannel> sdkChannels = remoteHikSdkService.getDeviceChannel(sisDeviceManage.getDeviceIp());
|
||||
SnailJobLog.REMOTE.info("设备[{}]sdk通道数量={}", sisDeviceManage.getDeviceIp(), sdkChannels.size());
|
||||
|
||||
Map<String, RemoteSisDeviceChannel> data1 = ls.stream().collect(Collectors.toMap(RemoteSisDeviceChannel::getDeviceIp, item -> item));
|
||||
Map<String, RemoteSdkChannel> data2 = sdkChannels.stream().collect(Collectors.toMap(RemoteSdkChannel::getChannelIp, item -> item));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 更新设备状态
|
||||
*
|
||||
* @param item 设备信息
|
||||
* @return 返回设备是否在线
|
||||
*/
|
||||
private boolean updateDeviceStatus(RemoteSisDeviceManage item) {
|
||||
// 调用设备登录验证次设备在线
|
||||
Boolean isLogin = remoteHikSdkService.deviceLogin(item);
|
||||
int onLineState = isLogin ? 1 : 0;
|
||||
if (item.getDeviceStatus() != onLineState) {
|
||||
SnailJobLog.REMOTE.info("设备[{}]在线状态变更,开始更新状态。 old={},new ={} ", item.getDeviceIp(), item.getDeviceStatus(), onLineState);
|
||||
item.setDeviceStatus(onLineState);
|
||||
Boolean result = remoteHikDeviceService.updateDeviceState(item);
|
||||
SnailJobLog.REMOTE.info("设备[{}]在线状态变更,状态更新完成。 result={} ", item.getDeviceIp(), result);
|
||||
|
||||
// 监测当前设备是否存在通道,如果有则跟新通道信息
|
||||
List<RemoteSisDeviceChannel> ls = remoteHikDeviceService.queryDeviceChannels(item.getDeviceIp());
|
||||
if (CollUtil.isNotEmpty(ls)) {
|
||||
Boolean r1 = remoteHikDeviceService.updateDeviceChannelState(item.getDeviceIp(), onLineState);
|
||||
SnailJobLog.REMOTE.info("设备通道[{}]在线状态变更,状态更新完成。 result={} ", item.getDeviceIp(), r1);
|
||||
}
|
||||
}
|
||||
return isLogin;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user