From 45992c87647bf954f9363aa3cbeec68f466458d9 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Tue, 09 Apr 2024 16:13:32 +0800
Subject: [PATCH] 大坝渗压监测告警相关定时器,获取渗压,变形资料缺失接口

---
 skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java |  128 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 126 insertions(+), 2 deletions(-)

diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
index b47f33c..f275e59 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
@@ -29,8 +29,10 @@
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpEntity;
@@ -48,6 +50,7 @@
 import java.util.*;
 
 @Component
+@Slf4j
 public class NoticeHandle {
 
 
@@ -146,22 +149,143 @@
 		// 告警内容
 		List<List<String>> lists = new ArrayList<>();
 		Set<String> set = new HashSet<>();
+
+		// 查询对应的角色信息
+		List<String> roles =  sysClient.getRoleNames(alarmRuleDetail.getAlarmPerson()).getData();
+
 		for (int i = 0; i < jsonArray.size(); i++) {
 			if (null!=adCode){
 				// city_cd,county_cd 过滤数据
 				String county_cd = jsonArray.getJSONObject(i).getString("county_cd");
 				if (null!= county_cd && county_cd.equals(adCode)) {
-					jointData(jsonArray, columnsList, alarmRuleDetail, flag, personLists, lists, i,uuid,set);
+//					jointData(jsonArray, columnsList, alarmRuleDetail, flag, personLists, lists, i,uuid,set);
+					jointDataV2(jsonArray, columnsList, alarmRuleDetail,roles ,flag, personLists, lists, i,uuid,set);
 				}
 			}else {
-				jointData(jsonArray, columnsList, alarmRuleDetail, flag, personLists, lists, i,uuid,set);
+//				jointData(jsonArray, columnsList, alarmRuleDetail, flag, personLists, lists, i,uuid,set);
+				jointDataV2(jsonArray, columnsList, alarmRuleDetail,roles, flag, personLists, lists, i,uuid,set);
 			}
+			log.info("告警人员信息:{}",personLists.toString());
 		}
 		// 设置信息
 		smsRequestTemplate.setPersonVOList(personLists);
 		smsRequestTemplate.setTemplateContent(lists);
 	}
 
+	private void jointDataV2(JSONArray jsonArray, List<String> columnsList, AlarmRuleDetail alarmRuleDetail, List<String> roles, Boolean flag, List<PersonVO> personLists, List<List<String>> lists, int i, String uuid, Set<String> set) {
+		// 根据水库编号,所在区域查询需要发送的人员手机号及设置
+		JSONObject jsonObject = jsonArray.getJSONObject(i);
+		String res_cd = jsonObject.getString("res_cd");
+		String res_nm = jsonObject.getString("res_nm");
+		String town_nm = jsonObject.getString("town_nm");
+		String county_nm = jsonObject.getString("county_nm");
+		String city_nm = jsonObject.getString("city_nm");
+		log.info("当前为第{}个水库,行政区划:{}-{}-{},水库编码:{},水库名称:{}",i+1,city_nm,county_nm,town_nm,res_cd,res_nm);
+		String tempStr = uuid + res_cd;
+		// 去重水库操作,如果有重复的水库则不操作
+		if (!set.contains(tempStr)) {
+			set.add(tempStr);
+			// 取出测站编码
+			String stcd = jsonArray.getJSONObject(i).getString("stcd");
+			if (StringUtil.isBlank(stcd)) {
+				stcd = jsonArray.getJSONObject(i).getString("cd");
+			}
+			// 判断时间是否存在
+			String tm = jsonArray.getJSONObject(i).getString("tm");
+			String day = "";
+			String hour = "";
+			String minute = "";
+			if (null != tm && !tm.equals("") && flag) {
+				//如果显示日期,并且中台的日期不为空,则使用中台的日期
+				flag = true;
+				// 加入天,时,分
+				day = tm.substring(8, 10);
+				hour = tm.substring(11, 13);
+				minute = tm.substring(14, 16);
+			} else if(flag){
+				//如果显示日期,但是中台没传日期,就使用当前时间
+				Date now = DateUtil.now();
+				String formatTm = DateUtil.format(now, DateUtil.PATTERN_DATETIME);
+				// 加入天,时,分
+				day = formatTm.substring(8, 10);
+				hour = formatTm.substring(11, 13);
+				minute = formatTm.substring(14, 16);
+			}else{
+				flag = false;
+			}
+			// 获取告警人员信息
+//			getAlarmPersonList(jsonArray, columnsList, alarmRuleDetail,flag, personLists, lists, i, res_cd, day, hour, minute, stcd);
+			getAlarmPersonListV2(jsonArray, columnsList, alarmRuleDetail,roles,flag, personLists, lists, i, res_cd, day, hour, minute, stcd);
+		}
+
+	}
+
+	private void getAlarmPersonListV2(JSONArray jsonArray, List<String> columnsList, AlarmRuleDetail alarmRuleDetail, List<String> roles, Boolean flag, List<PersonVO> personLists, List<List<String>> lists, int i, String res_cd, String day, String hour, String minute, String stcd) {
+		// 查询告警人员信息
+//		List<PersonVO> personVOList = getPersonListByResGuid(res_cd, alarmRuleDetail.getAlarmPerson());
+		List<PersonVO> personVOList = getPersonListByResGuidV2(res_cd, roles);
+		if (personVOList.size() > 0) {
+			for (PersonVO personVO : personVOList) {
+				List<String> list = new ArrayList<>();
+				list.add(stcd);
+				list.add(res_cd);
+				list.add(personVO.getPhone());
+				if (flag) {
+					// 如果是电话告警,需要把日期拼到一起
+					if (alarmRuleDetail.getAlarmMode().equals("电话")){
+						String tem = day + "日" + hour + "时" + minute + "分";
+						list.add(tem);
+					}else {
+						list.add(day);
+						list.add(hour);
+						list.add(minute);
+					}
+				}
+				// 变量将值放入集合中
+				for (String column : columnsList) {
+					String[] split = column.split(",");
+					String format = "";
+					// 内容处理
+					format = addAlarmContent(jsonArray, i, split, format);
+					// 加入集合
+					list.add(format);
+				}
+				lists.add(list);
+			}
+		}
+		personLists.addAll(personVOList);
+
+	}
+
+	private List<PersonVO> getPersonListByResGuidV2(String res_cd,  List<String> roles) {
+		List<String> personList = new ArrayList<>();
+		List<String> areaList = new ArrayList<>();
+		// 遍历
+		for (String role : roles) {
+			if (role.contains("责任人")){
+				personList.add(PersonEnum.findByName(role).getType().toString());
+			}else {
+				areaList.add(role);
+			}
+		}
+		// 根据角色,水库编号查询对应的告警人员信息
+		List<PersonVO> list = new ArrayList<>();
+		//1. 根据水库编号查询除责任人之外的人员信息
+		if (areaList.size() > 0) {
+			List<PersonVO> personVOList = attResManagePersonClient.getUserListByResGuid(res_cd,String.join(",",areaList));
+			list.addAll(personVOList);
+		}
+		//2. 根据水库编号及责任人类型查询相关责任人信息
+		if (personList.size() > 0) {
+			List<PersonVO> personVOList1 = attResManagePersonClient.getPersonListByResGuid(res_cd, String.join(",", personList));
+			// 合并人员数据
+			list.addAll(personVOList1);
+		}
+		// 返回数据
+		return list;
+
+	}
+
 	/**
 	 * 拼接列数据设置告警人员信息
 	 * @param jsonArray 告警动态数据

--
Gitblit v1.9.3