Browse Source

增加分表相关逻辑

gaoyu 3 years ago
parent
commit
e9b5cd76d2

+ 98 - 102
pom.xml

@@ -1,116 +1,112 @@
 <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-<modelVersion>4.0.0</modelVersion>
+<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
 
-<parent>
-    <groupId>com.persagy</groupId>
-    <artifactId>apm-package</artifactId>
-    <version>v1.0.0-SNAPSHOT</version>
-</parent>
+	<parent>
+		<groupId>com.persagy</groupId>
+		<artifactId>apm-package</artifactId>
+		<version>v1.0.0-SNAPSHOT</version>
+	</parent>
 
-<artifactId>energy-alarm-service</artifactId>
-<version>v1.0.0</version>
+	<artifactId>energy-alarm-service</artifactId>
+	<version>v1.0.0</version>
 
-<repositories>
-    <repository>
-        <id>snapshot</id>
-        <name>snapshot Repository</name>
-        <url>http://47.93.132.139:8081/nexus/content/repositories/snapshots/</url>
-        <snapshots>
-            <enabled>true</enabled>
-            <updatePolicy>always</updatePolicy>
-        </snapshots>
-    </repository>
-    <repository>
-        <id>persagy</id>
-        <name>persagy Repository</name>
-        <url>http://47.93.132.139:8081/nexus/content/repositories/persagy/</url>
-    </repository>
-    <repository>
-        <id>integrated</id>
-        <name>releases Repository</name>
-        <url>http://47.93.132.139:8081/nexus/content/repositories/integrated/</url>
-    </repository>
+	<repositories>
+		<repository>
+			<id>snapshot</id>
+			<name>snapshot Repository</name>
+			<url>http://47.93.132.139:8081/nexus/content/repositories/snapshots/</url>
+			<snapshots>
+				<enabled>true</enabled>
+				<updatePolicy>always</updatePolicy>
+			</snapshots>
+		</repository>
+		<repository>
+			<id>persagy</id>
+			<name>persagy Repository</name>
+			<url>http://47.93.132.139:8081/nexus/content/repositories/persagy/</url>
+		</repository>
+		<repository>
+			<id>integrated</id>
+			<name>releases Repository</name>
+			<url>http://47.93.132.139:8081/nexus/content/repositories/integrated/</url>
+		</repository>
 
-</repositories>
+	</repositories>
 
 
-<dependencies>
-    <dependency>
-        <groupId>org.projectlombok</groupId>
-        <artifactId>lombok</artifactId>
-        <optional>true</optional>
-    </dependency>
-    <!-- 项目启动 -->
-    <dependency>
-        <groupId>com.persagy</groupId>
-        <artifactId>apm-server</artifactId>
-    </dependency>
-    <!-- apm 工具包 -->
-    <dependency>
-        <groupId>com.persagy</groupId>
-        <artifactId>apm-common</artifactId>
-        <exclusions>
-            <exclusion>
-                <groupId>com.persagy</groupId>
-                <artifactId>integrated-redis-spring-boot-starter</artifactId>
-            </exclusion>
-        </exclusions>
-    </dependency>
-    <!-- lang -->
-    <dependency>
-        <groupId>commons-lang</groupId>
-        <artifactId>commons-lang</artifactId>
-    </dependency>
+	<dependencies>
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<optional>true</optional>
+		</dependency>
+		<!-- 项目启动 -->
+		<dependency>
+			<groupId>com.persagy</groupId>
+			<artifactId>apm-server</artifactId>
+		</dependency>
+		<!-- apm 工具包 -->
+		<dependency>
+			<groupId>com.persagy</groupId>
+			<artifactId>apm-common</artifactId>
+			<exclusions>
+				<exclusion>
+					<groupId>com.persagy</groupId>
+					<artifactId>integrated-redis-spring-boot-starter</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<!-- lang -->
+		<dependency>
+			<groupId>commons-lang</groupId>
+			<artifactId>commons-lang</artifactId>
+		</dependency>
 
-    <!-- gson json,java对象互转 -->
-    <dependency>
-        <groupId>com.google.code.gson</groupId>
-        <artifactId>gson</artifactId>
-    </dependency>
-    <!-- 配置中心(包含注册中心) -->
-    <dependency>
-        <groupId>com.persagy</groupId>
-        <artifactId>integrated-config-client</artifactId>
-    </dependency>
+		<!-- gson json,java对象互转 -->
+		<dependency>
+			<groupId>com.google.code.gson</groupId>
+			<artifactId>gson</artifactId>
+		</dependency>
+		<!-- 配置中心(包含注册中心) -->
+		<dependency>
+			<groupId>com.persagy</groupId>
+			<artifactId>integrated-config-client</artifactId>
+		</dependency>
 
-    <!-- 日志 -->
-    <dependency>
-        <groupId>com.persagy</groupId>
-        <artifactId>integrated-log-spring-boot-starter</artifactId>
-    </dependency>
+		<!-- 日志 -->
+		<dependency>
+			<groupId>com.persagy</groupId>
+			<artifactId>integrated-log-spring-boot-starter</artifactId>
+		</dependency>
 
-    <!-- feign -->
-    <dependency>
-        <groupId>com.persagy</groupId>
-        <artifactId>integrated-ribbon-spring-boot-starter</artifactId>
-    </dependency>
+		<!-- feign -->
+		<dependency>
+			<groupId>com.persagy</groupId>
+			<artifactId>integrated-ribbon-spring-boot-starter</artifactId>
+		</dependency>
 
-    <!-- swagger -->
-    <dependency>
-        <groupId>com.persagy</groupId>
-        <artifactId>integrated-swagger2-spring-boot-starter</artifactId>
-    </dependency>
+		<!-- swagger -->
+		<dependency>
+			<groupId>com.persagy</groupId>
+			<artifactId>integrated-swagger2-spring-boot-starter</artifactId>
+		</dependency>
 
-    <!-- 数学逻辑运算解析库-->
-    <dependency>
-        <groupId>com.googlecode.aviator</groupId>
-        <artifactId>aviator</artifactId>
-        <version>5.2.5</version>
-    </dependency>
+		<!-- 数学逻辑运算解析库-->
+		<dependency>
+			<groupId>com.googlecode.aviator</groupId>
+			<artifactId>aviator</artifactId>
+			<version>5.2.5</version>
+		</dependency>
 
-    <dependency>
-        <groupId>com.persagy</groupId>
-        <artifactId>apm-mybatis</artifactId>
-    </dependency>
-
-    <dependency>
-        <groupId>com.persagy.apm</groupId>
-        <artifactId>alarm-data-starter</artifactId>
-        <version>v2.0.0-SNAPSHOT</version>
-    </dependency>
-
-</dependencies>
+		<dependency>
+			<groupId>com.persagy</groupId>
+			<artifactId>apm-mybatis</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.persagy.apm</groupId>
+			<artifactId>alarm-data-starter</artifactId>
+			<version>v2.0.0-SNAPSHOT</version>
+		</dependency>
+	</dependencies>
 </project>

+ 15 - 14
src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/impl/ProjectAlarmRuleServiceImpl.java

@@ -1,5 +1,19 @@
 package com.persagy.apm.alarmservice.project.alarmrule.service.impl;
 
+import static org.apache.commons.lang3.math.NumberUtils.INTEGER_ONE;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -34,25 +48,14 @@ import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.ProjectAlarmRu
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.AddProjectAlarmRuleObjRelDTO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.QueryRuleObjRelDTO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.UpdateAlarmItemDTO;
-import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ObjConditionRel;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectVO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.service.IProjectAlarmRuleObjRelService;
 import com.persagy.apm.common.constant.enums.ValidEnum;
 import com.persagy.apm.common.context.AppContext;
 import com.persagy.apm.common.context.poems.PoemsContext;
