Browse Source

Merge remote-tracking branch 'origin/alarm-engine-cloud' into alarm-engine-cloud

lixing 3 years ago
parent
commit
80e189ec9b

+ 252 - 241
pom.xml

@@ -1,249 +1,260 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.2.2.RELEASE</version>
-        <relativePath/> <!-- lookup parent from repository -->
-    </parent>
-    <groupId>com.persagy</groupId>
-    <artifactId>alarm-engine</artifactId>
-    <version>0.0.1-SNAPSHOT</version>
-    <name>alarm-engine</name>
-    <description>project alarm program</description>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.2.2.RELEASE</version>
+		<relativePath /> <!-- lookup parent from repository -->
+	</parent>
+	<groupId>com.persagy</groupId>
+	<artifactId>alarm-engine</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<name>alarm-engine</name>
+	<description>project alarm program</description>
 
-    <properties>
-        <java.version>1.8</java.version>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-    </properties>
+	<properties>
+		<java.version>1.8</java.version>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+	</properties>
 
-    <dependencies>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-        <!-- swagger -->
-        <dependency>
-            <groupId>com.github.xiaoymin</groupId>
-            <artifactId>knife4j-spring-boot-starter</artifactId>
-            <!--在引用时请在maven中央仓库搜索最新版本号 -->
-            <version>2.0.2</version>
-        </dependency>
-        <!--guava-->
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-            <version>20.0</version>
-        </dependency>
-        <!--lombok-->
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <!-- 数学逻辑运算解析库-->
-        <dependency>
-            <groupId>com.googlecode.aviator</groupId>
-            <artifactId>aviator</artifactId>
-            <version>5.2.5</version>
-        </dependency>
-        <!-- netty -->
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-all</artifactId>
-            <version>4.1.42.Final</version>
-        </dependency>
-        <!--测试工具-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.junit.vintage</groupId>
-                    <artifactId>junit-vintage-engine</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <!--WebSocket核心依赖包-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-websocket</artifactId>
-        </dependency>
-        <!--WebSocket核心依赖包-->
-        <dependency>
-            <groupId>org.java-websocket</groupId>
-            <artifactId>Java-WebSocket</artifactId>
-            <version>1.3.8</version>
-        </dependency>
-<!--        <dependency>-->
-<!--            <groupId>junit</groupId>-->
-<!--            <artifactId>junit</artifactId>-->
-<!--        </dependency>-->
-       <!-- commons-lang3常用工具类-->
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-        </dependency>
-        <!--fastjson JSON组件-->
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>fastjson</artifactId>
-            <version>1.2.71</version>
-            <scope>compile</scope>
-        </dependency>
-        <!--hutool工具类-->
-        <dependency>
-            <groupId>cn.hutool</groupId>
-            <artifactId>hutool-all</artifactId>
-            <version>5.4.3</version>
-            <scope>compile</scope>
-        </dependency>
-        <!--定时任务框架-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-quartz</artifactId>
-        </dependency>
-        <!--  MYSQL-->
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-            <scope>runtime</scope>
-        </dependency>
-       <!--  Spring Boot JDBC-->
-          <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-jdbc</artifactId>
-        </dependency>
-        <!-- 数据库连接池-->
-       <dependency>
-           <groupId>com.alibaba</groupId>
-           <artifactId>druid-spring-boot-starter</artifactId>
-           <version>1.1.22</version>
-       </dependency>
-        <!-- spring-data-jpa -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-jpa</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-aop</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.github.dadiyang</groupId>
-            <artifactId>autologging-aop</artifactId>
-            <version>1.0.0</version>
-        </dependency>
-        <dependency>
-            <groupId>com.vladmihalcea</groupId>
-            <artifactId>hibernate-types-52</artifactId>
-            <version>2.9.13</version>
-        </dependency>
-        <!-- ======================Redis jar坐标========================= -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-redis</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>redis.clients</groupId>
-            <artifactId>jedis</artifactId>
-        </dependency>
-        <!-- ======================Redis jar坐标========================= -->
-   </dependencies>
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		</dependency>
+		<!-- swagger -->
+		<dependency>
+			<groupId>com.github.xiaoymin</groupId>
+			<artifactId>knife4j-spring-boot-starter</artifactId>
+			<!--在引用时请在maven中央仓库搜索最新版本号 -->
+			<version>2.0.2</version>
+		</dependency>
+		<!--guava -->
+		<dependency>
+			<groupId>com.google.guava</groupId>
+			<artifactId>guava</artifactId>
+			<version>20.0</version>
+		</dependency>
+		<!--lombok -->
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<optional>true</optional>
+		</dependency>
+		<!-- 数学逻辑运算解析库 -->
+		<dependency>
+			<groupId>com.googlecode.aviator</groupId>
+			<artifactId>aviator</artifactId>
+			<version>5.2.5</version>
+		</dependency>
+		<!-- netty -->
+		<dependency>
+			<groupId>io.netty</groupId>
+			<artifactId>netty-all</artifactId>
+			<version>4.1.42.Final</version>
+		</dependency>
+		<!--测试工具 -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+			<exclusions>
+				<exclusion>
+					<groupId>org.junit.vintage</groupId>
+					<artifactId>junit-vintage-engine</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<!--WebSocket核心依赖包 -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-websocket</artifactId>
+		</dependency>
+		<!--WebSocket核心依赖包 -->
+		<dependency>
+			<groupId>org.java-websocket</groupId>
+			<artifactId>Java-WebSocket</artifactId>
+			<version>1.3.8</version>
+		</dependency>
+		<!-- <dependency> -->
+		<!-- <groupId>junit</groupId> -->
+		<!-- <artifactId>junit</artifactId> -->
+		<!-- </dependency> -->
+		<!-- commons-lang3常用工具类 -->
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-lang3</artifactId>
+		</dependency>
+		<!--fastjson JSON组件 -->
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>fastjson</artifactId>
+			<version>1.2.71</version>
+			<scope>compile</scope>
+		</dependency>
+		<!--hutool工具类 -->
+		<dependency>
+			<groupId>cn.hutool</groupId>
+			<artifactId>hutool-all</artifactId>
+			<version>5.4.3</version>
+			<scope>compile</scope>
+		</dependency>
+		<!--定时任务框架 -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-quartz</artifactId>
+		</dependency>
+		<!-- MYSQL -->
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+			<scope>runtime</scope>
+		</dependency>
+		<!-- Spring Boot JDBC -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-jdbc</artifactId>
+		</dependency>
+		<!-- 数据库连接池 -->
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>druid-spring-boot-starter</artifactId>
+			<version>1.1.22</version>
+		</dependency>
+		<!-- spring-data-jpa -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-jpa</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-aop</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.github.dadiyang</groupId>
+			<artifactId>autologging-aop</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.vladmihalcea</groupId>
+			<artifactId>hibernate-types-52</artifactId>
+			<version>2.9.13</version>
+		</dependency>
+		<!-- ======================Redis jar坐标========================= -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-redis</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>redis.clients</groupId>
+			<artifactId>jedis</artifactId>
+		</dependency>
+	<!--rabbitmq -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-amqp</artifactId>
+			<exclusions>
+				<exclusion>
+					<groupId>org.springframework.boot</groupId>
+					<artifactId>spring-boot-starter-logging</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+	</dependencies>
 
