From a6470c4de7867f5478197c390c158ad730ff5bae Mon Sep 17 00:00:00 2001
From: lrj <386002446@qq.com>
Date: 星期五, 25 十月 2024 14:51:21 +0800
Subject: [PATCH] bug

---
 src/main/java/com/ycl/scheme/SqlQueryBuilder.java |   66 +++++++++++++++++---------------
 1 files changed, 35 insertions(+), 31 deletions(-)

diff --git a/src/main/java/com/ycl/scheme/SqlQueryBuilder.java b/src/main/java/com/ycl/scheme/SqlQueryBuilder.java
index 88dbaec..928bc38 100644
--- a/src/main/java/com/ycl/scheme/SqlQueryBuilder.java
+++ b/src/main/java/com/ycl/scheme/SqlQueryBuilder.java
@@ -4,19 +4,15 @@
 import com.ycl.scheme.entity.BlockCode;
 import com.ycl.scheme.entity.Keyword;
 import com.ycl.scheme.entity.KeywordType;
-import com.ycl.scheme.service.SchemeService;
+import com.ycl.scheme.entity.TriggerType;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 public class SqlQueryBuilder extends AbstractBlockCodeBuilder {
-
 
     private static final String[] splits = {" ", "/", "\\", "(", ")", System.lineSeparator(), ":", ";", ",", "."};
     private BlockText blockText;
@@ -39,16 +35,20 @@
 
     private Integer  idx ;
 
-
-    private List<Parameter> pars=new ArrayList<>();
+    private TriggerType triggerType;
 
 
-    public SqlQueryBuilder(BlockText blockText, List<Keyword> keywords, Integer idx) {
+    private Map<String,Parameter> parameters = new HashMap<>();
+
+
+    public SqlQueryBuilder(BlockText blockText, List<Keyword> keywords, Integer idx, TriggerType triggerType) {
         this.blockText = blockText;
 
         this.keywords = keywords;
 
         this.idx= idx;
+
+        this.triggerType = triggerType;
 
     }
 
@@ -59,14 +59,17 @@
             throw  new RuntimeException("娌℃湁鎵惧埌鏁版嵁婧�:" + this.blockText.getSource().trim());
         }
 
-        this.scanExpression();
+        this.scanWhere();
+        if(this.triggerType== TriggerType.CANAL){
+            this.addWhereRowSql();
+        }
         this.scanResult();
         this.buildSql();
         BlockCode bc = this.buildCode();
         return bc;
     }
 
-    private void scanExpression() {
+    private void scanWhere() {
         String inputExpression =  this.blockText.getExpression();
         int idx = 0;
 
@@ -105,6 +108,10 @@
 
     }
 
+    private void addWhereRowSql(){
+        this.where += this.tableKeyword.getTableKey() + "= :rowId";
+    }
+
     private boolean sqlTest(){
         //娴嬭瘯sql鎵ц鏄惁姝g‘
         return true;
@@ -120,8 +127,6 @@
         if(ss.length < 2){
             throw  new RuntimeException("缁撴灉琛ㄨ揪寮忎笉姝g‘");
         }
-
-
 
         String fields = ss[0];
         String compareStr = resultText.substring(fields.length());
@@ -144,9 +149,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;
@@ -165,6 +171,7 @@
 
     private void buildSql(){
         this.sql = "select " + this.select + " from " + this.tableKeyword.getTable() + " where " + this.where;
+
     }
 
     private BlockCode buildCode(){
@@ -173,16 +180,15 @@
         StringBuilder csb = new StringBuilder();
         String sql = "\"" +this.sql + "\"";
         csb.append("        def " + funcName + "(){\n");
-        csb.append("            List<Object> pars = new ArrayList<>();\n");
+        csb.append("            Map<String,Object> pars = super.getSqlParameters();\n");
         csb.append("            def sql= " +sql + ";\n");
-        for(int i=0;i<this.pars.size();i++){
-            String pname= "p_" + i;
 
-            Parameter p  = this.pars.get(i);
-            csb.append("            def " + pname  + " = " + p.getScript()+";\n");
-            csb.append("            pars.add("+pname + ");\n");
+        this.parameters.forEach((k,v)->{
+            String pname= "p_" + k;
+            csb.append("            def " + pname  + " = " + v.getScript()+";\n");
+            csb.append("            pars.put('" +v.getName() +"'," + pname +");\n");
 
-        }
+        });
         csb.append("            def rs = service.execQuery(sql,pars);\n");
         csb.append("            if(rs " + this.compareScript + "){\n");
         csb.append("                return true;\n");
@@ -279,11 +285,7 @@
         }
 
         throw new RuntimeException("璇诲彇瀛楁鍚嶇О鏃跺彂鐢熼敊璇�");
-
     }
-
-
-
 
     private MatchResult matchLike(String skw,Keyword lkw,int idx){
         String sub = blockText.getExpression().substring(idx);
@@ -345,7 +347,6 @@
 
     private  MatchResult matchTimeRange(String skw, Keyword tkw,int idx){
 
-
         String sub = this.blockText.getExpression().substring(idx);
 
         String regex =  tkw.getRegex();
@@ -372,18 +373,21 @@
                 String d = vm.group(0);
                 day = Integer.valueOf(d);
 
-                rs.setOutput(tableKeyword.getTableTimeField() + " between ? and ?");
+                rs.setOutput(tableKeyword.getTableTimeField() + " between :beginTime and :endTime");
                 rs.setInput(skw);
                 rs.setIdx(idx + e);
 
                 //鏈夊嚑涓棶鍙凤紝灏辫鏈夊嚑涓搴旂殑鍙傛暟
                 Parameter p1 = new Parameter();
+                p1.setName("endTime");
                 p1.setScript("LocalDateTime.now()");
+                p1.setTypeName("LocalDateTime");
                 Parameter p2 = new Parameter();
+                p2.setName("beginTime");
                 p2.setScript("LocalDateTime.now().minusDays("+day+ ")");
-
-                pars.add(p1);
-                pars.add(p2);
+                p2.setTypeName("LocalDateTime");
+                parameters.put(p1.getName(),p1);
+                parameters.put(p2.getName(),p2);
 
             }else{
                 throw new RuntimeException("娌℃湁鍦ㄦ棩鏈熻寖鍥翠腑鎵惧埌鎸囧畾澶╂暟");

--
Gitblit v1.8.0