Browse Source

调用数据中台接口同步创建报警条件,修改为使用消息队列异步创建

lixing 3 years ago
parent
commit
39e68f6c26

+ 2 - 0
src/main/java/com/persagy/apm/alarmservice/common/model/DmpMessage.java

@@ -3,6 +3,8 @@ package com.persagy.apm.alarmservice.common.model;
 import com.alibaba.fastjson.JSONObject;
 import lombok.Data;
 
+import java.util.Map;
+
 /**
  * @description:中台消息队列格式
  * @author:LuoGuangyi

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

@@ -2,13 +2,11 @@ package com.persagy.apm.alarmservice.group.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.google.common.base.CaseFormat;
-import com.persagy.apm.alarmservice.common.util.DataUtils;
 import com.persagy.apm.alarmservice.group.alarmrule.dao.GroupAlarmRuleMapper;
 import com.persagy.apm.alarmservice.group.alarmrule.model.ConvertGroupAlarmRuleTool;
 import com.persagy.apm.alarmservice.group.alarmrule.model.GroupAlarmRule;
@@ -21,7 +19,6 @@ import com.persagy.apm.alarmservice.project.alarmcondition.model.dto.AddAlarmCon
 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.service.IProjectAlarmRuleService;
-import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.AddProjectAlarmRuleObjRelDTO;
 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;
@@ -31,7 +28,10 @@ import com.persagy.apm.common.model.dto.Sort;
 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.dto.alarmconfig.AddAlarmConfigDTO;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.BatchDeleteAlarmConfigDTO;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.DeleteAlarmConfigDTO;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.QueryAlarmConfigDTO;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmConfigItem;
 import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmConfigServiceImpl;
 import lombok.extern.slf4j.Slf4j;
@@ -41,13 +41,14 @@ import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.assertj.core.util.Lists;
-import org.slf4j.Logger;
 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.io.*;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
 import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.List;
@@ -100,7 +101,6 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
             throw new Exception("获取项目为空");
         }
         //3、同步创建设备报警条件
-        BatchAddAlarmConfigDTO batchAddAlarmConfigDTO = new BatchAddAlarmConfigDTO();
         List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
         String condition = addGroupAlarmRuleDTO.getCondition();
         String classCode = addGroupAlarmRuleDTO.getClassCode();
@@ -111,9 +111,9 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
             queryEquipDTO.setClassCode(classCode);
             queryEquipDTO.setCondition(condition);
             List<EquipItem> record = groupManagementService.getEquipList(queryEquipDTO);
-            if (record.size() == 0) {
-                throw new Exception("获取设备详细信息为空");
-            }
+//            if (record.size() == 0) {
+//                throw new Exception("获取设备详细信息为空");
+//            }
             for (EquipItem rec : record) {
                 AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
                 String equipId = rec.getId();
@@ -149,9 +149,7 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
                 addAlarmConfigDTO.setCondition(cond);
                 alarmConfigs.add(addAlarmConfigDTO);
             }
-            batchAddAlarmConfigDTO.setAlarmConfigs(alarmConfigs);
-            batchAddAlarmConfigDTO.setProjectId(projectId);
-            alarmConfigService.batchCreate(batchAddAlarmConfigDTO);
+            projectAlarmRuleService.sendBatchCreateAlarmConfigMsg(alarmConfigs, projectId);
         }
         return groupAlarmRule.getId();
     }
@@ -195,6 +193,9 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
     @Transactional(rollbackFor = Exception.class)
     public void updateGroupAlarmRule(UpdateGroupAlarmRuleDTO updateGroupAlarmRuleDTO) throws Exception {
         GroupAlarmRule groupAlarmRule = getById(updateGroupAlarmRuleDTO.getId());
+        if (groupAlarmRule == null) {
+            throw new IllegalArgumentException("找不到要更新的数据");
+        }
         groupAlarmRule = ConvertGroupAlarmRuleTool.INSTANCE.convertUpdateDto2Entity(groupAlarmRule, updateGroupAlarmRuleDTO);
         groupAlarmRule.setModifier(AppContext.getContext().getAccountId());
         updateById(groupAlarmRule);
@@ -208,7 +209,6 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
         String alarmItemCode = updateGroupAlarmRuleDTO.getAlarmItemCode();
         deleteEquipCondition(condition,classCode, alarmItemCode);
 
-        BatchAddAlarmConfigDTO batchAddAlarmConfigDTO = new BatchAddAlarmConfigDTO();
         //新增中台设备的报警条件
         //查询所有设备
         List<ProjectVO> projects = projectAlarmRuleService.getProject();
@@ -254,9 +254,8 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
                 addAlarmConfigDTO.setCondition(equipCondition);
                 alarmConfigs.add(addAlarmConfigDTO);
             }
-            batchAddAlarmConfigDTO.setAlarmConfigs(alarmConfigs);
-            batchAddAlarmConfigDTO.setProjectId(project.getProjectId());
-            alarmConfigService.batchCreate(batchAddAlarmConfigDTO);
+
+            projectAlarmRuleService.sendBatchCreateAlarmConfigMsg(alarmConfigs, project.getProjectId());
         }
     }
 

+ 15 - 3
src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/IProjectAlarmRuleService.java

@@ -1,13 +1,15 @@
 package com.persagy.apm.alarmservice.project.alarmrule.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.persagy.apm.alarmservice.group.alarmrule.model.dto.AddGroupAlarmRuleDTO;
-import com.persagy.apm.alarmservice.project.alarmrule.model.*;
+import com.persagy.apm.alarmservice.project.alarmrule.model.ProjectAlarmRule;
 import com.persagy.apm.alarmservice.project.alarmrule.model.dto.*;
-import java.util.List;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 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.vo.ProjectVO;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.AddAlarmConfigDTO;
+
+import java.util.List;
 
 /**
  * 项目报警规则(ProjectAlarmRule) service接口
@@ -85,4 +87,14 @@ public interface IProjectAlarmRuleService  {
     List<String> queryAlarmRule(QueryRuleObjRelDTO queryRuleObjRelDTO);
 
     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);
 }

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

@@ -2,10 +2,13 @@ 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;
@@ -14,11 +17,9 @@ import com.persagy.apm.alarmservice.group.alarmrule.model.dto.QueryGroupAlarmRul
 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;
@@ -26,37 +27,28 @@ 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.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 org.apache.commons.io.IOUtils;
 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 org.springframework.util.CollectionUtils;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static org.apache.commons.lang3.math.NumberUtils.INTEGER_ONE;
@@ -83,6 +75,8 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
     private AlarmConfigServiceImpl alarmConfigService;
     @Autowired
     private ProjectAlarmRuleMapper mapper;
+    @Autowired
+    private RabbitMsgSender rabbitMsgSender;
 
     /**
      * 创建项目报警规则
@@ -150,9 +144,7 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
             addAlarmConfigDTO.setCondition(equipCondition);
             alarmConfigs.add(addAlarmConfigDTO);
         }
-        batchAddAlarmConfigDTO.setAlarmConfigs(alarmConfigs);
-        batchAddAlarmConfigDTO.setProjectId(addProjectAlarmRuleDTO.getProjectId());
-        alarmConfigService.batchCreate(batchAddAlarmConfigDTO);
+        sendBatchCreateAlarmConfigMsg(alarmConfigs, addProjectAlarmRuleDTO.getProjectId());
         return projectAlarmRule.getId();
     }
 
@@ -248,7 +240,6 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         //删除中台报警条件
         groupAlarmRuleService.deleteEquipCondition(condition, classCode, alarmItemCode);
         //新增中台报警条件
-        BatchAddAlarmConfigDTO batchAddAlarmConfigDTO = new BatchAddAlarmConfigDTO();
         List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
         for (AddProjectAlarmRuleObjRelDTO equipRel : addRelations) {
             AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
@@ -285,9 +276,7 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
             addAlarmConfigDTO.setCondition(equipCondition);
             alarmConfigs.add(addAlarmConfigDTO);
         }
-        batchAddAlarmConfigDTO.setAlarmConfigs(alarmConfigs);
-        batchAddAlarmConfigDTO.setProjectId(projectId);
-        alarmConfigService.batchCreate(batchAddAlarmConfigDTO);
+        sendBatchCreateAlarmConfigMsg(alarmConfigs, projectId);
     }
 
     private List<AddProjectAlarmRuleObjRelDTO> convert2AddProjectAlarmRuleObjRelDTO(List<UpdateAlarmItemDTO> addRelationList, String id, String projectId) {
@@ -444,14 +433,15 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
      * @version V1.0 2021-09-08 22:46:16
      */
     @Override
