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 | 270 ++++++++++++++++++++---------------------------------
1 files changed, 102 insertions(+), 168 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..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,148 +81,75 @@
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 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 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) {
+ String mainTableName = fseWarningConfig.getString(CmnConst.SOURCE_TABLE); //涓昏〃鍚�
- //灏嗗彂閫佹秷鎭鐜囪浆鎹负灏忔椂
- 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
+ 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瀽涓氬姟鐩稿叧浜哄憳
+ //瑙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;
+ DataTableEntity dtParmFault = null;
+ String beanAndMehtod = fseWarningConfig.getString("bean");
//-----鍙嶅皠璋僢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);
- }
- }
-
- //浠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;
- }
- }
- }
+ 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();
@@ -258,60 +188,64 @@
//瑁呰浇鍥哄畾鎺ユ敹浜�
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);
-
- 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);
+ 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);
+ }
}
}
}
-
- //鍙戣捣娴佺▼
- 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