소스 검색

创建AI模块中的text2sql,实现SQL语句查询

Gaokun Wang 5 달 전
부모
커밋
8c4652308b
25개의 변경된 파일306개의 추가작업 그리고 10개의 파일을 삭제
  1. 17 0
      eco-ai/ai-text-sql-api/pom.xml
  2. 32 0
      eco-ai/ai-text-sql-biz/pom.xml
  3. 58 0
      eco-ai/ai-text-sql-biz/src/main/java/org/eco/vip/ai/text2sql/controller/ChatSqlController.java
  4. 21 0
      eco-ai/ai-text-sql-biz/src/main/java/org/eco/vip/ai/text2sql/domain/CommentVo.java
  5. 34 0
      eco-ai/ai-text-sql-biz/src/main/java/org/eco/vip/ai/text2sql/mapper/Text2SqlMapper.java
  6. 52 0
      eco-ai/ai-text-sql-biz/src/main/java/org/eco/vip/ai/text2sql/service/IText2SqlService.java
  7. 62 0
      eco-ai/ai-text-sql-biz/src/main/java/org/eco/vip/ai/text2sql/service/Text2SqlService.java
  8. 15 0
      eco-ai/ai-text-sql-biz/src/main/resources/mapper/Text2SqlMapper.xml
  9. 4 0
      eco-ai/pom.xml
  10. 1 1
      eco-nexus-core/auth-api/pom.xml
  11. 0 0
      eco-nexus-core/auth-api/src/main/java/org/eco/vip/auth/api/IUserApi.java
  12. 2 2
      eco-nexus-core/auth-biz/pom.xml
  13. 0 0
      eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/api/UserApi.java
  14. 0 0
      eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/controller/dept/DeptController.java
  15. 0 0
      eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/controller/user/UserController.java
  16. 0 0
      eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/domain/dept/Dept.java
  17. 0 0
      eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/domain/user/User.java
  18. 0 0
      eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/mapper/DeptMapper.java
  19. 0 0
      eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/mapper/UserMapper.java
  20. 0 0
      eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/service/dept/DeptService.java
  21. 0 0
      eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/service/dept/IDeptService.java
  22. 0 0
      eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/service/user/IUserService.java
  23. 0 0
      eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/service/user/UserService.java
  24. 2 2
      eco-nexus-core/pom.xml
  25. 6 5
      eco-start/pom.xml

+ 17 - 0
eco-ai/ai-text-sql-api/pom.xml

@@ -0,0 +1,17 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.eco.vip</groupId>
+        <artifactId>eco-ai</artifactId>
+        <version>${revision}</version>
+    </parent>
+
+    <artifactId>ai-text-sql-api</artifactId>
+    <name>${project.artifactId}</name>
+    <packaging>jar</packaging>
+    <description>
+        text2sql API,暴露给其它模块调用
+    </description>
+
+</project>

+ 32 - 0
eco-ai/ai-text-sql-biz/pom.xml

@@ -0,0 +1,32 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.eco.vip</groupId>
+        <artifactId>eco-ai</artifactId>
+        <version>${revision}</version>
+    </parent>
+
+    <artifactId>ai-text-sql-biz</artifactId>
+    <name>${project.artifactId}</name>
+    <packaging>jar</packaging>
+    <description>
+        text2sql功能实现,包含自然语言转sql,执行sql
+    </description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.eco.vip</groupId>
+            <artifactId>ai-text-sql-api</artifactId>
+            <version>${revision}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eco.vip</groupId>
+            <artifactId>com-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.eco.vip</groupId>
+            <artifactId>com-orm</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 58 - 0
eco-ai/ai-text-sql-biz/src/main/java/org/eco/vip/ai/text2sql/controller/ChatSqlController.java

@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.ai.text2sql.controller;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONArray;
+import jakarta.annotation.Resource;
+import org.eco.vip.ai.text2sql.service.IText2SqlService;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @description ChatSqlController
+ *
+ * @author GaoKunW
+ * @date 2025/3/12 10:09
+ */
+@RestController
+@RequestMapping("/chat/sql")
+public class ChatSqlController {
+
+    @Resource
+    private IText2SqlService text2SqlService;
+
+    /**
+     * @description:
+     * @param map 问题
+     * @return List<Map<String,Object>>
+     **/
+    @GetMapping("/chat")
+    public JSONArray chatSql(@RequestBody Map<String, String> map) {
+        String question = map.get("question");
+        if (StrUtil.isNotBlank(question)) {
+            return text2SqlService.getCommentData(question);
+        }
+        return null;
+    }
+
+    @GetMapping("/test")
+    public List<Map<String, Object>> test() {
+        return text2SqlService.executeSql("show create table sys_dept");
+    }
+
+    @GetMapping("/test1")
+    public List<Map<String, Object>> test1() {
+        return text2SqlService.tableNameByNl("");
+    }
+
+    @PostMapping("/test2")
+    public JSONArray test2(@RequestBody Map<String, String> map) {
+        return text2SqlService.getCommentData("");
+    }
+}

