Browse Source

Merge branch 'v1.0.0' of http://39.106.8.246:3003/apm/energy-alarm-service into v1.0.0

lixing 3 năm trước cách đây
mục cha
commit
3042b6c7e4
19 tập tin đã thay đổi với 300 bổ sung195 xóa
  1. 2 1
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/controller/GroupAlarmRuleController.java
  2. 5 0
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/model/dto/CheckAlarmItemDTO.java
  3. 2 0
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/service/IGroupAlarmRuleService.java
  4. 0 1
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/service/impl/GroupAlarmRuleServiceImpl.java
  5. 1 1
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/controller/AlarmConditionController.java
  6. 4 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/IAlarmConditionService.java
  7. 28 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/impl/AlarmConditionServiceImpl.java
  8. 5 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/controller/ProjectAlarmRuleController.java
  9. 5 4
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/model/dto/AddProjectAlarmRuleDTO.java
  10. 0 1
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/model/dto/UpdateProjectAlarmRuleDTO.java
  11. 2 1
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/model/vo/ProjectAlarmRuleListItemVO.java
  12. 155 129
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/impl/ProjectAlarmRuleServiceImpl.java
  13. 3 3
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/controller/ProjectAlarmRuleObjRelController.java
  14. 2 2
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/model/dto/AddProjectAlarmRuleObjRelDTO.java
  15. 3 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/model/dto/QueryRuleObjRelDTO.java
  16. 12 9
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/model/vo/ProjectAlarmRuleObjRelListItemVO.java
  17. 8 1
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/service/IProjectAlarmRuleObjRelService.java
  18. 62 31
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/service/impl/ProjectAlarmRuleObjRelServiceImpl.java
  19. 1 11
      src/main/resources/mapper/ProjectAlarmRuleMapper.xml

+ 2 - 1
src/main/java/com/persagy/apm/alarmservice/group/alarmrule/controller/GroupAlarmRuleController.java

