98 lines
5.2 KiB
SQL
98 lines
5.2 KiB
SQL
-- =============================================================
|
||
-- OA 职级管理 —— 表结构
|
||
--
|
||
-- 对应代码:
|
||
-- models/backend_job_rank.go 职级模型
|
||
-- controllers/backend_job_rank.go 职级 CRUD 接口
|
||
--
|
||
-- 职级(Job Rank)用于定义「职位等级」:
|
||
-- · 每个部门可以各设一套职级阶梯。department_id 指向
|
||
-- yz_backend_organization.id;department_id = 0 表示
|
||
-- 全公司通用职级,任何部门都能选用。
|
||
-- · level_no 是等级序号(数字越大职级越高),用于排序与
|
||
-- 「取不超过某职级的最高一级」这类计算。
|
||
-- · salary_min / salary_max 是该职级的标准薪资区间,
|
||
-- 薪酬方案选定职级后据此带出参考薪资。
|
||
-- · default_role_id 是为「职级 → 角色权限绑定」预留的字段,
|
||
-- 本期不启用,后端不做任何自动授权,等权限方案确定后单独做。
|
||
--
|
||
-- 使用链路:
|
||
-- 员工(yz_backend_employee) → 职位(yz_backend_position.rank_id)
|
||
-- → 职级(yz_backend_job_rank)
|
||
-- 薪酬方案(yz_backend_oa_compensation_schemes.rank_id) → 职级
|
||
--
|
||
-- 执行顺序:
|
||
-- 1) 本脚本:建表 + 给职位表 / 薪酬方案表补 rank_id 列
|
||
-- 2) oa_job_rank_menus.sql:注册「OA → 基础设置 → 职级管理」菜单并授权角色
|
||
-- =============================================================
|
||
|
||
SET NAMES utf8mb4;
|
||
|
||
-- ---------------- 职级表 ----------------
|
||
CREATE TABLE IF NOT EXISTS `yz_backend_job_rank` (
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||
`tid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||
`rank_code` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '职级编码,如 P5 / M2',
|
||
`rank_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '职级名称,如 高级工程师',
|
||
`level_no` INT NOT NULL DEFAULT 0 COMMENT '等级序号,数字越大职级越高',
|
||
`department_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '适用部门ID(yz_backend_organization.id),0=全公司通用',
|
||
`salary_min` DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '标准薪资下限',
|
||
`salary_max` DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '标准薪资上限,0=不限',
|
||
`default_role_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '预留:默认角色ID(职级→角色权限绑定,本期不启用)',
|
||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0=禁用 1=启用',
|
||
`sort` INT NOT NULL DEFAULT 0 COMMENT '排序',
|
||
`remark` VARCHAR(512) DEFAULT NULL COMMENT '备注',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`delete_time` DATETIME DEFAULT NULL COMMENT '删除时间',
|
||
PRIMARY KEY (`id`) USING BTREE,
|
||
KEY `idx_tid_deleted` (`tid`, `delete_time`) USING BTREE,
|
||
KEY `idx_tid_department` (`tid`, `department_id`) USING BTREE,
|
||
KEY `idx_tid_code` (`tid`, `rank_code`) USING BTREE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='职级表';
|
||
|
||
-- =============================================================
|
||
-- 给既有表补 rank_id 列
|
||
-- MySQL 不支持 ADD COLUMN IF NOT EXISTS,先查 information_schema 再动态执行,
|
||
-- 保证脚本可重复执行。
|
||
-- =============================================================
|
||
|
||
-- ---------- yz_backend_position(职位挂职级) ----------
|
||
SET @tbl := 'yz_backend_position';
|
||
SET @col := 'rank_id';
|
||
SET @exists := (
|
||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = @tbl AND COLUMN_NAME = @col
|
||
);
|
||
SET @sql := IF(@exists = 0,
|
||
CONCAT('ALTER TABLE `', @tbl, '` ADD COLUMN `', @col,
|
||
'` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT ''职级ID(yz_backend_job_rank.id),0=未设置'' AFTER `position_type`'),
|
||
CONCAT('ALTER TABLE `', @tbl, '` MODIFY COLUMN `', @col,
|
||
'` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT ''职级ID(yz_backend_job_rank.id),0=未设置''')
|
||
);
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
-- ---------- yz_backend_oa_compensation_schemes(薪酬方案带职级) ----------
|
||
SET @tbl := 'yz_backend_oa_compensation_schemes';
|
||
SET @col := 'rank_id';
|
||
SET @exists := (
|
||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = @tbl AND COLUMN_NAME = @col
|
||
);
|
||
SET @sql := IF(@exists = 0,
|
||
CONCAT('ALTER TABLE `', @tbl, '` ADD COLUMN `', @col,
|
||
'` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT ''职级ID(yz_backend_job_rank.id),0=未设置'' AFTER `employee_id`'),
|
||
CONCAT('ALTER TABLE `', @tbl, '` MODIFY COLUMN `', @col,
|
||
'` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT ''职级ID(yz_backend_job_rank.id),0=未设置''')
|
||
);
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
-- ---------------- 校验 ----------------
|
||
SHOW CREATE TABLE `yz_backend_job_rank`;
|
||
|
||
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE, COLUMN_COMMENT
|
||
FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND COLUMN_NAME = 'rank_id'
|
||
AND TABLE_NAME IN ('yz_backend_position', 'yz_backend_oa_compensation_schemes');
|