diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSdkChannel.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSdkChannel.java index 25422584..37eb5ba5 100644 --- a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSdkChannel.java +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSdkChannel.java @@ -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; diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSisDeviceChannel.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSisDeviceChannel.java index 29bcb9d8..a6e28f15 100644 --- a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSisDeviceChannel.java +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSisDeviceChannel.java @@ -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 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteDeviceServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteDeviceServiceImpl.java index a1b512eb..695701c0 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteDeviceServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteDeviceServiceImpl.java @@ -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 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSdkServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSdkServiceImpl.java index 835fe68b..bf291251 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSdkServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSdkServiceImpl.java @@ -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 diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/HikDeviceCheckStateTask.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/HikDeviceCheckStateTask.java index 071f1f0b..4de40bcc 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/HikDeviceCheckStateTask.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/HikDeviceCheckStateTask.java @@ -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 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; } - }