-import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmConfigServiceImpl;
+
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static org.apache.commons.lang3.math.NumberUtils.INTEGER_ONE;
 
 /**
  * 项目报警规则(ProjectAlarmRule) service层
@@ -74,8 +77,6 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
     @Autowired
     private GroupManagementServiceImpl groupManagementService;
     @Autowired
-    private AlarmConfigServiceImpl alarmConfigService;
-    @Autowired
     private ProjectAlarmRuleMapper mapper;
     @Autowired
     private JmsSender jmsSender;

+ 43 - 44
src/main/java/com/persagy/apm/dmpalarm/config/TableNameAspect.java

@@ -25,50 +25,49 @@ public class TableNameAspect {
 
 	@Before("point()")
 	public void doBefore(JoinPoint joinPoint) {
-		for (Object args : joinPoint.getArgs()) {
-			if(args instanceof QueryWrapper) {
-			   QueryWrapper<?> queryWrapper = (QueryWrapper<?>)args;
-			  NormalSegmentList normal = queryWrapper.getExpression().getNormal();
-			  System.out.println(normal.get(2));
-			  Map<String,String> map=new HashMap<>();
-			  int i=1;
-			  String key="";
-			  for (ISqlSegment iSqlSegment : normal) {
-				  if(i==1) {
-					  key=iSqlSegment.getSqlSegment();
-					  map.put(iSqlSegment.getSqlSegment(), null);
-				  }
-				  if(i==3) {
-					  iSqlSegment.getSqlSegment();
-					  map.put(key, iSqlSegment.getSqlSegment());
-					  i=-1;
-				  }	  
-				  i++;
-				
-			}
-			  System.out.println(map);
+//		for (Object args : joinPoint.getArgs()) {
+//			if(args instanceof QueryWrapper) {
+//			   QueryWrapper<?> queryWrapper = (QueryWrapper<?>)args;
+//			  NormalSegmentList normal = queryWrapper.getExpression().getNormal();
 //			  Map<String,String> map=new HashMap<>();
-//			  String[] strs="and#<#>#!=#like#in#not#null#no".split("#");
-//			  String  sqlSegment = normal.getSqlSegment().toUpperCase().replace("AND", "");
-//			  for (int i = 0; i < strs.length; i++) {
-//				  sqlSegment=sqlSegment.replace(strs[i].toUpperCase(), "");
-//			 }
-//			  sqlSegment= sqlSegment.replace("(", "").replace(")", "").trim();
-//			  String[] sqlSegments = sqlSegment.split(" ");
-//			  for (String string : sqlSegments) {
-//				System.out.println(string.trim());
-		
-			  
-			   Map<String, Object> nap = queryWrapper.getParamNameValuePairs();
-				String start=(String) queryWrapper.getParamNameValuePairs().get(AlarmRecord.PROP_EFFECT_START_TIME);
-				String end=(String) queryWrapper.getParamNameValuePairs().get(AlarmRecord.PROP_EFFECT_END_TIME);
-					  System.out.println(start);
-					  System.out.println(end);
-					  
-			}else if(args instanceof AlarmRecord) {
-				System.out.println(args);
-			}
-		}
-		
+//			  int i=1;
+//			  String key="";
+//			  for (ISqlSegment iSqlSegment : normal) {
+//				  if(i==1) {
+//					  key=iSqlSegment.getSqlSegment();
+//					  map.put(iSqlSegment.getSqlSegment(), null);
+//				  }
+//				  if(i==3) {
+//					  iSqlSegment.getSqlSegment();
+//					  map.put(key, iSqlSegment.getSqlSegment());
+//					  i=-1;
+//				  }	  
+//				  i++;
+//				
+//			}
+//			  System.out.println(map);
+////			  Map<String,String> map=new HashMap<>();
+////			  String[] strs="and#<#>#!=#like#in#not#null#no".split("#");
+////			  String  sqlSegment = normal.getSqlSegment().toUpperCase().replace("AND", "");
+////			  for (int i = 0; i < strs.length; i++) {
+////				  sqlSegment=sqlSegment.replace(strs[i].toUpperCase(), "");
+////			 }
+////			  sqlSegment= sqlSegment.replace("(", "").replace(")", "").trim();
+////			  String[] sqlSegments = sqlSegment.split(" ");
+////			  for (String string : sqlSegments) {
+////				System.out.println(string.trim());
+//		
+//			  
+//			   Map<String, Object> nap = queryWrapper.getParamNameValuePairs();
+//				String start=(String) queryWrapper.getParamNameValuePairs().get(AlarmRecord.PROP_EFFECT_START_TIME);
+//				String end=(String) queryWrapper.getParamNameValuePairs().get(AlarmRecord.PROP_EFFECT_END_TIME);
+//					  System.out.println(start);
+//					  System.out.println(end);
+//					  
+//			}else if(args instanceof AlarmRecord) {
+//				System.out.println(args);
+//			}
+//		}
+//		
 	}
 }

+ 104 - 0
src/main/java/com/persagy/apm/dmpalarm/dao/ShardingMapper.java

@@ -0,0 +1,104 @@
+package com.persagy.apm.dmpalarm.dao;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Result;
+import org.apache.ibatis.annotations.Results;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.persagy.apm.dmpalarm.model.ShardingEntity;
+
+@Mapper
+public interface ShardingMapper {
+	/**
+	 * 得到数据库分表的所有表名以及对应的count
+	 * 
+	 * @param tableNamePrefix 表名的前缀
+	 * @param startTime       查询的开始时间
+	 * @param endTime         查询的结束时间
+	 * @return
+	 */
+	@Select("<script>SELECT TABLE_NAME tableName,suffix FROM ( "
+			+ "		SELECT TABLE_NAME, CONVERT(SUBSTRING_INDEX(TABLE_NAME,'_',-1),SIGNED) suffix "
+			+ "		FROM information_schema.tables  "
+			+ "		WHERE table_schema=(SELECT DATABASE()) AND TABLE_NAME LIKE CONCAT('%',#{tableNamePrefix},'%') "
+			+ "		)ls "
+			+ "		<where> "
+			+ "			<if test=\"null!= startTime and startTime > 0\"> "
+			+ "			  AND suffix &gt;=#{startTime}"
+			+ "			</if>"
+			+ "			<if test=\"null!= endTime and endTime > 0\"> "
+			+ "			  AND suffix &lt;=#{endTime}"
+			+ "			</if>"
+			+ "		</where>"
+			+ "		 ORDER BY suffix DESC;</script> ")
+	@Results({  
+		@Result(column="tableName", property="tableName"),  
+		@Result(column="suffix", property="suffix")
+		})  
+	List<ShardingEntity> getTableNameShardingList(@Param("tableNamePrefix") String tableNamePrefix,
+			@Param("startTime") Integer startTime, @Param("endTime") Integer endTime);
+
+	/**
+	 * 查询分表后的总记录数
+	 * 
+	 * @param queryCountSql    执行的SQL
+	 * @param newParamValueMap
+	 * @return
+	 */
+	@Select("${queryCountSql}")
+	Long selectShardingCount(@Param("queryCountSql") String queryCountSql,
+			@Param("ew") Map<String, Object> newParamValueMap);
+
+	/**
+	 * 查询每一张表分表后的总数
+	 * 
+	 * @param queryCountSql    执行的SQL
+	 * @param newParamValueMap
+	 * @return
+	 */
+	@Select("${queryCountSql}")
+	@Results({  
+		@Result(column="tableName", property="tableName"),  
+		@Result(column="suffix", property="suffix"),
+		@Result(column="totalCount", property="totalCount")
+		
+		}) 
+	List<ShardingEntity> selectShardingGroupTableCount(@Param("queryCountSql") String queryCountSql,
+			@Param("ew") Map<String, Object> newParamValueMap);
+	/**
+	 * 查询数据返回List<Map>
+	 * @param sql 执行的SQL
+	 * @param newParamValueMap
+	 * @return
+	 */
+	@Select("${sql}")
+	List<Map<String, Object>> selectShardingListMap(@Param("sql") String sql, @Param("ew") Map<String, Object> newParamValueMap);
+	/**
+	 * 新增
+	 * @param paramMap
+	 */
+	@Insert("${sql}")
+	void insert(Map<String, Object> paramMap); 
+	/**
+	 * 根据id修改对象
+	 * @param obj
+	 * @param paramMap
+	 */
+	@Update("${sql}")
+	void updateById(Map<String, Object> paramMap);
+	/**
+	 * 根据逐渐id删除
+	 * @param ewMap
+	 */
+	@Delete("${ew.sysSql}")
+	void deleteById(@Param(Constants.WRAPPER) Map<String, Object> ewMap);
+
+}

+ 9 - 1
src/main/java/com/persagy/apm/dmpalarm/model/AlarmRecord.java

@@ -5,7 +5,9 @@ import java.util.Date;
 import java.util.List;
 
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONField;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 
 import lombok.Data;
 
