增加设备同步状态异步任务
This commit is contained in:
@@ -2,9 +2,13 @@ package org.dromara.sis.api.domain;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class RemoteSdkChannel {
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class RemoteSdkChannel implements Serializable {
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long deviceId;
|
||||
|
||||
|
@@ -2,9 +2,14 @@ package org.dromara.sis.api.domain;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class RemoteSisDeviceChannel {
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class RemoteSisDeviceChannel implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
|
@@ -42,7 +42,8 @@ public class RemoteDeviceServiceImpl implements RemoteDeviceService {
|
||||
|
||||
@Override
|
||||
public Boolean updateDeviceState(RemoteSisDeviceManage item) {
|
||||
return deviceManageService.updateDeviceState(CommonBeanCovert.INSTANCE.Remote2Entity(item));
|
||||
SisDeviceManage sisDeviceManage = CommonBeanCovert.INSTANCE.Remote2Entity(item);
|
||||
return deviceManageService.updateDeviceState(sisDeviceManage);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -10,7 +10,6 @@ import org.dromara.sis.api.domain.RemoteSisDeviceManage;
|
||||
import org.dromara.sis.domain.covert.CommonBeanCovert;
|
||||
import org.dromara.sis.sdk.hik.DeviceInfo;
|
||||
import org.dromara.sis.sdk.hik.HikApiService;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -26,7 +25,7 @@ public class RemoteSdkServiceImpl implements RemoteHikSdkService {
|
||||
if (item == null) {
|
||||
throw new RuntimeException("设备信息为null");
|
||||
}
|
||||
return hikApiService.login(item.getDeviceIp(), item.getDevicePort().shortValue(), item.getDevicePwd(), item.getDeviceAccount(), item.getDeviceType());
|
||||
return hikApiService.login(item.getDeviceIp(), item.getDevicePort().shortValue(), item.getDeviceAccount(), item.getDevicePwd(), item.getDeviceType());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -8,13 +8,16 @@ import com.aizuda.snailjob.client.model.ExecuteResult;
|
||||
import com.aizuda.snailjob.common.log.SnailJobLog;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.sis.api.RemoteDeviceService;
|
||||
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.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.*;
|
||||
@@ -26,6 +29,7 @@ import java.util.stream.Collectors;
|
||||
*
|
||||
* @author lxj
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
@JobExecutor(name = "hikDeviceCheckStateTask")
|
||||
@@ -56,23 +60,32 @@ public class HikDeviceCheckStateTask {
|
||||
return;
|
||||
}
|
||||
SnailJobLog.REMOTE.info("需要同步状态的设备数量", device.size());
|
||||
device.forEach(item -> {
|
||||
// 获取当前对象的代理对象
|
||||
HikDeviceCheckStateTask aopProxy = SpringUtils.getAopProxy(this);
|
||||
device.forEach(aopProxy::updateDeviceAndChannelStatus);
|
||||
}
|
||||
|
||||
@Async
|
||||
public void updateDeviceAndChannelStatus(RemoteSisDeviceManage sisDeviceManage) {
|
||||
SaTokenContextMockUtil.setMockContext(() -> {
|
||||
// 同步设备状态
|
||||
updateDeviceStatus(item);
|
||||
updateDeviceStatus(sisDeviceManage);
|
||||
// 如果设备类型为nvr或者cvr/dvr 需要同步通道状态
|
||||
if (DeviceTypeEnum.NVR.getType().equals(item.getDeviceType()) || DeviceTypeEnum.DVR.getType().equals(item.getDeviceType())) {
|
||||
updateDeviceChannelStatus(item);
|
||||
if (DeviceTypeEnum.NVR.getType().equals(sisDeviceManage.getDeviceType()) || DeviceTypeEnum.DVR.getType().equals(sisDeviceManage.getDeviceType())) {
|
||||
updateDeviceChannelStatus(sisDeviceManage);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 更新nvr设备通道信息
|
||||
*
|
||||
* @param sisDeviceManage 设备信息
|
||||
* @return
|
||||
*/
|
||||
private void updateDeviceChannelStatus(RemoteSisDeviceManage sisDeviceManage) {
|
||||
|
||||
public void updateDeviceChannelStatus(RemoteSisDeviceManage sisDeviceManage) {
|
||||
// 查询设备通道信息
|
||||
List<RemoteSisDeviceChannel> ls = remoteDeviceService.queryDeviceChannels(sisDeviceManage.getDeviceIp());
|
||||
SnailJobLog.REMOTE.info("设备[{}]本地通道数量={}", sisDeviceManage.getDeviceIp(), ls.size());
|
||||
@@ -145,7 +158,6 @@ public class HikDeviceCheckStateTask {
|
||||
Integer i = remoteDeviceService.updateChannelInfo(updateData);
|
||||
SnailJobLog.REMOTE.info("更新通道完成,通道数量={},完成数量={}", updateData.size(), i);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -155,11 +167,12 @@ public class HikDeviceCheckStateTask {
|
||||
* @param item 设备信息
|
||||
* @return 返回设备是否在线
|
||||
*/
|
||||
private boolean updateDeviceStatus(RemoteSisDeviceManage item) {
|
||||
public void updateDeviceStatus(RemoteSisDeviceManage item) {
|
||||
log.info("开始同步设备状态,params={}", item);
|
||||
// 调用设备登录验证次设备在线
|
||||
Boolean isLogin = remoteHikSdkService.deviceLogin(item);
|
||||
int onLineState = isLogin ? 1 : 0;
|
||||
if (Objects.equals(item.getDeviceStatus(), onLineState)) {
|
||||
if (!Objects.equals(item.getDeviceStatus(), onLineState)) {
|
||||
SnailJobLog.REMOTE.info("设备[{}]在线状态变更,开始更新状态。 old={},new ={} ", item.getDeviceIp(), item.getDeviceStatus(), onLineState);
|
||||
item.setDeviceStatus(onLineState);
|
||||
Boolean result = remoteDeviceService.updateDeviceState(item);
|
||||
@@ -172,7 +185,5 @@ public class HikDeviceCheckStateTask {
|
||||
SnailJobLog.REMOTE.info("设备通道[{}]在线状态变更,状态更新完成。 result={} ", item.getDeviceIp(), r1);
|
||||
}
|
||||
}
|
||||
return isLogin;
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user