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