@@ -20,6 +22,7 @@ public class AlarmRecord implements Serializable {
 	private String itemCode;
 	private String projectId;
 	private String objId;
+	private String objName;
 	private String classCode;
 	private String level;
 	private String remark;
@@ -27,6 +30,7 @@ public class AlarmRecord implements Serializable {
 	private String category;
 	private Integer concern;
 	private Integer state;
+	private Integer alarmState;
 	private Date effectStartTime;
 	private Date effectEndTime;
 	/**
@@ -42,10 +46,13 @@ public class AlarmRecord implements Serializable {
 	 */
 	private Integer treatState;
 	private String createUser;
-	@TableField("`condition`")
+	@TableField(value = "`condition`", typeHandler = FastjsonTypeHandler.class)
 	private JSONObject condition;
+	@TableField(typeHandler = FastjsonTypeHandler.class)
+	@JSONField(jsonDirect=true)
 	private JSONObject triggerInfo;
 	private Date triggerTime;
+	@TableField(typeHandler = FastjsonTypeHandler.class)
 	private JSONObject endInfo;
 	private Date endTime;
 	private Date createTime;
@@ -55,6 +62,7 @@ public class AlarmRecord implements Serializable {
 	private String groupCode;
 	private String orderId;
 	private String orderState;
+	@TableField(typeHandler = FastjsonTypeHandler.class)
 	private JSONObject supplement;
 
 	/**

+ 10 - 0
src/main/java/com/persagy/apm/dmpalarm/model/ShardingEntity.java

@@ -0,0 +1,10 @@
+package com.persagy.apm.dmpalarm.model;
+
+import lombok.Data;
+@Data
+public class ShardingEntity {
+	private String tableName;
+	private Integer suffix; 
+	private Long totalCount;
+
+}

+ 109 - 0
src/main/java/com/persagy/apm/dmpalarm/service/IShardingService.java

@@ -0,0 +1,109 @@
+package com.persagy.apm.dmpalarm.service;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.persagy.apm.dmpalarm.model.ShardingEntity;
+import com.persagy.apm.dmpalarm.web.PagedResponse;
+/**
+ * 分表IShardingService
+ * @author GaoYu
+ *
+ */
+public interface IShardingService {
+	/**
+	 * 得到分表之后的表的相关信息 默认排序分表的字段倒序DESC
+	 * @param <T>
+	 * 
+	 * @param tableNamePrefix
+	 * @param startTime
+	 * @param endTime
+	 * @return
+	 */
+	<T> List<ShardingEntity> getTableNameShardingList(Class<T> cls, Date startTime, Date endTime);
+
+	/**
+	 * 查询分表后的总数
+	 * @param <T>
+	 * 
+	 * @param tableNamePrefix 分表名称前缀
+	 * @param queryWrapper    查询条件
+	 * @return
+	 */
+	<T> Long selectShardingCount(Class<T> cls, QueryWrapper<T> queryWrapper,Date startTime,Date endTime);
+
+	/**
+	 * 查询每一张表分表后的总数
+	 * @param <T>
+	 * 
+	 * @param tableNamePrefix 分表名称前缀
+	 * @param queryWrapper    查询条件
+	 * @return
+	 */
+	<T> List<ShardingEntity> selectShardingGroupTableCount(Class<T> cls, QueryWrapper<T> queryWrapper,Date startTime,Date endTime);
+
+	/**
+	 * 分页查询
+	 * 
+	 * @param tableNamePrefix
+	 * @param queryWrapper
+	 * @param pageNo
+	 * @param pageSize
+	 * @param startTime 分表起始
+	 * @param endTime 分表结束
+	 * @return
+	 */
+	<T> PagedResponse<T> selectShardingPageList(Class<T> cls, QueryWrapper<T> queryWrapper, Integer pageNo,
+			Integer pageSize,Date startTime,Date endTime);
+
+	/**
+	 * 新增
+	 * 
+	 * @param obj
+	 * @param time 分表的时间字段
+	 */
+	void save(Object obj, Date time);
+
+	/**
+	 * 更新 主键
+	 * 
+	 * @param obj
+	 * @param time 分表的时间字段
+	 */
+	void update(Object obj, Date time);
+
+	/**
+	 * 删除 主键
+	 * 
+	 * @param obj
+	 * @param time 分表的时间字段
+	 */
+	void delete(Object obj, Date time);
+
+	/**
+	 * 删除 主键
+	 * 
+	 * @param obj
+	 */
+	void delete(Object obj);
+
+	/**
+	 * 删除或更改
+	 * 
+	 * @param obj
+	 * @param time
+	 */
+	void saveOrUpdate(Object obj, Date time);
+
+	/**
+	 * 根据主键
+	 * 
+	 * @param <T>
+	 * @param cls
+	 * @param id
+	 * @return
+	 */
+	<T> T getById(Class<T> cls, Serializable id);
+}

+ 2 - 2
src/main/java/com/persagy/apm/dmpalarm/service/impl/AlarmConfigServiceImpl.java

@@ -463,7 +463,7 @@ public class AlarmConfigServiceImpl extends BaseServiceImpl<AlarmConfig> impleme
         //		alarmConfig.setUserDefined(1);
         alarmConfig.setUpdateUser(alarmParam.userId);
         alarmConfig.setUpdateTime(new Date());
-        save(alarmConfig);
+        saveOrUpdate(alarmConfig);
         response.add("id", alarmConfig.getId());
         // 报警定义发生变化,向mq推送消息
         DmpMessage msg = getUpdateConfigsDmpMessage(Lists.newArrayList(alarmConfig));
@@ -647,7 +647,7 @@ public class AlarmConfigServiceImpl extends BaseServiceImpl<AlarmConfig> impleme
             updateEntityByParam(param, alarmConfig);
             configs.add(alarmConfig);
         }
-        saveBatch(configs);
+        saveOrUpdateBatch(configs);
         DmpMessage updateConfigsDmpMessage = getUpdateConfigsDmpMessage(configs);
         messageProcesser.convertAndSend(updateConfigsDmpMessage);
         Date date1 = new Date();

+ 1 - 1
src/main/java/com/persagy/apm/dmpalarm/service/impl/AlarmItemServiceImpl.java

@@ -126,7 +126,7 @@ public class AlarmItemServiceImpl extends BaseServiceImpl<AlarmItem>
         }
         entity.setUpdateUser(alarmParam.userId);
         entity.setUpdateTime(new Date());
-        save(entity);
+        saveOrUpdate(entity);
         response.add("id", entity.getId());
         /* 拼装需要推送至消息队列的消息 */
         DmpMessage msg = new DmpMessage();

+ 312 - 276
src/main/java/com/persagy/apm/dmpalarm/service/impl/AlarmRecordServiceImpl.java

@@ -1,29 +1,44 @@
 package com.persagy.apm.dmpalarm.service.impl;
 
-import cn.hutool.core.date.DateUtil;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+
+import javax.annotation.Resource;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.persagy.apm.dmpalarm.config.DmpParameterStorage;
 import com.persagy.apm.dmpalarm.criteria.JsonCriteria;
-import com.persagy.apm.dmpalarm.enumeration.*;
+import com.persagy.apm.dmpalarm.enumeration.EnumAlarmListType;
+import com.persagy.apm.dmpalarm.enumeration.EnumAlarmLogType;
+import com.persagy.apm.dmpalarm.enumeration.EnumAlarmMessageType;
+import com.persagy.apm.dmpalarm.enumeration.EnumAlarmRecordWithColumns;
+import com.persagy.apm.dmpalarm.enumeration.EnumAlarmState;
+import com.persagy.apm.dmpalarm.enumeration.EnumAlarmTreatState;
 import com.persagy.apm.dmpalarm.json.JacksonMapper;
 import com.persagy.apm.dmpalarm.model.AlarmLog;
 import com.persagy.apm.dmpalarm.model.AlarmRecord;
 import com.persagy.apm.dmpalarm.model.DmpMessage;
 import com.persagy.apm.dmpalarm.service.IAlarmLogService;
 import com.persagy.apm.dmpalarm.service.IAlarmRecordService;
+import com.persagy.apm.dmpalarm.service.IShardingService;
 import com.persagy.apm.dmpalarm.utils.CheckRequiredParam;
 import com.persagy.apm.dmpalarm.utils.DatePatternStyle;
 import com.persagy.apm.dmpalarm.web.MapResponse;
 import com.persagy.apm.dmpalarm.web.PagedResponse;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
 
-import javax.annotation.Resource;
-import java.util.*;
+import cn.hutool.core.date.DateUtil;
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * 报警记录(AlarmRecord) service层
@@ -35,291 +50,312 @@ import java.util.*;
 @Slf4j
 public class AlarmRecordServiceImpl extends BaseServiceImpl<AlarmRecord> implements IAlarmRecordService {
 
-    @Resource
-    private IAlarmLogService alarmLogService;
-
-
-    @Override
-    public PagedResponse<AlarmRecord> query(JsonCriteria jsonCriteria) {
-        try {
-            QueryWrapper<AlarmRecord> queryWrapper = criteriaUtils.handleAlarmConditions(jsonCriteria, AlarmRecord.class);
-            this.addAlarmQueryCondition(jsonCriteria.getCriteria(), queryWrapper);
-            PagedResponse<AlarmRecord> resp = criteriaUtils.getPagedResponse(jsonCriteria, AlarmRecord.class, queryWrapper, baseMapper);
-
-            PagedResponse<AlarmRecord> resultAlarmRecordList = new PagedResponse<>();
-            resultAlarmRecordList.setCount(resp.getCount());
-            List<AlarmRecord> dataList = resp.getData();
-            if (CollectionUtils.isEmpty(dataList)) {
-                return resultAlarmRecordList;
-            }
-
-            // 如果需要查询日志相关的信息,需使用withColumns参数
-            Set<String> withColumns = jsonCriteria.getWithColumns();
-            boolean withLogInfo = !CollectionUtils.isEmpty(withColumns);
+	@Resource
+	private IAlarmLogService alarmLogService;
+	@Resource
+	private IShardingService shardingService;
 
-            Map<String, List<AlarmLog>> alarmLogListMap = new HashMap<>();
-            // 获取报警日志
-            if (withLogInfo && (withColumns.contains(EnumAlarmRecordWithColumns.ignoreTime.name())
-                    || withColumns.contains(EnumAlarmRecordWithColumns.treatEndTime.name()))) {
-                List<String> recordIdList = new ArrayList<>();
-                dataList.forEach(alarmRecord -> recordIdList.add(alarmRecord.getId()));
-                alarmLogListMap = alarmLogService.getAlarmLogMap(recordIdList);
-            }
+	@Override
+	public PagedResponse<AlarmRecord> query(JsonCriteria jsonCriteria) {
+		try {
+			QueryWrapper<AlarmRecord> queryWrapper = criteriaUtils.handleAlarmConditions(jsonCriteria,
+					AlarmRecord.class);
+			this.addAlarmQueryCondition(jsonCriteria.getCriteria(), queryWrapper);
+			JSONObject criteria = jsonCriteria.getCriteria();
+			JSONObject triggerTimeJson = criteria.getJSONObject("triggerTime");
+			Date startTime = null;
+			Date endTime = null;
+			if (null != triggerTimeJson && !triggerTimeJson.isEmpty()) {
+				String gt = triggerTimeJson.getString("$gt");
+				gt = StringUtils.isNotBlank(gt) ? gt : triggerTimeJson.getString("$gte");
+				if (StringUtils.isNotBlank(gt)) {
+					startTime = DateUtil.parse(gt);
+				}
+				String lt = triggerTimeJson.getString("$lt");
+				lt = StringUtils.isNotBlank(lt) ? lt : triggerTimeJson.getString("$lte");
+				if (StringUtils.isNotBlank(lt)) {
+					endTime = DateUtil.parse(lt);
+				}
+			}
 
-            List<AlarmRecord> alarmRecordModels = new ArrayList<>(dataList.size());
-            for (AlarmRecord entity : dataList) {
-                alarmRecordModels.add(entity);
+			PagedResponse<AlarmRecord> resp = shardingService.selectShardingPageList(AlarmRecord.class, queryWrapper,
+					jsonCriteria.getPage(), jsonCriteria.getSize(), startTime, endTime);
+			PagedResponse<AlarmRecord> resultAlarmRecordList = new PagedResponse<>();
+			resultAlarmRecordList.setCount(resp.getCount());
+			List<AlarmRecord> dataList = resp.getData();
+			if (CollectionUtils.isEmpty(dataList)) {
+				return resultAlarmRecordList;
+			}
 
-                if (!withLogInfo) {
-                    continue;
-                }
-                // 如果需要日志信息
-                List<AlarmLog> alarmLogList = new ArrayList<>();
-                if (alarmLogListMap.containsKey(entity.getId())) {
-                    alarmLogList = alarmLogListMap.get(entity.getId());
-                }
-                if (withColumns.contains(EnumAlarmRecordWithColumns.ignoreTime.name())) {
-                    Date ignoreAlarmTime = getCreateTime(alarmLogList, EnumAlarmLogType.TREATMODE, 1);
-                    entity.setIgnoreTime(ignoreAlarmTime);
-                }
-                if (withColumns.contains(EnumAlarmRecordWithColumns.treatEndTime.name())) {
-                    Date treatEndTime = getCreateTime(alarmLogList, EnumAlarmLogType.TREATSTATE, 3);
-                    entity.setTreatEndTime(treatEndTime);
-                }
-            }
-            resultAlarmRecordList.setData(alarmRecordModels);
-            return resultAlarmRecordList;
-        } catch (Exception e) {
-            log.error("alarmRecord query page error JsonCriteria is {}", jsonCriteria.toString(), e);
-        }
-        return new PagedResponse<>();
-    }
+			// 如果需要查询日志相关的信息,需使用withColumns参数
+			Set<String> withColumns = jsonCriteria.getWithColumns();
+			boolean withLogInfo = !CollectionUtils.isEmpty(withColumns);
 
-    public Date getCreateTime(List<AlarmLog> alarmLogList, EnumAlarmLogType type, int after) {
-        Date createTime = null;
-        if (!CollectionUtils.isEmpty(alarmLogList)) {
-            for (AlarmLog alarmLog : alarmLogList) {
-                if (type.equals(alarmLog.getType()) && alarmLog.getAfter() == after) {
-                    createTime = alarmLog.getCreateTime();
-                }
-            }
-        }
-        return createTime;
-    }
+			Map<String, List<AlarmLog>> alarmLogListMap = new HashMap<>();
+			// 获取报警日志
+			if (withLogInfo && (withColumns.contains(EnumAlarmRecordWithColumns.ignoreTime.name())
+					|| withColumns.contains(EnumAlarmRecordWithColumns.treatEndTime.name()))) {
+				List<String> recordIdList = new ArrayList<>();
+				dataList.forEach(alarmRecord -> recordIdList.add(alarmRecord.getId()));
+				alarmLogListMap = alarmLogService.getAlarmLogMap(recordIdList);
+			}
 
-    /**
-     * 添加查询报警条件 CURRENT 当前报警 HISTORY 历史报警
-     *
-     * @param <T>           entity object
-     * @param criteria      JSONObject
-     * @param queryWrappers query alarm criteria
-     */
-    private <T> void addAlarmQueryCondition(JSONObject criteria, QueryWrapper<T> queryWrappers) {
-        String listType = criteria.getString("listType");
-        if (EnumAlarmListType.CURRENT.name().equals(listType)) {
-            queryWrappers.and(andWrapper -> andWrapper.eq(AlarmRecord.PROP_STATE, EnumAlarmState.UN_HANDLE.getType())
-                    .or(orw -> orw.eq(AlarmRecord.PROP_TREAT_STATE, EnumAlarmState.UN_HANDLE.getType())
-                            .eq(AlarmRecord.PROP_TREAT_STATE, EnumAlarmTreatState.HANDLING.getType())));
-        }
+			List<AlarmRecord> alarmRecordModels = new ArrayList<>(dataList.size());
+			for (AlarmRecord entity : dataList) {
+				alarmRecordModels.add(entity);
 
-        if (EnumAlarmListType.HISTORY.name().equals(listType)) {
-            queryWrappers.and(andWrapper -> andWrapper.eq(AlarmRecord.PROP_STATE, EnumAlarmState.END.getType())
-                    .or(orw -> orw.eq(AlarmRecord.PROP_STATE, EnumAlarmState.EXPIRE.getType())
-                            .eq(AlarmRecord.PROP_TREAT_STATE, EnumAlarmTreatState.DONE.getType())));
+				if (!withLogInfo) {
+					continue;
+				}
+				// 如果需要日志信息
+				List<AlarmLog> alarmLogList = new ArrayList<>();
+				if (alarmLogListMap.containsKey(entity.getId())) {
+					alarmLogList = alarmLogListMap.get(entity.getId());
+				}
+				if (withColumns.contains(EnumAlarmRecordWithColumns.ignoreTime.name())) {
+					Date ignoreAlarmTime = getCreateTime(alarmLogList, EnumAlarmLogType.TREATMODE, 1);
+					entity.setIgnoreTime(ignoreAlarmTime);
+				}
+				if (withColumns.contains(EnumAlarmRecordWithColumns.treatEndTime.name())) {
+					Date treatEndTime = getCreateTime(alarmLogList, EnumAlarmLogType.TREATSTATE, 3);
+					entity.setTreatEndTime(treatEndTime);
+				}
+			}
+			resultAlarmRecordList.setData(alarmRecordModels);
+			return resultAlarmRecordList;
+		} catch (Exception e) {
+			log.error("alarmRecord query page error JsonCriteria is {}", jsonCriteria.toString(), e);
+		}
+		return new PagedResponse<>();
+	}
 
-        }
-    }
+	public Date getCreateTime(List<AlarmLog> alarmLogList, EnumAlarmLogType type, int after) {
+		Date createTime = null;
+		if (!CollectionUtils.isEmpty(alarmLogList)) {
+			for (AlarmLog alarmLog : alarmLogList) {
+				if (type.equals(alarmLog.getType()) && alarmLog.getAfter() == after) {
+					createTime = alarmLog.getCreateTime();
+				}
+			}
+		}
+		return createTime;
+	}
 
-    @Override
-    @Transactional
-    public MapResponse create(AlarmRecord entity) {
-        MapResponse response = new MapResponse();
-        AlarmParam alarmParam = prepareParam(response);
-        if (alarmParam == null) {
-            return response;
-        }
-        // 必填项校验
-        String checkResult = CheckRequiredParam.check(entity, "itemCode", "objId", "level");
-        if (!StringUtils.isEmpty(checkResult)) {
-            response.setFail(checkResult);
-            return response;
-        }
+	/**
+	 * 添加查询报警条件 CURRENT 当前报警 HISTORY 历史报警
+	 *
+	 * @param <T>           entity object
+	 * @param criteria      JSONObject
+	 * @param queryWrappers query alarm criteria
+	 */
+	private <T> void addAlarmQueryCondition(JSONObject criteria, QueryWrapper<T> queryWrappers) {
+		String listType = criteria.getString("listType");
+		if (EnumAlarmListType.CURRENT.name().equals(listType)) {
+			queryWrappers.and(andWrapper -> andWrapper.eq(AlarmRecord.PROP_STATE, EnumAlarmState.UN_HANDLE.getType())
+					.or(orw -> orw.eq(AlarmRecord.PROP_TREAT_STATE, EnumAlarmState.UN_HANDLE.getType())
+							.eq(AlarmRecord.PROP_TREAT_STATE, EnumAlarmTreatState.HANDLING.getType())));
+		}
 
-        String id = UUID.randomUUID().toString();
-        // 如果创建时,入参包含id,则使用入参中的id。但需要先校验id是否已存在
-        if (!StringUtils.isEmpty(entity.getId())) {
+		if (EnumAlarmListType.HISTORY.name().equals(listType)) {
+			queryWrappers.and(andWrapper -> andWrapper.eq(AlarmRecord.PROP_STATE, EnumAlarmState.END.getType())
+					.or(orw -> orw.eq(AlarmRecord.PROP_STATE, EnumAlarmState.EXPIRE.getType())
+							.eq(AlarmRecord.PROP_TREAT_STATE, EnumAlarmTreatState.DONE.getType())));
 
-            AlarmRecord alarmRecord = getById(entity.getId());
-            if (null != alarmRecord) {
-                response.setFail("已存在相同id的报警记录!创建失败!");
-                return response;
-            } else {
-                id = entity.getId();
-            }
-        }
-        entity.setId(id);
-        entity.setCreateUser(alarmParam.userId);
-        if (entity.getCreateTime() != null) {
-            entity.setCreateTime(entity.getCreateTime());
-        } else {
-            entity.setCreateTime(new Date());
-        }
-        // 默认处理状态为未处理
-        if (entity.getTreatState() == null) {
-            entity.setTreatState(1);
-        }
-        entity.setValid(1);
-        entity.setProjectId(alarmParam.projectId);
-        entity.setGroupCode(alarmParam.groupCode);
-        save(entity);
-        response.add("id", entity.getId());
-        // 推送消息至mq
-        DmpMessage msg = new DmpMessage();
-        msg.setMid(UUID.randomUUID().toString());
-        msg.setType(EnumAlarmMessageType.ALARM_RECORD_CREATE.getValue());
-        return getMapResponse(entity, response, msg);
-    }
+		}
+	}
 
-    private MapResponse getMapResponse(AlarmRecord entity, MapResponse response, DmpMessage msg) {
-        msg.setGroupCode(DmpParameterStorage.getGroupCode());
-        msg.setProjectId(DmpParameterStorage.getProjectId());
-        msg.setTargetId(entity.getId());
-        msg.add("obj", JacksonMapper.toSimpleJson(entity));
-        msg.setAppId(DmpParameterStorage.getAppId());
-        msg.setSendTime(DateUtil.format(new Date(), DatePatternStyle.PATTERN_YYYYMMDDHHMMSS));
-        response.add(msg);
-        return response;
-    }
+	@Override
+	@Transactional
+	public MapResponse create(AlarmRecord entity) {
+		MapResponse response = new MapResponse();
+		AlarmParam alarmParam = prepareParam(response);
+		if (alarmParam == null) {
+			return response;
+		}
+		// 必填项校验
+		String checkResult = CheckRequiredParam.check(entity, "itemCode", "objId", "level");
+		if (!StringUtils.isEmpty(checkResult)) {
+			response.setFail(checkResult);
+			return response;
+		}
+		String id = UUID.randomUUID().toString();
+		// 如果创建时,入参包含id,则使用入参中的id。但需要先校验id是否已存在
+		if (!StringUtils.isEmpty(entity.getId())) {
+			AlarmRecord alarmRecord = shardingService.getById(entity.getClass(), id);
+			if (null != alarmRecord) {
+				response.setFail("已存在相同id的报警记录!创建失败!");
+				return response;
+			} else {
+				id = entity.getId();
+			}
+		}
+		entity.setId(id);
+		entity.setCreateUser(alarmParam.userId);
+		if (entity.getCreateTime() != null) {
+			entity.setCreateTime(entity.getCreateTime());
+		} else {
+			entity.setCreateTime(new Date());
+		}
+		// 默认处理状态为未处理
+		if (entity.getTreatState() == null) {
+			entity.setTreatState(1);
+		}
+		entity.setValid(1);
+		entity.setProjectId(alarmParam.projectId);
+		entity.setGroupCode(alarmParam.groupCode);
+		if (entity.getState() == 1 || (entity.getTreatState() == 1 && entity.getTreatState() == 2)) {
+			entity.setAlarmState(0);
+		} else {
+			entity.setAlarmState(1);
+		}
+		shardingService.save(entity, entity.getTriggerTime());
+		response.add("id", entity.getId());
+		// 推送消息至mq
+		DmpMessage msg = new DmpMessage();
+		msg.setMid(UUID.randomUUID().toString());
+		msg.setType(EnumAlarmMessageType.ALARM_RECORD_CREATE.getValue());
+		return getMapResponse(entity, response, msg);
+	}
 
-    private AlarmLog initAlarmLogModel(AlarmRecord param) {
-        AlarmLog alarmLog = new AlarmLog();
-        alarmLog.setRecordId(param.getId());
-        alarmLog.setCreateTime(new Date());
-        alarmLog.setCreateUser(DmpParameterStorage.getUserId());
-        alarmLog.setProjectId(DmpParameterStorage.getProjectId());
-        alarmLog.setGroupCode(DmpParameterStorage.getGroupCode());
-        return alarmLog;
-    }
+	private MapResponse getMapResponse(AlarmRecord entity, MapResponse response, DmpMessage msg) {
+		msg.setGroupCode(DmpParameterStorage.getGroupCode());
+		msg.setProjectId(DmpParameterStorage.getProjectId());
+		msg.setTargetId(entity.getId());
+		msg.add("obj", JacksonMapper.toSimpleJson(entity));
+		msg.setAppId(DmpParameterStorage.getAppId());
+		msg.setSendTime(DateUtil.format(new Date(), DatePatternStyle.PATTERN_YYYYMMDDHHMMSS));
+		response.add(msg);
+		return response;
+	}
 
-    @Override
-    @Transactional
-    public MapResponse update(AlarmRecord param) {
-        MapResponse response = new MapResponse();
-        AlarmRecord alarmRecord = getById(param.getId());
-        if (alarmRecord == null) {
-            response.setFail("无法获取到要更新的数据!");
-            return response;
-        }
-        AlarmParam alarmParam = prepareParam(response);
-        if (alarmParam == null) {
-            return response;
-        }
-        if (param.getName() != null && !param.getName().isEmpty()) {
-            alarmRecord.setName(param.getName());
-        }
-        if (param.getRemark() != null && !param.getRemark().isEmpty()) {
-            alarmRecord.setRemark(param.getRemark());
-        }
-        // 状态修改记录日志
-        if (param.getState() != null) {
-            if (!param.getState().equals(alarmRecord.getState())) {
-                AlarmLog alarmLog = initAlarmLogModel(param);
-                alarmLog.setType(EnumAlarmLogType.ALARMSTATE);
-                alarmLog.setNature(alarmRecord.getNature());
-                alarmLog.setBefore(alarmRecord.getState());
-                alarmLog.setAfter(param.getState());
-                alarmLogService.create(alarmLog);
-            }
-            alarmRecord.setState(param.getState());
-        }
-        if (param.getNature() != null) {
-            alarmRecord.setNature(param.getNature());
-        }
-        // 处理方式修改记录日志
-        if (param.getTreatMode() != null) {
-            if (!param.getTreatMode().equals(alarmRecord.getTreatMode())) {
-                AlarmLog alarmLogModel = initAlarmLogModel(param);
-                alarmLogModel.setType(EnumAlarmLogType.TREATMODE);
-                alarmLogModel.setNature(alarmRecord.getNature());
-                alarmLogModel.setBefore(alarmRecord.getTreatMode());
-                alarmLogModel.setAfter(param.getTreatMode());
-                alarmLogService.create(alarmLogModel);
-            }
-            alarmRecord.setTreatMode(param.getTreatMode());
-        }
-        // 处理状态更改记录日志
-        if (param.getTreatState() != null) {
-            if (!param.getTreatState().equals(alarmRecord.getTreatState())) {
-                AlarmLog alarmLogModel = initAlarmLogModel(param);
-                alarmLogModel.setType(EnumAlarmLogType.TREATSTATE);
-                alarmLogModel.setNature(alarmRecord.getNature());
-                alarmLogModel.setBefore(alarmRecord.getTreatState());
-                alarmLogModel.setAfter(param.getTreatState());
-                alarmLogService.create(alarmLogModel);
-            }
-            alarmRecord.setTreatState(param.getTreatState());
-        }
+	private AlarmLog initAlarmLogModel(AlarmRecord param) {
+		AlarmLog alarmLog = new AlarmLog();
+		alarmLog.setRecordId(param.getId());
+		alarmLog.setCreateTime(new Date());
+		alarmLog.setCreateUser(DmpParameterStorage.getUserId());
+		alarmLog.setProjectId(DmpParameterStorage.getProjectId());
+		alarmLog.setGroupCode(DmpParameterStorage.getGroupCode());
+		return alarmLog;
+	}
 
-        // 恢复值
-        if (param.getEndInfo() != null) {
-            alarmRecord.setEndInfo(param.getEndInfo());
-        }
-        // 恢复时间
-        if (param.getEndTime() != null) {
-            alarmRecord.setEndTime(param.getEndTime());
-        }
-        // 工单id
-        if (param.getOrderId() != null) {
-            alarmRecord.setOrderId(param.getOrderId());
-        }
-        // 工单状态
-        if (param.getOrderState() != null) {
-            alarmRecord.setOrderState(param.getOrderState());
-        }
-        // 补充说明
-        if (param.getSupplement() != null) {
-            alarmRecord.setSupplement(param.getSupplement());
-        }
-        // 报警等级
-        if (!StringUtils.isEmpty(param.getLevel())) {
-            alarmRecord.setLevel(param.getLevel());
-        }
-        alarmRecord.setUpdateUser(alarmParam.userId);
-        alarmRecord.setUpdateTime(new Date());
-        save(alarmRecord);
+	@Override
+	@Transactional
+	public MapResponse update(AlarmRecord param) {
+		MapResponse response = new MapResponse();
+		AlarmRecord alarmRecord = shardingService.getById(AlarmRecord.class, param.getId());
+		if (alarmRecord == null) {
+			response.setFail("无法获取到要更新的数据!");
+			return response;
+		}
+		AlarmParam alarmParam = prepareParam(response);
+		if (alarmParam == null) {
+			return response;
+		}
+		if (param.getName() != null && !param.getName().isEmpty()) {
+			alarmRecord.setName(param.getName());
+		}
+		if (param.getRemark() != null && !param.getRemark().isEmpty()) {
+			alarmRecord.setRemark(param.getRemark());
+		}
+		// 状态修改记录日志
+		if (param.getState() != null) {
+			if (!param.getState().equals(alarmRecord.getState())) {
+				AlarmLog alarmLog = initAlarmLogModel(param);
+				alarmLog.setType(EnumAlarmLogType.ALARMSTATE);
+				alarmLog.setNature(alarmRecord.getNature());
+				alarmLog.setBefore(alarmRecord.getState());
+				alarmLog.setAfter(param.getState());
+				alarmLogService.create(alarmLog);
+			}
+			alarmRecord.setState(param.getState());
+		}
+		if (param.getNature() != null) {
+			alarmRecord.setNature(param.getNature());
+		}
+		// 处理方式修改记录日志
+		if (param.getTreatMode() != null) {
+			if (!param.getTreatMode().equals(alarmRecord.getTreatMode())) {
+				AlarmLog alarmLogModel = initAlarmLogModel(param);
+				alarmLogModel.setType(EnumAlarmLogType.TREATMODE);
+				alarmLogModel.setNature(alarmRecord.getNature());
+				alarmLogModel.setBefore(alarmRecord.getTreatMode());
+				alarmLogModel.setAfter(param.getTreatMode());
+				alarmLogService.create(alarmLogModel);
+			}
+			alarmRecord.setTreatMode(param.getTreatMode());
+		}
+		// 处理状态更改记录日志
+		if (param.getTreatState() != null) {
+			if (!param.getTreatState().equals(alarmRecord.getTreatState())) {
+				AlarmLog alarmLogModel = initAlarmLogModel(param);
+				alarmLogModel.setType(EnumAlarmLogType.TREATSTATE);
+				alarmLogModel.setNature(alarmRecord.getNature());
+				alarmLogModel.setBefore(alarmRecord.getTreatState());
+				alarmLogModel.setAfter(param.getTreatState());
+				alarmLogService.create(alarmLogModel);
+			}
+			alarmRecord.setTreatState(param.getTreatState());
+		}
 
-        response.add("id", alarmRecord.getId());
-        // 推送消息至mq
-        DmpMessage msg = new DmpMessage();
-        msg.setMid(UUID.randomUUID().toString());
-        msg.setType(EnumAlarmMessageType.ALARM_RECORD_UPDATE.getValue());
-        return getMapResponse(alarmRecord, response, msg);
+		// 恢复值
+		if (param.getEndInfo() != null) {
+			alarmRecord.setEndInfo(param.getEndInfo());
+		}
+		// 恢复时间
+		if (param.getEndTime() != null) {
+			alarmRecord.setEndTime(param.getEndTime());
+		}
+		// 工单id
+		if (param.getOrderId() != null) {
+			alarmRecord.setOrderId(param.getOrderId());
+		}
+		// 工单状态
+		if (param.getOrderState() != null) {
+			alarmRecord.setOrderState(param.getOrderState());
+		}
+		// 补充说明
+		if (param.getSupplement() != null) {
+			alarmRecord.setSupplement(param.getSupplement());
+		}
+		// 报警等级
+		if (!StringUtils.isEmpty(param.getLevel())) {
+			alarmRecord.setLevel(param.getLevel());
+		}
+		alarmRecord.setUpdateUser(alarmParam.userId);
+		alarmRecord.setUpdateTime(new Date());
+		shardingService.saveOrUpdate(alarmRecord, alarmRecord.getTriggerTime());
+		response.add("id", alarmRecord.getId());
+		// 推送消息至mq
+		DmpMessage msg = new DmpMessage();
+		msg.setMid(UUID.randomUUID().toString());
+		msg.setType(EnumAlarmMessageType.ALARM_RECORD_UPDATE.getValue());
+		return getMapResponse(alarmRecord, response, msg);
 
-    }
+	}
 
-    @Override
-    @Transactional
-    public MapResponse batchUpdate(AlarmRecord param) {
-        MapResponse response = new MapResponse();
+	@Override
+	@Transactional
+	public MapResponse batchUpdate(AlarmRecord param) {
+		MapResponse response = new MapResponse();
 
-        List<AlarmRecord> alarmRecordModelList = param.getAlarmRecordModels();
-        if (CollectionUtils.isEmpty(alarmRecordModelList)) {
-            response.setFail("批量更新报警记录,没有传入需要更新的对象");
-            return response;
-        }
+		List<AlarmRecord> alarmRecordModelList = param.getAlarmRecordModels();
+		if (CollectionUtils.isEmpty(alarmRecordModelList)) {
+			response.setFail("批量更新报警记录,没有传入需要更新的对象");
+			return response;
+		}
 
-        // 一次最多更新200条数据
-        if (alarmRecordModelList.size() > 200) {
-            response.setFail("一次最多更新200条数据");
-            return response;
-        }
+		// 一次最多更新200条数据
+		if (alarmRecordModelList.size() > 200) {
+			response.setFail("一次最多更新200条数据");
+			return response;
+		}
 
-        List<DmpMessage> msgList = new ArrayList<>();
-        alarmRecordModelList.forEach(alarmRecordModel -> {
-            MapResponse updateResponse = update(alarmRecordModel);
-            msgList.addAll(updateResponse.getMessageList());
-        });
-        response.add(msgList);
-        return response;
-    }
+		List<DmpMessage> msgList = new ArrayList<>();
+		alarmRecordModelList.forEach(alarmRecordModel -> {
+			MapResponse updateResponse = update(alarmRecordModel);
+			msgList.addAll(updateResponse.getMessageList());
+		});
+		response.add(msgList);
+		return response;
+	}
 }

+ 1 - 1
src/main/java/com/persagy/apm/dmpalarm/service/impl/AlarmTargetServiceImpl.java

@@ -181,7 +181,7 @@ public class AlarmTargetServiceImpl extends BaseServiceImpl<AlarmTarget>
         }
         alarmTarget.setUpdateUser(alarmParam.userId);
         alarmTarget.setUpdateTime(new Date());
