From 59b663c6545b0a9a5c4b225724a3a7d4fdbd3efa Mon Sep 17 00:00:00 2001 From: lxj <15683799673@163.com> Date: Mon, 15 Sep 2025 19:47:23 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/sis/api/RemoteHikSdkService.java | 10 +++++++ .../sis/api/domain/DeviceStateInfo.java | 26 +++++++++++++++++++ .../sis/dubbo/RemoteSdkServiceImpl.java | 9 +++++++ .../dromara/sis/sdk/hik/HikApiService.java | 13 ++++++++++ .../snailjob/sis/HikDeviceCheckStateTask.java | 12 ++++----- 5 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/DeviceStateInfo.java diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteHikSdkService.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteHikSdkService.java index ba259f0e..bb0f8e8e 100644 --- a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteHikSdkService.java +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteHikSdkService.java @@ -1,5 +1,6 @@ package org.dromara.sis.api; +import org.dromara.sis.api.domain.DeviceStateInfo; import org.dromara.sis.api.domain.RemoteSdkChannel; import org.dromara.sis.api.domain.RemoteSisDeviceManage; @@ -15,6 +16,15 @@ public interface RemoteHikSdkService { */ Boolean deviceLogin(RemoteSisDeviceManage item); + + /** + * 海康sdk 登录操作 + * + * @param item 登录参数 + * @return 是否登录成功 + */ + DeviceStateInfo checkState(RemoteSisDeviceManage item); + /** * 获取nvr设备通道信息 * diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/DeviceStateInfo.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/DeviceStateInfo.java new file mode 100644 index 00000000..7a71a396 --- /dev/null +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/DeviceStateInfo.java @@ -0,0 +1,26 @@ +package org.dromara.sis.api.domain; + +import lombok.Data; + +import java.util.Date; + +@Data +public class DeviceStateInfo { + + + /** + * 设备是否在线 0 在线,1离线 + */ + private Integer online; + + /** + * 最新的心跳时间 + */ + private Date heartbeat; + + /** + * 设备状态吗 + */ + private Integer deviceState; + +} 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 bf291251..b90a24d9 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 @@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboService; import org.dromara.sis.api.RemoteHikSdkService; +import org.dromara.sis.api.domain.DeviceStateInfo; import org.dromara.sis.api.domain.RemoteSdkChannel; import org.dromara.sis.api.domain.RemoteSisDeviceManage; import org.dromara.sis.domain.covert.CommonBeanCovert; @@ -28,6 +29,14 @@ public class RemoteSdkServiceImpl implements RemoteHikSdkService { return hikApiService.login(item.getDeviceIp(), item.getDevicePort().shortValue(), item.getDeviceAccount(), item.getDevicePwd(), item.getDeviceType()); } + @Override + public DeviceStateInfo checkState(RemoteSisDeviceManage item) { + if (item == null) { + throw new RuntimeException("设备信息为null"); + } + return hikApiService.checkState(item.getDeviceIp(), item.getDevicePort().shortValue(), item.getDeviceAccount(), item.getDevicePwd(), item.getDeviceType()); + } + @Override public List getDeviceChannel(String deviceIp) { DeviceInfo channelInfo = hikApiService.getChannelInfo(deviceIp); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java index 5d7258ae..2a2bbee2 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.TypeReference; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.dromara.sis.api.domain.DeviceStateInfo; import org.dromara.sis.config.HikEqpConfig; import org.dromara.sis.sdk.zkmedia.model.R; import org.springframework.stereotype.Component; @@ -23,6 +24,7 @@ public class HikApiService { private HikEqpConfig hikEqpConfig; private static final String LOGIN_URI = "login"; + private static final String CHECK_STATE_URI = "check/state"; private static final String LOGOUT_URI = "logout"; private static final String CHANNEL_LIST = "channel/list"; private static final String FACE_UPLOAD = "flib/add"; @@ -69,6 +71,17 @@ public class HikApiService { return request(LOGIN_URI, params.toJSONString(), Boolean.class); } + public DeviceStateInfo checkState(String ip, short port, String user, String psw, Integer deviceType) { + JSONObject params = new JSONObject(); + params.put("deviceIp", ip); + params.put("devicePort", port); + params.put("deviceAccount", user); + params.put("devicePassword", psw); + params.put("deviceType", deviceType); + return request(CHECK_STATE_URI, params.toJSONString(), DeviceStateInfo.class); + } + + public Boolean loginOut(String deviceIp) { JSONObject params = new JSONObject(); params.put("deviceIp", deviceIp); 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 4de40bcc..cf4d42eb 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 @@ -13,6 +13,7 @@ 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.DeviceStateInfo; import org.dromara.sis.api.domain.RemoteSdkChannel; import org.dromara.sis.api.domain.RemoteSisDeviceChannel; import org.dromara.sis.api.domain.RemoteSisDeviceManage; @@ -170,18 +171,17 @@ public class HikDeviceCheckStateTask { 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)) { - SnailJobLog.REMOTE.info("设备[{}]在线状态变更,开始更新状态。 old={},new ={} ", item.getDeviceIp(), item.getDeviceStatus(), onLineState); - item.setDeviceStatus(onLineState); + DeviceStateInfo stateInfo = remoteHikSdkService.checkState(item); + if (!Objects.equals(item.getDeviceStatus(), stateInfo.getDeviceState())) { + SnailJobLog.REMOTE.info("设备[{}]在线状态变更,开始更新状态。 old={},new ={} ", item.getDeviceIp(), item.getDeviceStatus(), stateInfo.getDeviceState()); + item.setDeviceStatus(stateInfo.getDeviceState()); Boolean result = remoteDeviceService.updateDeviceState(item); SnailJobLog.REMOTE.info("设备[{}]在线状态变更,状态更新完成。 result={} ", item.getDeviceIp(), result); // 监测当前设备是否存在通道,如果有则跟新通道信息 List ls = remoteDeviceService.queryDeviceChannels(item.getDeviceIp()); if (CollUtil.isNotEmpty(ls)) { - Boolean r1 = remoteDeviceService.updateDeviceChannelState(item.getDeviceIp(), onLineState); + Boolean r1 = remoteDeviceService.updateDeviceChannelState(item.getDeviceIp(), stateInfo.getDeviceState()); SnailJobLog.REMOTE.info("设备通道[{}]在线状态变更,状态更新完成。 result={} ", item.getDeviceIp(), r1); } } From 083cbf614987eb8cc1e56bb9d1bfd6c3e489226e Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Mon, 15 Sep 2025 20:15:54 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix(property):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=B0=B4=E8=A1=A8=E8=83=BD=E8=80=97=E9=A2=84=E8=AD=A6=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java index ff396837..3501de38 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java @@ -263,7 +263,7 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService { boolean isDaytime = hour > 8 && hour <= 20; BigDecimal threshold = isDaytime ? info.getDayWarning() : info.getNightWarning(); // 如果阈值为0,则不处理(阈值不为0且读数大于阈值,自动上报) - if (threshold.compareTo(BigDecimal.ZERO) != 0 && record.getCurrentReading().compareTo(threshold) > 0) { + if (threshold.compareTo(BigDecimal.ZERO) != 0 && (record.getCurrentReading().subtract(record.getPreviousReading())).compareTo(threshold) > 0) { // 根据仪表类型设置工单名称和类型 String orderName = "能耗异常"; Long orderType = 0L; From 2b5557c28d819bd0e2c45671fde22c7980cad658 Mon Sep 17 00:00:00 2001 From: lxj <15683799673@163.com> Date: Mon, 15 Sep 2025 20:54:16 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=A4=84=E7=90=86=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E4=B8=BAnull=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/sis/domain/bo/alarm/AlarmAssignmentBo.java | 4 ++++ .../dromara/sis/service/impl/EventAlarmReportServiceImpl.java | 4 ++-- .../dromara/sis/service/impl/SisAlarmEventsServiceImpl.java | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmAssignmentBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmAssignmentBo.java index 2358be3a..bd1336c8 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmAssignmentBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmAssignmentBo.java @@ -2,6 +2,7 @@ package org.dromara.sis.domain.bo.alarm; import jakarta.validation.constraints.NotNull; import lombok.Data; +import org.dromara.sis.domain.enums.EventSmallTypeEnum; /** * 任务指派参数 @@ -62,4 +63,7 @@ public class AlarmAssignmentBo { * 任务指派操作人员部门id */ private Long modifyDeptId; + + private EventSmallTypeEnum smallType; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java index 2cddde63..463ce241 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java @@ -246,11 +246,11 @@ public class EventAlarmReportServiceImpl implements IEventAlarmReportService { private void handleAlarm(String deviceIp, byte[] img, Integer level, EventSmallTypeEnum smallType, String desc) { // 生成告警记录 SisAlarmEvents alarmRecord = alarmEventsService.createAlarmRecord(deviceIp, level, smallType, desc, List.of(img)); - autoAssign(alarmRecord.getId(), deviceIp); + autoAssign(alarmRecord.getId(), deviceIp, smallType); } - private void autoAssign(Long alarmId, String deviceIp) { + private void autoAssign(Long alarmId, String deviceIp, EventSmallTypeEnum smallType) { SaTokenContextMockUtil.setMockContext(() -> { // 如果当前设备区域存在排班人员,那么惊醒自动指派操作 List userGroupVos = remoteAttendanceService.queryAttendByCurrDateAndDeviceIp(new Date(), deviceIp); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java index d6469be7..be78aaf7 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java @@ -330,7 +330,7 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { log.info("事件处理信息写入完成,result= {}", insert); // 进行消息推送 String title = "视频预警"; - String content = "您有一条" + sisAlarmEvents.getSolveName() + "预警数据"; + String content = "您有一条" + bo.getSmallType().getDesc() + "预警数据"; webSocketMessageService.pushMobileMessage(List.of(bo.getSolveId()), WebSocketMsgType.ALARM_MSG, title, content, JSONObject.toJSONString(sisAlarmEvents)); return true; } From 65900c1068d8d21d606f1a9446bf1c1d40b3de69 Mon Sep 17 00:00:00 2001 From: lxj <15683799673@163.com> Date: Mon, 15 Sep 2025 20:55:02 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=A4=84=E7=90=86=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E4=B8=BAnull=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/sis/service/impl/EventAlarmReportServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java index 463ce241..44be175c 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java @@ -233,7 +233,7 @@ public class EventAlarmReportServiceImpl implements IEventAlarmReportService { ls.add(bigImg); // 生成告警记录 SisAlarmEvents alarmRecord = alarmEventsService.createAlarmRecord(deviceIp, level, smallType, desc, ls); - autoAssign(alarmRecord.getId(), deviceIp); + autoAssign(alarmRecord.getId(), deviceIp, smallType); } /** @@ -277,6 +277,7 @@ public class EventAlarmReportServiceImpl implements IEventAlarmReportService { bo.setSolveDeptId(userInfo.getDeptId()); bo.setSolvePhone(userInfo.getPhonenumber()); bo.setSolveEmail(userInfo.getEmail()); + bo.setSmallType(smallType); bo.setRemark("系统自动指派"); alarmEventsService.taskAssignment(bo); });