Browse Source

对接多项目

lixing 4 years ago
parent
commit
57abe01a7a

+ 1 - 1
Dockerfile

@@ -3,4 +3,4 @@ FROM java:8
 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime	&& echo 'Asia/Shanghai' > /etc/timezone
 COPY ./target/*.jar zkt-project-alarm.jar
 ENTRYPOINT ["java", "-jar", "/zkt-project-alarm.jar"]
-EXPOSE 9984
+EXPOSE 8101

+ 2 - 2
pom.xml

@@ -9,9 +9,9 @@
         <relativePath/> <!-- lookup parent from repository -->
     </parent>
     <groupId>com.persagy</groupId>
-    <artifactId>zkt-project-alarm</artifactId>
+    <artifactId>alarm-engine</artifactId>
     <version>0.0.1-SNAPSHOT</version>
-    <name>zkt-project-alarm</name>
+    <name>alarm-engine</name>
     <description>project alarm program</description>
 
     <properties>

+ 1 - 0
src/main/java/com/persagy/client/GroupNettyClientHandler.java

@@ -167,6 +167,7 @@ public class GroupNettyClientHandler extends ChannelInboundHandlerAdapter {
                     zktAlarmRecordDO.setItemCode(parseObject.getString("itemCode"));
                     zktAlarmRecordDO.setObjId(parseObject.getString("objId"));
                     zktAlarmRecordDO.setAlarmId(parseObject.getString("id"));
+                    zktAlarmRecordDO.setProjectId(parseObject.getString("projectId"));
                     alarmRecordRepository.save(zktAlarmRecordDO);
                 }
             }

+ 25 - 26
src/main/java/com/persagy/client/WebSocketClientFactory.java

@@ -7,13 +7,10 @@ import com.persagy.service.AlarmHandleService;
 import com.persagy.utils.GZIPCompressUtil;
 import com.persagy.utils.LockUtil;
 import com.persagy.utils.StringUtil;
-import io.netty.util.concurrent.RejectedExecutionHandlers;
-import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.java_websocket.WebSocket;
 import org.java_websocket.client.WebSocketClient;
 import org.java_websocket.handshake.ServerHandshake;
-import org.quartz.SchedulerException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -23,7 +20,6 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.RejectedExecutionHandler;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -32,8 +28,7 @@ import java.util.concurrent.atomic.AtomicInteger;
  * @author:LuoGuangyi
  * @company:PersagyTechnologyCo.,Ltd
  * @since:2020/10/20 00209:23
- * @version:V1.0
- * 参考链接:https://blog.csdn.net/qq_35206261/article/details/103761773
+ * @version:V1.0 参考链接:https://blog.csdn.net/qq_35206261/article/details/103761773
  * 使用说明:
  * #1.发送消息
  * String msg = "";
@@ -65,7 +60,11 @@ public class WebSocketClientFactory {
      */
     @Value("${terminal.alarm.compress}")
     boolean compress;
-
+    /**
+     * 项目名称
+     */
+    @Value("${project.iotid}")
+    String iotProjectId;
     ExecutorService executor = ExecutorBuilder.create()
             .setCorePoolSize(5)
             .setMaxPoolSize(10)
