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