From ac2e912c9dd7bafc9101775462fbe7060ce27a91 Mon Sep 17 00:00:00 2001
From: zm <2369059705qq.com>
Date: 星期五, 18 十月 2024 16:38:20 +0800
Subject: [PATCH] Merge branch 'dev' of http://nonxin.cn:8090/r/product/product-server-administration/V2.0.0 into dev

---
 src/main/java/com/product/administration/service/EarlyWarningServer.java |  230 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 230 insertions(+), 0 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..206ac6e 100644
--- a/src/main/java/com/product/administration/service/EarlyWarningServer.java
+++ b/src/main/java/com/product/administration/service/EarlyWarningServer.java
@@ -78,7 +78,237 @@
 			SpringMVCContextHolder.getSystemLogger().error(e);
 		}
 	}
+	/**
+	 * 鍗曚釜棰勮,鐗规畩棰勮宸茬粡鏈夐璀︾殑鏁版嵁浜�,鍒殑涓氬姟涓诲姩璋冩鏂规硶锛屽幓鍙戦�侀璀︽秷鎭�
+	 *
+	 * @param configUuid
+	 * @param dtService棰勮鐨勪笟鍔℃暟鎹�
+	 */
+	public void warningCreate(String configUuid,DataTableEntity dtService) {
+		
+		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 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);            //鍥哄畾鎺ユ敹浜�
+		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 灏忔暟鐐瑰墠闈唬琛ㄥぉ 灏忔暟鐐瑰悗闈唬琛ㄥ皬鏃�
+		double seconds = 0;
+		if (cronExpression != null && cronExpression > 0) {
 
+			//灏嗗彂閫佹秷鎭鐜囪浆鎹负灏忔椂
+			double hours = cronExpression * 24;
+			//灏嗗彂閫佹秷鎭鐜囪浆鎹负鍒嗛挓
+			double minutes = hours * 60;
+			//灏嗗彂閫佹秷鎭鐜囪浆鎹负绉�
+			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
+		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);
+		}
+//
+//		//瑙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[]{});
+		
+		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);
+			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);
+				}
+			}
+
+			//浠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)) {
+					//濡傛灉宸茬粡瀛樺湪棰勮淇℃伅 鏍规嵁cron琛ㄨ揪寮忓垽鏂槸鍚﹂渶瑕佸啀娆¢璀�
+					Date preTime = ff.get(serviceId).getDate("early_warning_datetime");
+					if (preTime != null) {
+						long time = new Date().getTime() - preTime.getTime();
+						if (time < seconds * 1000) {
+							continue;
+						}
+					}
+				}
+
+				//淇℃伅鎺ユ敹浜�
+				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)) {
+					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));
+						}
+					}
+				}
+
+				//瑁呰浇娴佺▼鐩稿叧浜�
+				if (!StringUtils.isEmpty(flowReceiver)) {
+
+				}
+
+				//鏆傛椂鏇挎崲鎻愰啋鍐呭
+				warnContent = SystemParamReplace.replaceParams(warnContent, fseService);
+				String content = getContentByTableSource(fseService, warnContent, fieldReference);
+
+				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);
+
+				//鍙戦�佷俊鎭�
+				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);
+						} 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));
+					}
+				}
+			}
+		}
+	}
 	/**
 	 * 鍗曚釜棰勮
 	 *

--
Gitblit v1.9.2