feat: 归档L03与L09审批发布能力
- 新增统一审批中心与审批管理页面,支持流程配置、审批详情与角色/用户审批对象 - 接入聊天助手、知识库、工作流的发布与删除审批,并补齐发布态校验与快照展示
This commit is contained in:
@@ -0,0 +1,293 @@
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `tb_approval_flow` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`name` varchar(128) NOT NULL COMMENT '流程名称',
|
||||
`resource_type` varchar(32) NOT NULL COMMENT '资源类型',
|
||||
`action_type` varchar(32) NOT NULL COMMENT '动作类型',
|
||||
`priority` int NOT NULL DEFAULT 0 COMMENT '优先级',
|
||||
`status` varchar(32) NOT NULL COMMENT '流程状态',
|
||||
`version` int NOT NULL DEFAULT 1 COMMENT '流程版本',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`created` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`created_by` bigint DEFAULT NULL COMMENT '创建者',
|
||||
`modified` datetime DEFAULT NULL COMMENT '修改时间',
|
||||
`modified_by` bigint DEFAULT NULL COMMENT '修改者',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_approval_flow_match` (`resource_type`, `action_type`, `status`, `priority`),
|
||||
KEY `idx_approval_flow_modified` (`modified`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批流程';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `tb_approval_flow_scope` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`flow_id` bigint NOT NULL COMMENT '流程ID',
|
||||
`scope_type` varchar(32) NOT NULL COMMENT '范围类型',
|
||||
`scope_value` bigint NOT NULL COMMENT '范围值',
|
||||
`include_children` tinyint NOT NULL DEFAULT 0 COMMENT '是否包含子节点',
|
||||
`created` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`created_by` bigint DEFAULT NULL COMMENT '创建者',
|
||||
`modified` datetime DEFAULT NULL COMMENT '修改时间',
|
||||
`modified_by` bigint DEFAULT NULL COMMENT '修改者',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_approval_flow_scope` (`flow_id`, `scope_type`, `scope_value`),
|
||||
KEY `idx_approval_flow_scope_type` (`scope_type`, `scope_value`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批流程范围';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `tb_approval_flow_step` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`flow_id` bigint NOT NULL COMMENT '流程ID',
|
||||
`step_no` int NOT NULL COMMENT '步骤序号',
|
||||
`step_name` varchar(128) NOT NULL COMMENT '步骤名称',
|
||||
`created` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`created_by` bigint DEFAULT NULL COMMENT '创建者',
|
||||
`modified` datetime DEFAULT NULL COMMENT '修改时间',
|
||||
`modified_by` bigint DEFAULT NULL COMMENT '修改者',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_approval_flow_step` (`flow_id`, `step_no`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批流程步骤';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `tb_approval_instance` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`flow_id` bigint NOT NULL COMMENT '流程ID',
|
||||
`flow_version` int NOT NULL COMMENT '流程版本',
|
||||
`resource_type` varchar(32) NOT NULL COMMENT '资源类型',
|
||||
`resource_id` bigint NOT NULL COMMENT '资源ID',
|
||||
`action_type` varchar(32) NOT NULL COMMENT '动作类型',
|
||||
`status` varchar(32) NOT NULL COMMENT '实例状态',
|
||||
`current_step_no` int DEFAULT NULL COMMENT '当前步骤序号',
|
||||
`snapshot_json` json DEFAULT NULL COMMENT '审批快照',
|
||||
`summary` varchar(255) DEFAULT NULL COMMENT '审批摘要',
|
||||
`applicant_id` bigint NOT NULL COMMENT '申请人ID',
|
||||
`submitted_at` datetime DEFAULT NULL COMMENT '提交时间',
|
||||
`finished_at` datetime DEFAULT NULL COMMENT '完成时间',
|
||||
`created` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`created_by` bigint DEFAULT NULL COMMENT '创建者',
|
||||
`modified` datetime DEFAULT NULL COMMENT '修改时间',
|
||||
`modified_by` bigint DEFAULT NULL COMMENT '修改者',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_approval_instance_flow_status` (`flow_id`, `status`),
|
||||
KEY `idx_approval_instance_resource` (`resource_type`, `resource_id`, `action_type`),
|
||||
KEY `idx_approval_instance_applicant` (`applicant_id`, `submitted_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批实例';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `tb_approval_task` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`instance_id` bigint NOT NULL COMMENT '实例ID',
|
||||
`step_no` int NOT NULL COMMENT '步骤序号',
|
||||
`status` varchar(32) NOT NULL COMMENT '任务状态',
|
||||
`assignee_role_code` varchar(64) NOT NULL COMMENT '指派角色编码',
|
||||
`acted_by` bigint DEFAULT NULL COMMENT '处理人ID',
|
||||
`acted_at` datetime DEFAULT NULL COMMENT '处理时间',
|
||||
`comment` varchar(500) DEFAULT NULL COMMENT '处理意见',
|
||||
`created` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`created_by` bigint DEFAULT NULL COMMENT '创建者',
|
||||
`modified` datetime DEFAULT NULL COMMENT '修改时间',
|
||||
`modified_by` bigint DEFAULT NULL COMMENT '修改者',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_approval_task_step` (`instance_id`, `step_no`),
|
||||
KEY `idx_approval_task_status` (`status`, `assignee_role_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批任务';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `tb_approval_log` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`instance_id` bigint NOT NULL COMMENT '实例ID',
|
||||
`event_type` varchar(32) NOT NULL COMMENT '事件类型',
|
||||
`operator_id` bigint DEFAULT NULL COMMENT '操作人ID',
|
||||
`payload_json` json DEFAULT NULL COMMENT '事件载荷',
|
||||
`created` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`created_by` bigint DEFAULT NULL COMMENT '创建者',
|
||||
`modified` datetime DEFAULT NULL COMMENT '修改时间',
|
||||
`modified_by` bigint DEFAULT NULL COMMENT '修改者',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_approval_log_instance` (`instance_id`, `created`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批日志';
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367100000000000001, 258052082618335232, 0, 'menus.system.approval', '/sys/approval', '/system/approval/ApprovalManage', 'svg:approval',
|
||||
1, '', 750, 0, '2026-04-06 10:00:00', 1, '2026-04-06 10:00:00', 1, '审批管理菜单'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367100000000000001
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367100000000000011, 367100000000000001, 1, '查询', '', '', '',
|
||||
0, '/api/v1/approvalFlow/query', 1, 0, '2026-04-06 10:00:00', 1, '2026-04-06 10:00:00', 1, '审批流程-查询'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367100000000000011
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367100000000000012, 367100000000000001, 1, '保存', '', '', '',
|
||||
0, '/api/v1/approvalFlow/save', 2, 0, '2026-04-06 10:00:00', 1, '2026-04-06 10:00:00', 1, '审批流程-保存'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367100000000000012
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367100000000000013, 367100000000000001, 1, '删除', '', '', '',
|
||||
0, '/api/v1/approvalFlow/remove', 3, 0, '2026-04-06 10:00:00', 1, '2026-04-06 10:00:00', 1, '审批流程-删除'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367100000000000013
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367100000000000014, 367100000000000001, 1, '启用', '', '', '',
|
||||
0, '/api/v1/approvalFlow/enable', 4, 0, '2026-04-06 10:00:00', 1, '2026-04-06 10:00:00', 1, '审批流程-启用'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367100000000000014
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367100000000000015, 367100000000000001, 1, '停用', '', '', '',
|
||||
0, '/api/v1/approvalFlow/disable', 5, 0, '2026-04-06 10:00:00', 1, '2026-04-06 10:00:00', 1, '审批流程-停用'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367100000000000015
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367100000000000021, 367100000000000001, 1, '实例查询', '', '', '',
|
||||
0, '/api/v1/approvalInstance/query', 6, 0, '2026-04-06 10:00:00', 1, '2026-04-06 10:00:00', 1, '审批实例-查询'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367100000000000021
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367100000000000022, 367100000000000001, 1, '通过审批', '', '', '',
|
||||
0, '/api/v1/approvalInstance/approve', 7, 0, '2026-04-06 10:00:00', 1, '2026-04-06 10:00:00', 1, '审批实例-通过'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367100000000000022
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367100000000000023, 367100000000000001, 1, '驳回审批', '', '', '',
|
||||
0, '/api/v1/approvalInstance/reject', 8, 0, '2026-04-06 10:00:00', 1, '2026-04-06 10:00:00', 1, '审批实例-驳回'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367100000000000023
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367100000000000024, 367100000000000001, 1, '撤回审批', '', '', '',
|
||||
0, '/api/v1/approvalInstance/revoke', 9, 0, '2026-04-06 10:00:00', 1, '2026-04-06 10:00:00', 1, '审批实例-撤回'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367100000000000024
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367100000000000101, 1, 367100000000000001
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `id` = 367100000000000101
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367100000000000111, 1, 367100000000000011
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `id` = 367100000000000111
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367100000000000112, 1, 367100000000000012
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `id` = 367100000000000112
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367100000000000113, 1, 367100000000000013
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `id` = 367100000000000113
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367100000000000114, 1, 367100000000000014
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `id` = 367100000000000114
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367100000000000115, 1, 367100000000000015
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `id` = 367100000000000115
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367100000000000121, 1, 367100000000000021
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `id` = 367100000000000121
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367100000000000122, 1, 367100000000000022
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `id` = 367100000000000122
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367100000000000123, 1, 367100000000000023
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `id` = 367100000000000123
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367100000000000124, 1, 367100000000000024
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `id` = 367100000000000124
|
||||
);
|
||||
@@ -0,0 +1,60 @@
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
DROP PROCEDURE IF EXISTS `sp_add_column_if_missing`;
|
||||
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE `sp_add_column_if_missing`(
|
||||
IN in_table_name VARCHAR(128),
|
||||
IN in_column_name VARCHAR(128),
|
||||
IN in_definition TEXT
|
||||
)
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = in_table_name
|
||||
AND COLUMN_NAME = in_column_name
|
||||
) THEN
|
||||
SET @ddl = CONCAT('ALTER TABLE `', in_table_name, '` ADD COLUMN ', in_definition);
|
||||
PREPARE stmt FROM @ddl;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
END IF;
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
CALL `sp_add_column_if_missing`('tb_workflow', 'publish_status',
|
||||
'`publish_status` varchar(32) NOT NULL DEFAULT ''DRAFT'' COMMENT ''发布状态''');
|
||||
CALL `sp_add_column_if_missing`('tb_workflow', 'current_approval_instance_id',
|
||||
'`current_approval_instance_id` bigint DEFAULT NULL COMMENT ''当前审批实例ID''');
|
||||
CALL `sp_add_column_if_missing`('tb_workflow', 'published_snapshot_json',
|
||||
'`published_snapshot_json` json DEFAULT NULL COMMENT ''已发布快照''');
|
||||
CALL `sp_add_column_if_missing`('tb_workflow', 'published_at',
|
||||
'`published_at` datetime DEFAULT NULL COMMENT ''发布时间''');
|
||||
CALL `sp_add_column_if_missing`('tb_workflow', 'published_by',
|
||||
'`published_by` bigint DEFAULT NULL COMMENT ''发布人''');
|
||||
|
||||
CALL `sp_add_column_if_missing`('tb_document_collection', 'publish_status',
|
||||
'`publish_status` varchar(32) NOT NULL DEFAULT ''DRAFT'' COMMENT ''发布状态''');
|
||||
CALL `sp_add_column_if_missing`('tb_document_collection', 'current_approval_instance_id',
|
||||
'`current_approval_instance_id` bigint DEFAULT NULL COMMENT ''当前审批实例ID''');
|
||||
CALL `sp_add_column_if_missing`('tb_document_collection', 'published_snapshot_json',
|
||||
'`published_snapshot_json` json DEFAULT NULL COMMENT ''已发布快照''');
|
||||
CALL `sp_add_column_if_missing`('tb_document_collection', 'published_at',
|
||||
'`published_at` datetime DEFAULT NULL COMMENT ''发布时间''');
|
||||
CALL `sp_add_column_if_missing`('tb_document_collection', 'published_by',
|
||||
'`published_by` bigint DEFAULT NULL COMMENT ''发布人''');
|
||||
|
||||
CALL `sp_add_column_if_missing`('tb_bot', 'publish_status',
|
||||
'`publish_status` varchar(32) NOT NULL DEFAULT ''DRAFT'' COMMENT ''发布状态''');
|
||||
CALL `sp_add_column_if_missing`('tb_bot', 'current_approval_instance_id',
|
||||
'`current_approval_instance_id` bigint DEFAULT NULL COMMENT ''当前审批实例ID''');
|
||||
CALL `sp_add_column_if_missing`('tb_bot', 'published_snapshot_json',
|
||||
'`published_snapshot_json` json DEFAULT NULL COMMENT ''已发布快照''');
|
||||
CALL `sp_add_column_if_missing`('tb_bot', 'published_at',
|
||||
'`published_at` datetime DEFAULT NULL COMMENT ''发布时间''');
|
||||
CALL `sp_add_column_if_missing`('tb_bot', 'published_by',
|
||||
'`published_by` bigint DEFAULT NULL COMMENT ''发布人''');
|
||||
|
||||
DROP PROCEDURE IF EXISTS `sp_add_column_if_missing`;
|
||||
@@ -0,0 +1,124 @@
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
DROP PROCEDURE IF EXISTS `sp_add_column_if_missing`;
|
||||
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE `sp_add_column_if_missing`(
|
||||
IN in_table_name VARCHAR(128),
|
||||
IN in_column_name VARCHAR(128),
|
||||
IN in_definition TEXT
|
||||
)
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = in_table_name
|
||||
AND COLUMN_NAME = in_column_name
|
||||
) THEN
|
||||
SET @ddl = CONCAT('ALTER TABLE `', in_table_name, '` ADD COLUMN ', in_definition);
|
||||
PREPARE stmt FROM @ddl;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
END IF;
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
CALL `sp_add_column_if_missing`(
|
||||
'tb_approval_flow_step',
|
||||
'assignee_type',
|
||||
'`assignee_type` varchar(16) DEFAULT NULL COMMENT ''审批对象类型'' AFTER `step_name`'
|
||||
);
|
||||
CALL `sp_add_column_if_missing`(
|
||||
'tb_approval_flow_step',
|
||||
'assignee_target_id',
|
||||
'`assignee_target_id` bigint DEFAULT NULL COMMENT ''审批对象ID'' AFTER `assignee_type`'
|
||||
);
|
||||
CALL `sp_add_column_if_missing`(
|
||||
'tb_approval_flow_step',
|
||||
'assignee_target_code',
|
||||
'`assignee_target_code` varchar(128) DEFAULT NULL COMMENT ''审批对象编码'' AFTER `assignee_target_id`'
|
||||
);
|
||||
CALL `sp_add_column_if_missing`(
|
||||
'tb_approval_flow_step',
|
||||
'assignee_target_name',
|
||||
'`assignee_target_name` varchar(128) DEFAULT NULL COMMENT ''审批对象名称'' AFTER `assignee_target_code`'
|
||||
);
|
||||
|
||||
ALTER TABLE `tb_approval_task`
|
||||
MODIFY COLUMN `assignee_role_code` varchar(64) DEFAULT NULL COMMENT '指派角色编码';
|
||||
|
||||
CALL `sp_add_column_if_missing`(
|
||||
'tb_approval_task',
|
||||
'assignee_type',
|
||||
'`assignee_type` varchar(16) DEFAULT NULL COMMENT ''审批对象类型'' AFTER `assignee_role_code`'
|
||||
);
|
||||
CALL `sp_add_column_if_missing`(
|
||||
'tb_approval_task',
|
||||
'assignee_target_id',
|
||||
'`assignee_target_id` bigint DEFAULT NULL COMMENT ''审批对象ID'' AFTER `assignee_type`'
|
||||
);
|
||||
CALL `sp_add_column_if_missing`(
|
||||
'tb_approval_task',
|
||||
'assignee_target_code',
|
||||
'`assignee_target_code` varchar(128) DEFAULT NULL COMMENT ''审批对象编码'' AFTER `assignee_target_id`'
|
||||
);
|
||||
CALL `sp_add_column_if_missing`(
|
||||
'tb_approval_task',
|
||||
'assignee_target_name',
|
||||
'`assignee_target_name` varchar(128) DEFAULT NULL COMMENT ''审批对象名称'' AFTER `assignee_target_code`'
|
||||
);
|
||||
|
||||
DROP PROCEDURE IF EXISTS `sp_patch_approval_assignee`;
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE `sp_patch_approval_assignee`()
|
||||
BEGIN
|
||||
DECLARE v_super_role_id BIGINT;
|
||||
DECLARE v_super_role_code VARCHAR(128);
|
||||
DECLARE v_super_role_name VARCHAR(128);
|
||||
DECLARE v_index_count INT DEFAULT 0;
|
||||
|
||||
SELECT `id`, `role_key`, `role_name`
|
||||
INTO v_super_role_id, v_super_role_code, v_super_role_name
|
||||
FROM `tb_sys_role`
|
||||
WHERE `role_key` = 'super_admin'
|
||||
LIMIT 1;
|
||||
|
||||
IF v_super_role_id IS NULL THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'super_admin role is required for approval assignee backfill';
|
||||
END IF;
|
||||
|
||||
UPDATE `tb_approval_flow_step`
|
||||
SET `assignee_type` = 'ROLE',
|
||||
`assignee_target_id` = v_super_role_id,
|
||||
`assignee_target_code` = v_super_role_code,
|
||||
`assignee_target_name` = v_super_role_name
|
||||
WHERE `assignee_type` IS NULL
|
||||
OR `assignee_target_id` IS NULL;
|
||||
|
||||
UPDATE `tb_approval_task`
|
||||
SET `assignee_role_code` = IFNULL(`assignee_role_code`, v_super_role_code),
|
||||
`assignee_type` = 'ROLE',
|
||||
`assignee_target_id` = v_super_role_id,
|
||||
`assignee_target_code` = v_super_role_code,
|
||||
`assignee_target_name` = v_super_role_name
|
||||
WHERE `assignee_type` IS NULL
|
||||
OR `assignee_target_id` IS NULL;
|
||||
|
||||
SELECT COUNT(1)
|
||||
INTO v_index_count
|
||||
FROM `information_schema`.`statistics`
|
||||
WHERE `table_schema` = DATABASE()
|
||||
AND `table_name` = 'tb_approval_task'
|
||||
AND `index_name` = 'idx_approval_task_assignee';
|
||||
|
||||
IF v_index_count = 0 THEN
|
||||
ALTER TABLE `tb_approval_task`
|
||||
ADD INDEX `idx_approval_task_assignee` (`status`, `assignee_type`, `assignee_target_id`);
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
||||
CALL `sp_patch_approval_assignee`();
|
||||
DROP PROCEDURE IF EXISTS `sp_patch_approval_assignee`;
|
||||
DROP PROCEDURE IF EXISTS `sp_add_column_if_missing`;
|
||||
@@ -0,0 +1,85 @@
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
UPDATE `tb_sys_menu`
|
||||
SET
|
||||
`component` = '',
|
||||
`modified` = NOW(),
|
||||
`modified_by` = 1,
|
||||
`remark` = '审批管理分组菜单'
|
||||
WHERE `id` = 367100000000000001;
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367100000000000002, 367100000000000001, 0, 'menus.system.approvalFlow', '/sys/approval/flow', '/system/approval/ApprovalManage', '',
|
||||
1, '', 1, 0, '2026-04-07 18:00:00', 1, '2026-04-07 18:00:00', 1, '审批管理-流程配置'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367100000000000002
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367100000000000003, 367100000000000001, 0, 'menus.system.approvalPending', '/sys/approval/pending', '/system/approval/ApprovalManage', '',
|
||||
1, '', 2, 0, '2026-04-07 18:00:00', 1, '2026-04-07 18:00:00', 1, '审批管理-待审批'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367100000000000003
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367100000000000004, 367100000000000001, 0, 'menus.system.approvalProcessed', '/sys/approval/processed', '/system/approval/ApprovalManage', '',
|
||||
1, '', 3, 0, '2026-04-07 18:00:00', 1, '2026-04-07 18:00:00', 1, '审批管理-已审批'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367100000000000004
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367100000000000005, 367100000000000001, 0, 'menus.system.approvalInitiated', '/sys/approval/initiated', '/system/approval/ApprovalManage', '',
|
||||
1, '', 4, 0, '2026-04-07 18:00:00', 1, '2026-04-07 18:00:00', 1, '审批管理-我发起'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367100000000000005
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367100000000000102, 1, 367100000000000002
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `id` = 367100000000000102
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367100000000000103, 1, 367100000000000003
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `id` = 367100000000000103
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367100000000000104, 1, 367100000000000004
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `id` = 367100000000000104
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367100000000000105, 1, 367100000000000005
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `id` = 367100000000000105
|
||||
);
|
||||
Reference in New Issue
Block a user