-   <build>
-       <finalName>alarm-engine</finalName>
-       <plugins>
-           <plugin>
-               <groupId>org.apache.maven.plugins</groupId>
-               <artifactId>maven-compiler-plugin</artifactId>
-               <version>3.8.1</version>
-               <configuration>
-                   <source>1.8</source>
-                   <target>1.8</target>
-                   <encoding>UTF-8</encoding>
-                   <skip>true</skip>
-               </configuration>
-           </plugin>
-           <plugin>
-               <groupId>org.springframework.boot</groupId>
-               <artifactId>spring-boot-maven-plugin</artifactId>
-           </plugin>
-           <!-- 按照测试要求打成zip需要的配置 -->
-           <plugin>
-               <groupId>com.coderplus.maven.plugins</groupId>
-               <artifactId>copy-rename-maven-plugin</artifactId>
-               <version>1.0.1</version>
-               <executions>
-                   <execution>
-                       <id>rename-file</id>
-                       <phase>compile</phase>
-                       <goals>
-                           <goal>rename</goal>
-                       </goals>
-                       <configuration>
-                           <destinationFile>${project.build.directory}/version.txt</destinationFile>
-                       </configuration>
-                   </execution>
-               </executions>
-           </plugin>
-           <!--拷贝资源文件 copy-resources-->
-           <plugin>
-               <artifactId>maven-resources-plugin</artifactId>
-               <executions>
-                   <execution>
-                       <id>copy-resources</id>
-                       <phase>package</phase>
-                       <goals>
-                           <goal>copy-resources</goal>
-                       </goals>
-                       <configuration>
-                           <resources>
-                               <resource>
-                                   <directory>src/main/resources/</directory>
-                                   <includes>
-                                       <include>**/*.yml</include>
-                                   </includes>
-                               </resource>
-                               <resource>
-                                   <directory>${project.build.directory}</directory>
-                                   <includes>
-                                       <include>**/version.txt</include>
-                                   </includes>
-                               </resource>
-                           </resources>
-                           <outputDirectory>${project.build.directory}/config</outputDirectory>
-                       </configuration>
-                   </execution>
-                   <!--拷贝启动脚本-->
-                   <execution>
-                       <id>copy-version</id>
-                       <phase>package</phase>
-                       <goals>
-                           <goal>copy-resources</goal>
-                       </goals>
-                       <configuration>
-                           <resources>
-                               <resource>
-                                   <directory>src/script</directory>
-                               </resource>
-                           </resources>
-                           <outputDirectory>${project.build.directory}</outputDirectory>
-                       </configuration>
-                   </execution>
-               </executions>
-           </plugin>
+	<build>
+		<finalName>alarm-engine</finalName>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.8.1</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+					<encoding>UTF-8</encoding>
+					<skip>true</skip>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+			</plugin>
+			<!-- 按照测试要求打成zip需要的配置 -->
+			<plugin>
+				<groupId>com.coderplus.maven.plugins</groupId>
+				<artifactId>copy-rename-maven-plugin</artifactId>
+				<version>1.0.1</version>
+				<executions>
+					<execution>
+						<id>rename-file</id>
+						<phase>compile</phase>
+						<goals>
+							<goal>rename</goal>
+						</goals>
+						<configuration>
+							<destinationFile>${project.build.directory}/version.txt</destinationFile>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<!--拷贝资源文件 copy-resources -->
+			<plugin>
+				<artifactId>maven-resources-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>copy-resources</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy-resources</goal>
+						</goals>
+						<configuration>
+							<resources>
+								<resource>
+									<directory>src/main/resources/</directory>
+									<includes>
+										<include>**/*.yml</include>
+									</includes>
+								</resource>
+								<resource>
+									<directory>${project.build.directory}</directory>
+									<includes>
+										<include>**/version.txt</include>
+									</includes>
+								</resource>
+							</resources>
+							<outputDirectory>${project.build.directory}/config</outputDirectory>
+						</configuration>
+					</execution>
+					<!--拷贝启动脚本 -->
+					<execution>
+						<id>copy-version</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy-resources</goal>
+						</goals>
+						<configuration>
+							<resources>
+								<resource>
+									<directory>src/script</directory>
+								</resource>
+							</resources>
+							<outputDirectory>${project.build.directory}</outputDirectory>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
 
 
-       </plugins>
-   </build>
+		</plugins>
+	</build>
 
 </project>

