- 范围:全仓除已完成的 game-cloud/game-admin(及排除区);91 文件 - cn.iocoder.yudao→com.wanxiang.huijing / cn.wanxiang.game→com.wanxiang.huijing.game / cn.iocoder.cloud→com.wanxiang / Yudao*→Huijing* / bare yudao→huijing - 含 contracts/api-schemas(apiInterface FQCN)、docs/architecture+agent-specs(含中文名,git ls-files -z 修复)、AGENTS.md/CLAUDE.md 等根文档 - 保留不动:上游归属 URL(gitee/github yudaocode·YunaiV,改则断链+违反署名)、game-cloud Flyway 迁移注释(保 checksum)、lockfile(装包重生) - 纯文档/字符串,零构建影响(game-cloud/game-admin 字节码未动) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
51 lines
6.2 KiB
SQL
51 lines
6.2 KiB
SQL
-- =============================================================================
|
||
-- 契约 #2 DB 迁移 | 模块:aigc(game-module-aigc,"做得出"生成入口)| owner:WS2
|
||
-- 文件:V2.0.0__create_game_aigc.sql(Flyway,只新增;已合入禁止修改,回滚写新补偿迁移)
|
||
-- 内容:aigc 模块核心表 —— 生成任务(异步队列 + 状态机 + 失败分类 + traceId + 产物引用)
|
||
-- 脊柱对接:输入 prompt+template_id;产物=GamePackage(契约#4),经 game_id/version_id 关联 project.game_version;
|
||
-- 状态机对齐契约#6 Dify output + RocketMQ 队列态;Dify/MQ/LLM 仅对接点,本迁移不建外部资源。
|
||
-- 写权属(决策5):aigc 成功后只回填 game_version.id 关联 + 生成元数据(gen_task_id);不写 game_version 的 package_url/checksum/bundle_size,
|
||
-- 这些的权威写者=runtime 编译成功后回写(见 runtime V3.0.0 / runtime.yaml)。本表 result_package_url 仅为只读冗余镜像,非权威源。
|
||
-- 约定:InnoDB + utf8mb4;显式列;含 Huijing 审计列 creator/create_time/updater/update_time/deleted + tenant_id;
|
||
-- 状态机用 tinyint,非法流转由 AigcTaskService 校验,DO 层不承载校验;中文列注释;关键查询建索引。
|
||
-- 错误码段:aigc = 1-101-***-***
|
||
-- =============================================================================
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- 表:game_aigc_task —— 生成任务表(AigcTask,异步队列 + 状态机)
|
||
-- 状态机 status:0 queued 排队 → 1 running 生成中 →(2 succeeded 成功 / 3 failed 失败 / 4 timed_out 超时)
|
||
-- 旁路:0/1 → 5 canceled 已取消(用户主动取消)
|
||
-- 合法流转由 AigcTaskService 校验:非终态(0/1)可 cancel;终态失败(3/4)可 retry(新建任务)
|
||
-- 状态来源:queued/canceled 由本服务写;running/succeeded/failed/timed_out 由生成流程(Dify 回调对接点)驱动
|
||
-- 产物落地(决策5 写权属):status=2 时只回填 version_id 关联(game_version.id) + 生成元数据(gen_task_id);
|
||
-- aigc 不写 game_version 的 package_url/checksum/bundle_size,权威写者=runtime 编译成功后回写(见 runtime V3.0.0 / runtime.yaml)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE `game_aigc_task` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '生成任务 ID(= 对外 taskId)',
|
||
`creator_user_id` BIGINT NOT NULL COMMENT '创作者用户 ID(DataPermission:创作者只见自己任务)',
|
||
`game_id` BIGINT NULL COMMENT '关联游戏 ID(project.game_project.id);studio 草稿场景传入,产物经此落 game_version',
|
||
`version_id` BIGINT NULL COMMENT '产物落地的版本 ID(project.game_version.id);status=2 成功后回填',
|
||
`template_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '玩法模板 ID(→ 契约#6 input.templateId;空则由 Dify 意图解析匹配)',
|
||
`prompt` VARCHAR(1000) NOT NULL DEFAULT '' COMMENT '创作者一句话自然语言 Prompt(→ 契约#6 input.prompt)',
|
||
`prompt_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT 'Prompt sha256(产物缓存键,相同 hash 命中缓存可跳过 LLM;对齐 GamePackage.provenance.promptHash)',
|
||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态机:0 queued 排队 1 running 生成中 2 succeeded 成功 3 failed 失败 4 timed_out 超时 5 canceled 已取消',
|
||
`progress` TINYINT NOT NULL DEFAULT 0 COMMENT '进度百分比 0-100(前端进度条 P-CRT-12)',
|
||
`quality_score` DECIMAL(4,3) NULL COMMENT '生成质量分(0-1),对齐契约#6 Dify output 0-1(succeeded 回填,质量门禁参考;→ 契约#6 output.qualityScore);≠ telemetry/feed 的运营质量分(0-100),两者口径不同、不可互相回灌',
|
||
`failure_reason` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '失败原因分类(status=3/4 必填,取值对齐契约#6 output.failureReason:unsafe_prompt/intent_unclear/no_template_match/config_invalid/llm_error/timeout/asset_gen_failed)',
|
||
`result_package_url` VARCHAR(512) NOT NULL DEFAULT '' COMMENT '产物 GamePackage(manifest) OSS URL 的只读冗余镜像(= game_version.package_url)。aigc 不写此字段;权威写者=runtime 编译成功后回写 game_version.package_url(见 runtime V3.0.0 / runtime.yaml),本列仅供查询展示',
|
||
`retry_of` BIGINT NULL COMMENT '若本任务为重试,指向原任务 ID(P-CRT-09 重生成血缘)',
|
||
`trace_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '贯穿全链路 traceId(→ 契约#6 input/output.traceId;Dify 回调据此定位任务)',
|
||
`creator` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建者(Huijing 审计列)',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`updater` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '更新者',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`finish_time` DATETIME NULL COMMENT '终态完成时间(2/3/4/5 时写入)',
|
||
`deleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '逻辑删除:0未删 1已删',
|
||
`tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户 ID(Huijing 多租户兼容,MVP 单租户=0)',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_creator_status` (`creator_user_id`, `status`) COMMENT '我的任务列表查询(创作者+状态)',
|
||
KEY `idx_status_create` (`status`, `create_time`) COMMENT '管理端排障/生成成功率统计(按状态+时间)',
|
||
KEY `idx_trace` (`trace_id`) COMMENT 'Dify 回调对接点据 traceId 定位任务',
|
||
KEY `idx_game` (`game_id`) COMMENT '按关联游戏查生成任务(脊柱:回 project.game_version)'
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '生成任务表(异步队列+状态机,aigc "做得出"入口)';
|