Sfoglia il codice sorgente

报警主机布撤防及传感器状态

xujie 1 anno fa
parent
commit
87d3dceae4

+ 34 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/enums/AlarmHostSensorStatus.java

@@ -0,0 +1,34 @@
+package com.xunmei.system.api.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum AlarmHostSensorStatus {
+    ALARM("Alarm","报警"),
+    ACTIVITY("Activity","活动"),
+    BYPASS("Bypass","旁路"),
+    NORMAL("Normal","正常"),
+    BYPASSALARM("BypassAlarm","旁路报警"),
+    UNKNOWN("Unknown","未知"),
+    ;
+
+    private String code;
+
+    private String name;
+
+
+    public static AlarmHostSensorStatus getEnum(String code) {
+        for (AlarmHostSensorStatus deviceNetStatusEnum : AlarmHostSensorStatus.values()) {
+            if (deviceNetStatusEnum.getCode().equals(code)) {
+                return deviceNetStatusEnum;
+            }
+        }
+        return UNKNOWN;
+    }
+
+    public static String getName(String code) {
+        return getEnum(code).getName();
+    }
+}

+ 2 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/protection/service/IIotDefenceAreaDataService.java

@@ -19,4 +19,6 @@ public interface IIotDefenceAreaDataService extends IService<IotAlarmDefenceArea
 
     IotAlarmDefenceAreaData findByCodeAndIdx(String defenceAreaCode, Integer inputIndex,Long orgId);
 
+    IotAlarmDefenceAreaData findByAreaId(Long areaId);
+
 }

+ 89 - 43
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/protection/service/impl/IotAlarmHostServiceImpl.java

@@ -4,14 +4,13 @@ import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.xunmei.common.core.domain.iot.domain.IotAlarmSubsystem;
-import com.xunmei.common.core.domain.iot.domain.IotAlarmSubsystemLog;
+import com.xunmei.common.core.domain.iot.domain.*;
 import com.xunmei.common.core.util.BeanHelper;
+import com.xunmei.common.core.utils.IDHelper;
 import com.xunmei.common.core.utils.JacksonUtils;
 import com.xunmei.host.iot.service.IIotDeviceInfoService;
 import com.xunmei.host.protection.mapper.ProtectionLogMapper;
-import com.xunmei.host.protection.service.IIotAlarmHostService;
-import com.xunmei.host.protection.service.IotAlarmSubsystemService;
+import com.xunmei.host.protection.service.*;
 import com.xunmei.host.websocket.constant.WebSocketConstants;
 import com.xunmei.host.websocket.dto.WebsocketExecuteReq;
 import com.xunmei.host.websocket.dto.WebsocketResult;
@@ -20,6 +19,7 @@ import com.xunmei.host.websocket.service.RouterService;
 import com.xunmei.host.websocket.utils.IotServerUtils;
 import com.xunmei.host.websocket.utils.WebSocketUtils;
 import com.xunmei.system.api.domain.iot.IotDeviceInfo;
+import com.xunmei.system.api.enums.AlarmHostSensorStatus;
 import com.xunmei.system.api.enums.ProtectionStatus;
 import com.xunmei.system.api.util.LogUtils;
 import org.springframework.stereotype.Service;
@@ -28,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import java.io.Serializable;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.StringJoiner;
 
 @Service
@@ -40,47 +41,23 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
     private IotAlarmSubsystemService subsystemService;
 
     @Resource
-    ProtectionLogMapper protectionLogMapper;
+    private IotAlarmDefenceAreaService defenceAreaService;
 
+    @Resource
+    IIotDefenceAreaDataLogService defenceAreDataLogService;
+    @Resource
+    IIotDefenceAreaAlarmDataService defenceAreAlarmDataService;
+    @Resource
+    IIotDefenceAreaDataService defenceAreaDataService;
 
