Quellcode durchsuchen

Merge branch 'v1.0.0' of http://39.106.8.246:3003/apm/energy-eq-run-diagnose into v1.0.0

lixing vor 3 Jahren
Ursprung
Commit
12be2ffaa7
26 geänderte Dateien mit 619 neuen und 263 gelöschten Zeilen
  1. 4 0
      pom.xml
  2. 9 9
      src/main/java/com/persagy/apm/diagnose/config/PoemsWebConfigurer.java
  3. 1 1
      src/main/java/com/persagy/apm/diagnose/config/RedisConfig.java
  4. 2 2
      src/main/java/com/persagy/apm/diagnose/feign/AlarmResult.java
  5. 9 1
      src/main/java/com/persagy/apm/diagnose/feign/client/AlarmServiceClient.java
  6. 2 0
      src/main/java/com/persagy/apm/diagnose/indicatorcompute/model/ProjectIndicatorCompute.java
  7. 6 2
      src/main/java/com/persagy/apm/diagnose/indicatorcompute/service/IProjectIndicatorComputeService.java
  8. 1 2
      src/main/java/com/persagy/apm/diagnose/indicatorcompute/service/impl/ProjectIndicatorComputeServiceImpl.java
  9. 15 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/controller/MonitorIndicatorRecordController.java
  10. 21 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/CleanAlarmConfigDTO.java
  11. 6 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/QueryMonitorIndicatorRecordDTO.java
  12. 80 51
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/IMonitorIndicatorRecordService.java
  13. 191 92
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/impl/MonitorIndicatorRecordServiceImpl.java
  14. 4 21
      src/main/java/com/persagy/apm/diagnose/service/ComputeIndicatorDataService.java
  15. 65 10
      src/main/java/com/persagy/apm/diagnose/service/EnergyAlarmServiceImpl.java
  16. 2 2
      src/main/java/com/persagy/apm/diagnose/service/NettyAlarmServiceImpl.java
  17. 10 6
      src/main/java/com/persagy/apm/diagnose/service/dto/CalculateMethodDTO.java
  18. 32 0
      src/main/java/com/persagy/apm/diagnose/service/dto/MonitorIndicatorConfigByEquipDTO.java
  19. 4 0
      src/main/java/com/persagy/apm/diagnose/service/dto/MonitorIndicatorConfigDTO.java
  20. 25 0
      src/main/java/com/persagy/apm/diagnose/service/dto/ObjIndicatorMethodDTO.java
  21. 1 1
      src/main/java/com/persagy/apm/diagnose/service/schedule/SendIndicatorData.java
  22. 10 0
      src/main/java/com/persagy/apm/diagnose/timerecord/service/ICalculateTimeRecordService.java
  23. 80 56
      src/main/java/com/persagy/apm/diagnose/timerecord/service/impl/CalculateTimeRecordServiceImpl.java
  24. 32 0
      src/main/java/com/persagy/apm/diagnose/utils/TimeDataUtil.java
  25. 6 7
      src/main/resources/bootstrap.yml
  26. 1 0
      src/main/resources/mapper/MonitorIndicatorRecordMapper.xml

+ 4 - 0
pom.xml

@@ -100,6 +100,10 @@
                     <groupId>org.springframework.boot</groupId>
                     <artifactId>spring-boot-starter-logging</artifactId>
                 </exclusion>
+<!--                <exclusion>-->
+<!--                    <groupId>io.lettuce</groupId>-->
+<!--                    <artifactId>lettuce-core</artifactId>-->
+<!--                </exclusion>-->
             </exclusions>
         </dependency>
         <dependency>

+ 9 - 9
src/main/java/com/persagy/apm/diagnose/config/PoemsWebConfigurer.java

