Ver código fonte

集团项目报警相关接口提交

xujiaheng 3 anos atrás
pai
commit
78bb4a1400

+ 1 - 1
src/main/java/com/persagy/apm/alarmservice/alarmcondition/model/dto/AddAlarmConditionDTO.java

@@ -18,7 +18,7 @@ import java.util.Map;
 public class AddAlarmConditionDTO {
     @ApiModelProperty(value = "包含的参数", required = true)
     //@NotNull(message = "包含的参数不能为空") // todo 更新校验规则
-    private Map<String,String> infoCodes;
+    private List<List<String>> infoCodes;
     
     @ApiModelProperty(value = "报警触发规则", required = true)
     @NotNull(message = "报警触发规则不能为空") // todo 更新校验规则

+ 1 - 1
src/main/java/com/persagy/apm/alarmservice/alarmcondition/model/dto/UpdateAlarmConditionDTO.java

@@ -22,7 +22,7 @@ public class UpdateAlarmConditionDTO {
     
     @ApiModelProperty(value = "包含的参数", required = true)
     @NotNull(message = "包含的参数不能为空") // todo 更新校验规则
-    private Map<String, String> infoCodes;
+    private List<List<String>> infoCodes;
     
     @ApiModelProperty(value = "前端展示", required = true)
     @NotNull(message = "前端展示不能为空") // todo 更新校验规则

+ 54 - 17
src/main/java/com/persagy/apm/alarmservice/alarmcondition/service/impl/AlarmConditionServiceImpl.java

@@ -20,10 +20,10 @@ import com.persagy.apm.common.constant.enums.ValidEnum;
 import com.persagy.apm.common.context.poems.PoemsContext;
 import com.persagy.apm.common.model.dto.Sort;
 import org.apache.commons.lang.StringUtils;
-import org.json.JSONArray;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -49,11 +49,11 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
     public String createAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO) {
         AlarmCondition alarmCondition = ConvertAlarmConditionTool.INSTANCE.convertAddDto2Entity(addAlarmConditionDTO);
         List<List<CalculateMethodDTO>> frontend = addAlarmConditionDTO.getFrontend();
-        addAlarmConditionDTO.getInfoCodes();
+        List<List<String>> infoCodes = addAlarmConditionDTO.getInfoCodes();
         Object json = JSON.toJSON(frontend);
         alarmCondition.setFrontend(json);
         //将前端公式转换成后台公式
-        String backend = frontend2Backend(frontend);
+        String backend = frontend2Backend(frontend,infoCodes);
         alarmCondition.setBackend(backend);
         // 设置默认值
         setDefaultValue(alarmCondition);
@@ -61,31 +61,67 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         return alarmCondition.getId();
     }
 
-    private String frontend2Backend(List<List<CalculateMethodDTO>> frontend) {
-        StringBuffer sb = new StringBuffer();
-        for (List<CalculateMethodDTO> calculateMethodDTOS : frontend) {
+    private String frontend2Backend(List<List<CalculateMethodDTO>> frontend, List<List<String>> infoCodes) {
+        List<String> nullList = new ArrayList<>();
+        StringBuffer allNotNull = new StringBuffer();
+        StringBuffer allNull = new StringBuffer();
+        for (List<String> infoCode : infoCodes) {
             StringBuffer notNullString = new StringBuffer();
-            notNullString.append("(");
             StringBuffer nullString = new StringBuffer();
             nullString.append("(");
+            notNullString.append("(");
+            for (String s : infoCode) {
+                notNullString.append(s).append("!=NaN").append(" && ");
+                nullString.append(s).append("==NaN").append(" || ");
+            }
+            notNullString.delete(notNullString.length() - 4, notNullString.length()).append(")").append("||");
+            allNotNull.append("(").append(notNullString).append(" || ");
+            nullString.delete(nullString.length() - 4, nullString.length()).append(")");
+            nullList.add(nullString.toString());
+        }
+        allNotNull.delete(allNotNull.length() - 4, allNotNull.length()).append(")");
+        for (int i = 0; i < frontend.size(); i++) {
+            StringBuffer calculateString = new StringBuffer();
+            for (int j = 0; j < frontend.get(i).size(); j++) {
+                CalculateMethodDTO calculateMethodDTO = frontend.get(i).get(j);
+                calculateString.append("(")
+                        .append(calculateMethodDTO.getMonitorIndicatorId())
+                        .append(calculateMethodDTO.getOperator())
+                        .append(calculateMethodDTO.getFormula()).append(")")
+                        .append(" && ");
+            }
+            calculateString.append("(").delete(calculateString.length() - 4, calculateString.length()).append(")");
+            allNull.append(nullList.get(i)).append("?true:").append(calculateString).append("||");
+        }
+        StringBuffer substring = new StringBuffer();
+        substring.append(allNotNull).append(allNull);
+
+
+
+
+
+        /*StringBuffer allNotNull = new StringBuffer();
+        StringBuffer allNull = new StringBuffer();
+        for (List<CalculateMethodDTO> calculateMethodDTOS : frontend) {
+            StringBuffer notNullString = new StringBuffer();
+            StringBuffer nullString = new StringBuffer();
             StringBuffer calculateString = new StringBuffer();
             for (CalculateMethodDTO calculateMethodDTO : calculateMethodDTOS) {
-                nullString.append(calculateMethodDTO.getMonitorIndicatorId()).append("==NaN").append("||");
-                notNullString.append("(").append(calculateMethodDTO.getMonitorIndicatorId()).append("!=NaN").append("&&");
+                nullString.append(calculateMethodDTO.getMonitorIndicatorId()).append("==NaN").append(" || ");
+                notNullString.append(calculateMethodDTO.getMonitorIndicatorId()).append("!=NaN").append(" && ");
                 calculateString.append("(")
                         .append(calculateMethodDTO.getMonitorIndicatorId())
                         .append(calculateMethodDTO.getOperator())
                         .append(calculateMethodDTO.getFormula()).append(")")
                         .append(" && ");
             }
-            notNullString.append(")").append("||");
-            //sb.append(calculateString.substring(0, calculateString.length() - 4)).append(" || ");
+            notNullString.delete(notNullString.length() - 4, notNullString.length()).append(")");
+            allNotNull.append("(").append(notNullString).append(" || ");
+            allNull.append("(").append("(").append(nullString.substring(0, nullString.length() - 4)).append(")").append("?true:").append("(").append(calculateString.substring(0, calculateString.length() - 4)).append(")").append(")").append(" || ");
         }
-        String substring = sb.substring(0, sb.length() - 4);
-//        for (Map.Entry<String, String> entry : infoCodes.entrySet()) {
-//            calculateString.toString().replace(entry.getKey(),entry.getValue());
-//        }
-        return substring;
+        StringBuffer substring = new StringBuffer();
+        substring.append("(").append(allNotNull.substring(0, allNotNull.length() - 4)).append(")").append(" && ").append("(").append(allNull.substring(0, allNull.length() - 4)).append(")").toString();*/
+        return substring.toString();
     }
 
     /**
@@ -139,7 +175,8 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
             String frontJson = JSON.toJSONString(frontend);
             alarmCondition.setFrontend(frontJson);
             //将前端公式转换成后台公式
-            String backend = frontend2Backend(frontend);
+            List<List<String>> infoCodes = updateAlarmConditionDTO.getInfoCodes();
+            String backend = frontend2Backend(frontend, infoCodes);
             alarmCondition.setBackend(backend);
         }
         updateById(alarmCondition);

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

@@ -32,6 +32,7 @@ public class ProjectAlarmRuleObjRelController {
     private IProjectAlarmRuleObjRelService projectAlarmRuleObjRelService;
 
 	@ApiOperation(value = "创建项目报警规则与监测对象的关联")
+    @ApiIgnore
 	@PostMapping("/create")
 	public CommonResult<ApmResponseUpsertVO> createProjectAlarmRuleObjRel(
 	        @Valid @RequestBody AddProjectAlarmRuleObjRelDTO addProjectAlarmRuleObjRelDTO) {
@@ -71,6 +72,7 @@ public class ProjectAlarmRuleObjRelController {
 
 
     @ApiOperation(value = "项目报警规则与监测对象的关联列表")
+    @ApiIgnore
     @PostMapping("/query")
     public CommonResult<PageList<ProjectAlarmRuleObjRelListItemVO>> queryProjectAlarmRuleObjRel(
             @Valid @RequestBody QueryProjectAlarmRuleObjRelDTO queryProjectAlarmRuleObjRelDTO) {
@@ -94,12 +96,21 @@ public class ProjectAlarmRuleObjRelController {
     //    return ResultHelper.multi(pagedResultList);
     //}
 
-    @ApiOperation(value = "屏蔽管理")
+    @ApiOperation(value = "修改屏蔽管理")
     @PostMapping("/shieldManage")
     public CommonResult<ApmResponseUpsertVO> shieldManage(
             @Valid @RequestBody List<ProjectAlarmRuleObjRel> projectAlarmRuleObjRelList) {
         projectAlarmRuleObjRelService.updateBatch(projectAlarmRuleObjRelList);
         return ResultHelper.success();
     }
+
+    @ApiOperation(value = "项目报警规则与监测对象的关联列表")
+    @PostMapping("/queryShieldManage")
+    public CommonResult<PageList<ProjectAlarmRuleObjRelListItemVO>> queryShieldManage(
+            @Valid @RequestBody QueryShieldManageDTO queryShieldManageDTO) {
+        List<ProjectAlarmRuleObjRel> projectAlarmRuleObjRelList = projectAlarmRuleObjRelService.queryShieldManage(queryShieldManageDTO);
+        List<ProjectAlarmRuleObjRelListItemVO> resultList = ConvertProjectAlarmRuleObjRelTool.INSTANCE.convert2List(projectAlarmRuleObjRelList);
+        return ResultHelper.multi(resultList);
+    }
 }
 

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

@@ -0,0 +1,20 @@
+package com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-08 22:46:37
+ */
+@Data
+@ApiModel(value = "查询项目报警规则与监测对象的关联入参")
+public class QueryShieldManageDTO {
+    @ApiModelProperty(value = "项目报警规则id", required = true)
+    private String projectAlarmRuleId;
+    
+    @ApiModelProperty(value = "项目id", required = true)
+    private String projectId;
+    
+}

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

@@ -82,4 +82,6 @@ public interface IProjectAlarmRuleObjRelService  {
     void updateBatch(List<ProjectAlarmRuleObjRel> projectAlarmRuleObjRelList);
 
     void deleteBatch();
+
+    List<ProjectAlarmRuleObjRel> queryShieldManage(QueryShieldManageDTO queryShieldManageDTO);
 }

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

@@ -263,4 +263,28 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
         projectAlarmRuleObjRel.setValid(ValidEnum.FALSE.getType());
         update(projectAlarmRuleObjRel, queryWrapper);
     }
+
+    @Override
+    public List<ProjectAlarmRuleObjRel> queryShieldManage(QueryShieldManageDTO queryShieldManageDTO) {
+        QueryWrapper<ProjectAlarmRuleObjRel> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_VALID, ValidEnum.TRUE.getType());
+        // 默认按创建时间倒序排序
+        queryWrapper.orderBy(true, false, ProjectAlarmRuleObjRel.PROP_CREATIONTIME);
+
+        if (queryShieldManageDTO != null) {
+
+            // todo 需判断使用like还是eq
+            if (StringUtils.isNotEmpty(queryShieldManageDTO.getProjectAlarmRuleId())) {
+                queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_PROJECT_ALARM_RULE_ID, queryShieldManageDTO.getProjectAlarmRuleId());
+            }
+
+            // todo 需判断使用like还是eq
+            if (StringUtils.isNotEmpty(queryShieldManageDTO.getProjectId())) {
+                queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_PROJECT_ID, queryShieldManageDTO.getProjectId());
+            }
+
+        }
+
+        return list(queryWrapper);
+    }
 }