+ 21 - 0
eco-ai/ai-text-sql-biz/src/main/java/org/eco/vip/ai/text2sql/domain/CommentVo.java

@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.ai.text2sql.domain;
+
+
+import lombok.Data;
+
+/**
+ * @description CommentVo
+ *
+ * @author GaoKunW
+ * @date 2025/3/12 16:56
+ */
+@Data
+public class CommentVo {
+    String name;
+    String comment;
+}

+ 34 - 0
eco-ai/ai-text-sql-biz/src/main/java/org/eco/vip/ai/text2sql/mapper/Text2SqlMapper.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.ai.text2sql.mapper;
+
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.eco.vip.ai.text2sql.domain.CommentVo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @description Text2SqlMapper
+ *
+ * @author GaoKunW
+ * @date 2025/3/12 10:56
+ */
+@Mapper
+public interface Text2SqlMapper {
+
+//    @Select("${sqlText}")
+    List<Map<String, Object>> executeSql(@Param("sqlText") String sqlText);
+
+    @Select("select column_name as name, column_comment as comment  from information_schema.COLUMNS where table_schema = #{schema} and table_name = #{tableName}")
+    List<CommentVo> selectCommentsByMysql(@Param("schema") String schema, @Param("tableName") String tableName);
+
+    @Select("select column_name as name, comments as comment  from USER_COL_COMMENTS where OWNER = #{schema} and TABLE_NAME = #{tableName}")
+    List<CommentVo> selectCommentsByDm(@Param("schema") String schema, @Param("tableName") String tableName);
+}

+ 52 - 0
eco-ai/ai-text-sql-biz/src/main/java/org/eco/vip/ai/text2sql/service/IText2SqlService.java

@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.ai.text2sql.service;
+
+
+import cn.hutool.json.JSONArray;
+import org.eco.vip.ai.text2sql.domain.CommentVo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author GaoKunW
+ * @description IText2SqlService
+ * @date 2025/3/12 10:29
+ */
+public interface IText2SqlService {
+
+    /**
+     * @description: 直接执行sql语句
+     * @param sqlText sql
+     *
+     * @return List<Map<Object,Object>>
+     **/
+    List<Map<String, Object>> executeSql(String sqlText);
+
+    /**
+     * @description: 通过自然语言生成SQL语句
+     * @param question 问题
+     *
+     * @return List<Map<Object,Object>>
+     **/
+    List<Map<String, Object>> tableNameByNl(String question);
+
+    /**
+     * @description: 通过表查询字段注释
+     * @param schema schema
+     * @param tableName 表明
+     * @return List<Map<Object,Object>>
+     **/
+    List<CommentVo> commentByTableName(String schema, String tableName);
+
+    /**
+     * @description: 获取带字段注释的表数据
+     * @param question 问题
+     * @return List<Map<Object,Object>>
+     **/
+    JSONArray getCommentData(String question);
+}

+ 62 - 0
eco-ai/ai-text-sql-biz/src/main/java/org/eco/vip/ai/text2sql/service/Text2SqlService.java

@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.ai.text2sql.service;
+
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONArray;
+import jakarta.annotation.Resource;
+import org.eco.vip.ai.text2sql.domain.CommentVo;
+import org.eco.vip.ai.text2sql.mapper.Text2SqlMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @description Text2SqlService
+ *
+ * @author GaoKunW
+ * @date 2025/3/12 10:54
+ */
+@Service
+public class Text2SqlService implements IText2SqlService {
+    @Resource
+    private Text2SqlMapper text2SqlMapper;
+
+    @Override
+    public List<Map<String, Object>> executeSql(String sql) {
+        return text2SqlMapper.executeSql(sql);
+    }
+
+    @Override
+    public List<Map<String, Object>> tableNameByNl(String sql) {
+        return text2SqlMapper.executeSql(sql);
+    }
+
+    @Override
+    public List<CommentVo> commentByTableName(String schema, String tableName) {
+        return text2SqlMapper.selectCommentsByMysql(schema, tableName);
+    }
+
+    @Override
+    public JSONArray getCommentData(String question) {
+        List<Map<String, Object>> mapList = text2SqlMapper.executeSql("select * from sys_user");
+        List<CommentVo> tableNames = text2SqlMapper.selectCommentsByMysql("eco-boot", "sys_user");
+        JSONArray jsonArray = new JSONArray();
+        Map<String, Object> commentMap = new HashMap<>();
+        for (Map<String, Object> map : mapList) {
+            for (String key : map.keySet()) {
+                CommentVo commentVo = CollUtil.findOne(tableNames, tableName -> StrUtil.equals(StrUtil.toCamelCase(tableName.getName()), key));
+                commentMap.put(commentVo.getComment(), map.get(key));
+            }
+            jsonArray.add(commentMap);
+        }
+        return jsonArray;
+    }
+}

