tianyunperfect 2 years ago
parent
commit
6bc677fd8c

+ 1 - 1
mybatis-plus/pom.xml

@@ -7,7 +7,7 @@
 
     <groupId>com.alvin</groupId>
     <artifactId>alvin-mybatis-plus-generator</artifactId>
-    <version>1.0</version>
+    <version>1.1</version>
 
     <properties>
         <maven.compiler.source>8</maven.compiler.source>

+ 1 - 1
mybatis-plus/src/main/resources/templates/service1.java.ftl

@@ -18,7 +18,7 @@ interface ${table.serviceName} : ${superServiceClass}<${entity}>
 <#else>
 public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {
 
-    default ${entity} getOnly(QueryWrapper<${entity}> wrapper){
+    default ${entity} getOnly(LambdaQueryWrapper<${entity}> wrapper){
         wrapper.last("limit 1");
         return this.getOne(wrapper);
     }

+ 10 - 4
springboot-main/src/main/java/com/alvin/util/StringUtil.java

@@ -13,12 +13,18 @@ public class StringUtil {
     /**
      * 是否为空白字符串,比较常用
      *
-     * @param s 年代
+     * @param str 年代
      * @return {@link Boolean}
      */
-    public static Boolean isBlank(String s) {
-        if (s != null && s.replaceAll("\\s*", "").length() > 0) {
-            return false;
+    public static boolean isBlank(String str) {
+        int strLen;
+        if (str == null || (strLen = str.length()) == 0) {
+            return true;
+        }
+        for (int i = 0; i < strLen; i++) {
+            if ((Character.isWhitespace(str.charAt(i)) == false)) {
+                return false;
+            }
         }
         return true;
     }

+ 24 - 0
test1/pom.xml

@@ -48,5 +48,29 @@
             <artifactId>fastjson</artifactId>
             <version>1.2.79</version>
         </dependency>
+        <dependency>
+            <groupId>jakarta.el</groupId>
+            <artifactId>jakarta.el-api</artifactId>
+            <version>3.0.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.glassfish</groupId>
+            <artifactId>jakarta.el</artifactId>
+            <version>3.0.3</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.9.0</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>2.13.4.2</version>
+            <scope>compile</scope>
+        </dependency>
+
     </dependencies>
 </project>

+ 87 - 0
test1/src/main/java/LogicExpressionConverter.java

@@ -0,0 +1,87 @@
+import com.google.gson.*;
+
+public class LogicExpressionConverter {
+
+    public static void main(String[] args) {
+        String json = "{\n" +
+                "        \"relationship\":\"and\",\n" +
+                "        \"list\":[\n" +
+                "                {\n" +
+                "                        \"relationship\":\"or\",\n" +
+                "                        \"list\":[\n" +
+                "                                {\n" +
+                "                                        \"rule\":\"tag1 > 0\"\n" +
+                "                                },\n" +
+                "                                {\n" +
+                "                                        \"rule\":\"tag2 < 2\"\n" +
+                "                                },\n" +
+                "                                {\n" +
+                "                                        \"rule\":\"tag5 == 7\"\n" +
+                "                                }\n" +
+                "                        ]\n" +
+                "                },\n" +
+                "                {\n" +
+                "                        \"relationship\":\"and\",\n" +
+                "                        \"list\":[\n" +
+                "                                {\n" +
+                "                                        \"rule\":\"tag3 == 4\"\n" +
+                "                                }\n" +
+                "                        ]\n" +
+                "                },{\n" +
+                "                        \"relationship\":\"and\",\n" +
+                "                        \"list\":[\n" +
+                "                                {\n" +
+                "                                        \"rule\":\"tag3 == 4\"\n" +
+                "                                },{\n" +
+                "                        \"relationship\":\"or\",\n" +
+                "                        \"list\":[\n" +
+                "                                {\n" +
+                "                                        \"rule\":\"tag3 == 4\"\n" +
+                "                                },{\n" +
+                "                                        \"rule\":\"tag4 == 5\"\n" +
+                "                                }\n" +
+                "                        ]\n" +
+                "                }\n" +
+                "                        ]\n" +
+                "                }\n" +
+                "        ]\n" +
+                "}";
+        JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();
+        String result = convertToString(jsonObject, true);
+        System.out.println(result);
+    }
+
+    private static String convertToString(JsonObject obj, boolean isTopLevel) {
+        String relationship = obj.get("relationship").getAsString();
+        JsonArray list = obj.getAsJsonArray("list");
+        String rules = convertList(list, relationship);
+        if (isTopLevel) {
+            return rules;
+        } else {
+            return "(" + rules + ")";
+        }
+    }
+
+    private static String convertList(JsonArray list, String parentRelationship) {
+        StringBuilder sb = new StringBuilder();
+        boolean isFirst = true;
+        for (JsonElement element : list) {
+            JsonObject obj = element.getAsJsonObject();
+            if (obj.has("list")) {
+                String relationship = obj.get("relationship").getAsString();
+                if (!isFirst) {
+                    sb.append(" " + parentRelationship.toLowerCase() + " ");
+                }
+                sb.append("(" + convertList(obj.getAsJsonArray("list"), relationship) + ")");
+            } else {
+                String rule = obj.get("rule").getAsString();
+                if (!isFirst) {
+                    sb.append(" " + parentRelationship.toLowerCase() + " ");
+                }
+                sb.append(rule);
+            }
+            isFirst = false;
+        }
+        return sb.toString();
+    }
+}

+ 58 - 0
test1/src/main/java/Main.java

@@ -0,0 +1,58 @@
+import javax.el.*;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+
+public class Main {
+    public static boolean exec(HashMap<String, Object> map, String execStr) {
+        ExpressionFactory factory = ExpressionFactory.newInstance();
+        ELContext context = new HashMapELContext(map);
+        ValueExpression expression = factory.createValueExpression(context, execStr, boolean.class);
+        return (Boolean) expression.getValue(context);
+    }
+
+    public static void main(String[] args) {
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("name", "小明");
+        map.put("age", 9);
+        map.put("score", 90);
+
+        String execStr = "(age > 8) && (score > 80L)";
+        System.out.println(exec(map, execStr));
+    }
+
+    private static class HashMapELContext extends ELContext {
+        private final HashMap<String, Object> map;
+
+        public HashMapELContext(HashMap<String, Object> map) {
+            this.map = map;
+        }
+
+        @Override
+        public Object getContext(Class key) {
+            if (key == HashMap.class) {
+                return map;
+            }
+            return null;
+        }
+
+        @Override
+        public ELResolver getELResolver() {
+            return new MapELResolver();
+        }
+
+        @Override
+        public FunctionMapper getFunctionMapper() {
+            return new FunctionMapper() {
+                @Override
+                public Method resolveFunction(String prefix, String localName) {
+                    return null;
+                }
+            };
+        }
+
+        @Override
+        public VariableMapper getVariableMapper() {
+            return null;
+        }
+    }
+}

+ 14 - 0
test1/src/main/java/Node.java

@@ -0,0 +1,14 @@
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class Node {
+
+    public String relationship;
+
+    public String rule;
+
+    public List<Node> nodes;
+
+}

+ 17 - 0
test1/src/main/java/tmp11.java

@@ -0,0 +1,17 @@
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.JsonObject;
+
+import java.util.HashMap;
+import java.util.HashSet;
+
+public class tmp11 {
+    public static void main(String[] args) {
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("abc", 11117);
+        //HashMap<String, String> map = new HashMap<>();
+        //map.put("abc", "abc");
+        boolean abc = jsonObject.get("abc").equals(11117);
+
+        System.out.println(abc);
+    }
+}

+ 33 - 9
test1/src/main/java/tmp3.java

@@ -1,14 +1,38 @@
-import com.alibaba.fastjson.JSONObject;
-
-import java.util.List;
+import java.util.ArrayList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public class tmp3 {
-    public List<JSONObject> transform(List<JSONObject> data){
-        int length = data.size();
-        for(int i = 0; i < length; i++){
-            JSONObject item = data.get(i);
-            item.put("userSource", 0);
+    public static void main(String[] args) {
+        String input = "(tag1 > 0 && tag2 <2)||(tag3==4)||(tag4==\"hello\")";
+        System.out.println(getMapScript(input));
+
+    }
+
+    /**
+     * 解析 "(tag1 > 0 && tag2 <2)||(tag3==4)"
+     * 输出:(map.get("tag1")> 0 &&  map.get("tag2")<2)|| (map.get("tag3")==4)
+     *
+     * @param input 输入
+     * @return {@link String}
+     */
+    private static String getMapScript(String input) {
+        String pattern = "\\b(\\w+)\\s*(?=[><=])"; // 匹配任意英文字母组成的字符串,且其后面紧跟 >、<、= 运算符
+
+        Pattern regex = Pattern.compile(pattern);
+        Matcher matcher = regex.matcher(input);
+
+        StringBuffer output = new StringBuffer();
+        while (matcher.find()) {
+            String tag = matcher.group(1);
+            matcher.appendReplacement(output, "map.get(\"" + tag + "\")");
         }
-        return data;
+        matcher.appendTail(output);
+
+        String result = output.toString();
+        return result;
     }
+
+
+
 }