+ 133 - 0
src/main/java/com/persagy/apm/common/configuration/JmsConfig.java

@@ -0,0 +1,133 @@
+//package com.persagy.apm.common.configuration;
+//
+//import com.alibaba.fastjson.JSON;
+//import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.AddProjectAlarmRuleObjRelDTO;
+//import com.persagy.apm.alarmservice.project.alarmruleobjrel.service.IProjectAlarmRuleObjRelService;
+//import com.persagy.apm.model.DmpMessage;
+//
+//import com.rabbitmq.client.Channel;
+//import lombok.extern.slf4j.Slf4j;
+//import org.checkerframework.checker.units.qual.A;
+//import org.springframework.amqp.core.*;
+//import org.springframework.amqp.rabbit.annotation.RabbitListener;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.context.annotation.Bean;
+//
+//
+///**
+// * @author: yaoll
+// * @date: 2020-10-22
+// * @verison: 1.0
+// */
+//@Slf4j
+////@Configuration
+//public class JmsConfig {
+//
+//    @Value("${persagy.dmp.exchange}")
+//    private String exchange;
+//
+//    @Value("${persagy.dmp.alarm.routingKey}")
+//    private String dmpAlarmRoutingKey;
+//
+//    @Value("${alarm.obj.routingKey}")
+//    private String alarmObjRoutingKey;
+//
+//    @Value("${persagy.dmp.rwd.routingKey}")
+//    private String rwdRoutingKey;
+//
+//    @Value("${persagy.dmp.alarm.queue}")
+//    private String alarmQueue;
+//
+//    @Autowired
+//    private IProjectAlarmRuleObjRelService projectAlarmRuleObjRelService;
+//
+////    @Value("${persagy.dmp.alarm.rwd.queue}")
+////    private String alarmRwdQueue;
+////
+////    @Bean
+////    public Queue alarmRwdQueue() {
+////        return new Queue(alarmRwdQueue, true);
+////    }
+////
+////    @Bean
+////    public Binding alarmRwdBinding() {
+////        return BindingBuilder.bind(alarmRwdQueue()).to(exchange()).with(rwdRoutingKey);
+////    }
+//
+//    /**
+//     * 报警对象队列
+//     */
+//    private final String alarmObjQueue = "alarm-obj-queue";
+//
+//    @Bean
+//    public TopicExchange exchange() {
+//        return new TopicExchange(exchange);
+//    }
+//
+//    @Bean
+//    public Queue alarmQueue() {
+//        return new Queue(alarmQueue, true);
+//    }
+//
+//    @Bean
+//    public Binding alarmBinding() {
+//        return BindingBuilder.bind(alarmQueue()).to(exchange()).with(dmpAlarmRoutingKey);
+//    }
+//
+//    @Bean
+//    public Queue alarmObjQueue() {
+//        return new Queue(alarmObjQueue, true);
+//    }
+//
+//    @Bean
+//    public Binding alarmObjBinding() {
+//        return BindingBuilder.bind(alarmObjQueue()).to(exchange()).with(alarmObjRoutingKey);
+//    }
+//
+//    @RabbitListener(queues = {alarmObjQueue})    //监听器监听指定的Queue
+//    public void process(String message, Channel channel, Message msg) throws Exception{
+//        // 手动确认消息已消费
+//        try {
+//            log.info("============================== Receive:" + message);
+//            DmpMessage dmpMessages = JSON.parseObject(message,DmpMessage.class);
+//            String mid = dmpMessages.getMid();
+//            String type = dmpMessages.getType();
+//            String projectId = dmpMessages.getProjectId();
+//            if("instanceObjectCreate".equals(type)){
+//                // TODO
+//                AddProjectAlarmRuleObjRelDTO addProjectAlarmRuleObjRelDTO = new AddProjectAlarmRuleObjRelDTO();
+//                //addProjectAlarmRuleObjRelDTO.setProjectAlarmRuleId();
+//                addProjectAlarmRuleObjRelDTO.setProjectId(projectId);
+//                addProjectAlarmRuleObjRelDTO.setEquipId(mid);
+//                addProjectAlarmRuleObjRelDTO.setOpen(1);
+//                projectAlarmRuleObjRelService.createProjectAlarmRuleObjRel(addProjectAlarmRuleObjRelDTO);
+//            }else if("instanceObjectDelete".equals(type)){
+//
+//            }
+//            channel.basicAck(msg.getMessageProperties().getDeliveryTag(), false);
+//        } catch (Exception e) {
+//            Boolean isRedeliveredFail = msg.getMessageProperties().getRedelivered();
+//            // true表示消息已经重复处理失败
+//            if (isRedeliveredFail) {
+//                // 拒绝消息,requeue=false 表示不再重新入队,如果配置了死信队列则进入死信队列
+//                log.error("重复消费消息失败,message: {}", message);
+//                channel.basicReject(msg.getMessageProperties().getDeliveryTag(), false);
+//            } else {
+//                // 如果是第一次失败则再次放入队列
+//                // requeue为是否重新回到队列,true重新入队
+//                channel.basicNack(msg.getMessageProperties().getDeliveryTag(), false, true);
+//            }
+//        }
+//    }
+//
+////    @RabbitListener(queues ="${persagy.dmp.alarm.rwd.queue}")    //监听器监听指定的Queue
+////    public void processRwdMsg(DmpMessage message, Channel channel, Message msg) {
+////        consumeMessageThreadPool.consumeMessage(message, channel, msg);
+////    }
+//
+////    @RabbitListener(queues = "${persagy.dmp.alarm.queue}")    //监听器监听指定的Queue
+////    public void processAlarmMsg(DmpMessage message, Channel channel, Message msg) {
+////        consumeMessageThreadPool.consumeMessage(message, channel, msg);
+////    }
+//}

