Browse Source

创建报警条件不再下发到设备

lixing 3 years ago
parent
commit
7500db9506
22 changed files with 685 additions and 568 deletions
  1. 1 0
      src/main/java/com/persagy/apm/alarmservice/common/constants/FeignClientNameConstants.java
  2. 54 0
      src/main/java/com/persagy/apm/alarmservice/common/enums/AlarmEffectTimeTypeEnum.java
  3. 39 0
      src/main/java/com/persagy/apm/alarmservice/dependency/rwd/client/DmpRwdClient.java
  4. 20 0
      src/main/java/com/persagy/apm/alarmservice/dependency/rwd/client/fallback/DmpRwdClientFallbackFactory.java
  5. 154 0
      src/main/java/com/persagy/apm/alarmservice/dependency/rwd/service/DmpRwdServiceImpl.java
  6. 106 110
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/service/impl/GroupAlarmRuleServiceImpl.java
  7. 0 30
      src/main/java/com/persagy/apm/alarmservice/group/management/controller/GroupManagementController.java
  8. 1 2
      src/main/java/com/persagy/apm/alarmservice/group/management/model/equip/dto/QueryEquipDTO.java
  9. 0 15
      src/main/java/com/persagy/apm/alarmservice/group/management/model/equip/vo/EquipItem.java
  10. 4 21
      src/main/java/com/persagy/apm/alarmservice/group/management/service/GroupManagementService.java
  11. 23 153
      src/main/java/com/persagy/apm/alarmservice/group/management/service/impl/GroupManagementServiceImpl.java
  12. 39 7
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/AlarmCondition.java
  13. 6 9
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/dto/AddAlarmConditionDTO.java
  14. 25 29
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/impl/AlarmConditionServiceImpl.java
  15. 11 10
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/IProjectAlarmRuleService.java
  16. 124 141
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/impl/ProjectAlarmRuleServiceImpl.java
  17. 0 2
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/service/impl/ProjectAlarmRuleObjRelServiceImpl.java
  18. 48 0
      src/main/java/com/persagy/apm/alarmservice/project/model/AlarmCondition.java
  19. 2 1
      src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/service/impl/ProjectMonitorIndicatorConfigServiceImpl.java
  20. 0 23
      src/main/resources/json/GroupTree.json
  21. 26 13
      src/main/resources/mapper/AlarmConditionMapper.xml
  22. 2 2
      src/main/resources/mapper/GroupAlarmRuleMapper.xml

+ 1 - 0
src/main/java/com/persagy/apm/alarmservice/common/constants/FeignClientNameConstants.java

@@ -9,4 +9,5 @@ package com.persagy.apm.alarmservice.common.constants;
 public class FeignClientNameConstants {
     public static final String SAAS_WEB = "ems-saas-web";
     public static final String ENERGY_EQ_RUN_DIAGNOSE = "energy-eq-run-diagnose";
+    public static final String DMP_RWD = "dmp-rwd";
 }

+ 54 - 0
src/main/java/com/persagy/apm/alarmservice/common/enums/AlarmEffectTimeTypeEnum.java

@@ -0,0 +1,54 @@
+package com.persagy.apm.alarmservice.common.enums;
+
+import com.persagy.apm.common.model.annotation.SwaggerDisplayEnum;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * 报警生效区间类型
+ *
+ * @author lixing
+ * @version V1.0 2021/9/13 10:01 上午
+ **/
+@SwaggerDisplayEnum
+@AllArgsConstructor
+public enum AlarmEffectTimeTypeEnum {
+    /**
+     * 报警生效区间类型
+     */
+    ALWAYS("always", "一直有效"),
+    PERIOD("period", "阶段");
+
+
+    @Setter
+    @Getter
+    private String type;
+    @Setter
+    @Getter
+    private String desc;
+
+    /**
+     * 根据type获取到枚举对象
+     *
+     * @param type 报告状态编码
+     * @return 报告状态枚举对象
+     * @author lixing
+     * @version V1.0 2021/5/31 4:06 下午
+     */
+    public static AlarmEffectTimeTypeEnum getByType(String type) {
+        if (StringUtils.isBlank(type)) {
+            return null;
+        }
+        AlarmEffectTimeTypeEnum[] enums = AlarmEffectTimeTypeEnum.values();
+        for (AlarmEffectTimeTypeEnum item : enums) {
+            if (type.equals(item.getType())) {
+                return item;
+            }
+        }
+        return null;
+    }
+}
+
+

+ 39 - 0
src/main/java/com/persagy/apm/alarmservice/dependency/rwd/client/DmpRwdClient.java

@@ -0,0 +1,39 @@
+package com.persagy.apm.alarmservice.dependency.rwd.client;
+
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.apm.alarmservice.common.constants.FeignClientNameConstants;
+import com.persagy.apm.alarmservice.dependency.rwd.client.fallback.DmpRwdClientFallbackFactory;
+import com.persagy.apm.energyalarmstarter.alarmdata.feign.DmpResult;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.common.UrlParamDTO;
+import feign.Headers;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.cloud.openfeign.SpringQueryMap;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+/**
+ * 物理世界feign客户端
+ *
+ * @author lixing
+ * @version V1.0 2021/3/22 2:13 下午
+ **/
+@FeignClient(name = FeignClientNameConstants.DMP_RWD, fallbackFactory = DmpRwdClientFallbackFactory.class)
+public interface DmpRwdClient {
+
+    /**
+     * 查询物理世界的对象
+     *
+     * @param urlParamDTO request params
+     * @param jsonObject request body
+     * @return 对象列表
+     * @author lixing
+     * @version V1.0 2021/5/19 3:36 下午
+     */
+    @PostMapping("/rwd/instance/object/query")
+    @Headers({"Content-Type: application/json"})
+    DmpResult<List<JSONObject>> objQuery(
+            @SpringQueryMap UrlParamDTO urlParamDTO,  @RequestBody JSONObject jsonObject);
+
+}

+ 20 - 0
src/main/java/com/persagy/apm/alarmservice/dependency/rwd/client/fallback/DmpRwdClientFallbackFactory.java

@@ -0,0 +1,20 @@
+package com.persagy.apm.alarmservice.dependency.rwd.client.fallback;
+
+import com.persagy.apm.alarmservice.dependency.rwd.client.DmpRwdClient;
+import feign.hystrix.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * feign fallback处理
+ *
+ * @author lixing
+ * @version V1.0 2021/5/19 2:21 下午
+ */
+@Component
+public class DmpRwdClientFallbackFactory implements FallbackFactory<DmpRwdClient> {
+    @Override
+    public DmpRwdClient create(Throwable throwable) {
+        System.out.println("fall back");
+        return null;
+    }
+}

+ 154 - 0
src/main/java/com/persagy/apm/alarmservice/dependency/rwd/service/DmpRwdServiceImpl.java

@@ -0,0 +1,154 @@
+package com.persagy.apm.alarmservice.dependency.rwd.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.apm.alarmservice.dependency.rwd.client.DmpRwdClient;
+import com.persagy.apm.alarmservice.group.management.model.equip.dto.QueryEquipDTO;
+import com.persagy.apm.alarmservice.group.management.model.equip.vo.EquipItem;
+import com.persagy.apm.energyalarmstarter.alarmdata.feign.DmpResult;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.common.UrlParamDTO;
+import com.persagy.common.exception.BusinessException;
+import org.apache.commons.lang3.StringUtils;
+import org.assertj.core.util.Lists;
+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.stream.Collectors;
+
+/**
+ * 报警中台物理世界service实现类
+ *
+ * @author lixing
+ * @version V1.0 2021/10/20 2:26 下午
+ **/
+@Service
+public class DmpRwdServiceImpl {
+    @Autowired
+    DmpRwdClient dmpRwdClient;
+
+    /**
+     * 获取物理世界对象详情信息
+     *
+     * @param urlParamDTO 物理世界通用查询参数
+     * @param objId 对象id
+     * @return 对象详情
+     * @exception BusinessException 未查询到对象
+     * @author lixing
+     * @version V1.0 2021/10/20 3:17 下午
+     */
+    public EquipItem getObject(UrlParamDTO urlParamDTO, String objId) {
+        if (StringUtils.isBlank(objId)) {
+            return null;
+        }
+        List<JSONObject> records = queryRwdObjByIds(urlParamDTO, Lists.newArrayList(objId));
+        JSONObject jsonObject = records.get(0);
+
+        return convert2EquipItem(jsonObject);
+    }
+
+    /**
+     * 根据对象id列表查询物理世界对象列表
+     *
+     * @param urlParamDTO 物理世界通用查询参数
+     * @param objIdList 对象id列表
+     * @return 物理世界对象列表
+     * @exception
+     * @author lixing
+     * @version V1.0 2021/10/20 4:38 下午
+     */
+    private List<JSONObject> queryRwdObjByIds(UrlParamDTO urlParamDTO, List<String> objIdList) {
+        JSONObject queryObject = new JSONObject();
+        JSONObject criteria = new JSONObject();
+        criteria.put("id", objIdList);
+        queryObject.put("criteria", criteria);
+        DmpResult<List<JSONObject>> pageListCommonResult = dmpRwdClient.objQuery(urlParamDTO, queryObject);
+        if (pageListCommonResult.getData() == null) {
+            throw new BusinessException("物理世界中未获取到要查询的对象,id:" + objIdList);
+        }
+        List<JSONObject> records = pageListCommonResult.getData();
+        if (CollectionUtils.isEmpty(records)) {
+            throw new BusinessException("物理世界中未获取到要查询的对象,id:" + objIdList);
+        }
+        return records;
+    }
+
+    /**
+     * 物理世界的对象信息转换为EquipItem对象
+     *
+     * @param jsonObject 物理世界的对象信息
+     * @return EquipItem对象
+     * @author lixing
+     * @version V1.0 2021/10/20 3:19 下午
+     */
+    private EquipItem convert2EquipItem(JSONObject jsonObject) {
+        EquipItem equipItem = new EquipItem();
+        equipItem.setId(jsonObject.getString("id"));
+        equipItem.setClassCode(jsonObject.getString("classCode"));
+        equipItem.setLocalName(jsonObject.getString("localName"));
+        equipItem.setInfos(jsonObject.toJSONString());
+        return equipItem;
+    }
+
+    /**
+     * 获取物理世界对象详情信息
+     *
+     * @param urlParamDTO 物理世界通用查询参数
+     * @param objIds 对象id列表
+     * @return 物理世界对象详情列表
+     * @author lixing
+     * @version V1.0 2021/10/20 3:17 下午
+     */
+    public List<EquipItem> queryObjListByIds(UrlParamDTO urlParamDTO, List<String> objIds) {
+        if (CollectionUtils.isEmpty(objIds)) {
+            return new ArrayList<>();
+        }
+        List<JSONObject> records = queryRwdObjByIds(urlParamDTO, objIds);
+        if (records == null) {
+            return new ArrayList<>();
+        }
+        return records.stream().map(this::convert2EquipItem).collect(Collectors.toList());
+    }
+
+    /**
+     * 获取物理世界对象详情信息
+     *
+     * @param urlParamDTO 物理世界通用查询参数
+     * @param queryEquipDTO 查询条件
+     * @return 物理世界对象详情列表
+     * @author lixing
+     * @version V1.0 2021/10/20 3:17 下午
+     */
+    public List<EquipItem> queryObjList(UrlParamDTO urlParamDTO, QueryEquipDTO queryEquipDTO) {
+        JSONObject queryObject = new JSONObject();
+        JSONObject criteria = new JSONObject();
+        String condition = queryEquipDTO.getCondition();
+        if (StringUtils.isNotBlank(condition)) {
+            condition = "{" + condition + "}";
+            criteria = JSONObject.parseObject(condition);
+        }
+        if (StringUtils.isNotBlank(queryEquipDTO.getClassCode())) {
+            criteria.put("classCode", queryEquipDTO.getClassCode());
+        }
+
+        /* 设备名称模糊查询 */
+        if (StringUtils.isNotBlank(queryEquipDTO.getLocalName())) {
+            JSONObject localNameObj = new JSONObject();
+            localNameObj.put("$like", queryEquipDTO.getLocalName());
+            criteria.put("localName", localNameObj);
+        }
+
+        queryObject.put("criteria", criteria);
+        DmpResult<List<JSONObject>> pageListCommonResult = dmpRwdClient.objQuery(urlParamDTO, queryObject);
+
+        if (pageListCommonResult.getData() == null) {
+            return new ArrayList<>();
+        }
+        List<JSONObject> records = pageListCommonResult.getData();
+        if (CollectionUtils.isEmpty(records)) {
+            return new ArrayList<>();
+        }
+        return records.stream().map(this::convert2EquipItem).collect(Collectors.toList());
+    }
+}

