shaohongbo 3 年之前
父節點
當前提交
b4edf9d65b
共有 20 個文件被更改,包括 450 次插入1053 次删除
  1. 46 0
      pom.xml
  2. 12 388
      src/main/java/com/persagy/apm/diagnose/config/ComputePropertiesConfig.java
  3. 11 35
      src/main/java/com/persagy/apm/diagnose/constant/DiAgnoseConst.java
  4. 5 2
      src/main/java/com/persagy/apm/diagnose/feign/client/AlarmServiceClient.java
  5. 2 52
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/controller/MonitorIndicatorRecordController.java
  6. 1 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/ConvertMonitorIndicatorRecordTool.java
  7. 1 1
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/ComputeCalculateDTO.java
  8. 0 4
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/ConfigItemDataSendTimeDTO.java
  9. 3 3
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/QueryMonitorIndicatorRecordDTO.java
  10. 4 46
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/IMonitorIndicatorRecordService.java
  11. 260 436
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/impl/MonitorIndicatorRecordServiceImpl.java
  12. 11 2
      src/main/java/com/persagy/apm/diagnose/service/ComputeIndicatorDataService.java
  13. 54 4
      src/main/java/com/persagy/apm/diagnose/service/EnergyAlarmServiceImpl.java
  14. 15 7
      src/main/java/com/persagy/apm/diagnose/service/dto/AlarmRuleDTO.java
  15. 1 0
      src/main/java/com/persagy/apm/diagnose/service/schedule/ComputeIndicatorData.java
  16. 4 5
      src/main/java/com/persagy/apm/diagnose/timerecord/service/impl/CalculateTimeRecordServiceImpl.java
  17. 3 5
      src/main/java/com/persagy/apm/diagnose/utils/CollectDataUtil.java
  18. 0 7
      src/main/java/com/persagy/apm/diagnose/utils/RedisUtil.java
  19. 16 55
      src/main/java/com/persagy/framework/ems/data/pojo/hbase/MonitorIndicatorRecord.java
  20. 1 1
      src/main/resources/log4j.properties

+ 46 - 0
pom.xml

@@ -31,6 +31,18 @@
         </repository>
 
         <repository>
+            <id>SagaCloud</id>
+            <name>SagaCloud</name>
+            <url>http://47.93.33.207:8082/repository/SagaCloud/</url>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+        </repository>
+
+        <repository>
             <id>snapshot</id>
             <name>snapshot Repository</name>
             <url>http://47.93.132.139:8081/nexus/content/repositories/snapshots/</url>
@@ -61,6 +73,10 @@
                     <groupId>com.persagy</groupId>
                     <artifactId>integrated-redis-spring-boot-starter</artifactId>
                 </exclusion>
+                   <!-- <exclusion>
+                        <groupId>com.google.guava</groupId>
+                        <artifactId>guava</artifactId>
+                    </exclusion>-->
             </exclusions>
         </dependency>
         <!-- lang -->
@@ -151,5 +167,35 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
+
+        <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
+        <dependency>
+            <groupId>com.sagacloud</groupId>
+            <artifactId>zillion-util</artifactId>
+            <version>2.3.2.103</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>2.6.0</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>com.persagy.framework</groupId>
+            <artifactId>ems-data-starter-zillion</artifactId>
+            <version>1.11.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.sagacloud</groupId>
+                    <artifactId>zillion-util</artifactId>
+                </exclusion>
+                <!-- <exclusion>
+                     <groupId>com.google.guava</groupId>
+                     <artifactId>guava</artifactId>
+                 </exclusion>-->
+            </exclusions>
+        </dependency>
     </dependencies>
 </project>

+ 12 - 388
src/main/java/com/persagy/apm/diagnose/config/ComputePropertiesConfig.java

@@ -1,6 +1,7 @@
-package com.persagy.web.config;
+package com.persagy.apm.diagnose.config;
 
 
+import lombok.Data;
 import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
@@ -22,396 +23,19 @@ import java.util.Set;
 //被@RefreshScope修饰的Bean都是延迟加载的,只有在第一次访问时才会被初始化,刷新Bean也是同理,下次访问时会创建一个信息的对象
 @RefreshScope //这里不能省略  不然不能手动触发
 @Configuration
