-- ============================================= -- HRM 加班工资管理 SQL 初始化脚本(可重复执行) -- 包含:岗位加班工资配置表 + 员工「员工类别」字段 + 数据字典 + 菜单/权限 -- 对应需求:人力资源 > 薪酬管理 > 加班工资管理 -- - 不同岗位加班工资不同(普通员工按岗位时薪;技工 1:1;管理不计) -- - 按工种设置最大加班时长上限 -- ============================================= -- ============================================= -- 1. 岗位加班工资配置表 -- ============================================= CREATE TABLE IF NOT EXISTS `hrm_overtime_wage_config` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '配置ID', `post_id` bigint NOT NULL COMMENT '岗位ID,关联 system_post.id', `hourly_rate` decimal(10,2) NOT NULL DEFAULT 20.00 COMMENT '加班时薪(元/小时),默认 20', `max_overtime_hours` decimal(6,1) DEFAULT NULL COMMENT '每月最大加班时长上限(小时),为空表示不限', `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态:0-启用,1-禁用', `remark` varchar(500) DEFAULT NULL COMMENT '备注', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_post_id` (`post_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='HRM岗位加班工资配置表'; -- ============================================= -- 2. 员工表新增「员工类别」字段(1-普通员工,2-技工,3-管理) -- 说明:ADD COLUMN 不支持 IF NOT EXISTS,这里用 information_schema 做存在性判断,保证可重复执行 -- ============================================= SET @col_exists := (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'hrm_employee' AND COLUMN_NAME = 'employee_category'); SET @ddl := IF(@col_exists = 0, 'ALTER TABLE `hrm_employee` ADD COLUMN `employee_category` tinyint NOT NULL DEFAULT 1 COMMENT ''员工类别:1-普通员工,2-技工,3-管理'' AFTER `employee_status`', 'SELECT 1'); PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- ============================================= -- 3. 数据字典:员工类别 hrm_employee_category -- ============================================= INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1061300, 'HRM 员工类别', 'hrm_employee_category', 0, '加班工资差异核算用', '', NOW(), '', NOW(), b'0') ON DUPLICATE KEY UPDATE `name` = VALUES(`name`), `type` = VALUES(`type`), `status` = VALUES(`status`); INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1061301, 1, '普通员工', '1', 'hrm_employee_category', 0, 'primary', '按岗位配置的加班时薪核算', '', NOW(), '', NOW(), b'0'), (1061302, 2, '技工', '2', 'hrm_employee_category', 0, 'warning', '加班按 1:1,与平时时薪一致', '', NOW(), '', NOW(), b'0'), (1061303, 3, '管理', '3', 'hrm_employee_category', 0, 'default', '不计加班工资', '', NOW(), '', NOW(), b'0') ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `value` = VALUES(`value`), `dict_type` = VALUES(`dict_type`), `status` = VALUES(`status`), `color_type` = VALUES(`color_type`); -- ============================================= -- 4. 菜单与权限(挂载到 6020 薪酬管理 下) -- ============================================= INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (6026, '加班工资管理', '', 2, 4, 6020, 'overtime-wage', 'ep:clock', 'hrm/salary/overtime-wage/index', 'HrmOvertimeWage', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), (60261, '加班工资查询', 'hrm:overtime-wage:query', 3, 1, 6026, '', '', '', NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), (60262, '加班工资新增', 'hrm:overtime-wage:create', 3, 2, 6026, '', '', '', NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), (60263, '加班工资修改', 'hrm:overtime-wage:update', 3, 3, 6026, '', '', '', NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), (60264, '加班工资删除', 'hrm:overtime-wage:delete', 3, 4, 6026, '', '', '', NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0') ON DUPLICATE KEY UPDATE `name` = VALUES(`name`), `permission` = VALUES(`permission`), `parent_id` = VALUES(`parent_id`), `path` = VALUES(`path`), `icon` = VALUES(`icon`), `component` = VALUES(`component`), `component_name` = VALUES(`component_name`), `status` = VALUES(`status`), `deleted` = b'0'; -- 授予超级管理员(role_id = 1) INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) SELECT 1, menu_id, '1', NOW(), '1', NOW(), b'0' FROM ( SELECT 6026 AS menu_id UNION ALL SELECT 60261 UNION ALL SELECT 60262 UNION ALL SELECT 60263 UNION ALL SELECT 60264 ) menu_ids WHERE NOT EXISTS ( SELECT 1 FROM `system_role_menu` role_menu WHERE role_menu.`role_id` = 1 AND role_menu.`menu_id` = menu_ids.menu_id AND role_menu.`deleted` = b'0' ); SELECT 'HRM 加班工资管理初始化完成' AS result;