Browse Source

fix:增加api mysql等数据类型

liaoyitao 6 months ago
parent
commit
504cc4f214

+ 7 - 0
pom.xml

@@ -138,6 +138,13 @@
138
             <groupId>com.zaxxer</groupId>
138
             <groupId>com.zaxxer</groupId>
139
             <artifactId>HikariCP</artifactId>
139
             <artifactId>HikariCP</artifactId>
140
         </dependency>
140
         </dependency>
141
+        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
142
+        <dependency>
143
+            <groupId>mysql</groupId>
144
+            <artifactId>mysql-connector-java</artifactId>
145
+            <version>8.0.33</version>
146
+        </dependency>
147
+
141
     </dependencies>
148
     </dependencies>
142
 
149
 
143
     <build>
150
     <build>

+ 3 - 2
src/main/java/com/lqkj/cmlcp/module/api/domain/ApiInfo.java

@@ -1,5 +1,6 @@
1
 package com.lqkj.cmlcp.module.api.domain;
1
 package com.lqkj.cmlcp.module.api.domain;
2
 
2
 
3
+import com.alibaba.fastjson2.JSONArray;
3
 import com.alibaba.fastjson2.JSONObject;
4
 import com.alibaba.fastjson2.JSONObject;
4
 import io.hypersistence.utils.hibernate.type.json.JsonType;
5
 import io.hypersistence.utils.hibernate.type.json.JsonType;
5
 import io.swagger.v3.oas.annotations.media.Schema;
6
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -47,10 +48,10 @@ public class ApiInfo {
47
     @Type(JsonType.class)
48
     @Type(JsonType.class)
48
     @Column(name = "data", columnDefinition = "jsonb")
49
     @Column(name = "data", columnDefinition = "jsonb")
49
     @Schema(description = "请求体")
50
     @Schema(description = "请求体")
50
-    private JSONObject data;
51
+    private JSONArray data;
51
 
52
 
52
     @Column(name = "type")
53
     @Column(name = "type")
53
-    @Schema(description = "api类型, 1 rest; 2 static")
54
+    @Schema(description = "api类型, 1 rest; 2 static; 3 直接查询数据库")
54
     private Integer type;
55
     private Integer type;
55
 
56
 
56
 }
57
 }

+ 48 - 1
src/main/java/com/lqkj/cmlcp/module/api/service/impl/ApiInfoServiceImpl.java

@@ -1,5 +1,7 @@
1
 package com.lqkj.cmlcp.module.api.service.impl;
1
 package com.lqkj.cmlcp.module.api.service.impl;
2
 
2
 
3
+import com.alibaba.fastjson2.JSONArray;
4
+import com.alibaba.fastjson2.JSONObject;
3
 import com.lqkj.cmlcp.module.api.domain.ApiInfo;
5
 import com.lqkj.cmlcp.module.api.domain.ApiInfo;
4
 import com.lqkj.cmlcp.module.api.repository.ApiInfoRepository;
6
 import com.lqkj.cmlcp.module.api.repository.ApiInfoRepository;
5
 import com.lqkj.cmlcp.module.api.service.ApiInfoService;
7
 import com.lqkj.cmlcp.module.api.service.ApiInfoService;
@@ -8,6 +10,10 @@ import org.springframework.stereotype.Service;
8
 import org.springframework.transaction.annotation.Propagation;
10
 import org.springframework.transaction.annotation.Propagation;
9
 import org.springframework.transaction.annotation.Transactional;
11
 import org.springframework.transaction.annotation.Transactional;
10
 
12
 
13
+import java.sql.Connection;
14
+import java.sql.DriverManager;
15
+import java.sql.ResultSet;
16
+import java.sql.Statement;
11
 import java.util.List;
17
 import java.util.List;
12
 
18
 
13
 @Service
19
 @Service