@@ -95,14 +94,14 @@ public class WebSocketClientFactory {
      * @throws URISyntaxException
      */
     private WebSocketClient createNewWebSocketClient() throws URISyntaxException {
-        String outCallWebSockertUrl = "ws://"+host+":"+port;
-        outCallWebSockertUrl+=StringUtil.isEmpty(suffix)?"":"/"+suffix;
-        log.info("连接地址为:[{}]",outCallWebSockertUrl);
+        String outCallWebSockertUrl = "ws://" + host + ":" + port;
+        outCallWebSockertUrl += StringUtil.isEmpty(suffix) ? "" : "/" + suffix + "?projectId=" + iotProjectId;
+        log.info("连接地址为:[{}]", outCallWebSockertUrl);
         WebSocketClient webSocketClient = new WebSocketClient(new URI(outCallWebSockertUrl)) {
             @Override
             public void onOpen(ServerHandshake serverHandshake) {
-//                String msg = iotProjectId;
-//                sendMsg(getOutCallWebSocketClientHolder(), msg);
+                String msg = iotProjectId;
+                sendMsg(getOutCallWebSocketClientHolder(), msg);
             }
 
             @Override
@@ -116,27 +115,27 @@ public class WebSocketClientFactory {
                         log.error("解密失败!", e);
                     }
                 }
-//                log.info("接收信息为:{}", message);
+                //                log.info("接收信息为:{}", message);
                 try {
-                    while (!LockUtil.getInstance().isExecute()){
+                    while (!LockUtil.getInstance().isExecute()) {
                         try {
                             log.warn("等待获取锁....");
                             LockUtil.getInstance().lock.lockInterruptibly();
                             log.warn("已经获取锁....");
-//                            try {
-//                                LockUtil.getInstance().condition.await();
-//                            } catch (InterruptedException e) {
-//                                e.printStackTrace();
-//                            }
-//                            log.warn("等待结束....");
-                        }catch (Exception e) {
+                            //                            try {
+                            //                                LockUtil.getInstance().condition.await();
+                            //                            } catch (InterruptedException e) {
+                            //                                e.printStackTrace();
+                            //                            }
+                            //                            log.warn("等待结束....");
+                        } catch (Exception e) {
                             log.error("数据加锁处理发生异常", e);
-                        }finally {
+                        } finally {
                             LockUtil.getInstance().lock.unlock();
                         }
                     }
                     String finalMessage = message;
-                    executor.execute(()-> {
+                    executor.execute(() -> {
                         try {
                             alarmHandleService.handleIOTData(finalMessage);
                         } catch (Exception e) {
@@ -153,13 +152,13 @@ public class WebSocketClientFactory {
             @Override
             public void onClose(int code, String reason, boolean remote) {
                 //code, reason, remote
-                log.warn("关闭连接,code[{}],reson[{}],remote[{}]",code,reason,remote);
+                log.warn("关闭连接,code[{}],reson[{}],remote[{}]", code, reason, remote);
                 //retryOutCallWebSocketClient();
             }
 
             @Override
             public void onError(Exception e) {
-                log.error("连接异常",e);
+                log.error("连接异常", e);
                 //retryOutCallWebSocketClient();
             }
         };
@@ -190,7 +189,7 @@ public class WebSocketClientFactory {
             this.setOutCallWebSocketClientHolder(webSocketClient);
             return webSocketClient;
         } catch (URISyntaxException e) {
-            log.error("retryOutCallWebSocketClient失败:",e);
+            log.error("retryOutCallWebSocketClient失败:", e);
         }
         return null;
     }

+ 7 - 0
src/main/java/com/persagy/entity/ZktAlarmRecordDO.java

@@ -100,6 +100,13 @@ public class ZktAlarmRecordDO implements Serializable {
     private String endInfo;
 
     /**
+     * 项目id
+     */
+    @Column(name = "project_id")
+    @ApiModelProperty(value = "项目id")
+    private String projectId;
+
+    /**
      * 有效期结束时间
      */
     @ApiModelProperty(value = "报警自动过期时间")

+ 17 - 23
src/main/java/com/persagy/job/AlarmExpireJob.java

@@ -3,7 +3,6 @@ package com.persagy.job;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
-import com.alibaba.fastjson.JSONObject;
 import com.persagy.cache.AlarmInfoCache;
 import com.persagy.client.GroupNettyClient;
 import com.persagy.entity.AlarmRecord;
@@ -97,41 +96,35 @@ public class AlarmExpireJob extends QuartzJobBean {
     @Value("${group.code}")
     public String groupCode;
 
-    /**
-     * 项目名称
-     */
-    @Value("${project.id}")
-    String projectId;
-
     private AtomicLong nums = new AtomicLong(1L);
 
     @Override
     protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
         try {
             JobDataMap mergedJobDataMap = context.getMergedJobDataMap();
-            log.info("----------------开始---------------------{}",alarmRecord);
-            log.warn("refireCount:[{}],过期/恢复时间:[{}/{}],实际执行时间:[{}]",context.getRefireCount(),StringUtil.getString(expireTime),StringUtil.getString(endTime),DateUtil.format(context.getFireTime(), DatePattern.ISO8601_PATTERN));
-            if(StringUtils.isNotBlank(alarmRecord)) {
+            log.info("----------------开始---------------------{}", alarmRecord);
+            log.warn("refireCount:[{}],过期/恢复时间:[{}/{}],实际执行时间:[{}]", context.getRefireCount(), StringUtil.getString(expireTime), StringUtil.getString(endTime), DateUtil.format(context.getFireTime(), DatePattern.ISO8601_PATTERN));
+            if (StringUtils.isNotBlank(alarmRecord)) {
                 ZktAlarmRecordDO zktAlarmRecordDO = StringUtil.tranferItemToDTO(alarmRecord, ZktAlarmRecordDO.class);
                 //立即过期,过期的时候可能还没有报警记录ID,需要重新执行下
                 String alarmId = alarmRecordRepository.findById(zktAlarmRecordDO.getDefinitionId()).orElse(new ZktAlarmRecordDO()).getAlarmId();
-                if(StringUtil.isEmpty(alarmId)) {
-                    log.info("refire:[{}]",refire);
-                    mergedJobDataMap.put("refire",String.valueOf(StringUtil.getInt(refire)+1));
-                    reFireJob(context,mergedJobDataMap);
+                if (StringUtil.isEmpty(alarmId)) {
+                    log.info("refire:[{}]", refire);
+                    mergedJobDataMap.put("refire", String.valueOf(StringUtil.getInt(refire) + 1));
+                    reFireJob(context, mergedJobDataMap);
                     log.info("----------------结束---------------------");
                     return;
                 }
-                log.info("报警参数为:[{}]",zktAlarmRecordDO.toString());
-                NettyMessage<AlarmRecord> nettyMessage = new NettyMessage<>(6,projectId);
+                log.info("报警参数为:[{}]", zktAlarmRecordDO.toString());
+                NettyMessage<AlarmRecord> nettyMessage = new NettyMessage<>(6, zktAlarmRecordDO.getProjectId());
                 nettyMessage.setStreamId(nums.getAndIncrement());
                 AlarmRecord message = AlarmRecord.builder()
                         .id(alarmId)
                         .state(StringUtil.getInt(state))
                         .groupCode(groupCode)
-                        .projectId(projectId)
+                        .projectId(zktAlarmRecordDO.getProjectId())
                         .build();
-                if("2".equals(state)) {
+                if ("2".equals(state)) {
                     message.setEndInfo(endInfo);
                     message.setEndTime(DateUtils.parseDate(endTime));
                 }
@@ -141,13 +134,13 @@ public class AlarmExpireJob extends QuartzJobBean {
                 //已经过期的时候删除掉这条报警定义了,保证不会再次产生报警
                 AlarmState alarmState = new AlarmState(defineId);
                 alarmInfoCache.setAlarmState(defineId, alarmState);
-                if(alarmRecordRepository.existsById(zktAlarmRecordDO.getDefinitionId())){
+                if (alarmRecordRepository.existsById(zktAlarmRecordDO.getDefinitionId())) {
                     alarmRecordRepository.deleteById(zktAlarmRecordDO.getDefinitionId());
                 }
             }
             log.info("----------------结束---------------------");
         } catch (Exception e) {
-            log.error("job hander error",e);
+            log.error("job hander error", e);
         }
 
     }
@@ -155,9 +148,9 @@ public class AlarmExpireJob extends QuartzJobBean {
 
     private void reFireJob(JobExecutionContext context, JobDataMap mergedJobDataMap) {
         try {
-            if (StringUtil.getInt(refire)>1) {
-               log.error("重新执行依然失败,信息为:{}[{}]",state,alarmRecord);
-            }else {
+            if (StringUtil.getInt(refire) > 1) {
+                log.error("重新执行依然失败,信息为:{}[{}]", state, alarmRecord);
+            } else {
                 Scheduler scheduler = context.getScheduler();
                 Trigger trigger = context.getTrigger();
                 DateTime dateTime = DateUtil.offsetSecond(new Date(), 300);
@@ -172,6 +165,7 @@ public class AlarmExpireJob extends QuartzJobBean {
             log.error("获取不到报警记录ID.重新获取报错!", e);
         }
     }
+
     public String getAlarmRecord() {
         return alarmRecord;
     }

+ 26 - 31
src/main/java/com/persagy/service/impl/AlarmHandleServiceImpl.java

@@ -1,9 +1,7 @@
 package com.persagy.service.impl;
 
-import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
-import com.google.common.collect.Maps;
 import com.googlecode.aviator.AviatorEvaluator;
 import com.googlecode.aviator.Expression;
 import com.persagy.cache.AlarmInfoCache;
@@ -62,16 +60,11 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
     public String systemId;
 
     /**
-     * 项目名称
-     */
-    @Value("${project.id}")
-    String projectId;
-    /**
+     * @param msg:
      * @description:处理iot采集数据
      * @exception:
      * @author: LuoGuangyi
      * @company: Persagy Technology Co.,Ltd
-     * @param msg:
      * @return: void
      * @since: 2020/10/27 14:28
      * @version: V1.0
@@ -111,7 +104,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
                         Expression endExp = AviatorEvaluator.compile(end, true);
                         Boolean triggerResult = (Boolean) triggerExp.execute(paramMap);
                         Boolean endResult = (Boolean) endExp.execute(paramMap);
-                        log.info("triggerResult:[{}],endResult:[{}]" , triggerResult,endResult);
+                        log.info("triggerResult:[{}],endResult:[{}]", triggerResult, endResult);
                         if (triggerResult && endResult) {
                             log.warn("报警触发条件和报警恢复条件同时满足,请检查,报警定义详情【{}】", alarmDefine.toString());
                         }
@@ -122,16 +115,16 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
                         //报警产生值满足(这里的满足不考虑报警持续时间)
                         if (triggerResult) {
                             log.info("有一条满足报警条件");
-                            log.info("--"+alarmDefine.toString());
-                            log.info("--"+JSONObject.toJSONString(paramMap));
+                            log.info("--" + alarmDefine.toString());
+                            log.info("--" + JSONObject.toJSONString(paramMap));
                             //报警的时候不考虑报警恢复,因为同时报警和报警恢复是不应该出现的
-                            handlerNowDataAlarm(alarmDefine, alarmState, dateTime, condition, defineId,paramMap);
+                            handlerNowDataAlarm(alarmDefine, alarmState, dateTime, condition, defineId, paramMap);
                         } else {
                             log.info("不满足报警条件");
-                            log.info("--"+alarmDefine.toString());
-                            log.info("--"+JSONObject.toJSONString(paramMap));
+                            log.info("--" + alarmDefine.toString());
+                            log.info("--" + JSONObject.toJSONString(paramMap));
                             //当前数据正常
-                            handlerNowDataNormal(alarmDefine, dateTime, condition, defineId, endResult, alarmState,paramMap);
+                            handlerNowDataNormal(alarmDefine, dateTime, condition, defineId, endResult, alarmState, paramMap);
                         }
                     } else {
                         log.warn("部分信息点没有数值:[{}]", codeDetail);
@@ -144,12 +137,12 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
 
     /**
      * @param alarmDefine :       报警定义
-     * @param dateTime :IOT采集时间
-     * @param condition :报警条件
-     * @param defineId :报警定义ID
-     * @param endResult :报警恢复监测结果
-     * @param alarmState :        报警状态时间实体
-     * @param paramMap   报警恢复触发值
+     * @param dateTime    :IOT采集时间
+     * @param condition   :报警条件
+     * @param defineId    :报警定义ID
+     * @param endResult   :报警恢复监测结果
+     * @param alarmState  :        报警状态时间实体
+     * @param paramMap    报警恢复触发值
      * @description:当前数据正常判断逻辑
      * @exception:
      * @author: LuoGuangyi
@@ -177,8 +170,8 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
                 int uphold = condition.getEndUphold();
                 //超过报警恢复设置的持续时间
                 if (DateUtils.betweenTwoTimeSecond(endTime, dateTime) >= uphold) {
-                    log.error("产生一条报警恢复消息[{}]>[{}]",DateUtils.betweenTwoTimeSecond(endTime, dateTime),uphold);
-                    NettyMessage<AlarmRecord> nettyMessage = new NettyMessage<>(6,projectId);
+                    log.error("产生一条报警恢复消息[{}]>[{}]", DateUtils.betweenTwoTimeSecond(endTime, dateTime), uphold);
+                    NettyMessage<AlarmRecord> nettyMessage = new NettyMessage<>(6, alarmDefine.getProjectId());
                     ZktAlarmRecordDO alarmRecordDO = alarmRecordRepository.findById(AlarmInfoCache.getAlarmDefineId(alarmDefine)).orElse(new ZktAlarmRecordDO());
                     alarmRecordDO.setDefinitionId(defineId);
                     alarmRecordDO.setObjId(alarmDefine.getObjId());
@@ -186,6 +179,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
                     alarmRecordDO.setState("2");
                     alarmRecordDO.setEndTime(DateUtils.parseDate(dateTime));
                     alarmRecordDO.setEndInfo(JSONObject.toJSONString(paramMap));
+                    alarmRecordDO.setProjectId(alarmDefine.getProjectId());
                     //更新报警状态
                     alarmRecordRepository.save(alarmRecordDO);
                     String alarmId = alarmRecordDO.getAlarmId();
@@ -193,17 +187,17 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
                     AlarmRecord alarmResumeRecord = AlarmRecord.builder()
                             .state(2)
                             .groupCode(groupCode)
-                            .projectId(projectId)
+                            .projectId(alarmDefine.getProjectId())
                             .endTime(DateUtils.parseDate(dateTime))
                             .endInfo(JSONObject.toJSONString(paramMap))
                             .build();
                     //如果有报警ID,直接报警恢复
-                    if(StringUtils.isNotEmpty(alarmId)) {
+                    if (StringUtils.isNotEmpty(alarmId)) {
                         alarmResumeRecord.setId(alarmId);
                         nettyMessage.setContent(Arrays.asList(alarmResumeRecord));
                         //{"id","123", "state":1, "groupCode":"wd", "projectId":"Pj123","endTime":"","endInfo":""}
                         groupNettyClient.sendMessage(nettyMessage.toString());
-                    }else {
+                    } else {
                         //如果没有报警ID,定时任务再次测试
                         JobDataMap jobDataMap = new JobDataMap();
                         jobDataMap.put("alarmRecord", alarmRecordDO.toString());
@@ -218,7 +212,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
                         ExpireAlarmMessage em = new ExpireAlarmMessage();
                         //过期消息
                         em.setType("1");
-                        em.setStartTime(DateUtil.offsetMinute(new Date(),3).toJdkDate());
+                        em.setStartTime(DateUtil.offsetMinute(new Date(), 3).toJdkDate());
                         em.setJobDataMap(jobDataMap);
                         em.setJobName(jobName);
                         em.setJobGroupName("resume");
@@ -286,7 +280,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
                 long timeSecond = 0;
                 if (StringUtil.isNotEmpty(alarmState.getAlarmStartTime())) {
                     timeSecond = DateUtils.betweenTwoTimeSecond(alarmState.getAlarmStartTime(), dateTime);
-                }else {
+                } else {
                     //设置开始报警时间
                     alarmState.setAlarmStartTime(dateTime);
                 }
@@ -301,12 +295,12 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
                 }
 
                 if (timeSecond >= condition.getTriggerUphold()) {
-                    log.warn("大于持续时间了,产生一条报警[{}]>[{}]",timeSecond,condition.getTriggerUphold());
+                    log.warn("大于持续时间了,产生一条报警[{}]>[{}]", timeSecond, condition.getTriggerUphold());
                     AlarmRecord alarmRecord = AlarmRecord.builder()
                             .category(alarmDefine.getCategory())
                             .concern(alarmDefine.getConcern())
                             .level(alarmDefine.getLevel())
-                            .projectId(projectId)
+                            .projectId(alarmDefine.getProjectId())
                             .state(1)
                             .triggerTime(DateUtils.parseDate(dateTime))
                             .remark(alarmDefine.getRemark())
@@ -319,7 +313,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
                             .classCode(alarmDefine.getClassCode())
                             .createUser(systemId)
                             .build();
-                    NettyMessage<AlarmRecord> nettyMessage = new NettyMessage<>(5,projectId);
+                    NettyMessage<AlarmRecord> nettyMessage = new NettyMessage<>(5, alarmDefine.getProjectId());
                     nettyMessage.setContent(Arrays.asList(alarmRecord));
                     //推送一条报警记录给远端
                     groupNettyClient.sendMessage(nettyMessage.toString());
@@ -328,6 +322,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
                     zktAlarmRecordDO.setObjId(alarmDefine.getObjId());
                     zktAlarmRecordDO.setItemCode(alarmDefine.getItemCode());
                     zktAlarmRecordDO.setState("1");
+                    zktAlarmRecordDO.setProjectId(alarmDefine.getProjectId());
                     alarmRecordRepository.save(zktAlarmRecordDO);
                     alarmState.setState(AlarmState.State.NOT_DEAL.getType());
                     //有过期时间,生成报警过期消息

+ 9 - 10
src/main/resources/application.yml

@@ -1,14 +1,14 @@
 server:
-  port: 9984
+  port: 8101
 spring:
   # 应用名称
   application:
-    name: zkt-project-alarm
+    name: alarm-engine
   datasource:
-    url: jdbc:mysql://39.102.43.179:9934/alarm-quartz?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true&failOverReadOnly=false
+    url: jdbc:mysql://192.168.100.210:33306/alarm_engine?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true&failOverReadOnly=false
     driver-class-name: com.mysql.jdbc.Driver  # mysql8.0以前使用com.mysql.jdbc.Driver
     username: root
-    password: brzj123456
+    password: 123456
     type: com.alibaba.druid.pool.DruidDataSource
     initial-size: 5  # 初始化大小
     min-idle: 5  # 最小
@@ -37,20 +37,19 @@ spring:
     hibernate:
       ddl-auto: none
 group:
-  code: WD   #标识哪个接团 比如万达使用WD
+  code: HR   #标识哪个集团 比如万达使用WD, 华润使用HR
   alarm:
-#    host: 39.102.43.179     #netty IP
-    host: localhost     #netty IP
+    host: 192.168.16.243     #netty IP
     port: 9986          #netty 端口9986
 terminal:  #边缘端IOT采集程序地址
   alarm:  # 拼接后的地址为ws://host:port/suffix
     compress: false    #采用的是压缩方式还是不压缩方式  true-压缩 false-不压缩
-    host: localhost
+    host: 192.168.16.243
     port: 8080
     suffix: websocket/iot   #websocker后缀
 project:
-  iotid: 1101050029  #iot使用项目ID,不包含PJ
-  id: Pj1101050029   #项目ID
+  iotid:   #iot使用项目ID,不包含PJ
+  id:    #项目ID
 system:
   id: system  #默认用户表示 ,用于报警记录的创建人
 alarm:

+ 15 - 12
src/main/resources/zkt_alarm_tables_mysql_innodb.sql

@@ -177,16 +177,19 @@ CREATE INDEX IDX_ZKT_ALARM_FT_J_G ON ZKT_ALARM_FIRED_TRIGGERS(SCHED_NAME,JOB_NAM
 CREATE INDEX IDX_ZKT_ALARM_FT_JG ON ZKT_ALARM_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP);
 CREATE INDEX IDX_ZKT_ALARM_FT_T_G ON ZKT_ALARM_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
 CREATE INDEX IDX_ZKT_ALARM_FT_TG ON ZKT_ALARM_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
-CREATE TABLE `zkt_alarm_record`  (
-                                     `definition_id` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '报警定义ID',
-                                     `item_code` varchar(42) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '报警条目编码',
-                                     `obj_id` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '报警对象ID',
-                                     `state` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警定义对应最新一条报警记录状态',
-                                     `alarm_id` varchar(42) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警定义对应最新一条报警记录ID',
-                                     `alarm_time` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警时间',
-                                     `effect_end_time` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警生效结束时间(报警过期时间)',
-                                     `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
-                                     `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警名称',
-                                     PRIMARY KEY (`definition_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '报警记录ID' ROW_FORMAT = Dynamic;
+CREATE TABLE `zkt_alarm_record` (
+                                    `definition_id` varchar(100) NOT NULL DEFAULT '' COMMENT '报警定义ID',
+                                    `item_code` varchar(42) NOT NULL COMMENT '报警条目编码',
+                                    `obj_id` varchar(60) NOT NULL COMMENT '报警对象ID',
+                                    `state` varchar(10) DEFAULT NULL COMMENT '报警定义对应最新一条报警记录状态',
+                                    `alarm_id` varchar(42) DEFAULT NULL COMMENT '报警定义对应最新一条报警记录ID',
+                                    `alarm_time` varchar(20) DEFAULT NULL COMMENT '报警时间',
+                                    `effect_end_time` varchar(20) DEFAULT NULL COMMENT '报警生效结束时间(报警过期时间)',
+                                    `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+                                    `name` varchar(100) DEFAULT NULL COMMENT '报警名称',
+                                    `end_info` json DEFAULT NULL COMMENT '报警结束值',
+                                    `end_time` datetime DEFAULT NULL COMMENT '报警结束时间',
+                                    `project_id` varchar(50) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '项目id',
+                                    PRIMARY KEY (`definition_id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='报警记录ID';
 commit;