From 9db1c6c261049fbdcb104e6c0e07fa544bb42013 Mon Sep 17 00:00:00 2001
From: 杜洪波 <1074825718@qq.com>
Date: 星期三, 14 五月 2025 18:28:14 +0800
Subject: [PATCH] 代码BUG(预警解析异常)

---
 src/main/java/com/product/administration/service/EarlyWarningServer.java |  313 ++++++++++++++++++++++------------------------------
 1 files changed, 132 insertions(+), 181 deletions(-)

diff --git a/src/main/java/com/product/administration/service/EarlyWarningServer.java b/src/main/java/com/product/administration/service/EarlyWarningServer.java
index 59f30d5..544befd 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;
@@ -75,45 +78,39 @@
 			}
 			singleWarningTask(fseWarningConfig);
 		} catch (Exception e) {
+			e.printStackTrace();
 			SpringMVCContextHolder.getSystemLogger().error(e);
 		}
 	}
+	
 	/**
-	 * 鍗曚釜棰勮,鐗规畩棰勮宸茬粡鏈夐璀︾殑鏁版嵁浜�,鍒殑涓氬姟涓诲姩璋冩鏂规硶锛屽幓鍙戦�侀璀︽秷鎭�
+	 * 鐗规畩棰勮
+	 * 棰勮鏁版嵁鏉ユ簮浜庡叾瀹冧笟鍔★紙瀵硅薄鏂规硶璋冪敤锛夛紝楠岃瘉鏉′欢鏉ユ簮浜庡叾瀹冧笟鍔★紙bean璋冪敤锛�
+	 * 鏁版嵁鏇挎崲渚濈劧鏉ユ簮浜庨厤缃〃
 	 *
 	 * @param configUuid
 	 * @param dtService 棰勮鐨勪笟鍔℃暟鎹紝鍏宠仈璁惧鏁版嵁
 	 */