@@ -20,6 +26,7 @@ public class ApiInfoServiceImpl implements ApiInfoService {
20
     @Override
26
     @Override
21
     @Transactional
27
     @Transactional
22
     public void saveApi(ApiInfo apiInfo) {
28
     public void saveApi(ApiInfo apiInfo) {
29
+        if (apiInfo.getType().equals(3)) apiInfo.setData(null);
23
         apiInfoRepository.save(apiInfo);
30
         apiInfoRepository.save(apiInfo);
24
     }
31
     }
25
 
32
 
@@ -35,6 +42,46 @@ public class ApiInfoServiceImpl implements ApiInfoService {
35
 
42
 
36
     @Override
43
     @Override
37
     public ApiInfo findById(Integer id) {
44
     public ApiInfo findById(Integer id) {
38
-        return apiInfoRepository.findById(id).get();
45
+        ApiInfo apiInfo = apiInfoRepository.findById(id).get();
46
+        switch (apiInfo.getType()) {
47
+            case 3 -> encapsuLationDbData(apiInfo);
48
+            case 4 -> System.out.println("暂不支持该类型");
49
+        }
50
+        return apiInfo;
51
+    }
52
+
53
+    private void encapsuLationDbData(ApiInfo apiInfo) {
54
+        if (apiInfo.getData() != null) return;
55
+        JSONObject params = apiInfo.getParams();
56
+        String url = params.get("url").toString();
57
+        String user = params.get("user").toString();
58
+        String password = params.get("password").toString();
59
+        try {
60
+            // 建立数据库连接
61
+            Class.forName(params.get("driver").toString());
62
+            Connection conn = DriverManager.getConnection(url, user, password);
63
+            // 创建Statement对象来执行SQL语句
64
+            Statement stmt = conn.createStatement();
65
+            // 执行查询并获取结果
66
+            ResultSet rs = stmt.executeQuery(params.get("sql").toString());
67
+            // 遍历结果集
68
+            JSONArray objects = new JSONArray();
69
+            while (rs.next()) {
70
+                JSONObject jsonObject = new JSONObject();
71
+                for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
72
+                    String key = rs.getMetaData().getColumnName(i);
73
+                    jsonObject.put(key, rs.getObject(key));
74
+                }
75
+                objects.add(jsonObject);
76
+            }
77
+            apiInfo.setData(objects);
78
+            // 关闭结果集、Statement和连接
79
+            rs.close();
80
+            stmt.close();
81
+            conn.close();
82
+            apiInfoRepository.save(apiInfo);
83
+        } catch (Exception e) {
84
+            e.printStackTrace();
85
+        }
39
     }
86
     }
40
 }
87
 }

+ 16 - 16
src/main/resources/application-install.yml

@@ -12,22 +12,22 @@ server:
12
     max-swallow-size: 1000MB
12
     max-swallow-size: 1000MB
13
     max-http-form-post-size: 1000MB
13
     max-http-form-post-size: 1000MB
14
 spring:
14
 spring:
15
-  data:
16
-    redis:
17
-      host: 127.0.0.1
18
-      database: 0
19
-      port: 6379
20
-      connect-timeout: 10s
21
-      lettuce:
22
-        pool:
23
-          # 连接池最大连接数
24
-          max-active: 200
25
-          # 连接池最大阻塞等待时间(使用负值表示没有限制)
26
-          max-wait: -1ms
27
-          # 连接池中的最大空闲连接
28
-          max-idle: 10
29
-          # 连接池中的最小空闲连接
30
-          min-idle: 0
15
+#  data:
16
+#    redis:
17
+#      host: 127.0.0.1
18
+#      database: 0
19
+#      port: 6379
20
+#      connect-timeout: 10s
21
+#      lettuce:
22
+#        pool:
23
+#          # 连接池最大连接数
24
+#          max-active: 200
25
+#          # 连接池最大阻塞等待时间(使用负值表示没有限制)
26
+#          max-wait: -1ms
27
+#          # 连接池中的最大空闲连接
28
+#          max-idle: 10
29
+#          # 连接池中的最小空闲连接
30
+#          min-idle: 0
31
   application:
31
   application:
32
     name: CMLCP-SERVER
32
     name: CMLCP-SERVER
33
   servlet:
33
   servlet: