Jelajahi Sumber

Merge remote-tracking branch 'origin/v1.0.0' into v1.0.0

xujiaheng 3 tahun lalu
induk
melakukan
ac8163b5fc
49 mengubah file dengan 1926 tambahan dan 444 penghapusan
  1. 1 1
      pom.xml
  2. 37 1
      src/main/java/com/persagy/apm/alarmservice/alarmdic/controller/AlarmDicController.java
  3. 127 0
      src/main/java/com/persagy/apm/alarmservice/alarmdic/service/AlarmDicServiceImpl.java
  4. 204 26
      src/main/java/com/persagy/apm/alarmservice/alarmrecord/controller/AlarmRecordController.java
  5. 62 0
      src/main/java/com/persagy/apm/alarmservice/alarmrecord/enums/EnumAlarmCategory.java
  6. 51 0
      src/main/java/com/persagy/apm/alarmservice/alarmrecord/enums/EnumAlarmLevel.java
  7. 51 0
      src/main/java/com/persagy/apm/alarmservice/alarmrecord/enums/EnumAlarmNature.java
  8. 51 0
      src/main/java/com/persagy/apm/alarmservice/alarmrecord/enums/EnumAlarmState.java
  9. 51 0
      src/main/java/com/persagy/apm/alarmservice/alarmrecord/enums/EnumAlarmTreatMode.java
  10. 53 0
      src/main/java/com/persagy/apm/alarmservice/alarmrecord/enums/EnumAlarmTreatState.java
  11. 31 0
      src/main/java/com/persagy/apm/alarmservice/alarmrecord/model/ConvertAlarmRecordTool.java
  12. 4 0
      src/main/java/com/persagy/apm/alarmservice/alarmrecord/model/dto/PageQueryAlarmRecordDTO.java
  13. 1 1
      src/main/java/com/persagy/apm/alarmservice/alarmrecord/model/vo/AlarmRecordItem.java
  14. 1 1
      src/main/java/com/persagy/apm/alarmservice/alarmrecord/model/vo/AlarmRecordListItem.java
  15. 341 0
      src/main/java/com/persagy/apm/alarmservice/alarmrecord/service/AlarmRecordWrapper.java
  16. 1 1
      src/main/java/com/persagy/apm/alarmservice/calculatemethod/model/CalculateMethod.java
  17. 1 1
      src/main/java/com/persagy/apm/alarmservice/calculatemethod/model/dto/QueryCalculateMethodDTO.java
  18. 10 0
      src/main/java/com/persagy/apm/alarmservice/calculatemethod/service/ICalculateMethodService.java
  19. 9 0
      src/main/java/com/persagy/apm/alarmservice/calculatemethod/service/impl/CalculateMethodServiceImpl.java
  20. 14 10
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/controller/GroupAlarmRuleController.java
  21. 2 29
      src/main/java/com/persagy/apm/alarmservice/group/management/controller/GroupManagementController.java
  22. 33 0
      src/main/java/com/persagy/apm/alarmservice/group/management/model/ConvertGroupTool.java
  23. 2 0
      src/main/java/com/persagy/apm/alarmservice/group/management/model/GroupManagement.java
  24. 1 1
      src/main/java/com/persagy/apm/alarmservice/group/management/model/vo/GroupTreeInfoVO.java
  25. 58 1
      src/main/java/com/persagy/apm/alarmservice/group/management/service/GroupManagementService.java
  26. 164 67
      src/main/java/com/persagy/apm/alarmservice/group/management/service/impl/GroupManagementServiceImpl.java
  27. 4 0
      src/main/java/com/persagy/apm/alarmservice/monitorindicator/controller/MonitorIndicatorController.java
  28. 8 0
      src/main/java/com/persagy/apm/alarmservice/monitorindicator/model/MonitorIndicator.java
  29. 6 3
      src/main/java/com/persagy/apm/alarmservice/monitorindicator/model/dto/QueryMonitorIndicatorDTO.java
  30. 6 12
      src/main/java/com/persagy/apm/alarmservice/monitorindicator/model/vo/MonitorIndicatorItemVO.java
  31. 3 13
      src/main/java/com/persagy/apm/alarmservice/monitorindicator/model/vo/MonitorIndicatorListItemVO.java
  32. 11 0
      src/main/java/com/persagy/apm/alarmservice/monitorindicator/service/IMonitorIndicatorService.java
  33. 99 67
      src/main/java/com/persagy/apm/alarmservice/monitorindicator/service/impl/MonitorIndicatorServiceImpl.java
  34. 37 24
      src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/controller/ProjectMonitorIndicatorConfigController.java
  35. 6 1
      src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/ProjectMonitorIndicatorConfig.java
  36. 1 1
      src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/dto/AddProjectMonitorIndicatorConfigDTO.java
  37. 15 13
      src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/dto/PageQueryProjectMonitorIndicatorConfigDTO.java
  38. 1 1
      src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/dto/QueryProjectMonitorIndicatorConfigDTO.java
  39. 7 4
      src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/dto/QueryProjectMonitorIndicatorConfigDetailDTO.java
  40. 4 13
      src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/dto/UpdateProjectMonitorIndicatorConfigDTO.java
  41. 7 22
      src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/vo/ProjectMonitorIndicatorConfigItemVO.java
  42. 7 22
      src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/vo/ProjectMonitorIndicatorConfigListItemVO.java
  43. 15 3
      src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/service/IProjectMonitorIndicatorConfigService.java
  44. 299 99
      src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/service/impl/ProjectMonitorIndicatorConfigServiceImpl.java
  45. 3 2
      src/main/java/com/persagy/apm/common/aspect/AlarmDataAspect.java
  46. 22 3
      src/main/java/com/persagy/apm/common/enums/AlarmDicTypeEnum.java
  47. 1 0
      src/main/java/com/persagy/apm/model/dto/GroupManagementDTO.java
  48. 2 0
      src/main/resources/mapper/MonitorIndicatorMapper.xml
  49. 1 1
      src/main/resources/mapper/ProjectMonitorIndicatorConfigMapper.xml

+ 1 - 1
pom.xml

@@ -7,7 +7,7 @@
 <parent>
 <parent>
     <groupId>com.persagy</groupId>
     <groupId>com.persagy</groupId>
     <artifactId>apm-package</artifactId>
     <artifactId>apm-package</artifactId>
-    <version>3.0.0</version>
+    <version>v1.0.0</version>
 </parent>
 </parent>
 
 
 <artifactId>energy-alarm-service</artifactId>
 <artifactId>energy-alarm-service</artifactId>

+ 37 - 1
src/main/java/com/persagy/apm/alarmservice/alarmdic/controller/AlarmDicController.java

@@ -2,6 +2,8 @@ package com.persagy.apm.alarmservice.alarmdic.controller;
 
 
 import com.persagy.apm.alarmservice.alarmcondition.model.dto.AddAlarmConditionDTO;
 import com.persagy.apm.alarmservice.alarmcondition.model.dto.AddAlarmConditionDTO;
 import com.persagy.apm.alarmservice.alarmdic.model.dto.QueryAlarmDicDTO;
 import com.persagy.apm.alarmservice.alarmdic.model.dto.QueryAlarmDicDTO;
+import com.persagy.apm.alarmservice.alarmdic.service.AlarmDicServiceImpl;
+import com.persagy.apm.common.enums.AlarmDicTypeEnum;
 import com.persagy.apm.common.model.vo.EnumVO;
 import com.persagy.apm.common.model.vo.EnumVO;
 import com.persagy.apm.common.response.ApmResponseUpsertVO;
 import com.persagy.apm.common.response.ApmResponseUpsertVO;
 import com.persagy.apm.common.response.CommonResult;
 import com.persagy.apm.common.response.CommonResult;
@@ -9,6 +11,7 @@ import com.persagy.apm.common.response.PageList;
 import com.persagy.apm.common.utils.ResultHelper;
 import com.persagy.apm.common.utils.ResultHelper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -28,11 +31,44 @@ import java.util.List;
 @RestController
 @RestController
 @RequestMapping("alarmDic")
 @RequestMapping("alarmDic")
 public class AlarmDicController {
 public class AlarmDicController {
+    @Autowired
+    AlarmDicServiceImpl alarmDicService;
+
     @ApiOperation(value = "查询报警字典数据")
     @ApiOperation(value = "查询报警字典数据")
     @PostMapping("/query")
     @PostMapping("/query")
     public CommonResult<PageList<EnumVO>> queryAlarmDic(
     public CommonResult<PageList<EnumVO>> queryAlarmDic(
             @Valid @RequestBody QueryAlarmDicDTO queryAlarmDicDTO) {
             @Valid @RequestBody QueryAlarmDicDTO queryAlarmDicDTO) {
-        List<EnumVO> resultList = new ArrayList<>();
+        String type = queryAlarmDicDTO.getType();
+        List<EnumVO> resultList;
+        // 如果未获取到需要查询的字典类型,返回空列表
+        AlarmDicTypeEnum dicTypeEnum = AlarmDicTypeEnum.getByType(type);
+        if (dicTypeEnum == null) {
+            resultList = new ArrayList<>();
+            return ResultHelper.multi(resultList);
+        }
+
+        switch (dicTypeEnum) {
+            case ALARM_CATEGORY:
+                resultList = alarmDicService.queryCategoryEnum();
+                break;
+            case ALARM_LEVEL:
+                resultList = alarmDicService.queryLevelEnum();
+                break;
+            case ALARM_NATURE:
+                resultList = alarmDicService.queryNatureEnum();
+                break;
+            case ALARM_STATE:
+                resultList = alarmDicService.queryStateEnum();
+                break;
+            case ALARM_TREAT_MODE:
+                resultList = alarmDicService.queryTreatModeEnum();
+                break;
+            case ALARM_TREAT_STATE:
+                resultList = alarmDicService.queryTreatStateEnum();
+                break;
+            default:
+                resultList = new ArrayList<>();
+        }
         return ResultHelper.multi(resultList);
         return ResultHelper.multi(resultList);
     }
     }
 }
 }

+ 127 - 0
src/main/java/com/persagy/apm/alarmservice/alarmdic/service/AlarmDicServiceImpl.java

@@ -0,0 +1,127 @@
+package com.persagy.apm.alarmservice.alarmdic.service;
+
+import com.persagy.apm.alarmservice.alarmrecord.enums.*;
+import com.persagy.apm.common.model.vo.EnumVO;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 报警字典实现类
+ *
+ * @author lixing
+ * @version V1.0 2021/5/17 11:00 上午
+ **/
+@Service
+public class AlarmDicServiceImpl {
+    /**
+     * 查询报警系统
+     *
+     * @return 报警系统
+     * @author lixing
+     * @version V1.0 2021/9/20 11:18 上午
+     */
+    public List<EnumVO> queryCategoryEnum() {
+        List<EnumVO> resultList = new ArrayList<>(EnumAlarmCategory.values().length);
+        Arrays.asList(EnumAlarmCategory.values()).forEach(item -> {
+            EnumVO enumVO = new EnumVO();
+            enumVO.setKey(item.getType());
+            enumVO.setValue(item.getDesc());
+            resultList.add(enumVO);
+        });
+        return resultList;
+    }
+
+    /**
+     * 查询报警等级
+     *
+     * @return 报警系统
+     * @author lixing
+     * @version V1.0 2021/9/20 11:18 上午
+     */
+    public List<EnumVO> queryLevelEnum() {
+        List<EnumVO> resultList = new ArrayList<>(EnumAlarmLevel.values().length);
+        Arrays.asList(EnumAlarmLevel.values()).forEach(item -> {
+            EnumVO enumVO = new EnumVO();
+            enumVO.setKey(item.getType());
+            enumVO.setValue(item.getDesc());
+            resultList.add(enumVO);
+        });
+        return resultList;
+    }
+
+    /**
+     * 查询报警性质
+     *
+     * @return 报警性质
+     * @author lixing
+     * @version V1.0 2021/9/20 11:18 上午
+     */
+    public List<EnumVO> queryNatureEnum() {
+        List<EnumVO> resultList = new ArrayList<>(EnumAlarmNature.values().length);
+        Arrays.asList(EnumAlarmNature.values()).forEach(item -> {
+            EnumVO enumVO = new EnumVO();
+            enumVO.setKey(item.getType());
+            enumVO.setValue(item.getDesc());
+            resultList.add(enumVO);
+        });
+        return resultList;
+    }
+
+    /**
+     * 查询报警处理方式
+     *
+     * @return 报警处理方式
+     * @author lixing
+     * @version V1.0 2021/9/20 11:18 上午
+     */
+    public List<EnumVO> queryTreatModeEnum() {
+        List<EnumVO> resultList = new ArrayList<>(EnumAlarmTreatMode.values().length);
+        Arrays.asList(EnumAlarmTreatMode.values()).forEach(item -> {
+            EnumVO enumVO = new EnumVO();
+            enumVO.setKey(item.getType());
+            enumVO.setValue(item.getDesc());
+            resultList.add(enumVO);
+        });
+        return resultList;
+    }
+
+    /**
+     * 查询报警处理状态
+     *
+     * @return 报警处理方式
+     * @author lixing
+     * @version V1.0 2021/9/20 11:18 上午
+     */
+    public List<EnumVO> queryTreatStateEnum() {
+        List<EnumVO> resultList = new ArrayList<>(EnumAlarmTreatState.values().length);
+        Arrays.asList(EnumAlarmTreatState.values()).forEach(item -> {
+            EnumVO enumVO = new EnumVO();
+            enumVO.setKey(item.getType());
+            enumVO.setValue(item.getDesc());
+            resultList.add(enumVO);
+        });
+        return resultList;
+    }
+
+    /**
+     * 查询报警状态
+     *
+     * @return 报警状态
+     * @author lixing
+     * @version V1.0 2021/9/20 11:18 上午
+     */
+    public List<EnumVO> queryStateEnum() {
+        List<EnumVO> resultList = new ArrayList<>(EnumAlarmState.values().length);
+        Arrays.asList(EnumAlarmState.values()).forEach(item -> {
+            EnumVO enumVO = new EnumVO();
+            enumVO.setKey(item.getType());
+            enumVO.setValue(item.getDesc());
+            resultList.add(enumVO);
+        });
+        return resultList;
+    }
+
+}

+ 204 - 26
src/main/java/com/persagy/apm/alarmservice/alarmrecord/controller/AlarmRecordController.java

@@ -1,16 +1,37 @@
 package com.persagy.apm.alarmservice.alarmrecord.controller;
 package com.persagy.apm.alarmservice.alarmrecord.controller;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.apm.alarmservice.alarmrecord.enums.EnumAlarmTreatMode;
+import com.persagy.apm.alarmservice.alarmrecord.enums.EnumAlarmTreatState;
+import com.persagy.apm.alarmservice.alarmrecord.model.ConvertAlarmRecordTool;
 import com.persagy.apm.alarmservice.alarmrecord.model.dto.*;
 import com.persagy.apm.alarmservice.alarmrecord.model.dto.*;
 import com.persagy.apm.alarmservice.alarmrecord.model.vo.AlarmRecordIdsItem;
 import com.persagy.apm.alarmservice.alarmrecord.model.vo.AlarmRecordIdsItem;
-import com.persagy.apm.alarmservice.alarmrecord.model.vo.AlarmRecordItem;
+import com.persagy.apm.alarmservice.alarmrecord.model.vo.AlarmRecordItemVO;
 import com.persagy.apm.alarmservice.alarmrecord.model.vo.AlarmRecordListItem;
 import com.persagy.apm.alarmservice.alarmrecord.model.vo.AlarmRecordListItem;
+import com.persagy.apm.alarmservice.alarmrecord.service.AlarmRecordWrapper;
+import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeDetailVO;
+import com.persagy.apm.alarmservice.group.management.service.GroupManagementService;
+import com.persagy.apm.common.context.poems.PoemsContext;
+import com.persagy.apm.common.model.dto.Sort;
 import com.persagy.apm.common.response.CommonResult;
 import com.persagy.apm.common.response.CommonResult;
 import com.persagy.apm.common.response.PageList;
 import com.persagy.apm.common.response.PageList;
 import com.persagy.apm.common.utils.ResultHelper;
 import com.persagy.apm.common.utils.ResultHelper;
+import com.persagy.apm.energyalarmstarter.alarmdata.feign.DmpResult;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmrecord.BatchUpdateAlarmRecordDTO;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmrecord.QueryAlarmRecordDTO;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmrecord.UpdateAlarmRecordDTO;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.common.QueryDTO;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmRecordItem;
+import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmItemServiceImpl;
 import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmRecordServiceImpl;
 import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmRecordServiceImpl;
+import com.persagy.apm.model.dto.GroupManagementDTO;
+import com.persagy.apm.model.vo.GroupManagementVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
+import org.assertj.core.util.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -20,74 +41,231 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.validation.Valid;
 import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * 报警记录控制层
  * 报警记录控制层
+ *
  * @author lixing
  * @author lixing
  * @version V1.0 2021-09-08 22:30:38
  * @version V1.0 2021-09-08 22:30:38
  */
  */
