Commit 22297607 authored by 黎博's avatar 黎博

优化关键字替换

parent 30a1a7f1
...@@ -19,6 +19,10 @@ import java.util.*; ...@@ -19,6 +19,10 @@ import java.util.*;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
/**
* 数据库查询类
* @author libo
*/
@Slf4j @Slf4j
public class DbQueryTask extends QuartzJobBean { public class DbQueryTask extends QuartzJobBean {
...@@ -45,36 +49,39 @@ public class DbQueryTask extends QuartzJobBean { ...@@ -45,36 +49,39 @@ public class DbQueryTask extends QuartzJobBean {
monitorDataSource.getUsername(), monitorDataSource.getPassword(), null, monitorTask.getSql()); monitorDataSource.getUsername(), monitorDataSource.getPassword(), null, monitorTask.getSql());
String dingUrl = monitorTask.getDingUrl(); String dingUrl = monitorTask.getDingUrl();
String dingText = monitorTask.getDingText(); String dingText = monitorTask.getDingText();
// dingText = dingText.replaceAll("\\{count}", String.valueOf(resultList.size()));
dingText = replaceDingText(dingText, resultList); dingText = replaceDingText(dingText, resultList);
String markdownMsg = DingdingUtils.buildMarkdownMsg("监控测试", dingText + "\n" + JSON.toJSONString(resultList), false); String markdownMsg = DingdingUtils.buildMarkdownMsg("监控测试", dingText + "\n" + JSON.toJSONString(resultList), false);
DingdingUtils.sendToDingding(markdownMsg, dingUrl); DingdingUtils.sendToDingding(markdownMsg, dingUrl);
} }
public static String replaceDingText(String dingText, List<Map<String, Object>> queryList) { public static String replaceDingText(String dingText, List<Map<String, Object>> queryList) {
// 替换{count}
if (dingText.contains("{count}")) { if (dingText.contains("{count}")) {
dingText = dingText.replace("{count}", String.valueOf(queryList.size())); dingText = dingText.replace("{count}", String.valueOf(queryList.size()));
} }
Pattern numPattern = Pattern.compile(".*\\(\\{\\d+}\\).*"); // 正则表达式替换{数字},当前仅替换第一行的数据,{0}为第一行第一列,{1}第一行第二列,以此类推...
String regex = "\\{([^}]*)\\}";
Pattern numPattern = Pattern.compile(regex);
Matcher matcher = numPattern.matcher(dingText); Matcher matcher = numPattern.matcher(dingText);
List<String> firstLineDataList = null; List<String> firstLineDataList = null;
if (queryList.size() > 0) { if (queryList.size() > 0) {
firstLineDataList = new ArrayList(queryList.get(0).values()); firstLineDataList = new ArrayList(queryList.get(0).values());
} }
if (matcher.find()) { while (matcher.find()) {
int count = matcher.groupCount(); String matchString = matcher.group();
System.out.println(count); int index = Integer.parseInt(matchString.substring(1, matchString.length() -1));
System.out.println(matcher.group(0)); if (firstLineDataList != null && firstLineDataList.size() > index) {
for (int i=0; i < count; i++) { dingText = dingText.replace(matchString, firstLineDataList.get(index));
dingText.replace(matcher.group(i+1), firstLineDataList.get(i)); } else {
dingText = dingText.replace(matchString, "NULL");
} }
} }
return dingText; return dingText;
} }
public static void main(String[] args) { public static void main(String[] args) {
String dingText = "监控定时任务测试,本次共查出{count}条数据,第一行第一列数据是{0}啦啦啦, {1}"; String dingText = "监控定时任务测试,本次共查出{count}条数据,第一行第一列数据是{0}啦啦啦, 第一行第二列数据是{1},第一行第三列数据是{2}";
List<Map<String, Object>> mapList = new ArrayList<>(); List<Map<String, Object>> mapList = new ArrayList<>();
Map<String, Object> map1 = new LinkedHashMap<>(); Map<String, Object> map1 = new LinkedHashMap<>();
Map<String, Object> map2 = new LinkedHashMap<>(); Map<String, Object> map2 = new LinkedHashMap<>();
...@@ -84,8 +91,8 @@ public class DbQueryTask extends QuartzJobBean { ...@@ -84,8 +91,8 @@ public class DbQueryTask extends QuartzJobBean {
map2.put("sku_name", "商品二"); map2.put("sku_name", "商品二");
mapList.add(map1); mapList.add(map1);
mapList.add(map2); mapList.add(map2);
System.out.println(mapList);
dingText = replaceDingText(dingText, mapList); dingText = replaceDingText(dingText, mapList);
System.out.println(dingText); System.out.println(dingText);
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment