Sfoglia il codice sorgente

调整代码结构

lixing 3 anni fa
parent
commit
e867aafdbe
23 ha cambiato i file con 634 aggiunte e 207 eliminazioni
  1. 6 5
      pom.xml
  2. 22 0
      src/main/java/com/persagy/apm/alarmservice/common/excel/ExcelMergeDTO.java
  3. 224 0
      src/main/java/com/persagy/apm/alarmservice/common/excel/ExcelUtils.java
  4. BIN
      src/main/java/com/persagy/apm/alarmservice/common/excel/项目清单.xlsx
  5. 0 33
      src/main/java/com/persagy/apm/alarmservice/common/method/CommonMethod.java
  6. 16 0
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/controller/GroupAlarmRuleController.java
  7. 3 0
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/model/dto/PageQueryGroupAlarmRuleDTO.java
  8. 3 0
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/model/vo/GroupAlarmRuleListItemVO.java
  9. 95 56
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/service/impl/GroupAlarmRuleServiceImpl.java
  10. 11 6
      src/main/java/com/persagy/apm/alarmservice/group/calculatemethod/model/dto/CalculateMethodDTO.java
  11. 8 4
      src/main/java/com/persagy/apm/alarmservice/group/management/service/impl/GroupManagementServiceImpl.java
  12. 14 13
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/controller/AlarmConditionController.java
  13. 10 7
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/AlarmCondition.java
  14. 1 1
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/dto/AddAlarmConditionDTO.java
  15. 1 1
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/dto/UpdateAlarmConditionDTO.java
  16. 1 4
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/dto/ValidateAlarmConditionDTO.java
  17. 8 2
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/IAlarmConditionService.java
  18. 127 22
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/impl/AlarmConditionServiceImpl.java
  19. 8 3
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/IProjectAlarmRuleService.java
  20. 46 25
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/impl/ProjectAlarmRuleServiceImpl.java
  21. 19 18
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/service/impl/ProjectAlarmRuleObjRelServiceImpl.java
  22. 3 3
      src/main/resources/mapper/AlarmConditionMapper.xml
  23. 8 4
      src/main/resources/mapper/GroupAlarmRuleMapper.xml

+ 6 - 5
pom.xml

@@ -20,15 +20,16 @@
 
 <repositories>
     <repository>
-        <id>integrated</id>
-        <name>releases Repository</name>
-        <url>http://47.93.132.139:8081/nexus/content/repositories/integrated/</url>
-    </repository>
-    <repository>
         <id>persagy</id>
         <name>persagy Repository</name>
         <url>http://47.93.132.139:8081/nexus/content/repositories/persagy/</url>
     </repository>
+    <repository>
+        <id>integrated</id>
+        <name>releases Repository</name>
+        <url>http://47.93.132.139:8081/nexus/content/repositories/integrated/</url>
+    </repository>
+
 </repositories>
 
 <dependencies>

+ 22 - 0
src/main/java/com/persagy/apm/alarmservice/common/excel/ExcelMergeDTO.java

@@ -0,0 +1,22 @@
+package com.persagy.apm.alarmservice.common.excel;
+
+import lombok.Data;
+
+/**
+ * @description: 合并excelDTO
+ * @author: fenghanchao
+ * @company: Persagy Technology Co.,Ltd
+ * @since: 2021/5/14 10:59
+ * @version: V1.0
+ **/
+@Data
+public class ExcelMergeDTO {
+    /*起始行*/
+    private int startRow;
+    /*结束行*/
+    private int endRow;
+    /*起始列*/
+    private int startColumn;
+    /*结束列*/
+    private int endColumn;
+}

+ 224 - 0
src/main/java/com/persagy/apm/alarmservice/common/excel/ExcelUtils.java

