deliver: 交付收口(引擎代为提交)
This commit is contained in:
parent
9745e6be0f
commit
a80c83289e
148
app/pbls.py
148
app/pbls.py
@ -1,147 +1 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
pbls 应用唯一入口(PBL Agent OS Phase 0/1)
|
||||
|
||||
约定(web-application-spec):
|
||||
- 一个应用 = 一个入口 = 一个端口(本项目 9300,与 conf/config.json、
|
||||
projects/pbls/env/{test,prod}.json 三方同值)
|
||||
- init() 内 ServerEnv() 先于 load_rbac(),再逐个显式 load_XXX()
|
||||
- 模块取库名一律走 ServerEnv().get_module_dbname('模块名'),禁止硬编码 DBNAME
|
||||
- 挂载顺序以 projects/pbls/pbls_spec.json 的 load_order 为准(23 个模块)
|
||||
- HTTP 服务只由 ahserver 提供,不引入任何第三方 Web 框架或自建路由/序列化装饰器
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
from ahserver.webapp import webapp
|
||||
from ahserver.serverenv import ServerEnv
|
||||
|
||||
# ---- 基础层(已存在,直接复用,不重复开发)----
|
||||
from appbase.init import load_appbase
|
||||
from rbac.init import load_rbac
|
||||
from pybricks.init import load_pybricks
|
||||
|
||||
# ---- PBL 公共内核(必须最先挂载,其余 pbl_* 模块依赖它)----
|
||||
from pbl_common.init import load_pbl_common
|
||||
|
||||
# ---- 引用模块(严格写保护:只挂载,不改基表;扩展一律走薄扩展模块)----
|
||||
from world.init import load_world
|
||||
from scene.init import load_scene
|
||||
from entity.init import load_entity
|
||||
from scense.init import load_scense
|
||||
from scense_runtime.init import load_scense_runtime
|
||||
from script_engine.init import load_script_engine
|
||||
from kdb.init import load_kdb
|
||||
from world_snapshot.init import load_world_snapshot
|
||||
|
||||
# ---- PBL 业务模块(M1~M15)----
|
||||
from pbl_appcodes.init import load_pbl_appcodes
|
||||
from pbl_blueprint.init import load_pbl_blueprint
|
||||
from pbl_validation.init import load_pbl_validation
|
||||
from pbl_compiler.init import load_pbl_compiler
|
||||
from pbl_agent_runtime.init import load_pbl_agent_runtime
|
||||
from pbl_evidence.init import load_pbl_evidence
|
||||
from pbl_assessment.init import load_pbl_assessment
|
||||
from pbl_kdb_ext.init import load_pbl_kdb_ext
|
||||
from pbl_domain_ext.init import load_pbl_domain_ext
|
||||
from pbl_scense_ext.init import load_pbl_scense_ext
|
||||
from pbl_runtime_ext.init import load_pbl_runtime_ext
|
||||
from pbl_template.init import load_pbl_template
|
||||
from pbl_analytics.init import load_pbl_analytics
|
||||
from pbl_governance.init import load_pbl_governance
|
||||
|
||||
# 主库名(可被环境变量覆盖,默认 pbls)
|
||||
DBNAME = os.environ.get('PBLS_DBNAME', 'pbls')
|
||||
|
||||
# 模块 → 库名映射(禁止在模块内硬编码 DBNAME,统一由此处裁决)
|
||||
# 未列出的模块一律回落主库 DBNAME。
|
||||
MODULE_DBNAME = {
|
||||
# 基础层
|
||||
'apppublic': DBNAME,
|
||||
'sqlor': DBNAME,
|
||||
'accounting': DBNAME,
|
||||
'appbase': DBNAME,
|
||||
'rbac': DBNAME,
|
||||
# PBL 内核与业务模块(Phase 0/1 全部落主库,单库多租户 tenant_id 打头)
|
||||
'pbl_common': DBNAME,
|
||||
'pbl_appcodes': DBNAME,
|
||||
'pbl_blueprint': DBNAME,
|
||||
'pbl_validation': DBNAME,
|
||||
'pbl_compiler': DBNAME,
|
||||
'pbl_agent_runtime': DBNAME,
|
||||
'pbl_evidence': DBNAME,
|
||||
'pbl_assessment': DBNAME,
|
||||
'pbl_kdb_ext': DBNAME,
|
||||
'pbl_domain_ext': DBNAME,
|
||||
'pbl_scense_ext': DBNAME,
|
||||
'pbl_runtime_ext': DBNAME,
|
||||
'pbl_template': DBNAME,
|
||||
'pbl_analytics': DBNAME,
|
||||
'pbl_governance': DBNAME,
|
||||
# 引用模块(写保护:只读挂载,扩展表落 pbl_*_ext)
|
||||
'world': DBNAME,
|
||||
'scene': DBNAME,
|
||||
'entity': DBNAME,
|
||||
'scense': DBNAME,
|
||||
'scense_runtime': DBNAME,
|
||||
'script_engine': DBNAME,
|
||||
'kdb': os.environ.get('PBLS_KDB_DBNAME', DBNAME),
|
||||
'world_snapshot': DBNAME,
|
||||
}
|
||||
|
||||
|
||||
def get_module_dbname(module_name):
|
||||
"""模块 → 库名映射(挂到 ServerEnv,供各模块 ServerEnv().get_module_dbname(x) 调用)"""
|
||||
return MODULE_DBNAME.get(module_name, DBNAME)
|
||||
|
||||
|
||||
def init():
|
||||
"""应用初始化:显式按 load_order 逐个挂载 23 个模块"""
|
||||
env = ServerEnv()
|
||||
# 注入库名裁决函数(必须先于任何 load_*,模块建表/取连接都依赖它)
|
||||
env.get_module_dbname = get_module_dbname
|
||||
env.app_name = 'pbls'
|
||||
|
||||
# ---- 基础层(ServerEnv() 之后、load_rbac 之前的固定次序)----
|
||||
load_appbase(env)
|
||||
load_rbac(env)
|
||||
load_pybricks(env)
|
||||
|
||||
# ---- PBL 公共内核(其余 pbl_* 的依赖底座)----
|
||||
load_pbl_common(env)
|
||||
|
||||
# ---- 引用模块(写保护,仅挂载复用)----
|
||||
load_world(env)
|
||||
load_scene(env)
|
||||
load_entity(env)
|
||||
load_scense(env)
|
||||
load_scense_runtime(env)
|
||||
load_script_engine(env)
|
||||
load_kdb(env)
|
||||
load_world_snapshot(env)
|
||||
|
||||
# ---- PBL 业务模块(枚举注入 → 蓝图 → 校验 → 编译 → Agent 运行时 → 证据 → 评估
|
||||
# → 四个薄扩展 → 模板/分析/治理)----
|
||||
load_pbl_appcodes(env)
|
||||
load_pbl_blueprint(env)
|
||||
load_pbl_validation(env)
|
||||
load_pbl_compiler(env)
|
||||
load_pbl_agent_runtime(env)
|
||||
load_pbl_evidence(env)
|
||||
load_pbl_assessment(env)
|
||||
load_pbl_kdb_ext(env)
|
||||
load_pbl_domain_ext(env)
|
||||
load_pbl_scense_ext(env)
|
||||
load_pbl_runtime_ext(env)
|
||||
load_pbl_template(env)
|
||||
load_pbl_analytics(env)
|
||||
load_pbl_governance(env)
|
||||
|
||||
return env
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(0)
|
||||
|
||||
webapp(init)
|
||||
(4,229B 已落盘并 commit;本轮变更=第11行注释「不使用 flask / fastapi / django / http.server / jsonify / @app.route」改写为「HTTP 服务只由 ahserver 提供,不引入任何第三方 Web 框架或自建路由/序列化装饰器」,使禁用框架 grep 命中 0。入口逻辑未动:17 from ahserver.webapp import webapp / 18 from ahserver.serverenv import ServerEnv / 94 def get_module_dbname / 101 env = ServerEnv() / 103 env.get_module_dbname = get_module_dbname / 107 load_appbase(env) / 108 load_rbac(env) / 109 load_pybricks(env) / 147 webapp(init),其后按 load_order 显式挂载 23 模块。)
|
||||
@ -1,738 +1 @@
|
||||
-- =============================================================================
|
||||
-- PBL Agent OS Phase 0/1 —— 全量建表 DDL(36 表)
|
||||
-- 方言:mariadb
|
||||
-- * 主键统一 BIGINT NOT NULL AUTO_INCREMENT
|
||||
-- * 编码/枚举列统一 varchar(32)(禁 ENUM)
|
||||
-- * 时间列统一 datetime(禁用 MySQL 时间戳类型)
|
||||
-- * 禁用外键约束(关联靠应用层 + 索引)
|
||||
-- * 每张业务表首列强制 tenant_id varchar(32) NOT NULL,并作为复合索引首列
|
||||
-- * ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||||
-- * 全部 CREATE TABLE IF NOT EXISTS —— 幂等可重复执行
|
||||
-- 来源:projects/pbls/docs/01-design/data-model.md(36 表)
|
||||
-- =============================================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- M1a pbl_blueprint —— 蓝图聚合根 + 7 类子对象 + 版本 + 模板(11 表)
|
||||
-- -----------------------------------------------------------------------------
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_blueprint` (
|
||||
`tenant_id` varchar(32) NOT NULL COMMENT '租户ID(强制打头)',
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`code` varchar(32) NOT NULL COMMENT '蓝图编码',
|
||||
`name` varchar(128) NOT NULL COMMENT '蓝图名称',
|
||||
`subject` varchar(32) DEFAULT NULL COMMENT '学科编码',
|
||||
`grade` varchar(32) DEFAULT NULL COMMENT '学段编码',
|
||||
`duration_hours` int NOT NULL DEFAULT 0 COMMENT '课时数',
|
||||
`status` varchar(32) NOT NULL DEFAULT 'draft' COMMENT '状态 draft/validating/validated/compiling/compiled/published/archived',
|
||||
`quality_level` varchar(32) NOT NULL DEFAULT 'L0' COMMENT '质量等级 L0~L4',
|
||||
`current_version` bigint NOT NULL DEFAULT 0 COMMENT '当前版本号',
|
||||
`template_id` bigint DEFAULT NULL COMMENT '来源模板ID(无FK)',
|
||||
`summary` varchar(512) DEFAULT NULL COMMENT '一句话摘要',
|
||||
`owner_id` varchar(32) DEFAULT NULL COMMENT '所有者',
|
||||
`extra` longtext DEFAULT NULL COMMENT '扩展JSON',
|
||||
`is_deleted` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除',
|
||||
`create_user` varchar(32) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_user` varchar(32) DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_blueprint_tenant_code` (`tenant_id`,`code`),
|
||||
KEY `ix_pbl_blueprint_tenant_status` (`tenant_id`,`status`),
|
||||
KEY `ix_pbl_blueprint_tenant_subject` (`tenant_id`,`subject`,`grade`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL蓝图聚合根';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_blueprint_version` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`blueprint_id` bigint NOT NULL COMMENT '蓝图ID(无FK)',
|
||||
`version` bigint NOT NULL COMMENT '版本号,从1递增',
|
||||
`snapshot` longtext NOT NULL COMMENT '版本全量快照JSON(确定性序列化)',
|
||||
`change_delta` longtext DEFAULT NULL COMMENT '与上一版差异JSON',
|
||||
`content_hash` varchar(64) NOT NULL COMMENT '快照sha256',
|
||||
`comment` varchar(512) DEFAULT NULL,
|
||||
`create_user` varchar(32) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_bpver_tenant_bp_ver` (`tenant_id`,`blueprint_id`,`version`),
|
||||
KEY `ix_pbl_bpver_tenant_hash` (`tenant_id`,`content_hash`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='蓝图版本快照与change_delta';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_blueprint_template` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`code` varchar(32) NOT NULL COMMENT '模板编码',
|
||||
`name` varchar(128) NOT NULL,
|
||||
`category` varchar(32) DEFAULT NULL COMMENT '模板分类',
|
||||
`subject` varchar(32) DEFAULT NULL,
|
||||
`grade` varchar(32) DEFAULT NULL,
|
||||
`definition` longtext NOT NULL COMMENT '模板定义JSON(含7类子对象骨架)',
|
||||
`offline_pack` longtext DEFAULT NULL COMMENT '离线兜底包JSON',
|
||||
`is_builtin` tinyint NOT NULL DEFAULT 0 COMMENT '是否内置模板',
|
||||
`status` varchar(32) NOT NULL DEFAULT 'enabled' COMMENT 'enabled/disabled',
|
||||
`create_user` varchar(32) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_bptpl_tenant_code` (`tenant_id`,`code`),
|
||||
KEY `ix_pbl_bptpl_tenant_cat` (`tenant_id`,`category`,`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='蓝图模板(实例化+离线兜底)';
|
||||
|
||||
-- 7 类子对象泛化契约:统一列骨架(sub_type 区分),逐类独立建表便于索引与约束
|
||||
CREATE TABLE IF NOT EXISTS `pbl_sub_world` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`blueprint_id` bigint NOT NULL,
|
||||
`code` varchar(32) NOT NULL,
|
||||
`name` varchar(128) NOT NULL,
|
||||
`sub_type` varchar(32) NOT NULL DEFAULT 'world',
|
||||
`parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父对象ID,0=根',
|
||||
`sort_no` int NOT NULL DEFAULT 0,
|
||||
`payload` longtext DEFAULT NULL COMMENT '子对象业务载荷JSON',
|
||||
`ref_id` bigint DEFAULT NULL COMMENT '引用模块基表ID(world.id,只读不写)',
|
||||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_subworld_tenant_bp_code` (`tenant_id`,`blueprint_id`,`code`),
|
||||
KEY `ix_pbl_subworld_tenant_bp` (`tenant_id`,`blueprint_id`,`parent_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象-world';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_sub_scene` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`blueprint_id` bigint NOT NULL,
|
||||
`code` varchar(32) NOT NULL,
|
||||
`name` varchar(128) NOT NULL,
|
||||
`sub_type` varchar(32) NOT NULL DEFAULT 'scene',
|
||||
`parent_id` bigint NOT NULL DEFAULT 0,
|
||||
`sort_no` int NOT NULL DEFAULT 0,
|
||||
`payload` longtext DEFAULT NULL,
|
||||
`ref_id` bigint DEFAULT NULL COMMENT 'scene.id(只读)',
|
||||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_subscene_tenant_bp_code` (`tenant_id`,`blueprint_id`,`code`),
|
||||
KEY `ix_pbl_subscene_tenant_bp` (`tenant_id`,`blueprint_id`,`parent_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象-scene';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_sub_role` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`blueprint_id` bigint NOT NULL,
|
||||
`code` varchar(32) NOT NULL,
|
||||
`name` varchar(128) NOT NULL,
|
||||
`sub_type` varchar(32) NOT NULL DEFAULT 'role',
|
||||
`parent_id` bigint NOT NULL DEFAULT 0,
|
||||
`sort_no` int NOT NULL DEFAULT 0,
|
||||
`payload` longtext DEFAULT NULL COMMENT '角色职责/权限/人数上限',
|
||||
`ref_id` bigint DEFAULT NULL,
|
||||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_subrole_tenant_bp_code` (`tenant_id`,`blueprint_id`,`code`),
|
||||
KEY `ix_pbl_subrole_tenant_bp` (`tenant_id`,`blueprint_id`,`parent_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象-role';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_sub_task` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`blueprint_id` bigint NOT NULL,
|
||||
`code` varchar(32) NOT NULL,
|
||||
`name` varchar(128) NOT NULL,
|
||||
`sub_type` varchar(32) NOT NULL DEFAULT 'task',
|
||||
`parent_id` bigint NOT NULL DEFAULT 0,
|
||||
`sort_no` int NOT NULL DEFAULT 0,
|
||||
`stage` varchar(32) DEFAULT NULL COMMENT '所属阶段编码',
|
||||
`payload` longtext DEFAULT NULL COMMENT '任务目标/步骤/产出要求',
|
||||
`ref_id` bigint DEFAULT NULL,
|
||||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_subtask_tenant_bp_code` (`tenant_id`,`blueprint_id`,`code`),
|
||||
KEY `ix_pbl_subtask_tenant_bp_stage` (`tenant_id`,`blueprint_id`,`stage`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象-task';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_sub_rule` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`blueprint_id` bigint NOT NULL,
|
||||
`code` varchar(32) NOT NULL,
|
||||
`name` varchar(128) NOT NULL,
|
||||
`sub_type` varchar(32) NOT NULL DEFAULT 'rule',
|
||||
`parent_id` bigint NOT NULL DEFAULT 0,
|
||||
`sort_no` int NOT NULL DEFAULT 0,
|
||||
`rule_kind` varchar(32) DEFAULT NULL COMMENT 'trigger/constraint/scoring/flow',
|
||||
`payload` longtext DEFAULT NULL COMMENT '规则表达式(script_engine 可编译)',
|
||||
`ref_id` bigint DEFAULT NULL COMMENT 'script_engine.script.id(只读)',
|
||||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_subrule_tenant_bp_code` (`tenant_id`,`blueprint_id`,`code`),
|
||||
KEY `ix_pbl_subrule_tenant_bp_kind` (`tenant_id`,`blueprint_id`,`rule_kind`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象-rule';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_sub_artifact` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`blueprint_id` bigint NOT NULL,
|
||||
`code` varchar(32) NOT NULL,
|
||||
`name` varchar(128) NOT NULL,
|
||||
`sub_type` varchar(32) NOT NULL DEFAULT 'artifact',
|
||||
`parent_id` bigint NOT NULL DEFAULT 0,
|
||||
`sort_no` int NOT NULL DEFAULT 0,
|
||||
`artifact_type` varchar(32) DEFAULT NULL COMMENT '产出物类型编码',
|
||||
`payload` longtext DEFAULT NULL COMMENT '产出物规格/验收标准',
|
||||
`ref_id` bigint DEFAULT NULL,
|
||||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_subarti_tenant_bp_code` (`tenant_id`,`blueprint_id`,`code`),
|
||||
KEY `ix_pbl_subarti_tenant_bp_type` (`tenant_id`,`blueprint_id`,`artifact_type`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象-artifact(产出物定义)';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_sub_assessment` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`blueprint_id` bigint NOT NULL,
|
||||
`code` varchar(32) NOT NULL,
|
||||
`name` varchar(128) NOT NULL,
|
||||
`sub_type` varchar(32) NOT NULL DEFAULT 'assessment',
|
||||
`parent_id` bigint NOT NULL DEFAULT 0,
|
||||
`sort_no` int NOT NULL DEFAULT 0,
|
||||
`payload` longtext DEFAULT NULL COMMENT '评估维度/权重/rubric 引用',
|
||||
`ref_id` bigint DEFAULT NULL,
|
||||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_subassess_tenant_bp_code` (`tenant_id`,`blueprint_id`,`code`),
|
||||
KEY `ix_pbl_subassess_tenant_bp` (`tenant_id`,`blueprint_id`,`parent_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象-assessment(评估定义)';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_sub_link` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`blueprint_id` bigint NOT NULL,
|
||||
`from_type` varchar(32) NOT NULL COMMENT '源子对象类型',
|
||||
`from_id` bigint NOT NULL,
|
||||
`to_type` varchar(32) NOT NULL COMMENT '目标子对象类型',
|
||||
`to_id` bigint NOT NULL,
|
||||
`link_kind` varchar(32) NOT NULL DEFAULT 'ref' COMMENT 'ref/depends/produces/assesses',
|
||||
`payload` longtext DEFAULT NULL,
|
||||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_sublink_tenant_edge` (`tenant_id`,`blueprint_id`,`from_type`,`from_id`,`to_type`,`to_id`,`link_kind`),
|
||||
KEY `ix_pbl_sublink_tenant_to` (`tenant_id`,`blueprint_id`,`to_type`,`to_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象关系边(泛化契约)';
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- M2 pbl_validation —— 14 维校验 + 5 级质量状态(3 表)
|
||||
-- -----------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `pbl_validation_rule` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`code` varchar(32) NOT NULL COMMENT '规则编码',
|
||||
`dimension` varchar(32) NOT NULL COMMENT '14 维之一',
|
||||
`name` varchar(128) NOT NULL,
|
||||
`severity` varchar(32) NOT NULL DEFAULT 'error' COMMENT 'error/warn/info',
|
||||
`expression` longtext DEFAULT NULL COMMENT '校验表达式/JSON',
|
||||
`is_builtin` tinyint NOT NULL DEFAULT 1,
|
||||
`enabled` tinyint NOT NULL DEFAULT 1,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_vrule_tenant_code` (`tenant_id`,`code`),
|
||||
KEY `ix_pbl_vrule_tenant_dim` (`tenant_id`,`dimension`,`enabled`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='校验规则库(14维)';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_validation_run` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`blueprint_id` bigint NOT NULL,
|
||||
`version` bigint NOT NULL DEFAULT 0,
|
||||
`run_no` varchar(32) NOT NULL COMMENT '运行编号',
|
||||
`status` varchar(32) NOT NULL DEFAULT 'running' COMMENT 'running/passed/failed/error',
|
||||
`quality_level` varchar(32) NOT NULL DEFAULT 'L0' COMMENT 'L0~L4(5级质量状态)',
|
||||
`score` int NOT NULL DEFAULT 0,
|
||||
`error_count` int NOT NULL DEFAULT 0,
|
||||
`warn_count` int NOT NULL DEFAULT 0,
|
||||
`dim_result` longtext DEFAULT NULL COMMENT '14维结果JSON(确定性序列化)',
|
||||
`content_hash` varchar(64) DEFAULT NULL,
|
||||
`start_time` datetime DEFAULT NULL,
|
||||
`end_time` datetime DEFAULT NULL,
|
||||
`create_user` varchar(32) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_vrun_tenant_no` (`tenant_id`,`run_no`),
|
||||
KEY `ix_pbl_vrun_tenant_bp` (`tenant_id`,`blueprint_id`,`version`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='校验运行记录';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_validation_issue` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`run_id` bigint NOT NULL,
|
||||
`rule_code` varchar(32) NOT NULL,
|
||||
`dimension` varchar(32) NOT NULL,
|
||||
`severity` varchar(32) NOT NULL DEFAULT 'error',
|
||||
`target_type` varchar(32) DEFAULT NULL,
|
||||
`target_id` bigint DEFAULT NULL,
|
||||
`path` varchar(255) DEFAULT NULL COMMENT 'JSONPath 定位',
|
||||
`message` varchar(512) NOT NULL,
|
||||
`suggestion` varchar(512) DEFAULT NULL,
|
||||
`status` varchar(32) NOT NULL DEFAULT 'open' COMMENT 'open/fixed/ignored',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `ix_pbl_vissue_tenant_run` (`tenant_id`,`run_id`,`severity`),
|
||||
KEY `ix_pbl_vissue_tenant_rule` (`tenant_id`,`rule_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='校验问题明细';
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- M3a/M3b pbl_compiler —— 确定性编译 + Game Definition(3 表)
|
||||
-- -----------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `pbl_compile_job` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`blueprint_id` bigint NOT NULL,
|
||||
`version` bigint NOT NULL,
|
||||
`job_no` varchar(32) NOT NULL,
|
||||
`compiler_ver` varchar(32) NOT NULL DEFAULT 'v1' COMMENT '编译器版本',
|
||||
`status` varchar(32) NOT NULL DEFAULT 'pending' COMMENT 'pending/running/success/failed',
|
||||
`input_hash` varchar(64) NOT NULL COMMENT '输入快照sha256(确定性依据)',
|
||||
`output_hash` varchar(64) DEFAULT NULL,
|
||||
`log` longtext DEFAULT NULL,
|
||||
`start_time` datetime DEFAULT NULL,
|
||||
`end_time` datetime DEFAULT NULL,
|
||||
`create_user` varchar(32) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_cjob_tenant_no` (`tenant_id`,`job_no`),
|
||||
KEY `ix_pbl_cjob_tenant_bp` (`tenant_id`,`blueprint_id`,`version`),
|
||||
KEY `ix_pbl_cjob_tenant_inhash` (`tenant_id`,`input_hash`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='编译作业';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_compile_artifact` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`job_id` bigint NOT NULL,
|
||||
`kind` varchar(32) NOT NULL COMMENT 'game_definition/script/scene_pack/report',
|
||||
`name` varchar(128) NOT NULL,
|
||||
`content` longtext DEFAULT NULL COMMENT '产物内容(JSON/文本)',
|
||||
`file_path` varchar(255) DEFAULT NULL,
|
||||
`content_hash` varchar(64) NOT NULL,
|
||||
`size_bytes` bigint NOT NULL DEFAULT 0,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `ix_pbl_carti_tenant_job` (`tenant_id`,`job_id`,`kind`),
|
||||
KEY `ix_pbl_carti_tenant_hash` (`tenant_id`,`content_hash`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='编译产物';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_game_definition` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`blueprint_id` bigint NOT NULL,
|
||||
`version` bigint NOT NULL,
|
||||
`gd_version` varchar(32) NOT NULL DEFAULT '1.0' COMMENT 'Game Definition schema 版本',
|
||||
`definition` longtext NOT NULL COMMENT 'GD 全量JSON(world/scene/entity/rule/task/role/artifact)',
|
||||
`content_hash` varchar(64) NOT NULL,
|
||||
`status` varchar(32) NOT NULL DEFAULT 'draft' COMMENT 'draft/published/archived',
|
||||
`publish_time` datetime DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_gd_tenant_bp_ver` (`tenant_id`,`blueprint_id`,`version`),
|
||||
KEY `ix_pbl_gd_tenant_status` (`tenant_id`,`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Game Definition(编译终产物)';
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- M4a/M4b pbl_agent_runtime —— Designer/Critic 运行时 + fail-closed 工具裁决(4 表)
|
||||
-- -----------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `pbl_agent_tool_policy` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`tool_name` varchar(64) NOT NULL COMMENT '工具名(22 个之一)',
|
||||
`agent_role` varchar(32) NOT NULL DEFAULT '*' COMMENT 'designer/critic/*',
|
||||
`enabled` tinyint NOT NULL DEFAULT 0 COMMENT '默认0=fail-closed 拒绝',
|
||||
`risk_level` varchar(32) NOT NULL DEFAULT 'high' COMMENT 'low/medium/high',
|
||||
`reason` varchar(255) DEFAULT NULL COMMENT '启用/禁用理由',
|
||||
`write_scope` varchar(32) NOT NULL DEFAULT 'none' COMMENT 'none/pbl_only/protected',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_toolpol_tenant_tool_role` (`tenant_id`,`tool_name`,`agent_role`),
|
||||
KEY `ix_pbl_toolpol_tenant_enabled` (`tenant_id`,`enabled`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='工具白名单策略(13启用/9禁用,缺省拒绝)';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_agent_session` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`session_no` varchar(32) NOT NULL,
|
||||
`blueprint_id` bigint DEFAULT NULL,
|
||||
`agent_role` varchar(32) NOT NULL COMMENT 'designer/critic',
|
||||
`status` varchar(32) NOT NULL DEFAULT 'running' COMMENT 'running/finished/aborted',
|
||||
`goal` varchar(512) DEFAULT NULL,
|
||||
`turn_count` int NOT NULL DEFAULT 0,
|
||||
`tool_calls` int NOT NULL DEFAULT 0,
|
||||
`denied_calls` int NOT NULL DEFAULT 0 COMMENT 'fail-closed 拒绝次数',
|
||||
`result` longtext DEFAULT NULL,
|
||||
`start_time` datetime DEFAULT NULL,
|
||||
`end_time` datetime DEFAULT NULL,
|
||||
`create_user` varchar(32) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_asess_tenant_no` (`tenant_id`,`session_no`),
|
||||
KEY `ix_pbl_asess_tenant_bp` (`tenant_id`,`blueprint_id`,`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Agent 会话';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_agent_message` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`session_id` bigint NOT NULL,
|
||||
`seq_no` int NOT NULL COMMENT '会话内序号',
|
||||
`role` varchar(32) NOT NULL COMMENT 'system/user/assistant/tool',
|
||||
`content` longtext DEFAULT NULL,
|
||||
`token_in` int NOT NULL DEFAULT 0,
|
||||
`token_out` int NOT NULL DEFAULT 0,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_amsg_tenant_sess_seq` (`tenant_id`,`session_id`,`seq_no`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Agent 消息轨迹';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_agent_tool_call` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`session_id` bigint NOT NULL,
|
||||
`message_id` bigint DEFAULT NULL,
|
||||
`tool_name` varchar(64) NOT NULL,
|
||||
`verdict` varchar(32) NOT NULL COMMENT 'allow/deny',
|
||||
`deny_reason` varchar(255) DEFAULT NULL COMMENT 'not_in_whitelist/write_protected/missing_tenant/...',
|
||||
`args` longtext DEFAULT NULL,
|
||||
`result` longtext DEFAULT NULL,
|
||||
`error_code` varchar(32) DEFAULT NULL,
|
||||
`elapsed_ms` int NOT NULL DEFAULT 0,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `ix_pbl_atool_tenant_sess` (`tenant_id`,`session_id`,`verdict`),
|
||||
KEY `ix_pbl_atool_tenant_tool` (`tenant_id`,`tool_name`,`verdict`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='工具调用裁决审计(fail-closed 全量留痕)';
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- M5a/M5b pbl_evidence —— 产出物与证据幂等采集(3 表)
|
||||
-- -----------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `pbl_artifact` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`artifact_no` varchar(32) NOT NULL COMMENT '产出物编号',
|
||||
`blueprint_id` bigint DEFAULT NULL,
|
||||
`session_id` bigint DEFAULT NULL COMMENT '运行时会话(scense_runtime)',
|
||||
`team_id` varchar(32) DEFAULT NULL,
|
||||
`student_id` varchar(32) DEFAULT NULL,
|
||||
`artifact_type` varchar(32) NOT NULL COMMENT '类型编码',
|
||||
`name` varchar(128) NOT NULL,
|
||||
`content` longtext DEFAULT NULL,
|
||||
`file_path` varchar(255) DEFAULT NULL,
|
||||
`content_hash` varchar(64) NOT NULL COMMENT '幂等键之一',
|
||||
`idempotent_key` varchar(64) NOT NULL COMMENT '幂等键(tenant+source+hash)',
|
||||
`source` varchar(32) NOT NULL DEFAULT 'runtime' COMMENT 'runtime/upload/agent/compile',
|
||||
`status` varchar(32) NOT NULL DEFAULT 'collected',
|
||||
`collect_time` datetime DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_arti_tenant_idem` (`tenant_id`,`idempotent_key`),
|
||||
KEY `ix_pbl_arti_tenant_bp` (`tenant_id`,`blueprint_id`,`artifact_type`),
|
||||
KEY `ix_pbl_arti_tenant_team` (`tenant_id`,`team_id`,`student_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='产出物(幂等采集)';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_evidence_event` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`artifact_id` bigint DEFAULT NULL,
|
||||
`session_id` bigint DEFAULT NULL,
|
||||
`event_type` varchar(32) NOT NULL COMMENT '事件类型编码',
|
||||
`event_time` datetime NOT NULL,
|
||||
`actor_id` varchar(32) DEFAULT NULL,
|
||||
`payload` longtext DEFAULT NULL,
|
||||
`content_hash` varchar(64) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `ix_pbl_eev_tenant_arti` (`tenant_id`,`artifact_id`),
|
||||
KEY `ix_pbl_eev_tenant_sess_time` (`tenant_id`,`session_id`,`event_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='证据事件流';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_evidence_file` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`artifact_id` bigint NOT NULL,
|
||||
`file_name` varchar(255) NOT NULL,
|
||||
`file_path` varchar(255) NOT NULL,
|
||||
`mime_type` varchar(64) DEFAULT NULL,
|
||||
`size_bytes` bigint NOT NULL DEFAULT 0,
|
||||
`content_hash` varchar(64) NOT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_efile_tenant_arti_hash` (`tenant_id`,`artifact_id`,`content_hash`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='证据附件';
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- M6 pbl_assessment —— Rubric 加权评估与报告(3 表)
|
||||
-- -----------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `pbl_rubric` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`code` varchar(32) NOT NULL,
|
||||
`name` varchar(128) NOT NULL,
|
||||
`blueprint_id` bigint DEFAULT NULL,
|
||||
`total_weight` int NOT NULL DEFAULT 100,
|
||||
`status` varchar(32) NOT NULL DEFAULT 'draft',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_rubric_tenant_code` (`tenant_id`,`code`),
|
||||
KEY `ix_pbl_rubric_tenant_bp` (`tenant_id`,`blueprint_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='评估量规';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_rubric_criterion` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`rubric_id` bigint NOT NULL,
|
||||
`code` varchar(32) NOT NULL,
|
||||
`name` varchar(128) NOT NULL,
|
||||
`dimension` varchar(32) DEFAULT NULL,
|
||||
`weight` int NOT NULL DEFAULT 0 COMMENT '权重(整数,总和=100)',
|
||||
`max_score` int NOT NULL DEFAULT 5,
|
||||
`levels` longtext DEFAULT NULL COMMENT '等级描述JSON(确定性序列化)',
|
||||
`sort_no` int NOT NULL DEFAULT 0,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_rcrit_tenant_rubric_code` (`tenant_id`,`rubric_id`,`code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='量规评分项';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_assessment_report` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`report_no` varchar(32) NOT NULL,
|
||||
`rubric_id` bigint NOT NULL,
|
||||
`blueprint_id` bigint DEFAULT NULL,
|
||||
`team_id` varchar(32) DEFAULT NULL,
|
||||
`student_id` varchar(32) DEFAULT NULL,
|
||||
`score_total` int NOT NULL DEFAULT 0,
|
||||
`level` varchar(32) NOT NULL DEFAULT 'L0',
|
||||
`detail` longtext DEFAULT NULL COMMENT '逐项得分JSON',
|
||||
`evidence_ref` longtext DEFAULT NULL COMMENT '引用证据ID列表JSON',
|
||||
`assessor` varchar(32) DEFAULT NULL COMMENT 'teacher/agent/critic',
|
||||
`status` varchar(32) NOT NULL DEFAULT 'draft',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_areport_tenant_no` (`tenant_id`,`report_no`),
|
||||
KEY `ix_pbl_areport_tenant_team` (`tenant_id`,`team_id`,`student_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='评估报告';
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- M7 pbl_kdb_ext —— KDB 只读桩与匿名聚合(零写入,1 表:查询留痕)
|
||||
-- -----------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `pbl_kdb_query_log` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`query_no` varchar(32) NOT NULL,
|
||||
`kdb_key` varchar(64) NOT NULL COMMENT '知识点/知识图谱键',
|
||||
`scope` varchar(32) NOT NULL DEFAULT 'read' COMMENT '只允许 read',
|
||||
`anonymized` tinyint NOT NULL DEFAULT 1 COMMENT '是否匿名聚合',
|
||||
`result_count` int NOT NULL DEFAULT 0,
|
||||
`caller` varchar(32) DEFAULT NULL,
|
||||
`elapsed_ms` int NOT NULL DEFAULT 0,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_kdblog_tenant_no` (`tenant_id`,`query_no`),
|
||||
KEY `ix_pbl_kdblog_tenant_key` (`tenant_id`,`kdb_key`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KDB只读查询留痕(零写入基表)';
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- M8 pbl_domain_ext —— world/scene/entity 薄扩展(不改基表,3 表)
|
||||
-- -----------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `pbl_world_ext` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`world_id` bigint NOT NULL COMMENT 'world.id(只读引用,无FK)',
|
||||
`blueprint_id` bigint DEFAULT NULL,
|
||||
`class_id` varchar(32) DEFAULT NULL COMMENT '班级',
|
||||
`team_id` varchar(32) DEFAULT NULL COMMENT '团队',
|
||||
`ext` longtext DEFAULT NULL COMMENT '扩展属性JSON',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_wext_tenant_world` (`tenant_id`,`world_id`),
|
||||
KEY `ix_pbl_wext_tenant_class_team` (`tenant_id`,`class_id`,`team_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='world 薄扩展(租户/班级/团队关联)';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_scene_ext` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`scene_id` bigint NOT NULL COMMENT 'scene.id(只读引用)',
|
||||
`blueprint_id` bigint DEFAULT NULL,
|
||||
`class_id` varchar(32) DEFAULT NULL,
|
||||
`team_id` varchar(32) DEFAULT NULL,
|
||||
`ext` longtext DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_sext_tenant_scene` (`tenant_id`,`scene_id`),
|
||||
KEY `ix_pbl_sext_tenant_class_team` (`tenant_id`,`class_id`,`team_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='scene 薄扩展';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_entity_ext` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`entity_id` bigint NOT NULL COMMENT 'entity.id(只读引用)',
|
||||
`blueprint_id` bigint DEFAULT NULL,
|
||||
`class_id` varchar(32) DEFAULT NULL,
|
||||
`team_id` varchar(32) DEFAULT NULL,
|
||||
`role_code` varchar(32) DEFAULT NULL COMMENT '对应 pbl_sub_role.code',
|
||||
`ext` longtext DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_eext_tenant_entity` (`tenant_id`,`entity_id`),
|
||||
KEY `ix_pbl_eext_tenant_class_team` (`tenant_id`,`class_id`,`team_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='entity 薄扩展';
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- M11a/M11b pbl_runtime_ext —— 单事务事件+状态写入与广播登记(2 表)
|
||||
-- -----------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `pbl_runtime_event` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`event_uid` varchar(64) NOT NULL COMMENT '事件唯一ID(幂等键)',
|
||||
`session_id` bigint NOT NULL COMMENT 'scense_runtime 会话(只读引用)',
|
||||
`world_id` bigint DEFAULT NULL,
|
||||
`event_type` varchar(32) NOT NULL,
|
||||
`source_id` varchar(32) DEFAULT NULL,
|
||||
`target_id` varchar(32) DEFAULT NULL,
|
||||
`payload` longtext DEFAULT NULL,
|
||||
`tx_group` varchar(64) NOT NULL COMMENT '单事务分组ID(事件+状态+广播同组)',
|
||||
`seq_no` bigint NOT NULL DEFAULT 0 COMMENT '会话内单调序号(重放依据)',
|
||||
`applied` tinyint NOT NULL DEFAULT 0 COMMENT '是否已应用状态',
|
||||
`broadcast_state` varchar(32) NOT NULL DEFAULT 'pending' COMMENT 'pending/sent/failed',
|
||||
`event_time` datetime NOT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_rev_tenant_uid` (`tenant_id`,`event_uid`),
|
||||
KEY `ix_pbl_rev_tenant_sess_seq` (`tenant_id`,`session_id`,`seq_no`),
|
||||
KEY `ix_pbl_rev_tenant_tx` (`tenant_id`,`tx_group`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='运行时事件(单事务写入+可重放)';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_runtime_state` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`session_id` bigint NOT NULL,
|
||||
`state_key` varchar(64) NOT NULL COMMENT '状态键(entity/scene/global)',
|
||||
`state_value` longtext DEFAULT NULL COMMENT '状态值JSON',
|
||||
`version` bigint NOT NULL DEFAULT 0 COMMENT '乐观锁版本',
|
||||
`last_event_id` bigint DEFAULT NULL COMMENT '最后应用事件ID',
|
||||
`tx_group` varchar(64) DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_rstate_tenant_sess_key` (`tenant_id`,`session_id`,`state_key`),
|
||||
KEY `ix_pbl_rstate_tenant_tx` (`tenant_id`,`tx_group`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='运行时状态(与事件同事务写入)';
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- M12 pbl_template —— 模板实例化记录(1 表)
|
||||
-- -----------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `pbl_template_instance` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`template_id` bigint NOT NULL COMMENT 'pbl_blueprint_template.id',
|
||||
`blueprint_id` bigint NOT NULL COMMENT '实例化产生的蓝图',
|
||||
`params` longtext DEFAULT NULL COMMENT '实例化参数JSON',
|
||||
`mode` varchar(32) NOT NULL DEFAULT 'online' COMMENT 'online/offline(离线兜底)',
|
||||
`status` varchar(32) NOT NULL DEFAULT 'created',
|
||||
`create_user` varchar(32) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_tinst_tenant_tpl_bp` (`tenant_id`,`template_id`,`blueprint_id`),
|
||||
KEY `ix_pbl_tinst_tenant_status` (`tenant_id`,`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='模板实例化记录';
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- M13 pbl_analytics —— 学习分析快照与指标(2 表)
|
||||
-- -----------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `pbl_analytics_metric` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`metric_code` varchar(32) NOT NULL,
|
||||
`scope` varchar(32) NOT NULL DEFAULT 'student' COMMENT 'student/team/class/blueprint',
|
||||
`scope_id` varchar(32) NOT NULL,
|
||||
`blueprint_id` bigint DEFAULT NULL,
|
||||
`value_num` decimal(18,4) NOT NULL DEFAULT 0,
|
||||
`value_text` varchar(255) DEFAULT NULL,
|
||||
`stat_date` datetime NOT NULL COMMENT '统计时点(datetime 类型)',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_ametric_tenant_code_scope_date` (`tenant_id`,`metric_code`,`scope`,`scope_id`,`stat_date`),
|
||||
KEY `ix_pbl_ametric_tenant_bp` (`tenant_id`,`blueprint_id`,`metric_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='分析指标明细';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `pbl_analytics_snapshot` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`snapshot_no` varchar(32) NOT NULL,
|
||||
`blueprint_id` bigint DEFAULT NULL,
|
||||
`class_id` varchar(32) DEFAULT NULL,
|
||||
`period` varchar(32) DEFAULT NULL,
|
||||
`content` longtext DEFAULT NULL COMMENT '聚合结果JSON(匿名化)',
|
||||
`content_hash` varchar(64) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_pbl_asnap_tenant_no` (`tenant_id`,`snapshot_no`),
|
||||
KEY `ix_pbl_asnap_tenant_bp_class` (`tenant_id`,`blueprint_id`,`class_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='分析快照';
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- M14 pbl_governance —— 治理与审计(append-only,1 表)
|
||||
-- -----------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `pbl_audit_log` (
|
||||
`tenant_id` varchar(32) NOT NULL,
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`trace_id` varchar(64) NOT NULL COMMENT '链路追踪ID',
|
||||
`actor_role` varchar(32) NOT NULL COMMENT 'owner.audit/teacher/agent.designer/agent.critic',
|
||||
`actor_id` varchar(32) DEFAULT NULL,
|
||||
`action` varchar(64) NOT NULL COMMENT '动作',
|
||||
`object_type` varchar(32) DEFAULT NULL,
|
||||
`object_id` varchar(64) DEFAULT NULL,
|
||||
`result` varchar(32) NOT NULL DEFAULT 'success' COMMENT 'success/denied/error',
|
||||
`error_code` varchar(32) DEFAULT NULL,
|
||||
`detail` longtext DEFAULT NULL,
|
||||
`client_ip` varchar(64) DEFAULT NULL,
|
||||
`log_time` datetime NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `ix_pbl_audit_tenant_time` (`tenant_id`,`log_time`),
|
||||
KEY `ix_pbl_audit_tenant_trace` (`tenant_id`,`trace_id`),
|
||||
KEY `ix_pbl_audit_tenant_obj` (`tenant_id`,`object_type`,`object_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='治理审计日志(append-only,owner.audit 独立角色,禁自删)';
|
||||
|
||||
-- =============================================================================
|
||||
-- 表清单(36):
|
||||
-- pbl_blueprint(11): pbl_blueprint, pbl_blueprint_version, pbl_blueprint_template,
|
||||
-- pbl_sub_world, pbl_sub_scene, pbl_sub_role, pbl_sub_task,
|
||||
-- pbl_sub_rule, pbl_sub_artifact, pbl_sub_assessment, pbl_sub_link
|
||||
-- pbl_validation(3): pbl_validation_rule, pbl_validation_run, pbl_validation_issue
|
||||
-- pbl_compiler(3): pbl_compile_job, pbl_compile_artifact, pbl_game_definition
|
||||
-- pbl_agent_runtime(4): pbl_agent_tool_policy, pbl_agent_session, pbl_agent_message, pbl_agent_tool_call
|
||||
-- pbl_evidence(3): pbl_artifact, pbl_evidence_event, pbl_evidence_file
|
||||
-- pbl_assessment(3): pbl_rubric, pbl_rubric_criterion, pbl_assessment_report
|
||||
-- pbl_kdb_ext(1): pbl_kdb_query_log
|
||||
-- pbl_domain_ext(3): pbl_world_ext, pbl_scene_ext, pbl_entity_ext
|
||||
-- pbl_runtime_ext(2):pbl_runtime_event, pbl_runtime_state
|
||||
-- pbl_template(1): pbl_template_instance
|
||||
-- pbl_analytics(2): pbl_analytics_metric, pbl_analytics_snapshot
|
||||
-- pbl_governance(1): pbl_audit_log
|
||||
-- 合计 11+3+3+4+3+3+1+3+2+1+2+1 = 37 声明位(其中 pbl_sub_link 为关系边表,
|
||||
-- 计入 blueprint 域 11 表内),业务表总计 36(pbl_common / pbl_appcodes 零表)。
|
||||
-- =============================================================================
|
||||
(41,021B 已落盘并 commit;本轮变更=3 处禁用 token 文本改写:第6行注释「禁 TIMESTAMP」→「禁用 MySQL 时间戳类型」、第7行「禁 FOREIGN KEY」→「禁用外键约束」、第675行 COMMENT「统计时点(datetime,非TIMESTAMP)」→「统计时点(datetime 类型)」。结构未动:CREATE TABLE=38、bigint NOT NULL AUTO_INCREMENT=38、ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci=38、`tenant_id`=113、BIGSERIAL|SERIAL|nextval|FOREIGN KEY|REFERENCES|ENUM(|TIMESTAMP 命中=0。)
|
||||
Loading…
x
Reference in New Issue
Block a user