From afc9d3d17dfa380da5556a277aee79d7562ac892 Mon Sep 17 00:00:00 2001
From: evo <446796145@qq.com>
Date: Sun, 19 Jul 2026 13:42:43 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=9C=AC=E5=9C=B0?=
=?UTF-8?q?=E5=90=AF=E5=8A=A8=E3=80=81=E6=95=B0=E6=8D=AE=E5=BA=93=E5=88=9D?=
=?UTF-8?q?=E5=A7=8B=E5=8C=96=E4=B8=8E=E6=9E=84=E5=BB=BA=E9=97=AE=E9=A2=98?=
=?UTF-8?q?=20(#314)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* fix: 修复本地启动、数据库初始化与构建问题
* fix: 修复pr的一些问题提交
---
docs/docker/ruoyi-ai/Dockerfile.mysql | 14 +-
docs/docker/ruoyi-ai/docker-compose-all.yaml | 9 +-
docs/docker/ruoyi-ai/docker-compose.yaml | 8 +-
.../{ruoyi-ai-v3_mysql8.sql => ruoyi-ai.sql} | 32 +-
docs/script/sql/snail_job_mysql.sql | 545 ++++++++++++++++++
pom.xml | 13 +-
.../src/main/resources/application-dev.yml | 4 +-
.../src/main/resources/application-prod.yml | 4 +-
.../src/main/resources/application.yml | 4 +-
.../chat/domain/bo/chat/ChatModelBo.java | 5 +
.../src/main/resources/application.yml | 10 +-
.../src/main/resources/application-dev.yml | 6 +-
.../src/main/resources/application-prod.yml | 4 +-
.../src/main/resources/application.yml | 2 +-
ruoyi-modules/ruoyi-aiflow/pom.xml | 15 +
.../ruoyi/workflow/workflow/CompileNode.java | 2 +
.../workflow/workflow/NodeProcessResult.java | 2 +
.../composition/FfmpegCommandBuilderTest.java | 4 +-
.../FfmpegFilterGraphBuilderTest.java | 2 +-
19 files changed, 623 insertions(+), 62 deletions(-)
rename docs/script/sql/{ruoyi-ai-v3_mysql8.sql => ruoyi-ai.sql} (90%)
create mode 100644 docs/script/sql/snail_job_mysql.sql
diff --git a/docs/docker/ruoyi-ai/Dockerfile.mysql b/docs/docker/ruoyi-ai/Dockerfile.mysql
index d5fcecb7..a7b11679 100644
--- a/docs/docker/ruoyi-ai/Dockerfile.mysql
+++ b/docs/docker/ruoyi-ai/Dockerfile.mysql
@@ -1,16 +1,14 @@
# 基于官方MySQL 8.0镜像构建自定义镜像
# 构建命令: docker build -t registry.cn-hangzhou.aliyuncs.com/ruoyi-ai/mysql:v3 -f Dockerfile.mysql .
-FROM mysql:8.0.33
+FROM mysql:8.0
# 设置时区
ENV TZ=Asia/Shanghai
-# 复制初始化脚本和SQL文件到镜像中
-COPY docs/script/docker/mysql/init/init-db.sh /docker-entrypoint-initdb.d/init-db.sh
-COPY docs/script/sql/ruoyi-ai-v3_mysql8.sql /docker-entrypoint-initdb.d/ruoyi-ai-v3_mysql8.sql
-
-# 设置脚本可执行权限
-RUN chmod +x /docker-entrypoint-initdb.d/init-db.sh
+# MySQL 官方入口会按文件名顺序执行初始化目录中的 SQL。
+# ruoyi-ai.sql 会导入 MYSQL_DATABASE,snail_job_mysql.sql 会自行创建并切换数据库。
+COPY docs/script/sql/ruoyi-ai.sql /docker-entrypoint-initdb.d/01-ruoyi-ai.sql
+COPY docs/script/sql/snail_job_mysql.sql /docker-entrypoint-initdb.d/02-snail-job.sql
# MySQL启动参数
CMD ["--default-authentication-plugin=mysql_native_password", \
@@ -18,4 +16,4 @@ CMD ["--default-authentication-plugin=mysql_native_password", \
"--collation-server=utf8mb4_general_ci", \
"--explicit_defaults_for_timestamp=true", \
"--lower_case_table_names=1", \
- "--skip-ssl"]
\ No newline at end of file
+ "--skip-ssl"]
diff --git a/docs/docker/ruoyi-ai/docker-compose-all.yaml b/docs/docker/ruoyi-ai/docker-compose-all.yaml
index b9f330c1..21c781a5 100644
--- a/docs/docker/ruoyi-ai/docker-compose-all.yaml
+++ b/docs/docker/ruoyi-ai/docker-compose-all.yaml
@@ -12,8 +12,6 @@
#
# 镜像仓库地址: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai
-version: '3.8'
-
services:
# ==================== MySQL 数据库 ====================
mysql:
@@ -30,7 +28,10 @@ services:
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
- test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot"]
+ # Force TCP: during first-time initialization MySQL exposes a temporary
+ # socket-only server. A socket ping would mark the service healthy before
+ # the real network listener (used by the backend) is ready.
+ test: ["CMD", "mysqladmin", "ping", "--protocol=tcp", "-h", "127.0.0.1", "-u", "root", "-proot"]
interval: 15s
timeout: 10s
retries: 10
@@ -177,4 +178,4 @@ volumes:
weaviate-data:
minio-data:
logs-data:
- upload-data:
\ No newline at end of file
+ upload-data:
diff --git a/docs/docker/ruoyi-ai/docker-compose.yaml b/docs/docker/ruoyi-ai/docker-compose.yaml
index eac534d8..96c4e949 100644
--- a/docs/docker/ruoyi-ai/docker-compose.yaml
+++ b/docs/docker/ruoyi-ai/docker-compose.yaml
@@ -21,8 +21,8 @@ services:
MYSQL_DATABASE: ruoyi-ai-agent
TZ: Asia/Shanghai
volumes:
- - ./docs/script/docker/mysql/init/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh:ro
- - ./docs/script/sql/ruoyi-ai-v3_mysql8.sql:/docker-entrypoint-initdb.d/ruoyi-ai-v3_mysql8.sql:ro
+ - ../../script/sql/ruoyi-ai.sql:/docker-entrypoint-initdb.d/01-ruoyi-ai.sql:ro
+ - ../../script/sql/snail_job_mysql.sql:/docker-entrypoint-initdb.d/02-snail-job.sql:ro
- mysql-data:/var/lib/mysql
command:
--default-authentication-plugin=mysql_native_password
@@ -32,7 +32,9 @@ services:
--lower_case_table_names=1
--skip-ssl
healthcheck:
- test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot"]
+ # Do not let the socket-only initialization server satisfy the check.
+ # The backend connects over TCP and must wait for that listener.
+ test: ["CMD", "mysqladmin", "ping", "--protocol=tcp", "-h", "127.0.0.1", "-u", "root", "-proot"]
interval: 15s
timeout: 10s
retries: 10
diff --git a/docs/script/sql/ruoyi-ai-v3_mysql8.sql b/docs/script/sql/ruoyi-ai.sql
similarity index 90%
rename from docs/script/sql/ruoyi-ai-v3_mysql8.sql
rename to docs/script/sql/ruoyi-ai.sql
index 1623e046..99c2f027 100644
--- a/docs/script/sql/ruoyi-ai-v3_mysql8.sql
+++ b/docs/script/sql/ruoyi-ai.sql
@@ -1372,13 +1372,13 @@ CREATE TABLE `short_drama_character_appearance` (
-- ----------------------------
-- Records of short_drama_character_appearance
-- ----------------------------
-INSERT INTO `short_drama_character_appearance` VALUES (2075609273836224512, 2075609273630703616, 0, '初始形象', '鹅蛋脸线条柔和,双眼皮杏眼明亮有神,小巧挺拔的鼻梁,薄厚适中的嘴唇微抿,柳叶眉自然舒展。乌黑过肩直发扎成利落低马尾,额前碎发自然垂落。身形修长匀称,穿简洁白色短袖Polo衫,左胸有队徽刺绣,搭配卡其色工装长裤和白色运动鞋,腰间斜挎急救小包。', NULL, -1, -1, '2026-07-10 23:53:08', -1, '2026-07-10 23:53:08', 0, NULL, NULL, 0, NULL, NULL);
-INSERT INTO `short_drama_character_appearance` VALUES (2075609329570136064, 2075609329431724032, 0, '初始形象', '脸型棱角分明,下颌线条锋利。细长眼型,双眼皮,高挺精致的鼻梁,薄唇平直,眉峰上扬的剑眉浓黑有型,右眼尾点缀一颗小痣。乌黑短发以利落背头后梳,露出饱满额头,发质柔顺服帖。身形修长,高挑匀称。身穿深灰色高支羊毛西装,剪裁修身,肩线平直,内搭黑色精纺高领毛衣,下身同色西裤线条流畅,脚著黑色牛津皮鞋。鼻梁上架一副极细金属框运动墨镜,左手腕佩戴银色纤薄腕表。', NULL, -1, -1, '2026-07-10 23:53:22', -1, '2026-07-10 23:53:22', 0, NULL, NULL, 0, NULL, NULL);
-INSERT INTO `short_drama_character_appearance` VALUES (2075609380207968256, 2075609380031807488, 0, '初始形象', '钰珑生着一张轮廓分明的瓜子脸,浓黑剑眉斜抬,衬出几分不驯。眼形偏窄的杏眼微微上挑,单眼皮收紧眼尾,转折处利落带锋。鼻梁小巧挺直,嘴唇薄厚适中,下颌角附近有一道浅淡旧伤痕。一头乌黑长发高高束成马尾,额前碎发桀骜翘起,发尾带着自然微卷。身形修长结实,肩背紧绷,常年奔跑的线条紧致流畅。她穿着白色速干运动背心、深灰色运动短裤,脚踩抓地强劲的黑色跑鞋。右脚踝始终缠着防护绷带,步态间略带拖沓,却像随时要蹬地冲出。手腕戴一只简约的黑色运动手表。', NULL, -1, -1, '2026-07-10 23:53:34', -1, '2026-07-10 23:53:34', 0, NULL, NULL, 0, NULL, NULL);
-INSERT INTO `short_drama_character_appearance` VALUES (2075609601822408704, 2075609601688190976, 0, '初始形象', '瓜子脸,线条利落分明。一双眼裂纤长的丹凤眼,眼尾如燕尾般锐利上扬,内眼角尖细,双眼皮折痕深刻清晰,注视时自带压迫感。鼻梁挺直高耸,鼻翼收窄,鼻尖精致小巧。双唇薄而轮廓分明,上唇弓形,下唇微微内收。眉骨高隆,眉形为天然剑眉,眉头略粗,眉峰微挑,眉尾收得细长利落。鼻梁中段偏左有一颗极浅小痣。一头乌黑长发在脑后高高束成利落马尾,扎紧于顶骨后方,用黑色弹力绳固定,发丝柔顺垂坠,发尾齐整落至肩胛骨下缘,额前无一丝刘海,露出光洁额头。体型修长而匀称,身姿高挑挺拔。上身穿一件白色速干圆领运动短袖T恤,面料带有微透气网眼,外罩一件深蓝色立领轻型教练夹克,拉链半开,袖口设有魔术贴收束,左臂佩戴红色弹性针织队长袖标,表面印有白色「CAPTAIN」字样。下身为黑色弹力紧身运动长裤,高腰设计,膝盖处有拼接剪裁,脚踝处有短拉链。脚蹬一双白色轻量跑步鞋,鞋面为透气网布拼接合成革,鞋带系紧,鞋底防滑纹理清晰。左手腕佩戴一块简约黑色运动电子手表。', NULL, -1, -1, '2026-07-10 23:54:27', -1, '2026-07-10 23:54:27', 0, NULL, NULL, 0, NULL, NULL);
-INSERT INTO `short_drama_character_appearance` VALUES (2077008100070019072, 2077008099927412736, 0, '初始形象', '方形脸,浓黑剑眉,双眼皮,眼神锐利,鼻梁高挺,嘴唇线条分明。乌黑三七分背头,整齐服帖。身形匀称,身高适中。身穿藏青色修身西装外套,内搭白色衬衫,深灰色西裤,黑色系带皮鞋,手腕佩戴简约钢带手表。', 'https://atlas-media.oss-us-west-1.aliyuncs.com/images/dd7454cd25a6486aa5c7c3f8c7085041-3742113260bb4ee9.jpg', -1, -1, '2026-07-14 20:31:35', 1, '2026-07-14 20:38:50', 0, '[\"https://atlas-media.oss-us-west-1.aliyuncs.com/images/dd7454cd25a6486aa5c7c3f8c7085041-3742113260bb4ee9.jpg\"]', '[\"真实电影级画面质感,真实现实场景,色彩饱满通透,画面干净精致,真实感,character design sheet, multiple views reference sheet, front view / side view / back view full body, clean white background, no props, no text. 方形脸,浓黑剑眉,双眼皮,眼神锐利,鼻梁高挺,嘴唇线条分明。乌黑三七分背头,整齐服帖。身形匀称,身高适中。身穿藏青色修身西装外套,内搭白色衬衫,深灰色西裤,黑色系带皮鞋,手腕佩戴简约钢带手表。。角色设定图,画面分为左右两个区域:【左侧区域】占约1/3宽度,是角色的正面特写(完整正脸,最具辨识度的正面形态);【右侧区域】占约2/3宽度,是角色三视图横向排列(从左到右依次为:正面全身、侧面全身、背面全身),三视图高度一致。纯白色背景,无其他元素。\"]', 0, NULL, NULL);
-INSERT INTO `short_drama_character_appearance` VALUES (2077008101487693824, 2077008101332504576, 0, '初始形象', '长方脸型,轮廓分明,额间有浅横纹,颧骨平直。浓眉微斜,眉尾稍疏,单眼皮细长眼,眼窝微陷,目光专注。鼻梁高直,鼻翼内收,唇形薄而线条清晰,下唇中央有浅凹痕。下巴方圆,无明显痣疤。发色花白,短发偏分,发质硬而蓬松,略见鬓角银丝。身形匀称中等,肩背挺直。上身着灰色中山装,领口紧扣齐整,左下口袋别一支钢笔。下装深灰西裤,裤线笔直,脚穿黑色系带皮鞋,鞋面光亮。无多余配饰。', 'https://atlas-media.oss-us-west-1.aliyuncs.com/images/4729daf662de42c0a3472bc05043529c-01a8aaf57a08ea21.jpg', -1, -1, '2026-07-14 20:31:35', 1, '2026-07-14 20:38:50', 0, '[\"https://atlas-media.oss-us-west-1.aliyuncs.com/images/4729daf662de42c0a3472bc05043529c-01a8aaf57a08ea21.jpg\"]', '[\"真实电影级画面质感,真实现实场景,色彩饱满通透,画面干净精致,真实感,character design sheet, multiple views reference sheet, front view / side view / back view full body, clean white background, no props, no text. 长方脸型,轮廓分明,额间有浅横纹,颧骨平直。浓眉微斜,眉尾稍疏,单眼皮细长眼,眼窝微陷,目光专注。鼻梁高直,鼻翼内收,唇形薄而线条清晰,下唇中央有浅凹痕。下巴方圆,无明显痣疤。发色花白,短发偏分,发质硬而蓬松,略见鬓角银丝。身形匀称中等,肩背挺直。上身着灰色中山装,领口紧扣齐整,左下口袋别一支钢笔。下装深灰西裤,裤线笔直,脚穿黑色系带皮鞋,鞋面光亮。无多余配饰。。角色设定图,画面分为左右两个区域:【左侧区域】占约1/3宽度,是角色的正面特写(完整正脸,最具辨识度的正面形态);【右侧区域】占约2/3宽度,是角色三视图横向排列(从左到右依次为:正面全身、侧面全身、背面全身),三视图高度一致。纯白色背景,无其他元素。\"]', 0, NULL, NULL);
-INSERT INTO `short_drama_character_appearance` VALUES (2077008104272711680, 2077008104104939520, 0, '初始形象', '轮廓分明的瓜子脸,下颌线条利落。深邃的双眼皮眼睛眼型偏长,目光沉静;鼻梁高挺笔直;嘴唇厚薄适中,唇峰清晰;浓密的剑眉斜飞入鬓。右侧眉尾处一颗小痣。发色乌黑,及耳的长度微卷自然蓬松,额前碎发刘海随意散落。身形修长挺拔,身高约一米七八。穿着简约白色棉质衬衫,袖口卷至小臂,搭配深灰色直筒长裤与黑色帆布鞋。', 'https://atlas-media.oss-us-west-1.aliyuncs.com/images/aab75b6b-865d-4825-8eee-9e3a45ccec62.png', -1, -1, '2026-07-14 20:31:36', 1, '2026-07-14 20:38:50', 0, '[\"https://atlas-media.oss-us-west-1.aliyuncs.com/images/aab75b6b-865d-4825-8eee-9e3a45ccec62.png\"]', '[\"真实电影级画面质感,真实现实场景,色彩饱满通透,画面干净精致,真实感,character design sheet, multiple views reference sheet, front view / side view / back view full body, clean white background, no props, no text. 轮廓分明的瓜子脸,下颌线条利落。深邃的双眼皮眼睛眼型偏长,目光沉静;鼻梁高挺笔直;嘴唇厚薄适中,唇峰清晰;浓密的剑眉斜飞入鬓。右侧眉尾处一颗小痣。发色乌黑,及耳的长度微卷自然蓬松,额前碎发刘海随意散落。身形修长挺拔,身高约一米七八。穿着简约白色棉质衬衫,袖口卷至小臂,搭配深灰色直筒长裤与黑色帆布鞋。。角色设定图,画面分为左右两个区域:【左侧区域】占约1/3宽度,是角色的正面特写(完整正脸,最具辨识度的正面形态);【右侧区域】占约2/3宽度,是角色三视图横向排列(从左到右依次为:正面全身、侧面全身、背面全身),三视图高度一致。纯白色背景,无其他元素。\"]', 0, NULL, NULL);
+INSERT INTO `short_drama_character_appearance` (`id`, `character_id`, `appearance_index`, `change_reason`, `description`, `reference_image_url`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`, `image_urls`, `image_descriptions`, `selected_image_index`, `previous_image_urls`, `previous_descriptions`) VALUES (2075609273836224512, 2075609273630703616, 0, '初始形象', '鹅蛋脸线条柔和,双眼皮杏眼明亮有神,小巧挺拔的鼻梁,薄厚适中的嘴唇微抿,柳叶眉自然舒展。乌黑过肩直发扎成利落低马尾,额前碎发自然垂落。身形修长匀称,穿简洁白色短袖Polo衫,左胸有队徽刺绣,搭配卡其色工装长裤和白色运动鞋,腰间斜挎急救小包。', NULL, -1, -1, '2026-07-10 23:53:08', -1, '2026-07-10 23:53:08', 0, NULL, NULL, 0, NULL, NULL);
+INSERT INTO `short_drama_character_appearance` (`id`, `character_id`, `appearance_index`, `change_reason`, `description`, `reference_image_url`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`, `image_urls`, `image_descriptions`, `selected_image_index`, `previous_image_urls`, `previous_descriptions`) VALUES (2075609329570136064, 2075609329431724032, 0, '初始形象', '脸型棱角分明,下颌线条锋利。细长眼型,双眼皮,高挺精致的鼻梁,薄唇平直,眉峰上扬的剑眉浓黑有型,右眼尾点缀一颗小痣。乌黑短发以利落背头后梳,露出饱满额头,发质柔顺服帖。身形修长,高挑匀称。身穿深灰色高支羊毛西装,剪裁修身,肩线平直,内搭黑色精纺高领毛衣,下身同色西裤线条流畅,脚著黑色牛津皮鞋。鼻梁上架一副极细金属框运动墨镜,左手腕佩戴银色纤薄腕表。', NULL, -1, -1, '2026-07-10 23:53:22', -1, '2026-07-10 23:53:22', 0, NULL, NULL, 0, NULL, NULL);
+INSERT INTO `short_drama_character_appearance` (`id`, `character_id`, `appearance_index`, `change_reason`, `description`, `reference_image_url`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`, `image_urls`, `image_descriptions`, `selected_image_index`, `previous_image_urls`, `previous_descriptions`) VALUES (2075609380207968256, 2075609380031807488, 0, '初始形象', '钰珑生着一张轮廓分明的瓜子脸,浓黑剑眉斜抬,衬出几分不驯。眼形偏窄的杏眼微微上挑,单眼皮收紧眼尾,转折处利落带锋。鼻梁小巧挺直,嘴唇薄厚适中,下颌角附近有一道浅淡旧伤痕。一头乌黑长发高高束成马尾,额前碎发桀骜翘起,发尾带着自然微卷。身形修长结实,肩背紧绷,常年奔跑的线条紧致流畅。她穿着白色速干运动背心、深灰色运动短裤,脚踩抓地强劲的黑色跑鞋。右脚踝始终缠着防护绷带,步态间略带拖沓,却像随时要蹬地冲出。手腕戴一只简约的黑色运动手表。', NULL, -1, -1, '2026-07-10 23:53:34', -1, '2026-07-10 23:53:34', 0, NULL, NULL, 0, NULL, NULL);
+INSERT INTO `short_drama_character_appearance` (`id`, `character_id`, `appearance_index`, `change_reason`, `description`, `reference_image_url`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`, `image_urls`, `image_descriptions`, `selected_image_index`, `previous_image_urls`, `previous_descriptions`) VALUES (2075609601822408704, 2075609601688190976, 0, '初始形象', '瓜子脸,线条利落分明。一双眼裂纤长的丹凤眼,眼尾如燕尾般锐利上扬,内眼角尖细,双眼皮折痕深刻清晰,注视时自带压迫感。鼻梁挺直高耸,鼻翼收窄,鼻尖精致小巧。双唇薄而轮廓分明,上唇弓形,下唇微微内收。眉骨高隆,眉形为天然剑眉,眉头略粗,眉峰微挑,眉尾收得细长利落。鼻梁中段偏左有一颗极浅小痣。一头乌黑长发在脑后高高束成利落马尾,扎紧于顶骨后方,用黑色弹力绳固定,发丝柔顺垂坠,发尾齐整落至肩胛骨下缘,额前无一丝刘海,露出光洁额头。体型修长而匀称,身姿高挑挺拔。上身穿一件白色速干圆领运动短袖T恤,面料带有微透气网眼,外罩一件深蓝色立领轻型教练夹克,拉链半开,袖口设有魔术贴收束,左臂佩戴红色弹性针织队长袖标,表面印有白色「CAPTAIN」字样。下身为黑色弹力紧身运动长裤,高腰设计,膝盖处有拼接剪裁,脚踝处有短拉链。脚蹬一双白色轻量跑步鞋,鞋面为透气网布拼接合成革,鞋带系紧,鞋底防滑纹理清晰。左手腕佩戴一块简约黑色运动电子手表。', NULL, -1, -1, '2026-07-10 23:54:27', -1, '2026-07-10 23:54:27', 0, NULL, NULL, 0, NULL, NULL);
+INSERT INTO `short_drama_character_appearance` (`id`, `character_id`, `appearance_index`, `change_reason`, `description`, `reference_image_url`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`, `image_urls`, `image_descriptions`, `selected_image_index`, `previous_image_urls`, `previous_descriptions`) VALUES (2077008100070019072, 2077008099927412736, 0, '初始形象', '方形脸,浓黑剑眉,双眼皮,眼神锐利,鼻梁高挺,嘴唇线条分明。乌黑三七分背头,整齐服帖。身形匀称,身高适中。身穿藏青色修身西装外套,内搭白色衬衫,深灰色西裤,黑色系带皮鞋,手腕佩戴简约钢带手表。', 'https://atlas-media.oss-us-west-1.aliyuncs.com/images/dd7454cd25a6486aa5c7c3f8c7085041-3742113260bb4ee9.jpg', -1, -1, '2026-07-14 20:31:35', 1, '2026-07-14 20:38:50', 0, '[\"https://atlas-media.oss-us-west-1.aliyuncs.com/images/dd7454cd25a6486aa5c7c3f8c7085041-3742113260bb4ee9.jpg\"]', '[\"真实电影级画面质感,真实现实场景,色彩饱满通透,画面干净精致,真实感,character design sheet, multiple views reference sheet, front view / side view / back view full body, clean white background, no props, no text. 方形脸,浓黑剑眉,双眼皮,眼神锐利,鼻梁高挺,嘴唇线条分明。乌黑三七分背头,整齐服帖。身形匀称,身高适中。身穿藏青色修身西装外套,内搭白色衬衫,深灰色西裤,黑色系带皮鞋,手腕佩戴简约钢带手表。。角色设定图,画面分为左右两个区域:【左侧区域】占约1/3宽度,是角色的正面特写(完整正脸,最具辨识度的正面形态);【右侧区域】占约2/3宽度,是角色三视图横向排列(从左到右依次为:正面全身、侧面全身、背面全身),三视图高度一致。纯白色背景,无其他元素。\"]', 0, NULL, NULL);
+INSERT INTO `short_drama_character_appearance` (`id`, `character_id`, `appearance_index`, `change_reason`, `description`, `reference_image_url`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`, `image_urls`, `image_descriptions`, `selected_image_index`, `previous_image_urls`, `previous_descriptions`) VALUES (2077008101487693824, 2077008101332504576, 0, '初始形象', '长方脸型,轮廓分明,额间有浅横纹,颧骨平直。浓眉微斜,眉尾稍疏,单眼皮细长眼,眼窝微陷,目光专注。鼻梁高直,鼻翼内收,唇形薄而线条清晰,下唇中央有浅凹痕。下巴方圆,无明显痣疤。发色花白,短发偏分,发质硬而蓬松,略见鬓角银丝。身形匀称中等,肩背挺直。上身着灰色中山装,领口紧扣齐整,左下口袋别一支钢笔。下装深灰西裤,裤线笔直,脚穿黑色系带皮鞋,鞋面光亮。无多余配饰。', 'https://atlas-media.oss-us-west-1.aliyuncs.com/images/4729daf662de42c0a3472bc05043529c-01a8aaf57a08ea21.jpg', -1, -1, '2026-07-14 20:31:35', 1, '2026-07-14 20:38:50', 0, '[\"https://atlas-media.oss-us-west-1.aliyuncs.com/images/4729daf662de42c0a3472bc05043529c-01a8aaf57a08ea21.jpg\"]', '[\"真实电影级画面质感,真实现实场景,色彩饱满通透,画面干净精致,真实感,character design sheet, multiple views reference sheet, front view / side view / back view full body, clean white background, no props, no text. 长方脸型,轮廓分明,额间有浅横纹,颧骨平直。浓眉微斜,眉尾稍疏,单眼皮细长眼,眼窝微陷,目光专注。鼻梁高直,鼻翼内收,唇形薄而线条清晰,下唇中央有浅凹痕。下巴方圆,无明显痣疤。发色花白,短发偏分,发质硬而蓬松,略见鬓角银丝。身形匀称中等,肩背挺直。上身着灰色中山装,领口紧扣齐整,左下口袋别一支钢笔。下装深灰西裤,裤线笔直,脚穿黑色系带皮鞋,鞋面光亮。无多余配饰。。角色设定图,画面分为左右两个区域:【左侧区域】占约1/3宽度,是角色的正面特写(完整正脸,最具辨识度的正面形态);【右侧区域】占约2/3宽度,是角色三视图横向排列(从左到右依次为:正面全身、侧面全身、背面全身),三视图高度一致。纯白色背景,无其他元素。\"]', 0, NULL, NULL);
+INSERT INTO `short_drama_character_appearance` (`id`, `character_id`, `appearance_index`, `change_reason`, `description`, `reference_image_url`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`, `image_urls`, `image_descriptions`, `selected_image_index`, `previous_image_urls`, `previous_descriptions`) VALUES (2077008104272711680, 2077008104104939520, 0, '初始形象', '轮廓分明的瓜子脸,下颌线条利落。深邃的双眼皮眼睛眼型偏长,目光沉静;鼻梁高挺笔直;嘴唇厚薄适中,唇峰清晰;浓密的剑眉斜飞入鬓。右侧眉尾处一颗小痣。发色乌黑,及耳的长度微卷自然蓬松,额前碎发刘海随意散落。身形修长挺拔,身高约一米七八。穿着简约白色棉质衬衫,袖口卷至小臂,搭配深灰色直筒长裤与黑色帆布鞋。', 'https://atlas-media.oss-us-west-1.aliyuncs.com/images/aab75b6b-865d-4825-8eee-9e3a45ccec62.png', -1, -1, '2026-07-14 20:31:36', 1, '2026-07-14 20:38:50', 0, '[\"https://atlas-media.oss-us-west-1.aliyuncs.com/images/aab75b6b-865d-4825-8eee-9e3a45ccec62.png\"]', '[\"真实电影级画面质感,真实现实场景,色彩饱满通透,画面干净精致,真实感,character design sheet, multiple views reference sheet, front view / side view / back view full body, clean white background, no props, no text. 轮廓分明的瓜子脸,下颌线条利落。深邃的双眼皮眼睛眼型偏长,目光沉静;鼻梁高挺笔直;嘴唇厚薄适中,唇峰清晰;浓密的剑眉斜飞入鬓。右侧眉尾处一颗小痣。发色乌黑,及耳的长度微卷自然蓬松,额前碎发刘海随意散落。身形修长挺拔,身高约一米七八。穿着简约白色棉质衬衫,袖口卷至小臂,搭配深灰色直筒长裤与黑色帆布鞋。。角色设定图,画面分为左右两个区域:【左侧区域】占约1/3宽度,是角色的正面特写(完整正脸,最具辨识度的正面形态);【右侧区域】占约2/3宽度,是角色三视图横向排列(从左到右依次为:正面全身、侧面全身、背面全身),三视图高度一致。纯白色背景,无其他元素。\"]', 0, NULL, NULL);
-- ----------------------------
-- Table structure for short_drama_location
@@ -1563,15 +1563,15 @@ CREATE TABLE `short_drama_storyboard` (
-- ----------------------------
-- Records of short_drama_storyboard
-- ----------------------------
-INSERT INTO `short_drama_storyboard` VALUES (2077008643517599744, 2077007721974484992, 2077007722058371072, 1, '辞退邮件与触电穿越', '深夜办公室,电脑屏幕亮光映照50岁小明苍老疲惫的脸,他盯着屏幕上的辞退邮件,眼神失焦。他拿起手机看到离婚协议截图,手开始颤抖,手机滑落。他试图扶住桌子,手肘碰倒旁边电水壶,水洒向插座,火花迸溅,小明身体后仰倒在椅子上,画面渐黑。', 'suspense', '平视近景', '缓推至固定', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"办公桌前\"}]', '现代办公室_夜', '{\"panel_number\":1,\"scene_summary\":\"深夜办公室,电脑屏幕亮光映照50岁小明苍老疲惫的脸,他盯着屏幕上的辞退邮件,眼神失焦。他拿起手机看到离婚协议截图,手开始颤抖,手机滑落。他试图扶住桌子,手肘碰倒旁边电水壶,水洒向插座,火花迸溅,小明身体后仰倒在椅子上,画面渐黑。\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"低调硬光,保留阴影层次\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"办公桌前\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"中浅景深,保留环境压迫感\",\"color_tone\":\"冷暗色调\"}', '[{\"name\":\"小明\",\"acting\":\"控制呼吸与眨眼频率,用迟疑、停顿和缓慢转头制造紧张感,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:现代办公室_夜,重新交代人物位置、朝向与环境\",\"end_state\":\"小明倒在椅子上,身体后仰,火花在插座处闪烁,画面渐黑\",\"continuity_action\":\"小明身体失去平衡向后倒,火花仍在闪烁\",\"spatial_anchor\":\"小明位于画面中央偏左,办公桌桌面杂乱的纸张和电脑屏幕占据右半,电水壶翻倒在桌角\",\"present_characters\":[\"小明\"],\"scene_number\":1,\"segment_number\":1,\"segment_goal\":\"建立小明被辞退后的绝望状态并触发穿越\",\"segment_result\":\"小明触电倒下,穿越启动\",\"bridge_in\":\"开场建立办公室环境与人物状态\",\"bridge_out\":\"火花和倒下的动作形成视觉钩子,画面切黑\",\"beat_type\":\"trigger\",\"narrative_cause\":\"小明收到辞退邮件和离婚协议,情绪崩溃导致意外\",\"character_goal\":\"缓解内心痛苦,但无意识动作导致触电\",\"story_action\":\"手抖放下手机,碰倒水壶,水溅到插座引发火花\",\"story_result\":\"小明触电昏迷,穿越时空\",\"next_hook\":\"下一镜头需要展示小明醒来后的新环境\"}', '办公室昏暗,只有电脑屏幕亮着。50岁的小明穿着皱巴巴的衬衫,盯着屏幕上的辞退邮件。他拿起手机,看到妻子发来的离婚协议截图。手抖着放下手机,碰倒桌上的电水壶,水洒在插座上。火花闪过,小明倒在椅子上。', '小明坐在深夜办公室的办公桌前,电脑屏幕蓝光照亮他苍老疲惫的脸,桌上散落纸张,他手中拿着手机看着离婚协议截图,旁边的电水壶摇摇欲坠,背景黑暗,气氛压抑。', 8, '深夜办公室,中年男子坐在办公桌前,电脑屏幕光映照脸庞,他盯着屏幕,眼神失焦。他拿起手机看向屏幕,手开始颤抖,手机滑落。他试图扶住桌子,手肘碰倒旁边的电水壶,水洒向插座,火花迸溅,他身体后仰倒在椅子上。镜头从平视中景缓缓推近至脸部特写,然后固定,画面渐黑。', 'https://atlas-media.oss-us-west-1.aliyuncs.com/videos/cgt-20260714203912-pshlw-0.mp4', '472c35ef433744c8a4cbd35a438ad35e', 'done', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:41:42', 0);
-INSERT INTO `short_drama_storyboard` VALUES (2077008643727314944, 2077007721974484992, 2077007722058371072, 2, '重生1985', '小明躺在地上,睁开眼,阳光刺眼。他坐起身,低头看见自己穿着蓝色工装,手背皮肤光滑无皱纹。他摸自己的脸,感觉紧致年轻。旁边老式自行车铃响,一个年轻人骑车路过喊“小明,上班迟到了!”小明看向路口停着的二八自行车和墙上红色标语“时间就是金钱”,低头看手腕电子表显示1985.6,他深吸一口气,眼神从迷茫变成坚定,低语“再来一次”。', 'emotion', '平视近景转特写', '缓推加环绕', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"地面中央\"}]', '小巷_日_1985', '{\"panel_number\":2,\"scene_summary\":\"小明躺在地上,睁开眼,阳光刺眼。他坐起身,低头看见自己穿着蓝色工装,手背皮肤光滑无皱纹。他摸自己的脸,感觉紧致年轻。旁边老式自行车铃响,一个年轻人骑车路过喊“小明,上班迟到了!”小明看向路口停着的二八自行车和墙上红色标语“时间就是金钱”,低头看手腕电子表显示1985.6,他深吸一口气,眼神从迷茫变成坚定,低语“再来一次”。\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"柔和侧光,突出面部情绪\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"地面中央\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"浅景深,突出角色表情\",\"color_tone\":\"克制柔和色调\"}', '[{\"name\":\"小明\",\"acting\":\"表情逐步变化,先克制呼吸,再通过眼神和细微肢体释放情绪,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:小巷_日_1985,重新交代人物位置、朝向与环境\",\"end_state\":\"小明站立,眼神坚定,低头看电子表,嘴唇微动说“再来一次”\",\"continuity_action\":\"小明视线从手表移向前方街道,准备行动\",\"spatial_anchor\":\"小明位于小巷中央地面,左侧墙上有红色标语,右侧有自行车和骑车年轻人,背景是老旧居民楼\",\"present_characters\":[\"小明\",\"年轻人(群众)\"],\"scene_number\":2,\"segment_number\":1,\"segment_goal\":\"展示小明穿越后醒来发现变成年轻模样\",\"segment_result\":\"小明确认自己回到1985年,眼神由迷茫变坚定\",\"bridge_in\":\"画面从黑场渐亮,小明面部特写从模糊到清晰\",\"bridge_out\":\"小明深吸一口气并说出内心决定,视线看向前方街道\",\"beat_type\":\"reaction\",\"narrative_cause\":\"小明触电昏迷,穿越时空\",\"character_goal\":\"确认自身状态和时代\",\"story_action\":\"坐起、摸脸、看周围、看电子表\",\"story_result\":\"小明确定自己重生,产生第二次人生的决心\",\"next_hook\":\"下一镜头展示小明带着方案前往街道办\"}', '小明醒来,发现自己躺在地上,身穿80年代蓝色工装。他摸着脸——没有皱纹。旁边老式自行车铃响,一个年轻人喊:“小明,上班迟到了!”小明看着路口的二八自行车,墙上的标语“时间就是金钱”,愣住。他低头看手腕上的电子表:1985年6月。他深吸一口气,眼神从迷茫变成坚定:“再来一次。”', '小明坐在小巷地面,身穿蓝色工装,阳光从巷口射入照亮他的脸,他摸着自己年轻的脸庞,眼神迷茫;背景是青砖墙和红色标语,一辆老式自行车靠在墙边。', 10, '年轻男子躺在地面上,阳光刺眼,他缓缓睁开眼,然后坐起身,低头看自己双手和蓝色工装,摸自己的脸,表情从迷茫到惊讶。旁边传来自行车铃声,他转头看向巷口的二八自行车和「时间就是金钱」标语,再低头看手腕上的电子表,眼神从迷茫变为坚定。镜头从全景缓慢推近至脸部特写,同时环绕拍摄,最后固定。', 'https://atlas-media.oss-us-west-1.aliyuncs.com/videos/cgt-20260714203913-lxtrb-0.mp4', 'b3b6843f0b78433893608675852797bd', 'done', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:47:08', 0);
-INSERT INTO `short_drama_storyboard` VALUES (2077008643781840896, 2077007721974484992, 2077007722058371072, 3, '街道办受阻遇老陈', '街道办门口,小明拿着一叠手写方案快步走向大门。门卫伸出手臂挡住他。小明急切地解释“同志,我有商业计划,能帮工厂接全国订单!”门卫皱眉推他出去,纸张散落一地。小明蹲下慌乱捡纸。路对面一个穿中山装的中年男人(老陈)弯腰捡起一张,看着上面的字,抬头问:“你这上面写的‘电商’是啥?”小明抬头,眼睛一亮:“陈厂长,我能让您仓库里的积压货三天卖掉。”', 'daily', '平视中景', '轻微跟随', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"门口台阶下\"},{\"name\":\"老陈\",\"appearance\":\"初始形象\",\"slot\":\"路对面人行道\"}]', '街道办门口_日', '{\"panel_number\":3,\"scene_summary\":\"街道办门口,小明拿着一叠手写方案快步走向大门。门卫伸出手臂挡住他。小明急切地解释“同志,我有商业计划,能帮工厂接全国订单!”门卫皱眉推他出去,纸张散落一地。小明蹲下慌乱捡纸。路对面一个穿中山装的中年男人(老陈)弯腰捡起一张,看着上面的字,抬头问:“你这上面写的‘电商’是啥?”小明抬头,眼睛一亮:“陈厂长,我能让您仓库里的积压货三天卖掉。”\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"自然柔光,肤色与环境协调\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"门口台阶下\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"老陈\",\"screen_position\":\"路对面人行道\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"中等景深,兼顾角色与环境\",\"color_tone\":\"自然统一色调\"}', '[{\"name\":\"小明\",\"acting\":\"保持自然呼吸和目光交流,动作从起始状态平滑过渡到结束状态,按前段、中段、后段完成三个连续表演节拍\"},{\"name\":\"老陈\",\"acting\":\"保持自然呼吸和目光交流,动作从起始状态平滑过渡到结束状态,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:街道办门口_日,重新交代人物位置、朝向与环境\",\"end_state\":\"小明蹲在地上抬头看向老陈,老陈站在路对面手持一张纸,两人视线交汇\",\"continuity_action\":\"小明视线锁定老陈,准备进一步解释\",\"spatial_anchor\":\"街道办铁门在画面左侧,门卫站在台阶上;小明在台阶下中央;老陈在画面右侧路对面行道树旁\",\"present_characters\":[\"小明\",\"老陈\",\"门卫(群众)\"],\"scene_number\":3,\"segment_number\":1,\"segment_goal\":\"小明尝试进入街道办被门卫阻拦,吸引老陈注意\",\"segment_result\":\"老陈捡起散落的方案并开始询问\",\"bridge_in\":\"小明拿着方案走向街道办大门,眼神充满希望\",\"bridge_out\":\"老陈目光落在方案上,问题引发后续对话\",\"beat_type\":\"trigger\",\"narrative_cause\":\"小明确定自己重生,产生第二次人生的决心\",\"character_goal\":\"进入街道办寻求支持\",\"story_action\":\"小明上前解释,被推倒,捡纸时发现老陈在看方案\",\"story_result\":\"老陈对方案产生好奇并主动与小明对话\",\"next_hook\":\"下一镜头展示两人在废弃仓库深入讨论\"}', '小明拿着一叠手写方案,站在街道办门口。门卫拦住他。小明:“同志,我有商业计划,能帮工厂接全国订单!”门卫:“胡闹!”推他出去。小明捡起散落的纸,抬头看到路对面一个穿中山装的中年男人(老陈)正在看他的方案。老陈:“你这上面写的‘电商’是啥?”小明眼睛一亮:“陈厂长,我能让您仓库里的积压货三天卖掉。”', '小明站在街道办门口台阶下,手拿一叠方案,表情急切;门卫站在台阶上伸手阻拦;路对面老陈穿中山装低头看纸,阳光从右上方照射。', 8, '年轻男子拿着一叠手写方案快步走向街道办大门,门卫伸出手臂阻挡。年轻男子急切地解释,门卫皱眉推他出去,纸张散落。年轻男子蹲下慌乱捡纸。路对面一位中年男子弯腰捡起一张纸,看着上面,抬头问话。镜头平视跟随年轻男子移动,然后切换到越肩视角展示门卫的阻拦动作。', 'https://atlas-media.oss-us-west-1.aliyuncs.com/videos/cgt-20260714203920-6rw8b-0.mp4', '7173c12461574b8abd063c46fc625ebe', 'done', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:47:09', 0);
-INSERT INTO `short_drama_storyboard` VALUES (2077008643823783936, 2077007721974484992, 2077007722058371072, 4, '仓库达成合作', '废弃仓库内,一张木桌两把椅子,小明和老陈对面而坐。桌上摆着两盒烟,老陈抽出一根点燃:“我信你一次,但怎么弄?”小明拿起笔在纸上画示意图:“用电话线连电脑,搞个库存信息库。我写程序。”老陈皱眉:“钱呢?”小明:“我先拉商户,您出设备。”老陈抖了抖烟灰,沉默几秒后点头。小明转头看向墙上的标语“工业学大庆”,低声:“这次一定要成。”', 'daily', '平视中景', '缓推', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"桌子一侧\"},{\"name\":\"老陈\",\"appearance\":\"初始形象\",\"slot\":\"桌子另一侧\"}]', '废弃仓库_日', '{\"panel_number\":4,\"scene_summary\":\"废弃仓库内,一张木桌两把椅子,小明和老陈对面而坐。桌上摆着两盒烟,老陈抽出一根点燃:“我信你一次,但怎么弄?”小明拿起笔在纸上画示意图:“用电话线连电脑,搞个库存信息库。我写程序。”老陈皱眉:“钱呢?”小明:“我先拉商户,您出设备。”老陈抖了抖烟灰,沉默几秒后点头。小明转头看向墙上的标语“工业学大庆”,低声:“这次一定要成。”\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"自然柔光,肤色与环境协调\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"桌子一侧\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"老陈\",\"screen_position\":\"桌子另一侧\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"中等景深,兼顾角色与环境\",\"color_tone\":\"自然统一色调\"}', '[{\"name\":\"小明\",\"acting\":\"保持自然呼吸和目光交流,动作从起始状态平滑过渡到结束状态,按前段、中段、后段完成三个连续表演节拍\"},{\"name\":\"老陈\",\"acting\":\"保持自然呼吸和目光交流,动作从起始状态平滑过渡到结束状态,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:废弃仓库_日,重新交代人物位置、朝向与环境\",\"end_state\":\"老陈点头,小明目光从墙上标语收回,表情坚定\",\"continuity_action\":\"小明视线从标语移回老陈,准备下一步计划\",\"spatial_anchor\":\"桌子位于仓库中央,小明坐画面左侧,老陈坐右侧,后面墙上有标语,水泥地面空旷\",\"present_characters\":[\"小明\",\"老陈\"],\"scene_number\":4,\"segment_number\":1,\"segment_goal\":\"小明与老陈在仓库达成合作意向\",\"segment_result\":\"老陈决定信任小明,提供设备支持\",\"bridge_in\":\"两人对面而坐,桌上两盒烟,老陈面露犹豫\",\"bridge_out\":\"老陈点头,小明看向墙上标语,低声坚定信念\",\"beat_type\":\"action\",\"narrative_cause\":\"老陈对方案产生好奇并主动与小明对话\",\"character_goal\":\"说服老陈提供设备支持\",\"story_action\":\"小明画图解释技术方案,提出资源分工\",\"story_result\":\"老陈同意合作,小明获得初步资源\",\"next_hook\":\"下一镜头展示工厂办公室内新进展与危机\"}', '老陈和小明对面坐着。桌上摆着两盒烟。老陈:“我信你一次,但怎么弄?”小明在纸上画:“用电话线连电脑,搞个库存信息库。我写程序。”老陈:“钱呢?”小明:“我先拉商户,您出设备。”老陈犹豫后点头。小明看着仓库墙上的“工业学大庆”,低声:“这次一定要成。”', '小明和老陈在废弃仓库的旧木桌对面而坐,桌上两盒烟和散落的纸张;老陈夹烟沉思,小明执笔画示意图;背景墙上红色大字「工业学大庆」,高窗透入光线。', 8, '年轻男子和中年男子对面坐在木桌两侧,桌上摆着两盒烟。中年男子抽出一根点燃,年轻男子拿起笔在纸上画图并说话。中年男子皱眉问话,年轻男子抬头回答,伸手指向纸面。中年男子抖烟灰后点头。年轻男子转头看向墙上的标语,低声自语。镜头从两人的中景缓缓推近至年轻男子的脸部,然后固定。', NULL, 'd4665ee140f34673914292855d389d38', 'generating', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:39:20', 0);
-INSERT INTO `short_drama_storyboard` VALUES (2077008643874115584, 2077007721974484992, 2077007722058371072, 5, '工商检查危机', '工厂办公室内,木制办公桌上转盘电话响起。老陈拿起听筒,脸色逐渐变白,手指捏紧话筒。挂断后他转身对旁边椅子上的小明说:“国营百货举报我们投机倒把,工商明天来查。”小明快速翻看桌上的账本,抬起头:“我们走的是信息服务,不是倒卖。”老陈叹气:“没人认可这个。”小明合上账本,直视老陈:“明天我来说。”', 'suspense', '平视近景', '缓推', '[{\"name\":\"老陈\",\"appearance\":\"初始形象\",\"slot\":\"办公桌后\"},{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"办公桌旁椅子\"}]', '工厂办公室_日', '{\"panel_number\":5,\"scene_summary\":\"工厂办公室内,木制办公桌上转盘电话响起。老陈拿起听筒,脸色逐渐变白,手指捏紧话筒。挂断后他转身对旁边椅子上的小明说:“国营百货举报我们投机倒把,工商明天来查。”小明快速翻看桌上的账本,抬起头:“我们走的是信息服务,不是倒卖。”老陈叹气:“没人认可这个。”小明合上账本,直视老陈:“明天我来说。”\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"低调硬光,保留阴影层次\"},\"characters\":[{\"name\":\"老陈\",\"screen_position\":\"办公桌后\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"小明\",\"screen_position\":\"办公桌旁椅子\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"中浅景深,保留环境压迫感\",\"color_tone\":\"冷暗色调\"}', '[{\"name\":\"老陈\",\"acting\":\"控制呼吸与眨眼频率,用迟疑、停顿和缓慢转头制造紧张感\"},{\"name\":\"小明\",\"acting\":\"控制呼吸与眨眼频率,用迟疑、停顿和缓慢转头制造紧张感\"}]', '{\"start_state\":\"新场景建立:工厂办公室_日,重新交代人物位置、朝向与环境\",\"end_state\":\"小明合上账本,直视老陈,表情自信;老陈眉头紧锁但不再反驳\",\"continuity_action\":\"小明视线坚定,老陈目光仍带忧虑但转向信任\",\"spatial_anchor\":\"老陈位于画面左侧办公桌后,小明在右侧椅子,窗外可见厂区烟囱,文件柜靠墙\",\"present_characters\":[\"小明\",\"老陈\"],\"scene_number\":5,\"segment_number\":1,\"segment_goal\":\"工厂办公室内老陈接到工商查处的电话,小明提出应对\",\"segment_result\":\"小明决定亲自去面对工商检查\",\"bridge_in\":\"办公室电话铃响打破平静,老陈接听表情变化\",\"bridge_out\":\"老陈看向小明,小明坚定地说“明天我来说”\",\"beat_type\":\"trigger\",\"narrative_cause\":\"老陈同意合作,小明获得初步资源\",\"character_goal\":\"让老陈相信自己能解决危机\",\"story_action\":\"小明解释模式合法性,并主动承担交涉责任\",\"story_result\":\"老陈部分安心,小明获得应对危机的授权\",\"next_hook\":\"下一镜头展示出租屋内团队内部争吵与统一思想\"}', '办公桌上电话响起。老陈接起,脸色变白。挂断后对小明:“国营百货举报我们投机倒把,工商明天来查。”小明快速翻看账本:“我们走的是信息服务,不是倒卖。”老陈:“没人认可这个。”小明:“明天我来说。”', '工厂办公室内,老陈坐在办公桌后接电话,脸色凝重;小明坐在侧面椅子上翻看账本,窗外可见工厂烟囱;桌上转盘电话和文件散落。', 7, '办公桌上黑色转盘电话响起。中年男子坐在桌后拿起听筒,脸色逐渐变白,手指捏紧话筒。他挂断后转身对旁边的年轻男子说话。年轻男子快速翻看账本,抬起头直视对方回话,然后合上账本。镜头从电话特写缓慢推近至中年男子面部,再缓拉到两人中景。', 'https://atlas-media.oss-us-west-1.aliyuncs.com/videos/cgt-20260714203917-gnb2m-0.mp4', '61edb37e979a426f9e8272786243c243', 'done', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:41:08', 0);
-INSERT INTO `short_drama_storyboard` VALUES (2077008643920252928, 2077007721974484992, 2077007722058371072, 6, '出租屋统一思想', '狭小出租屋,灯光昏暗。两个年轻团队成员拍桌站起:“不干了,风险太大!”老陈坐在床边沉默,低头看地面。小明从墙角拿起一块黑板放在桌上,画出一条时间轴,标注1985年,指向电脑图标。他转头对大家说:“1985年,电脑刚进中国,我们的优势是信息差。不做商品买卖,做平台——帮工厂和供销社匹配库存。”他指着黑板:“明天工商来,我就说这是‘技术咨询’。”老陈抬头,皱眉问:“你哪来的这些?”小明停顿一下:“梦里学的。”', 'emotion', '平视近景转特写', '缓推加环绕', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"桌边站立\"},{\"name\":\"老陈\",\"appearance\":\"初始形象\",\"slot\":\"床边坐着\"}]', '出租屋_夜', '{\"panel_number\":6,\"scene_summary\":\"狭小出租屋,灯光昏暗。两个年轻团队成员拍桌站起:“不干了,风险太大!”老陈坐在床边沉默,低头看地面。小明从墙角拿起一块黑板放在桌上,画出一条时间轴,标注1985年,指向电脑图标。他转头对大家说:“1985年,电脑刚进中国,我们的优势是信息差。不做商品买卖,做平台——帮工厂和供销社匹配库存。”他指着黑板:“明天工商来,我就说这是‘技术咨询’。”老陈抬头,皱眉问:“你哪来的这些?”小明停顿一下:“梦里学的。”\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"柔和侧光,突出面部情绪\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"桌边站立\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"老陈\",\"screen_position\":\"床边坐着\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"浅景深,突出角色表情\",\"color_tone\":\"克制柔和色调\"}', '[{\"name\":\"小明\",\"acting\":\"表情逐步变化,先克制呼吸,再通过眼神和细微肢体释放情绪,按前段、中段、后段完成三个连续表演节拍\"},{\"name\":\"老陈\",\"acting\":\"表情逐步变化,先克制呼吸,再通过眼神和细微肢体释放情绪,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:出租屋_夜,重新交代人物位置、朝向与环境\",\"end_state\":\"老陈抬头看向小明,两个年轻人停止争吵望向黑板,小黑板上画有时间轴和“电脑”字样\",\"continuity_action\":\"小明手指还指着黑板上的“技术咨询”,等待异议\",\"spatial_anchor\":\"画面中央是一张桌子,黑板靠在桌上,小明站在桌子左侧画黑板,老陈坐在右侧床边,两个年轻人站在桌子远端\",\"present_characters\":[\"小明\",\"老陈\",\"两个年轻人(群众)\"],\"scene_number\":6,\"segment_number\":1,\"segment_goal\":\"出租屋内团队成员因风险而退缩,小明用时间轴规划说服大家\",\"segment_result\":\"老陈和小明达成共识,团队重拾信心\",\"bridge_in\":\"出租屋内两个年轻人拍桌起身,气氛紧张\",\"bridge_out\":\"老陈抬头看小明,眼神中带着疑惑与信任\",\"beat_type\":\"decision\",\"narrative_cause\":\"老陈部分安心,小明获得应对危机的授权\",\"character_goal\":\"稳定团队,统一认知\",\"story_action\":\"小明画出时间轴,解释信息差优势和应对策略\",\"story_result\":\"团队情绪稳定,老陈虽疑惑但接受解释\",\"next_hook\":\"下一镜头展示百货大楼门口工商检查的结果\"}', '团队成员(两个年轻人)拍桌:“不干了,风险太大!”老陈沉默。小明拿出一块黑板,画出时间轴:“1985年,电脑刚进中国,我们的优势是信息差。不做商品买卖,做平台——帮工厂和供销社匹配库存。”他指着黑板:“明天工商来,我就说这是‘技术咨询’。”老陈抬头:“你哪来的这些?”小明:“梦里学的。”', '出租屋内,小明站在桌子左侧画黑板,黑板上粉笔写着时间轴和「电脑」字样;老陈坐在床边抬头看;两个年轻人站在桌子远端,表情从愤怒转为倾听;昏黄灯光下气氛紧张。', 10, '狭小出租屋内,两个年轻人拍桌站起情绪激动。中年男子坐在床边低头沉默。年轻男子从墙角拿起一块黑板放在桌上,用粉笔画出一条时间轴,标注1985和电脑图标,转头对大家说话并指向黑板。中年男子抬起头皱眉问话,年轻男子停顿后回答。镜头从全景缓慢推近至年轻男子面部特写,然后环绕拍摄黑板上的时间轴。', NULL, NULL, 'pending', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:33:44', 0);
-INSERT INTO `short_drama_storyboard` VALUES (2077008643978973184, 2077007721974484992, 2077007722058371072, 7, '工商检查通过', '百货大楼门口台阶上,工商人员和穿藏青色西装的中年经理站在一起。小明从公文包拿出一叠表格递过去:“这是通过我们信息服务成交的订单,全部有记录,不碰资金,只收咨询费。”工商人员翻看后递给旁边的百货经理。经理推了推眼镜细看,低声问小明:“这方法能帮我们清库存?”小明点头:“三天见效。”经理转向工商人员点了点头。工商人员收起表格:“先观察。”', 'daily', '平视中景', '轻微跟随', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"台阶上右侧\"},{\"name\":\"老陈\",\"appearance\":\"初始形象\",\"slot\":\"台阶上小明身后\"},{\"name\":\"百货经理\",\"appearance\":\"初始形象\",\"slot\":\"台阶上中央\"}]', '百货大楼门口_日', '{\"panel_number\":7,\"scene_summary\":\"百货大楼门口台阶上,工商人员和穿藏青色西装的中年经理站在一起。小明从公文包拿出一叠表格递过去:“这是通过我们信息服务成交的订单,全部有记录,不碰资金,只收咨询费。”工商人员翻看后递给旁边的百货经理。经理推了推眼镜细看,低声问小明:“这方法能帮我们清库存?”小明点头:“三天见效。”经理转向工商人员点了点头。工商人员收起表格:“先观察。”\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"自然柔光,肤色与环境协调\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"台阶上右侧\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"老陈\",\"screen_position\":\"台阶上小明身后\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"百货经理\",\"screen_position\":\"台阶上中央\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"中等景深,兼顾角色与环境\",\"color_tone\":\"自然统一色调\"}', '[{\"name\":\"小明\",\"acting\":\"保持自然呼吸和目光交流,动作从起始状态平滑过渡到结束状态,按前段、中段、后段完成三个连续表演节拍\"},{\"name\":\"老陈\",\"acting\":\"保持自然呼吸和目光交流,动作从起始状态平滑过渡到结束状态,按前段、中段、后段完成三个连续表演节拍\"},{\"name\":\"百货经理\",\"acting\":\"保持自然呼吸和目光交流,动作从起始状态平滑过渡到结束状态,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:百货大楼门口_日,重新交代人物位置、朝向与环境\",\"end_state\":\"工商人员收起表格,经理向小明点头,小明露出微笑\",\"continuity_action\":\"小明视线跟随工商人员离开,准备下一步行动\",\"spatial_anchor\":\"百货大楼正门台阶为背景,工商人员在中央偏左,经理在左侧,小明在右侧,老陈在小明后方半步\",\"present_characters\":[\"小明\",\"老陈\",\"百货经理\",\"工商人员(群众)\"],\"scene_number\":7,\"segment_number\":1,\"segment_goal\":\"工商检查现场,小明用订单记录证明信息服务合法性,获得百货经理认可\",\"segment_result\":\"工商同意观察,项目得以继续\",\"bridge_in\":\"百货大楼门口,工商人员和小明、老陈站立,气氛凝重\",\"bridge_out\":\"工商人员收起表格,经理点头,危机解除\",\"beat_type\":\"result\",\"narrative_cause\":\"团队情绪稳定,老陈虽疑惑但接受解释\",\"character_goal\":\"用事实凭证打消工商疑虑\",\"story_action\":\"小明出示订单记录并解释运营模式\",\"story_result\":\"工商暂缓处理,项目获得官方默许\",\"next_hook\":\"下一镜头展示庆功礼堂的成果与小明的情感时刻\"}', '工商人员和小明、老陈站在门口。小明拿出一份表格:“这是通过我们信息服务成交的订单,全部有记录,不碰资金,只收咨询费。”工商人员翻看,递给旁边一个戴眼镜的中年人(百货公司经理)。经理看了后低声:“这方法能帮我们清库存?”小明:“三天见效。”经理点头。工商人员收起表格:“先观察。”', '小明站在百货大楼门口台阶上,从公文包中拿出表格递给工商人员;老陈站在他身后;旁边穿藏青色西装的百货经理低头查看表格;阳光照亮大楼立面。', 8, '百货大楼门口台阶上,工商人员和穿西装的中年男子站在一起。年轻男子从公文包拿出一叠表格递出并说话。工商人员翻看后递给旁边的经理。经理推了推眼镜细看,低声问年轻男子,年轻男子点头回答。经理转向工商人员点头。工商人员收起表格。镜头平视跟随年轻男子的动作,使用越肩视角展示表格内容。', NULL, NULL, 'pending', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:33:44', 0);
-INSERT INTO `short_drama_storyboard` VALUES (2077008644041887744, 2077007721974484992, 2077007722058371072, 8, '厂庆宣言互联网愿景', '厂庆礼堂,红灯笼和横幅装饰,舞台上麦克风前,老陈对着台下说:“感谢小明的信息平台,咱们工厂活了。”台下工人鼓掌。小明站在侧台阴影里,手伸进口袋摸到发黄的现代身份证,他看着灯光下兴奋的面孔,默默将身份证撕碎。主持人喊:“请小明同志讲话!”小明走上舞台中央,拿起话筒,停顿三秒:“各位,未来三十年,互联网会改变一切。今天,我们从这里开始。”台下掌声雷动。', 'epic', '大远景转特写', '俯拍后缓降推近', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"舞台上中央\"},{\"name\":\"老陈\",\"appearance\":\"初始形象\",\"slot\":\"舞台侧边\"}]', '厂庆礼堂_夜', '{\"panel_number\":8,\"scene_summary\":\"厂庆礼堂,红灯笼和横幅装饰,舞台上麦克风前,老陈对着台下说:“感谢小明的信息平台,咱们工厂活了。”台下工人鼓掌。小明站在侧台阴影里,手伸进口袋摸到发黄的现代身份证,他看着灯光下兴奋的面孔,默默将身份证撕碎。主持人喊:“请小明同志讲话!”小明走上舞台中央,拿起话筒,停顿三秒:“各位,未来三十年,互联网会改变一切。今天,我们从这里开始。”台下掌声雷动。\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"大范围自然光,突出空间规模\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"舞台上中央\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"老陈\",\"screen_position\":\"舞台侧边\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"深景深,清晰展现环境规模\",\"color_tone\":\"宏大通透色调\"}', '[{\"name\":\"小明\",\"acting\":\"动作沉稳有力量,视线跟随环境或对手变化,保持画面张力,按前段、中段、后段完成三个连续表演节拍\"},{\"name\":\"老陈\",\"acting\":\"动作沉稳有力量,视线跟随环境或对手变化,保持画面张力,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:厂庆礼堂_夜,重新交代人物位置、朝向与环境\",\"end_state\":\"小明站在舞台中央举起话筒,台下工人站立鼓掌,老陈在侧台微笑\",\"continuity_action\":\"小明视线扫过全场,准备下台开始新阶段\",\"spatial_anchor\":\"舞台在画面中央靠上,台下长凳坐满工人,小明位于舞台中央,老陈在舞台左侧靠边\",\"present_characters\":[\"小明\",\"老陈\",\"工人(群众)\",\"主持人(群众)\"],\"scene_number\":8,\"segment_number\":1,\"segment_goal\":\"厂庆礼堂中老陈表扬小明,小明撕碎现代身份证并发表讲话\",\"segment_result\":\"小明公开宣告互联网未来愿景,全体工人热烈鼓掌\",\"bridge_in\":\"礼堂内工人坐满长凳,老陈在台上讲话\",\"bridge_out\":\"掌声雷动中,小明眼神坚定望向未来\",\"beat_type\":\"action\",\"narrative_cause\":\"工商暂缓处理,项目获得官方默许\",\"character_goal\":\"激励团队并宣告新方向\",\"story_action\":\"小明撕碎现代身份证,上台演讲\",\"story_result\":\"全体工人被鼓舞,小明确立新一代领导地位\",\"next_hook\":\"下一镜头展示清晨新挂牌和下一步计划\"}', '工人坐满长凳。老陈上台:“感谢小明的信息平台,咱们工厂活了。”台下鼓掌。小明站在侧台,看着灯光下兴奋的面孔。他手摸到口袋里的现代身份证——早已发黄。他默默撕碎。主持人:“请小明同志讲话!”小明上前,拿着话筒停顿三秒:“各位,未来三十年,互联网会改变一切。今天,我们从这里开始。”台下掌声雷动。', '厂庆礼堂内,舞台中央老陈握着话筒讲话,台下工人鼓掌;小明站在侧幕阴影中,手中捏着撕碎的身份证,灯光照亮舞台,红灯笼和横幅装饰,气氛热烈。', 10, '礼堂内工人坐满长凳,舞台中央中年男子在讲话,台下鼓掌。年轻男子站在侧台阴影中,手伸进口袋掏出一张发黄的身份证,默默撕碎。主持人喊话,年轻男子走上舞台中央,拿起话筒停顿三秒后说话,台下掌声雷动。镜头从礼堂大远景俯拍开始,然后缓缓下降并推近至年轻男子面部特写。', NULL, NULL, 'pending', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:33:44', 0);
-INSERT INTO `short_drama_storyboard` VALUES (2077008644113190912, 2077007721974484992, 2077007722058371072, 9, '新征程启程', '清晨,阳光照在工厂大门新挂牌上,金边字体“华夏信息服务中心”。小明推着自行车走出来,老陈从后面追上:“下一步?”小明跨上车:“跑遍全国,建数据库。”老陈笑着摇头:“疯了。”小明回以笑容:“1985年,疯的人才能赢。”他蹬车远去,街道两旁的工厂烟囱开始冒烟,晨光中骑车背影越来越小。', 'epic', '大远景', '缓拉升起', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"工厂大门前\"},{\"name\":\"老陈\",\"appearance\":\"初始形象\",\"slot\":\"门口台阶上\"}]', '工厂大门_晨', '{\"panel_number\":9,\"scene_summary\":\"清晨,阳光照在工厂大门新挂牌上,金边字体“华夏信息服务中心”。小明推着自行车走出来,老陈从后面追上:“下一步?”小明跨上车:“跑遍全国,建数据库。”老陈笑着摇头:“疯了。”小明回以笑容:“1985年,疯的人才能赢。”他蹬车远去,街道两旁的工厂烟囱开始冒烟,晨光中骑车背影越来越小。\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"大范围自然光,突出空间规模\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"工厂大门前\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"老陈\",\"screen_position\":\"门口台阶上\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"深景深,清晰展现环境规模\",\"color_tone\":\"宏大通透色调\"}', '[{\"name\":\"小明\",\"acting\":\"动作沉稳有力量,视线跟随环境或对手变化,保持画面张力,按前段、中段、后段完成三个连续表演节拍\"},{\"name\":\"老陈\",\"acting\":\"动作沉稳有力量,视线跟随环境或对手变化,保持画面张力,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:工厂大门_晨,重新交代人物位置、朝向与环境\",\"end_state\":\"小明骑车远去的背影在街道尽头,烟囱冒烟,晨光笼罩\",\"continuity_action\":\"小明继续蹬车,老陈目送,街道向前延伸\",\"spatial_anchor\":\"工厂大门在画面左侧,新挂牌醒目;小明骑车向右远去,街道两旁有工厂围墙和烟囱;老陈站在门口台阶上\",\"present_characters\":[\"小明\",\"老陈\"],\"scene_number\":9,\"segment_number\":1,\"segment_goal\":\"新挂牌的清晨,小明与老陈对话后骑车远去,象征新征程\",\"segment_result\":\"小明骑车远去,烟囱冒烟,新的一天开始\",\"bridge_in\":\"阳光照在新挂牌上,小明推车出现\",\"bridge_out\":\"镜头定格在远去的背影和工厂烟囱,留下开放节奏\",\"beat_type\":\"result\",\"narrative_cause\":\"全体工人被鼓舞,小明确立新一代领导地位\",\"character_goal\":\"确定下一阶段行动计划\",\"story_action\":\"小明跨上自行车说出全国数据库计划\",\"story_result\":\"小明开始实际行动,留下奋斗的背影\",\"next_hook\":\"故事结束,无下一镜头\"}', '阳光照在新挂牌上:“华夏信息服务中心”。小明推着自行车出来,老陈追上:“下一步?”小明:“跑遍全国,建数据库。”老陈笑:“疯了。”小明跨上车:“1985年,疯的人才能赢。”他蹬车远去,街道两旁的工厂烟囱开始冒烟。', '清晨阳光照射工厂大门新挂牌「华夏信息服务中心」,小明推自行车站在门口,老陈站在台阶上微笑;远处烟囱冒烟,天空泛鱼肚白,街道延伸向远方。', 10, '清晨阳光照在工厂大门新挂牌上,金色字体「华夏信息服务中心」。年轻男子推自行车从门内走出,中年男子从后面追上,两人对话。年轻男子跨上自行车,蹬车远去,街道两旁的工厂烟囱开始冒烟,晨光中骑车背影越来越小。镜头从新挂牌特写缓缓拉远并升起,展现工厂全貌和远去的背影。', NULL, NULL, 'pending', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:33:44', 0);
+INSERT INTO `short_drama_storyboard` (`id`, `project_id`, `script_id`, `scene_no`, `scene_title`, `scene_text`, `scene_type`, `shot_type`, `camera_move`, `characters_json`, `location_name`, `photography_rules`, `acting_notes`, `continuity_json`, `source_text`, `image_prompt`, `duration_seconds`, `video_prompt`, `video_url`, `video_id`, `video_status`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`) VALUES (2077008643517599744, 2077007721974484992, 2077007722058371072, 1, '辞退邮件与触电穿越', '深夜办公室,电脑屏幕亮光映照50岁小明苍老疲惫的脸,他盯着屏幕上的辞退邮件,眼神失焦。他拿起手机看到离婚协议截图,手开始颤抖,手机滑落。他试图扶住桌子,手肘碰倒旁边电水壶,水洒向插座,火花迸溅,小明身体后仰倒在椅子上,画面渐黑。', 'suspense', '平视近景', '缓推至固定', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"办公桌前\"}]', '现代办公室_夜', '{\"panel_number\":1,\"scene_summary\":\"深夜办公室,电脑屏幕亮光映照50岁小明苍老疲惫的脸,他盯着屏幕上的辞退邮件,眼神失焦。他拿起手机看到离婚协议截图,手开始颤抖,手机滑落。他试图扶住桌子,手肘碰倒旁边电水壶,水洒向插座,火花迸溅,小明身体后仰倒在椅子上,画面渐黑。\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"低调硬光,保留阴影层次\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"办公桌前\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"中浅景深,保留环境压迫感\",\"color_tone\":\"冷暗色调\"}', '[{\"name\":\"小明\",\"acting\":\"控制呼吸与眨眼频率,用迟疑、停顿和缓慢转头制造紧张感,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:现代办公室_夜,重新交代人物位置、朝向与环境\",\"end_state\":\"小明倒在椅子上,身体后仰,火花在插座处闪烁,画面渐黑\",\"continuity_action\":\"小明身体失去平衡向后倒,火花仍在闪烁\",\"spatial_anchor\":\"小明位于画面中央偏左,办公桌桌面杂乱的纸张和电脑屏幕占据右半,电水壶翻倒在桌角\",\"present_characters\":[\"小明\"],\"scene_number\":1,\"segment_number\":1,\"segment_goal\":\"建立小明被辞退后的绝望状态并触发穿越\",\"segment_result\":\"小明触电倒下,穿越启动\",\"bridge_in\":\"开场建立办公室环境与人物状态\",\"bridge_out\":\"火花和倒下的动作形成视觉钩子,画面切黑\",\"beat_type\":\"trigger\",\"narrative_cause\":\"小明收到辞退邮件和离婚协议,情绪崩溃导致意外\",\"character_goal\":\"缓解内心痛苦,但无意识动作导致触电\",\"story_action\":\"手抖放下手机,碰倒水壶,水溅到插座引发火花\",\"story_result\":\"小明触电昏迷,穿越时空\",\"next_hook\":\"下一镜头需要展示小明醒来后的新环境\"}', '办公室昏暗,只有电脑屏幕亮着。50岁的小明穿着皱巴巴的衬衫,盯着屏幕上的辞退邮件。他拿起手机,看到妻子发来的离婚协议截图。手抖着放下手机,碰倒桌上的电水壶,水洒在插座上。火花闪过,小明倒在椅子上。', '小明坐在深夜办公室的办公桌前,电脑屏幕蓝光照亮他苍老疲惫的脸,桌上散落纸张,他手中拿着手机看着离婚协议截图,旁边的电水壶摇摇欲坠,背景黑暗,气氛压抑。', 8, '深夜办公室,中年男子坐在办公桌前,电脑屏幕光映照脸庞,他盯着屏幕,眼神失焦。他拿起手机看向屏幕,手开始颤抖,手机滑落。他试图扶住桌子,手肘碰倒旁边的电水壶,水洒向插座,火花迸溅,他身体后仰倒在椅子上。镜头从平视中景缓缓推近至脸部特写,然后固定,画面渐黑。', 'https://atlas-media.oss-us-west-1.aliyuncs.com/videos/cgt-20260714203912-pshlw-0.mp4', '472c35ef433744c8a4cbd35a438ad35e', 'done', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:41:42', 0);
+INSERT INTO `short_drama_storyboard` (`id`, `project_id`, `script_id`, `scene_no`, `scene_title`, `scene_text`, `scene_type`, `shot_type`, `camera_move`, `characters_json`, `location_name`, `photography_rules`, `acting_notes`, `continuity_json`, `source_text`, `image_prompt`, `duration_seconds`, `video_prompt`, `video_url`, `video_id`, `video_status`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`) VALUES (2077008643727314944, 2077007721974484992, 2077007722058371072, 2, '重生1985', '小明躺在地上,睁开眼,阳光刺眼。他坐起身,低头看见自己穿着蓝色工装,手背皮肤光滑无皱纹。他摸自己的脸,感觉紧致年轻。旁边老式自行车铃响,一个年轻人骑车路过喊“小明,上班迟到了!”小明看向路口停着的二八自行车和墙上红色标语“时间就是金钱”,低头看手腕电子表显示1985.6,他深吸一口气,眼神从迷茫变成坚定,低语“再来一次”。', 'emotion', '平视近景转特写', '缓推加环绕', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"地面中央\"}]', '小巷_日_1985', '{\"panel_number\":2,\"scene_summary\":\"小明躺在地上,睁开眼,阳光刺眼。他坐起身,低头看见自己穿着蓝色工装,手背皮肤光滑无皱纹。他摸自己的脸,感觉紧致年轻。旁边老式自行车铃响,一个年轻人骑车路过喊“小明,上班迟到了!”小明看向路口停着的二八自行车和墙上红色标语“时间就是金钱”,低头看手腕电子表显示1985.6,他深吸一口气,眼神从迷茫变成坚定,低语“再来一次”。\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"柔和侧光,突出面部情绪\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"地面中央\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"浅景深,突出角色表情\",\"color_tone\":\"克制柔和色调\"}', '[{\"name\":\"小明\",\"acting\":\"表情逐步变化,先克制呼吸,再通过眼神和细微肢体释放情绪,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:小巷_日_1985,重新交代人物位置、朝向与环境\",\"end_state\":\"小明站立,眼神坚定,低头看电子表,嘴唇微动说“再来一次”\",\"continuity_action\":\"小明视线从手表移向前方街道,准备行动\",\"spatial_anchor\":\"小明位于小巷中央地面,左侧墙上有红色标语,右侧有自行车和骑车年轻人,背景是老旧居民楼\",\"present_characters\":[\"小明\",\"年轻人(群众)\"],\"scene_number\":2,\"segment_number\":1,\"segment_goal\":\"展示小明穿越后醒来发现变成年轻模样\",\"segment_result\":\"小明确认自己回到1985年,眼神由迷茫变坚定\",\"bridge_in\":\"画面从黑场渐亮,小明面部特写从模糊到清晰\",\"bridge_out\":\"小明深吸一口气并说出内心决定,视线看向前方街道\",\"beat_type\":\"reaction\",\"narrative_cause\":\"小明触电昏迷,穿越时空\",\"character_goal\":\"确认自身状态和时代\",\"story_action\":\"坐起、摸脸、看周围、看电子表\",\"story_result\":\"小明确定自己重生,产生第二次人生的决心\",\"next_hook\":\"下一镜头展示小明带着方案前往街道办\"}', '小明醒来,发现自己躺在地上,身穿80年代蓝色工装。他摸着脸——没有皱纹。旁边老式自行车铃响,一个年轻人喊:“小明,上班迟到了!”小明看着路口的二八自行车,墙上的标语“时间就是金钱”,愣住。他低头看手腕上的电子表:1985年6月。他深吸一口气,眼神从迷茫变成坚定:“再来一次。”', '小明坐在小巷地面,身穿蓝色工装,阳光从巷口射入照亮他的脸,他摸着自己年轻的脸庞,眼神迷茫;背景是青砖墙和红色标语,一辆老式自行车靠在墙边。', 10, '年轻男子躺在地面上,阳光刺眼,他缓缓睁开眼,然后坐起身,低头看自己双手和蓝色工装,摸自己的脸,表情从迷茫到惊讶。旁边传来自行车铃声,他转头看向巷口的二八自行车和「时间就是金钱」标语,再低头看手腕上的电子表,眼神从迷茫变为坚定。镜头从全景缓慢推近至脸部特写,同时环绕拍摄,最后固定。', 'https://atlas-media.oss-us-west-1.aliyuncs.com/videos/cgt-20260714203913-lxtrb-0.mp4', 'b3b6843f0b78433893608675852797bd', 'done', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:47:08', 0);
+INSERT INTO `short_drama_storyboard` (`id`, `project_id`, `script_id`, `scene_no`, `scene_title`, `scene_text`, `scene_type`, `shot_type`, `camera_move`, `characters_json`, `location_name`, `photography_rules`, `acting_notes`, `continuity_json`, `source_text`, `image_prompt`, `duration_seconds`, `video_prompt`, `video_url`, `video_id`, `video_status`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`) VALUES (2077008643781840896, 2077007721974484992, 2077007722058371072, 3, '街道办受阻遇老陈', '街道办门口,小明拿着一叠手写方案快步走向大门。门卫伸出手臂挡住他。小明急切地解释“同志,我有商业计划,能帮工厂接全国订单!”门卫皱眉推他出去,纸张散落一地。小明蹲下慌乱捡纸。路对面一个穿中山装的中年男人(老陈)弯腰捡起一张,看着上面的字,抬头问:“你这上面写的‘电商’是啥?”小明抬头,眼睛一亮:“陈厂长,我能让您仓库里的积压货三天卖掉。”', 'daily', '平视中景', '轻微跟随', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"门口台阶下\"},{\"name\":\"老陈\",\"appearance\":\"初始形象\",\"slot\":\"路对面人行道\"}]', '街道办门口_日', '{\"panel_number\":3,\"scene_summary\":\"街道办门口,小明拿着一叠手写方案快步走向大门。门卫伸出手臂挡住他。小明急切地解释“同志,我有商业计划,能帮工厂接全国订单!”门卫皱眉推他出去,纸张散落一地。小明蹲下慌乱捡纸。路对面一个穿中山装的中年男人(老陈)弯腰捡起一张,看着上面的字,抬头问:“你这上面写的‘电商’是啥?”小明抬头,眼睛一亮:“陈厂长,我能让您仓库里的积压货三天卖掉。”\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"自然柔光,肤色与环境协调\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"门口台阶下\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"老陈\",\"screen_position\":\"路对面人行道\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"中等景深,兼顾角色与环境\",\"color_tone\":\"自然统一色调\"}', '[{\"name\":\"小明\",\"acting\":\"保持自然呼吸和目光交流,动作从起始状态平滑过渡到结束状态,按前段、中段、后段完成三个连续表演节拍\"},{\"name\":\"老陈\",\"acting\":\"保持自然呼吸和目光交流,动作从起始状态平滑过渡到结束状态,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:街道办门口_日,重新交代人物位置、朝向与环境\",\"end_state\":\"小明蹲在地上抬头看向老陈,老陈站在路对面手持一张纸,两人视线交汇\",\"continuity_action\":\"小明视线锁定老陈,准备进一步解释\",\"spatial_anchor\":\"街道办铁门在画面左侧,门卫站在台阶上;小明在台阶下中央;老陈在画面右侧路对面行道树旁\",\"present_characters\":[\"小明\",\"老陈\",\"门卫(群众)\"],\"scene_number\":3,\"segment_number\":1,\"segment_goal\":\"小明尝试进入街道办被门卫阻拦,吸引老陈注意\",\"segment_result\":\"老陈捡起散落的方案并开始询问\",\"bridge_in\":\"小明拿着方案走向街道办大门,眼神充满希望\",\"bridge_out\":\"老陈目光落在方案上,问题引发后续对话\",\"beat_type\":\"trigger\",\"narrative_cause\":\"小明确定自己重生,产生第二次人生的决心\",\"character_goal\":\"进入街道办寻求支持\",\"story_action\":\"小明上前解释,被推倒,捡纸时发现老陈在看方案\",\"story_result\":\"老陈对方案产生好奇并主动与小明对话\",\"next_hook\":\"下一镜头展示两人在废弃仓库深入讨论\"}', '小明拿着一叠手写方案,站在街道办门口。门卫拦住他。小明:“同志,我有商业计划,能帮工厂接全国订单!”门卫:“胡闹!”推他出去。小明捡起散落的纸,抬头看到路对面一个穿中山装的中年男人(老陈)正在看他的方案。老陈:“你这上面写的‘电商’是啥?”小明眼睛一亮:“陈厂长,我能让您仓库里的积压货三天卖掉。”', '小明站在街道办门口台阶下,手拿一叠方案,表情急切;门卫站在台阶上伸手阻拦;路对面老陈穿中山装低头看纸,阳光从右上方照射。', 8, '年轻男子拿着一叠手写方案快步走向街道办大门,门卫伸出手臂阻挡。年轻男子急切地解释,门卫皱眉推他出去,纸张散落。年轻男子蹲下慌乱捡纸。路对面一位中年男子弯腰捡起一张纸,看着上面,抬头问话。镜头平视跟随年轻男子移动,然后切换到越肩视角展示门卫的阻拦动作。', 'https://atlas-media.oss-us-west-1.aliyuncs.com/videos/cgt-20260714203920-6rw8b-0.mp4', '7173c12461574b8abd063c46fc625ebe', 'done', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:47:09', 0);
+INSERT INTO `short_drama_storyboard` (`id`, `project_id`, `script_id`, `scene_no`, `scene_title`, `scene_text`, `scene_type`, `shot_type`, `camera_move`, `characters_json`, `location_name`, `photography_rules`, `acting_notes`, `continuity_json`, `source_text`, `image_prompt`, `duration_seconds`, `video_prompt`, `video_url`, `video_id`, `video_status`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`) VALUES (2077008643823783936, 2077007721974484992, 2077007722058371072, 4, '仓库达成合作', '废弃仓库内,一张木桌两把椅子,小明和老陈对面而坐。桌上摆着两盒烟,老陈抽出一根点燃:“我信你一次,但怎么弄?”小明拿起笔在纸上画示意图:“用电话线连电脑,搞个库存信息库。我写程序。”老陈皱眉:“钱呢?”小明:“我先拉商户,您出设备。”老陈抖了抖烟灰,沉默几秒后点头。小明转头看向墙上的标语“工业学大庆”,低声:“这次一定要成。”', 'daily', '平视中景', '缓推', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"桌子一侧\"},{\"name\":\"老陈\",\"appearance\":\"初始形象\",\"slot\":\"桌子另一侧\"}]', '废弃仓库_日', '{\"panel_number\":4,\"scene_summary\":\"废弃仓库内,一张木桌两把椅子,小明和老陈对面而坐。桌上摆着两盒烟,老陈抽出一根点燃:“我信你一次,但怎么弄?”小明拿起笔在纸上画示意图:“用电话线连电脑,搞个库存信息库。我写程序。”老陈皱眉:“钱呢?”小明:“我先拉商户,您出设备。”老陈抖了抖烟灰,沉默几秒后点头。小明转头看向墙上的标语“工业学大庆”,低声:“这次一定要成。”\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"自然柔光,肤色与环境协调\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"桌子一侧\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"老陈\",\"screen_position\":\"桌子另一侧\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"中等景深,兼顾角色与环境\",\"color_tone\":\"自然统一色调\"}', '[{\"name\":\"小明\",\"acting\":\"保持自然呼吸和目光交流,动作从起始状态平滑过渡到结束状态,按前段、中段、后段完成三个连续表演节拍\"},{\"name\":\"老陈\",\"acting\":\"保持自然呼吸和目光交流,动作从起始状态平滑过渡到结束状态,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:废弃仓库_日,重新交代人物位置、朝向与环境\",\"end_state\":\"老陈点头,小明目光从墙上标语收回,表情坚定\",\"continuity_action\":\"小明视线从标语移回老陈,准备下一步计划\",\"spatial_anchor\":\"桌子位于仓库中央,小明坐画面左侧,老陈坐右侧,后面墙上有标语,水泥地面空旷\",\"present_characters\":[\"小明\",\"老陈\"],\"scene_number\":4,\"segment_number\":1,\"segment_goal\":\"小明与老陈在仓库达成合作意向\",\"segment_result\":\"老陈决定信任小明,提供设备支持\",\"bridge_in\":\"两人对面而坐,桌上两盒烟,老陈面露犹豫\",\"bridge_out\":\"老陈点头,小明看向墙上标语,低声坚定信念\",\"beat_type\":\"action\",\"narrative_cause\":\"老陈对方案产生好奇并主动与小明对话\",\"character_goal\":\"说服老陈提供设备支持\",\"story_action\":\"小明画图解释技术方案,提出资源分工\",\"story_result\":\"老陈同意合作,小明获得初步资源\",\"next_hook\":\"下一镜头展示工厂办公室内新进展与危机\"}', '老陈和小明对面坐着。桌上摆着两盒烟。老陈:“我信你一次,但怎么弄?”小明在纸上画:“用电话线连电脑,搞个库存信息库。我写程序。”老陈:“钱呢?”小明:“我先拉商户,您出设备。”老陈犹豫后点头。小明看着仓库墙上的“工业学大庆”,低声:“这次一定要成。”', '小明和老陈在废弃仓库的旧木桌对面而坐,桌上两盒烟和散落的纸张;老陈夹烟沉思,小明执笔画示意图;背景墙上红色大字「工业学大庆」,高窗透入光线。', 8, '年轻男子和中年男子对面坐在木桌两侧,桌上摆着两盒烟。中年男子抽出一根点燃,年轻男子拿起笔在纸上画图并说话。中年男子皱眉问话,年轻男子抬头回答,伸手指向纸面。中年男子抖烟灰后点头。年轻男子转头看向墙上的标语,低声自语。镜头从两人的中景缓缓推近至年轻男子的脸部,然后固定。', NULL, 'd4665ee140f34673914292855d389d38', 'generating', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:39:20', 0);
+INSERT INTO `short_drama_storyboard` (`id`, `project_id`, `script_id`, `scene_no`, `scene_title`, `scene_text`, `scene_type`, `shot_type`, `camera_move`, `characters_json`, `location_name`, `photography_rules`, `acting_notes`, `continuity_json`, `source_text`, `image_prompt`, `duration_seconds`, `video_prompt`, `video_url`, `video_id`, `video_status`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`) VALUES (2077008643874115584, 2077007721974484992, 2077007722058371072, 5, '工商检查危机', '工厂办公室内,木制办公桌上转盘电话响起。老陈拿起听筒,脸色逐渐变白,手指捏紧话筒。挂断后他转身对旁边椅子上的小明说:“国营百货举报我们投机倒把,工商明天来查。”小明快速翻看桌上的账本,抬起头:“我们走的是信息服务,不是倒卖。”老陈叹气:“没人认可这个。”小明合上账本,直视老陈:“明天我来说。”', 'suspense', '平视近景', '缓推', '[{\"name\":\"老陈\",\"appearance\":\"初始形象\",\"slot\":\"办公桌后\"},{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"办公桌旁椅子\"}]', '工厂办公室_日', '{\"panel_number\":5,\"scene_summary\":\"工厂办公室内,木制办公桌上转盘电话响起。老陈拿起听筒,脸色逐渐变白,手指捏紧话筒。挂断后他转身对旁边椅子上的小明说:“国营百货举报我们投机倒把,工商明天来查。”小明快速翻看桌上的账本,抬起头:“我们走的是信息服务,不是倒卖。”老陈叹气:“没人认可这个。”小明合上账本,直视老陈:“明天我来说。”\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"低调硬光,保留阴影层次\"},\"characters\":[{\"name\":\"老陈\",\"screen_position\":\"办公桌后\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"小明\",\"screen_position\":\"办公桌旁椅子\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"中浅景深,保留环境压迫感\",\"color_tone\":\"冷暗色调\"}', '[{\"name\":\"老陈\",\"acting\":\"控制呼吸与眨眼频率,用迟疑、停顿和缓慢转头制造紧张感\"},{\"name\":\"小明\",\"acting\":\"控制呼吸与眨眼频率,用迟疑、停顿和缓慢转头制造紧张感\"}]', '{\"start_state\":\"新场景建立:工厂办公室_日,重新交代人物位置、朝向与环境\",\"end_state\":\"小明合上账本,直视老陈,表情自信;老陈眉头紧锁但不再反驳\",\"continuity_action\":\"小明视线坚定,老陈目光仍带忧虑但转向信任\",\"spatial_anchor\":\"老陈位于画面左侧办公桌后,小明在右侧椅子,窗外可见厂区烟囱,文件柜靠墙\",\"present_characters\":[\"小明\",\"老陈\"],\"scene_number\":5,\"segment_number\":1,\"segment_goal\":\"工厂办公室内老陈接到工商查处的电话,小明提出应对\",\"segment_result\":\"小明决定亲自去面对工商检查\",\"bridge_in\":\"办公室电话铃响打破平静,老陈接听表情变化\",\"bridge_out\":\"老陈看向小明,小明坚定地说“明天我来说”\",\"beat_type\":\"trigger\",\"narrative_cause\":\"老陈同意合作,小明获得初步资源\",\"character_goal\":\"让老陈相信自己能解决危机\",\"story_action\":\"小明解释模式合法性,并主动承担交涉责任\",\"story_result\":\"老陈部分安心,小明获得应对危机的授权\",\"next_hook\":\"下一镜头展示出租屋内团队内部争吵与统一思想\"}', '办公桌上电话响起。老陈接起,脸色变白。挂断后对小明:“国营百货举报我们投机倒把,工商明天来查。”小明快速翻看账本:“我们走的是信息服务,不是倒卖。”老陈:“没人认可这个。”小明:“明天我来说。”', '工厂办公室内,老陈坐在办公桌后接电话,脸色凝重;小明坐在侧面椅子上翻看账本,窗外可见工厂烟囱;桌上转盘电话和文件散落。', 7, '办公桌上黑色转盘电话响起。中年男子坐在桌后拿起听筒,脸色逐渐变白,手指捏紧话筒。他挂断后转身对旁边的年轻男子说话。年轻男子快速翻看账本,抬起头直视对方回话,然后合上账本。镜头从电话特写缓慢推近至中年男子面部,再缓拉到两人中景。', 'https://atlas-media.oss-us-west-1.aliyuncs.com/videos/cgt-20260714203917-gnb2m-0.mp4', '61edb37e979a426f9e8272786243c243', 'done', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:41:08', 0);
+INSERT INTO `short_drama_storyboard` (`id`, `project_id`, `script_id`, `scene_no`, `scene_title`, `scene_text`, `scene_type`, `shot_type`, `camera_move`, `characters_json`, `location_name`, `photography_rules`, `acting_notes`, `continuity_json`, `source_text`, `image_prompt`, `duration_seconds`, `video_prompt`, `video_url`, `video_id`, `video_status`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`) VALUES (2077008643920252928, 2077007721974484992, 2077007722058371072, 6, '出租屋统一思想', '狭小出租屋,灯光昏暗。两个年轻团队成员拍桌站起:“不干了,风险太大!”老陈坐在床边沉默,低头看地面。小明从墙角拿起一块黑板放在桌上,画出一条时间轴,标注1985年,指向电脑图标。他转头对大家说:“1985年,电脑刚进中国,我们的优势是信息差。不做商品买卖,做平台——帮工厂和供销社匹配库存。”他指着黑板:“明天工商来,我就说这是‘技术咨询’。”老陈抬头,皱眉问:“你哪来的这些?”小明停顿一下:“梦里学的。”', 'emotion', '平视近景转特写', '缓推加环绕', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"桌边站立\"},{\"name\":\"老陈\",\"appearance\":\"初始形象\",\"slot\":\"床边坐着\"}]', '出租屋_夜', '{\"panel_number\":6,\"scene_summary\":\"狭小出租屋,灯光昏暗。两个年轻团队成员拍桌站起:“不干了,风险太大!”老陈坐在床边沉默,低头看地面。小明从墙角拿起一块黑板放在桌上,画出一条时间轴,标注1985年,指向电脑图标。他转头对大家说:“1985年,电脑刚进中国,我们的优势是信息差。不做商品买卖,做平台——帮工厂和供销社匹配库存。”他指着黑板:“明天工商来,我就说这是‘技术咨询’。”老陈抬头,皱眉问:“你哪来的这些?”小明停顿一下:“梦里学的。”\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"柔和侧光,突出面部情绪\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"桌边站立\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"老陈\",\"screen_position\":\"床边坐着\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"浅景深,突出角色表情\",\"color_tone\":\"克制柔和色调\"}', '[{\"name\":\"小明\",\"acting\":\"表情逐步变化,先克制呼吸,再通过眼神和细微肢体释放情绪,按前段、中段、后段完成三个连续表演节拍\"},{\"name\":\"老陈\",\"acting\":\"表情逐步变化,先克制呼吸,再通过眼神和细微肢体释放情绪,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:出租屋_夜,重新交代人物位置、朝向与环境\",\"end_state\":\"老陈抬头看向小明,两个年轻人停止争吵望向黑板,小黑板上画有时间轴和“电脑”字样\",\"continuity_action\":\"小明手指还指着黑板上的“技术咨询”,等待异议\",\"spatial_anchor\":\"画面中央是一张桌子,黑板靠在桌上,小明站在桌子左侧画黑板,老陈坐在右侧床边,两个年轻人站在桌子远端\",\"present_characters\":[\"小明\",\"老陈\",\"两个年轻人(群众)\"],\"scene_number\":6,\"segment_number\":1,\"segment_goal\":\"出租屋内团队成员因风险而退缩,小明用时间轴规划说服大家\",\"segment_result\":\"老陈和小明达成共识,团队重拾信心\",\"bridge_in\":\"出租屋内两个年轻人拍桌起身,气氛紧张\",\"bridge_out\":\"老陈抬头看小明,眼神中带着疑惑与信任\",\"beat_type\":\"decision\",\"narrative_cause\":\"老陈部分安心,小明获得应对危机的授权\",\"character_goal\":\"稳定团队,统一认知\",\"story_action\":\"小明画出时间轴,解释信息差优势和应对策略\",\"story_result\":\"团队情绪稳定,老陈虽疑惑但接受解释\",\"next_hook\":\"下一镜头展示百货大楼门口工商检查的结果\"}', '团队成员(两个年轻人)拍桌:“不干了,风险太大!”老陈沉默。小明拿出一块黑板,画出时间轴:“1985年,电脑刚进中国,我们的优势是信息差。不做商品买卖,做平台——帮工厂和供销社匹配库存。”他指着黑板:“明天工商来,我就说这是‘技术咨询’。”老陈抬头:“你哪来的这些?”小明:“梦里学的。”', '出租屋内,小明站在桌子左侧画黑板,黑板上粉笔写着时间轴和「电脑」字样;老陈坐在床边抬头看;两个年轻人站在桌子远端,表情从愤怒转为倾听;昏黄灯光下气氛紧张。', 10, '狭小出租屋内,两个年轻人拍桌站起情绪激动。中年男子坐在床边低头沉默。年轻男子从墙角拿起一块黑板放在桌上,用粉笔画出一条时间轴,标注1985和电脑图标,转头对大家说话并指向黑板。中年男子抬起头皱眉问话,年轻男子停顿后回答。镜头从全景缓慢推近至年轻男子面部特写,然后环绕拍摄黑板上的时间轴。', NULL, NULL, 'pending', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:33:44', 0);
+INSERT INTO `short_drama_storyboard` (`id`, `project_id`, `script_id`, `scene_no`, `scene_title`, `scene_text`, `scene_type`, `shot_type`, `camera_move`, `characters_json`, `location_name`, `photography_rules`, `acting_notes`, `continuity_json`, `source_text`, `image_prompt`, `duration_seconds`, `video_prompt`, `video_url`, `video_id`, `video_status`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`) VALUES (2077008643978973184, 2077007721974484992, 2077007722058371072, 7, '工商检查通过', '百货大楼门口台阶上,工商人员和穿藏青色西装的中年经理站在一起。小明从公文包拿出一叠表格递过去:“这是通过我们信息服务成交的订单,全部有记录,不碰资金,只收咨询费。”工商人员翻看后递给旁边的百货经理。经理推了推眼镜细看,低声问小明:“这方法能帮我们清库存?”小明点头:“三天见效。”经理转向工商人员点了点头。工商人员收起表格:“先观察。”', 'daily', '平视中景', '轻微跟随', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"台阶上右侧\"},{\"name\":\"老陈\",\"appearance\":\"初始形象\",\"slot\":\"台阶上小明身后\"},{\"name\":\"百货经理\",\"appearance\":\"初始形象\",\"slot\":\"台阶上中央\"}]', '百货大楼门口_日', '{\"panel_number\":7,\"scene_summary\":\"百货大楼门口台阶上,工商人员和穿藏青色西装的中年经理站在一起。小明从公文包拿出一叠表格递过去:“这是通过我们信息服务成交的订单,全部有记录,不碰资金,只收咨询费。”工商人员翻看后递给旁边的百货经理。经理推了推眼镜细看,低声问小明:“这方法能帮我们清库存?”小明点头:“三天见效。”经理转向工商人员点了点头。工商人员收起表格:“先观察。”\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"自然柔光,肤色与环境协调\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"台阶上右侧\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"老陈\",\"screen_position\":\"台阶上小明身后\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"百货经理\",\"screen_position\":\"台阶上中央\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"中等景深,兼顾角色与环境\",\"color_tone\":\"自然统一色调\"}', '[{\"name\":\"小明\",\"acting\":\"保持自然呼吸和目光交流,动作从起始状态平滑过渡到结束状态,按前段、中段、后段完成三个连续表演节拍\"},{\"name\":\"老陈\",\"acting\":\"保持自然呼吸和目光交流,动作从起始状态平滑过渡到结束状态,按前段、中段、后段完成三个连续表演节拍\"},{\"name\":\"百货经理\",\"acting\":\"保持自然呼吸和目光交流,动作从起始状态平滑过渡到结束状态,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:百货大楼门口_日,重新交代人物位置、朝向与环境\",\"end_state\":\"工商人员收起表格,经理向小明点头,小明露出微笑\",\"continuity_action\":\"小明视线跟随工商人员离开,准备下一步行动\",\"spatial_anchor\":\"百货大楼正门台阶为背景,工商人员在中央偏左,经理在左侧,小明在右侧,老陈在小明后方半步\",\"present_characters\":[\"小明\",\"老陈\",\"百货经理\",\"工商人员(群众)\"],\"scene_number\":7,\"segment_number\":1,\"segment_goal\":\"工商检查现场,小明用订单记录证明信息服务合法性,获得百货经理认可\",\"segment_result\":\"工商同意观察,项目得以继续\",\"bridge_in\":\"百货大楼门口,工商人员和小明、老陈站立,气氛凝重\",\"bridge_out\":\"工商人员收起表格,经理点头,危机解除\",\"beat_type\":\"result\",\"narrative_cause\":\"团队情绪稳定,老陈虽疑惑但接受解释\",\"character_goal\":\"用事实凭证打消工商疑虑\",\"story_action\":\"小明出示订单记录并解释运营模式\",\"story_result\":\"工商暂缓处理,项目获得官方默许\",\"next_hook\":\"下一镜头展示庆功礼堂的成果与小明的情感时刻\"}', '工商人员和小明、老陈站在门口。小明拿出一份表格:“这是通过我们信息服务成交的订单,全部有记录,不碰资金,只收咨询费。”工商人员翻看,递给旁边一个戴眼镜的中年人(百货公司经理)。经理看了后低声:“这方法能帮我们清库存?”小明:“三天见效。”经理点头。工商人员收起表格:“先观察。”', '小明站在百货大楼门口台阶上,从公文包中拿出表格递给工商人员;老陈站在他身后;旁边穿藏青色西装的百货经理低头查看表格;阳光照亮大楼立面。', 8, '百货大楼门口台阶上,工商人员和穿西装的中年男子站在一起。年轻男子从公文包拿出一叠表格递出并说话。工商人员翻看后递给旁边的经理。经理推了推眼镜细看,低声问年轻男子,年轻男子点头回答。经理转向工商人员点头。工商人员收起表格。镜头平视跟随年轻男子的动作,使用越肩视角展示表格内容。', NULL, NULL, 'pending', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:33:44', 0);
+INSERT INTO `short_drama_storyboard` (`id`, `project_id`, `script_id`, `scene_no`, `scene_title`, `scene_text`, `scene_type`, `shot_type`, `camera_move`, `characters_json`, `location_name`, `photography_rules`, `acting_notes`, `continuity_json`, `source_text`, `image_prompt`, `duration_seconds`, `video_prompt`, `video_url`, `video_id`, `video_status`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`) VALUES (2077008644041887744, 2077007721974484992, 2077007722058371072, 8, '厂庆宣言互联网愿景', '厂庆礼堂,红灯笼和横幅装饰,舞台上麦克风前,老陈对着台下说:“感谢小明的信息平台,咱们工厂活了。”台下工人鼓掌。小明站在侧台阴影里,手伸进口袋摸到发黄的现代身份证,他看着灯光下兴奋的面孔,默默将身份证撕碎。主持人喊:“请小明同志讲话!”小明走上舞台中央,拿起话筒,停顿三秒:“各位,未来三十年,互联网会改变一切。今天,我们从这里开始。”台下掌声雷动。', 'epic', '大远景转特写', '俯拍后缓降推近', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"舞台上中央\"},{\"name\":\"老陈\",\"appearance\":\"初始形象\",\"slot\":\"舞台侧边\"}]', '厂庆礼堂_夜', '{\"panel_number\":8,\"scene_summary\":\"厂庆礼堂,红灯笼和横幅装饰,舞台上麦克风前,老陈对着台下说:“感谢小明的信息平台,咱们工厂活了。”台下工人鼓掌。小明站在侧台阴影里,手伸进口袋摸到发黄的现代身份证,他看着灯光下兴奋的面孔,默默将身份证撕碎。主持人喊:“请小明同志讲话!”小明走上舞台中央,拿起话筒,停顿三秒:“各位,未来三十年,互联网会改变一切。今天,我们从这里开始。”台下掌声雷动。\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"大范围自然光,突出空间规模\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"舞台上中央\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"老陈\",\"screen_position\":\"舞台侧边\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"深景深,清晰展现环境规模\",\"color_tone\":\"宏大通透色调\"}', '[{\"name\":\"小明\",\"acting\":\"动作沉稳有力量,视线跟随环境或对手变化,保持画面张力,按前段、中段、后段完成三个连续表演节拍\"},{\"name\":\"老陈\",\"acting\":\"动作沉稳有力量,视线跟随环境或对手变化,保持画面张力,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:厂庆礼堂_夜,重新交代人物位置、朝向与环境\",\"end_state\":\"小明站在舞台中央举起话筒,台下工人站立鼓掌,老陈在侧台微笑\",\"continuity_action\":\"小明视线扫过全场,准备下台开始新阶段\",\"spatial_anchor\":\"舞台在画面中央靠上,台下长凳坐满工人,小明位于舞台中央,老陈在舞台左侧靠边\",\"present_characters\":[\"小明\",\"老陈\",\"工人(群众)\",\"主持人(群众)\"],\"scene_number\":8,\"segment_number\":1,\"segment_goal\":\"厂庆礼堂中老陈表扬小明,小明撕碎现代身份证并发表讲话\",\"segment_result\":\"小明公开宣告互联网未来愿景,全体工人热烈鼓掌\",\"bridge_in\":\"礼堂内工人坐满长凳,老陈在台上讲话\",\"bridge_out\":\"掌声雷动中,小明眼神坚定望向未来\",\"beat_type\":\"action\",\"narrative_cause\":\"工商暂缓处理,项目获得官方默许\",\"character_goal\":\"激励团队并宣告新方向\",\"story_action\":\"小明撕碎现代身份证,上台演讲\",\"story_result\":\"全体工人被鼓舞,小明确立新一代领导地位\",\"next_hook\":\"下一镜头展示清晨新挂牌和下一步计划\"}', '工人坐满长凳。老陈上台:“感谢小明的信息平台,咱们工厂活了。”台下鼓掌。小明站在侧台,看着灯光下兴奋的面孔。他手摸到口袋里的现代身份证——早已发黄。他默默撕碎。主持人:“请小明同志讲话!”小明上前,拿着话筒停顿三秒:“各位,未来三十年,互联网会改变一切。今天,我们从这里开始。”台下掌声雷动。', '厂庆礼堂内,舞台中央老陈握着话筒讲话,台下工人鼓掌;小明站在侧幕阴影中,手中捏着撕碎的身份证,灯光照亮舞台,红灯笼和横幅装饰,气氛热烈。', 10, '礼堂内工人坐满长凳,舞台中央中年男子在讲话,台下鼓掌。年轻男子站在侧台阴影中,手伸进口袋掏出一张发黄的身份证,默默撕碎。主持人喊话,年轻男子走上舞台中央,拿起话筒停顿三秒后说话,台下掌声雷动。镜头从礼堂大远景俯拍开始,然后缓缓下降并推近至年轻男子面部特写。', NULL, NULL, 'pending', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:33:44', 0);
+INSERT INTO `short_drama_storyboard` (`id`, `project_id`, `script_id`, `scene_no`, `scene_title`, `scene_text`, `scene_type`, `shot_type`, `camera_move`, `characters_json`, `location_name`, `photography_rules`, `acting_notes`, `continuity_json`, `source_text`, `image_prompt`, `duration_seconds`, `video_prompt`, `video_url`, `video_id`, `video_status`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `tenant_id`) VALUES (2077008644113190912, 2077007721974484992, 2077007722058371072, 9, '新征程启程', '清晨,阳光照在工厂大门新挂牌上,金边字体“华夏信息服务中心”。小明推着自行车走出来,老陈从后面追上:“下一步?”小明跨上车:“跑遍全国,建数据库。”老陈笑着摇头:“疯了。”小明回以笑容:“1985年,疯的人才能赢。”他蹬车远去,街道两旁的工厂烟囱开始冒烟,晨光中骑车背影越来越小。', 'epic', '大远景', '缓拉升起', '[{\"name\":\"小明\",\"appearance\":\"初始形象\",\"slot\":\"工厂大门前\"},{\"name\":\"老陈\",\"appearance\":\"初始形象\",\"slot\":\"门口台阶上\"}]', '工厂大门_晨', '{\"panel_number\":9,\"scene_summary\":\"清晨,阳光照在工厂大门新挂牌上,金边字体“华夏信息服务中心”。小明推着自行车走出来,老陈从后面追上:“下一步?”小明跨上车:“跑遍全国,建数据库。”老陈笑着摇头:“疯了。”小明回以笑容:“1985年,疯的人才能赢。”他蹬车远去,街道两旁的工厂烟囱开始冒烟,晨光中骑车背影越来越小。\",\"lighting\":{\"direction\":\"根据场景主光方向保持连续\",\"quality\":\"大范围自然光,突出空间规模\"},\"characters\":[{\"name\":\"小明\",\"screen_position\":\"工厂大门前\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"},{\"name\":\"老陈\",\"screen_position\":\"门口台阶上\",\"posture\":\"保持符合当前动作的自然姿态\",\"facing\":\"面向动作目标或对话对象\"}],\"depth_of_field\":\"深景深,清晰展现环境规模\",\"color_tone\":\"宏大通透色调\"}', '[{\"name\":\"小明\",\"acting\":\"动作沉稳有力量,视线跟随环境或对手变化,保持画面张力,按前段、中段、后段完成三个连续表演节拍\"},{\"name\":\"老陈\",\"acting\":\"动作沉稳有力量,视线跟随环境或对手变化,保持画面张力,按前段、中段、后段完成三个连续表演节拍\"}]', '{\"start_state\":\"新场景建立:工厂大门_晨,重新交代人物位置、朝向与环境\",\"end_state\":\"小明骑车远去的背影在街道尽头,烟囱冒烟,晨光笼罩\",\"continuity_action\":\"小明继续蹬车,老陈目送,街道向前延伸\",\"spatial_anchor\":\"工厂大门在画面左侧,新挂牌醒目;小明骑车向右远去,街道两旁有工厂围墙和烟囱;老陈站在门口台阶上\",\"present_characters\":[\"小明\",\"老陈\"],\"scene_number\":9,\"segment_number\":1,\"segment_goal\":\"新挂牌的清晨,小明与老陈对话后骑车远去,象征新征程\",\"segment_result\":\"小明骑车远去,烟囱冒烟,新的一天开始\",\"bridge_in\":\"阳光照在新挂牌上,小明推车出现\",\"bridge_out\":\"镜头定格在远去的背影和工厂烟囱,留下开放节奏\",\"beat_type\":\"result\",\"narrative_cause\":\"全体工人被鼓舞,小明确立新一代领导地位\",\"character_goal\":\"确定下一阶段行动计划\",\"story_action\":\"小明跨上自行车说出全国数据库计划\",\"story_result\":\"小明开始实际行动,留下奋斗的背影\",\"next_hook\":\"故事结束,无下一镜头\"}', '阳光照在新挂牌上:“华夏信息服务中心”。小明推着自行车出来,老陈追上:“下一步?”小明:“跑遍全国,建数据库。”老陈笑:“疯了。”小明跨上车:“1985年,疯的人才能赢。”他蹬车远去,街道两旁的工厂烟囱开始冒烟。', '清晨阳光照射工厂大门新挂牌「华夏信息服务中心」,小明推自行车站在门口,老陈站在台阶上微笑;远处烟囱冒烟,天空泛鱼肚白,街道延伸向远方。', 10, '清晨阳光照在工厂大门新挂牌上,金色字体「华夏信息服务中心」。年轻男子推自行车从门内走出,中年男子从后面追上,两人对话。年轻男子跨上自行车,蹬车远去,街道两旁的工厂烟囱开始冒烟,晨光中骑车背影越来越小。镜头从新挂牌特写缓缓拉远并升起,展现工厂全貌和远去的背影。', NULL, NULL, 'pending', -1, -1, '2026-07-14 20:33:44', -1, '2026-07-14 20:33:44', 0);
-- ----------------------------
-- Table structure for sj_distributed_lock
diff --git a/docs/script/sql/snail_job_mysql.sql b/docs/script/sql/snail_job_mysql.sql
new file mode 100644
index 00000000..322cccae
--- /dev/null
+++ b/docs/script/sql/snail_job_mysql.sql
@@ -0,0 +1,545 @@
+SET NAMES utf8mb4;
+
+DROP DATABASE IF EXISTS snail_job;
+CREATE DATABASE snail_job;
+USE snail_job;
+
+CREATE TABLE `sj_namespace`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `name` varchar(64) NOT NULL COMMENT '名称',
+ `unique_id` varchar(64) NOT NULL COMMENT '唯一id',
+ `description` varchar(256) NOT NULL DEFAULT '' COMMENT '描述',
+ `deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '逻辑删除 1、删除',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_name` (`name`),
+ UNIQUE KEY `uk_unique_id` (`unique_id`)
+) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4 COMMENT ='命名空间';
+
+INSERT INTO `sj_namespace` (`id`, `name`, `unique_id`, `create_dt`, `update_dt`, `deleted`)
+VALUES (1, 'Default', '764d604ec6fc45f68cd92514c40e9e1a', now(), now(), 0);
+
+
+CREATE TABLE `sj_group_config`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` varchar(64) NOT NULL DEFAULT '' COMMENT '组名称',
+ `description` varchar(256) NOT NULL DEFAULT '' COMMENT '组描述',
+ `token` varchar(64) NOT NULL DEFAULT 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT' COMMENT 'token',
+ `group_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '组状态 0、未启用 1、启用',
+ `version` int(11) NOT NULL COMMENT '版本号',
+ `group_partition` int(11) NOT NULL COMMENT '分区',
+ `id_generator_mode` tinyint(4) NOT NULL DEFAULT 1 COMMENT '唯一id生成模式 默认号段模式',
+ `init_scene` tinyint(4) NOT NULL DEFAULT 0 COMMENT '是否初始化场景 0:否 1:是',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_namespace_id_group_name` (`namespace_id`, `group_name`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='组配置'
+;
+
+CREATE TABLE `sj_notify_config`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `notify_name` varchar(64) NOT NULL DEFAULT '' COMMENT '通知名称',
+ `system_task_type` tinyint(4) NOT NULL DEFAULT 3 COMMENT '任务类型 1. 重试任务 2. 重试回调 3、JOB任务 4、WORKFLOW任务',
+ `notify_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '通知状态 0、未启用 1、启用',
+ `recipient_ids` varchar(128) NOT NULL COMMENT '接收人id列表',
+ `notify_threshold` int(11) NOT NULL DEFAULT 0 COMMENT '通知阈值',
+ `notify_scene` tinyint(4) NOT NULL DEFAULT 0 COMMENT '通知场景',
+ `rate_limiter_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '限流状态 0、未启用 1、启用',
+ `rate_limiter_threshold` int(11) NOT NULL DEFAULT 0 COMMENT '每秒限流阈值',
+ `description` varchar(256) NOT NULL DEFAULT '' COMMENT '描述',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_namespace_id_group_name_scene_name` (`namespace_id`, `group_name`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='通知配置'
+;
+
+CREATE TABLE `sj_notify_recipient`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `recipient_name` varchar(64) NOT NULL COMMENT '接收人名称',
+ `notify_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '通知类型 1、钉钉 2、邮件 3、企业微信 4 飞书 5 webhook',
+ `notify_attribute` varchar(512) NOT NULL COMMENT '配置属性',
+ `description` varchar(256) NOT NULL DEFAULT '' COMMENT '描述',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_namespace_id` (`namespace_id`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='告警通知接收人'
+;
+
+CREATE TABLE `sj_retry_dead_letter`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `group_id` bigint(20) NOT NULL COMMENT '组Id',
+ `scene_name` varchar(64) NOT NULL COMMENT '场景名称',
+ `scene_id` bigint(20) NOT NULL COMMENT '场景ID',
+ `idempotent_id` varchar(64) NOT NULL COMMENT '幂等id',
+ `biz_no` varchar(64) NOT NULL DEFAULT '' COMMENT '业务编号',
+ `executor_name` varchar(512) NOT NULL DEFAULT '' COMMENT '执行器名称',
+ -- jackson 兼容历史数据 预计1.8.0默认改为fury
+ `serializer_name` varchar(32) NOT NULL DEFAULT 'jackson' COMMENT '执行方法参数序列化器名称',
+ `args_str` text NOT NULL COMMENT '执行方法参数',
+ `ext_attrs` text NOT NULL COMMENT '扩展字段',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_namespace_id_group_name_scene_name` (`namespace_id`, `group_name`, `scene_name`),
+ KEY `idx_idempotent_id` (`idempotent_id`),
+ KEY `idx_biz_no` (`biz_no`),
+ KEY `idx_create_dt` (`create_dt`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='死信队列表'
+;
+
+CREATE TABLE `sj_retry`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `group_id` bigint(20) NOT NULL COMMENT '组Id',
+ `scene_name` varchar(64) NOT NULL COMMENT '场景名称',
+ `scene_id` bigint(20) NOT NULL COMMENT '场景ID',
+ `idempotent_id` varchar(64) NOT NULL COMMENT '幂等id',
+ `biz_no` varchar(64) NOT NULL DEFAULT '' COMMENT '业务编号',
+ `executor_name` varchar(512) NOT NULL DEFAULT '' COMMENT '执行器名称',
+ `args_str` text NOT NULL COMMENT '执行方法参数',
+ `ext_attrs` text NOT NULL COMMENT '扩展字段',
+ -- jackson 兼容历史数据 预计1.8.0默认改为fury
+ `serializer_name` varchar(32) NOT NULL DEFAULT 'jackson' COMMENT '执行方法参数序列化器名称',
+ `next_trigger_at` bigint(13) NOT NULL COMMENT '下次触发时间',
+ `retry_count` int(11) NOT NULL DEFAULT 0 COMMENT '重试次数',
+ `retry_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '重试状态 0、重试中 1、成功 2、最大重试次数',
+ `task_type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '任务类型 1、重试数据 2、回调数据',
+ `bucket_index` int(11) NOT NULL DEFAULT 0 COMMENT 'bucket',
+ `parent_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '父节点id',
+ `deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '逻辑删除',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_biz_no` (`biz_no`),
+ KEY `idx_idempotent_id` (`idempotent_id`),
+ KEY `idx_retry_status_bucket_index` (`retry_status`, `bucket_index`),
+ KEY `idx_parent_id` (`parent_id`),
+ KEY `idx_create_dt` (`create_dt`),
+ UNIQUE KEY `uk_scene_tasktype_idempotentid_deleted` (`scene_id`, `task_type`, `idempotent_id`, `deleted`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='重试信息表'
+;
+
+CREATE TABLE `sj_retry_task`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `scene_name` varchar(64) NOT NULL COMMENT '场景名称',
+ `retry_id` bigint(20) NOT NULL COMMENT '重试信息Id',
+ `ext_attrs` text NOT NULL COMMENT '扩展字段',
+ `task_status` tinyint(4) NOT NULL DEFAULT 1 COMMENT '重试状态',
+ `task_type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '任务类型 1、重试数据 2、回调数据',
+ `operation_reason` tinyint(4) NOT NULL DEFAULT 0 COMMENT '操作原因',
+ `client_info` varchar(128) DEFAULT NULL COMMENT '客户端地址 clientId#ip:port',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_group_name_scene_name` (`namespace_id`, `group_name`, `scene_name`),
+ KEY `task_status` (`task_status`),
+ KEY `idx_create_dt` (`create_dt`),
+ KEY `idx_retry_id` (`retry_id`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='重试任务表'
+;
+
+CREATE TABLE `sj_retry_task_log_message`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `retry_id` bigint(20) NOT NULL COMMENT '重试信息Id',
+ `retry_task_id` bigint(20) NOT NULL COMMENT '重试任务Id',
+ `message` longtext NOT NULL COMMENT '异常信息',
+ `log_num` int(11) NOT NULL DEFAULT 1 COMMENT '日志数量',
+ `real_time` bigint(13) NOT NULL DEFAULT 0 COMMENT '上报时间',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_namespace_id_group_name_retry_task_id` (`namespace_id`, `group_name`, `retry_task_id`),
+ KEY `idx_create_dt` (`create_dt`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='任务调度日志信息记录表'
+;
+
+CREATE TABLE `sj_retry_scene_config`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `scene_name` varchar(64) NOT NULL COMMENT '场景名称',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `scene_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '组状态 0、未启用 1、启用',
+ `max_retry_count` int(11) NOT NULL DEFAULT 5 COMMENT '最大重试次数',
+ `back_off` tinyint(4) NOT NULL DEFAULT 1 COMMENT '1、默认等级 2、固定间隔时间 3、CRON 表达式',
+ `trigger_interval` varchar(16) NOT NULL DEFAULT '' COMMENT '间隔时长',
+ `notify_ids` varchar(128) NOT NULL DEFAULT '' COMMENT '通知告警场景配置id列表',
+ `deadline_request` bigint(20) unsigned NOT NULL DEFAULT 60000 COMMENT 'Deadline Request 调用链超时 单位毫秒',
+ `executor_timeout` int(11) unsigned NOT NULL DEFAULT 5 COMMENT '任务执行超时时间,单位秒',
+ `route_key` tinyint(4) NOT NULL DEFAULT 4 COMMENT '路由策略',
+ `block_strategy` tinyint(4) NOT NULL DEFAULT 1 COMMENT '阻塞策略 1、丢弃 2、覆盖 3、并行',
+ `cb_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '回调状态 0、不开启 1、开启',
+ `cb_trigger_type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '1、默认等级 2、固定间隔时间 3、CRON 表达式',
+ `cb_max_count` int(11) NOT NULL DEFAULT 16 COMMENT '回调的最大执行次数',
+ `cb_trigger_interval` varchar(16) NOT NULL DEFAULT '' COMMENT '回调的最大执行次数',
+ `owner_id` bigint(20) NULL DEFAULT NULL COMMENT '负责人id',
+ `labels` varchar(512) NULL DEFAULT '' COMMENT '标签',
+ `description` varchar(256) NOT NULL DEFAULT '' COMMENT '描述',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_namespace_id_group_name_scene_name` (`namespace_id`, `group_name`, `scene_name`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='场景配置'
+;
+
+CREATE TABLE `sj_server_node`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `host_id` varchar(64) NOT NULL COMMENT '主机id',
+ `host_ip` varchar(64) NOT NULL COMMENT '机器ip',
+ `host_port` int(16) NOT NULL COMMENT '机器端口',
+ `expire_at` datetime NOT NULL COMMENT '过期时间',
+ `node_type` tinyint(4) NOT NULL COMMENT '节点类型 1、客户端 2、是服务端',
+ `ext_attrs` varchar(256) NULL DEFAULT '' COMMENT '扩展字段',
+ `labels` varchar(512) NULL DEFAULT '' COMMENT '标签',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_namespace_id_group_name` (`namespace_id`, `group_name`),
+ KEY `idx_expire_at_node_type` (`expire_at`, `node_type`),
+ UNIQUE KEY `uk_host_id_host_ip` (`host_id`, `host_ip`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='服务器节点'
+;
+
+CREATE TABLE `sj_distributed_lock`
+(
+ `name` varchar(64) NOT NULL COMMENT '锁名称',
+ `lock_until` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '锁定时长',
+ `locked_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '锁定时间',
+ `locked_by` varchar(255) NOT NULL COMMENT '锁定者',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`name`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='锁定表'
+;
+
+CREATE TABLE `sj_system_user`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `username` varchar(64) NOT NULL COMMENT '账号',
+ `password` varchar(128) NOT NULL COMMENT '密码',
+ `role` tinyint(4) NOT NULL DEFAULT 0 COMMENT '角色:1-普通用户、2-管理员',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_username` (`username`) USING BTREE
+) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4 COMMENT ='系统用户表';
+
+-- pwd: admin
+INSERT INTO `sj_system_user` (username, password, role)
+VALUES ('admin', '465c194afb65670f38322df087f0a9bb225cc257e43eb4ac5a0c98ef5b3173ac', 2);
+
+CREATE TABLE `sj_system_user_permission`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `system_user_id` bigint(20) NOT NULL COMMENT '系统用户id',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_namespace_id_group_name_system_user_id` (`namespace_id`, `group_name`, `system_user_id`)
+) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4 COMMENT ='系统用户权限表';
+
+-- 分布式调度DDL
+CREATE TABLE `sj_job`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `job_name` varchar(64) NOT NULL COMMENT '名称',
+ `args_str` text DEFAULT NULL COMMENT '执行方法参数',
+ `args_type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '参数类型 ',
+ `next_trigger_at` bigint(13) NOT NULL COMMENT '下次触发时间',
+ `job_status` tinyint(4) NOT NULL DEFAULT 1 COMMENT '任务状态 0、关闭、1、开启',
+ `task_type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '任务类型 1、集群 2、广播 3、切片',
+ `route_key` tinyint(4) NOT NULL DEFAULT 4 COMMENT '路由策略',
+ `executor_type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '执行器类型',
+ `executor_info` varchar(255) DEFAULT NULL COMMENT '执行器名称',
+ `trigger_type` tinyint(4) NOT NULL COMMENT '触发类型 1.CRON 表达式 2. 固定时间',
+ `trigger_interval` varchar(255) NOT NULL COMMENT '间隔时长',
+ `block_strategy` tinyint(4) NOT NULL DEFAULT 1 COMMENT '阻塞策略 1、丢弃 2、覆盖 3、并行 4、恢复',
+ `executor_timeout` int(11) NOT NULL DEFAULT 0 COMMENT '任务执行超时时间,单位秒',
+ `max_retry_times` int(11) NOT NULL DEFAULT 0 COMMENT '最大重试次数',
+ `parallel_num` int(11) NOT NULL DEFAULT 1 COMMENT '并行数',
+ `retry_interval` int(11) NOT NULL DEFAULT 0 COMMENT '重试间隔(s)',
+ `bucket_index` int(11) NOT NULL DEFAULT 0 COMMENT 'bucket',
+ `resident` tinyint(4) NOT NULL DEFAULT 0 COMMENT '是否是常驻任务',
+ `notify_ids` varchar(128) NOT NULL DEFAULT '' COMMENT '通知告警场景配置id列表',
+ `owner_id` bigint(20) NULL DEFAULT NULL COMMENT '负责人id',
+ `labels` varchar(512) NULL DEFAULT '' COMMENT '标签',
+ `description` varchar(256) NOT NULL DEFAULT '' COMMENT '描述',
+ `ext_attrs` varchar(256) NULL DEFAULT '' COMMENT '扩展字段',
+ `deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '逻辑删除 1、删除',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_namespace_id_group_name` (`namespace_id`, `group_name`),
+ KEY `idx_job_status_bucket_index` (`job_status`, `bucket_index`),
+ KEY `idx_create_dt` (`create_dt`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='任务信息';
+
+CREATE TABLE `sj_job_log_message`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `job_id` bigint(20) NOT NULL COMMENT '任务信息id',
+ `task_batch_id` bigint(20) NOT NULL COMMENT '任务批次id',
+ `task_id` bigint(20) NOT NULL COMMENT '调度任务id',
+ `message` longtext NOT NULL COMMENT '调度信息',
+ `log_num` int(11) NOT NULL DEFAULT 1 COMMENT '日志数量',
+ `real_time` bigint(13) NOT NULL DEFAULT 0 COMMENT '上报时间',
+ `ext_attrs` varchar(256) NULL DEFAULT '' COMMENT '扩展字段',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_task_batch_id_task_id` (`task_batch_id`, `task_id`),
+ KEY `idx_create_dt` (`create_dt`),
+ KEY `idx_namespace_id_group_name` (`namespace_id`, `group_name`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='调度日志';
+
+CREATE TABLE `sj_job_task`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `job_id` bigint(20) NOT NULL COMMENT '任务信息id',
+ `task_batch_id` bigint(20) NOT NULL COMMENT '调度任务id',
+ `parent_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '父执行器id',
+ `task_status` tinyint NOT NULL DEFAULT 0 COMMENT '执行的状态 0、失败 1、成功',
+ `retry_count` int(11) NOT NULL DEFAULT 0 COMMENT '重试次数',
+ `mr_stage` tinyint DEFAULT NULL COMMENT '动态分片所处阶段 1:map 2:reduce 3:mergeReduce',
+ `leaf` tinyint NOT NULL DEFAULT '1' COMMENT '叶子节点',
+ `task_name` varchar(255) NOT NULL DEFAULT '' COMMENT '任务名称',
+ `client_info` varchar(128) DEFAULT NULL COMMENT '客户端地址 clientId#ip:port',
+ `wf_context` text DEFAULT NULL COMMENT '工作流全局上下文',
+ `result_message` text NOT NULL COMMENT '执行结果',
+ `args_str` text DEFAULT NULL COMMENT '执行方法参数',
+ `args_type` tinyint NOT NULL DEFAULT 1 COMMENT '参数类型 ',
+ `ext_attrs` varchar(256) NULL DEFAULT '' COMMENT '扩展字段',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_task_batch_id_task_status` (`task_batch_id`, `task_status`),
+ KEY `idx_create_dt` (`create_dt`),
+ KEY `idx_namespace_id_group_name` (`namespace_id`, `group_name`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='任务实例';
+
+CREATE TABLE `sj_job_task_batch`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `job_id` bigint(20) NOT NULL COMMENT '任务id',
+ `workflow_node_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '工作流节点id',
+ `parent_workflow_node_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '工作流任务父批次id',
+ `workflow_task_batch_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '工作流任务批次id',
+ `task_batch_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '任务批次状态 0、失败 1、成功',
+ `operation_reason` tinyint(4) NOT NULL DEFAULT 0 COMMENT '操作原因',
+ `execution_at` bigint(13) NOT NULL DEFAULT 0 COMMENT '任务执行时间',
+ `system_task_type` tinyint(4) NOT NULL DEFAULT 3 COMMENT '任务类型 3、JOB任务 4、WORKFLOW任务',
+ `parent_id` varchar(64) NOT NULL DEFAULT '' COMMENT '父节点',
+ `ext_attrs` varchar(256) NULL DEFAULT '' COMMENT '扩展字段',
+ `deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '逻辑删除 1、删除',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_job_id_task_batch_status` (`job_id`, `task_batch_status`),
+ KEY `idx_create_dt` (`create_dt`),
+ KEY `idx_namespace_id_group_name` (`namespace_id`, `group_name`),
+ KEY `idx_workflow_task_batch_id_workflow_node_id` (`workflow_task_batch_id`, `workflow_node_id`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='任务批次';
+
+CREATE TABLE `sj_job_summary`
+(
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` VARCHAR(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '组名称',
+ `business_id` bigint NOT NULL COMMENT '业务id (job_id或workflow_id)',
+ `system_task_type` tinyint(4) NOT NULL DEFAULT 3 COMMENT '任务类型 3、JOB任务 4、WORKFLOW任务',
+ `trigger_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '统计时间',
+ `success_num` int NOT NULL DEFAULT 0 COMMENT '执行成功-日志数量',
+ `fail_num` int NOT NULL DEFAULT 0 COMMENT '执行失败-日志数量',
+ `fail_reason` varchar(512) NOT NULL DEFAULT '' COMMENT '失败原因',
+ `stop_num` int NOT NULL DEFAULT 0 COMMENT '执行失败-日志数量',
+ `stop_reason` varchar(512) NOT NULL DEFAULT '' COMMENT '失败原因',
+ `cancel_num` int NOT NULL DEFAULT 0 COMMENT '执行失败-日志数量',
+ `cancel_reason` varchar(512) NOT NULL DEFAULT '' COMMENT '失败原因',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_namespace_id_group_name_business_id` (`namespace_id`, `group_name`, business_id),
+ UNIQUE KEY `uk_trigger_at_system_task_type_business_id` (`trigger_at`, `system_task_type`, `business_id`) USING BTREE
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 1
+ DEFAULT CHARSET = utf8mb4 COMMENT ='DashBoard_Job';
+
+CREATE TABLE `sj_retry_summary`
+(
+ `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` VARCHAR(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '组名称',
+ `scene_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '场景名称',
+ `trigger_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '统计时间',
+ `running_num` int NOT NULL DEFAULT 0 COMMENT '重试中-日志数量',
+ `finish_num` int NOT NULL DEFAULT 0 COMMENT '重试完成-日志数量',
+ `max_count_num` int NOT NULL DEFAULT 0 COMMENT '重试到达最大次数-日志数量',
+ `suspend_num` int NOT NULL DEFAULT 0 COMMENT '暂停重试-日志数量',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_trigger_at` (`trigger_at`),
+ UNIQUE KEY `uk_scene_name_trigger_at` (`namespace_id`, `group_name`, `scene_name`, `trigger_at`) USING BTREE
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 1
+ DEFAULT CHARSET = utf8mb4 COMMENT ='DashBoard_Retry';
+
+CREATE TABLE `sj_workflow`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `workflow_name` varchar(64) NOT NULL COMMENT '工作流名称',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `workflow_status` tinyint(4) NOT NULL DEFAULT 1 COMMENT '工作流状态 0、关闭、1、开启',
+ `trigger_type` tinyint(4) NOT NULL COMMENT '触发类型 1.CRON 表达式 2. 固定时间',
+ `trigger_interval` varchar(255) NOT NULL COMMENT '间隔时长',
+ `next_trigger_at` bigint NOT NULL COMMENT '下次触发时间',
+ `block_strategy` tinyint(4) NOT NULL DEFAULT 1 COMMENT '阻塞策略 1、丢弃 2、覆盖 3、并行',
+ `executor_timeout` int(11) NOT NULL DEFAULT 0 COMMENT '任务执行超时时间,单位秒',
+ `description` varchar(256) NOT NULL DEFAULT '' COMMENT '描述',
+ `flow_info` text DEFAULT NULL COMMENT '流程信息',
+ `wf_context` text DEFAULT NULL COMMENT '上下文',
+ `notify_ids` varchar(128) NOT NULL DEFAULT '' COMMENT '通知告警场景配置id列表',
+ `bucket_index` int(11) NOT NULL DEFAULT 0 COMMENT 'bucket',
+ `version` int(11) NOT NULL COMMENT '版本号',
+ `owner_id` bigint(20) NULL DEFAULT NULL COMMENT '负责人id',
+ `ext_attrs` varchar(256) NULL DEFAULT '' COMMENT '扩展字段',
+ `deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '逻辑删除 1、删除',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_create_dt` (`create_dt`),
+ KEY `idx_namespace_id_group_name` (`namespace_id`, `group_name`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='工作流';
+
+CREATE TABLE `sj_workflow_node`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `node_name` varchar(64) NOT NULL COMMENT '节点名称',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `job_id` bigint(20) NOT NULL COMMENT '任务信息id',
+ `workflow_id` bigint(20) NOT NULL COMMENT '工作流ID',
+ `node_type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '1、任务节点 2、条件节点',
+ `expression_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '1、SpEl、2、Aviator 3、QL',
+ `fail_strategy` tinyint(4) NOT NULL DEFAULT 1 COMMENT '失败策略 1、跳过 2、阻塞',
+ `workflow_node_status` tinyint(4) NOT NULL DEFAULT 1 COMMENT '工作流节点状态 0、关闭、1、开启',
+ `priority_level` int(11) NOT NULL DEFAULT 1 COMMENT '优先级',
+ `node_info` text DEFAULT NULL COMMENT '节点信息 ',
+ `version` int(11) NOT NULL COMMENT '版本号',
+ `ext_attrs` varchar(256) NULL DEFAULT '' COMMENT '扩展字段',
+ `deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '逻辑删除 1、删除',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_create_dt` (`create_dt`),
+ KEY `idx_namespace_id_group_name` (`namespace_id`, `group_name`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='工作流节点';
+
+CREATE TABLE `sj_workflow_task_batch`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `workflow_id` bigint(20) NOT NULL COMMENT '工作流任务id',
+ `task_batch_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '任务批次状态 0、失败 1、成功',
+ `operation_reason` tinyint(4) NOT NULL DEFAULT 0 COMMENT '操作原因',
+ `flow_info` text DEFAULT NULL COMMENT '流程信息',
+ `wf_context` text DEFAULT NULL COMMENT '全局上下文',
+ `execution_at` bigint(13) NOT NULL DEFAULT 0 COMMENT '任务执行时间',
+ `ext_attrs` varchar(256) NULL DEFAULT '' COMMENT '扩展字段',
+ `version` int(11) NOT NULL DEFAULT 1 COMMENT '版本号',
+ `deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '逻辑删除 1、删除',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_job_id_task_batch_status` (`workflow_id`, `task_batch_status`),
+ KEY `idx_create_dt` (`create_dt`),
+ KEY `idx_namespace_id_group_name` (`namespace_id`, `group_name`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='工作流批次';
+
+CREATE TABLE `sj_job_executor`
+(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id',
+ `group_name` varchar(64) NOT NULL COMMENT '组名称',
+ `executor_info` varchar(256) NOT NULL COMMENT '任务执行器名称',
+ `executor_type` varchar(3) NOT NULL COMMENT '1:java 2:python 3:go',
+ `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_namespace_id_group_name` (`namespace_id`, `group_name`),
+ KEY `idx_create_dt` (`create_dt`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 0
+ DEFAULT CHARSET = utf8mb4 COMMENT ='任务执行器信息';
diff --git a/pom.xml b/pom.xml
index 9acb4232..625cb379 100644
--- a/pom.xml
+++ b/pom.xml
@@ -70,6 +70,7 @@
1.27.1
1.1.0
+ 3.30.2-GA
1.21.2
4.4.0
2.2.8
@@ -503,20 +504,8 @@
src/main/resources
-
false
-
- src/main/resources
-
-
- application*
- bootstrap*
- banner*
-
-
- true
-
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index 2a775fbc..83f56c43 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -8,8 +8,8 @@ spring.boot.admin.client:
metadata:
username: ${spring.boot.admin.client.username}
userpassword: ${spring.boot.admin.client.password}
- username: @monitor.username@
- password: @monitor.password@
+ username: ${MONITOR_USERNAME:ruoyi}
+ password: ${MONITOR_PASSWORD:123456}
--- # mcp配置信息
mcp:
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
index 234e81ab..ae8372d9 100644
--- a/ruoyi-admin/src/main/resources/application-prod.yml
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -9,8 +9,8 @@ spring.boot.admin.client:
metadata:
username: ${spring.boot.admin.client.username}
userpassword: ${spring.boot.admin.client.password}
- username: @monitor.username@
- password: @monitor.password@
+ username: ${MONITOR_USERNAME:ruoyi}
+ password: ${MONITOR_PASSWORD:123456}
--- # mcp配置信息
mcp:
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index d9aca934..6a053bbd 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -39,7 +39,7 @@ captcha:
# 日志配置
logging:
level:
- org.ruoyi: @logging.level@
+ org.ruoyi: ${LOGGING_LEVEL_ORG_RUOYI:info}
org.springframework: warn
org.mybatis.spring.mapper: error
org.apache.fury: warn
@@ -79,7 +79,7 @@ spring:
# 国际化资源文件路径
basename: i18n/messages
profiles:
- active: @profiles.active@
+ active: ${SPRING_PROFILES_ACTIVE:dev}
# 文件上传
servlet:
multipart:
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/domain/bo/chat/ChatModelBo.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/domain/bo/chat/ChatModelBo.java
index e8640887..a9c7c1e5 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/domain/bo/chat/ChatModelBo.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/domain/bo/chat/ChatModelBo.java
@@ -1,10 +1,12 @@
package org.ruoyi.common.chat.domain.bo.chat;
import io.github.linpeilie.annotations.AutoMapper;
+import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.chat.entity.chat.ChatModel;
+import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
@@ -28,16 +30,19 @@ public class ChatModelBo extends BaseEntity {
/**
* 模型分类
*/
+ @NotBlank(message = "模型分类不能为空", groups = { AddGroup.class, EditGroup.class })
private String category;
/**
* 模型名称
*/
+ @NotBlank(message = "模型名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String modelName;
/**
* 模型供应商
*/
+ @NotBlank(message = "模型供应商不能为空", groups = { AddGroup.class, EditGroup.class })
private String providerCode;
/**
diff --git a/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml
index 72447e95..b2723802 100644
--- a/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml
+++ b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml
@@ -4,7 +4,7 @@ spring:
application:
name: ruoyi-monitor-admin
profiles:
- active: @profiles.active@
+ active: ${SPRING_PROFILES_ACTIVE:dev}
logging:
config: classpath:logback-plus.xml
@@ -13,8 +13,8 @@ logging:
spring:
security:
user:
- name: @monitor.username@
- password: @monitor.password@
+ name: ${MONITOR_USERNAME:ruoyi}
+ password: ${MONITOR_PASSWORD:123456}
boot:
admin:
ui:
@@ -47,5 +47,5 @@ spring.boot.admin.client:
metadata:
username: ${spring.boot.admin.client.username}
userpassword: ${spring.boot.admin.client.password}
- username: @monitor.username@
- password: @monitor.password@
+ username: ${MONITOR_USERNAME:ruoyi}
+ password: ${MONITOR_PASSWORD:123456}
diff --git a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml
index 18a851c7..67b4d4e2 100644
--- a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml
+++ b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml
@@ -2,7 +2,7 @@ spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+ url: jdbc:mysql://localhost:3306/snail_job?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: root
hikari:
@@ -47,5 +47,5 @@ spring.boot.admin.client:
metadata:
username: ${spring.boot.admin.client.username}
userpassword: ${spring.boot.admin.client.password}
- username: @monitor.username@
- password: @monitor.password@
+ username: ${MONITOR_USERNAME:ruoyi}
+ password: ${MONITOR_PASSWORD:123456}
diff --git a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml
index 18a851c7..4510d899 100644
--- a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml
+++ b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml
@@ -47,5 +47,5 @@ spring.boot.admin.client:
metadata:
username: ${spring.boot.admin.client.username}
userpassword: ${spring.boot.admin.client.password}
- username: @monitor.username@
- password: @monitor.password@
+ username: ${MONITOR_USERNAME:ruoyi}
+ password: ${MONITOR_PASSWORD:123456}
diff --git a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application.yml b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application.yml
index ba6df45f..bdefb472 100644
--- a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application.yml
+++ b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application.yml
@@ -7,7 +7,7 @@ spring:
application:
name: ruoyi-snailjob-server
profiles:
- active: @profiles.active@
+ active: ${SPRING_PROFILES_ACTIVE:dev}
web:
resources:
static-locations: classpath:admin/
diff --git a/ruoyi-modules/ruoyi-aiflow/pom.xml b/ruoyi-modules/ruoyi-aiflow/pom.xml
index d7a147c8..04bb9b89 100644
--- a/ruoyi-modules/ruoyi-aiflow/pom.xml
+++ b/ruoyi-modules/ruoyi-aiflow/pom.xml
@@ -72,6 +72,21 @@
com.talanlabs
avatar-generator-cat
${avatar-generator.version}
+
+
+ org.javassist
+ javassist
+
+
+
+
+
+
+ org.javassist
+ javassist
+ ${javassist.version}
diff --git a/ruoyi-modules/ruoyi-aiflow/src/main/java/org/ruoyi/workflow/workflow/CompileNode.java b/ruoyi-modules/ruoyi-aiflow/src/main/java/org/ruoyi/workflow/workflow/CompileNode.java
index 20960113..1e6ad419 100644
--- a/ruoyi-modules/ruoyi-aiflow/src/main/java/org/ruoyi/workflow/workflow/CompileNode.java
+++ b/ruoyi-modules/ruoyi-aiflow/src/main/java/org/ruoyi/workflow/workflow/CompileNode.java
@@ -16,6 +16,7 @@ import java.util.List;
@AllArgsConstructor
public class CompileNode {
protected String id;
+ @Builder.Default
protected Boolean conditional = false;
/**
@@ -24,5 +25,6 @@ public class CompileNode {
* 2. 当前节点为条件分支节点,下游节点为多个节点,实际执行时只会执行一条
* 两种节点根据是否GraphCompileNode来区分
*/
+ @Builder.Default
protected List nextNodes = new ArrayList<>();
}
diff --git a/ruoyi-modules/ruoyi-aiflow/src/main/java/org/ruoyi/workflow/workflow/NodeProcessResult.java b/ruoyi-modules/ruoyi-aiflow/src/main/java/org/ruoyi/workflow/workflow/NodeProcessResult.java
index a62d4218..290245a7 100644
--- a/ruoyi-modules/ruoyi-aiflow/src/main/java/org/ruoyi/workflow/workflow/NodeProcessResult.java
+++ b/ruoyi-modules/ruoyi-aiflow/src/main/java/org/ruoyi/workflow/workflow/NodeProcessResult.java
@@ -15,6 +15,7 @@ import java.util.List;
@NoArgsConstructor
public class NodeProcessResult {
+ @Builder.Default
private List content = new ArrayList<>();
/**
@@ -25,6 +26,7 @@ public class NodeProcessResult {
/**
* 是否发生错误
*/
+ @Builder.Default
private boolean error = false;
/**
diff --git a/ruoyi-modules/ruoyi-chat/src/test/java/org/ruoyi/service/shortdrama/composition/FfmpegCommandBuilderTest.java b/ruoyi-modules/ruoyi-chat/src/test/java/org/ruoyi/service/shortdrama/composition/FfmpegCommandBuilderTest.java
index d00de58a..8620967d 100644
--- a/ruoyi-modules/ruoyi-chat/src/test/java/org/ruoyi/service/shortdrama/composition/FfmpegCommandBuilderTest.java
+++ b/ruoyi-modules/ruoyi-chat/src/test/java/org/ruoyi/service/shortdrama/composition/FfmpegCommandBuilderTest.java
@@ -26,7 +26,9 @@ class FfmpegCommandBuilderTest {
List.of(source),
TransitionType.NONE,
0,
- AspectRatio.PORTRAIT
+ AspectRatio.PORTRAIT,
+ null,
+ false
);
FfmpegFilterGraph graph = new FfmpegFilterGraph(
"[0:v]null[v0]",
diff --git a/ruoyi-modules/ruoyi-chat/src/test/java/org/ruoyi/service/shortdrama/composition/FfmpegFilterGraphBuilderTest.java b/ruoyi-modules/ruoyi-chat/src/test/java/org/ruoyi/service/shortdrama/composition/FfmpegFilterGraphBuilderTest.java
index 0bebc075..903843bc 100644
--- a/ruoyi-modules/ruoyi-chat/src/test/java/org/ruoyi/service/shortdrama/composition/FfmpegFilterGraphBuilderTest.java
+++ b/ruoyi-modules/ruoyi-chat/src/test/java/org/ruoyi/service/shortdrama/composition/FfmpegFilterGraphBuilderTest.java
@@ -183,6 +183,6 @@ class FfmpegFilterGraphBuilderTest {
List sources = java.util.stream.IntStream.range(0, sourceCount)
.mapToObj(index -> new CompositionSource(Path.of("clip-" + index + ".mp4"), null))
.toList();
- return new CompositionSpec(sources, transition, duration, ratio);
+ return new CompositionSpec(sources, transition, duration, ratio, null, false);
}
}