-public class RedisConfig {
-	
-	/**
-	 * 主机地址
-	 */
-	@Value("${spring.redis.host}")
-	private String springRedisHost;
-	
-	/**
-	 * 端口号
-	 */
-	@Value("${spring.redis.port}")
-	private Integer springRedisPort;
-	
-//	@Value("${spring.redis.timeout}")
-//	private Integer springRedisTimeout;
+@Data
+public class ComputePropertiesConfig {
 
-	/**
-	 * 密码(如果有的话)
-	 */
-	//@Value("${spring.redis.password}")
-	//private String springRedisPassword;
-	@Value("${spring.redis.password.sentinel}")
-	private String springRedisPassword;
+	@Value(value = "${energy.eq.run.compute.round.days:1}")
+	private Integer roundDays;
 
-	/**
-	 * 单机密码
-	 */
-	@Value("${spring.redis.password.standalone}")
-	private String springRedisPasswordStandalone;
-	
-	/**
-	 * 置连接池中最大允许的空闲连接  建议maxidle与maxTotal一样 
-	 */
-	@Value("${spring.redis.pool.max-idle}")
-	private Integer springRedisPoolMaxIdle;
-	
-	/**
-	 * 设置连接池中最小允许的连接数
-	 */
-	@Value("${spring.redis.pool.min-idle}")
-	private Integer springRedisPoolMinIdle;
-	
-	/**
-	 *  没有获取资源时最长等待1秒,1秒后还没有的话就报错
-	 */
-	@Value("${spring.redis.pool.max-wait}")
-	private Integer springRedisPoolMaxWait;
-	
-	/**
-	 *  设置连接池中最大活跃连接
-	 */
-	@Value("${spring.redis.pool.max-active}")
-	private Integer springRedisPoolMaxActive;
-	
-	
-	@Value("${spring.redis.database.zero}")
-	private Integer springRedisDatabaseZero;
-	
-	@Value("${spring.redis.database.one}")
-	private Integer springRedisDatabaseOne;
+	@Value(value = "${energy.eq.run.send.hour:1}")
+	private Integer sendDataHour;
 
-	@Value("${spring.redis.database.two}")
-	private Integer springRedisDatabaseTwo;
-	
-	@Value("${spring.redis.database.three}")
-	private Integer springRedisDatabaseThree;
-	
-	@Value("${spring.redis.database.four}")
-	private Integer springRedisDatabaseFour;
+	@Value(value = "${energy.eq.run.compute.after.hour:1}")
+	private Integer computeAfterHour;
 
-	@Value("${spring.redis.database.five}")
-	private Integer springRedisDatabaseFive;
+	@Value(value = "${energy.eq.run.compute.start.time:null}")
+	private String dStartTime;
 
-	@Value("${spring.redis.database.six}")
-	private Integer springRedisDatabaseSix;
-
-	@Value("${spring.redis.database.seven}")
-	private Integer springRedisDatabaseSeven;
-
-	@Value("${spring.redis.database.eight}")
-	private Integer springRedisDatabaseEight;
-
-	@Value("${spring.redis.database.nine}")
-	private Integer springRedisDatabaseNine;
-
-	@Value("${spring.redis.database.ten}")
-	private Integer springRedisDatabaseTen;
-	
-	@Value("${spring.redis.database.eleven}")
-	private Integer springRedisDatabaseEleven;
-
-	@Value("${spring.redis.database.fifteen}")
-	private Integer springRedisDatabaseFifteen;
-	
-	/**
-	 * 哨兵集群名称
-	 */
-	@Value("${spring.redis.sentinel.master}")
-	private String springRedisSentinelMaster;
-	
-	/**
-	 * 哨兵集群节点地址
-	 */
-	@Value("${spring.redis.sentinel.nodes}")
-	private String springRedisSentinelNodes;
-	
-	@Value("${spring.redis.use.cluster}")
-	private Boolean redisUseCluster;
-
-	
-	/**
-	 * 
-	 *<p>Description: 运维平台:使用索引为0的Redis库 .</p> 
-	 *<p>@return RedisTemplate<String,Object>
-	 *@since 2019510日: 下午5:14:20
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	@Bean
-	public RedisTemplate<String, String> emsRedisTemplate() {
-		RedisTemplate<String, String> template = new RedisTemplate<String, String>();
-		template.setConnectionFactory(redisConnectionFactory(	springRedisDatabaseZero));
-		template.setDefaultSerializer(new StringRedisSerializer());
-		return template;
-	}
-	
-	/**
-	 * 
-	 *<p>Description: saas:使用索引为1的Redis库 .</p> 
-	 *<p>@return RedisTemplate<String,Object>
-	 *@since 2019510日: 下午5:18:27
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	@Bean
-	public RedisTemplate<String, Object> saasRedisTemplate() {
-		RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
-		template.setConnectionFactory(redisConnectionFactory(springRedisDatabaseOne));
-		template.setDefaultSerializer(new StringRedisSerializer());
-		return template;
-	}
-	
-	/**
-	 * 
-	 *<p>Description:  workorder:使用索引为2的Redis库.</p> 
-	 *<p>@return RedisTemplate<String,Object>
-	 *@since 2019510日: 下午5:19:56
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	@Bean
-	public RedisTemplate<String, Object> workOrderRedisTemplate() {
-		RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
-		template.setConnectionFactory(redisConnectionFactory(springRedisDatabaseTwo));
-		template.setDefaultSerializer(new StringRedisSerializer());
-		return template;
-	}
-	
-	/**
-	 * 
-	 *<p>Description: 人员服务:使用索引为3的Redis库 .</p> 
-	 *<p>@return RedisTemplate<String,Object>
-	 *@since 2019510日: 下午5:20:23
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	@Bean
-	public RedisTemplate<String, Object> personServiceRedisTemplate() {
-		RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
-		template.setConnectionFactory(redisConnectionFactory(springRedisDatabaseThree));
-		template.setDefaultSerializer(new StringRedisSerializer());
-		return template;
-	}
-	
-	/**
-	 *<p>Description: 事件管理:使用索引为4的Redis库 .</p> 
-	 *<p>@return RedisTemplate<String,Object>
-	 *@since 2019510日: 下午5:23:09
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	@Bean
-	public RedisTemplate<String, Object> eventMgRedisTemplate() {
-		RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
-		template.setConnectionFactory(redisConnectionFactory(springRedisDatabaseFour));
-		template.setDefaultSerializer(new StringRedisSerializer());
-		return template;
-	}
-	
-	/**
-	 * 
-	 *<p>Description:  报表缓存:使用索引为5的Redis库.</p> 
-	 *<p>@return RedisTemplate<String,Object>
-	 *@since 2019510日: 下午5:26:24
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	@Bean
-	public RedisTemplate<String, Object> customRedisTemplate() {
-		RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
-		template.setConnectionFactory(redisConnectionFactory(springRedisDatabaseFive));
-		template.setDefaultSerializer(new StringRedisSerializer());
-		return template;
-	}
-	
-	/**
-	 * 
-	 *<p>Description:  数据平台:使用索引为 6 的Redis库 .</p> 
-	 *<p>@return RedisTemplate<String,Object>
-	 *@since 2019710日: 上午9:18:06
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	@Bean
-	public RedisTemplate<String, Object> dataPlatformRedisTemplate() {
-		RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
-		template.setConnectionFactory(redisConnectionFactory(springRedisDatabaseSix));
-		template.setDefaultSerializer(new StringRedisSerializer());
-		return template;
-	}
-	
-	/**
-	 * 
-	 *<p>Description:  抢单信息缓存:使用索引为10的Redis库.</p> 
-	 *<p>@return RedisTemplate<String,Object>
-	 *@since 2019510日: 下午5:26:51
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	@Bean
-	public RedisTemplate<String, Object> robbingRedisTemplate() {
-		RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
-		template.setConnectionFactory(redisConnectionFactory(springRedisDatabaseTen));
-		template.setDefaultSerializer(new StringRedisSerializer());
-		return template;
-	}
-	
-	@Bean
-    public RedisTemplate<String, Object> taskRedisTemplate() {
-        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
-		template.setConnectionFactory(redisConnectionFactory(springRedisDatabaseEleven));
-		template.setDefaultSerializer(new StringRedisSerializer());
-        return template;
-    }
-	
-	/**
-	 * 
-	 *<p>Description: 访问量统计:使用索引为15的Redis库 .</p> 
-	 *<p>@return RedisTemplate<String,Object>
-	 *@since 2019510日: 下午5:27:24
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	@Bean
-	public RedisTemplate<String, Object> pageViewRedisTemplate() {
-		RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
-		template.setConnectionFactory(redisConnectionFactory(springRedisDatabaseFifteen));
-		template.setDefaultSerializer(new StringRedisSerializer());
-		return template;
-	}
-
-	
-	/**
-	 * 
-	 *<p>Description:  redis连接工厂 .</p> 
-	 *<p>@param index redis库的索引
-	 *<p>@return RedisConnectionFactory
-	 *@since 2019510日: 下午4:49:24
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	private LettuceConnectionFactory redisConnectionFactory(int index) {
-		LettuceConnectionFactory redisConnectionFactory = null;
-		if(redisUseCluster) {
-			redisConnectionFactory = new LettuceConnectionFactory(redisSentinelConfiguration(index), jedisClientConfiguration());
-		} else {
-			redisConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration(index), jedisClientConfiguration());
-		}
-		redisConnectionFactory.afterPropertiesSet();
-		return redisConnectionFactory;
-	}
-	
-	
-	/**
-	 * 
-	 *<p>Description:  jedis 客户端 连接池配置.</p> 
-	 *<p>@return JedisClientConfiguration
-	 *@since 2019510日: 下午4:47:59
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	private LettucePoolingClientConfiguration  jedisClientConfiguration() {
-//		LettuceClientConfiguration.LettuceClientConfigurationBuilder builder = LettuceClientConfiguration.builder();
-//		JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jedisPoolingClientConfigurationBuilder = builder.usePooling();
-//		jedisPoolingClientConfigurationBuilder.poolConfig(jedisPoolConfig());
-//		return builder.build();
-		return LettucePoolingClientConfiguration.builder().poolConfig(jedisPoolConfig()).build();
-	}
-	
-	/**
-	 * 
-	 *<p>Description: jedis 连接池配置 .</p> 
-	 *<p>@return JedisPoolConfig
-	 *@since 2019510日: 下午4:34:33
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	private GenericObjectPoolConfig jedisPoolConfig() {
-//		JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
-//		jedisPoolConfig.setMaxIdle(springRedisPoolMaxIdle);
-//		jedisPoolConfig.setMinIdle(springRedisPoolMinIdle);
-//		jedisPoolConfig.setMaxTotal(springRedisPoolMaxActive);
-//		jedisPoolConfig.setMaxWaitMillis(springRedisPoolMaxWait);
-//		return jedisPoolConfig;
-		
-		GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
-		 
-        poolConfig.setMinIdle(springRedisPoolMinIdle);
-        poolConfig.setMaxIdle(springRedisPoolMaxIdle);
-        poolConfig.setMaxTotal(springRedisPoolMaxActive);
-        poolConfig.setMaxWaitMillis(springRedisPoolMaxWait);
-        return poolConfig;
-	}
-	
-	
-	
-	/**
-	 * 
-	 *<p>Description:  哨兵模式的redis配置.</p> 
-	 *<p>@param index
-	 *<p>@return RedisSentinelConfiguration
-	 *@since 2019510日: 下午4:20:43
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	private RedisSentinelConfiguration redisSentinelConfiguration(int index) {
-		RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration();
-		redisSentinelConfiguration.setDatabase(index);
-		redisSentinelConfiguration.setMaster(springRedisSentinelMaster);
-		//配置redis的哨兵sentinel
-		String[] hosts = StringUtils.delimitedListToStringArray(springRedisSentinelNodes,",");
-		Set<RedisNode> redisNodeSet = new HashSet<RedisNode>();
-        for(String redisHost : hosts){
-            String[] item = redisHost.split(":");
-            String ip = item[0];
-            String port = item[1];
-            redisNodeSet.add(new RedisNode(ip, Integer.parseInt(port)));
-        }
-        redisSentinelConfiguration.setSentinels(redisNodeSet);
-		if(!StringUtils.isEmpty(springRedisPassword)) {
-			redisSentinelConfiguration.setPassword(redisPassword(springRedisPassword));
-		}
-		return redisSentinelConfiguration;
-	}
-	
-	
-	/**
-	 * 
-	 *<p>Description:  单机模式的redis配置 .</p> 
-	 *<p>@param index  redis库的索引
-	 *<p>@return RedisStandaloneConfiguration
-	 *@since 2019510日: 下午4:05:20
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	private RedisStandaloneConfiguration redisStandaloneConfiguration(int index) {
-		RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
-		redisStandaloneConfiguration.setDatabase(index);
-		redisStandaloneConfiguration.setHostName(springRedisHost);
-		redisStandaloneConfiguration.setPort(springRedisPort);
-		if(!StringUtils.isEmpty(springRedisPasswordStandalone)) {
-			redisStandaloneConfiguration.setPassword(redisPassword(springRedisPasswordStandalone));
-		}
-		return redisStandaloneConfiguration;
-	}
-	
-	
-	/**
-	 * 
-	 *<p>Description:  redis的访问密码.</p> 
-	 *<p>@return RedisPassword
-	 *@since 2019510日: 下午4:02:48
-	 *@author gezhanbin
-	 *@version 1.0
-	 */
-	private RedisPassword redisPassword(String password) {
-		return RedisPassword.of(password);
-	}
-	
-	
-	
 }

+ 11 - 35
src/main/java/com/persagy/apm/diagnose/constant/DiAgnoseConst.java

@@ -1,6 +1,5 @@
 package com.persagy.apm.diagnose.constant;
 
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 /**
@@ -12,40 +11,17 @@ import org.springframework.stereotype.Component;
  * @修改描述
  */
 @Component
-public class DBConst {
-
-	public static String DATABASE_NAME = "person_service";
-	
-	/****** 表字段-通用  ******/
-	//创建时间,格式yyyyMMddHHmmss
-	public final static String TABLE_FIELD_CTEATE_TIME = "create_time";
-	//更新时间,格式yyyyMMddHHmmss
-	public final static String TABLE_FIELD_UPDATE_TIME = "update_time";
-	//数据有效状态,true-有效,false-无效
-	public final static String TABLE_FIELD_VALID = "valid";
-	
-	//应用
-	public final static String ID_TAG_APP_REGISTER = "YY";
-	//日志
-	public final static String LOG_ID_START = "RZ";
-
-
-	public static class Result {
-		public final static String RESULT = "Result";
-		public final static String CONTENT = "Content";
-		public final static String ITEM = "Item";
-		public final static String COUNT = "Count";
-		public final static String SUCCESS = "success";
-		public final static String FAILURE = "failure";
-		public final static String RESULTMSG = "ResultMsg";
-
-		//persagy
-		public final static String PERSAGY_RESULT = "result";
-		public final static String PERSAGY_REASON = "reason";
-		public final static String PERSAGY_CONTENT = "content";
-		//版本
-		public static final String VERSION = "version";
+public class DiAgnoseConst {
 
-	}
+	public static class  RedisConstants{
+
+		public static final String ComputeProjectLockKey = "_compute";
+
+		public static final String TargetComputeTime = "ALL-TARGETCOMPUTETIME";
 
+		public static final String PROJECT_ALARM_ITEM = "ALL-PROJECT_ALARM_ITEM";
+
+		public static final String PROJECT_ITEM_SEND_TIME = "ALL-PROJECT_ITEM_SEND_TIME";
+
+	}
 }

+ 5 - 2
src/main/java/com/persagy/apm/diagnose/feign/client/AlarmServiceClient.java

@@ -2,6 +2,7 @@ package com.persagy.apm.diagnose.feign.client;
 
 import com.alibaba.fastjson.JSONObject;
 import com.persagy.apm.diagnose.feign.AlarmResult;
+import com.persagy.apm.diagnose.service.dto.AlarmRuleDTO;
 import com.persagy.apm.diagnose.service.dto.CalculateMethodDTO;
 import com.persagy.apm.diagnose.service.dto.MonitorIndicatorConfigByEquipDTO;
 import com.persagy.apm.diagnose.service.dto.MonitorIndicatorConfigDTO;
@@ -10,8 +11,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 
-//@FeignClient(name = "energy-alarm-service",url = "http://192.168.16.235:9977")
-
+//@FeignClient(name = "energy-alarm-service",url = "http://192.168.16.247:9977")
 @FeignClient(name = "energy-alarm-service")
 public interface AlarmServiceClient {
 
@@ -27,4 +27,7 @@ public interface AlarmServiceClient {
     @PostMapping("/projectMonitorIndicatorConfigs/query_by_equip")
     AlarmResult<JSONObject> query_by_equip(@RequestBody MonitorIndicatorConfigByEquipDTO monitorIndicatorConfigByEquipDTO) throws Exception;
 
+
+    @PostMapping("projectAlarmRules/query_with_indicators_objs")
+    AlarmResult<JSONObject> queryProjectAlarmRules(@RequestBody AlarmRuleDTO alarmRuleDTO) throws Exception;
 }

+ 2 - 52
src/main/java/com/persagy/apm/diagnose/indicatorrecord/controller/MonitorIndicatorRecordController.java

@@ -5,11 +5,11 @@ import com.persagy.apm.common.response.CommonResult;
 import com.persagy.apm.common.response.PageList;
 import com.persagy.apm.common.utils.ResultHelper;
 import com.persagy.apm.diagnose.indicatorrecord.model.ConvertMonitorIndicatorRecordTool;
-import com.persagy.apm.diagnose.indicatorrecord.model.MonitorIndicatorRecord;
 import com.persagy.apm.diagnose.indicatorrecord.model.dto.*;
 import com.persagy.apm.diagnose.indicatorrecord.model.vo.MonitorIndicatorRecordItemVO;
 import com.persagy.apm.diagnose.indicatorrecord.model.vo.MonitorIndicatorRecordListItemVO;
 import com.persagy.apm.diagnose.indicatorrecord.service.IMonitorIndicatorRecordService;
+import com.persagy.framework.ems.data.pojo.hbase.MonitorIndicatorRecord;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,67 +35,17 @@ public class MonitorIndicatorRecordController {
     @Autowired
     private IMonitorIndicatorRecordService monitorIndicatorRecordService;
 
-	@ApiOperation(value = "创建监测指标历史记录")
-	@PostMapping("/create")
-	public CommonResult<ApmResponseUpsertVO> createMonitorIndicatorRecord(
-	        @Valid @RequestBody AddMonitorIndicatorRecordDTO addMonitorIndicatorRecordDTO) {
-        String id = monitorIndicatorRecordService.createMonitorIndicatorRecord(addMonitorIndicatorRecordDTO);
-        return ResultHelper.single(new ApmResponseUpsertVO(id));
-	}
-	
-	@ApiOperation(value = "监测指标历史记录详情")
-    @PostMapping("/get")
-    public CommonResult<MonitorIndicatorRecordItemVO> queryMonitorIndicatorRecordDetail(
-            @Valid @RequestBody QueryMonitorIndicatorRecordDetailDTO queryMonitorIndicatorRecordDetailDTO) {
-        MonitorIndicatorRecord monitorIndicatorRecord = monitorIndicatorRecordService.queryMonitorIndicatorRecordDetail(queryMonitorIndicatorRecordDetailDTO.getId());
-        MonitorIndicatorRecordItemVO monitorIndicatorRecordItemVO = ConvertMonitorIndicatorRecordTool.INSTANCE.convert2ResponseItemDTO(monitorIndicatorRecord);
-        return ResultHelper.single(monitorIndicatorRecordItemVO);
-    }
-
-
-    @ApiOperation(value = "更新监测指标历史记录")
-    @PostMapping("/update")
-    public CommonResult<ApmResponseUpsertVO> updateMonitorIndicatorRecord(
-            @Valid @RequestBody UpdateMonitorIndicatorRecordDTO updateMonitorIndicatorRecordDTO) {
-        monitorIndicatorRecordService.updateMonitorIndicatorRecord(updateMonitorIndicatorRecordDTO);
-        return ResultHelper.single(new ApmResponseUpsertVO(updateMonitorIndicatorRecordDTO.getId()));
-    }
-
-
-    @ApiOperation(value = "删除监测指标历史记录")
-    @PostMapping("/delete")
-    public CommonResult deleteMonitorIndicatorRecord(
-            @RequestBody @Valid DeleteMonitorIndicatorRecordDTO deleteMonitorIndicatorRecordDTO) {
-        monitorIndicatorRecordService.deleteMonitorIndicatorRecord(deleteMonitorIndicatorRecordDTO.getId());
-        return ResultHelper.success();
-    }
 
 
     @ApiOperation(value = "监测指标历史记录列表")
     @PostMapping("/query")
     public CommonResult<PageList<MonitorIndicatorRecordListItemVO>> queryMonitorIndicatorRecord(
-            @Valid @RequestBody QueryMonitorIndicatorRecordDTO queryMonitorIndicatorRecordDTO) {
+            @Valid @RequestBody QueryMonitorIndicatorRecordDTO queryMonitorIndicatorRecordDTO) throws Exception {
         List<MonitorIndicatorRecord> monitorIndicatorRecordList = monitorIndicatorRecordService.queryMonitorIndicatorRecordList(queryMonitorIndicatorRecordDTO);
         List<MonitorIndicatorRecordListItemVO> resultList = ConvertMonitorIndicatorRecordTool.INSTANCE.convert2List(monitorIndicatorRecordList);
         return ResultHelper.multi(resultList);
     }
     
-//    @ApiOperation(value = "监测指标历史记录列表, 分页查询")
-//    @PostMapping("/query")
-//    public CommonResult<PageList<MonitorIndicatorRecordListItemVO>> queryMonitorIndicatorRecord(
-//            @Valid @RequestBody PageQueryMonitorIndicatorRecordDTO pageQueryMonitorIndicatorRecordDTO) {
-//        IPage<MonitorIndicatorRecord> pagedList = monitorIndicatorRecordService.pageQueryMonitorIndicatorRecord(pageQueryMonitorIndicatorRecordDTO);
-//        IPage<MonitorIndicatorRecordListItemVO> pagedResultList = pagedList.convert(item -> {
-//            try {
-//               return ConvertMonitorIndicatorRecordTool.INSTANCE.convert2ResponseListItemDTO(item);
-//            } catch (Exception e) {
-//                throw new IllegalArgumentException("分页查询,MonitorIndicatorRecord实体类转换为列表对象发生异常", e);
-//            }
-//        });
-//        return ResultHelper.multi(pagedResultList);
-//    }
-
-
     @ApiOperation(value = "清除报警定义缓存")
     @PostMapping("/cleanAlarmConfig")
     public CommonResult cleanAlarmConfig(@Valid @RequestBody CleanAlarmConfigDTO CleanAlarmConfigDTO) {

+ 1 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/ConvertMonitorIndicatorRecordTool.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.diagnose.indicatorrecord.model;
 
+import com.persagy.framework.ems.data.pojo.hbase.MonitorIndicatorRecord;
 import org.mapstruct.*;
 import org.mapstruct.MappingTarget;
 import org.mapstruct.factory.Mappers;

+ 1 - 1
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/ComputeCalculateDTO.java

@@ -25,7 +25,7 @@ public class ComputeCalculateDTO {
 
     private String projectId;
 
-    private JSONObject obj;
+    private String objId;
 
     private String targetId;
 

+ 0 - 4
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/ConfigItemDataSendTimeDTO.java

@@ -22,10 +22,6 @@ import java.util.Date;
 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class ConfigItemDataSendTimeDTO {
 
-	private String objId;
-
-	private String configItemid;
-
 	private Date lastSendTime;
 
 	private Date updateTime;

+ 3 - 3
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/QueryMonitorIndicatorRecordDTO.java

@@ -12,15 +12,15 @@ import java.util.Date;
 @Data
 @ApiModel(value = "查询监测指标历史记录入参")
 public class QueryMonitorIndicatorRecordDTO {
+    @ApiModelProperty(value = "项目id", required = true)
+    private String projectId;
+
     @ApiModelProperty(value = "对象id", required = true)
     private String objId;
     
     @ApiModelProperty(value = "监测指标id", required = true)
     private String monitorIndicatorId;
     
-    @ApiModelProperty(value = "时间", required = true)
-    private Date date;
-
     @ApiModelProperty(value = "开始时间", required = true)
     private Date timeFrom;
 

+ 4 - 46
src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/IMonitorIndicatorRecordService.java

@@ -10,8 +10,10 @@ import java.util.concurrent.Future;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.persagy.apm.diagnose.service.dto.ProjectDTO;
+import com.persagy.framework.ems.data.pojo.hbase.MonitorIndicatorRecord;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 监测指标历史记录(MonitorIndicatorRecord) service接口
@@ -21,43 +23,8 @@ import io.swagger.annotations.ApiOperation;
  */
 public interface IMonitorIndicatorRecordService {
 
-    /**
-     * 创建监测指标历史记录
-     *
-     * @param addMonitorIndicatorRecordDTO addDTO
-     * @return 监测指标历史记录主键
-     * @author lixing
-     * @version V1.0 2021-09-10 00:13:27
-     */
-    public String createMonitorIndicatorRecord(AddMonitorIndicatorRecordDTO addMonitorIndicatorRecordDTO);
 
-    /**
-     * 监测指标历史记录详情
-     *
-     * @param id 主键
-     * @return 监测指标历史记录do对象
-     * @author lixing
-     * @version V1.0 2021-09-10 00:13:27
-     */
-    public MonitorIndicatorRecord queryMonitorIndicatorRecordDetail(String id);
-
-    /**
-     * 更新监测指标历史记录
-     *
-     * @param updateMonitorIndicatorRecordDTO updateDTO
-     * @author lixing
-     * @version V1.0 2021-09-10 00:13:27
-     */
-    public void updateMonitorIndicatorRecord(UpdateMonitorIndicatorRecordDTO updateMonitorIndicatorRecordDTO);
 
-    /**
-     * 删除监测指标历史记录
-     *
-     * @param id 主键
-     * @author lixing
-     * @version V1.0 2021-09-10 00:13:27
-     */
-    public void deleteMonitorIndicatorRecord(String id);
 
     /**
      * 查询监测指标历史记录
@@ -67,17 +34,8 @@ public interface IMonitorIndicatorRecordService {
      * @author lixing
      * @version V1.0 2021-09-10 00:13:27
      */
-    public List<MonitorIndicatorRecord> queryMonitorIndicatorRecordList(QueryMonitorIndicatorRecordDTO queryMonitorIndicatorRecordDTO);
+    public List<MonitorIndicatorRecord> queryMonitorIndicatorRecordList(@Param("queryMonitorIndicatorRecordDTO") QueryMonitorIndicatorRecordDTO queryMonitorIndicatorRecordDTO) throws Exception;
 
-    /**
-     * 分页查询监测指标历史记录
-     *
-     * @param pageQueryMonitorIndicatorRecordDTO pageQueryDTO
-     * @return IPage<MonitorIndicatorRecord>
-     * @author lixing
-     * @version V1.0 2021-09-10 00:13:27
-     */
-    public IPage<MonitorIndicatorRecord> pageQueryMonitorIndicatorRecord(PageQueryMonitorIndicatorRecordDTO pageQueryMonitorIndicatorRecordDTO);
 
 
     /**
@@ -113,7 +71,7 @@ public interface IMonitorIndicatorRecordService {
      * @param: monitorIndicatorRecord
      * @updateTime 2021/9/27 11:07
      */
-    public void saveOrUpdateByPk(MonitorIndicatorRecord monitorIndicatorRecord);
+    public void saveOrUpdateByPk(MonitorIndicatorRecord monitorIndicatorRecord) throws Exception;
 
     /**
      * @throws

+ 260 - 436
src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/impl/MonitorIndicatorRecordServiceImpl.java

@@ -1,45 +1,38 @@
 package com.persagy.apm.diagnose.indicatorrecord.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.google.common.base.CaseFormat;
-import com.persagy.apm.common.model.dto.Sort;
+import com.persagy.apm.diagnose.config.ComputePropertiesConfig;
+import com.persagy.apm.diagnose.constant.DiAgnoseConst;
 import com.persagy.apm.diagnose.constant.EnumDataTimeType;
 import com.persagy.apm.diagnose.constant.EnumTimeType;
 import com.persagy.apm.diagnose.indicatorcompute.model.ProjectIndicatorCompute;
 import com.persagy.apm.diagnose.indicatorcompute.service.IProjectIndicatorComputeService;
-import com.persagy.apm.diagnose.indicatorrecord.dao.MonitorIndicatorRecordMapper;
-import com.persagy.apm.diagnose.indicatorrecord.model.ConvertMonitorIndicatorRecordTool;
-import com.persagy.apm.diagnose.indicatorrecord.model.MonitorIndicatorRecord;
 import com.persagy.apm.diagnose.indicatorrecord.model.dto.*;
 import com.persagy.apm.diagnose.indicatorrecord.service.IMonitorIndicatorRecordService;
 import com.persagy.apm.diagnose.service.CenterDataService;
 import com.persagy.apm.diagnose.service.EnergyAlarmServiceImpl;
+import com.persagy.apm.diagnose.service.dto.AlarmRuleDTO;
 import com.persagy.apm.diagnose.service.dto.CalculateMethodDTO;
 import com.persagy.apm.diagnose.service.dto.ProjectDTO;
 import com.persagy.apm.diagnose.service.dto.TimeDataDTO;
 import com.persagy.apm.diagnose.timerecord.model.CalculateTimeRecord;
 import com.persagy.apm.diagnose.timerecord.service.ICalculateTimeRecordService;
 import com.persagy.apm.diagnose.utils.*;
-import com.persagy.apm.energyalarmstarter.alarmdata.feign.DmpResult;
-import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.AlarmCondition;
-import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.QueryAlarmConfigDTO;
-import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmConfigItem;
 import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmConfigServiceImpl;
 import com.persagy.apm.energyalarmstarter.collectdata.websocket.AlarmWebSocketServer;
+import com.persagy.framework.ems.data.core.enumeration.SpecialOperator;
+import com.persagy.framework.ems.data.mvc.dao.CoreDao;
+import com.persagy.framework.ems.data.pojo.hbase.MonitorIndicatorRecord;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.AsyncResult;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.CountDownLatch;
@@ -54,8 +47,7 @@ import java.util.stream.Collectors;
  */
 @Slf4j
 @Service
-public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndicatorRecordMapper, MonitorIndicatorRecord>
-        implements IMonitorIndicatorRecordService {
+public class MonitorIndicatorRecordServiceImpl implements IMonitorIndicatorRecordService {
 
     @Autowired
     private RedisLock lockUtil;
@@ -73,6 +65,9 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
     @Autowired
     private EnergyAlarmServiceImpl energyAlarmService;
 
+    @Autowired
+    private ComputePropertiesConfig computePropertiesConfig;
+
 
     @Autowired
     private CenterDataService centerDataService;
@@ -81,115 +76,15 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
     public final static String alarmSlipt = "_";
 
 
-    @Value(value = "${energy.eq.run.compute.round.days:1}")
-    private Integer roundDays;
-
-
-    @Value(value = "${energy.eq.run.send.hour:1}")
-    private Integer sendDataHour;
-
-
-    @Value(value = "${energy.eq.run.compute.after.hour:1}")
-    private Integer computeAfterHour;
-
-    @Value(value = "${energy.eq.run.compute.start.time:null}")
-    private String dStartTime;
-
     private final static Long SendDataTimeKeyTime = 24 * 60 * 60 * 1000L;
 
 
-    private final static Long ConfigItemKeyTime = 60 * 60 * 1000L;
-
-
     @Autowired
     private IProjectIndicatorComputeService projectIndicatorComputeService;
 
-    /**
-     * 创建监测指标历史记录
-     *
-     * @return 监测指标历史记录主键
-     * @author lixing
-     */
-    @Override
-    public String createMonitorIndicatorRecord(AddMonitorIndicatorRecordDTO addMonitorIndicatorRecordDTO) {
-        MonitorIndicatorRecord monitorIndicatorRecord = ConvertMonitorIndicatorRecordTool.INSTANCE.convertAddDto2Entity(addMonitorIndicatorRecordDTO);
-        // 设置默认值
-        setDefaultValue(monitorIndicatorRecord);
-        save(monitorIndicatorRecord);
-        return null;
-    }
-
-    /**
-     * 如果某些字段没有赋值,使用默认的值
-     *
-     * @param monitorIndicatorRecord 监测指标历史记录实体
-     * @author lixing
-     */
-    private void setDefaultValue(MonitorIndicatorRecord monitorIndicatorRecord) {
-        // todo 其他默认的属性
+    @Resource(name = "ZillionDao")
+    private CoreDao coredao;
 
-    }
-
-    /**
-     * 监测指标历史记录详情
-     *
-     * @param id 主键
-     * @return 部门do类
-     * @author lixing
-     */
-    @Override
-    public MonitorIndicatorRecord queryMonitorIndicatorRecordDetail(String id) {
-        MonitorIndicatorRecord monitorIndicatorRecord = getById(id);
-        if (monitorIndicatorRecord == null) {
-            throw new IllegalArgumentException("查看MonitorIndicatorRecord详情时发生异常,找不到要查看的记录,id=" + id);
-        }
-        return monitorIndicatorRecord;
-    }
-
-    /**
-     * 更新监测指标历史记录
-     *
-     * @author lixing
-     */
-    @Override
-    public void updateMonitorIndicatorRecord(UpdateMonitorIndicatorRecordDTO updateMonitorIndicatorRecordDTO) {
-        MonitorIndicatorRecord monitorIndicatorRecord = getById(updateMonitorIndicatorRecordDTO.getId());
-        monitorIndicatorRecord = ConvertMonitorIndicatorRecordTool.INSTANCE.convertUpdateDto2Entity(monitorIndicatorRecord, updateMonitorIndicatorRecordDTO);
-        updateById(monitorIndicatorRecord);
-    }
-
-    /**
-     * 校验监测指标历史记录是否可删除
-     *
-     * @param id 监测指标历史记录主键
-     * @return 监测指标历史记录do类
-     * @author lixing
-     */
-    public MonitorIndicatorRecord checkDeletable(String id) {
-        if (id == null) {
-            throw new IllegalArgumentException("删除MonitorIndicatorRecord时发生异常,主键为空");
-        }
-
-        MonitorIndicatorRecord monitorIndicatorRecord = getById(id);
-
-        if (monitorIndicatorRecord == null) {
-            throw new IllegalArgumentException("删除MonitorIndicatorRecord时发生异常,找不到要删除的数据,id:" + id);
-        }
-        return monitorIndicatorRecord;
-    }
-
-    /**
-     * 删除监测指标历史记录
-     *
-     * @param id 主键
-     * @author lixing
-     */
-    @Override
-    public void deleteMonitorIndicatorRecord(String id) {
-        // 校验是否可删除
-        MonitorIndicatorRecord monitorIndicatorRecord = checkDeletable(id);
-        updateById(monitorIndicatorRecord);
-    }
 
     /**
      * 查询监测指标历史记录
@@ -198,215 +93,178 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
      * @author lixing
      */
     @Override
-    public List<MonitorIndicatorRecord> queryMonitorIndicatorRecordList(QueryMonitorIndicatorRecordDTO queryMonitorIndicatorRecordDTO) {
-        QueryWrapper<MonitorIndicatorRecord> queryWrapper = new QueryWrapper<>();
-        // 默认按创建时间倒序排序
-        queryWrapper.orderBy(true, false, MonitorIndicatorRecord.PROP_DATE);
-
-        if (queryMonitorIndicatorRecordDTO != null) {
-
-            // todo 需判断使用like还是eq
-            if (StringUtils.isNotEmpty(queryMonitorIndicatorRecordDTO.getObjId())) {
-                queryWrapper.like(MonitorIndicatorRecord.PROP_OBJ_ID, queryMonitorIndicatorRecordDTO.getObjId());
-            }
-
-            // todo 需判断使用like还是eq
-            if (StringUtils.isNotEmpty(queryMonitorIndicatorRecordDTO.getMonitorIndicatorId())) {
-                queryWrapper.like(MonitorIndicatorRecord.PROP_MONITOR_INDICATOR_ID, queryMonitorIndicatorRecordDTO.getMonitorIndicatorId());
-            }
-
-            if (queryMonitorIndicatorRecordDTO.getDate() != null) {
-                queryWrapper.eq(MonitorIndicatorRecord.PROP_DATE, queryMonitorIndicatorRecordDTO.getDate());
-            }
-
-            if (queryMonitorIndicatorRecordDTO.getTimeFrom() != null) {
-
-                queryWrapper.ge(MonitorIndicatorRecord.PROP_DATE, queryMonitorIndicatorRecordDTO.getTimeFrom());
-            }
-
-            if (queryMonitorIndicatorRecordDTO.getTimeTo() != null) {
-                queryWrapper.lt(MonitorIndicatorRecord.PROP_DATE, queryMonitorIndicatorRecordDTO.getTimeTo());
-            }
-
-            // todo 需判断使用like还是eq
-            if (StringUtils.isNotEmpty(queryMonitorIndicatorRecordDTO.getValue())) {
-                queryWrapper.like(MonitorIndicatorRecord.PROP_VALUE, queryMonitorIndicatorRecordDTO.getValue());
-            }
-
-        }
-        return list(queryWrapper);
+    public List<MonitorIndicatorRecord> queryMonitorIndicatorRecordList(QueryMonitorIndicatorRecordDTO queryMonitorIndicatorRecordDTO) throws Exception {
+        MonitorIndicatorRecord query = new MonitorIndicatorRecord();
+        query.setMonitorIndicatorId(queryMonitorIndicatorRecordDTO.getMonitorIndicatorId());
+        query.setProject(queryMonitorIndicatorRecordDTO.getProjectId());
+        query.setObjId(queryMonitorIndicatorRecordDTO.getObjId());
+        query.setSpecialOperation("dataTime", SpecialOperator.$gte, queryMonitorIndicatorRecordDTO.getTimeFrom());
+        query.setSpecialOperation("dataTime", SpecialOperator.$lt, queryMonitorIndicatorRecordDTO.getTimeTo());
+        return coredao.query(query);
     }
 
-    /**
-     * 分页查询监测指标历史记录
-     *
-     * @return IPage<MonitorIndicatorRecord>
-     * @author lixing
-     */
-    @Override
-    public IPage<MonitorIndicatorRecord> pageQueryMonitorIndicatorRecord(PageQueryMonitorIndicatorRecordDTO pageQueryMonitorIndicatorRecordDTO) {
-        QueryWrapper<MonitorIndicatorRecord> queryWrapper = new QueryWrapper<>();
-        // 这里认为pageQueryDTO是经过校验的,肯定包含分页信息
-        IPage<MonitorIndicatorRecord> pageParam = new Page<>(pageQueryMonitorIndicatorRecordDTO.getPage(), pageQueryMonitorIndicatorRecordDTO.getSize(), true);
-        // 排序信息
-        if (CollectionUtils.isEmpty(pageQueryMonitorIndicatorRecordDTO.getOrders())) {
-            // 默认按创建时间倒序排序
-            queryWrapper.orderBy(true, false, MonitorIndicatorRecord.PROP_DATE);
-        } else {
-            List<Sort> orders = pageQueryMonitorIndicatorRecordDTO.getOrders();
-            for (Sort sort : orders) {
-                // 将驼峰转换为下划线格式
-                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, sort.getColumn()));
-                queryWrapper.orderBy(true, sort.isAsc(), sort.getColumn());
-            }
-        }
-
-        // todo 需判断使用like还是eq
-        if (StringUtils.isNotEmpty(pageQueryMonitorIndicatorRecordDTO.getObjId())) {
-            queryWrapper.like(MonitorIndicatorRecord.PROP_OBJ_ID, pageQueryMonitorIndicatorRecordDTO.getObjId());
-        }
-
-        // todo 需判断使用like还是eq
-        if (StringUtils.isNotEmpty(pageQueryMonitorIndicatorRecordDTO.getMonitorIndicatorId())) {
-            queryWrapper.like(MonitorIndicatorRecord.PROP_MONITOR_INDICATOR_ID, pageQueryMonitorIndicatorRecordDTO.getMonitorIndicatorId());
-        }
-
-        if (pageQueryMonitorIndicatorRecordDTO.getDate() != null) {
-            queryWrapper.eq(MonitorIndicatorRecord.PROP_DATE, pageQueryMonitorIndicatorRecordDTO.getDate());
-        }
-
-        // todo 需判断使用like还是eq
-        if (StringUtils.isNotEmpty(pageQueryMonitorIndicatorRecordDTO.getValue())) {
-            queryWrapper.like(MonitorIndicatorRecord.PROP_VALUE, pageQueryMonitorIndicatorRecordDTO.getValue());
-        }
-        return getBaseMapper().selectPage(pageParam, queryWrapper);
-    }
 
     @Override
     @Async("asyncComputeDataExecutor")
     public Future<String> computeIndicatorData(ProjectDTO projectDTO, ProjectIndicatorCompute projectIndicatorCompute, CountDownLatch latch) throws Exception {
         long time = System.currentTimeMillis() + (20 * 1000);
         try {
-            if (!lockUtil.lock(projectDTO.getProjectId() + "_compute", String.valueOf(time))) {
+            if (!lockUtil.lock(projectDTO.getProjectId() + DiAgnoseConst.RedisConstants.ComputeProjectLockKey, String.valueOf(time))) {
                 // 获取不到锁,略过
                 return new AsyncResult<>("【监测指标数据计算线程】项目:" + projectDTO.getProjectId() + "被占用");
             }
 
             long start = System.currentTimeMillis();
-            AsyncResult<String> projectDTO1 = computeProjectIndicatorData(projectDTO, projectIndicatorCompute);
-            if (projectDTO1 != null) {
-                return projectDTO1;
+            AsyncResult<String> errorMsg = computeProjectIndicatorData(projectDTO, projectIndicatorCompute);
+            if (errorMsg != null) {
+                return errorMsg;
             }
             long end = System.currentTimeMillis();
             return new AsyncResult<>("【监测指标数据计算线程】计算项目指标数据用时:" + projectDTO.getProjectId() + ";" + (end - start));
         } finally {
             // 释放锁
-            lockUtil.unlock(projectDTO.getProjectId() + "_compute", String.valueOf(time));
+            lockUtil.unlock(projectDTO.getProjectId() + DiAgnoseConst.RedisConstants.ComputeProjectLockKey, String.valueOf(time));
             latch.countDown();
         }
 
     }
 
+
     private AsyncResult<String> computeProjectIndicatorData(ProjectDTO projectDTO, ProjectIndicatorCompute projectIndicatorCompute) throws Exception {
-        Object redisComputeRound = redisUtil.hget(RedisUtil.TargetComputeTime, projectDTO.getProjectId());
-        if (redisComputeRound != null && projectIndicatorCompute != null
-                && projectIndicatorCompute.getComputeRound() < Long.parseLong(redisComputeRound.toString())) {
-            return new AsyncResult<>("【监测指标数据计算线程】当前项目:" + projectDTO.getProjectId() + "被占用");
-        }
-        //通过报警服务查询报警配置
-        List<AlarmConfigItem> configItemList = getAlarmConfigItemList(projectDTO.getProjectId());
-        if (CollectionUtils.isEmpty(configItemList)) {
-            return new AsyncResult<>("【监测指标数据计算线程】当前项目:" + projectDTO.getProjectId() + "未查询到报警条件");
-        }
-        Set<String> objIdSet = configItemList.stream().map(AlarmConfigItem::getObjId).collect(Collectors.toSet());
-        List<JSONObject> objectList = centerDataService.queryObjListByObjId(projectDTO.getProjectId(), new ArrayList<>(objIdSet));
-        if (CollectionUtils.isEmpty(objectList)) {
-            return new AsyncResult<>("【监测指标数据计算线程】当前项目:" + projectDTO.getProjectId() + "查询项目下无设备对象");
-        }
 
-        Map<String, JSONObject> objIdAndObj = new HashMap<>();
-        for (JSONObject obj : objectList) {
-            objIdAndObj.put(obj.getString("id"), obj);
+        {
+            //判断当前计算轮次是否大于缓存中最新计算轮次,如果是,则证明已经被计算过,则略过
+            Object redisComputeRound = redisUtil.hget(DiAgnoseConst.RedisConstants.TargetComputeTime, projectDTO.getProjectId());
+            if (redisComputeRound != null && projectIndicatorCompute != null
+                    && projectIndicatorCompute.getComputeRound() < Long.parseLong(redisComputeRound.toString())) {
+                return new AsyncResult<>("【监测指标数据计算线程】当前项目:" + projectDTO.getProjectId() + "被占用");
+            }
+        }
+        //通过报警服务查询报警规则
+        List<AlarmRuleDTO> projectAlarmRules = energyAlarmService.getProjectAlarmRules(projectDTO.getProjectId());
+        if (CollectionUtils.isEmpty(projectAlarmRules)) {
+            return new AsyncResult<>("【监测指标数据计算线程】当前项目:" + projectDTO.getProjectId() + "未设置报警规则");
         }
 
+        Set<String> objIdAndIndicatorId = getObjIdAndInfoCodeFromRules(projectAlarmRules);
+        if (CollectionUtils.isEmpty(objIdAndIndicatorId)) {
+            return new AsyncResult<>("【监测指标数据计算线程】当前项目:" + projectDTO.getProjectId() + "报警规则未关联对象");
+        }
         Map<String, Date> objId_indicatorIdAndComputeTIme = getObjId_IndicatorIdAndComputeTIme(projectDTO);
         Map<String, CalculateMethodDTO> methodIdAndMethodDTO = energyAlarmService.queryCalculateMethods();
 
-        Map<String, Set<String>> objIdAndInfoCodes = getObjIdAndInfoCodes(configItemList, objIdAndObj);
-
-        //根据报警条件查询监测对象
-        for (Map.Entry<String, Set<String>> entry : objIdAndInfoCodes.entrySet()) {
-            String objId = entry.getKey();
-            Set<String> infoCodes = entry.getValue();
-            if (CollectionUtils.isEmpty(infoCodes)) {
+        for (String objIdIndicatorId : objIdAndIndicatorId) {
+            int indexOf = objIdIndicatorId.indexOf("_");
+            String objId = objIdIndicatorId.substring(0, indexOf);
+            String indicatorId = objIdIndicatorId.substring(indexOf + 1);
+            String methodId = energyAlarmService.queryObjIndicatorMethodId(projectDTO.getProjectId(), objId, indicatorId);
+            if (StringUtils.isBlank(methodId)) {
+                log.error("【监测指标数据计算线程】:项目监控指标未设置公式:" + projectDTO.getProjectId() + ";" + objId + ";" + indicatorId);
                 continue;
             }
-            //获取对象id及指标相应公式id
-            Map<String, String> objId_indicatorAndMethodId = getObjId_indicatorAndMethodId(projectDTO, objId, new ArrayList<>(infoCodes));
-            if (objId_indicatorAndMethodId.isEmpty()) {
-                log.error("【监测指标数据计算线程】:项目监控指标未设置公式:" + projectDTO.getProjectId() + ";" + objId);
+            CalculateMethodDTO calculateMethodDTO = methodIdAndMethodDTO.get(methodId);
+            if (calculateMethodDTO == null) {
+                log.error("【监测指标数据计算线程】:项目监控指标设置公式为null:" + projectDTO.getProjectId() + ";" + objId + ";" + indicatorId);
                 continue;
             }
-            //处理监控指标
-            for (String infocode : infoCodes) {
-                String caculateMethodId = objId_indicatorAndMethodId.get(infocode);
-                if (StringUtils.isEmpty(caculateMethodId)) {
-                    log.error("【监测指标数据计算线程】:监控指标未设置公式:" + infocode);
-                    continue;
-                }
-                CalculateMethodDTO calculateMethodDTO = methodIdAndMethodDTO.get(caculateMethodId);
-                if (calculateMethodDTO == null) {
-                    log.error("【监测指标数据计算线程】:监控指标未设置公式为null:" + infocode);
-                    continue;
-                }
-
-                Date lastComputeTime = objId_indicatorIdAndComputeTIme.get(infocode);
-                if (lastComputeTime == null) {
-                    lastComputeTime = getDefultStartTime();
-                }
-                Date computeEndTime = DateUtils.addDays(lastComputeTime, roundDays);
-                String indicatorId = getIndicatorIdFromInfocode(infocode);
-                String formula = calculateMethodDTO.getFormula();
-                JSONObject obj = objIdAndObj.get(objId);
-                Date computeTime = computeIndicatorData(projectDTO, obj, lastComputeTime, computeEndTime, indicatorId, formula);
-                saveOrUpdateComputeTime(projectDTO.getProjectId(), obj.getString("id"), indicatorId, computeTime);
+            Date lastComputeTime = objId_indicatorIdAndComputeTIme.get(objIdIndicatorId);
+            if (lastComputeTime == null) {
+                lastComputeTime = getDefultStartTime();
             }
+            Date computeEndTime = DateUtils.addDays(lastComputeTime, computePropertiesConfig.getRoundDays());
+            String formula = calculateMethodDTO.getFormula();
+            Date computeTime = computeIndicatorData(projectDTO, objId, lastComputeTime, computeEndTime, indicatorId, formula);
+            saveOrUpdateComputeTime(projectDTO.getProjectId(), objId, indicatorId, computeTime);
         }
         // 更新缓存计算轮次
         updateProjectComputeRound(projectDTO.getProjectId(), projectIndicatorCompute);
         return null;
     }
 
+    /**
+     * @title getObjIdAndInfoCodeFromRules
+     * @description 通过报警条件获取所有对象及其监控点位,objId_infoCode
+     * @author leifeng
+     * @param: projectAlarmRules
+     * @updateTime 2021/10/26 21:24
+     * @return: java.util.Set<java.lang.String>
+     * @throws
+     */
+    private Set<String> getObjIdAndInfoCodeFromRules(List<AlarmRuleDTO> projectAlarmRules) {
+        Set<String> objIdAndInfoCode = new HashSet<>();
+        for (AlarmRuleDTO projectAlarmRule : projectAlarmRules) {
+            List<String> objIds = projectAlarmRule.getObjIds();
+            if(CollectionUtils.isEmpty(objIds)){
+                continue;
+            }
+            List<String> infoCodes = projectAlarmRule.getInfoCodes();
+            if (CollectionUtils.isEmpty(infoCodes)){
+                continue;
+            }
+            for (String infoCode : infoCodes) {
+                for (String objId : objIds) {
+                    objIdAndInfoCode.add(objId + "_" + infoCode);
+                }
+            }
+        }
+        return objIdAndInfoCode;
+    }
+
+    /**
+     * @title computeIndicatorData
+     * @description 计算指标数据,返回最后计算时间
+     * @author leifeng
+     * @param: projectDTO
+     * @param: objId
+     * @param: lastComputeTime
+     * @param: computeEndTime
+     * @param: indicatorId
+     * @param: formula
+     * @updateTime 2021/9/25 20:11
+     */
+    private Date computeIndicatorData(ProjectDTO projectDTO, String objId, Date lastComputeTime, Date computeEndTime, String infoCode, String formula) throws Exception {
+        ComputeCalculateDTO computeCalculateDTO = new ComputeCalculateDTO();
+        computeCalculateDTO.setObjId(objId);
+        computeCalculateDTO.setProjectId(projectDTO.getProjectId());
+        computeCalculateDTO.setTargetId(infoCode);
+        Map<String, Double> timeDataMap = TimeDataUtil.getTimeDataMap(lastComputeTime, computeEndTime,
+                EnumTimeType.MIN15);
+
+        Date timeEnd = null;
+        for (Map.Entry<String, Double> entry : timeDataMap.entrySet()) {
+            Date dataTime = DateUtils.str2Date(entry.getKey(), DateUtils.SDF_SECOND);
+            timeEnd = dataTime;
+            if (dataTime.getTime() > System.currentTimeMillis()) {
+                break;
+            }
+            computeCalculateDTO.setDataTime(dataTime);
+            Double targetData;
+            targetData = computeObjTargetDataByCalculate(computeCalculateDTO, formula);
+            if (targetData == null) {
+                break;
+            }
+
+            MonitorIndicatorRecord monitorIndicatorRecord = new MonitorIndicatorRecord();
+            monitorIndicatorRecord.setMonitorIndicatorId(infoCode);
+            monitorIndicatorRecord.setDataTime(dataTime);
+            monitorIndicatorRecord.setObjId(objId);
+            monitorIndicatorRecord.setProject(projectDTO.getProjectId());
+            monitorIndicatorRecord.setDataValue(targetData);
+            saveOrUpdateByPk(monitorIndicatorRecord);
+        }
+        return timeEnd;
+    }
+
     private Date getDefultStartTime() throws Exception {
         Date lastComputeTime;
-        if (StringUtils.isBlank(dStartTime)) {
+        if (StringUtils.isBlank(computePropertiesConfig.getDStartTime())) {
             lastComputeTime = new Date();
         } else {
-            lastComputeTime = DateUtils.str2Date(dStartTime, DateUtils.SDF_SECOND);
+            lastComputeTime = DateUtils.str2Date(computePropertiesConfig.getDStartTime(), DateUtils.SDF_SECOND);
         }
         return lastComputeTime;
     }
 
-    private Map<String, Set<String>> getObjIdAndInfoCodes(List<AlarmConfigItem> configItemList, Map<String, JSONObject> objIdAndObj) {
-        Map<String, Set<String>> objIdAndInfoCodes = new HashMap<>();
-        for (AlarmConfigItem alarmConfigItem : configItemList) {
-            String objId = alarmConfigItem.getObjId();
-            AlarmCondition condition = alarmConfigItem.getCondition();
-            List<String> infoCodeList = condition.getInfoCode();
-            if (CollectionUtils.isEmpty(infoCodeList)) {
-                continue;
-            }
-            JSONObject obj = objIdAndObj.get(objId);
-            if (obj == null) {
-                continue;
-            }
-            if (!objIdAndInfoCodes.containsKey(objId)) {
-                objIdAndInfoCodes.put(objId, new HashSet<>());
-            }
-            objIdAndInfoCodes.get(objId).addAll(infoCodeList);
-        }
-        return objIdAndInfoCodes;
-    }
 
     private void saveOrUpdateComputeTime(String projectId, String objId, String indicatorId, Date computeTime) {
         if (computeTime == null) {
@@ -420,16 +278,7 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
         calculateTimeRecordService.saveOrUpdateByPk(update);
     }
 
-    private Map<String, String> getObjId_indicatorAndMethodId(ProjectDTO projectDTO, String objId, List<String> infoCodeList) throws Exception {
-        List<String> indicatorList = getIndicatorIdListFromInfoCodes(infoCodeList);
-        return energyAlarmService.queryObjId_indicatorAndMethodId(projectDTO.getProjectId(), objId, indicatorList);
-    }
 
-    private List<String> getIndicatorIdListFromInfoCodes(List<String> infoCodeList) {
-        List<String> indicatorList = new ArrayList<>();
-        infoCodeList.forEach(infoCode -> indicatorList.add(getIndicatorIdFromInfocode(infoCode)));
-        return indicatorList;
-    }
 
     @Override
     @Async("asyncSendDataExecutor")
@@ -452,27 +301,29 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
     }
 
     @Override
-    public void saveOrUpdateByPk(MonitorIndicatorRecord monitorIndicatorRecord) {
-        QueryWrapper<MonitorIndicatorRecord> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(MonitorIndicatorRecord.PROJECT_ID, monitorIndicatorRecord.getProjectId());
-        queryWrapper.eq(MonitorIndicatorRecord.PROP_OBJ_ID, monitorIndicatorRecord.getObjId());
-        queryWrapper.eq(MonitorIndicatorRecord.PROP_MONITOR_INDICATOR_ID, monitorIndicatorRecord.getMonitorIndicatorId());
-        queryWrapper.eq(MonitorIndicatorRecord.PROP_DATE, monitorIndicatorRecord.getDate());
-        int count = this.count(queryWrapper);
-        if (count == 0) {
-            //新建
-            this.save(monitorIndicatorRecord);
+    public void saveOrUpdateByPk(MonitorIndicatorRecord monitorIndicatorRecord) throws Exception {
+        MonitorIndicatorRecord query = new MonitorIndicatorRecord();
+        query.setProject(monitorIndicatorRecord.getProject());
+        query.setObjId(monitorIndicatorRecord.getObjId());
+        query.setDataTime(monitorIndicatorRecord.getDataTime());
+//        query.setSplitTimeType(EnumTimeType.MIN15.getCode());
+        query.setMonitorIndicatorId(monitorIndicatorRecord.getMonitorIndicatorId());
+        List<MonitorIndicatorRecord> queryList = coredao.query(query);
+        if (CollectionUtils.isEmpty(queryList)) {//新增
+            coredao.save(monitorIndicatorRecord);
         } else {
-            this.update(monitorIndicatorRecord, queryWrapper);
+            MonitorIndicatorRecord update = new MonitorIndicatorRecord();
+            update.setDataValue(monitorIndicatorRecord.getDataValue());
+            coredao.update(query, update);
         }
     }
 
     @Override
     public void cleanAlarmConfig(String projectId) {
         if (StringUtils.isBlank(projectId)) {
-            redisUtil.del(RedisUtil.PROJECT_ALARM_ITEM);
+            redisUtil.del(DiAgnoseConst.RedisConstants.PROJECT_ALARM_ITEM);
         } else {
-            redisUtil.hdel(RedisUtil.PROJECT_ALARM_ITEM, projectId);
+            redisUtil.hdel(DiAgnoseConst.RedisConstants.PROJECT_ALARM_ITEM, projectId);
         }
     }
 
@@ -480,44 +331,47 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
     public void cleanAlarmConfigSendTime(CleanAlarmConfigDTO cleanAlarmConfigDTO) {
         if (StringUtils.isBlank(cleanAlarmConfigDTO.getProjectId())) {
             //清除所有
-            redisUtil.del(RedisUtil.PROJECT_ITEM_SEND_TIME);
+            redisUtil.del(DiAgnoseConst.RedisConstants.PROJECT_ITEM_SEND_TIME);
         } else if (StringUtils.isBlank(cleanAlarmConfigDTO.getAlarmConfigItemId())) {
             //清除项目
-            redisUtil.del(RedisUtil.PROJECT_ALARM_ITEM + ":" + cleanAlarmConfigDTO.getProjectId());
+            redisUtil.del(DiAgnoseConst.RedisConstants.PROJECT_ALARM_ITEM + ":" + cleanAlarmConfigDTO.getProjectId());
         } else {
             //清除指定
-            redisUtil.hdel(RedisUtil.PROJECT_ALARM_ITEM + ":" + cleanAlarmConfigDTO.getProjectId(), cleanAlarmConfigDTO.getAlarmConfigItemId());
+            redisUtil.hdel(DiAgnoseConst.RedisConstants.PROJECT_ALARM_ITEM + ":" + cleanAlarmConfigDTO.getProjectId(), cleanAlarmConfigDTO.getAlarmConfigItemId());
         }
     }
 
     private void sendIndicatorDataToAlarmServer(ProjectDTO projectDTO) throws Exception {
-        //通过报警服务查询报警配置
-        List<AlarmConfigItem> configItemList = getAlarmConfigItemList(projectDTO.getProjectId());
-        if (CollectionUtils.isEmpty(configItemList)) {
-            log.error("【发送监测指标数据线程】当前项目:" + projectDTO.getProjectId() + "为查询到报警条件");
+        //通过报警服务查询报警规则
+        List<AlarmRuleDTO> projectAlarmRules = energyAlarmService.getProjectAlarmRules(projectDTO.getProjectId());
+        if (CollectionUtils.isEmpty(projectAlarmRules)) {
             return;
         }
+        //根据报警规则,获取对象id_报警类型及设备监控点位list
+        Map<String, List<String>> objIdAlarmItemCodeAndInfoCodes = getObjIdAlarmItemCodeAndInfoCodes(projectAlarmRules);
+
+        for (Map.Entry<String, List<String>> entry : objIdAlarmItemCodeAndInfoCodes.entrySet()) {
+            String objIdAndAlarmItemCode = entry.getKey();
+
+            int indexOf = objIdAndAlarmItemCode.indexOf("_");
+            String objId = objIdAndAlarmItemCode.substring(0, indexOf);
+
+
+            List<String> infCodeList = entry.getValue();
+
+            //通过redis查询对象该报警类型下的发数截止时间
+            ConfigItemDataSendTimeDTO configItemSendTimeDTO = getConfigItemSendTimeDTO(projectDTO, objIdAndAlarmItemCode);
 
-        for (AlarmConfigItem alarmConfigItem : configItemList) {
-            AlarmCondition condition = alarmConfigItem.getCondition();
-            if (condition == null) {
-                continue;
-            }
-            List<String> infoCodes = condition.getInfoCode();
-            if (CollectionUtils.isEmpty(infoCodes)) {
-                continue;
-            }
-            ConfigItemDataSendTimeDTO configItemSendTimeDTO = getConfigItemSendTimeDTO(projectDTO, alarmConfigItem);
             Date lastSendTime = configItemSendTimeDTO.getLastSendTime();
-            Date endTime = getSendEndTiem(lastSendTime);
-            List<MonitorIndicatorRecord> list = getMonitorIndicatorRecordsGtLte(projectDTO, alarmConfigItem, lastSendTime, getIndicatorIdListFromInfoCodes(infoCodes), endTime);
+            Date endTime = getSendEndTime(lastSendTime);
+
+            List<MonitorIndicatorRecord> list = getMonitorIndicatorRecordsGtLte(projectDTO.getProjectId(), objId, lastSendTime, infCodeList, endTime);
             if (CollectionUtils.isEmpty(list)) {
                 continue;
             }
-
             Map<String, List<MonitorIndicatorRecord>> timeKeyAndRecordList = new LinkedHashMap<>();
             for (MonitorIndicatorRecord record : list) {
-                String timeKey = DateUtils.date2Str(record.getDate(), DateUtils.SDF_SECOND);
+                String timeKey = DateUtils.date2Str(record.getDataTime(), DateUtils.SDF_SECOND);
                 if (!timeKeyAndRecordList.containsKey(timeKey)) {
                     timeKeyAndRecordList.put(timeKey, new ArrayList<>());
                 }
@@ -525,21 +379,50 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
             }
             for (Map.Entry<String, List<MonitorIndicatorRecord>> dateListEntry : timeKeyAndRecordList.entrySet()) {
                 List<MonitorIndicatorRecord> value = dateListEntry.getValue();
-                if (CollectionUtils.isEmpty(value) || value.size() != infoCodes.size()) {
+                if (CollectionUtils.isEmpty(value) || value.size() != infCodeList.size()) {
                     continue;
                 }
                 String sentValue = CollectDataUtil.buildSendParam(value);
                 AlarmWebSocketServer.sendMsgToClients(projectDTO.getProjectId(), CollectDataUtil.buildSendParam(value));
-                log.info("指标发送报表服务数据:" + projectDTO.getProjectId() + sentValue);
+                log.info("指标发送报表服务数据:" + projectDTO.getProjectId()+";"+ sentValue);
                 endTime = DateUtils.str2Date(dateListEntry.getKey(), DateUtils.SDF_SECOND);
             }
             configItemSendTimeDTO.setLastSendTime(endTime);
-            updateRedisConfigItemSendTimeDTO(projectDTO.getProjectId(), configItemSendTimeDTO);
+            configItemSendTimeDTO.setUpdateTime(new Date());
+            updateRedisConfigItemSendTimeDTO(projectDTO.getProjectId(), objIdAndAlarmItemCode, configItemSendTimeDTO);
         }
     }
 
-    private Date getSendEndTiem(Date lastSendTime) {
-        Date date = DateUtils.addHours(lastSendTime, sendDataHour);
+    /**
+     * @title getObjIdAlarmItemCodeAndInfoCodes
+     * @description 获取对象报警类型及监控指标list,key为objId_itemCode
+     * @author leifeng
+     * @param: projectAlarmRules
+     * @updateTime 2021/10/26 21:35
+     * @return: java.util.Map<java.lang.String,java.util.List<java.lang.String>>
+     * @throws
+     */
+    private Map<String, List<String>> getObjIdAlarmItemCodeAndInfoCodes(List<AlarmRuleDTO> projectAlarmRules) {
+        Map<String, List<String>> objIdAlarmItemCodeAndInfoCodes = new HashMap<>();
+        for (AlarmRuleDTO projectAlarmRule : projectAlarmRules) {
+            String alarmItemCode = projectAlarmRule.getAlarmItemCode();
+            List<String> objIds = projectAlarmRule.getObjIds();
+            List<String> infoCodes = projectAlarmRule.getInfoCodes();
+            for (String infoCode : infoCodes) {
+                for (String objId : objIds) {
+                    String key = objId + "_" + alarmItemCode;
+                    if (!objIdAlarmItemCodeAndInfoCodes.containsKey(key)) {
+                        objIdAlarmItemCodeAndInfoCodes.put(key, new ArrayList<String>());
+                    }
+                    objIdAlarmItemCodeAndInfoCodes.get(key).add(infoCode);
+                }
+            }
+        }
+        return objIdAlarmItemCodeAndInfoCodes;
+    }
+
+    private Date getSendEndTime(Date lastSendTime) {
+        Date date = DateUtils.addHours(lastSendTime, computePropertiesConfig.getSendDataHour());
         if (date.getTime() > System.currentTimeMillis()) {//大于当前时间
             return new Date();
         }
@@ -558,17 +441,19 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
      * @updateTime 2021/9/25 20:08
      * @return: java.util.List<com.persagy.apm.diagnose.indicatorrecord.model.MonitorIndicatorRecord>
      */
-    private List<MonitorIndicatorRecord> getMonitorIndicatorRecordsGtLte(ProjectDTO projectDTO, AlarmConfigItem alarmConfigItem, Date lastSendTime, List<String> infoCodes, Date endTime) {
-        QueryWrapper<MonitorIndicatorRecord> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(MonitorIndicatorRecord.PROJECT_ID, projectDTO.getProjectId());
-        queryWrapper.eq(MonitorIndicatorRecord.PROP_OBJ_ID, alarmConfigItem.getObjId());
-        queryWrapper.in(MonitorIndicatorRecord.PROP_MONITOR_INDICATOR_ID, infoCodes);
-        queryWrapper.gt(MonitorIndicatorRecord.PROP_DATE, lastSendTime);
-        queryWrapper.le(MonitorIndicatorRecord.PROP_DATE, endTime);
-        queryWrapper.orderByAsc(MonitorIndicatorRecord.PROP_DATE);
-        return list(queryWrapper);
+    private List<MonitorIndicatorRecord> getMonitorIndicatorRecordsGtLte(String projectId, String objId, Date lastSendTime, List<String> infoCodes, Date endTime) throws Exception {
+        MonitorIndicatorRecord monitorIndicatorRecord = new MonitorIndicatorRecord();
+        monitorIndicatorRecord.setProject(projectId);
+        monitorIndicatorRecord.setObjId(objId);
+//        monitorIndicatorRecord.setSplitTimeType(EnumTimeType.MIN15.getCode());
+        monitorIndicatorRecord.setSpecialOperation("monitorIndicatorId", SpecialOperator.$in, infoCodes);
+        monitorIndicatorRecord.setSpecialOperation("dataTime", SpecialOperator.$gt, lastSendTime);
+        monitorIndicatorRecord.setSpecialOperation("dataTime", SpecialOperator.$lte, endTime);
+
+        return coredao.query(monitorIndicatorRecord);
     }
 
+
     /**
      * @title getConfigItemSendTimeDTO
      * @description redis中查询报警条件上次发数时间, 如果查询为空, 则初始化当前时间
@@ -578,15 +463,16 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
      * @updateTime 2021/9/25 20:03
      * @return: com.persagy.apm.diagnose.indicatorrecord.model.dto.ConfigItemDataSendTimeDTO
      */
-    private ConfigItemDataSendTimeDTO getConfigItemSendTimeDTO(ProjectDTO projectDTO, AlarmConfigItem alarmConfigItem) throws Exception {
-        ConfigItemDataSendTimeDTO sendTimeDTO = (ConfigItemDataSendTimeDTO) redisUtil.get(getRedisSendDataKey(projectDTO.getProjectId(), alarmConfigItem.getId()));
+    private ConfigItemDataSendTimeDTO getConfigItemSendTimeDTO(ProjectDTO projectDTO, String objIdAndAlarmItemCode) throws Exception {
+        ConfigItemDataSendTimeDTO sendTimeDTO = (ConfigItemDataSendTimeDTO) redisUtil.get(getRedisSendDataKey(projectDTO.getProjectId(), objIdAndAlarmItemCode));
         if (sendTimeDTO == null) {
-            sendTimeDTO = ConfigItemDataSendTimeDTO.builder().objId(alarmConfigItem.getObjId()).configItemid(alarmConfigItem.getId()).lastSendTime(getDefultStartTime()).build();
+            sendTimeDTO = ConfigItemDataSendTimeDTO.builder().lastSendTime(getDefultStartTime()).build();
         }
         return sendTimeDTO;
     }
 
     /**
+     * @throws
      * @title getRedisSendDataKey
      * @description 获取发数时间redis key
      * @author leifeng
@@ -594,10 +480,9 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
      * @param: alarmConfigItemId
      * @updateTime 2021/10/14 19:56
      * @return: java.lang.String
-     * @throws
      */
-    private String getRedisSendDataKey(String projectId, String alarmConfigItemId) {
-        return RedisUtil.PROJECT_ITEM_SEND_TIME + ":" + projectId + ":" + alarmConfigItemId;
+    private String getRedisSendDataKey(String projectId, String objIdAndAlarmItemCode) {
+        return DiAgnoseConst.RedisConstants.PROJECT_ITEM_SEND_TIME + ":" + projectId + ":" + objIdAndAlarmItemCode;
     }
 
     /**
@@ -608,8 +493,8 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
      * @param: sendTimeDTO
      * @updateTime 2021/9/25 20:05
      */
-    private void updateRedisConfigItemSendTimeDTO(String projectId, ConfigItemDataSendTimeDTO sendTimeDTO) {
-        redisUtil.set(getRedisSendDataKey(projectId, sendTimeDTO.getConfigItemid()), sendTimeDTO, SendDataTimeKeyTime);
+    private void updateRedisConfigItemSendTimeDTO(String projectId, String objeIdAndAlarmItemCode, ConfigItemDataSendTimeDTO sendTimeDTO) {
+        redisUtil.set(getRedisSendDataKey(projectId, objeIdAndAlarmItemCode), sendTimeDTO, SendDataTimeKeyTime);
     }
 
     /**
@@ -634,7 +519,7 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
             projectIndicatorCompute.setComputeRound(round);
             projectIndicatorComputeService.updateById(projectIndicatorCompute);
         }
-        redisUtil.hset(RedisUtil.TargetComputeTime, projectId, round.toString());
+        redisUtil.hset(DiAgnoseConst.RedisConstants.TargetComputeTime, projectId, round.toString());
     }
 
 
@@ -654,59 +539,11 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
     }
 
 
-    /**
-     * @title computeIndicatorData
-     * @description 计算指标数据
-     * @author leifeng
-     * @param: projectDTO
-     * @param: obj
-     * @param: lastComputeTime
-     * @param: computeEndTime
-     * @param: indicatorId
-     * @param: formula
-     * @updateTime 2021/9/25 20:11
-     */
-    private Date computeIndicatorData(ProjectDTO projectDTO, JSONObject obj, Date lastComputeTime, Date computeEndTime, String indicatorId, String formula) throws Exception {
-        ComputeCalculateDTO computeCalculateDTO = new ComputeCalculateDTO();
-        computeCalculateDTO.setObj(obj);
-        computeCalculateDTO.setProjectId(projectDTO.getProjectId());
-        computeCalculateDTO.setTargetId(indicatorId);
-        Map<String, Double> timeDataMap = TimeDataUtil.getTimeDataMap(lastComputeTime, computeEndTime,
-                EnumTimeType.MIN15);
-
-        Date timeEnd = null;
-        for (Map.Entry<String, Double> entry : timeDataMap.entrySet()) {
-            Date dataTime = DateUtils.str2Date(entry.getKey(), DateUtils.SDF_SECOND);
-            timeEnd = dataTime;
-            if (dataTime.getTime() > System.currentTimeMillis()) {
-                break;
-            }
-            computeCalculateDTO.setDataTime(dataTime);
-            Double targetData;
-            targetData = computeObjTargetDataByCalculate(computeCalculateDTO, formula);
-            if (targetData == null) {
-                break;
-            }
-            MonitorIndicatorRecord monitorIndicatorRecord = new MonitorIndicatorRecord();
-            monitorIndicatorRecord.setMonitorIndicatorId(indicatorId);
-            monitorIndicatorRecord.setDate(dataTime);
-            monitorIndicatorRecord.setObjId(obj.getString("id"));
-            monitorIndicatorRecord.setProjectId(projectDTO.getProjectId());
-            monitorIndicatorRecord.setValue(targetData);
-            saveOrUpdateByPk(monitorIndicatorRecord);
-        }
-        return timeEnd;
-    }
-
-    private String getIndicatorIdFromInfocode(String infocode) {
-        int indexOf = infocode.indexOf(alarmSlipt);
-        return infocode.substring(indexOf + 1);
-    }
 
     /**
      * @ClassName MonitorIndicatorRecordServiceImpl
      * @author leifeng
-     * @Description 查询项目下对象指标计算时间
+     * @Description 查询项目下对象指标计算时间,key为objId_indicator
      * @createTime 2021/9/24 11:22
      */
     private Map<String, Date> getObjId_IndicatorIdAndComputeTIme(ProjectDTO projectDTO) {
@@ -715,44 +552,25 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
     }
 
 
-    /**
-     * @title getAlarmConfigItemList
-     * @description 从缓存中获取报警条件, 如果缓存不存在, 则查询报警服务, 报警条件配置
-     * @author leifeng
-     * @param: projectDTO
-     * @updateTime 2021/9/24 11:27
-     * @return: java.util.List<com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmConfigItem>
-     */
-    private List<AlarmConfigItem> getAlarmConfigItemList(String projectId) throws Exception {
-        List<AlarmConfigItem> itemList = (List<AlarmConfigItem>) redisUtil.hget(RedisUtil.PROJECT_ALARM_ITEM, projectId);
-        if (CollectionUtils.isEmpty(itemList)) {
-            QueryAlarmConfigDTO queryAlarmConfigDTO = new QueryAlarmConfigDTO();
-            queryAlarmConfigDTO.setProjectId(projectId);
-            queryAlarmConfigDTO.setGroupCode("WD");
-            queryAlarmConfigDTO.setCategory(Collections.singletonList("Eqdx"));
-            queryAlarmConfigDTO.setOpen(1);
-            DmpResult<List<AlarmConfigItem>> configItemResult = alarmConfigService.query(queryAlarmConfigDTO);
-            itemList = DmpResultUtil.getData(configItemResult);
-            redisUtil.hset(RedisUtil.PROJECT_ALARM_ITEM, projectId, itemList, ConfigItemKeyTime);
-        }
-        return itemList;
-    }
-
 
     private Double computeObjTargetDataByCalculate(ComputeCalculateDTO computeCalculateDTO, String calculateStr)
             throws Exception {
         List<String> variables = CalculateUtil.getVariablesFromFormula(calculateStr);
         Map<String, Double> variableAndData = new HashMap<>(16);
         for (String variable : variables) {
-            String v = variable.substring(2, variable.length() - 1);// 获取${}中变量
+            // 获取${}中变量
+            String v = variable.substring(2, variable.length() - 1);
             // 解析变量
             Double data = null;
-            if (v.startsWith(CalculateUtil.SUM)) {// 求和
+
+            if (v.startsWith(CalculateUtil.SUM)) {
+                // 求和
                 v = v.substring(4, v.length() - 1);
                 computeCalculateDTO.setCalculateVariableDTO(CalculateVariableDTO.buildCalculateVariableDTO(v));
                 List<Double> dataList = analysisVariable(computeCalculateDTO);
                 data = getSumDataFromDataList(dataList);
-            } else if (v.startsWith(CalculateUtil.MIN)) {// 求最小值
+            } else if (v.startsWith(CalculateUtil.MIN)) {
+                // 求最小值
                 v = v.substring(4, v.length() - 1);
                 computeCalculateDTO.setCalculateVariableDTO(CalculateVariableDTO.buildCalculateVariableDTO(v));
                 List<Double> analysisVariable = analysisVariable(computeCalculateDTO);
@@ -779,7 +597,7 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
         BigDecimal result = new ComputeFormulaUtil(calculateStr).getResult();
         if (result == null) {
             log.error("【监测指标数据计算线程】:解析公式为空,projectId:" + computeCalculateDTO.getProjectId() + "对象id:"
-                    + computeCalculateDTO.getObj().getString("id") + ";指标id:" + computeCalculateDTO.getTargetId()
+                    + computeCalculateDTO.getObjId() + ";指标id:" + computeCalculateDTO.getTargetId()
                     + ";带入公式:" + calculateStr);
             return null;
         }
@@ -825,10 +643,10 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
         } else {
             List<JSONObject> objList = centerDataService.queryObjRelationList(CenterDataUtil.getObjRelationDataDTO(
                     computeCalculateDTO.getProjectId(), calculateVariableDTO.getComputeObjType(),
-                    computeCalculateDTO.getObj().getString("id"), null));
+                    computeCalculateDTO.getObjId(), null));
             if (CollectionUtils.isEmpty(objList)) {
                 log.error("【指标计算线程】:查询数据中台子对象为空,projectId:" + computeCalculateDTO.getProjectId() + ";objId:"
-                        + computeCalculateDTO.getObj().getString("id") + ";子对象类型:"
+                        + computeCalculateDTO.getObjId() + ";子对象类型:"
                         + calculateVariableDTO.getComputeObjType());
                 return null;
             }
@@ -836,7 +654,7 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
             for (JSONObject object : objList) {
                 ComputeCalculateDTO computeCalculateDTO2 = new ComputeCalculateDTO();
                 BeanUtils.copyProperties(computeCalculateDTO2, computeCalculateDTO);
-                computeCalculateDTO2.setObj(object);
+                computeCalculateDTO2.setObjId(object.getString("id"));
                 List<Double> queryDataList = computeObjDataByComputeCalculateDTO(computeCalculateDTO2);
                 list.addAll(queryDataList);
             }
@@ -856,35 +674,41 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
             // 查询数据中台信息点数据
             if (time.equals(CalculateUtil.invalidTime)) {
                 // 查询静态信息点
-                return getObjStaticDataFromCenterData(computeCalculateDTO.getObj(), computeCode);
+                return getObjStaticDataFromCenterData(computeCalculateDTO.getProjectId(), computeCalculateDTO.getObjId(), computeCode);
             } else {
                 assert startTime != null;
                 return getServiceDataFromCenterDataService(computeCalculateDTO.getProjectId(),
-                        computeCalculateDTO.getObj().getString("id"), computeCode, timeType, startTime,
-                        DateUtils.addHours(startTime, computeAfterHour));
+                        computeCalculateDTO.getObjId(), computeCode, timeType, startTime,
+                        DateUtils.addHours(startTime, computePropertiesConfig.getComputeAfterHour()));
             }
         } else {
             // 查询指标数据
             List<Double> result = new ArrayList<>();
-            QueryWrapper<MonitorIndicatorRecord> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq(MonitorIndicatorRecord.PROJECT_ID, computeCalculateDTO.getProjectId());
-            queryWrapper.eq(MonitorIndicatorRecord.PROP_OBJ_ID, computeCalculateDTO.getObj().getString("id"));
-            queryWrapper.eq(MonitorIndicatorRecord.PROP_MONITOR_INDICATOR_ID, computeCode);
-            queryWrapper.eq(MonitorIndicatorRecord.PROP_DATE, startTime);
-            List<MonitorIndicatorRecord> list = list(queryWrapper);
+            MonitorIndicatorRecord query = new MonitorIndicatorRecord();
+            query.setProject(computeCalculateDTO.getProjectId());
+            query.setObjId(computeCalculateDTO.getObjId());
+            query.setDataTime(startTime);
+            query.setMonitorIndicatorId(computeCode);
+            List<MonitorIndicatorRecord> list = coredao.query(query);
             if (CollectionUtils.isEmpty(list)) {
                 return result;
             }
-            result.add(list.get(0).getValue());
+            result.add(list.get(0).getDataValue());
             return result;
         }
     }
 
-    private List<Double> getObjStaticDataFromCenterData(JSONObject obj, String computeCode) {
+    private List<Double> getObjStaticDataFromCenterData(String projectId, String objId, String computeCode) throws Exception {
         List<Double> arrayList = new ArrayList<>();
-        Double double1 = obj.getDouble(computeCode);
+        List<JSONObject> objectList = centerDataService.queryObjListByObjId(projectId, Arrays.asList(objId));
+        if (CollectionUtils.isEmpty(objectList)) {
+            log.error("【指标数据计算线程】:查询数据中台对象不存在,:objId:" + objId + ";信息点:" + computeCode);
+            arrayList.add(null);
+            return arrayList;
+        }
+        Double double1 = objectList.get(0).getDouble(computeCode);
         if (double1 == null) {
-            log.error("【指标数据计算线程】:查询数据中台对象静态数据为空,:objId:" + obj.getString("id") + ";信息点:" + computeCode);
+            log.error("【指标数据计算线程】:查询数据中台对象静态数据为空,:objId:" + objId + ";信息点:" + computeCode);
         }
         arrayList.add(double1);
         return arrayList;

+ 11 - 2
src/main/java/com/persagy/apm/diagnose/service/ComputeIndicatorDataService.java

@@ -50,11 +50,16 @@ public class ComputeIndicatorDataService {
         if (CollectionUtils.isEmpty(projectDTOList)) {
             return;
         }
+
         Map<String, ProjectIndicatorCompute> projectIdAndProjectCompute = projectIndicatorComputeService.getProjectIdAndProjectCompute();
 
         List<Future<String>> futureList = new ArrayList<>();
-        CountDownLatch latch = new CountDownLatch(projectDTOList.size());
+//        CountDownLatch latch = new CountDownLatch(projectDTOList.size());
+        CountDownLatch latch = new CountDownLatch(1);
         for (ProjectDTO projectDTO : projectDTOList) {
+            if(!projectDTO.getProjectId().equals("Pj1101060001")){
+                continue;
+            }
             futureList.add(monitorIndicatorRecordService.computeIndicatorData(projectDTO, projectIdAndProjectCompute.get(projectDTO.getProjectId()), latch));
         }
         //等待所有任务执行完
@@ -75,8 +80,12 @@ public class ComputeIndicatorDataService {
             return;
         }
         List<Future<String>> futureList = new ArrayList<>();
-        CountDownLatch latch = new CountDownLatch(projectDTOList.size());
+//        CountDownLatch latch = new CountDownLatch(projectDTOList.size());
+        CountDownLatch latch = new CountDownLatch(1);
         for (ProjectDTO projectDTO : projectDTOList) {
+            if(!projectDTO.getProjectId().equals("Pj1101060001")){
+                continue;
+            }
             futureList.add(monitorIndicatorRecordService.sendIndicatorData(projectDTO, latch));
         }
         //等待所有任务执行完

+ 54 - 4
src/main/java/com/persagy/apm/diagnose/service/EnergyAlarmServiceImpl.java

@@ -5,10 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.persagy.apm.diagnose.feign.AlarmResult;
 import com.persagy.apm.diagnose.feign.client.AlarmServiceClient;
 import com.persagy.apm.diagnose.indicatorrecord.service.impl.MonitorIndicatorRecordServiceImpl;
-import com.persagy.apm.diagnose.service.dto.CalculateMethodDTO;
-import com.persagy.apm.diagnose.service.dto.MonitorIndicatorConfigByEquipDTO;
-import com.persagy.apm.diagnose.service.dto.MonitorIndicatorConfigDTO;
-import com.persagy.apm.diagnose.service.dto.ObjIndicatorMethodDTO;
+import com.persagy.apm.diagnose.service.dto.*;
 import com.persagy.apm.diagnose.utils.AlarmResultUtil;
 import com.persagy.apm.diagnose.utils.DmpResultUtil;
 import com.persagy.apm.diagnose.utils.RedisUtil;
@@ -116,4 +113,57 @@ public class EnergyAlarmServiceImpl {
         }
         return objIndicatorMethodDTOs.stream().collect(Collectors.toMap(a -> a.getObjId() + MonitorIndicatorRecordServiceImpl.alarmSlipt + a.getMonitorIndicatorId(), ObjIndicatorMethodDTO::getCalculateMethodId));
     }
+
+
+    /**
+     * @throws
+     * @title queryObjIndicatorMethodId
+     * @description 查询对象指标公式
+     * @author leifeng
+     * @param: objId
+     * @param: indicatorList
+     * @updateTime 2021/9/27 11:54
+     */
+    public String queryObjIndicatorMethodId(String projectId,String objId, String indicatorId) throws Exception {
+        MonitorIndicatorConfigByEquipDTO build = MonitorIndicatorConfigByEquipDTO.builder().projectId(projectId).objId(objId).monitorIndicatorId(Arrays.asList(indicatorId)).groupCode("WD").userId("test").pd("wwwwwwwwww").build();
+        AlarmResult<JSONObject> result = alarmServiceClient.query_by_equip(build);
+        JSONObject content = result.getContent();
+        if (content == null) {
+            return null;
+        }
+        JSONArray records = content.getJSONArray("records");
+        if (records == null) {
+            return null;
+        }
+        if(CollectionUtils.isEmpty(records)){
+            return null;
+        }
+        JSONObject recordObj = (JSONObject)records.get(0);
+
+        JSONObject calculateMethod = recordObj.getJSONObject("calculateMethod");
+        if (calculateMethod == null) {
+            return null;
+        }
+        return calculateMethod.getString("id");
+    }
+
+
+    /**
+     * @throws
+     * @title queryMonitorIndicatorConfigDTOList
+     * @description 查询监控指标配置
+     * @author leifeng
+     * @param: projectId
+     * @updateTime 2021/9/23 20:29
+     * @return: java.util.List<com.persagy.apm.diagnose.service.dto.MonitorIndicatorConfigDTO>
+     */
+    public List<AlarmRuleDTO> getProjectAlarmRules(String projectId) throws Exception {
+        AlarmRuleDTO alarmRuleDTO = AlarmRuleDTO.builder().build();
+        alarmRuleDTO.setProjectId(projectId);
+        alarmRuleDTO.setGroupCode("WD");
+        alarmRuleDTO.setPd("asdasdasda");
+        alarmRuleDTO.setUserId("test");
+        AlarmResult<JSONObject> result = alarmServiceClient.queryProjectAlarmRules(alarmRuleDTO);
+        return AlarmResultUtil.getRecords(result, AlarmRuleDTO.class);
+    }
 }

+ 15 - 7
src/main/java/com/persagy/apm/diagnose/service/dto/AlarmRuleDTO.java

@@ -6,11 +6,13 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.List;
+
 /**
  * @ClassName AlarmRuleObjRelDTO
  * @author leifeng
  * @version 1.0.0
- * @Description 监控指标配置
+ * @Description 报警中台报警规则实体
  * @createTime 2021/9/23 15:12
  */
 @Data
@@ -18,14 +20,20 @@ import lombok.NoArgsConstructor;
 @NoArgsConstructor
 @AllArgsConstructor
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class MonitorIndicatorConfigDTO {
-	private String projectId;
-	private String caculateMethodId;
+public class AlarmRuleDTO {
 	private String id;
-	private String monitorIndicatorId;
-	private String objId;
+	private String projectId;
+
+	//报警类型
+	private String alarmItemCode;
+
+	//点位
+	private List<String> infoCodes;
+
+	//设备对象
+	private List<String> objIds;
+
 	private String groupCode;
 	private String userId;
 	private String pd;
-
 }

+ 1 - 0
src/main/java/com/persagy/apm/diagnose/service/schedule/ComputeIndicatorData.java

@@ -29,5 +29,6 @@ public class ComputeIndicatorData {
 		}
         log.info("【监测指标数据计算线程】计算指标数据开始.........");
         computeIndicatorDataService.computeIndicatorData();
+        log.info("【监测指标数据计算线程】计算指标数据结束.........");
     }
 }

+ 4 - 5
src/main/java/com/persagy/apm/diagnose/timerecord/service/impl/CalculateTimeRecordServiceImpl.java

@@ -1,13 +1,10 @@
 package com.persagy.apm.diagnose.timerecord.service.impl;
 
-import com.persagy.apm.common.context.AppContext;
-import com.persagy.apm.diagnose.indicatorrecord.model.MonitorIndicatorRecord;
 import com.persagy.apm.diagnose.timerecord.dao.CalculateTimeRecordMapper;
 import com.persagy.apm.diagnose.timerecord.service.ICalculateTimeRecordService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import org.apache.commons.lang.StringUtils;
-import com.persagy.apm.common.constant.enums.ValidEnum;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.persagy.apm.diagnose.timerecord.model.*;
 import com.persagy.apm.diagnose.timerecord.model.dto.*;
@@ -30,6 +27,9 @@ import org.springframework.util.CollectionUtils;
 public class CalculateTimeRecordServiceImpl extends ServiceImpl<CalculateTimeRecordMapper, CalculateTimeRecord>
         implements ICalculateTimeRecordService {
 
+//    @Resource(name = "ZillionDao")
+//    private CoreDao coredao;
+
     /**
      * 创建监测指标计算时间
      *
@@ -123,7 +123,6 @@ public class CalculateTimeRecordServiceImpl extends ServiceImpl<CalculateTimeRec
     public void deleteCalculateTimeRecord(String id) {
         // 校验是否可删除
         CalculateTimeRecord calculateTimeRecord = checkDeletable(id);
-
 //        calculateTimeRecord.setValid(ValidEnum.FALSE.getType());
         updateById(calculateTimeRecord);
     }
@@ -159,7 +158,6 @@ public class CalculateTimeRecordServiceImpl extends ServiceImpl<CalculateTimeRec
             }
 
         }
-
         return list(queryWrapper);
     }
 
@@ -227,4 +225,5 @@ public class CalculateTimeRecordServiceImpl extends ServiceImpl<CalculateTimeRec
             this.update(update, queryWrapper);
         }
     }
+
 }

+ 3 - 5
src/main/java/com/persagy/apm/diagnose/utils/CollectDataUtil.java

@@ -1,10 +1,8 @@
 package com.persagy.apm.diagnose.utils;
 
-import com.persagy.apm.diagnose.indicatorrecord.model.MonitorIndicatorRecord;
+import com.persagy.framework.ems.data.pojo.hbase.MonitorIndicatorRecord;
 import org.springframework.util.CollectionUtils;
 
-import java.io.PrintWriter;
-import java.io.StringWriter;
 import java.util.List;
 
 
@@ -24,7 +22,7 @@ public class CollectDataUtil {
         }
         StringBuilder stringBuilder = new StringBuilder();
         MonitorIndicatorRecord record1 = recordList.get(0);
-        String date = DateUtils.date2Str(record1.getDate(), "yyyyMMddHHmmss");
+        String date = DateUtils.date2Str(record1.getDataTime(), "yyyyMMddHHmmss");
         stringBuilder.append(date).append(";");
         stringBuilder.append(record1.getObjId()).append(";");
 
@@ -37,7 +35,7 @@ public class CollectDataUtil {
             }
         }
         for (int i = 0; i < recordList.size(); i++) {
-            stringBuilder.append(recordList.get(i).getValue());
+            stringBuilder.append(recordList.get(i).getDataValue());
             if (i == (recordList.size() - 1)) {
                 stringBuilder.append(";");
             } else {

+ 0 - 7
src/main/java/com/persagy/apm/diagnose/utils/RedisUtil.java

@@ -14,13 +14,6 @@ import org.springframework.util.CollectionUtils;
 @Component
 public class RedisUtil {
 
-
-    public static String TargetComputeTime = "ALL-TARGETCOMPUTETIME";
-
-    public static String PROJECT_ALARM_ITEM = "ALL-PROJECT_ALARM_ITEM";
-
-    public static String PROJECT_ITEM_SEND_TIME = "ALL-PROJECT_ITEM_SEND_TIME";
-
     @Resource(name = "redisTemplate")
     private RedisTemplate<Object, Object> redisTemplate;
 

+ 16 - 55
src/main/java/com/persagy/framework/ems/data/pojo/hbase/MonitorIndicatorRecord.java

@@ -13,30 +13,31 @@ import com.persagy.framework.ems.data.core.enumeration.EMSDimension;
 import com.persagy.framework.ems.data.core.enumeration.Schema;
 import com.persagy.framework.ems.data.core.enumeration.TimePatitionType;
 import com.persagy.framework.ems.data.mvc.pojo.BusinessObject;
+import lombok.Data;
 
-@Entity(name = "DataEnergyData")
-@Table(name = "data_energydata", comment = "能源能耗", schema = Schema.ORIGINALDATA, 
+@Entity(name = "MonitorIndicatorRecord")
+@Table(name = "monitor_indicator", comment = "设备运行诊断指标数据", schema = Schema.UDM,
 		indexes = {
-				@Index(columns = { "energyModelSign", "energyModelNodeSign", "data_time", "building"}, unique = true),
-				@Index(columns = { "building","data_time","energyModelSign","energyModelNodeSign"})
+				@Index(columns = { "project", "obj_id", "monitor_indicator_id", "data_time"}, unique = true)
 })
-@Dimension(dimension = EMSDimension.Time)
+@Dimension
 @TimePatition(column = "data_time", type = TimePatitionType.month)
-public class DataEnergyData extends BusinessObject {
+@Data
+public class MonitorIndicatorRecord extends BusinessObject {
 
 	private static final long serialVersionUID = 9123470427203487460L;
 
-	@Column(order = 10, name = "building", length = 20, nullable = false, comment = "项目/建筑id")
-	@JsonProperty("building")
-	private String building;
+	@Column(order = 10, name = "project", length = 20, nullable = false, comment = "项目/建筑id")
+	@JsonProperty("project")
+	private String project;
 	
-	@Column(order = 20, name = "energyModelSign", length = 20, nullable = true, comment = "能耗模型id")
-	@JsonProperty("energyModelSign")
-	private String energyModelSign;
+	@Column(order = 20, name = "obj_id", length = 50, nullable = true, comment = "能耗模型id")
+	@JsonProperty("objId")
+	private String objId;
 	
-	@Column(order = 30, name = "energyModelNodeSign", length = 50, nullable = true, comment = "分项id")
-	@JsonProperty("energyModelNodeSign")
-	private String energyModelNodeSign;
+	@Column(order = 30, name = "monitor_indicator_id", length = 50, nullable = true, comment = "分项id")
+	@JsonProperty("monitorIndicatorId")
+	private String monitorIndicatorId;
 
 
 	@Column(order = 40, name = "data_time", length = 0, nullable = false, comment = "数据时间")
@@ -47,45 +48,5 @@ public class DataEnergyData extends BusinessObject {
 	@JsonProperty("dataValue")
 	private Double dataValue;
 
-	public String getBuilding() {
-		return building;
-	}
 
-	public void setBuilding(String building) {
-		this.building = building;
-	}
-
-	public String getEnergyModelSign() {
-		return energyModelSign;
-	}
-
-	public void setEnergyModelSign(String energyModelSign) {
-		this.energyModelSign = energyModelSign;
-	}
-
-	public String getEnergyModelNodeSign() {
-		return energyModelNodeSign;
-	}
-
-	public void setEnergyModelNodeSign(String energyModelNodeSign) {
-		this.energyModelNodeSign = energyModelNodeSign;
-	}
-
-	public Date getDataTime() {
-		return dataTime;
-	}
-
-	public void setDataTime(Date dataTime) {
-		this.dataTime = dataTime;
-	}
-
-	public Double getDataValue() {
-		return dataValue;
-	}
-
-	public void setDataValue(Double dataValue) {
-		this.dataValue = dataValue;
-	}
-
-	
 }

+ 1 - 1
src/main/resources/log4j.properties

@@ -20,7 +20,7 @@ log4j.appender.logInfo.layout=org.apache.log4j.PatternLayout
 log4j.appender.logInfo.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n
 log4j.appender.logInfo.Threshold=INFO
 log4j.appender.logInfo.ImmediateFlush=TRUE
-log4j.appender.logInfo.File = ../logs/energy-flow-web/log.log
+log4j.appender.logInfo.File = ../logs/energy-eq-run-diagnose/log.log
 #log4j.appender.logInfo.DatePattern=yyyy-MM-dd HH'.log'
 log4j.appender.logInfo.Encoding=UTF-8
 log4j.appender.logInfo.MaxFileSize=5MB