feat(approval): 业务完成确认单草稿、附件、提交与引擎起步 (#19)

This commit is contained in:
2026-10-30 20:18:47 +08:00
parent 029164c810
commit 4a1d02f040
49 changed files with 3732 additions and 3 deletions
+140
View File
@@ -0,0 +1,140 @@
-- 一期线下审批公共表与业务表(可重复执行)
-- 目标库:db_gxtyzx(master)
CREATE TABLE IF NOT EXISTS approval_flow_definition (
id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id INT NOT NULL DEFAULT 10150,
flow_code VARCHAR(40) NOT NULL,
version INT NOT NULL,
name VARCHAR(100) NOT NULL,
nodes_json JSON NOT NULL,
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uk_flow_ver (tenant_id, flow_code, version)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批流程定义版本';
CREATE TABLE IF NOT EXISTS approval_instance (
id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id INT NOT NULL DEFAULT 10150,
biz_no VARCHAR(32) DEFAULT NULL,
flow_code VARCHAR(40) NOT NULL,
definition_id BIGINT NOT NULL,
definition_version INT NOT NULL,
doc_type VARCHAR(40) NOT NULL,
biz_id BIGINT NOT NULL,
status VARCHAR(20) NOT NULL,
round INT NOT NULL DEFAULT 0,
reporter_id INT NOT NULL,
reporter_name VARCHAR(100) DEFAULT NULL,
report_org_id INT DEFAULT NULL,
report_org_name VARCHAR(200) DEFAULT NULL,
accept_org_id INT DEFAULT NULL,
accept_org_name VARCHAR(200) DEFAULT NULL,
current_node_key VARCHAR(40) DEFAULT NULL,
current_node_type VARCHAR(20) DEFAULT NULL,
dispatch_target_id INT DEFAULT NULL,
dispatch_target_name VARCHAR(100) DEFAULT NULL,
submit_time DATETIME DEFAULT NULL,
approve_time DATETIME DEFAULT NULL,
archive_time DATETIME DEFAULT NULL,
archivist_id INT DEFAULT NULL,
archivist_name VARCHAR(100) DEFAULT NULL,
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uk_biz_no (tenant_id, biz_no),
KEY idx_status_submit (tenant_id, status, submit_time),
KEY idx_reporter (tenant_id, reporter_id),
KEY idx_report_org (tenant_id, report_org_id),
KEY idx_accept_org (tenant_id, accept_org_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批实例';
CREATE TABLE IF NOT EXISTS approval_task (
id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id INT NOT NULL DEFAULT 10150,
instance_id BIGINT NOT NULL,
node_key VARCHAR(40) NOT NULL,
node_type VARCHAR(20) NOT NULL,
round INT NOT NULL,
task_type VARCHAR(20) NOT NULL,
assignee_id INT NOT NULL,
assignee_name VARCHAR(100) DEFAULT NULL,
status VARCHAR(20) NOT NULL,
handle_time DATETIME DEFAULT NULL,
opinion VARCHAR(500) DEFAULT NULL,
dispatch_target_id INT DEFAULT NULL,
dispatch_target_name VARCHAR(100) DEFAULT NULL,
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_instance (instance_id),
KEY idx_assignee_status (tenant_id, assignee_id, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批任务';
CREATE TABLE IF NOT EXISTS approval_record (
id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id INT NOT NULL DEFAULT 10150,
instance_id BIGINT NOT NULL,
task_id BIGINT DEFAULT NULL,
node_key VARCHAR(40) DEFAULT NULL,
operator_id INT NOT NULL,
operator_name VARCHAR(100) DEFAULT NULL,
action VARCHAR(20) NOT NULL,
opinion VARCHAR(500) DEFAULT NULL,
round INT NOT NULL,
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_instance_time (instance_id, create_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批处理记录';
CREATE TABLE IF NOT EXISTS approval_attachment (
id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id INT NOT NULL DEFAULT 10150,
instance_id BIGINT NOT NULL,
file_id INT NOT NULL,
category VARCHAR(20) NOT NULL,
uploader_id INT NOT NULL,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_instance (instance_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批附件';
CREATE TABLE IF NOT EXISTS approval_no_sequence (
id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id INT NOT NULL DEFAULT 10150,
prefix VARCHAR(8) NOT NULL,
seq_date DATE NOT NULL,
current_seq INT NOT NULL DEFAULT 0,
PRIMARY KEY (id),
UNIQUE KEY uk_seq (tenant_id, prefix, seq_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批单号序列';
CREATE TABLE IF NOT EXISTS approval_completion_form (
id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id INT NOT NULL DEFAULT 10150,
instance_id BIGINT NOT NULL,
name VARCHAR(100) NOT NULL,
implement_org VARCHAR(100) NOT NULL,
fee DECIMAL(12,2) NOT NULL,
service_content VARCHAR(2000) NOT NULL,
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uk_instance (instance_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='业务完成确认单';
CREATE TABLE IF NOT EXISTS approval_coordination_form (
id BIGINT NOT NULL AUTO_INCREMENT,
tenant_id INT NOT NULL DEFAULT 10150,
instance_id BIGINT NOT NULL,
accept_org_id INT NOT NULL,
accept_org_name VARCHAR(200) NOT NULL,
title VARCHAR(100) NOT NULL,
content VARCHAR(2000) NOT NULL,
remark VARCHAR(500) DEFAULT NULL,
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uk_instance (instance_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='协调单';
+77
View File
@@ -0,0 +1,77 @@
-- 一期线下审批菜单与权限种子(可重复执行)
-- 目标库:gxtyzx_core(server)
-- 顶级菜单:审批管理
INSERT INTO sys_menu (parent_id, title, path, component, sort_number, authority, icon, menu_type, tenant_id, deleted)
SELECT 0, '审批管理', '/approval', '', 18, 'approval:instance:list', 'AuditOutlined', 0, 10150, 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu WHERE tenant_id = 10150 AND path = '/approval' AND menu_type = 0 AND deleted = 0
);
SET @parent = (SELECT menu_id FROM sys_menu WHERE tenant_id = 10150 AND path = '/approval' AND menu_type = 0 AND deleted = 0 ORDER BY menu_id LIMIT 1);
-- 子菜单:待办审批
INSERT INTO sys_menu (parent_id, title, path, component, sort_number, authority, icon, menu_type, tenant_id, deleted)
SELECT @parent, '待办审批', '/approval/todo', '/approval/todo', 1, 'approval:instance:list', '', 0, 10150, 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu WHERE tenant_id = 10150 AND path = '/approval/todo' AND menu_type = 0 AND deleted = 0
);
-- 子菜单:单据查询
INSERT INTO sys_menu (parent_id, title, path, component, sort_number, authority, icon, menu_type, tenant_id, deleted)
SELECT @parent, '单据查询', '/approval/instance', '/approval/instance', 2, 'approval:instance:list', '', 0, 10150, 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu WHERE tenant_id = 10150 AND path = '/approval/instance' AND menu_type = 0 AND deleted = 0
);
SET @instanceMenu = (SELECT menu_id FROM sys_menu WHERE tenant_id = 10150 AND path = '/approval/instance' AND menu_type = 0 AND deleted = 0 ORDER BY menu_id LIMIT 1);
-- 按钮权限(挂在单据查询下)
INSERT INTO sys_menu (parent_id, title, path, component, sort_number, authority, icon, menu_type, tenant_id, deleted)
SELECT @instanceMenu, '提交单据', '', '', 1, 'approval:instance:submit', '', 1, 10150, 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu WHERE tenant_id = 10150 AND authority = 'approval:instance:submit' AND menu_type = 1 AND deleted = 0
);
INSERT INTO sys_menu (parent_id, title, path, component, sort_number, authority, icon, menu_type, tenant_id, deleted)
SELECT @instanceMenu, '审批通过', '', '', 2, 'approval:instance:approve', '', 1, 10150, 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu WHERE tenant_id = 10150 AND authority = 'approval:instance:approve' AND menu_type = 1 AND deleted = 0
);
INSERT INTO sys_menu (parent_id, title, path, component, sort_number, authority, icon, menu_type, tenant_id, deleted)
SELECT @instanceMenu, '归档', '', '', 3, 'approval:instance:archive', '', 1, 10150, 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu WHERE tenant_id = 10150 AND authority = 'approval:instance:archive' AND menu_type = 1 AND deleted = 0
);
INSERT INTO sys_menu (parent_id, title, path, component, sort_number, authority, icon, menu_type, tenant_id, deleted)
SELECT @instanceMenu, '改派', '', '', 4, 'approval:instance:assign', '', 1, 10150, 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu WHERE tenant_id = 10150 AND authority = 'approval:instance:assign' AND menu_type = 1 AND deleted = 0
);
INSERT INTO sys_menu (parent_id, title, path, component, sort_number, authority, icon, menu_type, tenant_id, deleted)
SELECT @instanceMenu, '导出', '', '', 5, 'approval:instance:export', '', 1, 10150, 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu WHERE tenant_id = 10150 AND authority = 'approval:instance:export' AND menu_type = 1 AND deleted = 0
);
-- 授权 superAdmin(role_id = 586, tenant 10150)
INSERT INTO sys_role_menu (role_id, menu_id, tenant_id)
SELECT 586, m.menu_id, 10150
FROM sys_menu m
WHERE m.tenant_id = 10150
AND m.deleted = 0
AND (m.path IN ('/approval', '/approval/todo', '/approval/instance') OR m.authority LIKE 'approval:instance:%')
AND NOT EXISTS (
SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = 586 AND rm.menu_id = m.menu_id AND rm.tenant_id = 10150
);