Files
zkxw/docs/sql/patch_2026-07-14_oa_approval.sql
T
2026-07-15 16:20:48 +08:00

197 lines
10 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- OA 审批(钉钉交互)增量脚本 — 2026-07-14
-- 执行前请备份;可重复执行时注意 IGNORE 语义(部分语句非幂等)
-- ---------------------------------------------------------------------------
-- 1. 组织字段:直属主管 / 部门负责人用户 ID
-- ---------------------------------------------------------------------------
ALTER TABLE sys_user
ADD COLUMN supervisor_user_id VARCHAR(64) NULL COMMENT '直属主管用户ID' AFTER dept_id;
ALTER TABLE sys_dept
ADD COLUMN leader_user_id VARCHAR(64) NULL COMMENT '部门负责人用户ID' AFTER status;
-- ---------------------------------------------------------------------------
-- 2. OA 审批核心表
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS oa_app_group (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
group_name VARCHAR(100) NOT NULL COMMENT '分组名称',
tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
order_num INT NULL COMMENT '排序号',
remark VARCHAR(512) NULL COMMENT '备注',
create_by VARCHAR(64) NULL COMMENT '创建人id',
create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_by VARCHAR(64) NULL COMMENT '更新人id',
update_time DATETIME NOT NULL COMMENT '更新时间',
del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (id),
KEY idx_oa_app_group_tenant (tenant_no, del_flag)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA审批分组';
CREATE TABLE IF NOT EXISTS oa_app (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
group_id VARCHAR(64) NULL COMMENT '分组ID',
app_name VARCHAR(50) NOT NULL COMMENT '表单/应用名称',
icon_url VARCHAR(512) NULL COMMENT '图标',
description VARCHAR(100) NULL COMMENT '表单说明',
initiator_scope VARCHAR(32) NOT NULL DEFAULT 'all' COMMENT '发起范围 all/users',
initiator_user_ids TEXT NULL COMMENT '指定发起人JSON数组',
admin_scope VARCHAR(32) NOT NULL DEFAULT 'all_oa_admin' COMMENT '管理员范围',
admin_user_ids TEXT NULL COMMENT '指定管理员JSON数组',
status CHAR(1) NOT NULL DEFAULT '1' COMMENT '1启用 0停用',
tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
order_num INT NULL COMMENT '排序号',
remark VARCHAR(512) NULL COMMENT '备注',
create_by VARCHAR(64) NULL COMMENT '创建人id',
create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_by VARCHAR(64) NULL COMMENT '更新人id',
update_time DATETIME NOT NULL COMMENT '更新时间',
del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (id),
KEY idx_oa_app_tenant (tenant_no, del_flag),
KEY idx_oa_app_group (group_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA审批应用';
CREATE TABLE IF NOT EXISTS oa_app_version (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
app_id VARCHAR(64) NOT NULL COMMENT '应用ID',
version_no INT NOT NULL COMMENT '版本号',
status VARCHAR(16) NOT NULL DEFAULT 'draft' COMMENT 'draft/published',
is_latest_published CHAR(1) NOT NULL DEFAULT '0' COMMENT '是否最新已发布',
form_schema_json LONGTEXT NULL COMMENT '表单Schema JSON',
flow_tree_json LONGTEXT NULL COMMENT '流程树 JSON',
advanced_settings_json TEXT NULL COMMENT '高级设置 JSON',
tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
order_num INT NULL COMMENT '排序号',
remark VARCHAR(512) NULL COMMENT '备注',
create_by VARCHAR(64) NULL COMMENT '创建人id',
create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_by VARCHAR(64) NULL COMMENT '更新人id',
update_time DATETIME NOT NULL COMMENT '更新时间',
del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (id),
KEY idx_oa_app_ver_app (app_id, status, del_flag)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA审批应用版本';
CREATE TABLE IF NOT EXISTS oa_role (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
role_name VARCHAR(100) NOT NULL COMMENT '角色名称',
role_code VARCHAR(64) NOT NULL COMMENT '角色编码',
role_kind VARCHAR(16) NOT NULL DEFAULT 'custom' COMMENT 'custom/preset',
status CHAR(1) NOT NULL DEFAULT '1' COMMENT '1启用 0停用',
tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
order_num INT NULL COMMENT '排序号',
remark VARCHAR(512) NULL COMMENT '备注',
create_by VARCHAR(64) NULL COMMENT '创建人id',
create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_by VARCHAR(64) NULL COMMENT '更新人id',
update_time DATETIME NOT NULL COMMENT '更新时间',
del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (id),
UNIQUE KEY uk_oa_role_tenant_code (tenant_no, role_code, del_flag),
KEY idx_oa_role_tenant (tenant_no, del_flag)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA工作流角色';
CREATE TABLE IF NOT EXISTS oa_role_user (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
oa_role_id VARCHAR(64) NOT NULL COMMENT '工作流角色ID',
user_id VARCHAR(64) NOT NULL COMMENT '用户ID',
tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
order_num INT NULL COMMENT '排序号',
remark VARCHAR(512) NULL COMMENT '备注',
create_by VARCHAR(64) NULL COMMENT '创建人id',
create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_by VARCHAR(64) NULL COMMENT '更新人id',
update_time DATETIME NOT NULL COMMENT '更新时间',
del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (id),
KEY idx_oa_role_user_role (oa_role_id, del_flag),
KEY idx_oa_role_user_user (user_id, del_flag)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA工作流角色成员';
CREATE TABLE IF NOT EXISTS oa_instance (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
app_id VARCHAR(64) NOT NULL COMMENT '应用ID',
app_version_id VARCHAR(64) NOT NULL COMMENT '锁定的已发布版本ID',
title VARCHAR(200) NULL COMMENT '实例标题',
initiator_user_id VARCHAR(64) NOT NULL COMMENT '发起人',
initiator_dept_id VARCHAR(64) NULL COMMENT '发起人部门',
form_data_json LONGTEXT NULL COMMENT '表单数据 JSON',
status VARCHAR(32) NOT NULL DEFAULT 'running' COMMENT 'running/completed/rejected/cancelled',
tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
order_num INT NULL COMMENT '排序号',
remark VARCHAR(512) NULL COMMENT '备注',
create_by VARCHAR(64) NULL COMMENT '创建人id',
create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_by VARCHAR(64) NULL COMMENT '更新人id',
update_time DATETIME NOT NULL COMMENT '更新时间',
del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (id),
KEY idx_oa_inst_tenant (tenant_no, del_flag),
KEY idx_oa_inst_initiator (initiator_user_id, status),
KEY idx_oa_inst_app (app_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA审批实例';
CREATE TABLE IF NOT EXISTS oa_task (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
instance_id VARCHAR(64) NOT NULL COMMENT '实例ID',
node_key VARCHAR(64) NULL COMMENT '节点key',
node_name VARCHAR(200) NULL COMMENT '节点名称',
task_type VARCHAR(16) NOT NULL DEFAULT 'approval' COMMENT 'approval/cc',
assignee_user_id VARCHAR(64) NOT NULL COMMENT '处理人',
status VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT 'pending/approved/rejected/done',
comment_text VARCHAR(512) NULL COMMENT '意见',
resolve_source VARCHAR(64) NULL COMMENT '解析来源如 supervisor_fallback_dept_leader',
sign_mode VARCHAR(8) NULL COMMENT 'or/and',
tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
order_num INT NULL COMMENT '排序号',
remark VARCHAR(512) NULL COMMENT '备注',
create_by VARCHAR(64) NULL COMMENT '创建人id',
create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_by VARCHAR(64) NULL COMMENT '更新人id',
update_time DATETIME NOT NULL COMMENT '更新时间',
del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (id),
KEY idx_oa_task_assignee (assignee_user_id, status, del_flag),
KEY idx_oa_task_instance (instance_id, del_flag)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA审批任务';
CREATE TABLE IF NOT EXISTS oa_relation (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
from_instance_id VARCHAR(64) NOT NULL COMMENT '本实例ID',
to_instance_id VARCHAR(64) NOT NULL COMMENT '被关联实例ID',
field_key VARCHAR(64) NULL COMMENT '表单字段key',
tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
order_num INT NULL COMMENT '排序号',
remark VARCHAR(512) NULL COMMENT '备注',
create_by VARCHAR(64) NULL COMMENT '创建人id',
create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_by VARCHAR(64) NULL COMMENT '更新人id',
update_time DATETIME NOT NULL COMMENT '更新时间',
del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (id),
KEY idx_oa_rel_from (from_instance_id, del_flag)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA关联审批';
-- 预置工作流角色(按租户手工或应用启动 ensure;此处示例 zkxw)
-- INSERT 由后端 ensure_presets 幂等完成,避免 UUID 硬编码冲突
-- ---------------------------------------------------------------------------
-- 3. 菜单说明
-- ---------------------------------------------------------------------------
-- 侧栏路由已写入:
-- - web-admin/src/router/modules/sqxp.ts
-- - backend/app/api/menu.py(STATIC_MENU_TREE)
-- 角色权限用的 sys_menu 注册见:
-- docs/sql/patch_2026-07-15_oa_approval_sys_menu.sql
-- (含 OA审批 节点插入,以及旧「工作流管理」伪删除)