+ 55 - 33
src/main/java/com/persagy/cache/AlarmRedisCache.java

@@ -1,44 +1,66 @@
 package com.persagy.cache;
 
-import cn.hutool.core.collection.CollectionUtil;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.persagy.constant.RedisConstant;
-import com.persagy.entity.AlarmConditionState;
+import java.util.Objects;
+import java.util.Optional;
+
+import javax.annotation.Resource;
+
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.data.redis.core.HashOperations;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
-import javax.annotation.Resource;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Logger;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.constant.RedisConstant;
+import com.persagy.entity.AlarmConditionState;
+import com.persagy.entity.ZktAlarmRecordDO;
+import com.persagy.repository.AlarmRecordRepository;
+import lombok.extern.slf4j.Slf4j;
 
 @Component
-@SuppressWarnings({"unchecked", "rawtypes"})
+@Slf4j
 public class AlarmRedisCache implements RedisCache {
 
-    private static final Logger log = Logger.getLogger(String.valueOf(AlarmRedisCache.class));
-
-    @Resource(name = "emsRedisTemplate")
-    private RedisTemplate<String, String> emsRedisTemplate;
-
-
-    public AlarmConditionState getAlarmDefineState(String defineId) {
-        try {
-            String str = emsRedisTemplate.opsForHash().get(RedisConstant.DEFINE_ID, defineId).toString();
-            if (StringUtils.isNotBlank(str)) {
-                JSONObject object = JSONObject.parseObject(str);
-                AlarmConditionState alarmConditionState = JSON.toJavaObject(object, AlarmConditionState.class);
-                return alarmConditionState;
-            }
-        } catch (Exception e) {
-            log.warning("从redis获取报警定义状态失败" + e);
-        }
-        return null;
-    }
+	@Resource(name = "emsRedisTemplate")
+	private RedisTemplate<String, String> emsRedisTemplate;
+
+	@Autowired
+	AlarmRecordRepository alarmRecordRepository;
+
+	public AlarmConditionState getAlarmDefineState(String defineId) {
+		AlarmConditionState alarmConditionState = null;
+		String str = emsRedisTemplate.opsForHash().get(RedisConstant.DEFINE_ID, defineId).toString();
+		if (StringUtils.isNotBlank(str)) {
+			try {
+				JSONObject object = JSONObject.parseObject(str);
+				alarmConditionState = JSON.toJavaObject(object, AlarmConditionState.class);
+			} catch (Exception e) {
+				log.error(" alarmDefineState json 转换 AlarmConditionState 失败", e);
+			}
+		}
+		try {
+			if (Objects.isNull(alarmConditionState)) {
+				// 默认正常报警状态
+				Optional<ZktAlarmRecordDO> recordOptional = alarmRecordRepository.findById(defineId);
+				if (recordOptional.isPresent()) {
+					ZktAlarmRecordDO alarmRecordDO = recordOptional.get();
+					// 数据库报警状态:1-未处理
+					if ("1".equals(alarmRecordDO.getState())) {
+						alarmConditionState = new AlarmConditionState(defineId);
+						alarmConditionState.setState(AlarmConditionState.State.NOT_DEAL.getType());
+						alarmConditionState.setAlarmStartTime(alarmRecordDO.getAlarmTime());
+					}
+				}
+			}
+			log.debug("alarmDefineState: [{}], ( 0-正常 1-报警)", alarmConditionState.getState());
+		} catch (Exception e) {
+			log.warn("从redis获取报警定义状态失败" + e);
+		}
+		return alarmConditionState;
+	}
+
+	public void setAlarmState(String defineId, AlarmConditionState alarmConditionState) {
+		emsRedisTemplate.opsForHash().put(RedisConstant.DEFINE_ID, defineId, JSON.toJSONString(alarmConditionState));
+	}
 }

+ 13 - 13
src/main/java/com/persagy/config/RedisConfig.java

@@ -76,43 +76,43 @@ public class RedisConfig {
 	private Integer springRedisPoolMaxActive;
 	
 	
-	@Value("${spring.redis.database.zero}")
+	@Value("${spring.redis.database.zero:0}")
 	private Integer springRedisDatabaseZero;
 	
-	@Value("${spring.redis.database.one}")
+	@Value("${spring.redis.database.one:1}")
 	private Integer springRedisDatabaseOne;
 
-	@Value("${spring.redis.database.two}")
+	@Value("${spring.redis.database.two:2}")
 	private Integer springRedisDatabaseTwo;
 	
-	@Value("${spring.redis.database.three}")
+	@Value("${spring.redis.database.three:3}")
 	private Integer springRedisDatabaseThree;
 	
-	@Value("${spring.redis.database.four}")
+	@Value("${spring.redis.database.four:4}")
 	private Integer springRedisDatabaseFour;
 
-	@Value("${spring.redis.database.five}")
+	@Value("${spring.redis.database.five:5}")
 	private Integer springRedisDatabaseFive;
 
-	@Value("${spring.redis.database.six}")
+	@Value("${spring.redis.database.six:6}")
 	private Integer springRedisDatabaseSix;
 
-	@Value("${spring.redis.database.seven}")
+	@Value("${spring.redis.database.seven:7}")
 	private Integer springRedisDatabaseSeven;
 
-	@Value("${spring.redis.database.eight}")
+	@Value("${spring.redis.database.eight:8}")
 	private Integer springRedisDatabaseEight;
 
-	@Value("${spring.redis.database.nine}")
+	@Value("${spring.redis.database.nine:9}")
 	private Integer springRedisDatabaseNine;
 
-	@Value("${spring.redis.database.ten}")
+	@Value("${spring.redis.database.ten:10}")
 	private Integer springRedisDatabaseTen;
 	
-	@Value("${spring.redis.database.eleven}")
+	@Value("${spring.redis.database.eleven:11}")
 	private Integer springRedisDatabaseEleven;
 
-	@Value("${spring.redis.database.fifteen}")
+	@Value("${spring.redis.database.fifteen:12}")
 	private Integer springRedisDatabaseFifteen;
 	
 	/**

+ 55 - 0
src/main/java/com/persagy/entity/DmpMessage.java

@@ -0,0 +1,55 @@
+package com.persagy.entity;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+
+/**
+ * @description:中台消息队列格式
+ * @author:LuoGuangyi
+ * @company:PersagyTechnologyCo.,Ltd
+ * @since:2020/10/28 002816:10
+ * @version:V1.0
+ **/
+@Data
+public class DmpMessage {
+    private String mid;
+    /**
+     *  type = alarmConfigsChange
+     *  报警消息变化
+     */
+    private String type;
+    private String groupCode;
+    private String projectId;
+    private String targetId;
+    private Integer int1;
+    private Integer int2;
+    private String str1;
+    private String str2;
+    private String sendTime;
+    private String expireTime;
+    private String appId;
+    private String userId;
+    /**
+     * 分别存放新增和修改的报警定义条目
+     * {
+     *     "createdConfigUniques": [
+     *         {
+     *             "itemCode": "报警条目编码",
+     *             "objId": "对象id"
+     *         }
+     *     ],
+     *     "deletedConfigUniques": [
+     *         {
+     *             "itemCode": "报警条目编码",
+     *             "objId": "对象id"
+     *         }
+     *     ]
+     * }
+     */
+    private JSONObject exts;
+
+    @Override
+    public String toString() {
+        return JSONObject.toJSONString(this);
+    }
+}

+ 47 - 0
src/main/java/com/persagy/mq/RabbitConfig.java

@@ -0,0 +1,47 @@
+package com.persagy.mq;
+
+import org.springframework.amqp.core.Binding;
+import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.Queue;
+import org.springframework.amqp.core.TopicExchange;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * RabbitConfig
+ * @author gaoyu
+ *
+ */
+@Configuration
+public class RabbitConfig {
+	/**
+	 * 交换机
+	 */
+	public static final String exchange = "exchange-alarm-service";
+
+	/**
+	 * 报警消息路由键
+	 */
+	public static final String alarmMsgRoutingKey = "alarm-msg-routing-key";
+
+	/**
+	 * 报警条件队列
+	 */
+	private final String alarmMsgQueue = "alarm-msg-queue";
+
+	@Bean
+	public Queue alarmMsgQueue() {
+		return new Queue(alarmMsgQueue, true);
+	}
+
+	@Bean
+	public TopicExchange alarmServiceExchange() {
+		return new TopicExchange(exchange);
+	}
+
+	@Bean
+	public Binding conditionBinding() {
+		return BindingBuilder.bind(alarmMsgQueue()).to(alarmServiceExchange()).with(alarmMsgRoutingKey);
+	}
+
+}

+ 60 - 4
src/main/java/com/persagy/service/impl/AlarmHandleServiceImpl.java

@@ -1,6 +1,8 @@
 package com.persagy.service.impl;
 
 import cn.hutool.core.date.DateUtil;
+
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -18,6 +20,7 @@ import com.persagy.entity.v2.ItemCodeCondition;
 import com.persagy.entity.v2.ObjConditionInfo;
 import com.persagy.enumeration.NettyMsgTypeEnum;
 import com.persagy.job.ExpireAlarmQueue;
+import com.persagy.mq.RabbitConfig;
 import com.persagy.repository.AlarmRecordRepository;
 import com.persagy.service.AlarmHandleService;
 import com.persagy.service.AlarmQuartzService;
@@ -28,6 +31,7 @@ import com.persagy.utils.condition.ConditionUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.quartz.JobDataMap;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -64,6 +68,8 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
     AlarmLastTimeCache alarmLastTimeCache;
     @Autowired
     AlarmRedisCache alarmRedisCache;
+    @Autowired
+    RabbitTemplate rabbitTemplate;
 
     /**
      * 集团编码
@@ -406,21 +412,26 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
                 deleteZktAlarmRecordWhenAlarmSuspend(defineId);
                 log.debug("发送报警恢复消息,报警id: [{}]", alarmId);
                 // 发送报警恢复消息
-                sendAlarmRecoverMessage(alarmDefine.getProjectId(), dataTime, paramMap, alarmId);
+//                sendAlarmRecoverMessage(alarmDefine.getProjectId(), dataTime, paramMap, alarmId);
+                sendAlarmRecoverMessageMq(defineId, alarmSuspendStartTime, paramMap, alarmId);
                 // 报警恢复后,从缓存中移除报警id
                 createdAlarmIdsCache.remove(alarmId);
             } else {
                 log.debug("已创建的报警id中不包含[{}], 3分钟后重试发送报警恢复消息", alarmId);
                 // 创建恢复定时任务
-                createAlarmRecoverTimingJob(dataTime, paramMap, alarmRecordDO);
+//                createAlarmRecoverTimingJob(dataTime, paramMap, alarmRecordDO);
+                createAlarmRecoverTimingMq(dataTime, paramMap, alarmRecordDO);
             }
             // 取消过期任务
-            cancelRelatedExpireJob(alarmId);
+//            cancelRelatedExpireJob(alarmId);
+            cancelRelatedExpireMq(alarmId);
             //报警恢复,报警状态重置回默认
             alarmConditionState.reset();
         }
         // 更新报警定义缓存
-        alarmInfoCache.setAlarmState(defineId, alarmConditionState);
+//        alarmInfoCache.setAlarmState(defineId, alarmConditionState);
+        alarmRedisCache.setAlarmState(defineId, alarmConditionState);
+        
     }
 
     /**
@@ -455,6 +466,28 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
         em.setJobGroupName("resume");
         ExpireAlarmQueue.getExpireAlarmMessageQueue().produce(em);
     }
+    private void createAlarmRecoverTimingMq(
+            String recoverTime, HashMap<String, Object> paramMap, ZktAlarmRecordDO alarmRecordDO)
+            throws InterruptedException {
+        JobDataMap jobDataMap = new JobDataMap();
+        jobDataMap.put("alarmRecord", alarmRecordDO.toString());
+        // 已重试次数
+        jobDataMap.put("refire", "0");
+        jobDataMap.put("endTime", recoverTime);
+        jobDataMap.put("endInfo", JSONObject.toJSONString(paramMap));
+        jobDataMap.put("defineId", alarmRecordDO.getDefinitionId());
+        // 恢复
+        jobDataMap.put("state", "2");
+        ExpireAlarmMessage em = new ExpireAlarmMessage();
+        em.setType("1");
+        em.setStartTime(DateUtil.offsetMinute(new Date(), 3).toJdkDate());
+        em.setJobDataMap(jobDataMap);
+        em.setJobName(alarmRecordDO.getAlarmId());
+        em.setJobGroupName("resume");
+//        ExpireAlarmQueue.getExpireAlarmMessageQueue().produce(em);
+		rabbitTemplate.convertAndSend(RabbitConfig.exchange, RabbitConfig.alarmMsgRoutingKey, JSON.toJSONString(em));
+
+    }
 
     /**
      * @description: 发送报警恢复消息
@@ -490,6 +523,20 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
         // TODO: 2021/11/17 向mq发送消息
     }
 
+	private void sendAlarmRecoverMessageMq(String projectId, String recoverTime, Map<String, Object> paramMap,
+			String alarmId) {
+		AlarmRecord alarmRecoverRecord = AlarmRecord.builder()
+				.state(2)
+				.groupCode(groupCode)
+				.projectId(projectId)
+				.endTime(DateUtils.parseDate(recoverTime))
+				.endInfo(JSONObject.toJSONString(paramMap))
+				.build();
+		alarmRecoverRecord.setId(alarmId);
+		rabbitTemplate.convertAndSend(RabbitConfig.exchange, RabbitConfig.alarmMsgRoutingKey, JSON.toJSONString(alarmRecoverRecord));
+
+	}
+
     /**
      * @description: 取消报警的过期任务
      * @param: alarmId
@@ -507,6 +554,15 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
         em.setJobGroupName("expire");
         ExpireAlarmQueue.getExpireAlarmMessageQueue().produce(em);
     }
+    private void cancelRelatedExpireMq(String alarmId) throws InterruptedException {
+        ExpireAlarmMessage em = new ExpireAlarmMessage();
+        em.setType("2");
+        em.setJobName(alarmId);
+        em.setJobGroupName("expire");
+//        ExpireAlarmQueue.getExpireAlarmMessageQueue().produce(em);
+		rabbitTemplate.convertAndSend(RabbitConfig.exchange, RabbitConfig.alarmMsgRoutingKey, JSON.toJSONString(em));
+
+    }
 
     /**
      * @description: 当报警恢复时边缘端删除报警信息

+ 39 - 0
src/main/resources/application.yml

@@ -47,6 +47,45 @@ spring:
     # Hibernate 配置内容,对应 HibernateProperties 类
     hibernate:
       ddl-auto: none
+  redis:
+    host: 192.168.100.93
+    port: 9944
+    database: 12
+    pool:
+     max-active: 300
+     max-wait: 3000
+     min-idle: 100     
+     max-idle: 300   
+    password.sentinel: test123 
+    password.standalone: test123
+    sentinel.master: mymaster
+    sentinel.nodes: 39.102.43.179:9940
+    use.cluster: false   
+  rabbitmq:
+    host: 192.168.100.93
+    port: 9936
+    username: pbsage
+    password: pbsage123
+    virtual-host: /test
+    connection-timeout: 2000ms
+    listener:
+      simple:
+        acknowledge-mode: manual
+        concurrency: 5
+        max-concurrency: 10
+        default-requeue-rejected: false
+        prefetch: 10
+      direct:
+        default-requeue-rejected: false
+        retry:
+          enabled: true
+    template:
+      retry:
+        enabled: true
+      mandatory: true
+    publisher-confirms: true
+    publisher-returns: true
+    send-flag: true
 group:
   code: WD   #标识哪个集团 比如万达使用WD, 华润使用HR
   alarm: