lixing il y a 3 ans
Parent
commit
cd3b526325

+ 2 - 0
readme.md

@@ -17,6 +17,8 @@
 - 设置集团和项目报警条件不再同步在数据中台创建报警条件
 # v2.1.0
 - 将报警列表重新划分为当前列表和历史列表两个类型,去掉已忽略列表。重新定义当前和历史报警的逻辑
+# v2.2.0
+- 支持设备维保服务
 # v3.0.0
 - 将报警中台dmp-alarm的代码合并到energy-alarm-service服务
 - 将energy-alarm-service服务spring服务名更改为dmp-alarm

+ 6 - 1
src/main/java/com/persagy/apm/alarmservice/group/alarmrecord/controller/AlarmRecordController.java

@@ -112,7 +112,12 @@ public class AlarmRecordController {
             Sort sort = new Sort();
             sort.setColumn("triggerTime");
             sort.setAsc(false);
-            orders = Lists.newArrayList(sort);
+
+            Sort sort1 = new Sort();
+            sort1.setColumn("id");
+            sort1.setAsc(false);
+
+            orders = Lists.newArrayList(sort, sort1);
         }
         // pageQueryAlarmRecordDTO中的排序转换为queryDTO中的排序
         List<OrderDTO> orderDTOList = ConvertAlarmRecordTool.INSTANCE.convert2OrderDTOList(orders);

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