-@Api(tags = "报警记录") 
+@Api(tags = "报警记录")
 @Validated
 @Validated
 @RestController
 @RestController
 @RequestMapping("alarm_records")
 @RequestMapping("alarm_records")
 public class AlarmRecordController {
 public class AlarmRecordController {
+    // alarm-data-starter中封装的服务
     @Autowired
     @Autowired
     AlarmRecordServiceImpl alarmRecordService;
     AlarmRecordServiceImpl alarmRecordService;
+    // alarm-data-starter中封装的服务
+    @Autowired
+    AlarmItemServiceImpl alarmItemService;
+    @Autowired
+    GroupManagementService groupManagementService;
+    @Autowired
+    AlarmRecordWrapper alarmRecordWrapper;
+
+    @ApiOperation(value = "当前报警列表")
+    @PostMapping("/current_list")
+    public CommonResult<PageList<AlarmRecordListItem>> queryCurrentAlarmRecord(
+            @Valid @RequestBody PageQueryAlarmRecordDTO pageQueryAlarmRecordDTO) throws Exception {
+        // 当前报警的默认查询条件为:报警处理状态为未处理和处理中
+        pageQueryAlarmRecordDTO.setAlarmTreatState(Lists.newArrayList(
+                EnumAlarmTreatState.UN_HANDLE.getType(),
+                EnumAlarmTreatState.HANDLING.getType()
+        ));
+        return queryAlarmRecord(pageQueryAlarmRecordDTO);
+    }
+
+    /**
+     * 查询报警记录
+     *
+     * @param pageQueryAlarmRecordDTO 查询条件
+     * @return 报警记录列表(分页)
+     * @author lixing
+     * @version V1.0 2021/9/20 6:32 下午
+     */
+    private CommonResult<PageList<AlarmRecordListItem>> queryAlarmRecord(
+            PageQueryAlarmRecordDTO pageQueryAlarmRecordDTO) throws Exception {
+        // 根据查询条件获取关联的设备
+        List<String> relatedObjIds = getRelatedObjIds(pageQueryAlarmRecordDTO);
+        // 从报警数据中台查询报警记录
+        QueryDTO<QueryAlarmRecordDTO> queryDTO = new QueryDTO<>();
+        queryDTO.setPage(pageQueryAlarmRecordDTO.getPage());
+        queryDTO.setSize(pageQueryAlarmRecordDTO.getSize());
+        QueryAlarmRecordDTO queryAlarmRecordDTO = ConvertAlarmRecordTool.INSTANCE.
+                convert2QueryAlarmRecordDTO(pageQueryAlarmRecordDTO);
+        queryDTO.setCriteria(queryAlarmRecordDTO);
+        queryAlarmRecordDTO.setObjId(relatedObjIds);
+        // 如果没有传排序字段,默认根据报警开始时间倒序排列
+        List<Sort> orders = pageQueryAlarmRecordDTO.getOrders();
+        if (CollectionUtils.isEmpty(orders)) {
+            Sort sort = new Sort();
+            sort.setColumn("triggerTime");
+            sort.setAsc(false);
+            orders = Lists.newArrayList(sort);
+            pageQueryAlarmRecordDTO.setOrders(orders);
+        }
+        DmpResult<List<AlarmRecordItem>> query = alarmRecordService.query(queryAlarmRecordDTO);
+        // 报警数据中台查询结果转换为报警业务中台报警记录
+        List<AlarmRecordListItem> resultList = alarmRecordWrapper.getAlarmRecordListItems(query);
+        // 封装分页结果
+        IPage<AlarmRecordListItem> result = new Page<>();
+        result.setTotal(query.getCount());
+        result.setRecords(resultList);
+        return ResultHelper.multi(result);
+    }
 
 
-	@ApiOperation(value = "当前报警列表")
-	@PostMapping("/current_list")
-	public CommonResult<PageList<AlarmRecordListItem>> queryCurrentAlarmRecord(
-	        @Valid @RequestBody PageQueryAlarmRecordDTO pageQueryAlarmRecordDTO) {
-        List<AlarmRecordListItem> resultList = new ArrayList<>();
-        return ResultHelper.multi(resultList);
-	}
+
+    /**
+     * 获取关联的报警对象
+     *
+     * @param pageQueryAlarmRecordDTO 报警查询条件
+     * @return 关联的报警对象id列表
+     * @author lixing
+     * @version V1.0 2021/9/18 7:12 下午
+     */
+    private List<String> getRelatedObjIds(PageQueryAlarmRecordDTO pageQueryAlarmRecordDTO) {
+        // 如果查询条件中存在分组,查询分组下的设备
+        List<String> groupIdList = pageQueryAlarmRecordDTO.getGroupId();
+        String objName = pageQueryAlarmRecordDTO.getObjName();
+        objName = objName == null ? null : objName.trim();
+        /* 如果查询条件中包含项目id列表,使用查询条件中的项目查询
+         * 如果查询条件中没有分组信息,获取所有分组下的设备
+         */
+        List<String> projectIdList = pageQueryAlarmRecordDTO.getProjectIds();
+        if (CollectionUtils.isEmpty(projectIdList) && PoemsContext.getContext().getProjectId() != null) {
+            projectIdList = Lists.newArrayList(PoemsContext.getContext().getProjectId());
+        }
+
+        if (!CollectionUtils.isEmpty(groupIdList)) {
+            List<GroupTreeDetailVO> groupTreeDetailVOS = groupManagementService.queryAllLeafGroups();
+            groupIdList = groupTreeDetailVOS.stream().map(GroupTreeDetailVO::getId).collect(Collectors.toList());
+        }
+
+        List<GroupManagementVo> equipList = new ArrayList<>();
+
+        for (String groupId : groupIdList) {
+            GroupTreeDetailVO group = groupManagementService.getGroup(groupId);
+            // 查询分组下的设备
+            GroupManagementDTO groupManagementDTO = new GroupManagementDTO();
+            groupManagementDTO.setLocalName(objName);
+            groupManagementDTO.setClassCode(group.getClassCode());
+            groupManagementDTO.setCondition(group.getCondition());
+            // 如果项目id列表为空,查询分组下的所有设备
+            if (CollectionUtils.isEmpty(projectIdList)) {
+                equipList.addAll(groupManagementService.getEquipList(groupManagementDTO));
+            } else {
+                for (String projectId : projectIdList) {
+                    groupManagementDTO.setProjectId(projectId);
+                    equipList.addAll(groupManagementService.getEquipList(groupManagementDTO));
+                }
+            }
+        }
+
+        return equipList.stream().map(GroupManagementVo::getId).collect(Collectors.toList());
+    }
 
 
     @ApiOperation(value = "历史报警列表")
     @ApiOperation(value = "历史报警列表")
     @PostMapping("/history_list")
     @PostMapping("/history_list")
     public CommonResult<PageList<AlarmRecordListItem>> queryHistoryAlarmRecord(
     public CommonResult<PageList<AlarmRecordListItem>> queryHistoryAlarmRecord(
-            @Valid @RequestBody PageQueryAlarmRecordDTO pageQueryAlarmRecordDTO) {
-        List<AlarmRecordListItem> resultList = new ArrayList<>();
-        return ResultHelper.multi(resultList);
+            @Valid @RequestBody PageQueryAlarmRecordDTO pageQueryAlarmRecordDTO) throws Exception {
+        // 历史报警的默认查询条件为:报警处理状态为处理完成
+        pageQueryAlarmRecordDTO.setAlarmTreatState(Lists.newArrayList(
+                EnumAlarmTreatState.DONE.getType()
+        ));
+        return queryAlarmRecord(pageQueryAlarmRecordDTO);
     }
     }
 
 
     @ApiOperation(value = "已忽略报警列表")
     @ApiOperation(value = "已忽略报警列表")
     @PostMapping("/ignored_list")
     @PostMapping("/ignored_list")
     public CommonResult<PageList<AlarmRecordListItem>> queryIgnoredAlarmRecord(
     public CommonResult<PageList<AlarmRecordListItem>> queryIgnoredAlarmRecord(
-            @Valid @RequestBody PageQueryAlarmRecordDTO pageQueryAlarmRecordDTO) {
-        List<AlarmRecordListItem> resultList = new ArrayList<>();
-        return ResultHelper.multi(resultList);
+            @Valid @RequestBody PageQueryAlarmRecordDTO pageQueryAlarmRecordDTO) throws Exception {
+        // 历史报警的默认查询条件为:报警处理状态为已忽略
+        pageQueryAlarmRecordDTO.setAlarmTreatState(Lists.newArrayList(
+                EnumAlarmTreatState.IGNORE.getType()
+        ));
+        return queryAlarmRecord(pageQueryAlarmRecordDTO);
     }
     }
 
 
     @ApiOperation(value = "关闭报警")
     @ApiOperation(value = "关闭报警")
     @PostMapping("/close")
     @PostMapping("/close")
     public CommonResult<AlarmRecordIdsItem> closeAlarmRecord(
     public CommonResult<AlarmRecordIdsItem> closeAlarmRecord(
-            @Valid @RequestBody CloseAlarmRecordDTO closeAlarmRecordDTO) {
+            @Valid @RequestBody CloseAlarmRecordDTO closeAlarmRecordDTO) throws Exception {
+        // 报警处理方式更新为关闭报警,报警状态更新为已完成
+        String treatMode = EnumAlarmTreatMode.CLOSE.getType();
+        String treatState = EnumAlarmTreatState.DONE.getType();
+        List<String> recordIds = closeAlarmRecordDTO.getIds();
+
+        return updateAlarmRecordTreatState(treatMode, treatState, recordIds);
+    }
+
+    /**
+     * 更新报警记录处理状态
+     *
+     * @param treatMode  处理方式
+     * @param treatState 处理状态
+     * @param recordIds  报警记录id列表
+     * @return 报警记录id列表
+     * @author lixing
+     * @version V1.0 2021/9/20 7:25 下午
+     */
+    private CommonResult<AlarmRecordIdsItem> updateAlarmRecordTreatState(
+            String treatMode, String treatState, List<String> recordIds) throws Exception {
         AlarmRecordIdsItem alarmRecordIdsItem = new AlarmRecordIdsItem();
         AlarmRecordIdsItem alarmRecordIdsItem = new AlarmRecordIdsItem();
+
+        if (CollectionUtils.isEmpty(recordIds)) {
+            return ResultHelper.single(alarmRecordIdsItem);
+        }
+
+        List<UpdateAlarmRecordDTO> updateAlarmRecordDTOList = new ArrayList<>();
+        for (String recordId : recordIds) {
+            UpdateAlarmRecordDTO updateAlarmRecordDTO = new UpdateAlarmRecordDTO();
+            updateAlarmRecordDTO.setId(recordId);
+            updateAlarmRecordDTO.setTreatMode(Integer.valueOf(treatMode));
+            updateAlarmRecordDTO.setTreatState(Integer.valueOf(treatState));
+            updateAlarmRecordDTOList.add(updateAlarmRecordDTO);
+            alarmRecordIdsItem.setIds(recordIds);
+        }
+        BatchUpdateAlarmRecordDTO batchUpdateAlarmRecordDTO = new BatchUpdateAlarmRecordDTO();
+        batchUpdateAlarmRecordDTO.setAlarmRecords(updateAlarmRecordDTOList);
+
+        alarmRecordService.batchUpdate(batchUpdateAlarmRecordDTO);
         return ResultHelper.single(alarmRecordIdsItem);
         return ResultHelper.single(alarmRecordIdsItem);
     }
     }
 
 
     @ApiOperation(value = "转工单")
     @ApiOperation(value = "转工单")
     @PostMapping("/convert_work_order")
     @PostMapping("/convert_work_order")
     public CommonResult<AlarmRecordIdsItem> alarmRecordConvertWorkOrder(
     public CommonResult<AlarmRecordIdsItem> alarmRecordConvertWorkOrder(
-            @Valid @RequestBody AlarmRecordConvertWorkOrderDTO alarmRecordConvertWorkOrderDTO) {
-        AlarmRecordIdsItem alarmRecordIdsItem = new AlarmRecordIdsItem();
-        return ResultHelper.single(alarmRecordIdsItem);
+            @Valid @RequestBody AlarmRecordConvertWorkOrderDTO alarmRecordConvertWorkOrderDTO) throws Exception {
+        // 报警处理方式更新为转工单,报警状态更新为处理中
+        String treatMode = EnumAlarmTreatMode.ORDER.getType();
+        String treatState = EnumAlarmTreatState.HANDLING.getType();
+        List<String> recordIds = alarmRecordConvertWorkOrderDTO.getIds();
+
+        return updateAlarmRecordTreatState(treatMode, treatState, recordIds);
     }
     }
 
 
     @ApiOperation(value = "忽略")
     @ApiOperation(value = "忽略")
     @PostMapping("/ignore")
     @PostMapping("/ignore")
     public CommonResult<AlarmRecordIdsItem> ignoreAlarmRecord(
     public CommonResult<AlarmRecordIdsItem> ignoreAlarmRecord(
-            @Valid @RequestBody IgnoreAlarmRecordDTO ignoreAlarmRecordDTO) {
-        AlarmRecordIdsItem alarmRecordIdsItem = new AlarmRecordIdsItem();
-        return ResultHelper.single(alarmRecordIdsItem);
+            @Valid @RequestBody IgnoreAlarmRecordDTO ignoreAlarmRecordDTO) throws Exception {
+        // 报警处理方式更新为忽略,报警状态更新为已忽略
+        String treatMode = EnumAlarmTreatMode.IGNORE.getType();
+        String treatState = EnumAlarmTreatState.IGNORE.getType();
+        List<String> recordIds = ignoreAlarmRecordDTO.getIds();
+
+        return updateAlarmRecordTreatState(treatMode, treatState, recordIds);
     }
     }
 
 
     @ApiOperation(value = "报警详情")
     @ApiOperation(value = "报警详情")
     @PostMapping("/get")
     @PostMapping("/get")
-    public CommonResult<AlarmRecordItem> getAlarmRecord(
-            @Valid @RequestBody GetAlarmRecordDTO getAlarmRecordDTO) {
-        AlarmRecordItem alarmRecordItem = new AlarmRecordItem();
-        return ResultHelper.single(alarmRecordItem);
+    public CommonResult<AlarmRecordItemVO> getAlarmRecord(
+            @Valid @RequestBody GetAlarmRecordDTO getAlarmRecordDTO) throws Exception {
+        AlarmRecordItem alarmRecord = alarmRecordWrapper.getAlarmRecord(getAlarmRecordDTO.getId());
+        AlarmRecordItemVO alarmRecordItemVO = alarmRecordWrapper.convert2AlarmRecordItemVO(alarmRecord);
+        // 报警触发条件
+        return ResultHelper.single(alarmRecordItemVO);
     }
     }
 
 
     @ApiOperation(value = "下载")
     @ApiOperation(value = "下载")

+ 62 - 0
src/main/java/com/persagy/apm/alarmservice/alarmrecord/enums/EnumAlarmCategory.java

@@ -0,0 +1,62 @@
+package com.persagy.apm.alarmservice.alarmrecord.enums;
+
+import com.persagy.apm.common.enums.AlarmDicTypeEnum;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * 报警系统
+ *
+ * @author lixing
+ * @version V1.0 2021/9/20 11:08 上午
+ **/
+@AllArgsConstructor
+public enum EnumAlarmCategory {
+    /**
+     * 报警系统
+     */
+    EQ("Eq", "设备报警"),
+    SP("Sp", "空间报警"),
+    SY("Sy", "系统报警"),
+    SAFE("Safe", "安全报警"),
+    RUN("Run", "高效运行报警"),
+    ENV("Env", "环境报警"),
+    ENERGY("Energy", "能源报警"),
+    TENANT("Tenant", "租户报警"),
+    ELECTRIC("Electric", "配电报警"),
+    CS("CS", "冷站能效报警"),
+    IOT("iot", "数据质量报警"),
+    BIM("Bim", "BIM报警"),
+    EQDX("Eqdx", "设备运行诊断报警");
+
+    @Setter
+    @Getter
+    private String type;
+
+    @Setter
+    @Getter
+    private String desc;
+
+    /**
+     * 根据type获取到枚举对象
+     *
+     * @param type 枚举type值
+     * @return 枚举对象
+     * @author lixing
+     * @version V1.0 2021/5/31 4:06 下午
+     */
+    public static EnumAlarmCategory getByType(String type) {
+        if (StringUtils.isBlank(type)) {
+            return null;
+        }
+        EnumAlarmCategory[] enums = EnumAlarmCategory.values();
+        for (EnumAlarmCategory item : enums) {
+            if (type.equals(item.getType())) {
+                return item;
+            }
+        }
+        return null;
+    }
+}

+ 51 - 0
src/main/java/com/persagy/apm/alarmservice/alarmrecord/enums/EnumAlarmLevel.java

@@ -0,0 +1,51 @@
+package com.persagy.apm.alarmservice.alarmrecord.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * 报警等级
+ *
+ * @author lixing
+ * @version V1.0 2021/9/20 11:08 上午
+ **/
+@AllArgsConstructor
+public enum EnumAlarmLevel {
+    /**
+     * 报警等级
+     */
+    S("1", "高"),
+    A("2", "中"),
+    B("3", "低");
+
+    @Setter
+    @Getter
+    private String type;
+
+    @Setter
+    @Getter
+    private String desc;
+
+    /**
+     * 根据type获取到枚举对象
+     *
+     * @param type 枚举type值
+     * @return 枚举对象
+     * @author lixing
+     * @version V1.0 2021/5/31 4:06 下午
+     */
+    public static EnumAlarmLevel getByType(String type) {
+        if (StringUtils.isBlank(type)) {
+            return null;
+        }
+        EnumAlarmLevel[] enums = EnumAlarmLevel.values();
+        for (EnumAlarmLevel item : enums) {
+            if (type.equals(item.getType())) {
+                return item;
+            }
+        }
+        return null;
+    }
+}

+ 51 - 0
src/main/java/com/persagy/apm/alarmservice/alarmrecord/enums/EnumAlarmNature.java

@@ -0,0 +1,51 @@
+package com.persagy.apm.alarmservice.alarmrecord.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * 报警性质
+ *
+ * @author lixing
+ * @version V1.0 2021/9/20 11:08 上午
+ **/
+@AllArgsConstructor
+public enum EnumAlarmNature {
+    /**
+     * 报警性质
+     */
+    MISTAKE("1", "误报"),
+    TRUE("2", "真实报警"),
+    TEST("3", "测试报警");
+
+    @Setter
+    @Getter
+    private String type;
+
+    @Setter
+    @Getter
+    private String desc;
+
+    /**
+     * 根据type获取到枚举对象
+     *
+     * @param type 枚举type值
+     * @return 枚举对象
+     * @author lixing
+     * @version V1.0 2021/5/31 4:06 下午
+     */
+    public static EnumAlarmNature getByType(String type) {
+        if (StringUtils.isBlank(type)) {
+            return null;
+        }
+        EnumAlarmNature[] enums = EnumAlarmNature.values();
+        for (EnumAlarmNature item : enums) {
+            if (type.equals(item.getType())) {
+                return item;
+            }
+        }
+        return null;
+    }
+}

+ 51 - 0
src/main/java/com/persagy/apm/alarmservice/alarmrecord/enums/EnumAlarmState.java

@@ -0,0 +1,51 @@
+package com.persagy.apm.alarmservice.alarmrecord.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * 报警状态
+ *
+ * @author lixing
+ * @version V1.0 2021/9/20 11:08 上午
+ **/
+@AllArgsConstructor
+public enum EnumAlarmState {
+    /**
+     * 报警状态
+     */
+    UN_HANDLE("1", "未恢复"),
+    END("2", "已恢复"),
+    EXPIRE("3", "已过期");
+
+    @Setter
+    @Getter
+    private String type;
+
+    @Setter
+    @Getter
+    private String desc;
+
+    /**
+     * 根据type获取到枚举对象
+     *
+     * @param type 枚举type值
+     * @return 枚举对象
+     * @author lixing
+     * @version V1.0 2021/5/31 4:06 下午
+     */
+    public static EnumAlarmState getByType(String type) {
+        if (StringUtils.isBlank(type)) {
+            return null;
+        }
+        EnumAlarmState[] enums = EnumAlarmState.values();
+        for (EnumAlarmState item : enums) {
+            if (type.equals(item.getType())) {
+                return item;
+            }
+        }
+        return null;
+    }
+}

+ 51 - 0
src/main/java/com/persagy/apm/alarmservice/alarmrecord/enums/EnumAlarmTreatMode.java

@@ -0,0 +1,51 @@
+package com.persagy.apm.alarmservice.alarmrecord.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * 报警处理方式
+ *
+ * @author lixing
+ * @version V1.0 2021/9/20 11:08 上午
+ **/
+@AllArgsConstructor
+public enum EnumAlarmTreatMode {
+    /**
+     * 报警处理方式
+     */
+    IGNORE("1", "忽略"),
+    ORDER("2", "转工单"),
+    CLOSE("3", "关闭报警");
+
+    @Setter
+    @Getter
+    private String type;
+
+    @Setter
+    @Getter
+    private String desc;
+
+    /**
+     * 根据type获取到枚举对象
+     *
+     * @param type 枚举type值
+     * @return 枚举对象
+     * @author lixing
+     * @version V1.0 2021/5/31 4:06 下午
+     */
+    public static EnumAlarmTreatMode getByType(String type) {
+        if (StringUtils.isBlank(type)) {
+            return null;
+        }
+        EnumAlarmTreatMode[] enums = EnumAlarmTreatMode.values();
+        for (EnumAlarmTreatMode item : enums) {
+            if (type.equals(item.getType())) {
+                return item;
+            }
+        }
+        return null;
+    }
+}

+ 53 - 0
src/main/java/com/persagy/apm/alarmservice/alarmrecord/enums/EnumAlarmTreatState.java

@@ -0,0 +1,53 @@
+package com.persagy.apm.alarmservice.alarmrecord.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * 报警处理状态
+ *
+ * @author lixing
+ * @version V1.0 2021/9/20 11:08 上午
+ **/
+@AllArgsConstructor
+public enum EnumAlarmTreatState {
+    /**
+     * 报警处理状态
+     */
+    UN_HANDLE("1", "未处理"),
+    HANDLING("2", "处理中"),
+    DONE("3", "处理完成"),
+    // 用于兼容子系统业务,后期会移除该状态
+    IGNORE("4", "已忽略");
+
+    @Setter
+    @Getter
+    private String type;
+
+    @Setter
+    @Getter
+    private String desc;
+
+    /**
+     * 根据type获取到枚举对象
+     *
+     * @param type 枚举type值
+     * @return 枚举对象
+     * @author lixing
+     * @version V1.0 2021/5/31 4:06 下午
+     */
+    public static EnumAlarmTreatState getByType(String type) {
+        if (StringUtils.isBlank(type)) {
+            return null;
+        }
+        EnumAlarmTreatState[] enums = EnumAlarmTreatState.values();
+        for (EnumAlarmTreatState item : enums) {
+            if (type.equals(item.getType())) {
+                return item;
+            }
+        }
+        return null;
+    }
+}

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

@@ -0,0 +1,31 @@
+package com.persagy.apm.alarmservice.alarmrecord.model;
+
+import com.persagy.apm.alarmservice.alarmcondition.model.ConvertAlarmConditionTool;
+import com.persagy.apm.alarmservice.alarmrecord.model.dto.PageQueryAlarmRecordDTO;
+import com.persagy.apm.alarmservice.alarmrecord.model.vo.AlarmRecordListItem;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmrecord.QueryAlarmRecordDTO;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmRecordItem;
+import org.mapstruct.*;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 报警记录(AlarmRecord) dto、vo、do转换工具类
+ * @author lixing
+ * @version V1.0 2021-09-08 22:30:38
+ */
+@Mapper(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT,
+        nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
+public interface ConvertAlarmRecordTool {
+    ConvertAlarmRecordTool INSTANCE = Mappers.getMapper(ConvertAlarmRecordTool.class);
+
+    @Mappings({
+            @Mapping(source = "alarmLevel", target = "level"),
+            @Mapping(source = "triggerStartTime", target = "triggerDurationStart"),
+            @Mapping(source = "triggerEndTime", target = "triggerDurationEnd"),
+            @Mapping(source = "alarmItemCode", target = "itemCode"),
+            @Mapping(source = "alarmState", target = "state"),
+            @Mapping(source = "alarmTreatState", target = "treatState"),
+            @Mapping(source = "alarmTreatMode", target = "treatMode"),
+    })
+    QueryAlarmRecordDTO convert2QueryAlarmRecordDTO(PageQueryAlarmRecordDTO pageQueryAlarmRecordDTO);
+}

+ 4 - 0
src/main/java/com/persagy/apm/alarmservice/alarmrecord/model/dto/PageQueryAlarmRecordDTO.java

@@ -35,4 +35,8 @@ public class PageQueryAlarmRecordDTO extends PageDTO {
     private List<String> alarmTreatState;
     private List<String> alarmTreatState;
     @ApiModelProperty(value = "报警处理方式")
     @ApiModelProperty(value = "报警处理方式")
     private List<String> alarmTreatMode;
     private List<String> alarmTreatMode;
+    @ApiModelProperty(value = "报警系统")
+    private List<String> category;
+    @ApiModelProperty(value = "项目id")
+    private List<String> projectIds;
 }
 }

+ 1 - 1
src/main/java/com/persagy/apm/alarmservice/alarmrecord/model/vo/AlarmRecordItem.java

@@ -19,7 +19,7 @@ import java.util.List;
 @Data
 @Data
 @ApiModel
 @ApiModel
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class AlarmRecordItem {
+public class AlarmRecordItemVO {
     @ApiModelProperty(value = "id")
     @ApiModelProperty(value = "id")
     private String id;
     private String id;
     @ApiModelProperty(value = "分组")
     @ApiModelProperty(value = "分组")

+ 1 - 1
src/main/java/com/persagy/apm/alarmservice/alarmrecord/model/vo/AlarmRecordListItem.java

@@ -29,7 +29,7 @@ public class AlarmRecordListItem {
     private SimpleObjVO alarmItem;
     private SimpleObjVO alarmItem;
     @ApiModelProperty(value = "报警触发时间")
     @ApiModelProperty(value = "报警触发时间")
     private Date triggerTime;
     private Date triggerTime;
-    @ApiModelProperty(value = "报警持续时长")
+    @ApiModelProperty(value = "报警持续时长(小时)")
     private String duration;
     private String duration;
     @ApiModelProperty(value = "报警等级")
     @ApiModelProperty(value = "报警等级")
     private SimpleObjVO alarmLevel;
     private SimpleObjVO alarmLevel;

+ 341 - 0
src/main/java/com/persagy/apm/alarmservice/alarmrecord/service/AlarmRecordWrapper.java

@@ -0,0 +1,341 @@
+package com.persagy.apm.alarmservice.alarmrecord.service;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.apm.alarmservice.alarmcondition.model.vo.AlarmConditionStrItem;
+import com.persagy.apm.alarmservice.alarmrecord.enums.EnumAlarmLevel;
+import com.persagy.apm.alarmservice.alarmrecord.enums.EnumAlarmState;
+import com.persagy.apm.alarmservice.alarmrecord.enums.EnumAlarmTreatMode;
+import com.persagy.apm.alarmservice.alarmrecord.enums.EnumAlarmTreatState;
+import com.persagy.apm.alarmservice.alarmrecord.model.vo.AlarmRecordItemVO;
+import com.persagy.apm.alarmservice.alarmrecord.model.vo.AlarmRecordListItem;
+import com.persagy.apm.alarmservice.group.management.model.GroupManagement;
+import com.persagy.apm.alarmservice.group.management.service.GroupManagementService;
+import com.persagy.apm.common.model.vo.SimpleObjVO;
+import com.persagy.apm.energyalarmstarter.alarmdata.feign.DmpResult;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmitem.QueryAlarmItemDTO;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmrecord.QueryAlarmRecordDTO;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmItem;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmRecordItem;
+import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmItemServiceImpl;
+import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmRecordServiceImpl;
+import com.persagy.apm.energyalarmstarter.alarmdata.utils.DateUtils;
+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.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 报警记录包装类,提供对报警相关字段的转换方法
+ *
+ * @author lixing
+ * @version V1.0 2021/9/20 4:29 下午
+ **/
+@Service
+public class AlarmRecordWrapper {
+    @Autowired
+    AlarmItemServiceImpl alarmItemService;
+    @Autowired
+    GroupManagementService groupManagementService;
+    @Autowired
+    AlarmRecordServiceImpl alarmRecordService;
+
+    /**
+     * 获取报警类型编码和名称的映射
+     *
+     * @param itemCodes 报警类型编码列表
+     * @return 报警类型编码 -> simpleObjVO(id, name)
+     * @throws
+     * @author lixing
+     * @version V1.0 2021/9/20 4:31 下午
+     */
+    public Map<String, SimpleObjVO> getAlarmItemMap(List<String> itemCodes) throws Exception {
+        Map<String, SimpleObjVO> alarmItemMap = new HashMap<>();
+        QueryAlarmItemDTO queryAlarmItemDTO = new QueryAlarmItemDTO();
+        queryAlarmItemDTO.setCode(itemCodes);
+        DmpResult<List<AlarmItem>> alarmItemsResult = alarmItemService.query(queryAlarmItemDTO);
+        List<AlarmItem> alarmItems = alarmItemsResult.getData();
+        if (CollectionUtils.isEmpty(alarmItems)) {
+
+        }
+        alarmItemMap.putAll(alarmItems.stream().collect(Collectors.toMap(
+                AlarmItem::getId,
+                alarmItem -> new SimpleObjVO(alarmItem.getId(), alarmItem.getName()),
+                (k1, k2) -> k1
+        )));
+        return alarmItemMap;
+    }
+
+    /**
+     * 获取两个时间的时间间隔(小时)
+     *
+     * @param triggerTime 触发时间
+     * @param endTime     结束时间
+     * @return 两个时间的时间间隔(小时)
+     * @author lixing
+     * @version V1.0 2021/9/20 4:45 下午
+     */
+    public static String getAlarmDuration(Date triggerTime, Date endTime) {
+        if (endTime == null) {
+            endTime = new Date();
+        }
+        if (triggerTime == null) {
+            return null;
+        }
+
+        long durationNs = endTime.getTime() - triggerTime.getTime();
+        // ns/1000=s s/60=min min/60=hour
+        long durationHour = durationNs / (1000 * 60 * 60);
+        // 保留两位小数
+        BigDecimal bd = new BigDecimal(durationHour);
+        bd = bd.setScale(2, RoundingMode.HALF_UP);
+        return bd.toString();
+    }
+
+    /**
+     * 将报警数据中台的查询结果转换为报警服务中台的报警记录列表
+     *
+     * @param dmpResult 报警数据中台的查询结果
+     * @return 报警服务中台的报警记录列表
+     * @author lixing
+     * @version V1.0 2021/9/20 6:16 下午
+     */
+    public List<AlarmRecordListItem> getAlarmRecordListItems(DmpResult<List<AlarmRecordItem>> dmpResult) throws Exception {
+        // 获取查询结果中的设备
+        List<String> objIds = dmpResult.getData().stream().map(AlarmRecordItem::getObjId).collect(Collectors.toList());
+        // 获取这些设备所在的分组信息
+        Map<String, SimpleObjVO> objGroupMap = groupManagementService.queryObjGroup(objIds);
+        // 获取这些设备的名称
+        Map<String, GroupManagement> objMap = groupManagementService.queryEquipsByIds(objIds);
+        if (CollectionUtils.isEmpty(dmpResult.getData())) {
+            return new ArrayList<>();
+        }
+        // 获取查询结果中的报警类型
+        List<String> itemCodes = dmpResult.getData().stream().map(AlarmRecordItem::getItemCode).
+                collect(Collectors.toList());
+        Map<String, SimpleObjVO> alarmItemMap = getAlarmItemMap(itemCodes);
+
+        return dmpResult.getData().stream().map(alarmRecordItem ->
+                getAlarmRecordListItem(objGroupMap, objMap, alarmItemMap, alarmRecordItem)).
+                collect(Collectors.toList());
+    }
+
+    /**
+     * 将报警数据中台返回的一条记录转换为报警服务中台报警记录列表中的一条数据
+     *
+     * @param objGroupMap     报警对象id和分组的映射关系
+     * @param objMap          报警对象id和报警对象的映射关系
+     * @param alarmItemMap    报警类型编码和报警类型的映射关系
+     * @param alarmRecordItem 报警数据中台返回的一条报警记录
+     * @return 报警服务中台报警记录列表中的一条数据
+     * @author lixing
+     * @version V1.0 2021/9/20 6:21 下午
+     */
+    private AlarmRecordListItem getAlarmRecordListItem(
+            Map<String, SimpleObjVO> objGroupMap,
+            Map<String, GroupManagement> objMap,
+            Map<String, SimpleObjVO> alarmItemMap,
+            AlarmRecordItem alarmRecordItem) {
+        AlarmRecordListItem alarmRecordListItem = new AlarmRecordListItem();
+        alarmRecordListItem.setId(alarmRecordItem.getId());
+        alarmRecordListItem.setGroup(objGroupMap.get(alarmRecordItem.getObjId()));
+        GroupManagement objInfo = objMap.get(alarmRecordItem.getObjId());
+        alarmRecordListItem.setObj(new SimpleObjVO(alarmRecordItem.getObjId(),
+                objInfo == null ? null : objInfo.getLocalName()));
+        alarmRecordListItem.setAlarmItem(alarmItemMap.get(alarmRecordItem.getItemCode()));
+        alarmRecordListItem.setTriggerTime(alarmRecordItem.getTriggerTime());
+        // 计算报警的持续时长
+        alarmRecordListItem.setDuration(
+                AlarmRecordWrapper.getAlarmDuration(
+                        alarmRecordItem.getTriggerTime(),
+                        alarmRecordItem.getEndTime()
+                )
+        );
+        EnumAlarmLevel alarmLevel = EnumAlarmLevel.getByType(alarmRecordItem.getLevel());
+        if (alarmLevel != null) {
+            alarmRecordListItem.setAlarmLevel(new SimpleObjVO(
+                    alarmLevel.getType(), alarmLevel.getDesc()
+            ));
+        }
+
+        EnumAlarmState alarmState = EnumAlarmState.getByType(
+                String.valueOf(alarmRecordItem.getState()));
+        if (alarmState != null) {
+            alarmRecordListItem.setAlarmState(new SimpleObjVO(
+                    alarmState.getType(), alarmState.getDesc()
+            ));
+        }
+
+        EnumAlarmTreatState alarmTreatState = EnumAlarmTreatState.getByType(
+                String.valueOf(alarmRecordItem.getTreatState()));
+        if (alarmTreatState != null) {
+            alarmRecordListItem.setAlarmTreatState(new SimpleObjVO(
+                    alarmTreatState.getType(), alarmTreatState.getDesc()
+            ));
+        }
+
+        EnumAlarmTreatMode alarmTreatMode = EnumAlarmTreatMode.getByType(
+                String.valueOf(alarmRecordItem.getTreatMode()));
+        if (alarmTreatMode != null) {
+            alarmRecordListItem.setAlarmTreatMode(new SimpleObjVO(
+                    alarmTreatMode.getType(), alarmTreatMode.getDesc()
+            ));
+        }
+
+        return alarmRecordListItem;
+    }
+
+    /**
+     * 查看报警记录详情
+     *
+     * @param recordId 报警记录id
+     * @return 报警记录详情
+     * @author lixing
+     * @version V1.0 2021/9/21 3:54 下午
+     */
+    public AlarmRecordItem getAlarmRecord(String recordId) throws Exception {
+        QueryAlarmRecordDTO queryAlarmRecordDTO = new QueryAlarmRecordDTO();
+        queryAlarmRecordDTO.setId(Lists.newArrayList(recordId));
+        DmpResult<List<AlarmRecordItem>> result = alarmRecordService.query(queryAlarmRecordDTO);
+        if (result == null) {
+            return null;
+        }
+        List<AlarmRecordItem> data = result.getData();
+        if (CollectionUtils.isEmpty(data)) {
+            return null;
+        }
+        return data.get(0);
+    }
+
+    /**
+     * 将报警数据中台的报警记录封装为业务中台的报警记录对象
+     *
+     * @param alarmRecordItem 数据中台的报警记录
+     * @return 业务中台的报警记录对象
+     * @author lixing
+     * @version V1.0 2021/9/21 5:44 下午
+     */
+    public AlarmRecordItemVO convert2AlarmRecordItemVO(AlarmRecordItem alarmRecordItem) throws Exception {
+        if (alarmRecordItem == null) {
+            return null;
+        }
+        AlarmRecordItemVO alarmRecordItemVO = new AlarmRecordItemVO();
+        /* 报警基本信息 */
+        copyBasicInfo(alarmRecordItem, alarmRecordItemVO);
+        /* 报警条件 */
+        JSONObject condition = alarmRecordItem.getCondition();
+        AlarmConditionStrItem alarmConditionStrItem = new AlarmConditionStrItem();
+        // 报警规则
+        String rules = condition.getString("rules");
+        List<String> rulesList = JSONArray.parseArray(rules, String.class);
+        alarmConditionStrItem.setRules(rulesList);
+        // 报警触发时间转换为分钟
+        Integer triggerUphold = condition.getInteger("triggerUphold");
+        if (triggerUphold != null) {
+            triggerUphold = triggerUphold / 60;
+        }
+        String lastTimeInfo = "持续%s分钟满足报警触发规则,则产生报警";
+        alarmConditionStrItem.setLastTimeInfo(
+                String.format(lastTimeInfo, triggerUphold == null ? "--" : triggerUphold));
+        EnumAlarmLevel alarmLevel = EnumAlarmLevel.getByType(alarmRecordItem.getLevel());
+        if (alarmLevel != null) {
+            alarmConditionStrItem.setAlarmLevel(new SimpleObjVO(
+                    alarmLevel.getType(), alarmLevel.getDesc()
+            ));
+        }
+        alarmRecordItemVO.setAlarmCondition(alarmConditionStrItem);
+        return alarmRecordItemVO;
+    }
+
+    /**
+     * 将报警数据中台报警对象的基本信息复制到报警业务中台报警对象
+     *
+     * @param alarmRecordItem   报警数据中台报警对象
+     * @param alarmRecordItemVO 报警业务中台报警对象
+     * @author lixing
+     * @version V1.0 2021/9/22 3:41 下午
+     */
+    public void copyBasicInfo(AlarmRecordItem alarmRecordItem, AlarmRecordItemVO alarmRecordItemVO) throws Exception {
+        alarmRecordItemVO.setId(alarmRecordItem.getId());
+        Map<String, SimpleObjVO> objGroupMap = groupManagementService.queryObjGroup(
+                Lists.newArrayList(alarmRecordItem.getObjId()));
+        alarmRecordItemVO.setGroup(objGroupMap.get(alarmRecordItem.getObjId()));
+        // 获取这些设备的名称
+        Map<String, GroupManagement> objMap = groupManagementService.queryEquipsByIds(
+                Lists.newArrayList(alarmRecordItem.getObjId())
+        );
+        GroupManagement objInfo = objMap.get(alarmRecordItem.getObjId());
+        alarmRecordItemVO.setObj(new SimpleObjVO(alarmRecordItem.getObjId(),
+                objInfo == null ? null : objInfo.getLocalName()));
+        // 报警类型
+        Map<String, SimpleObjVO> alarmItemMap = getAlarmItemMap(Lists.newArrayList(alarmRecordItem.getItemCode()));
+        SimpleObjVO simpleObjVO = alarmItemMap.get(alarmRecordItem.getItemCode());
+        alarmRecordItemVO.setAlarmItem(simpleObjVO);
+
+        alarmRecordItemVO.setTriggerTime(alarmRecordItem.getTriggerTime());
+        alarmRecordItemVO.setEndTime(alarmRecordItem.getEndTime());
+        alarmRecordItemVO.setDuration(getAlarmDuration(alarmRecordItem.getTriggerTime(), alarmRecordItem.getEndTime()));
+
+        EnumAlarmLevel alarmLevel = EnumAlarmLevel.getByType(alarmRecordItem.getLevel());
+        if (alarmLevel != null) {
+            alarmRecordItemVO.setAlarmLevel(new SimpleObjVO(
+                    alarmLevel.getType(), alarmLevel.getDesc()
+            ));
+        }
+
+        EnumAlarmState alarmState = EnumAlarmState.getByType(
+                String.valueOf(alarmRecordItem.getState()));
+        if (alarmState != null) {
+            alarmRecordItemVO.setAlarmState(new SimpleObjVO(
+                    alarmState.getType(), alarmState.getDesc()
+            ));
+        }
+
+        EnumAlarmTreatState alarmTreatState = EnumAlarmTreatState.getByType(
+                String.valueOf(alarmRecordItem.getTreatState()));
+        if (alarmTreatState != null) {
+            alarmRecordItemVO.setAlarmTreatState(new SimpleObjVO(
+                    alarmTreatState.getType(), alarmTreatState.getDesc()
+            ));
+        }
+
+        EnumAlarmTreatMode alarmTreatMode = EnumAlarmTreatMode.getByType(
+                String.valueOf(alarmRecordItem.getTreatMode()));
+        if (alarmTreatMode != null) {
+            alarmRecordItemVO.setAlarmTreatMode(new SimpleObjVO(
+                    alarmTreatMode.getType(), alarmTreatMode.getDesc()
+            ));
+        }
+        /* 近30天报警触发次数 */
+        Integer count = getAlarmCountInMonth(alarmRecordItem.getTriggerTime(), alarmRecordItem.getItemCode());
+        alarmRecordItemVO.setAlarmCountInMonth(count);
+    }
+
+    /**
+     * 指定报警类型在指定日期前一个月内发生报警的次数
+     *
+     * @param date     指定日期
+     * @param itemCode 指定报警类型
+     * @return 发生报警的次数
+     * @author lixing
+     * @version V1.0 2021/9/22 3:43 下午
+     */
+    public Integer getAlarmCountInMonth(Date date, String itemCode) throws Exception {
+        if (date == null || StringUtils.isBlank(itemCode)) {
+            return 0;
+        }
+        QueryAlarmRecordDTO queryAlarmRecordDTO = new QueryAlarmRecordDTO();
+        queryAlarmRecordDTO.setTriggerDurationStart(
+                DateUtils.getMonthOff(date, -1));
+        queryAlarmRecordDTO.setTriggerDurationEnd(date);
+        queryAlarmRecordDTO.setItemCode(Lists.newArrayList(itemCode));
+        return alarmRecordService.queryCount(queryAlarmRecordDTO);
+    }
+
+}

+ 1 - 1
src/main/java/com/persagy/apm/alarmservice/calculatemethod/model/CalculateMethod.java

@@ -29,7 +29,7 @@ public class CalculateMethod extends AuditableEntity<CalculateMethod> implements
     private String monitorIndicatorId;
     private String monitorIndicatorId;
     
     
     @ApiModelProperty("是否是指标默认计算方式")
     @ApiModelProperty("是否是指标默认计算方式")
-    private Integer isDefault;
+    private String isDefault;
     
     
 
 
     public static String PROP_NAME = "name";
     public static String PROP_NAME = "name";

+ 1 - 1
src/main/java/com/persagy/apm/alarmservice/calculatemethod/model/dto/QueryCalculateMethodDTO.java

@@ -22,6 +22,6 @@ public class QueryCalculateMethodDTO {
     private String monitorIndicatorId;
     private String monitorIndicatorId;
     
     
     @ApiModelProperty(value = "是否是指标默认计算方式", required = true)
     @ApiModelProperty(value = "是否是指标默认计算方式", required = true)
-    private Integer isDefault;
+    private String isDefault;
     
     
 }
 }

+ 10 - 0
src/main/java/com/persagy/apm/alarmservice/calculatemethod/service/ICalculateMethodService.java

@@ -72,4 +72,14 @@ public interface ICalculateMethodService  {
     * @version V1.0 2021-09-08 22:43:58
     * @version V1.0 2021-09-08 22:43:58
     */
     */
     public IPage<CalculateMethod> pageQueryCalculateMethod(PageQueryCalculateMethodDTO pageQueryCalculateMethodDTO);
     public IPage<CalculateMethod> pageQueryCalculateMethod(PageQueryCalculateMethodDTO pageQueryCalculateMethodDTO);
+
+    /**
+     * 获取计算方式名称
+     *
+     * @param calculateMethodId 计算方式id
+     * @return 计算方式名称
+     * @author lixing
+     * @version V1.0 2021/9/17 9:46 下午
+     */
+    String getMethodName(String calculateMethodId);
 }
 }

+ 9 - 0
src/main/java/com/persagy/apm/alarmservice/calculatemethod/service/impl/CalculateMethodServiceImpl.java

@@ -206,4 +206,13 @@ public class CalculateMethodServiceImpl extends ServiceImpl<CalculateMethodMappe
                                     
                                     
         return getBaseMapper().selectPage(pageParam, queryWrapper);
         return getBaseMapper().selectPage(pageParam, queryWrapper);
     }
     }
+
+    @Override
+    public String getMethodName(String calculateMethodId) {
+        if (StringUtils.isBlank(calculateMethodId)) {
+            return null;
+        }
+        CalculateMethod calculateMethod = queryCalculateMethodDetail(calculateMethodId);
+        return calculateMethod.getName();
+    }
 }
 }

+ 14 - 10
src/main/java/com/persagy/apm/alarmservice/group/alarmrule/controller/GroupAlarmRuleController.java

@@ -1,26 +1,30 @@
 package com.persagy.apm.alarmservice.group.alarmrule.controller;
 package com.persagy.apm.alarmservice.group.alarmrule.controller;
 
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.persagy.apm.alarmservice.alarmcondition.service.IAlarmConditionService;
 import com.persagy.apm.alarmservice.alarmcondition.service.IAlarmConditionService;
 import com.persagy.apm.alarmservice.group.alarmrule.dao.GroupAlarmRuleMapper;
 import com.persagy.apm.alarmservice.group.alarmrule.dao.GroupAlarmRuleMapper;
+import com.persagy.apm.alarmservice.group.alarmrule.model.ConvertGroupAlarmRuleTool;
+import com.persagy.apm.alarmservice.group.alarmrule.model.GroupAlarmRule;
+import com.persagy.apm.alarmservice.group.alarmrule.model.dto.*;
+import com.persagy.apm.alarmservice.group.alarmrule.model.vo.GroupAlarmRuleItemVO;
+import com.persagy.apm.alarmservice.group.alarmrule.model.vo.GroupAlarmRuleListItemVO;
 import com.persagy.apm.alarmservice.group.alarmrule.service.IGroupAlarmRuleService;
 import com.persagy.apm.alarmservice.group.alarmrule.service.IGroupAlarmRuleService;
-
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.service.IProjectAlarmRuleObjRelService;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.service.IProjectAlarmRuleObjRelService;
+import com.persagy.apm.common.response.ApmResponseUpsertVO;
+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.energyalarmstarter.alarmdata.feign.DmpResult;
 import com.persagy.apm.energyalarmstarter.alarmdata.feign.DmpResult;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.QueryAlarmConfigDTO;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.QueryAlarmConfigDTO;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmConfigItem;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmConfigItem;
 import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmConfigServiceImpl;
 import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmConfigServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import com.persagy.apm.alarmservice.group.alarmrule.model.*;
-import com.persagy.apm.alarmservice.group.alarmrule.model.vo.*;
-import com.persagy.apm.alarmservice.group.alarmrule.model.dto.*;
-import com.persagy.apm.common.response.*;
-import com.persagy.apm.common.utils.ResultHelper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+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 springfox.documentation.annotations.ApiIgnore;
 import springfox.documentation.annotations.ApiIgnore;
 
 
 import javax.validation.Valid;
 import javax.validation.Valid;

+ 2 - 29
src/main/java/com/persagy/apm/alarmservice/group/management/controller/GroupManagementController.java

@@ -48,39 +48,12 @@ public class GroupManagementController {
         return ResultHelper.single(getGroupTree());
         return ResultHelper.single(getGroupTree());
     }
     }
 
 