-    @Transactional(rollbackFor = Exception.class)
-    public void changeAlarmHostStatus(WebsocketExecuteReq req) {
-        try {
-            LogUtils.STATUS_INFO_DEFENCEAREA.info("【iot服务报警主机设备状态变更事件】【iotToken:{}】【msgId:{}】【接收参数:{}】", req.getToken(), req.getId(), JSON.toJSONString(req));
-            if (req.getData() != null) {
-                JSONObject object = (JSONObject) req.getData();
-                String status = object.getString("status");
-                String updateTime = object.getString("time");
+    @Resource
+    ProtectionLogMapper protectionLogMapper;
 
-                QueryWrapper<IotDeviceInfo> wrapper = new QueryWrapper<>();
-                wrapper.lambda()
-                        .eq(IotDeviceInfo::getDeviceProduct, req.getProductName())
-                        .eq(IotDeviceInfo::getDeviceCode, req.getDeviceName())
-                        .eq(IotDeviceInfo::getIotToken, req.getToken())
-                        .eq(IotDeviceInfo::getDeleted, 0);
-                IotDeviceInfo deviceInfo = iIotDeviceInfoService.getOne(wrapper);
-                if (deviceInfo != null) {
-                    if ("Online".equals(status)) {
-                        deviceInfo.setNetStatus("1");
-                    } else if ("Offline".equals(status)) {
-                        deviceInfo.setNetStatus("2");
-                    } else {
-                        deviceInfo.setNetStatus("0");
-                    }
-                    iIotDeviceInfoService.updateById(deviceInfo);
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            LogUtils.STATUS_INFO_DEFENCEAREA.error("处理报警主机设备状态改变事件出错", e);
-            throw new RuntimeException(e);
-        }
-    }
 
     @Transactional(rollbackFor = Exception.class)
     public void changeSubSystemStatus(WebsocketExecuteReq req) {
         try {
-            LogUtils.STATUS_INFO_DEFENCEAREA.info("【iot服务报警主机布撤防状态变更事件】【iotToken:{}】【msgId:{}】【接收参数:{}】", req.getToken(), req.getId(), JSON.toJSONString(req));
+            LogUtils.STATUS_INFO_DEFENCEAREA.info("【报警主机布撤防状态变更事件】【token:{}】【msgId:{}】【接收参数:{}】", req.getToken(), req.getId(), JSON.toJSONString(req));
             if (req.getData() != null) {
                 JSONObject object = (JSONObject) req.getData();
                 Integer subSystemId = object.getInteger("id");
@@ -121,6 +98,77 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
         }
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public void changeAlarmHostSensorStatus(WebsocketExecuteReq req) {
+        try {
+            LogUtils.STATUS_INFO_STATUS_SENSOR.info("【报警主机传感器状态事件】【token:{}】【msgId:{}】【接收参数:{}】", req.getToken(), req.getId(), JSON.toJSONString(req));
+            if (req.getData() != null) {
+                JSONObject object = (JSONObject) req.getData();
+                Integer inputIndex = object.getInteger("index");
+                Integer subSystemId = object.getInteger("subSystemId");
+                Integer moduleAddress = object.getInteger("moduleAddress");
+                String status = object.getString("status");
+
+
+                IotAlarmDefenceArea defenceArea = defenceAreaService.getBySubSystemCodeAndDeviceName(req.getToken(), req.getDeviceName(), String.valueOf(subSystemId), String.valueOf(inputIndex));
+                if (defenceArea != null) {
+                    defenceArea.setState(status);
+                    defenceArea.setStateText(AlarmHostSensorStatus.getName(status));
+                    defenceArea.setUpdateTime(LocalDateTime.now());
+
+                    IotAlarmDefenceAreaData defenceAreaData = defenceAreaDataService.findByAreaId(defenceArea.getId());
+                    if (null != defenceAreaData){
+                        defenceAreaData.setDefenceAreaStatus(defenceArea.getState());
+                        defenceAreaData.setUpdateTime(LocalDateTime.now());
+                    }else {
+                        defenceAreaData = new IotAlarmDefenceAreaData();
+                        defenceAreaData.setId(IDHelper.id());
+                        defenceAreaData.setAlarmHostCode(defenceArea.getAlarmHostCode());
+                        defenceAreaData.setDefenceAreaCode(defenceArea.getSubSystemCode());
+                        defenceAreaData.setDefenceAreaIndex(defenceArea.getDefenceAreaIndex());
+                        defenceAreaData.setDefenceAreaName(defenceArea.getDefenceAreaName());
+                        defenceAreaData.setDefenceAreaStatus(defenceArea.getState());
+                        defenceAreaData.setUpdateTime(LocalDateTime.now());
+                        defenceAreaData.setOrgId(defenceArea.getOrgId());
+                        defenceAreaData.setOrganizationGuid(defenceArea.getOrganizationGuid());
+                        defenceAreaData.setOrgName(defenceArea.getOrgName());
+                        defenceAreaData.setOrgPath(defenceArea.getOrgPath());
+                        defenceAreaData.setCreateTime(LocalDateTime.now());
+                    }
+
+                    IotAlarmDefenceAreaDataLog dataLog = new IotAlarmDefenceAreaDataLog();
+                    BeanHelper.copyProperties(dataLog, defenceAreaData);
+                    dataLog.setId(IDHelper.id());
+                    dataLog.setDefenceAreaDataId(defenceAreaData.getId());
+
+                    //报警是报警状态
+                    if (defenceAreaData.getDefenceAreaStatus().equalsIgnoreCase("alarm")) {
+                        //把对应设备修改为告警,并且记录告警记录
+                        IotAlarmDefenceAreaAlarmData dataAlarm = new IotAlarmDefenceAreaAlarmData();
+                        BeanHelper.copyProperties(dataAlarm, defenceAreaData);
+                        dataAlarm.setId(IDHelper.id());
+                        dataAlarm.setIsdo(0);
+                        dataAlarm.setDefenceAreaName(defenceArea.getDefenceAreaName());
+                        dataAlarm.setDefenceAreaStatus(defenceArea.getState());
+                        dataAlarm.setDefenceAreaIndex(defenceArea.getDefenceAreaIndex());
+                        dataAlarm.setDefenceAreaId(defenceArea.getId());
+                        defenceAreAlarmDataService.save(dataAlarm);
+                    }
+                    defenceAreaDataService.saveOrUpdate(defenceAreaData);
+                    defenceAreDataLogService.save(dataLog);
+                    defenceAreaService.updateById(defenceArea);
+                }else {
+                    LogUtils.STATUS_INFO_STATUS_SENSOR.info("【报警主机传感器状态事件,未找到对应传感器】【token:{}】【设备名称:{}】【子系统id:{}】【传感器index:{}】",
+                            req.getToken(), req.getDeviceName(),subSystemId,inputIndex);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            LogUtils.STATUS_INFO_STATUS_SENSOR.error("处理报警主机传感器状态事件出错", e);
+            throw new RuntimeException(e);
+        }
+    }
+
     @Override
     public void subSystemControl(Serializable id, boolean isArm) {
         try {
@@ -177,10 +225,8 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
     @Override
     public String routerKey() {
         StringJoiner result = new StringJoiner(",");
-        result.add(WebSocketConstants.ON_LINE_STATUS);
         result.add(WebSocketConstants.SUB_SYSTEM_STATUS);
-        //报警防区状态暂时不接
-        //result.add(WebSocketConstants.INPUT_STATUS);
+        result.add(WebSocketConstants.SENSOR_STATUS);
         return result.toString();
     }
 
@@ -188,8 +234,8 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
     @Transactional(rollbackFor = Exception.class)
     public Object execute(WebsocketExecuteReq req) {
         try {
-            if (WebSocketConstants.ON_LINE_STATUS.equals(req.getEvent())) {
-                changeAlarmHostStatus(req);
+            if (WebSocketConstants.SENSOR_STATUS.equals(req.getEvent())) {
+                changeAlarmHostSensorStatus(req);
             } else if (WebSocketConstants.SUB_SYSTEM_STATUS.equals(req.getEvent())) {
                 changeSubSystemStatus(req);
             }

+ 9 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/protection/service/impl/IotDefenceAreaDataServiceImpl.java

@@ -29,4 +29,13 @@ public class IotDefenceAreaDataServiceImpl extends ServiceImpl<IotDefenceAreaDat
                 .last(Constants.LIMIT1)
                 .one();
     }
+
+    @Override
+    public IotAlarmDefenceAreaData findByAreaId(Long areaId) {
+
+        return lambdaQuery()
+                .eq(IotAlarmDefenceAreaData::getDeviceId,areaId)
+                .last(Constants.LIMIT1)
+                .one();
+    }
 }

+ 1 - 5
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/websocket/constant/WebSocketConstants.java

@@ -137,10 +137,6 @@ public interface WebSocketConstants {
      */
     String SENSOR_BY_PASS = "Bypass";
 
-    /**
-     * 报警主机离线在线事件
-     */
-    String ON_LINE_STATUS = "OnlineStatus";
 
     /**
      * 子系统布撤防状态事件
@@ -150,7 +146,7 @@ public interface WebSocketConstants {
     /**
      * 报警主机报警防区(传感器)改变状态
      */
-    String INPUT_STATUS = "InputStatus";
+    String SENSOR_STATUS = "sensorStatus";
 
 
     /**