Browse Source

Merge branch 'v1.0.0' into v1.1.0

# Conflicts:
#	src/main/resources/json/GroupTree.json
miaolijing 3 years ago
parent
commit
d6413d4d2e
44 changed files with 1688 additions and 595 deletions
  1. 1 0
      src/main/java/com/persagy/apm/alarmservice/common/constants/FeignClientNameConstants.java
  2. 54 0
      src/main/java/com/persagy/apm/alarmservice/common/enums/AlarmEffectTimeTypeEnum.java
  3. 39 0
      src/main/java/com/persagy/apm/alarmservice/dependency/rwd/client/DmpRwdClient.java
  4. 20 0
      src/main/java/com/persagy/apm/alarmservice/dependency/rwd/client/fallback/DmpRwdClientFallbackFactory.java
  5. 154 0
      src/main/java/com/persagy/apm/alarmservice/dependency/rwd/service/DmpRwdServiceImpl.java
  6. 57 5
      src/main/java/com/persagy/apm/alarmservice/group/alarmrecord/controller/AlarmRecordController.java
  7. 9 0
      src/main/java/com/persagy/apm/alarmservice/group/alarmrecord/model/ConvertAlarmRecordTool.java
  8. 44 0
      src/main/java/com/persagy/apm/alarmservice/group/alarmrecord/model/dto/DownloadAllAlarmRecordDTO.java
  9. 106 110
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/service/impl/GroupAlarmRuleServiceImpl.java
  10. 1 39
      src/main/java/com/persagy/apm/alarmservice/group/management/controller/GroupManagementController.java
  11. 1 2
      src/main/java/com/persagy/apm/alarmservice/group/management/model/equip/dto/QueryEquipDTO.java
  12. 0 15
      src/main/java/com/persagy/apm/alarmservice/group/management/model/equip/vo/EquipItem.java
  13. 11 0
      src/main/java/com/persagy/apm/alarmservice/group/management/model/group/ConvertGroupTool.java
  14. 6 20
      src/main/java/com/persagy/apm/alarmservice/group/management/service/GroupManagementService.java
  15. 94 160
      src/main/java/com/persagy/apm/alarmservice/group/management/service/impl/GroupManagementServiceImpl.java
  16. 92 0
      src/main/java/com/persagy/apm/alarmservice/group/objgroup/controller/ObjGroupController.java
  17. 15 0
      src/main/java/com/persagy/apm/alarmservice/group/objgroup/dao/ObjGroupMapper.java
  18. 73 0
      src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/ConvertObjGroupTool.java
  19. 42 0
      src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/ObjGroup.java
  20. 32 0
      src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/dto/AddObjGroupDTO.java
  21. 19 0
      src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/dto/DeleteObjGroupDTO.java
  22. 33 0
      src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/dto/PageQueryObjGroupDTO.java
  23. 27 0
      src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/dto/QueryObjGroupDTO.java
  24. 19 0
      src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/dto/QueryObjGroupDetailDTO.java
  25. 36 0
      src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/dto/UpdateObjGroupDTO.java
  26. 44 0
      src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/vo/ObjGroupItemVO.java
  27. 44 0
      src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/vo/ObjGroupListItemVO.java
  28. 75 0
      src/main/java/com/persagy/apm/alarmservice/group/objgroup/service/IObjGroupService.java
  29. 207 0
      src/main/java/com/persagy/apm/alarmservice/group/objgroup/service/impl/ObjGroupServiceImpl.java
  30. 39 7
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/AlarmCondition.java
  31. 6 9
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/dto/AddAlarmConditionDTO.java
  32. 25 29
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/impl/AlarmConditionServiceImpl.java
  33. 11 10
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/IProjectAlarmRuleService.java
  34. 129 143
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/impl/ProjectAlarmRuleServiceImpl.java
  35. 6 5
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/model/dto/UpdateAlarmItemDTO.java
  36. 14 17
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/service/impl/ProjectAlarmRuleObjRelServiceImpl.java
  37. 48 0
      src/main/java/com/persagy/apm/alarmservice/project/model/AlarmCondition.java
  38. 2 1
      src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/service/impl/ProjectMonitorIndicatorConfigServiceImpl.java
  39. 3 3
      src/main/resources/bootstrap.yml
  40. 1 1
      src/main/resources/db/init/data.sql
  41. 1 1
      src/main/resources/db/init/table.sql
  42. 26 13
      src/main/resources/mapper/AlarmConditionMapper.xml
  43. 4 5
      src/main/resources/mapper/GroupAlarmRuleMapper.xml
  44. 18 0
      src/main/resources/mapper/ObjGroupMapper.xml

+ 1 - 0
src/main/java/com/persagy/apm/alarmservice/common/constants/FeignClientNameConstants.java

@@ -9,4 +9,5 @@ package com.persagy.apm.alarmservice.common.constants;
 public class FeignClientNameConstants {
     public static final String SAAS_WEB = "ems-saas-web";
     public static final String ENERGY_EQ_RUN_DIAGNOSE = "energy-eq-run-diagnose";
+    public static final String DMP_RWD = "dmp-rwd";
 }

+ 54 - 0
src/main/java/com/persagy/apm/alarmservice/common/enums/AlarmEffectTimeTypeEnum.java

@@ -0,0 +1,54 @@
+package com.persagy.apm.alarmservice.common.enums;
+
+import com.persagy.apm.common.model.annotation.SwaggerDisplayEnum;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * 报警生效区间类型
+ *
+ * @author lixing
+ * @version V1.0 2021/9/13 10:01 上午
+ **/
+@SwaggerDisplayEnum
+@AllArgsConstructor
+public enum AlarmEffectTimeTypeEnum {
+    /**
+     * 报警生效区间类型
+     */
+    ALWAYS("always", "一直有效"),
+    PERIOD("period", "阶段");
+
+
+    @Setter
+    @Getter
+    private String type;
+    @Setter
+    @Getter
+    private String desc;
+
+    /**
+     * 根据type获取到枚举对象
+     *
+     * @param type 报告状态编码
+     * @return 报告状态枚举对象
+     * @author lixing
+     * @version V1.0 2021/5/31 4:06 下午
+     */
+    public static AlarmEffectTimeTypeEnum getByType(String type) {
+        if (StringUtils.isBlank(type)) {
+            return null;
+        }
+        AlarmEffectTimeTypeEnum[] enums = AlarmEffectTimeTypeEnum.values();
+        for (AlarmEffectTimeTypeEnum item : enums) {
+            if (type.equals(item.getType())) {
+                return item;
+            }
+        }
+        return null;
+    }
+}
+
+

+ 39 - 0
src/main/java/com/persagy/apm/alarmservice/dependency/rwd/client/DmpRwdClient.java

@@ -0,0 +1,39 @@
+package com.persagy.apm.alarmservice.dependency.rwd.client;
+
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.apm.alarmservice.common.constants.FeignClientNameConstants;
+import com.persagy.apm.alarmservice.dependency.rwd.client.fallback.DmpRwdClientFallbackFactory;
+import com.persagy.apm.energyalarmstarter.alarmdata.feign.DmpResult;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.common.UrlParamDTO;
+import feign.Headers;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.cloud.openfeign.SpringQueryMap;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+/**
+ * 物理世界feign客户端
+ *
+ * @author lixing
+ * @version V1.0 2021/3/22 2:13 下午
+ **/
+@FeignClient(name = FeignClientNameConstants.DMP_RWD, fallbackFactory = DmpRwdClientFallbackFactory.class)
+public interface DmpRwdClient {
+
+    /**
+     * 查询物理世界的对象
+     *
+     * @param urlParamDTO request params
+     * @param jsonObject request body
+     * @return 对象列表
+     * @author lixing
+     * @version V1.0 2021/5/19 3:36 下午
+     */
+    @PostMapping("/rwd/instance/object/query")
+    @Headers({"Content-Type: application/json"})
+    DmpResult<List<JSONObject>> objQuery(
+            @SpringQueryMap UrlParamDTO urlParamDTO,  @RequestBody JSONObject jsonObject);
+
+}

+ 20 - 0
src/main/java/com/persagy/apm/alarmservice/dependency/rwd/client/fallback/DmpRwdClientFallbackFactory.java

@@ -0,0 +1,20 @@
+package com.persagy.apm.alarmservice.dependency.rwd.client.fallback;
+
+import com.persagy.apm.alarmservice.dependency.rwd.client.DmpRwdClient;
+import feign.hystrix.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * feign fallback处理
+ *
+ * @author lixing
+ * @version V1.0 2021/5/19 2:21 下午
+ */
+@Component
+public class DmpRwdClientFallbackFactory implements FallbackFactory<DmpRwdClient> {
+    @Override
+    public DmpRwdClient create(Throwable throwable) {
+        System.out.println("fall back");
+        return null;
+    }
+}

+ 154 - 0
src/main/java/com/persagy/apm/alarmservice/dependency/rwd/service/DmpRwdServiceImpl.java

@@ -0,0 +1,154 @@
+package com.persagy.apm.alarmservice.dependency.rwd.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.apm.alarmservice.dependency.rwd.client.DmpRwdClient;
+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.energyalarmstarter.alarmdata.feign.DmpResult;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.common.UrlParamDTO;
+import com.persagy.common.exception.BusinessException;
+import org.apache.commons.lang3.StringUtils;
+import org.assertj.core.util.Lists;
+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;
+
+/**
+ * 报警中台物理世界service实现类
+ *
+ * @author lixing
+ * @version V1.0 2021/10/20 2:26 下午
+ **/
+@Service
+public class DmpRwdServiceImpl {
+    @Autowired
+    DmpRwdClient dmpRwdClient;
+
+    /**
+     * 获取物理世界对象详情信息
+     *
+     * @param urlParamDTO 物理世界通用查询参数
+     * @param objId 对象id
+     * @return 对象详情
+     * @exception BusinessException 未查询到对象
+     * @author lixing
+     * @version V1.0 2021/10/20 3:17 下午
+     */
+    public EquipItem getObject(UrlParamDTO urlParamDTO, String objId) {
+        if (StringUtils.isBlank(objId)) {
+            return null;
+        }
+        List<JSONObject> records = queryRwdObjByIds(urlParamDTO, Lists.newArrayList(objId));
+        JSONObject jsonObject = records.get(0);
+
+        return convert2EquipItem(jsonObject);
+    }
+
+    /**
+     * 根据对象id列表查询物理世界对象列表
+     *
+     * @param urlParamDTO 物理世界通用查询参数
+     * @param objIdList 对象id列表
+     * @return 物理世界对象列表
+     * @exception
+     * @author lixing
+     * @version V1.0 2021/10/20 4:38 下午
+     */
+    private List<JSONObject> queryRwdObjByIds(UrlParamDTO urlParamDTO, List<String> objIdList) {
+        JSONObject queryObject = new JSONObject();
+        JSONObject criteria = new JSONObject();
+        criteria.put("id", objIdList);
+        queryObject.put("criteria", criteria);
+        DmpResult<List<JSONObject>> pageListCommonResult = dmpRwdClient.objQuery(urlParamDTO, queryObject);
+        if (pageListCommonResult.getData() == null) {
+            throw new BusinessException("物理世界中未获取到要查询的对象,id:" + objIdList);
+        }
+        List<JSONObject> records = pageListCommonResult.getData();
+        if (CollectionUtils.isEmpty(records)) {
+            throw new BusinessException("物理世界中未获取到要查询的对象,id:" + objIdList);
+        }
+        return records;
+    }
+
+    /**
+     * 物理世界的对象信息转换为EquipItem对象
+     *
+     * @param jsonObject 物理世界的对象信息
+     * @return EquipItem对象
+     * @author lixing
+     * @version V1.0 2021/10/20 3:19 下午
+     */
+    private EquipItem convert2EquipItem(JSONObject jsonObject) {
+        EquipItem equipItem = new EquipItem();
+        equipItem.setId(jsonObject.getString("id"));
+        equipItem.setClassCode(jsonObject.getString("classCode"));
+        equipItem.setLocalName(jsonObject.getString("localName"));
+        equipItem.setInfos(jsonObject.toJSONString());
+        return equipItem;
+    }
+
+    /**
+     * 获取物理世界对象详情信息
+     *
+     * @param urlParamDTO 物理世界通用查询参数
+     * @param objIds 对象id列表
+     * @return 物理世界对象详情列表
+     * @author lixing
+     * @version V1.0 2021/10/20 3:17 下午
+     */
+    public List<EquipItem> queryObjListByIds(UrlParamDTO urlParamDTO, List<String> objIds) {
+        if (CollectionUtils.isEmpty(objIds)) {
+            return new ArrayList<>();
+        }
+        List<JSONObject> records = queryRwdObjByIds(urlParamDTO, objIds);
+        if (records == null) {
+            return new ArrayList<>();
+        }
+        return records.stream().map(this::convert2EquipItem).collect(Collectors.toList());
+    }
+
+    /**
+     * 获取物理世界对象详情信息
+     *
+     * @param urlParamDTO 物理世界通用查询参数
+     * @param queryEquipDTO 查询条件
+     * @return 物理世界对象详情列表
+     * @author lixing
+     * @version V1.0 2021/10/20 3:17 下午
+     */
+    public List<EquipItem> queryObjList(UrlParamDTO urlParamDTO, QueryEquipDTO queryEquipDTO) {
+        JSONObject queryObject = new JSONObject();
+        JSONObject criteria = new JSONObject();
+        String condition = queryEquipDTO.getCondition();
+        if (StringUtils.isNotBlank(condition)) {
+            condition = "{" + condition + "}";
+            criteria = JSONObject.parseObject(condition);
+        }
+        if (StringUtils.isNotBlank(queryEquipDTO.getClassCode())) {
+            criteria.put("classCode", queryEquipDTO.getClassCode());
+        }
+
+        /* 设备名称模糊查询 */
+        if (StringUtils.isNotBlank(queryEquipDTO.getLocalName())) {
+            JSONObject localNameObj = new JSONObject();
+            localNameObj.put("$like", queryEquipDTO.getLocalName());
+            criteria.put("localName", localNameObj);
+        }
+
+        queryObject.put("criteria", criteria);
+        DmpResult<List<JSONObject>> pageListCommonResult = dmpRwdClient.objQuery(urlParamDTO, queryObject);
+
+        if (pageListCommonResult.getData() == null) {
+            return new ArrayList<>();
+        }
+        List<JSONObject> records = pageListCommonResult.getData();
+        if (CollectionUtils.isEmpty(records)) {
+            return new ArrayList<>();
+        }
+        return records.stream().map(this::convert2EquipItem).collect(Collectors.toList());
+    }
+}

+ 57 - 5
src/main/java/com/persagy/apm/alarmservice/group/alarmrecord/controller/AlarmRecordController.java

@@ -283,6 +283,40 @@ public class AlarmRecordController {
         return ResultHelper.single(alarmRecordItemVO);
     }
 