-    public IPage<ProjectAlarmRule> pageQueryProjectAlarmRule(PageQueryProjectAlarmRuleDTO
-                                                                     pageQueryProjectAlarmRuleDTO) {
+    public IPage<ProjectAlarmRule> pageQueryProjectAlarmRule(
+            PageQueryProjectAlarmRuleDTO
+                    pageQueryProjectAlarmRuleDTO) {
         QueryWrapper<ProjectAlarmRule> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq(ProjectAlarmRule.PROP_VALID, ValidEnum.TRUE.getType());
         // 这里认为pageQueryDTO是经过校验的,肯定包含分页信息
         IPage<ProjectAlarmRule> pageParam = new Page<>(pageQueryProjectAlarmRuleDTO.getPage(), pageQueryProjectAlarmRuleDTO.getSize(), true);
         // 排序信息
-//        if(CollectionUtils.isEmpty(pageQueryProjectAlarmRuleDTO.getOrders())){
+        //        if(CollectionUtils.isEmpty(pageQueryProjectAlarmRuleDTO.getOrders())){
         // 默认按创建时间倒序排序
         queryWrapper.orderBy(true, false, ProjectAlarmRule.PROP_CREATIONTIME);
         /*}else {
@@ -478,9 +468,9 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
             queryWrapper.like(ProjectAlarmRule.PROP_ALARM_CONDITION_ID, pageQueryProjectAlarmRuleDTO.getAlarmConditionId());
         }*/
 
-//        if (pageQueryProjectAlarmRuleDTO.getBelong() != null) {
-//            queryWrapper.eq(ProjectAlarmRule.PROP_BELONG, pageQueryProjectAlarmRuleDTO.getBelong());
-//        }
+        //        if (pageQueryProjectAlarmRuleDTO.getBelong() != null) {
+        //            queryWrapper.eq(ProjectAlarmRule.PROP_BELONG, pageQueryProjectAlarmRuleDTO.getBelong());
+        //        }
 
         // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryProjectAlarmRuleDTO.getProjectId())) {
@@ -558,4 +548,21 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
     public void insertProject(String substring) {
         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);
+    }
 }