/* ============================================================================ FMS 工作流与审批表建表脚本(wf_*) 依据文档:FMS新系统核心表结构设计.md §16 工作流与审批 语义设计见 FMS工作流与审批设计.md 使用说明: 1. 执行前先切换到目标数据库(USE [数据库名])。 2. 脚本只建表、索引和说明属性,不含初始化数据。 3. 不使用外键、CHECK、触发器;关联完整性和业务校验由业务层处理。 4. SQL Server 不支持建表内联注释,列注释通过扩展属性 MS_Description 持久化, SSMS 的表设计器和列属性说明直接读取。 5. 脚本按新建表编写;表已存在时需先删除后重新执行。 ============================================================================ */ SET NOCOUNT ON; GO /* ============================================================================ 16.1 流程定义 ============================================================================ */ create table dbo.wf_definition ( b_id varchar(50) not null primary key, -- 流程定义编码(创建后不可修改) b_name nvarchar(200) not null, -- 流程名称 b_i18n varchar(150) null, -- 多语言资源键(s_i18n.b_key) b_canuse tinyint not null default 1, -- 是否启用(0/1) b_bz nvarchar(2000) null, -- 备注 b_created_by varchar(50) null, -- 创建人(用户编码) b_created_at datetime2 null, -- 创建时间 b_updated_by varchar(50) null, -- 最后修改人 b_updated_at datetime2 null -- 最后修改时间 ); GO create index ix_wf_definition_canuse on dbo.wf_definition (b_canuse, b_id); GO -- 说明属性(MS_Description):SSMS 表设计器与列属性说明的来源 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程定义表(稳定逻辑身份,执行内容在版本表)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_definition'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程定义编码(创建后不可修改)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_definition', @level2type=N'COLUMN', @level2name=N'b_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程名称', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_definition', @level2type=N'COLUMN', @level2name=N'b_name'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'多语言资源键(s_i18n.b_key)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_definition', @level2type=N'COLUMN', @level2name=N'b_i18n'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否启用(0/1)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_definition', @level2type=N'COLUMN', @level2name=N'b_canuse'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'备注', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_definition', @level2type=N'COLUMN', @level2name=N'b_bz'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建人(用户编码)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_definition', @level2type=N'COLUMN', @level2name=N'b_created_by'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_definition', @level2type=N'COLUMN', @level2name=N'b_created_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改人', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_definition', @level2type=N'COLUMN', @level2name=N'b_updated_by'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_definition', @level2type=N'COLUMN', @level2name=N'b_updated_at'; GO /* ============================================================================ 16.2 流程版本 ============================================================================ */ create table dbo.wf_version ( b_id varchar(50) not null primary key, -- 版本 ID b_definition_id varchar(50) not null, -- 流程定义编码(wf_definition.b_id) b_version_no int not null, -- 版本序号(同一流程内递增) b_status varchar(20) not null default 'draft', -- 版本状态:draft(草稿)/published(已发布)/retired(已停用) b_schema_version int not null default 1, -- 配置结构版本(JSON 结构升级用) b_canvas_json nvarchar(max) null, -- 设计器布局(节点坐标、缩放),不参与执行 b_checksum varchar(128) null, -- 发布时计算的配置摘要 b_published_by varchar(50) null, -- 发布人(用户编码) b_published_at datetime2 null, -- 发布时间 b_bz nvarchar(2000) null, -- 备注 b_created_by varchar(50) null, -- 创建人 b_created_at datetime2 null, -- 创建时间 b_updated_by varchar(50) null, -- 最后修改人 b_updated_at datetime2 null -- 最后修改时间 ); GO create unique index ux_wf_version_no on dbo.wf_version (b_definition_id, b_version_no); GO create index ix_wf_version_status on dbo.wf_version (b_definition_id, b_status, b_version_no); GO create unique index ux_wf_version_draft on dbo.wf_version (b_definition_id) where b_status = 'draft'; GO -- 说明属性(MS_Description):SSMS 表设计器与列属性说明的来源 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程版本表(draft/published/retired,已发布版本不可原地修改)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'版本 ID', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version', @level2type=N'COLUMN', @level2name=N'b_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程定义编码(wf_definition.b_id)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version', @level2type=N'COLUMN', @level2name=N'b_definition_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'版本序号(同一流程内递增)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version', @level2type=N'COLUMN', @level2name=N'b_version_no'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'版本状态:draft(草稿)/published(已发布)/retired(已停用)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version', @level2type=N'COLUMN', @level2name=N'b_status'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'配置结构版本(JSON 结构升级用)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version', @level2type=N'COLUMN', @level2name=N'b_schema_version'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'设计器布局(节点坐标、缩放),不参与执行', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version', @level2type=N'COLUMN', @level2name=N'b_canvas_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'发布时计算的配置摘要', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version', @level2type=N'COLUMN', @level2name=N'b_checksum'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'发布人(用户编码)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version', @level2type=N'COLUMN', @level2name=N'b_published_by'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'发布时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version', @level2type=N'COLUMN', @level2name=N'b_published_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'备注', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version', @level2type=N'COLUMN', @level2name=N'b_bz'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建人', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version', @level2type=N'COLUMN', @level2name=N'b_created_by'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version', @level2type=N'COLUMN', @level2name=N'b_created_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改人', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version', @level2type=N'COLUMN', @level2name=N'b_updated_by'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_version', @level2type=N'COLUMN', @level2name=N'b_updated_at'; GO /* ============================================================================ 16.3 流程绑定 ============================================================================ */ create table dbo.wf_binding ( b_id varchar(50) not null primary key, -- 绑定 ID b_module_id varchar(50) not null, -- 模块编码(s_module.b_id,data/virtual 模块) b_event varchar(30) not null, -- 业务事件:submit(送审)/resubmit(重新提交)/change(变更) b_version_id varchar(50) not null, -- 已发布流程版本(wf_version.b_id) b_match_json nvarchar(max) null, -- 业务匹配条件 AST b_org_scope_json nvarchar(max) null, -- 公司、组织范围 b_status_field varchar(50) null, -- 业务状态字段(必须来自 s_field) b_status_map_json nvarchar(max) null, -- 流程状态到业务状态的映射 b_priority int not null default 0, -- 匹配优先级(小的先匹配) b_effective_from datetime2 null, -- 生效开始时间 b_effective_to datetime2 null, -- 生效结束时间 b_canuse tinyint not null default 1, -- 是否启用(0/1) b_bz nvarchar(2000) null, -- 备注 b_created_by varchar(50) null, -- 创建人 b_created_at datetime2 null, -- 创建时间 b_updated_by varchar(50) null, -- 最后修改人 b_updated_at datetime2 null -- 最后修改时间 ); GO create index ix_wf_binding_select on dbo.wf_binding (b_module_id, b_event, b_canuse, b_priority, b_effective_from, b_effective_to); GO create unique index ux_wf_binding_active_priority on dbo.wf_binding (b_module_id, b_event, b_priority) where b_canuse = 1; GO -- 说明属性(MS_Description):SSMS 表设计器与列属性说明的来源 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程绑定表(模块 + 业务事件 + 条件 → 流程版本)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'绑定 ID', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'模块编码(s_module.b_id,data/virtual 模块)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_module_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'业务事件:submit(送审)/resubmit(重新提交)/change(变更)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_event'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'已发布流程版本(wf_version.b_id)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_version_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'业务匹配条件 AST', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_match_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'公司、组织范围', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_org_scope_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'业务状态字段(必须来自 s_field)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_status_field'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程状态到业务状态的映射', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_status_map_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'匹配优先级(小的先匹配)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_priority'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'生效开始时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_effective_from'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'生效结束时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_effective_to'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否启用(0/1)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_canuse'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'备注', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_bz'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建人', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_created_by'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_created_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改人', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_updated_by'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_binding', @level2type=N'COLUMN', @level2name=N'b_updated_at'; GO /* ============================================================================ 16.4 流程节点 ============================================================================ */ create table dbo.wf_node ( b_id varchar(50) not null primary key, -- 节点 ID b_version_id varchar(50) not null, -- 流程版本(wf_version.b_id) b_node_key varchar(80) not null, -- 版本内稳定编码(历史记录引用它) b_name nvarchar(200) not null, -- 节点名称 b_i18n varchar(150) null, -- 多语言资源键 b_node_type varchar(30) not null, -- 节点类型:start(开始)/user_task(人工审批)/cc_task(抄送)/exclusive_gateway(条件分支)/parallel_gateway(并行分支)/service_task(服务节点)/end(结束) b_approval_mode varchar(30) null, -- 审批方式:single(单人)/any(或签)/all(会签)/serial(串行会签)/n_of_m(N 人通过)/percentage(按比例通过) b_reject_mode varchar(30) null, -- 驳回策略:terminate(驳回结束)/return_initiator(退回发起人)/return_previous(退回上一节点) b_due_hours decimal(10,2) null, -- 审批时限(小时) b_config_json nvarchar(max) null, -- 节点扩展配置(requiredCount、requiredRatio、formPolicy 等) b_xh int not null default 0, -- 显示顺序 b_canuse tinyint not null default 1 -- 是否启用(0/1) ); GO create unique index ux_wf_node_key on dbo.wf_node (b_version_id, b_node_key); GO create index ix_wf_node_type on dbo.wf_node (b_version_id, b_node_type, b_xh, b_node_key); GO -- 说明属性(MS_Description):SSMS 表设计器与列属性说明的来源 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程节点表(版本内节点定义)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'节点 ID', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node', @level2type=N'COLUMN', @level2name=N'b_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程版本(wf_version.b_id)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node', @level2type=N'COLUMN', @level2name=N'b_version_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'版本内稳定编码(历史记录引用它)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node', @level2type=N'COLUMN', @level2name=N'b_node_key'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'节点名称', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node', @level2type=N'COLUMN', @level2name=N'b_name'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'多语言资源键', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node', @level2type=N'COLUMN', @level2name=N'b_i18n'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'节点类型:start(开始)/user_task(人工审批)/cc_task(抄送)/exclusive_gateway(条件分支)/parallel_gateway(并行分支)/service_task(服务节点)/end(结束)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node', @level2type=N'COLUMN', @level2name=N'b_node_type'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'审批方式:single(单人)/any(或签)/all(会签)/serial(串行会签)/n_of_m(N 人通过)/percentage(按比例通过)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node', @level2type=N'COLUMN', @level2name=N'b_approval_mode'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'驳回策略:terminate(驳回结束)/return_initiator(退回发起人)/return_previous(退回上一节点)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node', @level2type=N'COLUMN', @level2name=N'b_reject_mode'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'审批时限(小时)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node', @level2type=N'COLUMN', @level2name=N'b_due_hours'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'节点扩展配置(requiredCount、requiredRatio、formPolicy 等)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node', @level2type=N'COLUMN', @level2name=N'b_config_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'显示顺序', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node', @level2type=N'COLUMN', @level2name=N'b_xh'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否启用(0/1)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node', @level2type=N'COLUMN', @level2name=N'b_canuse'; GO /* ============================================================================ 16.5 节点连线 ============================================================================ */ create table dbo.wf_edge ( b_id varchar(50) not null primary key, -- 连线 ID b_version_id varchar(50) not null, -- 流程版本 b_from_node_key varchar(80) not null, -- 来源节点编码 b_to_node_key varchar(80) not null, -- 目标节点编码 b_name nvarchar(200) null, -- 连线名称(画布标签,留空时前端按条件摘要显示) b_condition_json nvarchar(max) null, -- 连线条件 AST b_priority int not null default 0, -- 判断优先级(小的先判断) b_canuse tinyint not null default 1, -- 是否启用(0/1) b_bz nvarchar(1000) null -- 备注 ); GO create index ix_wf_edge_from on dbo.wf_edge (b_version_id, b_from_node_key, b_canuse, b_priority, b_to_node_key); GO create index ix_wf_edge_to on dbo.wf_edge (b_version_id, b_to_node_key, b_canuse, b_priority, b_from_node_key); GO -- 说明属性(MS_Description):SSMS 表设计器与列属性说明的来源 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'节点连线表(含条件分支)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_edge'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'连线 ID', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_edge', @level2type=N'COLUMN', @level2name=N'b_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程版本', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_edge', @level2type=N'COLUMN', @level2name=N'b_version_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'来源节点编码', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_edge', @level2type=N'COLUMN', @level2name=N'b_from_node_key'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'目标节点编码', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_edge', @level2type=N'COLUMN', @level2name=N'b_to_node_key'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'连线名称(画布标签,留空时前端按条件摘要显示)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_edge', @level2type=N'COLUMN', @level2name=N'b_name'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'连线条件 AST', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_edge', @level2type=N'COLUMN', @level2name=N'b_condition_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'判断优先级(小的先判断)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_edge', @level2type=N'COLUMN', @level2name=N'b_priority'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否启用(0/1)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_edge', @level2type=N'COLUMN', @level2name=N'b_canuse'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'备注', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_edge', @level2type=N'COLUMN', @level2name=N'b_bz'; GO /* ============================================================================ 16.6 审批人规则 ============================================================================ */ create table dbo.wf_actor_rule ( b_id varchar(50) not null primary key, -- 规则 ID b_version_id varchar(50) not null, -- 流程版本 b_node_key varchar(80) not null, -- 节点编码 b_actor_type varchar(30) not null, -- 解析类型:user(指定用户)/initiator(发起人)/initiator_manager(发起人直属领导)/dept_manager(部门负责人)/position(岗位)/org_role(组织角色)/field_user(业务字段用户)/custom(自定义解析器) b_actor_ref varchar(150) null, -- 用户、岗位、角色或字段编码 b_resolve_json nvarchar(max) null, -- 解析参数 b_condition_json nvarchar(max) null, -- 规则适用条件 AST b_fallback_type varchar(30) null, -- 解析为空时的兜底:none(不兜底)/admin(管理员)/initiator(发起人)/custom(自定义) b_fallback_ref varchar(150) null, -- 兜底引用 b_priority int not null default 0, -- 优先级(串行会签的顺序来源) b_canuse tinyint not null default 1, -- 是否启用(0/1) b_bz nvarchar(1000) null -- 备注 ); GO create index ix_wf_actor_rule_node on dbo.wf_actor_rule (b_version_id, b_node_key, b_canuse, b_priority, b_actor_type); GO -- 说明属性(MS_Description):SSMS 表设计器与列属性说明的来源 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'审批人规则表(节点内审批人、抄送人的解析规则)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_actor_rule'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'规则 ID', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_actor_rule', @level2type=N'COLUMN', @level2name=N'b_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程版本', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_actor_rule', @level2type=N'COLUMN', @level2name=N'b_version_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'节点编码', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_actor_rule', @level2type=N'COLUMN', @level2name=N'b_node_key'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'解析类型:user(指定用户)/initiator(发起人)/initiator_manager(发起人直属领导)/dept_manager(部门负责人)/position(岗位)/org_role(组织角色)/field_user(业务字段用户)/custom(自定义解析器)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_actor_rule', @level2type=N'COLUMN', @level2name=N'b_actor_type'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用户、岗位、角色或字段编码', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_actor_rule', @level2type=N'COLUMN', @level2name=N'b_actor_ref'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'解析参数', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_actor_rule', @level2type=N'COLUMN', @level2name=N'b_resolve_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'规则适用条件 AST', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_actor_rule', @level2type=N'COLUMN', @level2name=N'b_condition_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'解析为空时的兜底:none(不兜底)/admin(管理员)/initiator(发起人)/custom(自定义)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_actor_rule', @level2type=N'COLUMN', @level2name=N'b_fallback_type'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'兜底引用', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_actor_rule', @level2type=N'COLUMN', @level2name=N'b_fallback_ref'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'优先级(串行会签的顺序来源)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_actor_rule', @level2type=N'COLUMN', @level2name=N'b_priority'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否启用(0/1)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_actor_rule', @level2type=N'COLUMN', @level2name=N'b_canuse'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'备注', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_actor_rule', @level2type=N'COLUMN', @level2name=N'b_bz'; GO /* ============================================================================ 16.7 流程实例 ============================================================================ */ create table dbo.wf_instance ( b_id uniqueidentifier not null primary key, -- 实例 ID(应用层生成 UUIDv7) b_definition_id varchar(50) not null, -- 流程定义编码 b_version_id varchar(50) not null, -- 流程版本(提交时固定) b_binding_id varchar(50) not null, -- 命中的绑定(wf_binding.b_id) b_module_id varchar(50) not null, -- 业务模块编码 b_event varchar(30) not null, -- 业务事件:submit(送审)/resubmit(重新提交)/change(变更) b_business_id varchar(50) not null, -- 业务主键(统一按字符串保存) b_business_no nvarchar(200) null, -- 业务单号(列表展示) b_org_id varchar(50) null, -- 公司/组织编码 b_initiator_id varchar(50) not null, -- 发起人(用户编码) b_initiator_dept_id varchar(50) null, -- 发起人部门编码 b_status varchar(30) not null, -- 实例状态:running(运行中)/approved(已通过)/rejected(已驳回)/returned(已退回)/withdrawn(已撤回)/cancelled(已取消)/expired(已过期)/error(异常待处理) b_context_json nvarchar(max) null, -- 运行变量 b_snapshot_json nvarchar(max) null, -- 提交时业务快照 b_current_summary_json nvarchar(max) null, -- 列表展示用当前节点摘要 b_row_version bigint not null default 0, -- 乐观锁版本号 b_idempotency_key varchar(100) null, -- 幂等键 b_started_at datetime2 not null, -- 开始时间 b_completed_at datetime2 null, -- 结束时间 b_created_by varchar(50) null, -- 创建人 b_created_at datetime2 null, -- 创建时间 b_updated_by varchar(50) null, -- 最后修改人 b_updated_at datetime2 null -- 最后修改时间 ); GO create index ix_wf_instance_business on dbo.wf_instance (b_module_id, b_business_id, b_event, b_status, b_id); GO create index ix_wf_instance_initiator on dbo.wf_instance (b_initiator_id, b_status, b_started_at, b_id); GO create index ix_wf_instance_version on dbo.wf_instance (b_version_id, b_started_at, b_id); GO create unique index ux_wf_instance_idempotency on dbo.wf_instance (b_module_id, b_business_id, b_idempotency_key) where b_idempotency_key is not null; GO -- 说明属性(MS_Description):SSMS 表设计器与列属性说明的来源 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程实例表(某张业务单据某次提交的运行流程)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'实例 ID(应用层生成 UUIDv7)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程定义编码', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_definition_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程版本(提交时固定)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_version_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'命中的绑定(wf_binding.b_id)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_binding_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'业务模块编码', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_module_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'业务事件:submit(送审)/resubmit(重新提交)/change(变更)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_event'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'业务主键(统一按字符串保存)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_business_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'业务单号(列表展示)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_business_no'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'公司/组织编码', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_org_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'发起人(用户编码)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_initiator_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'发起人部门编码', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_initiator_dept_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'实例状态:running(运行中)/approved(已通过)/rejected(已驳回)/returned(已退回)/withdrawn(已撤回)/cancelled(已取消)/expired(已过期)/error(异常待处理)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_status'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'运行变量', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_context_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'提交时业务快照', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_snapshot_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列表展示用当前节点摘要', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_current_summary_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'乐观锁版本号', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_row_version'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'幂等键', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_idempotency_key'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'开始时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_started_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'结束时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_completed_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建人', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_created_by'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_created_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改人', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_updated_by'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_instance', @level2type=N'COLUMN', @level2name=N'b_updated_at'; GO /* ============================================================================ 16.8 节点运行 ============================================================================ */ create table dbo.wf_node_run ( b_id uniqueidentifier not null primary key, -- 节点运行 ID(UUIDv7) b_instance_id uniqueidentifier not null, -- 流程实例(wf_instance.b_id) b_node_key varchar(80) not null, -- 节点编码 b_run_no int not null default 1, -- 同一节点的第几次运行(退回、循环用) b_status varchar(30) not null, -- 节点状态:pending(待激活)/running(运行中)/completed(已完成)/skipped(已跳过) b_required_count int null, -- 应签人数(按比例时在节点激活时换算) b_completed_count int not null default 0, -- 已通过人数 b_rejected_count int not null default 0, -- 已驳回人数 b_entered_at datetime2 null, -- 进入时间 b_exited_at datetime2 null, -- 离开时间 b_actor_snapshot_json nvarchar(max) null, -- 审批人规则快照 b_created_at datetime2 null -- 创建时间 ); GO create index ix_wf_node_run_instance on dbo.wf_node_run (b_instance_id, b_status, b_node_key, b_run_no, b_id); GO -- 说明属性(MS_Description):SSMS 表设计器与列属性说明的来源 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'节点运行表(节点在实例中的一次进入和处理记录)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node_run'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'节点运行 ID(UUIDv7)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node_run', @level2type=N'COLUMN', @level2name=N'b_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程实例(wf_instance.b_id)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node_run', @level2type=N'COLUMN', @level2name=N'b_instance_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'节点编码', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node_run', @level2type=N'COLUMN', @level2name=N'b_node_key'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'同一节点的第几次运行(退回、循环用)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node_run', @level2type=N'COLUMN', @level2name=N'b_run_no'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'节点状态:pending(待激活)/running(运行中)/completed(已完成)/skipped(已跳过)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node_run', @level2type=N'COLUMN', @level2name=N'b_status'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'应签人数(按比例时在节点激活时换算)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node_run', @level2type=N'COLUMN', @level2name=N'b_required_count'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'已通过人数', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node_run', @level2type=N'COLUMN', @level2name=N'b_completed_count'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'已驳回人数', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node_run', @level2type=N'COLUMN', @level2name=N'b_rejected_count'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'进入时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node_run', @level2type=N'COLUMN', @level2name=N'b_entered_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'离开时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node_run', @level2type=N'COLUMN', @level2name=N'b_exited_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'审批人规则快照', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node_run', @level2type=N'COLUMN', @level2name=N'b_actor_snapshot_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_node_run', @level2type=N'COLUMN', @level2name=N'b_created_at'; GO /* ============================================================================ 16.9 待办任务 ============================================================================ */ create table dbo.wf_task ( b_id uniqueidentifier not null primary key, -- 任务 ID(UUIDv7) b_instance_id uniqueidentifier not null, -- 流程实例 b_node_run_id uniqueidentifier not null, -- 节点运行(会签、或签聚合判断用) b_node_key varchar(80) not null, -- 节点编码 b_actor_rule_id varchar(50) null, -- 命中的审批人规则 b_assignee_type varchar(30) not null, -- 受理人类型:user(指定用户)/position(岗位)/role(角色)/delegate(委托) b_assignee_id varchar(50) not null, -- 实际用户编码 b_seq int not null default 0, -- 同节点内处理顺序(串行会签生效) b_status varchar(30) not null, -- 任务状态:waiting(未激活)/pending(待处理)/claimed(已抢占)/approved(已通过)/rejected(已驳回)/cancelled(已取消)/expired(已过期) b_due_at datetime2 null, -- 应处理时间 b_claimed_by varchar(50) null, -- 抢占人 b_claimed_at datetime2 null, -- 抢占时间 b_completed_by varchar(50) null, -- 处理人 b_completed_at datetime2 null, -- 处理时间 b_rule_snapshot_json nvarchar(max) null, -- 审批人解析快照 b_created_at datetime2 null, -- 创建时间 b_updated_at datetime2 null -- 最后修改时间 ); GO create index ix_wf_task_assignee on dbo.wf_task (b_assignee_id, b_status, b_due_at, b_id); GO create index ix_wf_task_instance on dbo.wf_task (b_instance_id, b_status, b_node_run_id, b_id); GO create index ix_wf_task_due on dbo.wf_task (b_status, b_due_at, b_id); GO -- 说明属性(MS_Description):SSMS 表设计器与列属性说明的来源 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'待办任务表(一名实际审批人一行)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'任务 ID(UUIDv7)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程实例', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_instance_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'节点运行(会签、或签聚合判断用)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_node_run_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'节点编码', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_node_key'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'命中的审批人规则', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_actor_rule_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'受理人类型:user(指定用户)/position(岗位)/role(角色)/delegate(委托)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_assignee_type'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'实际用户编码', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_assignee_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'同节点内处理顺序(串行会签生效)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_seq'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'任务状态:waiting(未激活)/pending(待处理)/claimed(已抢占)/approved(已通过)/rejected(已驳回)/cancelled(已取消)/expired(已过期)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_status'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'应处理时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_due_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'抢占人', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_claimed_by'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'抢占时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_claimed_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'处理人', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_completed_by'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'处理时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_completed_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'审批人解析快照', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_rule_snapshot_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_created_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_task', @level2type=N'COLUMN', @level2name=N'b_updated_at'; GO /* ============================================================================ 16.10 审批动作 ============================================================================ */ create table dbo.wf_action ( b_id uniqueidentifier not null primary key, -- 动作 ID(UUIDv7) b_instance_id uniqueidentifier not null, -- 流程实例 b_node_run_id uniqueidentifier null, -- 节点运行 b_task_id uniqueidentifier null, -- 待办任务 b_action varchar(30) not null, -- 动作编码:submit(送审)/approve(通过)/reject(驳回)/return(退回)/withdraw(撤回)/cancel(取消)/claim(抢占)/transfer(转交)/delegate(委托)/reassign(转派)/add_approver(加签)/urge(催办)/cc(抄送) b_operator_id varchar(50) null, -- 操作人(用户编码,系统动作为空) b_from_status varchar(30) null, -- 变更前状态 b_to_status varchar(30) null, -- 变更后状态 b_comment nvarchar(2000) null, -- 审批意见 b_payload_json nvarchar(max) null, -- 动作载荷(命中的条件、边、加签位置等) b_request_id varchar(64) null, -- 请求 ID b_trace_id varchar(64) null, -- 链路 ID b_occurdatetime datetime2 not null -- 发生时间 ); GO create index ix_wf_action_instance on dbo.wf_action (b_instance_id, b_occurdatetime, b_id); GO create index ix_wf_action_operator on dbo.wf_action (b_operator_id, b_occurdatetime, b_id); GO create unique index ux_wf_action_request on dbo.wf_action (b_request_id) where b_request_id is not null; GO -- 说明属性(MS_Description):SSMS 表设计器与列属性说明的来源 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'审批动作表(只追加,不更新历史动作)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_action'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'动作 ID(UUIDv7)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_action', @level2type=N'COLUMN', @level2name=N'b_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程实例', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_action', @level2type=N'COLUMN', @level2name=N'b_instance_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'节点运行', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_action', @level2type=N'COLUMN', @level2name=N'b_node_run_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'待办任务', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_action', @level2type=N'COLUMN', @level2name=N'b_task_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'动作编码:submit(送审)/approve(通过)/reject(驳回)/return(退回)/withdraw(撤回)/cancel(取消)/claim(抢占)/transfer(转交)/delegate(委托)/reassign(转派)/add_approver(加签)/urge(催办)/cc(抄送)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_action', @level2type=N'COLUMN', @level2name=N'b_action'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'操作人(用户编码,系统动作为空)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_action', @level2type=N'COLUMN', @level2name=N'b_operator_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'变更前状态', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_action', @level2type=N'COLUMN', @level2name=N'b_from_status'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'变更后状态', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_action', @level2type=N'COLUMN', @level2name=N'b_to_status'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'审批意见', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_action', @level2type=N'COLUMN', @level2name=N'b_comment'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'动作载荷(命中的条件、边、加签位置等)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_action', @level2type=N'COLUMN', @level2name=N'b_payload_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'请求 ID', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_action', @level2type=N'COLUMN', @level2name=N'b_request_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'链路 ID', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_action', @level2type=N'COLUMN', @level2name=N'b_trace_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'发生时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_action', @level2type=N'COLUMN', @level2name=N'b_occurdatetime'; GO /* ============================================================================ 16.11 抄送记录 ============================================================================ */ create table dbo.wf_cc ( b_id uniqueidentifier not null primary key, -- 抄送 ID(UUIDv7) b_instance_id uniqueidentifier not null, -- 流程实例 b_node_run_id uniqueidentifier null, -- 来源节点运行 b_node_key varchar(80) null, -- 来源节点编码 b_recipient_id varchar(50) not null, -- 抄送接收人(用户编码) b_actor_rule_id varchar(50) null, -- 命中的抄送规则 b_status varchar(20) not null default 'unread', -- 阅读状态:unread(未读)/read(已读) b_read_at datetime2 null, -- 阅读时间 b_rule_snapshot_json nvarchar(max) null, -- 抄送人解析快照 b_created_at datetime2 null -- 创建时间 ); GO create index ix_wf_cc_recipient on dbo.wf_cc (b_recipient_id, b_status, b_created_at, b_id); GO create index ix_wf_cc_instance on dbo.wf_cc (b_instance_id, b_created_at, b_id); GO -- 说明属性(MS_Description):SSMS 表设计器与列属性说明的来源 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'抄送记录表(抄送人不产生待办,不参与节点判定)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_cc'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'抄送 ID(UUIDv7)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_cc', @level2type=N'COLUMN', @level2name=N'b_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流程实例', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_cc', @level2type=N'COLUMN', @level2name=N'b_instance_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'来源节点运行', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_cc', @level2type=N'COLUMN', @level2name=N'b_node_run_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'来源节点编码', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_cc', @level2type=N'COLUMN', @level2name=N'b_node_key'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'抄送接收人(用户编码)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_cc', @level2type=N'COLUMN', @level2name=N'b_recipient_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'命中的抄送规则', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_cc', @level2type=N'COLUMN', @level2name=N'b_actor_rule_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'阅读状态:unread(未读)/read(已读)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_cc', @level2type=N'COLUMN', @level2name=N'b_status'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'阅读时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_cc', @level2type=N'COLUMN', @level2name=N'b_read_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'抄送人解析快照', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_cc', @level2type=N'COLUMN', @level2name=N'b_rule_snapshot_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_cc', @level2type=N'COLUMN', @level2name=N'b_created_at'; GO /* ============================================================================ 16.12 委托 ============================================================================ */ create table dbo.wf_delegation ( b_id varchar(50) not null primary key, -- 委托 ID b_from_user_id varchar(50) not null, -- 委托人(用户编码) b_to_user_id varchar(50) not null, -- 受托人(用户编码) b_scope_json nvarchar(max) null, -- 委托范围(模块、动作、组织) b_start_at datetime2 not null, -- 生效时间 b_end_at datetime2 not null, -- 失效时间 b_reason nvarchar(500) null, -- 委托原因 b_canuse tinyint not null default 1, -- 是否启用(0/1) b_created_by varchar(50) null, -- 创建人 b_created_at datetime2 null, -- 创建时间 b_updated_by varchar(50) null, -- 最后修改人 b_updated_at datetime2 null -- 最后修改时间 ); GO create index ix_wf_delegation_user on dbo.wf_delegation (b_from_user_id, b_canuse, b_start_at, b_end_at, b_to_user_id); GO -- 说明属性(MS_Description):SSMS 表设计器与列属性说明的来源 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'委托表(审批人把待办委托给他人处理)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_delegation'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'委托 ID', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_delegation', @level2type=N'COLUMN', @level2name=N'b_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'委托人(用户编码)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_delegation', @level2type=N'COLUMN', @level2name=N'b_from_user_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'受托人(用户编码)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_delegation', @level2type=N'COLUMN', @level2name=N'b_to_user_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'委托范围(模块、动作、组织)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_delegation', @level2type=N'COLUMN', @level2name=N'b_scope_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'生效时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_delegation', @level2type=N'COLUMN', @level2name=N'b_start_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'失效时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_delegation', @level2type=N'COLUMN', @level2name=N'b_end_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'委托原因', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_delegation', @level2type=N'COLUMN', @level2name=N'b_reason'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否启用(0/1)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_delegation', @level2type=N'COLUMN', @level2name=N'b_canuse'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建人', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_delegation', @level2type=N'COLUMN', @level2name=N'b_created_by'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_delegation', @level2type=N'COLUMN', @level2name=N'b_created_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改人', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_delegation', @level2type=N'COLUMN', @level2name=N'b_updated_by'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_delegation', @level2type=N'COLUMN', @level2name=N'b_updated_at'; GO /* ============================================================================ 16.13 通知消息 ============================================================================ */ create table dbo.wf_outbox ( b_id uniqueidentifier not null primary key, -- 消息 ID(UUIDv7) b_event_code varchar(80) not null, -- 事件编码 b_aggregate_type varchar(30) not null, -- 聚合类型:instance(流程实例)/task(待办任务) b_aggregate_id varchar(50) not null, -- 聚合 ID b_payload_json nvarchar(max) not null, -- 消息载荷 b_status varchar(20) not null default 'pending', -- 发送状态:pending(待发送)/sent(已发送)/failed(发送失败) b_retry_count int not null default 0, -- 重试次数 b_next_retry_at datetime2 null, -- 下次重试时间 b_last_error nvarchar(2000) null, -- 最后错误 b_occurdatetime datetime2 not null -- 发生时间 ); GO create index ix_wf_outbox_dispatch on dbo.wf_outbox (b_status, b_next_retry_at, b_occurdatetime, b_id); GO -- 说明属性(MS_Description):SSMS 表设计器与列属性说明的来源 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'通知消息表(outbox,异步发送,不阻塞审批事务)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_outbox'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'消息 ID(UUIDv7)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_outbox', @level2type=N'COLUMN', @level2name=N'b_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'事件编码', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_outbox', @level2type=N'COLUMN', @level2name=N'b_event_code'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'聚合类型:instance(流程实例)/task(待办任务)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_outbox', @level2type=N'COLUMN', @level2name=N'b_aggregate_type'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'聚合 ID', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_outbox', @level2type=N'COLUMN', @level2name=N'b_aggregate_id'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'消息载荷', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_outbox', @level2type=N'COLUMN', @level2name=N'b_payload_json'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'发送状态:pending(待发送)/sent(已发送)/failed(发送失败)', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_outbox', @level2type=N'COLUMN', @level2name=N'b_status'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'重试次数', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_outbox', @level2type=N'COLUMN', @level2name=N'b_retry_count'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'下次重试时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_outbox', @level2type=N'COLUMN', @level2name=N'b_next_retry_at'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后错误', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_outbox', @level2type=N'COLUMN', @level2name=N'b_last_error'; exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'发生时间', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'wf_outbox', @level2type=N'COLUMN', @level2name=N'b_occurdatetime'; GO