@@ -166,8 +166,9 @@ public class GroupAlarmRuleController {
 
     @ApiOperation(value = "集团页面查询报警类型")
     @PostMapping("/getAlarmItem")
-    public CommonResult<PageList<SimpleObjVO>> getAlarmItem(CheckAlarmItemDTO checkAlarmItemDTO) throws Exception {
+    public CommonResult<PageList<SimpleObjVO>> getAlarmItem(@RequestBody CheckAlarmItemDTO checkAlarmItemDTO) throws Exception {
         QueryAlarmItemDTO queryAlarmItemDTO = new QueryAlarmItemDTO();
+        queryAlarmItemDTO.setCategory(checkAlarmItemDTO.getCategory());
         DmpResult<List<AlarmItem>> dmpResult = alarmItemService.query(queryAlarmItemDTO);
         List<GroupAlarmRule> existAlarmItem = groupAlarmRuleService.getExistAlarmItem(checkAlarmItemDTO.getGroupId());
         List<String> alarmItemCodes = existAlarmItem.stream().map(GroupAlarmRule::getAlarmItemCode).collect(Collectors.toList());

+ 5 - 0
src/main/java/com/persagy/apm/alarmservice/group/alarmrule/model/dto/CheckAlarmItemDTO.java

@@ -7,6 +7,7 @@ import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * @author lixing
@@ -18,5 +19,9 @@ public class CheckAlarmItemDTO {
     @ApiModelProperty(value = "分组id", required = true)
     @NotNull(message = "分组id不能为空") // todo 更新校验规则
     private String groupId;
+
+    @ApiModelProperty(value = "category", required = true)
+
+    private List<String> category;
     
 }

+ 2 - 0
src/main/java/com/persagy/apm/alarmservice/group/alarmrule/service/IGroupAlarmRuleService.java

@@ -83,4 +83,6 @@ public interface IGroupAlarmRuleService  {
     List<EquipItem> getAllEquip(String classCode, String condition);
 
     List<GroupAlarmRule> getExistAlarmItem(String groupId);
+
+    void deleteEquipCondition(String condition, String classCode, String alarmItemCode) throws Exception;
 }

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

@@ -376,7 +376,6 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
         //删除设备报警条件 begin
         BatchDeleteAlarmConfigDTO batchDeleteAlarmConfigDTO = new BatchDeleteAlarmConfigDTO();
         List<DeleteAlarmConfigDTO> alarmConfigs = new ArrayList<>();
-
         //查询所有设备
         List<EquipItem> equips = this.getAllEquip(classCode, condition);
         List<String> objIds = equips.stream().map(EquipItem::getId).collect(Collectors.toList());

+ 1 - 1
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/controller/AlarmConditionController.java

@@ -111,7 +111,7 @@ public class AlarmConditionController {
     //    return ResultHelper.multi(pagedResultList);
     //}
 
-    @ApiOperation(value = "集团报警规则详情")
+    @ApiOperation(value = "查询集团报警规则")
     @PostMapping("/getCondition")
     public CommonResult<AlarmConditionItemVO> getCondition(
             @Valid @RequestBody GetGroupAlarmRuleDTO getGroupAlarmRuleDTO) {

+ 4 - 0
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/IAlarmConditionService.java

@@ -77,6 +77,10 @@ public interface IAlarmConditionService  {
 
     CommonResult<Boolean> validate(ValidateAlarmConditionDTO formulaString);
 
+    void saveCondition(AlarmCondition alarmCondition);
+
+    Map<String, Object> swtichAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO);
+
     Map<String, Object> frontend2Backend(List<List<CalculateMethodDTO>> frontend);
 
     void updateById(Map<String, Object> conditionMap, UpdateAlarmConditionDTO alarmCondition);

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

@@ -64,6 +64,34 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         return stringMap;
     }
 
+    @Override
+    public void saveCondition(AlarmCondition alarmCondition){
+        save(alarmCondition);
+    }
+
+    /**
+     * 转换报警条件
+     *
+     * @return 报警条件主键
+     * @author lixing
+     * @version V1.0 2021-09-08 22:30:38
+     */
+    @Override
+    public Map<String, Object> swtichAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO) {
+        AlarmCondition alarmCondition = ConvertAlarmConditionTool.INSTANCE.convertAddDto2Entity(addAlarmConditionDTO);
+        List<List<CalculateMethodDTO>> frontend = addAlarmConditionDTO.getFrontend();
+        alarmCondition.setFrontend(frontend);
+        //将前端公式转换成后台公式
+        Map<String, Object> stringMap = frontend2Backend(frontend);
+        alarmCondition.setBackend((String) stringMap.get("backend"));
+        alarmCondition.setInfoCodes((List<String>) stringMap.get("infoCode"));
+        // 设置默认值
+        setDefaultValue(alarmCondition);
+        stringMap.put("alarmCondition",alarmCondition);
+        stringMap.put("id", alarmCondition.getId());
+        return stringMap;
+    }
+
     public Map<String, Object> frontend2Backend(List<List<CalculateMethodDTO>> frontend) {
         StringBuffer allNotNull = new StringBuffer();
         StringBuffer allNull = new StringBuffer();

+ 5 - 0
src/main/java/com/persagy/apm/alarmservice/project/alarmrule/controller/ProjectAlarmRuleController.java

@@ -118,6 +118,11 @@ public class ProjectAlarmRuleController {
         pageQueryProjectAlarmRuleDTO.setStartIndex((page - 1) * size);
         int count = projectAlarmRuleMapper.queryCount(pageQueryProjectAlarmRuleDTO);
         List<ProjectAlarmRuleListItemVO> projectAlarmRuleListItemVOS = projectAlarmRuleMapper.queryList(pageQueryProjectAlarmRuleDTO);
+        for (ProjectAlarmRuleListItemVO projectAlarmRuleListItemVO : projectAlarmRuleListItemVOS) {
+            List<ProjectAlarmRuleObjRel> query = projectAlarmRuleObjRelService.query(projectAlarmRuleListItemVO.getId());
+            projectAlarmRuleListItemVO.setRelListItemList(query);
+        }
+
         return ResultHelper.multi(projectAlarmRuleListItemVOS, count);
 
 

+ 5 - 4
src/main/java/com/persagy/apm/alarmservice/project/alarmrule/model/dto/AddProjectAlarmRuleDTO.java

@@ -1,6 +1,7 @@
 package com.persagy.apm.alarmservice.project.alarmrule.model.dto;
 
 import com.persagy.apm.alarmservice.project.alarmcondition.model.dto.AddAlarmConditionDTO;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.ProjectAlarmRuleObjRel;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.AddProjectAlarmRuleObjRelDTO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.UpdateAlarmItemDTO;
 import io.swagger.annotations.ApiModel;
@@ -30,9 +31,9 @@ public class AddProjectAlarmRuleDTO {
     @NotNull(message = "报警类型名称不能为空") // todo 更新校验规则
     private String alarmItemName;
     
-    @ApiModelProperty(value = "报警条件id", required = true)
-    //@NotNull(message = "报警条件id不能为空") // todo 更新校验规则
-    private String alarmConditionId;
+//    @ApiModelProperty(value = "报警条件id", required = true)
+//    //@NotNull(message = "报警条件id不能为空") // todo 更新校验规则
+//    private String alarmConditionId;
     
     @ApiModelProperty(value = "所属类型(0项目自定义、1集团标准)", required = true)
     @NotNull(message = "所属类型(0项目自定义、1集团标准)不能为空") // todo 更新校验规则
@@ -44,7 +45,7 @@ public class AddProjectAlarmRuleDTO {
 
     @ApiModelProperty(value = "报警对象列表", required = true)
     @NotNull(message = "报警对象列表不能为空") // todo 更新校验规则
-    private List<UpdateAlarmItemDTO> addRelationList;
+    private List<ProjectAlarmRuleObjRel> addEquipList;
 
     @ApiModelProperty(value = "报警规则", required = true)
     @NotNull(message = "报警规则不能为空") // todo 更新校验规则

+ 0 - 1
src/main/java/com/persagy/apm/alarmservice/project/alarmrule/model/dto/UpdateProjectAlarmRuleDTO.java

@@ -57,7 +57,6 @@ public class UpdateProjectAlarmRuleDTO {
     private String classCode;
 
     @ApiModelProperty(value = "查询条件",required = true)
-    @NotBlank(message = "查询条件必传")
     private String condition;
     
 }

+ 2 - 1
src/main/java/com/persagy/apm/alarmservice/project/alarmrule/model/vo/ProjectAlarmRuleListItemVO.java

@@ -1,6 +1,7 @@
 package com.persagy.apm.alarmservice.project.alarmrule.model.vo;
 
 import com.persagy.apm.alarmservice.project.alarmcondition.model.vo.AlarmConditionListItemVO;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.ProjectAlarmRuleObjRel;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectAlarmRuleObjRelVO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -54,7 +55,7 @@ public class ProjectAlarmRuleListItemVO {
     private Date modifiedTime;
 
     @ApiModelProperty("报警对象")
-    private List<ProjectAlarmRuleObjRelVO> relListItemList;
+    private List<ProjectAlarmRuleObjRel> relListItemList;
 
     @ApiModelProperty(value = "报警规则", required = true)
     @NotNull(message = "报警规则不能为空") // todo 更新校验规则

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

@@ -1,5 +1,6 @@
 package com.persagy.apm.alarmservice.project.alarmrule.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -8,29 +9,36 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 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;
+import com.persagy.apm.alarmservice.group.alarmrule.model.dto.GetGroupAlarmRuleDTO;
 import com.persagy.apm.alarmservice.group.alarmrule.model.dto.QueryGroupAlarmRuleDTO;
 import com.persagy.apm.alarmservice.group.alarmrule.service.IGroupAlarmRuleService;
 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.equip.vo.EquipListItem;
 import com.persagy.apm.alarmservice.group.management.service.impl.GroupManagementServiceImpl;
+import com.persagy.apm.alarmservice.project.alarmcondition.model.ConvertAlarmConditionTool;
 import com.persagy.apm.alarmservice.project.alarmcondition.model.dto.AddAlarmConditionDTO;
+import com.persagy.apm.alarmservice.project.alarmcondition.model.dto.QueryAlarmConditionDTO;
+import com.persagy.apm.alarmservice.project.alarmcondition.model.dto.UpdateAlarmConditionDTO;
 import com.persagy.apm.alarmservice.project.alarmcondition.service.IAlarmConditionService;
 import com.persagy.apm.alarmservice.project.alarmrule.dao.ProjectAlarmRuleMapper;
 import com.persagy.apm.alarmservice.project.alarmrule.model.ConvertProjectAlarmRuleTool;
 import com.persagy.apm.alarmservice.project.alarmrule.model.ProjectAlarmRule;
 import com.persagy.apm.alarmservice.project.alarmrule.model.dto.*;
 import com.persagy.apm.alarmservice.project.alarmrule.service.IProjectAlarmRuleService;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.ConvertProjectAlarmRuleObjRelTool;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.ProjectAlarmRuleObjRel;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.AddProjectAlarmRuleObjRelDTO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.QueryRuleObjRelDTO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.UpdateAlarmItemDTO;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectAlarmRuleObjRelListItemVO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectVO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.service.IProjectAlarmRuleObjRelService;
 import com.persagy.apm.common.constant.enums.ValidEnum;
 import com.persagy.apm.common.context.AppContext;
 import com.persagy.apm.common.context.poems.PoemsContext;
 import com.persagy.apm.energyalarmstarter.alarmdata.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;
@@ -39,6 +47,7 @@ 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 com.persagy.apm.energyalarmstarter.alarmdata.model.dto.AlarmCondition;
 
 import java.io.File;
 import java.io.IOException;
@@ -84,75 +93,64 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
     @Transactional(rollbackFor = Exception.class)
     public String createProjectAlarmRule(AddProjectAlarmRuleDTO addProjectAlarmRuleDTO) throws Exception {
         ProjectAlarmRule projectAlarmRule = ConvertProjectAlarmRuleTool.INSTANCE.convertAddDto2Entity(addProjectAlarmRuleDTO);
-        String uuid = DataUtils.getUUID();
-        projectAlarmRule.setId(uuid);
-        AddAlarmConditionDTO addAlarmConditionDTO = addProjectAlarmRuleDTO.getAlarmCondition();
-        if (addProjectAlarmRuleDTO.getBelong() == INTEGER_ONE) {
-            //查询对应报警类型的集团规则,将ID添加到项目规则表
-            QueryGroupAlarmRuleDTO queryAlarmConditionDTO = new QueryGroupAlarmRuleDTO();
-            queryAlarmConditionDTO.setAlarmItemCode(addProjectAlarmRuleDTO.getAlarmItemCode());
-            List<GroupAlarmRule> groupAlarmRuleList = groupAlarmRuleService.queryGroupAlarmRuleList(queryAlarmConditionDTO);
-            String conditionId = groupAlarmRuleList.get(0).getAlarmConditionId();
-            projectAlarmRule.setAlarmConditionId(conditionId);
-        } else {
-            //新增自定义的规则
-            Map<String, Object> map = alarmConditionService.createAlarmCondition(addAlarmConditionDTO);
-            projectAlarmRule.setAlarmConditionId((String) map.get("id"));
-        }
-        //新增关联关系
-        List<UpdateAlarmItemDTO> addRelationList = addProjectAlarmRuleDTO.getAddRelationList();
-        String projectId = addProjectAlarmRuleDTO.getProjectId();
-        List<AddProjectAlarmRuleObjRelDTO> addRelations = convert2AddProjectAlarmRuleObjRelDTO(addRelationList,uuid,projectId);
-        projectAlarmRuleObjRelService.createBatchRelation(addRelations);
-        // 设置默认值
-        projectAlarmRule.setCreationTime(new Date());
+        AddAlarmConditionDTO alarmConditionDTO = addProjectAlarmRuleDTO.getAlarmCondition();
+        ConvertAlarmConditionTool.INSTANCE.convertAddDto2Entity(alarmConditionDTO);
+        //存储报警规则
+        Map<String, Object> alarmConditionMap = alarmConditionService.createAlarmCondition(alarmConditionDTO);
+        String conditionId = (String) alarmConditionMap.get("id");
+        projectAlarmRule.setAlarmConditionId(conditionId);
+        projectAlarmRule.setId(DataUtils.getUUID());
         setDefaultValue(projectAlarmRule);
+        //存储项目报警
         save(projectAlarmRule);
-//        //同步创建设备报警条件
-//        BatchAddAlarmConfigDTO batchAddAlarmConfigDTO = new BatchAddAlarmConfigDTO();
-//        List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
-//        for (AddProjectAlarmRuleObjRelDTO addProjectAlarmRuleObjRelDTO : addProjectAlarmRuleDTO.getAddRelationList()) {
-//            AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
-//            addAlarmConfigDTO.setObjId(addProjectAlarmRuleObjRelDTO.getEquipId());
-//            addAlarmConfigDTO.setItemCode(addProjectAlarmRuleDTO.getAlarmItemCode());
-//            addAlarmConfigDTO.setClassCode(addProjectAlarmRuleDTO.getClassCode());
-//            addAlarmConfigDTO.setLevel(addAlarmConditionDTO.getAlarmLevel());
-//            AlarmCondition condition = new AlarmCondition();
-//            condition.setTrigger(addAlarmConditionDTO.getBackend());
-//            List<String> infoCodeList = addAlarmConditionDTO.getInfoCodes();
-//            condition.setInfoCode(infoCodeList);
-//            condition.setTriggerUphold(addAlarmConditionDTO.getTriggerUphold());
-//            Map<String, Object> stringMap = alarmConditionService.frontend2Backend(addAlarmConditionDTO.getFrontend());
-//            condition.setRules((List<String>) stringMap.get("displayFormula"));
-//            addAlarmConfigDTO.setCondition(condition);
-//            alarmConfigs.add(addAlarmConfigDTO);
-//        }
-//        batchAddAlarmConfigDTO.setAlarmConfigs(alarmConfigs);
-//        alarmConfigService.batchCreate(batchAddAlarmConfigDTO);
-
-        //同步更新设备报警条件 begin
-//        BatchUpdateAlarmConfigDTO batchUpdateAlarmConfigDTO = new BatchUpdateAlarmConfigDTO();
-//        List<UpdateAlarmConfigDTO> updateAlarmConfigDTOs = new ArrayList();
-//        String condition = addProjectAlarmRuleDTO.getCondition();
-//        String classCode = addProjectAlarmRuleDTO.getClassCode();
-//        List<GroupManagementVo> records = groupManagementService.getEquipList(condition, classCode);
-//        Map<String, Object> stringMap = alarmConditionService.frontend2Backend(addAlarmConditionDTO.getFrontend());
-//        for (GroupManagementVo record : records) {
-//            AlarmCondition alarmCondit = new AlarmCondition();
-//            alarmCondit.setTrigger(alarmCondition.getBackend());
-//            List<String> infoCodeList = alarmCondition.getInfoCodes();
-//            alarmCondit.setInfoCode(infoCodeList);
-//            alarmCondit.setTriggerUphold(alarmCondition.getTriggerUphold());
-//            alarmCondit.setRules((List<String>) stringMap.get("displayFormula"));
-//            UpdateAlarmConfigDTO updateAlarmConfigDTO = new UpdateAlarmConfigDTO();
-//            updateAlarmConfigDTO.setCondition(alarmCondit);
-//            updateAlarmConfigDTO.setId(record.getId());
-//            updateAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
-//            updateAlarmConfigDTOs.add(updateAlarmConfigDTO);
-//        }
-//        batchUpdateAlarmConfigDTO.setAlarmConfigs(updateAlarmConfigDTOs);
-//        alarmConfigService.batchUpdate(batchUpdateAlarmConfigDTO);
-        //同步更新设备报警条件 end
+
+        List<ProjectAlarmRuleObjRel> addEquipList = addProjectAlarmRuleDTO.getAddEquipList();
+        addEquipList.forEach(addEquip -> {
+            addEquip.setProjectAlarmRuleId(projectAlarmRule.getId());
+        });
+        //保存报警对象
+        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);
+        }
+        batchAddAlarmConfigDTO.setAlarmConfigs(alarmConfigs);
+        batchAddAlarmConfigDTO.setProjectId(addProjectAlarmRuleDTO.getProjectId());
+        alarmConfigService.batchCreate(batchAddAlarmConfigDTO);
         return projectAlarmRule.getId();
     }
 
@@ -165,9 +163,6 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
      */
     private void setDefaultValue(ProjectAlarmRule projectAlarmRule) {
         projectAlarmRule.setCreator(AppContext.getContext().getAccountId());
-        projectAlarmRule.setModifiedTime(new Date());
-        // todo 其他默认的属性
-
     }
 
     /**
@@ -200,70 +195,100 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         projectAlarmRule = ConvertProjectAlarmRuleTool.INSTANCE.convertUpdateDto2Entity(projectAlarmRule, updateProjectAlarmRuleDTO);
         projectAlarmRule.setModifier(AppContext.getContext().getAccountId());
         AddAlarmConditionDTO alarmCondition = updateProjectAlarmRuleDTO.getAlarmCondition();
-        if (alarmCondition != null) {
-            //查询已有报警
-            ProjectAlarmRule projectRule = getById(updateProjectAlarmRuleDTO.getId());
-            int belongOld = projectRule.getBelong();
-            int belongNew = updateProjectAlarmRuleDTO.getBelong();
-            //删除对应项目、报警类型、报警对象的关联
-            projectAlarmRuleObjRelService.deleteRelation(updateProjectAlarmRuleDTO.getProjectId());
-            if (belongOld > belongNew) {//集团规则->项目自定义规则
-                //新增自定义的规则
-                Map<String, Object> map = alarmConditionService.createAlarmCondition(alarmCondition);
-                projectAlarmRule.setAlarmConditionId((String) map.get("id"));
-            } else if (belongOld < belongNew) {//项目自定义规则->集团规则
-                String conditionId = getConditionId(updateProjectAlarmRuleDTO.getAlarmItemCode());
-                projectAlarmRule.setAlarmConditionId(conditionId);
-            } else if (belongOld == 0 && belongNew == 0) {//项目自定义规则->项目自定义规则
-                //删除自定义规则,新增自定义的规则
-                alarmConditionService.deleteAlarmCondition(updateProjectAlarmRuleDTO.getAlarmConditionId());
-                Map<String, Object> map = alarmConditionService.createAlarmCondition(alarmCondition);
-                projectAlarmRule.setAlarmConditionId((String) map.get("id"));
-            }
-            //新增关联关系
-            List<UpdateAlarmItemDTO> addRelationList = updateProjectAlarmRuleDTO.getAddRelationList();
-            String projectId = updateProjectAlarmRuleDTO.getProjectId();
-            String id = updateProjectAlarmRuleDTO.getId();
-            List<AddProjectAlarmRuleObjRelDTO> addRelations = convert2AddProjectAlarmRuleObjRelDTO(addRelationList,id,projectId);
-            projectAlarmRuleObjRelService.createBatchRelation(addRelations);
-
-            //同步更新设备报警条件 begin
-//            BatchUpdateAlarmConfigDTO batchUpdateAlarmConfigDTO = new BatchUpdateAlarmConfigDTO();
-//            List<UpdateAlarmConfigDTO> updateAlarmConfigDTOs = new ArrayList();
-//            String condition = updateProjectAlarmRuleDTO.getCondition();
-//            String classCode = updateProjectAlarmRuleDTO.getClassCode();
-//            QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
-//            queryEquipDTO.setProjectId(projectId);
-//            queryEquipDTO.setClassCode(classCode);
-//            queryEquipDTO.setCondition(condition);
-//            List<EquipItem> records = groupManagementService.getEquipList(queryEquipDTO);
-//            Map<String, Object> stringMap = alarmConditionService.frontend2Backend(alarmCondition.getFrontend());
-//            for (EquipItem record : records) {
-//                AlarmCondition alarmCondit = new AlarmCondition();
-//                alarmCondit.setTrigger(alarmCondition.getBackend());
-//                List<String> infoCodeList = alarmCondition.getInfoCodes();
-//                alarmCondit.setInfoCode(infoCodeList);
-//                alarmCondit.setTriggerUphold(alarmCondition.getTriggerUphold());
-//                alarmCondit.setRules((List<String>) stringMap.get("displayFormula"));
-//                UpdateAlarmConfigDTO updateAlarmConfigDTO = new UpdateAlarmConfigDTO();
-//                updateAlarmConfigDTO.setCondition(alarmCondit);
-//                updateAlarmConfigDTO.setId(record.getId());
-//                updateAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
-//                updateAlarmConfigDTOs.add(updateAlarmConfigDTO);
-//            }
-//            batchUpdateAlarmConfigDTO.setAlarmConfigs(updateAlarmConfigDTOs);
-//            alarmConfigService.batchUpdate(batchUpdateAlarmConfigDTO);
-            //同步更新设备报警条件 end
+        Map<String, Object> conditionMap = alarmConditionService.swtichAlarmCondition(alarmCondition);
+        //查询已有项目报警
+        ProjectAlarmRule projectRule = getById(updateProjectAlarmRuleDTO.getId());
+        int belongOld = projectRule.getBelong();
+        int belongNew = updateProjectAlarmRuleDTO.getBelong();
+        if (belongOld > belongNew) {//集团规则->项目自定义规则
+            //新增规则
+            com.persagy.apm.alarmservice.project.alarmcondition.model.AlarmCondition condition =
+                    (com.persagy.apm.alarmservice.project.alarmcondition.model.AlarmCondition) conditionMap.get("alarmCondition");
+            String uuid = DataUtils.getUUID();
+            condition.setId(uuid);
+            alarmConditionService.saveCondition(condition);
+            //将规则ID传给项目报警
+            projectAlarmRule.setAlarmConditionId(uuid);
+        } else if (belongOld < belongNew) {//项目自定义规则->集团规则
+            //删除自定义规则
+            ProjectAlarmRule projectAlarm = getById(updateProjectAlarmRuleDTO.getId());
+            alarmConditionService.deleteAlarmCondition(projectAlarm.getAlarmConditionId());
+            //查询集团规则,将集团规则ID传给项目报警
+            GetGroupAlarmRuleDTO getGroupAlarmRuleDTO = new GetGroupAlarmRuleDTO();
+            getGroupAlarmRuleDTO.setGroupId(updateProjectAlarmRuleDTO.getGroupId());
+            getGroupAlarmRuleDTO.setAlarmItemCode(updateProjectAlarmRuleDTO.getAlarmItemCode());
+            GroupAlarmRule groupAlarmRule = groupAlarmRuleService.getGroupAlarmRule(getGroupAlarmRuleDTO);
+            projectAlarmRule.setAlarmConditionId(groupAlarmRule.getId());
+        } else if (belongOld == 0 && belongNew == 0) {//项目自定义规则->项目自定义规则
+            //修改自定义规则
+            UpdateAlarmConditionDTO updateAlarmConditionDTO = new UpdateAlarmConditionDTO();
+            updateAlarmConditionDTO.setFrontend(alarmCondition.getFrontend());
+            updateAlarmConditionDTO.setId(updateProjectAlarmRuleDTO.getAlarmConditionId());
+            updateAlarmConditionDTO.setTriggerUphold(alarmCondition.getTriggerUphold());
+            updateAlarmConditionDTO.setAlarmLevel(alarmCondition.getAlarmLevel());
+            alarmConditionService.updateAlarmCondition(updateAlarmConditionDTO);
         }
         //更新项目报警
         projectAlarmRule.setModifiedTime(new Date());
         projectAlarmRule.setModifier(PoemsContext.getContext().getUserId());
         updateById(projectAlarmRule);
-
-
+        //删除报警对象关联关系
+        projectAlarmRuleObjRelService.deleteRelation(updateProjectAlarmRuleDTO.getId());
+        //新增关联关系
+        List<UpdateAlarmItemDTO> addRelationList = updateProjectAlarmRuleDTO.getAddRelationList();
+        String projectId = updateProjectAlarmRuleDTO.getProjectId();
+        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);
+        //新增中台报警条件
+        BatchAddAlarmConfigDTO batchAddAlarmConfigDTO = new BatchAddAlarmConfigDTO();
+        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);
+        }
+        batchAddAlarmConfigDTO.setAlarmConfigs(alarmConfigs);
+        batchAddAlarmConfigDTO.setProjectId(projectId);
+        alarmConfigService.batchCreate(batchAddAlarmConfigDTO);
     }
 
-    private List<AddProjectAlarmRuleObjRelDTO> convert2AddProjectAlarmRuleObjRelDTO(List<UpdateAlarmItemDTO> addRelationList,String id,String projectId) {
+    private List<AddProjectAlarmRuleObjRelDTO> convert2AddProjectAlarmRuleObjRelDTO(List<UpdateAlarmItemDTO> addRelationList, String id, String projectId) {
         List<AddProjectAlarmRuleObjRelDTO> list = new ArrayList<>();
         for (UpdateAlarmItemDTO updateAlarmItemDTO : addRelationList) {
             AddProjectAlarmRuleObjRelDTO addProjectAlarmRuleObjRelDTO = new AddProjectAlarmRuleObjRelDTO();
@@ -327,7 +352,7 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
             alarmConditionService.deleteAlarmCondition(projectAlarmRule.getAlarmConditionId());
         }
         //删除项目报警规则与监测对象的关联
-        projectAlarmRuleObjRelService.deleteRelation(projectAlarmRule.getProjectId());
+        projectAlarmRuleObjRelService.deleteRelation(projectAlarmRule.getId());
         //删除设备报警条件 begin
         BatchDeleteAlarmConfigDTO batchDeleteAlarmConfigDTO = new BatchDeleteAlarmConfigDTO();
         List<DeleteAlarmConfigDTO> alarmConfigs = new ArrayList<>();
@@ -532,6 +557,7 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         QueryWrapper<ProjectAlarmRule> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq(ProjectAlarmRule.PROP_GROUP_ID, queryRuleObjRelDTO.getGroupId());
         queryWrapper.eq(ProjectAlarmRule.PROP_ALARM_ITEM_CODE, queryRuleObjRelDTO.getAlarmItemCode());
+        queryWrapper.eq(ProjectAlarmRule.PROP_PROJECT_ID, queryRuleObjRelDTO.getProjectId());
         List<ProjectAlarmRule> list = list(queryWrapper);
         List<String> idList = list.stream().map(ProjectAlarmRule::getId).collect(Collectors.toList());
         return idList;

+ 3 - 3
src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/controller/ProjectAlarmRuleObjRelController.java

@@ -118,11 +118,11 @@ public class ProjectAlarmRuleObjRelController {
         return ResultHelper.multi(resultList);
     }
 
-    @ApiOperation(value = "查询报警对象")
+    @ApiOperation(value = "查询项目报警对象")
     @PostMapping("/queryRuleObjRel")
-    public CommonResult<PageList<ProjectAlarmRuleObjRelVO>> queryRuleObjRel(
+    public CommonResult<PageList<ProjectAlarmRuleObjRelListItemVO>> queryRuleObjRel(
             @Valid @RequestBody QueryRuleObjRelDTO queryRuleObjRelDTO) {
-        List<ProjectAlarmRuleObjRelVO> projectAlarmRuleObjRelVOS = projectAlarmRuleObjRelService.queryRuleObjRel(queryRuleObjRelDTO);
+        List<ProjectAlarmRuleObjRelListItemVO> projectAlarmRuleObjRelVOS = projectAlarmRuleObjRelService.queryRuleObjRel(queryRuleObjRelDTO);
         return ResultHelper.multi(projectAlarmRuleObjRelVOS);
     }
 }

+ 2 - 2
src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/model/dto/AddProjectAlarmRuleObjRelDTO.java

@@ -13,8 +13,8 @@ import java.util.Date;
 @Data
 @ApiModel(value = "创建项目报警规则与监测对象的关联入参")
 public class AddProjectAlarmRuleObjRelDTO {
-    @ApiModelProperty(value = "项目报警规则id", required = true)
-    @NotNull(message = "项目报警规则id不能为空") // todo 更新校验规则
+    @ApiModelProperty(value = "项目报警规则id")
+    //@NotNull(message = "项目报警规则id不能为空") // todo 更新校验规则
     private String projectAlarmRuleId;
     
     @ApiModelProperty(value = "设备ID", required = true)

+ 3 - 0
src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/model/dto/QueryRuleObjRelDTO.java

@@ -32,4 +32,7 @@ public class QueryRuleObjRelDTO {
     @ApiModelProperty(value = "项目ID",required = true)
     @NotBlank(message = "项目ID必传")
     private String projectId;
+
+    @ApiModelProperty(value = "项目报警ID:编辑时传,新增时不传")
+    private String projectAlarmRuleId;
 }

+ 12 - 9
src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/model/vo/ProjectAlarmRuleObjRelListItemVO.java

@@ -16,28 +16,31 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 public class ProjectAlarmRuleObjRelListItemVO {
     @ApiModelProperty("主键")
     private String id;
-    
+
     @ApiModelProperty("项目报警规则id")
     private String projectAlarmRuleId;
-    
+
     @ApiModelProperty("设备ID")
-    private String equipId;
-    
+    private String objId;
+
+    @ApiModelProperty("设备名称")
+    private String objName;
+
     @ApiModelProperty("屏蔽状态 1-open、0- 屏蔽")
     private Integer open;
-    
+
     @ApiModelProperty("项目id")
     private String projectId;
-    
+
     @ApiModelProperty("创建人")
     private String creator;
-    
+
     @ApiModelProperty("创建时间")
     private Date creationTime;
-    
+
     @ApiModelProperty("修改人")
     private String modifier;
-    
+
     @ApiModelProperty("修改时间")
     private Date modifiedTime;
     

+ 8 - 1
src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/service/IProjectAlarmRuleObjRelService.java

@@ -4,6 +4,7 @@ import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.*;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.*;
 import java.util.List;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectAlarmRuleObjRelListItemVO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectAlarmRuleObjRelVO;
 
 /**
@@ -84,5 +85,11 @@ public interface IProjectAlarmRuleObjRelService  {
 
     List<ProjectAlarmRuleObjRel> queryShieldManage(QueryShieldManageDTO queryShieldManageDTO);
 
-    List<ProjectAlarmRuleObjRelVO> queryRuleObjRel(QueryRuleObjRelDTO queryRuleObjRelDTO);
+    List<ProjectAlarmRuleObjRelListItemVO> queryRuleObjRel(QueryRuleObjRelDTO queryRuleObjRelDTO);
+
+    List<ProjectAlarmRuleObjRel> query(String projectId);
+
+    List<ProjectAlarmRuleObjRel> queryObjRelList(List<String> strings);
+
+    void saveProjectAlarmRule(List<ProjectAlarmRuleObjRel> addEquipList);
 }

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

@@ -5,16 +5,19 @@ 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.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.persagy.apm.alarmservice.group.alarmrule.model.ConvertGroupAlarmRuleTool;
 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.service.GroupManagementService;
-import com.persagy.apm.alarmservice.project.alarmrule.dao.ProjectAlarmRuleMapper;
-import com.persagy.apm.alarmservice.project.alarmrule.model.ProjectAlarmRule;
 import com.persagy.apm.alarmservice.project.alarmrule.service.IProjectAlarmRuleService;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.dao.ProjectAlarmRuleObjRelMapper;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.ConvertProjectAlarmRuleObjRelTool;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.ConvertProjectAlarmRuleObjRelToolImpl;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.ProjectAlarmRuleObjRel;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.*;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectAlarmRuleObjRelListItemVO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectAlarmRuleObjRelVO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectVO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.service.IProjectAlarmRuleObjRelService;
@@ -32,9 +35,8 @@ 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.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
 /**
@@ -252,9 +254,9 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
     }
 
     @Override
-    public void deleteRelation(String projectId) {
+    public void deleteRelation(String id) {
         QueryWrapper<ProjectAlarmRuleObjRel> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_PROJECT_ID, projectId);
+        queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_PROJECT_ALARM_RULE_ID, id);
         ProjectAlarmRuleObjRel projectAlarmRuleObjRel = new ProjectAlarmRuleObjRel();
         projectAlarmRuleObjRel.setValid(ValidEnum.FALSE.getType());
         update(projectAlarmRuleObjRel, queryWrapper);
@@ -276,7 +278,7 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
         List<ShieldManageDTO> shieldManageDTOList = shieldManageListDTO.getShieldManageDTOList();
         String projectAlarmRuleId = shieldManageListDTO.getProjectAlarmRuleId();
         String projectId = shieldManageListDTO.getProjectId();
-        projectAlarmRuleObjRelMapper.updateStatus(shieldManageDTOList,projectAlarmRuleId,projectId);
+        projectAlarmRuleObjRelMapper.updateStatus(shieldManageDTOList, projectAlarmRuleId, projectId);
 
         //删除设备报警条件 begin
         BatchDeleteAlarmConfigDTO batchDeleteAlarmConfigDTO = new BatchDeleteAlarmConfigDTO();
@@ -292,7 +294,7 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
         //所有设备条件
         List<AlarmConfigItem> data = query.getData();
         //组织删除参数
-        if(data.size()>0){
+        if (data.size() > 0) {
             data.forEach(alarmConfigItem -> {
                 DeleteAlarmConfigDTO deleteAlarmConfigDTO = new DeleteAlarmConfigDTO();
                 deleteAlarmConfigDTO.setId(alarmConfigItem.getId());
@@ -304,7 +306,7 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
         //删除设备报警条件 end
     }
 
-    public List<EquipItem> getAllEquip(String classCode,String condition){
+    public List<EquipItem> getAllEquip(String classCode, String condition) {
         //查询所有项目
         List<ProjectVO> projects = projectAlarmRuleService.getProject();
         List<EquipItem> records = new ArrayList<>();
@@ -355,32 +357,55 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
     }
 
     @Override
-    public List<ProjectAlarmRuleObjRelVO> queryRuleObjRel(QueryRuleObjRelDTO queryRuleObjRelDTO) {
-        List<String> projectAlarmRuleIdList = projectAlarmRuleService.queryAlarmRule(queryRuleObjRelDTO);
-        List<ProjectAlarmRuleObjRel> relationList = this.queryObjRelList(projectAlarmRuleIdList);
-        Map<String, ProjectAlarmRuleObjRel> partitionMap = relationList.stream().collect(Collectors.toMap(
-                ProjectAlarmRuleObjRel::getObjId, equip -> equip));
-        String condition = queryRuleObjRelDTO.getCondition();
-        String classCode = queryRuleObjRelDTO.getClassCode();
-        String projectId = queryRuleObjRelDTO.getProjectId();
-        QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
-        queryEquipDTO.setProjectId(projectId);
-        queryEquipDTO.setClassCode(classCode);
-        queryEquipDTO.setCondition(condition);
-        List<EquipItem> records = groupManagementService.getEquipList(queryEquipDTO);
-        List<ProjectAlarmRuleObjRelVO> resultList = new ArrayList<>();
-        for (EquipItem record : records) {
-            if (partitionMap.get(record.getId()) == null) {
-                ProjectAlarmRuleObjRelVO projectAlarmRuleObjRelVO = new ProjectAlarmRuleObjRelVO();
-                projectAlarmRuleObjRelVO.setObjId(record.getId());
-                projectAlarmRuleObjRelVO.setObjName(record.getName());
-                resultList.add(projectAlarmRuleObjRelVO);
+    public List<ProjectAlarmRuleObjRelListItemVO> queryRuleObjRel(QueryRuleObjRelDTO queryRuleObjRelDTO) {
+        List<ProjectAlarmRuleObjRelListItemVO> resultList = new ArrayList<>();
+        if (StringUtils.isBlank(queryRuleObjRelDTO.getProjectAlarmRuleId())) {
+            //新增
+            String projectId = queryRuleObjRelDTO.getProjectId();
+            QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
+            queryEquipDTO.setProjectId(projectId);
+            queryEquipDTO.setClassCode(queryRuleObjRelDTO.getClassCode());
+            queryEquipDTO.setCondition(queryRuleObjRelDTO.getCondition());
+            List<EquipItem> records = groupManagementService.getEquipList(queryEquipDTO);
+            Map<String, EquipItem> partitionMap = records.stream().collect(Collectors.toMap(EquipItem::getId, equip -> equip, (k1, k2) -> k1));
+            //根据项目报警ID查询已绑定的报警对象
+            List<String> projectAlarmRuleIdList = projectAlarmRuleService.queryAlarmRule(queryRuleObjRelDTO);
+            List<ProjectAlarmRuleObjRel> rels = this.queryObjRelList(projectAlarmRuleIdList);
+            List<String> objIds = rels.stream().map(ProjectAlarmRuleObjRel::getObjId).distinct().collect(Collectors.toList());
+            for (String objId : objIds) {
+                if (!partitionMap.containsKey(objId)) {
+                    ProjectAlarmRuleObjRelListItemVO projectAlarmRuleObjRelVO = new ProjectAlarmRuleObjRelListItemVO();
+                    EquipItem equipItem = partitionMap.get(objId);
+                    projectAlarmRuleObjRelVO.setObjId(equipItem.getId());
+                    projectAlarmRuleObjRelVO.setObjName(equipItem.getName());
+                    resultList.add(projectAlarmRuleObjRelVO);
+                }
             }
+        } else {
+            //修改
+            QueryWrapper<ProjectAlarmRuleObjRel> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_PROJECT_ALARM_RULE_ID, queryRuleObjRelDTO.getProjectAlarmRuleId());
+            List<ProjectAlarmRuleObjRel> relList = list(queryWrapper);
+            resultList = ConvertProjectAlarmRuleObjRelTool.INSTANCE.convert2List(relList);
+
         }
         return resultList;
     }
 
-    private List<ProjectAlarmRuleObjRel> queryObjRelList(List<String> projectAlarmRuleIdList) {
+    private static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
+        Map<Object, Boolean> seen = new ConcurrentHashMap<>();
+        return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
+    }
+
+
+    @Override
+    public List<ProjectAlarmRuleObjRel> query(String id) {
+        QueryWrapper<ProjectAlarmRuleObjRel> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_PROJECT_ALARM_RULE_ID, id);
+        return list(queryWrapper);
+    }
+
+    public List<ProjectAlarmRuleObjRel> queryObjRelList(List<String> projectAlarmRuleIdList) {
         List<ProjectAlarmRuleObjRel> list = new ArrayList<>();
         for (String projectAlarmRuleId : projectAlarmRuleIdList) {
             QueryWrapper<ProjectAlarmRuleObjRel> queryWrapper = new QueryWrapper<>();
@@ -388,6 +413,12 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
             list.addAll(list(queryWrapper));
 
         }
+        list.stream().map(ProjectAlarmRuleObjRel::getObjId).distinct().collect(Collectors.toList());
         return list;
     }
+
+    @Override
+    public void saveProjectAlarmRule(List<ProjectAlarmRuleObjRel> addEquipList) {
+        saveBatch(addEquipList);
+    }
 }

+ 1 - 11
src/main/resources/mapper/ProjectAlarmRuleMapper.xml

@@ -14,12 +14,6 @@
         <result column="creation_time" property="creationTime"/>
         <result column="modifier" property="modifier"/>
         <result column="modified_time" property="modifiedTime"/>
-        <collection property="relListItemList"
-                    ofType="com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectAlarmRuleObjRelVO">
-            <result column="obj_id" property="objId"/>
-            <result column="obj_name" property="objName"/>
-            <result column="open" property="open"/>
-        </collection>
         <collection property="alarmCondition"
                     ofType="com.persagy.apm.alarmservice.project.alarmcondition.model.vo.AlarmConditionListItemVO">
             <result column="info_codes" property="infoCodes"
@@ -37,7 +31,7 @@
     <select id="queryCount" resultType="java.lang.Integer">
         select count(*)
         from project_alarm_rule a
-        left join project_alarm_rule_obj_rel b on a.id = b.project_alarm_rule_id
+        left join alarm_condition c on a.alarm_condition_id = c.id
         where a.group_id = #{groupId} and a.valid = 1
         <if test="alarmItemCode != null and alarmItemCode != ''">
             and a.alarm_item_code = #{alarmItemCode}
@@ -58,13 +52,9 @@
         a.creation_time,
         a.modified_time,
         a.modifier,
-        b.obj_id,
-        b.obj_name,
-        b.open,
         c.alarm_level,
         c.backend,c.frontend,c.info_codes,c.trigger_uphold
         from project_alarm_rule a
-        left join project_alarm_rule_obj_rel b on a.id = b.project_alarm_rule_id
         left join alarm_condition c on a.alarm_condition_id = c.id
         where a.group_id = #{groupId} and a.valid = 1
         <if test="alarmItemCode != null and alarmItemCode != ''">