+ 106 - 110
src/main/java/com/persagy/apm/alarmservice/group/alarmrule/service/impl/GroupAlarmRuleServiceImpl.java

@@ -96,61 +96,58 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
         save(groupAlarmRule);
         //2、同步创建项目报警
         projectAlarmRuleService.addProjectAlarmRules(addGroupAlarmRuleDTO);
-        List<ProjectVO> projects = projectAlarmRuleService.getProject();
-        if (projects.size() == 0) {
-            throw new Exception("获取项目为空");
-        }
-        //3、同步创建设备报警条件
-        List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
-        String condition = addGroupAlarmRuleDTO.getCondition();
-        String classCode = addGroupAlarmRuleDTO.getClassCode();
-        for (ProjectVO project : projects) {
-            QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
-            String projectId = "Pj" + project.getProjectId();
-            queryEquipDTO.setProjectId(projectId);
-            queryEquipDTO.setClassCode(classCode);
-            queryEquipDTO.setCondition(condition);
-            List<EquipItem> record = groupManagementService.getEquipList(queryEquipDTO);
-//            if (record.size() == 0) {
-//                throw new Exception("获取设备详细信息为空");
+        // 勿删,后续有可能恢复 lixing
+//        List<ProjectVO> projects = projectAlarmRuleService.getProject();
+//        if (projects.size() == 0) {
+//            throw new Exception("获取项目为空");
+//        }
+//        //3、同步创建设备报警条件
+//        List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
+//        String condition = addGroupAlarmRuleDTO.getCondition();
+//        String classCode = addGroupAlarmRuleDTO.getClassCode();
+//        for (ProjectVO project : projects) {
+//            QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
+//            queryEquipDTO.setProjectId(projectId);
+//            queryEquipDTO.setClassCode(classCode);
+//            queryEquipDTO.setCondition(condition);
+//            List<EquipItem> record = groupManagementService.getEquipList(queryEquipDTO);
+//            for (EquipItem rec : record) {
+//                AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
+//                String equipId = rec.getId();
+//                addAlarmConfigDTO.setObjId(equipId);
+//                addAlarmConfigDTO.setItemCode(addGroupAlarmRuleDTO.getAlarmItemCode());
+//                addAlarmConfigDTO.setClassCode(addGroupAlarmRuleDTO.getClassCode());
+//                addAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
+//                addAlarmConfigDTO.setCategory("Eqdx");
+//                addAlarmConfigDTO.setOpen(1);
+//                AlarmCondition cond = new AlarmCondition();
+//                List<String> infoCodeList = (List<String>) conditionMap.get("infoCode");
+//                List<String> infoCodeNew = new ArrayList<>();
+//                for (String infoCode : infoCodeList) {
+//                    String replacement = equipId + "_" + infoCode;
+//                    infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
+//                }
+//                cond.setInfoCode(infoCodeNew);
+//                String backend = (String) conditionMap.get("backend");
+//                for (String infoCode : infoCodeList) {
+//                    String replacement = equipId + "_" + infoCode;
+//                    backend = backend.replaceAll(infoCode, replacement);
+//                }
+//                cond.setEnd("!" + backend);
+//                cond.setEndUphold(0);
+//                cond.setTrigger(backend);
+//                cond.setTriggerUphold(alarmCondition.getTriggerUphold() * 60);
+//                cond.setRules((List<String>) conditionMap.get("displayFormula"));
+//                JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmCondition.getFrontend()));
+//                cond.setConfigs(configs);
+//                AlarmEffectTime effectTime = new AlarmEffectTime();
+//                effectTime.setType("always");
+//                cond.setEffectTime(effectTime);
+//                addAlarmConfigDTO.setCondition(cond);
+//                alarmConfigs.add(addAlarmConfigDTO);
 //            }
-            for (EquipItem rec : record) {
-                AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
-                String equipId = rec.getId();
-                addAlarmConfigDTO.setObjId(equipId);
-                addAlarmConfigDTO.setItemCode(addGroupAlarmRuleDTO.getAlarmItemCode());
-                addAlarmConfigDTO.setClassCode(addGroupAlarmRuleDTO.getClassCode());
-                addAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
-                addAlarmConfigDTO.setCategory("Eqdx");
-                addAlarmConfigDTO.setOpen(1);
-                AlarmCondition cond = new AlarmCondition();
-                List<String> infoCodeList = (List<String>) conditionMap.get("infoCode");
-                List<String> infoCodeNew = new ArrayList<>();
-                for (String infoCode : infoCodeList) {
-                    String replacement = equipId + "_" + infoCode;
-                    infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
-                }
-                cond.setInfoCode(infoCodeNew);
-                String backend = (String) conditionMap.get("backend");
-                for (String infoCode : infoCodeList) {
-                    String replacement = equipId + "_" + infoCode;
-                    backend = backend.replaceAll(infoCode, replacement);
-                }
-                cond.setEnd("!" + backend);
-                cond.setEndUphold(0);
-                cond.setTrigger(backend);
-                cond.setTriggerUphold(alarmCondition.getTriggerUphold() * 60);
-                cond.setRules((List<String>) conditionMap.get("displayFormula"));
-                JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmCondition.getFrontend()));
-                cond.setConfigs(configs);
-                AlarmEffectTime effectTime = new AlarmEffectTime();
-                effectTime.setType("always");
-                cond.setEffectTime(effectTime);
-                addAlarmConfigDTO.setCondition(cond);
-                alarmConfigs.add(addAlarmConfigDTO);
-            }
-            projectAlarmRuleService.sendBatchCreateAlarmConfigMsg(alarmConfigs, projectId);
-        }
+//            projectAlarmRuleService.sendBatchCreateAlarmConfigMsg(alarmConfigs, projectId);
+//        }
         return groupAlarmRule.getId();
     }
 
@@ -203,61 +200,61 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
         UpdateAlarmConditionDTO alarmCondition = updateGroupAlarmRuleDTO.getAlarmCondition();
         Map<String, Object> conditionMap = alarmConditionService.frontend2Backend(alarmCondition.getFrontend());
         alarmConditionService.updateById(conditionMap, alarmCondition);