@@ -37,6 +37,7 @@ public interface ConvertAlarmRecordTool {
 
     List<OrderDTO> convert2OrderDTOList(List<Sort> sortList);
 
+    @Mapping(target = "listType", source = "listType", ignore = true)
     PageQueryAlarmRecordDTO convert2PageQueryAlarmRecordDTO(DownloadAllAlarmRecordDTO downloadAllAlarmRecordDTO);
 
     AlarmRecordItemVO convert2AlarmRecordItemVO(AlarmRecordListItem alarmRecordListItem);

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

@@ -16,7 +16,7 @@ import java.util.List;
 @Data
 @ApiModel
 public class DownloadAllAlarmRecordDTO {
-    @ApiModelProperty(value = "列表类型CURRENT,HISTORY", required = true)
+    @ApiModelProperty(value = "列表类型", required = true)
     private String listType;
     @ApiModelProperty(value = "报警开始时间")
     private Date triggerStartTime;

+ 78 - 28
src/main/java/com/persagy/apm/alarmservice/group/alarmrecord/service/AlarmRecordWrapper.java

@@ -97,7 +97,7 @@ public class AlarmRecordWrapper {
         // ns/1000=s s/60=min min/60=hour
         // 保留两位小数
         BigDecimal bd = new BigDecimal(durationNs);
-        bd = bd.divide(new BigDecimal(1000 * 60 * 60),2, RoundingMode.HALF_UP);
+        bd = bd.divide(new BigDecimal(1000 * 60 * 60), 2, RoundingMode.HALF_UP);
         return bd.toString();
     }
 
@@ -113,9 +113,9 @@ public class AlarmRecordWrapper {
         Set<String> objIds = dmpResult.getData().stream().map(AlarmRecordItem::getObjId).collect(Collectors.toSet());
         List<String> objIdList = Lists.newArrayList(objIds);
         // 获取查询结果中的设备
-        Map<String,Set<String>> categoryObjIdsMap = categoryObjIdsMap(dmpResult);
+        Map<String, Set<String>> categoryObjIdsMap = categoryObjIdsMap(dmpResult);
         // 获取这些设备所在的分组信息
-//        Map<String, SimpleObjVO> objGroupMap = groupManagementService.queryObjGroup(objIdList);
+        //        Map<String, SimpleObjVO> objGroupMap = groupManagementService.queryObjGroup(objIdList);
         Map<String, Map<String, SimpleObjVO>> objGroupMap = groupManagementService.queryObjGroupMap(categoryObjIdsMap);
         // 获取这些设备的名称
         Map<String, EquipItem> objMap = groupManagementService.queryEquipsByIds(objIdList);
@@ -128,21 +128,21 @@ public class AlarmRecordWrapper {
         Map<String, SimpleObjVO> alarmItemMap = getAlarmItemMap(itemCodes);
 
         return dmpResult.getData().stream().map(alarmRecordItem ->
-                getAlarmRecordListItem(objGroupMap, objMap, alarmItemMap, alarmRecordItem)).
+                        getAlarmRecordListItem(objGroupMap, objMap, alarmItemMap, alarmRecordItem)).
                 collect(Collectors.toList());
     }
 
-    public Map<String,Set<String>> categoryObjIdsMap(DmpResult<List<AlarmRecordItem>> dmpResult){
+    public Map<String, Set<String>> categoryObjIdsMap(DmpResult<List<AlarmRecordItem>> dmpResult) {
         List<AlarmRecordItem> alarmRecordItemList = dmpResult.getData();
-        if (CollectionUtils.isEmpty(alarmRecordItemList)){
+        if (CollectionUtils.isEmpty(alarmRecordItemList)) {
             return new HashMap<>();
         }
-        Map<String,Set<String>> categoryObjIdsMap = new HashMap<>();
+        Map<String, Set<String>> categoryObjIdsMap = new HashMap<>();
         alarmRecordItemList.forEach(alarmRecordItem -> {
-            if (categoryObjIdsMap.containsKey(alarmRecordItem.getCategory())){
+            if (categoryObjIdsMap.containsKey(alarmRecordItem.getCategory())) {
                 categoryObjIdsMap.get(alarmRecordItem.getCategory()).add(alarmRecordItem.getObjId());
-            }else{
-                categoryObjIdsMap.put(alarmRecordItem.getCategory(),new HashSet<>(Lists.newArrayList(alarmRecordItem.getObjId())));
+            } else {
+                categoryObjIdsMap.put(alarmRecordItem.getCategory(), new HashSet<>(Lists.newArrayList(alarmRecordItem.getObjId())));
             }
         });
         return categoryObjIdsMap;
@@ -151,23 +151,29 @@ public class AlarmRecordWrapper {
     /**
      * 将报警数据中台返回的一条记录转换为报警服务中台报警记录列表中的一条数据
      *
-     * @param objGroupMap     报警对象id和分组的映射关系
-     * @param objMap          报警对象id和报警对象的映射关系
-     * @param alarmItemMap    报警类型编码和报警类型的映射关系
-     * @param alarmRecordItem 报警数据中台返回的一条报警记录
+     * @param categoryObjGroupMap 报警对象id和分组的映射关系
+     * @param objMap              报警对象id和报警对象的映射关系
+     * @param alarmItemMap        报警类型编码和报警类型的映射关系
+     * @param alarmRecordItem     报警数据中台返回的一条报警记录
      * @return 报警服务中台报警记录列表中的一条数据
      * @author lixing
      * @version V1.0 2021/9/20 6:21 下午
      */
     private AlarmRecordListItem getAlarmRecordListItem(
-            Map<String, Map<String, SimpleObjVO>> objGroupMap,
+            Map<String, Map<String, SimpleObjVO>> categoryObjGroupMap,
             Map<String, EquipItem> objMap,
             Map<String, SimpleObjVO> alarmItemMap,
             AlarmRecordItem alarmRecordItem) {
         AlarmRecordListItem alarmRecordListItem = new AlarmRecordListItem();
         alarmRecordListItem.setId(alarmRecordItem.getId());
-//        alarmRecordListItem.setGroup(objGroupMap.get(alarmRecordItem.getObjId()));
-        alarmRecordListItem.setGroup(objGroupMap.get(alarmRecordItem.getCategory()).get(alarmRecordItem.getObjId()));
+        //        alarmRecordListItem.setGroup(categoryObjGroupMap.get(alarmRecordItem.getObjId()));
+        if (categoryObjGroupMap != null &&
+                alarmRecordItem.getCategory() != null) {
+            Map<String, SimpleObjVO> objIdGroupMap = categoryObjGroupMap.get(alarmRecordItem.getCategory());
+            if (objIdGroupMap != null) {
+                alarmRecordListItem.setGroup(objIdGroupMap.get(alarmRecordItem.getObjId()));
+            }
+        }
         EquipItem objInfo = objMap.get(alarmRecordItem.getObjId());
         alarmRecordListItem.setObj(new SimpleObjVO(alarmRecordItem.getObjId(),
                 objInfo == null ? null : objInfo.getLocalName()));
@@ -301,10 +307,10 @@ public class AlarmRecordWrapper {
      */
     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,Set<String>> categoryObjIdsMap = new HashMap<>();
-        categoryObjIdsMap.put(alarmRecordItem.getCategory(),new HashSet<>(Lists.newArrayList(alarmRecordItem.getObjId())));
+        //        Map<String, SimpleObjVO> objGroupMap = groupManagementService.queryObjGroup(Lists.newArrayList(alarmRecordItem.getObjId()));
+        //        alarmRecordItemVO.setGroup(objGroupMap.get(alarmRecordItem.getObjId()));
+        Map<String, Set<String>> categoryObjIdsMap = new HashMap<>();
+        categoryObjIdsMap.put(alarmRecordItem.getCategory(), new HashSet<>(Lists.newArrayList(alarmRecordItem.getObjId())));
         Map<String, Map<String, SimpleObjVO>> objGroupMap = groupManagementService.queryObjGroupMap(categoryObjIdsMap);
         alarmRecordItemVO.setGroup(objGroupMap.get(alarmRecordItem.getCategory()).get(alarmRecordItem.getObjId()));
         // 获取这些设备的名称
@@ -397,18 +403,62 @@ public class AlarmRecordWrapper {
         QueryAlarmRecordDTO queryAlarmRecordDTO = new QueryAlarmRecordDTO();
         queryAlarmRecordDTO.setId(recordIdList);
         DmpResult<List<AlarmRecordItem>> result = alarmRecordService.query(queryAlarmRecordDTO);
-        if (result == null) {
+        List<AlarmRecordItem> data = result.getData();
+        if (result == null || data == null) {
             return null;
         }
-        return result.getData();
+        // recordList按recordIdList排序
+        setListOrder(recordIdList, data);
+        return data;
+    }
+
+    /**
+     * recordList按recordIdList排序
+     *
+     * @param recordIdList 报警记录id列表
+     * @param recordList 报警记录列表
+     * @author lixing
+     * @version V1.0 2022/1/12 2:56 下午
+     */
+    private void setListOrder(List<String> recordIdList, List<AlarmRecordItem> recordList) {
+        if (CollectionUtils.isEmpty(recordIdList) || CollectionUtils.isEmpty(recordList)) {
+            return;
+        }
+
+        recordList.sort((o1, o2) -> {
+            int io1 = recordIdList.indexOf(o1.getId());
+            int io2 = recordIdList.indexOf(o2.getId());
+
+            if (io1 != -1) {
+                io1 = recordList.size() - io1;
+            }
+            if (io2 != -1) {
+                io2 = recordList.size() - io2;
+            }
+
+            return io2 - io1;
+        });
     }
 
+//    public static void main(String[] args) {
+//        List<String> idList = Lists.newArrayList("3", "1", "2");
+//        AlarmRecordItem record1 = new AlarmRecordItem();
+//        record1.setId("1");
+//        AlarmRecordItem record2 = new AlarmRecordItem();
+//        record2.setId("2");
+//        AlarmRecordItem record3 = new AlarmRecordItem();
+//        record3.setId("3");
+//        List<AlarmRecordItem> recordList = Lists.newArrayList(record1, record2, record3);
+//        setListOrder(idList, recordList);
+//        System.out.println(recordList);
+//    }
+
     /**
      * 填充 excel文件数据行
      *
-     * @param enumDownloadAlarmListType     报警列表类型
-     * @param sheet                 文件sheet
-     * @param alarmRecordItemVOList 数据列表
+     * @param enumDownloadAlarmListType 报警列表类型
+     * @param sheet                     文件sheet
+     * @param alarmRecordItemVOList     数据列表
      */
     public void fillDataTable(EnumDownloadAlarmListType enumDownloadAlarmListType, XSSFSheet sheet, List<AlarmRecordItemVO> alarmRecordItemVOList) {
         try {
@@ -506,8 +556,8 @@ public class AlarmRecordWrapper {
      * 处理文件标题行
      *
      * @param enumDownloadAlarmListType 报警列表类型
-     * @param sheet             文件sheet
-     * @param wb                文件wb
+     * @param sheet                     文件sheet
+     * @param wb                        文件wb
      */
     public void handleExcelTitle(EnumDownloadAlarmListType enumDownloadAlarmListType, XSSFSheet sheet, XSSFWorkbook wb) {
         XSSFCellStyle cellStyle = wb.createCellStyle();

+ 4 - 0
src/main/resources/bootstrap.yml

@@ -21,7 +21,11 @@ spring:
           data: classpath*:db/init/data.sql
           continue-on-error: true
           # MYSQL_SCHEMA建议使用默认值。如果有特殊需求,建议在环境变量中配置该值
+<<<<<<< HEAD
           url: jdbc:mysql://${persagy.mysql.ip}:${persagy.mysql.port}/${MYSQL_SCHEMA_ALARM_SERVICE:dmp_alarm}?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+=======
+          url: jdbc:mysql://${persagy.mysql.ip}:${persagy.mysql.port}/${MYSQL_SCHEMA_ALARM_SERVICE:energy_alarm_service}?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+>>>>>>> v2.2.0
           username: ${MYSQL_USERNAME:${spring.datasource.username}}
           password: ${MYSQL_PASSWORD:${spring.datasource.password}}
           driver-class-name: com.mysql.cj.jdbc.Driver

+ 2 - 2
src/main/resources/db/init/table.sql

@@ -4,12 +4,12 @@ CREATE TABLE IF NOT EXISTS `alarm_condition_v2`
     `info_codes`         json             DEFAULT NULL COMMENT '包含的参数',
     `trigger_frontend`   json             DEFAULT NULL COMMENT '触发条件-前端展示',
     `trigger_backend`    text COMMENT '触发条件-后端使用',
-    `trigger_rules`      varchar(255)     DEFAULT NULL COMMENT '触发规则-中文描述',
+    `trigger_rules`      text     DEFAULT NULL COMMENT '触发规则-中文描述',
     `trigger_uphold`     int(11)          DEFAULT '0' COMMENT '持续多久后触发',
     `end_uphold`         int(11)          DEFAULT NULL COMMENT '持续多久后恢复',
     `end_frontend`       json             DEFAULT NULL COMMENT '恢复条件-前端',
     `end_backend`        text COMMENT '恢复条件-后端',
-    `end_rules`          varchar(255)     DEFAULT NULL COMMENT '恢复规则-中文描述',
+    `end_rules`          text     DEFAULT NULL COMMENT '恢复规则-中文描述',
     `alarm_level`        varchar(10)      DEFAULT NULL COMMENT '报警等级',
     `effect_time_type`   varchar(10)      DEFAULT NULL COMMENT '生效时间类型',
     `effect_time_detail` json             DEFAULT NULL COMMENT '生效时间详情',