Ver código fonte

报警数据接收代码提交

jingyuanchao 1 ano atrás
pai
commit
ae4fcfba27

+ 1 - 0
project_data/sql/0.1.1/soc/soc.sql

@@ -880,6 +880,7 @@ CREATE TABLE `iot_device_status` (
                                      `info` text COLLATE utf8mb4_general_ci COMMENT '设备状态数据',
                                      `state_update_time` datetime DEFAULT NULL COMMENT '最后一次状态更新时间',
                                      `state_start_time` datetime DEFAULT NULL COMMENT '状态更新开始时间',
+                                     `state` int DEFAULT 2 COMMENT '告警状态,0:正常,1:告警,2:未知',
                                      `create_time` datetime DEFAULT NULL COMMENT '创建时间',
                                      `update_time` datetime DEFAULT NULL COMMENT '修改时间',
                                      `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',

+ 1 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/util/LogUtils.java

@@ -138,4 +138,5 @@ public class LogUtils {
      */
     public  static  final Logger WEBSOCKET_MSG=LoggerFactory.getLogger("websocketMsgLog");
     public  static  final Logger SOCKET_BASE_DEVICE_INFO=LoggerFactory.getLogger("socketBaseDeviceInfo");
+    public  static  final Logger SOCKET_DEVICE_STATUS_INFO=LoggerFactory.getLogger("socketDeviceStatusInfo");
 }

+ 12 - 2
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/impl/IotDeviceInfoServiceImpl.java

@@ -557,7 +557,11 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
         BaseDeviceTypeEnum baseDeviceTypeEnum = BaseDeviceTypeEnum.valueOf(subDeviceInfo.getSubType());
         info.setDeviceType(baseDeviceTypeEnum.getCode());
         info.setIotToken(serverInfo.getIotCode());
-        info.setDeviceProduct(hostDevice.getDeviceProduct());
+        if (ObjectUtil.equal(ProductEnums.FSU_GATEWAY, ProductEnums.getByProductName(hostDevice.getDeviceProduct()))) {
+            info.setDeviceProduct(subDeviceInfo.getSubType());
+        } else {
+            info.setDeviceProduct(hostDevice.getDeviceProduct());
+        }
         info.setDeviceName(subDeviceInfo.getDeviceName());
         info.setHostCode(subDeviceInfo.getParentCode());
         info.setOrgId(serverInfo.getOrgId());
@@ -575,7 +579,13 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
         channelInfo.setDeleted(0);
         channelInfo.setDeviceName(subDeviceInfo.getDeviceName());
         BaseDeviceTypeEnum baseDeviceTypeEnum = BaseDeviceTypeEnum.valueOf(subDeviceInfo.getSubType());
-        channelInfo.setDeviceType(baseDeviceTypeEnum.getCode());    }
+        channelInfo.setDeviceType(baseDeviceTypeEnum.getCode());
+        if (ObjectUtil.equal(ProductEnums.FSU_GATEWAY, ProductEnums.getByProductName(hostInfo.getDeviceProduct()))) {
+            channelInfo.setDeviceProduct(subDeviceInfo.getSubType());
+        } else {
+            channelInfo.setDeviceProduct(hostInfo.getDeviceProduct());
+        }
+    }
 
     private IotDeviceInfoExtend createIotDeviceInfoExtend(DvsBaseInfo dvsInfo, Long deviceId, String token) {
         IotDeviceInfoExtend extend = new IotDeviceInfoExtend();

+ 14 - 9
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/impl/IotDeviceStatusServiceImpl.java

@@ -86,7 +86,7 @@ public class IotDeviceStatusServiceImpl extends ServiceImpl<IotDeviceStatusMappe
                     .map(IotAlarmSystemField::getName)
                     .findFirst()
                     .orElse(StringUtil.EMPTY_STRING);
-            String val = DeviceTypeEnum.getStatusText(jsb.get("args"));
+            String val = DeviceTypeEnum.getStatusText(jsb.get("propertyValue"));
             if (ObjectUtil.hasEmpty(name, val)) {
                 continue;
             }
@@ -143,7 +143,7 @@ public class IotDeviceStatusServiceImpl extends ServiceImpl<IotDeviceStatusMappe
 
     @Override
     public ProductEnums product() {
-        return ProductEnums.DETECTION_HOST;
+        return ProductEnums.FSU_GATEWAY;
     }
 
     @Override
@@ -191,10 +191,10 @@ public class IotDeviceStatusServiceImpl extends ServiceImpl<IotDeviceStatusMappe
             iotAlarmData.setDeviceId(String.valueOf(deviceInfo.getId()));
             final String sourceType = SensorType.getCodeByProduct(dataReq.getProductType());
             fieldList.stream()
-                    .filter(r->ObjectUtil.equal(r.getSourceType(),sourceType))
-                    .filter(r->ObjectUtil.equal(r.getPropertyName(),dataReq.getProductProperty()))
+                    .filter(r -> ObjectUtil.equal(r.getSourceType(), sourceType))
+                    .filter(r -> ObjectUtil.equal(r.getPropertyName(), dataReq.getProductProperty()))
                     .findAny()
-                    .ifPresent(r->{
+                    .ifPresent(r -> {
                         iotAlarmData.setSourceType(r.getSourceType());
                         iotAlarmData.setSourceTypeDes(r.getSourceTypeDes());
                         iotAlarmData.setFieldCode(r.getSysFieldCode());
@@ -206,19 +206,24 @@ public class IotDeviceStatusServiceImpl extends ServiceImpl<IotDeviceStatusMappe
         }
 
 
-
-
         return null;
     }
 
     private WebsocketResult dealDeviceStatus(WebsocketExecuteReq req) {
-        final JSONArray data = (JSONArray) req.getData();
+
+        final JSONObject reqDataObj = (JSONObject) req.getData();
+        final Object reqStatus = reqDataObj.get(WebSocketConstants.STATUS);
+        if (ObjectUtil.isNull(reqStatus)) {
+            LogUtils.SOCKET_DEVICE_STATUS_INFO.error("设备状态同步时,参数异常,status为空,token:{}", req.getToken());
+            return new WebsocketResult();
+        }
+        final JSONArray data = (JSONArray) reqStatus;
         final String productName = req.getProductName();
         final BaseDeviceTypeEnum deviceTypeEnum = BaseDeviceTypeEnum.valueOf(productName);
 
         final IotDeviceInfo code = iotDeviceInfoService.selectByTypeAndCode(req.getToken(), deviceTypeEnum.getCode(), req.getProductName(), req.getDeviceName());
         if (code == null) {
-            log.error("动环设备状态同步时,未能找到对应设备,token:{},productName:{},deviceNane:{}", req.getToken(), req.getProductName(), req.getDeviceName());
+            LogUtils.SOCKET_DEVICE_STATUS_INFO.error("设备状态同步时,未能找到对应设备,token:{},productName:{},deviceNane:{}", req.getToken(), req.getProductName(), req.getDeviceName());
             return new WebsocketResult();
         }
         String deviceType = SensorType.getCodeByProduct(productName);

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

@@ -55,6 +55,7 @@ public interface WebSocketConstants {
      */
     String ARGS="args";
     String DATA="data";
+    String STATUS="status";
     String HEADER="headers";
 
     /**
@@ -120,7 +121,7 @@ public interface WebSocketConstants {
     /**
      * 子设备状态改变事件
      */
-    String SUB_DEVICES_STATUS = "subDevicesStatus";
+    String SUB_DEVICES_STATUS = "subDeviceStatus";
     /**
      * 设备报警
      */

+ 1 - 1
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/websocket/enums/ProductEnums.java

@@ -16,7 +16,7 @@ public enum ProductEnums {
 
     IOT_SERVER(new String[]{"IoTServer","IoTServerDevice"}),
     DETECTION_HOST(new String[]{"DetectionHost","DetectionHostDevice"}),
-    FSU_GATEWAY(new String[]{"FSU_Gateway","FSU_Smoke","FSU_Infrared","FSU_TemperatureAndHumidity","FSU_DoorMagnetic","FSU_Gas","FSU_RollingShutterDoor","FSU_Water","FSU_SmartMeter","FSU_AirConditioner","FSU_Ups","FSU_DoPowerControl","FSU_ThreePhaseACVoltage"}),
+    FSU_GATEWAY(new String[]{"FSU_Gateway","FSU_Smoke","FSU_Infrared","FSU_TemperatureAndHumidity","FSU_DoorMagnetic","FSU_Gas","FSU_RollingShutterDoor","FSU_Water","FSU_SmartMeter","FSU_AirConditioner","FSU_Ups","FSU_DoPowerControl","FSU_ThreePhaseACVoltage","FSU_Theft"}),
     ;
 
     private String[] productName;

+ 21 - 1
soc-modules/soc-modules-host/src/main/resources/logback.xml

@@ -70,7 +70,22 @@
         </encoder>
     </appender>
 
-
+    <!-- 传感器状态日志  -->
+    <appender name="socketDeviceStatusInfo" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <maxFileSize>${max.file.size}</maxFileSize>
+            <!--日志文件输出的文件名-->
+            <FileNamePattern>${LOG_HOME}/socketDeviceStatusInfo/%d{yyyy-MM-dd}-%i.log</FileNamePattern>
+            <!--日志文件保留天数-->
+            <maxHistory>${max.history}</maxHistory>
+            <totalSizeCap>${total.size.cap}</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+        </encoder>
+    </appender>
 
 
     <logger name="websocketMsgLog" additivity="false" level="info">
@@ -82,6 +97,11 @@
         <appender-ref ref="socketBaseDeviceInfo"/>
     </logger>
 
+    <logger name="socketDeviceStatusInfo" additivity="false" level="info">
+        <!--上面appender元素的name值。为了和logger的name属性做区分,我故意写的不一样-->
+        <appender-ref ref="socketDeviceStatusInfo"/>
+    </logger>
+
     <!-- 日志输出级别 -->
     <root level="INFO">
         <appender-ref ref="STDOUT"/>