@@ -0,0 +1,224 @@
+package com.persagy.apm.alarmservice.common.excel;
+
+import com.persagy.apm.alarmservice.common.util.DataUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.WorkbookUtil;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.util.CollectionUtils;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.reflect.Field;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ExcelUtils {
+
+    /***
+     * @description:导出excel
+     * @param: sheetName 页签名称
+     * @param: titleNameList 表头列表
+     * @param: titleCodeList 表头编码列表
+     * @param: dataObjectList 数据对象列表
+     * @return: void
+     * @exception:
+     * @author: fenghanchao
+     * @company: Persagy Technology Co.,Ltd
+     * @since: 11:02 2020/7/9
+     * @version: V1.0
+     */
+    public static <T> Workbook exportToExcel(String sheetName, List<String> titleNameList, List<String> titleCodeList
+            , List<T> dataObjectList) throws Exception {
+        // 根据模板,创建工作簿
+        Workbook workBook = new XSSFWorkbook();
+        String safeName = WorkbookUtil.createSafeSheetName(sheetName);
+        Sheet sheet = workBook.createSheet(safeName);
+
+        for (int columnNumber = 0; columnNumber < titleNameList.size(); columnNumber++) {
+            createCell(sheet, 0, columnNumber, titleNameList.get(columnNumber));
+        }
+        // 输出流
+        int skipNum = 1;
+        for (int rowNumber = 0; rowNumber < dataObjectList.size(); rowNumber++) {
+            T dataObject = dataObjectList.get(rowNumber);
+            for (int columnNumber = 0; columnNumber < titleCodeList.size(); columnNumber++) {
+                Field field = dataObject.getClass().getDeclaredField(titleCodeList.get(columnNumber));
+                field.setAccessible(true);
+                createCell(sheet, rowNumber + skipNum, columnNumber, field.get(dataObject));
+            }
+        }
+        return workBook;
+    }
+
+    private static void createCell(Sheet sheet, int rowNumber, int cellNumber, Object content) {
+        Row row = sheet.getRow(rowNumber);
+        if (row == null) {
+            row = sheet.createRow(rowNumber);
+        }
+        Cell cell = row.getCell(cellNumber);
+        if (cell == null) {
+            cell = row.createCell(cellNumber);
+        }
+
+        if (content == null) {
+            content = "";
+        }
+        cell.setCellValue(content.toString());
+    }
+
+    public static Workbook exportToExcel(String sheetName, int skipRows, int skipColumns, List<List<String>> rowInfoList) throws Exception {
+        Workbook workBook = new XSSFWorkbook();
+        String safeName = WorkbookUtil.createSafeSheetName(sheetName);
+        Sheet sheet = workBook.createSheet(safeName);
+        exportToExcel(sheet, skipRows, skipColumns, rowInfoList);
+        return workBook;
+    }
+
+    public static void exportToExcel(Sheet sheet, int skipRows, int skipColumns, List<List<String>> rowInfoList) throws Exception {
+        for (int rowNumber = 0; rowNumber < rowInfoList.size(); rowNumber++) {
+            for (int columnNumber = 0; columnNumber < rowInfoList.get(rowNumber).size(); columnNumber++) {
+                createCell(sheet, rowNumber + skipRows, columnNumber + skipColumns, rowInfoList.get(rowNumber).get(columnNumber));
+            }
+        }
+    }
+
+
+    public static void excelResponse(HttpServletResponse response, Workbook wb, String fileName) {
+        OutputStream out = null;
+        try {
+            out = response.getOutputStream();
+            response.setContentType("application/vnd.ms-excel");
+            response.setHeader("Content-Disposition", "attachment; filename="
+                    + URLEncoder.encode(fileName + ".xlsx", "UTF-8"));
+            wb.write(out);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                out.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * @description: 获取excel的workbook
+     * @param: filePath 示例: "config/budget/template/excel/MonthEnergyExportTemplate.xlsx"
+     * @return: org.apache.poi.ss.usermodel.Workbook
+     * @author: fenghanchao
+     * @company: Persagy Technology Co.,Ltd
+     * @since: 10:34 2021/5/14
+     * @version: V1.0
+     */
+    public static Workbook getWorkbook(String filePath) throws Exception {
+        InputStream in = ExcelUtils.class.getResourceAsStream(filePath);
+        // 读取excel模板
+        return new XSSFWorkbook(in);
+    }
+
+    /**
+     * @description: 合并一行的单元格
+     * @param: workbook
+     * @param: rowNum
+     * @param: mergeCellsList eg: [[0,1,2],[3,4],[5,6]] 合并0,1,2单元格; 3,4单元格; 5,6单元格
+     * @return: void
+     * @exception:
+     * @author: fenghanchao
+     * @company: Persagy Technology Co.,Ltd
+     * @since: 10:48 2021/5/14
+     * @version: V1.0
+     */
+    public static void mergeRowCell(Workbook workbook, List<ExcelMergeDTO> mergeDTOList) throws Exception {
+        if (CollectionUtils.isEmpty(mergeDTOList)) {
+            return;
+        }
+        Sheet sheet0 = workbook.getSheetAt(0);
+        mergeDTOList.forEach(mergeDTO -> {
+            CellRangeAddress region = new CellRangeAddress(mergeDTO.getStartRow(), mergeDTO.getEndRow(), mergeDTO.getStartColumn()
+                    , mergeDTO.getEndColumn());
+            sheet0.addMergedRegion(region);
+        });
+    }
+
+    public static List<List<String>> getExcelSheetInfo(byte[] excelByteArray, String sheetName) throws Exception {
+        InputStream in = new ByteArrayInputStream(excelByteArray);
+        Workbook workBook = WorkbookFactory.create(in);
+        // 遍历excel中的sheet
+        List<List<String>> resultInfo = new ArrayList<>();
+        Sheet sheet = workBook.getSheet(sheetName);
+        if (sheet == null) {
+            return new ArrayList<>();
+        }
+
+        int lastColumnNum = 0;
+        for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
+            Row row = sheet.getRow(rowNum);
+            if (row == null) {
+                continue;
+            }
+            if (lastColumnNum < row.getLastCellNum()) {
+                lastColumnNum = row.getLastCellNum();
+            }
+        }
+
+        for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
+            Row row = sheet.getRow(rowNum);
+            ArrayList<String> curarr = new ArrayList<>();
+            if (row == null) {
+                for (int columnNum = 0; columnNum < lastColumnNum; columnNum++) {
+                    curarr.add("");
+                }
+            } else {
+                for (int columnNum = 0; columnNum < lastColumnNum; columnNum++) {
+                    Cell cell = row.getCell(columnNum);
+                    curarr.add(getCellStringValue(cell));
+                }
+            }
+            resultInfo.add(curarr);
+        }
+        return resultInfo;
+    }
+
+    public static String getCellStringValue(Cell cell) throws Exception {
+        if (cell == null) {
+            return "";
+        }
+        String value;
+        switch (cell.getCellTypeEnum()) {
+            case STRING:
+                value = cell.getStringCellValue();
+                break;
+            case NUMERIC:
+                if (DateUtil.isCellDateFormatted(cell)) {
+                    value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cell.getDateCellValue());
+                } else {
+                    value = DataUtils.parseString(cell.getNumericCellValue());
+                }
+                break;
+            case BOOLEAN:
+                value = String.valueOf(cell.getBooleanCellValue());
+                break;
+            case BLANK:
+                value = "";
+                break;
+            case ERROR:
+                throw new Exception("can not resolve this cell! CELL_TYPE_ERROR! ");
+            case FORMULA:
+                value = cell.getCellFormula();
+                break;
+            default:
+                value = cell.getStringCellValue();
+                break;
+        }
+
+        return StringUtils.trim(value);
+    }
+}

BIN
src/main/java/com/persagy/apm/alarmservice/common/excel/项目清单.xlsx


+ 0 - 33
src/main/java/com/persagy/apm/alarmservice/common/method/CommonMethod.java

@@ -1,33 +0,0 @@
-package com.persagy.apm.alarmservice.common.method;
-
-import com.alibaba.fastjson.JSONArray;
-import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectVO;
-import org.apache.commons.io.IOUtils;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.*;
-
-/**
- * 公共方法类
- */
-public class CommonMethod {
-    /**
-     * 获取项目
-     */
-    public static List<ProjectVO> getProject() {
-        InputStream inputStream = CommonMethod.class.getClassLoader()
-                .getResourceAsStream(File.separator + "json" + File.separator + "Project.json");
-        if (inputStream == null) {
-            return null;
-        }
-        try {
-            String str = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
-            return JSONArray.parseArray(str, ProjectVO.class);
-        } catch (IOException ioe) {
-            throw new RuntimeException("json文件有误", ioe);
-        }
-    }
-}

+ 16 - 0
src/main/java/com/persagy/apm/alarmservice/group/alarmrule/controller/GroupAlarmRuleController.java

@@ -9,6 +9,7 @@ import com.persagy.apm.alarmservice.group.alarmrule.model.vo.GroupAlarmRuleItemV
 import com.persagy.apm.alarmservice.group.alarmrule.model.vo.GroupAlarmRuleListItemVO;
 import com.persagy.apm.alarmservice.group.alarmrule.service.IGroupAlarmRuleService;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.service.IProjectAlarmRuleObjRelService;
+import com.persagy.apm.alarmservice.common.excel.ExcelUtils;
 import com.persagy.apm.common.response.ApmResponseUpsertVO;
 import com.persagy.apm.common.response.CommonResult;
 import com.persagy.apm.common.response.PageList;
@@ -19,6 +20,8 @@ import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmConfigItem;
 import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmConfigServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -28,7 +31,9 @@ import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
 import javax.validation.Valid;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 集团报警规则控制层
@@ -127,5 +132,16 @@ public class GroupAlarmRuleController {
         System.out.println(query);
     }
 
+    @ApiOperation(value = "读取表格")
+    @PostMapping("/readExcel")
+    public void readExcel() throws Exception{
+        Workbook workbook = ExcelUtils.getWorkbook("/项目清单.xlsx");
+        Sheet sheet = workbook.getSheet("慧云3.0及3.1版本清单");
+        List<Map<String, String>> list = new ArrayList();
+        for (int i = 0; i < sheet.getLastRowNum(); i++) {
+
+        }
+    }
+
 }
 

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

