This commit is contained in:
fuenmao
2026-09-09 14:57:41 +08:00
parent c015bc356c
commit 95b14b198a
27 changed files with 2069 additions and 52 deletions
@@ -0,0 +1,163 @@
-- 员工合同快照:一名正式员工的一份任务合同对应一条记录。
-- 常用字段独立存储用于筛选导出,VariablesJson 按 VariableCode 保存全部标准及自定义变量。
-- 适用数据库:MySQL 8.0+
SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS `ob_employee_contract_snapshot` (
`Id` BIGINT NOT NULL COMMENT '主键',
`EmployeeId` BIGINT NOT NULL COMMENT '正式员工Id',
`TaskId` BIGINT NOT NULL COMMENT '来源入职任务Id',
`TaskContractId` BIGINT NOT NULL COMMENT '来源任务合同Id',
`TemplateId` BIGINT NOT NULL COMMENT '合同模板Id',
`TemplateVersionId` BIGINT NOT NULL COMMENT '合同模板版本Id',
`ContractName` VARCHAR(300) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '合同名称快照',
`ContractType` VARCHAR(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '合同类型快照',
`ContractStartDate` DATE DEFAULT NULL COMMENT '合同开始日期',
`ContractEndDate` DATE DEFAULT NULL COMMENT '合同结束日期',
`ContractTerm` VARCHAR(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '合同期限原始文本',
`ProbationStartDate` DATE DEFAULT NULL COMMENT '试用期开始日期',
`ProbationEndDate` DATE DEFAULT NULL COMMENT '试用期结束日期',
`ProbationTerm` VARCHAR(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '试用期期限原始文本',
`ProbationSalary` DECIMAL(18,2) DEFAULT NULL COMMENT '试用薪资,对应hr.ProbationSalary,不自动推算',
`BaseSalary` DECIMAL(18,2) DEFAULT NULL COMMENT '基本工资',
`PositionSalary` DECIMAL(18,2) DEFAULT NULL COMMENT '岗位工资',
`PerformanceAllowance` DECIMAL(18,2) DEFAULT NULL COMMENT '绩效津贴',
`AttendanceBonus` DECIMAL(18,2) DEFAULT NULL COMMENT '全勤奖',
`RegularSalary` DECIMAL(18,2) DEFAULT NULL COMMENT '转正后薪资',
`WorkCity` VARCHAR(300) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '工作地点或城市',
`PositionName` VARCHAR(300) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '合同岗位名称',
`EmployeeNo` VARCHAR(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '合同员工工号',
`VariablesJson` JSON NOT NULL COMMENT '按VariableCode索引的完整合同变量快照',
`SnapshotVersion` INT NOT NULL DEFAULT 1 COMMENT '快照结构版本',
`SnapshotAt` DATETIME(3) NOT NULL COMMENT '快照生成时间',
`ExtJson` LONGTEXT COLLATE utf8mb4_unicode_ci COMMENT '扩展信息',
`Status` VARCHAR(20) COLLATE utf8mb4_unicode_ci DEFAULT 'enable' COMMENT '记录状态',
`CreateTime` DATETIME(3) DEFAULT NULL COMMENT '创建时间',
`UpdateTime` DATETIME(3) DEFAULT NULL COMMENT '更新时间',
`CreateUserId` BIGINT DEFAULT NULL COMMENT '创建者Id',
`UpdateUserId` BIGINT DEFAULT NULL COMMENT '修改者Id',
`CreateUser` VARCHAR(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
`UpdateUser` VARCHAR(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
`IsDelete` TINYINT(1) DEFAULT 0 COMMENT '软删除',
PRIMARY KEY (`Id`),
UNIQUE KEY `uk_ob_employee_contract_snapshot_contract` (`TaskContractId`),
KEY `idx_ob_employee_contract_snapshot_employee` (`EmployeeId`, `IsDelete`),
KEY `idx_ob_employee_contract_snapshot_task` (`TaskId`, `IsDelete`),
KEY `idx_ob_employee_contract_snapshot_dates` (`ContractStartDate`, `ContractEndDate`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='正式员工合同业务快照';
-- 为已经审核建档且仍保留任务合同变量的员工补建快照。
INSERT IGNORE INTO `ob_employee_contract_snapshot` (
`Id`, `EmployeeId`, `TaskId`, `TaskContractId`, `TemplateId`, `TemplateVersionId`,
`ContractName`, `ContractType`, `ContractStartDate`, `ContractEndDate`, `ContractTerm`,
`ProbationStartDate`, `ProbationEndDate`, `ProbationTerm`, `ProbationSalary`,
`BaseSalary`, `PositionSalary`, `PerformanceAllowance`, `AttendanceBonus`, `RegularSalary`,
`WorkCity`, `PositionName`, `EmployeeNo`, `VariablesJson`, `SnapshotVersion`, `SnapshotAt`,
`Status`, `CreateTime`, `CreateUserId`, `CreateUser`, `IsDelete`
)
SELECT
contract.`Id`,
task.`EmployeeId`,
task.`Id`,
contract.`Id`,
contract.`TemplateId`,
contract.`TemplateVersionId`,
contract.`ContractName`,
contract.`ContractType`,
CASE
WHEN TRIM(variable.`ContractStartDateText`) REGEXP '^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$'
THEN STR_TO_DATE(TRIM(variable.`ContractStartDateText`), '%Y-%m-%d')
ELSE NULL
END,
CASE
WHEN TRIM(variable.`ContractEndDateText`) REGEXP '^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$'
THEN STR_TO_DATE(TRIM(variable.`ContractEndDateText`), '%Y-%m-%d')
ELSE NULL
END,
variable.`ContractTerm`,
CASE
WHEN TRIM(variable.`ProbationStartDateText`) REGEXP '^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$'
THEN STR_TO_DATE(TRIM(variable.`ProbationStartDateText`), '%Y-%m-%d')
ELSE NULL
END,
CASE
WHEN TRIM(variable.`ProbationEndDateText`) REGEXP '^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$'
THEN STR_TO_DATE(TRIM(variable.`ProbationEndDateText`), '%Y-%m-%d')
ELSE NULL
END,
variable.`ProbationTerm`,
CASE WHEN TRIM(variable.`ProbationSalaryText`) REGEXP '^-?[0-9]+([.][0-9]+)?$'
THEN CAST(TRIM(variable.`ProbationSalaryText`) AS DECIMAL(18,2)) ELSE NULL END,
CASE WHEN TRIM(variable.`BaseSalaryText`) REGEXP '^-?[0-9]+([.][0-9]+)?$'
THEN CAST(TRIM(variable.`BaseSalaryText`) AS DECIMAL(18,2)) ELSE NULL END,
CASE WHEN TRIM(variable.`PositionSalaryText`) REGEXP '^-?[0-9]+([.][0-9]+)?$'
THEN CAST(TRIM(variable.`PositionSalaryText`) AS DECIMAL(18,2)) ELSE NULL END,
CASE WHEN TRIM(variable.`PerformanceAllowanceText`) REGEXP '^-?[0-9]+([.][0-9]+)?$'
THEN CAST(TRIM(variable.`PerformanceAllowanceText`) AS DECIMAL(18,2)) ELSE NULL END,
CASE WHEN TRIM(variable.`AttendanceBonusText`) REGEXP '^-?[0-9]+([.][0-9]+)?$'
THEN CAST(TRIM(variable.`AttendanceBonusText`) AS DECIMAL(18,2)) ELSE NULL END,
CASE WHEN TRIM(variable.`RegularSalaryText`) REGEXP '^-?[0-9]+([.][0-9]+)?$'
THEN CAST(TRIM(variable.`RegularSalaryText`) AS DECIMAL(18,2)) ELSE NULL END,
variable.`WorkCity`,
variable.`PositionName`,
variable.`EmployeeNo`,
COALESCE(variable.`VariablesJson`, JSON_OBJECT()),
1,
COALESCE(task.`AuditedAt`, employee.`CreateTime`, NOW(3)),
'enable',
COALESCE(employee.`CreateTime`, NOW(3)),
employee.`CreateUserId`,
employee.`CreateUser`,
0
FROM `ob_onboarding_task` task
INNER JOIN `ob_employee` employee
ON employee.`Id` = task.`EmployeeId`
INNER JOIN `ob_task_contract` contract
ON contract.`TaskId` = task.`Id`
LEFT JOIN (
SELECT
row_value.`TaskContractId`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.ContractStartDate' THEN row_value.`VariableValue` END) AS `ContractStartDateText`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.ContractEndDate' THEN row_value.`VariableValue` END) AS `ContractEndDateText`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.ContractTerm' THEN row_value.`VariableValue` END) AS `ContractTerm`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.ProbationStartDate' THEN row_value.`VariableValue` END) AS `ProbationStartDateText`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.ProbationEndDate' THEN row_value.`VariableValue` END) AS `ProbationEndDateText`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.ProbationTerm' THEN row_value.`VariableValue` END) AS `ProbationTerm`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.ProbationSalary' THEN row_value.`VariableValue` END) AS `ProbationSalaryText`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.BaseSalary' THEN row_value.`VariableValue` END) AS `BaseSalaryText`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.PositionSalary' THEN row_value.`VariableValue` END) AS `PositionSalaryText`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.PerformanceAllowance' THEN row_value.`VariableValue` END) AS `PerformanceAllowanceText`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.AttendanceBonus' THEN row_value.`VariableValue` END) AS `AttendanceBonusText`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.RegularSalary' THEN row_value.`VariableValue` END) AS `RegularSalaryText`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.WorkCity' THEN row_value.`VariableValue` END) AS `WorkCity`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.PositionName' THEN row_value.`VariableValue` END) AS `PositionName`,
MAX(CASE WHEN row_value.`VariableCode` = 'hr.EmployeeNo' THEN row_value.`VariableValue` END) AS `EmployeeNo`,
JSON_OBJECTAGG(
row_value.`VariableCode`,
JSON_OBJECT(
'variableName', row_value.`VariableName`,
'variableType', row_value.`VariableType`,
'dataType', row_value.`DataType`,
'variableValue', row_value.`VariableValue`,
'sourceType', row_value.`SourceType`,
'isManualOverride', row_value.`IsManualOverride`,
'sortCode', row_value.`SortCode`
)
) AS `VariablesJson`
FROM `ob_task_contract_variable` row_value
WHERE row_value.`IsDelete` = 0
GROUP BY row_value.`TaskContractId`
) variable
ON variable.`TaskContractId` = contract.`Id`
WHERE task.`EmployeeId` IS NOT NULL
AND task.`IsDelete` = 0
AND employee.`IsDelete` = 0
AND contract.`IsDelete` = 0;
SELECT
COUNT(*) AS `员工合同快照数量`,
COUNT(DISTINCT `EmployeeId`) AS `已归档员工数量`,
COUNT(DISTINCT `TaskContractId`) AS `已归档合同数量`
FROM `ob_employee_contract_snapshot`
WHERE `IsDelete` = 0;
@@ -0,0 +1,172 @@
-- 员工用工类型、人工转正、社保状态及人事变更材料。
-- 适用数据库:MySQL 8.0+
SET NAMES utf8mb4;
DROP PROCEDURE IF EXISTS ob_upgrade_employee_hr_management;
DELIMITER $$
CREATE PROCEDURE ob_upgrade_employee_hr_management()
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'ob_onboarding_task'
AND COLUMN_NAME = 'EmploymentType'
) THEN
ALTER TABLE ob_onboarding_task
ADD COLUMN EmploymentType VARCHAR(20) COLLATE utf8mb4_unicode_ci
NOT NULL DEFAULT 'full_time' COMMENT '用工类型:full_time正式、part_time兼职'
AFTER PositionId;
END IF;
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'ob_employee'
AND COLUMN_NAME = 'EmploymentType'
) THEN
ALTER TABLE ob_employee
ADD COLUMN EmploymentType VARCHAR(20) COLLATE utf8mb4_unicode_ci
NOT NULL DEFAULT 'full_time' COMMENT '用工类型:full_time正式、part_time兼职'
AFTER PositionId;
END IF;
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'ob_employee'
AND COLUMN_NAME = 'RegularizationStatus'
) THEN
ALTER TABLE ob_employee
ADD COLUMN RegularizationStatus VARCHAR(20) COLLATE utf8mb4_unicode_ci
NOT NULL DEFAULT 'probation' COMMENT '转正状态:probation、regular、not_applicable'
AFTER EmploymentType;
END IF;
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'ob_employee'
AND COLUMN_NAME = 'SocialInsuranceStatus'
) THEN
ALTER TABLE ob_employee
ADD COLUMN SocialInsuranceStatus VARCHAR(20) COLLATE utf8mb4_unicode_ci
NOT NULL DEFAULT 'unknown' COMMENT '社保状态:unknown、not_purchased、purchased、stopped、not_applicable'
AFTER RegularizationStatus;
END IF;
IF EXISTS (
SELECT 1 FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'ob_employee_contract_snapshot'
) AND NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'ob_employee_contract_snapshot'
AND COLUMN_NAME = 'ProbationSalary'
) THEN
ALTER TABLE ob_employee_contract_snapshot
ADD COLUMN ProbationSalary DECIMAL(18,2) DEFAULT NULL
COMMENT '试用薪资,对应hr.ProbationSalary,不自动推算'
AFTER ProbationTerm;
END IF;
END$$
DELIMITER ;
CALL ob_upgrade_employee_hr_management();
DROP PROCEDURE IF EXISTS ob_upgrade_employee_hr_management;
-- 历史任务及员工默认按正式用工处理;历史转正日期仅用于一次性初始化状态。
UPDATE ob_onboarding_task
SET EmploymentType = 'full_time'
WHERE EmploymentType IS NULL OR EmploymentType NOT IN ('full_time', 'part_time');
UPDATE ob_employee
SET
EmploymentType = CASE
WHEN EmploymentType = 'part_time' THEN 'part_time'
ELSE 'full_time'
END,
RegularizationStatus = CASE
WHEN EmploymentType = 'part_time' THEN 'not_applicable'
WHEN RegularizationDate IS NOT NULL THEN 'regular'
ELSE 'probation'
END,
SocialInsuranceStatus = CASE
WHEN SocialInsuranceStatus IN (
'unknown', 'not_purchased', 'purchased', 'stopped', 'not_applicable'
) THEN SocialInsuranceStatus
ELSE 'unknown'
END;
CREATE TABLE IF NOT EXISTS ob_employee_change_record (
Id BIGINT NOT NULL COMMENT '主键',
EmployeeId BIGINT NOT NULL COMMENT '员工Id',
ChangeType VARCHAR(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '变更类型',
EffectiveDate DATE DEFAULT NULL COMMENT '业务生效日期',
BeforeJson LONGTEXT COLLATE utf8mb4_unicode_ci COMMENT '变更前快照',
AfterJson LONGTEXT COLLATE utf8mb4_unicode_ci COMMENT '变更后快照',
Remark VARCHAR(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
ExtJson LONGTEXT COLLATE utf8mb4_unicode_ci COMMENT '扩展信息',
Status VARCHAR(20) COLLATE utf8mb4_unicode_ci DEFAULT 'enable' COMMENT '记录状态',
CreateTime DATETIME(3) DEFAULT NULL COMMENT '创建时间',
UpdateTime DATETIME(3) DEFAULT NULL COMMENT '更新时间',
CreateUserId BIGINT DEFAULT NULL COMMENT '创建者Id',
UpdateUserId BIGINT DEFAULT NULL COMMENT '修改者Id',
CreateUser VARCHAR(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
UpdateUser VARCHAR(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
IsDelete TINYINT(1) DEFAULT 0 COMMENT '软删除',
PRIMARY KEY (Id),
KEY idx_ob_employee_change_record_employee (EmployeeId, IsDelete, CreateTime),
KEY idx_ob_employee_change_record_type (ChangeType, EffectiveDate)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='员工人事信息变更记录';
CREATE TABLE IF NOT EXISTS ob_employee_attachment (
Id BIGINT NOT NULL COMMENT '主键',
EmployeeId BIGINT NOT NULL COMMENT '员工Id',
ChangeRecordId BIGINT DEFAULT NULL COMMENT '关联人事变更记录Id',
BusinessType VARCHAR(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '附件业务类型',
FileId BIGINT NOT NULL COMMENT '系统文件Id',
FileName VARCHAR(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '上传时文件名快照',
UploadedAt DATETIME(3) NOT NULL COMMENT '上传关联时间',
ExtJson LONGTEXT COLLATE utf8mb4_unicode_ci COMMENT '扩展信息',
Status VARCHAR(20) COLLATE utf8mb4_unicode_ci DEFAULT 'enable' COMMENT '记录状态',
CreateTime DATETIME(3) DEFAULT NULL COMMENT '创建时间',
UpdateTime DATETIME(3) DEFAULT NULL COMMENT '更新时间',
CreateUserId BIGINT DEFAULT NULL COMMENT '创建者Id',
UpdateUserId BIGINT DEFAULT NULL COMMENT '修改者Id',
CreateUser VARCHAR(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
UpdateUser VARCHAR(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
IsDelete TINYINT(1) DEFAULT 0 COMMENT '软删除',
PRIMARY KEY (Id),
KEY idx_ob_employee_attachment_employee (EmployeeId, BusinessType, IsDelete),
KEY idx_ob_employee_attachment_change (ChangeRecordId, IsDelete),
KEY idx_ob_employee_attachment_file (FileId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='员工人事材料附件';
-- 标准试用薪资变量;已有同编码历史数据时恢复并统一为内置数值变量。
INSERT INTO ob_variable_definition (
Id, VariableCode, VariableName, VariableCategory, DataType,
IsBuiltIn, Required, SortCode, Remark, Status,
CreateTime, IsDelete
) VALUES (
841400000000115, 'hr.ProbationSalary', '试用薪资(元)', 'hr', 'number',
1, 0, 335, '合同约定试用期薪资,不自动推算', 'enable',
NOW(), 0
)
ON DUPLICATE KEY UPDATE
VariableName = VALUES(VariableName),
VariableCategory = 'hr',
DataType = 'number',
IsBuiltIn = 1,
SortCode = 335,
Remark = VALUES(Remark),
Status = 'enable',
IsDelete = 0;
SELECT
(SELECT COUNT(*) FROM ob_employee_change_record) AS '员工人事变更记录数',
(SELECT COUNT(*) FROM ob_employee_attachment) AS '员工人事附件数',
(SELECT COUNT(*) FROM ob_variable_definition
WHERE VariableCode = 'hr.ProbationSalary' AND IsDelete = 0) AS '试用薪资标准变量数';
@@ -49,6 +49,35 @@ BEGIN
START TRANSACTION;
-- 一、删除任务运行数据及快照。
-- 兼容尚未执行员工人事管理迁移的旧数据库。
IF EXISTS (
SELECT 1
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'ob_employee_attachment'
) THEN
DELETE FROM ob_employee_attachment;
END IF;
IF EXISTS (
SELECT 1
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'ob_employee_change_record'
) THEN
DELETE FROM ob_employee_change_record;
END IF;
-- 兼容尚未执行员工合同快照迁移的旧数据库。
IF EXISTS (
SELECT 1
FROM `information_schema`.`TABLES`
WHERE `TABLE_SCHEMA` = DATABASE()
AND `TABLE_NAME` = 'ob_employee_contract_snapshot'
) THEN
SET @delete_employee_contract_snapshot_sql = 'DELETE FROM `ob_employee_contract_snapshot`';
PREPARE delete_employee_contract_snapshot_statement FROM @delete_employee_contract_snapshot_sql;
EXECUTE delete_employee_contract_snapshot_statement;
DEALLOCATE PREPARE delete_employee_contract_snapshot_statement;
END IF;
DELETE FROM `ob_task_operation_log`;
DELETE FROM `ob_task_audit`;
DELETE FROM `ob_task_material`;
@@ -43,6 +43,9 @@ BEGIN
'ob_electronic_sign_event',
'ob_electronic_sign_document',
'ob_electronic_sign_process',
'ob_employee_attachment',
'ob_employee_change_record',
'ob_employee_contract_snapshot',
'ob_task_operation_log',
'ob_task_audit',
'ob_task_material',
@@ -61,6 +64,9 @@ BEGIN
'ob_electronic_sign_event',
'ob_electronic_sign_document',
'ob_electronic_sign_process',
'ob_employee_attachment',
'ob_employee_change_record',
'ob_employee_contract_snapshot',
'ob_task_operation_log',
'ob_task_audit',
'ob_task_material',
@@ -166,6 +172,9 @@ BEGIN
'ob_electronic_sign_event',
'ob_electronic_sign_document',
'ob_electronic_sign_process',
'ob_employee_attachment',
'ob_employee_change_record',
'ob_employee_contract_snapshot',
'ob_task_operation_log',
'ob_task_audit',
'ob_task_material',
@@ -199,6 +208,9 @@ WHERE `TABLE_SCHEMA` = DATABASE()
'ob_electronic_sign_event',
'ob_electronic_sign_document',
'ob_electronic_sign_process',
'ob_employee_attachment',
'ob_employee_change_record',
'ob_employee_contract_snapshot',
'ob_task_operation_log',
'ob_task_audit',
'ob_task_material',