-    
-    @ApiOperation(value = "获取分组名称")
+    @ApiOperation(value = "获取分组信息")
     @PostMapping("/eq_groups/get")
     @PostMapping("/eq_groups/get")
     public CommonResult<GroupTreeDetailVO> queryTreeById(@Valid @RequestBody EquipIdDTO equipIdDTO){
     public CommonResult<GroupTreeDetailVO> queryTreeById(@Valid @RequestBody EquipIdDTO equipIdDTO){
-        List<GroupTreeVO> groupTreeVOList = getGroupTree();
-        GroupTreeDetailVO groupTreeDetailVO = new GroupTreeDetailVO();
-        return ResultHelper.single(queryById(groupTreeVOList, groupTreeDetailVO, equipIdDTO.getId()));
+        return ResultHelper.single(managementService.getGroup(equipIdDTO.getId()));
     }
     }
     
     
-    /**
-     * 递归匹配符合条件的分组对象
-     * @param groupTreeVOList
-     * @param id
-     * @author 易涛
-     * @date 2021/9/8 14:50 
-     * @return com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeVO
-     */
-    private GroupTreeDetailVO queryById(List<GroupTreeVO> groupTreeVOList,GroupTreeDetailVO groupTreeDetailVO,String id){
-        for(GroupTreeVO groupTreeVO:groupTreeVOList){
-            if(StringUtils.isNotEmpty(groupTreeDetailVO.getId())){
-                return groupTreeDetailVO;
-            }
-            if(Objects.equals(groupTreeVO.getId(),id)){
-                BeanUtils.copyProperties(groupTreeVO,groupTreeDetailVO);
-                return groupTreeDetailVO;
-            }
-            if(CollectionUtils.isNotEmpty(groupTreeVO.getChildren())){
-                queryById(groupTreeVO.getChildren(),groupTreeDetailVO,id);
-            }
-        }
-        return groupTreeDetailVO;
-    }
-
     @ApiOperation(value = "分组条件(设备类+查询条件)+项目 获取设备  加上分页和根据设备名称查询")
     @ApiOperation(value = "分组条件(设备类+查询条件)+项目 获取设备  加上分页和根据设备名称查询")
     @PostMapping("/equips/query")
     @PostMapping("/equips/query")
     public CommonResult<PageList<GroupManagementVo>> equipsQuery(@Valid @RequestBody GroupManagementDTO managementDTO){
     public CommonResult<PageList<GroupManagementVo>> equipsQuery(@Valid @RequestBody GroupManagementDTO managementDTO){

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

@@ -0,0 +1,33 @@
+package com.persagy.apm.alarmservice.group.management.model;
+
+import com.persagy.apm.alarmservice.alarmcondition.model.AlarmCondition;
+import com.persagy.apm.alarmservice.alarmcondition.model.ConvertAlarmConditionTool;
+import com.persagy.apm.alarmservice.alarmcondition.model.vo.AlarmConditionItemVO;
+import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeDetailVO;
+import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.NullValueCheckStrategy;
+import org.mapstruct.NullValueMappingStrategy;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 分组转换工具类
+ *
+ * @author lixing
+ * @version V1.0 2021-09-08 22:30:38
+ */
+@Mapper(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT,
+        nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
+public interface ConvertGroupTool {
+    ConvertGroupTool INSTANCE = Mappers.getMapper(ConvertGroupTool.class);
+
+    /**
+     * 分组树节点对象转换为分组树节点详情对象
+     *
+     * @param groupTreeVO 分组树节点对象
+     * @return 分组树节点详情对象
+     * @author lixing
+     * @version V1.0 2021/9/19 1:25 下午
+     */
+    GroupTreeDetailVO convert2DetailDTO(GroupTreeVO groupTreeVO);
+}

+ 2 - 0
src/main/java/com/persagy/apm/alarmservice/group/management/model/GroupManagement.java

@@ -10,6 +10,8 @@ import org.springframework.data.elasticsearch.annotations.Setting;*/
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 
 
 /**
 /**
+ * 设备信息
+ *
  * @author 易涛
  * @author 易涛
  * @version 1.0
  * @version 1.0
  * @date 2021/9/7 18:11
  * @date 2021/9/7 18:11

+ 1 - 1
src/main/java/com/persagy/apm/alarmservice/group/management/model/vo/GroupTreeInfoVO.java

@@ -15,6 +15,6 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
 public class GroupTreeInfoVO extends GroupTreeDetailVO{
 public class GroupTreeInfoVO extends GroupTreeDetailVO{
 
 
-    @ApiModelProperty("分组id")
+    @ApiModelProperty("设备id")
     private String equipId;
     private String equipId;
 }
 }

+ 58 - 1
src/main/java/com/persagy/apm/alarmservice/group/management/service/GroupManagementService.java

@@ -1,13 +1,15 @@
 package com.persagy.apm.alarmservice.group.management.service;
 package com.persagy.apm.alarmservice.group.management.service;
 
 
+import com.persagy.apm.alarmservice.group.management.model.GroupManagement;
 import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeDetailVO;
 import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeDetailVO;
 import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeInfoVO;
 import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeInfoVO;
+import com.persagy.apm.common.model.vo.SimpleObjVO;
 import com.persagy.apm.common.response.PageList;
 import com.persagy.apm.common.response.PageList;
 import com.persagy.apm.model.dto.GroupManagementDTO;
 import com.persagy.apm.model.dto.GroupManagementDTO;
 import com.persagy.apm.model.vo.GroupManagementVo;
 import com.persagy.apm.model.vo.GroupManagementVo;
 
 
-import java.io.IOException;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * @author 易涛
  * @author 易涛
@@ -34,6 +36,16 @@ public interface GroupManagementService{
     GroupManagementVo equipsGet(String id);
     GroupManagementVo equipsGet(String id);
 
 
     /**
     /**
+     * 查询设备
+     *
+     * @param ids 设备id列表
+     * @return 设备id -> 设备信息 map
+     * @author lixing
+     * @version V1.0 2021/9/20 1:15 下午
+     */
+    Map<String, GroupManagement> queryEquipsByIds(List<String> ids);
+
+    /**
      * 根据设备id查询分组名称
      * 根据设备id查询分组名称
      * @param ids 设备id数组
      * @param ids 设备id数组
      * @author 易涛
      * @author 易涛
@@ -43,10 +55,55 @@ public interface GroupManagementService{
     List<GroupTreeInfoVO> equipsGroupQuery(List<String> ids);
     List<GroupTreeInfoVO> equipsGroupQuery(List<String> ids);
 
 
     /**
     /**
+     * 根据设备id查询分组名称
+     *
+     * @param objIds 设备id列表
+     * @return 设备id->分组名称映射
+     * @author lixing
+     * @version V1.0 2021/9/20 1:14 下午
+     */
+    Map<String, SimpleObjVO> queryObjGroup(List<String> objIds);
+
+    /**
      * 定时任务删除valid为0的数据
      * 定时任务删除valid为0的数据
      * @author 易涛
      * @author 易涛
      * @date 2021/9/14 15:55
      * @date 2021/9/14 15:55
      * @return void
      * @return void
      */
      */
     void batchDelete();
     void batchDelete();
+
+    /**
+     * 查询分组下的设备
+     * @param condition 分组查询条件
+     * @param classCode 设备类
+     * @return 分组下的设备
+     */
+    List<GroupManagementVo> getEquipList(String condition, String classCode);
+
+    /**
+     * 使用默认分页条件查询分组下的设备
+     *
+     * @param groupManagementDTO 查询条件
+     * @return 分组下的设备
+     */
+    List<GroupManagementVo> getEquipList(GroupManagementDTO groupManagementDTO);
+
+    /**
+     * 获取分组信息
+     *
+     * @param id 分组id
+     * @return 分组信息
+     * @author lixing
+     * @version V1.0 2021/9/18 7:03 下午
+     */
+    GroupTreeDetailVO getGroup(String id);
+
+    /**
+     * 查询所有叶子节点分组
+     *
+     * @return 所有可用分组的列表
+     * @author lixing
+     * @version V1.0 2021/9/19 1:02 下午
+     */
+    List<GroupTreeDetailVO> queryAllLeafGroups();
 }
 }

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

@@ -4,11 +4,13 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
-import com.persagy.apm.alarmservice.group.alarmrule.model.dto.AddGroupAlarmRuleDTO;
+import com.persagy.apm.alarmservice.group.management.model.ConvertGroupTool;
 import com.persagy.apm.alarmservice.group.management.model.GroupManagement;
 import com.persagy.apm.alarmservice.group.management.model.GroupManagement;
+import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeDetailVO;
 import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeInfoVO;
 import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeInfoVO;
 import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeVO;
 import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeVO;
 import com.persagy.apm.alarmservice.group.management.service.GroupManagementService;
 import com.persagy.apm.alarmservice.group.management.service.GroupManagementService;
+import com.persagy.apm.common.model.vo.SimpleObjVO;
 import com.persagy.apm.common.response.PageList;
 import com.persagy.apm.common.response.PageList;
 import com.persagy.apm.model.dto.GroupManagementDTO;
 import com.persagy.apm.model.dto.GroupManagementDTO;
 import com.persagy.apm.model.vo.GroupManagementVo;
 import com.persagy.apm.model.vo.GroupManagementVo;
@@ -40,10 +42,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 import static cn.hutool.core.util.StrUtil.*;
 import static cn.hutool.core.util.StrUtil.*;
@@ -68,22 +67,22 @@ public class GroupManagementServiceImpl implements GroupManagementService {
     public PageList<GroupManagementVo> equipsQuery(GroupManagementDTO managementDTO) {
     public PageList<GroupManagementVo> equipsQuery(GroupManagementDTO managementDTO) {
         List<GroupManagementVo> groupManagementVoList = new ArrayList<>();
         List<GroupManagementVo> groupManagementVoList = new ArrayList<>();
         BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
         BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
-        queryBuilder.must(QueryBuilders.matchQuery("class_code",managementDTO.getClassCode()));
-        queryBuilder.must(QueryBuilders.matchPhraseQuery("infos",managementDTO.getCondition()));
+        queryBuilder.must(QueryBuilders.matchQuery("class_code", managementDTO.getClassCode()));
+        queryBuilder.must(QueryBuilders.matchPhraseQuery("infos", managementDTO.getCondition()));
         //新增根据项目id查询设备
         //新增根据项目id查询设备
-        if(StringUtils.isNotEmpty(managementDTO.getProjectId())){
-            queryBuilder.must(QueryBuilders.termsQuery("project_id",managementDTO.getProjectId()));
+        if (StringUtils.isNotEmpty(managementDTO.getProjectId())) {
+            queryBuilder.must(QueryBuilders.termsQuery("project_id", managementDTO.getProjectId()));
         }
         }
         //模糊查询使用
         //模糊查询使用
-        if(StringUtils.isNotEmpty(managementDTO.getLocalName())) {
+        if (StringUtils.isNotEmpty(managementDTO.getLocalName())) {
             queryBuilder.must(QueryBuilders.matchQuery("local_name", managementDTO.getLocalName())
             queryBuilder.must(QueryBuilders.matchQuery("local_name", managementDTO.getLocalName())
                     .analyzer("keyword"));
                     .analyzer("keyword"));
         }
         }
-        queryBuilder.must(QueryBuilders.termQuery("valid",INTEGER_ONE));
+        queryBuilder.must(QueryBuilders.termQuery("valid", INTEGER_ONE));
         SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
         SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
         sourceBuilder.query(queryBuilder);
         sourceBuilder.query(queryBuilder);
-        sourceBuilder.from((Math.max(managementDTO.getCurrent(), INTEGER_ONE)-INTEGER_ONE)
-                *managementDTO.getSize());
+        sourceBuilder.from((Math.max(managementDTO.getCurrent(), INTEGER_ONE) - INTEGER_ONE)
+                * managementDTO.getSize());
         sourceBuilder.size(managementDTO.getSize());
         sourceBuilder.size(managementDTO.getSize());
         sourceBuilder.sort("create_time", SortOrder.DESC);
         sourceBuilder.sort("create_time", SortOrder.DESC);
         SearchRequest rq = new SearchRequest(INDEX_NAME);
         SearchRequest rq = new SearchRequest(INDEX_NAME);
@@ -91,7 +90,7 @@ public class GroupManagementServiceImpl implements GroupManagementService {
         try {
         try {
             SearchResponse searchResponse = client.search(rq, RequestOptions.DEFAULT);
             SearchResponse searchResponse = client.search(rq, RequestOptions.DEFAULT);
             // 根据状态和数据条数验证是否返回了数据
             // 根据状态和数据条数验证是否返回了数据
-            if (RestStatus.OK.equals(searchResponse.status())&&searchResponse.getHits().getTotalHits().value>0) {
+            if (RestStatus.OK.equals(searchResponse.status()) && searchResponse.getHits().getTotalHits().value > 0) {
                 SearchHits hits = searchResponse.getHits();
                 SearchHits hits = searchResponse.getHits();
                 for (SearchHit hit : hits) {
                 for (SearchHit hit : hits) {
                     // 将 JSON 转换成对象
                     // 将 JSON 转换成对象
@@ -99,19 +98,19 @@ public class GroupManagementServiceImpl implements GroupManagementService {
                     groupManagementVoList.add(managementVo);
                     groupManagementVoList.add(managementVo);
                 }
                 }
             }
             }
-            return new PageList<>(groupManagementVoList,searchResponse.getHits().getTotalHits().value);
-        }catch (IOException e){
-            throw new RuntimeException("es查询出错",e);
+            return new PageList<>(groupManagementVoList, searchResponse.getHits().getTotalHits().value);
+        } catch (IOException e) {
+            throw new RuntimeException("es查询出错", e);
         }
         }
     }
     }
 
 
     @Override
     @Override
     public GroupManagementVo equipsGet(String id) {
     public GroupManagementVo equipsGet(String id) {
         String equipStr = findEquipById(id);
         String equipStr = findEquipById(id);
-        if(StringUtils.isEmpty(equipStr)){
-            throw new RuntimeException("id为"+id+"的设备不存在");
+        if (StringUtils.isEmpty(equipStr)) {
+            throw new RuntimeException("id为" + id + "的设备不存在");
         }
         }
-        return JSONObject.parseObject(equipStr,GroupManagementVo.class);
+        return JSONObject.parseObject(equipStr, GroupManagementVo.class);
     }
     }
 
 
     /**
     /**
@@ -119,39 +118,46 @@ public class GroupManagementServiceImpl implements GroupManagementService {
      * @param id 设备id
      * @param id 设备id
      * @author 易涛
      * @author 易涛
      * @date 2021/9/10 10:05
      * @date 2021/9/10 10:05
-     * @return java.lang.String
      */
      */
-    private String findEquipById(String id){
-        GetRequest getRequest = new GetRequest(INDEX_NAME,id);
+    private String findEquipById(String id) {
+        GetRequest getRequest = new GetRequest(INDEX_NAME, id);
         try {
         try {
-            GetResponse getResponse = client.get(getRequest,RequestOptions.DEFAULT);
-            if(getResponse.isExists()){
+            GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
+            if (getResponse.isExists()) {
                 return getResponse.getSourceAsString();
                 return getResponse.getSourceAsString();
             }
             }
-        }catch (IOException e){
-            throw new RuntimeException("es查询出错",e);
+        } catch (IOException e) {
+            throw new RuntimeException("es查询出错", e);
         }
         }
         return null;
         return null;
     }
     }
 
 
-    private List<GroupManagement> findEquipsByIds(List<String> ids){
-        if(CollectionUtils.isEmpty(ids)||ids.size()>100){
+    /**
+     * 查询设备
+     *
+     * @param ids 设备id列表
+     * @return 设备列表
+     * @author lixing
+     * @version V1.0 2021/9/20 1:15 下午
+     */
+    private List<GroupManagement> findEquipsByIds(List<String> ids) {
+        if (CollectionUtils.isEmpty(ids) || ids.size() > 100) {
             throw new RuntimeException("批量查询的数据过短或过长");
             throw new RuntimeException("批量查询的数据过短或过长");
         }
         }
         List<GroupManagement> managementList = new ArrayList<>();
         List<GroupManagement> managementList = new ArrayList<>();
         BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
         BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
-        queryBuilder.must(QueryBuilders.termsQuery("id.keyword",ids));
+        queryBuilder.must(QueryBuilders.termsQuery("id.keyword", ids));
         SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
         SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
         sourceBuilder.query(queryBuilder);
         sourceBuilder.query(queryBuilder);
         sourceBuilder.from(INTEGER_ZERO);
         sourceBuilder.from(INTEGER_ZERO);
         sourceBuilder.size(ids.size());
         sourceBuilder.size(ids.size());
-        sourceBuilder.sort("create_time",SortOrder.DESC);
+        sourceBuilder.sort("create_time", SortOrder.DESC);
         SearchRequest rq = new SearchRequest(INDEX_NAME);
         SearchRequest rq = new SearchRequest(INDEX_NAME);
         rq.source(sourceBuilder);
         rq.source(sourceBuilder);
         try {
         try {
             SearchResponse searchResponse = client.search(rq, RequestOptions.DEFAULT);
             SearchResponse searchResponse = client.search(rq, RequestOptions.DEFAULT);
             // 根据状态和数据条数验证是否返回了数据
             // 根据状态和数据条数验证是否返回了数据
-            if (RestStatus.OK.equals(searchResponse.status())&&searchResponse.getHits().getTotalHits().value>0) {
+            if (RestStatus.OK.equals(searchResponse.status()) && searchResponse.getHits().getTotalHits().value > 0) {
                 SearchHits hits = searchResponse.getHits();
                 SearchHits hits = searchResponse.getHits();
                 for (SearchHit hit : hits) {
                 for (SearchHit hit : hits) {
                     // 将 JSON 转换成对象
                     // 将 JSON 转换成对象
@@ -159,13 +165,24 @@ public class GroupManagementServiceImpl implements GroupManagementService {
                     managementList.add(management);
                     managementList.add(management);
                 }
                 }
             }
             }
-        }catch (IOException e){
-            throw new RuntimeException("es查询出错",e);
+        } catch (IOException e) {
+            throw new RuntimeException("es查询出错", e);
         }
         }
         return managementList;
         return managementList;
     }
     }
 
 
     @Override
     @Override
+    public Map<String, GroupManagement> queryEquipsByIds(List<String> ids) {
+        List<GroupManagement> equipsByIds = findEquipsByIds(ids);
+        if (CollectionUtils.isEmpty(equipsByIds)) {
+            return new HashMap<>();
+        }
+        return equipsByIds.stream().collect(Collectors.toMap(
+                GroupManagement::getId, equip -> equip, (k1,k2) -> k1
+        ));
+    }
+
+    @Override
     public List<GroupTreeInfoVO> equipsGroupQuery(List<String> ids) {
     public List<GroupTreeInfoVO> equipsGroupQuery(List<String> ids) {
         List<GroupTreeInfoVO> groupTreeInfoVOList = Lists.newArrayList();
         List<GroupTreeInfoVO> groupTreeInfoVOList = Lists.newArrayList();
         List<GroupManagement> groupManagementList = findEquipsByIds(ids);
         List<GroupManagement> groupManagementList = findEquipsByIds(ids);
@@ -173,9 +190,9 @@ public class GroupManagementServiceImpl implements GroupManagementService {
             if(StringUtils.isEmpty(management.getInfos())){
             if(StringUtils.isEmpty(management.getInfos())){
                 return groupTreeInfoVOList;
                 return groupTreeInfoVOList;
             }
             }
-            String infos = management.getInfos().replace(DELIM_START,"")
-                    .replace(DELIM_END,"").replace("\"","")
-                    .replace(BACKSLASH,"").replace(" ","")
+            String infos = management.getInfos().replace(DELIM_START, "")
+                    .replace(DELIM_END, "").replace("\"", "")
+                    .replace(BACKSLASH, "").replace(" ", "")
                     .trim();
                     .trim();
             if (StringUtils.isEmpty(infos)) {
             if (StringUtils.isEmpty(infos)) {
                 return groupTreeInfoVOList;
                 return groupTreeInfoVOList;
@@ -194,30 +211,45 @@ public class GroupManagementServiceImpl implements GroupManagementService {
         return groupTreeInfoVOList;
         return groupTreeInfoVOList;
     }
     }
 
 
+    @Override
+    public Map<String, SimpleObjVO> queryObjGroup(List<String> objIds) {
+        List<GroupTreeInfoVO> groupTreeInfoVOS = equipsGroupQuery(objIds);
+        if (CollectionUtils.isEmpty(groupTreeInfoVOS)) {
+            return new HashMap<>();
+        }
+        return groupTreeInfoVOS.stream().collect(Collectors.toMap(
+                GroupTreeInfoVO::getEquipId,
+                groupTreeInfoVO -> new SimpleObjVO(groupTreeInfoVO.getId(), groupTreeInfoVO.getName()),
+                (k1,k2) -> k1
+        ));
+    }
+
     /**
     /**
      * 递归匹配condition
      * 递归匹配condition
+     *
      * @param groupTreeVOList
      * @param groupTreeVOList
      * @param infoVO
      * @param infoVO
      * @param infoMap
      * @param infoMap
      * @param equipId
      * @param equipId
+     * @return com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeInfoVO
      * @author 易涛
      * @author 易涛
      * @date 2021/9/10 11:24
      * @date 2021/9/10 11:24
-     * @return com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeInfoVO
      */
      */
-    private GroupTreeInfoVO queryGroupName(List<GroupTreeVO> groupTreeVOList,GroupTreeInfoVO infoVO,
-                                           Map<String, String> infoMap,String equipId){
-        for(GroupTreeVO groupTreeVO:groupTreeVOList){
-            if(StringUtils.isNotEmpty(infoVO.getId())){
+    private GroupTreeInfoVO queryGroupName(
+            List<GroupTreeVO> groupTreeVOList, GroupTreeInfoVO infoVO,
+            Map<String, String> infoMap, String equipId) {
+        for (GroupTreeVO groupTreeVO : groupTreeVOList) {
+            if (StringUtils.isNotEmpty(infoVO.getId())) {
                 return infoVO;
                 return infoVO;
             }
             }
             //排除掉配置的时候存在不小心放入空格的情况
             //排除掉配置的时候存在不小心放入空格的情况
-            if(infoMap.containsKey(groupTreeVO.getCondition().replace(" ",""))){
-                BeanUtils.copyProperties(groupTreeVO,infoVO);
+            if (infoMap.containsKey(groupTreeVO.getCondition().replace(" ", ""))) {
+                BeanUtils.copyProperties(groupTreeVO, infoVO);
                 infoVO.setEquipId(equipId);
                 infoVO.setEquipId(equipId);
                 return infoVO;
                 return infoVO;
             }
             }
-            if(CollectionUtils.isNotEmpty(groupTreeVO.getChildren())){
-                queryGroupName(groupTreeVO.getChildren(),infoVO,infoMap,equipId);
+            if (CollectionUtils.isNotEmpty(groupTreeVO.getChildren())) {
+                queryGroupName(groupTreeVO.getChildren(), infoVO, infoMap, equipId);
             }
             }
         }
         }
         return infoVO;
         return infoVO;
@@ -225,21 +257,22 @@ public class GroupManagementServiceImpl implements GroupManagementService {
 
 
     /**
     /**
      * 获取分组树
      * 获取分组树
+     *
+     * @return java.util.List<com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeVO>
      * @author 易涛
      * @author 易涛
      * @date 2021/9/8 14:44
      * @date 2021/9/8 14:44
-     * @return java.util.List<com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeVO>
      */
      */
-    public static List<GroupTreeVO> getGroupTree(){
+    public static List<GroupTreeVO> getGroupTree() {
         InputStream inputStream = GroupManagementServiceImpl.class.getClassLoader()
         InputStream inputStream = GroupManagementServiceImpl.class.getClassLoader()
-                .getResourceAsStream(File.separator+"json"+File.separator+"GroupTree.json");
-        if(inputStream==null){
+                .getResourceAsStream(File.separator + "json" + File.separator + "GroupTree.json");
+        if (inputStream == null) {
             return null;
             return null;
         }
         }
-        try{
+        try {
             String str = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
             String str = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
-            return JSONArray.parseArray(str,GroupTreeVO.class);
-        }catch (IOException ioe){
-            throw new RuntimeException("json文件有误",ioe);
+            return JSONArray.parseArray(str, GroupTreeVO.class);
+        } catch (IOException ioe) {
+            throw new RuntimeException("json文件有误", ioe);
         }
         }
     }
     }
 
 
@@ -252,25 +285,89 @@ public class GroupManagementServiceImpl implements GroupManagementService {
         request.setMaxDocs(10000);
         request.setMaxDocs(10000);
         try {
         try {
             BulkByScrollResponse resp = client.deleteByQuery(request, RequestOptions.DEFAULT);
             BulkByScrollResponse resp = client.deleteByQuery(request, RequestOptions.DEFAULT);
-            log.info("删除返回的数据为---{}",resp.toString());
-        }catch (IOException e){
-            throw new RuntimeException("删除elasticSearch失败",e);
+            log.info("删除返回的数据为---{}", resp.toString());
+        } catch (IOException e) {
+            throw new RuntimeException("删除elasticSearch失败", e);
         }
         }
     }
     }
 
 
-    /**
-     * 查询分组下的设备
-     * @param condition 分组条件
-     * @param classCode 分组编码
-     * @return 分组下的设备
-     */
-    public List<GroupManagementVo> getEquipList(String condition,String classCode){
+    @Override
+    public List<GroupManagementVo> getEquipList(String condition, String classCode) {
         GroupManagementDTO managementDTO = new GroupManagementDTO();
         GroupManagementDTO managementDTO = new GroupManagementDTO();
         managementDTO.setClassCode(classCode);
         managementDTO.setClassCode(classCode);
         managementDTO.setCondition(condition);
         managementDTO.setCondition(condition);
-        managementDTO.setCurrent(INTEGER_ONE);
-        managementDTO.setSize(5000);
-        PageList<GroupManagementVo> groupManagementVoPageList = this.equipsQuery(managementDTO);
+        return getEquipList(managementDTO);
+    }
+
+    @Override
+    public List<GroupManagementVo> getEquipList(GroupManagementDTO groupManagementDTO) {
+        groupManagementDTO.setCurrent(INTEGER_ONE);
+        groupManagementDTO.setSize(5000);
+        PageList<GroupManagementVo> groupManagementVoPageList = this.equipsQuery(groupManagementDTO);
         return groupManagementVoPageList.getRecords();
         return groupManagementVoPageList.getRecords();
     }
     }
+
+    @Override
+    public GroupTreeDetailVO getGroup(String id) {
+        return queryById(getGroupTree(), new GroupTreeDetailVO(), id);
+    }
+
+    /**
+     * 递归匹配符合条件的分组对象
+     *
+     * @param groupTreeVOList
+     * @param id
+     * @return com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeVO
+     * @author 易涛
+     * @date 2021/9/8 14:50
+     */
+    private GroupTreeDetailVO queryById(List<GroupTreeVO> groupTreeVOList, GroupTreeDetailVO groupTreeDetailVO, String id) {
+        if (CollectionUtils.isEmpty(groupTreeVOList)) {
+            return null;
+        }
+        for (GroupTreeVO groupTreeVO : groupTreeVOList) {
+            if (StringUtils.isNotEmpty(groupTreeDetailVO.getId())) {
+                return groupTreeDetailVO;
+            }
+            if (Objects.equals(groupTreeVO.getId(), id)) {
+                BeanUtils.copyProperties(groupTreeVO, groupTreeDetailVO);
+                return groupTreeDetailVO;
+            }
+            if (CollectionUtils.isNotEmpty(groupTreeVO.getChildren())) {
+                queryById(groupTreeVO.getChildren(), groupTreeDetailVO, id);
+            }
+        }
+        return groupTreeDetailVO;
+    }
+
+    @Override
+    public List<GroupTreeDetailVO> queryAllLeafGroups() {
+        // 遍历分组树,获取最末级节点
+        List<GroupTreeVO> groupTree = getGroupTree();
+
+        List<GroupTreeDetailVO> result = new ArrayList<>();
+        cascadeGetLeafGroup(groupTree, result);
+        return result;
+    }
+
+    /**
+     * 递归查询分组树的叶子节点
+     *
+     * @param groupTree 分组树节点列表
+     * @param result 保存叶子节点的结果集
+     * @author lixing
+     * @version V1.0 2021/9/19 1:37 下午
+     */
+    private void cascadeGetLeafGroup(List<GroupTreeVO> groupTree, List<GroupTreeDetailVO> result) {
+        if (CollectionUtils.isEmpty(groupTree)) {
+            return;
+        }
+        for (GroupTreeVO groupTreeVO : groupTree) {
+            if (CollectionUtils.isEmpty(groupTreeVO.getChildren())) {
+                result.add(ConvertGroupTool.INSTANCE.convert2DetailDTO(groupTreeVO));
+            } else {
+                cascadeGetLeafGroup(groupTreeVO.getChildren(), result);
+            }
+        }
+    }
 }
 }

+ 4 - 0
src/main/java/com/persagy/apm/alarmservice/monitorindicator/controller/MonitorIndicatorController.java

@@ -13,6 +13,8 @@ import com.persagy.apm.common.response.*;
 import com.persagy.apm.common.utils.ResultHelper;
 import com.persagy.apm.common.utils.ResultHelper;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
 import javax.validation.Valid;
 import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
@@ -32,6 +34,7 @@ public class MonitorIndicatorController {
 
 
 	@ApiOperation(value = "创建监测指标")
 	@ApiOperation(value = "创建监测指标")
 	@PostMapping("/create")
 	@PostMapping("/create")
+    @ApiIgnore
 	public CommonResult<ApmResponseUpsertVO> createMonitorIndicator(
 	public CommonResult<ApmResponseUpsertVO> createMonitorIndicator(
 	        @Valid @RequestBody AddMonitorIndicatorDTO addMonitorIndicatorDTO) {
 	        @Valid @RequestBody AddMonitorIndicatorDTO addMonitorIndicatorDTO) {
         String id = monitorIndicatorService.createMonitorIndicator(addMonitorIndicatorDTO);
         String id = monitorIndicatorService.createMonitorIndicator(addMonitorIndicatorDTO);
@@ -72,6 +75,7 @@ public class MonitorIndicatorController {
             @Valid @RequestBody QueryMonitorIndicatorDTO queryMonitorIndicatorDTO) {
             @Valid @RequestBody QueryMonitorIndicatorDTO queryMonitorIndicatorDTO) {
         List<MonitorIndicator> monitorIndicatorList = monitorIndicatorService.queryMonitorIndicatorList(queryMonitorIndicatorDTO);
         List<MonitorIndicator> monitorIndicatorList = monitorIndicatorService.queryMonitorIndicatorList(queryMonitorIndicatorDTO);
         List<MonitorIndicatorListItemVO> resultList = ConvertMonitorIndicatorTool.INSTANCE.convert2List(monitorIndicatorList);
         List<MonitorIndicatorListItemVO> resultList = ConvertMonitorIndicatorTool.INSTANCE.convert2List(monitorIndicatorList);
+        monitorIndicatorService.setIndicatorMethodCount(resultList);
         return ResultHelper.multi(resultList);
         return ResultHelper.multi(resultList);
     }
     }
 
 

+ 8 - 0
src/main/java/com/persagy/apm/alarmservice/monitorindicator/model/MonitorIndicator.java

@@ -1,5 +1,8 @@
 package com.persagy.apm.alarmservice.monitorindicator.model;
 package com.persagy.apm.alarmservice.monitorindicator.model;
 
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.persagy.apm.common.model.vo.EnumVO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
@@ -7,6 +10,7 @@ import lombok.EqualsAndHashCode;
 import com.persagy.apm.common.model.entity.AuditableEntity;
 import com.persagy.apm.common.model.entity.AuditableEntity;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
+import java.util.List;
 
 
 /**
 /**
  * 监测指标(MonitorIndicator)实体类
  * 监测指标(MonitorIndicator)实体类
@@ -28,6 +32,10 @@ public class MonitorIndicator extends AuditableEntity<MonitorIndicator> implemen
     @ApiModelProperty("单位")
     @ApiModelProperty("单位")
     private String unit;
     private String unit;
 
 
+    @ApiModelProperty("可选值字典")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<EnumVO> dic;
+
     public static String PROP_NAME = "name";
     public static String PROP_NAME = "name";
     public static String PROP_CLASS_CODE = "class_code";
     public static String PROP_CLASS_CODE = "class_code";
     public static String PROP_CLASS_UNIT = "unit";
     public static String PROP_CLASS_UNIT = "unit";

+ 6 - 3
src/main/java/com/persagy/apm/alarmservice/monitorindicator/model/dto/QueryMonitorIndicatorDTO.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 import java.util.Date;
 import java.util.Date;
+import java.util.List;
 
 
 /**
 /**
  * @author lixing
  * @author lixing
@@ -12,10 +13,12 @@ import java.util.Date;
 @Data
 @Data
 @ApiModel(value = "查询监测指标入参")
 @ApiModel(value = "查询监测指标入参")
 public class QueryMonitorIndicatorDTO {
 public class QueryMonitorIndicatorDTO {
-    @ApiModelProperty(value = "指标名称", required = true)
+    @ApiModelProperty(value = "监测指标id列表")
+    private List<String> ids;
+
+    @ApiModelProperty(value = "指标名称")
     private String name;
     private String name;
     
     
-    @ApiModelProperty(value = "设备类", required = true)
+    @ApiModelProperty(value = "设备类")
     private String classCode;
     private String classCode;
-    
 }
 }

+ 6 - 12
src/main/java/com/persagy/apm/alarmservice/monitorindicator/model/vo/MonitorIndicatorItemVO.java

@@ -1,9 +1,12 @@
 package com.persagy.apm.alarmservice.monitorindicator.model.vo;
 package com.persagy.apm.alarmservice.monitorindicator.model.vo;
 
 
+import com.persagy.apm.common.model.vo.EnumVO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 import java.util.Date;
 import java.util.Date;
+import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude;
 
 
 /**
 /**
@@ -25,17 +28,8 @@ public class MonitorIndicatorItemVO {
 
 
     @ApiModelProperty("单位")
     @ApiModelProperty("单位")
     private String unit;
     private String unit;
-    
-    @ApiModelProperty("创建人")
-    private String creator;
-    
-    @ApiModelProperty("创建时间")
-    private Date creationTime;
-    
-    @ApiModelProperty("修改人")
-    private String modifier;
-    
-    @ApiModelProperty("修改时间")
-    private Date modifiedTime;
+
+    @ApiModelProperty("可选值")
+    private List<EnumVO> dic;
     
     
 }
 }

+ 3 - 13
src/main/java/com/persagy/apm/alarmservice/monitorindicator/model/vo/MonitorIndicatorListItemVO.java

@@ -25,17 +25,7 @@ public class MonitorIndicatorListItemVO {
 
 
     @ApiModelProperty("单位")
     @ApiModelProperty("单位")
     private String unit;
     private String unit;
-    
-    @ApiModelProperty("创建人")
-    private String creator;
-    
-    @ApiModelProperty("创建时间")
-    private Date creationTime;
-    
-    @ApiModelProperty("修改人")
-    private String modifier;
-    
-    @ApiModelProperty("修改时间")
-    private Date modifiedTime;
-    
+
+    @ApiModelProperty("包含的计算方式梳理")
+    private Integer methodCount;
 }
 }

+ 11 - 0
src/main/java/com/persagy/apm/alarmservice/monitorindicator/service/IMonitorIndicatorService.java

@@ -4,6 +4,7 @@ import com.persagy.apm.alarmservice.monitorindicator.model.*;
 import com.persagy.apm.alarmservice.monitorindicator.model.dto.*;
 import com.persagy.apm.alarmservice.monitorindicator.model.dto.*;
 import java.util.List;
 import java.util.List;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.persagy.apm.alarmservice.monitorindicator.model.vo.MonitorIndicatorListItemVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 
 
@@ -72,4 +73,14 @@ public interface IMonitorIndicatorService  {
     * @version V1.0 2021-09-08 22:44:37
     * @version V1.0 2021-09-08 22:44:37
     */
     */
     public IPage<MonitorIndicator> pageQueryMonitorIndicator(PageQueryMonitorIndicatorDTO pageQueryMonitorIndicatorDTO);
     public IPage<MonitorIndicator> pageQueryMonitorIndicator(PageQueryMonitorIndicatorDTO pageQueryMonitorIndicatorDTO);
+
+    /**
+     * 为监测指标包含的计算方式数量赋值
+     *
+     * @param indicators 监测指标列表
+     * @return 计算方式数量赋值后的监测指标列表
+     * @author lixing
+     * @version V1.0 2021-09-08 22:44:37
+     */
+    public void setIndicatorMethodCount(List<MonitorIndicatorListItemVO> indicators);
 }
 }

+ 99 - 67
src/main/java/com/persagy/apm/alarmservice/monitorindicator/service/impl/MonitorIndicatorServiceImpl.java

@@ -1,22 +1,32 @@
 package com.persagy.apm.alarmservice.monitorindicator.service.impl;
 package com.persagy.apm.alarmservice.monitorindicator.service.impl;
 
 
-import com.persagy.apm.common.context.AppContext;
-import com.persagy.apm.alarmservice.monitorindicator.dao.MonitorIndicatorMapper;
-import com.persagy.apm.alarmservice.monitorindicator.service.IMonitorIndicatorService;
-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.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.persagy.apm.alarmservice.monitorindicator.model.*;
-import com.persagy.apm.alarmservice.monitorindicator.model.dto.*;
-import java.util.List;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.base.CaseFormat;
 import com.google.common.base.CaseFormat;
+import com.persagy.apm.alarmservice.calculatemethod.model.CalculateMethod;
+import com.persagy.apm.alarmservice.calculatemethod.model.dto.QueryCalculateMethodDTO;
+import com.persagy.apm.alarmservice.calculatemethod.service.ICalculateMethodService;
+import com.persagy.apm.alarmservice.monitorindicator.dao.MonitorIndicatorMapper;
+import com.persagy.apm.alarmservice.monitorindicator.model.ConvertMonitorIndicatorTool;
+import com.persagy.apm.alarmservice.monitorindicator.model.MonitorIndicator;
+import com.persagy.apm.alarmservice.monitorindicator.model.dto.AddMonitorIndicatorDTO;
+import com.persagy.apm.alarmservice.monitorindicator.model.dto.PageQueryMonitorIndicatorDTO;
+import com.persagy.apm.alarmservice.monitorindicator.model.dto.QueryMonitorIndicatorDTO;
+import com.persagy.apm.alarmservice.monitorindicator.model.dto.UpdateMonitorIndicatorDTO;
+import com.persagy.apm.alarmservice.monitorindicator.model.vo.MonitorIndicatorListItemVO;
+import com.persagy.apm.alarmservice.monitorindicator.service.IMonitorIndicatorService;
+import com.persagy.apm.common.constant.enums.ValidEnum;
+import com.persagy.apm.common.context.AppContext;
 import com.persagy.apm.common.model.dto.Sort;
 import com.persagy.apm.common.model.dto.Sort;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
 
 
+import java.util.List;
+
 /**
 /**
  * 监测指标(MonitorIndicator) service层
  * 监测指标(MonitorIndicator) service层
  *
  *
@@ -24,15 +34,18 @@ import org.springframework.util.CollectionUtils;
  * @version V1.0 2021-09-08 22:44:37
  * @version V1.0 2021-09-08 22:44:37
  */
  */
 @Service
 @Service
-public class MonitorIndicatorServiceImpl extends ServiceImpl<MonitorIndicatorMapper, MonitorIndicator> 
-    implements IMonitorIndicatorService {
-    
+public class MonitorIndicatorServiceImpl extends ServiceImpl<MonitorIndicatorMapper, MonitorIndicator>
+        implements IMonitorIndicatorService {
+    @Autowired
+    ICalculateMethodService calculateMethodService;
+
     /**
     /**
-    * 创建监测指标
-    * @return 监测指标主键
-    * @author lixing
-    * @version V1.0 2021-09-08 22:44:37
-    */
+     * 创建监测指标
+     *
+     * @return 监测指标主键
+     * @author lixing
+     * @version V1.0 2021-09-08 22:44:37
+     */
     @Override
     @Override
     public String createMonitorIndicator(AddMonitorIndicatorDTO addMonitorIndicatorDTO) {
     public String createMonitorIndicator(AddMonitorIndicatorDTO addMonitorIndicatorDTO) {
         MonitorIndicator monitorIndicator = ConvertMonitorIndicatorTool.INSTANCE.convertAddDto2Entity(addMonitorIndicatorDTO);
         MonitorIndicator monitorIndicator = ConvertMonitorIndicatorTool.INSTANCE.convertAddDto2Entity(addMonitorIndicatorDTO);
@@ -41,7 +54,7 @@ public class MonitorIndicatorServiceImpl extends ServiceImpl<MonitorIndicatorMap
         save(monitorIndicator);
         save(monitorIndicator);
         return monitorIndicator.getId();
         return monitorIndicator.getId();
     }
     }
-    
+
     /**
     /**
      * 如果某些字段没有赋值,使用默认的值
      * 如果某些字段没有赋值,使用默认的值
      *
      *
@@ -52,16 +65,17 @@ public class MonitorIndicatorServiceImpl extends ServiceImpl<MonitorIndicatorMap
     private void setDefaultValue(MonitorIndicator monitorIndicator) {
     private void setDefaultValue(MonitorIndicator monitorIndicator) {
         monitorIndicator.setCreator(AppContext.getContext().getAccountId());
         monitorIndicator.setCreator(AppContext.getContext().getAccountId());
         // todo 其他默认的属性
         // todo 其他默认的属性
-        
+
     }
     }
-    
+
     /**
     /**
-    * 监测指标详情
-    * @param id 主键
-    * @return 部门do类
-    * @author lixing
-    * @version V1.0 2021-09-08 22:44:37
-    */
+     * 监测指标详情
+     *
+     * @param id 主键
+     * @return 部门do类
+     * @author lixing
+     * @version V1.0 2021-09-08 22:44:37
+     */
     @Override
     @Override
     public MonitorIndicator queryMonitorIndicatorDetail(String id) {
     public MonitorIndicator queryMonitorIndicatorDetail(String id) {
         MonitorIndicator monitorIndicator = getById(id);
         MonitorIndicator monitorIndicator = getById(id);
@@ -70,12 +84,13 @@ public class MonitorIndicatorServiceImpl extends ServiceImpl<MonitorIndicatorMap
         }
         }
         return monitorIndicator;
         return monitorIndicator;
     }
     }
-    
+
     /**
     /**
-    * 更新监测指标
-    * @author lixing
-    * @version V1.0 2021-09-08 22:44:37
-    */
+     * 更新监测指标
+     *
+     * @author lixing
+     * @version V1.0 2021-09-08 22:44:37
+     */
     @Override
     @Override
     public void updateMonitorIndicator(UpdateMonitorIndicatorDTO updateMonitorIndicatorDTO) {
     public void updateMonitorIndicator(UpdateMonitorIndicatorDTO updateMonitorIndicatorDTO) {
         MonitorIndicator monitorIndicator = getById(updateMonitorIndicatorDTO.getId());
         MonitorIndicator monitorIndicator = getById(updateMonitorIndicatorDTO.getId());
@@ -83,7 +98,7 @@ public class MonitorIndicatorServiceImpl extends ServiceImpl<MonitorIndicatorMap
         monitorIndicator.setModifier(AppContext.getContext().getAccountId());
         monitorIndicator.setModifier(AppContext.getContext().getAccountId());
         updateById(monitorIndicator);
         updateById(monitorIndicator);
     }
     }
-    
+
     /**
     /**
      * 校验监测指标是否可删除
      * 校验监测指标是否可删除
      *
      *
@@ -105,13 +120,14 @@ public class MonitorIndicatorServiceImpl extends ServiceImpl<MonitorIndicatorMap
 
 
         return monitorIndicator;
         return monitorIndicator;
     }
     }
-    
+
     /**
     /**
-    * 删除监测指标
-    * @param id 主键
-    * @author lixing
-    * @version V1.0 2021-09-08 22:44:37
-    */
+     * 删除监测指标
+     *
+     * @param id 主键
+     * @author lixing
+     * @version V1.0 2021-09-08 22:44:37
+     */
     @Override
     @Override
     public void deleteMonitorIndicator(String id) {
     public void deleteMonitorIndicator(String id) {
         // 校验是否可删除
         // 校验是否可删除
@@ -120,72 +136,88 @@ public class MonitorIndicatorServiceImpl extends ServiceImpl<MonitorIndicatorMap
         monitorIndicator.setValid(ValidEnum.FALSE.getType());
         monitorIndicator.setValid(ValidEnum.FALSE.getType());
         updateById(monitorIndicator);
         updateById(monitorIndicator);
     }
     }
-    
+
     /**
     /**
-    * 查询监测指标
-    * @return List<MonitorIndicator>
-    * @author lixing
-    * @version V1.0 2021-09-08 22:44:37
-    */
+     * 查询监测指标
+     *
+     * @return List<MonitorIndicator>
+     * @author lixing
+     * @version V1.0 2021-09-08 22:44:37
+     */
     @Override
     @Override
     public List<MonitorIndicator> queryMonitorIndicatorList(QueryMonitorIndicatorDTO queryMonitorIndicatorDTO) {
     public List<MonitorIndicator> queryMonitorIndicatorList(QueryMonitorIndicatorDTO queryMonitorIndicatorDTO) {
         QueryWrapper<MonitorIndicator> queryWrapper = new QueryWrapper<>();
         QueryWrapper<MonitorIndicator> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq(MonitorIndicator.PROP_VALID, ValidEnum.TRUE.getType());
         queryWrapper.eq(MonitorIndicator.PROP_VALID, ValidEnum.TRUE.getType());
         // 默认按创建时间倒序排序
         // 默认按创建时间倒序排序
         queryWrapper.orderBy(true, false, MonitorIndicator.PROP_CREATIONTIME);
         queryWrapper.orderBy(true, false, MonitorIndicator.PROP_CREATIONTIME);
-        
+
         if (queryMonitorIndicatorDTO != null) {
         if (queryMonitorIndicatorDTO != null) {
-                                
-            // todo 需判断使用like还是eq
+
+            if (queryMonitorIndicatorDTO.getIds() != null) {
+                queryWrapper.in(MonitorIndicator.PROP_ID, queryMonitorIndicatorDTO.getIds());
+            }
+
             if (StringUtils.isNotEmpty(queryMonitorIndicatorDTO.getName())) {
             if (StringUtils.isNotEmpty(queryMonitorIndicatorDTO.getName())) {
                 queryWrapper.like(MonitorIndicator.PROP_NAME, queryMonitorIndicatorDTO.getName());
                 queryWrapper.like(MonitorIndicator.PROP_NAME, queryMonitorIndicatorDTO.getName());
             }
             }
-                                        
-            // todo 需判断使用like还是eq
+
             if (StringUtils.isNotEmpty(queryMonitorIndicatorDTO.getClassCode())) {
             if (StringUtils.isNotEmpty(queryMonitorIndicatorDTO.getClassCode())) {
-                queryWrapper.like(MonitorIndicator.PROP_CLASS_CODE, queryMonitorIndicatorDTO.getClassCode());
+                queryWrapper.eq(MonitorIndicator.PROP_CLASS_CODE, queryMonitorIndicatorDTO.getClassCode());
             }
             }
-                                            
+
         }
         }
-        
+
         return list(queryWrapper);
         return list(queryWrapper);
     }
     }
-    
+
     /**
     /**
-    * 分页查询监测指标
-    * @return IPage<MonitorIndicator>
-    * @author lixing
-    * @version V1.0 2021-09-08 22:44:37
-    */
+     * 分页查询监测指标
+     *
+     * @return IPage<MonitorIndicator>
+     * @author lixing
+     * @version V1.0 2021-09-08 22:44:37
+     */
     @Override
     @Override
     public IPage<MonitorIndicator> pageQueryMonitorIndicator(PageQueryMonitorIndicatorDTO pageQueryMonitorIndicatorDTO) {
     public IPage<MonitorIndicator> pageQueryMonitorIndicator(PageQueryMonitorIndicatorDTO pageQueryMonitorIndicatorDTO) {
         QueryWrapper<MonitorIndicator> queryWrapper = new QueryWrapper<>();
         QueryWrapper<MonitorIndicator> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq(MonitorIndicator.PROP_VALID, ValidEnum.TRUE.getType());
         queryWrapper.eq(MonitorIndicator.PROP_VALID, ValidEnum.TRUE.getType());
         // 这里认为pageQueryDTO是经过校验的,肯定包含分页信息
         // 这里认为pageQueryDTO是经过校验的,肯定包含分页信息
-        IPage<MonitorIndicator> pageParam = new Page<>(pageQueryMonitorIndicatorDTO.getPage(), pageQueryMonitorIndicatorDTO.getSize(),true);
+        IPage<MonitorIndicator> pageParam = new Page<>(pageQueryMonitorIndicatorDTO.getPage(), pageQueryMonitorIndicatorDTO.getSize(), true);
         // 排序信息
         // 排序信息
-        if(CollectionUtils.isEmpty(pageQueryMonitorIndicatorDTO.getOrders())){
+        if (CollectionUtils.isEmpty(pageQueryMonitorIndicatorDTO.getOrders())) {
             // 默认按创建时间倒序排序
             // 默认按创建时间倒序排序
             queryWrapper.orderBy(true, false, MonitorIndicator.PROP_CREATIONTIME);
             queryWrapper.orderBy(true, false, MonitorIndicator.PROP_CREATIONTIME);
-        }else {
+        } else {
             List<Sort> orders = pageQueryMonitorIndicatorDTO.getOrders();
             List<Sort> orders = pageQueryMonitorIndicatorDTO.getOrders();
-            for(Sort sort: orders) {
+            for (Sort sort : orders) {
                 // 将驼峰转换为下划线格式
                 // 将驼峰转换为下划线格式
-                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE,sort.getColumn()));
+                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, sort.getColumn()));
                 queryWrapper.orderBy(true, sort.isAsc(), sort.getColumn());
                 queryWrapper.orderBy(true, sort.isAsc(), sort.getColumn());
             }
             }
         }
         }
-                
+
         // todo 需判断使用like还是eq
         // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryMonitorIndicatorDTO.getName())) {
         if (StringUtils.isNotEmpty(pageQueryMonitorIndicatorDTO.getName())) {
             queryWrapper.like(MonitorIndicator.PROP_NAME, pageQueryMonitorIndicatorDTO.getName());
             queryWrapper.like(MonitorIndicator.PROP_NAME, pageQueryMonitorIndicatorDTO.getName());
         }
         }
-                            
+
         // todo 需判断使用like还是eq
         // todo 需判断使用like还是eq
         if (StringUtils.isNotEmpty(pageQueryMonitorIndicatorDTO.getClassCode())) {
         if (StringUtils.isNotEmpty(pageQueryMonitorIndicatorDTO.getClassCode())) {
             queryWrapper.like(MonitorIndicator.PROP_CLASS_CODE, pageQueryMonitorIndicatorDTO.getClassCode());
             queryWrapper.like(MonitorIndicator.PROP_CLASS_CODE, pageQueryMonitorIndicatorDTO.getClassCode());
         }
         }
-                                    
+
         return getBaseMapper().selectPage(pageParam, queryWrapper);
         return getBaseMapper().selectPage(pageParam, queryWrapper);
     }
     }
+
+    @Override
+    public void setIndicatorMethodCount(List<MonitorIndicatorListItemVO> indicators) {
+        indicators.forEach(indicator -> {
+            QueryCalculateMethodDTO queryCalculateMethodDTO = new QueryCalculateMethodDTO();
+            queryCalculateMethodDTO.setMonitorIndicatorId(indicator.getId());
+            List<CalculateMethod> calculateMethods = calculateMethodService.
+                    queryCalculateMethodList(queryCalculateMethodDTO);
+            int methodCount = calculateMethods == null ? 0 : calculateMethods.size();
+            indicator.setMethodCount(methodCount);
+        });
+    }
 }
 }

+ 37 - 24
src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/controller/ProjectMonitorIndicatorConfigController.java

@@ -1,7 +1,10 @@
 package com.persagy.apm.alarmservice.project.monitorindicatorconfig.controller;
 package com.persagy.apm.alarmservice.project.monitorindicatorconfig.controller;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.persagy.apm.alarmservice.calculatemethod.service.ICalculateMethodService;
 import com.persagy.apm.alarmservice.project.monitorindicatorconfig.service.IProjectMonitorIndicatorConfigService;
 import com.persagy.apm.alarmservice.project.monitorindicatorconfig.service.IProjectMonitorIndicatorConfigService;
 
 
+import com.persagy.apm.common.model.vo.SimpleObjVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
@@ -13,6 +16,8 @@ import com.persagy.apm.common.response.*;
 import com.persagy.apm.common.utils.ResultHelper;
 import com.persagy.apm.common.utils.ResultHelper;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
 import javax.validation.Valid;
 import javax.validation.Valid;
 import java.util.List;
 import java.util.List;
 
 
@@ -28,9 +33,12 @@ import java.util.List;
 public class ProjectMonitorIndicatorConfigController {
 public class ProjectMonitorIndicatorConfigController {
     @Autowired
     @Autowired
     private IProjectMonitorIndicatorConfigService projectMonitorIndicatorConfigService;
     private IProjectMonitorIndicatorConfigService projectMonitorIndicatorConfigService;
+    @Autowired
+    private ICalculateMethodService calculateMethodService;
 
 
 	@ApiOperation(value = "创建项目监测指标配置")
 	@ApiOperation(value = "创建项目监测指标配置")
 	@PostMapping("/create")
 	@PostMapping("/create")
+    @ApiIgnore
 	public CommonResult<ApmResponseUpsertVO> createProjectMonitorIndicatorConfig(
 	public CommonResult<ApmResponseUpsertVO> createProjectMonitorIndicatorConfig(
 	        @Valid @RequestBody AddProjectMonitorIndicatorConfigDTO addProjectMonitorIndicatorConfigDTO) {
 	        @Valid @RequestBody AddProjectMonitorIndicatorConfigDTO addProjectMonitorIndicatorConfigDTO) {
         String id = projectMonitorIndicatorConfigService.createProjectMonitorIndicatorConfig(addProjectMonitorIndicatorConfigDTO);
         String id = projectMonitorIndicatorConfigService.createProjectMonitorIndicatorConfig(addProjectMonitorIndicatorConfigDTO);
@@ -41,8 +49,17 @@ public class ProjectMonitorIndicatorConfigController {
     @PostMapping("/get")
     @PostMapping("/get")
     public CommonResult<ProjectMonitorIndicatorConfigItemVO> queryProjectMonitorIndicatorConfigDetail(
     public CommonResult<ProjectMonitorIndicatorConfigItemVO> queryProjectMonitorIndicatorConfigDetail(
             @Valid @RequestBody QueryProjectMonitorIndicatorConfigDetailDTO queryProjectMonitorIndicatorConfigDetailDTO) {
             @Valid @RequestBody QueryProjectMonitorIndicatorConfigDetailDTO queryProjectMonitorIndicatorConfigDetailDTO) {
-        ProjectMonitorIndicatorConfig projectMonitorIndicatorConfig = projectMonitorIndicatorConfigService.queryProjectMonitorIndicatorConfigDetail(queryProjectMonitorIndicatorConfigDetailDTO.getId());
-        ProjectMonitorIndicatorConfigItemVO projectMonitorIndicatorConfigItemVO = ConvertProjectMonitorIndicatorConfigTool.INSTANCE.convert2ResponseItemDTO(projectMonitorIndicatorConfig);
+        ProjectMonitorIndicatorConfig projectMonitorIndicatorConfig =
+                projectMonitorIndicatorConfigService.getConfigByObjAndIndicator(
+                        queryProjectMonitorIndicatorConfigDetailDTO.getObjId(),
+                        queryProjectMonitorIndicatorConfigDetailDTO.getMonitorIndicatorId());
+        ProjectMonitorIndicatorConfigItemVO projectMonitorIndicatorConfigItemVO =
+                ConvertProjectMonitorIndicatorConfigTool.INSTANCE.convert2ResponseItemDTO(projectMonitorIndicatorConfig);
+        // 返回结果中添加计算方式信息
+        String calculateMethodId = projectMonitorIndicatorConfig.getCalculateMethodId();
+        String methodName = calculateMethodService.getMethodName(calculateMethodId);
+        projectMonitorIndicatorConfigItemVO.setCalculateMethod(
+                new SimpleObjVO(calculateMethodId, methodName));
         return ResultHelper.single(projectMonitorIndicatorConfigItemVO);
         return ResultHelper.single(projectMonitorIndicatorConfigItemVO);
     }
     }
 
 
@@ -51,13 +68,15 @@ public class ProjectMonitorIndicatorConfigController {
     @PostMapping("/update")
     @PostMapping("/update")
     public CommonResult<ApmResponseUpsertVO> updateProjectMonitorIndicatorConfig(
     public CommonResult<ApmResponseUpsertVO> updateProjectMonitorIndicatorConfig(
             @Valid @RequestBody UpdateProjectMonitorIndicatorConfigDTO updateProjectMonitorIndicatorConfigDTO) {
             @Valid @RequestBody UpdateProjectMonitorIndicatorConfigDTO updateProjectMonitorIndicatorConfigDTO) {
-        projectMonitorIndicatorConfigService.updateProjectMonitorIndicatorConfig(updateProjectMonitorIndicatorConfigDTO);
-        return ResultHelper.single(new ApmResponseUpsertVO(updateProjectMonitorIndicatorConfigDTO.getId()));
+        String id = projectMonitorIndicatorConfigService.
+                updateProjectMonitorIndicatorConfig(updateProjectMonitorIndicatorConfigDTO);
+        return ResultHelper.single(new ApmResponseUpsertVO(id));
     }
     }
 
 
 
 
     @ApiOperation(value = "删除项目监测指标配置")
     @ApiOperation(value = "删除项目监测指标配置")
     @PostMapping("/delete")
     @PostMapping("/delete")
+    @ApiIgnore
     public CommonResult deleteProjectMonitorIndicatorConfig(
     public CommonResult deleteProjectMonitorIndicatorConfig(
             @RequestBody @Valid DeleteProjectMonitorIndicatorConfigDTO deleteProjectMonitorIndicatorConfigDTO) {
             @RequestBody @Valid DeleteProjectMonitorIndicatorConfigDTO deleteProjectMonitorIndicatorConfigDTO) {
         projectMonitorIndicatorConfigService.deleteProjectMonitorIndicatorConfig(deleteProjectMonitorIndicatorConfigDTO.getId());
         projectMonitorIndicatorConfigService.deleteProjectMonitorIndicatorConfig(deleteProjectMonitorIndicatorConfigDTO.getId());
@@ -65,28 +84,22 @@ public class ProjectMonitorIndicatorConfigController {
     }
     }
 
 
 
 
-    @ApiOperation(value = "项目监测指标配置列表")
+//    @ApiOperation(value = "项目监测指标配置列表")
+//    @PostMapping("/query")
+//    public CommonResult<PageList<ProjectMonitorIndicatorConfigListItemVO>> queryProjectMonitorIndicatorConfig(
+//            @Valid @RequestBody QueryProjectMonitorIndicatorConfigDTO queryProjectMonitorIndicatorConfigDTO) {
+//        List<ProjectMonitorIndicatorConfig> projectMonitorIndicatorConfigList = projectMonitorIndicatorConfigService.queryProjectMonitorIndicatorConfigList(queryProjectMonitorIndicatorConfigDTO);
+//        List<ProjectMonitorIndicatorConfigListItemVO> resultList = ConvertProjectMonitorIndicatorConfigTool.INSTANCE.convert2List(projectMonitorIndicatorConfigList);
+//        return ResultHelper.multi(resultList);
+//    }
+    
+    @ApiOperation(value = "项目监测指标配置列表, 分页查询")
     @PostMapping("/query")
     @PostMapping("/query")
     public CommonResult<PageList<ProjectMonitorIndicatorConfigListItemVO>> queryProjectMonitorIndicatorConfig(
     public CommonResult<PageList<ProjectMonitorIndicatorConfigListItemVO>> queryProjectMonitorIndicatorConfig(
-            @Valid @RequestBody QueryProjectMonitorIndicatorConfigDTO queryProjectMonitorIndicatorConfigDTO) {
-        List<ProjectMonitorIndicatorConfig> projectMonitorIndicatorConfigList = projectMonitorIndicatorConfigService.queryProjectMonitorIndicatorConfigList(queryProjectMonitorIndicatorConfigDTO);
-        List<ProjectMonitorIndicatorConfigListItemVO> resultList = ConvertProjectMonitorIndicatorConfigTool.INSTANCE.convert2List(projectMonitorIndicatorConfigList);
-        return ResultHelper.multi(resultList);
+            @Valid @RequestBody PageQueryProjectMonitorIndicatorConfigDTO pageQueryProjectMonitorIndicatorConfigDTO) {
+        IPage<ProjectMonitorIndicatorConfigListItemVO> pagedList = projectMonitorIndicatorConfigService.
+                pageQueryProjectMonitorIndicatorConfig(pageQueryProjectMonitorIndicatorConfigDTO);
+        return ResultHelper.multi(pagedList);
     }
     }
-    
-    //@ApiOperation(value = "项目监测指标配置列表, 分页查询")
-    //@PostMapping("/query")
-    //public CommonResult<PageList<ProjectMonitorIndicatorConfigListItemVO>> queryProjectMonitorIndicatorConfig(
-    //        @Valid @RequestBody PageQueryProjectMonitorIndicatorConfigDTO pageQueryProjectMonitorIndicatorConfigDTO) {
-    //    IPage<ProjectMonitorIndicatorConfig> pagedList = projectMonitorIndicatorConfigService.pageQueryProjectMonitorIndicatorConfig(pageQueryProjectMonitorIndicatorConfigDTO);
-    //    IPage<ProjectMonitorIndicatorConfigListItemVO> pagedResultList = pagedList.convert(item -> {
-    //        try {
-    //           return ConvertProjectMonitorIndicatorConfigTool.INSTANCE.convert2ResponseListItemDTO(item);
-    //        } catch (Exception e) {
-    //            throw new IllegalArgumentException("分页查询,ProjectMonitorIndicatorConfig实体类转换为列表对象发生异常", e);
-    //        }
-    //    });
-    //    return ResultHelper.multi(pagedResultList);
-    //}
 }
 }
 
 

+ 6 - 1
src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/ProjectMonitorIndicatorConfig.java

@@ -2,9 +2,12 @@ package com.persagy.apm.alarmservice.project.monitorindicatorconfig.model;
 
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 import com.persagy.apm.common.model.entity.AuditableEntity;
 import com.persagy.apm.common.model.entity.AuditableEntity;
+import lombok.NoArgsConstructor;
+
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
 
 
@@ -14,6 +17,8 @@ import java.util.Date;
  * @version V1.0 2021-09-08 22:46:56
  * @version V1.0 2021-09-08 22:46:56
  */
  */
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
 @Data
 @Data
 @ApiModel(description = "项目监测指标配置")
 @ApiModel(description = "项目监测指标配置")
 public class ProjectMonitorIndicatorConfig extends AuditableEntity<ProjectMonitorIndicatorConfig> implements Serializable {
 public class ProjectMonitorIndicatorConfig extends AuditableEntity<ProjectMonitorIndicatorConfig> implements Serializable {
@@ -26,7 +31,7 @@ public class ProjectMonitorIndicatorConfig extends AuditableEntity<ProjectMonito
     private String monitorIndicatorId;
     private String monitorIndicatorId;
     
     
     @ApiModelProperty("计算方式id")
     @ApiModelProperty("计算方式id")
-    private String caculateMethodId;
+    private String calculateMethodId;
     
     
     @ApiModelProperty("项目id")
     @ApiModelProperty("项目id")
     private String projectId;
     private String projectId;

+ 1 - 1
src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/dto/AddProjectMonitorIndicatorConfigDTO.java

@@ -23,7 +23,7 @@ public class AddProjectMonitorIndicatorConfigDTO {
     
     
     @ApiModelProperty(value = "计算方式id", required = true)
     @ApiModelProperty(value = "计算方式id", required = true)
     @NotNull(message = "计算方式id不能为空") // todo 更新校验规则
     @NotNull(message = "计算方式id不能为空") // todo 更新校验规则
-    private String caculateMethodId;
+    private String calculateMethodId;
     
     
     @ApiModelProperty(value = "项目id", required = true)
     @ApiModelProperty(value = "项目id", required = true)
     @NotNull(message = "项目id不能为空") // todo 更新校验规则
     @NotNull(message = "项目id不能为空") // todo 更新校验规则

+ 15 - 13
src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/dto/PageQueryProjectMonitorIndicatorConfigDTO.java

@@ -3,10 +3,14 @@ package com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.dto;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import java.util.Date;
 import java.util.Date;
+import java.util.List;
+
 import com.persagy.apm.common.model.dto.PageDTO;
 import com.persagy.apm.common.model.dto.PageDTO;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 
 
+import javax.validation.constraints.NotBlank;
+
 /**
 /**
  * @author lixing
  * @author lixing
  * @version V1.0 2021-09-08 22:46:56
  * @version V1.0 2021-09-08 22:46:56
@@ -15,19 +19,17 @@ import lombok.EqualsAndHashCode;
 @Data
 @Data
 @ApiModel(value = "分页查询项目监测指标配置入参")
 @ApiModel(value = "分页查询项目监测指标配置入参")
 public class PageQueryProjectMonitorIndicatorConfigDTO extends PageDTO {
 public class PageQueryProjectMonitorIndicatorConfigDTO extends PageDTO {
-    @ApiModelProperty(value = "主键", required = true)
-    private String id;
-    
-    @ApiModelProperty(value = "监测对象id", required = true)
-    private String objId;
+    @ApiModelProperty(value = "监测对象名称(模糊查询)")
+    private String objName;
     
     
-    @ApiModelProperty(value = "监测指标id", required = true)
-    private String monitorIndicatorId;
-    
-    @ApiModelProperty(value = "计算方式id", required = true)
-    private String caculateMethodId;
-    
-    @ApiModelProperty(value = "项目id", required = true)
-    private String projectId;
+    @ApiModelProperty(value = "监测指标id列表")
+    private List<String> monitorIndicatorId;
     
     
+    @ApiModelProperty(value = "设备类编码", required = true)
+    @NotBlank(message = "查询条件缺少设备类编码")
+    private String classCode;
+
+    @ApiModelProperty(value = "分组条件", required = true)
+    @NotBlank(message = "查询条件缺少分组条件")
+    private String condition;
 }
 }

+ 1 - 1
src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/dto/QueryProjectMonitorIndicatorConfigDTO.java

@@ -19,7 +19,7 @@ public class QueryProjectMonitorIndicatorConfigDTO {
     private String monitorIndicatorId;
     private String monitorIndicatorId;
     
     
     @ApiModelProperty(value = "计算方式id", required = true)
     @ApiModelProperty(value = "计算方式id", required = true)
-    private String caculateMethodId;
+    private String calculateMethodId;
     
     
     @ApiModelProperty(value = "项目id", required = true)
     @ApiModelProperty(value = "项目id", required = true)
     private String projectId;
     private String projectId;

+ 7 - 4
src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/dto/QueryProjectMonitorIndicatorConfigDetailDTO.java

@@ -12,8 +12,11 @@ import javax.validation.constraints.NotNull;
 @Data
 @Data
 @ApiModel(value = "获取项目监测指标配置详情入参")
 @ApiModel(value = "获取项目监测指标配置详情入参")
 public class QueryProjectMonitorIndicatorConfigDetailDTO {
 public class QueryProjectMonitorIndicatorConfigDetailDTO {
-    @NotNull(message = "主键不能为空")
-    @ApiModelProperty(value = "主键", required = true)
-    private String id;
-    
+    @NotNull(message = "监测对象id不能为空")
+    @ApiModelProperty(value = "监测对象id", required = true)
+    private String objId;
+
+    @NotNull(message = "监测指标id不能为空")
+    @ApiModelProperty(value = "监测指标id", required = true)
+    private String monitorIndicatorId;
 }
 }

+ 4 - 13
src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/dto/UpdateProjectMonitorIndicatorConfigDTO.java

@@ -13,24 +13,15 @@ import java.util.Date;
 @Data
 @Data
 @ApiModel(value = "更新项目监测指标配置入参")
 @ApiModel(value = "更新项目监测指标配置入参")
 public class UpdateProjectMonitorIndicatorConfigDTO {
 public class UpdateProjectMonitorIndicatorConfigDTO {
-    @ApiModelProperty(value = "主键", required = true)
-    @NotNull(message = "主键不能为空") // todo 更新校验规则
-    private String id;
-    
     @ApiModelProperty(value = "监测对象id", required = true)
     @ApiModelProperty(value = "监测对象id", required = true)
-    @NotNull(message = "监测对象id不能为空") // todo 更新校验规则
+    @NotNull(message = "监测对象id不能为空")
     private String objId;
     private String objId;
     
     
     @ApiModelProperty(value = "监测指标id", required = true)
     @ApiModelProperty(value = "监测指标id", required = true)
-    @NotNull(message = "监测指标id不能为空") // todo 更新校验规则
+    @NotNull(message = "监测指标id不能为空")
     private String monitorIndicatorId;
     private String monitorIndicatorId;
     
     
     @ApiModelProperty(value = "计算方式id", required = true)
     @ApiModelProperty(value = "计算方式id", required = true)
-    @NotNull(message = "计算方式id不能为空") // todo 更新校验规则
-    private String caculateMethodId;
-    
-    @ApiModelProperty(value = "项目id", required = true)
-    @NotNull(message = "项目id不能为空") // todo 更新校验规则
-    private String projectId;
-    
+    @NotNull(message = "计算方式id不能为空")
+    private String calculateMethodId;
 }
 }

+ 7 - 22
src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/vo/ProjectMonitorIndicatorConfigItemVO.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.vo;
 package com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.vo;
 
 
+import com.persagy.apm.common.model.vo.SimpleObjVO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
@@ -14,31 +15,15 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 @ApiModel(value = "项目监测指标配置返回结果参数")
 @ApiModel(value = "项目监测指标配置返回结果参数")
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class ProjectMonitorIndicatorConfigItemVO {
 public class ProjectMonitorIndicatorConfigItemVO {
-    @ApiModelProperty("主键")
-    private String id;
+    @ApiModelProperty("监测对象")
+    private SimpleObjVO obj;
     
     
-    @ApiModelProperty("监测对象id")
-    private String objId;
+    @ApiModelProperty("监测指标")
+    private SimpleObjVO monitorIndicator;
     
     
-    @ApiModelProperty("监测指标id")
-    private String monitorIndicatorId;
-    
-    @ApiModelProperty("计算方式id")
-    private String caculateMethodId;
+    @ApiModelProperty("计算方式")
+    private SimpleObjVO calculateMethod;
     
     
     @ApiModelProperty("项目id")
     @ApiModelProperty("项目id")
     private String projectId;
     private String projectId;
-    
-    @ApiModelProperty("创建人")
-    private String creator;
-    
-    @ApiModelProperty("创建时间")
-    private Date creationTime;
-    
-    @ApiModelProperty("修改人")
-    private String modifier;
-    
-    @ApiModelProperty("修改时间")
-    private Date modifiedTime;
-    
 }
 }

+ 7 - 22
src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/model/vo/ProjectMonitorIndicatorConfigListItemVO.java

@@ -1,5 +1,6 @@
 package com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.vo;
 package com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.vo;
 
 
+import com.persagy.apm.common.model.vo.SimpleObjVO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
@@ -17,28 +18,12 @@ public class ProjectMonitorIndicatorConfigListItemVO {
     @ApiModelProperty("主键")
     @ApiModelProperty("主键")
     private String id;
     private String id;
     
     
-    @ApiModelProperty("监测对象id")
-    private String objId;
+    @ApiModelProperty("监测对象")
+    private SimpleObjVO obj;
     
     
-    @ApiModelProperty("监测指标id")
-    private String monitorIndicatorId;
-    
-    @ApiModelProperty("计算方式id")
-    private String caculateMethodId;
-    
-    @ApiModelProperty("项目id")
-    private String projectId;
-    
-    @ApiModelProperty("创建人")
-    private String creator;
-    
-    @ApiModelProperty("创建时间")
-    private Date creationTime;
-    
-    @ApiModelProperty("修改人")
-    private String modifier;
-    
-    @ApiModelProperty("修改时间")
-    private Date modifiedTime;
+    @ApiModelProperty("监测指标")
+    private SimpleObjVO monitorIndicator;
     
     
+    @ApiModelProperty("计算方式")
+    private SimpleObjVO calculateMethod;
 }
 }

+ 15 - 3
src/main/java/com/persagy/apm/alarmservice/project/monitorindicatorconfig/service/IProjectMonitorIndicatorConfigService.java

@@ -4,6 +4,7 @@ import com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.*;
 import com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.dto.*;
 import com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.dto.*;
 import java.util.List;
 import java.util.List;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.vo.ProjectMonitorIndicatorConfigListItemVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 
 
@@ -42,7 +43,7 @@ public interface IProjectMonitorIndicatorConfigService  {
     * @author lixing
     * @author lixing
     * @version V1.0 2021-09-08 22:46:56
     * @version V1.0 2021-09-08 22:46:56
     */
     */
-    public void updateProjectMonitorIndicatorConfig(UpdateProjectMonitorIndicatorConfigDTO updateProjectMonitorIndicatorConfigDTO);
+    public String updateProjectMonitorIndicatorConfig(UpdateProjectMonitorIndicatorConfigDTO updateProjectMonitorIndicatorConfigDTO);
     
     
     /**
     /**
     * 删除项目监测指标配置
     * 删除项目监测指标配置
@@ -67,9 +68,20 @@ public interface IProjectMonitorIndicatorConfigService  {
     * 分页查询项目监测指标配置
     * 分页查询项目监测指标配置
     * 
     * 
     * @param pageQueryProjectMonitorIndicatorConfigDTO pageQueryDTO
     * @param pageQueryProjectMonitorIndicatorConfigDTO pageQueryDTO
-    * @return IPage<ProjectMonitorIndicatorConfig>
+    * @return IPage<ProjectMonitorIndicatorConfigListItemVO>
     * @author lixing
     * @author lixing
     * @version V1.0 2021-09-08 22:46:56
     * @version V1.0 2021-09-08 22:46:56
     */
     */
-    public IPage<ProjectMonitorIndicatorConfig> pageQueryProjectMonitorIndicatorConfig(PageQueryProjectMonitorIndicatorConfigDTO pageQueryProjectMonitorIndicatorConfigDTO);
+    public IPage<ProjectMonitorIndicatorConfigListItemVO> pageQueryProjectMonitorIndicatorConfig(PageQueryProjectMonitorIndicatorConfigDTO pageQueryProjectMonitorIndicatorConfigDTO);
+
+    /**
+     * 根据监测对象id和监测指标id,获取设备监测指标的配置信息
+     *
+     * @param objId 监测对象id
+     * @param monitorIndicatorId 监测指标id
+     * @return 设备监测指标的配置信息
+     * @author lixing
+     * @version V1.0 2021/9/17 2:43 下午
+     */
+    public ProjectMonitorIndicatorConfig getConfigByObjAndIndicator(String objId, String monitorIndicatorId);
 }
 }

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

@@ -1,22 +1,44 @@
 package com.persagy.apm.alarmservice.project.monitorindicatorconfig.service.impl;
 package com.persagy.apm.alarmservice.project.monitorindicatorconfig.service.impl;
 
 
-import com.persagy.apm.common.context.AppContext;
-import com.persagy.apm.alarmservice.project.monitorindicatorconfig.dao.ProjectMonitorIndicatorConfigMapper;
-import com.persagy.apm.alarmservice.project.monitorindicatorconfig.service.IProjectMonitorIndicatorConfigService;
-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.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.*;
-import com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.dto.*;
-import java.util.List;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.google.common.base.CaseFormat;
-import com.persagy.apm.common.model.dto.Sort;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.persagy.apm.alarmservice.calculatemethod.model.CalculateMethod;
+import com.persagy.apm.alarmservice.calculatemethod.model.dto.QueryCalculateMethodDTO;
+import com.persagy.apm.alarmservice.calculatemethod.service.ICalculateMethodService;
+import com.persagy.apm.alarmservice.group.management.service.GroupManagementService;
+import com.persagy.apm.alarmservice.monitorindicator.model.MonitorIndicator;
+import com.persagy.apm.alarmservice.monitorindicator.model.dto.QueryMonitorIndicatorDTO;
+import com.persagy.apm.alarmservice.monitorindicator.service.IMonitorIndicatorService;
+import com.persagy.apm.alarmservice.project.monitorindicatorconfig.dao.ProjectMonitorIndicatorConfigMapper;
+import com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.ConvertProjectMonitorIndicatorConfigTool;
+import com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.ProjectMonitorIndicatorConfig;
+import com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.dto.AddProjectMonitorIndicatorConfigDTO;
+import com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.dto.PageQueryProjectMonitorIndicatorConfigDTO;
+import com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.dto.QueryProjectMonitorIndicatorConfigDTO;
+import com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.dto.UpdateProjectMonitorIndicatorConfigDTO;
+import com.persagy.apm.alarmservice.project.monitorindicatorconfig.model.vo.ProjectMonitorIndicatorConfigListItemVO;
+import com.persagy.apm.alarmservice.project.monitorindicatorconfig.service.IProjectMonitorIndicatorConfigService;
+import com.persagy.apm.common.constant.enums.BoolEnum;
+import com.persagy.apm.common.constant.enums.ValidEnum;
+import com.persagy.apm.common.context.AppContext;
+import com.persagy.apm.common.context.poems.PoemsContext;
+import com.persagy.apm.common.model.vo.SimpleObjVO;
+import com.persagy.apm.model.dto.GroupManagementDTO;
+import com.persagy.apm.model.vo.GroupManagementVo;
+import org.apache.commons.lang.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 org.springframework.util.CollectionUtils;
 
 
+import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
 /**
  * 项目监测指标配置(ProjectMonitorIndicatorConfig) service层
  * 项目监测指标配置(ProjectMonitorIndicatorConfig) service层
  *
  *
@@ -24,15 +46,23 @@ import org.springframework.util.CollectionUtils;
  * @version V1.0 2021-09-08 22:46:56
  * @version V1.0 2021-09-08 22:46:56
  */
  */
 @Service
 @Service
-public class ProjectMonitorIndicatorConfigServiceImpl extends ServiceImpl<ProjectMonitorIndicatorConfigMapper, ProjectMonitorIndicatorConfig> 
-    implements IProjectMonitorIndicatorConfigService {
-    
+public class ProjectMonitorIndicatorConfigServiceImpl extends ServiceImpl<ProjectMonitorIndicatorConfigMapper, ProjectMonitorIndicatorConfig>
+        implements IProjectMonitorIndicatorConfigService {
+
+    @Autowired
+    IMonitorIndicatorService monitorIndicatorService;
+    @Autowired
+    ICalculateMethodService calculateMethodService;
+    @Autowired
+    GroupManagementService groupManagementService;
+
     /**
     /**
-    * 创建项目监测指标配置
-    * @return 项目监测指标配置主键
-    * @author lixing
-    * @version V1.0 2021-09-08 22:46:56
-    */
+     * 创建项目监测指标配置
+     *
+     * @return 项目监测指标配置主键
+     * @author lixing
+     * @version V1.0 2021-09-08 22:46:56
+     */
     @Override
     @Override
     public String createProjectMonitorIndicatorConfig(AddProjectMonitorIndicatorConfigDTO addProjectMonitorIndicatorConfigDTO) {
     public String createProjectMonitorIndicatorConfig(AddProjectMonitorIndicatorConfigDTO addProjectMonitorIndicatorConfigDTO) {
         ProjectMonitorIndicatorConfig projectMonitorIndicatorConfig = ConvertProjectMonitorIndicatorConfigTool.INSTANCE.convertAddDto2Entity(addProjectMonitorIndicatorConfigDTO);
         ProjectMonitorIndicatorConfig projectMonitorIndicatorConfig = ConvertProjectMonitorIndicatorConfigTool.INSTANCE.convertAddDto2Entity(addProjectMonitorIndicatorConfigDTO);
@@ -41,7 +71,7 @@ public class ProjectMonitorIndicatorConfigServiceImpl extends ServiceImpl<Projec
         save(projectMonitorIndicatorConfig);
         save(projectMonitorIndicatorConfig);
         return projectMonitorIndicatorConfig.getId();
         return projectMonitorIndicatorConfig.getId();
     }
     }
-    
+
     /**
     /**
      * 如果某些字段没有赋值,使用默认的值
      * 如果某些字段没有赋值,使用默认的值
      *
      *
@@ -52,16 +82,17 @@ public class ProjectMonitorIndicatorConfigServiceImpl extends ServiceImpl<Projec
     private void setDefaultValue(ProjectMonitorIndicatorConfig projectMonitorIndicatorConfig) {
     private void setDefaultValue(ProjectMonitorIndicatorConfig projectMonitorIndicatorConfig) {
         projectMonitorIndicatorConfig.setCreator(AppContext.getContext().getAccountId());
         projectMonitorIndicatorConfig.setCreator(AppContext.getContext().getAccountId());
         // todo 其他默认的属性
         // todo 其他默认的属性
-        
+
     }
     }
-    
+
     /**
     /**
-    * 项目监测指标配置详情
-    * @param id 主键
-    * @return 部门do类
-    * @author lixing
-    * @version V1.0 2021-09-08 22:46:56
-    */
+     * 项目监测指标配置详情
+     *
+     * @param id 主键
+     * @return 部门do类
+     * @author lixing
+     * @version V1.0 2021-09-08 22:46:56
+     */
     @Override
     @Override
     public ProjectMonitorIndicatorConfig queryProjectMonitorIndicatorConfigDetail(String id) {
     public ProjectMonitorIndicatorConfig queryProjectMonitorIndicatorConfigDetail(String id) {
         ProjectMonitorIndicatorConfig projectMonitorIndicatorConfig = getById(id);
         ProjectMonitorIndicatorConfig projectMonitorIndicatorConfig = getById(id);
@@ -70,20 +101,25 @@ public class ProjectMonitorIndicatorConfigServiceImpl extends ServiceImpl<Projec
         }
         }
         return projectMonitorIndicatorConfig;
         return projectMonitorIndicatorConfig;
     }
     }
-    
+
     /**
     /**
-    * 更新项目监测指标配置
-    * @author lixing
-    * @version V1.0 2021-09-08 22:46:56
-    */
+     * 更新项目监测指标配置
+     *
+     * @author lixing
+     * @version V1.0 2021-09-08 22:46:56
+     */
     @Override
     @Override
-    public void updateProjectMonitorIndicatorConfig(UpdateProjectMonitorIndicatorConfigDTO updateProjectMonitorIndicatorConfigDTO) {
-        ProjectMonitorIndicatorConfig projectMonitorIndicatorConfig = getById(updateProjectMonitorIndicatorConfigDTO.getId());
-        projectMonitorIndicatorConfig = ConvertProjectMonitorIndicatorConfigTool.INSTANCE.convertUpdateDto2Entity(projectMonitorIndicatorConfig, updateProjectMonitorIndicatorConfigDTO);
+    public String updateProjectMonitorIndicatorConfig(UpdateProjectMonitorIndicatorConfigDTO updateProjectMonitorIndicatorConfigDTO) {
+        ProjectMonitorIndicatorConfig projectMonitorIndicatorConfig =
+                getConfigByObjAndIndicator(
+                        updateProjectMonitorIndicatorConfigDTO.getObjId(),
+                        updateProjectMonitorIndicatorConfigDTO.getMonitorIndicatorId());
+        projectMonitorIndicatorConfig.setCalculateMethodId(updateProjectMonitorIndicatorConfigDTO.getCalculateMethodId());
         projectMonitorIndicatorConfig.setModifier(AppContext.getContext().getAccountId());
         projectMonitorIndicatorConfig.setModifier(AppContext.getContext().getAccountId());
         updateById(projectMonitorIndicatorConfig);
         updateById(projectMonitorIndicatorConfig);
+        return projectMonitorIndicatorConfig.getId();
     }
     }
-    
+
     /**
     /**
      * 校验项目监测指标配置是否可删除
      * 校验项目监测指标配置是否可删除
      *
      *
@@ -105,13 +141,14 @@ public class ProjectMonitorIndicatorConfigServiceImpl extends ServiceImpl<Projec
 
 
         return projectMonitorIndicatorConfig;
         return projectMonitorIndicatorConfig;
     }
     }
-    
+
     /**
     /**
-    * 删除项目监测指标配置
-    * @param id 主键
-    * @author lixing
-    * @version V1.0 2021-09-08 22:46:56
-    */
+     * 删除项目监测指标配置
+     *
+     * @param id 主键
+     * @author lixing
+     * @version V1.0 2021-09-08 22:46:56
+     */
     @Override
     @Override
     public void deleteProjectMonitorIndicatorConfig(String id) {
     public void deleteProjectMonitorIndicatorConfig(String id) {
         // 校验是否可删除
         // 校验是否可删除
@@ -120,92 +157,255 @@ public class ProjectMonitorIndicatorConfigServiceImpl extends ServiceImpl<Projec
         projectMonitorIndicatorConfig.setValid(ValidEnum.FALSE.getType());
         projectMonitorIndicatorConfig.setValid(ValidEnum.FALSE.getType());
         updateById(projectMonitorIndicatorConfig);
         updateById(projectMonitorIndicatorConfig);
     }
     }
-    
+
     /**
     /**
-    * 查询项目监测指标配置
-    * @return List<ProjectMonitorIndicatorConfig>
-    * @author lixing
-    * @version V1.0 2021-09-08 22:46:56
-    */
+     * 查询项目监测指标配置
+     *
+     * @return List<ProjectMonitorIndicatorConfig>
+     * @author lixing
+     * @version V1.0 2021-09-08 22:46:56
+     */
     @Override
     @Override
-    public List<ProjectMonitorIndicatorConfig> queryProjectMonitorIndicatorConfigList(QueryProjectMonitorIndicatorConfigDTO queryProjectMonitorIndicatorConfigDTO) {
+    public List<ProjectMonitorIndicatorConfig> queryProjectMonitorIndicatorConfigList(
+            QueryProjectMonitorIndicatorConfigDTO queryProjectMonitorIndicatorConfigDTO) {
         QueryWrapper<ProjectMonitorIndicatorConfig> queryWrapper = new QueryWrapper<>();
         QueryWrapper<ProjectMonitorIndicatorConfig> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq(ProjectMonitorIndicatorConfig.PROP_VALID, ValidEnum.TRUE.getType());
         queryWrapper.eq(ProjectMonitorIndicatorConfig.PROP_VALID, ValidEnum.TRUE.getType());
         // 默认按创建时间倒序排序
         // 默认按创建时间倒序排序
         queryWrapper.orderBy(true, false, ProjectMonitorIndicatorConfig.PROP_CREATIONTIME);
         queryWrapper.orderBy(true, false, ProjectMonitorIndicatorConfig.PROP_CREATIONTIME);
-        
+
         if (queryProjectMonitorIndicatorConfigDTO != null) {
         if (queryProjectMonitorIndicatorConfigDTO != null) {
-                                
+
             // todo 需判断使用like还是eq
             // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryProjectMonitorIndicatorConfigDTO.getObjId())) {
             if (StringUtils.isNotEmpty(queryProjectMonitorIndicatorConfigDTO.getObjId())) {
                 queryWrapper.like(ProjectMonitorIndicatorConfig.PROP_OBJ_ID, queryProjectMonitorIndicatorConfigDTO.getObjId());
                 queryWrapper.like(ProjectMonitorIndicatorConfig.PROP_OBJ_ID, queryProjectMonitorIndicatorConfigDTO.getObjId());
             }
             }
-                                        
+
             // todo 需判断使用like还是eq
             // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryProjectMonitorIndicatorConfigDTO.getMonitorIndicatorId())) {
             if (StringUtils.isNotEmpty(queryProjectMonitorIndicatorConfigDTO.getMonitorIndicatorId())) {
                 queryWrapper.like(ProjectMonitorIndicatorConfig.PROP_MONITOR_INDICATOR_ID, queryProjectMonitorIndicatorConfigDTO.getMonitorIndicatorId());
                 queryWrapper.like(ProjectMonitorIndicatorConfig.PROP_MONITOR_INDICATOR_ID, queryProjectMonitorIndicatorConfigDTO.getMonitorIndicatorId());
             }
             }
-                                        
+
             // todo 需判断使用like还是eq
             // todo 需判断使用like还是eq
-            if (StringUtils.isNotEmpty(queryProjectMonitorIndicatorConfigDTO.getCaculateMethodId())) {
-                queryWrapper.like(ProjectMonitorIndicatorConfig.PROP_CACULATE_METHOD_ID, queryProjectMonitorIndicatorConfigDTO.getCaculateMethodId());
+            if (StringUtils.isNotEmpty(queryProjectMonitorIndicatorConfigDTO.getCalculateMethodId())) {
+                queryWrapper.like(ProjectMonitorIndicatorConfig.PROP_CACULATE_METHOD_ID, queryProjectMonitorIndicatorConfigDTO.getCalculateMethodId());
             }
             }
-                                        
+
             // todo 需判断使用like还是eq
             // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryProjectMonitorIndicatorConfigDTO.getProjectId())) {
             if (StringUtils.isNotEmpty(queryProjectMonitorIndicatorConfigDTO.getProjectId())) {
                 queryWrapper.like(ProjectMonitorIndicatorConfig.PROP_PROJECT_ID, queryProjectMonitorIndicatorConfigDTO.getProjectId());
                 queryWrapper.like(ProjectMonitorIndicatorConfig.PROP_PROJECT_ID, queryProjectMonitorIndicatorConfigDTO.getProjectId());
             }
             }
-                                            
+
         }
         }
-        
+
         return list(queryWrapper);
         return list(queryWrapper);
     }
     }
-    
+
     /**
     /**
-    * 分页查询项目监测指标配置
-    * @return IPage<ProjectMonitorIndicatorConfig>
-    * @author lixing
-    * @version V1.0 2021-09-08 22:46:56
-    */
+     * 分页查询项目监测指标配置
+     *
+     * @return IPage<ProjectMonitorIndicatorConfigListItemVO>
+     * @author lixing
+     * @version V1.0 2021-09-08 22:46:56
+     */
     @Override
     @Override
-    public IPage<ProjectMonitorIndicatorConfig> pageQueryProjectMonitorIndicatorConfig(PageQueryProjectMonitorIndicatorConfigDTO pageQueryProjectMonitorIndicatorConfigDTO) {
-        QueryWrapper<ProjectMonitorIndicatorConfig> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(ProjectMonitorIndicatorConfig.PROP_VALID, ValidEnum.TRUE.getType());
-        // 这里认为pageQueryDTO是经过校验的,肯定包含分页信息
-        IPage<ProjectMonitorIndicatorConfig> pageParam = new Page<>(pageQueryProjectMonitorIndicatorConfigDTO.getPage(), pageQueryProjectMonitorIndicatorConfigDTO.getSize(),true);
-        // 排序信息
-        if(CollectionUtils.isEmpty(pageQueryProjectMonitorIndicatorConfigDTO.getOrders())){
-            // 默认按创建时间倒序排序
-            queryWrapper.orderBy(true, false, ProjectMonitorIndicatorConfig.PROP_CREATIONTIME);
-        }else {
-            List<Sort> orders = pageQueryProjectMonitorIndicatorConfigDTO.getOrders();
-            for(Sort sort: orders) {
-                // 将驼峰转换为下划线格式
-                sort.setColumn(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE,sort.getColumn()));
-                queryWrapper.orderBy(true, sort.isAsc(), sort.getColumn());
+    public IPage<ProjectMonitorIndicatorConfigListItemVO> pageQueryProjectMonitorIndicatorConfig(
+            PageQueryProjectMonitorIndicatorConfigDTO pageQueryProjectMonitorIndicatorConfigDTO) {
+        // 初始化返回值
+        IPage<ProjectMonitorIndicatorConfigListItemVO> result = new Page<>();
+        result.setRecords(Lists.newArrayList());
+        result.setTotal(0);
+
+        // 获取分组下的监测指标,查询条件:设备类+监测指标id列表
+        List<MonitorIndicator> monitorIndicators =  queryGroupIndicators(
+                pageQueryProjectMonitorIndicatorConfigDTO.getClassCode(),
+                pageQueryProjectMonitorIndicatorConfigDTO.getMonitorIndicatorId());
+        if (CollectionUtils.isEmpty(monitorIndicators)) {
+            return result;
+        }
+        // 监测指标按名称排序
+        monitorIndicators = monitorIndicators.stream().sorted(Comparator.comparing(MonitorIndicator::getName,
+                Collator.getInstance(java.util.Locale.CHINA))).collect(Collectors.toList());
+
+        // 查询分组下的监测对象, 查询条件:设备类+分组条件+项目id+设备名称(模糊)
+        List<GroupManagementVo> objList = queryEquipList(pageQueryProjectMonitorIndicatorConfigDTO);
+        if (CollectionUtils.isEmpty(objList)) {
+            return result;
+        }
+
+        // 监测对象按名称排序
+        objList = objList.stream().sorted(Comparator.comparing(GroupManagementVo::getLocalName,
+                Collator.getInstance(java.util.Locale.CHINA))).collect(Collectors.toList());
+
+        // 监测对象+设备组合成返回结果。因为数据量太大,结果中不含计算方式,在分页后再添加计算方式
+        List<ProjectMonitorIndicatorConfigListItemVO> recordList = combineResult(monitorIndicators, objList);
+
+        // 返回结果分页
+        List<ProjectMonitorIndicatorConfigListItemVO> resultRecordList = subResultByPageInfo(
+                pageQueryProjectMonitorIndicatorConfigDTO, recordList);
+
+        // 项目监测指标初始化计算方式
+        resultRecordList.forEach(this::addCalculateMethodInfo);
+
+        result.setRecords(resultRecordList);
+        result.setTotal(recordList.size());
+        return result;
+    }
+
+    /**
+     * 给项目监测指标配置添加计算方式信息
+     *
+     * @param record 项目监测指标配置
+     * @author lixing
+     * @version V1.0 2021/9/17 9:49 下午
+     */
+    private void addCalculateMethodInfo(ProjectMonitorIndicatorConfigListItemVO record) {
+        if (record.getObj() == null || record.getMonitorIndicator() == null) {
+            return;
+        }
+        // 获取设备的监测指标配置信息
+        ProjectMonitorIndicatorConfig configByObjAndIndicator = getConfigByObjAndIndicator(
+                record.getObj().getId(), record.getMonitorIndicator().getId());
+        String calculateMethodId = configByObjAndIndicator.getCalculateMethodId();
+        // 获取计算方式名称
+        String methodName = calculateMethodService.getMethodName(calculateMethodId);
+        record.setCalculateMethod(new SimpleObjVO(calculateMethodId, methodName));
+    }
+
+    /**
+     * 根据分页信息截取项目监测指标配置列表
+     *
+     * @param pageQueryProjectMonitorIndicatorConfigDTO 分页查询条件
+     * @param recordList 全部项目监测指标配置列表
+     * @return 截取后的项目监测指标配置列表
+     * @author lixing
+     * @version V1.0 2021/9/17 9:29 下午
+     */
+    private List<ProjectMonitorIndicatorConfigListItemVO> subResultByPageInfo(
+            PageQueryProjectMonitorIndicatorConfigDTO pageQueryProjectMonitorIndicatorConfigDTO, List<ProjectMonitorIndicatorConfigListItemVO> recordList) {
+        Integer page = pageQueryProjectMonitorIndicatorConfigDTO.getPage();
+        Integer size = pageQueryProjectMonitorIndicatorConfigDTO.getSize();
+
+        if (page == null || size == null) {
+            throw new IllegalArgumentException("缺少分页条件");
+        }
+        return recordList.subList((page - 1) * size, page * size);
+    }
+
+    /**
+     * 监测对象+设备组合成成项目监测指标配置列表
+     *
+     * @param monitorIndicators 监测对象列表
+     * @param objList 设备列表
+     * @return 项目监测指标配置列表
+     * @author lixing
+     * @version V1.0 2021/9/17 9:27 下午
+     */
+    private List<ProjectMonitorIndicatorConfigListItemVO> combineResult(
+            List<MonitorIndicator> monitorIndicators, List<GroupManagementVo> objList) {
+        List<ProjectMonitorIndicatorConfigListItemVO> recordList = new ArrayList<>();
+        for (MonitorIndicator monitorIndicator : monitorIndicators) {
+            for (GroupManagementVo obj : objList) {
+                ProjectMonitorIndicatorConfigListItemVO projectMonitorIndicatorConfigListItemVO =
+                        new ProjectMonitorIndicatorConfigListItemVO();
+                projectMonitorIndicatorConfigListItemVO.setObj(new SimpleObjVO(obj.getId(), obj.getLocalName()));
+                projectMonitorIndicatorConfigListItemVO.setMonitorIndicator(
+                        new SimpleObjVO(monitorIndicator.getId(), monitorIndicator.getName()));
+                recordList.add(projectMonitorIndicatorConfigListItemVO);
             }
             }
         }
         }
-                
-        // todo 需判断使用like还是eq
-        if (StringUtils.isNotEmpty(pageQueryProjectMonitorIndicatorConfigDTO.getObjId())) {
-            queryWrapper.like(ProjectMonitorIndicatorConfig.PROP_OBJ_ID, pageQueryProjectMonitorIndicatorConfigDTO.getObjId());
+        return recordList;
+    }
+
+    /**
+     * 根据项目监测指标配置查询条件获取应该加载的设备
+     *
+     * @param pageQueryProjectMonitorIndicatorConfigDTO 项目监测指标配置查询条件
+     * @return 设备列表
+     * @author lixing
+     * @version V1.0 2021/9/17 9:03 下午
+     */
+    private List<GroupManagementVo> queryEquipList(PageQueryProjectMonitorIndicatorConfigDTO pageQueryProjectMonitorIndicatorConfigDTO) {
+        String projectId = PoemsContext.getContext().getProjectId();
+        GroupManagementDTO groupManagementDTO = new GroupManagementDTO();
+        groupManagementDTO.setClassCode(pageQueryProjectMonitorIndicatorConfigDTO.getClassCode());
+        groupManagementDTO.setCondition(pageQueryProjectMonitorIndicatorConfigDTO.getCondition());
+        groupManagementDTO.setProjectId(projectId);
+        groupManagementDTO.setLocalName(pageQueryProjectMonitorIndicatorConfigDTO.getObjName());
+        return groupManagementService.getEquipList(groupManagementDTO);
+    }
+
+    /**
+     * 获取分组下的监测指标
+     *
+     * @param classCode 分组设备编码
+     * @param indicatorIds 监测指标id列表
+     * @return 分组下的监测指标
+     * @author lixing
+     * @version V1.0 2021/9/17 7:49 下午
+     */
+    private List<MonitorIndicator> queryGroupIndicators(String classCode, List<String> indicatorIds) {
+        QueryMonitorIndicatorDTO queryMonitorIndicatorDTO = new QueryMonitorIndicatorDTO();
+        queryMonitorIndicatorDTO.setClassCode(classCode);
+        queryMonitorIndicatorDTO.setIds(indicatorIds);
+        return monitorIndicatorService.queryMonitorIndicatorList(queryMonitorIndicatorDTO);
+    }
+
+    @Override
+    public ProjectMonitorIndicatorConfig getConfigByObjAndIndicator(String objId, String monitorIndicatorId) {
+        String projectId = PoemsContext.getContext().getProjectId();
+        if (StringUtils.isBlank(objId) || StringUtils.isBlank(monitorIndicatorId)
+                || StringUtils.isBlank(projectId)) {
+            throw new IllegalArgumentException("" +
+                    "ProjectMonitorIndicatorConfigServiceImpl.getConfigByObjAndIndicator:监测对象id、监测指标id、项目id不能为空");
         }
         }
-                            
-        // todo 需判断使用like还是eq
-        if (StringUtils.isNotEmpty(pageQueryProjectMonitorIndicatorConfigDTO.getMonitorIndicatorId())) {
-            queryWrapper.like(ProjectMonitorIndicatorConfig.PROP_MONITOR_INDICATOR_ID, pageQueryProjectMonitorIndicatorConfigDTO.getMonitorIndicatorId());
+
+
+        // 根据监测对象id和监测指标id,获取设备监测指标的配置信息
+        QueryProjectMonitorIndicatorConfigDTO queryProjectMonitorIndicatorConfigDTO =
+                new QueryProjectMonitorIndicatorConfigDTO();
+        queryProjectMonitorIndicatorConfigDTO.setObjId(objId);
+        queryProjectMonitorIndicatorConfigDTO.setMonitorIndicatorId(monitorIndicatorId);
+
+        queryProjectMonitorIndicatorConfigDTO.setProjectId(projectId);
+        List<ProjectMonitorIndicatorConfig> projectMonitorIndicatorConfigs =
+                queryProjectMonitorIndicatorConfigList(queryProjectMonitorIndicatorConfigDTO);
+
+        if (!CollectionUtils.isEmpty(projectMonitorIndicatorConfigs)) {
+            return projectMonitorIndicatorConfigs.get(0);
         }
         }
-                            
-        // todo 需判断使用like还是eq
-        if (StringUtils.isNotEmpty(pageQueryProjectMonitorIndicatorConfigDTO.getCaculateMethodId())) {
-            queryWrapper.like(ProjectMonitorIndicatorConfig.PROP_CACULATE_METHOD_ID, pageQueryProjectMonitorIndicatorConfigDTO.getCaculateMethodId());
+
+        // 如果配置表中未查询到配置信息,获取监测指标的默认计算方式并返回
+        return getDefaultConfig(objId, monitorIndicatorId, projectId);
+    }
+
+    /**
+     * 获取设备监测指标的默认取值
+     *
+     * @param objId 监测对象id
+     * @param monitorIndicatorId 监测指标id
+     * @param projectId 项目id
+     * @return 设备监测指标的默认取值
+     * @author lixing
+     * @version V1.0 2021/9/17 2:57 下午
+     */
+    private ProjectMonitorIndicatorConfig getDefaultConfig(String objId, String monitorIndicatorId, String projectId) {
+        if (StringUtils.isBlank(objId) || StringUtils.isBlank(monitorIndicatorId) ||
+                StringUtils.isBlank(projectId)) {
+            throw new IllegalArgumentException("" +
+                    "ProjectMonitorIndicatorConfigServiceImpl.getDefaultConfig:监测对象id、监测指标id、项目id不能为空");
         }
         }
-                            
-        // todo 需判断使用like还是eq
-        if (StringUtils.isNotEmpty(pageQueryProjectMonitorIndicatorConfigDTO.getProjectId())) {
-            queryWrapper.like(ProjectMonitorIndicatorConfig.PROP_PROJECT_ID, pageQueryProjectMonitorIndicatorConfigDTO.getProjectId());
+
+        // 获取监测指标的默认计算方式
+        QueryCalculateMethodDTO queryCalculateMethodDTO = new QueryCalculateMethodDTO();
+        queryCalculateMethodDTO.setMonitorIndicatorId(monitorIndicatorId);
+        queryCalculateMethodDTO.setIsDefault(BoolEnum.TRUE.getType());
+        List<CalculateMethod> calculateMethods = calculateMethodService.queryCalculateMethodList(queryCalculateMethodDTO);
+        String calculateMethodId = null;
+        if (!CollectionUtils.isEmpty(calculateMethods)) {
+            calculateMethodId = calculateMethods.get(0).getId();
         }
         }
-                                    
-        return getBaseMapper().selectPage(pageParam, queryWrapper);
+
+        return new ProjectMonitorIndicatorConfig(
+                objId, monitorIndicatorId, calculateMethodId, projectId);
     }
     }
 }
 }

+ 3 - 2
src/main/java/com/persagy/apm/common/aspect/AlarmDataAspect.java

@@ -2,6 +2,7 @@ package com.persagy.apm.common.aspect;
 
 
 import com.persagy.apm.common.context.poems.PoemsContext;
 import com.persagy.apm.common.context.poems.PoemsContext;
 import com.persagy.apm.energyalarmstarter.alarmdata.feign.AlarmUrlParam;
 import com.persagy.apm.energyalarmstarter.alarmdata.feign.AlarmUrlParam;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.common.UrlParamDTO;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Aspect;
@@ -33,11 +34,11 @@ public class AlarmDataAspect {
             return;
             return;
         }
         }
         for (Object arg : args) {
         for (Object arg : args) {
-            if (!(arg instanceof AlarmUrlParam)) {
+            if (!(arg instanceof UrlParamDTO)) {
                 continue;
                 continue;
             }
             }
             // 通用参数配置
             // 通用参数配置
-            AlarmUrlParam argParam = (AlarmUrlParam) arg;
+            UrlParamDTO argParam = (UrlParamDTO) arg;
             argParam.setProjectId(PoemsContext.getContext().getProjectId());
             argParam.setProjectId(PoemsContext.getContext().getProjectId());
             argParam.setUserId(PoemsContext.getContext().getUserId());
             argParam.setUserId(PoemsContext.getContext().getUserId());
             argParam.setGroupCode(PoemsContext.getContext().getGroupCode());
             argParam.setGroupCode(PoemsContext.getContext().getGroupCode());

+ 22 - 3
src/main/java/com/persagy/apm/common/enums/AlarmDicTypeEnum.java

@@ -1,8 +1,10 @@
 package com.persagy.apm.common.enums;
 package com.persagy.apm.common.enums;
 
 
 import com.persagy.apm.common.model.annotation.SwaggerDisplayEnum;
 import com.persagy.apm.common.model.annotation.SwaggerDisplayEnum;
+import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
+import org.apache.commons.lang.StringUtils;
 
 
 /**
 /**
  * 报警字典类型
  * 报警字典类型
@@ -11,6 +13,7 @@ import lombok.Setter;
  * @version V1.0 2021/9/13 10:01 上午
  * @version V1.0 2021/9/13 10:01 上午
  **/
  **/
 @SwaggerDisplayEnum
 @SwaggerDisplayEnum
+@AllArgsConstructor
 public enum AlarmDicTypeEnum {
 public enum AlarmDicTypeEnum {
     /**
     /**
      * 字典类型
      * 字典类型
@@ -30,9 +33,25 @@ public enum AlarmDicTypeEnum {
     @Getter
     @Getter
     private String desc;
     private String desc;
 
 
-    AlarmDicTypeEnum(String type, String desc) {
-        this.type = type;
-        this.desc = desc;
+    /**
+     * 根据type获取到枚举对象
+     *
+     * @param type 报告状态编码
+     * @return 报告状态枚举对象
+     * @author lixing
+     * @version V1.0 2021/5/31 4:06 下午
+     */
+    public static AlarmDicTypeEnum getByType(String type) {
+        if (StringUtils.isBlank(type)) {
+            return null;
+        }
+        AlarmDicTypeEnum[] enums = AlarmDicTypeEnum.values();
+        for (AlarmDicTypeEnum item : enums) {
+            if (type.equals(item.getType())) {
+                return item;
+            }
+        }
+        return null;
     }
     }
 }
 }
 
 

+ 1 - 0
src/main/java/com/persagy/apm/model/dto/GroupManagementDTO.java

@@ -3,6 +3,7 @@ package com.persagy.apm.model.dto;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotBlank;
 
 

+ 2 - 0
src/main/resources/mapper/MonitorIndicatorMapper.xml

@@ -5,6 +5,8 @@
 		<result column="id" property="id" />
 		<result column="id" property="id" />
 		<result column="name" property="name" />
 		<result column="name" property="name" />
 		<result column="class_code" property="classCode" />
 		<result column="class_code" property="classCode" />
+		<result column="unit" property="unit" />
+		<result column="dic" property="dic" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
 		<result column="ts" property="ts" />
 		<result column="ts" property="ts" />
 		<result column="creator" property="creator" />
 		<result column="creator" property="creator" />
 		<result column="creation_time" property="creationTime" />
 		<result column="creation_time" property="creationTime" />

+ 1 - 1
src/main/resources/mapper/ProjectMonitorIndicatorConfigMapper.xml

@@ -5,7 +5,7 @@
 		<result column="id" property="id" />
 		<result column="id" property="id" />
 		<result column="obj_id" property="objId" />
 		<result column="obj_id" property="objId" />
 		<result column="monitor_indicator_id" property="monitorIndicatorId" />
 		<result column="monitor_indicator_id" property="monitorIndicatorId" />
-		<result column="caculate_method_id" property="caculateMethodId" />
+		<result column="calculate_method_id" property="calculateMethodId" />
 		<result column="project_id" property="projectId" />
 		<result column="project_id" property="projectId" />
 		<result column="ts" property="ts" />
 		<result column="ts" property="ts" />
 		<result column="creator" property="creator" />
 		<result column="creator" property="creator" />