@@ -19,21 +19,21 @@ import javax.servlet.Filter;
 @Configuration
 public class PoemsWebConfigurer implements WebMvcConfigurer {
 
-    @Bean
-    public DynamicDataSourceHandler dynamicDataSourceHandler() {
-        return new DynamicDataSourceHandler();
-    }
+//    @Bean
+//    public DynamicDataSourceHandler dynamicDataSourceHandler() {
+//        return new DynamicDataSourceHandler();
+//    }
 
     @Bean
     public Filter poemsContextFilter() {
         return new PoemsContextFilter();
     }
 
-    @Override
-    public void addInterceptors(InterceptorRegistry registry) {
-        // 设置拦截的路径、不拦截的路径、优先级等等
-        registry.addInterceptor(dynamicDataSourceHandler()).addPathPatterns("/**");
-    }
+//    @Override
+//    public void addInterceptors(InterceptorRegistry registry) {
+//        // 设置拦截的路径、不拦截的路径、优先级等等
+//        registry.addInterceptor(dynamicDataSourceHandler()).addPathPatterns("/**");
+//    }
 
     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {

+ 1 - 1
src/main/java/com/persagy/apm/diagnose/config/RedisConfig.java

@@ -14,7 +14,7 @@ import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
 import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
 
 import org.springframework.data.redis.core.RedisTemplate;
-
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
 import org.springframework.data.redis.serializer.StringRedisSerializer;
 import org.springframework.util.StringUtils;

+ 2 - 2
src/main/java/com/persagy/apm/diagnose/feign/AlarmResult.java

@@ -17,10 +17,10 @@ public class AlarmResult<T> implements Serializable {
 
     public final static String SUCCESS_CODE = "200";
 
-    private String result;
+    private String respCode;
 
     private T content;
 
-    private String message;
+    private String respMsg;
 
 }

+ 9 - 1
src/main/java/com/persagy/apm/diagnose/feign/client/AlarmServiceClient.java

@@ -3,13 +3,16 @@ 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.CalculateMethodDTO;
+import com.persagy.apm.diagnose.service.dto.MonitorIndicatorConfigByEquipDTO;
 import com.persagy.apm.diagnose.service.dto.MonitorIndicatorConfigDTO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 
-@FeignClient(name = "energy_alarm_service")
+//@FeignClient(name = "energy-alarm-service",url = "http://192.168.16.235:9977")
+
+@FeignClient(name = "energy-alarm-service")
 public interface AlarmServiceClient {
 
     @PostMapping("/projectAlarmRuleObjRels/query")
@@ -19,4 +22,9 @@ public interface AlarmServiceClient {
     @PostMapping("/calculateMethods/query")
     AlarmResult<JSONObject> queryCalculateMethods(@RequestBody CalculateMethodDTO calculateMethodDTO) throws Exception;
 
+
+
+    @PostMapping("/projectMonitorIndicatorConfigs/query_by_equip")
+    AlarmResult<JSONObject> query_by_equip(@RequestBody MonitorIndicatorConfigByEquipDTO monitorIndicatorConfigByEquipDTO) throws Exception;
+
 }

+ 2 - 0
src/main/java/com/persagy/apm/diagnose/indicatorcompute/model/ProjectIndicatorCompute.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.diagnose.indicatorcompute.model;
 
+import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -19,6 +20,7 @@ import java.util.Date;
 public class ProjectIndicatorCompute  implements Serializable {
     private static final long serialVersionUID = 467957951700438996L;
 
+    @TableId
     @ApiModelProperty("项目id")
     private String projectId;
     

+ 6 - 2
src/main/java/com/persagy/apm/diagnose/indicatorcompute/service/IProjectIndicatorComputeService.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.diagnose.indicatorcompute.service;
 
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.persagy.apm.diagnose.indicatorcompute.model.*;
 import com.persagy.apm.diagnose.indicatorcompute.model.dto.*;
 
@@ -9,6 +10,8 @@ import java.util.Map;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.ibatis.annotations.Param;
+import org.apache.poi.ss.formula.functions.T;
 
 /**
  * (ProjectIndicatorCompute) service接口
@@ -16,7 +19,7 @@ import io.swagger.annotations.ApiOperation;
  * @author lixing
  * @version V1.0 2021-09-21 13:32:54
  */
-public interface IProjectIndicatorComputeService {
+public interface IProjectIndicatorComputeService extends IService<ProjectIndicatorCompute> {
 
     /**
      * 创建
@@ -26,7 +29,7 @@ public interface IProjectIndicatorComputeService {
      * @author lixing
      * @version V1.0 2021-09-21 13:32:54
      */
-    public String createProjectIndicatorCompute(AddProjectIndicatorComputeDTO addProjectIndicatorComputeDTO);
+    public String createProjectIndicatorCompute(@Param("addProjectIndicatorComputeDTO") AddProjectIndicatorComputeDTO addProjectIndicatorComputeDTO);
 
     /**
      * 详情
@@ -85,4 +88,5 @@ public interface IProjectIndicatorComputeService {
      * @throws
      */
     public Map<String, ProjectIndicatorCompute> getProjectIdAndProjectCompute();
+
 }

+ 1 - 2
src/main/java/com/persagy/apm/diagnose/indicatorcompute/service/impl/ProjectIndicatorComputeServiceImpl.java

@@ -1,12 +1,10 @@
 package com.persagy.apm.diagnose.indicatorcompute.service.impl;
 
-import com.persagy.apm.common.context.poems.PoemsContext;
 import com.persagy.apm.diagnose.indicatorcompute.dao.ProjectIndicatorComputeMapper;
 import com.persagy.apm.diagnose.indicatorcompute.service.IProjectIndicatorComputeService;
 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.indicatorcompute.model.*;
 import com.persagy.apm.diagnose.indicatorcompute.model.dto.*;
@@ -181,4 +179,5 @@ public class ProjectIndicatorComputeServiceImpl extends ServiceImpl<ProjectIndic
         List<ProjectIndicatorCompute> projectIndicatorComputes = this.queryProjectIndicatorComputeList(new QueryProjectIndicatorComputeDTO());
         return projectIndicatorComputes.stream().collect(Collectors.toMap(ProjectIndicatorCompute::getProjectId, Function.identity(),(key1, key2)->key2));
     }
+
 }

+ 15 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/controller/MonitorIndicatorRecordController.java

@@ -94,5 +94,20 @@ public class MonitorIndicatorRecordController {
 //        });
 //        return ResultHelper.multi(pagedResultList);
 //    }
+
+
+    @ApiOperation(value = "清除报警定义缓存")
+    @PostMapping("/cleanAlarmConfig")
+    public CommonResult cleanAlarmConfig(@Valid @RequestBody CleanAlarmConfigDTO CleanAlarmConfigDTO) {
+        monitorIndicatorRecordService.cleanAlarmConfig(CleanAlarmConfigDTO.getProjectId());
+        return ResultHelper.success();
+    }
+
+    @ApiOperation(value = "清除发数时间记录缓存")
+    @PostMapping("/cleanAlarmConfigSendTime")
+    public CommonResult cleanAlarmConfigSendTime(@Valid @RequestBody CleanAlarmConfigDTO cleanAlarmConfigDTO) {
+        monitorIndicatorRecordService.cleanAlarmConfigSendTime(cleanAlarmConfigDTO);
+        return ResultHelper.success();
+    }
 }
 

+ 21 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/CleanAlarmConfigDTO.java

@@ -0,0 +1,21 @@
+package com.persagy.apm.diagnose.indicatorrecord.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-10 00:13:27
+ */
+@Data
+@ApiModel(value = "清除缓存报警定义入参数")
+public class CleanAlarmConfigDTO {
+    @ApiModelProperty(value = "项目id")
+    private String projectId;
+
+
+    @ApiModelProperty(value = "报警定义id")
+    private String alarmConfigItemId;
+}

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

@@ -20,6 +20,12 @@ public class QueryMonitorIndicatorRecordDTO {
     
     @ApiModelProperty(value = "时间", required = true)
     private Date date;
+
+    @ApiModelProperty(value = "开始时间", required = true)
+    private Date timeFrom;
+
+    @ApiModelProperty(value = "结束时间", required = true)
+    private Date timeTo;
     
     @ApiModelProperty(value = "值", required = true)
     private String value;

+ 80 - 51
src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/IMonitorIndicatorRecordService.java

@@ -3,6 +3,7 @@ package com.persagy.apm.diagnose.indicatorrecord.service;
 import com.persagy.apm.diagnose.indicatorcompute.model.ProjectIndicatorCompute;
 import com.persagy.apm.diagnose.indicatorrecord.model.*;
 import com.persagy.apm.diagnose.indicatorrecord.model.dto.*;
+
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Future;
@@ -18,81 +19,82 @@ import io.swagger.annotations.ApiOperation;
  * @author lixing
  * @version V1.0 2021-09-10 00:13:27
  */
-public interface IMonitorIndicatorRecordService  {
-    
+public interface IMonitorIndicatorRecordService {
+
     /**
-    * 创建监测指标历史记录
-    *
-    * @param addMonitorIndicatorRecordDTO addDTO
-    * @return 监测指标历史记录主键
-    * @author lixing
-    * @version V1.0 2021-09-10 00:13:27
-    */
+     * 创建监测指标历史记录
+     *
+     * @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
-    */
+     * 监测指标历史记录详情
+     *
+     * @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
-    */
+     * 更新监测指标历史记录
+     *
+     * @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
-    */
+     * 删除监测指标历史记录
+     *
+     * @param id 主键
+     * @author lixing
+     * @version V1.0 2021-09-10 00:13:27
+     */
     public void deleteMonitorIndicatorRecord(String id);
-    
+
     /**
-    * 查询监测指标历史记录
-    *
-    * @param queryMonitorIndicatorRecordDTO queryDTO
-    * @return List<MonitorIndicatorRecord>
-    * @author lixing
-    * @version V1.0 2021-09-10 00:13:27
-    */
+     * 查询监测指标历史记录
+     *
+     * @param queryMonitorIndicatorRecordDTO queryDTO
+     * @return List<MonitorIndicatorRecord>
+     * @author lixing
+     * @version V1.0 2021-09-10 00:13:27
+     */
     public List<MonitorIndicatorRecord> queryMonitorIndicatorRecordList(QueryMonitorIndicatorRecordDTO queryMonitorIndicatorRecordDTO);
-    
+
     /**
-    * 分页查询监测指标历史记录
-    * 
-    * @param pageQueryMonitorIndicatorRecordDTO pageQueryDTO
-    * @return IPage<MonitorIndicatorRecord>
-    * @author lixing
-    * @version V1.0 2021-09-10 00:13:27
-    */
+     * 分页查询监测指标历史记录
+     *
+     * @param pageQueryMonitorIndicatorRecordDTO pageQueryDTO
+     * @return IPage<MonitorIndicatorRecord>
+     * @author lixing
+     * @version V1.0 2021-09-10 00:13:27
+     */
     public IPage<MonitorIndicatorRecord> pageQueryMonitorIndicatorRecord(PageQueryMonitorIndicatorRecordDTO pageQueryMonitorIndicatorRecordDTO);
 
 
     /**
+     * @throws
      * @title computeIndicatorData
      * @description 异步计算项目指标数据
-     * @author leifeng 
+     * @author leifeng
      * @param: projectDTO
      * @param: projectIndicatorCompute
      * @param: latch
-     * @updateTime 2021/9/21 14:31 
+     * @updateTime 2021/9/21 14:31
      * @return: java.util.concurrent.Future<java.lang.String>
-     * @throws 
      */
     Future<String> computeIndicatorData(ProjectDTO projectDTO, ProjectIndicatorCompute projectIndicatorCompute, CountDownLatch latch) throws Exception;
 
     /**
+     * @throws
      * @title sendIndicatorData
      * @description 异步发送指标数据
      * @author leifeng
@@ -100,7 +102,34 @@ public interface IMonitorIndicatorRecordService  {
      * @param: latch
      * @updateTime 2021/9/25 16:32
      * @return: java.util.concurrent.Future<java.lang.String>
-     * @throws
      */
     Future<String> sendIndicatorData(ProjectDTO projectDTO, CountDownLatch latch) throws Exception;
+
+    /**
+     * @throws
+     * @title saveOrUpdateByPk
+     * @description 根据表主键插入或更新记录, 主键为projectId, objId, 指标id, 时间
+     * @author leifeng
+     * @param: monitorIndicatorRecord
+     * @updateTime 2021/9/27 11:07
+     */
+    public void saveOrUpdateByPk(MonitorIndicatorRecord monitorIndicatorRecord);
+
+    /**
+     * @throws
+     * @title cleanAlarmConfig
+     * @description 清除redis中报警定义缓存
+     * @author leifeng
+     * @updateTime 2021/9/28 3:07
+     */
+    public void cleanAlarmConfig(String projectId);
+
+    /**
+     * @throws
+     * @title cleanAlarmConfig
+     * @description 清除redis中报警定义缓存
+     * @author leifeng
+     * @updateTime 2021/9/28 3:07
+     */
+    public void cleanAlarmConfigSendTime(CleanAlarmConfigDTO cleanAlarmConfigDTO);
 }

+ 191 - 92
src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/impl/MonitorIndicatorRecordServiceImpl.java

@@ -10,8 +10,6 @@ import com.persagy.apm.common.model.dto.Sort;
 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.model.dto.AddProjectIndicatorComputeDTO;
-import com.persagy.apm.diagnose.indicatorcompute.model.dto.UpdateProjectIndicatorComputeDTO;
 import com.persagy.apm.diagnose.indicatorcompute.service.IProjectIndicatorComputeService;
 import com.persagy.apm.diagnose.indicatorrecord.dao.MonitorIndicatorRecordMapper;
 import com.persagy.apm.diagnose.indicatorrecord.model.ConvertMonitorIndicatorRecordTool;
@@ -21,7 +19,6 @@ import com.persagy.apm.diagnose.indicatorrecord.service.IMonitorIndicatorRecordS
 import com.persagy.apm.diagnose.service.CenterDataService;
 import com.persagy.apm.diagnose.service.EnergyAlarmServiceImpl;
 import com.persagy.apm.diagnose.service.dto.CalculateMethodDTO;
-import com.persagy.apm.diagnose.service.dto.MonitorIndicatorConfigDTO;
 import com.persagy.apm.diagnose.service.dto.ProjectDTO;
 import com.persagy.apm.diagnose.service.dto.TimeDataDTO;
 import com.persagy.apm.diagnose.timerecord.model.CalculateTimeRecord;
@@ -81,6 +78,9 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
     private CenterDataService centerDataService;
 
 
+    public final static String alarmSlipt = "_";
+
+
     @Value(value = "${energy.eq.run.compute.round.days:1}")
     private Integer roundDays;
 
@@ -88,6 +88,13 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
     @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;
 
 
@@ -168,7 +175,6 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
         if (monitorIndicatorRecord == null) {
             throw new IllegalArgumentException("删除MonitorIndicatorRecord时发生异常,找不到要删除的数据,id:" + id);
         }
-
         return monitorIndicatorRecord;
     }
 
@@ -213,13 +219,21 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
                 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);
     }
 
@@ -272,77 +286,70 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
     @Async("asyncComputeDataExecutor")
     public Future<String> computeIndicatorData(ProjectDTO projectDTO, ProjectIndicatorCompute projectIndicatorCompute, CountDownLatch latch) throws Exception {
         long time = System.currentTimeMillis() + (20 * 1000);
-        if (!lockUtil.lock(projectDTO.getProjectId(), String.valueOf(time))) {
-            // 获取不到锁,略过
-            return new AsyncResult<>("【监测指标数据计算线程】项目:" + projectDTO.getProjectId() + "被占用");
-        }
-        try{
+        try {
+            if (!lockUtil.lock(projectDTO.getProjectId() + "_compute", String.valueOf(time))) {
+                // 获取不到锁,略过
+                return new AsyncResult<>("【监测指标数据计算线程】项目:" + projectDTO.getProjectId() + "被占用");
+            }
+
             long start = System.currentTimeMillis();
             AsyncResult<String> projectDTO1 = computeProjectIndicatorData(projectDTO, projectIndicatorCompute);
             if (projectDTO1 != null) {
                 return projectDTO1;
             }
-            // 释放锁
             long end = System.currentTimeMillis();
             return new AsyncResult<>("【监测指标数据计算线程】计算项目指标数据用时:" + projectDTO.getProjectId() + ";" + (end - start));
-        }catch (Exception e){
-            throw(e);
-        }finally {
-            lockUtil.unlock(projectDTO.getProjectId(), String.valueOf(time));
+        } finally {
+            // 释放锁
+            lockUtil.unlock(projectDTO.getProjectId() + "_compute", String.valueOf(time));
             latch.countDown();
         }
 
     }
 
     private AsyncResult<String> computeProjectIndicatorData(ProjectDTO projectDTO, ProjectIndicatorCompute projectIndicatorCompute) throws Exception {
-        Object hget = redisUtil.hget(RedisUtil.TargetComputeTime, projectDTO.getProjectId());
-        if (hget != null && projectIndicatorCompute != null
-                && projectIndicatorCompute.getComputeRound() < Long.parseLong(hget.toString())) {
+        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() + "查询到报警条件");
+            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);
         }
 
         Map<String, Date> objId_indicatorIdAndComputeTIme = getObjId_IndicatorIdAndComputeTIme(projectDTO);
-
         Map<String, CalculateMethodDTO> methodIdAndMethodDTO = energyAlarmService.queryCalculateMethods();
 
-        Map<String, String> objId_IndicatorAndCaculateMethodId = getObjId_IndicatorAndCaculateMethodIdMap(projectDTO);
-
+        Map<String, Set<String>> objIdAndInfoCodes = getObjIdAndInfoCodes(configItemList, objIdAndObj);
 
         //根据报警条件查询监测对象
-        for (AlarmConfigItem configItem : configItemList) {
-            String objId = configItem.getObjId();
-            AlarmCondition condition = configItem.getCondition();
-            List<String> infoCodeList = condition.getInfoCode();
-            if (CollectionUtils.isEmpty(infoCodeList)) {
+        for (Map.Entry<String, Set<String>> entry : objIdAndInfoCodes.entrySet()) {
+            String objId = entry.getKey();
+            Set<String> infoCodes = entry.getValue();
+            if (CollectionUtils.isEmpty(infoCodes)) {
                 continue;
             }
-            JSONObject obj = objIdAndObj.get(objId);
-            if (obj == null) {
+            //获取对象id及指标相应公式id
+            Map<String, String> objId_indicatorAndMethodId = getObjId_indicatorAndMethodId(projectDTO, objId, new ArrayList<>(infoCodes));
+            if (objId_indicatorAndMethodId.isEmpty()) {
+                log.error("【监测指标数据计算线程】:项目监控指标未设置公式:" + projectDTO.getProjectId() + ";" + objId);
                 continue;
             }
             //处理监控指标
-            for (String infocode : infoCodeList) {
-                if (!objId_IndicatorAndCaculateMethodId.containsKey(infocode)) {
-                    //监控指标未设置公式
-                    log.error("【监测指标数据计算线程】:监控指标未设置公式:" + infocode);
-                    continue;
-                }
-                String caculateMethodId = objId_IndicatorAndCaculateMethodId.get(infocode);
+            for (String infocode : infoCodes) {
+                String caculateMethodId = objId_indicatorAndMethodId.get(infocode);
                 if (StringUtils.isEmpty(caculateMethodId)) {
                     log.error("【监测指标数据计算线程】:监控指标未设置公式:" + infocode);
                     continue;
@@ -354,14 +361,15 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
                 }
 
                 Date lastComputeTime = objId_indicatorIdAndComputeTIme.get(infocode);
-                if(lastComputeTime==null){
-                    lastComputeTime=DateUtils.str2Date("2021-09-02 00:00:00",DateUtils.SDF_SECOND);
+                if (lastComputeTime == null) {
+                    lastComputeTime = getDefultStartTime();
                 }
                 Date computeEndTime = DateUtils.addDays(lastComputeTime, roundDays);
-
                 String indicatorId = getIndicatorIdFromInfocode(infocode);
                 String formula = calculateMethodDTO.getFormula();
-                computeIndicatorData(projectDTO, obj, lastComputeTime, computeEndTime, indicatorId, formula);
+                JSONObject obj = objIdAndObj.get(objId);
+                Date computeTime = computeIndicatorData(projectDTO, obj, lastComputeTime, computeEndTime, indicatorId, formula);
+                saveOrUpdateComputeTime(projectDTO.getProjectId(), obj.getString("id"), indicatorId, computeTime);
             }
         }
         // 更新缓存计算轮次
@@ -369,37 +377,129 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
         return null;
     }
 
+    private Date getDefultStartTime() throws Exception {
+        Date lastComputeTime;
+        if (StringUtils.isBlank(dStartTime)) {
+            lastComputeTime = new Date();
+        } else {
+            lastComputeTime = DateUtils.str2Date(dStartTime, 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) {
+            return;
+        }
+        CalculateTimeRecord update = new CalculateTimeRecord();
+        update.setMonitorIndicatorId(indicatorId);
+        update.setObjId(objId);
+        update.setProjectId(projectId);
+        update.setCalculateLastTime(computeTime);
+        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")
     public Future<String> sendIndicatorData(ProjectDTO projectDTO, CountDownLatch latch) throws Exception {
         long time = System.currentTimeMillis() + (20 * 1000);
-        if (!lockUtil.lock(projectDTO.getProjectId() + "_sendData", String.valueOf(time))) {
-            // 获取不到锁,略过
-            return new AsyncResult<>("发送指标数据:项目:" + projectDTO.getProjectId() + "被占用");
-        }
-        try{
+        try {
+            if (!lockUtil.lock(projectDTO.getProjectId() + "_sendData", String.valueOf(time))) {
+                // 获取不到锁,略过
+                return new AsyncResult<>("【监测指标数据计算线程】:项目:" + projectDTO.getProjectId() + "被占用");
+            }
+
             long start = System.currentTimeMillis();
             sendIndicatorDataToAlarmServer(projectDTO);
             long end = System.currentTimeMillis();
-            return new AsyncResult<>("【监测指标数据计算线程】计算项目指标数据用时:" + projectDTO.getProjectId() + ";" + (end - start));
-        }catch (Exception e){
-            throw(e);
-        }finally {
+            return new AsyncResult<>("【监测指标数据发送线程】发送项目指标数据用时:" + projectDTO.getProjectId() + ";" + (end - start));
+        } finally {
             lockUtil.unlock(projectDTO.getProjectId() + "_sendData", String.valueOf(time));
             latch.countDown();
         }
+    }
+
+    @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);
+        } else {
+            this.update(monitorIndicatorRecord, queryWrapper);
+        }
+    }
+
+    @Override
+    public void cleanAlarmConfig(String projectId) {
+        if (StringUtils.isBlank(projectId)) {
+            redisUtil.del(RedisUtil.PROJECT_ALARM_ITEM);
+        } else {
+            redisUtil.hdel(RedisUtil.PROJECT_ALARM_ITEM, projectId);
+        }
 
     }
 
+    @Override
+    public void cleanAlarmConfigSendTime(CleanAlarmConfigDTO cleanAlarmConfigDTO) {
+        if (StringUtils.isBlank(cleanAlarmConfigDTO.getProjectId())) {
+            //清除所有
+            redisUtil.del(RedisUtil.PROJECT_ITEM_SEND_TIME);
+        } else if (StringUtils.isBlank(cleanAlarmConfigDTO.getAlarmConfigItemId())) {
+            //清除项目
+            redisUtil.del(RedisUtil.PROJECT_ALARM_ITEM + ":" + cleanAlarmConfigDTO.getProjectId());
+        } else {
+            //清除指定
+            redisUtil.hdel(RedisUtil.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() + "为查询到报警条件");
+            return;
         }
+
         for (AlarmConfigItem alarmConfigItem : configItemList) {
-            ConfigItemDataSendTimeDTO configItemSendTimeDTO = getConfigItemSendTimeDTO(projectDTO, alarmConfigItem);
-            Date lastSendTime = configItemSendTimeDTO.getLastSendTime();
             AlarmCondition condition = alarmConfigItem.getCondition();
             if (condition == null) {
                 continue;
@@ -408,19 +508,30 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
             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, infoCodes, endTime);
+            List<MonitorIndicatorRecord> list = getMonitorIndicatorRecordsGtLte(projectDTO, alarmConfigItem, lastSendTime, getIndicatorIdListFromInfoCodes(infoCodes), endTime);
             if (CollectionUtils.isEmpty(list)) {
                 continue;
             }
 
-            Map<Date, List<MonitorIndicatorRecord>> timeAndIndicatorDataList = list.stream().collect(Collectors.groupingBy(MonitorIndicatorRecord::getDate, Collectors.toList()));
-            for (Map.Entry<Date, List<MonitorIndicatorRecord>> dateListEntry : timeAndIndicatorDataList.entrySet()) {
+
+            Map<String, List<MonitorIndicatorRecord>> timeKeyAndRecordList = new LinkedHashMap<>();
+            for (MonitorIndicatorRecord record : list) {
+                String timeKey = DateUtils.date2Str(record.getDate(), DateUtils.SDF_SECOND);
+                if (!timeKeyAndRecordList.containsKey(timeKey)) {
+                    timeKeyAndRecordList.put(timeKey, new ArrayList<>());
+                }
+                timeKeyAndRecordList.get(timeKey).add(record);
+            }
+            for (Map.Entry<String, List<MonitorIndicatorRecord>> dateListEntry : timeKeyAndRecordList.entrySet()) {
                 List<MonitorIndicatorRecord> value = dateListEntry.getValue();
                 if (CollectionUtils.isEmpty(value) || value.size() != infoCodes.size()) {
                     continue;
                 }
                 AlarmWebSocketServer.sendMsgToClients(projectDTO.getProjectId(), CollectDataUtil.buildSendParam(value));
+                endTime = DateUtils.str2Date(dateListEntry.getKey(), DateUtils.SDF_SECOND);
             }
             configItemSendTimeDTO.setLastSendTime(endTime);
             updateRedisConfigItemSendTimeDTO(projectDTO.getProjectId(), configItemSendTimeDTO);
@@ -452,8 +563,8 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
         queryWrapper.eq(MonitorIndicatorRecord.PROJECT_ID, projectDTO.getProjectId());
         queryWrapper.eq(MonitorIndicatorRecord.PROP_OBJ_ID, alarmConfigItem.getObjId());
         queryWrapper.in(MonitorIndicatorRecord.PROP_MONITOR_INDICATOR_ID, infoCodes);
-        queryWrapper.ge(MonitorIndicatorRecord.PROP_DATE, lastSendTime);
-        queryWrapper.lt(true, MonitorIndicatorRecord.PROP_DATE, endTime);
+        queryWrapper.gt(MonitorIndicatorRecord.PROP_DATE, lastSendTime);
+        queryWrapper.le(MonitorIndicatorRecord.PROP_DATE, endTime);
         queryWrapper.orderByAsc(MonitorIndicatorRecord.PROP_DATE);
         return list(queryWrapper);
     }
@@ -470,9 +581,7 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
     private ConfigItemDataSendTimeDTO getConfigItemSendTimeDTO(ProjectDTO projectDTO, AlarmConfigItem alarmConfigItem) throws Exception {
         ConfigItemDataSendTimeDTO sendTimeDTO = (ConfigItemDataSendTimeDTO) redisUtil.hget(RedisUtil.PROJECT_ITEM_SEND_TIME + ":" + projectDTO.getProjectId(), alarmConfigItem.getId());
         if (sendTimeDTO == null) {
-            //第一次发送
-//            sendTimeDTO = ConfigItemDataSendTimeDTO.builder().objId(alarmConfigItem.getObjId()).configItemid(alarmConfigItem.getId()).lastSendTime(DateUtils.getStartTimeOfDay(new Date())).build();
-            sendTimeDTO = ConfigItemDataSendTimeDTO.builder().objId(alarmConfigItem.getObjId()).configItemid(alarmConfigItem.getId()).lastSendTime(DateUtils.str2Date("2021-09-02 00:00:00",DateUtils.SDF_SECOND)).build();
+            sendTimeDTO = ConfigItemDataSendTimeDTO.builder().objId(alarmConfigItem.getObjId()).configItemid(alarmConfigItem.getId()).lastSendTime(getDefultStartTime()).build();
         }
         return sendTimeDTO;
     }
@@ -499,18 +608,17 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
      */
     private void updateProjectComputeRound(String projectId, ProjectIndicatorCompute projectCompute) {
         Integer round = 1;
+        ProjectIndicatorCompute projectIndicatorCompute = new ProjectIndicatorCompute();
+        projectIndicatorCompute.setProjectId(projectId);
+
+        projectIndicatorCompute.setComputeTime(new Date());
         if (projectCompute == null) {
-            AddProjectIndicatorComputeDTO addProjectIndicatorComputeDTO = new AddProjectIndicatorComputeDTO();
-            addProjectIndicatorComputeDTO.setProjectId(projectId);
-            addProjectIndicatorComputeDTO.setComputeRound(1);
-            addProjectIndicatorComputeDTO.setComputeTime(new Date());
-            projectIndicatorComputeService.createProjectIndicatorCompute(addProjectIndicatorComputeDTO);
+            projectIndicatorCompute.setComputeRound(round);
+            projectIndicatorComputeService.save(projectIndicatorCompute);
         } else {
-            UpdateProjectIndicatorComputeDTO updateProjectIndicatorComputeDTO = new UpdateProjectIndicatorComputeDTO();
-            updateProjectIndicatorComputeDTO.setComputeRound(round = getComputeRound(projectCompute.getComputeRound()));
-            updateProjectIndicatorComputeDTO.setProjectId(projectCompute.getProjectId());
-            updateProjectIndicatorComputeDTO.setComputeTime(new Date());
-            projectIndicatorComputeService.updateProjectIndicatorCompute(updateProjectIndicatorComputeDTO);
+            round = getComputeRound(projectCompute.getComputeRound());
+            projectIndicatorCompute.setComputeRound(round);
+            projectIndicatorComputeService.updateById(projectIndicatorCompute);
         }
         redisUtil.hset(RedisUtil.TargetComputeTime, projectId, round.toString());
     }
@@ -544,20 +652,23 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
      * @param: formula
      * @updateTime 2021/9/25 20:11
      */
-    private void computeIndicatorData(ProjectDTO projectDTO, JSONObject obj, Date lastComputeTime, Date computeEndTime, String indicatorId, String formula) throws Exception {
+    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()) {
-            Double targetData;
             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;
@@ -567,13 +678,15 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
             monitorIndicatorRecord.setDate(dataTime);
             monitorIndicatorRecord.setObjId(obj.getString("id"));
             monitorIndicatorRecord.setProjectId(projectDTO.getProjectId());
-            saveOrUpdate(monitorIndicatorRecord);
+            monitorIndicatorRecord.setValue(targetData);
+            saveOrUpdateByPk(monitorIndicatorRecord);
         }
+        return timeEnd;
     }
 
     private String getIndicatorIdFromInfocode(String infocode) {
-        int lastIndex = infocode.lastIndexOf("_");
-        return infocode.substring(lastIndex);
+        int indexOf = infocode.indexOf(alarmSlipt);
+        return infocode.substring(indexOf + 1);
     }
 
     /**
@@ -584,21 +697,9 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
      */
     private Map<String, Date> getObjId_IndicatorIdAndComputeTIme(ProjectDTO projectDTO) {
         List<CalculateTimeRecord> calculateTimeRecords = calculateTimeRecordService.queryTimeRecordListByProjectId(projectDTO.getProjectId());
-        return calculateTimeRecords.stream().collect(Collectors.toMap(a -> a.getObjId() + "_" + a.getMonitorIndicatorId(), CalculateTimeRecord::getCalculateLastTime));
+        return calculateTimeRecords.stream().collect(Collectors.toMap(a -> a.getObjId() + alarmSlipt + a.getMonitorIndicatorId(), CalculateTimeRecord::getCalculateLastTime));
     }
 
-    /**
-     * @title getObjId_IndicatorAndCaculateMethodIdMap
-     * @description 查询对象id与指标id的计算公式关系, key为objId_indicatorId, value为计算公式id
-     * @author leifeng
-     * @param: projectDTO
-     * @updateTime 2021/9/24 11:26
-     * @return: java.util.Map<java.lang.String, java.lang.String>
-     */
-    private Map<String, String> getObjId_IndicatorAndCaculateMethodIdMap(ProjectDTO projectDTO) throws Exception {
-        List<MonitorIndicatorConfigDTO> monitorIndicatorConfigDTOS = energyAlarmService.queryMonitorIndicatorConfigDTOList(projectDTO.getProjectId());
-        return monitorIndicatorConfigDTOS.stream().collect(Collectors.toMap(a -> a.getObjId() + "_" + a.getMonitorIndicatorId(), MonitorIndicatorConfigDTO::getCaculateMethodId));
-    }
 
     /**
      * @title getAlarmConfigItemList
@@ -746,7 +847,7 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
                 assert startTime != null;
                 return getServiceDataFromCenterDataService(computeCalculateDTO.getProjectId(),
                         computeCalculateDTO.getObj().getString("id"), computeCode, timeType, startTime,
-                        DateUtils.addMinutes(startTime, 1));
+                        DateUtils.addHours(startTime, computeAfterHour));
             }
         } else {
             // 查询指标数据
@@ -781,9 +882,7 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
                 startTime2, EnumDataTimeType.getEnumDataTimeType(timeType));
         List<Double> result = new ArrayList<>();
         if (!CollectionUtils.isEmpty(dataList)) {
-            for (TimeDataDTO data : dataList) {
-                result.add(data.getData());
-            }
+            result.add(dataList.get(0).getData());
         }
         if (CollectionUtils.isEmpty(result)) {
             log.error("【指标计算线程】:查询数据中台对象历史数据为空,projectId:" + projectId + ";objId:" + objId + ";信息点:" + computeCode

+ 4 - 21
src/main/java/com/persagy/apm/diagnose/service/ComputeIndicatorDataService.java

@@ -1,13 +1,9 @@
 package com.persagy.apm.diagnose.service;
 
 import com.persagy.apm.diagnose.indicatorcompute.model.ProjectIndicatorCompute;
-import com.persagy.apm.diagnose.indicatorcompute.model.dto.QueryProjectIndicatorComputeDTO;
 import com.persagy.apm.diagnose.indicatorcompute.service.IProjectIndicatorComputeService;
 import com.persagy.apm.diagnose.indicatorrecord.service.IMonitorIndicatorRecordService;
 import com.persagy.apm.diagnose.service.dto.ProjectDTO;
-import com.persagy.apm.diagnose.timerecord.model.CalculateTimeRecord;
-import com.persagy.apm.diagnose.timerecord.model.dto.QueryCalculateTimeRecordDTO;
-import com.persagy.apm.diagnose.timerecord.service.ICalculateTimeRecordService;
 import com.persagy.apm.diagnose.utils.CommonUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,8 +15,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Future;
-import java.util.function.Function;
-import java.util.stream.Collectors;
 
 /**
  * @author leifeng
@@ -39,14 +33,12 @@ public class ComputeIndicatorDataService {
     @Autowired
     private IMonitorIndicatorRecordService monitorIndicatorRecordService;
 
-    @Autowired
-    private ICalculateTimeRecordService calculateTimeRecordService;
+
     @Autowired
     private IProjectIndicatorComputeService projectIndicatorComputeService;
 
 
     /**
-     * @throws
      * @title computeIndicatorData
      * @description 计算指标数据
      * @author leifeng
@@ -61,14 +53,9 @@ public class ComputeIndicatorDataService {
         Map<String, ProjectIndicatorCompute> projectIdAndProjectCompute = projectIndicatorComputeService.getProjectIdAndProjectCompute();
 
         List<Future<String>> futureList = new ArrayList<>();
-//        CountDownLatch latch = new CountDownLatch(projectDTOList.size());
-        CountDownLatch latch = new CountDownLatch(1);
+        CountDownLatch latch = new CountDownLatch(projectDTOList.size());
         for (ProjectDTO projectDTO : projectDTOList) {
-            if (!projectDTO.getProjectId().equals("Pj1101060001")) {
-                continue;
-            }
-            Future<String> stringFuture = monitorIndicatorRecordService.computeIndicatorData(projectDTO, projectIdAndProjectCompute.get(projectDTO.getProjectId()), latch);
-            futureList.add(stringFuture);
+            futureList.add(monitorIndicatorRecordService.computeIndicatorData(projectDTO, projectIdAndProjectCompute.get(projectDTO.getProjectId()), latch));
         }
         //等待所有任务执行完
         latch.await();
@@ -88,12 +75,8 @@ public class ComputeIndicatorDataService {
             return;
         }
         List<Future<String>> futureList = new ArrayList<>();
-//        CountDownLatch latch = new CountDownLatch(projectDTOList.size());
-        CountDownLatch latch = new CountDownLatch(1);
+        CountDownLatch latch = new CountDownLatch(projectDTOList.size());
         for (ProjectDTO projectDTO : projectDTOList) {
-            if (!projectDTO.getProjectId().equals("Pj1101051029")||!projectDTO.getProjectId().equals("Pj1101051029")) {
-                continue;
-            }
             futureList.add(monitorIndicatorRecordService.sendIndicatorData(projectDTO, latch));
         }
         //等待所有任务执行完

+ 65 - 10
src/main/java/com/persagy/apm/diagnose/service/EnergyAlarmServiceImpl.java

@@ -4,15 +4,22 @@ import com.alibaba.fastjson.JSONArray;
 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.utils.AlarmResultUtil;
+import com.persagy.apm.diagnose.utils.DmpResultUtil;
+import com.persagy.apm.diagnose.utils.RedisUtil;
+import com.persagy.apm.energyalarmstarter.alarmdata.feign.DmpResult;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.QueryAlarmConfigDTO;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmConfigItem;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -28,37 +35,85 @@ public class EnergyAlarmServiceImpl {
 
     @Autowired
     AlarmServiceClient alarmServiceClient;
+    @Autowired
+    RedisUtil redisUtil;
 
     /**
+     * @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>
-     * @throws
      */
     public List<MonitorIndicatorConfigDTO> queryMonitorIndicatorConfigDTOList(String projectId) throws Exception {
         MonitorIndicatorConfigDTO monitorIndicatorConfigDTO = MonitorIndicatorConfigDTO.builder().build();
         monitorIndicatorConfigDTO.setProjectId(projectId);
+        monitorIndicatorConfigDTO.setGroupCode("WD");
+        monitorIndicatorConfigDTO.setPd("asdasdasda");
+        monitorIndicatorConfigDTO.setUserId("test");
         AlarmResult<JSONObject> result = alarmServiceClient.query(monitorIndicatorConfigDTO);
-        return AlarmResultUtil.getRecords(result,MonitorIndicatorConfigDTO.class);
+        return AlarmResultUtil.getRecords(result, MonitorIndicatorConfigDTO.class);
     }
 
 
     /**
+     * @throws
      * @title queryCalculateMethods
-     * @description 查询所有计算公式,key为公式id
+     * @description 查询所有计算公式, key为公式id
      * @author leifeng
      * @updateTime 2021/9/23 20:29
-     * @return: java.util.Map<java.lang.String,com.persagy.apm.diagnose.service.dto.CalculateMethodDTO>
-     * @throws
+     * @return: java.util.Map<java.lang.String, com.persagy.apm.diagnose.service.dto.CalculateMethodDTO>
      */
     public Map<String, CalculateMethodDTO> queryCalculateMethods() throws Exception {
-        AlarmResult<JSONObject> result = alarmServiceClient.queryCalculateMethods(CalculateMethodDTO.builder().build());
+        AlarmResult<JSONObject> result = alarmServiceClient.queryCalculateMethods(CalculateMethodDTO.builder().groupCode("WD").userId("test").pd("asdasdasdasdadsdasdasdasdasdasd").build());
         List<CalculateMethodDTO> records = AlarmResultUtil.getRecords(result, CalculateMethodDTO.class);
         return records.stream().collect(Collectors.toMap(CalculateMethodDTO::getId, Function.identity(), (key1, key2) -> key2));
     }
 
-
+    /**
+     * @throws
+     * @title queryObjIndicatorMethodId
+     * @description 查询对象指标公式
+     * @author leifeng
+     * @param: objId
+     * @param: indicatorList
+     * @updateTime 2021/9/27 11:54
+     */
+    public Map<String, String> queryObjId_indicatorAndMethodId(String projectId,String objId, List<String> indicatorIdList) throws Exception {
+        MonitorIndicatorConfigByEquipDTO build = MonitorIndicatorConfigByEquipDTO.builder().projectId(projectId).objId(objId).monitorIndicatorId(indicatorIdList).groupCode("WD").userId("test").pd("wwwwwwwwww").build();
+        AlarmResult<JSONObject> result = alarmServiceClient.query_by_equip(build);
+        JSONObject content = result.getContent();
+        if (content == null) {
+            return new HashMap<>();
+        }
+        JSONArray records = content.getJSONArray("records");
+        if (records == null) {
+            return new HashMap<>();
+        }
+        List<ObjIndicatorMethodDTO> objIndicatorMethodDTOs = new ArrayList<>();
+        ObjIndicatorMethodDTO objIndicatorMethodDTO = null;
+        for (Object record : records) {
+            objIndicatorMethodDTO = new ObjIndicatorMethodDTO();
+            JSONObject recordObj = (JSONObject) record;
+            JSONObject obj1 = recordObj.getJSONObject("obj");
+            if (obj1 == null) {
+                continue;
+            }
+            JSONObject monitorIndicator = recordObj.getJSONObject("monitorIndicator");
+            if (monitorIndicator == null) {
+                continue;
+            }
+            JSONObject calculateMethod = recordObj.getJSONObject("calculateMethod");
+            if (calculateMethod == null) {
+                continue;
+            }
+            objIndicatorMethodDTO.setObjId(obj1.getString("id"));
+            objIndicatorMethodDTO.setCalculateMethodId(calculateMethod.getString("id"));
+            objIndicatorMethodDTO.setMonitorIndicatorId(monitorIndicator.getString("id"));
+            objIndicatorMethodDTOs.add(objIndicatorMethodDTO);
+        }
+        return objIndicatorMethodDTOs.stream().collect(Collectors.toMap(a -> a.getObjId() + MonitorIndicatorRecordServiceImpl.alarmSlipt + a.getMonitorIndicatorId(), ObjIndicatorMethodDTO::getCalculateMethodId));
+    }
 }

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

@@ -36,8 +36,8 @@ public class NettyAlarmServiceImpl extends NettyAlarmService {
             throw new Exception("infoCode格式不正确,应包含'" + separator +
                     "',classCode=" + classCode + "; infoCode=" + infoCode);
         }
-        String[] tmp = infoCode.split(separator);
-        return tmp[1];
+        int indexOf = infoCode.indexOf(separator);
+        return infoCode.substring(indexOf + 1);
     }
 
     @Override

+ 10 - 6
src/main/java/com/persagy/apm/diagnose/service/dto/CalculateMethodDTO.java

@@ -7,20 +7,24 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 /**
- * @ClassName CalculateMethodDTO
  * @author leifeng
  * @version 1.0.0
+ * @ClassName CalculateMethodDTO
  * @Description 计算公式实体
  * @createTime 2021/9/23 15:12
  */
 @Data
-@Builder(toBuilder=true)
+@Builder(toBuilder = true)
 @NoArgsConstructor
 @AllArgsConstructor
 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class CalculateMethodDTO {
-	private String id;
-	private String monitorIndicatorId;
-	private String name;
-	private String formula;
+    private String id;
+    private String monitorIndicatorId;
+    private String name;
+    private String formula;
+    private String groupCode;
+    private String userId = "test";
+    private String pd = "pd";
+
 }

+ 32 - 0
src/main/java/com/persagy/apm/diagnose/service/dto/MonitorIndicatorConfigByEquipDTO.java

@@ -0,0 +1,32 @@
+package com.persagy.apm.diagnose.service.dto;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @author leifeng
+ * @version 1.0.0
+ * @ClassName CalculateMethodDTO
+ * @Description 计算公式实体
+ * @createTime 2021/9/23 15:12
+ */
+@Data
+@Builder(toBuilder = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class MonitorIndicatorConfigByEquipDTO {
+    private String objId;
+    private List<String> monitorIndicatorId;
+    private String groupCode;
+    private String userId = "test";
+    private String pd = "pd";
+    private String projectId;
+
+
+}

+ 4 - 0
src/main/java/com/persagy/apm/diagnose/service/dto/MonitorIndicatorConfigDTO.java

@@ -24,4 +24,8 @@ public class MonitorIndicatorConfigDTO {
 	private String id;
 	private String monitorIndicatorId;
 	private String objId;
+	private String groupCode;
+	private String userId;
+	private String pd;
+
 }

+ 25 - 0
src/main/java/com/persagy/apm/diagnose/service/dto/ObjIndicatorMethodDTO.java

@@ -0,0 +1,25 @@
+package com.persagy.apm.diagnose.service.dto;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author leifeng
+ * @version 1.0.0
+ * @ClassName CalculateMethodDTO
+ * @Description 计算公式实体
+ * @createTime 2021/9/23 15:12
+ */
+@Data
+@Builder(toBuilder = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ObjIndicatorMethodDTO {
+    private String objId;
+    private String monitorIndicatorId;
+    private String calculateMethodId;
+}

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

@@ -28,6 +28,6 @@ public class SendIndicatorData {
     	    return;
 		}
         log.info("【发送监测指标数据线程】:发送指标数据开始.......");
-//        computeIndicatorDataService.sendIndicatorData();
+        computeIndicatorDataService.sendIndicatorData();
     }
 }

+ 10 - 0
src/main/java/com/persagy/apm/diagnose/timerecord/service/ICalculateTimeRecordService.java

@@ -83,4 +83,14 @@ public interface ICalculateTimeRecordService  {
  * @throws
  */
     public List<CalculateTimeRecord> queryTimeRecordListByProjectId(String projectId);
+
+    /**
+     * @title saveOrUpdateByPk
+     * @description 根据主键更新实体
+     * @author leifeng
+     * @param: update
+     * @updateTime 2021/9/27 18:17
+     * @throws
+     */
+    public void saveOrUpdateByPk(CalculateTimeRecord update);
 }

+ 80 - 56
src/main/java/com/persagy/apm/diagnose/timerecord/service/impl/CalculateTimeRecordServiceImpl.java

@@ -1,6 +1,7 @@
 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;
@@ -10,7 +11,9 @@ 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.*;
+
 import java.util.List;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.base.CaseFormat;
@@ -24,15 +27,16 @@ import org.springframework.util.CollectionUtils;
  * @version V1.0 2021-09-10 00:13:10
  */
 @Service
-public class CalculateTimeRecordServiceImpl extends ServiceImpl<CalculateTimeRecordMapper, CalculateTimeRecord> 
-    implements ICalculateTimeRecordService {
-    
+public class CalculateTimeRecordServiceImpl extends ServiceImpl<CalculateTimeRecordMapper, CalculateTimeRecord>
+        implements ICalculateTimeRecordService {
+
     /**
-    * 创建监测指标计算时间
-    * @return 监测指标计算时间主键
-    * @author lixing
-    * @version V1.0 2021-09-10 00:13:10
-    */
+     * 创建监测指标计算时间
+     *
+     * @return 监测指标计算时间主键
+     * @author lixing
+     * @version V1.0 2021-09-10 00:13:10
+     */
     @Override
     public String createCalculateTimeRecord(AddCalculateTimeRecordDTO addCalculateTimeRecordDTO) {
         CalculateTimeRecord calculateTimeRecord = ConvertCalculateTimeRecordTool.INSTANCE.convertAddDto2Entity(addCalculateTimeRecordDTO);
@@ -41,7 +45,7 @@ public class CalculateTimeRecordServiceImpl extends ServiceImpl<CalculateTimeRec
         save(calculateTimeRecord);
         return null;
     }
-    
+
     /**
      * 如果某些字段没有赋值,使用默认的值
      *
@@ -52,16 +56,17 @@ public class CalculateTimeRecordServiceImpl extends ServiceImpl<CalculateTimeRec
     private void setDefaultValue(CalculateTimeRecord calculateTimeRecord) {
 //        calculateTimeRecord.setCreator(AppContext.getContext().getAccountId());
         // todo 其他默认的属性
-        
+
     }
-    
+
     /**
-    * 监测指标计算时间详情
-    * @param id 主键
-    * @return 部门do类
-    * @author lixing
-    * @version V1.0 2021-09-10 00:13:10
-    */
+     * 监测指标计算时间详情
+     *
+     * @param id 主键
+     * @return 部门do类
+     * @author lixing
+     * @version V1.0 2021-09-10 00:13:10
+     */
     @Override
     public CalculateTimeRecord queryCalculateTimeRecordDetail(String id) {
         CalculateTimeRecord calculateTimeRecord = getById(id);
@@ -70,12 +75,13 @@ public class CalculateTimeRecordServiceImpl extends ServiceImpl<CalculateTimeRec
         }
         return calculateTimeRecord;
     }
-    
+
     /**
-    * 更新监测指标计算时间
-    * @author lixing
-    * @version V1.0 2021-09-10 00:13:10
-    */
+     * 更新监测指标计算时间
+     *
+     * @author lixing
+     * @version V1.0 2021-09-10 00:13:10
+     */
     @Override
     public void updateCalculateTimeRecord(UpdateCalculateTimeRecordDTO updateCalculateTimeRecordDTO) {
         CalculateTimeRecord calculateTimeRecord = getById(updateCalculateTimeRecordDTO.getId());
@@ -83,7 +89,7 @@ public class CalculateTimeRecordServiceImpl extends ServiceImpl<CalculateTimeRec
 //        calculateTimeRecord.setModifier(AppContext.getContext().getAccountId());
         updateById(calculateTimeRecord);
     }
-    
+
     /**
      * 校验监测指标计算时间是否可删除
      *
@@ -105,13 +111,14 @@ public class CalculateTimeRecordServiceImpl extends ServiceImpl<CalculateTimeRec
 
         return calculateTimeRecord;
     }
-    
+
     /**
-    * 删除监测指标计算时间
-    * @param id 主键
-    * @author lixing
-    * @version V1.0 2021-09-10 00:13:10
-    */
+     * 删除监测指标计算时间
+     *
+     * @param id 主键
+     * @author lixing
+     * @version V1.0 2021-09-10 00:13:10
+     */
     @Override
     public void deleteCalculateTimeRecord(String id) {
         // 校验是否可删除
@@ -120,80 +127,82 @@ public class CalculateTimeRecordServiceImpl extends ServiceImpl<CalculateTimeRec
 //        calculateTimeRecord.setValid(ValidEnum.FALSE.getType());
         updateById(calculateTimeRecord);
     }
-    
+
     /**
-    * 查询监测指标计算时间
-    * @return List<CalculateTimeRecord>
-    * @author lixing
-    * @version V1.0 2021-09-10 00:13:10
-    */
+     * 查询监测指标计算时间
+     *
+     * @return List<CalculateTimeRecord>
+     * @author lixing
+     * @version V1.0 2021-09-10 00:13:10
+     */
     @Override
     public List<CalculateTimeRecord> queryCalculateTimeRecordList(QueryCalculateTimeRecordDTO queryCalculateTimeRecordDTO) {
         QueryWrapper<CalculateTimeRecord> queryWrapper = new QueryWrapper<>();
 //        queryWrapper.eq(CalculateTimeRecord.PROP_VALID, ValidEnum.TRUE.getType());
         // 默认按创建时间倒序排序
 //        queryWrapper.orderBy(true, false, CalculateTimeRecord.PROP_CREATIONTIME);
-        
+
         if (queryCalculateTimeRecordDTO != null) {
-                                
+
             // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryCalculateTimeRecordDTO.getObjId())) {
                 queryWrapper.like(CalculateTimeRecord.PROP_OBJ_ID, queryCalculateTimeRecordDTO.getObjId());
             }
-                                        
+
             // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryCalculateTimeRecordDTO.getMonitorIndicatorId())) {
                 queryWrapper.like(CalculateTimeRecord.PROP_MONITOR_INDICATOR_ID, queryCalculateTimeRecordDTO.getMonitorIndicatorId());
             }
-                                            
+
             if (queryCalculateTimeRecordDTO.getCalculateLastTime() != null) {
                 queryWrapper.eq(CalculateTimeRecord.PROP_CALCULATE_LAST_TIME, queryCalculateTimeRecordDTO.getCalculateLastTime());
             }
-                                            
+
         }
-        
+
         return list(queryWrapper);
     }
-    
+
     /**
-    * 分页查询监测指标计算时间
-    * @return IPage<CalculateTimeRecord>
-    * @author lixing
-    * @version V1.0 2021-09-10 00:13:10
-    */
+     * 分页查询监测指标计算时间
+     *
+     * @return IPage<CalculateTimeRecord>
+     * @author lixing
+     * @version V1.0 2021-09-10 00:13:10
+     */
     @Override
     public IPage<CalculateTimeRecord> pageQueryCalculateTimeRecord(PageQueryCalculateTimeRecordDTO pageQueryCalculateTimeRecordDTO) {
         QueryWrapper<CalculateTimeRecord> queryWrapper = new QueryWrapper<>();
 //        queryWrapper.eq(CalculateTimeRecord.PROP_VALID, ValidEnum.TRUE.getType());
         // 这里认为pageQueryDTO是经过校验的,肯定包含分页信息
-        IPage<CalculateTimeRecord> pageParam = new Page<>(pageQueryCalculateTimeRecordDTO.getPage(), pageQueryCalculateTimeRecordDTO.getSize(),true);
+        IPage<CalculateTimeRecord> pageParam = new Page<>(pageQueryCalculateTimeRecordDTO.getPage(), pageQueryCalculateTimeRecordDTO.getSize(), true);
         // 排序信息
-        if(CollectionUtils.isEmpty(pageQueryCalculateTimeRecordDTO.getOrders())){
+        if (CollectionUtils.isEmpty(pageQueryCalculateTimeRecordDTO.getOrders())) {
             // 默认按创建时间倒序排序
 //            queryWrapper.orderBy(true, false, CalculateTimeRecord.PROP_CREATIONTIME);
-        }else {
+        } else {
             List<Sort> orders = pageQueryCalculateTimeRecordDTO.getOrders();
-            for(Sort sort: orders) {
+            for (Sort sort : orders) {
                 // 将驼峰转换为下划线格式
-                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE,sort.getColumn()));
+                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, sort.getColumn()));
                 queryWrapper.orderBy(true, sort.isAsc(), sort.getColumn());
             }
         }
-                
+
         // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryCalculateTimeRecordDTO.getObjId())) {
             queryWrapper.like(CalculateTimeRecord.PROP_OBJ_ID, pageQueryCalculateTimeRecordDTO.getObjId());
         }
-                            
+
         // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryCalculateTimeRecordDTO.getMonitorIndicatorId())) {
             queryWrapper.like(CalculateTimeRecord.PROP_MONITOR_INDICATOR_ID, pageQueryCalculateTimeRecordDTO.getMonitorIndicatorId());
         }
-                            
+
         if (pageQueryCalculateTimeRecordDTO.getCalculateLastTime() != null) {
             queryWrapper.eq(CalculateTimeRecord.PROP_CALCULATE_LAST_TIME, pageQueryCalculateTimeRecordDTO.getCalculateLastTime());
         }
-                                    
+
         return getBaseMapper().selectPage(pageParam, queryWrapper);
     }
 