+    @ApiOperation(value = "下载全部记录")
+    @PostMapping("/download_all")
+    public void downloadAllAlarmRecord(
+            @Valid @RequestBody DownloadAllAlarmRecordDTO downloadAllAlarmRecordDTO,
+            HttpServletResponse response, HttpServletRequest request) throws Exception {
+        String listType = downloadAllAlarmRecordDTO.getListType();
+        PageQueryAlarmRecordDTO pageQueryAlarmRecordDTO = ConvertAlarmRecordTool.INSTANCE.convert2PageQueryAlarmRecordDTO(downloadAllAlarmRecordDTO);
+        // 去掉分页条件
+        pageQueryAlarmRecordDTO.setSize(Integer.MAX_VALUE);
+        CommonResult<PageList<AlarmRecordListItem>> result = null;
+        if (listType.equals(EnumAlarmListType.CURRENT.getType())) {
+            result = queryCurrentAlarmRecord(pageQueryAlarmRecordDTO);
+        }
+        if (listType.equals(EnumAlarmListType.HISTORY.getType())) {
+            result = queryHistoryAlarmRecord(pageQueryAlarmRecordDTO);
+        }
+        if (listType.equals(EnumAlarmListType.IGNORE.getType())) {
+            result = queryIgnoredAlarmRecord(pageQueryAlarmRecordDTO);
+        }
+
+        List<AlarmRecordListItem> alarmRecordItemList = new ArrayList<>();
+        if (result != null) {
+            alarmRecordItemList = result.getContent().getRecords();
+        }
+
+        List<AlarmRecordItemVO> alarmRecordItemVOList = ConvertAlarmRecordTool.INSTANCE.
+                convert2AlarmRecordItemVOList(alarmRecordItemList);
+        EnumAlarmListType enumAlarmListType = EnumAlarmListType.getByType(listType);
+        if (enumAlarmListType == null) {
+            throw new IllegalArgumentException("列表类型传值错误");
+        }
+        downloadRecordList(response, enumAlarmListType, alarmRecordItemVOList);
+    }
+
     @ApiOperation(value = "下载")
     @PostMapping("/download")
     public void downloadAlarmRecord(
@@ -298,7 +332,27 @@ public class AlarmRecordController {
         }
         // 获取报警详情列表
         List<AlarmRecordItem> alarmRecordItemList = alarmRecordWrapper.getAlarmRecordList(recordIdList);
+        List<AlarmRecordItemVO> alarmRecordItemVOList = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(alarmRecordItemList)) {
+            for (AlarmRecordItem alarmRecord : alarmRecordItemList) {
+                alarmRecordItemVOList.add(alarmRecordWrapper.convert2AlarmRecordItemVO(alarmRecord));
+            }
+        }
+        downloadRecordList(response, enumAlarmListType, alarmRecordItemVOList);
+    }
 
+    /**
+     * 下载报警记录列表
+     *
+     * @param response            response对象
+     * @param enumAlarmListType   列表类型
+     * @param alarmRecordItemList 要下载的列表
+     * @author lixing
+     * @version V1.0 2021/10/19 7:22 下午
+     */
+    private void downloadRecordList(
+            HttpServletResponse response, EnumAlarmListType enumAlarmListType,
+            List<AlarmRecordItemVO> alarmRecordItemVOList) throws Exception {
         // 创建Workbook
         XSSFWorkbook wb = new XSSFWorkbook();
         XSSFSheet overViewSheet = wb.createSheet();
@@ -307,11 +361,7 @@ public class AlarmRecordController {
         // 处理表头
         alarmRecordWrapper.handleExcelTitle(enumAlarmListType, overViewSheet, wb);
 
-        if (!CollectionUtils.isEmpty(alarmRecordItemList) && alarmRecordItemList.size() > 0) {
-            List<AlarmRecordItemVO> alarmRecordItemVOList = new ArrayList<>();
-            for (AlarmRecordItem alarmRecord : alarmRecordItemList) {
-                alarmRecordItemVOList.add(alarmRecordWrapper.convert2AlarmRecordItemVO(alarmRecord));
-            }
+        if (!CollectionUtils.isEmpty(alarmRecordItemVOList)) {
             // 能耗概览Sheet数据填充
             alarmRecordWrapper.fillDataTable(enumAlarmListType, overViewSheet, alarmRecordItemVOList);
         }
@@ -334,5 +384,7 @@ public class AlarmRecordController {
             e.printStackTrace();
         }
     }
+
+
 }
 

+ 9 - 0
src/main/java/com/persagy/apm/alarmservice/group/alarmrecord/model/ConvertAlarmRecordTool.java

@@ -1,6 +1,9 @@
 package com.persagy.apm.alarmservice.group.alarmrecord.model;
 
+import com.persagy.apm.alarmservice.group.alarmrecord.model.dto.DownloadAllAlarmRecordDTO;
 import com.persagy.apm.alarmservice.group.alarmrecord.model.dto.PageQueryAlarmRecordDTO;
+import com.persagy.apm.alarmservice.group.alarmrecord.model.vo.AlarmRecordItemVO;
+import com.persagy.apm.alarmservice.group.alarmrecord.model.vo.AlarmRecordListItem;
 import com.persagy.apm.common.model.dto.Sort;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmrecord.QueryAlarmRecordDTO;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.common.OrderDTO;
@@ -33,4 +36,10 @@ public interface ConvertAlarmRecordTool {
     OrderDTO convert2OrderDTO(Sort sort);
 
     List<OrderDTO> convert2OrderDTOList(List<Sort> sortList);
+
+    PageQueryAlarmRecordDTO convert2PageQueryAlarmRecordDTO(DownloadAllAlarmRecordDTO downloadAllAlarmRecordDTO);
+
+    AlarmRecordItemVO convert2AlarmRecordItemVO(AlarmRecordListItem alarmRecordListItem);
+
+    List<AlarmRecordItemVO> convert2AlarmRecordItemVOList(List<AlarmRecordListItem> alarmRecordListItemList);
 }

+ 44 - 0
src/main/java/com/persagy/apm/alarmservice/group/alarmrecord/model/dto/DownloadAllAlarmRecordDTO.java

@@ -0,0 +1,44 @@
+package com.persagy.apm.alarmservice.group.alarmrecord.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 下载列表中所有报警记录DTO
+ *
+ * @author lixing
+ * @version V1.0 2021/9/11 2:31 下午
+ **/
+@Data
+@ApiModel
+public class DownloadAllAlarmRecordDTO {
+    @ApiModelProperty(value = "列表类型", required = true,
+            notes = "com.persagy.apm.alarmservice.group.alarmrecord.enums.EnumAlarmListType")
+    private String listType;
+    @ApiModelProperty(value = "报警开始时间")
+    private Date triggerStartTime;
+    @ApiModelProperty(value = "报警结束时间")
+    private Date triggerEndTime;
+    @ApiModelProperty(value = "分组id")
+    private List<String> groupId;
+    @ApiModelProperty(value = "报警类型编码")
+    private List<String> alarmItemCode;
+    @ApiModelProperty(value = "报警状态")
+    private List<String> alarmState;
+    @ApiModelProperty(value = "报警对象名称(模糊查询)")
+    private String objName;
+    @ApiModelProperty(value = "报警等级")
+    private List<String> alarmLevel;
+    @ApiModelProperty(value = "报警处理状态")
+    private List<String> alarmTreatState;
+    @ApiModelProperty(value = "报警处理方式")
+    private List<String> alarmTreatMode;
+    @ApiModelProperty(value = "报警系统")
+    private List<String> category;
+    @ApiModelProperty(value = "项目id")
+    private List<String> projectIds;
+}

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

@@ -96,61 +96,58 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
         save(groupAlarmRule);
         //2、同步创建项目报警
         projectAlarmRuleService.addProjectAlarmRules(addGroupAlarmRuleDTO);
-        List<ProjectVO> projects = projectAlarmRuleService.getProject();
-        if (projects.size() == 0) {
-            throw new Exception("获取项目为空");
-        }
-        //3、同步创建设备报警条件
-        List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
-        String condition = addGroupAlarmRuleDTO.getCondition();
-        String classCode = addGroupAlarmRuleDTO.getClassCode();
-        for (ProjectVO project : projects) {
-            QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
-            String projectId = "Pj" + project.getProjectId();
-            queryEquipDTO.setProjectId(projectId);
-            queryEquipDTO.setClassCode(classCode);
-            queryEquipDTO.setCondition(condition);
-            List<EquipItem> record = groupManagementService.getEquipList(queryEquipDTO);
-//            if (record.size() == 0) {
-//                throw new Exception("获取设备详细信息为空");
+        // 勿删,后续有可能恢复 lixing
+//        List<ProjectVO> projects = projectAlarmRuleService.getProject();
+//        if (projects.size() == 0) {
+//            throw new Exception("获取项目为空");
+//        }
+//        //3、同步创建设备报警条件
+//        List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
+//        String condition = addGroupAlarmRuleDTO.getCondition();
+//        String classCode = addGroupAlarmRuleDTO.getClassCode();
+//        for (ProjectVO project : projects) {
+//            QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
+//            queryEquipDTO.setProjectId(projectId);
+//            queryEquipDTO.setClassCode(classCode);
+//            queryEquipDTO.setCondition(condition);
+//            List<EquipItem> record = groupManagementService.getEquipList(queryEquipDTO);
+//            for (EquipItem rec : record) {
+//                AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
+//                String equipId = rec.getId();
+//                addAlarmConfigDTO.setObjId(equipId);
+//                addAlarmConfigDTO.setItemCode(addGroupAlarmRuleDTO.getAlarmItemCode());
+//                addAlarmConfigDTO.setClassCode(addGroupAlarmRuleDTO.getClassCode());
+//                addAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
+//                addAlarmConfigDTO.setCategory("Eqdx");
+//                addAlarmConfigDTO.setOpen(1);
+//                AlarmCondition cond = new AlarmCondition();
+//                List<String> infoCodeList = (List<String>) conditionMap.get("infoCode");
+//                List<String> infoCodeNew = new ArrayList<>();
+//                for (String infoCode : infoCodeList) {
+//                    String replacement = equipId + "_" + infoCode;
+//                    infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
+//                }
+//                cond.setInfoCode(infoCodeNew);
+//                String backend = (String) conditionMap.get("backend");
+//                for (String infoCode : infoCodeList) {
+//                    String replacement = equipId + "_" + infoCode;
+//                    backend = backend.replaceAll(infoCode, replacement);
+//                }
+//                cond.setEnd("!" + backend);
+//                cond.setEndUphold(0);
+//                cond.setTrigger(backend);
+//                cond.setTriggerUphold(alarmCondition.getTriggerUphold() * 60);
+//                cond.setRules((List<String>) conditionMap.get("displayFormula"));
+//                JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmCondition.getFrontend()));
+//                cond.setConfigs(configs);
+//                AlarmEffectTime effectTime = new AlarmEffectTime();
+//                effectTime.setType("always");
+//                cond.setEffectTime(effectTime);
+//                addAlarmConfigDTO.setCondition(cond);
+//                alarmConfigs.add(addAlarmConfigDTO);
 //            }
-            for (EquipItem rec : record) {
-                AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
-                String equipId = rec.getId();
-                addAlarmConfigDTO.setObjId(equipId);
-                addAlarmConfigDTO.setItemCode(addGroupAlarmRuleDTO.getAlarmItemCode());
-                addAlarmConfigDTO.setClassCode(addGroupAlarmRuleDTO.getClassCode());
-                addAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
-                addAlarmConfigDTO.setCategory("Eqdx");
-                addAlarmConfigDTO.setOpen(1);
-                AlarmCondition cond = new AlarmCondition();
-                List<String> infoCodeList = (List<String>) conditionMap.get("infoCode");
-                List<String> infoCodeNew = new ArrayList<>();
-                for (String infoCode : infoCodeList) {
-                    String replacement = equipId + "_" + infoCode;
-                    infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
-                }
-                cond.setInfoCode(infoCodeNew);
-                String backend = (String) conditionMap.get("backend");
-                for (String infoCode : infoCodeList) {
-                    String replacement = equipId + "_" + infoCode;
-                    backend = backend.replaceAll(infoCode, replacement);
-                }
-                cond.setEnd("!" + backend);
-                cond.setEndUphold(0);
-                cond.setTrigger(backend);
-                cond.setTriggerUphold(alarmCondition.getTriggerUphold() * 60);
-                cond.setRules((List<String>) conditionMap.get("displayFormula"));
-                JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmCondition.getFrontend()));
-                cond.setConfigs(configs);
-                AlarmEffectTime effectTime = new AlarmEffectTime();
-                effectTime.setType("always");
-                cond.setEffectTime(effectTime);
-                addAlarmConfigDTO.setCondition(cond);
-                alarmConfigs.add(addAlarmConfigDTO);
-            }
-            projectAlarmRuleService.sendBatchCreateAlarmConfigMsg(alarmConfigs, projectId);
-        }
+//            projectAlarmRuleService.sendBatchCreateAlarmConfigMsg(alarmConfigs, projectId);
+//        }
         return groupAlarmRule.getId();
     }
 
@@ -203,61 +200,61 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
         UpdateAlarmConditionDTO alarmCondition = updateGroupAlarmRuleDTO.getAlarmCondition();
         Map<String, Object> conditionMap = alarmConditionService.frontend2Backend(alarmCondition.getFrontend());
         alarmConditionService.updateById(conditionMap, alarmCondition);
