From e7fdc9967246ec64cc4f27d514c4ac1bdd488933 Mon Sep 17 00:00:00 2001
From: 杜洪波 <1074825718@qq.com>
Date: 星期一, 13 十月 2025 18:07:55 +0800
Subject: [PATCH] 代码提交
---
src/main/java/com/product/administration/service/EarlyWarningServer.java | 225 ++++++++++++++++++++++++++++++--------------------------
1 files changed, 121 insertions(+), 104 deletions(-)
diff --git a/src/main/java/com/product/administration/service/EarlyWarningServer.java b/src/main/java/com/product/administration/service/EarlyWarningServer.java
index 6790b03..544befd 100644
--- a/src/main/java/com/product/administration/service/EarlyWarningServer.java
+++ b/src/main/java/com/product/administration/service/EarlyWarningServer.java
@@ -78,20 +78,14 @@
}
singleWarningTask(fseWarningConfig);
} catch (Exception e) {
+ e.printStackTrace();
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璋冪敤锛�
+ * 棰勮鏁版嵁鏉ユ簮浜庡叾瀹冧笟鍔★紙瀵硅薄鏂规硶璋冪敤锛夛紝楠岃瘉鏉′欢鏉ユ簮浜庡叾瀹冧笟鍔★紙bean璋冪敤锛�
* 鏁版嵁鏇挎崲渚濈劧鏉ユ簮浜庨厤缃〃
*
* @param configUuid
@@ -110,7 +104,20 @@
String serviceReceiver = fseWarningConfig.getString(CmnConst.BUSINESS_RELATED_PERSON); //涓氬姟鐩稿叧浜哄憳(琛ㄥ悕.瀛楁鍚�)
String fixedReceiver = fseWarningConfig.getString(CmnConst.FIXED_RECEIVER); //鍥哄畾鎺ユ敹浜�
+
+ //鑾峰彇鍙戦�佹秷鎭鐜�
+ 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
@@ -127,7 +134,6 @@
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);
@@ -140,17 +146,55 @@
e.printStackTrace();
}
if (!BaseUtil.dataTableIsEmpty(dtParmFault)) {
- Map<String, String> mapUserWarnMessage = new HashMap<>();
+ // 鑾峰彇鐩稿叧璁惧鍘嗗彶鏈�鏂伴璀�
+ 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);
- 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);
+ 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");
+ // 涓氬姟uuid锛堣鏁版嵁鐗规寚锛氳澶�,鍙傛暟锛�
+ String uniqueKey = fseParamFault.getString("unique_key");
+
+ // 鍒ゆ柇鏄惁棰勮
+ if (mapLastWarn.containsKey(uniqueKey) && !StringUtils.isEmpty(cronExpression)) {
+ //濡傛灉宸茬粡瀛樺湪棰勮淇℃伅 鏍规嵁cron琛ㄨ揪寮忓垽鏂槸鍚﹂渶瑕佸啀娆¢璀�
+ 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();
@@ -171,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++) {
@@ -198,54 +242,35 @@
//鏆傛椂鏇挎崲鎻愰啋鍐呭
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);
- }
+// content = content.replace("銆愬弬鏁板�笺��", fseParamFault.getString(fseParamFault.getString("target_value_field")));
+
+ String allReceiver = SetUtils.set2String(receiverSet, ",");
+
+ //鑷姩鐢熸垚棰勮鏃ュ織淇℃伅
+ 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=" + 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);
}
}
}
-
}
-
}
}
/**
@@ -331,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) {
@@ -416,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]);
}
- }
+// }
}
//瑁呰浇娴佺▼鐩稿叧浜�
@@ -440,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);
@@ -707,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