1111
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
-- OnboardX 入职业务数据重置脚本
|
||||
--
|
||||
-- 保留:
|
||||
-- 1. ob_variable_definition 合同变量字典
|
||||
-- 2. ob_material_type 上传资料类型
|
||||
--
|
||||
-- 清除:公司、部门、岗位、合同模板、入职模板、任务、员工档案及全部流程明细。
|
||||
-- 不处理:sys_file 表记录和阿里云 OSS 对象,避免误删系统其他模块共用文件。
|
||||
--
|
||||
-- 重要:请确认已经连接 OnboardX 数据库后再执行。
|
||||
|
||||
USE `OnboardX`;
|
||||
|
||||
DROP PROCEDURE IF EXISTS `ob_reset_business_data`;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE PROCEDURE `ob_reset_business_data`()
|
||||
BEGIN
|
||||
DECLARE old_foreign_key_checks INT DEFAULT 1;
|
||||
DECLARE variable_definition_count_before BIGINT DEFAULT 0;
|
||||
DECLARE variable_definition_count_after BIGINT DEFAULT 0;
|
||||
DECLARE material_type_count_before BIGINT DEFAULT 0;
|
||||
DECLARE material_type_count_after BIGINT DEFAULT 0;
|
||||
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
ROLLBACK;
|
||||
SET FOREIGN_KEY_CHECKS = old_foreign_key_checks;
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
IF LOWER(DATABASE()) <> 'onboardx' THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '当前数据库不是 OnboardX,已拒绝执行入职业务数据清理';
|
||||
END IF;
|
||||
|
||||
SELECT COUNT(*)
|
||||
INTO variable_definition_count_before
|
||||
FROM `ob_variable_definition`;
|
||||
|
||||
SELECT COUNT(*)
|
||||
INTO material_type_count_before
|
||||
FROM `ob_material_type`;
|
||||
|
||||
SET old_foreign_key_checks = @@FOREIGN_KEY_CHECKS;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
-- 一、删除任务运行数据及快照。
|
||||
DELETE FROM `ob_task_operation_log`;
|
||||
DELETE FROM `ob_task_audit`;
|
||||
DELETE FROM `ob_task_material`;
|
||||
DELETE FROM `ob_task_contract_variable`;
|
||||
DELETE FROM `ob_task_contract`;
|
||||
DELETE FROM `ob_task_form_value`;
|
||||
DELETE FROM `ob_task_material_requirement`;
|
||||
DELETE FROM `ob_task_form_requirement`;
|
||||
DELETE FROM `ob_task_employee_info`;
|
||||
DELETE FROM `ob_task_link`;
|
||||
DELETE FROM `ob_onboarding_task`;
|
||||
DELETE FROM `ob_employee`;
|
||||
|
||||
-- 二、删除入职模板及其关联配置。
|
||||
DELETE FROM `ob_onboarding_template_material`;
|
||||
DELETE FROM `ob_onboarding_template_form_field`;
|
||||
DELETE FROM `ob_onboarding_template_contract`;
|
||||
DELETE FROM `ob_onboarding_template_position`;
|
||||
DELETE FROM `ob_onboarding_template`;
|
||||
|
||||
-- 三、删除合同模板实例数据。
|
||||
-- ob_template_variable 是具体 DOCX 版本识别出的变量,不是全局合同变量字典。
|
||||
DELETE FROM `ob_contract_template_position`;
|
||||
DELETE FROM `ob_template_variable`;
|
||||
DELETE FROM `ob_contract_template_version`;
|
||||
DELETE FROM `ob_contract_template`;
|
||||
|
||||
-- 四、删除旧版公司岗位配置和动态字段实例。
|
||||
DELETE FROM `ob_contract_scope`;
|
||||
DELETE FROM `ob_form_requirement`;
|
||||
DELETE FROM `ob_material_requirement`;
|
||||
DELETE FROM `ob_form_field`;
|
||||
|
||||
-- 五、最后删除组织基础数据。
|
||||
DELETE FROM `ob_position`;
|
||||
DELETE FROM `ob_department`;
|
||||
DELETE FROM `ob_company`;
|
||||
|
||||
-- 防止后续维护脚本时误把两张保留表加入删除范围。
|
||||
SELECT COUNT(*)
|
||||
INTO variable_definition_count_after
|
||||
FROM `ob_variable_definition`;
|
||||
|
||||
SELECT COUNT(*)
|
||||
INTO material_type_count_after
|
||||
FROM `ob_material_type`;
|
||||
|
||||
IF variable_definition_count_before <> variable_definition_count_after THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '合同变量字典数量发生变化,事务已回滚';
|
||||
END IF;
|
||||
|
||||
IF material_type_count_before <> material_type_count_after THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '上传资料类型数量发生变化,事务已回滚';
|
||||
END IF;
|
||||
|
||||
COMMIT;
|
||||
SET FOREIGN_KEY_CHECKS = old_foreign_key_checks;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
CALL `ob_reset_business_data`();
|
||||
DROP PROCEDURE IF EXISTS `ob_reset_business_data`;
|
||||
|
||||
-- 执行结果校验:以下两张保留表应仍有数据。
|
||||
SELECT 'ob_variable_definition' AS `PreservedTable`, COUNT(*) AS `RemainingRows`
|
||||
FROM `ob_variable_definition`
|
||||
UNION ALL
|
||||
SELECT 'ob_material_type', COUNT(*)
|
||||
FROM `ob_material_type`;
|
||||
|
||||
-- 其余 ob_ 业务表的 TABLE_ROWS 应为 0(InnoDB 下该值为估算值,仅供快速查看)。
|
||||
SELECT `TABLE_NAME`, `TABLE_ROWS`
|
||||
FROM `information_schema`.`TABLES`
|
||||
WHERE `TABLE_SCHEMA` = DATABASE()
|
||||
AND `TABLE_NAME` LIKE 'ob\_%'
|
||||
ORDER BY `TABLE_NAME`;
|
||||
@@ -0,0 +1,122 @@
|
||||
-- OnboardX 入职业务数据重置脚本 V2
|
||||
-- 自动读取当前数据库实际存在的 ob_ 表,兼容不同版本数据库缺少旧表的情况。
|
||||
-- 仅保留:ob_variable_definition(合同变量字典)、ob_material_type(上传资料类型)。
|
||||
-- 不处理 sys_file 表记录及阿里云 OSS 实际对象。
|
||||
|
||||
USE `OnboardX`;
|
||||
|
||||
DROP PROCEDURE IF EXISTS `ob_reset_business_data`;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE PROCEDURE `ob_reset_business_data`()
|
||||
BEGIN
|
||||
DECLARE old_foreign_key_checks INT DEFAULT 1;
|
||||
DECLARE variable_definition_count_before BIGINT DEFAULT 0;
|
||||
DECLARE variable_definition_count_after BIGINT DEFAULT 0;
|
||||
DECLARE material_type_count_before BIGINT DEFAULT 0;
|
||||
DECLARE material_type_count_after BIGINT DEFAULT 0;
|
||||
DECLARE finished INT DEFAULT 0;
|
||||
DECLARE target_table_name VARCHAR(64);
|
||||
|
||||
DECLARE business_table_cursor CURSOR FOR
|
||||
SELECT `TABLE_NAME`
|
||||
FROM `information_schema`.`TABLES`
|
||||
WHERE `TABLE_SCHEMA` = DATABASE()
|
||||
AND `TABLE_TYPE` = 'BASE TABLE'
|
||||
AND LEFT(`TABLE_NAME`, 3) = 'ob_'
|
||||
AND `TABLE_NAME` NOT IN (
|
||||
'ob_variable_definition',
|
||||
'ob_material_type'
|
||||
)
|
||||
ORDER BY `TABLE_NAME`;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
|
||||
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
ROLLBACK;
|
||||
SET FOREIGN_KEY_CHECKS = old_foreign_key_checks;
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
IF LOWER(DATABASE()) <> 'onboardx' THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '当前数据库不是 OnboardX,已拒绝执行入职业务数据清理';
|
||||
END IF;
|
||||
|
||||
SELECT COUNT(*)
|
||||
INTO variable_definition_count_before
|
||||
FROM `ob_variable_definition`;
|
||||
|
||||
SELECT COUNT(*)
|
||||
INTO material_type_count_before
|
||||
FROM `ob_material_type`;
|
||||
|
||||
SET old_foreign_key_checks = @@FOREIGN_KEY_CHECKS;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
OPEN business_table_cursor;
|
||||
|
||||
delete_loop: LOOP
|
||||
FETCH business_table_cursor INTO target_table_name;
|
||||
|
||||
IF finished = 1 THEN
|
||||
LEAVE delete_loop;
|
||||
END IF;
|
||||
|
||||
SET @delete_business_table_sql = CONCAT(
|
||||
'DELETE FROM `',
|
||||
REPLACE(target_table_name, '`', '``'),
|
||||
'`'
|
||||
);
|
||||
|
||||
PREPARE delete_business_table_statement FROM @delete_business_table_sql;
|
||||
EXECUTE delete_business_table_statement;
|
||||
DEALLOCATE PREPARE delete_business_table_statement;
|
||||
END LOOP;
|
||||
|
||||
CLOSE business_table_cursor;
|
||||
|
||||
SELECT COUNT(*)
|
||||
INTO variable_definition_count_after
|
||||
FROM `ob_variable_definition`;
|
||||
|
||||
SELECT COUNT(*)
|
||||
INTO material_type_count_after
|
||||
FROM `ob_material_type`;
|
||||
|
||||
IF variable_definition_count_before <> variable_definition_count_after THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '合同变量字典数量发生变化,事务已回滚';
|
||||
END IF;
|
||||
|
||||
IF material_type_count_before <> material_type_count_after THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '上传资料类型数量发生变化,事务已回滚';
|
||||
END IF;
|
||||
|
||||
COMMIT;
|
||||
SET FOREIGN_KEY_CHECKS = old_foreign_key_checks;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
CALL `ob_reset_business_data`();
|
||||
DROP PROCEDURE IF EXISTS `ob_reset_business_data`;
|
||||
|
||||
-- 校验保留表数据。
|
||||
SELECT 'ob_variable_definition' AS `PreservedTable`, COUNT(*) AS `RemainingRows`
|
||||
FROM `ob_variable_definition`
|
||||
UNION ALL
|
||||
SELECT 'ob_material_type', COUNT(*)
|
||||
FROM `ob_material_type`;
|
||||
|
||||
-- 查看所有入职业务表;除上面两张保留表外,其余表应为空。
|
||||
SELECT `TABLE_NAME`, `TABLE_ROWS`
|
||||
FROM `information_schema`.`TABLES`
|
||||
WHERE `TABLE_SCHEMA` = DATABASE()
|
||||
AND LEFT(`TABLE_NAME`, 3) = 'ob_'
|
||||
ORDER BY `TABLE_NAME`;
|
||||
Reference in New Issue
Block a user