@@ -23,6 +23,9 @@ public class PageQueryGroupAlarmRuleDTO extends PageDTO {
     
     @ApiModelProperty(value = "报警条目编码", required = true)
     private String alarmItemCode;
+
+    @ApiModelProperty(value = "报警类型名称", required = true)
+    private String alarmItemName;
     
     @ApiModelProperty(value = "报警条件id", required = true)
     private String alarmConditionId;

+ 3 - 0
src/main/java/com/persagy/apm/alarmservice/group/alarmrule/model/vo/GroupAlarmRuleListItemVO.java

@@ -23,6 +23,9 @@ public class GroupAlarmRuleListItemVO {
     
     @ApiModelProperty("报警条目编码")
     private String alarmItemCode;
+
+    @ApiModelProperty("报警条目名称")
+    private String alarmItemName;
     
     @ApiModelProperty("报警条件")
     private AlarmConditionListItemVO alarmCondition;

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

@@ -1,6 +1,6 @@
 package com.persagy.apm.alarmservice.group.alarmrule.service.impl;
 
-
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -18,16 +18,23 @@ 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.common.constant.enums.ValidEnum;
 import com.persagy.apm.common.context.AppContext;
 import com.persagy.apm.common.context.poems.PoemsContext;
 import com.persagy.apm.common.model.dto.Sort;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.AlarmCondition;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.AddAlarmConfigDTO;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.BatchAddAlarmConfigDTO;
+import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmConfigServiceImpl;
 import org.apache.commons.lang.StringUtils;
 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;
 
 /**
  * 集团报警规则(GroupAlarmRule) service层
@@ -36,34 +43,62 @@ import java.util.List;
  * @version V1.0 2021-09-08 22:35:45
  */
 @Service
-public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper, GroupAlarmRule> 
-    implements IGroupAlarmRuleService {
+public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper, GroupAlarmRule>
+        implements IGroupAlarmRuleService {
     @Autowired
     private IAlarmConditionService alarmConditionService;
     @Autowired
     private IProjectAlarmRuleService projectAlarmRuleService;
+    @Autowired
+    private AlarmConfigServiceImpl alarmConfigService;
+
     /**
-    * 创建集团报警规则
-    * @return 集团报警规则主键
-    * @author lixing
-    * @version V1.0 2021-09-08 22:35:45
-    */
+     * 创建集团报警规则
+     *
+     * @return 集团报警规则主键
+     * @author lixing
+     * @version V1.0 2021-09-08 22:35:45
+     */
     @Override
     public String createGroupAlarmRule(AddGroupAlarmRuleDTO addGroupAlarmRuleDTO) {
         //1、给某个设备分组创建集团报警
         GroupAlarmRule groupAlarmRule = ConvertGroupAlarmRuleTool.INSTANCE.convertAddDto2Entity(addGroupAlarmRuleDTO);
         AddAlarmConditionDTO alarmCondition = addGroupAlarmRuleDTO.getAlarmCondition();
-        String alarmConditionId = alarmConditionService.createAlarmCondition(alarmCondition);
+        Map<String, Object> conditionMap = alarmConditionService.createAlarmCondition(alarmCondition);
         // 设置默认值
-        groupAlarmRule.setAlarmConditionId(alarmConditionId);
+        groupAlarmRule.setAlarmConditionId((String) conditionMap.get("id"));
         setDefaultValue(groupAlarmRule);
         save(groupAlarmRule);
         //2、同步创建项目报警
-        projectAlarmRuleService.addProjectAlarmRules(addGroupAlarmRuleDTO);
+        List<AddProjectAlarmRuleObjRelDTO> addProjectAlarmRuleObjRelDTOS = projectAlarmRuleService.addProjectAlarmRules(addGroupAlarmRuleDTO);
         //3、同步创建设备报警条件
+        BatchAddAlarmConfigDTO batchAddAlarmConfigDTO = new BatchAddAlarmConfigDTO();
+        List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
+        for (AddProjectAlarmRuleObjRelDTO addProjectAlarmRuleObjRelDTO : addProjectAlarmRuleObjRelDTOS) {
+            AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
+            addAlarmConfigDTO.setObjId(addProjectAlarmRuleObjRelDTO.getEquipId());
+            addAlarmConfigDTO.setItemCode(addGroupAlarmRuleDTO.getAlarmItemCode());
+            addAlarmConfigDTO.setClassCode(addGroupAlarmRuleDTO.getClassCode());
+            addAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
+            AlarmCondition condition = new AlarmCondition();
+            condition.setTrigger((String) conditionMap.get("backend"));
+            String infoCode = (String) conditionMap.get("infoCode");
+            List<String> infoCodeList = (List<String>) JSONArray.parse(infoCode);
+            condition.setInfoCode(infoCodeList);
+            condition.setTriggerUphold(alarmCondition.getTriggerUphold());
+            condition.setRules((List<String>) conditionMap.get("conditionMap"));
+            addAlarmConfigDTO.setCondition(condition);
+            alarmConfigs.add(addAlarmConfigDTO);
+        }
+        batchAddAlarmConfigDTO.setAlarmConfigs(alarmConfigs);
+        try {
+            alarmConfigService.batchCreate(batchAddAlarmConfigDTO);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
         return groupAlarmRule.getId();
     }
-    
+
     /**
      * 如果某些字段没有赋值,使用默认的值
      *
@@ -73,16 +108,16 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
      */
     private void setDefaultValue(GroupAlarmRule groupAlarmRule) {
         groupAlarmRule.setCreator(PoemsContext.getContext().getUserId());
-        groupAlarmRule.setModifier(PoemsContext.getContext().getUserId());
     }
-    
+
     /**
-    * 集团报警规则详情
-    * @param id 主键
-    * @return 部门do类
-    * @author lixing
-    * @version V1.0 2021-09-08 22:35:45
-    */
+     * 集团报警规则详情
+     *
+     * @param id 主键
+     * @return 部门do类
+     * @author lixing
+     * @version V1.0 2021-09-08 22:35:45
+     */
     @Override
     public GroupAlarmRule queryGroupAlarmRuleDetail(String id) {
         GroupAlarmRule groupAlarmRule = getById(id);
@@ -91,12 +126,13 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
         }
         return groupAlarmRule;
     }
-    
+
     /**
-    * 更新集团报警规则
-    * @author lixing
-    * @version V1.0 2021-09-08 22:35:45
-    */
+     * 更新集团报警规则
+     *
+     * @author lixing
+     * @version V1.0 2021-09-08 22:35:45
+     */
     @Override
     public void updateGroupAlarmRule(UpdateGroupAlarmRuleDTO updateGroupAlarmRuleDTO) {
         GroupAlarmRule groupAlarmRule = getById(updateGroupAlarmRuleDTO.getId());
@@ -106,7 +142,7 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
         UpdateAlarmConditionDTO alarmCondition = updateGroupAlarmRuleDTO.getAlarmCondition();
         alarmConditionService.updateAlarmCondition(alarmCondition);
     }
-    
+
     /**
      * 校验集团报警规则是否可删除
      *
@@ -128,13 +164,14 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
 
         return groupAlarmRule;
     }
-    
+
     /**
-    * 删除集团报警规则
-    * @param id 主键
-    * @author lixing
-    * @version V1.0 2021-09-08 22:35:45
-    */
+     * 删除集团报警规则
+     *
+     * @param id 主键
+     * @author lixing
+     * @version V1.0 2021-09-08 22:35:45
+     */
     @Override
     public void deleteGroupAlarmRule(String id) {
         // 校验是否可删除
@@ -142,27 +179,28 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
         groupAlarmRule.setValid(ValidEnum.FALSE.getType());
         updateById(groupAlarmRule);
     }
-    
+
     /**
-    * 查询集团报警规则
-    * @return List<GroupAlarmRule>
-    * @author lixing
-    * @version V1.0 2021-09-08 22:35:45
-    */
+     * 查询集团报警规则
+     *
+     * @return List<GroupAlarmRule>
+     * @author lixing
+     * @version V1.0 2021-09-08 22:35:45
+     */
     @Override
     public List<GroupAlarmRule> queryGroupAlarmRuleList(QueryGroupAlarmRuleDTO queryGroupAlarmRuleDTO) {
         QueryWrapper<GroupAlarmRule> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq(GroupAlarmRule.PROP_VALID, ValidEnum.TRUE.getType());
         // 默认按创建时间倒序排序
         queryWrapper.orderBy(true, false, GroupAlarmRule.PROP_CREATIONTIME);
-        
+
         if (queryGroupAlarmRuleDTO != null) {
-                                
+
             // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryGroupAlarmRuleDTO.getGroupId())) {
                 queryWrapper.like(GroupAlarmRule.PROP_GROUP_ID, queryGroupAlarmRuleDTO.getGroupId());
             }
-                                        
+
             // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryGroupAlarmRuleDTO.getAlarmItemCode())) {
                 queryWrapper.like(GroupAlarmRule.PROP_ALARM_ITEM_CODE, queryGroupAlarmRuleDTO.getAlarmItemCode());
@@ -170,47 +208,48 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
         }
         return list(queryWrapper);
     }
-    
+
     /**
-    * 分页查询集团报警规则
-    * @return IPage<GroupAlarmRule>
-    * @author lixing
-    * @version V1.0 2021-09-08 22:35:45
-    */
+     * 分页查询集团报警规则
+     *
+     * @return IPage<GroupAlarmRule>
+     * @author lixing
+     * @version V1.0 2021-09-08 22:35:45
+     */
     @Override
     public IPage<GroupAlarmRule> pageQueryGroupAlarmRule(PageQueryGroupAlarmRuleDTO pageQueryGroupAlarmRuleDTO) {
         QueryWrapper<GroupAlarmRule> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq(GroupAlarmRule.PROP_VALID, ValidEnum.TRUE.getType());
         // 这里认为pageQueryDTO是经过校验的,肯定包含分页信息
-        IPage<GroupAlarmRule> pageParam = new Page<>(pageQueryGroupAlarmRuleDTO.getPage(), pageQueryGroupAlarmRuleDTO.getSize(),true);
+        IPage<GroupAlarmRule> pageParam = new Page<>(pageQueryGroupAlarmRuleDTO.getPage(), pageQueryGroupAlarmRuleDTO.getSize(), true);
         // 排序信息
-        if(CollectionUtils.isEmpty(pageQueryGroupAlarmRuleDTO.getOrders())){
+        if (CollectionUtils.isEmpty(pageQueryGroupAlarmRuleDTO.getOrders())) {
             // 默认按创建时间倒序排序
             queryWrapper.orderBy(true, false, GroupAlarmRule.PROP_CREATIONTIME);
-        }else {
+        } else {
             List<Sort> orders = pageQueryGroupAlarmRuleDTO.getOrders();
-            for(Sort sort: orders) {
+            for (Sort sort : orders) {
                 // 将驼峰转换为下划线格式
-                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE,sort.getColumn()));
+                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, sort.getColumn()));
                 queryWrapper.orderBy(true, sort.isAsc(), sort.getColumn());
             }
         }
-                
+
         // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryGroupAlarmRuleDTO.getGroupId())) {
             queryWrapper.like(GroupAlarmRule.PROP_GROUP_ID, pageQueryGroupAlarmRuleDTO.getGroupId());
         }
-                            
+
         // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryGroupAlarmRuleDTO.getAlarmItemCode())) {
             queryWrapper.like(GroupAlarmRule.PROP_ALARM_ITEM_CODE, pageQueryGroupAlarmRuleDTO.getAlarmItemCode());
         }