-        save(alarmTarget);
+        saveOrUpdate(alarmTarget);
         response.add("id", alarmTarget.getId());
         if (influenceConfigs) {
             /* 拼装需要推送至消息队列的消息 */

+ 0 - 1
src/main/java/com/persagy/apm/dmpalarm/service/impl/BaseServiceImpl.java

@@ -43,5 +43,4 @@ public class BaseServiceImpl<T> extends ServiceImpl<BaseMapper<T>, T> {
         }
         return param;
     }
-
 }

+ 338 - 0
src/main/java/com/persagy/apm/dmpalarm/service/impl/ShardingServiceImpl.java

@@ -0,0 +1,338 @@
+package com.persagy.apm.dmpalarm.service.impl;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
+
+import org.apache.ibatis.type.TypeHandler;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import com.baomidou.mybatisplus.core.toolkit.Assert;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.persagy.apm.dmpalarm.dao.ShardingMapper;
+import com.persagy.apm.dmpalarm.model.ShardingEntity;
+import com.persagy.apm.dmpalarm.service.IShardingService;
+import com.persagy.apm.dmpalarm.utils.DatePatternStyle;
+import com.persagy.apm.dmpalarm.utils.UtilsTools;
+import com.persagy.apm.dmpalarm.web.PagedResponse;
+import com.persagy.common.utils.StringUtil;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Service
+public class ShardingServiceImpl implements IShardingService {
+
+	private final String COUNT_SQL = "SELECT COUNT(*) total";
+
+	private final String ALL_FIELD_SQL = "SELECT * ";
+	@Autowired
+	SqlSessionTemplate sqlSessionTemplate;
+	@Autowired
+	private ShardingMapper shardingMapper;
+
+	@Override
+	public <T> List<ShardingEntity> getTableNameShardingList(Class<T> cls, Date startTime, Date endTime) {
+		Integer startTimeInterger = null;
+		Integer endTimeInterger = null;
+		if (null != startTime) {
+			startTimeInterger = Integer.valueOf(DateUtil.format(startTime, DatePatternStyle.PATTERN_YYYYMM));
+		}
+		if (null != endTime) {
+			endTimeInterger = Integer.valueOf(DateUtil.format(endTime, DatePatternStyle.PATTERN_YYYYMM));
+		}
+		TableInfo tableInfo = TableInfoHelper.getTableInfo(cls);
+		if (StrUtil.isBlank(tableInfo.getTableName())) {
+			log.error("getTableNameShardingList tableNamePrefix is empty");
+			return new ArrayList<>();
+		}
+		return shardingMapper.getTableNameShardingList(tableInfo.getTableName(), startTimeInterger, endTimeInterger);
+	}
+
+	@Override
+	public <T> Long selectShardingCount(Class<T> cls, QueryWrapper<T> queryWrapper, Date startTime, Date endTime) {
+		Map<String, Object> newParamValueMap = new HashMap<>();
+		List<ShardingEntity> tableList = this.getTableNameShardingList(cls, null, null);
+		String sql = this.shardingSplicingSQL(cls, queryWrapper, newParamValueMap, COUNT_SQL, tableList);
+		String queryCountSql = "SELECT SUM(ls.total)  FROM ( " + sql + " )ls";
+		Long count = shardingMapper.selectShardingCount(queryCountSql, newParamValueMap);
+		return count;
+	}
+
+	@Override
+	public <T> List<ShardingEntity> selectShardingGroupTableCount(Class<T> cls, QueryWrapper<T> queryWrapper,
+			Date startTime, Date endTime) {
+		Map<String, Object> newParamValueMap = new HashMap<>();
+		List<ShardingEntity> tableList = this.getTableNameShardingList(cls, startTime, endTime);
+		String sql = this.shardingSplicingSQL(cls, queryWrapper, newParamValueMap, COUNT_SQL, tableList);
+		String queryCountSql = "SELECT total totalCount,tableName FROM ( " + sql + " ) ls";
+		List<ShardingEntity> list = shardingMapper.selectShardingGroupTableCount(queryCountSql, newParamValueMap);
+		return list;
+	}
+
+	private <T> String shardingSplicingSQL(Class<T> cls, QueryWrapper<?> queryWrapper,
+			Map<String, Object> newParamValueMap, String sqlPrefix, List<ShardingEntity> tableNameList) {
+		List<String> tempQuerySqlList = new ArrayList<>();
+		String customSqlSegment = queryWrapper.getCustomSqlSegment();
+		String orderBySql = "";
+		if (customSqlSegment.contains("ORDER BY")) {
+			orderBySql = customSqlSegment.substring(customSqlSegment.lastIndexOf("ORDER BY"),
+					customSqlSegment.length());
+		}
+		Map<String, Object> oldParamValueMap = queryWrapper.getParamNameValuePairs();
+		for (int i = 0; i < tableNameList.size(); i++) {
+			ShardingEntity shardingEntity = tableNameList.get(i);
+			int j = 0;
+			String sqlWhere = new String(customSqlSegment.getBytes()).replace(orderBySql, "");
+			for (Map.Entry<String, Object> entry : oldParamValueMap.entrySet()) {
+				String oldParamKey = Constants.WRAPPER + ".paramNameValuePairs." + entry.getKey();
+				String newParamKey = "table@" + shardingEntity.getTableName() + "@" + Constants.WRAPPER_PARAM + j;
+				sqlWhere = sqlWhere.replace(oldParamKey, Constants.WRAPPER_DOT + newParamKey);
+				newParamValueMap.put(newParamKey, entry.getValue());
+				j++;
+			}
+			tempQuerySqlList.add(sqlPrefix + ",'" + shardingEntity.getTableName()
+					+ "' tableName,CONVERT(SUBSTRING_INDEX('" + shardingEntity.getTableName()
+					+ "','_',-1),SIGNED) suffix  FROM " + shardingEntity.getTableName() + " " + sqlWhere);
+		}
+		if (tempQuerySqlList.size() > 1) {
+			return StrUtil.join(" UNION ALL ", tempQuerySqlList);
+		} else {
+			return tempQuerySqlList.get(0);
+		}
+	}
+
+	@Override
+	public void save(Object obj, Date time) {
+		TableInfo tableInfo = TableInfoHelper.getTableInfo(obj.getClass());
+		String suffix = DateUtil.format(time, DatePatternStyle.PATTERN_YYYYMM);
+		Map<String, Object> paramMap = BeanUtil.beanToMap(obj);
+		String insertSql = "INSERT INTO " + tableInfo.getTableName() + "_" + suffix + "  (%s) VALUES (%s)";
+		String column = "";
+		String value = "";
+		if (tableInfo.getIdType() != IdType.AUTO) {
+			column += tableInfo.getKeyColumn() + ",";
+			value += "#{" + tableInfo.getKeyProperty() + "},";
+		}
+		for (Entry<String, Object> entry : paramMap.entrySet()) {
+			if (null != entry.getValue()) {
+				for (TableFieldInfo tableFieldInfo : tableInfo.getFieldList()) {
+					String property = tableFieldInfo.getProperty();
+					if (entry.getKey().equals(property)) {
+						column += tableFieldInfo.getColumn() + ",";
+						Class<? extends TypeHandler<?>> typeHandler = tableFieldInfo.getTypeHandler();
+						String typeHandlerName = "";
+						if (null != typeHandler && StringUtil.isNotBlank(typeHandler.getName())) {
+							typeHandlerName = ",typeHandler=" + typeHandler.getName();
+						}
+						value += "#{" + property + " " + typeHandlerName + "},";
+						break;
+					}
+				}
+
+			}
+		}
+		String sql = String.format(insertSql, column, value).replace(",)", ")");
+		paramMap.put("sql", sql);
+		shardingMapper.insert(paramMap);
+	}
+
+	@Override
+	public void update(Object obj, Date time) {
+		TableInfo tableInfo = TableInfoHelper.getTableInfo(obj.getClass());
+		String suffix = DateUtil.format(time, DatePatternStyle.PATTERN_YYYYMM);
+		String updateSql = "UPDATE " + tableInfo.getTableName() + "_" + suffix + " SET %s  WHERE %s";
+		String column = "";
+		Map<String, Object> paramMap = BeanUtil.beanToMap(obj);
+		for (Entry<String, Object> entry : paramMap.entrySet()) {
+			if (null != entry.getValue()) {
+				for (TableFieldInfo tableFieldInfo : tableInfo.getFieldList()) {
+					String property = tableFieldInfo.getProperty();
+					if (entry.getKey().equals(property)) {
+						Class<? extends TypeHandler<?>> typeHandler = tableFieldInfo.getTypeHandler();
+						String typeHandlerName = "";
+						if (null != typeHandler && StringUtil.isNotBlank(typeHandler.getName())) {
+							typeHandlerName = ",typeHandler=" + typeHandler.getName();
+						}
+						String value = "#{" + property + " " + typeHandlerName + "},";
+						column += tableFieldInfo.getColumn() + "=" + value;
+						break;
+					}
+				}
+
+			}
+		}
+
+		String sql = String.format(updateSql, column.substring(0, column.length()-1),
+				tableInfo.getKeyColumn() + "=#{" + tableInfo.getKeyProperty() + "}");
+		paramMap.put("sql", sql);
+		this.shardingMapper.updateById(paramMap);
+	}
+
+	@Override
+	public void delete(Object obj) {
+		List<ShardingEntity> tableList = this.getTableNameShardingList(obj.getClass(), null, null);
+		for (ShardingEntity shardingEntity : tableList) {
+			DateTime time = DateUtil.parse(shardingEntity.getSuffix() + "", DatePatternStyle.PATTERN_YYYYMM);
+			this.delete(obj, time);
+		}
+	}
+
+	@Override
+	public void delete(Object obj, Date time) {
+		String suffix = DateUtil.format(time, DatePatternStyle.PATTERN_YYYYMM);
+		TableInfo tableInfo = TableInfoHelper.getTableInfo(obj.getClass());
+		String tableName = tableInfo.getTableName() + "_" + suffix;
+		Map<String, Object> ewMap = new HashMap<>();
+		ewMap.put("sysSql", "DELETE FROM " + tableName + " WHERE  " + tableInfo.getKeyColumn() + "=#{ew."
+				+ tableInfo.getKeyColumn() + "}");
+		Map<String, Object> param = BeanUtil.beanToMap(obj);
+		ewMap.put(tableInfo.getKeyColumn(), param.get(tableInfo.getKeyColumn()));
+		this.shardingMapper.deleteById(ewMap);
+	}
+
+	@Override
+	public void saveOrUpdate(Object obj, Date time) {
+		if (null != obj) {
+			Class<?> cls = obj.getClass();
+			TableInfo tableInfo = TableInfoHelper.getTableInfo(cls);
+			Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!");
+			String keyProperty = tableInfo.getKeyProperty();
+			Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!");
+			Object idVal = ReflectionKit.getMethodValue(cls, obj, tableInfo.getKeyProperty());
+			if (StringUtils.checkValNull(idVal) || Objects.isNull(getById(obj.getClass(), (Serializable) idVal))) {
+				save(obj, time);
+			} else {
+				update(obj, time);
+			}
+		}
+
+	}
+
+	@Override
+	public <T> T getById(Class<T> cls, Serializable idVal) {
+		if (null == idVal) {
+			return null;
+		}
+		TableInfo tableInfo = TableInfoHelper.getTableInfo(cls);
+		List<ShardingEntity> tableNameList = getTableNameShardingList(cls, null, null);
+		Map<String, Object> newParamValueMap = new HashMap<>();
+		QueryWrapper<?> queryWrapper = new QueryWrapper<>(cls);
+		queryWrapper.eq(tableInfo.getKeyColumn(), idVal);
+		String sql = this.shardingSplicingSQL(cls, queryWrapper, newParamValueMap, ALL_FIELD_SQL, tableNameList);
+		String querySql = "SELECT * FROM ( " + sql + " ) ls";
+		List<Map<String, Object>> list = shardingMapper.selectShardingListMap(querySql, newParamValueMap);
+		List<T> resultList = handleResultList(cls, list);
+		T t = null;
+		try {
+			t = resultList.get(0);
+		} catch (IndexOutOfBoundsException e) {
+			log.error("not found {}", idVal, e);
+		}
+		return t;
+	}
+
+	@Override
+	public <T> PagedResponse<T> selectShardingPageList(Class<T> cls, QueryWrapper<T> queryWrapper, Integer pageNo,
+			Integer pageSize, Date startTime, Date endTime) {
+		List<T> resultList = new ArrayList<>();
+		pageNo = pageNo < 1 ? 1 : pageNo;
+		List<ShardingEntity> tableList = this.selectShardingGroupTableCount(cls, queryWrapper, startTime, endTime);
+		/**
+		 * 总记录数
+		 */
+		long count = tableList.stream().mapToLong(ShardingEntity::getTotalCount).sum();
+		if (tableList.size() == 1) {
+			resultList = queryPage(cls, queryWrapper, pageNo, pageSize, tableList, null);
+		} else {
+			Long limit = (long) ((pageNo - 1) * pageSize);
+			for (int i = 0; i < tableList.size(); i++) {
+				ShardingEntity shardingEntity = tableList.get(i);
+				if (limit < shardingEntity.getTotalCount()) {
+					if ((limit + pageSize) <= shardingEntity.getTotalCount()) {
+						resultList.addAll(queryPage(cls, queryWrapper, pageNo, pageSize,
+								this.getShardingEntityList(shardingEntity), null));
+						break;
+					} else {
+						resultList.addAll(queryPage(cls, queryWrapper, pageNo, pageSize,
+								this.getShardingEntityList(shardingEntity), limit));
+						pageSize = (int) (limit + pageSize - shardingEntity.getTotalCount());
+						limit = 0l;
+					}
+				} else {
+					limit = limit - shardingEntity.getTotalCount();
+				}
+			}
+		}
+		PagedResponse<T> pagedResponse = new PagedResponse<>();
+		pagedResponse.setCount(count);
+		pagedResponse.setData(resultList);
+		return pagedResponse;
+	}
+
+	private List<ShardingEntity> getShardingEntityList(ShardingEntity shardingEntity) {
+		List<ShardingEntity> fistShardingEntityList = new ArrayList<>();
+		fistShardingEntityList.add(shardingEntity);
+		return fistShardingEntityList;
+	}
+
+	private <T> List<T> queryPage(Class<T> cls, QueryWrapper<T> queryWrapper, Integer pageNo, Integer pageSize,
+			List<ShardingEntity> tableList, Long limit) {
+		List<T> resultList;
+		Map<String, Object> newParamValueMap = new HashMap<>();
+		String sql = this.shardingSplicingSQL(cls, queryWrapper, newParamValueMap, ALL_FIELD_SQL, tableList);
+		sql = ALL_FIELD_SQL + " FROM (" + sql + ") ls";
+		String customSqlSegment = queryWrapper.getCustomSqlSegment();
+		if (customSqlSegment.contains("ORDER BY")) {
+			String orderBySql = customSqlSegment.substring(customSqlSegment.lastIndexOf("ORDER BY"),
+					customSqlSegment.length());
+			sql += " " + orderBySql;
+		}
+		sql += " limit " + (limit != null ? limit : (pageNo - 1) * pageSize) + "," + pageSize;
+		List<Map<String, Object>> list = shardingMapper.selectShardingListMap(sql, newParamValueMap);
+		resultList = handleResultList(cls, list);
+		return resultList;
+	}
+
+	private <T> List<T> handleResultList(Class<T> cls, List<Map<String, Object>> list) {
+		List<T> resultList = new ArrayList<>();
+		JSONUtil.toJsonStr(null, null);
+		for (Map<String, Object> map : list) {
+			Map<String, Object> newMap = new HashMap<>();
+			for (Entry<String, Object> entry : map.entrySet()) {
+				try {
+					JSONObject value = JSON.parseObject(entry.getValue().toString());
+					newMap.put(UtilsTools.lineToHump(entry.getKey()), value);
+				} catch (Exception e) {
+					newMap.put(UtilsTools.lineToHump(entry.getKey()), entry.getValue());
+				}
+			}
+			map.clear();
+			T t = JSON.parseObject(JSON.toJSONString(newMap), cls);
+			resultList.add(t);
+		}
+		return resultList;
+	}
+
+}

