599d85b7da
- 会签:一人多组时取消其所在**每个组**的其余待办(原先只取消点击任务所在组,另一组永久 PENDING 卡单) - 跨库:提交首节点审批人解析移出事务;协调单受理部门改为 prepare 事务外解析 - 回填:CONFIRM 节点支持 writableFields(ADR 0006 三类节点均可声明) - 收据单:受理部门(财务部)快照到实例,列表/导出可见 - 明细导出:ENUM 列输出中文文案而非存储编码 - 价格表:历史版本包含未来生效的已归档版本 - 导出会签进度一次装配,去掉按节点重复查询 - 菜单种子:价格菜单在 superAdmin 授权之前,授权条件覆盖 approval:% - doc_type 与 flow_code 常量分开;删除未使用的 findByDocType / ApprovalDetail.fieldChanges - 补附件三档白名单用例(VOUCHER 通过、EXTERNAL 被拒)
95 lines
3.9 KiB
SQL
95 lines
3.9 KiB
SQL
-- 二期审批引擎扩展(可重复执行)
|
||
-- 目标库:db_gxtyzx(master)
|
||
-- 执行顺序:01-approval.sql -> 02-approval_menu.sql -> 03-approval_orgs_roles.sql
|
||
-- -> 04-approval_role_grants.sql -> 05-approval_phase2.sql
|
||
--
|
||
-- 覆盖 ADR 0003(会签)、0004(明细行)、0006(回填)、0007(流程类型筛选)。
|
||
-- MySQL 8 不支持 ADD COLUMN IF NOT EXISTS,因此用 information_schema 判断后动态执行。
|
||
|
||
-- 老数据回填:一期实例没有 title/search_text(幂等,只补空值)
|
||
UPDATE approval_instance i
|
||
JOIN approval_completion_form f ON f.instance_id = i.id
|
||
SET i.title = f.name,
|
||
i.search_text = CONCAT_WS(' ', f.name, f.implement_org, f.service_content)
|
||
WHERE i.title IS NULL;
|
||
|
||
UPDATE approval_instance i
|
||
JOIN approval_coordination_form c ON c.instance_id = i.id
|
||
SET i.title = c.title,
|
||
i.search_text = CONCAT_WS(' ', c.title, c.content, c.remark)
|
||
WHERE i.title IS NULL;
|
||
|
||
DROP PROCEDURE IF EXISTS approval_phase2_add_column;
|
||
DROP PROCEDURE IF EXISTS approval_phase2_add_index;
|
||
|
||
DELIMITER $$
|
||
CREATE PROCEDURE approval_phase2_add_column(IN p_table VARCHAR(64), IN p_column VARCHAR(64),
|
||
IN p_definition TEXT)
|
||
BEGIN
|
||
IF NOT EXISTS (
|
||
SELECT 1 FROM information_schema.columns
|
||
WHERE table_schema = DATABASE() AND table_name = p_table AND column_name = p_column
|
||
) THEN
|
||
SET @ddl = CONCAT('ALTER TABLE ', p_table, ' ADD COLUMN ', p_definition);
|
||
PREPARE stmt FROM @ddl;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
END IF;
|
||
END$$
|
||
|
||
CREATE PROCEDURE approval_phase2_add_index(IN p_table VARCHAR(64), IN p_index VARCHAR(64),
|
||
IN p_definition TEXT)
|
||
BEGIN
|
||
IF NOT EXISTS (
|
||
SELECT 1 FROM information_schema.statistics
|
||
WHERE table_schema = DATABASE() AND table_name = p_table AND index_name = p_index
|
||
) THEN
|
||
SET @ddl = CONCAT('ALTER TABLE ', p_table, ' ADD ', p_definition);
|
||
PREPARE stmt FROM @ddl;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
END IF;
|
||
END$$
|
||
DELIMITER ;
|
||
|
||
-- 会签任务分组:非会签节点三列为空(ADR 0003)
|
||
CALL approval_phase2_add_column('approval_task', 'group_key',
|
||
'group_key VARCHAR(40) DEFAULT NULL COMMENT ''会签组标识'' AFTER opinion');
|
||
CALL approval_phase2_add_column('approval_task', 'group_name',
|
||
'group_name VARCHAR(100) DEFAULT NULL COMMENT ''会签组显示名'' AFTER group_key');
|
||
CALL approval_phase2_add_column('approval_task', 'group_seq',
|
||
'group_seq INT DEFAULT NULL COMMENT ''会签组展示顺序'' AFTER group_name');
|
||
|
||
-- 列表标题与检索文本:由单据实现计算落库,列表/检索不再按 doc_type 分支(ADR 0007)
|
||
CALL approval_phase2_add_column('approval_instance', 'title',
|
||
'title VARCHAR(200) DEFAULT NULL COMMENT ''列表显示标题'' AFTER biz_id');
|
||
CALL approval_phase2_add_column('approval_instance', 'search_text',
|
||
'search_text VARCHAR(500) DEFAULT NULL COMMENT ''关键词检索文本'' AFTER title');
|
||
|
||
-- 回填唯一性检索用:同类单据按 flow_code 过滤
|
||
CALL approval_phase2_add_index('approval_instance', 'idx_flow',
|
||
'KEY idx_flow (tenant_id, flow_code, status)');
|
||
|
||
-- 字段改值历史(ADR 0006)
|
||
CREATE TABLE IF NOT EXISTS approval_field_change (
|
||
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,
|
||
field_key VARCHAR(40) NOT NULL,
|
||
field_label VARCHAR(100) DEFAULT NULL,
|
||
old_value VARCHAR(500) DEFAULT NULL,
|
||
new_value VARCHAR(500) DEFAULT NULL,
|
||
operator_id INT NOT NULL,
|
||
operator_name VARCHAR(100) DEFAULT NULL,
|
||
round INT NOT NULL,
|
||
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (id),
|
||
KEY idx_instance (instance_id, create_time),
|
||
KEY idx_field (tenant_id, field_key, new_value)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批字段改值历史';
|
||
|
||
DROP PROCEDURE IF EXISTS approval_phase2_add_column;
|
||
DROP PROCEDURE IF EXISTS approval_phase2_add_index;
|