Files
yunzerwebsiteallinone/go/docs/sql/create_oa_job_rank.sql
T

98 lines
5.2 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =============================================================
-- 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');