xieb
2023-10-19 1dd5d8f8a616f5cf3caa7828d46989c7d3dcafc4
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/service/impl/AlarmRecordServiceImpl.java
@@ -1,12 +1,26 @@
package cn.gistack.alerts.alarmRule.service.impl;
import cn.gistack.alerts.alarmRule.entity.AlarmRecord;
import cn.gistack.alerts.alarmRule.entity.AlarmRule;
import cn.gistack.alerts.alarmRule.mapper.AlarmRecordMapper;
import cn.gistack.alerts.alarmRule.service.AlarmRecordService;
import cn.gistack.alerts.alarmRule.service.AlarmRuleService;
import cn.gistack.alerts.alarmRule.vo.AlarmRecordVO;
import cn.gistack.alerts.alarmRule.vo.StatisticAlarmRecord;
import cn.gistack.alerts.sms.vo.Temp;
import cn.gistack.sm.intelligentCall.entity.Scene;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * 告警记录服务实现层
@@ -15,6 +29,9 @@
 */
@Service
public class AlarmRecordServiceImpl extends BaseServiceImpl<AlarmRecordMapper, AlarmRecord> implements AlarmRecordService {
   @Autowired
   private AlarmRuleService alarmRuleService;
   /**
    * 自定义分页列表查询
@@ -29,4 +46,69 @@
      }
      return page.setRecords(baseMapper.selectAlarmRecordPage(page,alarmRecord));
   }
   /**
    * 按行政区统计告警-按三大类
    * @param alarmRecord
    * @return
    */
   @Override
   public Object statisticAlarmRecordByType(AlarmRecordVO alarmRecord) {
      // 获取当前用户的行政区划
      String adCode = "420000000000";
      // 查询统计数据
      List<StatisticAlarmRecord> list = baseMapper.statisticAlarmRecordByType(alarmRecord);
      // 返回数据
      return list;
   }
   /**
    * 按行政区统计告警
    * @param alarmRecord
    * @return
    */
   @Override
   public Object statisticAlarmRecord(AlarmRecordVO alarmRecord) {
      // 获取当前用户的行政区划
      String adCode = "420000000000";
      // 查询所有的市级行政区
      List<String> adNameList = baseMapper.getAdNameList(adCode);
      // 查询符合条件的告警类型
      List<AlarmRule> alarmRuleList = baseMapper.listAlarmRule(alarmRecord);
      // 查询统计数据
      List<StatisticAlarmRecord> list = baseMapper.statisticAlarmRecord(alarmRecord);
      // 按行政区分组
      Map<String, List<StatisticAlarmRecord>> listMap = list.stream().filter(item->null!=item.getAdName()).collect(Collectors.groupingBy(StatisticAlarmRecord::getAdName));
      // 补全行政区
      for (String adName : adNameList) {
         if (!listMap.containsKey(adName)){
            List<StatisticAlarmRecord> arrayList = new ArrayList<>();
            listMap.put(adName,arrayList);
         }
      }
      List<String> ruleNameList = alarmRuleList.stream().map(alarmRule -> alarmRule.getRuleName()).collect(Collectors.toList());
      // 补全告警类型
      listMap.forEach((adName,statisticAlarmRecords)->{
         // 取出已有的告警类型
         List<String> newRuleNameList = statisticAlarmRecords.stream().map(alarmRule -> alarmRule.getRuleName()).collect(Collectors.toList());
         // 取差集
         List<String> resultAlarmRuleList = ruleNameList.stream().filter(item -> !newRuleNameList.contains(item)).collect(Collectors.toList());
         for (String ruleName : resultAlarmRuleList) {
            StatisticAlarmRecord newStatisticAlarmRecord = new StatisticAlarmRecord();
            newStatisticAlarmRecord.setRuleName(ruleName);
            newStatisticAlarmRecord.setNum(0);
            newStatisticAlarmRecord.setAdName(adName);
            statisticAlarmRecords.add(newStatisticAlarmRecord);
         }
      });
      List<Object> objects = new ArrayList<>();
      // 重新录入排序
      for (String adName : adNameList) {
         if (listMap.containsKey(adName)){
            objects.add(listMap.get(adName));
         }
      }
      // 返回数据
      return objects;
   }
}