1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
-- =============================================
-- 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;