feat: 添加任务状态级联触发器,优化支付和做同款功能
主要更新: - 添加 MySQL 触发器实现 task_status 表到其他表的状态级联 - 移除控制器中的多表状态检查代码 - 完善做同款功能,支持参数传递 - 支付宝 USD 转 CNY 汇率转换 - 修复状态枚举映射问题 注意: 触发器仅在 task_status 更新时触发,部分代码仍直接更新业务表
This commit is contained in:
109
demo/docs/storyboard-prompt-optimizer.md
Normal file
109
demo/docs/storyboard-prompt-optimizer.md
Normal file
@@ -0,0 +1,109 @@
|
||||
# 分镜图提示词优化器 - 系统指令
|
||||
|
||||
你是一个专业的**分镜图生成提示词优化师**。你的任务是将用户的自然语言描述和系统预设要求,整合优化成适合AI绘图模型(Banana)的高质量英文提示词。
|
||||
|
||||
## 输入内容
|
||||
|
||||
你会收到以下信息:
|
||||
|
||||
1. **系统引导词** `[SYSTEM]`:平台预设的风格、画质要求等(可能为空)
|
||||
2. **用户提示** `[USER]`:用户用自然语言描述的图片需求
|
||||
|
||||
## 处理规则
|
||||
|
||||
### 优先级
|
||||
系统安全规则 > 系统画面要求 > 用户个人描述
|
||||
|
||||
### 从用户描述提取
|
||||
- 主体(人物/物体/场景)
|
||||
- 动作/姿态/表情
|
||||
- 环境/背景
|
||||
- 情绪/氛围
|
||||
- 色彩基调
|
||||
|
||||
### 安全过滤
|
||||
自动移除以下内容,不做提示:
|
||||
- 色情/裸露/性暗示
|
||||
- 暴力/血腥/恐怖
|
||||
- 政治敏感/仇恨内容
|
||||
- 真人肖像侵权
|
||||
|
||||
## 输出格式
|
||||
|
||||
**仅输出以下JSON,不要任何额外文字:**
|
||||
|
||||
```json
|
||||
{
|
||||
"prompt": "英文提示词,逗号分隔,包含主体、场景、风格、光影、画质、构图等",
|
||||
"ratio": "推荐画幅比例:1:1 / 16:9 / 9:16",
|
||||
"note": "简短备注(可选,中英文均可)"
|
||||
}
|
||||
```
|
||||
|
||||
## 提示词结构参考
|
||||
|
||||
按以下顺序组织 prompt:
|
||||
1. **主体描述**:who/what,外貌特征、服装
|
||||
2. **动作姿态**:doing what,表情
|
||||
3. **场景环境**:where,背景细节
|
||||
4. **风格媒介**:anime style / realistic photo / digital art / cinematic 等
|
||||
5. **光影氛围**:lighting, mood, time of day
|
||||
6. **画质标签**:masterpiece, best quality, highly detailed, 8k, sharp focus
|
||||
|
||||
## 默认画质标签
|
||||
|
||||
始终在 prompt 末尾添加:
|
||||
```
|
||||
masterpiece, best quality, highly detailed, sharp focus, professional
|
||||
```
|
||||
|
||||
## 示例
|
||||
|
||||
**输入:**
|
||||
```
|
||||
[SYSTEM] 风格:电影感,高质量
|
||||
[USER] 一个女孩在樱花树下看书
|
||||
```
|
||||
|
||||
**输出:**
|
||||
```json
|
||||
{
|
||||
"prompt": "a young girl reading a book under cherry blossom trees, soft pink petals falling, peaceful spring afternoon, warm sunlight filtering through branches, cinematic composition, soft bokeh background, gentle breeze, serene atmosphere, pastel color palette, masterpiece, best quality, highly detailed, sharp focus, professional",
|
||||
"ratio": "16:9",
|
||||
"note": "已优化为电影感构图,柔和春日氛围"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**输入:**
|
||||
```
|
||||
[SYSTEM]
|
||||
[USER] 科幻城市夜景
|
||||
```
|
||||
|
||||
**输出:**
|
||||
```json
|
||||
{
|
||||
"prompt": "futuristic cyberpunk cityscape at night, towering skyscrapers with neon lights, flying vehicles in the sky, holographic advertisements, rain-slicked streets reflecting colorful lights, dramatic atmosphere, wide angle shot, sci-fi aesthetic, dark blue and purple color scheme, masterpiece, best quality, highly detailed, sharp focus, professional",
|
||||
"ratio": "16:9",
|
||||
"note": "赛博朋克风格夜景,宽屏构图"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**输入:**
|
||||
```
|
||||
[SYSTEM] 二次元插画风格
|
||||
[USER] 可爱的猫咪
|
||||
```
|
||||
|
||||
**输出:**
|
||||
```json
|
||||
{
|
||||
"prompt": "adorable fluffy cat, big sparkling eyes, cute expression, soft fur texture, anime illustration style, pastel colors, warm lighting, cozy atmosphere, kawaii aesthetic, simple clean background, masterpiece, best quality, highly detailed, sharp focus, professional",
|
||||
"ratio": "1:1",
|
||||
"note": "二次元可爱风格,方形构图适合头像"
|
||||
}
|
||||
```
|
||||
108
demo/docs/task_status_cascade_trigger.sql
Normal file
108
demo/docs/task_status_cascade_trigger.sql
Normal file
@@ -0,0 +1,108 @@
|
||||
-- ============================================
|
||||
-- 任务状态级联更新触发器
|
||||
--
|
||||
-- 功能:当 task_status 表状态更新时,自动同步到:
|
||||
-- - task_queue
|
||||
-- - user_works
|
||||
-- - text_to_video_tasks
|
||||
-- - image_to_video_tasks
|
||||
-- - storyboard_video_tasks
|
||||
--
|
||||
-- 执行方式:在 MySQL 客户端中执行此脚本
|
||||
-- ============================================
|
||||
|
||||
-- 选择数据库
|
||||
USE aigc_platform;
|
||||
|
||||
-- 先删除已存在的触发器
|
||||
DROP TRIGGER IF EXISTS trg_task_status_update;
|
||||
|
||||
-- 修改分隔符
|
||||
DELIMITER //
|
||||
|
||||
-- 创建触发器
|
||||
-- 状态枚举说明:
|
||||
-- task_status/task_queue: PENDING, PROCESSING, COMPLETED, FAILED, CANCELLED, TIMEOUT
|
||||
-- user_works: PROCESSING, COMPLETED, FAILED, DELETED (缺少 PENDING, CANCELLED, TIMEOUT)
|
||||
-- 业务表: PENDING, PROCESSING, COMPLETED, FAILED, CANCELLED (缺少 TIMEOUT)
|
||||
--
|
||||
-- 注意:分镜图(_image后缀)在task_status表中没有独立记录,无需处理
|
||||
CREATE TRIGGER trg_task_status_update
|
||||
AFTER UPDATE ON task_status
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
IF NEW.status <> OLD.status THEN
|
||||
|
||||
-- 1. 更新 task_queue 表(状态枚举一致,直接同步)
|
||||
UPDATE task_queue
|
||||
SET status = NEW.status,
|
||||
updated_at = NOW(),
|
||||
error_message = CASE WHEN NEW.status IN ('FAILED', 'TIMEOUT') THEN NEW.error_message ELSE error_message END
|
||||
WHERE task_id = NEW.task_id;
|
||||
|
||||
-- 2. 更新 user_works 表(需要状态映射)
|
||||
-- PENDING -> PROCESSING, CANCELLED/TIMEOUT -> FAILED
|
||||
UPDATE user_works
|
||||
SET status = CASE
|
||||
WHEN NEW.status IN ('PENDING', 'PROCESSING') THEN 'PROCESSING'
|
||||
WHEN NEW.status = 'COMPLETED' THEN 'COMPLETED'
|
||||
WHEN NEW.status IN ('FAILED', 'CANCELLED', 'TIMEOUT') THEN 'FAILED'
|
||||
ELSE status
|
||||
END,
|
||||
updated_at = NOW(),
|
||||
result_url = CASE WHEN NEW.status = 'COMPLETED' AND NEW.result_url IS NOT NULL THEN NEW.result_url ELSE result_url END
|
||||
WHERE task_id = NEW.task_id;
|
||||
|
||||
-- 3. 更新业务任务表(TIMEOUT 映射为 FAILED)
|
||||
|
||||
-- 文生视频 (txt2vid_*)
|
||||
IF NEW.task_id LIKE 'txt2vid_%' THEN
|
||||
UPDATE text_to_video_tasks
|
||||
SET status = CASE WHEN NEW.status = 'TIMEOUT' THEN 'FAILED' ELSE NEW.status END,
|
||||
updated_at = NOW(),
|
||||
error_message = CASE WHEN NEW.status IN ('FAILED', 'TIMEOUT') THEN COALESCE(NEW.error_message, '任务超时') ELSE error_message END,
|
||||
result_url = CASE WHEN NEW.status = 'COMPLETED' AND NEW.result_url IS NOT NULL THEN NEW.result_url ELSE result_url END
|
||||
WHERE task_id = NEW.task_id;
|
||||
END IF;
|
||||
|
||||
-- 图生视频 (img2vid_*)
|
||||
IF NEW.task_id LIKE 'img2vid_%' THEN
|
||||
UPDATE image_to_video_tasks
|
||||
SET status = CASE WHEN NEW.status = 'TIMEOUT' THEN 'FAILED' ELSE NEW.status END,
|
||||
updated_at = NOW(),
|
||||
error_message = CASE WHEN NEW.status IN ('FAILED', 'TIMEOUT') THEN COALESCE(NEW.error_message, '任务超时') ELSE error_message END,
|
||||
result_url = CASE WHEN NEW.status = 'COMPLETED' AND NEW.result_url IS NOT NULL THEN NEW.result_url ELSE result_url END
|
||||
WHERE task_id = NEW.task_id;
|
||||
END IF;
|
||||
|
||||
-- 分镜视频 (storyboard_*)
|
||||
IF NEW.task_id LIKE 'storyboard_%' THEN
|
||||
UPDATE storyboard_video_tasks
|
||||
SET status = CASE WHEN NEW.status = 'TIMEOUT' THEN 'FAILED' ELSE NEW.status END,
|
||||
updated_at = NOW(),
|
||||
error_message = CASE WHEN NEW.status IN ('FAILED', 'TIMEOUT') THEN COALESCE(NEW.error_message, '任务超时') ELSE error_message END,
|
||||
result_url = CASE WHEN NEW.status = 'COMPLETED' AND NEW.result_url IS NOT NULL THEN NEW.result_url ELSE result_url END
|
||||
WHERE task_id = NEW.task_id;
|
||||
END IF;
|
||||
|
||||
END IF;
|
||||
END//
|
||||
|
||||
-- 恢复分隔符
|
||||
DELIMITER ;
|
||||
|
||||
-- 验证触发器已创建
|
||||
SHOW TRIGGERS LIKE 'task_status';
|
||||
|
||||
-- ============================================
|
||||
-- 使用说明:
|
||||
--
|
||||
-- 1. 连接到 MySQL 数据库
|
||||
-- 2. 选择对应的数据库: USE your_database_name;
|
||||
-- 3. 执行此脚本
|
||||
--
|
||||
-- 注意事项:
|
||||
-- - 触发器会在 task_status 表的 status 字段更新时自动执行
|
||||
-- - 确保所有表都有 task_id 字段作为关联键
|
||||
-- - 状态值使用字符串存储(如 'COMPLETED', 'FAILED' 等)
|
||||
-- ============================================
|
||||
Reference in New Issue
Block a user