做双端审批流
This commit is contained in:
1 parent
5b4dbb2b46
commit
ffaadc26ae
69 files changed
+6662
-1071
No files matched your search
@@ -0,0 +1,198 @@
|
||||
-- =============================================================
|
||||
-- 自定义审批流(租户侧 + 平台侧)
|
||||
--
|
||||
-- 对应模型:go/models/approval.go
|
||||
--
|
||||
-- 设计要点:
|
||||
-- 1. 配置侧与实例侧分离:flow/node 是配置(租户可编辑),
|
||||
-- instance/task 是运行时(提交后生成,不可编辑)。
|
||||
-- 2. 节点表用 prev_keys / next_keys 存连线,当期顺序链只填 sort,
|
||||
-- 后续上拖拽图与条件分支无需改表。
|
||||
-- 3. scope 区分租户侧(tenant)与平台侧(platform):平台账号不归属租户,
|
||||
-- 其流程不带 tid,实例用 biz_tid 标记申请来源租户。
|
||||
--
|
||||
-- 注意:不显式指定 COLLATE,沿用数据库默认排序规则,避免与既有表
|
||||
-- (utf8mb4_0900_ai_ci)在 JOIN 比较字符串时报 Illegal mix of collations。
|
||||
-- =============================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ---------------- 1. 租户侧审批流程 ----------------
|
||||
CREATE TABLE IF NOT EXISTS `yz_backend_approval_flow` (
|
||||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`tid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||||
`module_code` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '所属功能模块 code(yz_system_modules.code):oa/erp/crm/cms',
|
||||
`biz_type` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '适用单据类型:reimburse/bid/domain/...',
|
||||
`flow_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '审批流编号(自动生成、全局唯一,供各程序按编号发起):FL000007',
|
||||
`flow_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '流程名称',
|
||||
`description` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '流程说明',
|
||||
`is_default` TINYINT NOT NULL DEFAULT 0 COMMENT '是否该单据类型的默认流程:1是 0否',
|
||||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1启用 0停用',
|
||||
`is_deleted` TINYINT NOT NULL DEFAULT 0,
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||||
`delete_time` DATETIME DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_tid` (`tid`),
|
||||
KEY `idx_tid_module` (`tid`,`module_code`),
|
||||
KEY `idx_tid_biz` (`tid`,`biz_type`),
|
||||
KEY `idx_tid_code` (`tid`,`flow_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA-自定义审批流程(租户侧)';
|
||||
|
||||
-- ---------------- 2. 租户侧审批节点 ----------------
|
||||
CREATE TABLE IF NOT EXISTS `yz_backend_approval_node` (
|
||||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`flow_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属流程ID',
|
||||
`tid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID(冗余,便于按租户清理)',
|
||||
`node_key` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '节点唯一标识(流程内唯一)',
|
||||
`node_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '节点名称',
|
||||
`node_type` TINYINT NOT NULL DEFAULT 2 COMMENT '1开始 2审批 3结束 4条件分支',
|
||||
`approver_type` TINYINT NOT NULL DEFAULT 1 COMMENT '1指定用户 2指定角色 3部门主管 4指定职位 5发起人本人 6发起人主管',
|
||||
`approver_ids` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '审批人ID列表,逗号分隔(user=SystemTenantUser.uid / role=AdminRole.id / position=BackendPosition.id)',
|
||||
`multi_mode` TINYINT NOT NULL DEFAULT 1 COMMENT '多人审批方式:1或签(任一通过) 2会签(全部通过)',
|
||||
`allow_return` TINYINT NOT NULL DEFAULT 0 COMMENT '是否允许退回上一节点:1是 0否',
|
||||
`timeout_hours` INT NOT NULL DEFAULT 48 COMMENT '超时小时数,超时后自动通过',
|
||||
`prev_keys` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '前置节点 node_key 列表,逗号分隔(为条件分支预留)',
|
||||
`next_keys` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '后继节点 node_key 列表,逗号分隔(为条件分支预留)',
|
||||
`condition_expr` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '进入条件表达式,如 amount>5000(条件分支网关的出边条件)',
|
||||
`sort` INT NOT NULL DEFAULT 0 COMMENT '顺序号,顺序链按此升序流转',
|
||||
`pos_x` INT NOT NULL DEFAULT 0 COMMENT '画布X坐标(图编辑器回显)',
|
||||
`pos_y` INT NOT NULL DEFAULT 0 COMMENT '画布Y坐标(图编辑器回显)',
|
||||
`is_deleted` TINYINT NOT NULL DEFAULT 0,
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||||
`delete_time` DATETIME DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_flow` (`flow_id`),
|
||||
KEY `idx_tid` (`tid`),
|
||||
KEY `idx_flow_sort` (`flow_id`,`sort`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA-自定义审批节点(租户侧)';
|
||||
|
||||
-- ---------------- 3. 平台侧审批流程 ----------------
|
||||
CREATE TABLE IF NOT EXISTS `yz_platform_approval_flow` (
|
||||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`module_code` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '所属平台模块 code',
|
||||
`biz_type` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '适用单据类型:domain/tenant/...',
|
||||
`flow_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '审批流编号(自动生成、全局唯一):FL000007',
|
||||
`flow_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '流程名称',
|
||||
`description` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '流程说明',
|
||||
`is_default` TINYINT NOT NULL DEFAULT 0 COMMENT '是否默认流程:1是 0否',
|
||||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1启用 0停用',
|
||||
`is_deleted` TINYINT NOT NULL DEFAULT 0,
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||||
`delete_time` DATETIME DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_module` (`module_code`),
|
||||
KEY `idx_biz` (`biz_type`),
|
||||
KEY `idx_code` (`flow_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='平台-自定义审批流程';
|
||||
|
||||
-- ---------------- 4. 平台侧审批节点 ----------------
|
||||
CREATE TABLE IF NOT EXISTS `yz_platform_approval_node` (
|
||||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`flow_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属流程ID',
|
||||
`node_key` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '节点唯一标识(流程内唯一)',
|
||||
`node_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '节点名称',
|
||||
`node_type` TINYINT NOT NULL DEFAULT 2 COMMENT '1开始 2审批 3结束 4条件分支',
|
||||
`approver_type` TINYINT NOT NULL DEFAULT 1 COMMENT '1指定平台用户 2指定平台角色 5发起人本人',
|
||||
`approver_ids` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '审批人ID列表,逗号分隔(user=AdminUser.id / role=AdminRole.id)',
|
||||
`multi_mode` TINYINT NOT NULL DEFAULT 1 COMMENT '1或签 2会签',
|
||||
`allow_return` TINYINT NOT NULL DEFAULT 0 COMMENT '是否允许退回:1是 0否',
|
||||
`timeout_hours` INT NOT NULL DEFAULT 48 COMMENT '超时小时数',
|
||||
`prev_keys` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '前置节点(为条件分支预留)',
|
||||
`next_keys` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '后继节点(为条件分支预留)',
|
||||
`condition_expr` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '进入条件(条件分支网关出边条件)',
|
||||
`sort` INT NOT NULL DEFAULT 0 COMMENT '顺序号',
|
||||
`pos_x` INT NOT NULL DEFAULT 0 COMMENT '画布X坐标(图编辑器回显)',
|
||||
`pos_y` INT NOT NULL DEFAULT 0 COMMENT '画布Y坐标(图编辑器回显)',
|
||||
`is_deleted` TINYINT NOT NULL DEFAULT 0,
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||||
`delete_time` DATETIME DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_flow` (`flow_id`),
|
||||
KEY `idx_flow_sort` (`flow_id`,`sort`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='平台-自定义审批节点';
|
||||
|
||||
-- ---------------- 5. 审批实例(运行时,租户侧与平台侧共用) ----------------
|
||||
CREATE TABLE IF NOT EXISTS `yz_approval_instance` (
|
||||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`scope` TINYINT NOT NULL DEFAULT 1 COMMENT '1租户侧 2平台侧',
|
||||
`tid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID(租户侧=本租户;平台侧=发起申请的平台账号所属租户,平台账号通常为0)',
|
||||
`biz_tid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '业务来源租户ID(平台侧审批必填:申请由哪个租户提交)',
|
||||
`flow_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '流程ID(配置可能被改,实例内节点快照为准)',
|
||||
`biz_type` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '单据类型:reimburse/bid/domain',
|
||||
`biz_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '单据ID',
|
||||
`biz_title` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '单据标题快照',
|
||||
`submit_user_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '发起人ID',
|
||||
`submit_user_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '发起人姓名快照',
|
||||
`submit_dept_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '发起人部门ID快照(部门主管审批依赖)',
|
||||
`form_data` TEXT NULL COMMENT '发起表单数据快照(JSON),条件分支求值依据',
|
||||
`current_node` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '当前节点 node_key',
|
||||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '0草稿 1审批中 2已通过 3已驳回 4已撤回 5已取消',
|
||||
`submit_time` DATETIME DEFAULT NULL COMMENT '提交时间',
|
||||
`finish_time` DATETIME DEFAULT NULL COMMENT '完成时间',
|
||||
`is_deleted` TINYINT NOT NULL DEFAULT 0,
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||||
`delete_time` DATETIME DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_scope_tid` (`scope`,`tid`),
|
||||
KEY `idx_biz` (`biz_type`,`biz_id`),
|
||||
KEY `idx_biz_tid` (`scope`,`biz_tid`,`biz_type`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_flow` (`flow_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批实例(运行时)';
|
||||
|
||||
-- ---------------- 6. 审批任务(运行时,节点级待办) ----------------
|
||||
CREATE TABLE IF NOT EXISTS `yz_approval_task` (
|
||||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`instance_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '实例ID',
|
||||
`scope` TINYINT NOT NULL DEFAULT 1 COMMENT '1租户侧 2平台侧',
|
||||
`tid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||||
`biz_type` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '单据类型(冗余,便于列表筛选)',
|
||||
`biz_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '单据ID(冗余)',
|
||||
`node_key` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '节点 node_key',
|
||||
`node_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '节点名称快照',
|
||||
`sort` INT NOT NULL DEFAULT 0 COMMENT '节点顺序号快照',
|
||||
`approver_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '审批人ID',
|
||||
`approver_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '审批人姓名快照',
|
||||
`multi_mode` TINYINT NOT NULL DEFAULT 1 COMMENT '1或签 2会签',
|
||||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '0待审批 1已通过 2已驳回 3已退回 4已跳过 5已超时',
|
||||
`action` TINYINT NOT NULL DEFAULT 0 COMMENT '1提交 2通过 3驳回 4退回 5撤回 6超时自动通过',
|
||||
`comment` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '审批意见',
|
||||
`deadline` DATETIME DEFAULT NULL COMMENT '超时时间点',
|
||||
`finish_time` DATETIME DEFAULT NULL COMMENT '处理时间',
|
||||
`is_deleted` TINYINT NOT NULL DEFAULT 0,
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||||
`delete_time` DATETIME DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_instance` (`instance_id`),
|
||||
KEY `idx_approver` (`scope`,`approver_id`,`status`),
|
||||
KEY `idx_biz` (`biz_type`,`biz_id`),
|
||||
KEY `idx_tid` (`tid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批任务(运行时·待办)';
|
||||
|
||||
-- =============================================================
|
||||
-- 旧表迁移说明:
|
||||
-- yz_backend_approval_flows(扁平步骤行结构)仅被 OA 报销 Submit 读取。
|
||||
-- 第一期接管报销后改走新引擎,旧表保留只读兼容,不再写入。
|
||||
-- 如需保留历史配置,可按如下语句转换(按需执行):
|
||||
--
|
||||
-- INSERT INTO yz_backend_approval_flow
|
||||
-- (tid, module_code, biz_type, flow_name, is_default, status)
|
||||
-- SELECT DISTINCT tid, 'oa', 'reimburse', flow_name, 1, 1
|
||||
-- FROM yz_backend_approval_flows
|
||||
-- WHERE is_active = 1 AND is_deleted = 0
|
||||
-- GROUP BY tid, flow_name;
|
||||
--
|
||||
-- INSERT INTO yz_backend_approval_node
|
||||
-- (flow_id, tid, node_key, node_name, node_type, approver_type, approver_ids, timeout_hours, sort)
|
||||
-- SELECT f.id, f.tid, CONCAT('step_', s.step_order), s.flow_name, 2, 2, '', s.timeout_hours, s.step_order
|
||||
-- FROM yz_backend_approval_flows s
|
||||
-- JOIN yz_backend_approval_flow f
|
||||
-- ON f.tid = s.tid AND f.biz_type = 'reimburse'
|
||||
-- WHERE s.is_active = 1 AND s.is_deleted = 0;
|
||||
-- =============================================================
|
||||
@@ -0,0 +1,38 @@
|
||||
-- ============================================================
|
||||
-- 审批流配置 —— 平台端菜单(yz_system_menu)
|
||||
-- 挂在「域名管理」目录(path = /system/domains)下,紧邻「域名审核」。
|
||||
-- 幂等脚本:按 path 判重,重复执行不会产生重复菜单。
|
||||
-- 执行:mysql -h <host> -P <port> -u <user> -p <db> < platform_approval_menu.sql
|
||||
-- ============================================================
|
||||
|
||||
-- 字段说明:
|
||||
-- type 1=目录 2=页面;views [1]=平台端;is_visible/status=1 显示并启用
|
||||
-- path 与 platform 前端静态路由 /system/approval 一致(component 同源,双保险)
|
||||
|
||||
SET @domain_dir := (
|
||||
SELECT id FROM yz_system_menu
|
||||
WHERE path = '/system/domains' AND delete_time IS NULL
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
INSERT INTO yz_system_menu
|
||||
(pid, title, path, component_path, icon, sort, status, is_visible, views, type, creater, remark)
|
||||
SELECT @domain_dir, '审批流配置', '/system/approval', 'system/approval/index.vue',
|
||||
'SetUp', 5, 1, 1, '[1]', 2, 'system', '平台侧审批流节点编排(域名申请等管控场景)'
|
||||
FROM DUAL
|
||||
WHERE @domain_dir IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/system/approval' AND delete_time IS NULL) x);
|
||||
|
||||
-- 若未找到「域名管理」目录,则退化为平台端顶级菜单(pid=0)
|
||||
INSERT INTO yz_system_menu
|
||||
(pid, title, path, component_path, icon, sort, status, is_visible, views, type, creater, remark)
|
||||
SELECT 0, '审批流配置', '/system/approval', 'system/approval/index.vue',
|
||||
'SetUp', 90, 1, 1, '[1]', 2, 'system', '平台侧审批流节点编排(域名申请等管控场景)'
|
||||
FROM DUAL
|
||||
WHERE @domain_dir IS NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/system/approval' AND delete_time IS NULL) x);
|
||||
|
||||
-- 结果校验
|
||||
SELECT id, pid, title, path, component_path, views, type, is_visible, status
|
||||
FROM yz_system_menu
|
||||
WHERE delete_time IS NULL AND path = '/system/approval';
|
||||
Reference in new issue
Block a user