| | |
| | | } |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | String content = "设备 奥的斯 ADS-00001 ,参数 电压 达到 【参数值】 ,形成 二级 故障 "; |
| | | String replacedContent = content.replace("【参数值】", "2.23"); |
| | | System.out.println(replacedContent); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 特殊预警 |
| | | * 预警数据来源于其它业务(bean调用该方法),验证条件来源于其它业务(bean调用) |
| | | * 预警数据来源于其它业务(对象方法调用),验证条件来源于其它业务(bean调用) |
| | | * 数据替换依然来源于配置表 |
| | | * |
| | | * @param configUuid |
| | |
| | | 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 |
| | |
| | | |
| | | DataTableEntity dtParmFault = null; |
| | | String beanAndMehtod = fseWarningConfig.getString("bean"); |
| | | //-----反射调bean,要改 |
| | | Object bean = applicationContext.getBean(beanAndMehtod.split("\\.")[0]); |
| | | try { |
| | | Method method = bean.getClass().getMethod(beanAndMehtod.split("\\.")[1], DataTableEntity.class, Map.class); |
| | |
| | | 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 = ?"); |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 获取视图数据 |
| | | 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); |
| | | 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(); |
| | |
| | | // 若是勾选了直属领导,那么一并添加上 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++) { |
| | |
| | | //暂时替换提醒内容 |
| | | 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(); |
| | | // 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); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | } |
| | | /** |
| | |
| | | //查询符合预警的数据 |
| | | 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(); |
| | | //将预警uuid放到collect 的第一个 |
| | | Object[] serviceCollect = dtService.getFieldAllValues(mainTableAlias + "uuid"); |
| | | |
| | | 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()); |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | //以data_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) { |
| | |
| | | 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); |