+ 17 - 0
src/main/resources/mapper/AlarmCommentMapper.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.apm.dmpalarm.dao.AlarmCommentMapper">
+    <resultMap id="AlarmCommentMap" type="com.persagy.apm.dmpalarm.model.AlarmComment">
+		<result column="id" property="id" />
+		<result column="record_id" property="recordId" />
+		<result column="content" property="content" />
+		<result column="create_user" property="createUser" />
+		<result column="project_id" property="projectId" />
+		<result column="group_code" property="groupCode" />
+		<result column="create_time" property="createTime" />
+		<result column="update_time" property="updateTime" />
+		<result column="update_user" property="updateUser" />
+		<result column="valid" property="valid" />
+	</resultMap>
+</mapper>
+

+ 26 - 0
src/main/resources/mapper/AlarmConfigMapper.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.apm.dmpalarm.dao.AlarmConfigMapper">
+    <resultMap id="AlarmConfigMap" type="com.persagy.apm.dmpalarm.model.AlarmConfig">
+		<result column="id" property="id" />
+		<result column="obj_id" property="objId" />
+		<result column="class_code" property="classCode" />
+		<result column="project_id" property="projectId" />
+		<result column="group_code" property="groupCode" />
+		<result column="item_code" property="itemCode" />
+		<result column="target_id" property="targetId" />
+		<result column="category" property="category" />
+		<result column="level" property="level" />
+		<result column="remark" property="remark" />
+		<result column="condition" property="condition"  typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler" />
+		<result column="open" property="open" />
+		<result column="concern" property="concern" />
+		<result column="user_defined" property="userDefined" />
+		<result column="create_user" property="createUser" />
+		<result column="create_time" property="createTime" />
+		<result column="update_user" property="updateUser" />
+		<result column="update_time" property="updateTime" />
+		<result column="valid" property="valid" />
+	</resultMap>
+</mapper>
+

