1111
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
-- OnboardX 任务合同变量排序快照升级脚本
|
||||
-- 适用数据库:MySQL 8.0+
|
||||
-- 说明:
|
||||
-- 1. 可重复执行。
|
||||
-- 2. 已有合同版本变量会同步全局变量字典的排序值。
|
||||
-- 3. 新任务会在创建变量快照时固定模板变量的排序值。
|
||||
-- 4. 历史任务按照其绑定的合同模板版本安全回填排序值。
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
DROP PROCEDURE IF EXISTS `ob_task_variable_add_column_if_missing`;
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE `ob_task_variable_add_column_if_missing`(
|
||||
IN p_table_name VARCHAR(128),
|
||||
IN p_column_name VARCHAR(128),
|
||||
IN p_column_definition VARCHAR(1000)
|
||||
)
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = p_table_name
|
||||
AND COLUMN_NAME = p_column_name
|
||||
) THEN
|
||||
SET @ddl = CONCAT(
|
||||
'ALTER TABLE `', p_table_name, '` ADD COLUMN `',
|
||||
p_column_name, '` ', p_column_definition
|
||||
);
|
||||
PREPARE stmt FROM @ddl;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
||||
DROP PROCEDURE IF EXISTS `ob_task_variable_add_index_if_missing`;
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE `ob_task_variable_add_index_if_missing`(
|
||||
IN p_table_name VARCHAR(128),
|
||||
IN p_index_name VARCHAR(128),
|
||||
IN p_index_definition VARCHAR(1000)
|
||||
)
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = p_table_name
|
||||
AND INDEX_NAME = p_index_name
|
||||
) THEN
|
||||
SET @ddl = CONCAT(
|
||||
'ALTER TABLE `', p_table_name, '` ADD ', p_index_definition
|
||||
);
|
||||
PREPARE stmt FROM @ddl;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
||||
CALL `ob_task_variable_add_column_if_missing`(
|
||||
'ob_task_contract_variable',
|
||||
'SortCode',
|
||||
'INT NOT NULL DEFAULT 100 COMMENT ''任务变量展示排序'' AFTER `DataType`'
|
||||
);
|
||||
|
||||
-- 修复旧代码导入 DOCX 时没有继承全局变量字典排序的问题。
|
||||
-- 模板变量编码创建后不可修改,因此可以按完整变量编码安全匹配。
|
||||
UPDATE `ob_template_variable` template_variable
|
||||
INNER JOIN `ob_variable_definition` variable_definition
|
||||
ON CONVERT(variable_definition.`VariableCode` USING utf8mb4) COLLATE utf8mb4_unicode_ci
|
||||
= CONVERT(template_variable.`VariableCode` USING utf8mb4) COLLATE utf8mb4_unicode_ci
|
||||
SET template_variable.`SortCode` = COALESCE(variable_definition.`SortCode`, 100);
|
||||
|
||||
-- 使用任务锁定的合同版本回填历史变量排序;找不到模板定义的数据保留默认值 100。
|
||||
UPDATE `ob_task_contract_variable` task_variable
|
||||
INNER JOIN `ob_task_contract` task_contract
|
||||
ON task_contract.`Id` = task_variable.`TaskContractId`
|
||||
INNER JOIN `ob_template_variable` template_variable
|
||||
ON template_variable.`TemplateVersionId` = task_contract.`TemplateVersionId`
|
||||
AND CONVERT(template_variable.`VariableCode` USING utf8mb4) COLLATE utf8mb4_unicode_ci
|
||||
= CONVERT(task_variable.`VariableCode` USING utf8mb4) COLLATE utf8mb4_unicode_ci
|
||||
SET task_variable.`SortCode` = COALESCE(template_variable.`SortCode`, 100);
|
||||
|
||||
CALL `ob_task_variable_add_index_if_missing`(
|
||||
'ob_task_contract_variable',
|
||||
'idx_ob_task_contract_variable_sort',
|
||||
'INDEX `idx_ob_task_contract_variable_sort` (`TaskContractId`, `SortCode`, `VariableCode`)'
|
||||
);
|
||||
|
||||
DROP PROCEDURE IF EXISTS `ob_task_variable_add_index_if_missing`;
|
||||
DROP PROCEDURE IF EXISTS `ob_task_variable_add_column_if_missing`;
|
||||
|
||||
-- 诊断仍未匹配到模板变量定义的历史数据。这些数据会使用默认排序值 100,并按变量编码稳定排序。
|
||||
SELECT
|
||||
task_variable.`Id`,
|
||||
task_variable.`TaskContractId`,
|
||||
task_variable.`VariableCode`,
|
||||
task_variable.`SortCode`
|
||||
FROM `ob_task_contract_variable` task_variable
|
||||
LEFT JOIN `ob_task_contract` task_contract
|
||||
ON task_contract.`Id` = task_variable.`TaskContractId`
|
||||
LEFT JOIN `ob_template_variable` template_variable
|
||||
ON template_variable.`TemplateVersionId` = task_contract.`TemplateVersionId`
|
||||
AND CONVERT(template_variable.`VariableCode` USING utf8mb4) COLLATE utf8mb4_unicode_ci
|
||||
= CONVERT(task_variable.`VariableCode` USING utf8mb4) COLLATE utf8mb4_unicode_ci
|
||||
WHERE template_variable.`Id` IS NULL
|
||||
ORDER BY task_variable.`TaskContractId`, task_variable.`VariableCode`;
|
||||
Reference in New Issue
Block a user