+ 55 - 0
src/main/java/com/persagy/apm/model/DmpMessage.java

@@ -0,0 +1,55 @@
+package com.persagy.apm.model;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+
+/**
+ * @description:中台消息队列格式
+ * @author:LuoGuangyi
+ * @company:PersagyTechnologyCo.,Ltd
+ * @since:2020/10/28 002816:10
+ * @version:V1.0
+ **/
+@Data
+public class DmpMessage {
+    private String mid;
+    /**
+     *  type = alarmConfigsChange
+     *  报警消息变化
+     */
+    private String type;
+    private String groupCode;
+    private String projectId;
+    private String targetId;
+    private Integer int1;
+    private Integer int2;
+    private String str1;
+    private String str2;
+    private String sendTime;
+    private String expireTime;
+    private String appId;
+    private String userId;
+    /**
+     * 分别存放新增和修改的报警定义条目
+     * {
+     *     "createdConfigUniques": [
+     *         {
+     *             "itemCode": "报警条目编码",
+     *             "objId": "对象id"
+     *         }
+     *     ],
+     *     "deletedConfigUniques": [
+     *         {
+     *             "itemCode": "报警条目编码",
+     *             "objId": "对象id"
+     *         }
+     *     ]
+     * }
+     */
+    private JSONObject exts;
+
+    @Override
+    public String toString() {
+        return JSONObject.toJSONString(this);
+    }
+}