src/main/java/com/ycl/scheme/KeywordExample.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ycl/scheme/SqlQueryBuilder.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ycl/scheme/entity/Keyword.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/test/java/org/example/Builder.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/test/java/org/example/test.groovy | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ycl/scheme/KeywordExample.java
@@ -49,8 +49,10 @@ //函数 \\((.*?)\\) Keyword f1= Keyword.builder().name("时间范围").keywordType(KeywordType.TIME_RANGE_FUNCTION).regex("\\(\\s*最近\\s*\\d+\\s*天\\s*\\)").build(); keywords.add(f1); Keyword f2= Keyword.builder().name("计数").keywordType(KeywordType.FUNCTION).code("count").regex("\\s*\\((.*?)\\)\\s*").build(); Keyword f2= Keyword.builder().name("计数").keywordType(KeywordType.FUNCTION).functionParameterNullable(true).code("count").regex("\\s*\\((.*?)\\)\\s*").build(); keywords.add(f2); Keyword f3= Keyword.builder().name("合计").keywordType(KeywordType.FUNCTION).code("sum").regex("\\s*\\((.*?)\\)\\s*").build(); keywords.add(f3); //特殊值 Keyword p1= Keyword.builder().name("最近?天").keywordType(KeywordType.TIME_RANGE).regex("\\d+").build(); keywords.add(p1); src/main/java/com/ycl/scheme/SqlQueryBuilder.java
@@ -150,9 +150,10 @@ res +=c; } idx++; if(kw!=null && !kw.getKeywordType().equals(KeywordType.FUNCTION) && kw.getCode().equals("count") && !c.equals("(")){ res+=c; if(kw==null || !kw.getKeywordType().equals(KeywordType.FUNCTION) || kw.getFunctionParameterNullable()==null || !kw.getFunctionParameterNullable()){ res +=c; } skw=""; }else{ skw += c; src/main/java/com/ycl/scheme/entity/Keyword.java
@@ -34,6 +34,8 @@ private String regex;//抓取 private Boolean functionParameterNullable;//函数参数是否可以为空 } src/test/java/org/example/Builder.java
@@ -30,8 +30,8 @@ @Test public void build(){ BlockText blockText = new BlockText(); String text = "数据源 : 警情通报 \n 条件:时间范围(最近5天) 并且 警情内容 包含 '抢夺' 并且 案发地 包含 '金牛大道'\n 结果: 计数 > 2 \n and 数据源:案件系统 \n 条件:时间范围(最近5天) 并且 警情内容 包含 '命案' 并且 案发地 包含 '金牛大道'\n 结果: 计数>=2 \n"; String text = "数据源 : 警情通报 \n 条件:时间范围(最近5天) 并且 警情内容 包含 '抢夺' 并且 案发地 包含 '金牛大道'\n 结果: 计数 > 2 \n and 数据源:案件系统 \n 条件:时间范围(最近5天) 并且 警情内容 包含 '诈骗' 并且 案发地 包含 '银牛大道'\n 结果: 合计(涉案金额)>=100000 \n"; Scheme scheme =new Scheme(); scheme.setId(1); scheme.setName("紧急通报"); src/test/java/org/example/test.groovy
@@ -13,7 +13,7 @@ void run(Map<String,Parameter> pars,SchemeService service){ super.parameters.putAll(pars); this.service = service; if(func_0() && func_1() ){ if(func_0() &&func_1() ){ service.doAction(1) } } @@ -34,13 +34,13 @@ } def func_1(){ Map<String,Object> pars = new HashMap<>(); def sql= "select from t_case where create_time between :beginTime and :endTime and content like '%命案%' and address like '%金牛大道%' "; def sql= "select sum(amt) from t_case where create_time between :beginTime and :endTime and content like '%诈骗%' and address like '%银牛大道%' "; def p_beginTime = LocalDateTime.now(); pars.put('beginTime',p_beginTime); def p_endTime = LocalDateTime.now().minusDays(5); pars.put('endTime',p_endTime); def rs = service.execQuery(sql,pars); if(rs >=2){ if(rs >=100000){ return true; }else{ return false;