From 5b48f8c427c78340680a6c3860c67ad18c4f627b Mon Sep 17 00:00:00 2001
From: 杜洪波 <1074825718@qq.com>
Date: 星期三, 13 十一月 2024 17:45:29 +0800
Subject: [PATCH] 设备参数预警

---
 src/main/java/com/product/administration/service/EarlyWarningServer.java |  175 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 172 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/product/administration/service/EarlyWarningServer.java b/src/main/java/com/product/administration/service/EarlyWarningServer.java
index ac20d2d..6790b03 100644
--- a/src/main/java/com/product/administration/service/EarlyWarningServer.java
+++ b/src/main/java/com/product/administration/service/EarlyWarningServer.java
@@ -1,18 +1,18 @@
 package com.product.administration.service;
 
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.cron.CronUtil;
 import com.google.common.collect.Sets;
 import com.product.administration.config.SystemCode;
 import com.product.common.collect.SetUtils;
-import com.product.quartz.util.CronUtils;
 import com.product.util.SystemParamReplace;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Service;
 
 import com.product.administration.config.CmnConst;
@@ -34,6 +34,9 @@
 
 	@Autowired
 	BaseDao baseDao;
+	
+	@Autowired
+	private ApplicationContext applicationContext;
 
 	@Autowired
 	FlowService flowService;
@@ -78,7 +81,173 @@
 			SpringMVCContextHolder.getSystemLogger().error(e);
 		}
 	}
+	
+	public static void main(String[] args) {
+		String content = "璁惧 濂ョ殑鏂� ADS-00001 锛屽弬鏁� 鐢靛帇 杈惧埌 銆愬弬鏁板�笺�� 锛屽舰鎴� 浜岀骇 鏁呴殰 ";
+		String replacedContent = content.replace("銆愬弬鏁板�笺��", "2.23");
+		System.out.println(replacedContent);
+	}
+	
+	
+	/**
+	 * 鐗规畩棰勮
+	 * 棰勮鏁版嵁鏉ユ簮浜庡叾瀹冧笟鍔★紙bean璋冪敤璇ユ柟娉曪級锛岄獙璇佹潯浠舵潵婧愪簬鍏跺畠涓氬姟锛坆ean璋冪敤锛�
+	 * 鏁版嵁鏇挎崲渚濈劧鏉ユ簮浜庨厤缃〃
+	 *
+	 * @param configUuid
+	 * @param dtService 棰勮鐨勪笟鍔℃暟鎹紝鍏宠仈璁惧鏁版嵁
+	 */
+	public void warningCreate(String configUuid, DataTableEntity dtServiceData, Map<String, String> mapFields) {
+		
+		FieldSetEntity fseWarningConfig = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_EARLY_WARNING, configUuid, false);
+		if (!"1".equals(fseWarningConfig.getString(CmnConst.CONFIG_STATUS))) {
+			throw new BaseException(SystemCode.WARN_NO_NORMAL_STATUS_RECORD);
+		}
+		String mainTableName = fseWarningConfig.getString(CmnConst.SOURCE_TABLE);              //涓昏〃鍚�
 