-                            
+
         // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryGroupAlarmRuleDTO.getAlarmConditionId())) {
             queryWrapper.like(GroupAlarmRule.PROP_ALARM_CONDITION_ID, pageQueryGroupAlarmRuleDTO.getAlarmConditionId());
         }
-                                    
+
         return getBaseMapper().selectPage(pageParam, queryWrapper);
     }
 }

+ 11 - 6
src/main/java/com/persagy/apm/alarmservice/group/calculatemethod/model/dto/CalculateMethodDTO.java

@@ -1,11 +1,12 @@
 package com.persagy.apm.alarmservice.group.calculatemethod.model.dto;
 
+import com.persagy.apm.alarmservice.project.alarmcondition.model.Formula;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import springfox.documentation.annotations.ApiIgnore;
 
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * @author lixing
@@ -15,19 +16,23 @@ import javax.validation.constraints.NotNull;
 @ApiModel(value = "创建计算方式入参")
 public class CalculateMethodDTO {
     @ApiModelProperty(value = "计算方式名称", required = true)
-    @NotNull(message = "操作符") // todo 更新校验规则
+    @NotNull(message = "操作符") 
     private String operator;
     
     @ApiModelProperty(value = "公式", required = true)
-    @NotNull(message = "公式不能为空") // todo 更新校验规则
-    private String formula;
+    @NotNull(message = "公式不能为空") 
+    private List<Formula> formula;
     
     @ApiModelProperty(value = "监测指标id", required = true)
-    @NotNull(message = "监测指标id不能为空") // todo 更新校验规则
+    @NotNull(message = "监测指标id不能为空") 
     private String monitorIndicatorId;
+
+    @ApiModelProperty(value = "监测指标name", required = true)
+    @NotNull(message = "监测指标name不能为空") 
+    private String monitorIndicatorName;
     
     @ApiModelProperty(value = "是否是指标默认计算方式", required = true)
-    @NotNull(message = "是否是指标默认计算方式不能为空") // todo 更新校验规则
+    @NotNull(message = "是否是指标默认计算方式不能为空") 
     private Integer isDefault;
 
     @ApiModelProperty(value = "临时存储公式")

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

@@ -4,16 +4,16 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Lists;
-import com.persagy.apm.alarmservice.group.management.model.group.ConvertGroupTool;
 import com.persagy.apm.alarmservice.group.management.model.equip.GroupManagement;
+import com.persagy.apm.alarmservice.group.management.model.equip.dto.GroupManagementDTO;
+import com.persagy.apm.alarmservice.group.management.model.equip.vo.GroupManagementVo;
+import com.persagy.apm.alarmservice.group.management.model.group.ConvertGroupTool;
 import com.persagy.apm.alarmservice.group.management.model.group.vo.GroupTreeDetailVO;
 import com.persagy.apm.alarmservice.group.management.model.group.vo.GroupTreeInfoVO;
 import com.persagy.apm.alarmservice.group.management.model.group.vo.GroupTreeVO;
 import com.persagy.apm.alarmservice.group.management.service.GroupManagementService;
 import com.persagy.apm.common.model.vo.SimpleObjVO;
 import com.persagy.apm.common.response.PageList;
-import com.persagy.apm.alarmservice.group.management.model.equip.dto.GroupManagementDTO;
-import com.persagy.apm.alarmservice.group.management.model.equip.vo.GroupManagementVo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.io.IOUtils;
@@ -36,6 +36,7 @@ import org.elasticsearch.search.builder.SearchSourceBuilder;
 import org.elasticsearch.search.sort.SortOrder;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
@@ -63,6 +64,9 @@ public class GroupManagementServiceImpl implements GroupManagementService {
     @Autowired
     private RestHighLevelClient client;
 
+    @Value("${elasticsearch.maxSearchCount}")
+    private int maxSearchCount;
+
     @Override
     public PageList<GroupManagementVo> equipsQuery(GroupManagementDTO managementDTO) {
         List<GroupManagementVo> groupManagementVoList = new ArrayList<>();
@@ -302,7 +306,7 @@ public class GroupManagementServiceImpl implements GroupManagementService {
     @Override
     public List<GroupManagementVo> getEquipList(GroupManagementDTO groupManagementDTO) {
         groupManagementDTO.setCurrent(INTEGER_ONE);
-        groupManagementDTO.setSize(5000);
+        groupManagementDTO.setSize(maxSearchCount);
         PageList<GroupManagementVo> groupManagementVoPageList = this.equipsQuery(groupManagementDTO);
         return groupManagementVoPageList.getRecords();
     }

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

@@ -1,5 +1,6 @@
 package com.persagy.apm.alarmservice.project.alarmcondition.controller;
 
+import com.persagy.apm.alarmservice.project.alarmcondition.model.Formula;
 import com.persagy.apm.alarmservice.project.alarmcondition.service.IAlarmConditionService;
 
 import com.persagy.apm.alarmservice.project.alarmcondition.model.AlarmCondition;
@@ -17,10 +18,11 @@ import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
 import javax.validation.Valid;
-import java.util.List;
+import java.util.*;
 
 /**
  * 报警条件控制层
+ *
  * @author lixing
  * @version V1.0 2021-09-08 22:30:38
  */
@@ -32,16 +34,16 @@ public class AlarmConditionController {
     @Autowired
     private IAlarmConditionService alarmConditionService;
 
-	@ApiOperation(value = "创建报警条件")
+    @ApiOperation(value = "创建报警条件")
     @ApiIgnore
-	@PostMapping("/create")
-	public CommonResult<ApmResponseUpsertVO> createAlarmCondition(
-	        @Valid @RequestBody AddAlarmConditionDTO addAlarmConditionDTO) {
-        String id = alarmConditionService.createAlarmCondition(addAlarmConditionDTO);
-        return ResultHelper.single(new ApmResponseUpsertVO(id));
-	}
-	
-	@ApiOperation(value = "报警条件详情")
+    @PostMapping("/create")
+    public CommonResult<ApmResponseUpsertVO> createAlarmCondition(
+            @Valid @RequestBody AddAlarmConditionDTO addAlarmConditionDTO) {
+        Map<String, Object> alarmCondition = alarmConditionService.createAlarmCondition(addAlarmConditionDTO);
+        return ResultHelper.single(new ApmResponseUpsertVO((String) alarmCondition.get("id")));
+    }
+
+    @ApiOperation(value = "报警条件详情")
     @ApiIgnore
     @PostMapping("/get")
     public CommonResult<AlarmConditionItemVO> queryAlarmConditionDetail(
@@ -85,11 +87,10 @@ public class AlarmConditionController {
     @PostMapping("/validate")
     public CommonResult<Boolean> validate(
             @Valid @RequestBody ValidateAlarmConditionDTO validateAlarmConditionDTO) {
-        StringBuffer calculateString = new StringBuffer();
+        List<Formula> formula = validateAlarmConditionDTO.getFrontend().getFormula();
+        return alarmConditionService.validate(formula);
 
-        return ResultHelper.success();
     }
-
     //@ApiOperation(value = "报警条件列表, 分页查询")
     //@PostMapping("/query")
     //public CommonResult<PageList<AlarmConditionListItemVO>> queryAlarmCondition(

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

@@ -2,43 +2,46 @@ package com.persagy.apm.alarmservice.project.alarmcondition.model;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.persagy.apm.alarmservice.group.calculatemethod.model.dto.CalculateMethodDTO;
+import com.persagy.apm.common.model.entity.AuditableEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import com.persagy.apm.common.model.entity.AuditableEntity;
+
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 报警条件(AlarmCondition)实体类
+ *
  * @author lixing
  * @version V1.0 2021-09-08 22:30:38
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
 @ApiModel(description = "报警条件")
-
 public class AlarmCondition extends AuditableEntity<AlarmCondition> implements Serializable {
     private static final long serialVersionUID = 268657175929005281L;
 
     @TableField(typeHandler = FastjsonTypeHandler.class)
     @ApiModelProperty("包含的参数")
-    private Object infoCodes;
+    private List<String> infoCodes;
 
     @TableField(typeHandler = FastjsonTypeHandler.class)
     @ApiModelProperty("前端展示")
-    private Object frontend;
+    private List<List<CalculateMethodDTO>> frontend;
 
     @TableField(typeHandler = FastjsonTypeHandler.class)
     @ApiModelProperty("后端使用")
     private Object backend;
-    
+
     @ApiModelProperty("触发时长")
     private Integer triggerUphold;
-    
+
     @ApiModelProperty("报警等级")
     private String alarmLevel;
-    
+
 
     public static String PROP_INFO_CODES = "info_codes";
     public static String PROP_FRONTEND = "frontend";

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

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

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

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

+ 1 - 4
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/dto/ValidateAlarmConditionDTO.java

@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * @author lixing
@@ -14,10 +15,6 @@ import javax.validation.constraints.NotNull;
 @Data
 @ApiModel(value = "报警条件合法性校验入参")
 public class ValidateAlarmConditionDTO {
-    @ApiModelProperty(value = "包含的参数", required = true)
-    @NotNull(message = "包含的参数不能为空") // todo 更新校验规则
-    private Object infoCodes;
-    
     @ApiModelProperty(value = "报警条件", required = true)
     @NotNull(message = "报警条件不能为空") // todo 更新校验规则
     private CalculateMethodDTO frontend;

+ 8 - 2
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/IAlarmConditionService.java

@@ -1,12 +1,16 @@
 package com.persagy.apm.alarmservice.project.alarmcondition.service;
 
-import java.util.List;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.persagy.apm.alarmservice.project.alarmcondition.model.AlarmCondition;
+import com.persagy.apm.alarmservice.project.alarmcondition.model.Formula;
 import com.persagy.apm.alarmservice.project.alarmcondition.model.dto.AddAlarmConditionDTO;
 import com.persagy.apm.alarmservice.project.alarmcondition.model.dto.PageQueryAlarmConditionDTO;
 import com.persagy.apm.alarmservice.project.alarmcondition.model.dto.QueryAlarmConditionDTO;
 import com.persagy.apm.alarmservice.project.alarmcondition.model.dto.UpdateAlarmConditionDTO;
+import com.persagy.apm.common.response.CommonResult;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * 报警条件(AlarmCondition) service接口
@@ -24,7 +28,7 @@ public interface IAlarmConditionService  {
     * @author lixing
     * @version V1.0 2021-09-08 22:30:38
     */
-    public String createAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO);
+    public Map<String, Object> createAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO);
     
     /**
     * 报警条件详情
@@ -73,4 +77,6 @@ public interface IAlarmConditionService  {
     * @version V1.0 2021-09-08 22:30:38
     */
     public IPage<AlarmCondition> pageQueryAlarmCondition(PageQueryAlarmConditionDTO pageQueryAlarmConditionDTO);
+
+    CommonResult<Boolean> validate(List<Formula> formulaString);
 }

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

@@ -1,7 +1,6 @@
 package com.persagy.apm.alarmservice.project.alarmcondition.service.impl;
 
 import com.alibaba.fastjson.JSON;
-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;
@@ -11,20 +10,24 @@ import com.persagy.apm.alarmservice.group.calculatemethod.model.dto.CalculateMet
 import com.persagy.apm.alarmservice.project.alarmcondition.dao.AlarmConditionMapper;
 import com.persagy.apm.alarmservice.project.alarmcondition.model.AlarmCondition;
 import com.persagy.apm.alarmservice.project.alarmcondition.model.ConvertAlarmConditionTool;
+import com.persagy.apm.alarmservice.project.alarmcondition.model.Formula;
 import com.persagy.apm.alarmservice.project.alarmcondition.model.dto.AddAlarmConditionDTO;
 import com.persagy.apm.alarmservice.project.alarmcondition.model.dto.PageQueryAlarmConditionDTO;
 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.alarmcondition.model.Formula;
 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 com.persagy.apm.common.response.CommonResult;
+import com.persagy.apm.common.utils.ResultHelper;
+import com.persagy.common.enums.ResponseCode;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.util.*;
+import java.util.regex.Pattern;
 
 /**
  * 报警条件(AlarmCondition) service层
@@ -44,44 +47,49 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
      * @version V1.0 2021-09-08 22:30:38
      */
     @Override
-    public String createAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO) {
+    public Map<String, Object> createAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO) {
         AlarmCondition alarmCondition = ConvertAlarmConditionTool.INSTANCE.convertAddDto2Entity(addAlarmConditionDTO);
         List<List<CalculateMethodDTO>> frontend = addAlarmConditionDTO.getFrontend();
         Object json = JSON.toJSON(frontend);
-        alarmCondition.setFrontend(json);
+        alarmCondition.setFrontend(frontend);
         //将前端公式转换成后台公式
-        Map<String, String> stringMap = frontend2Backend(frontend);
+        Map<String, Object> stringMap = frontend2Backend(frontend);
         alarmCondition.setBackend(stringMap.get("backend"));
-        alarmCondition.setInfoCodes(stringMap.get("infoCode"));
+        alarmCondition.setInfoCodes((List<String>) stringMap.get("infoCode"));
         // 设置默认值
         setDefaultValue(alarmCondition);
         save(alarmCondition);
-        return alarmCondition.getId();
+        stringMap.put("id",alarmCondition.getId());
+        return stringMap;
     }
 
-    private Map<String, String> frontend2Backend(List<List<CalculateMethodDTO>> frontend) {
+    private Map<String, Object> frontend2Backend(List<List<CalculateMethodDTO>> frontend) {
         StringBuffer allNotNull = new StringBuffer();
         StringBuffer allNull = new StringBuffer();
-        Set<String> infoCodesList = new HashSet<>();
+        Set<String> infoCodesSet = new HashSet<>();
+        Set<String> displayFormulaList = new HashSet<>();
         for (List<CalculateMethodDTO> calculateMethodDTOS : frontend) {
             StringBuffer notNullString = new StringBuffer();
             StringBuffer nullString = new StringBuffer();
             StringBuffer calculateString = new StringBuffer();
             for (CalculateMethodDTO calculateMethodDTO : calculateMethodDTOS) {
-                infoCodesList.add(calculateMethodDTO.getMonitorIndicatorId());
-                String formular = calculateMethodDTO.getFormula();
-                List<Formula> formulas = JSONObject.parseArray(formular, Formula.class);
+                infoCodesSet.add(calculateMethodDTO.getMonitorIndicatorId());
+                List<Formula> formulas = calculateMethodDTO.getFormula();
                 StringBuffer tempFormula = new StringBuffer();
+                StringBuffer displayFormula = new StringBuffer();
+                displayFormula.append(calculateMethodDTO.getMonitorIndicatorName()).append(calculateMethodDTO.getOperator());
                 for (Formula formula : formulas) {
                     if(formula.getValue()!=null){
                         nullString.append(formula.getValue()).append("==NaN").append(" || ");
                         notNullString.append(formula.getValue()).append("!=NaN").append(" && ");
                         tempFormula.append(formula.getValue());
-                        infoCodesList.add(formula.getValue());
+                        infoCodesSet.add(formula.getValue());
                     }else{
                         tempFormula.append(formula.getLabel());
                     }
+                    displayFormula.append(formula.getLabel());
                 }
+                displayFormulaList.add(displayFormula.toString());
                 calculateMethodDTO.setTempFormula(tempFormula.toString());
                 nullString.append(calculateMethodDTO.getMonitorIndicatorId()).append("==NaN").append(" || ");
                 notNullString.append(calculateMethodDTO.getMonitorIndicatorId()).append("!=NaN").append(" && ");
@@ -94,13 +102,17 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
             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 infoCode = JSON.toJSONString(infoCodesList);
+        //String infoCode = JSON.toJSONString(infoCodesList);
         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();
-        Map<String, String> map = new HashMap();
-        map.put("infoCode",infoCode);
+        Map<String, Object> map = new HashMap();
+        List<String> infoCodesList = new ArrayList<>();
+        infoCodesList.addAll(infoCodesSet);
+        map.put("infoCode",infoCodesList);
         map.put("backend",substring.toString());
+        map.put("displayFormula",displayFormulaList);
         return map;
     }
 
@@ -113,9 +125,6 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
      */
     private void setDefaultValue(AlarmCondition alarmCondition) {
         alarmCondition.setCreator(PoemsContext.getContext().getUserId());
-        alarmCondition.setCreationTime(new Date());
-        alarmCondition.setModifiedTime(new Date());
-        alarmCondition.setModifier(PoemsContext.getContext().getUserId());
     }
 
     /**
@@ -149,11 +158,11 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         if (updateAlarmConditionDTO.getFrontend() != null) {
             List<List<CalculateMethodDTO>> frontend = updateAlarmConditionDTO.getFrontend();
             String frontJson = JSON.toJSONString(frontend);
-            alarmCondition.setFrontend(frontJson);
+            alarmCondition.setFrontend(frontend);
             //将前端公式转换成后台公式
-            Map<String, String> stringMap = frontend2Backend(frontend);
+            Map<String, Object> stringMap = frontend2Backend(frontend);
             alarmCondition.setBackend(stringMap.get("backend"));
-            alarmCondition.setInfoCodes(stringMap.get("infoCode"));
+            alarmCondition.setInfoCodes((List<String>) stringMap.get("infoCode"));
         }
         updateById(alarmCondition);
     }
@@ -286,4 +295,100 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
 
         return getBaseMapper().selectPage(pageParam, queryWrapper);
     }
+
+    @Override
+    public CommonResult<Boolean> validate(List<Formula> formulas) {
+        StringBuffer displayFormula = new StringBuffer();
+        Set<String> infoCodesList = new HashSet<>();
+        for (Formula formula : formulas) {
+            if (formula.getValue() != null) {
+                String value = formula.getValue();
+                infoCodesList.add(value);
+                displayFormula.append(value);
+            }else {
+                displayFormula.append(formula.getLabel());
+            }
+        }
+        List<String> infoCodes = new ArrayList<>();
+        infoCodes.addAll(infoCodesList);
+        return this.validate(displayFormula.toString(), infoCodes);
+    }
+
+    /**
+     * 使用正则来校验数学公式
+     *
+     * @param expression 数学公式,包含变量
+     * @param variables  内置变量集合
+     * @return
+     */
+    public static CommonResult validate(String expression, List<String> variables) {
+//        if (variables == null || variables.isEmpty()) {
+//            return ResultHelper.failure(ResponseCode.C0134.getCode(), "内置变量为空");
+//        }
+        // 去空格
+        expression = expression.replaceAll(" ", "");
+        // 连续运算符处理
+        if (expression.split("[\\+\\-\\*\\/]{2,}").length > 1) {
+            return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,包含连续运算符");
+        }
+        if (org.apache.commons.lang3.StringUtils.contains(expression, "()")) {
+            return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,包含空括号");
+        }
+//        expression = expression.replaceAll("\\)\\(", "\\)*\\(");
+//        expression = expression.replaceAll("\\(\\-", "\\(0-");
+//        expression = expression.replaceAll("\\(\\+", "\\(0+");
+        // 校验变量
+        String[] splits = expression.split("\\+|\\-|\\*|\\/|\\(|\\)");
+        for (String split : splits) {
+            if (org.apache.commons.lang3.StringUtils.isBlank(split) || Pattern.matches("[0-9]+", split)) {
+                continue;
+            }
+            if (!variables.contains(split)) {
+                return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,包含非法变量或字符");
+            }
+        }
+        // 校验括号
+        Character preChar = null;
+        Stack<Character> stack = new Stack<>();
+        String resultExpression = expression;
+        for (int i = 0; i < expression.length(); i++) {
+            char currChar = expression.charAt(i);
+            if (i == 0) {
+                if (Pattern.matches("\\*|\\/", String.valueOf(currChar))) {
+                    return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,以错误运算符开头");
+                }
+                if (currChar == '+') {
+                    resultExpression = expression.substring(1);
+                }
+                if (currChar == '-') {
+                    resultExpression = "0" + expression;
+                }
+            }
+            if ('(' == currChar) {
+                stack.push('(');
+            } else if (')' == currChar) {
+                if (stack.size() > 0) {
+                    stack.pop();
+                } else {
+                    return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,括号不配对");
+                }
+            }
+            if (preChar != null && preChar == '(' && Pattern.matches("[\\+\\-\\*\\/]+", String.valueOf(currChar))) {
+                return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,左括号后是运算符");
+            }
+            if (preChar != null && preChar == ')' && !Pattern.matches("[\\+\\-\\*\\/]+", String.valueOf(currChar))) {
+                return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,右括号后面不是运算符");
+            }
+            if (i == expression.length() - 1) {
+                if (Pattern.matches("\\+|\\-|\\*|\\/", String.valueOf(currChar))) {
+                    return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,以运算符结尾");
+                }
+            }
+            preChar = currChar;
+        }
+        if (stack.size() > 0) {
+            return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,括号不配对");
+        }
+        return ResultHelper.success();
+    }
 }

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

@@ -5,8 +5,8 @@ import com.persagy.apm.alarmservice.project.alarmrule.model.*;
 import com.persagy.apm.alarmservice.project.alarmrule.model.dto.*;
 import java.util.List;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.AddProjectAlarmRuleObjRelDTO;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectVO;
 
 /**
  * 项目报警规则(ProjectAlarmRule) service接口
@@ -74,5 +74,10 @@ public interface IProjectAlarmRuleService  {
     */
     public IPage<ProjectAlarmRule> pageQueryProjectAlarmRule(PageQueryProjectAlarmRuleDTO pageQueryProjectAlarmRuleDTO);
 
-    void addProjectAlarmRules(AddGroupAlarmRuleDTO addGroupAlarmRuleDTO);
+    List<AddProjectAlarmRuleObjRelDTO> addProjectAlarmRules(AddGroupAlarmRuleDTO addGroupAlarmRuleDTO);
+
+    /**
+     * 获取项目
+     */
+    List<ProjectVO> getProject();
 }

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

@@ -1,36 +1,44 @@
 package com.persagy.apm.alarmservice.project.alarmrule.service.impl;
 
-import com.persagy.apm.alarmservice.project.alarmcondition.service.IAlarmConditionService;
+import com.alibaba.fastjson.JSONArray;
+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.group.alarmrule.model.GroupAlarmRule;
 import com.persagy.apm.alarmservice.group.alarmrule.model.dto.AddGroupAlarmRuleDTO;
 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.vo.GroupManagementVo;
 import com.persagy.apm.alarmservice.group.management.service.impl.GroupManagementServiceImpl;
+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.AddProjectAlarmRuleDTO;
+import com.persagy.apm.alarmservice.project.alarmrule.model.dto.PageQueryProjectAlarmRuleDTO;
+import com.persagy.apm.alarmservice.project.alarmrule.model.dto.QueryProjectAlarmRuleDTO;
+import com.persagy.apm.alarmservice.project.alarmrule.model.dto.UpdateProjectAlarmRuleDTO;
+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.alarmservice.common.util.DataUtils;
+import com.persagy.apm.common.constant.enums.ValidEnum;
 import com.persagy.apm.common.context.AppContext;
-import com.persagy.apm.alarmservice.project.alarmrule.dao.ProjectAlarmRuleMapper;
-import com.persagy.apm.alarmservice.project.alarmrule.service.IProjectAlarmRuleService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.persagy.apm.common.context.poems.PoemsContext;
-import com.persagy.apm.alarmservice.common.method.CommonMethod;
-import com.persagy.apm.alarmservice.group.management.model.equip.vo.GroupManagementVo;
+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.apache.commons.lang.StringUtils;
-import com.persagy.apm.common.constant.enums.ValidEnum;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.persagy.apm.alarmservice.project.alarmrule.model.*;
-import com.persagy.apm.alarmservice.project.alarmrule.model.dto.*;
 
+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 com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import java.util.Map;
 
 import static org.apache.commons.lang3.math.NumberUtils.INTEGER_ONE;
 
@@ -72,8 +80,8 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
             projectAlarmRule.setAlarmConditionId(conditionId);
         }else {
             //新增自定义的规则
-            String conditionId = alarmConditionService.createAlarmCondition(addProjectAlarmRuleDTO.getAlarmCondition());
-            projectAlarmRule.setAlarmConditionId(conditionId);
+            Map<String, Object> map = alarmConditionService.createAlarmCondition(addProjectAlarmRuleDTO.getAlarmCondition());
+            projectAlarmRule.setAlarmConditionId((String) map.get("id"));
         }
         //新增关联关系
         projectAlarmRuleObjRelService.createBatchRelation(addProjectAlarmRuleDTO.getAddRelationList());
@@ -93,7 +101,6 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
      */
     private void setDefaultValue(ProjectAlarmRule projectAlarmRule) {
         projectAlarmRule.setCreator(AppContext.getContext().getAccountId());
-        projectAlarmRule.setId(DataUtils.getUUID());
         projectAlarmRule.setModifiedTime(new Date());
         // todo 其他默认的属性
 
@@ -135,16 +142,16 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         projectAlarmRuleObjRelService.deleteRelation(updateProjectAlarmRuleDTO.getProjectId());
         if (belongOld > belongNew) {//集团规则->项目自定义规则
             //新增自定义的规则
-            String conditionId = alarmConditionService.createAlarmCondition(updateProjectAlarmRuleDTO.getAlarmCondition());
-            projectAlarmRule.setAlarmConditionId(conditionId);
+            Map<String, Object> map = alarmConditionService.createAlarmCondition(updateProjectAlarmRuleDTO.getAlarmCondition());
+            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());
-            String id = alarmConditionService.createAlarmCondition(updateProjectAlarmRuleDTO.getAlarmCondition());
-            projectAlarmRule.setAlarmConditionId(id);
+            Map<String, Object> map = alarmConditionService.createAlarmCondition(updateProjectAlarmRuleDTO.getAlarmCondition());
+            projectAlarmRule.setAlarmConditionId((String) map.get("id"));
         }
         //新增关联关系
         projectAlarmRuleObjRelService.createBatchRelation(updateProjectAlarmRuleDTO.getAddRelationList());
@@ -306,12 +313,12 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
     }
 
     @Override
-    public void addProjectAlarmRules(AddGroupAlarmRuleDTO addGroupAlarmRuleDTO) {
+    public List<AddProjectAlarmRuleObjRelDTO> addProjectAlarmRules(AddGroupAlarmRuleDTO addGroupAlarmRuleDTO) {
         String condition = addGroupAlarmRuleDTO.getCondition();
         String classCode = addGroupAlarmRuleDTO.getClassCode();
         List<GroupManagementVo> records = groupManagementService.getEquipList(condition,classCode);
         //查询所有项目
-        List<ProjectVO> projects = CommonMethod.getProject();
+        List<ProjectVO> projects = this.getProject();
         //遍历项目,组好对象进行插入
         List<ProjectAlarmRule> projectAlarmRuleList = new ArrayList<>();
         String alarmItemCode = addGroupAlarmRuleDTO.getAlarmItemCode();
@@ -339,8 +346,22 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         projectAlarmRuleObjRelService.createBatchRelation(addRelationList);
         saveBatch(projectAlarmRuleList);
 
+        return addRelationList;
+    }
 
 
-
+    @Override
+    public List<ProjectVO> getProject() {
+        InputStream inputStream = ProjectAlarmRuleServiceImpl.class.getClassLoader()
+                .getResourceAsStream(File.separator + "json" + File.separator + "Project.json");
+        if (inputStream == null) {
+            return null;
+        }
+        try {
+            String str = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
+            return JSONArray.parseArray(str, ProjectVO.class);
+        } catch (IOException ioe) {
+            throw new RuntimeException("json文件有误", ioe);
+        }
     }
 }

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

@@ -1,29 +1,29 @@
 package com.persagy.apm.alarmservice.project.alarmruleobjrel.service.impl;
 
-import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectVO;
-import com.persagy.apm.alarmservice.common.util.DataUtils;
-import com.persagy.apm.common.context.AppContext;
+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.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.ProjectAlarmRuleObjRel;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.*;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectVO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.service.IProjectAlarmRuleObjRelService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.persagy.apm.alarmservice.common.method.CommonMethod;
-import org.springframework.stereotype.Service;
-import org.apache.commons.lang.StringUtils;
 import com.persagy.apm.common.constant.enums.ValidEnum;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.*;
-import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.*;
+import com.persagy.apm.common.context.AppContext;
+import com.persagy.apm.common.model.dto.Sort;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.google.common.base.CaseFormat;
-import com.persagy.apm.common.model.dto.Sort;
-import org.springframework.util.CollectionUtils;
-
 /**
  * 项目报警规则与监测对象的关联(ProjectAlarmRuleObjRel) service层
  *
@@ -34,6 +34,8 @@ import org.springframework.util.CollectionUtils;
 public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmRuleObjRelMapper, ProjectAlarmRuleObjRel>
         implements IProjectAlarmRuleObjRelService {
 
+    @Autowired
+    private IProjectAlarmRuleService projectAlarmRuleService;
     /**
      * 创建项目报警规则与监测对象的关联
      *
@@ -59,7 +61,6 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
      */
     private void setDefaultValue(ProjectAlarmRuleObjRel projectAlarmRuleObjRel) {
         projectAlarmRuleObjRel.setCreator(AppContext.getContext().getAccountId());
-        projectAlarmRuleObjRel.setId(DataUtils.getUUID());
         // todo 其他默认的属性
 
     }
@@ -255,7 +256,7 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
 
     @Override
     public void deleteBatch() {
-        List<ProjectVO> project = CommonMethod.getProject();
+        List<ProjectVO> project = projectAlarmRuleService.getProject();
         List<String> list = project.stream().map(ProjectVO::getProjectId).collect(Collectors.toList());
         QueryWrapper<ProjectAlarmRuleObjRel> queryWrapper = new QueryWrapper<>();
         queryWrapper.in(ProjectAlarmRuleObjRel.PROP_PROJECT_ID, list);

+ 3 - 3
src/main/resources/mapper/AlarmConditionMapper.xml

@@ -3,9 +3,9 @@
 <mapper namespace="com.persagy.apm.alarmservice.project.alarmcondition.dao.AlarmConditionMapper">
     <resultMap id="AlarmConditionMap" type="com.persagy.apm.alarmservice.project.alarmcondition.model.AlarmCondition">
 		<result column="id" property="id" />
-		<result column="info_codes" property="infoCodes" />
-		<result column="frontend" property="frontend" />
-		<result column="backend" property="backend" />
+		<result column="info_codes" property="infoCodes" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+		<result column="frontend" property="frontend" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+		<result column="backend" property="backend" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
 		<result column="trigger_uphold" property="triggerUphold" />
 		<result column="alarm_level" property="alarmLevel" />
 		<result column="ts" property="ts" />

+ 8 - 4
src/main/resources/mapper/GroupAlarmRuleMapper.xml

@@ -10,6 +10,7 @@
         <result column="creation_time" property="creationTime"/>
         <result column="modifier" property="modifier"/>
         <result column="modified_time" property="modifiedTime"/>
+        <result column="name" property="alarmItemName"/>
         <collection property="alarmCondition"
                     ofType="com.persagy.apm.alarmservice.project.alarmcondition.model.vo.AlarmConditionListItemVO">
             <result column="cid" property="id"/>
@@ -27,6 +28,7 @@
         select a.id,
         a.group_id,
         a.alarm_item_code,
+        c.name
         a.creator,
         a.creation_time,
         a.modifier,
@@ -39,9 +41,10 @@
         b.alarm_level
         from group_alarm_rule a
         left join alarm_condition b on a.alarm_condition_id = b.id
+        left join monitor_indicator c on a.alarm_item_code = c.id
         where a.group_id = #{groupId}
-        <if test="alarmItemCode != null">
-            and a.alarm_item_code = #{alarmItemCode}
+        <if test="alarmItemName != null">
+            and c.name = #{alarmItemName}
         </if>
         order by a.creation_time
         limit #{startIndex},#{size}
@@ -50,9 +53,10 @@
         select count(*)
         from group_alarm_rule a
         left join alarm_condition b on a.alarm_condition_id = b.id
+        left join monitor_indicator c on a.alarm_item_code = c.id
         where a.group_id = #{groupId}
-        <if test="alarmItemCode != null">
-            and a.alarm_item_code = #{alarmItemCode}
+        <if test="alarmItemName != null">
+            and c.name = #{alarmItemName}
         </if>
     </select>
 </mapper>