# Aitori BI V2 Aitori 后台管理服务,基于 Spring Boot 3.5.5 + Java 21 构建,提供用户管理、AI 订单、相册、风格模版、积分体系、订阅配置等业务的后端 API,并通过 Redis Pub/Sub 监听工作流任务回调,实现异步结果处理。 ## 技术栈 | 类别 | 技术 | |------|------| | 语言 / 框架 | Java 21 / Spring Boot 3.5.5 | | ORM | MyBatis-Plus 3.5.12 | | 认证 | Sa-Token 1.44.0 | | 数据库 | MySQL | | 缓存 / 消息 | Redis(Lettuce 连接池 + Pub/Sub) | | API 文档 | Knife4j 4.5.0 + SpringDoc OpenAPI 2.8.9 | | HTTP 客户端 | Forest 1.8.0 | | 分布式锁 | ShedLock 7.3.0 | | 对象存储 | Google Cloud Storage | | 视频处理 | FFmpeg(运行时依赖) | | 监控 | Micrometer + Prometheus | | 并发模型 | Java 21 虚拟线程 | ## 项目结构 ``` com.aitori ├── annotation/ # 自定义注解(日志、响应包装控制) ├── aop/log/ # AOP 操作日志切面 ├── client/ # 外部 HTTP 客户端接口 ├── config/ # 配置类(Redis、MyBatis-Plus、Knife4j、虚拟线程等) ├── constants/ # 常量定义 ├── controller/ # REST API 控制器 ├── dto/ # 统一响应包装 R ├── entity/ # 实体、VO、Request 对象 ├── exception/ # 全局异常处理 ├── listener/ # Redis 消息监听器 ├── mapper/ # MyBatis-Plus Mapper 接口与 XML ├── service/ # 业务逻辑接口与实现 └── utils/ # 工具类(Google Storage、JWT、视频缩略图) ``` ## API 模块 | 模块 | 路径前缀 | 说明 | |------|----------|------| | 登录 | `/v2/admin/login` | 验证码、登录认证 | | Dashboard | `/v2/dashboard` | 数据总览、趋势、任务概览 | | 用户管理 | `/v2/user` | 用户列表、状态管理 | | 用户反馈 | `/v2/user/feedback` | 反馈列表 | | 用户消息 | `/v2/user/message` | 消息列表 | | 用户问卷 | `/v2/user/survey` | 问卷列表 | | 邀请记录 | `/v2/user/invite` | 邀请记录 | | 兑换记录 | `/v2/user/redemption/record` | 兑换记录 | | 积分流水 | `/v2/user/points/record` | 积分流水查询 | | 积分订单 | `/v2/user/points/order` | 积分订单 | | 订阅订单 | `/v2/user/subscribe/order` | 订阅订单 | | 订单 V2 | `/v2/ai/order/v2` | AI 订单管理 | | 相册 | `/v2/ai/album` | 相册管理 | | 订阅配置 | `/v2/ai/subscribe` | 订阅套餐 CRUD | | 模块管理 | `/v2/module` | 模块 CRUD + 排序 | | 标签管理 | `/v2/tag` | 标签 CRUD | | 风格管理 | `/v2/style` | 风格模版 CRUD | | 积分来源配置 | `/v2/points/config` | 积分来源 CRUD | | 积分产品 | `/v2/points/product` | 积分产品 CRUD | | 兑换码 | `/v2/redemption/code` | 兑换码 CRUD + 批量生成 | | 订阅广告 | `/v2/subscribe/action` | 订阅广告 CRUD | | 问卷 | `/v2/survey` | 问卷列表 | | 文件上传 | `/google/upload/img` | 上传至 Google Cloud Storage | ## 环境变量 | 变量名 | 必填 | 默认值 | 说明 | |--------|------|--------|------| | `ACTIVE_ENV` | 否 | `dev` | Spring Profile | | `MYSQL_HOST` | 否 | `127.0.0.1` | MySQL 地址 | | `MYSQL_PROT` | 否 | `3306` | MySQL 端口 | | `MYSQL_DATABASE` | 否 | `aitori` | 数据库名 | | `MYSQL_USERNAME` | 否 | `root` | 数据库用户 | | `MYSQL_PASSWORD` | 是 | - | 数据库密码 | | `REDIS_HOST` | 否 | `127.0.0.1` | Redis 地址 | | `REDIS_PORT` | 否 | `6379` | Redis 端口 | | `REDIS_PASSWORD` | 是 | - | Redis 密码 | | `KNIFE4J_PASSWORD` | 否 | `Goodsense1` | API 文档访问密码 | ## 本地开发 ### 前置依赖 - JDK 21+ - Maven 3.9+ - MySQL 8.x - Redis 7.x - FFmpeg(用于视频缩略图生成) ### 启动 ```bash # 编译打包 mvn clean package -DskipTests # 运行 java -jar target/aitori-bi-v2-1.2.1.jar ``` 服务启动后: - 应用端口:`9901` - 管理端口:`8090`(Actuator / Prometheus) - API 文档:`http://localhost:8080/doc.html` ## Docker 部署 ```bash # 构建镜像 docker build -t aitori-bi-v2 . # 运行容器 docker run -d \ -p 8080:8080 \ -p 8090:8090 \ -e MYSQL_HOST=your-mysql-host \ -e MYSQL_PASSWORD=your-password \ -e REDIS_HOST=your-redis-host \ -e REDIS_PASSWORD=your-redis-password \ aitori-bi-v2 ``` ## API 文档 详细接口文档位于 `doc/` 目录下,按模块拆分: - `LOGIN_API.md` - 登录认证 - `USER_API.md` - 用户管理 - `AI_ORDER_V2_API.md` - AI 订单 V2 - `AI_ALBUM_API.md` - 相册管理 - `STYLE_API.md` - 风格管理 - `MODULE_API.md` - 模块管理 - `TAG_API.md` - 标签管理 - 更多文档请参阅 `doc/` 目录