@@ -203,4 +212,19 @@ public class CalculateTimeRecordServiceImpl extends ServiceImpl<CalculateTimeRec
         queryWrapper.eq(CalculateTimeRecord.PROJECT_ID, projectId);
         return list(queryWrapper);
     }
+
+    @Override
+    public void saveOrUpdateByPk(CalculateTimeRecord update) {
+        QueryWrapper<CalculateTimeRecord> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(CalculateTimeRecord.PROJECT_ID, update.getProjectId());
+        queryWrapper.eq(CalculateTimeRecord.PROP_OBJ_ID, update.getObjId());
+        queryWrapper.eq(CalculateTimeRecord.PROP_MONITOR_INDICATOR_ID, update.getMonitorIndicatorId());
+        int count = this.count(queryWrapper);
+        if (count == 0) {
+            //新建
+            this.save(update);
+        } else {
+            this.update(update, queryWrapper);
+        }
+    }
 }

+ 32 - 0
src/main/java/com/persagy/apm/diagnose/utils/TimeDataUtil.java

@@ -50,4 +50,36 @@ public class TimeDataUtil {
 		}
 		return result;
 	}
+
+
+	public static Map<String, Object> getTimeObjectMap(Date timeFrom, Date timeTo, EnumTimeType timeType) {
+		Map<String, Object> result = new LinkedHashMap<String, Object>();
+		Calendar c = Calendar.getInstance();
+		c.setTime(timeFrom);
+		SimpleDateFormat standard = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		while (c.getTime().getTime() < timeTo.getTime()) {
+			result.put(standard.format(c.getTime()), null);
+			switch (timeType) {
+				case MIN15:
+					c.add(Calendar.MINUTE, 15);
+					break;
+				case HOUR:
+					c.add(Calendar.HOUR, 1);
+					break;
+				case DAY:
+					c.add(Calendar.DATE, 1);
+					break;
+				case MONTH:
+					c.add(Calendar.MONTH, 1);
+					break;
+				case YEAR:
+					c.add(Calendar.YEAR, 1);
+					break;
+				default:
+					c.add(Calendar.DATE, 1);
+					break;
+			}
+		}
+		return result;
+	}
 }

