From 94b2c9db484f97cb84ead85bd4e5268d9c823ed2 Mon Sep 17 00:00:00 2001
From: xieb <vip_xiaobin810@163.com>
Date: Tue, 25 Jun 2024 19:06:33 +0800
Subject: [PATCH] 行政区划过滤

---
 skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/service/impl/AlarmRecordServiceImpl.java |  245 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 245 insertions(+), 0 deletions(-)

diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/service/impl/AlarmRecordServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/service/impl/AlarmRecordServiceImpl.java
index b5ab126..80253e7 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/service/impl/AlarmRecordServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/service/impl/AlarmRecordServiceImpl.java
@@ -1,12 +1,31 @@
 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 cn.gistack.sm.patrol.feign.PatrolTaskClient;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.logging.log4j.util.Strings;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 告警记录服务实现层
@@ -16,6 +35,12 @@
 @Service
 public class AlarmRecordServiceImpl extends BaseServiceImpl<AlarmRecordMapper, AlarmRecord> implements AlarmRecordService {
 
+	@Autowired
+	private AlarmRuleService alarmRuleService;
+
+	@Autowired
+	private PatrolTaskClient patrolTaskClient;
+
 	/**
 	 * 自定义分页列表查询
 	 * @param page
@@ -24,9 +49,229 @@
 	 */
 	@Override
 	public Object selectAlarmRecordPage(IPage<AlarmRecordVO> page, AlarmRecordVO alarmRecord) {
+//		if (!Strings.isBlank(alarmRecord.getAdCode())){
+//			alarmRecord.setAdCode(alarmRecord.getAdCode().replaceAll("0+$", ""));
+//		}
 		if (null != alarmRecord.getIsExport()){
 			return baseMapper.selectAlarmRecordPage(null,alarmRecord);
 		}
 		return page.setRecords(baseMapper.selectAlarmRecordPage(page,alarmRecord));
 	}
+
+	/**
+	 * 按行政区统计告警-按三大类
+	 * @param alarmRecord
+	 * @return
+	 */
+	@Override
+	public Object statisticAlarmRecordByType(AlarmRecordVO alarmRecord) {
+		if (!Strings.isBlank(alarmRecord.getAdCode())){
+			alarmRecord.setAdCode(alarmRecord.getAdCode().replaceAll("0+$", ""));
+		}
+		// 查询统计数据
+		List<StatisticAlarmRecord> list = baseMapper.statisticAlarmRecordByType(alarmRecord);
+		// 返回数据
+		return list;
+	}
+
+	@Override
+	public Object statisticAlarmRecordByAlarmRuleType(AlarmRecordVO alarmRecord) {
+		if (!Strings.isBlank(alarmRecord.getAdCode())){
+			alarmRecord.setAdCode(alarmRecord.getAdCode().replaceAll("0+$", ""));
+		}
+		// 查询统计数据
+		List<StatisticAlarmRecord> list = baseMapper.statisticAlarmRecordByAlarmRuleType(alarmRecord);
+		// 返回数据
+		return list;
+	}
+
+	/**
+	 * 按行政区统计告警
+	 * @param alarmRecord
+	 * @return
+	 */
+	@Override
+	public Object statisticAlarmRecord(AlarmRecordVO alarmRecord) {
+		if (Strings.isBlank(alarmRecord.getAdCode())){
+			// 获取当前用户的行政区划
+			alarmRecord.setAdCode("420000000000");
+		}
+		// 查询所有的市级行政区
+		List<String> adNameList = baseMapper.getAdNameList(alarmRecord.getAdCode());
+
+		if (alarmRecord.getAdLevel().equals("4")) {
+			adNameList = baseMapper.getAdNameListByAdCode(alarmRecord.getAdCode());
+		}
+
+		// 查询符合条件的告警类型
+		List<AlarmRule> alarmRuleList = baseMapper.listAlarmRule(alarmRecord);
+		// 查询统计数据
+		if (!Strings.isBlank(alarmRecord.getAdCode())){
+			alarmRecord.setAdCode(alarmRecord.getAdCode().replaceAll("0+$", ""));
+		}
+		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;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean updateStatus(AlarmRecord alarmRecord) {
+
+		AlarmRecordVO  vo = baseMapper.getVODetail(alarmRecord.getId());
+		String processDefinitionId = "c2d5326e-e27b-11ed-a04e-00ff0b362ee4";
+
+		//日常巡查
+		String taskType = "1641037874390999041";
+		String title = StringUtil.format("{}{}巡查",
+			vo.getReservoirName(),vo.getAlarmRuleType());
+
+		String tm = DateUtil.format(vo.getCreateTime(),"MM月dd日HH时mm分");
+
+		//杨树堰水库在20231206 080005时近1h水位陡降
+		String content = StringUtil.format("{}在{}时{}",
+			vo.getReservoirName(),tm,vo.getRuleName());
+
+		//创建新任务
+		String taskId = patrolTaskClient.createTask(processDefinitionId, taskType, title, content, vo.getReservoirNumber());
+
+		//更新状态
+		alarmRecord.setTaskId(taskId);
+		boolean b = updateById(alarmRecord);
+
+		return b;
+	}
+
+	@Override
+	public Object statisticsPie(AlarmRecordVO alarmRecordVO) {
+		if (!Strings.isBlank(alarmRecordVO.getAdCode())){
+			alarmRecordVO.setAdCode(alarmRecordVO.getAdCode().replaceAll("0+$", ""));
+		}
+		// 查询统计数据
+		List<StatisticAlarmRecord> list = baseMapper.statisticsPie(alarmRecordVO);
+		return list;
+	}
+
+	/**
+	 * 告警统计按告警分类-等级统计
+	 * @param alarmRecord
+	 * @return
+	 */
+	@Override
+	public Object statisticAlaByTypeAndLev(AlarmRecordVO alarmRecord) {
+		Map<String, Object> map = new HashMap<>(4);
+		List<StatisticAlarmRecord> recordList = baseMapper.statisticAlaByTypeAndLev(alarmRecord);
+		if (recordList.size()>0){
+			map.put("水情监测",setAlaStatisticListByData(recordList,"水情监测"));
+			map.put("雨情监测",setAlaStatisticListByData(recordList,"雨情监测"));
+			map.put("渗压监测",setAlaStatisticListByData(recordList,"渗压监测"));
+			map.put("渗流监测",setAlaStatisticListByData(recordList,"渗流监测"));
+			map.put("变形监测",setAlaStatisticListByData(recordList,"变形监测"));
+		}else {
+			map.put("水情监测",setAlaStatisticList());
+			map.put("雨情监测",setAlaStatisticList());
+			map.put("渗压监测",setAlaStatisticList());
+			map.put("渗流监测",setAlaStatisticList());
+			map.put("变形监测",setAlaStatisticList());
+		}
+		return map;
+	}
+
+	/**
+	 * 设置组装预警统计数据-带参数
+	 * @return
+	 */
+	private List<StatisticAlarmRecord> setAlaStatisticListByData(List<StatisticAlarmRecord> recordList, String typeName) {
+		List<StatisticAlarmRecord> list = new ArrayList<>();
+		List<String> levelList = new ArrayList<>(){{
+			add("蓝色预警");
+			add("黄色预警");
+			add("橙色预警");
+			add("红色预警");
+		}};
+		List<String> alarmLevelList = recordList.stream()
+			.filter(a -> a.getRuleName().equals(typeName))
+			.map(StatisticAlarmRecord::getAlarmLevel)
+			.distinct()
+			.collect(Collectors.toList());
+		// 先取差集
+		List<String> diffList = levelList.stream().filter(item -> !alarmLevelList.contains(item)).collect(Collectors.toList());
+		for (StatisticAlarmRecord alarmRecord : recordList) {
+			if (alarmRecord.getRuleName().equals(typeName)){
+				StatisticAlarmRecord statisticAlarmRecord = new StatisticAlarmRecord();
+				statisticAlarmRecord.setAlarmLevel(alarmRecord.getAlarmLevel());
+				statisticAlarmRecord.setNum(alarmRecord.getNum());
+				list.add(statisticAlarmRecord);
+			}
+		}
+		if (diffList.size()>0){
+			for (String level : diffList) {
+				StatisticAlarmRecord statisticAlarmRecord = new StatisticAlarmRecord();
+				statisticAlarmRecord.setAlarmLevel(level);
+				statisticAlarmRecord.setNum(0);
+				list.add(statisticAlarmRecord);
+			}
+		}
+		return list;
+	}
+
+	/**
+	 * 设置组装预警统计数据
+	 * @return
+	 */
+	private List<StatisticAlarmRecord> setAlaStatisticList() {
+		List<StatisticAlarmRecord> list = new ArrayList<>();
+		StatisticAlarmRecord statisticAlarmRecord1 = new StatisticAlarmRecord();
+		statisticAlarmRecord1.setAlarmLevel("蓝色预警");
+		statisticAlarmRecord1.setNum(0);
+
+		StatisticAlarmRecord statisticAlarmRecord2 = new StatisticAlarmRecord();
+		statisticAlarmRecord2.setAlarmLevel("黄色预警");
+		statisticAlarmRecord2.setNum(0);
+
+		StatisticAlarmRecord statisticAlarmRecord3 = new StatisticAlarmRecord();
+		statisticAlarmRecord3.setAlarmLevel("橙色预警");
+		statisticAlarmRecord3.setNum(0);
+
+		StatisticAlarmRecord statisticAlarmRecord4 = new StatisticAlarmRecord();
+		statisticAlarmRecord4.setAlarmLevel("红色预警");
+		statisticAlarmRecord4.setNum(0);
+
+		list.add(statisticAlarmRecord1);
+		list.add(statisticAlarmRecord2);
+		list.add(statisticAlarmRecord3);
+		list.add(statisticAlarmRecord4);
+		return list;
+	}
 }

--
Gitblit v1.9.3