-	public void warningCreate(String configUuid,DataTableEntity 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 mainTableAlias = mainTableName + "1";                                                //涓昏〃鍒悕
-//
-//		String warnCondition = fseWarningConfig.getString(CmnConst.CONDITION_EXPRESSION_HIDE);    //棰勮琛ㄨ揪寮�
+		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 warnMethod = fseWarningConfig.getString(CmnConst.WARNING_METHOD);               //棰勮鏂瑰紡
+
+		String serviceReceiver = fseWarningConfig.getString(CmnConst.BUSINESS_RELATED_PERSON); //涓氬姟鐩稿叧浜哄憳(琛ㄥ悕.瀛楁鍚�)
 		String fixedReceiver = fseWarningConfig.getString(CmnConst.FIXED_RECEIVER);            //鍥哄畾鎺ユ敹浜�
-		String flowReceiver = fseWarningConfig.getString(CmnConst.FLOW_RELATED_PERSON);        //娴佺▼鐩稿叧浜�
-//
-		String flowFixedUser = fseWarningConfig.getString(CmnConst.FLOW_FIX_USER);                //娴佺▼鍥哄畾鍙戣捣浜�
-		String flowBusinessUser = fseWarningConfig.getString(CmnConst.FLOW_BUSINESS_USER);        //娴佺▼鍔ㄦ�佸彂璧蜂汉
-//
-		String flowCode = fseWarningConfig.getString(CmnConst.FLOW_CODE);                        //娴佺▼type_code
-		String flowParam = fseWarningConfig.getString(CmnConst.FLOW_PARAM);                        //娴佺▼鍙傛暟杞崲
-//
-//		//鑾峰彇鍙戦�佹秷鎭鐜�
+		
+		//鑾峰彇鍙戦�佹秷鎭鐜�
 		Double cronExpression = fseWarningConfig.getDouble("reminder_frequency");
-//
-//		//鍙戦�佹秷鎭殑棰戠巼 1.23 灏忔暟鐐瑰墠闈唬琛ㄥぉ 灏忔暟鐐瑰悗闈唬琛ㄥ皬鏃�
+
+		//鍙戦�佹秷鎭殑棰戠巼 1.23 灏忔暟鐐瑰墠闈唬琛ㄥぉ 灏忔暟鐐瑰悗闈唬琛ㄥ皬鏃�
 		double seconds = 0;
 		if (cronExpression != null && cronExpression > 0) {
-
 			//灏嗗彂閫佹秷鎭鐜囪浆鎹负灏忔椂
 			double hours = cronExpression * 24;
 			//灏嗗彂閫佹秷鎭鐜囪浆鎹负鍒嗛挓
@@ -121,106 +118,83 @@
 			//灏嗗彂閫佹秷鎭鐜囪浆鎹负绉�
 			seconds = minutes * 60;
 		}
-//
-//
-		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
+
+		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瀽涓氬姟鐩稿叧浜哄憳
+		//瑙f瀽涓氬姟鐩稿叧浜哄憳
 		if (!StringUtils.isEmpty(serviceReceiver)) {
 			parseWarningContent(serviceReceiver, concatField, tableNameAndAlias, fieldAndAlias, fieldReference);
 		}
-//
 		//瑙f瀽棰勮鍐呭
 		if (!StringUtils.isEmpty(warnContent)) {
 			parseWarningContent(warnContent, concatField, tableNameAndAlias, fieldAndAlias, fieldReference);
 		}
-//
-//		//瑙f瀽棰勮鏉′欢
-//		if (!StringUtils.isEmpty(warnCondition)) {
-//			parseWarningContent(warnCondition, concatField, tableNameAndAlias, fieldAndAlias, fieldReference);
-//		}
-//
-		//瑙f瀽娴佺▼鍙傛暟
-		if (!StringUtils.isEmpty(flowParam)) {
-			parseWarningContent(flowParam, concatField, tableNameAndAlias, fieldAndAlias, fieldReference);
-		}
-
-		//瑙f瀽娴佺▼鍙戣捣浜�
-		if (StringUtils.isEmpty(flowFixedUser) && !StringUtils.isEmpty(flowBusinessUser)) {
-//					parseWarningContent(flowBusinessUser,concatField,tableNameAndAlias,fieldAndAlias,fieldReference);
-		}
-//
-//		//鐢熸垚涓诲瓙琛ㄥ叧鑱擲QL
-//		String relationSQL = createTableRelation(tableNameAndAlias, mainTableName);
-//
-//		StringBuilder serviceSQL = new StringBuilder();
-//		serviceSQL.append(" SELECT ");
-//		serviceSQL.append(concatField.subSequence(1, concatField.length()));
-//		serviceSQL.append(" FROM ");
-//		serviceSQL.append(relationSQL);
-//		serviceSQL.append(" WHERE ");
-//		serviceSQL.append(parseWarnCondition(warnCondition, tableNameAndAlias));
-//
-//		//鏌ヨ绗﹀悎棰勮鐨勬暟鎹�
-//		DataTableEntity dtService = baseDao.listTable(serviceSQL.toString(), new Object[]{});
 		
-		///----------------璁鹃璀︽娴嬬殑bean鏂规硶瑙e彂楠岃瘉鏄惁瑙e彂棰勮锛岃繑鍥瀟rue锛屽嵆鍙戠敓棰勮------------------
-		boolean b=false;
-		//-----鍙嶅皠璋僢ean,瑕佹敼
-		//b=xxxxx.month(dtService);
-		///----------------璁鹃璀︽娴嬬殑bean鏂规硶瑙e彂楠岃瘉鏄惁瑙e彂棰勮锛岃繑鍥瀟rue锛屽嵆鍙戠敓棰勮------------------
-		if (b) {
-			List<String> collect = dtService.getData().stream().map(item -> item.getString(mainTableAlias + "uuid")).collect(Collectors.toList());
-			//棰勮uuid
-			String warnUUID = fseWarningConfig.getUUID();
-			//灏嗛璀uid鏀惧埌collect 鐨勭涓�涓�
-
-			collect.add(0, warnUUID);
-			StringBuilder sql = new StringBuilder();
-			//鏌ヨ鏄惁宸茬粡瀛樺湪棰勮濡傛湁鐩稿悓data_uuid鐨勬暟鎹煡璇㈠嚭鏈�杩戠殑涓�鏉℃牴鎹璀︽椂闂村瓧娈� early_warning_datetime
-//			SELECT e.*
-//			FROM product_sys_early_warning_info e
-//			JOIN (
-//					SELECT data_uuid, MAX(early_warning_datetime) AS latest_datetime
-//					FROM product_sys_early_warning_info
-//					GROUP BY data_uuid
-//			) AS latest
-//			ON e.data_uuid = latest.data_uuid AND e.early_warning_datetime = latest.latest_datetime;
-			sql.append("SELECT e.* FROM product_sys_early_warning_info e JOIN (");
-			sql.append("SELECT data_uuid, MAX(early_warning_datetime) AS latest_datetime FROM product_sys_early_warning_info ");
-			sql.append(" where early_warning_uuid=? and (").append(BaseUtil.buildQuestionMarkFilter("data_uuid", collect.size(), true)).append(") ");
-			sql.append("GROUP BY data_uuid) AS latest ON e.data_uuid = latest.data_uuid AND e.early_warning_datetime = latest.latest_datetime");
-			DataTableEntity dt = baseDao.listTable(sql.toString(), collect.toArray());
-
-			Map<String, FieldSetEntity> ff = new HashMap<>();
-			if (!DataTableEntity.isEmpty(dt)) {
-				for (int j = 0; j < dt.getRows(); j++) {
-					FieldSetEntity fse = dt.getFieldSetEntity(j);
-					ff.put(fse.getString("data_uuid"), fse);
+		DataTableEntity dtParmFault = null;
+		String beanAndMehtod = fseWarningConfig.getString("bean");
+		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)) {
+			// 鑾峰彇鐩稿叧璁惧鍘嗗彶鏈�鏂伴璀�
+			Object[] limitParam = dtParmFault.getFieldAllValues("unique_key");
+			StringBuilder sqlWarnHistory = new StringBuilder();
+			sqlWarnHistory.append("SELECT e.* \n");
+			sqlWarnHistory.append("FROM product_sys_early_warning_info e \n");
+			sqlWarnHistory.append("JOIN ( \n");
+			sqlWarnHistory.append(" SELECT data_uuid, MAX(early_warning_datetime) AS latest_datetime \n");
+			sqlWarnHistory.append(" FROM product_sys_early_warning_info ");
+			sqlWarnHistory.append(" WHERE early_warning_uuid=? and (").append(BaseUtil.buildQuestionMarkFilter("data_uuid", limitParam, true)).append(") \n");
+			sqlWarnHistory.append(" GROUP BY data_uuid \n");
+			sqlWarnHistory.append(") AS latest ON e.data_uuid = latest.data_uuid AND e.early_warning_datetime = latest.latest_datetime");
+			DataTableEntity dtLastWarn = baseDao.listTable(sqlWarnHistory.toString(), new Object[] {configUuid});
+			Map<String, FieldSetEntity> mapLastWarn = new HashMap<>();
+			if (!DataTableEntity.isEmpty(dtLastWarn)) {
+				for (int j = 0; j < dtLastWarn.getRows(); j++) {
+					FieldSetEntity fse = dtLastWarn.getFieldSetEntity(j);
+					mapLastWarn.put(fse.getString("data_uuid"), fse);
 				}
 			}
+			// 閬嶅巻棰勮鏁版嵁
+			for (int j = 0; j < dtParmFault.getRows(); j++) {
+				FieldSetEntity fseParamFault = dtParmFault.getFieldSetEntity(j);
+				String deviceUUID = fseParamFault.getString(mapFields.get("device_code_field"));
+				String paramType = fseParamFault.getString(mapFields.get("param_type_field"));
+				String faultGrade = fseParamFault.getString("fault_grade_uuid");
 
-			//浠ata_uuid 杩涜鍒嗙粍
-			for (int j = 0; j < dtService.getRows(); j++) {
-				FieldSetEntity fseService = dtService.getFieldSetEntity(j);
+				// 涓氬姟uuid锛堣鏁版嵁鐗规寚锛氳澶�,鍙傛暟锛�
+				String uniqueKey = fseParamFault.getString("unique_key");
 
-				//涓氬姟uuid
-				String serviceId = fseService.getString(mainTableAlias + "uuid");
-
-				if (ff.containsKey(serviceId) && StringUtils.isEmpty(cronExpression)) {
+				// 鍒ゆ柇鏄惁棰勮
+				if (mapLastWarn.containsKey(uniqueKey) && !StringUtils.isEmpty(cronExpression)) {
 					//濡傛灉宸茬粡瀛樺湪棰勮淇℃伅 鏍规嵁cron琛ㄨ揪寮忓垽鏂槸鍚﹂渶瑕佸啀娆¢璀�
-					Date preTime = ff.get(serviceId).getDate("early_warning_datetime");
-					if (preTime != null) {
-						long time = new Date().getTime() - preTime.getTime();
+					Date lastWarnTime = mapLastWarn.get(uniqueKey).getDate("early_warning_datetime");
+					if (lastWarnTime != null) {
+						long time = new Date().getTime() - lastWarnTime.getTime();
 						if (time < seconds * 1000) {
 							continue;
 						}
 					}
 				}
-
+				
+				// 鑾峰彇瑙嗗浘鏁版嵁
+				StringBuilder sqlData = new StringBuilder();
+				sqlData.append("SELECT ").append(concatField.subSequence(1, concatField.length())).append(" \n");
+				sqlData.append("FROM ").append(mainTableName).append(" " + tableNameAndAlias.get(mainTableName)).append(" \n");
+				sqlData.append("WHERE ").append("device_number = ? AND param_config_uuid = ? AND uuid = ?");
+				FieldSetEntity fseService = baseDao.getFieldSetEntityBySQL(sqlData.toString(),
+						new Object[] {deviceUUID, paramType, faultGrade}, false);
+				
 				//淇℃伅鎺ユ敹浜�
 				Set<String> receiverSet = Sets.newTreeSet();
 
@@ -241,13 +215,13 @@
 				// 鑻ユ槸鍕鹃�変簡鐩村睘棰嗗锛岄偅涔堜竴骞舵坊鍔犱笂 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");
+					directLeaderSql.append("SELECT l.user_id,l.show_name,l.direct_leader_code,l.tricode \n");
+					directLeaderSql.append("FROM product_sys_staffs l \n");
+					directLeaderSql.append("INNER JOIN ( \n");
+					directLeaderSql.append(" SELECT user_id,show_name,direct_leader_code,tricode \n");
+					directLeaderSql.append(" FROM product_sys_staffs \n");
+					directLeaderSql.append(" 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++) {
@@ -258,57 +232,42 @@
 
 				//瑁呰浇鍥哄畾鎺ユ敹浜�
 				if (!StringUtils.isEmpty(fixedReceiver)) {
-					FieldSetEntity fseOrgnaiztion = baseDao.getFieldSetEntity("product_sys_organizational_structure_storage", fixedReceiver, false);
-					if (!StringUtils.isEmpty(fseOrgnaiztion.getString("staff_ids"))) {
-						String[] splitReceiver = fseOrgnaiztion.getString("staff_ids").split(",");
-						for (int k = 0; k < splitReceiver.length; k++) {
-							FieldSetEntity fseStaff = baseDao.getFieldSetEntityByFilter("product_sys_staffs", "staff_id=?", new Object[]{splitReceiver[k]}, false);
-							receiverSet.add(fseStaff.getString(CmnConst.USER_ID));
-						}
+					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));
 					}
-				}
-
-				//瑁呰浇娴佺▼鐩稿叧浜�
-				if (!StringUtils.isEmpty(flowReceiver)) {
-
 				}
 
 				//鏆傛椂鏇挎崲鎻愰啋鍐呭
 				warnContent = SystemParamReplace.replaceParams(warnContent, fseService);
 				String content = getContentByTableSource(fseService, warnContent, fieldReference);
-
+//				content = content.replace("銆愬弬鏁板�笺��", fseParamFault.getString(fseParamFault.getString("target_value_field")));
+				
 				String allReceiver = SetUtils.set2String(receiverSet, ",");
+				
 				//鑷姩鐢熸垚棰勮鏃ュ織淇℃伅
-				FieldSetEntity fse = new FieldSetEntity();
-				fse.setTableName(CmnConst.PRODUCT_SYS_EARLY_WARNING_INFO);
-				fse.setValue(CmnConst.EARLY_WARNING_DATETIME, new Date());
-				fse.setValue(CmnConst.EARLY_WARNING_UUID, warnUUID);
-				fse.setValue(CmnConst.DATA_UUID, serviceId);
-				fse.setValue(CmnConst.WARNING_CONTENT, content);
-				fse.setValue(CmnConst.RECEIVER, allReceiver);
-				fse.setValue(CmnConst.WARNING_METHOD, warnMethod);
-				baseDao.add(fse);
-
+				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);
+				fseWarnLog.setValue(CmnConst.DATA_UUID, uniqueKey);
+//				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=" + fse.getUUID(), CmnConst.PRODUCT_SYS_EARLY_WARNING_INFO, fse.getUUID(), 1, 0, 0);
+							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);
 						}
-					}
-				}
-
-				//鍙戣捣娴佺▼
-				if (!StringUtils.isEmpty(flowFixedUser)) {
-					autoStartFlow(fseWarningConfig.getString("config_name"), flowCode, flowParam, fseService, fieldAndAlias, Integer.valueOf(flowFixedUser));
-				} else {
-					if (!StringUtils.isEmpty(flowBusinessUser)) {
-						autoStartFlow(fseWarningConfig.getString("config_name"), flowCode, flowParam, fseService, fieldAndAlias, fseService.getInteger(flowBusinessUser));
 					}
 				}
 			}