-        //删除中台设备的报警条件
-        String condition = updateGroupAlarmRuleDTO.getCondition();
-        String classCode = updateGroupAlarmRuleDTO.getClassCode();
-        String alarmItemCode = updateGroupAlarmRuleDTO.getAlarmItemCode();
-        deleteEquipCondition(condition,classCode, alarmItemCode);
-
-        //新增中台设备的报警条件
-        //查询所有设备
-        List<ProjectVO> projects = projectAlarmRuleService.getProject();
-        for (ProjectVO project : projects) {
-            List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
-            QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
-            String projectId = "Pj" + project.getProjectId();
-            queryEquipDTO.setProjectId(projectId);
-            queryEquipDTO.setClassCode(classCode);
-            queryEquipDTO.setCondition(condition);
-            List<EquipItem> records = groupManagementService.getEquipList(queryEquipDTO);
-            for (EquipItem record : records) {
-                AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
-                String equipId = record.getId();
-                addAlarmConfigDTO.setObjId(equipId);
-                addAlarmConfigDTO.setItemCode(alarmItemCode);
-                addAlarmConfigDTO.setClassCode(classCode);
-                addAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
-                addAlarmConfigDTO.setCategory("Eqdx");
-                addAlarmConfigDTO.setOpen(1);
-                AlarmCondition equipCondition = new AlarmCondition();
-                List<String> infoCodeList = (List<String>) conditionMap.get("infoCode");
-                List<String> infoCodeNew = new ArrayList<>();
-                for (String infoCode : infoCodeList) {
-                    String replacement = equipId + "_" + infoCode;
-                    infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
-                }
-                equipCondition.setInfoCode(infoCodeNew);
-                String backend = (String) conditionMap.get("backend");
-                for (String infoCode : infoCodeList) {
-                    String replacement = equipId + "_" + infoCode;
-                    backend = backend.replaceAll(infoCode, replacement);
-                }
-                equipCondition.setEnd("!" + backend);
-                equipCondition.setEndUphold(0);
-                equipCondition.setTrigger(backend);
-                equipCondition.setTriggerUphold(alarmCondition.getTriggerUphold() * 60);
-                equipCondition.setRules((List<String>) conditionMap.get("displayFormula"));
-                JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmCondition.getFrontend()));
-                equipCondition.setConfigs(configs);
-                AlarmEffectTime effectTime = new AlarmEffectTime();
-                effectTime.setType("always");
-                equipCondition.setEffectTime(effectTime);
-                addAlarmConfigDTO.setCondition(equipCondition);
-                alarmConfigs.add(addAlarmConfigDTO);
-            }
-
-            projectAlarmRuleService.sendBatchCreateAlarmConfigMsg(alarmConfigs, projectId);
-        }
+        // 勿删,后续可能启用 lixing
+//        //删除中台设备的报警条件
+//        String condition = updateGroupAlarmRuleDTO.getCondition();
+//        String classCode = updateGroupAlarmRuleDTO.getClassCode();
+//        String alarmItemCode = updateGroupAlarmRuleDTO.getAlarmItemCode();
+//        deleteEquipCondition(condition,classCode, alarmItemCode);
+//
+//        //新增中台设备的报警条件
+//        //查询所有设备
+//        List<ProjectVO> projects = projectAlarmRuleService.getProject();
+//        for (ProjectVO project : projects) {
+//            List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
+//            QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
+//            queryEquipDTO.setProjectId(project.getProjectId());
+//            queryEquipDTO.setClassCode(classCode);
+//            queryEquipDTO.setCondition(condition);
+//            List<EquipItem> records = groupManagementService.getEquipList(queryEquipDTO);
+//            for (EquipItem record : records) {
+//                AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
+//                String equipId = record.getId();
+//                addAlarmConfigDTO.setObjId(equipId);
+//                addAlarmConfigDTO.setItemCode(alarmItemCode);
+//                addAlarmConfigDTO.setClassCode(classCode);
+//                addAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
+//                addAlarmConfigDTO.setCategory("Eqdx");
+//                addAlarmConfigDTO.setOpen(1);
+//                AlarmCondition equipCondition = new AlarmCondition();
+//                List<String> infoCodeList = (List<String>) conditionMap.get("infoCode");
+//                List<String> infoCodeNew = new ArrayList<>();
+//                for (String infoCode : infoCodeList) {
+//                    String replacement = equipId + "_" + infoCode;
+//                    infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
+//                }
+//                equipCondition.setInfoCode(infoCodeNew);
+//                String backend = (String) conditionMap.get("backend");
+//                for (String infoCode : infoCodeList) {
+//                    String replacement = equipId + "_" + infoCode;
+//                    backend = backend.replaceAll(infoCode, replacement);
+//                }
+//                equipCondition.setEnd("!" + backend);
+//                equipCondition.setEndUphold(0);
+//                equipCondition.setTrigger(backend);
+//                equipCondition.setTriggerUphold(alarmCondition.getTriggerUphold() * 60);
+//                equipCondition.setRules((List<String>) conditionMap.get("displayFormula"));
+//                JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmCondition.getFrontend()));
+//                equipCondition.setConfigs(configs);
+//                AlarmEffectTime effectTime = new AlarmEffectTime();
+//                effectTime.setType("always");
+//                equipCondition.setEffectTime(effectTime);
+//                addAlarmConfigDTO.setCondition(equipCondition);
+//                alarmConfigs.add(addAlarmConfigDTO);
+//            }
+//
+//            projectAlarmRuleService.sendBatchCreateAlarmConfigMsg(alarmConfigs, projectId);
+//        }
     }
 
     /**
@@ -452,7 +449,6 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
         List<EquipItem> records = new ArrayList<>();
         for (ProjectVO project : projects) {
             QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
-            queryEquipDTO.setProjectId("Pj" + project.getProjectId());
             queryEquipDTO.setClassCode(classCode);
             queryEquipDTO.setCondition(condition);
             List<EquipItem> record = groupManagementService.getEquipList(queryEquipDTO);

+ 1 - 39
src/main/java/com/persagy/apm/alarmservice/group/management/controller/GroupManagementController.java

@@ -1,27 +1,19 @@
 package com.persagy.apm.alarmservice.group.management.controller;
 
-import com.persagy.apm.alarmservice.group.management.model.group.vo.GroupInfoVO;
 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.response.CommonResult;
-import com.persagy.apm.common.response.PageList;
 import com.persagy.apm.common.utils.ResultHelper;
-import com.persagy.apm.alarmservice.group.management.model.equip.dto.EquipIdDTO;
-import com.persagy.apm.alarmservice.group.management.model.equip.dto.QueryEquipDTO;
-import com.persagy.apm.alarmservice.group.management.model.equip.vo.EquipListItem;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import javax.validation.Valid;
 import java.util.List;
 
-import static com.persagy.apm.alarmservice.group.management.service.impl.GroupManagementServiceImpl.getGroupTree;
 
 /**
  * @author 易涛
@@ -39,36 +31,6 @@ public class GroupManagementController {
     @ApiOperation(value = "获取分组树")
     @PostMapping("/eq_groups/tree")
     public CommonResult<List<GroupTreeVO>> queryGroupTree(){
-        return ResultHelper.single(getGroupTree());
-    }
-
-//    @ApiOperation(value = "获取分组信息")
-//    @PostMapping("/eq_groups/get")
-//    public CommonResult<GroupInfoVO> queryTreeById(@Valid @RequestBody EquipIdDTO equipIdDTO){
-//        return ResultHelper.single(managementService.getGroup(equipIdDTO.getId()));
-//    }
-//
-//    @ApiOperation(value = "分组条件(设备类+查询条件)+项目 获取设备  加上分页和根据设备名称查询")
-//    @PostMapping("/equips/query")
-//    public CommonResult<PageList<EquipListItem>> equipsQuery(@Valid @RequestBody QueryEquipDTO managementDTO){
-//        PageList<EquipListItem> pageList = managementService.equipsQuery(managementDTO);
-//        return ResultHelper.multi(pageList.getRecords(),pageList.getTotal());
-//    }
-//
-//    @ApiOperation(value = "获取设备名称")
-//    @PostMapping("/equips/get")
-//    public CommonResult<EquipListItem> equipsQuery(@Valid @RequestBody EquipIdDTO equipIdDTO) {
-//        return ResultHelper.single(managementService.equipsGet(equipIdDTO.getId()));
-//    }
-
-//    @ApiOperation(value = "获取分组名称")
-//    @PostMapping("/equipsGroup/query")
-//    public CommonResult<List<GroupTreeInfoVO>> equipsGroupQuery(@Valid @RequestBody EquipIdListDTO equipIdListDTO){
-//        return ResultHelper.single(managementService.equipsGroupQuery(equipIdListDTO.getEquipIdList())) ;
-//    }
-
-    @Scheduled(cron = "0 0 * * * ?")
-    public void batchDelete(){
-       managementService.batchDelete();
+        return ResultHelper.single(managementService.getGroupTree());
     }
 }

+ 1 - 2
src/main/java/com/persagy/apm/alarmservice/group/management/model/equip/dto/QueryEquipDTO.java

@@ -15,10 +15,9 @@ import javax.validation.constraints.NotNull;
  * @version 1.0
  * @date 2021/9/8 16:46
  */
-@EqualsAndHashCode(callSuper = true)
 @ApiModel("查询设备信息")
 @Data