+ 15 - 0
eco-ai/ai-text-sql-biz/src/main/resources/mapper/Text2SqlMapper.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright (c) 2025 GaoKunW
+  ~
+  -->
+
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.eco.vip.ai.text2sql.mapper.Text2SqlMapper">
+    <select id="executeSql" parameterType="String" resultType="map">
+        ${sqlText}
+    </select>
+
+</mapper>

+ 4 - 0
eco-ai/pom.xml

@@ -9,6 +9,10 @@
 
     <artifactId>eco-ai</artifactId>
     <name>${project.artifactId}</name>
+    <modules>
+        <module>ai-text-sql-api</module>
+        <module>ai-text-sql-biz</module>
+    </modules>
     <packaging>pom</packaging>
     <description>
         Ai 模块包含:

+ 1 - 1
eco-nexus-core/eco-auth-api/pom.xml → eco-nexus-core/auth-api/pom.xml

@@ -7,7 +7,7 @@
         <version>${revision}</version>
     </parent>
 
-    <artifactId>eco-auth-api</artifactId>
+    <artifactId>auth-api</artifactId>
     <packaging>jar</packaging>
 
     <name>${project.artifactId}</name>

+ 0 - 0
eco-nexus-core/eco-auth-api/src/main/java/org/eco/vip/auth/api/IUserApi.java → eco-nexus-core/auth-api/src/main/java/org/eco/vip/auth/api/IUserApi.java


+ 2 - 2
eco-nexus-core/eco-auth-biz/pom.xml → eco-nexus-core/auth-biz/pom.xml

@@ -7,7 +7,7 @@
         <version>${revision}</version>
     </parent>
 
-    <artifactId>eco-auth-biz</artifactId>
+    <artifactId>auth-biz</artifactId>
     <name>${project.artifactId}</name>
     <packaging>jar</packaging>
     <description>
@@ -17,7 +17,7 @@
     <dependencies>
         <dependency>
             <groupId>org.eco.vip</groupId>
-            <artifactId>eco-auth-api</artifactId>
+            <artifactId>auth-api</artifactId>
             <version>${revision}</version>
         </dependency>
         <dependency>

+ 0 - 0
eco-nexus-core/eco-auth-biz/src/main/java/org/eco/vip/auth/api/UserApi.java → eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/api/UserApi.java


+ 0 - 0
eco-nexus-core/eco-auth-biz/src/main/java/org/eco/vip/auth/controller/dept/DeptController.java → eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/controller/dept/DeptController.java


+ 0 - 0
eco-nexus-core/eco-auth-biz/src/main/java/org/eco/vip/auth/controller/user/UserController.java → eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/controller/user/UserController.java


+ 0 - 0
eco-nexus-core/eco-auth-biz/src/main/java/org/eco/vip/auth/domain/dept/Dept.java → eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/domain/dept/Dept.java


+ 0 - 0
eco-nexus-core/eco-auth-biz/src/main/java/org/eco/vip/auth/domain/user/User.java → eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/domain/user/User.java


+ 0 - 0
eco-nexus-core/eco-auth-biz/src/main/java/org/eco/vip/auth/mapper/DeptMapper.java → eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/mapper/DeptMapper.java


+ 0 - 0
eco-nexus-core/eco-auth-biz/src/main/java/org/eco/vip/auth/mapper/UserMapper.java → eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/mapper/UserMapper.java


+ 0 - 0
eco-nexus-core/eco-auth-biz/src/main/java/org/eco/vip/auth/service/dept/DeptService.java → eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/service/dept/DeptService.java


+ 0 - 0
eco-nexus-core/eco-auth-biz/src/main/java/org/eco/vip/auth/service/dept/IDeptService.java → eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/service/dept/IDeptService.java


+ 0 - 0
eco-nexus-core/eco-auth-biz/src/main/java/org/eco/vip/auth/service/user/IUserService.java → eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/service/user/IUserService.java


+ 0 - 0
eco-nexus-core/eco-auth-biz/src/main/java/org/eco/vip/auth/service/user/UserService.java → eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/service/user/UserService.java


+ 2 - 2
eco-nexus-core/pom.xml

@@ -14,8 +14,8 @@
         集成核心管理功能
     </description>
     <modules>
-        <module>eco-auth-api</module>
-        <module>eco-auth-biz</module>
+        <module>auth-api</module>
+        <module>auth-biz</module>
     </modules>
     <packaging>pom</packaging>
 </project>

+ 6 - 5
eco-start/pom.xml

@@ -12,13 +12,14 @@
     <description>eco-start web 服务入口</description>
     <packaging>jar</packaging>
     <dependencies>
-<!--        <dependency>-->
-<!--            <groupId>org.eco.vip</groupId>-->
-<!--            <artifactId>com-web</artifactId>-->
-<!--        </dependency>-->
         <dependency>
             <groupId>org.eco.vip</groupId>
-            <artifactId>eco-auth-biz</artifactId>
+            <artifactId>ai-text-sql-biz</artifactId>
+            <version>${revision}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eco.vip</groupId>
+            <artifactId>auth-biz</artifactId>
             <version>${revision}</version>
         </dependency>
     </dependencies>