|
@@ -1,18 +1,16 @@
|
|
|
# 智能数据分析系统设计开发与实现文档
|
|
|
|
|
|
-- 基于RBAC的权限管理设计
|
|
|
-- 用户管理设计
|
|
|
-- 图表管理设计
|
|
|
+## 一.项目简介
|
|
|
|
|
|
-## 一.开发背景
|
|
|
+### 1.1 项目背景
|
|
|
|
|
|
-随着大数据时代的到来,数据分析变得越来越重要。
|
|
|
+随着大数据时代的到来,数据分析变得越来越重要。智能数据分析平台旨在为用户提供一个简单易用、功能强大的数据分析工具,帮助用户从海量数据中提取有价值的信息,并通过图表直观展示,区别于传统 BI,用户只需要导入原始数据集、并输入分析诉求,就能自动生成可视化图表及分析结论,实现数据分析的降本增效。
|
|
|
|
|
|
-智能数据分析平台旨在为用户提供一个简单易用、功能强大的数据分析工具,帮助用户从海量数据中提取有价值的信息,并通过图表直观展示。
|
|
|
+### 1.2 项目特点
|
|
|
|
|
|
-智能数据分析平台是一个基于Spring Boot和Vue.js的前后端分离应用,旨在为用户提供一个简单易用的数据分析工具。
|
|
|
+智能数据分析平台是一个基于Spring Boot后端和Vue.js前端的前后端分离应用,通过JWT实现身份验证,采用RBAC进行权限管理,并提供图表生成和管理功能。项目选题**新颖**,不同于泛滥的管理系统、博客、商城、本项目是结合**AIGC技术+企业BI业务场景**的综合实战,紧跟时代潮流。
|
|
|
|
|
|
-平台通过JWT实现身份验证,使用RBAC进行权限管理,并提供图表生成和管理功能。
|
|
|
+![img](https://pic.yupi.icu/1/(null)-20231026151931197.(null))
|
|
|
|
|
|
## 二.需求分析
|
|
|
|
|
@@ -20,7 +18,7 @@
|
|
|
|
|
|
#### 2.1.1 数据分析接口
|
|
|
|
|
|
-- **数据分析**:分析用户上传的数据,得出结论,并将数据可视化
|
|
|
+- **数据分析**:分析用户上传的数据,得出结论,并将数据可视化
|
|
|
- **接口限流**:使用令牌桶算法限制接口访问频率,防止滥用。
|
|
|
- **异步处理**:通过线程池异步处理数据分析任务,提高系统响应速度。
|
|
|
|
|
@@ -54,14 +52,27 @@
|
|
|
|
|
|
## 三.需求设计
|
|
|
|
|
|
-### 3.1 架构设计
|
|
|
+### 3.1 技术选型
|
|
|
|
|
|
-系统采用B/S架构,前端使用Vue.js构建用户界面,后端使用Spring Boot构建RESTful API。
|
|
|
+系统采用B/S架构,前端使用Vue3.js构建用户界面,后端使用Spring Boot构建RESTful API
|
|
|
|
|
|
-- **后端**:Spring Boot、Spring Security、MyBatis Plus、Redisson、JWT、hutool等
|
|
|
-- **前端**:Vue.js、Element Plus、ECharts等
|
|
|
-- **数据库**:MySQL
|
|
|
-- **缓存**:Redis
|
|
|
+**前端**
|
|
|
+
|
|
|
+- Vue3.js
|
|
|
+- Element Plus组件库
|
|
|
+- ECharts可视化库
|
|
|
+
|
|
|
+**后端**
|
|
|
+
|
|
|
+- Java Spring Boot
|
|
|
+- Java Spring Security
|
|
|
+- MySQL 数据库
|
|
|
+- MyBatis-Plus
|
|
|
+- Redis + Redisson 限流
|
|
|
+- JWT令牌校验
|
|
|
+- Easy Excel 表格数据处理
|
|
|
+- Swagger + Knife4j 接口文档生成
|
|
|
+- Hutool、Apache Common Utils 等工具库
|
|
|
|
|
|
### 3.2 数据库设计
|
|
|
|
|
@@ -88,8 +99,6 @@ CREATE TABLE if NOT EXISTS `user` (
|
|
|
) COMMENT='用户表';
|
|
|
```
|
|
|
|
|
|
-
|
|
|
-
|
|
|
#### 3.2.2 图表表
|
|
|
|
|
|
- **图表ID**:唯一标识。
|
|
@@ -115,8 +124,6 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
) COMMENT='图表表';
|
|
|
```
|
|
|
|
|
|
-
|
|
|
-
|
|
|
### 3.3 接口设计
|
|
|
|
|
|
使用Swagger文档化API接口。
|
|
@@ -141,7 +148,6 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
|
|
|
**请求数据类型**:`application/json`
|
|
|
|
|
|
-
|
|
|
**响应数据类型**:`*/*`
|
|
|
|
|
|
**接口描述**:用户登录
|
|
@@ -168,9 +174,6 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
**请求参数**:
|
|
|
|
|
|
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-
|
|
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
|
|
| ------------------------ | -------- | -------- | -------- | ----------------- | ------ |
|
|
|
| user | user | body | true | User | User |
|
|
@@ -313,22 +316,9 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
|
|
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
|
|
|
|
|
-
|
|
|
**响应数据类型**:`*/*`
|
|
|
|
|
|
|
|
|
-**接口描述**:
|
|
|
-
|
|
|
-
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-
|
|
|
-暂无
|
|
|
-
|
|
|
-
|
|
|
**响应状态**:
|
|
|
|
|
|
|
|
@@ -374,12 +364,6 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
**响应数据类型**:`*/*`
|
|
|
|
|
|
|
|
|
-**接口描述**:
|
|
|
-
|
|
|
-
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-
|
|
|
**请求参数**:
|
|
|
|
|
|
|
|
@@ -433,13 +417,9 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
|
|
|
**请求数据类型**:`application/json`
|
|
|
|
|
|
-
|
|
|
**响应数据类型**:`*/*`
|
|
|
|
|
|
|
|
|
-**接口描述**:
|
|
|
-
|
|
|
-
|
|
|
**请求示例**:
|
|
|
|
|
|
|
|
@@ -458,9 +438,6 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
**请求参数**:
|
|
|
|
|
|
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-
|
|
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
|
|
| ------------------------ | -------- | -------- | -------- | -------------- | ------- |
|
|
|
| userDTO | userDTO | body | true | UserDTO | UserDTO |
|
|
@@ -518,9 +495,6 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
**响应数据类型**:`*/*`
|
|
|
|
|
|
|
|
|
-**接口描述**:
|
|
|
-
|
|
|
-
|
|
|
**请求示例**:
|
|
|
|
|
|
|
|
@@ -539,9 +513,6 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
**请求参数**:
|
|
|
|
|
|
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-
|
|
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
|
|
| ------------------------ | -------- | -------- | -------- | -------------- | ------- |
|
|
|
| userDTO | userDTO | body | true | UserDTO | UserDTO |
|
|
@@ -595,16 +566,9 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
|
|
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
|
|
|
|
|
-
|
|
|
**响应数据类型**:`*/*`
|
|
|
|
|
|
|
|
|
-**接口描述**:
|
|
|
-
|
|
|
-
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-
|
|
|
**请求参数**:
|
|
|
|
|
|
|
|
@@ -654,16 +618,9 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
|
|
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
|
|
|
|
|
-
|
|
|
**响应数据类型**:`*/*`
|
|
|
|
|
|
|
|
|
-**接口描述**:
|
|
|
-
|
|
|
-
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-
|
|
|
**请求参数**:
|
|
|
|
|
|
|
|
@@ -721,16 +678,9 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
|
|
|
**请求数据类型**:`multipart/form-data`
|
|
|
|
|
|
-
|
|
|
**响应数据类型**:`*/*`
|
|
|
|
|
|
|
|
|
-**接口描述**:
|
|
|
-
|
|
|
-
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-
|
|
|
**请求参数**:
|
|
|
|
|
|
|
|
@@ -785,16 +735,9 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
|
|
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
|
|
|
|
|
-
|
|
|
**响应数据类型**:`*/*`
|
|
|
|
|
|
|
|
|
-**接口描述**:
|
|
|
-
|
|
|
-
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-
|
|
|
**请求参数**:
|
|
|
|
|
|
|
|
@@ -843,16 +786,9 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
|
|
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
|
|
|
|
|
-
|
|
|
**响应数据类型**:`*/*`
|
|
|
|
|
|
|
|
|
-**接口描述**:
|
|
|
-
|
|
|
-
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-
|
|
|
**请求参数**:
|
|
|
|
|
|
|
|
@@ -908,9 +844,6 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
**响应数据类型**:`*/*`
|
|
|
|
|
|
|
|
|
-**接口描述**:
|
|
|
-
|
|
|
-
|
|
|
**请求示例**:
|
|
|
|
|
|
|
|
@@ -936,9 +869,6 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
**请求参数**:
|
|
|
|
|
|
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-
|
|
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
|
|
| ------------------------------ | -------- | -------- | -------- | ----------------- | ------ |
|
|
|
| chart | chart | body | true | Chart | Chart |
|
|
@@ -1003,9 +933,6 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
**响应数据类型**:`*/*`
|
|
|
|
|
|
|
|
|
-**接口描述**:
|
|
|
-
|
|
|
-
|
|
|
**请求示例**:
|
|
|
|
|
|
|
|
@@ -1031,9 +958,6 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
**请求参数**:
|
|
|
|
|
|
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-
|
|
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
|
|
| ------------------------------ | -------- | -------- | -------- | ----------------- | ------ |
|
|
|
| chart | chart | body | true | Chart | Chart |
|
|
@@ -1093,16 +1017,9 @@ CREATE TABLE if NOT EXISTS `chart` (
|
|
|
|
|
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
|
|
|
|
|
-
|
|
|
**响应数据类型**:`*/*`
|
|
|
|
|
|
|
|
|
-**接口描述**:
|
|
|
-
|
|
|
-
|
|
|
-**请求参数**:
|
|
|
-
|
|
|
-
|
|
|
**请求参数**:
|
|
|
|
|
|
|
|
@@ -1220,8 +1137,6 @@ Spring Security和JWT结合使用的用户登录实现。
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-
|
|
|
-
|
|
|
##### 用户注册(Register)
|
|
|
|
|
|
- **接口**:`POST /user/register`
|
|
@@ -2052,9 +1967,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
|
|
</script>
|
|
|
```
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
|
|
|
##### 用户列表页面
|
|
|
|
|
@@ -2102,7 +2014,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
|
|
</el-table>
|
|
|
```
|
|
|
|
|
|
-
|
|
|
- 新增、编辑、删除按钮。
|
|
|
|
|
|
- ```vue
|
|
@@ -2158,7 +2069,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
|
|
</el-row>
|
|
|
```
|
|
|
|
|
|
-
|
|
|
- 用户条件搜索,用户角色筛选。
|
|
|
|
|
|
- ```vue
|
|
@@ -2245,7 +2155,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
|
|
</el-dialog>
|
|
|
```
|
|
|
|
|
|
-
|
|
|
- 保存和取消按钮。
|
|
|
|
|
|
##### 完整页面代码
|
|
@@ -2706,12 +2615,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
|
|
10. **保存最终图表状态**:
|
|
|
- 将更新后的图表实体保存到数据库。
|
|
|
11. **返回结果**:
|
|
|
- - 将图表实体转换为`ChartVO`对象,以便将生成的图表数据和结论返回给前端。
|
|
|
-
|
|
|
-
|
|
|
+ - 将图表实体转换为`ChartVO`对象,以便将生成的图表数据和结论返回给前端
|
|
|
|
|
|
|
|
|
-
|
|
|
- ```java
|
|
|
@Override
|
|
|
public ChartVO generateChartByAI(ChartDTO chartDTO, MultipartFile file) {
|
|
@@ -2774,17 +2680,17 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
|
|
return chartVO;
|
|
|
}
|
|
|
```
|
|
|
-
|
|
|
+
|
|
|
|
|
|
-
|
|
|
+
|
|
|
- **异步**
|
|
|
-
|
|
|
+
|
|
|
- ![image-20241215212251850](http://tuchuang.anyi.space/imgs/image-20241215212251850.png)
|
|
|
-
|
|
|
+
|
|
|
- 创建线程池
|
|
|
-
|
|
|
+
|
|
|
- 这个配置类定义了一个自定义的线程池,包括核心线程数、最大线程数、工作队列、线程工厂和拒绝策略。这个线程池可以被应用程序中的其他组件使用,以异步执行任务
|
|
|
-
|
|
|
+
|
|
|
- 线程池参数配置:
|
|
|
- `corePoolSize`:核心线程池的大小为1,表示线程池中始终保持的线程数量。
|
|
|
- `maximumPoolSize`:最大线程池的大小为2,表示线程池中允许的最大线程数量。
|
|
@@ -2792,7 +2698,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
|
|
- `unit`:时间单位设置为秒。
|
|
|
- `workQueue`:工作队列使用`ArrayBlockingQueue`,容量为5,用于存放待执行任务。
|
|
|
- `threadFactory`:线程工厂,用于创建新线程。这里没有自定义线程名称或其他属性,直接使用默认的线程创建方式。
|
|
|
-
|
|
|
+
|
|
|
- ```java
|
|
|
package space.anyi.BI.config;
|
|
|
|
|
@@ -2845,11 +2751,11 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
|
|
}
|
|
|
|
|
|
```
|
|
|
-
|
|
|
+
|
|
|
- 使用线程池进行异步优化
|
|
|
-
|
|
|
+
|
|
|
- 实现了异步生成图表的流程,包括读取和验证上传的数据、保存初始图表状态、使用线程池异步执行AI请求、解析响应、数据可视化处理和更新数据库。通过异步处理,可以提高应用的性能,避免在生成图表时阻塞主线程。
|
|
|
-
|
|
|
+
|
|
|
1. `public long generateChartByAIAsyn(ChartDTO chartDTO, MultipartFile file)`:这是一个公共方法,返回类型是`long`,参数包括一个`ChartDTO`对象和一个`MultipartFile`对象,用于生成图表的异步操作。
|
|
|
2. 初始化图表实体:
|
|
|
- 使用`BeanCopyUtil.copyBean`方法将`ChartDTO`对象的属性复制到一个新的`Chart`实体对象中。
|
|
@@ -2874,7 +2780,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
|
|
- 更新图表状态为“成功”并保存。
|
|
|
8. 返回结果:
|
|
|
- 返回生成的图表ID
|
|
|
-
|
|
|
+
|
|
|
- ```java
|
|
|
@Override
|
|
|
public long generateChartByAIAsyn(ChartDTO chartDTO, MultipartFile file) {
|
|
@@ -2940,9 +2846,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
|
|
return chartId;
|
|
|
}
|
|
|
```
|
|
|
-
|
|
|
+
|
|
|
|
|
|
-
|
|
|
+
|
|
|
- **限流**:使用Redisson实现令牌桶算法,通过RRateLimiterHandler进行接口限流。
|
|
|
|
|
|
- 这个服务类提供了一个简单的限流功能,通过Redisson客户端实现。它允许开发者为特定的请求设置一个限流器,并且根据设定的速率来控制请求的通过。
|
|
@@ -3582,5 +3488,3 @@ export default {
|
|
|
|
|
|
```
|
|
|
|
|
|
-
|
|
|
-
|