Files
OnboardXAdmin/database/migrations/20260826_onboarding_department_migration.sql
2026-08-27 11:09:20 +08:00

80 lines
2.9 KiB
SQL

-- OnboardX 部门模块独立维护及层级关联迁移脚本
-- 适用数据库:MySQL 8.0+
-- 包含:
-- 1. 新建 ob_department 表
-- 2. 在 ob_position / ob_onboarding_task / ob_employee 中补充 DepartmentId 字段
SET NAMES utf8mb4;
-- 1. 新建入职业务部门表
CREATE TABLE IF NOT EXISTS `ob_department` (
`Id` BIGINT NOT NULL COMMENT '主键',
`CompanyId` BIGINT NOT NULL COMMENT '所属业务公司Id',
`DepartmentCode` VARCHAR(50) NOT NULL COMMENT '部门编码',
`DepartmentName` VARCHAR(200) NOT NULL COMMENT '部门名称',
`SortCode` INT NOT NULL DEFAULT 99 COMMENT '显示排序',
`Remark` VARCHAR(500) NULL COMMENT '部门说明',
`ExtJson` LONGTEXT NULL COMMENT '扩展信息',
`Status` VARCHAR(20) NULL DEFAULT 'enable' COMMENT '启用状态',
`CreateTime` DATETIME(3) NULL COMMENT '创建时间',
`UpdateTime` DATETIME(3) NULL COMMENT '更新时间',
`CreateUserId` BIGINT NULL COMMENT '创建者Id',
`UpdateUserId` BIGINT NULL COMMENT '修改者Id',
`CreateUser` VARCHAR(200) NULL COMMENT '创建人',
`UpdateUser` VARCHAR(200) NULL COMMENT '更新人',
`IsDelete` TINYINT(1) NULL DEFAULT 0 COMMENT '软删除',
PRIMARY KEY (`Id`),
UNIQUE KEY `uk_ob_department_company_code` (`CompanyId`, `DepartmentCode`),
KEY `idx_ob_department_company_status` (`CompanyId`, `Status`, `IsDelete`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='入职业务部门';
-- 2. 定义安全补列存储过程(防重复执行)
DROP PROCEDURE IF EXISTS `ob_add_column_if_missing`;
DELIMITER $$
CREATE PROCEDURE `ob_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 ;
-- 3. 在岗位表中新增 DepartmentId 字段
CALL `ob_add_column_if_missing`(
'ob_position',
'DepartmentId',
'BIGINT NULL COMMENT ''所属部门Id'' AFTER `CompanyId`'
);
-- 4. 在入职任务表中新增 DepartmentId 字段
CALL `ob_add_column_if_missing`(
'ob_onboarding_task',
'DepartmentId',
'BIGINT NULL COMMENT ''所属部门Id'' AFTER `CompanyId`'
);
-- 5. 在正式员工档案表中新增 DepartmentId 字段
CALL `ob_add_column_if_missing`(
'ob_employee',
'DepartmentId',
'BIGINT NULL COMMENT ''所属部门Id'' AFTER `CompanyId`'
);
-- 清理临时存储过程
DROP PROCEDURE IF EXISTS `ob_add_column_if_missing`;