@@ -397,46 +356,36 @@
 		//鏌ヨ绗﹀悎棰勮鐨勬暟鎹�
 		DataTableEntity dtService = baseDao.listTable(serviceSQL.toString(), new Object[]{});
 		if (!BaseUtil.dataTableIsEmpty(dtService)) {
-			List<String> collect = dtService.getData().stream().map(item -> item.getString(mainTableAlias + "uuid")).collect(Collectors.toList());
-			//棰勮uuid
-			String warnUUID = fseWarningConfig.getUUID();
-			//灏嗛璀uid鏀惧埌collect 鐨勭涓�涓�
-
-			collect.add(0, warnUUID);
+			Object[] serviceCollect = dtService.getFieldAllValues(mainTableAlias + "uuid");
+			
 			StringBuilder sql = new StringBuilder();
 			//鏌ヨ鏄惁宸茬粡瀛樺湪棰勮濡傛湁鐩稿悓data_uuid鐨勬暟鎹煡璇㈠嚭鏈�杩戠殑涓�鏉℃牴鎹璀︽椂闂村瓧娈� early_warning_datetime
-//			SELECT e.*
-//			FROM product_sys_early_warning_info e
-//			JOIN (
-//					SELECT data_uuid, MAX(early_warning_datetime) AS latest_datetime
-//					FROM product_sys_early_warning_info
-//					GROUP BY data_uuid
-//			) AS latest
-//			ON e.data_uuid = latest.data_uuid AND e.early_warning_datetime = latest.latest_datetime;
-			sql.append("SELECT e.* FROM product_sys_early_warning_info e JOIN (");
-			sql.append("SELECT data_uuid, MAX(early_warning_datetime) AS latest_datetime FROM product_sys_early_warning_info ");
-			sql.append(" where early_warning_uuid=? and (").append(BaseUtil.buildQuestionMarkFilter("data_uuid", collect.size(), true)).append(") ");
-			sql.append("GROUP BY data_uuid) AS latest ON e.data_uuid = latest.data_uuid AND e.early_warning_datetime = latest.latest_datetime");
-			DataTableEntity dt = baseDao.listTable(sql.toString(), collect.toArray());
+			sql.append("SELECT e.* \n");
+			sql.append("FROM product_sys_early_warning_info e \n");
+			sql.append("JOIN ( \n");
+			sql.append(" SELECT data_uuid, MAX(early_warning_datetime) AS latest_datetime \n");
+			sql.append(" FROM product_sys_early_warning_info \n");
+			sql.append(" WHERE early_warning_uuid=? and (").append(BaseUtil.buildQuestionMarkFilter("data_uuid", serviceCollect, true)).append(") \n");
+			sql.append(" GROUP BY data_uuid \n");
+			sql.append(") AS latest ON e.data_uuid = latest.data_uuid AND e.early_warning_datetime = latest.latest_datetime");
+			DataTableEntity dtLastWarn = baseDao.listTable(sql.toString(), new Object[] {fseWarningConfig.getUUID()});
 
-			Map<String, FieldSetEntity> ff = new HashMap<>();
-			if (!DataTableEntity.isEmpty(dt)) {
-				for (int j = 0; j < dt.getRows(); j++) {
-					FieldSetEntity fse = dt.getFieldSetEntity(j);
-					ff.put(fse.getString("data_uuid"), fse);
+			Map<String, FieldSetEntity> mapListWarn = new HashMap<>();
+			if (!DataTableEntity.isEmpty(dtLastWarn)) {
+				for (int j = 0; j < dtLastWarn.getRows(); j++) {
+					FieldSetEntity fse = dtLastWarn.getFieldSetEntity(j);
+					mapListWarn.put(fse.getString("data_uuid"), fse);
 				}
 			}
 
 			//浠ata_uuid 杩涜鍒嗙粍
 			for (int j = 0; j < dtService.getRows(); j++) {
 				FieldSetEntity fseService = dtService.getFieldSetEntity(j);
-
 				//涓氬姟uuid
 				String serviceId = fseService.getString(mainTableAlias + "uuid");
-
-				if (ff.containsKey(serviceId) && StringUtils.isEmpty(cronExpression)) {
+				if (mapListWarn.containsKey(serviceId) && !StringUtils.isEmpty(cronExpression)) {
 					//濡傛灉宸茬粡瀛樺湪棰勮淇℃伅 鏍规嵁cron琛ㄨ揪寮忓垽鏂槸鍚﹂渶瑕佸啀娆¢璀�
-					Date preTime = ff.get(serviceId).getDate("early_warning_datetime");
+					Date preTime = mapListWarn.get(serviceId).getDate("early_warning_datetime");
 					if (preTime != null) {
 						long time = new Date().getTime() - preTime.getTime();
 						if (time < seconds * 1000) {
@@ -482,14 +431,16 @@
 
 				//瑁呰浇鍥哄畾鎺ユ敹浜�
 				if (!StringUtils.isEmpty(fixedReceiver)) {
-					FieldSetEntity fseOrgnaiztion = baseDao.getFieldSetEntity("product_sys_organizational_structure_storage", fixedReceiver, false);
-					if (!StringUtils.isEmpty(fseOrgnaiztion.getString("staff_ids"))) {
-						String[] splitReceiver = fseOrgnaiztion.getString("staff_ids").split(",");
+//					FieldSetEntity fseOrgnaiztion = baseDao.getFieldSetEntity("product_sys_organizational_structure_storage", fixedReceiver, false);
+//					if (!StringUtils.isEmpty(fseOrgnaiztion.getString("staff_ids"))) {
+//						String[] splitReceiver = fseOrgnaiztion.getString("staff_ids").split(",");
+						String[] splitReceiver = fixedReceiver.split(",");
 						for (int k = 0; k < splitReceiver.length; k++) {
-							FieldSetEntity fseStaff = baseDao.getFieldSetEntityByFilter("product_sys_staffs", "staff_id=?", new Object[]{splitReceiver[k]}, false);
-							receiverSet.add(fseStaff.getString(CmnConst.USER_ID));
+//							FieldSetEntity fseStaff = baseDao.getFieldSetEntityByFilter("product_sys_staffs", "staff_id=?", new Object[]{splitReceiver[k]}, false);
+//							receiverSet.add(fseStaff.getString(CmnConst.USER_ID));
+							receiverSet.add(splitReceiver[k]);
 						}
-					}
+//					}
 				}
 
 				//瑁呰浇娴佺▼鐩稿叧浜�
@@ -506,7 +457,7 @@
 				FieldSetEntity fse = new FieldSetEntity();
 				fse.setTableName(CmnConst.PRODUCT_SYS_EARLY_WARNING_INFO);
 				fse.setValue(CmnConst.EARLY_WARNING_DATETIME, new Date());
-				fse.setValue(CmnConst.EARLY_WARNING_UUID, warnUUID);
+				fse.setValue(CmnConst.EARLY_WARNING_UUID, fseWarningConfig.getUUID());
 				fse.setValue(CmnConst.DATA_UUID, serviceId);
 				fse.setValue(CmnConst.WARNING_CONTENT, content);
 				fse.setValue(CmnConst.RECEIVER, allReceiver);
@@ -773,7 +724,7 @@
 				return fseUser.getString(CmnConst.USER_NAME);
 			}
 		} else if (referenceName.indexOf("銆�") > -1) {    //鏁版嵁瀛楀吀
-			referenceName.replace("銆�", "").replace("銆�", "");
+			referenceName = referenceName.replace("銆�", "").replace("銆�", "");
 			FieldSetEntity fseDict = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DICT, "dict_name=? AND dict_value=?", new Object[]{referenceName, originValue}, false);
 			if (fseDict == null) {
 				throw new BaseException("", "", this.getClass(), "");

--
Gitblit v1.9.2