-        //删除中台设备的报警条件
-        String condition = updateGroupAlarmRuleDTO.getCondition();
-        String classCode = updateGroupAlarmRuleDTO.getClassCode();
-        String alarmItemCode = updateGroupAlarmRuleDTO.getAlarmItemCode();
-        deleteEquipCondition(condition,classCode, alarmItemCode);
-
-        //新增中台设备的报警条件
-        //查询所有设备
-        List<ProjectVO> projects = projectAlarmRuleService.getProject();
-        for (ProjectVO project : projects) {
-            List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
-            QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
-            String projectId = "Pj" + project.getProjectId();
-            queryEquipDTO.setProjectId(projectId);
-            queryEquipDTO.setClassCode(classCode);
-            queryEquipDTO.setCondition(condition);
-            List<EquipItem> records = groupManagementService.getEquipList(queryEquipDTO);
-            for (EquipItem record : records) {
-                AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
-                String equipId = record.getId();
-                addAlarmConfigDTO.setObjId(equipId);
-                addAlarmConfigDTO.setItemCode(alarmItemCode);
-                addAlarmConfigDTO.setClassCode(classCode);
-                addAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
-                addAlarmConfigDTO.setCategory("Eqdx");
-                addAlarmConfigDTO.setOpen(1);
-                AlarmCondition equipCondition = new AlarmCondition();
-                List<String> infoCodeList = (List<String>) conditionMap.get("infoCode");
-                List<String> infoCodeNew = new ArrayList<>();
-                for (String infoCode : infoCodeList) {
-                    String replacement = equipId + "_" + infoCode;
-                    infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
-                }
-                equipCondition.setInfoCode(infoCodeNew);
-                String backend = (String) conditionMap.get("backend");
-                for (String infoCode : infoCodeList) {
-                    String replacement = equipId + "_" + infoCode;
-                    backend = backend.replaceAll(infoCode, replacement);
-                }
-                equipCondition.setEnd("!" + backend);
-                equipCondition.setEndUphold(0);
-                equipCondition.setTrigger(backend);
-                equipCondition.setTriggerUphold(alarmCondition.getTriggerUphold() * 60);
-                equipCondition.setRules((List<String>) conditionMap.get("displayFormula"));
-                JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmCondition.getFrontend()));
-                equipCondition.setConfigs(configs);
-                AlarmEffectTime effectTime = new AlarmEffectTime();
-                effectTime.setType("always");
-                equipCondition.setEffectTime(effectTime);
-                addAlarmConfigDTO.setCondition(equipCondition);
-                alarmConfigs.add(addAlarmConfigDTO);
-            }
-
-            projectAlarmRuleService.sendBatchCreateAlarmConfigMsg(alarmConfigs, projectId);
-        }
+        // 勿删,后续可能启用 lixing
+//        //删除中台设备的报警条件
+//        String condition = updateGroupAlarmRuleDTO.getCondition();
+//        String classCode = updateGroupAlarmRuleDTO.getClassCode();
+//        String alarmItemCode = updateGroupAlarmRuleDTO.getAlarmItemCode();
+//        deleteEquipCondition(condition,classCode, alarmItemCode);
+//
+//        //新增中台设备的报警条件
+//        //查询所有设备
+//        List<ProjectVO> projects = projectAlarmRuleService.getProject();
+//        for (ProjectVO project : projects) {
+//            List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
+//            QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
+//            queryEquipDTO.setProjectId(project.getProjectId());
+//            queryEquipDTO.setClassCode(classCode);
+//            queryEquipDTO.setCondition(condition);
+//            List<EquipItem> records = groupManagementService.getEquipList(queryEquipDTO);
+//            for (EquipItem record : records) {
+//                AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
+//                String equipId = record.getId();
+//                addAlarmConfigDTO.setObjId(equipId);
+//                addAlarmConfigDTO.setItemCode(alarmItemCode);
+//                addAlarmConfigDTO.setClassCode(classCode);
+//                addAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
+//                addAlarmConfigDTO.setCategory("Eqdx");
+//                addAlarmConfigDTO.setOpen(1);
+//                AlarmCondition equipCondition = new AlarmCondition();
+//                List<String> infoCodeList = (List<String>) conditionMap.get("infoCode");
+//                List<String> infoCodeNew = new ArrayList<>();
+//                for (String infoCode : infoCodeList) {
+//                    String replacement = equipId + "_" + infoCode;
+//                    infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
+//                }
+//                equipCondition.setInfoCode(infoCodeNew);
+//                String backend = (String) conditionMap.get("backend");
+//                for (String infoCode : infoCodeList) {
+//                    String replacement = equipId + "_" + infoCode;
+//                    backend = backend.replaceAll(infoCode, replacement);
+//                }
+//                equipCondition.setEnd("!" + backend);
+//                equipCondition.setEndUphold(0);
+//                equipCondition.setTrigger(backend);
+//                equipCondition.setTriggerUphold(alarmCondition.getTriggerUphold() * 60);
+//                equipCondition.setRules((List<String>) conditionMap.get("displayFormula"));
+//                JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmCondition.getFrontend()));
+//                equipCondition.setConfigs(configs);
+//                AlarmEffectTime effectTime = new AlarmEffectTime();
+//                effectTime.setType("always");
+//                equipCondition.setEffectTime(effectTime);
+//                addAlarmConfigDTO.setCondition(equipCondition);
+//                alarmConfigs.add(addAlarmConfigDTO);
+//            }
+//
+//            projectAlarmRuleService.sendBatchCreateAlarmConfigMsg(alarmConfigs, projectId);
+//        }
     }
 
     /**
@@ -452,7 +449,6 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
         List<EquipItem> records = new ArrayList<>();
         for (ProjectVO project : projects) {
             QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
-            queryEquipDTO.setProjectId("Pj" + project.getProjectId());
             queryEquipDTO.setClassCode(classCode);
             queryEquipDTO.setCondition(condition);
             List<EquipItem> record = groupManagementService.getEquipList(queryEquipDTO);

+ 0 - 30
src/main/java/com/persagy/apm/alarmservice/group/management/controller/GroupManagementController.java

@@ -33,34 +33,4 @@ public class GroupManagementController {
     public CommonResult<List<GroupTreeVO>> queryGroupTree(){
         return ResultHelper.single(managementService.getGroupTree());
     }
-
-//    @ApiOperation(value = "获取分组信息")
-//    @PostMapping("/eq_groups/get")
-//    public CommonResult<GroupInfoVO> queryTreeById(@Valid @RequestBody EquipIdDTO equipIdDTO){
-//        return ResultHelper.single(managementService.getGroup(equipIdDTO.getId()));
-//    }
-//
-//    @ApiOperation(value = "分组条件(设备类+查询条件)+项目 获取设备  加上分页和根据设备名称查询")
-//    @PostMapping("/equips/query")
-//    public CommonResult<PageList<EquipListItem>> equipsQuery(@Valid @RequestBody QueryEquipDTO managementDTO){
-//        PageList<EquipListItem> pageList = managementService.equipsQuery(managementDTO);
-//        return ResultHelper.multi(pageList.getRecords(),pageList.getTotal());
-//    }
-//
-//    @ApiOperation(value = "获取设备名称")
-//    @PostMapping("/equips/get")
-//    public CommonResult<EquipListItem> equipsQuery(@Valid @RequestBody EquipIdDTO equipIdDTO) {
-//        return ResultHelper.single(managementService.equipsGet(equipIdDTO.getId()));
-//    }
-
-//    @ApiOperation(value = "获取分组名称")
-//    @PostMapping("/equipsGroup/query")
-//    public CommonResult<List<GroupTreeInfoVO>> equipsGroupQuery(@Valid @RequestBody EquipIdListDTO equipIdListDTO){
-//        return ResultHelper.single(managementService.equipsGroupQuery(equipIdListDTO.getEquipIdList())) ;
-//    }
-
-    @Scheduled(cron = "0 0 * * * ?")
-    public void batchDelete(){
-       managementService.batchDelete();
-    }
 }

+ 1 - 2
src/main/java/com/persagy/apm/alarmservice/group/management/model/equip/dto/QueryEquipDTO.java

@@ -15,10 +15,9 @@ import javax.validation.constraints.NotNull;
  * @version 1.0
  * @date 2021/9/8 16:46
  */
-@EqualsAndHashCode(callSuper = true)
 @ApiModel("查询设备信息")
 @Data