-public class QueryEquipDTO extends PageDTO {
+public class QueryEquipDTO {
     @ApiModelProperty("项目id")
     private String projectId;
 

+ 0 - 15
src/main/java/com/persagy/apm/alarmservice/group/management/model/equip/vo/EquipItem.java

@@ -25,20 +25,5 @@ public class EquipItem {
 
     private String infos;
 
-    private String localId;
-
     private String localName;
-
-    private String name;
-
-    private String objType;
-
-    private String projectId;
-
-    private String groupCode;
-
-    private LocalDateTime updateTime;
-
-    private Long valid;
-
 }

+ 11 - 0
src/main/java/com/persagy/apm/alarmservice/group/management/model/group/ConvertGroupTool.java

@@ -2,6 +2,7 @@ package com.persagy.apm.alarmservice.group.management.model.group;
 
 import com.persagy.apm.alarmservice.group.management.model.group.vo.GroupInfoVO;
 import com.persagy.apm.alarmservice.group.management.model.group.vo.GroupTreeVO;
+import com.persagy.apm.alarmservice.group.objgroup.model.ObjGroup;
 import org.mapstruct.Mapper;
 import org.mapstruct.NullValueCheckStrategy;
 import org.mapstruct.NullValueMappingStrategy;
@@ -27,4 +28,14 @@ public interface ConvertGroupTool {
      * @version V1.0 2021/9/19 1:25 下午
      */
     GroupInfoVO convert2DetailDTO(GroupTreeVO groupTreeVO);
+
+    /**
+     * 分组对象转换为分组树节点
+     *
+     * @param objGroup 分组对象
+     * @return 分组树节点
+     * @author lixing
+     * @version V1.0 2021/10/19 2:57 下午
+     */
+    GroupTreeVO convert2GroupTreeVO(ObjGroup objGroup);
 }

+ 6 - 20
src/main/java/com/persagy/apm/alarmservice/group/management/service/GroupManagementService.java

@@ -5,6 +5,7 @@ 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.model.group.vo.EquipGroupInfoVO;
 import com.persagy.apm.alarmservice.group.management.model.group.vo.GroupInfoVO;
+import com.persagy.apm.alarmservice.group.management.model.group.vo.GroupTreeVO;
 import com.persagy.apm.common.model.vo.SimpleObjVO;
 import com.persagy.apm.common.response.PageList;
 
@@ -18,24 +19,16 @@ import java.util.Map;
  */
 public interface GroupManagementService {
     /**
-     * 分组条件(设备类+查询条件)+项目 获取设备
-     *
-     * @param queryDTO 查询条件
-     * @return 设备列表(带分页)
-     * @author 易涛
-     * @date 2021/9/8 16:54
-     */
-    PageList<EquipItem> equipsQuery(QueryEquipDTO queryDTO);
-
-    /**
      * 获取设备详情
      *
-     * @param id 设备id
+     * @param objId 设备id
+     * @param projectId 项目id
+     * @param groupCode 集团编码
      * @return 设备详细信息
      * @author 易涛
      * @date 2021/9/9 16:04
      */
-    EquipItem equipGet(String id);
+    EquipItem equipGet(String objId, String projectId, String groupCode);
 
     /**
      * 根据一组id查询设备
@@ -67,14 +60,7 @@ public interface GroupManagementService {
      */
     Map<String, SimpleObjVO> queryObjGroup(List<String> objIds);
 
-    /**
-     * 定时任务删除valid为0的数据
-     *
-     * @return void
-     * @author 易涛
-     * @date 2021/9/14 15:55
-     */
-    void batchDelete();
+    List<GroupTreeVO> getGroupTree();
 
     /**
      * 查询分组下的设备

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

@@ -1,9 +1,8 @@
 package com.persagy.apm.alarmservice.group.management.service.impl;
 
-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.dependency.rwd.service.DmpRwdServiceImpl;
 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.group.ConvertGroupTool;
@@ -11,45 +10,24 @@ import com.persagy.apm.alarmservice.group.management.model.group.vo.EquipGroupIn
 import com.persagy.apm.alarmservice.group.management.model.group.vo.GroupInfoVO;
 import com.persagy.apm.alarmservice.group.management.model.group.vo.GroupTreeVO;
 import com.persagy.apm.alarmservice.group.management.service.GroupManagementService;
+import com.persagy.apm.alarmservice.group.objgroup.model.ObjGroup;
+import com.persagy.apm.alarmservice.group.objgroup.model.dto.QueryObjGroupDTO;
+import com.persagy.apm.alarmservice.group.objgroup.service.IObjGroupService;
 import com.persagy.apm.common.context.poems.PoemsContext;
 import com.persagy.apm.common.model.vo.SimpleObjVO;
-import com.persagy.apm.common.response.PageList;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.common.UrlParamDTO;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.elasticsearch.action.get.GetRequest;
-import org.elasticsearch.action.get.GetResponse;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestHighLevelClient;
-import org.elasticsearch.index.query.BoolQueryBuilder;
-import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.index.query.TermQueryBuilder;
-import org.elasticsearch.index.reindex.BulkByScrollResponse;
-import org.elasticsearch.index.reindex.DeleteByQueryRequest;
-import org.elasticsearch.rest.RestStatus;
-import org.elasticsearch.search.SearchHit;
-import org.elasticsearch.search.SearchHits;
-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 org.springframework.util.CollectionUtils;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.persagy.apm.alarmservice.common.constants.ElasticStrConstant.INDEX_NAME;
-import static org.apache.commons.lang3.math.NumberUtils.INTEGER_ONE;
-import static org.apache.commons.lang3.math.NumberUtils.INTEGER_ZERO;
-
 /**
  * 分组管理service
  *
@@ -60,120 +38,38 @@ import static org.apache.commons.lang3.math.NumberUtils.INTEGER_ZERO;
 @Slf4j
 @Service
 public class GroupManagementServiceImpl implements GroupManagementService {
-
     @Autowired
-    private RestHighLevelClient client;
-
-    @Value("${elasticsearch.maxSearchCount}")
-    private int maxSearchCount;
-
-    @Override
-    public PageList<EquipItem> equipsQuery(QueryEquipDTO managementDTO) {
-        List<EquipItem> equipListItemList = new ArrayList<>();
-        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
-        queryBuilder.must(QueryBuilders.matchQuery("group_code", PoemsContext.getContext().getGroupCode()));
-        queryBuilder.must(QueryBuilders.matchQuery("class_code", managementDTO.getClassCode()));
-        if (StringUtils.isNotBlank(managementDTO.getCondition())) {
-            queryBuilder.must(QueryBuilders.matchPhraseQuery("infos", managementDTO.getCondition()));
-        }
-        //新增根据项目id查询设备
-        if (StringUtils.isNotEmpty(managementDTO.getProjectId())) {
-            queryBuilder.must(QueryBuilders.matchQuery("project_id", managementDTO.getProjectId()));
-        }
-        //模糊查询使用
-        if (StringUtils.isNotEmpty(managementDTO.getLocalName())) {
-            queryBuilder.must(QueryBuilders.wildcardQuery("local_name", "*" + managementDTO.getLocalName() + "*"));
-        }
-        queryBuilder.must(QueryBuilders.termQuery("valid", INTEGER_ONE));
-        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
-        sourceBuilder.query(queryBuilder);
-        sourceBuilder.from((Math.max(managementDTO.getPage(), INTEGER_ONE) - INTEGER_ONE)
-                * managementDTO.getSize());
-        sourceBuilder.size(managementDTO.getSize());
-        SearchRequest rq = new SearchRequest(INDEX_NAME);
-        rq.source(sourceBuilder);
-        try {
-            SearchResponse searchResponse = client.search(rq, RequestOptions.DEFAULT);
-            // 根据状态和数据条数验证是否返回了数据
-            if (RestStatus.OK.equals(searchResponse.status()) && searchResponse.getHits().getTotalHits().value > 0) {
-                SearchHits hits = searchResponse.getHits();
-                for (SearchHit hit : hits) {
-                    // 将 JSON 转换成对象
-                    EquipItem managementVo = JSON.parseObject(hit.getSourceAsString(), EquipItem.class);
-                    equipListItemList.add(managementVo);
-                }
-            }
-            return new PageList<>(equipListItemList, searchResponse.getHits().getTotalHits().value);
-        } catch (IOException e) {
-            throw new RuntimeException("es查询出错", e);
-        }
-    }
+    private DmpRwdServiceImpl dmpRwdService;
+    @Autowired
+    private IObjGroupService objGroupService;
 
     @Override
-    public EquipItem equipGet(String id) {
-        String equipStr = findEquipById(id);
-        if (StringUtils.isEmpty(equipStr)) {
-            throw new RuntimeException("id为" + id + "的设备不存在");
-        }
-        return JSONObject.parseObject(equipStr, EquipItem.class);
-    }
-
-    /**
-     * 根据id查询设备-常用方法
-     *
-     * @param id 设备id
-     * @author 易涛
-     * @date 2021/9/10 10:05
-     */
-    private String findEquipById(String id) {
-        GetRequest getRequest = new GetRequest(INDEX_NAME, id);
-        try {
-            GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
-            if (getResponse.isExists()) {
-                return getResponse.getSourceAsString();
-            }
-        } catch (IOException e) {
-            throw new RuntimeException("es查询出错", e);
-        }
-        return null;
+    public EquipItem equipGet(String objId, String projectId, String groupCode) {
+        UrlParamDTO urlParamDTO = new UrlParamDTO();
+        urlParamDTO.setGroupCode(groupCode);
+        urlParamDTO.setProjectId(projectId);
+        return dmpRwdService.getObject(urlParamDTO, objId);
     }
 
     /**
      * 查询设备
      *
-     * @param ids 设备id列表
+     * @param objIds 设备id列表
      * @return 设备列表
      * @author lixing
      * @version V1.0 2021/9/20 1:15 下午
      */
-    private List<EquipItem> findEquipsByIds(List<String> ids) {
-        if (CollectionUtils.isEmpty(ids) || ids.size() > 100) {
-            throw new RuntimeException("批量查询的数据过短或过长");
+    private List<EquipItem> findEquipsByIds(List<String> objIds) {
+        if (CollectionUtils.isEmpty(objIds)) {
+            throw new IllegalArgumentException("批量查询传入的ids参数为空");
         }
-        List<EquipItem> managementList = new ArrayList<>();
-        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
-        queryBuilder.must(QueryBuilders.termsQuery("id.keyword", ids));
-        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
-        sourceBuilder.query(queryBuilder);
-        sourceBuilder.from(INTEGER_ZERO);
-        sourceBuilder.size(ids.size());
-        SearchRequest rq = new SearchRequest(INDEX_NAME);
-        rq.source(sourceBuilder);
-        try {
-            SearchResponse searchResponse = client.search(rq, RequestOptions.DEFAULT);
-            // 根据状态和数据条数验证是否返回了数据
-            if (RestStatus.OK.equals(searchResponse.status()) && searchResponse.getHits().getTotalHits().value > 0) {
-                SearchHits hits = searchResponse.getHits();
-                for (SearchHit hit : hits) {
-                    // 将 JSON 转换成对象
-                    EquipItem management = JSON.parseObject(hit.getSourceAsString(), EquipItem.class);
-                    managementList.add(management);
-                }
-            }
-        } catch (IOException e) {
-            throw new RuntimeException("es查询出错", e);
+        if (objIds.size() > 100) {
+            throw new IllegalArgumentException("批量查询的参数过长(最长为100),参数ids的size为:" + objIds.size());
         }
-        return managementList;
+        UrlParamDTO urlParamDTO = UrlParamDTO.builder().
+                groupCode(PoemsContext.getContext().getGroupCode()).
+                projectId(PoemsContext.getContext().getProjectId()).build();
+        return dmpRwdService.queryObjListByIds(urlParamDTO, objIds);
     }
 
     @Override
@@ -184,7 +80,7 @@ public class GroupManagementServiceImpl implements GroupManagementService {
         Map<String, EquipItem> resultMap = new HashMap<>(ids.size());
         List<List<String>> partitions = Lists.partition(ids, 100);
         for (List<String> partition : partitions) {
-            List<EquipItem> equipsByIds = findEquipsByIds(ids);
+            List<EquipItem> equipsByIds = findEquipsByIds(partition);
             if (CollectionUtils.isEmpty(equipsByIds)) {
                 continue;
             }
@@ -279,7 +175,7 @@ public class GroupManagementServiceImpl implements GroupManagementService {
                 return equipGroupInfoVO;
             }
 
-            if (CollectionUtils.isNotEmpty(groupTreeVO.getChildren())) {
+            if (!CollectionUtils.isEmpty(groupTreeVO.getChildren())) {
                 cascadeSearchGroupInfo(groupTreeVO.getChildren(), equipGroupInfoVO, equipFuncMap);
             }
         }
@@ -289,37 +185,75 @@ public class GroupManagementServiceImpl implements GroupManagementService {
     /**
      * 获取分组树
      *
-     * @return java.util.List<com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeVO>
-     * @author 易涛
-     * @date 2021/9/8 14:44
+     * @return 分组树节点列表
+     * @author lixing
+     * @version V1.0 2021/10/19 2:40 下午
      */
-    public static List<GroupTreeVO> getGroupTree() {
-        InputStream inputStream = GroupManagementServiceImpl.class.getClassLoader()
-                .getResourceAsStream("json" + File.separator + "GroupTree.json");
-        if (inputStream == null) {
-            return null;
+    @Override
+    public List<GroupTreeVO> getGroupTree() {
+        // 从表中查询所有分组
+        QueryObjGroupDTO queryObjGroupDTO = new QueryObjGroupDTO();
+        List<ObjGroup> objGroups = objGroupService.queryObjGroupList(queryObjGroupDTO);
+
+        if (CollectionUtils.isEmpty(objGroups)) {
+            return new ArrayList<>();
         }
-        try {
-            String str = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
-            return JSONArray.parseArray(str, GroupTreeVO.class);
-        } catch (IOException ioe) {
-            throw new RuntimeException("json文件有误", ioe);
+        // 将分组列表转换为树形结构,根节点的parentId = 0;
+        Map<String, List<ObjGroup>> objGroupMap = new HashMap<>();
+        for (ObjGroup objGroup : objGroups) {
+            String parentId = objGroup.getParentId();
+            if (!objGroupMap.containsKey(parentId)) {
+                objGroupMap.put(parentId, Lists.newArrayList(objGroup));
+            } else {
+                objGroupMap.get(parentId).add(objGroup);
+            }
         }
+        return objGroupMap2Tree(objGroupMap);
     }
 
-    @Override
-    public void batchDelete() {
-        DeleteByQueryRequest request = new DeleteByQueryRequest(INDEX_NAME);
-        //逻辑删除的数据直接从index中删除掉
-        request.setQuery(new TermQueryBuilder("valid", INTEGER_ZERO));
-        //每次最多删除一万条数据,如果不加这个则处理所有的文档
-        request.setMaxDocs(10000);
-        try {
-            BulkByScrollResponse resp = client.deleteByQuery(request, RequestOptions.DEFAULT);
-            log.info("删除返回的数据为---{}", resp.toString());
-        } catch (IOException e) {
-            throw new RuntimeException("删除elasticSearch失败", e);
+    /**
+     * 将分组的map转换为树
+     *
+     * @param objGroupMap 分组的map
+     * @return 分组树节点列表
+     * @author lixing
+     * @version V1.0 2021/10/19 2:50 下午
+     */
+    private List<GroupTreeVO> objGroupMap2Tree(Map<String, List<ObjGroup>> objGroupMap) {
+        if (CollectionUtils.isEmpty(objGroupMap)) {
+            return new ArrayList<>();
         }
+        List<GroupTreeVO> result = new ArrayList<>();
+        // 根节点parentId = 0;
+        List<ObjGroup> rootObjGroups = objGroupMap.get("0");
+        rootObjGroups.forEach(objGroup -> {
+            GroupTreeVO groupTreeVO = ConvertGroupTool.INSTANCE.convert2GroupTreeVO(objGroup);
+            result.add(groupTreeVO);
+        });
+        cascadeSetChildren(objGroupMap, result);
+        return result;
+    }
+
+    /**
+     * 级联设置子节点
+     *
+     * @param objGroupMap 分组map 分组parentId -> 分组列表
+     * @param groupTreeVOList 要设置子节点的节点列表
+     * @exception
+     * @author lixing
+     * @version V1.0 2021/10/19 3:16 下午
+     */
+    private void cascadeSetChildren(Map<String, List<ObjGroup>> objGroupMap, List<GroupTreeVO> groupTreeVOList) {
+        groupTreeVOList.forEach(groupTreeVO -> {
+            if (objGroupMap.containsKey(groupTreeVO.getId())) {
+                List<ObjGroup> sonObjGroups = objGroupMap.get(groupTreeVO.getId());
+                List<GroupTreeVO> sonNodes = sonObjGroups.stream().map(
+                        ConvertGroupTool.INSTANCE::convert2GroupTreeVO
+                ).collect(Collectors.toList());
+                groupTreeVO.setChildren(sonNodes);
+                cascadeSetChildren(objGroupMap, sonNodes);
+            }
+        });
     }
 
     @Override
@@ -332,10 +266,10 @@ public class GroupManagementServiceImpl implements GroupManagementService {
 
     @Override
     public List<EquipItem> getEquipList(QueryEquipDTO queryEquipDTO) {
-        queryEquipDTO.setPage(INTEGER_ONE);
-        queryEquipDTO.setSize(maxSearchCount);
-        PageList<EquipItem> groupManagementVoPageList = this.equipsQuery(queryEquipDTO);
-        return groupManagementVoPageList.getRecords();
+        UrlParamDTO urlParamDTO = UrlParamDTO.builder().
+                groupCode(PoemsContext.getContext().getGroupCode()).
+                projectId(PoemsContext.getContext().getProjectId()).build();
+        return dmpRwdService.queryObjList(urlParamDTO, queryEquipDTO);
     }
 
     @Override
@@ -364,7 +298,7 @@ public class GroupManagementServiceImpl implements GroupManagementService {
                 BeanUtils.copyProperties(groupTreeVO, groupInfoVO);
                 return groupInfoVO;
             }
-            if (CollectionUtils.isNotEmpty(groupTreeVO.getChildren())) {
+            if (!CollectionUtils.isEmpty(groupTreeVO.getChildren())) {
                 queryById(groupTreeVO.getChildren(), groupInfoVO, id);
             }
         }

+ 92 - 0
src/main/java/com/persagy/apm/alarmservice/group/objgroup/controller/ObjGroupController.java

@@ -0,0 +1,92 @@
+package com.persagy.apm.alarmservice.group.objgroup.controller;
+
+import com.persagy.apm.alarmservice.group.objgroup.service.IObjGroupService;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.persagy.apm.alarmservice.group.objgroup.model.*;
+import com.persagy.apm.alarmservice.group.objgroup.model.vo.*;
+import com.persagy.apm.alarmservice.group.objgroup.model.dto.*;
+import com.persagy.apm.common.response.*;
+import com.persagy.apm.common.utils.ResultHelper;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 报警对象分组控制层
+ * @author lixing
+ * @version V1.0 2021-10-19 14:25:45
+ */
+@Api(tags = "报警对象分组") 
+@Validated
+@RestController
+@RequestMapping("objGroups")
+public class ObjGroupController {
+    @Autowired
+    private IObjGroupService objGroupService;
+
+	@ApiOperation(value = "创建报警对象分组")
+	@PostMapping("/create")
+	public CommonResult<ApmResponseUpsertVO> createObjGroup(
+	        @Valid @RequestBody AddObjGroupDTO addObjGroupDTO) {
+        String id = objGroupService.createObjGroup(addObjGroupDTO);
+        return ResultHelper.single(new ApmResponseUpsertVO(id));
+	}
+	
+	@ApiOperation(value = "报警对象分组详情")
+    @PostMapping("/get")
+    public CommonResult<ObjGroupItemVO> queryObjGroupDetail(
+            @Valid @RequestBody QueryObjGroupDetailDTO queryObjGroupDetailDTO) {
+        ObjGroup objGroup = objGroupService.queryObjGroupDetail(queryObjGroupDetailDTO.getId());
+        ObjGroupItemVO objGroupItemVO = ConvertObjGroupTool.INSTANCE.convert2ResponseItemDTO(objGroup);
+        return ResultHelper.single(objGroupItemVO);
+    }
+
+
+    @ApiOperation(value = "更新报警对象分组")
+    @PostMapping("/update")
+    public CommonResult<ApmResponseUpsertVO> updateObjGroup(
+            @Valid @RequestBody UpdateObjGroupDTO updateObjGroupDTO) {
+        objGroupService.updateObjGroup(updateObjGroupDTO);
+        return ResultHelper.single(new ApmResponseUpsertVO(updateObjGroupDTO.getId()));
+    }
+
+
+    @ApiOperation(value = "删除报警对象分组")
+    @PostMapping("/delete")
+    public CommonResult deleteObjGroup(
+            @RequestBody @Valid DeleteObjGroupDTO deleteObjGroupDTO) {
+        objGroupService.deleteObjGroup(deleteObjGroupDTO.getId());
+        return ResultHelper.success();
+    }
+
+
+    @ApiOperation(value = "报警对象分组列表")
+    @PostMapping("/query")
+    public CommonResult<PageList<ObjGroupListItemVO>> queryObjGroup(
+            @Valid @RequestBody QueryObjGroupDTO queryObjGroupDTO) {
+        List<ObjGroup> objGroupList = objGroupService.queryObjGroupList(queryObjGroupDTO);
+        List<ObjGroupListItemVO> resultList = ConvertObjGroupTool.INSTANCE.convert2List(objGroupList);
+        return ResultHelper.multi(resultList);
+    }
+    
+    //@ApiOperation(value = "报警对象分组列表, 分页查询")
+    //@PostMapping("/query")
+    //public CommonResult<PageList<ObjGroupListItemVO>> queryObjGroup(
+    //        @Valid @RequestBody PageQueryObjGroupDTO pageQueryObjGroupDTO) {
+    //    IPage<ObjGroup> pagedList = objGroupService.pageQueryObjGroup(pageQueryObjGroupDTO);
+    //    IPage<ObjGroupListItemVO> pagedResultList = pagedList.convert(item -> {
+    //        try {
+    //           return ConvertObjGroupTool.INSTANCE.convert2ResponseListItemDTO(item);
+    //        } catch (Exception e) {
+    //            throw new IllegalArgumentException("分页查询,ObjGroup实体类转换为列表对象发生异常", e);
+    //        }
+    //    });
+    //    return ResultHelper.multi(pagedResultList);
+    //}
+}
+

+ 15 - 0
src/main/java/com/persagy/apm/alarmservice/group/objgroup/dao/ObjGroupMapper.java

@@ -0,0 +1,15 @@
+package com.persagy.apm.alarmservice.group.objgroup.dao;
+
+import com.persagy.apm.alarmservice.group.objgroup.model.ObjGroup;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 报警对象分组(ObjGroup)dao层
+ * @author lixing
+ * @version V1.0 2021-10-19 14:25:45
+ */
+@Mapper
+public interface ObjGroupMapper extends BaseMapper<ObjGroup>{
+
+}

+ 73 - 0
src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/ConvertObjGroupTool.java

@@ -0,0 +1,73 @@
+package com.persagy.apm.alarmservice.group.objgroup.model;
+
+import org.mapstruct.*;
+import org.mapstruct.MappingTarget;
+import org.mapstruct.factory.Mappers;
+import com.persagy.apm.alarmservice.group.objgroup.model.vo.*;
+import com.persagy.apm.alarmservice.group.objgroup.model.dto.*;
+
+import java.util.List;
+
+/**
+ * 报警对象分组(ObjGroup) dto、vo、do转换工具类
+ * @author lixing
+ * @version V1.0 2021-10-19 14:25:45
+ */
+@Mapper(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT,
+        nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
+public interface ConvertObjGroupTool {
+
+    ConvertObjGroupTool INSTANCE = Mappers.getMapper(ConvertObjGroupTool.class);
+    
+    /**
+    * do转换为ResponseItemVO
+    *
+    * @param objGroup do对象
+    * @return ResponseItemVO
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    ObjGroupItemVO convert2ResponseItemDTO(ObjGroup objGroup);
+    
+    /**
+    * do转换为ResponseListItemVO
+    *
+    * @param objGroup do对象
+    * @return ResponseListItemVO
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    ObjGroupListItemVO convert2ResponseListItemDTO(ObjGroup objGroup);
+
+    /**
+    * do列表转换为ResponseListItemVO列表
+    *
+    * @param objGroupList do列表
+    * @return ResponseListItemVO列表
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    List<ObjGroupListItemVO> convert2List(List<ObjGroup> objGroupList);
+    
+    /**
+    * addDTO转换为do
+    *
+    * @param addObjGroupDTO addDTO
+    * @return 要创建的do对象 
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    ObjGroup convertAddDto2Entity(AddObjGroupDTO addObjGroupDTO);
+    
+    /**
+    * updateDTO转换为实体
+    *
+    * @param objGroup 更新前的do对象
+    * @param updateObjGroupDTO updateDTO
+    * @return 更新后的do对象
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    ObjGroup convertUpdateDto2Entity(@MappingTarget ObjGroup objGroup, UpdateObjGroupDTO updateObjGroupDTO);
+}
+

+ 42 - 0
src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/ObjGroup.java

@@ -0,0 +1,42 @@
+package com.persagy.apm.alarmservice.group.objgroup.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+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.Date;
+
+/**
+ * 报警对象分组(ObjGroup)实体类
+ * @author lixing
+ * @version V1.0 2021-10-19 14:25:45
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel(description = "报警对象分组")
+public class ObjGroup extends AuditableEntity<ObjGroup> implements Serializable {
+    private static final long serialVersionUID = 775168774894672330L;
+
+    @ApiModelProperty("分组名称")
+    private String name;
+    
+    @ApiModelProperty("设备类型")
+    private String classCode;
+    
+    @ApiModelProperty("分组条件")
+    @TableField("`condition`")
+    private String condition;
+    
+    @ApiModelProperty("父节点id")
+    private String parentId;
+    
+
+    public static String PROP_NAME = "name";
+    public static String PROP_CLASS_CODE = "class_code";
+    public static String PROP_CONDITION = "condition";
+    public static String PROP_PARENT_ID = "parent_id";
+
+}

+ 32 - 0
src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/dto/AddObjGroupDTO.java

@@ -0,0 +1,32 @@
+package com.persagy.apm.alarmservice.group.objgroup.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-10-19 14:25:45
+ */
+@Data
+@ApiModel(value = "创建报警对象分组入参")
+public class AddObjGroupDTO {
+    @ApiModelProperty(value = "分组名称", required = true)
+    @NotNull(message = "分组名称不能为空") // todo 更新校验规则
+    private String name;
+    
+    @ApiModelProperty(value = "设备类型", required = true)
+    @NotNull(message = "设备类型不能为空") // todo 更新校验规则
+    private String classCode;
+    
+    @ApiModelProperty(value = "分组条件", required = true)
+    @NotNull(message = "分组条件不能为空") // todo 更新校验规则
+    private String condition;
+    
+    @ApiModelProperty(value = "父节点id", required = true)
+    @NotNull(message = "父节点id不能为空") // todo 更新校验规则
+    private String parentid;
+    
+}

+ 19 - 0
src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/dto/DeleteObjGroupDTO.java

@@ -0,0 +1,19 @@
+package com.persagy.apm.alarmservice.group.objgroup.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-10-19 14:25:45
+ */
+@Data
+@ApiModel(value = "删除报警对象分组入参")
+public class DeleteObjGroupDTO {
+    @NotNull(message = "id不能为空")
+    @ApiModelProperty(value = "主键", required = true)
+    private String id;
+    
+}

+ 33 - 0
src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/dto/PageQueryObjGroupDTO.java

@@ -0,0 +1,33 @@
+package com.persagy.apm.alarmservice.group.objgroup.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.Date;
+import com.persagy.apm.common.model.dto.PageDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-10-19 14:25:45
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel(value = "分页查询报警对象分组入参")
+public class PageQueryObjGroupDTO extends PageDTO {
+    @ApiModelProperty(value = "主键", required = true)
+    private String id;
+    
+    @ApiModelProperty(value = "分组名称", required = true)
+    private String name;
+    
+    @ApiModelProperty(value = "设备类型", required = true)
+    private String classCode;
+    
+    @ApiModelProperty(value = "分组条件", required = true)
+    private String condition;
+    
+    @ApiModelProperty(value = "父节点id", required = true)
+    private String parentid;
+    
+}

+ 27 - 0
src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/dto/QueryObjGroupDTO.java

@@ -0,0 +1,27 @@
+package com.persagy.apm.alarmservice.group.objgroup.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-10-19 14:25:45
+ */
+@Data
+@ApiModel(value = "查询报警对象分组入参")
+public class QueryObjGroupDTO {
+    @ApiModelProperty(value = "分组名称", required = true)
+    private String name;
+    
+    @ApiModelProperty(value = "设备类型", required = true)
+    private String classCode;
+    
+    @ApiModelProperty(value = "分组条件", required = true)
+    private String condition;
+    
+    @ApiModelProperty(value = "父节点id", required = true)
+    private String parentid;
+    
+}

+ 19 - 0
src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/dto/QueryObjGroupDetailDTO.java

@@ -0,0 +1,19 @@
+package com.persagy.apm.alarmservice.group.objgroup.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-10-19 14:25:45
+ */
+@Data
+@ApiModel(value = "获取报警对象分组详情入参")
+public class QueryObjGroupDetailDTO {
+    @NotNull(message = "主键不能为空")
+    @ApiModelProperty(value = "主键", required = true)
+    private String id;
+    
+}

+ 36 - 0
src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/dto/UpdateObjGroupDTO.java

@@ -0,0 +1,36 @@
+package com.persagy.apm.alarmservice.group.objgroup.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-10-19 14:25:45
+ */
+@Data
+@ApiModel(value = "更新报警对象分组入参")
+public class UpdateObjGroupDTO {
+    @ApiModelProperty(value = "主键", required = true)
+    @NotNull(message = "主键不能为空") // todo 更新校验规则
+    private String id;
+    
+    @ApiModelProperty(value = "分组名称", required = true)
+    @NotNull(message = "分组名称不能为空") // todo 更新校验规则
+    private String name;
+    
+    @ApiModelProperty(value = "设备类型", required = true)
+    @NotNull(message = "设备类型不能为空") // todo 更新校验规则
+    private String classCode;
+    
+    @ApiModelProperty(value = "分组条件", required = true)
+    @NotNull(message = "分组条件不能为空") // todo 更新校验规则
+    private String condition;
+    
+    @ApiModelProperty(value = "父节点id", required = true)
+    @NotNull(message = "父节点id不能为空") // todo 更新校验规则
+    private String parentid;
+    
+}

+ 44 - 0
src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/vo/ObjGroupItemVO.java

@@ -0,0 +1,44 @@
+package com.persagy.apm.alarmservice.group.objgroup.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-10-19 14:25:45
+ */
+@Data
+@ApiModel(value = "报警对象分组返回结果参数")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ObjGroupItemVO {
+    @ApiModelProperty("主键")
+    private String id;
+    
+    @ApiModelProperty("分组名称")
+    private String name;
+    
+    @ApiModelProperty("设备类型")
+    private String classCode;
+    
+    @ApiModelProperty("分组条件")
+    private String condition;
+    
+    @ApiModelProperty("父节点id")
+    private String parentid;
+    
+    @ApiModelProperty("创建人")
+    private String creator;
+    
+    @ApiModelProperty("创建时间")
+    private Date creationTime;
+    
+    @ApiModelProperty("修改人")
+    private String modifier;
+    
+    @ApiModelProperty("修改时间")
+    private Date modifiedTime;
+    
+}

+ 44 - 0
src/main/java/com/persagy/apm/alarmservice/group/objgroup/model/vo/ObjGroupListItemVO.java

@@ -0,0 +1,44 @@
+package com.persagy.apm.alarmservice.group.objgroup.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-10-19 14:25:45
+ */
+@Data
+@ApiModel(value = "报警对象分组列表返回结果参数")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ObjGroupListItemVO {
+    @ApiModelProperty("主键")
+    private String id;
+    
+    @ApiModelProperty("分组名称")
+    private String name;
+    
+    @ApiModelProperty("设备类型")
+    private String classCode;
+    
+    @ApiModelProperty("分组条件")
+    private String condition;
+    
+    @ApiModelProperty("父节点id")
+    private String parentid;
+    
+    @ApiModelProperty("创建人")
+    private String creator;
+    
+    @ApiModelProperty("创建时间")
+    private Date creationTime;
+    
+    @ApiModelProperty("修改人")
+    private String modifier;
+    
+    @ApiModelProperty("修改时间")
+    private Date modifiedTime;
+    
+}

+ 75 - 0
src/main/java/com/persagy/apm/alarmservice/group/objgroup/service/IObjGroupService.java

@@ -0,0 +1,75 @@
+package com.persagy.apm.alarmservice.group.objgroup.service;
+
+import com.persagy.apm.alarmservice.group.objgroup.model.*;
+import com.persagy.apm.alarmservice.group.objgroup.model.dto.*;
+import java.util.List;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 报警对象分组(ObjGroup) service接口
+ *
+ * @author lixing
+ * @version V1.0 2021-10-19 14:25:45
+ */
+public interface IObjGroupService  {
+    
+    /**
+    * 创建报警对象分组
+    *
+    * @param addObjGroupDTO addDTO
+    * @return 报警对象分组主键
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    public String createObjGroup(AddObjGroupDTO addObjGroupDTO);
+    
+    /**
+    * 报警对象分组详情
+    *
+    * @param id 主键
+    * @return 报警对象分组do对象
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    public ObjGroup queryObjGroupDetail(String id);
+    
+    /**
+    * 更新报警对象分组
+    *
+    * @param updateObjGroupDTO updateDTO
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    public void updateObjGroup(UpdateObjGroupDTO updateObjGroupDTO);
+    
+    /**
+    * 删除报警对象分组
+    *
+    * @param id 主键
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    public void deleteObjGroup(String id);
+    
+    /**
+    * 查询报警对象分组
+    *
+    * @param queryObjGroupDTO queryDTO
+    * @return List<ObjGroup>
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    public List<ObjGroup> queryObjGroupList(QueryObjGroupDTO queryObjGroupDTO);
+    
+    /**
+    * 分页查询报警对象分组
+    * 
+    * @param pageQueryObjGroupDTO pageQueryDTO
+    * @return IPage<ObjGroup>
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    public IPage<ObjGroup> pageQueryObjGroup(PageQueryObjGroupDTO pageQueryObjGroupDTO);
+}

+ 207 - 0
src/main/java/com/persagy/apm/alarmservice/group/objgroup/service/impl/ObjGroupServiceImpl.java

@@ -0,0 +1,207 @@
+package com.persagy.apm.alarmservice.group.objgroup.service.impl;
+
+import com.persagy.apm.common.context.poems.PoemsContext;
+import com.persagy.apm.alarmservice.group.objgroup.dao.ObjGroupMapper;
+import com.persagy.apm.alarmservice.group.objgroup.service.IObjGroupService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.group.objgroup.model.*;
+import com.persagy.apm.alarmservice.group.objgroup.model.dto.*;
+import java.util.List;
+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;
+
+/**
+ * 报警对象分组(ObjGroup) service层
+ *
+ * @author lixing
+ * @version V1.0 2021-10-19 14:25:45
+ */
+@Service
+public class ObjGroupServiceImpl extends ServiceImpl<ObjGroupMapper, ObjGroup> 
+    implements IObjGroupService {
+    
+    /**
+    * 创建报警对象分组
+    * @return 报警对象分组主键
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    @Override
+    public String createObjGroup(AddObjGroupDTO addObjGroupDTO) {
+        ObjGroup objGroup = ConvertObjGroupTool.INSTANCE.convertAddDto2Entity(addObjGroupDTO);
+        // 设置默认值
+        setDefaultValue(objGroup);
+        save(objGroup);
+        return objGroup.getId();
+    }
+    
+    /**
+     * 如果某些字段没有赋值,使用默认的值
+     *
+     * @param objGroup 报警对象分组实体
+     * @author lixing
+     * @version V1.0 2021/3/12 12:29 下午
+     */
+    private void setDefaultValue(ObjGroup objGroup) {
+        objGroup.setCreator(PoemsContext.getContext().getUserId());
+        // todo 其他默认的属性
+        
+    }
+    
+    /**
+    * 报警对象分组详情
+    * @param id 主键
+    * @return 部门do类
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    @Override
+    public ObjGroup queryObjGroupDetail(String id) {
+        ObjGroup objGroup = getById(id);
+        if (objGroup == null) {
+            throw new IllegalArgumentException("查看ObjGroup详情时发生异常,找不到要查看的记录,id=" + id);
+        }
+        return objGroup;
+    }
+    
+    /**
+    * 更新报警对象分组
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    @Override
+    public void updateObjGroup(UpdateObjGroupDTO updateObjGroupDTO) {
+        ObjGroup objGroup = getById(updateObjGroupDTO.getId());
+        objGroup = ConvertObjGroupTool.INSTANCE.convertUpdateDto2Entity(objGroup, updateObjGroupDTO);
+        objGroup.setModifier(PoemsContext.getContext().getUserId());
+        updateById(objGroup);
+    }
+    
+    /**
+     * 校验报警对象分组是否可删除
+     *
+     * @param id 报警对象分组主键
+     * @return 报警对象分组do类
+     * @author lixing
+     * @version V1.0 2021-10-19 14:25:45
+     */
+    public ObjGroup checkDeletable(String id) {
+        if (id == null) {
+            throw new IllegalArgumentException("删除ObjGroup时发生异常,主键为空");
+        }
+
+        ObjGroup objGroup = getById(id);
+
+        if (objGroup == null) {
+            throw new IllegalArgumentException("删除ObjGroup时发生异常,找不到要删除的数据,id:" + id);
+        }
+
+        return objGroup;
+    }
+    
+    /**
+    * 删除报警对象分组
+    * @param id 主键
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    @Override
+    public void deleteObjGroup(String id) {
+        // 校验是否可删除
+        ObjGroup objGroup = checkDeletable(id);
+
+        objGroup.setValid(ValidEnum.FALSE.getType());
+        updateById(objGroup);
+    }
+    
+    /**
+    * 查询报警对象分组
+    * @return List<ObjGroup>
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    @Override
+    public List<ObjGroup> queryObjGroupList(QueryObjGroupDTO queryObjGroupDTO) {
+        QueryWrapper<ObjGroup> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(ObjGroup.PROP_VALID, ValidEnum.TRUE.getType());
+        // 默认按创建时间倒序排序
+        queryWrapper.orderBy(true, false, ObjGroup.PROP_CREATIONTIME);
+        
+        if (queryObjGroupDTO != null) {
+                                
+            if (StringUtils.isNotEmpty(queryObjGroupDTO.getName())) {
+                queryWrapper.like(ObjGroup.PROP_NAME, queryObjGroupDTO.getName());
+            }
+                                        
+            if (StringUtils.isNotEmpty(queryObjGroupDTO.getClassCode())) {
+                queryWrapper.eq(ObjGroup.PROP_CLASS_CODE, queryObjGroupDTO.getClassCode());
+            }
+                                        
+            if (StringUtils.isNotEmpty(queryObjGroupDTO.getCondition())) {
+                queryWrapper.eq(ObjGroup.PROP_CONDITION, queryObjGroupDTO.getCondition());
+            }
+                                        
+            if (StringUtils.isNotEmpty(queryObjGroupDTO.getParentid())) {
+                queryWrapper.eq(ObjGroup.PROP_PARENT_ID, queryObjGroupDTO.getParentid());
+            }
+                                            
+        }
+        
+        return list(queryWrapper);
+    }
+    
+    /**
+    * 分页查询报警对象分组
+    * @return IPage<ObjGroup>
+    * @author lixing
+    * @version V1.0 2021-10-19 14:25:45
+    */
+    @Override
+    public IPage<ObjGroup> pageQueryObjGroup(PageQueryObjGroupDTO pageQueryObjGroupDTO) {
+        QueryWrapper<ObjGroup> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(ObjGroup.PROP_VALID, ValidEnum.TRUE.getType());
+        // 这里认为pageQueryDTO是经过校验的,肯定包含分页信息
+        IPage<ObjGroup> pageParam = new Page<>(pageQueryObjGroupDTO.getPage(), pageQueryObjGroupDTO.getSize(),true);
+        // 排序信息
+        if(CollectionUtils.isEmpty(pageQueryObjGroupDTO.getOrders())){
+            // 默认按创建时间倒序排序
+            queryWrapper.orderBy(true, false, ObjGroup.PROP_CREATIONTIME);
+        }else {
+            List<Sort> orders = pageQueryObjGroupDTO.getOrders();
+            for(Sort sort: orders) {
+                // 将驼峰转换为下划线格式
+                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE,sort.getColumn()));
+                queryWrapper.orderBy(true, sort.isAsc(), sort.getColumn());
+            }
+        }
+                
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryObjGroupDTO.getName())) {
+            queryWrapper.like(ObjGroup.PROP_NAME, pageQueryObjGroupDTO.getName());
+        }
+                            
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryObjGroupDTO.getClassCode())) {
+            queryWrapper.like(ObjGroup.PROP_CLASS_CODE, pageQueryObjGroupDTO.getClassCode());
+        }
+                            
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryObjGroupDTO.getCondition())) {
+            queryWrapper.like(ObjGroup.PROP_CONDITION, pageQueryObjGroupDTO.getCondition());
+        }
+                            
+        // todo 需判断使用like还是eq
+        if (StringUtils.isNotEmpty(pageQueryObjGroupDTO.getParentid())) {
+            queryWrapper.like(ObjGroup.PROP_PARENT_ID, pageQueryObjGroupDTO.getParentid());
+        }
+                                    
+        return getBaseMapper().selectPage(pageParam, queryWrapper);
+    }
+}

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

@@ -9,6 +9,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.json.JSONObject;
 
 import java.io.Serializable;
 import java.util.List;
@@ -31,12 +32,11 @@ public class AlarmCondition extends AuditableEntity<AlarmCondition> implements S
     private List<String> infoCodes;
 
     @TableField(typeHandler = FastjsonTypeHandler.class)
-    @ApiModelProperty("前端展示")
-    private List<List<CalculateMethodDTO>> frontend;
+    @ApiModelProperty("触发条件-前端展示")
+    private List<List<CalculateMethodDTO>> triggerFrontend;
 
-    @TableField(typeHandler = FastjsonTypeHandler.class)
-    @ApiModelProperty("后端使用")
-    private String backend;
+    @ApiModelProperty("触发条件-后端使用")
+    private String triggerBackend;
 
     @ApiModelProperty("触发时长")
     private Integer triggerUphold;
@@ -44,11 +44,43 @@ public class AlarmCondition extends AuditableEntity<AlarmCondition> implements S
     @ApiModelProperty("报警等级")
     private String alarmLevel;
 
+    @ApiModelProperty("持续多久后恢复")
+    private Integer endUphold;
+
+    @ApiModelProperty("触发规则-中文描述")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<String> triggerRules;
+
+    @ApiModelProperty("恢复条件-前端")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<List<CalculateMethodDTO>> endFrontend;
+
+    @ApiModelProperty("恢复条件-后端")
+    private String endBackend;
+
+    @ApiModelProperty("恢复规则-中文描述")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<String> endRules;
+
+    @ApiModelProperty("生效时间类型")
+    private String effectTimeType;
+
+    @ApiModelProperty("生效时间详情")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private JSONObject effectTimeDetail;
+
 
     public static String PROP_INFO_CODES = "info_codes";
-    public static String PROP_FRONTEND = "frontend";
-    public static String PROP_BACKEND = "backend";
     public static String PROP_TRIGGER_UPHOLD = "trigger_uphold";
     public static String PROP_ALARM_LEVEL = "alarm_level";
+    public static String PROP_END_UPHOLD = "end_uphold";
+    public static String PROP_TRIGGER_FRONTEND = "trigger_frontend";
+    public static String PROP_TRIGGER_BACKEND = "trigger_backend";
+    public static String PROP_TRIGGER_RULES = "trigger_rules";
+    public static String PROP_END_FRONTEND = "end_frontend";
+    public static String PROP_END_BACKEND = "end_backend";
+    public static String PROP_END_RULES = "end_rules";
+    public static String PROP_EFFECT_TIME_TYPE = "effect_time_type";
+    public static String PROP_EFFECT_TIME_DETAIL = "effect_time_detail";
 
 }

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

@@ -1,5 +1,6 @@
 package com.persagy.apm.alarmservice.project.alarmcondition.model.dto;
 
+import com.fasterxml.jackson.annotation.JsonAlias;
 import com.persagy.apm.alarmservice.group.calculatemethod.model.dto.CalculateMethodDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -17,23 +18,19 @@ import java.util.Map;
 @ApiModel(value = "创建报警条件入参")
 public class AddAlarmConditionDTO {
     @ApiModelProperty(value = "包含的参数", required = true)
-    //@NotNull(message = "包含的参数不能为空") // todo 更新校验规则
     private List<String> infoCodes;
     
     @ApiModelProperty(value = "报警触发规则", required = true)
-    @NotNull(message = "报警触发规则不能为空") // todo 更新校验规则
-    private List<List<CalculateMethodDTO>> frontend;
+    @NotNull(message = "报警触发规则不能为空")
+    @JsonAlias({"frontend", "triggerFrontend"})
+    private List<List<CalculateMethodDTO>> triggerFrontend;
 
-    @ApiModelProperty(value = "后端使用", required = true)
-    //@NotNull(message = "后端使用不能为空") // todo 更新校验规则
-    private String backend;
-    
     @ApiModelProperty(value = "触发时长", required = true)
-    @NotNull(message = "触发时长不能为空") // todo 更新校验规则
+    @NotNull(message = "触发时长不能为空") 
     private Integer triggerUphold;
     
     @ApiModelProperty(value = "报警等级", required = true)
-    @NotNull(message = "报警等级不能为空") // todo 更新校验规则
+    @NotNull(message = "报警等级不能为空") 
     private String alarmLevel;
     
 }

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

@@ -5,6 +5,7 @@ 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.enums.AlarmEffectTimeTypeEnum;
 import com.persagy.apm.alarmservice.group.calculatemethod.model.dto.CalculateMethodDTO;
 import com.persagy.apm.alarmservice.group.monitorindicator.model.MonitorIndicator;
 import com.persagy.apm.alarmservice.group.monitorindicator.service.IMonitorIndicatorService;
@@ -51,12 +52,17 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
     @Override
     public Map<String, Object> createAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO) {
         AlarmCondition alarmCondition = ConvertAlarmConditionTool.INSTANCE.convertAddDto2Entity(addAlarmConditionDTO);
-        List<List<CalculateMethodDTO>> frontend = addAlarmConditionDTO.getFrontend();
-        alarmCondition.setFrontend(frontend);
+        List<List<CalculateMethodDTO>> frontend = addAlarmConditionDTO.getTriggerFrontend();
         //将前端公式转换成后台公式
         Map<String, Object> stringMap = frontend2Backend(frontend);
-        alarmCondition.setBackend((String) stringMap.get("backend"));
+        alarmCondition.setTriggerFrontend(frontend);
+        alarmCondition.setTriggerBackend((String) stringMap.get("backend"));
+        alarmCondition.setTriggerRules((List<String>) stringMap.get("displayFormula"));
         alarmCondition.setInfoCodes((List<String>) stringMap.get("infoCode"));
+        alarmCondition.setEndBackend("!(" + (String) stringMap.get("backend") + ")");
+        alarmCondition.setEndUphold(0);
+        alarmCondition.setEffectTimeType(AlarmEffectTimeTypeEnum.ALWAYS.getType());
+
         // 设置默认值
         setDefaultValue(alarmCondition);
         save(alarmCondition);
@@ -79,11 +85,11 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
     @Override
     public Map<String, Object> swtichAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO) {
         AlarmCondition alarmCondition = ConvertAlarmConditionTool.INSTANCE.convertAddDto2Entity(addAlarmConditionDTO);
-        List<List<CalculateMethodDTO>> frontend = addAlarmConditionDTO.getFrontend();
-        alarmCondition.setFrontend(frontend);
+        List<List<CalculateMethodDTO>> frontend = addAlarmConditionDTO.getTriggerFrontend();
+        alarmCondition.setTriggerFrontend(frontend);
         //将前端公式转换成后台公式
         Map<String, Object> stringMap = frontend2Backend(frontend);
-        alarmCondition.setBackend((String) stringMap.get("backend"));
+        alarmCondition.setTriggerBackend((String) stringMap.get("backend"));
         alarmCondition.setInfoCodes((List<String>) stringMap.get("infoCode"));
         // 设置默认值
         setDefaultValue(alarmCondition);
@@ -92,16 +98,17 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         return stringMap;
     }
 
+    @Override
     public Map<String, Object> frontend2Backend(List<List<CalculateMethodDTO>> frontend) {
         StringBuffer allNotNull = new StringBuffer();
         StringBuffer allNull = new StringBuffer();
         Set<String> infoCodesSet = new HashSet<>();
         Set<String> displayFormulaList = new HashSet<>();
-        for (List<CalculateMethodDTO> calculateMethodDTOS : frontend) {
+        for (List<CalculateMethodDTO> calculateMethodDtoList : frontend) {
             StringBuffer notNullString = new StringBuffer();
             StringBuffer nullString = new StringBuffer();
             StringBuffer calculateString = new StringBuffer();
-            for (CalculateMethodDTO calculateMethodDTO : calculateMethodDTOS) {
+            for (CalculateMethodDTO calculateMethodDTO : calculateMethodDtoList) {
                 infoCodesSet.add(calculateMethodDTO.getMonitorIndicatorId());
                 List<Formula> formulas = calculateMethodDTO.getFormula();
                 StringBuffer tempFormula = new StringBuffer();
@@ -157,9 +164,9 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
     @Override
     public void updateById(Map<String, Object> conditionMap, UpdateAlarmConditionDTO condition) {
         AlarmCondition alarmCondition = new AlarmCondition();
-        alarmCondition.setFrontend(condition.getFrontend());
+        alarmCondition.setTriggerFrontend(condition.getFrontend());
         alarmCondition.setAlarmLevel(condition.getAlarmLevel());
-        alarmCondition.setBackend((String) conditionMap.get("backend"));
+        alarmCondition.setTriggerBackend((String) conditionMap.get("backend"));
         alarmCondition.setInfoCodes((List<String>) conditionMap.get("infoCode"));
         alarmCondition.setTriggerUphold(condition.getTriggerUphold());
         alarmCondition.setId(condition.getId());
@@ -207,10 +214,10 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         alarmCondition.setModifier(PoemsContext.getContext().getUserId());
         if (updateAlarmConditionDTO.getFrontend() != null) {
             List<List<CalculateMethodDTO>> frontend = updateAlarmConditionDTO.getFrontend();
-            alarmCondition.setFrontend(frontend);
+            alarmCondition.setTriggerFrontend(frontend);
             //将前端公式转换成后台公式
             Map<String, Object> stringMap = frontend2Backend(frontend);
-            alarmCondition.setBackend((String) stringMap.get("backend"));
+            alarmCondition.setTriggerBackend((String) stringMap.get("backend"));
             alarmCondition.setInfoCodes((List<String>) stringMap.get("infoCode"));
         }
         updateById(alarmCondition);
@@ -273,23 +280,13 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
                 queryWrapper.eq(AlarmCondition.PROP_INFO_CODES, queryAlarmConditionDTO.getInfoCodes());
             }
 
-            if (queryAlarmConditionDTO.getFrontend() != null) {
-                queryWrapper.eq(AlarmCondition.PROP_FRONTEND, queryAlarmConditionDTO.getFrontend());
-            }
-
-            if (queryAlarmConditionDTO.getBackend() != null) {
-                queryWrapper.eq(AlarmCondition.PROP_BACKEND, queryAlarmConditionDTO.getBackend());
-            }
-
             if (queryAlarmConditionDTO.getTriggerUphold() != null) {
                 queryWrapper.eq(AlarmCondition.PROP_TRIGGER_UPHOLD, queryAlarmConditionDTO.getTriggerUphold());
             }
 
-            // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryAlarmConditionDTO.getAlarmLevel())) {
-                queryWrapper.like(AlarmCondition.PROP_ALARM_LEVEL, queryAlarmConditionDTO.getAlarmLevel());
+                queryWrapper.eq(AlarmCondition.PROP_ALARM_LEVEL, queryAlarmConditionDTO.getAlarmLevel());
             }
-
         }
 
         return list(queryWrapper);
@@ -326,20 +323,19 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         }
 
         if (pageQueryAlarmConditionDTO.getFrontend() != null) {
-            queryWrapper.eq(AlarmCondition.PROP_FRONTEND, pageQueryAlarmConditionDTO.getFrontend());
+            queryWrapper.eq(AlarmCondition.PROP_TRIGGER_FRONTEND, pageQueryAlarmConditionDTO.getFrontend());
         }
 
         if (pageQueryAlarmConditionDTO.getBackend() != null) {
-            queryWrapper.eq(AlarmCondition.PROP_BACKEND, pageQueryAlarmConditionDTO.getBackend());
+            queryWrapper.eq(AlarmCondition.PROP_TRIGGER_BACKEND, pageQueryAlarmConditionDTO.getBackend());
         }
 
         if (pageQueryAlarmConditionDTO.getTriggerUphold() != null) {
             queryWrapper.eq(AlarmCondition.PROP_TRIGGER_UPHOLD, pageQueryAlarmConditionDTO.getTriggerUphold());
         }
 
-        // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryAlarmConditionDTO.getAlarmLevel())) {
-            queryWrapper.like(AlarmCondition.PROP_ALARM_LEVEL, pageQueryAlarmConditionDTO.getAlarmLevel());
+            queryWrapper.eq(AlarmCondition.PROP_ALARM_LEVEL, pageQueryAlarmConditionDTO.getAlarmLevel());
         }
 
         return getBaseMapper().selectPage(pageParam, queryWrapper);
@@ -376,7 +372,7 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
             } else if (monitorUnit == null || unit == null) {
                 return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式错误");
             }
-            return this.validate(displayFormula.toString(), infoCodes);
+            return validate(displayFormula.toString(), infoCodes);
         }
 
         return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法");
@@ -399,7 +395,7 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
      * @param
      * @return
      */
-    public static CommonResult validate(String expression, String variable) {
+    public CommonResult validate(String expression, String variable) {
 //        if (variables == null || variables.isEmpty()) {
 //            return ResultHelper.failure(ResponseCode.C0134.getCode(), "内置变量为空");
 //        }

+ 11 - 10
src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/IProjectAlarmRuleService.java

@@ -81,7 +81,7 @@ public interface IProjectAlarmRuleService  {
     */
     public IPage<ProjectAlarmRule> pageQueryProjectAlarmRule(PageQueryProjectAlarmRuleDTO pageQueryProjectAlarmRuleDTO);
 
-    List<AddProjectAlarmRuleObjRelDTO> addProjectAlarmRules(AddGroupAlarmRuleDTO addGroupAlarmRuleDTO);
+    void addProjectAlarmRules(AddGroupAlarmRuleDTO addGroupAlarmRuleDTO);
 
     /**
      * 获取项目
@@ -92,15 +92,16 @@ public interface IProjectAlarmRuleService  {
 
     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);
+    // 勿删后续可能启用 lixing
+//    /**
+//     * 发送批量创建报警定义消息
+//     *
+//     * @param alarmConfigs 需要创建的报警定义
+//     * @param projectId 项目id
+//     * @author lixing
+//     * @version V1.0 2021/10/11 8:38 下午
+//     */
+//    void sendBatchCreateAlarmConfigMsg(List<AddAlarmConfigDTO> alarmConfigs, String projectId);
 
     void deleteBatch(GroupAlarmRule groupAlarmRule);
 }

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

@@ -1,14 +1,10 @@
 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;
@@ -39,16 +35,14 @@ 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 lombok.extern.slf4j.Slf4j;
 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 org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.Date;
@@ -65,6 +59,7 @@ import static org.apache.commons.lang3.math.NumberUtils.INTEGER_ONE;
  * @version V1.0 2021-09-08 22:46:16
  */
 @Service
+@Slf4j
 public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMapper, ProjectAlarmRule>
         implements IProjectAlarmRuleService {
 
@@ -108,48 +103,53 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         save(projectAlarmRule);
 
         List<ProjectAlarmRuleObjRel> addEquipList = addProjectAlarmRuleDTO.getAddEquipList();
-        addEquipList.forEach(addEquip -> addEquip.setProjectAlarmRuleId(projectAlarmRule.getId()));
+        addEquipList.forEach(addEquip -> {
+            addEquip.setProjectAlarmRuleId(projectAlarmRule.getId());
+            addEquip.setProjectId(addProjectAlarmRuleDTO.getProjectId());
+        });
         //保存报警对象
         projectAlarmRuleObjRelService.saveProjectAlarmRule(addEquipList);
-        //保存中台规则
-        BatchAddAlarmConfigDTO batchAddAlarmConfigDTO = new BatchAddAlarmConfigDTO();
-        List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
-        for (ProjectAlarmRuleObjRel ProjectAlarmRuleObjRel : addEquipList) {
-            AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
-            String equipId = ProjectAlarmRuleObjRel.getObjId();
-            addAlarmConfigDTO.setObjId(equipId);
-            addAlarmConfigDTO.setItemCode(addProjectAlarmRuleDTO.getAlarmItemCode());
-            addAlarmConfigDTO.setClassCode(addProjectAlarmRuleDTO.getClassCode());
-            addAlarmConfigDTO.setLevel(alarmConditionDTO.getAlarmLevel());
-            addAlarmConfigDTO.setCategory("Eqdx");
-            addAlarmConfigDTO.setOpen(1);
-            AlarmCondition equipCondition = new AlarmCondition();
-            List<String> infoCodeList = (List<String>) alarmConditionMap.get("infoCode");
-            List<String> infoCodeNew = new ArrayList<>();
-            for (String infoCode : infoCodeList) {
-                String replacement = equipId + "_" + infoCode;
-                infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
-            }
-            equipCondition.setInfoCode(infoCodeNew);
-            String backend = (String) alarmConditionMap.get("backend");
-            for (String infoCode : infoCodeList) {
-                String replacement = equipId + "_" + infoCode;
-                backend = backend.replaceAll(infoCode, replacement);
-            }
-            equipCondition.setEnd("!" + backend);
-            equipCondition.setEndUphold(0);
-            equipCondition.setTrigger(backend);
-            equipCondition.setTriggerUphold(alarmConditionDTO.getTriggerUphold() * 60);
-            equipCondition.setRules((List<String>) alarmConditionMap.get("displayFormula"));
-            JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmConditionDTO.getFrontend()));
-            equipCondition.setConfigs(configs);
-            AlarmEffectTime effectTime = new AlarmEffectTime();
-            effectTime.setType("always");
-            equipCondition.setEffectTime(effectTime);
-            addAlarmConfigDTO.setCondition(equipCondition);
-            alarmConfigs.add(addAlarmConfigDTO);
-        }
-        sendBatchCreateAlarmConfigMsg(alarmConfigs, addProjectAlarmRuleDTO.getProjectId());
+
+        // 勿删后续可能启用 lixing
+//        //保存中台规则
+//        BatchAddAlarmConfigDTO batchAddAlarmConfigDTO = new BatchAddAlarmConfigDTO();
+//        List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
+//        for (ProjectAlarmRuleObjRel ProjectAlarmRuleObjRel : addEquipList) {
+//            AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
+//            String equipId = ProjectAlarmRuleObjRel.getObjId();
+//            addAlarmConfigDTO.setObjId(equipId);
+//            addAlarmConfigDTO.setItemCode(addProjectAlarmRuleDTO.getAlarmItemCode());
+//            addAlarmConfigDTO.setClassCode(addProjectAlarmRuleDTO.getClassCode());
+//            addAlarmConfigDTO.setLevel(alarmConditionDTO.getAlarmLevel());
+//            addAlarmConfigDTO.setCategory("Eqdx");
+//            addAlarmConfigDTO.setOpen(1);
+//            AlarmCondition equipCondition = new AlarmCondition();
+//            List<String> infoCodeList = (List<String>) alarmConditionMap.get("infoCode");
+//            List<String> infoCodeNew = new ArrayList<>();
+//            for (String infoCode : infoCodeList) {
+//                String replacement = equipId + "_" + infoCode;
+//                infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
+//            }
+//            equipCondition.setInfoCode(infoCodeNew);
+//            String backend = (String) alarmConditionMap.get("backend");
+//            for (String infoCode : infoCodeList) {
+//                String replacement = equipId + "_" + infoCode;
+//                backend = backend.replaceAll(infoCode, replacement);
+//            }
+//            equipCondition.setEnd("!" + backend);
+//            equipCondition.setEndUphold(0);
+//            equipCondition.setTrigger(backend);
+//            equipCondition.setTriggerUphold(alarmConditionDTO.getTriggerUphold() * 60);
+//            equipCondition.setRules((List<String>) alarmConditionMap.get("displayFormula"));
+//            JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmConditionDTO.getFrontend()));
+//            equipCondition.setConfigs(configs);
+//            AlarmEffectTime effectTime = new AlarmEffectTime();
+//            effectTime.setType("always");
+//            equipCondition.setEffectTime(effectTime);
+//            addAlarmConfigDTO.setCondition(equipCondition);
+//            alarmConfigs.add(addAlarmConfigDTO);
+//        }
+//        sendBatchCreateAlarmConfigMsg(alarmConfigs, addProjectAlarmRuleDTO.getProjectId());
         return projectAlarmRule.getId();
     }
 
@@ -206,7 +206,7 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
             alarmConditionService.saveCondition(condition);
             //将规则ID传给项目报警
             projectAlarmRule.setAlarmConditionId(uuid);
-        } else if (belongOld < belongNew) {//项目自定义规则->集团规则
+        } else if (belongOld < belongNew) {// 项目自定义规则->集团规则
             //删除自定义规则
             ProjectAlarmRule projectAlarm = getById(updateProjectAlarmRuleDTO.getId());
             alarmConditionService.deleteAlarmCondition(projectAlarm.getAlarmConditionId());
@@ -216,10 +216,10 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
             getGroupAlarmRuleDTO.setAlarmItemCode(updateProjectAlarmRuleDTO.getAlarmItemCode());
             GroupAlarmRule groupAlarmRule = groupAlarmRuleService.getGroupAlarmRule(getGroupAlarmRuleDTO);
             projectAlarmRule.setAlarmConditionId(groupAlarmRule.getAlarmConditionId());
-        } else if (belongOld == 0 && belongNew == 0) {//项目自定义规则->项目自定义规则
+        } else if (belongOld == 0 && belongNew == 0) {// 项目自定义规则->项目自定义规则
             //修改自定义规则
             UpdateAlarmConditionDTO updateAlarmConditionDTO = new UpdateAlarmConditionDTO();
-            updateAlarmConditionDTO.setFrontend(alarmCondition.getFrontend());
+            updateAlarmConditionDTO.setFrontend(alarmCondition.getTriggerFrontend());
             updateAlarmConditionDTO.setId(updateProjectAlarmRuleDTO.getAlarmConditionId());
             updateAlarmConditionDTO.setTriggerUphold(alarmCondition.getTriggerUphold());
             updateAlarmConditionDTO.setAlarmLevel(alarmCondition.getAlarmLevel());
@@ -239,49 +239,50 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         String id = updateProjectAlarmRuleDTO.getId();
         List<AddProjectAlarmRuleObjRelDTO> addRelations = convert2AddProjectAlarmRuleObjRelDTO(addRelationList, id, projectId);
         projectAlarmRuleObjRelService.createBatchRelation(addRelations);
-        String condition = updateProjectAlarmRuleDTO.getCondition();
-        String classCode = updateProjectAlarmRuleDTO.getClassCode();
-        String alarmItemCode = updateProjectAlarmRuleDTO.getAlarmItemCode();
-        //删除中台报警条件
-        groupAlarmRuleService.deleteEquipCondition(condition, classCode, alarmItemCode);
-        //新增中台报警条件
-        List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
-        for (AddProjectAlarmRuleObjRelDTO equipRel : addRelations) {
-            AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
-            String equipId = equipRel.getObjId();
-            addAlarmConfigDTO.setObjId(equipId);
-            addAlarmConfigDTO.setItemCode(alarmItemCode);
-            addAlarmConfigDTO.setClassCode(classCode);
-            addAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
-            addAlarmConfigDTO.setCategory("Eqdx");
-            addAlarmConfigDTO.setOpen(1);
-            AlarmCondition equipCondition = new AlarmCondition();
-            List<String> infoCodeList = (List<String>) conditionMap.get("infoCode");
-            List<String> infoCodeNew = new ArrayList<>();
-            for (String infoCode : infoCodeList) {
-                String replacement = equipId + "_" + infoCode;
-                infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
-            }
-            equipCondition.setInfoCode(infoCodeNew);
-            String backend = (String) conditionMap.get("backend");
-            for (String infoCode : infoCodeList) {
-                String replacement = equipId + "_" + infoCode;
-                backend = backend.replaceAll(infoCode, replacement);
-            }
-            equipCondition.setEnd("!" + backend);
-            equipCondition.setEndUphold(0);
-            equipCondition.setTrigger(backend);
-            equipCondition.setTriggerUphold(alarmCondition.getTriggerUphold() * 60);
-            equipCondition.setRules((List<String>) conditionMap.get("displayFormula"));
-            JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmCondition.getFrontend()));
-            equipCondition.setConfigs(configs);
-            AlarmEffectTime effectTime = new AlarmEffectTime();
-            effectTime.setType("always");
-            equipCondition.setEffectTime(effectTime);
-            addAlarmConfigDTO.setCondition(equipCondition);
-            alarmConfigs.add(addAlarmConfigDTO);
-        }
-        sendBatchCreateAlarmConfigMsg(alarmConfigs, projectId);
+        // 勿删后续可能启用 lixing
+//        String condition = updateProjectAlarmRuleDTO.getCondition();
+//        String classCode = updateProjectAlarmRuleDTO.getClassCode();
+//        String alarmItemCode = updateProjectAlarmRuleDTO.getAlarmItemCode();
+//        //删除中台报警条件
+//        groupAlarmRuleService.deleteEquipCondition(condition, classCode, alarmItemCode);
+//        //新增中台报警条件
+//        List<AddAlarmConfigDTO> alarmConfigs = new ArrayList<>();
+//        for (AddProjectAlarmRuleObjRelDTO equipRel : addRelations) {
+//            AddAlarmConfigDTO addAlarmConfigDTO = new AddAlarmConfigDTO();
+//            String equipId = equipRel.getObjId();
+//            addAlarmConfigDTO.setObjId(equipId);
+//            addAlarmConfigDTO.setItemCode(alarmItemCode);
+//            addAlarmConfigDTO.setClassCode(classCode);
+//            addAlarmConfigDTO.setLevel(alarmCondition.getAlarmLevel());
+//            addAlarmConfigDTO.setCategory("Eqdx");
+//            addAlarmConfigDTO.setOpen(1);
+//            AlarmCondition equipCondition = new AlarmCondition();
+//            List<String> infoCodeList = (List<String>) conditionMap.get("infoCode");
+//            List<String> infoCodeNew = new ArrayList<>();
+//            for (String infoCode : infoCodeList) {
+//                String replacement = equipId + "_" + infoCode;
+//                infoCodeNew.add(infoCode.replaceAll(infoCode, replacement));
+//            }
+//            equipCondition.setInfoCode(infoCodeNew);
+//            String backend = (String) conditionMap.get("backend");
+//            for (String infoCode : infoCodeList) {
+//                String replacement = equipId + "_" + infoCode;
+//                backend = backend.replaceAll(infoCode, replacement);
+//            }
+//            equipCondition.setEnd("!" + backend);
+//            equipCondition.setEndUphold(0);
+//            equipCondition.setTrigger(backend);
+//            equipCondition.setTriggerUphold(alarmCondition.getTriggerUphold() * 60);
+//            equipCondition.setRules((List<String>) conditionMap.get("displayFormula"));
+//            JSONArray configs = JSONArray.parseArray(JSON.toJSONString(alarmCondition.getFrontend()));
+//            equipCondition.setConfigs(configs);
+//            AlarmEffectTime effectTime = new AlarmEffectTime();
+//            effectTime.setType("always");
+//            equipCondition.setEffectTime(effectTime);
+//            addAlarmConfigDTO.setCondition(equipCondition);
+//            alarmConfigs.add(addAlarmConfigDTO);
+//        }
+//        sendBatchCreateAlarmConfigMsg(alarmConfigs, projectId);
     }
 
     private List<AddProjectAlarmRuleObjRelDTO> convert2AddProjectAlarmRuleObjRelDTO(List<UpdateAlarmItemDTO> addRelationList, String id, String projectId) {
@@ -445,39 +446,16 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         queryWrapper.eq(ProjectAlarmRule.PROP_VALID, ValidEnum.TRUE.getType());
         // 这里认为pageQueryDTO是经过校验的,肯定包含分页信息
         IPage<ProjectAlarmRule> pageParam = new Page<>(pageQueryProjectAlarmRuleDTO.getPage(), pageQueryProjectAlarmRuleDTO.getSize(), true);
-        // 排序信息
-        //        if(CollectionUtils.isEmpty(pageQueryProjectAlarmRuleDTO.getOrders())){
-        // 默认按创建时间倒序排序
         queryWrapper.orderBy(true, false, ProjectAlarmRule.PROP_CREATIONTIME);
-        /*}else {
-            List<Sort> orders = pageQueryProjectAlarmRuleDTO.getOrders();
-            for(Sort sort: orders) {
-                // 将驼峰转换为下划线格式
-                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE,sort.getColumn()));
-                queryWrapper.orderBy(true, sort.isAsc(), sort.getColumn());
-            }
-        }*/
 
-        // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryProjectAlarmRuleDTO.getGroupId())) {
             queryWrapper.eq(ProjectAlarmRule.PROP_GROUP_ID, pageQueryProjectAlarmRuleDTO.getGroupId());
         }
 
-        // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryProjectAlarmRuleDTO.getAlarmItemCode())) {
             queryWrapper.eq(ProjectAlarmRule.PROP_ALARM_ITEM_CODE, pageQueryProjectAlarmRuleDTO.getAlarmItemCode());
         }
 
-        // todo 需判断使用like还是eq
-        /*if (StringUtils.isNotEmpty(pageQueryProjectAlarmRuleDTO.getAlarmConditionId())) {
-            queryWrapper.like(ProjectAlarmRule.PROP_ALARM_CONDITION_ID, pageQueryProjectAlarmRuleDTO.getAlarmConditionId());
-        }*/
-
-        //        if (pageQueryProjectAlarmRuleDTO.getBelong() != null) {
-        //            queryWrapper.eq(ProjectAlarmRule.PROP_BELONG, pageQueryProjectAlarmRuleDTO.getBelong());
-        //        }
-
-        // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryProjectAlarmRuleDTO.getProjectId())) {
             queryWrapper.eq(ProjectAlarmRule.PROP_PROJECT_ID, pageQueryProjectAlarmRuleDTO.getProjectId());
         }
@@ -486,20 +464,25 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
     }
 
     @Override
-    public List<AddProjectAlarmRuleObjRelDTO> addProjectAlarmRules(AddGroupAlarmRuleDTO addGroupAlarmRuleDTO) {
+    public void addProjectAlarmRules(AddGroupAlarmRuleDTO addGroupAlarmRuleDTO) {
         String condition = addGroupAlarmRuleDTO.getCondition();
         String classCode = addGroupAlarmRuleDTO.getClassCode();
         //查询所有项目
         List<ProjectVO> projects = this.getProject();
         //遍历项目,组好对象进行插入
-        List<ProjectAlarmRule> projectAlarmRuleList = new ArrayList<>();
+        List<ProjectAlarmRule> projectAlarmRuleList;
         String alarmItemCode = addGroupAlarmRuleDTO.getAlarmItemCode();
         String alarmItemName = addGroupAlarmRuleDTO.getAlarmItemName();
-        List<AddProjectAlarmRuleObjRelDTO> addRelationList = new ArrayList<>();
+        List<AddProjectAlarmRuleObjRelDTO> addRelationList;
+        log.info("开始创建项目报警规则,并添加项目规则与设备的关联关系");
+        log.info("共有{}个项目需要创建报警规则", projects.size());
+        int count = 0;
         for (ProjectVO project : projects) {
-            String projectId = "Pj" + project.getProjectId();
+            projectAlarmRuleList = new ArrayList<>();
+            addRelationList = new ArrayList<>();
+
             ProjectAlarmRule projectAlarmRule = new ProjectAlarmRule();
-            projectAlarmRule.setProjectId(projectId);
+            projectAlarmRule.setProjectId(project.getProjectId());
             projectAlarmRule.setAlarmItemCode(alarmItemCode);
             projectAlarmRule.setAlarmItemName(alarmItemName);
             projectAlarmRule.setBelong(INTEGER_ONE);
@@ -511,23 +494,25 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
             projectAlarmRuleList.add(projectAlarmRule);
             //新增关联关系
             QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
-            queryEquipDTO.setProjectId(projectId);
+            queryEquipDTO.setProjectId(project.getProjectId());
             queryEquipDTO.setClassCode(classCode);
             queryEquipDTO.setCondition(condition);
             List<EquipItem> records = groupManagementService.getEquipList(queryEquipDTO);
             for (EquipItem record : records) {
                 AddProjectAlarmRuleObjRelDTO addProjectAlarmRuleObjRelDTO = new AddProjectAlarmRuleObjRelDTO();
                 addProjectAlarmRuleObjRelDTO.setProjectAlarmRuleId(projectAlarmRule.getId());
-                addProjectAlarmRuleObjRelDTO.setProjectId(projectId);
+                addProjectAlarmRuleObjRelDTO.setProjectId(project.getProjectId());
                 addProjectAlarmRuleObjRelDTO.setObjId(record.getId());
                 addProjectAlarmRuleObjRelDTO.setObjName(record.getLocalName());
                 addProjectAlarmRuleObjRelDTO.setOpen(INTEGER_ONE);
                 addRelationList.add(addProjectAlarmRuleObjRelDTO);
             }
+            // 按项目批量保存
+            projectAlarmRuleObjRelService.createBatchRelation(addRelationList);
+            saveBatch(projectAlarmRuleList);
+            count ++;
+            log.info("已完成{}个项目的报警规则创建, 剩余{}个项目的报警规则待创建", count, projects.size() - count);
         }
-        projectAlarmRuleObjRelService.createBatchRelation(addRelationList);
-        saveBatch(projectAlarmRuleList);
-        return addRelationList;
     }
 
     @Override
@@ -552,22 +537,23 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         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);
-    }
+    // 勿删后续可能启用 lixing
+//    @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);
+//    }
 
     @Override
     public void deleteBatch(GroupAlarmRule groupAlarmRule) {
@@ -578,7 +564,7 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         List<ProjectAlarmRule> list = list(queryWrapper);
         ProjectAlarmRule projectAlarmRule = new ProjectAlarmRule();
         projectAlarmRule.setValid(ValidEnum.FALSE.getType());
-        update(projectAlarmRule,queryWrapper);
+        update(projectAlarmRule, queryWrapper);
     }
 
     /**

+ 6 - 5
src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/model/dto/UpdateAlarmItemDTO.java

@@ -13,13 +13,14 @@ import javax.validation.constraints.NotNull;
 @Data
 @ApiModel(value = "更新项目报警规则与监测对象的关联入参")
 public class UpdateAlarmItemDTO {
-    
-    @ApiModelProperty(value = "报警对象ID", required = true)
-    @NotNull(message = "报警对象名称不能为空") // todo 更新校验规则
+
+    @ApiModelProperty("设备ID")
     private String objId;
 
-    @ApiModelProperty(value = "报警对象ID", required = true)
-    @NotNull(message = "报警对象名称不能为空") // todo 更新校验规则
+    @ApiModelProperty("设备名称")
     private String objName;
+
+    @ApiModelProperty("屏蔽状态 1-open、0- 屏蔽")
+    private Integer open;
     
 }

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

@@ -313,7 +313,6 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
         List<EquipItem> records = new ArrayList<>();
         for (ProjectVO project : projects) {
             QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
-            queryEquipDTO.setProjectId("Pj" + project.getProjectId());
             queryEquipDTO.setClassCode(classCode);
             queryEquipDTO.setCondition(condition);
             List<EquipItem> record = groupManagementService.getEquipList(queryEquipDTO);
@@ -326,7 +325,6 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
     public void deleteBatch() {
         List<ProjectVO> project = projectAlarmRuleService.getProject();
         List<String> list = project.stream().map(ProjectVO::getProjectId).collect(Collectors.toList());
-        list.forEach(projectId -> projectId = "Pj" + projectId);
         QueryWrapper<ProjectAlarmRuleObjRel> queryWrapper = new QueryWrapper<>();
         queryWrapper.in(ProjectAlarmRuleObjRel.PROP_PROJECT_ID, list);
         ProjectAlarmRuleObjRel projectAlarmRuleObjRel = new ProjectAlarmRuleObjRel();
@@ -361,16 +359,17 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
     @Override
     public List<ProjectAlarmRuleObjRelListItemVO> queryRuleObjRel(QueryRuleObjRelDTO queryRuleObjRelDTO) {
         List<ProjectAlarmRuleObjRel> resultList = new ArrayList<>();
-        if (StringUtils.isNotBlank(queryRuleObjRelDTO.getProjectAlarmRuleId())) {
-            //查询每条项目报警下的报警对象
+        if(StringUtils.isNotBlank(queryRuleObjRelDTO.getProjectAlarmRuleId())){
+            //1、查询项目报警下的未屏蔽的报警对象
             QueryWrapper<ProjectAlarmRuleObjRel> queryWrapper = new QueryWrapper<>();
             queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_PROJECT_ALARM_RULE_ID, queryRuleObjRelDTO.getProjectAlarmRuleId());
             queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_VALID, ValidEnum.TRUE.getType());
-//            queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_OPEN, 1);
+            queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_OPEN, 1);
             List<ProjectAlarmRuleObjRel> list = list(queryWrapper);
             list.stream().map(ProjectAlarmRuleObjRel::getObjId).distinct().collect(Collectors.toList());
             resultList.addAll(list);
         }
+        //2、查询未绑定的报警对象(未屏蔽、未关联)
         //查询所有设备(报警对象)
         String projectId = queryRuleObjRelDTO.getProjectId();
         QueryEquipDTO queryEquipDTO = new QueryEquipDTO();
@@ -378,19 +377,17 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
         queryEquipDTO.setClassCode(queryRuleObjRelDTO.getClassCode());
         queryEquipDTO.setCondition(queryRuleObjRelDTO.getCondition());
         List<EquipItem> records = groupManagementService.getEquipList(queryEquipDTO);
-        //查询项目下所有已绑定的报警对象
+        //查询该报警类型下所有(可能有多个相同报警类型的项目报警)已绑定的报警对象
         List<String> projectAlarmRuleIdList = projectAlarmRuleService.queryAlarmRule(queryRuleObjRelDTO);
-        QueryWrapper<ProjectAlarmRuleObjRel> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_PROJECT_ID, projectId);
-        if (projectAlarmRuleIdList.size() > 0)
-            queryWrapper.in(ProjectAlarmRuleObjRel.PROP_PROJECT_ALARM_RULE_ID, projectAlarmRuleIdList);
-        queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_VALID, ValidEnum.TRUE.getType());
-        //新增项目报警,要把屏蔽的查出来
-        if (StringUtils.isBlank(queryRuleObjRelDTO.getProjectAlarmRuleId()))
-            queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_OPEN, 1);
-        List<ProjectAlarmRuleObjRel> list = list(queryWrapper);
-        Map<String, ProjectAlarmRuleObjRel> partitionMap = list.stream().collect(Collectors.toMap(ProjectAlarmRuleObjRel::getObjId, equip -> equip, (k1, k2) -> k1));
-
+        Map<String, ProjectAlarmRuleObjRel> partitionMap = new HashMap<>();
+        if (projectAlarmRuleIdList.size() > 0) {
+            QueryWrapper<ProjectAlarmRuleObjRel> wrapper = new QueryWrapper<>();
+            wrapper.eq(ProjectAlarmRuleObjRel.PROP_PROJECT_ID, projectId);
+            wrapper.in(ProjectAlarmRuleObjRel.PROP_PROJECT_ALARM_RULE_ID, projectAlarmRuleIdList);
+            wrapper.eq(ProjectAlarmRuleObjRel.PROP_VALID, ValidEnum.TRUE.getType());
+            List<ProjectAlarmRuleObjRel> listRel = list(wrapper);
+            partitionMap = listRel.stream().collect(Collectors.toMap(ProjectAlarmRuleObjRel::getObjId, equip -> equip, (k1, k2) -> k1));
+        }
         //筛选未绑定的报警对象
         for (EquipItem record : records) {
             String id = record.getId();

+ 48 - 0
src/main/java/com/persagy/apm/alarmservice/project/model/AlarmCondition.java

@@ -0,0 +1,48 @@
+package com.persagy.apm.alarmservice.project.model;
+
+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.Date;
+
+/**
+ * 报警条件(AlarmCondition)实体类
+ * @author lixing
+ * @version V1.0 2021-10-21 11:19:12
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel(description = "报警条件")
+public class AlarmCondition extends AuditableEntity<AlarmCondition> implements Serializable {
+    private static final long serialVersionUID = -69196501972192443L;
+
+    @ApiModelProperty("包含的参数")
+    private Object infoCodes;
+    
+    @ApiModelProperty("前端展示")
+    private Object frontend;
+    
+    @ApiModelProperty("后端使用")
+    private Object backend;
+    
+    @ApiModelProperty("持续多久后触发")
+    private Integer triggerUphold;
+    
+    @ApiModelProperty("报警等级")
+    private String alarmLevel;
+    
+    @ApiModelProperty("持续多久后恢复")
+    private Integer endUphold;
+    
+
+    public static String PROP_INFO_CODES = "info_codes";
+    public static String PROP_FRONTEND = "frontend";
+    public static String PROP_BACKEND = "backend";
+    public static String PROP_TRIGGER_UPHOLD = "trigger_uphold";
+    public static String PROP_ALARM_LEVEL = "alarm_level";
+    public static String PROP_END_UPHOLD = "end_uphold";
+
+}

+ 2 - 1
src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/service/impl/ProjectMonitorIndicatorConfigServiceImpl.java

@@ -435,7 +435,8 @@ public class ProjectMonitorIndicatorConfigServiceImpl extends ServiceImpl<Projec
         if (StringUtils.isBlank(objId) || CollectionUtils.isEmpty(monitorIndicatorIdList)) {
             return result;
         }
-        EquipItem equipItem = groupManagementService.equipGet(objId);
+        EquipItem equipItem = groupManagementService.equipGet(objId,
+                PoemsContext.getContext().getProjectId(), PoemsContext.getContext().getGroupCode());
         QueryMonitorIndicatorDTO queryMonitorIndicatorDTO = new QueryMonitorIndicatorDTO();
         queryMonitorIndicatorDTO.setIds(monitorIndicatorIdList);
         List<MonitorIndicator> monitorIndicators = monitorIndicatorService.queryMonitorIndicatorList(queryMonitorIndicatorDTO);

+ 3 - 3
src/main/resources/bootstrap.yml

@@ -14,10 +14,10 @@ mybatis-plus:
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 
 
-#eureka:
+eureka:
 #  instance:
 #    prefer-ip-address: true
-#  client:
-#    register-with-eureka: false
+  client:
+    register-with-eureka: false
 
 

File diff suppressed because it is too large
+ 1 - 1
src/main/resources/db/init/data.sql


File diff suppressed because it is too large
+ 1 - 1
src/main/resources/db/init/table.sql


+ 26 - 13
src/main/resources/mapper/AlarmConditionMapper.xml

@@ -2,18 +2,31 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <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" 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" />
-		<result column="creator" property="creator" />
-		<result column="creation_time" property="creationTime" />
-		<result column="modifier" property="modifier" />
-		<result column="modified_time" property="modifiedTime" />
-		<result column="valid" property="valid" />
-	</resultMap>
+        <result column="id" property="id"/>
+        <result column="info_codes" property="infoCodes"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+        <result column="trigger_uphold" property="triggerUphold"/>
+        <result column="alarm_level" property="alarmLevel"/>
+        <result column="ts" property="ts"/>
+        <result column="creator" property="creator"/>
+        <result column="creation_time" property="creationTime"/>
+        <result column="modifier" property="modifier"/>
+        <result column="modified_time" property="modifiedTime"/>
+        <result column="valid" property="valid"/>
+        <result column="end_uphold" property="endUphold"/>
+        <result column="trigger_frontend" property="triggerFrontend"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+        <result column="trigger_backend" property="triggerBackend"/>
+        <result column="trigger_rules" property="triggerRules"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+        <result column="end_frontend" property="endFrontend"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+        <result column="end_backend" property="endBackend"/>
+        <result column="end_rules" property="endRules"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+        <result column="effect_time_type" property="effectTimeType"/>
+        <result column="effect_time_detail" property="effectTimeDetail"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+    </resultMap>
 </mapper>
 

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

@@ -16,10 +16,9 @@
             <result column="cid" property="id"/>
             <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"
+            <result column="trigger_frontend" property="frontend"
                     typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+            <result column="trigger_backend" property="backend"/>
             <result column="trigger_uphold" property="triggerUphold"/>
             <result column="alarm_level" property="alarmLevel"/>
         </collection>
@@ -35,8 +34,8 @@
         a.modified_time,
         b.id as cid,
         b.info_codes,
-        b.frontend,
-        b.backend,
+        b.trigger_frontend,
+        b.trigger_backend,
         b.trigger_uphold,
         b.alarm_level
         from group_alarm_rule a

+ 18 - 0
src/main/resources/mapper/ObjGroupMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.apm.alarmservice.group.objgroup.dao.ObjGroupMapper">
+    <resultMap id="ObjGroupMap" type="com.persagy.apm.alarmservice.group.objgroup.model.ObjGroup">
+		<result column="id" property="id" />
+		<result column="name" property="name" />
+		<result column="class_code" property="classCode" />
+		<result column="condition" property="condition" />
+		<result column="parent_id" property="parentid" />
+		<result column="ts" property="ts" />
+		<result column="creator" property="creator" />
+		<result column="creation_time" property="creationTime" />
+		<result column="modifier" property="modifier" />
+		<result column="modified_time" property="modifiedTime" />
+		<result column="valid" property="valid" />
+	</resultMap>
+</mapper>
+