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 | 316 +++++++++++++++++++++++----------------------------- 1 files changed, 138 insertions(+), 178 deletions(-) diff --git a/src/main/java/com/product/administration/service/EarlyWarningServer.java b/src/main/java/com/product/administration/service/EarlyWarningServer.java index 923ca40..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,41 +78,39 @@ } singleWarningTask(fseWarningConfig); } catch (Exception e) { + e.printStackTrace(); SpringMVCContextHolder.getSystemLogger().error(e); } } + /** - * 鍗曚釜棰勮,鐗规畩棰勮宸茬粡鏈夐璀︾殑鏁版嵁浜�,鍒殑涓氬姟涓诲姩璋冩鏂规硶锛屽幓鍙戦�侀璀︽秷鎭� + * 鐗规畩棰勮 + * 棰勮鏁版嵁鏉ユ簮浜庡叾瀹冧笟鍔★紙瀵硅薄鏂规硶璋冪敤锛夛紝楠岃瘉鏉′欢鏉ユ簮浜庡叾瀹冧笟鍔★紙bean璋冪敤锛� + * 鏁版嵁鏇挎崲渚濈劧鏉ユ簮浜庨厤缃〃 * - * @param fseWarningConfig - * @param dtService棰勮鐨勪笟鍔℃暟鎹� + * @param configUuid + * @param dtService 棰勮鐨勪笟鍔℃暟鎹紝鍏宠仈璁惧鏁版嵁 */ - public void warningCreate(FieldSetEntity fseWarningConfig,DataTableEntity dtService) { + public void warningCreate(String configUuid, DataTableEntity dtServiceData, Map<String, String> mapFields) { - String mainTableName = fseWarningConfig.getString(CmnConst.SOURCE_TABLE); //涓昏〃鍚� - String mainTableAlias = mainTableName + "1"; //涓昏〃鍒悕 -// -// String warnCondition = fseWarningConfig.getString(CmnConst.CONDITION_EXPRESSION_HIDE); //棰勮琛ㄨ揪寮� + 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 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; //灏嗗彂閫佹秷鎭鐜囪浆鎹负鍒嗛挓 @@ -117,101 +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[]{}); - 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); + 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(); @@ -232,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++) { @@ -249,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)); } } } @@ -388,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) { @@ -473,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]); } - } +// } } //瑁呰浇娴佺▼鐩稿叧浜� @@ -497,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); @@ -764,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