+ 23 - 0
src/main/resources/mapper/AlarmItemMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.apm.dmpalarm.dao.AlarmItemMapper">
+    <resultMap id="AlarmItemMap" type="com.persagy.apm.dmpalarm.model.AlarmItem">
+		<result column="id" property="id" />
+		<result column="code" property="code" />
+		<result column="name" property="name" />
+		<result column="category" property="category" />
+		<result column="level" property="level" />
+		<result column="remark" property="remark" />
+		<result column="condition" property="condition"  typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+		<result column="deal_fun" property="dealFun" />
+		<result column="create_user" property="createUser" />
+		<result column="project_id" property="projectId" />
+		<result column="group_code" property="groupCode" />
+		<result column="create_time" property="createTime" />
+		<result column="update_user" property="updateUser" />
+		<result column="update_time" property="updateTime" />
+		<result column="valid" property="valid" />
+		<result column="app_id" property="appId" />
+	</resultMap>
+</mapper>
+

+ 20 - 0
src/main/resources/mapper/AlarmLogMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.apm.dmpalarm.dao.AlarmLogMapper">
+    <resultMap id="AlarmLogMap" type="com.persagy.apm.dmpalarm.model.AlarmLog">
+		<result column="id" property="id" />
+		<result column="record_id" property="recordId" />
+		<result column="type" property="type" />
+		<result column="nature" property="nature" />
+		<result column="before" property="before" />
+		<result column="after" property="after" />
+		<result column="remark" property="remark"  typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler" />
+		<result column="project_id" property="projectId" />
+		<result column="group_code" property="groupCode" />
+		<result column="create_time" property="createTime" />
+		<result column="update_time" property="updateTime" />
+		<result column="valid" property="valid" />
+		<result column="create_user" property="createUser" />
+	</resultMap>
+</mapper>
+

