瀏覽代碼

更新redis配置

shaohongbo 3 年之前
父節點
當前提交
d92a24ff47
共有 22 個文件被更改,包括 421 次插入174 次删除
  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. 7 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. 6 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/model/dto/QueryMonitorIndicatorRecordDTO.java
  10. 10 0
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/IMonitorIndicatorRecordService.java
  11. 156 78
      src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/impl/MonitorIndicatorRecordServiceImpl.java
  12. 1 1
      src/main/java/com/persagy/apm/diagnose/service/ComputeIndicatorDataService.java
  13. 65 10
      src/main/java/com/persagy/apm/diagnose/service/EnergyAlarmServiceImpl.java
  14. 2 2
      src/main/java/com/persagy/apm/diagnose/service/NettyAlarmServiceImpl.java
  15. 10 6
      src/main/java/com/persagy/apm/diagnose/service/dto/CalculateMethodDTO.java
  16. 4 0
      src/main/java/com/persagy/apm/diagnose/service/dto/MonitorIndicatorConfigDTO.java
  17. 1 1
      src/main/java/com/persagy/apm/diagnose/service/schedule/SendIndicatorData.java
  18. 10 0
      src/main/java/com/persagy/apm/diagnose/timerecord/service/ICalculateTimeRecordService.java
  19. 80 56
      src/main/java/com/persagy/apm/diagnose/timerecord/service/impl/CalculateTimeRecordServiceImpl.java
  20. 32 0
      src/main/java/com/persagy/apm/diagnose/utils/TimeDataUtil.java
  21. 11 3
      src/main/resources/bootstrap.yml
  22. 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;
 
 }

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

@@ -3,13 +3,14 @@ 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")
 public interface AlarmServiceClient {
 
     @PostMapping("/projectAlarmRuleObjRels/query")
@@ -19,4 +20,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));
     }
+
 }

+ 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;

+ 10 - 0
src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/IMonitorIndicatorRecordService.java

@@ -103,4 +103,14 @@ public interface IMonitorIndicatorRecordService  {
      * @throws
      */
     Future<String> sendIndicatorData(ProjectDTO projectDTO, CountDownLatch latch) throws Exception;
+
+    /**
+     * @title saveOrUpdateByPk
+     * @description 根据表主键插入或更新记录,主键为projectId,objId,指标id,时间
+     * @author leifeng
+     * @param: monitorIndicatorRecord
+     * @updateTime 2021/9/27 11:07
+     * @throws
+     */
+    public void saveOrUpdateByPk(MonitorIndicatorRecord monitorIndicatorRecord);
 }

+ 156 - 78
src/main/java/com/persagy/apm/diagnose/indicatorrecord/service/impl/MonitorIndicatorRecordServiceImpl.java

@@ -81,6 +81,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 +91,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 +178,6 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
         if (monitorIndicatorRecord == null) {
             throw new IllegalArgumentException("删除MonitorIndicatorRecord时发生异常,找不到要删除的数据,id:" + id);
         }
-
         return monitorIndicatorRecord;
     }
 
@@ -213,13 +222,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);
     }
 
@@ -245,6 +262,7 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
                 sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, sort.getColumn()));
                 queryWrapper.orderBy(true, sort.isAsc(), sort.getColumn());
             }
+
         }
 
         // todo 需判断使用like还是eq
@@ -272,23 +290,21 @@ 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))) {
+        if (!lockUtil.lock(projectDTO.getProjectId() + "_compute", String.valueOf(time))) {
             // 获取不到锁,略过
             return new AsyncResult<>("【监测指标数据计算线程】项目:" + projectDTO.getProjectId() + "被占用");
         }
-        try{
+        try {
             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();
         }
 
@@ -303,46 +319,40 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
         //通过报警服务查询报警配置
         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 +364,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,26 +380,93 @@ 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() + "被占用");
+            return new AsyncResult<>("【监测指标数据计算线程】:项目:" + projectDTO.getProjectId() + "被占用");
         }
-        try{
+        try {
             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);
+        }
     }
 
     private void sendIndicatorDataToAlarmServer(ProjectDTO projectDTO) throws Exception {
@@ -397,9 +475,8 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
         if (CollectionUtils.isEmpty(configItemList)) {
             log.error("【发送监测指标数据线程】当前项目:" + projectDTO.getProjectId() + "为查询到报警条件");
         }
+
         for (AlarmConfigItem alarmConfigItem : configItemList) {
-            ConfigItemDataSendTimeDTO configItemSendTimeDTO = getConfigItemSendTimeDTO(projectDTO, alarmConfigItem);
-            Date lastSendTime = configItemSendTimeDTO.getLastSendTime();
             AlarmCondition condition = alarmConfigItem.getCondition();
             if (condition == null) {
                 continue;
@@ -408,19 +485,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 +540,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);
     }
@@ -472,7 +560,7 @@ public class MonitorIndicatorRecordServiceImpl extends ServiceImpl<MonitorIndica
         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 +587,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 +631,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 +657,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 +676,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 +826,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 +861,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

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

@@ -91,7 +91,7 @@ public class ComputeIndicatorDataService {
 //        CountDownLatch latch = new CountDownLatch(projectDTOList.size());
         CountDownLatch latch = new CountDownLatch(1);
         for (ProjectDTO projectDTO : projectDTOList) {
-            if (!projectDTO.getProjectId().equals("Pj1101051029")||!projectDTO.getProjectId().equals("Pj1101051029")) {
+            if (!projectDTO.getProjectId().equals("Pj1101060001")) {
                 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";
+
 }

+ 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;
+
 }

+ 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;
+	}
 }

+ 11 - 3
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,14 @@ spring:
           separator: ";"
           schema: classpath*:db/init/table.sql
 #          data: classpath*:db/init/data.sql
+  cloud:
+    client:
+    ip-address: 192.168.17.57
   eureka:
     instance:
       ip-address: 192.168.17.57
       prefer-ip-address: true
+
   data:
     elasticsearch:
       repositories:
@@ -41,7 +45,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 +58,8 @@ dmp:
   alarm:
     exchange: exchange-dmp            #报警定义变化交换器
     routingKey: routing-dmp-alarm     #报警定义变化路由键
-    queue: eq-run-diagnose-alarm-queue              #中控订阅报警定义变化队列
+    queue: eq-run-diagnose-alarm-queue              #中控订阅报警定义变化队列
+
+group:
+  alarm:
+    port: 9986

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

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