chore: update project files
This commit is contained in:
269
demo/database_baota_deploy/README.md
Normal file
269
demo/database_baota_deploy/README.md
Normal file
@@ -0,0 +1,269 @@
|
||||
# AIGC平台 - 宝塔数据库部署包
|
||||
|
||||
## 📦 部署包内容
|
||||
|
||||
```
|
||||
database_baota_deploy/
|
||||
├── init_database.sql # 完整数据库初始化脚本(推荐)
|
||||
├── update_admin_user.sql # 管理员权限设置脚本
|
||||
├── 数据库完整结构-宝塔导入.sql # 备用完整结构
|
||||
├── 宝塔数据库部署指南.md # 详细部署文档
|
||||
├── deploy_database.sh # Linux自动部署脚本
|
||||
└── README.md # 本文件
|
||||
```
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 方法一:使用宝塔面板(推荐,适合新手)
|
||||
|
||||
1. **阅读部署指南**
|
||||
```
|
||||
打开 "宝塔数据库部署指南.md" 查看详细步骤
|
||||
```
|
||||
|
||||
2. **创建数据库**
|
||||
- 登录宝塔面板
|
||||
- 数据库 → 添加数据库
|
||||
- 数据库名: `aigc_platform`
|
||||
- 字符集: `utf8mb4`
|
||||
|
||||
3. **导入SQL文件**
|
||||
- 点击数据库的【管理】进入phpMyAdmin
|
||||
- 导入 → 选择文件 → 选择 `init_database.sql`
|
||||
- 执行导入
|
||||
|
||||
4. **配置应用**
|
||||
- 将数据库信息填入 `application-prod.properties`
|
||||
|
||||
### 方法二:使用自动脚本(适合Linux命令行用户)
|
||||
|
||||
```bash
|
||||
# 1. 上传整个部署包到服务器
|
||||
scp -r database_baota_deploy root@your-server:/root/
|
||||
|
||||
# 2. SSH登录服务器
|
||||
ssh root@your-server
|
||||
|
||||
# 3. 进入部署目录
|
||||
cd /root/database_baota_deploy
|
||||
|
||||
# 4. 给脚本执行权限
|
||||
chmod +x deploy_database.sh
|
||||
|
||||
# 5. 运行自动部署脚本
|
||||
bash deploy_database.sh
|
||||
|
||||
# 6. 按提示输入MySQL root密码和新数据库密码
|
||||
# 7. 等待部署完成,保存输出的数据库配置信息
|
||||
```
|
||||
|
||||
### 方法三:手动命令行部署
|
||||
|
||||
```bash
|
||||
# 1. 登录MySQL
|
||||
mysql -uroot -p
|
||||
|
||||
# 2. 创建数据库
|
||||
CREATE DATABASE aigc_platform DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
# 3. 创建用户
|
||||
CREATE USER 'aigc_platform'@'localhost' IDENTIFIED BY '你的密码';
|
||||
GRANT ALL PRIVILEGES ON aigc_platform.* TO 'aigc_platform'@'localhost';
|
||||
FLUSH PRIVILEGES;
|
||||
EXIT;
|
||||
|
||||
# 4. 导入数据库
|
||||
mysql -uaigc_platform -p aigc_platform < init_database.sql
|
||||
|
||||
# 5. 验证
|
||||
mysql -uaigc_platform -p
|
||||
USE aigc_platform;
|
||||
SHOW TABLES;
|
||||
```
|
||||
|
||||
## 📋 数据库表清单
|
||||
|
||||
部署成功后应包含以下13个表:
|
||||
|
||||
| 表名 | 说明 |
|
||||
|------|------|
|
||||
| `users` | 用户表 |
|
||||
| `payments` | 支付记录表 |
|
||||
| `orders` | 订单表 |
|
||||
| `order_items` | 订单明细表 |
|
||||
| `text_to_video_tasks` | 文生视频任务表 |
|
||||
| `image_to_video_tasks` | 图生视频任务表 |
|
||||
| `storyboard_video_tasks` | 分镜视频任务表 |
|
||||
| `task_queue` | 任务队列表 |
|
||||
| `task_status` | 任务状态表 |
|
||||
| `user_works` | 用户作品表 |
|
||||
| `user_membership` | 用户会员表 |
|
||||
| `user_activity_stats` | 用户活动统计表 |
|
||||
| `failed_tasks_cleanup_log` | 失败任务清理日志表 |
|
||||
|
||||
## ⚙️ 应用配置
|
||||
|
||||
### Spring Boot 配置文件
|
||||
|
||||
**文件**: `src/main/resources/application-prod.properties`
|
||||
|
||||
```properties
|
||||
# 数据库配置
|
||||
spring.datasource.url=jdbc:mysql://localhost:3306/aigc_platform?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
|
||||
spring.datasource.username=aigc_platform
|
||||
spring.datasource.password=你的数据库密码
|
||||
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
||||
|
||||
# 数据库连接池配置
|
||||
spring.datasource.hikari.maximum-pool-size=50
|
||||
spring.datasource.hikari.minimum-idle=10
|
||||
spring.datasource.hikari.idle-timeout=300000
|
||||
spring.datasource.hikari.max-lifetime=1200000
|
||||
spring.datasource.hikari.connection-timeout=30000
|
||||
|
||||
# JPA配置
|
||||
spring.jpa.hibernate.ddl-auto=update
|
||||
spring.jpa.show-sql=false
|
||||
```
|
||||
|
||||
### 宝塔反向代理配置(可选)
|
||||
|
||||
如果使用宝塔的Nginx反向代理:
|
||||
|
||||
```nginx
|
||||
location / {
|
||||
proxy_pass http://localhost:8080;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
```
|
||||
|
||||
## 🔐 管理员账号
|
||||
|
||||
### 默认管理员邮箱
|
||||
|
||||
```
|
||||
984523799@qq.com
|
||||
```
|
||||
|
||||
### 设置流程
|
||||
|
||||
1. **首次注册**
|
||||
- 使用 `984523799@qq.com` 在前端注册账号
|
||||
- 数据库会自动将此用户设置为管理员
|
||||
|
||||
2. **手动设置**
|
||||
- 如果自动设置未生效,执行 `update_admin_user.sql`
|
||||
|
||||
3. **验证权限**
|
||||
```sql
|
||||
SELECT id, username, email, role, points
|
||||
FROM users
|
||||
WHERE email = '984523799@qq.com';
|
||||
```
|
||||
- `role` 字段应为 `ROLE_ADMIN`
|
||||
|
||||
## 🛠️ 故障排查
|
||||
|
||||
### 导入失败
|
||||
|
||||
**问题**: 导入SQL时报错
|
||||
|
||||
**解决**:
|
||||
1. 确保数据库字符集为 `utf8mb4`
|
||||
2. 检查SQL文件编码为 UTF-8
|
||||
3. 尝试分段导入或使用命令行导入
|
||||
|
||||
### 连接失败
|
||||
|
||||
**问题**: 应用无法连接数据库
|
||||
|
||||
**检查项**:
|
||||
1. MySQL服务是否运行: `systemctl status mysql`
|
||||
2. 用户名密码是否正确
|
||||
3. 数据库名称是否正确
|
||||
4. 防火墙是否开放3306端口(如需远程连接)
|
||||
5. MySQL是否允许远程连接(`bind-address`配置)
|
||||
|
||||
### 权限问题
|
||||
|
||||
**问题**: Access denied
|
||||
|
||||
**解决**:
|
||||
```sql
|
||||
-- 重新授权
|
||||
GRANT ALL PRIVILEGES ON aigc_platform.* TO 'aigc_platform'@'localhost';
|
||||
GRANT ALL PRIVILEGES ON aigc_platform.* TO 'aigc_platform'@'%';
|
||||
FLUSH PRIVILEGES;
|
||||
```
|
||||
|
||||
## 📊 数据库维护
|
||||
|
||||
### 定期备份
|
||||
|
||||
**宝塔面板**:
|
||||
- 计划任务 → 添加任务
|
||||
- 任务类型: 备份数据库
|
||||
- 执行周期: 每天凌晨3点
|
||||
- 保留份数: 7-30份
|
||||
|
||||
**命令行备份**:
|
||||
```bash
|
||||
# 手动备份
|
||||
mysqldump -uaigc_platform -p aigc_platform > backup_$(date +%Y%m%d_%H%M%S).sql
|
||||
|
||||
# 定时备份(添加到crontab)
|
||||
0 3 * * * mysqldump -uaigc_platform -p'密码' aigc_platform > /backup/aigc_$(date +\%Y\%m\%d).sql
|
||||
```
|
||||
|
||||
### 性能优化
|
||||
|
||||
```sql
|
||||
-- 查看表大小
|
||||
SELECT
|
||||
table_name,
|
||||
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)"
|
||||
FROM information_schema.TABLES
|
||||
WHERE table_schema = 'aigc_platform'
|
||||
ORDER BY (data_length + index_length) DESC;
|
||||
|
||||
-- 优化表
|
||||
OPTIMIZE TABLE users;
|
||||
OPTIMIZE TABLE text_to_video_tasks;
|
||||
OPTIMIZE TABLE image_to_video_tasks;
|
||||
```
|
||||
|
||||
## 📞 技术支持
|
||||
|
||||
遇到问题?
|
||||
|
||||
1. **查看日志**
|
||||
- 宝塔面板: 数据库 → 日志
|
||||
- 命令行: `/var/log/mysql/error.log`
|
||||
|
||||
2. **查看文档**
|
||||
- 详细部署指南: `宝塔数据库部署指南.md`
|
||||
|
||||
3. **验证数据库**
|
||||
```bash
|
||||
mysql -uaigc_platform -p -e "USE aigc_platform; SHOW TABLES;"
|
||||
```
|
||||
|
||||
## ✅ 部署检查清单
|
||||
|
||||
- [ ] MySQL服务正在运行
|
||||
- [ ] 数据库 `aigc_platform` 已创建
|
||||
- [ ] 字符集为 `utf8mb4`
|
||||
- [ ] 用户 `aigc_platform` 已创建并授权
|
||||
- [ ] 13个数据表已创建
|
||||
- [ ] 管理员邮箱 `984523799@qq.com` 已配置
|
||||
- [ ] 应用配置文件已更新数据库信息
|
||||
- [ ] 数据库备份计划已设置
|
||||
|
||||
---
|
||||
|
||||
**版本**: 1.0
|
||||
**更新日期**: 2025-11-10
|
||||
**适用系统**: 宝塔面板 / Linux / MySQL 8.0+
|
||||
141
demo/database_baota_deploy/deploy_database.sh
Normal file
141
demo/database_baota_deploy/deploy_database.sh
Normal file
@@ -0,0 +1,141 @@
|
||||
#!/bin/bash
|
||||
# 宝塔数据库快速部署脚本
|
||||
# 使用方法:bash deploy_database.sh
|
||||
|
||||
echo "========================================"
|
||||
echo " AIGC平台 - 宝塔数据库部署脚本"
|
||||
echo "========================================"
|
||||
echo ""
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 数据库配置
|
||||
DB_NAME="aigc_platform"
|
||||
DB_USER="aigc_platform"
|
||||
DB_CHARSET="utf8mb4"
|
||||
DB_COLLATE="utf8mb4_unicode_ci"
|
||||
|
||||
# 检查是否为root用户
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo -e "${RED}请使用root权限运行此脚本${NC}"
|
||||
echo "使用方法: sudo bash deploy_database.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "步骤 1/5: 检查MySQL服务状态..."
|
||||
if systemctl is-active --quiet mysql || systemctl is-active --quiet mysqld || systemctl is-active --quiet mariadb; then
|
||||
echo -e "${GREEN}✓ MySQL服务正在运行${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ MySQL服务未运行${NC}"
|
||||
echo "正在启动MySQL服务..."
|
||||
systemctl start mysql || systemctl start mysqld || systemctl start mariadb
|
||||
sleep 2
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo "步骤 2/5: 输入MySQL root密码"
|
||||
read -sp "请输入MySQL root密码: " MYSQL_ROOT_PASSWORD
|
||||
echo ""
|
||||
echo ""
|
||||
|
||||
# 测试MySQL连接
|
||||
echo "测试MySQL连接..."
|
||||
mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "SELECT 1;" > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}✗ MySQL连接失败,请检查root密码${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}✓ MySQL连接成功${NC}"
|
||||
echo ""
|
||||
|
||||
echo "步骤 3/5: 创建数据库和用户"
|
||||
read -sp "请输入新数据库用户的密码(按回车使用随机密码): " DB_PASSWORD
|
||||
echo ""
|
||||
|
||||
if [ -z "$DB_PASSWORD" ]; then
|
||||
# 生成随机密码
|
||||
DB_PASSWORD=$(openssl rand -base64 16)
|
||||
echo -e "${YELLOW}已生成随机密码: $DB_PASSWORD${NC}"
|
||||
echo -e "${YELLOW}请务必保存此密码!${NC}"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 创建数据库
|
||||
mysql -uroot -p"$MYSQL_ROOT_PASSWORD" <<EOF
|
||||
-- 删除旧数据库(如果存在)
|
||||
DROP DATABASE IF EXISTS \`$DB_NAME\`;
|
||||
|
||||
-- 创建新数据库
|
||||
CREATE DATABASE \`$DB_NAME\` DEFAULT CHARACTER SET $DB_CHARSET COLLATE $DB_COLLATE;
|
||||
|
||||
-- 创建用户(如果不存在)
|
||||
CREATE USER IF NOT EXISTS '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASSWORD';
|
||||
CREATE USER IF NOT EXISTS '$DB_USER'@'%' IDENTIFIED BY '$DB_PASSWORD';
|
||||
|
||||
-- 授权
|
||||
GRANT ALL PRIVILEGES ON \`$DB_NAME\`.* TO '$DB_USER'@'localhost';
|
||||
GRANT ALL PRIVILEGES ON \`$DB_NAME\`.* TO '$DB_USER'@'%';
|
||||
|
||||
-- 刷新权限
|
||||
FLUSH PRIVILEGES;
|
||||
EOF
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✓ 数据库和用户创建成功${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ 数据库创建失败${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo "步骤 4/5: 导入数据库结构"
|
||||
if [ -f "init_database.sql" ]; then
|
||||
mysql -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" < init_database.sql
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✓ 数据库结构导入成功${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ 数据库结构导入失败${NC}"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}✗ 找不到 init_database.sql 文件${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo "步骤 5/5: 验证数据库"
|
||||
TABLE_COUNT=$(mysql -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" -sN -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '$DB_NAME';")
|
||||
echo "已创建 $TABLE_COUNT 个数据表"
|
||||
|
||||
if [ "$TABLE_COUNT" -ge 13 ]; then
|
||||
echo -e "${GREEN}✓ 数据库部署成功!${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ 表数量少于预期(预期13个,实际$TABLE_COUNT个)${NC}"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo "========================================"
|
||||
echo " 部署完成!"
|
||||
echo "========================================"
|
||||
echo ""
|
||||
echo "数据库信息:"
|
||||
echo "----------------------------------------"
|
||||
echo "数据库名: $DB_NAME"
|
||||
echo "用户名: $DB_USER"
|
||||
echo "密码: $DB_PASSWORD"
|
||||
echo "字符集: $DB_CHARSET"
|
||||
echo "排序规则: $DB_COLLATE"
|
||||
echo "----------------------------------------"
|
||||
echo ""
|
||||
echo "请将以下配置添加到 application-prod.properties:"
|
||||
echo ""
|
||||
echo "spring.datasource.url=jdbc:mysql://localhost:3306/$DB_NAME?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai"
|
||||
echo "spring.datasource.username=$DB_USER"
|
||||
echo "spring.datasource.password=$DB_PASSWORD"
|
||||
echo ""
|
||||
echo -e "${YELLOW}请务必保存数据库密码!${NC}"
|
||||
echo ""
|
||||
467
demo/database_baota_deploy/init_database.sql
Normal file
467
demo/database_baota_deploy/init_database.sql
Normal file
@@ -0,0 +1,467 @@
|
||||
-- ============================================
|
||||
-- 宝塔面板数据库初始化SQL文件
|
||||
-- 适用于MySQL/MariaDB数据库
|
||||
-- ============================================
|
||||
|
||||
-- 创建数据库(如果不存在,请根据实际情况修改数据库名)
|
||||
-- CREATE DATABASE IF NOT EXISTS `aigc_db` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
-- USE `aigc_db`;
|
||||
|
||||
-- ============================================
|
||||
-- 基础表结构
|
||||
-- ============================================
|
||||
|
||||
-- 用户表
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
username VARCHAR(50) NOT NULL UNIQUE,
|
||||
email VARCHAR(100) NOT NULL UNIQUE,
|
||||
password_hash VARCHAR(100) NOT NULL,
|
||||
role VARCHAR(30) NOT NULL DEFAULT 'ROLE_USER',
|
||||
points INT NOT NULL DEFAULT 50,
|
||||
frozen_points INT NOT NULL DEFAULT 0 COMMENT '冻结积分',
|
||||
phone VARCHAR(20),
|
||||
avatar TEXT COMMENT '头像URL',
|
||||
nickname VARCHAR(100),
|
||||
gender VARCHAR(10),
|
||||
birthday DATE,
|
||||
address TEXT,
|
||||
bio TEXT COMMENT '个人简介',
|
||||
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
last_login_at TIMESTAMP NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_username (username),
|
||||
INDEX idx_email (email),
|
||||
INDEX idx_role (role),
|
||||
INDEX idx_is_active (is_active),
|
||||
INDEX idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
||||
|
||||
-- 支付表
|
||||
CREATE TABLE IF NOT EXISTS payments (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
order_id VARCHAR(50) NOT NULL COMMENT '订单号(不唯一,一个订单可以有多次支付尝试)',
|
||||
amount DECIMAL(10,2) NOT NULL,
|
||||
currency VARCHAR(3) NOT NULL DEFAULT 'CNY',
|
||||
payment_method VARCHAR(20) NOT NULL,
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '支付状态:PENDING, PROCESSING, SUCCESS, FAILED, CANCELLED',
|
||||
description VARCHAR(500),
|
||||
external_transaction_id VARCHAR(100) COMMENT '外部交易号(支付宝交易号等)',
|
||||
callback_url VARCHAR(1000),
|
||||
return_url VARCHAR(1000),
|
||||
payment_url VARCHAR(2000) COMMENT '支付跳转URL',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
paid_at TIMESTAMP NULL,
|
||||
user_id BIGINT COMMENT '用户ID',
|
||||
order_id_ref BIGINT COMMENT '关联的订单ID(外键)',
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (order_id_ref) REFERENCES orders(id) ON DELETE SET NULL,
|
||||
INDEX idx_order_id (order_id),
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_payment_method (payment_method),
|
||||
INDEX idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付表';
|
||||
|
||||
-- 订单表
|
||||
CREATE TABLE IF NOT EXISTS orders (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
order_number VARCHAR(50) NOT NULL UNIQUE,
|
||||
total_amount DECIMAL(10,2) NOT NULL,
|
||||
currency VARCHAR(3) NOT NULL DEFAULT 'CNY',
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
|
||||
order_type VARCHAR(20) NOT NULL DEFAULT 'PRODUCT',
|
||||
description VARCHAR(500),
|
||||
notes TEXT,
|
||||
shipping_address TEXT,
|
||||
billing_address TEXT,
|
||||
contact_phone VARCHAR(20),
|
||||
contact_email VARCHAR(100),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
paid_at TIMESTAMP NULL,
|
||||
shipped_at TIMESTAMP NULL,
|
||||
delivered_at TIMESTAMP NULL,
|
||||
cancelled_at TIMESTAMP NULL,
|
||||
user_id BIGINT NOT NULL,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id),
|
||||
INDEX idx_order_number (order_number),
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表';
|
||||
|
||||
-- 订单项表
|
||||
CREATE TABLE IF NOT EXISTS order_items (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
product_name VARCHAR(100) NOT NULL,
|
||||
product_description VARCHAR(500),
|
||||
product_sku VARCHAR(200),
|
||||
unit_price DECIMAL(10,2) NOT NULL,
|
||||
quantity INT NOT NULL,
|
||||
subtotal DECIMAL(10,2) NOT NULL,
|
||||
product_image VARCHAR(100),
|
||||
order_id BIGINT NOT NULL,
|
||||
FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
|
||||
INDEX idx_order_id (order_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单项表';
|
||||
|
||||
-- 会员等级表
|
||||
CREATE TABLE IF NOT EXISTS membership_levels (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
name VARCHAR(50) NOT NULL UNIQUE COMMENT '等级名称(内部标识)',
|
||||
display_name VARCHAR(50) NOT NULL COMMENT '显示名称',
|
||||
description TEXT COMMENT '描述',
|
||||
price DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '价格(元)',
|
||||
duration_days INT NOT NULL DEFAULT 30 COMMENT '时长(天)',
|
||||
points_bonus INT NOT NULL DEFAULT 0 COMMENT '积分奖励',
|
||||
resource_points INT NOT NULL DEFAULT 0 COMMENT '资源点数量',
|
||||
features JSON COMMENT '功能特性(JSON格式)',
|
||||
is_active BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否启用',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
INDEX idx_name (name),
|
||||
INDEX idx_is_active (is_active)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员等级表';
|
||||
|
||||
-- 用户会员信息表
|
||||
CREATE TABLE IF NOT EXISTS user_memberships (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
user_id BIGINT NOT NULL,
|
||||
membership_level_id BIGINT NOT NULL,
|
||||
start_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
end_date TIMESTAMP NOT NULL,
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
|
||||
auto_renew BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (membership_level_id) REFERENCES membership_levels(id),
|
||||
UNIQUE KEY unique_active_membership (user_id, status),
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_end_date (end_date)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户会员信息表';
|
||||
|
||||
-- 视频生成任务表
|
||||
CREATE TABLE IF NOT EXISTS video_tasks (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
task_id VARCHAR(100) NOT NULL UNIQUE,
|
||||
user_id BIGINT NOT NULL,
|
||||
task_type VARCHAR(50) NOT NULL COMMENT 'TEXT_TO_VIDEO, IMAGE_TO_VIDEO, STORYBOARD_VIDEO',
|
||||
title VARCHAR(200) NOT NULL,
|
||||
description TEXT,
|
||||
input_text TEXT,
|
||||
input_image_url VARCHAR(500),
|
||||
output_video_url VARCHAR(500),
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING, PROCESSING, COMPLETED, FAILED',
|
||||
progress INT NOT NULL DEFAULT 0,
|
||||
error_message TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
completed_at TIMESTAMP NULL,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_task_id (task_id),
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='视频生成任务表';
|
||||
|
||||
-- 系统配置表
|
||||
CREATE TABLE IF NOT EXISTS system_configs (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
config_key VARCHAR(100) NOT NULL UNIQUE,
|
||||
config_value TEXT,
|
||||
description VARCHAR(500),
|
||||
config_type VARCHAR(50) NOT NULL DEFAULT 'STRING' COMMENT 'STRING, NUMBER, BOOLEAN, JSON',
|
||||
is_public BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_config_key (config_key)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置表';
|
||||
|
||||
-- 系统设置表(用于存储系统级别的设置)
|
||||
CREATE TABLE IF NOT EXISTS system_settings (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
standard_price_cny INT NOT NULL DEFAULT 0 COMMENT '标准版价格(元)',
|
||||
pro_price_cny INT NOT NULL DEFAULT 0 COMMENT '专业版价格(元)',
|
||||
points_per_generation INT NOT NULL DEFAULT 1 COMMENT '每次生成消耗的资源点',
|
||||
site_name VARCHAR(100) NOT NULL DEFAULT 'AIGC Demo' COMMENT '站点名称',
|
||||
site_subtitle VARCHAR(150) NOT NULL DEFAULT '现代化的Spring Boot应用演示' COMMENT '站点副标题',
|
||||
registration_open BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否开放注册',
|
||||
maintenance_mode BOOLEAN NOT NULL DEFAULT FALSE COMMENT '维护模式',
|
||||
enable_alipay BOOLEAN NOT NULL DEFAULT TRUE COMMENT '启用支付宝',
|
||||
enable_paypal BOOLEAN NOT NULL DEFAULT TRUE COMMENT '启用PayPal',
|
||||
contact_email VARCHAR(120) DEFAULT 'support@example.com' COMMENT '联系邮箱'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统设置表';
|
||||
|
||||
-- 用户活跃度统计表
|
||||
CREATE TABLE IF NOT EXISTS user_activity_stats (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '统计ID',
|
||||
activity_date DATE NOT NULL UNIQUE COMMENT '统计日期',
|
||||
daily_active_users INT NOT NULL DEFAULT 0 COMMENT '日活用户数',
|
||||
monthly_active_users INT NOT NULL DEFAULT 0 COMMENT '月活用户数',
|
||||
new_users INT NOT NULL DEFAULT 0 COMMENT '新增用户数',
|
||||
returning_users INT NOT NULL DEFAULT 0 COMMENT '回访用户数',
|
||||
session_count INT NOT NULL DEFAULT 0 COMMENT '会话数',
|
||||
avg_session_duration DECIMAL(10,2) DEFAULT 0 COMMENT '平均会话时长(分钟)',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
UNIQUE KEY uk_activity_date (activity_date),
|
||||
INDEX idx_activity_date (activity_date)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户活跃度统计表';
|
||||
|
||||
-- 文生视频任务表
|
||||
CREATE TABLE IF NOT EXISTS text_to_video_tasks (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '任务ID',
|
||||
task_id VARCHAR(50) NOT NULL UNIQUE COMMENT '任务唯一标识',
|
||||
username VARCHAR(100) NOT NULL COMMENT '用户名',
|
||||
prompt TEXT COMMENT '文本描述/提示词',
|
||||
aspect_ratio VARCHAR(10) NOT NULL DEFAULT '16:9' COMMENT '宽高比:16:9, 4:3, 1:1, 3:4, 9:16',
|
||||
duration INT NOT NULL DEFAULT 5 COMMENT '视频时长(秒):5, 10, 15, 30',
|
||||
hd_mode BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否高清模式',
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '任务状态:PENDING, PROCESSING, COMPLETED, FAILED, CANCELLED',
|
||||
progress INT NOT NULL DEFAULT 0 COMMENT '进度(0-100)',
|
||||
result_url TEXT COMMENT '结果视频URL',
|
||||
real_task_id VARCHAR(100) COMMENT '外部API返回的真实任务ID',
|
||||
error_message TEXT COMMENT '错误信息',
|
||||
cost_points INT NOT NULL DEFAULT 0 COMMENT '消耗积分',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
completed_at TIMESTAMP NULL COMMENT '完成时间',
|
||||
INDEX idx_username (username),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_created_at (created_at),
|
||||
INDEX idx_task_id (task_id),
|
||||
INDEX idx_real_task_id (real_task_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文生视频任务表';
|
||||
|
||||
-- 图生视频任务表
|
||||
CREATE TABLE IF NOT EXISTS image_to_video_tasks (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '任务ID',
|
||||
task_id VARCHAR(50) NOT NULL UNIQUE COMMENT '任务唯一标识',
|
||||
username VARCHAR(100) NOT NULL COMMENT '用户名',
|
||||
first_frame_url VARCHAR(500) NOT NULL COMMENT '首帧图片URL',
|
||||
last_frame_url VARCHAR(500) COMMENT '末帧图片URL',
|
||||
prompt TEXT COMMENT '文本描述/提示词',
|
||||
aspect_ratio VARCHAR(10) NOT NULL DEFAULT '16:9' COMMENT '宽高比:16:9, 4:3, 1:1, 3:4, 9:16',
|
||||
duration INT NOT NULL DEFAULT 5 COMMENT '视频时长(秒):5, 10, 15, 30',
|
||||
hd_mode BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否高清模式',
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '任务状态:PENDING, PROCESSING, COMPLETED, FAILED, CANCELLED',
|
||||
progress INT NOT NULL DEFAULT 0 COMMENT '进度(0-100)',
|
||||
result_url TEXT COMMENT '结果视频URL',
|
||||
real_task_id VARCHAR(100) COMMENT '外部API返回的真实任务ID',
|
||||
error_message TEXT COMMENT '错误信息',
|
||||
cost_points INT NOT NULL DEFAULT 0 COMMENT '消耗积分',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
completed_at TIMESTAMP NULL COMMENT '完成时间',
|
||||
INDEX idx_username (username),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_created_at (created_at),
|
||||
INDEX idx_task_id (task_id),
|
||||
INDEX idx_real_task_id (real_task_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='图生视频任务表';
|
||||
|
||||
-- ============================================
|
||||
-- 任务队列相关表
|
||||
-- ============================================
|
||||
|
||||
-- 任务队列表
|
||||
CREATE TABLE IF NOT EXISTS task_queue (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(100) NOT NULL COMMENT '用户名',
|
||||
task_id VARCHAR(50) NOT NULL UNIQUE COMMENT '任务ID',
|
||||
task_type ENUM('TEXT_TO_VIDEO', 'IMAGE_TO_VIDEO', 'STORYBOARD_VIDEO') NOT NULL COMMENT '任务类型',
|
||||
status ENUM('PENDING', 'PROCESSING', 'COMPLETED', 'FAILED', 'CANCELLED', 'TIMEOUT') NOT NULL DEFAULT 'PENDING' COMMENT '队列状态',
|
||||
priority INT NOT NULL DEFAULT 0 COMMENT '优先级,数字越小优先级越高',
|
||||
real_task_id VARCHAR(100) COMMENT '外部API返回的真实任务ID',
|
||||
last_check_time DATETIME COMMENT '最后一次检查时间',
|
||||
check_count INT NOT NULL DEFAULT 0 COMMENT '检查次数',
|
||||
max_check_count INT NOT NULL DEFAULT 30 COMMENT '最大检查次数(30次 * 2分钟 = 60分钟)',
|
||||
error_message TEXT COMMENT '错误信息',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
completed_at DATETIME COMMENT '完成时间',
|
||||
|
||||
INDEX idx_username_status (username, status),
|
||||
INDEX idx_status_priority (status, priority),
|
||||
INDEX idx_last_check_time (last_check_time),
|
||||
INDEX idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务队列表';
|
||||
|
||||
-- 积分冻结记录表
|
||||
CREATE TABLE IF NOT EXISTS points_freeze_records (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(100) NOT NULL COMMENT '用户名',
|
||||
task_id VARCHAR(50) NOT NULL UNIQUE COMMENT '任务ID',
|
||||
task_type ENUM('TEXT_TO_VIDEO', 'IMAGE_TO_VIDEO', 'STORYBOARD_VIDEO') NOT NULL COMMENT '任务类型',
|
||||
freeze_points INT NOT NULL COMMENT '冻结的积分数量',
|
||||
status ENUM('FROZEN', 'DEDUCTED', 'RETURNED', 'EXPIRED') NOT NULL DEFAULT 'FROZEN' COMMENT '冻结状态',
|
||||
freeze_reason VARCHAR(200) COMMENT '冻结原因',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
completed_at DATETIME COMMENT '完成时间',
|
||||
|
||||
INDEX idx_username_status (username, status),
|
||||
INDEX idx_task_id (task_id),
|
||||
INDEX idx_created_at (created_at),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='积分冻结记录表';
|
||||
|
||||
-- 用户作品表
|
||||
CREATE TABLE IF NOT EXISTS user_works (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(100) NOT NULL COMMENT '用户名',
|
||||
task_id VARCHAR(50) NOT NULL UNIQUE COMMENT '任务ID',
|
||||
work_type ENUM('TEXT_TO_VIDEO', 'IMAGE_TO_VIDEO', 'STORYBOARD_VIDEO') NOT NULL COMMENT '作品类型',
|
||||
title VARCHAR(200) COMMENT '作品标题',
|
||||
description TEXT COMMENT '作品描述',
|
||||
prompt TEXT COMMENT '生成提示词',
|
||||
result_url VARCHAR(500) COMMENT '结果视频URL',
|
||||
thumbnail_url VARCHAR(500) COMMENT '缩略图URL',
|
||||
duration VARCHAR(10) COMMENT '视频时长',
|
||||
aspect_ratio VARCHAR(10) COMMENT '宽高比',
|
||||
quality VARCHAR(20) COMMENT '画质',
|
||||
file_size VARCHAR(20) COMMENT '文件大小',
|
||||
points_cost INT NOT NULL DEFAULT 0 COMMENT '消耗积分',
|
||||
status ENUM('PROCESSING', 'COMPLETED', 'FAILED', 'DELETED') NOT NULL DEFAULT 'PROCESSING' COMMENT '作品状态',
|
||||
is_public BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否公开',
|
||||
view_count INT NOT NULL DEFAULT 0 COMMENT '浏览次数',
|
||||
like_count INT NOT NULL DEFAULT 0 COMMENT '点赞次数',
|
||||
download_count INT NOT NULL DEFAULT 0 COMMENT '下载次数',
|
||||
tags VARCHAR(500) COMMENT '标签',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
completed_at DATETIME COMMENT '完成时间',
|
||||
|
||||
INDEX idx_username_status (username, status),
|
||||
INDEX idx_task_id (task_id),
|
||||
INDEX idx_work_type (work_type),
|
||||
INDEX idx_is_public_status (is_public, status),
|
||||
INDEX idx_created_at (created_at),
|
||||
INDEX idx_view_count (view_count),
|
||||
INDEX idx_like_count (like_count),
|
||||
INDEX idx_tags (tags),
|
||||
INDEX idx_prompt (prompt(100))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户作品表';
|
||||
|
||||
-- 任务状态表
|
||||
CREATE TABLE IF NOT EXISTS task_status (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
task_id VARCHAR(255) NOT NULL COMMENT '任务ID',
|
||||
username VARCHAR(255) NOT NULL COMMENT '用户名',
|
||||
task_type VARCHAR(50) NOT NULL COMMENT '任务类型',
|
||||
status VARCHAR(50) NOT NULL DEFAULT 'PENDING' COMMENT '任务状态',
|
||||
progress INT DEFAULT 0 COMMENT '进度百分比',
|
||||
result_url TEXT COMMENT '结果URL',
|
||||
error_message TEXT COMMENT '错误信息',
|
||||
external_task_id VARCHAR(255) COMMENT '外部任务ID',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
completed_at TIMESTAMP NULL COMMENT '完成时间',
|
||||
last_polled_at TIMESTAMP NULL COMMENT '最后轮询时间',
|
||||
poll_count INT DEFAULT 0 COMMENT '轮询次数',
|
||||
max_polls INT DEFAULT 60 COMMENT '最大轮询次数(2小时)',
|
||||
|
||||
INDEX idx_task_id (task_id),
|
||||
INDEX idx_username (username),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_created_at (created_at),
|
||||
INDEX idx_last_polled (last_polled_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务状态表';
|
||||
|
||||
-- 成功任务归档表
|
||||
CREATE TABLE IF NOT EXISTS completed_tasks_archive (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
task_id VARCHAR(255) NOT NULL,
|
||||
username VARCHAR(255) NOT NULL,
|
||||
task_type VARCHAR(50) NOT NULL,
|
||||
prompt TEXT,
|
||||
aspect_ratio VARCHAR(20),
|
||||
duration INT,
|
||||
hd_mode BOOLEAN DEFAULT FALSE,
|
||||
result_url TEXT,
|
||||
real_task_id VARCHAR(255),
|
||||
progress INT DEFAULT 100,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
completed_at TIMESTAMP NOT NULL,
|
||||
archived_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
points_cost INT DEFAULT 0,
|
||||
INDEX idx_username (username),
|
||||
INDEX idx_task_type (task_type),
|
||||
INDEX idx_created_at (created_at),
|
||||
INDEX idx_completed_at (completed_at),
|
||||
INDEX idx_archived_at (archived_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成功任务归档表';
|
||||
|
||||
-- 失败任务清理日志表
|
||||
CREATE TABLE IF NOT EXISTS failed_tasks_cleanup_log (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
task_id VARCHAR(255) NOT NULL,
|
||||
username VARCHAR(255) NOT NULL,
|
||||
task_type VARCHAR(50) NOT NULL,
|
||||
error_message TEXT,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
failed_at TIMESTAMP NOT NULL,
|
||||
cleaned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_username (username),
|
||||
INDEX idx_task_type (task_type),
|
||||
INDEX idx_cleaned_at (cleaned_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='失败任务清理日志表';
|
||||
|
||||
-- 分镜视频任务表
|
||||
CREATE TABLE IF NOT EXISTS storyboard_video_tasks (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
task_id VARCHAR(50) NOT NULL UNIQUE,
|
||||
username VARCHAR(100) NOT NULL,
|
||||
prompt TEXT COMMENT '文本描述/提示词',
|
||||
image_url TEXT COMMENT '上传的参考图片URL(可选)',
|
||||
aspect_ratio VARCHAR(10) NOT NULL COMMENT '宽高比:16:9, 4:3, 1:1, 3:4, 9:16',
|
||||
hd_mode BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否高清模式',
|
||||
status VARCHAR(20) NOT NULL COMMENT '任务状态:PENDING, PROCESSING, COMPLETED, FAILED, CANCELLED',
|
||||
progress INT NOT NULL DEFAULT 0 COMMENT '进度(0-100)',
|
||||
result_url LONGTEXT COMMENT '分镜图URL(Base64编码的图片,可能非常大)- 网格图',
|
||||
storyboard_images LONGTEXT COMMENT '单独的分镜图片(JSON数组,每张图片为Base64格式,带data URI前缀)',
|
||||
real_task_id VARCHAR(255) COMMENT '外部API返回的真实任务ID',
|
||||
video_task_ids TEXT COMMENT '多个视频任务ID(JSON数组,每张图片对应一个视频任务)',
|
||||
video_urls LONGTEXT COMMENT '多个视频URL(JSON数组,用于拼接)',
|
||||
error_message TEXT COMMENT '错误信息',
|
||||
cost_points INT NOT NULL DEFAULT 0 COMMENT '消耗积分',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
completed_at TIMESTAMP NULL COMMENT '完成时间',
|
||||
INDEX idx_username (username),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_task_id (task_id),
|
||||
INDEX idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分镜视频任务表';
|
||||
|
||||
-- ============================================
|
||||
-- 初始化完成
|
||||
-- ============================================
|
||||
-- 所有表结构已创建完成
|
||||
-- 注意:此文件仅创建表结构,不包含初始数据
|
||||
-- 如需初始化数据,请通过系统管理界面或API进行
|
||||
--
|
||||
-- 宝塔面板使用说明:
|
||||
-- 1. 登录宝塔面板,进入"数据库" -> "phpMyAdmin"
|
||||
-- 2. 选择或创建数据库(建议数据库名:aigc_platform)
|
||||
-- 3. 点击"导入" -> 选择此SQL文件 -> 执行
|
||||
-- 4. 或者使用命令行:mysql -u用户名 -p数据库名 < init_database.sql
|
||||
--
|
||||
-- 数据库配置建议:
|
||||
-- - 数据库名:aigc_platform
|
||||
-- - 字符集:utf8mb4
|
||||
-- - 排序规则:utf8mb4_unicode_ci
|
||||
|
||||
-- ============================================
|
||||
-- 管理员权限设置
|
||||
-- ============================================
|
||||
-- 将 984523799@qq.com 设置为管理员
|
||||
-- 如果该用户存在,则更新其角色为管理员
|
||||
UPDATE users
|
||||
SET role = 'ROLE_ADMIN',
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE email = '984523799@qq.com';
|
||||
|
||||
13
demo/database_baota_deploy/update_admin_user.sql
Normal file
13
demo/database_baota_deploy/update_admin_user.sql
Normal file
@@ -0,0 +1,13 @@
|
||||
-- 将 984523799@qq.com 设置为管理员
|
||||
-- 执行此脚本前请确保已连接到正确的数据库
|
||||
|
||||
-- 更新用户角色为管理员
|
||||
UPDATE users
|
||||
SET role = 'ROLE_ADMIN',
|
||||
updated_at = NOW()
|
||||
WHERE email = '984523799@qq.com';
|
||||
|
||||
-- 验证更新结果
|
||||
SELECT id, username, email, role, points, is_active, created_at, updated_at
|
||||
FROM users
|
||||
WHERE email = '984523799@qq.com';
|
||||
224
demo/database_baota_deploy/宝塔数据库部署指南.md
Normal file
224
demo/database_baota_deploy/宝塔数据库部署指南.md
Normal file
@@ -0,0 +1,224 @@
|
||||
# 宝塔面板数据库部署指南
|
||||
|
||||
## 📋 部署清单
|
||||
|
||||
本部署包包含以下文件:
|
||||
- `init_database.sql` - 完整的数据库初始化脚本(推荐使用)
|
||||
- `update_admin_user.sql` - 管理员权限设置脚本
|
||||
- `数据库完整结构-宝塔导入.sql` - 备用完整结构文件
|
||||
|
||||
## 🚀 快速部署步骤
|
||||
|
||||
### 第一步:创建数据库
|
||||
|
||||
1. 登录宝塔面板
|
||||
2. 进入【数据库】菜单
|
||||
3. 点击【添加数据库】
|
||||
4. 填写以下信息:
|
||||
- **数据库名**: `aigc_platform`
|
||||
- **用户名**: `aigc_platform`(建议与数据库名相同)
|
||||
- **密码**: 自动生成或自定义(请记录下来)
|
||||
- **字符集**: `utf8mb4`
|
||||
- **排序规则**: `utf8mb4_unicode_ci`
|
||||
5. 点击【提交】创建数据库
|
||||
|
||||
### 第二步:导入数据库结构
|
||||
|
||||
#### 方式一:使用phpMyAdmin(推荐)
|
||||
|
||||
1. 在宝塔面板【数据库】列表中,找到 `aigc_platform` 数据库
|
||||
2. 点击右侧的【管理】按钮,进入 phpMyAdmin
|
||||
3. 点击顶部菜单【导入】
|
||||
4. 点击【选择文件】,选择 `init_database.sql`
|
||||
5. 确保以下设置:
|
||||
- 字符集:`utf8mb4`
|
||||
- 格式:`SQL`
|
||||
6. 点击页面底部【执行】按钮
|
||||
7. 等待导入完成,显示成功提示
|
||||
|
||||
#### 方式二:使用命令行
|
||||
|
||||
```bash
|
||||
# SSH登录服务器后执行
|
||||
mysql -u aigc_platform -p aigc_platform < init_database.sql
|
||||
# 输入数据库密码后回车
|
||||
```
|
||||
|
||||
### 第三步:设置管理员权限
|
||||
|
||||
导入完成后,需要设置管理员账号权限:
|
||||
|
||||
#### 方式一:自动设置(已包含在init_database.sql中)
|
||||
|
||||
如果使用 `init_database.sql` 导入,管理员权限已自动设置,无需额外操作。
|
||||
|
||||
#### 方式二:手动设置
|
||||
|
||||
如果需要手动设置或更改管理员,可以执行 `update_admin_user.sql`:
|
||||
|
||||
1. 在 phpMyAdmin 中点击【SQL】标签
|
||||
2. 将 `update_admin_user.sql` 的内容粘贴到文本框
|
||||
3. 点击【执行】
|
||||
|
||||
或者直接在SQL中执行:
|
||||
|
||||
```sql
|
||||
UPDATE users
|
||||
SET role = 'ROLE_ADMIN',
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE email = '984523799@qq.com';
|
||||
```
|
||||
|
||||
### 第四步:验证数据库
|
||||
|
||||
在 phpMyAdmin 或命令行中执行以下查询,验证表结构是否正确:
|
||||
|
||||
```sql
|
||||
-- 查看所有表
|
||||
SHOW TABLES;
|
||||
|
||||
-- 验证管理员用户(如果已注册)
|
||||
SELECT id, username, email, role, points, created_at
|
||||
FROM users
|
||||
WHERE email = '984523799@qq.com';
|
||||
```
|
||||
|
||||
应该看到以下表:
|
||||
- `users` - 用户表
|
||||
- `payments` - 支付表
|
||||
- `orders` - 订单表
|
||||
- `order_items` - 订单项表
|
||||
- `text_to_video_tasks` - 文生视频任务表
|
||||
- `image_to_video_tasks` - 图生视频任务表
|
||||
- `storyboard_video_tasks` - 分镜视频任务表
|
||||
- `task_queue` - 任务队列表
|
||||
- `task_status` - 任务状态表
|
||||
- `user_works` - 用户作品表
|
||||
- `user_membership` - 会员表
|
||||
- `user_activity_stats` - 用户活动统计表
|
||||
- `failed_tasks_cleanup_log` - 失败任务清理日志表
|
||||
|
||||
## 📝 数据库配置信息
|
||||
|
||||
部署完成后,需要在应用配置文件中填写数据库信息:
|
||||
|
||||
**文件位置**: `src/main/resources/application-prod.properties`
|
||||
|
||||
```properties
|
||||
# 数据库配置
|
||||
spring.datasource.url=jdbc:mysql://服务器IP:3306/aigc_platform?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
|
||||
spring.datasource.username=aigc_platform
|
||||
spring.datasource.password=你的数据库密码
|
||||
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
||||
```
|
||||
|
||||
**重要参数说明**:
|
||||
- `服务器IP`:
|
||||
- 如果应用与数据库在同一服务器:使用 `localhost` 或 `127.0.0.1`
|
||||
- 如果数据库在其他服务器:使用数据库服务器的IP地址
|
||||
- `你的数据库密码`: 第一步创建数据库时设置的密码
|
||||
|
||||
## 🔒 安全建议
|
||||
|
||||
### 1. 数据库访问权限
|
||||
|
||||
- 在宝塔面板【数据库】中,点击数据库的【权限】
|
||||
- 如果应用和数据库在同一服务器,设置为【本地服务器】
|
||||
- 如果需要远程访问,设置【所有人】或指定IP,但要确保密码强度足够
|
||||
|
||||
### 2. 数据库密码强度
|
||||
|
||||
- 使用包含大小写字母、数字、特殊字符的强密码
|
||||
- 密码长度建议16位以上
|
||||
|
||||
### 3. 定期备份
|
||||
|
||||
在宝塔面板设置自动备份:
|
||||
1. 进入【计划任务】
|
||||
2. 添加【备份数据库】任务
|
||||
3. 选择 `aigc_platform` 数据库
|
||||
4. 设置备份周期(建议每天备份)
|
||||
5. 设置保留份数(建议保留7-30份)
|
||||
|
||||
## ⚙️ 数据库性能优化
|
||||
|
||||
### 1. 连接池配置(已包含在application配置中)
|
||||
|
||||
```properties
|
||||
# 连接池配置(支持50-100人并发)
|
||||
spring.datasource.hikari.maximum-pool-size=50
|
||||
spring.datasource.hikari.minimum-idle=10
|
||||
spring.datasource.hikari.idle-timeout=300000
|
||||
spring.datasource.hikari.max-lifetime=1200000
|
||||
spring.datasource.hikari.connection-timeout=30000
|
||||
```
|
||||
|
||||
### 2. MySQL配置优化
|
||||
|
||||
在宝塔面板【软件商店】->【MySQL】->【设置】->【配置修改】中调整:
|
||||
|
||||
```ini
|
||||
# 根据服务器内存调整(示例为4GB内存)
|
||||
innodb_buffer_pool_size = 1G
|
||||
max_connections = 500
|
||||
query_cache_size = 128M
|
||||
tmp_table_size = 64M
|
||||
max_heap_table_size = 64M
|
||||
```
|
||||
|
||||
## 🐛 常见问题
|
||||
|
||||
### 1. 导入失败:字符集错误
|
||||
|
||||
**解决方案**:
|
||||
- 确保数据库字符集为 `utf8mb4`
|
||||
- 在导入时选择字符集为 `utf8mb4`
|
||||
|
||||
### 2. 连接失败:Access denied
|
||||
|
||||
**解决方案**:
|
||||
- 检查数据库用户名和密码是否正确
|
||||
- 检查数据库访问权限设置
|
||||
|
||||
### 3. 表已存在错误
|
||||
|
||||
**解决方案**:
|
||||
- 如果是重新部署,先删除旧数据库或清空所有表
|
||||
- 在 phpMyAdmin 中选择数据库,点击【操作】->【清空数据库】
|
||||
|
||||
### 4. 管理员权限未生效
|
||||
|
||||
**原因**:用户还未注册
|
||||
|
||||
**解决方案**:
|
||||
1. 先在前端使用 `984523799@qq.com` 注册账号
|
||||
2. 注册完成后,数据库会自动将该用户设置为管理员(因为 `data.sql` 中有自动更新脚本)
|
||||
3. 或者注册后手动执行 `update_admin_user.sql`
|
||||
|
||||
## 📊 数据库监控
|
||||
|
||||
在宝塔面板可以监控数据库状态:
|
||||
1. 进入【数据库】菜单
|
||||
2. 点击数据库名称右侧的【监控】
|
||||
3. 查看:
|
||||
- 查询次数
|
||||
- 慢查询
|
||||
- 连接数
|
||||
- 缓存命中率
|
||||
|
||||
## 📞 技术支持
|
||||
|
||||
如遇到问题,请检查:
|
||||
1. 宝塔面板【日志】中的 MySQL 错误日志
|
||||
2. 应用日志中的数据库连接错误
|
||||
3. 确保 MySQL 服务正在运行
|
||||
|
||||
---
|
||||
|
||||
**部署完成标志**:
|
||||
- ✅ 数据库创建成功
|
||||
- ✅ 表结构导入成功(13个表)
|
||||
- ✅ 管理员权限设置完成
|
||||
- ✅ 应用能够成功连接数据库
|
||||
|
||||
祝部署顺利!🎉
|
||||
370
demo/database_baota_deploy/数据库完整结构-宝塔导入.sql
Normal file
370
demo/database_baota_deploy/数据库完整结构-宝塔导入.sql
Normal file
@@ -0,0 +1,370 @@
|
||||
-- ============================================
|
||||
-- AIGC平台数据库完整结构
|
||||
-- 适用于宝塔面板部署
|
||||
-- 创建时间:2025
|
||||
-- ============================================
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ============================================
|
||||
-- 1. 基础表结构(schema.sql)
|
||||
-- ============================================
|
||||
|
||||
-- 用户表
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
username VARCHAR(50) NOT NULL UNIQUE,
|
||||
email VARCHAR(100) NOT NULL UNIQUE,
|
||||
password_hash VARCHAR(100) NOT NULL,
|
||||
role VARCHAR(30) NOT NULL DEFAULT 'ROLE_USER',
|
||||
points INT NOT NULL DEFAULT 50,
|
||||
frozen_points INT NOT NULL DEFAULT 0 COMMENT '冻结积分',
|
||||
phone VARCHAR(20),
|
||||
avatar VARCHAR(500),
|
||||
nickname VARCHAR(100),
|
||||
gender VARCHAR(10),
|
||||
birthday DATE,
|
||||
address TEXT,
|
||||
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
last_login_at TIMESTAMP NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_email (email),
|
||||
INDEX idx_username (username)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
||||
|
||||
-- 支付表
|
||||
CREATE TABLE IF NOT EXISTS payments (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
order_id VARCHAR(50) NOT NULL UNIQUE,
|
||||
amount DECIMAL(10,2) NOT NULL,
|
||||
currency VARCHAR(3) NOT NULL DEFAULT 'CNY',
|
||||
payment_method VARCHAR(20) NOT NULL,
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
|
||||
description VARCHAR(500),
|
||||
external_transaction_id VARCHAR(100),
|
||||
callback_url VARCHAR(1000),
|
||||
return_url VARCHAR(1000),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
paid_at TIMESTAMP NULL,
|
||||
user_id BIGINT,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id),
|
||||
INDEX idx_order_id (order_id),
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付表';
|
||||
|
||||
-- 订单表
|
||||
CREATE TABLE IF NOT EXISTS orders (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
order_number VARCHAR(50) NOT NULL UNIQUE,
|
||||
total_amount DECIMAL(10,2) NOT NULL,
|
||||
currency VARCHAR(3) NOT NULL DEFAULT 'CNY',
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
|
||||
order_type VARCHAR(20) NOT NULL DEFAULT 'PRODUCT',
|
||||
description VARCHAR(500),
|
||||
notes TEXT,
|
||||
shipping_address TEXT,
|
||||
billing_address TEXT,
|
||||
contact_phone VARCHAR(20),
|
||||
contact_email VARCHAR(100),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
paid_at TIMESTAMP NULL,
|
||||
shipped_at TIMESTAMP NULL,
|
||||
delivered_at TIMESTAMP NULL,
|
||||
cancelled_at TIMESTAMP NULL,
|
||||
user_id BIGINT NOT NULL,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id),
|
||||
INDEX idx_order_number (order_number),
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表';
|
||||
|
||||
-- 订单项表
|
||||
CREATE TABLE IF NOT EXISTS order_items (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
product_name VARCHAR(100) NOT NULL,
|
||||
product_description VARCHAR(500),
|
||||
product_sku VARCHAR(200),
|
||||
unit_price DECIMAL(10,2) NOT NULL,
|
||||
quantity INT NOT NULL,
|
||||
subtotal DECIMAL(10,2) NOT NULL,
|
||||
product_image VARCHAR(100),
|
||||
order_id BIGINT NOT NULL,
|
||||
FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
|
||||
INDEX idx_order_id (order_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单项表';
|
||||
|
||||
-- 会员等级表
|
||||
CREATE TABLE IF NOT EXISTS membership_levels (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
name VARCHAR(50) NOT NULL UNIQUE,
|
||||
display_name VARCHAR(50) NOT NULL,
|
||||
description TEXT,
|
||||
price DECIMAL(10,2) NOT NULL DEFAULT 0,
|
||||
duration_days INT NOT NULL DEFAULT 30,
|
||||
points_bonus INT NOT NULL DEFAULT 0,
|
||||
features JSON,
|
||||
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_name (name)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员等级表';
|
||||
|
||||
-- 用户会员信息表
|
||||
CREATE TABLE IF NOT EXISTS user_memberships (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
user_id BIGINT NOT NULL,
|
||||
membership_level_id BIGINT NOT NULL,
|
||||
start_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
end_date TIMESTAMP NOT NULL,
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
|
||||
auto_renew BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (membership_level_id) REFERENCES membership_levels(id),
|
||||
UNIQUE KEY unique_active_membership (user_id, status),
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户会员信息表';
|
||||
|
||||
-- 视频生成任务表(基础表)
|
||||
CREATE TABLE IF NOT EXISTS video_tasks (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
task_id VARCHAR(100) NOT NULL UNIQUE,
|
||||
user_id BIGINT NOT NULL,
|
||||
task_type VARCHAR(50) NOT NULL,
|
||||
title VARCHAR(200) NOT NULL,
|
||||
description TEXT,
|
||||
input_text TEXT,
|
||||
input_image_url VARCHAR(500),
|
||||
output_video_url VARCHAR(500),
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
|
||||
progress INT NOT NULL DEFAULT 0,
|
||||
error_message TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
completed_at TIMESTAMP NULL,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_task_id (task_id),
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='视频生成任务表';
|
||||
|
||||
-- 用户作品表(基础版)
|
||||
CREATE TABLE IF NOT EXISTS user_works_base (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
user_id BIGINT NOT NULL,
|
||||
title VARCHAR(200) NOT NULL,
|
||||
description TEXT,
|
||||
work_type VARCHAR(50) NOT NULL,
|
||||
cover_image VARCHAR(500),
|
||||
video_url VARCHAR(500),
|
||||
tags VARCHAR(500),
|
||||
is_public BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
view_count INT NOT NULL DEFAULT 0,
|
||||
like_count INT NOT NULL DEFAULT 0,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_work_type (work_type)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户作品表(基础版)';
|
||||
|
||||
-- 系统配置表
|
||||
CREATE TABLE IF NOT EXISTS system_configs (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
config_key VARCHAR(100) NOT NULL UNIQUE,
|
||||
config_value TEXT,
|
||||
description VARCHAR(500),
|
||||
config_type VARCHAR(50) NOT NULL DEFAULT 'STRING',
|
||||
is_public BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_config_key (config_key)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置表';
|
||||
|
||||
-- ============================================
|
||||
-- 2. 迁移表结构(Flyway Migration)
|
||||
-- ============================================
|
||||
|
||||
-- V3: 任务队列表
|
||||
CREATE TABLE IF NOT EXISTS task_queue (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(100) NOT NULL COMMENT '用户名',
|
||||
task_id VARCHAR(50) NOT NULL UNIQUE COMMENT '任务ID',
|
||||
task_type ENUM('TEXT_TO_VIDEO', 'IMAGE_TO_VIDEO') NOT NULL COMMENT '任务类型',
|
||||
status ENUM('PENDING', 'PROCESSING', 'COMPLETED', 'FAILED', 'CANCELLED', 'TIMEOUT') NOT NULL DEFAULT 'PENDING' COMMENT '队列状态',
|
||||
priority INT NOT NULL DEFAULT 0 COMMENT '优先级,数字越小优先级越高',
|
||||
real_task_id VARCHAR(100) COMMENT '外部API返回的真实任务ID',
|
||||
last_check_time DATETIME COMMENT '最后一次检查时间',
|
||||
check_count INT NOT NULL DEFAULT 0 COMMENT '检查次数',
|
||||
max_check_count INT NOT NULL DEFAULT 30 COMMENT '最大检查次数(30次 * 2分钟 = 60分钟)',
|
||||
error_message TEXT COMMENT '错误信息',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
completed_at DATETIME COMMENT '完成时间',
|
||||
INDEX idx_username_status (username, status),
|
||||
INDEX idx_status_priority (status, priority),
|
||||
INDEX idx_last_check_time (last_check_time),
|
||||
INDEX idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务队列表';
|
||||
|
||||
-- V4: 积分冻结记录表
|
||||
CREATE TABLE IF NOT EXISTS points_freeze_records (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(100) NOT NULL COMMENT '用户名',
|
||||
task_id VARCHAR(50) NOT NULL UNIQUE COMMENT '任务ID',
|
||||
task_type ENUM('TEXT_TO_VIDEO', 'IMAGE_TO_VIDEO') NOT NULL COMMENT '任务类型',
|
||||
freeze_points INT NOT NULL COMMENT '冻结的积分数量',
|
||||
status ENUM('FROZEN', 'DEDUCTED', 'RETURNED', 'EXPIRED') NOT NULL DEFAULT 'FROZEN' COMMENT '冻结状态',
|
||||
freeze_reason VARCHAR(200) COMMENT '冻结原因',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
completed_at DATETIME COMMENT '完成时间',
|
||||
INDEX idx_username_status (username, status),
|
||||
INDEX idx_task_id (task_id),
|
||||
INDEX idx_created_at (created_at),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='积分冻结记录表';
|
||||
|
||||
-- V5: 用户作品表(详细版)
|
||||
CREATE TABLE IF NOT EXISTS user_works (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(100) NOT NULL COMMENT '用户名',
|
||||
task_id VARCHAR(50) NOT NULL UNIQUE COMMENT '任务ID',
|
||||
work_type ENUM('TEXT_TO_VIDEO', 'IMAGE_TO_VIDEO') NOT NULL COMMENT '作品类型',
|
||||
title VARCHAR(200) COMMENT '作品标题',
|
||||
description TEXT COMMENT '作品描述',
|
||||
prompt TEXT COMMENT '生成提示词',
|
||||
result_url VARCHAR(500) COMMENT '结果视频URL',
|
||||
thumbnail_url VARCHAR(500) COMMENT '缩略图URL',
|
||||
duration VARCHAR(10) COMMENT '视频时长',
|
||||
aspect_ratio VARCHAR(10) COMMENT '宽高比',
|
||||
quality VARCHAR(20) COMMENT '画质',
|
||||
file_size VARCHAR(20) COMMENT '文件大小',
|
||||
points_cost INT NOT NULL DEFAULT 0 COMMENT '消耗积分',
|
||||
status ENUM('PROCESSING', 'COMPLETED', 'FAILED', 'DELETED') NOT NULL DEFAULT 'PROCESSING' COMMENT '作品状态',
|
||||
is_public BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否公开',
|
||||
view_count INT NOT NULL DEFAULT 0 COMMENT '浏览次数',
|
||||
like_count INT NOT NULL DEFAULT 0 COMMENT '点赞次数',
|
||||
download_count INT NOT NULL DEFAULT 0 COMMENT '下载次数',
|
||||
tags VARCHAR(500) COMMENT '标签',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
completed_at DATETIME COMMENT '完成时间',
|
||||
INDEX idx_username_status (username, status),
|
||||
INDEX idx_task_id (task_id),
|
||||
INDEX idx_work_type (work_type),
|
||||
INDEX idx_is_public_status (is_public, status),
|
||||
INDEX idx_created_at (created_at),
|
||||
INDEX idx_view_count (view_count),
|
||||
INDEX idx_like_count (like_count),
|
||||
INDEX idx_tags (tags),
|
||||
INDEX idx_prompt (prompt(100))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户作品表';
|
||||
|
||||
-- V6: 任务状态表
|
||||
CREATE TABLE IF NOT EXISTS task_status (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
task_id VARCHAR(255) NOT NULL COMMENT '任务ID',
|
||||
username VARCHAR(255) NOT NULL COMMENT '用户名',
|
||||
task_type VARCHAR(50) NOT NULL COMMENT '任务类型',
|
||||
status VARCHAR(50) NOT NULL DEFAULT 'PENDING' COMMENT '任务状态',
|
||||
progress INT DEFAULT 0 COMMENT '进度百分比',
|
||||
result_url TEXT COMMENT '结果URL',
|
||||
error_message TEXT COMMENT '错误信息',
|
||||
external_task_id VARCHAR(255) COMMENT '外部任务ID',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
completed_at TIMESTAMP NULL COMMENT '完成时间',
|
||||
last_polled_at TIMESTAMP NULL COMMENT '最后轮询时间',
|
||||
poll_count INT DEFAULT 0 COMMENT '轮询次数',
|
||||
max_polls INT DEFAULT 60 COMMENT '最大轮询次数(2小时)',
|
||||
INDEX idx_task_id (task_id),
|
||||
INDEX idx_username (username),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_created_at (created_at),
|
||||
INDEX idx_last_polled (last_polled_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务状态表';
|
||||
|
||||
-- V7: 任务清理表
|
||||
-- 成功任务归档表
|
||||
CREATE TABLE IF NOT EXISTS completed_tasks_archive (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
task_id VARCHAR(255) NOT NULL,
|
||||
username VARCHAR(255) NOT NULL,
|
||||
task_type VARCHAR(50) NOT NULL,
|
||||
prompt TEXT,
|
||||
aspect_ratio VARCHAR(20),
|
||||
duration INT,
|
||||
hd_mode BOOLEAN DEFAULT FALSE,
|
||||
result_url TEXT,
|
||||
real_task_id VARCHAR(255),
|
||||
progress INT DEFAULT 100,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
completed_at TIMESTAMP NOT NULL,
|
||||
archived_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
points_cost INT DEFAULT 0,
|
||||
INDEX idx_username (username),
|
||||
INDEX idx_task_type (task_type),
|
||||
INDEX idx_created_at (created_at),
|
||||
INDEX idx_completed_at (completed_at),
|
||||
INDEX idx_archived_at (archived_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成功任务归档表';
|
||||
|
||||
-- 失败任务清理日志表
|
||||
CREATE TABLE IF NOT EXISTS failed_tasks_cleanup_log (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
task_id VARCHAR(255) NOT NULL,
|
||||
username VARCHAR(255) NOT NULL,
|
||||
task_type VARCHAR(50) NOT NULL,
|
||||
error_message TEXT,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
failed_at TIMESTAMP NOT NULL,
|
||||
cleaned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_username (username),
|
||||
INDEX idx_task_type (task_type),
|
||||
INDEX idx_cleaned_at (cleaned_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='失败任务清理日志表';
|
||||
|
||||
-- V8: 分镜视频任务表
|
||||
CREATE TABLE IF NOT EXISTS storyboard_video_tasks (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
task_id VARCHAR(50) NOT NULL UNIQUE,
|
||||
username VARCHAR(100) NOT NULL,
|
||||
prompt TEXT,
|
||||
image_url VARCHAR(500),
|
||||
aspect_ratio VARCHAR(10) NOT NULL,
|
||||
hd_mode BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
status VARCHAR(20) NOT NULL,
|
||||
progress INT NOT NULL DEFAULT 0,
|
||||
result_url VARCHAR(500),
|
||||
real_task_id VARCHAR(255),
|
||||
error_message TEXT,
|
||||
cost_points INT NOT NULL DEFAULT 0,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP NOT NULL,
|
||||
completed_at TIMESTAMP,
|
||||
INDEX idx_username (username),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_task_id (task_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分镜视频任务表';
|
||||
|
||||
-- ============================================
|
||||
-- 完成
|
||||
-- ============================================
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- 显示所有表
|
||||
SHOW TABLES;
|
||||
|
||||
|
||||
|
||||
|
||||
227
demo/database_baota_deploy/部署检查清单.md
Normal file
227
demo/database_baota_deploy/部署检查清单.md
Normal file
@@ -0,0 +1,227 @@
|
||||
# 宝塔数据库部署检查清单
|
||||
|
||||
部署日期: _______________
|
||||
操作人员: _______________
|
||||
|
||||
## 📋 部署前准备
|
||||
|
||||
### 1. 服务器环境检查
|
||||
- [ ] 服务器已安装宝塔面板(版本: ______)
|
||||
- [ ] MySQL/MariaDB已安装(版本: ______)
|
||||
- [ ] MySQL服务运行正常
|
||||
- [ ] 服务器内存 >= 2GB(推荐4GB+)
|
||||
- [ ] 磁盘空间 >= 10GB
|
||||
|
||||
### 2. 部署包确认
|
||||
- [ ] 已下载 `database_baota_deploy.zip`
|
||||
- [ ] 已解压到服务器
|
||||
- [ ] 包含以下文件:
|
||||
- [ ] init_database.sql
|
||||
- [ ] update_admin_user.sql
|
||||
- [ ] 数据库完整结构-宝塔导入.sql
|
||||
- [ ] 宝塔数据库部署指南.md
|
||||
- [ ] README.md
|
||||
- [ ] deploy_database.sh
|
||||
|
||||
## 🚀 部署步骤
|
||||
|
||||
### 第一步:创建数据库
|
||||
- [ ] 登录宝塔面板
|
||||
- [ ] 进入【数据库】菜单
|
||||
- [ ] 点击【添加数据库】
|
||||
- [ ] 数据库名: `aigc_platform`
|
||||
- [ ] 用户名: `aigc_platform`
|
||||
- [ ] 密码: ___________________________(请记录)
|
||||
- [ ] 字符集: `utf8mb4`
|
||||
- [ ] 排序规则: `utf8mb4_unicode_ci`
|
||||
- [ ] 创建成功
|
||||
|
||||
### 第二步:导入数据库
|
||||
- [ ] 点击数据库【管理】按钮
|
||||
- [ ] 进入phpMyAdmin
|
||||
- [ ] 点击【导入】标签
|
||||
- [ ] 选择 `init_database.sql` 文件
|
||||
- [ ] 字符集选择 `utf8mb4`
|
||||
- [ ] 点击【执行】
|
||||
- [ ] 导入成功(显示成功消息)
|
||||
|
||||
### 第三步:验证数据库
|
||||
- [ ] 在phpMyAdmin中点击左侧数据库名
|
||||
- [ ] 查看表列表
|
||||
- [ ] 确认包含13个表:
|
||||
- [ ] users
|
||||
- [ ] payments
|
||||
- [ ] orders
|
||||
- [ ] order_items
|
||||
- [ ] text_to_video_tasks
|
||||
- [ ] image_to_video_tasks
|
||||
- [ ] storyboard_video_tasks
|
||||
- [ ] task_queue
|
||||
- [ ] task_status
|
||||
- [ ] user_works
|
||||
- [ ] user_membership
|
||||
- [ ] user_activity_stats
|
||||
- [ ] failed_tasks_cleanup_log
|
||||
|
||||
### 第四步:配置管理员
|
||||
- [ ] 管理员邮箱: `984523799@qq.com`
|
||||
- [ ] 已在 `init_database.sql` 中自动配置
|
||||
- [ ] 或手动执行 `update_admin_user.sql`
|
||||
|
||||
## ⚙️ 应用配置
|
||||
|
||||
### 更新配置文件
|
||||
- [ ] 找到文件: `src/main/resources/application-prod.properties`
|
||||
- [ ] 更新以下配置:
|
||||
|
||||
```properties
|
||||
spring.datasource.url=jdbc:mysql://localhost:3306/aigc_platform?...
|
||||
spring.datasource.username=aigc_platform
|
||||
spring.datasource.password=你的数据库密码
|
||||
```
|
||||
|
||||
配置信息记录:
|
||||
```
|
||||
数据库地址: _______________________________
|
||||
数据库端口: 3306
|
||||
数据库名: aigc_platform
|
||||
用户名: aigc_platform
|
||||
密码: _______________________________
|
||||
```
|
||||
|
||||
## 🔒 安全配置
|
||||
|
||||
### 数据库访问权限
|
||||
- [ ] 设置访问权限(本地服务器/所有人/指定IP)
|
||||
- [ ] 权限类型: _______________________
|
||||
|
||||
### 防火墙配置(如需远程连接)
|
||||
- [ ] 开放3306端口
|
||||
- [ ] 或使用SSH隧道
|
||||
|
||||
### 备份配置
|
||||
- [ ] 在宝塔面板设置自动备份
|
||||
- [ ] 备份周期: 每天 / 每周(选择一个)
|
||||
- [ ] 保留份数: _______ 份
|
||||
- [ ] 备份位置: _______________________
|
||||
|
||||
## ✅ 功能测试
|
||||
|
||||
### 数据库连接测试
|
||||
- [ ] 使用命令行测试连接:
|
||||
```bash
|
||||
mysql -uaigc_platform -p aigc_platform
|
||||
```
|
||||
- [ ] 连接成功
|
||||
|
||||
### 表查询测试
|
||||
- [ ] 执行查询:
|
||||
```sql
|
||||
SHOW TABLES;
|
||||
SELECT COUNT(*) FROM users;
|
||||
```
|
||||
- [ ] 查询成功
|
||||
|
||||
### 管理员账号验证(注册后执行)
|
||||
- [ ] 使用 `984523799@qq.com` 注册账号
|
||||
- [ ] 执行查询验证角色:
|
||||
```sql
|
||||
SELECT id, username, email, role FROM users WHERE email = '984523799@qq.com';
|
||||
```
|
||||
- [ ] role = 'ROLE_ADMIN' ✓
|
||||
|
||||
### 应用连接测试
|
||||
- [ ] 启动Spring Boot应用
|
||||
- [ ] 查看日志,确认数据库连接成功
|
||||
- [ ] 无数据库连接错误
|
||||
|
||||
## 📊 性能优化(可选)
|
||||
|
||||
### MySQL配置优化
|
||||
- [ ] 调整 `innodb_buffer_pool_size`
|
||||
- [ ] 调整 `max_connections`
|
||||
- [ ] 调整 `query_cache_size`
|
||||
|
||||
### 连接池配置
|
||||
- [ ] 已配置HikariCP连接池
|
||||
- [ ] maximum-pool-size: 50
|
||||
- [ ] minimum-idle: 10
|
||||
|
||||
## 🐛 问题记录
|
||||
|
||||
遇到的问题及解决方案:
|
||||
|
||||
| 问题描述 | 解决方案 | 解决时间 |
|
||||
|---------|---------|---------|
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
|
||||
## 📝 部署总结
|
||||
|
||||
### 部署结果
|
||||
- [ ] 部署成功 ✅
|
||||
- [ ] 部署失败 ❌(原因: _____________)
|
||||
|
||||
### 部署时间记录
|
||||
- 开始时间: _______________
|
||||
- 结束时间: _______________
|
||||
- 总耗时: _______________
|
||||
|
||||
### 资源使用
|
||||
- 数据库大小: _______ MB
|
||||
- 表数量: 13
|
||||
- 索引数量: _______
|
||||
|
||||
### 后续工作
|
||||
- [ ] 监控数据库性能
|
||||
- [ ] 设置定期备份
|
||||
- [ ] 配置数据库监控告警
|
||||
- [ ] 文档归档
|
||||
|
||||
## 📞 联系信息
|
||||
|
||||
### 技术支持
|
||||
- 部署文档: README.md
|
||||
- 详细指南: 宝塔数据库部署指南.md
|
||||
|
||||
### 应急联系
|
||||
- 运维人员: _______________
|
||||
- 联系电话: _______________
|
||||
- 备用联系: _______________
|
||||
|
||||
---
|
||||
|
||||
**部署负责人签名**: _______________
|
||||
**审核人签名**: _______________
|
||||
**日期**: _______________
|
||||
|
||||
---
|
||||
|
||||
## 附录:常用命令
|
||||
|
||||
```bash
|
||||
# 查看MySQL状态
|
||||
systemctl status mysql
|
||||
|
||||
# 重启MySQL
|
||||
systemctl restart mysql
|
||||
|
||||
# 查看数据库列表
|
||||
mysql -uroot -p -e "SHOW DATABASES;"
|
||||
|
||||
# 备份数据库
|
||||
mysqldump -uaigc_platform -p aigc_platform > backup.sql
|
||||
|
||||
# 恢复数据库
|
||||
mysql -uaigc_platform -p aigc_platform < backup.sql
|
||||
|
||||
# 查看表大小
|
||||
SELECT table_name, ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)"
|
||||
FROM information_schema.TABLES
|
||||
WHERE table_schema = 'aigc_platform'
|
||||
ORDER BY (data_length + index_length) DESC;
|
||||
```
|
||||
|
||||
**部署清单版本**: 1.0
|
||||
**更新日期**: 2025-11-10
|
||||
Reference in New Issue
Block a user