-- =============================================
|
-- 考勤规则:支持同一部门配置多条规则(按生效日期区间区分)
|
--
|
-- 变更:hrm_attendance_rule 增加 2 列
|
-- effective_start_date 生效开始日期(NULL = 不限)
|
-- effective_end_date 生效结束日期(NULL = 不限)
|
--
|
-- 匹配规则(后端 HrmAttendanceRuleServiceImpl.getAttendanceRuleByDeptId):
|
-- 1) 优先取部门专属规则,没有则取全局规则(dept_id IS NULL)
|
-- 2) 只取 status=0 且 生效区间覆盖考勤日期 的规则
|
-- 3) 多条命中时,取 effective_start_date 最晚的那条(NULL 视为长期有效、优先级最低)
|
--
|
-- 脚本可重复执行(幂等)
|
-- =============================================
|
SET NAMES utf8mb4;
|
|
SET @sch := DATABASE();
|
|
-- 1. 增加 effective_start_date
|
SET @exists := (SELECT COUNT(*) FROM information_schema.COLUMNS
|
WHERE TABLE_SCHEMA = @sch AND TABLE_NAME = 'hrm_attendance_rule' AND COLUMN_NAME = 'effective_start_date');
|
SET @sql := IF(@exists = 0,
|
'ALTER TABLE `hrm_attendance_rule` ADD COLUMN `effective_start_date` date DEFAULT NULL COMMENT ''生效开始日期(空表示不限)'' AFTER `overtime_threshold`',
|
'SELECT ''effective_start_date 已存在,跳过'' AS msg');
|
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
|
-- 2. 增加 effective_end_date
|
SET @exists := (SELECT COUNT(*) FROM information_schema.COLUMNS
|
WHERE TABLE_SCHEMA = @sch AND TABLE_NAME = 'hrm_attendance_rule' AND COLUMN_NAME = 'effective_end_date');
|
SET @sql := IF(@exists = 0,
|
'ALTER TABLE `hrm_attendance_rule` ADD COLUMN `effective_end_date` date DEFAULT NULL COMMENT ''生效结束日期(空表示不限)'' AFTER `effective_start_date`',
|
'SELECT ''effective_end_date 已存在,跳过'' AS msg');
|
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
|
-- 3. 核对
|
SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_COMMENT
|
FROM information_schema.COLUMNS
|
WHERE TABLE_SCHEMA = @sch AND TABLE_NAME = 'hrm_attendance_rule'
|
AND COLUMN_NAME IN ('effective_start_date', 'effective_end_date');
|
|
SELECT '考勤规则生效日期字段初始化完成' AS result;
|