Forráskód Böngészése

动环上报历史 代码提交

jingyuanchao 1 éve
szülő
commit
29226544bf

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

@@ -139,4 +139,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");
+    public  static  final Logger SOCKET_DEVICE_ALARM_DATA=LoggerFactory.getLogger("socketDeviceAlarmData");
 }

+ 24 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/iot/DeviceStatusEnum.java

@@ -0,0 +1,24 @@
+package com.xunmei.common.core.enums.iot;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+/**
+ * 告警数据类型枚举
+ */
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public enum DeviceStatusEnum {
+
+    NORMAL(0),
+    ALARM(1),
+    UN_KNOW(2),
+
+
+
+    ;
+
+    private int value;
+}

+ 3 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/mapper/IotDeviceStatusMapper.java

@@ -2,6 +2,7 @@ package com.xunmei.host.iot.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.xunmei.system.api.domain.iot.IotDeviceStatus;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 【请填写功能名称】Mapper接口
@@ -11,4 +12,6 @@ import com.xunmei.system.api.domain.iot.IotDeviceStatus;
  */
 public interface IotDeviceStatusMapper extends BaseMapper<IotDeviceStatus> {
 
+    void updateStatusByDevicePrimaryId(@Param("deviceId") Long deviceId, @Param("status") int status);
+
 }

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

@@ -11,6 +11,7 @@ import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmData;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmSystemField;
 import com.xunmei.common.core.enums.iot.BaseDeviceTypeEnum;
+import com.xunmei.common.core.enums.iot.DeviceStatusEnum;
 import com.xunmei.common.core.enums.iot.DeviceTypeEnum;
 import com.xunmei.common.core.enums.iot.SensorType;
 import com.xunmei.common.core.util.BeanHelper;
@@ -177,7 +178,7 @@ public class IotDeviceStatusServiceImpl extends ServiceImpl<IotDeviceStatusMappe
     private Object dealDeviceAlarm(WebsocketExecuteReq req) {
         final SysOrg sysOrg = serverInfoService.selectOrgByToken(req.getToken());
         if (ObjectUtil.isNull(sysOrg)) {
-            LogUtils.WEBSOCKET_MSG.error("收到设备报警消息,根据token:{}未查询到机构信息", req.getToken());
+            LogUtils.SOCKET_DEVICE_ALARM_DATA.error("收到设备报警消息,根据token:{}未查询到机构信息", req.getToken());
             return null;
         }
         List<IotAlarmSystemField> fieldList = alarmSystemFieldMapper.selectList(new LambdaQueryWrapper<>());
@@ -187,7 +188,7 @@ public class IotDeviceStatusServiceImpl extends ServiceImpl<IotDeviceStatusMappe
         for (AlarmDataReq dataReq : dataReqList) {
             IotDeviceInfo deviceInfo = iotDeviceInfoService.selectByTokenProductAndDeviceCode(req.getToken(), req.getProductName(), req.getDeviceName());
             if (ObjectUtil.isNull(deviceInfo)) {
-                LogUtils.WEBSOCKET_MSG.error("收到设备报警消息,根据token:{},productName:{},deviceName:{}未查询到设备信息", req.getToken(), req.getProductName(), req.getDeviceName());
+                LogUtils.SOCKET_DEVICE_ALARM_DATA.error("收到设备报警消息,根据token:{},productName:{},deviceName:{}未查询到设备信息", req.getToken(), req.getProductName(), req.getDeviceName());
                 continue;
             }
             final IotAlarmData iotAlarmData = BeanHelper.copyProperties(dataReq, IotAlarmData.class);
@@ -204,6 +205,14 @@ public class IotDeviceStatusServiceImpl extends ServiceImpl<IotDeviceStatusMappe
                         iotAlarmData.setFieldCode(r.getSysFieldCode());
                     });
             iotAlarmDataService.save(iotAlarmData);
+            // 发生报警
+            if(ObjectUtil.isNotNull(dataReq.getStartTime())&&ObjectUtil.isNull(dataReq.getEndTime())){
+                updateStatusByDevicePrimaryId(deviceInfo.getId(), DeviceStatusEnum.ALARM.getValue());
+            }
+            // 报警结束
+            if(ObjectUtil.isNotNull(dataReq.getStartTime())&&ObjectUtil.isNotNull(dataReq.getEndTime())){
+                updateStatusByDevicePrimaryId(deviceInfo.getId(), DeviceStatusEnum.NORMAL.getValue());
+            }
             if (Boolean.TRUE.equals(dataReq.getSmsType())) {
                 //todo  发送短信
             }
@@ -213,6 +222,12 @@ public class IotDeviceStatusServiceImpl extends ServiceImpl<IotDeviceStatusMappe
         return null;
     }
 
+    private void updateStatusByDevicePrimaryId(Long deviceId, int status) {
+
+        iotDeviceStatusMapper.updateStatusByDevicePrimaryId(deviceId, status);
+
+    }
+
     private WebsocketResult dealDeviceStatus(WebsocketExecuteReq req) {
 
         final JSONObject reqDataObj = (JSONObject) req.getData();

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

@@ -87,6 +87,23 @@
         </encoder>
     </appender>
 
+    <!-- 设备报警日志  -->
+    <appender name="socketDeviceAlarmData" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <maxFileSize>${max.file.size}</maxFileSize>
+            <!--日志文件输出的文件名-->
+            <FileNamePattern>${LOG_HOME}/socketDeviceAlarmData/%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">
         <!--上面appender元素的name值。为了和logger的name属性做区分,我故意写的不一样-->
@@ -101,6 +118,10 @@
         <!--上面appender元素的name值。为了和logger的name属性做区分,我故意写的不一样-->
         <appender-ref ref="socketDeviceStatusInfo"/>
     </logger>
+    <logger name="socketDeviceAlarmData" additivity="false" level="info">
+        <!--上面appender元素的name值。为了和logger的name属性做区分,我故意写的不一样-->
+        <appender-ref ref="socketDeviceAlarmData"/>
+    </logger>
 
     <!-- 日志输出级别 -->
     <root level="INFO">

+ 3 - 0
soc-modules/soc-modules-host/src/main/resources/mapper/IotDeviceStatusMapper.xml

@@ -2,4 +2,7 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.xunmei.host.iot.mapper.IotDeviceStatusMapper">
 
+    <update id="updateStatusByDevicePrimaryId">
+        UPDATE iot_device_status SET state = #{status} WHERE device_id = #{deviceId}
+    </update>
 </mapper>

+ 2 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/sensor/IotDeviceStatusLogPageVo.java

@@ -2,6 +2,7 @@ package com.xunmei.iot.vo.sensor;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -21,6 +22,7 @@ public class IotDeviceStatusLogPageVo {
     @ApiModelProperty(value = "设备状态数据")
     private String info;
 
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "创建时间")
     private Date createTime;