+ 38 - 0
src/main/resources/mapper/AlarmRecordMapper.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.apm.dmpalarm.dao.AlarmRecordMapper">
+    <resultMap id="AlarmRecordMap" type="com.persagy.apm.dmpalarm.model.AlarmRecord">
+		<result column="id" property="id" />
+		<result column="item_code" property="itemCode" />
+		<result column="project_id" property="projectId" />
+		<result column="obj_id" property="objId" />
+		<result column="class_code" property="classCode" />
+		<result column="level" property="level" />
+		<result column="remark" property="remark" />
+		<result column="create_user" property="createUser" />
+		<result column="create_time" property="createTime" />
+		<result column="update_user" property="updateUser" />
+		<result column="update_time" property="updateTime" />
+		<result column="valid" property="valid" />
+		<result column="name" property="name" />
+		<result column="category" property="category" />
+		<result column="concern" property="concern" />
+		<result column="state" property="state" />
+		<result column="effect_start_time" property="effectStartTime" />
+		<result column="effect_end_time" property="effectEndTime" />
+		<result column="nature" property="nature" />
+		<result column="treat_mode" property="treatMode" />
+		<result column="treat_state" property="treatState" />
+		<result column="group_code" property="groupCode" />
+		<result column="condition" property="condition"  typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler" />
+		<result column="trigger_info" property="triggerInfo"  typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+		<result column="end_info" property="endInfo"   typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+		<result column="trigger_time" property="triggerTime" />
+		<result column="end_time" property="endTime"/>
+		<result column="order_id" property="orderId" />
+		<result column="order_state" property="orderState" />
+		<result column="supplement" property="supplement"  typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler" />
+		<result column="target_id" property="targetId" />
+	</resultMap>
+</mapper>
+