+ 6 - 7
src/main/resources/bootstrap.yml

@@ -3,7 +3,7 @@ server:
     8080
 spring:
   application:
-    name: energy_eq_run_diagnose
+    name: energy-eq-run-diagnose
   datasource:
     dynamic:
       enabled: true
@@ -19,10 +19,8 @@ spring:
           separator: ";"
           schema: classpath*:db/init/table.sql
 #          data: classpath*:db/init/data.sql
-  eureka:
-    instance:
-      ip-address: 192.168.17.57
-      prefer-ip-address: true
+
+
   data:
     elasticsearch:
       repositories:
@@ -41,7 +39,7 @@ mybatis-plus:
 
 integrated:
   swagger:
-    title: energy_eq_run_diagnose 接口文档
+    title: energy-eq-run-diagnose 接口文档
     description: --
     version: v1.0.0
     termsOfServiceUrl: v1.0.0
@@ -54,4 +52,5 @@ dmp:
   alarm:
     exchange: exchange-dmp            #报警定义变化交换器
     routingKey: routing-dmp-alarm     #报警定义变化路由键
-    queue: eq-run-diagnose-alarm-queue              #中控订阅报警定义变化队列
+    queue: eq-run-diagnose-alarm-queue              #中控订阅报警定义变化队列
+

+ 1 - 0
src/main/resources/mapper/MonitorIndicatorRecordMapper.xml

@@ -8,5 +8,6 @@
 		<result column="date" property="date" />
 		<result column="value" property="value" />
 	</resultMap>
+
 </mapper>