更新文档
This commit is contained in:
parent
f27058ce7a
commit
ecfaff9c2a
140
README.md
140
README.md
@ -2,57 +2,47 @@
|
|||||||
|
|
||||||
## 项目技术栈
|
## 项目技术栈
|
||||||
|
|
||||||
### 主流框架 & 特性
|
### 后端
|
||||||
|
|
||||||
- Spring Boot 2.7.x(贼新)
|
- SpringBoot
|
||||||
- Spring MVC
|
- MySQL
|
||||||
- MyBatis + MyBatis Plus 数据访问(开启分页)
|
- Redis
|
||||||
- Spring Boot 调试工具和项目处理器
|
- MyBatis + MyBatis Plus 数据访问框架
|
||||||
- Spring AOP 切面编程
|
- 消息队列(RabbitMQ)
|
||||||
- Spring Scheduler 定时任务
|
- 限流(实现了分别基于Guava和Redisson的单机和分布式两种限流)
|
||||||
- Spring 事务注解
|
- AI能力 (Open AI接口 / **[鱼聪明AI SDK](https://www.yucongming.com/dev)** )
|
||||||
|
- Easy Excel
|
||||||
### 数据存储
|
|
||||||
|
|
||||||
- MySQL 数据库
|
|
||||||
- Redis 内存数据库
|
|
||||||
- Elasticsearch 搜索引擎
|
|
||||||
- 腾讯云 COS 对象存储
|
|
||||||
|
|
||||||
### 工具类
|
|
||||||
|
|
||||||
- Easy Excel 表格处理
|
|
||||||
- Hutool 工具库
|
|
||||||
- Gson 解析库
|
|
||||||
- Apache Commons Lang3 工具类
|
|
||||||
- Lombok 注解
|
|
||||||
|
|
||||||
### 业务特性
|
|
||||||
|
|
||||||
- Spring Session Redis 分布式登录
|
|
||||||
- 全局请求响应拦截器(记录日志)
|
|
||||||
- 全局异常处理器
|
|
||||||
- 自定义错误码
|
|
||||||
- 封装通用响应类
|
|
||||||
- Swagger + Knife4j 接口文档
|
- Swagger + Knife4j 接口文档
|
||||||
- 自定义权限注解 + 全局校验
|
- Hutool 工具库
|
||||||
- 全局跨域处理
|
|
||||||
- 长整数丢失精度解决
|
|
||||||
- 多环境配置
|
|
||||||
|
|
||||||
|
### 前端
|
||||||
|
|
||||||
|
- React
|
||||||
|
- Umi + Ant Design Pro
|
||||||
|
- 可视化开发库 (Echarts)
|
||||||
|
- Umi openapi 代码生成
|
||||||
|
|
||||||
## 业务功能
|
## 业务功能
|
||||||
|
用户(数据分析者)只需要导入最原始的数据集(excel文件),输入想要进行分析的目标(比如帮我分
|
||||||
|
析一下网站的增长趋势),就能利用AI自动生成一个符合要求的图表以及结论。
|
||||||
|
|
||||||
### 架构设计
|

|
||||||
|
|
||||||
|
保留了同步和异步两种方式
|
||||||
|
|
||||||
- 合理分层
|
- **同步**: 用户需要等待AI生成结果
|
||||||
|
- **异步**: 上传后即时返回提示,告知用户“您的数据正在分析,请稍后在我的图表页面查看”,提升用户体验
|
||||||
|
|
||||||
|
### 流程架构设计
|
||||||
|
|
||||||
## 快速上手
|
- 同步
|
||||||
|

|
||||||
|
- 异步
|
||||||
|

|
||||||
|
|
||||||
> 所有需要修改的地方都标记了 `todo`,便于大家找到修改的位置~
|
## 本地运行
|
||||||
|
### [后端](https://gitee.com/anscoder/answerBi-backend)
|
||||||
### MySQL 数据库
|
#### MySQL 数据库
|
||||||
|
|
||||||
1)修改 `application.yml` 的数据库配置为你自己的:
|
1)修改 `application.yml` 的数据库配置为你自己的:
|
||||||
|
|
||||||
@ -67,9 +57,7 @@ spring:
|
|||||||
|
|
||||||
2)执行 `sql/create_table.sql` 中的数据库语句,自动创建库表
|
2)执行 `sql/create_table.sql` 中的数据库语句,自动创建库表
|
||||||
|
|
||||||
3)启动项目,访问 `http://localhost:8101/api/doc.html` 即可打开接口文档,不需要写前端就能在线调试接口了~
|
#### Redis
|
||||||
|
|
||||||
### Redis 分布式登录
|
|
||||||
|
|
||||||
1)修改 `application.yml` 的 Redis 配置为你自己的:
|
1)修改 `application.yml` 的 Redis 配置为你自己的:
|
||||||
|
|
||||||
@ -83,15 +71,7 @@ spring:
|
|||||||
password: 123456
|
password: 123456
|
||||||
```
|
```
|
||||||
|
|
||||||
2)修改 `application.yml` 中的 session 存储方式:
|
2)移除 `MainApplication` 类开头 `@SpringBootApplication` 注解内的 exclude 参数:
|
||||||
|
|
||||||
```yml
|
|
||||||
spring:
|
|
||||||
session:
|
|
||||||
store-type: redis
|
|
||||||
```
|
|
||||||
|
|
||||||
3)移除 `MainApplication` 类开头 `@SpringBootApplication` 注解内的 exclude 参数:
|
|
||||||
|
|
||||||
修改前:
|
修改前:
|
||||||
|
|
||||||
@ -105,35 +85,41 @@ spring:
|
|||||||
```java
|
```java
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
```
|
```
|
||||||
|
#### RabbitMq
|
||||||
### Elasticsearch 搜索引擎
|
1)修改 `application.yml` 的 RabbitMq 配置为你自己的
|
||||||
|
|
||||||
1)修改 `application.yml` 的 Elasticsearch 配置为你自己的:
|
|
||||||
|
|
||||||
```yml
|
```yml
|
||||||
spring:
|
spring:
|
||||||
elasticsearch:
|
rabbitmq:
|
||||||
uris: http://localhost:9200
|
host: localhost
|
||||||
username: root
|
port: 5672
|
||||||
password: 123456
|
username: guest
|
||||||
|
password: guest
|
||||||
```
|
```
|
||||||
|
|
||||||
2)复制 `sql/post_es_mapping.json` 文件中的内容,通过调用 Elasticsearch 的接口或者 Kibana Dev Tools 来创建索引(相当于数据库建表)
|
配置完成启动项目,访问 `http://localhost:8101/api/doc.html` 即可打开接口文档
|
||||||
|
|
||||||
|
### [前端](https://gitee.com/anscoder/answer-bi-frontend)
|
||||||
|
1)执行 npm install 或 yarn 安装依赖
|
||||||
|
```shell
|
||||||
|
npm install
|
||||||
```
|
```
|
||||||
PUT post_v1
|
或者
|
||||||
{
|
```shell
|
||||||
参数见 sql/post_es_mapping.json 文件
|
yarn
|
||||||
}
|
```
|
||||||
|
2)运行项目
|
||||||
|
```shell
|
||||||
|
yarn run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
这步不会操作的话需要补充下 Elasticsearch 的知识,或者自行百度一下~
|
## 后续计划
|
||||||
|
- [x] 使用死信队列处理异常情况,将图表生成任务置为失败
|
||||||
3)开启同步任务,将数据库的帖子同步到 Elasticsearch
|
- [x] 引入Guava RateLimiter(单机) 和 Redisson RateLimiter(分布式) 两种限流机制
|
||||||
|
- [x] 支持用户对失败的图表进行手动重试
|
||||||
找到 job 目录下的 `FullSyncPostToEs` 和 `IncSyncPostToEs` 文件,取消掉 `@Component` 注解的注释,再次执行程序即可触发同步:
|
- [ ] 图表数据分表存储,提高查询灵活性和性能
|
||||||
|
- [ ] 引入redis缓存提高加载速度
|
||||||
```java
|
- [ ] 给任务执行增加 guava Retrying重试机制,保证系统可靠性
|
||||||
// todo 取消注释开启任务
|
- [ ] 定时任务把失败状态的图表放到队列中(补偿机制)
|
||||||
//@Component
|
- [ ] 给任务的执行增加超时时间,超时自动标记为失败(超时控制)
|
||||||
```
|
- [ ] 任务执行结果通过websocket实时通知给用户
|
||||||
|
- [ ] 我的图表管理页增加一个刷新、定时刷新的按钮,保证获取到图表的最新状态(前端轮询)
|
||||||
BIN
doc/asyncSiteStructure.png
Normal file
BIN
doc/asyncSiteStructure.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
BIN
doc/baseSiteStructure.png
Normal file
BIN
doc/baseSiteStructure.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
BIN
doc/function.png
Normal file
BIN
doc/function.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 70 KiB |
@ -12,7 +12,6 @@ import org.redisson.api.RateType;
|
|||||||
import org.redisson.api.RedissonClient;
|
import org.redisson.api.RedissonClient;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import top.peng.answerbi.common.ErrorCode;
|
import top.peng.answerbi.common.ErrorCode;
|
||||||
import top.peng.answerbi.config.RedissonConfig;
|
|
||||||
import top.peng.answerbi.exception.ThrowUtils;
|
import top.peng.answerbi.exception.ThrowUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -15,7 +15,6 @@ spring:
|
|||||||
# 30 天过期
|
# 30 天过期
|
||||||
timeout: 2592000
|
timeout: 2592000
|
||||||
# 数据库配置
|
# 数据库配置
|
||||||
# todo 需替换配置
|
|
||||||
datasource:
|
datasource:
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
url: jdbc:mysql://localhost:3306/my_db
|
url: jdbc:mysql://localhost:3306/my_db
|
||||||
@ -28,22 +27,17 @@ spring:
|
|||||||
port: 6379
|
port: 6379
|
||||||
timeout: 5000
|
timeout: 5000
|
||||||
password: 123456
|
password: 123456
|
||||||
# Elasticsearch 配置
|
# rabbitMq 配置
|
||||||
# todo 需替换配置,然后取消注释
|
|
||||||
# elasticsearch:
|
|
||||||
# uris: http://localhost:9200
|
|
||||||
# username: root
|
|
||||||
# password: 123456
|
|
||||||
# 文件上传
|
|
||||||
servlet:
|
|
||||||
multipart:
|
|
||||||
# 大小限制
|
|
||||||
max-file-size: 10MB
|
|
||||||
rabbitmq:
|
rabbitmq:
|
||||||
host: localhost
|
host: localhost
|
||||||
port: 5672
|
port: 5672
|
||||||
username: guest
|
username: guest
|
||||||
password: guest
|
password: guest
|
||||||
|
# 文件上传
|
||||||
|
servlet:
|
||||||
|
multipart:
|
||||||
|
# 大小限制
|
||||||
|
max-file-size: 10MB
|
||||||
server:
|
server:
|
||||||
address: 0.0.0.0
|
address: 0.0.0.0
|
||||||
port: 8101
|
port: 8101
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user