+ 21 - 0
src/main/resources/mapper/AlarmTargetMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.apm.dmpalarm.dao.AlarmTargetMapper">
+    <resultMap id="AlarmTargetMap" type="com.persagy.apm.dmpalarm.model.AlarmTarget">
+		<result column="id" property="id" />
+		<result column="item_code" property="itemCode" />
+		<result column="class_code" property="classCode" />
+		<result column="condition" property="condition"  typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler" />
+		<result column="level" property="level" />
+		<result column="concern" property="concern" />
+		<result column="open" property="open" />
+		<result column="create_user" property="createUser" />
+		<result column="create_time" property="createTime" />
+		<result column="update_user" property="updateUser" />
+		<result column="update_time" property="updateTime" />
+		<result column="valid" property="valid" />
+		<result column="project_id" property="projectId" />
+		<result column="group_code" property="groupCode" />
+	</resultMap>
+</mapper>
+

+ 11 - 0
src/main/resources/mapper/ShardingMapper.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.apm.dmpalarm.dao.ShardingMapper">
+ 	<resultMap id="ShardingMap" type="com.persagy.apm.dmpalarm.model.ShardingEntity">
+		<result column="tableName" property="TABLE_NAME" />
+		<result column="tableNameSuffix" property="suffix" />
+		<result column="totalCount" property="totalCount"/> 
+	</resultMap>
+</mapper>
+
+