+		String warnContent = fseWarningConfig.getString(CmnConst.WARNING_CONTENT_HIDE);        //鎻愰啋鍐呭
+		String warnMethod = fseWarningConfig.getString(CmnConst.WARNING_METHOD);               //棰勮鏂瑰紡
+
+		String serviceReceiver = fseWarningConfig.getString(CmnConst.BUSINESS_RELATED_PERSON); //涓氬姟鐩稿叧浜哄憳(琛ㄥ悕.瀛楁鍚�)
+		String fixedReceiver = fseWarningConfig.getString(CmnConst.FIXED_RECEIVER);            //鍥哄畾鎺ユ敹浜�
+
+
+		Map<String, String> tableNameAndAlias = new HashMap<>();//鐩稿叧琛ㄥ悕-->琛ㄥ埆鍚�,tableName-->tableName1
+		Map<String, String> fieldAndAlias = new HashMap<>();    //鐩稿叧瀛楁-->瀛楁鍒悕,tableName.fieldName-->tableName1fieldName
+		Map<String, String> fieldReference = new HashMap<>();   //缁勫悎鐩稿叧瀛楁鐨勫弬鐓�,tableName1fieldName-->referenceName
+		StringBuilder concatField = new StringBuilder();        //缁勫悎鐩稿叧瀛楁,tableName1.fieldName tableName1fieldName
+		//瑙f瀽涓氬姟鐩稿叧浜哄憳
+		if (!StringUtils.isEmpty(serviceReceiver)) {
+			parseWarningContent(serviceReceiver, concatField, tableNameAndAlias, fieldAndAlias, fieldReference);
+		}
+		//瑙f瀽棰勮鍐呭
+		if (!StringUtils.isEmpty(warnContent)) {
+			parseWarningContent(warnContent, concatField, tableNameAndAlias, fieldAndAlias, fieldReference);
+		}
+		
+		DataTableEntity dtParmFault = null;
+		String beanAndMehtod = fseWarningConfig.getString("bean");
+		//-----鍙嶅皠璋僢ean,瑕佹敼
+		Object bean = applicationContext.getBean(beanAndMehtod.split("\\.")[0]);
+		try {
+			Method method = bean.getClass().getMethod(beanAndMehtod.split("\\.")[1], DataTableEntity.class, Map.class);
+			dtParmFault = (DataTableEntity)method.invoke(bean, dtServiceData, mapFields);
+		} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+			e.printStackTrace();
+		} catch (NoSuchMethodException e) {
+			e.printStackTrace();
+		} catch (SecurityException e) {
+			e.printStackTrace();
+		}
+		if (!BaseUtil.dataTableIsEmpty(dtParmFault)) {
+			Map<String, String> mapUserWarnMessage = new HashMap<>();
+			for (int j = 0; j < dtParmFault.getRows(); j++) {
+				FieldSetEntity fseParamFault = dtParmFault.getFieldSetEntity(j);
+				StringBuilder sql = new StringBuilder();
+				sql.append("SELECT ").append(concatField.subSequence(1, concatField.length())).append(" \n");
+				sql.append("FROM ").append(mainTableName).append(" " + tableNameAndAlias.get(mainTableName)).append(" \n");
+				sql.append("WHERE ").append("device_number = ? AND param_config_uuid = ? AND uuid = ?");
+				// 鑾峰彇瑙嗗浘鏁版嵁
+				FieldSetEntity fseService = baseDao.getFieldSetEntityBySQL(sql.toString(),
+						new Object[] {fseParamFault.getString(mapFields.get("device_code_field")), fseParamFault.getString(mapFields.get("param_type_field")), fseParamFault.getString("fault_grade_uuid")}, false);
+
+				//淇℃伅鎺ユ敹浜�
+				Set<String> receiverSet = Sets.newTreeSet();
+
+				//瑁呰浇涓氬姟鎺ユ敹浜�
+				String tempStr;
+				if (!StringUtils.isEmpty(serviceReceiver)) {
+					String[] splitReceiver = serviceReceiver.replace("{#", "").replace("#}", "").split(",");
+					for (int k = 0; k < splitReceiver.length; k++) {
+						tempStr = fseService.getString(fieldAndAlias.get(splitReceiver[k]));
+						if (!StringUtils.isEmpty(tempStr)) {
+							for (String singlePerson : tempStr.split(",")) {
+								receiverSet.add(singlePerson);
+							}
+						}
+					}
+				}
+
+				// 鑻ユ槸鍕鹃�変簡鐩村睘棰嗗锛岄偅涔堜竴骞舵坊鍔犱笂 6c 2022骞�3鏈�22鏃� 09:25:43
+				if ("1".equals(fseWarningConfig.getString(CmnConst.DIRECT_LEADER_FLAG)) && !receiverSet.isEmpty()) {
+					StringBuilder directLeaderSql = new StringBuilder(256);
+					directLeaderSql.append("\nselect l.user_id,l.show_name,l.direct_leader_code,l.tricode");
+					directLeaderSql.append("\nfrom product_sys_staffs l");
+					directLeaderSql.append("\ninner join (");
+					directLeaderSql.append("\n    select user_id,show_name,direct_leader_code,tricode");
+					directLeaderSql.append("\n    from product_sys_staffs");
+					directLeaderSql.append("\n    where ").append(BaseUtil.buildQuestionMarkFilter("user_id", receiverSet.size(), true));
+					directLeaderSql.append("\n) p on l.tricode=p.direct_leader_code");
+					DataTableEntity directLeaderDte = baseDao.listTable(directLeaderSql.toString(), receiverSet.toArray());
+					FieldSetEntity directLeaderFse;
+					for (int k = 0; k < directLeaderDte.getRows(); k++) {
+						directLeaderFse = directLeaderDte.getFieldSetEntity(k);
+						receiverSet.add(directLeaderFse.getString(CmnConst.USER_ID));
+					}
+				}
+
+				//瑁呰浇鍥哄畾鎺ユ敹浜�
+				if (!StringUtils.isEmpty(fixedReceiver)) {
+					String[] splitReceiver = fixedReceiver.split(",");
+					for (int k = 0; k < splitReceiver.length; k++) {
+						FieldSetEntity fseStaff = baseDao.getFieldSetEntityByFilter("product_sys_users", "user_id=?", new Object[]{splitReceiver[k]}, false);
+						receiverSet.add(fseStaff.getString(CmnConst.USER_ID));
+					}
+				}
+
+				//鏆傛椂鏇挎崲鎻愰啋鍐呭
+				warnContent = SystemParamReplace.replaceParams(warnContent, fseService);
+				String content = getContentByTableSource(fseService, warnContent, fieldReference);
+				content = content.replace("銆愬弬鏁板�笺��", fseParamFault.getString(fseParamFault.getString("collect_value_field")));
+				System.out.println(content);
+				System.out.println(fseParamFault.getString(fseParamFault.getString("collect_value_field")));
+				System.out.println(content.replace("銆愬弬鏁板�笺��", fseParamFault.getString(fseParamFault.getString("collect_value_field"))));
+				//閬嶅巻鍙戦�佷汉锛屽強鍙戦�佸唴瀹�
+				Iterator<String> iterator = receiverSet.iterator();
+			    while (iterator.hasNext()) {
+			    	String fruit = iterator.next();
+			    	if (mapUserWarnMessage.containsKey(fruit)) {
+			    		String allContent = mapUserWarnMessage.get(fruit);
+			    		allContent += "\n"+ content;
+			    		mapUserWarnMessage.put(fruit, allContent);
+					} else {
+						mapUserWarnMessage.put(fruit, content);
+					}
+			    }
+			}
+			if (!mapUserWarnMessage.isEmpty()) {
+				for (Map.Entry<String, String> entry : mapUserWarnMessage.entrySet()) {
+					String allReceiver = entry.getKey();
+					String content = entry.getValue();
+					//鑷姩鐢熸垚棰勮鏃ュ織淇℃伅
+					FieldSetEntity fseWarnLog = new FieldSetEntity(CmnConst.PRODUCT_SYS_EARLY_WARNING_INFO);
+					fseWarnLog.setValue(CmnConst.EARLY_WARNING_DATETIME, new Date());
+					fseWarnLog.setValue(CmnConst.EARLY_WARNING_UUID, configUuid);
+//					fse.setValue(CmnConst.DATA_UUID, serviceId);
+					fseWarnLog.setValue(CmnConst.WARNING_CONTENT, content);
+					fseWarnLog.setValue(CmnConst.RECEIVER, allReceiver);
+					fseWarnLog.setValue(CmnConst.WARNING_METHOD, warnMethod);
+					baseDao.add(fseWarnLog);
+					
+					//鍙戦�佷俊鎭�
+					if (!StringUtils.isEmpty(warnMethod)) {
+						String[] send_method = warnMethod.split(",");
+						for (int k = 0; k < send_method.length; k++) {
+							if ("1".equals(send_method[k])) {    //绯荤粺娑堟伅
+								WebsocketMesssageServiceThread.getInstance().appendMessage(allReceiver, content, "棰勮娑堟伅", 1, "31", CmnConst.BUTTON_URL_WARN_MESSAGE_INFO + "?uuid=" + fseWarnLog.getUUID(), CmnConst.PRODUCT_SYS_EARLY_WARNING_INFO, fseWarnLog.getUUID(), 1, 0, 0);
+							} else if ("2".equals(send_method[k])) {    //鐢靛瓙閭欢
+								parseMail(content, allReceiver);
+							} else if ("3".equals(send_method[k])) {    //鐭俊娑堟伅
+								parseSMS(content, allReceiver);
+							}
+						}
+					}
+				}
+				
+			}
+			
+		}
+	}
 	/**
 	 * 鍗曚釜棰勮
 	 *

--
Gitblit v1.9.2