-public class QueryEquipDTO extends PageDTO {
+public class QueryEquipDTO {
     @ApiModelProperty("项目id")
     private String projectId;
 

+ 0 - 15
src/main/java/com/persagy/apm/alarmservice/group/management/model/equip/vo/EquipItem.java

@@ -25,20 +25,5 @@ public class EquipItem {
 
     private String infos;
 
-    private String localId;
-
     private String localName;
-
-    private String name;
-
-    private String objType;
-
-    private String projectId;
-
-    private String groupCode;
-
-    private LocalDateTime updateTime;
-
-    private Long valid;
-
 }

+ 4 - 21
src/main/java/com/persagy/apm/alarmservice/group/management/service/GroupManagementService.java

@@ -19,24 +19,16 @@ import java.util.Map;
  */
 public interface GroupManagementService {
     /**
-     * 分组条件(设备类+查询条件)+项目 获取设备
-     *
-     * @param queryDTO 查询条件
-     * @return 设备列表(带分页)
-     * @author 易涛
-     * @date 2021/9/8 16:54
-     */
-    PageList<EquipItem> equipsQuery(QueryEquipDTO queryDTO);
-
-    /**
      * 获取设备详情
      *
-     * @param id 设备id
+     * @param objId 设备id
+     * @param projectId 项目id
+     * @param groupCode 集团编码
      * @return 设备详细信息
      * @author 易涛
      * @date 2021/9/9 16:04
      */
-    EquipItem equipGet(String id);
+    EquipItem equipGet(String objId, String projectId, String groupCode);
 
     /**
      * 根据一组id查询设备
@@ -71,15 +63,6 @@ public interface GroupManagementService {
     List<GroupTreeVO> getGroupTree();
 
     /**
-     * 定时任务删除valid为0的数据
-     *
-     * @return void
-     * @author 易涛
-     * @date 2021/9/14 15:55
-     */
-    void batchDelete();
-
-    /**
      * 查询分组下的设备
      *
      * @param condition 分组查询条件

+ 23 - 153
src/main/java/com/persagy/apm/alarmservice/group/management/service/impl/GroupManagementServiceImpl.java

@@ -1,8 +1,8 @@
 package com.persagy.apm.alarmservice.group.management.service.impl;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Lists;
+import com.persagy.apm.alarmservice.dependency.rwd.service.DmpRwdServiceImpl;
 import com.persagy.apm.alarmservice.group.management.model.equip.dto.QueryEquipDTO;
 import com.persagy.apm.alarmservice.group.management.model.equip.vo.EquipItem;
 import com.persagy.apm.alarmservice.group.management.model.group.ConvertGroupTool;
@@ -15,38 +15,19 @@ import com.persagy.apm.alarmservice.group.objgroup.model.dto.QueryObjGroupDTO;
 import com.persagy.apm.alarmservice.group.objgroup.service.IObjGroupService;
 import com.persagy.apm.common.context.poems.PoemsContext;
 import com.persagy.apm.common.model.vo.SimpleObjVO;
-import com.persagy.apm.common.response.PageList;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.common.UrlParamDTO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.elasticsearch.action.get.GetRequest;
-import org.elasticsearch.action.get.GetResponse;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestHighLevelClient;
-import org.elasticsearch.index.query.BoolQueryBuilder;
-import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.index.query.TermQueryBuilder;
-import org.elasticsearch.index.reindex.BulkByScrollResponse;
-import org.elasticsearch.index.reindex.DeleteByQueryRequest;
-import org.elasticsearch.rest.RestStatus;
-import org.elasticsearch.search.SearchHit;
-import org.elasticsearch.search.SearchHits;
-import org.elasticsearch.search.builder.SearchSourceBuilder;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.io.IOException;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.persagy.apm.alarmservice.common.constants.ElasticStrConstant.INDEX_NAME;
-import static org.apache.commons.lang3.math.NumberUtils.INTEGER_ONE;
-import static org.apache.commons.lang3.math.NumberUtils.INTEGER_ZERO;
-
 /**
  * 分组管理service
  *
@@ -57,122 +38,38 @@ import static org.apache.commons.lang3.math.NumberUtils.INTEGER_ZERO;
 @Slf4j
 @Service
 public class GroupManagementServiceImpl implements GroupManagementService {
-
     @Autowired
-    private RestHighLevelClient client;
+    private DmpRwdServiceImpl dmpRwdService;
     @Autowired
     private IObjGroupService objGroupService;
 
-    @Value("${elasticsearch.maxSearchCount}")
-    private int maxSearchCount;
-
-    @Override
-    public PageList<EquipItem> equipsQuery(QueryEquipDTO managementDTO) {
-        List<EquipItem> equipListItemList = new ArrayList<>();
-        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
-        queryBuilder.must(QueryBuilders.matchQuery("group_code", PoemsContext.getContext().getGroupCode()));
-        queryBuilder.must(QueryBuilders.matchQuery("class_code", managementDTO.getClassCode()));
-        if (StringUtils.isNotBlank(managementDTO.getCondition())) {
-            queryBuilder.must(QueryBuilders.matchPhraseQuery("infos", managementDTO.getCondition()));
-        }
-        //新增根据项目id查询设备
-        if (StringUtils.isNotEmpty(managementDTO.getProjectId())) {
-            queryBuilder.must(QueryBuilders.matchQuery("project_id", managementDTO.getProjectId()));
-        }
-        //模糊查询使用
-        if (StringUtils.isNotEmpty(managementDTO.getLocalName())) {
-            queryBuilder.must(QueryBuilders.wildcardQuery("local_name", "*" + managementDTO.getLocalName() + "*"));
-        }
-        queryBuilder.must(QueryBuilders.termQuery("valid", INTEGER_ONE));
-        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
-        sourceBuilder.query(queryBuilder);
-        sourceBuilder.from((Math.max(managementDTO.getPage(), INTEGER_ONE) - INTEGER_ONE)
-                * managementDTO.getSize());
-        sourceBuilder.size(managementDTO.getSize());
-        SearchRequest rq = new SearchRequest(INDEX_NAME);
-        rq.source(sourceBuilder);
-        try {
-            SearchResponse searchResponse = client.search(rq, RequestOptions.DEFAULT);
-            // 根据状态和数据条数验证是否返回了数据
-            if (RestStatus.OK.equals(searchResponse.status()) && searchResponse.getHits().getTotalHits().value > 0) {
-                SearchHits hits = searchResponse.getHits();
-                for (SearchHit hit : hits) {
-                    // 将 JSON 转换成对象
-                    EquipItem managementVo = JSON.parseObject(hit.getSourceAsString(), EquipItem.class);
-                    equipListItemList.add(managementVo);
-                }
-            }
-            return new PageList<>(equipListItemList, searchResponse.getHits().getTotalHits().value);
-        } catch (IOException e) {
-            throw new RuntimeException("es查询出错", e);
-        }
-    }
-
     @Override
-    public EquipItem equipGet(String id) {
-        String equipStr = findEquipById(id);
-        if (StringUtils.isEmpty(equipStr)) {
-            throw new RuntimeException("id为" + id + "的设备不存在");
-        }
-        return JSONObject.parseObject(equipStr, EquipItem.class);
-    }
-
-    /**
-     * 根据id查询设备-常用方法
-     *
-     * @param id 设备id
-     * @author 易涛
-     * @date 2021/9/10 10:05
-     */
-    private String findEquipById(String id) {
-        GetRequest getRequest = new GetRequest(INDEX_NAME, id);
-        try {
-            GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
-            if (getResponse.isExists()) {
-                return getResponse.getSourceAsString();
-            }
-        } catch (IOException e) {
-            throw new RuntimeException("es查询出错", e);
-        }
-        return null;
+    public EquipItem equipGet(String objId, String projectId, String groupCode) {
+        UrlParamDTO urlParamDTO = new UrlParamDTO();
+        urlParamDTO.setGroupCode(groupCode);
+        urlParamDTO.setProjectId(projectId);
+        return dmpRwdService.getObject(urlParamDTO, objId);
     }
 
     /**
      * 查询设备
      *
-     * @param ids 设备id列表
+     * @param objIds 设备id列表
      * @return 设备列表
      * @author lixing
      * @version V1.0 2021/9/20 1:15 下午
      */
-    private List<EquipItem> findEquipsByIds(List<String> ids) {
-        if (CollectionUtils.isEmpty(ids) || ids.size() > 100) {
-            throw new RuntimeException("批量查询的数据过短或过长");
+    private List<EquipItem> findEquipsByIds(List<String> objIds) {
+        if (CollectionUtils.isEmpty(objIds)) {
+            throw new IllegalArgumentException("批量查询传入的ids参数为空");
         }
-        List<EquipItem> managementList = new ArrayList<>();
-        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
-        queryBuilder.must(QueryBuilders.termsQuery("id.keyword", ids));
-        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
-        sourceBuilder.query(queryBuilder);
-        sourceBuilder.from(INTEGER_ZERO);
-        sourceBuilder.size(ids.size());
-        SearchRequest rq = new SearchRequest(INDEX_NAME);
-        rq.source(sourceBuilder);
-        try {
-            SearchResponse searchResponse = client.search(rq, RequestOptions.DEFAULT);
-            // 根据状态和数据条数验证是否返回了数据
-            if (RestStatus.OK.equals(searchResponse.status()) && searchResponse.getHits().getTotalHits().value > 0) {
-                SearchHits hits = searchResponse.getHits();
-                for (SearchHit hit : hits) {
-                    // 将 JSON 转换成对象
-                    EquipItem management = JSON.parseObject(hit.getSourceAsString(), EquipItem.class);
-                    managementList.add(management);
-                }
-            }
-        } catch (IOException e) {
-            throw new RuntimeException("es查询出错", e);
+        if (objIds.size() > 100) {
+            throw new IllegalArgumentException("批量查询的参数过长(最长为100),参数ids的size为:" + objIds.size());
         }
-        return managementList;
+        UrlParamDTO urlParamDTO = UrlParamDTO.builder().
+                groupCode(PoemsContext.getContext().getGroupCode()).
+                projectId(PoemsContext.getContext().getProjectId()).build();
+        return dmpRwdService.queryObjListByIds(urlParamDTO, objIds);
     }
 
     @Override
@@ -183,7 +80,7 @@ public class GroupManagementServiceImpl implements GroupManagementService {
         Map<String, EquipItem> resultMap = new HashMap<>(ids.size());
         List<List<String>> partitions = Lists.partition(ids, 100);
         for (List<String> partition : partitions) {
-            List<EquipItem> equipsByIds = findEquipsByIds(ids);
+            List<EquipItem> equipsByIds = findEquipsByIds(partition);
             if (CollectionUtils.isEmpty(equipsByIds)) {
                 continue;
             }
@@ -294,18 +191,6 @@ public class GroupManagementServiceImpl implements GroupManagementService {
      */
     @Override
     public List<GroupTreeVO> getGroupTree() {
-        // 不再从配置文件读取分组数据
-        //        InputStream inputStream = GroupManagementServiceImpl.class.getClassLoader()
-        //                .getResourceAsStream("json" + File.separator + "GroupTree.json");
-        //        if (inputStream == null) {
-        //            return null;
-        //        }
-        //        try {
-        //            String str = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
-        //            return JSONArray.parseArray(str, GroupTreeVO.class);
-        //        } catch (IOException ioe) {
-        //            throw new RuntimeException("json文件有误", ioe);
-        //        }
         // 从表中查询所有分组
         QueryObjGroupDTO queryObjGroupDTO = new QueryObjGroupDTO();
         List<ObjGroup> objGroups = objGroupService.queryObjGroupList(queryObjGroupDTO);
@@ -372,21 +257,6 @@ public class GroupManagementServiceImpl implements GroupManagementService {
     }
 
     @Override
-    public void batchDelete() {
-        DeleteByQueryRequest request = new DeleteByQueryRequest(INDEX_NAME);
-        //逻辑删除的数据直接从index中删除掉
-        request.setQuery(new TermQueryBuilder("valid", INTEGER_ZERO));
-        //每次最多删除一万条数据,如果不加这个则处理所有的文档
-        request.setMaxDocs(10000);
-        try {
-            BulkByScrollResponse resp = client.deleteByQuery(request, RequestOptions.DEFAULT);
-            log.info("删除返回的数据为---{}", resp.toString());
-        } catch (IOException e) {
-            throw new RuntimeException("删除elasticSearch失败", e);
-        }
-    }
-
-    @Override
     public List<EquipItem> getEquipList(String condition, String classCode) {
         QueryEquipDTO managementDTO = new QueryEquipDTO();
         managementDTO.setClassCode(classCode);
@@ -396,10 +266,10 @@ public class GroupManagementServiceImpl implements GroupManagementService {
 
     @Override
     public List<EquipItem> getEquipList(QueryEquipDTO queryEquipDTO) {
-        queryEquipDTO.setPage(INTEGER_ONE);
-        queryEquipDTO.setSize(maxSearchCount);
-        PageList<EquipItem> groupManagementVoPageList = this.equipsQuery(queryEquipDTO);
-        return groupManagementVoPageList.getRecords();
+        UrlParamDTO urlParamDTO = UrlParamDTO.builder().
+                groupCode(PoemsContext.getContext().getGroupCode()).
+                projectId(PoemsContext.getContext().getProjectId()).build();
+        return dmpRwdService.queryObjList(urlParamDTO, queryEquipDTO);
     }
 
     @Override

+ 39 - 7
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/AlarmCondition.java

@@ -9,6 +9,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.json.JSONObject;
 
 import java.io.Serializable;
 import java.util.List;
@@ -31,12 +32,11 @@ public class AlarmCondition extends AuditableEntity<AlarmCondition> implements S
     private List<String> infoCodes;
 
     @TableField(typeHandler = FastjsonTypeHandler.class)
-    @ApiModelProperty("前端展示")
-    private List<List<CalculateMethodDTO>> frontend;
+    @ApiModelProperty("触发条件-前端展示")
+    private List<List<CalculateMethodDTO>> triggerFrontend;
 
-    @TableField(typeHandler = FastjsonTypeHandler.class)
-    @ApiModelProperty("后端使用")
-    private String backend;
+    @ApiModelProperty("触发条件-后端使用")
+    private String triggerBackend;
 
     @ApiModelProperty("触发时长")
     private Integer triggerUphold;
@@ -44,11 +44,43 @@ public class AlarmCondition extends AuditableEntity<AlarmCondition> implements S
     @ApiModelProperty("报警等级")
     private String alarmLevel;
 
+    @ApiModelProperty("持续多久后恢复")
+    private Integer endUphold;
+
+    @ApiModelProperty("触发规则-中文描述")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<String> triggerRules;
+
+    @ApiModelProperty("恢复条件-前端")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<List<CalculateMethodDTO>> endFrontend;
+
+    @ApiModelProperty("恢复条件-后端")
+    private String endBackend;
+
+    @ApiModelProperty("恢复规则-中文描述")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<String> endRules;
+
+    @ApiModelProperty("生效时间类型")
+    private String effectTimeType;
+
+    @ApiModelProperty("生效时间详情")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private JSONObject effectTimeDetail;
+
 
     public static String PROP_INFO_CODES = "info_codes";
-    public static String PROP_FRONTEND = "frontend";
-    public static String PROP_BACKEND = "backend";
     public static String PROP_TRIGGER_UPHOLD = "trigger_uphold";
     public static String PROP_ALARM_LEVEL = "alarm_level";
+    public static String PROP_END_UPHOLD = "end_uphold";
+    public static String PROP_TRIGGER_FRONTEND = "trigger_frontend";
+    public static String PROP_TRIGGER_BACKEND = "trigger_backend";
+    public static String PROP_TRIGGER_RULES = "trigger_rules";
+    public static String PROP_END_FRONTEND = "end_frontend";
+    public static String PROP_END_BACKEND = "end_backend";
+    public static String PROP_END_RULES = "end_rules";
+    public static String PROP_EFFECT_TIME_TYPE = "effect_time_type";
+    public static String PROP_EFFECT_TIME_DETAIL = "effect_time_detail";
 
 }

+ 6 - 9
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/dto/AddAlarmConditionDTO.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.alarmservice.project.alarmcondition.model.dto;
 
+import com.fasterxml.jackson.annotation.JsonAlias;
 import com.persagy.apm.alarmservice.group.calculatemethod.model.dto.CalculateMethodDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -17,23 +18,19 @@ import java.util.Map;
 @ApiModel(value = "创建报警条件入参")
 public class AddAlarmConditionDTO {
     @ApiModelProperty(value = "包含的参数", required = true)
-    //@NotNull(message = "包含的参数不能为空") // todo 更新校验规则
     private List<String> infoCodes;
     
     @ApiModelProperty(value = "报警触发规则", required = true)
-    @NotNull(message = "报警触发规则不能为空") // todo 更新校验规则
-    private List<List<CalculateMethodDTO>> frontend;
+    @NotNull(message = "报警触发规则不能为空")
+    @JsonAlias({"frontend", "triggerFrontend"})
+    private List<List<CalculateMethodDTO>> triggerFrontend;
 
-    @ApiModelProperty(value = "后端使用", required = true)
-    //@NotNull(message = "后端使用不能为空") // todo 更新校验规则
-    private String backend;
-    
     @ApiModelProperty(value = "触发时长", required = true)
-    @NotNull(message = "触发时长不能为空") // todo 更新校验规则
+    @NotNull(message = "触发时长不能为空") 
     private Integer triggerUphold;
     
     @ApiModelProperty(value = "报警等级", required = true)
-    @NotNull(message = "报警等级不能为空") // todo 更新校验规则
+    @NotNull(message = "报警等级不能为空") 
     private String alarmLevel;
     
 }

+ 25 - 29
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/impl/AlarmConditionServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.base.CaseFormat;
+import com.persagy.apm.alarmservice.common.enums.AlarmEffectTimeTypeEnum;
 import com.persagy.apm.alarmservice.group.calculatemethod.model.dto.CalculateMethodDTO;
 import com.persagy.apm.alarmservice.group.monitorindicator.model.MonitorIndicator;
 import com.persagy.apm.alarmservice.group.monitorindicator.service.IMonitorIndicatorService;
@@ -51,12 +52,17 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
     @Override
     public Map<String, Object> createAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO) {
         AlarmCondition alarmCondition = ConvertAlarmConditionTool.INSTANCE.convertAddDto2Entity(addAlarmConditionDTO);
-        List<List<CalculateMethodDTO>> frontend = addAlarmConditionDTO.getFrontend();
-        alarmCondition.setFrontend(frontend);
+        List<List<CalculateMethodDTO>> frontend = addAlarmConditionDTO.getTriggerFrontend();
         //将前端公式转换成后台公式
         Map<String, Object> stringMap = frontend2Backend(frontend);
-        alarmCondition.setBackend((String) stringMap.get("backend"));
+        alarmCondition.setTriggerFrontend(frontend);
+        alarmCondition.setTriggerBackend((String) stringMap.get("backend"));
+        alarmCondition.setTriggerRules((List<String>) stringMap.get("displayFormula"));
         alarmCondition.setInfoCodes((List<String>) stringMap.get("infoCode"));
+        alarmCondition.setEndBackend("!(" + (String) stringMap.get("backend") + ")");
+        alarmCondition.setEndUphold(0);
+        alarmCondition.setEffectTimeType(AlarmEffectTimeTypeEnum.ALWAYS.getType());
+
         // 设置默认值
         setDefaultValue(alarmCondition);
         save(alarmCondition);
@@ -79,11 +85,11 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
     @Override
     public Map<String, Object> swtichAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO) {
         AlarmCondition alarmCondition = ConvertAlarmConditionTool.INSTANCE.convertAddDto2Entity(addAlarmConditionDTO);
-        List<List<CalculateMethodDTO>> frontend = addAlarmConditionDTO.getFrontend();
-        alarmCondition.setFrontend(frontend);
+        List<List<CalculateMethodDTO>> frontend = addAlarmConditionDTO.getTriggerFrontend();
+        alarmCondition.setTriggerFrontend(frontend);
         //将前端公式转换成后台公式
         Map<String, Object> stringMap = frontend2Backend(frontend);
-        alarmCondition.setBackend((String) stringMap.get("backend"));
+        alarmCondition.setTriggerBackend((String) stringMap.get("backend"));
         alarmCondition.setInfoCodes((List<String>) stringMap.get("infoCode"));
         // 设置默认值
         setDefaultValue(alarmCondition);
@@ -92,16 +98,17 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         return stringMap;
     }
 
+    @Override
     public Map<String, Object> frontend2Backend(List<List<CalculateMethodDTO>> frontend) {
         StringBuffer allNotNull = new StringBuffer();
         StringBuffer allNull = new StringBuffer();
         Set<String> infoCodesSet = new HashSet<>();
         Set<String> displayFormulaList = new HashSet<>();
-        for (List<CalculateMethodDTO> calculateMethodDTOS : frontend) {
+        for (List<CalculateMethodDTO> calculateMethodDtoList : frontend) {
             StringBuffer notNullString = new StringBuffer();
             StringBuffer nullString = new StringBuffer();
             StringBuffer calculateString = new StringBuffer();
-            for (CalculateMethodDTO calculateMethodDTO : calculateMethodDTOS) {
+            for (CalculateMethodDTO calculateMethodDTO : calculateMethodDtoList) {
                 infoCodesSet.add(calculateMethodDTO.getMonitorIndicatorId());
                 List<Formula> formulas = calculateMethodDTO.getFormula();
                 StringBuffer tempFormula = new StringBuffer();
@@ -157,9 +164,9 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
     @Override
     public void updateById(Map<String, Object> conditionMap, UpdateAlarmConditionDTO condition) {
         AlarmCondition alarmCondition = new AlarmCondition();
-        alarmCondition.setFrontend(condition.getFrontend());
+        alarmCondition.setTriggerFrontend(condition.getFrontend());
         alarmCondition.setAlarmLevel(condition.getAlarmLevel());
-        alarmCondition.setBackend((String) conditionMap.get("backend"));
+        alarmCondition.setTriggerBackend((String) conditionMap.get("backend"));
         alarmCondition.setInfoCodes((List<String>) conditionMap.get("infoCode"));
         alarmCondition.setTriggerUphold(condition.getTriggerUphold());
         alarmCondition.setId(condition.getId());
@@ -207,10 +214,10 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         alarmCondition.setModifier(PoemsContext.getContext().getUserId());
         if (updateAlarmConditionDTO.getFrontend() != null) {
             List<List<CalculateMethodDTO>> frontend = updateAlarmConditionDTO.getFrontend();
-            alarmCondition.setFrontend(frontend);
+            alarmCondition.setTriggerFrontend(frontend);
             //将前端公式转换成后台公式
             Map<String, Object> stringMap = frontend2Backend(frontend);
-            alarmCondition.setBackend((String) stringMap.get("backend"));
+            alarmCondition.setTriggerBackend((String) stringMap.get("backend"));
             alarmCondition.setInfoCodes((List<String>) stringMap.get("infoCode"));
         }
         updateById(alarmCondition);
@@ -273,23 +280,13 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
                 queryWrapper.eq(AlarmCondition.PROP_INFO_CODES, queryAlarmConditionDTO.getInfoCodes());
             }
 
-            if (queryAlarmConditionDTO.getFrontend() != null) {
-                queryWrapper.eq(AlarmCondition.PROP_FRONTEND, queryAlarmConditionDTO.getFrontend());
-            }
-
-            if (queryAlarmConditionDTO.getBackend() != null) {
-                queryWrapper.eq(AlarmCondition.PROP_BACKEND, queryAlarmConditionDTO.getBackend());
-            }
-
             if (queryAlarmConditionDTO.getTriggerUphold() != null) {
                 queryWrapper.eq(AlarmCondition.PROP_TRIGGER_UPHOLD, queryAlarmConditionDTO.getTriggerUphold());
             }
 
-            // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryAlarmConditionDTO.getAlarmLevel())) {
-                queryWrapper.like(AlarmCondition.PROP_ALARM_LEVEL, queryAlarmConditionDTO.getAlarmLevel());
+                queryWrapper.eq(AlarmCondition.PROP_ALARM_LEVEL, queryAlarmConditionDTO.getAlarmLevel());
             }
-
         }
 
         return list(queryWrapper);
@@ -326,20 +323,19 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         }
 
         if (pageQueryAlarmConditionDTO.getFrontend() != null) {
-            queryWrapper.eq(AlarmCondition.PROP_FRONTEND, pageQueryAlarmConditionDTO.getFrontend());
+            queryWrapper.eq(AlarmCondition.PROP_TRIGGER_FRONTEND, pageQueryAlarmConditionDTO.getFrontend());
         }
 
         if (pageQueryAlarmConditionDTO.getBackend() != null) {
-            queryWrapper.eq(AlarmCondition.PROP_BACKEND, pageQueryAlarmConditionDTO.getBackend());
+            queryWrapper.eq(AlarmCondition.PROP_TRIGGER_BACKEND, pageQueryAlarmConditionDTO.getBackend());
         }
 
         if (pageQueryAlarmConditionDTO.getTriggerUphold() != null) {
             queryWrapper.eq(AlarmCondition.PROP_TRIGGER_UPHOLD, pageQueryAlarmConditionDTO.getTriggerUphold());
         }
 
-        // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryAlarmConditionDTO.getAlarmLevel())) {
-            queryWrapper.like(AlarmCondition.PROP_ALARM_LEVEL, pageQueryAlarmConditionDTO.getAlarmLevel());
+            queryWrapper.eq(AlarmCondition.PROP_ALARM_LEVEL, pageQueryAlarmConditionDTO.getAlarmLevel());
         }
 
         return getBaseMapper().selectPage(pageParam, queryWrapper);
@@ -376,7 +372,7 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
             } else if (monitorUnit == null || unit == null) {
                 return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式错误");
             }
-            return this.validate(displayFormula.toString(), infoCodes);
+            return validate(displayFormula.toString(), infoCodes);
         }
 
         return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法");
@@ -399,7 +395,7 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
      * @param
      * @return
      */
-    public static CommonResult validate(String expression, String variable) {
+    public CommonResult validate(String expression, String variable) {
 //        if (variables == null || variables.isEmpty()) {
 //            return ResultHelper.failure(ResponseCode.C0134.getCode(), "内置变量为空");
 //        }

+ 11 - 10
src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/IProjectAlarmRuleService.java

@@ -81,7 +81,7 @@ public interface IProjectAlarmRuleService  {
     */
     public IPage<ProjectAlarmRule> pageQueryProjectAlarmRule(PageQueryProjectAlarmRuleDTO pageQueryProjectAlarmRuleDTO);
 
-    List<AddProjectAlarmRuleObjRelDTO> addProjectAlarmRules(AddGroupAlarmRuleDTO addGroupAlarmRuleDTO);
+    void addProjectAlarmRules(AddGroupAlarmRuleDTO addGroupAlarmRuleDTO);
 
     /**
      * 获取项目
@@ -92,15 +92,16 @@ public interface IProjectAlarmRuleService  {
 
     void insertProject(String substring);
 
-    /**
-     * 发送批量创建报警定义消息
-     *
-     * @param alarmConfigs 需要创建的报警定义
-     * @param projectId 项目id
-     * @author lixing
-     * @version V1.0 2021/10/11 8:38 下午
-     */
-    void sendBatchCreateAlarmConfigMsg(List<AddAlarmConfigDTO> alarmConfigs, String projectId);
+    // 勿删后续可能启用 lixing
+//    /**
+//     * 发送批量创建报警定义消息
+//     *
+//     * @param alarmConfigs 需要创建的报警定义
+//     * @param projectId 项目id
+//     * @author lixing
+//     * @version V1.0 2021/10/11 8:38 下午
+//     */
+//    void sendBatchCreateAlarmConfigMsg(List<AddAlarmConfigDTO> alarmConfigs, String projectId);
 
     void deleteBatch(GroupAlarmRule groupAlarmRule);
 }

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

@@ -1,14 +1,10 @@
 package com.persagy.apm.alarmservice.project.alarmrule.service.impl;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.persagy.apm.alarmservice.common.configuration.rabbitmq.RabbitMsgSender;
-import com.persagy.apm.alarmservice.common.model.DmpMessage;
 import com.persagy.apm.alarmservice.common.util.DataUtils;
 import com.persagy.apm.alarmservice.group.alarmrule.model.GroupAlarmRule;
 import com.persagy.apm.alarmservice.group.alarmrule.model.dto.AddGroupAlarmRuleDTO;
@@ -39,16 +35,14 @@ import com.persagy.apm.common.constant.enums.ValidEnum;
 import com.persagy.apm.common.context.AppContext;
 import com.persagy.apm.common.context.poems.PoemsContext;
 import com.persagy.apm.energyalarmstarter.alarmdata.feign.DmpResult;
-import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.AlarmCondition;
-import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.AlarmEffectTime;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.*;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmConfigItem;
 import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmConfigServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.Date;
@@ -65,6 +59,7 @@ import static org.apache.commons.lang3.math.NumberUtils.INTEGER_ONE;
  * @version V1.0 2021-09-08 22:46:16
  */
 @Service
+@Slf4j
 public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMapper, ProjectAlarmRule>
         implements IProjectAlarmRuleService {
 
@@ -114,45 +109,47 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         });
         //保存报警对象
         projectAlarmRuleObjRelService.saveProjectAlarmRule(addEquipList);
-        //保存中台规则
-        BatchAddAlarmConfigDTO batchAddAlarmConfigDTO = new BatchAddAlarmConfigDTO();
-        List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
-        for (ProjectAlarmRuleObjRel ProjectAlarmRuleObjRel : addEquipList) {
-            AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
-            String equipId = ProjectAlarmRuleObjRel.getObjId();
-            addAlarmConfigDTO.setObjId(equipId);
-            addAlarmConfigDTO.setItemCode(addProjectAlarmRuleDTO.getAlarmItemCode());
-            addAlarmConfigDTO.setClassCode(addProjectAlarmRuleDTO.getClassCode());
-            addAlarmConfigDTO.setLevel(alarmConditionDTO.getAlarmLevel());
-            addAlarmConfigDTO.setCategory("Eqdx");
-            addAlarmConfigDTO.setOpen(1);
-            AlarmCondition equipCondition = new AlarmCondition();
-            List<String> infoCodeList = (List<String>) alarmConditionMap.get("infoCode");
-            List<String> infoCodeNew = new ArrayList<>();
-            for (String infoCode : infoCodeList) {
-                String replacement = equipId + "_" + infoCode;
-                infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
-            }
-            equipCondition.setInfoCode(infoCodeNew);
-            String backend = (String) alarmConditionMap.get("backend");
-            for (String infoCode : infoCodeList) {
-                String replacement = equipId + "_" + infoCode;
-                backend = backend.replaceAll(infoCode, replacement);
-            }
-            equipCondition.setEnd("!" + backend);
-            equipCondition.setEndUphold(0);
-            equipCondition.setTrigger(backend);
-            equipCondition.setTriggerUphold(alarmConditionDTO.getTriggerUphold() * 60);
-            equipCondition.setRules((List<String>) alarmConditionMap.get("displayFormula"));
-            JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmConditionDTO.getFrontend()));
-            equipCondition.setConfigs(configs);
-            AlarmEffectTime effectTime = new AlarmEffectTime();
-            effectTime.setType("always");
-            equipCondition.setEffectTime(effectTime);
-            addAlarmConfigDTO.setCondition(equipCondition);
-            alarmConfigs.add(addAlarmConfigDTO);
-        }
-        sendBatchCreateAlarmConfigMsg(alarmConfigs, addProjectAlarmRuleDTO.getProjectId());
+
+        // 勿删后续可能启用 lixing
+//        //保存中台规则
+//        BatchAddAlarmConfigDTO batchAddAlarmConfigDTO = new BatchAddAlarmConfigDTO();
+//        List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
+//        for (ProjectAlarmRuleObjRel ProjectAlarmRuleObjRel : addEquipList) {
+//            AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
+//            String equipId = ProjectAlarmRuleObjRel.getObjId();
+//            addAlarmConfigDTO.setObjId(equipId);
+//            addAlarmConfigDTO.setItemCode(addProjectAlarmRuleDTO.getAlarmItemCode());
+//            addAlarmConfigDTO.setClassCode(addProjectAlarmRuleDTO.getClassCode());
+//            addAlarmConfigDTO.setLevel(alarmConditionDTO.getAlarmLevel());
+//            addAlarmConfigDTO.setCategory("Eqdx");
+//            addAlarmConfigDTO.setOpen(1);
+//            AlarmCondition equipCondition = new AlarmCondition();
+//            List<String> infoCodeList = (List<String>) alarmConditionMap.get("infoCode");
+//            List<String> infoCodeNew = new ArrayList<>();
+//            for (String infoCode : infoCodeList) {
+//                String replacement = equipId + "_" + infoCode;
+//                infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
+//            }
+//            equipCondition.setInfoCode(infoCodeNew);
+//            String backend = (String) alarmConditionMap.get("backend");
+//            for (String infoCode : infoCodeList) {
+//                String replacement = equipId + "_" + infoCode;
+//                backend = backend.replaceAll(infoCode, replacement);
+//            }
+//            equipCondition.setEnd("!" + backend);
+//            equipCondition.setEndUphold(0);
+//            equipCondition.setTrigger(backend);
+//            equipCondition.setTriggerUphold(alarmConditionDTO.getTriggerUphold() * 60);
+//            equipCondition.setRules((List<String>) alarmConditionMap.get("displayFormula"));
+//            JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmConditionDTO.getFrontend()));
+//            equipCondition.setConfigs(configs);
+//            AlarmEffectTime effectTime = new AlarmEffectTime();
+//            effectTime.setType("always");
+//            equipCondition.setEffectTime(effectTime);
+//            addAlarmConfigDTO.setCondition(equipCondition);
+//            alarmConfigs.add(addAlarmConfigDTO);
+//        }
+//        sendBatchCreateAlarmConfigMsg(alarmConfigs, addProjectAlarmRuleDTO.getProjectId());
         return projectAlarmRule.getId();
     }
 
@@ -209,7 +206,7 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
             alarmConditionService.saveCondition(condition);
             //将规则ID传给项目报警
             projectAlarmRule.setAlarmConditionId(uuid);
-        } else if (belongOld < belongNew) {//项目自定义规则->集团规则
+        } else if (belongOld < belongNew) {// 项目自定义规则->集团规则
             //删除自定义规则
             ProjectAlarmRule projectAlarm = getById(updateProjectAlarmRuleDTO.getId());
             alarmConditionService.deleteAlarmCondition(projectAlarm.getAlarmConditionId());
@@ -219,10 +216,10 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
             getGroupAlarmRuleDTO.setAlarmItemCode(updateProjectAlarmRuleDTO.getAlarmItemCode());
             GroupAlarmRule groupAlarmRule = groupAlarmRuleService.getGroupAlarmRule(getGroupAlarmRuleDTO);
             projectAlarmRule.setAlarmConditionId(groupAlarmRule.getAlarmConditionId());
-        } else if (belongOld == 0 && belongNew == 0) {//项目自定义规则->项目自定义规则
+        } else if (belongOld == 0 && belongNew == 0) {// 项目自定义规则->项目自定义规则
             //修改自定义规则
             UpdateAlarmConditionDTO updateAlarmConditionDTO = new UpdateAlarmConditionDTO();
-            updateAlarmConditionDTO.setFrontend(alarmCondition.getFrontend());
+            updateAlarmConditionDTO.setFrontend(alarmCondition.getTriggerFrontend());
             updateAlarmConditionDTO.setId(updateProjectAlarmRuleDTO.getAlarmConditionId());
             updateAlarmConditionDTO.setTriggerUphold(alarmCondition.getTriggerUphold());
             updateAlarmConditionDTO.setAlarmLevel(alarmCondition.getAlarmLevel());
@@ -242,49 +239,50 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         String id = updateProjectAlarmRuleDTO.getId();
         List<AddProjectAlarmRuleObjRelDTO> addRelations = convert2AddProjectAlarmRuleObjRelDTO(addRelationList, id, projectId);
         projectAlarmRuleObjRelService.createBatchRelation(addRelations);
-        String condition = updateProjectAlarmRuleDTO.getCondition();
-        String classCode = updateProjectAlarmRuleDTO.getClassCode();
-        String alarmItemCode = updateProjectAlarmRuleDTO.getAlarmItemCode();
-        //删除中台报警条件
-        groupAlarmRuleService.deleteEquipCondition(condition, classCode, alarmItemCode);
-        //新增中台报警条件
-        List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
-        for (AddProjectAlarmRuleObjRelDTO equipRel : addRelations) {
-            AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
-            String equipId = equipRel.getObjId();
-            addAlarmConfigDTO.setObjId(equipId);
-            addAlarmConfigDTO.setItemCode(alarmItemCode);
-            addAlarmConfigDTO.setClassCode(classCode);
-            addAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
-            addAlarmConfigDTO.setCategory("Eqdx");
-            addAlarmConfigDTO.setOpen(1);
-            AlarmCondition equipCondition = new AlarmCondition();
-            List<String> infoCodeList = (List<String>) conditionMap.get("infoCode");
-            List<String> infoCodeNew = new ArrayList<>();
-            for (String infoCode : infoCodeList) {
-                String replacement = equipId + "_" + infoCode;
-                infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
-            }
-            equipCondition.setInfoCode(infoCodeNew);
-            String backend = (String) conditionMap.get("backend");
-            for (String infoCode : infoCodeList) {
-                String replacement = equipId + "_" + infoCode;
-                backend = backend.replaceAll(infoCode, replacement);
-            }
-            equipCondition.setEnd("!" + backend);
-            equipCondition.setEndUphold(0);
-            equipCondition.setTrigger(backend);
-            equipCondition.setTriggerUphold(alarmCondition.getTriggerUphold() * 60);
-            equipCondition.setRules((List<String>) conditionMap.get("displayFormula"));
-            JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmCondition.getFrontend()));
-            equipCondition.setConfigs(configs);
-            AlarmEffectTime effectTime = new AlarmEffectTime();
-            effectTime.setType("always");
-            equipCondition.setEffectTime(effectTime);
-            addAlarmConfigDTO.setCondition(equipCondition);
-            alarmConfigs.add(addAlarmConfigDTO);
-        }
-        sendBatchCreateAlarmConfigMsg(alarmConfigs, projectId);
+        // 勿删后续可能启用 lixing
+//        String condition = updateProjectAlarmRuleDTO.getCondition();
+//        String classCode = updateProjectAlarmRuleDTO.getClassCode();
+//        String alarmItemCode = updateProjectAlarmRuleDTO.getAlarmItemCode();
+//        //删除中台报警条件
+//        groupAlarmRuleService.deleteEquipCondition(condition, classCode, alarmItemCode);
+//        //新增中台报警条件
+//        List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
+//        for (AddProjectAlarmRuleObjRelDTO equipRel : addRelations) {
+//            AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
+//            String equipId = equipRel.getObjId();
+//            addAlarmConfigDTO.setObjId(equipId);
+//            addAlarmConfigDTO.setItemCode(alarmItemCode);
+//            addAlarmConfigDTO.setClassCode(classCode);
+//            addAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
+//            addAlarmConfigDTO.setCategory("Eqdx");
+//            addAlarmConfigDTO.setOpen(1);
+//            AlarmCondition equipCondition = new AlarmCondition();
+//            List<String> infoCodeList = (List<String>) conditionMap.get("infoCode");
+//            List<String> infoCodeNew = new ArrayList<>();
+//            for (String infoCode : infoCodeList) {
+//                String replacement = equipId + "_" + infoCode;
+//                infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
+//            }
+//            equipCondition.setInfoCode(infoCodeNew);
+//            String backend = (String) conditionMap.get("backend");
+//            for (String infoCode : infoCodeList) {
+//                String replacement = equipId + "_" + infoCode;
+//                backend = backend.replaceAll(infoCode, replacement);
+//            }
+//            equipCondition.setEnd("!" + backend);
+//            equipCondition.setEndUphold(0);
+//            equipCondition.setTrigger(backend);
+//            equipCondition.setTriggerUphold(alarmCondition.getTriggerUphold() * 60);
+//            equipCondition.setRules((List<String>) conditionMap.get("displayFormula"));
+//            JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmCondition.getFrontend()));
+//            equipCondition.setConfigs(configs);
+//            AlarmEffectTime effectTime = new AlarmEffectTime();
+//            effectTime.setType("always");
+//            equipCondition.setEffectTime(effectTime);
+//            addAlarmConfigDTO.setCondition(equipCondition);
+//            alarmConfigs.add(addAlarmConfigDTO);
+//        }
+//        sendBatchCreateAlarmConfigMsg(alarmConfigs, projectId);
     }
 
     private List<AddProjectAlarmRuleObjRelDTO> convert2AddProjectAlarmRuleObjRelDTO(List<UpdateAlarmItemDTO> addRelationList, String id, String projectId) {
@@ -448,39 +446,16 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         queryWrapper.eq(ProjectAlarmRule.PROP_VALID, ValidEnum.TRUE.getType());
         // 这里认为pageQueryDTO是经过校验的,肯定包含分页信息
         IPage<ProjectAlarmRule> pageParam = new Page<>(pageQueryProjectAlarmRuleDTO.getPage(), pageQueryProjectAlarmRuleDTO.getSize(), true);
-        // 排序信息
-        //        if(CollectionUtils.isEmpty(pageQueryProjectAlarmRuleDTO.getOrders())){
-        // 默认按创建时间倒序排序
         queryWrapper.orderBy(true, false, ProjectAlarmRule.PROP_CREATIONTIME);
-        /*}else {
-            List<Sort> orders = pageQueryProjectAlarmRuleDTO.getOrders();
-            for(Sort sort: orders) {
-                // 将驼峰转换为下划线格式
-                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE,sort.getColumn()));
-                queryWrapper.orderBy(true, sort.isAsc(), sort.getColumn());
-            }
-        }*/
 
-        // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryProjectAlarmRuleDTO.getGroupId())) {
             queryWrapper.eq(ProjectAlarmRule.PROP_GROUP_ID, pageQueryProjectAlarmRuleDTO.getGroupId());
         }
 
-        // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryProjectAlarmRuleDTO.getAlarmItemCode())) {
             queryWrapper.eq(ProjectAlarmRule.PROP_ALARM_ITEM_CODE, pageQueryProjectAlarmRuleDTO.getAlarmItemCode());
         }
 
-        // todo 需判断使用like还是eq
-        /*if (StringUtils.isNotEmpty(pageQueryProjectAlarmRuleDTO.getAlarmConditionId())) {
-            queryWrapper.like(ProjectAlarmRule.PROP_ALARM_CONDITION_ID, pageQueryProjectAlarmRuleDTO.getAlarmConditionId());
-        }*/
-
-        //        if (pageQueryProjectAlarmRuleDTO.getBelong() != null) {
-        //            queryWrapper.eq(ProjectAlarmRule.PROP_BELONG, pageQueryProjectAlarmRuleDTO.getBelong());
-        //        }
-
-        // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryProjectAlarmRuleDTO.getProjectId())) {
             queryWrapper.eq(ProjectAlarmRule.PROP_PROJECT_ID, pageQueryProjectAlarmRuleDTO.getProjectId());
         }
@@ -489,20 +464,25 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
     }
 
     @Override
-    public List<AddProjectAlarmRuleObjRelDTO> addProjectAlarmRules(AddGroupAlarmRuleDTO addGroupAlarmRuleDTO) {
+    public void addProjectAlarmRules(AddGroupAlarmRuleDTO addGroupAlarmRuleDTO) {
         String condition = addGroupAlarmRuleDTO.getCondition();
         String classCode = addGroupAlarmRuleDTO.getClassCode();
         //查询所有项目
         List<ProjectVO> projects = this.getProject();
         //遍历项目,组好对象进行插入
-        List<ProjectAlarmRule> projectAlarmRuleList = new ArrayList<>();
+        List<ProjectAlarmRule> projectAlarmRuleList;
         String alarmItemCode = addGroupAlarmRuleDTO.getAlarmItemCode();
         String alarmItemName = addGroupAlarmRuleDTO.getAlarmItemName();
-        List<AddProjectAlarmRuleObjRelDTO> addRelationList = new ArrayList<>();
+        List<AddProjectAlarmRuleObjRelDTO> addRelationList;
+        log.info("开始创建项目报警规则,并添加项目规则与设备的关联关系");
+        log.info("共有{}个项目需要创建报警规则", projects.size());
+        int count = 0;
         for (ProjectVO project : projects) {
-            String projectId = "Pj" + project.getProjectId();
+            projectAlarmRuleList = new ArrayList<>();
+            addRelationList = new ArrayList<>();
+
             ProjectAlarmRule projectAlarmRule = new ProjectAlarmRule();
-            projectAlarmRule.setProjectId(projectId);
+            projectAlarmRule.setProjectId(project.getProjectId());
             projectAlarmRule.setAlarmItemCode(alarmItemCode);
             projectAlarmRule.setAlarmItemName(alarmItemName);
             projectAlarmRule.setBelong(INTEGER_ONE);
@@ -514,23 +494,25 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
             projectAlarmRuleList.add(projectAlarmRule);
             //新增关联关系
             QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
-            queryEquipDTO.setProjectId(projectId);
+            queryEquipDTO.setProjectId(project.getProjectId());
             queryEquipDTO.setClassCode(classCode);
             queryEquipDTO.setCondition(condition);
             List<EquipItem> records = groupManagementService.getEquipList(queryEquipDTO);
             for (EquipItem record : records) {
                 AddProjectAlarmRuleObjRelDTO addProjectAlarmRuleObjRelDTO = new AddProjectAlarmRuleObjRelDTO();
                 addProjectAlarmRuleObjRelDTO.setProjectAlarmRuleId(projectAlarmRule.getId());
-                addProjectAlarmRuleObjRelDTO.setProjectId(projectId);
+                addProjectAlarmRuleObjRelDTO.setProjectId(project.getProjectId());
                 addProjectAlarmRuleObjRelDTO.setObjId(record.getId());
                 addProjectAlarmRuleObjRelDTO.setObjName(record.getLocalName());
                 addProjectAlarmRuleObjRelDTO.setOpen(INTEGER_ONE);
                 addRelationList.add(addProjectAlarmRuleObjRelDTO);
             }
+            // 按项目批量保存
+            projectAlarmRuleObjRelService.createBatchRelation(addRelationList);
+            saveBatch(projectAlarmRuleList);
+            count ++;
+            log.info("已完成{}个项目的报警规则创建, 剩余{}个项目的报警规则待创建", count, projects.size() - count);
         }
-        projectAlarmRuleObjRelService.createBatchRelation(addRelationList);
-        saveBatch(projectAlarmRuleList);
-        return addRelationList;
     }
 
     @Override
@@ -555,22 +537,23 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         mapper.insertProject(substring);
     }
 
-    @Override
-    public void sendBatchCreateAlarmConfigMsg(List<AddAlarmConfigDTO> alarmConfigs, String projectId) {
-        if (CollectionUtils.isEmpty(alarmConfigs)) {
-            return;
-        }
-        DmpMessage dmpMessage = new DmpMessage();
-        dmpMessage.setGroupCode(PoemsContext.getContext().getGroupCode());
-        dmpMessage.setProjectId(projectId);
-        dmpMessage.setUserId(PoemsContext.getContext().getUserId());
-        dmpMessage.setAppId("energy-alarm-service");
-        dmpMessage.setType("alarmConfigBatchCreate");
-        JSONObject exts = new JSONObject();
-        exts.put("alarmConfigs", alarmConfigs);
-        dmpMessage.setExts(exts);
-        rabbitMsgSender.convertAndSend(dmpMessage);
-    }
+    // 勿删后续可能启用 lixing
+//    @Override
+//    public void sendBatchCreateAlarmConfigMsg(List<AddAlarmConfigDTO> alarmConfigs, String projectId) {
+//        if (CollectionUtils.isEmpty(alarmConfigs)) {
+//            return;
+//        }
+//        DmpMessage dmpMessage = new DmpMessage();
+//        dmpMessage.setGroupCode(PoemsContext.getContext().getGroupCode());
+//        dmpMessage.setProjectId(projectId);
+//        dmpMessage.setUserId(PoemsContext.getContext().getUserId());
+//        dmpMessage.setAppId("energy-alarm-service");
+//        dmpMessage.setType("alarmConfigBatchCreate");
+//        JSONObject exts = new JSONObject();
+//        exts.put("alarmConfigs", alarmConfigs);
+//        dmpMessage.setExts(exts);
+//        rabbitMsgSender.convertAndSend(dmpMessage);
+//    }
 
     @Override
     public void deleteBatch(GroupAlarmRule groupAlarmRule) {

+ 0 - 2
src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/service/impl/ProjectAlarmRuleObjRelServiceImpl.java

@@ -313,7 +313,6 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
         List<EquipItem> records = new ArrayList<>();
         for (ProjectVO project : projects) {
             QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
-            queryEquipDTO.setProjectId("Pj" + project.getProjectId());
             queryEquipDTO.setClassCode(classCode);
             queryEquipDTO.setCondition(condition);
             List<EquipItem> record = groupManagementService.getEquipList(queryEquipDTO);
@@ -326,7 +325,6 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
     public void deleteBatch() {
         List<ProjectVO> project = projectAlarmRuleService.getProject();
         List<String> list = project.stream().map(ProjectVO::getProjectId).collect(Collectors.toList());
-        list.forEach(projectId -> projectId = "Pj" + projectId);
         QueryWrapper<ProjectAlarmRuleObjRel> queryWrapper = new QueryWrapper<>();
         queryWrapper.in(ProjectAlarmRuleObjRel.PROP_PROJECT_ID, list);
         ProjectAlarmRuleObjRel projectAlarmRuleObjRel = new ProjectAlarmRuleObjRel();

+ 48 - 0
src/main/java/com/persagy/apm/alarmservice/project/model/AlarmCondition.java

@@ -0,0 +1,48 @@
+package com.persagy.apm.alarmservice.project.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.persagy.apm.common.model.entity.AuditableEntity;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 报警条件(AlarmCondition)实体类
+ * @author lixing
+ * @version V1.0 2021-10-21 11:19:12
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel(description = "报警条件")
+public class AlarmCondition extends AuditableEntity<AlarmCondition> implements Serializable {
+    private static final long serialVersionUID = -69196501972192443L;
+
+    @ApiModelProperty("包含的参数")
+    private Object infoCodes;
+    
+    @ApiModelProperty("前端展示")
+    private Object frontend;
+    
+    @ApiModelProperty("后端使用")
+    private Object backend;
+    
+    @ApiModelProperty("持续多久后触发")
+    private Integer triggerUphold;
+    
+    @ApiModelProperty("报警等级")
+    private String alarmLevel;
+    
+    @ApiModelProperty("持续多久后恢复")
+    private Integer endUphold;
+    
+
+    public static String PROP_INFO_CODES = "info_codes";
+    public static String PROP_FRONTEND = "frontend";
+    public static String PROP_BACKEND = "backend";
+    public static String PROP_TRIGGER_UPHOLD = "trigger_uphold";
+    public static String PROP_ALARM_LEVEL = "alarm_level";
+    public static String PROP_END_UPHOLD = "end_uphold";
+
+}

+ 2 - 1
src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/service/impl/ProjectMonitorIndicatorConfigServiceImpl.java

@@ -435,7 +435,8 @@ public class ProjectMonitorIndicatorConfigServiceImpl extends ServiceImpl<Projec
         if (StringUtils.isBlank(objId) || CollectionUtils.isEmpty(monitorIndicatorIdList)) {
             return result;
         }
-        EquipItem equipItem = groupManagementService.equipGet(objId);
+        EquipItem equipItem = groupManagementService.equipGet(objId,
+                PoemsContext.getContext().getProjectId(), PoemsContext.getContext().getGroupCode());
         QueryMonitorIndicatorDTO queryMonitorIndicatorDTO = new QueryMonitorIndicatorDTO();
         queryMonitorIndicatorDTO.setIds(monitorIndicatorIdList);
         List<MonitorIndicator> monitorIndicators = monitorIndicatorService.queryMonitorIndicatorList(queryMonitorIndicatorDTO);

+ 0 - 23
src/main/resources/json/GroupTree.json

@@ -1,23 +0,0 @@
-[
-  {
-    "id": "1",
-    "name": "组合式空调机组",
-    "classCode": "ACATAH",
-    "condition": "installType: 1",
-    "children": []
-  },
-  {
-    "id": "2",
-    "name": "吊装空调",
-    "classCode": "ACATAH",
-    "condition": "installType: 2",
-    "children": []
-  },
-  {
-    "id": "3",
-    "name": "新风机组",
-    "classCode": "ACATFU",
-    "condition": "",
-    "children": []
-  }
-]

+ 26 - 13
src/main/resources/mapper/AlarmConditionMapper.xml

@@ -2,18 +2,31 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.persagy.apm.alarmservice.project.alarmcondition.dao.AlarmConditionMapper">
     <resultMap id="AlarmConditionMap" type="com.persagy.apm.alarmservice.project.alarmcondition.model.AlarmCondition">
-		<result column="id" property="id" />
-		<result column="info_codes" property="infoCodes" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-		<result column="frontend" property="frontend" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-		<result column="backend" property="backend" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
-		<result column="trigger_uphold" property="triggerUphold" />
-		<result column="alarm_level" property="alarmLevel" />
-		<result column="ts" property="ts" />
-		<result column="creator" property="creator" />
-		<result column="creation_time" property="creationTime" />
-		<result column="modifier" property="modifier" />
-		<result column="modified_time" property="modifiedTime" />
-		<result column="valid" property="valid" />
-	</resultMap>
+        <result column="id" property="id"/>
+        <result column="info_codes" property="infoCodes"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+        <result column="trigger_uphold" property="triggerUphold"/>
+        <result column="alarm_level" property="alarmLevel"/>
+        <result column="ts" property="ts"/>
+        <result column="creator" property="creator"/>
+        <result column="creation_time" property="creationTime"/>
+        <result column="modifier" property="modifier"/>
+        <result column="modified_time" property="modifiedTime"/>
+        <result column="valid" property="valid"/>
+        <result column="end_uphold" property="endUphold"/>
+        <result column="trigger_frontend" property="triggerFrontend"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+        <result column="trigger_backend" property="triggerBackend"/>
+        <result column="trigger_rules" property="triggerRules"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+        <result column="end_frontend" property="endFrontend"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+        <result column="end_backend" property="endBackend"/>
+        <result column="end_rules" property="endRules"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+        <result column="effect_time_type" property="effectTimeType"/>
+        <result column="effect_time_detail" property="effectTimeDetail"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+    </resultMap>
 </mapper>
 

+ 2 - 2
src/main/resources/mapper/GroupAlarmRuleMapper.xml

@@ -35,8 +35,8 @@
         a.modified_time,
         b.id as cid,
         b.info_codes,
-        b.frontend,
-        b.backend,
+        b.trigger_frontend,
+        b.trigger_backend,
         b.trigger_uphold,
         b.alarm_level
         from group_alarm_rule a