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