xujiaheng пре 3 година
родитељ
комит
567312232f

+ 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 更新校验规则

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

@@ -14,6 +14,7 @@ import com.persagy.apm.alarmservice.group.management.model.equip.dto.QueryEquipD
 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.service.IAlarmConditionService;
 import com.persagy.apm.alarmservice.project.alarmrule.dao.ProjectAlarmRuleMapper;
@@ -21,16 +22,18 @@ import com.persagy.apm.alarmservice.project.alarmrule.model.ConvertProjectAlarmR
 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.alarmconfig.*;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmConfigItem;
 import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmConfigServiceImpl;
@@ -39,6 +42,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 +88,45 @@ 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());
+//        List<ProjectAlarmRuleObjRelListItemVO> equipList = ConvertProjectAlarmRuleObjRelTool.INSTANCE.convert2List(addProjectAlarmRuleDTO.getAddEquipList());
+        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();
+            addAlarmConfigDTO.setObjId(ProjectAlarmRuleObjRel.getObjId());
+            addAlarmConfigDTO.setItemCode(addProjectAlarmRuleDTO.getAlarmItemCode());
+            addAlarmConfigDTO.setClassCode(addProjectAlarmRuleDTO.getClassCode());
+            addAlarmConfigDTO.setLevel(alarmConditionDTO.getAlarmLevel());
+            AlarmCondition condition = new AlarmCondition();
+            condition.setTrigger(alarmConditionDTO.getBackend());
+            List<String> infoCodeList = alarmConditionDTO.getInfoCodes();
+            condition.setInfoCode(infoCodeList);
+            condition.setTriggerUphold(alarmConditionDTO.getTriggerUphold());
+            Map<String, Object> stringMap = alarmConditionService.frontend2Backend(alarmConditionDTO.getFrontend());
+            condition.setRules((List<String>) stringMap.get("displayFormula"));
+            addAlarmConfigDTO.setCondition(condition);
+            alarmConfigs.add(addAlarmConfigDTO);
+        }
+        batchAddAlarmConfigDTO.setAlarmConfigs(alarmConfigs);
+        alarmConfigService.batchCreate(batchAddAlarmConfigDTO);
         return projectAlarmRule.getId();
     }
 
@@ -165,9 +139,6 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
      */
     private void setDefaultValue(ProjectAlarmRule projectAlarmRule) {
         projectAlarmRule.setCreator(AppContext.getContext().getAccountId());
-        projectAlarmRule.setModifiedTime(new Date());
-        // todo 其他默认的属性
-
     }
 
     /**
@@ -532,6 +503,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;
     

+ 4 - 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,9 +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);
 }

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

@@ -5,14 +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.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;
@@ -30,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;
 
 /**
@@ -274,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();
@@ -290,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());
@@ -302,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<>();
@@ -353,31 +357,47 @@ 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,(k1,k2)->k1));
-        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 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<>();
@@ -393,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);
+    }
 }