hr-system/sql/roster_field_schema.sql

169 lines
11 KiB
SQL

-- =============================================================
-- hr-roster 花名册字段体系 (F03) DDL
-- 数据库: MySQL 8.0+ / 兼容 MariaDB 10.4+
-- 编码: utf8mb4
-- 说明: 覆盖 F03 验收项 1/3/6 所需表结构
-- roster_field_group 字段分组
-- roster_field_def 字段定义
-- roster_type_rule 员工类型规则
-- roster_empno_rule 工号生成规则
-- roster_op_log 操作审计日志
-- =============================================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- -------------------------------------------------------------
-- 1. 字段分组表
-- -------------------------------------------------------------
DROP TABLE IF EXISTS `roster_field_group`;
CREATE TABLE `roster_field_group` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`group_code` VARCHAR(64) NOT NULL COMMENT '分组编码(唯一, 如 work_info/personal_info)',
`group_name` VARCHAR(128) NOT NULL COMMENT '分组名称',
`group_desc` VARCHAR(512) NULL DEFAULT NULL COMMENT '分组描述',
`is_builtin` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否内置(1内置不可删,0自定义)',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号(升序)',
`is_enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用状态(1启用0停用)',
`created_by` BIGINT UNSIGNED NULL DEFAULT NULL COMMENT '创建人用户ID',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_by` BIGINT UNSIGNED NULL DEFAULT NULL COMMENT '更新人用户ID',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted_at` DATETIME NULL DEFAULT NULL COMMENT '软删除时间(NULL未删)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_group_code` (`group_code`),
KEY `idx_sort` (`sort_order`),
KEY `idx_enabled` (`is_enabled`),
KEY `idx_deleted` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='花名册字段分组';
-- 内置分组初始化数据
INSERT INTO `roster_field_group` (`group_code`, `group_name`, `group_desc`, `is_builtin`, `sort_order`, `is_enabled`) VALUES
('work_info', '工作信息', '组织/岗位/职级/工号等', 1, 10, 1),
('personal_info', '个人信息', '姓名/证件/联系方式等', 1, 20, 1),
('contract_info', '合同信息', '合同/入离职/试用期等', 1, 30, 1),
('payroll_info', '薪酬信息', '薪资/社保/公积金等', 1, 40, 1);
-- -------------------------------------------------------------
-- 2. 字段定义表
-- -------------------------------------------------------------
DROP TABLE IF EXISTS `roster_field_def`;
CREATE TABLE `roster_field_def` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`group_id` BIGINT UNSIGNED NOT NULL COMMENT '所属分组ID(roster_field_group.id)',
`field_code` VARCHAR(64) NOT NULL COMMENT '字段编码(唯一, 如 emp_name/emp_no)',
`field_name` VARCHAR(128) NOT NULL COMMENT '字段显示名称',
`field_type` VARCHAR(32) NOT NULL COMMENT '字段类型(text/number/date/datetime/select/multi_select/attachment/bool)',
`is_required` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否必填(1是0否)',
`is_unique` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否唯一(1是0否)',
`is_sensitive` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '敏感标记(1是0否, 敏感字段读需脱敏)',
`default_value` VARCHAR(512) NULL DEFAULT NULL COMMENT '默认值',
`options_json` JSON NULL COMMENT '选项(select/multi_select用), 格式:[{"label":"","value":""}]',
`validation_rule` VARCHAR(512) NULL DEFAULT NULL COMMENT '校验规则(正则/范围等)',
`placeholder` VARCHAR(256) NULL DEFAULT NULL COMMENT '输入提示',
`help_text` VARCHAR(512) NULL DEFAULT NULL COMMENT '帮助说明',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '组内排序号(拖拽排序)',
`is_enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用状态(1启用0停用)',
`created_by` BIGINT UNSIGNED NULL DEFAULT NULL COMMENT '创建人用户ID',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_by` BIGINT UNSIGNED NULL DEFAULT NULL COMMENT '更新人用户ID',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted_at` DATETIME NULL DEFAULT NULL COMMENT '软删除时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_field_code` (`field_code`),
KEY `idx_group` (`group_id`),
KEY `idx_sort` (`group_id`, `sort_order`),
KEY `idx_enabled` (`is_enabled`),
KEY `idx_deleted` (`deleted_at`),
CONSTRAINT `fk_field_group` FOREIGN KEY (`group_id`) REFERENCES `roster_field_group` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='花名册字段定义';
-- -------------------------------------------------------------
-- 3. 员工类型规则表 (不同员工类型不同必填规则)
-- -------------------------------------------------------------
DROP TABLE IF EXISTS `roster_type_rule`;
CREATE TABLE `roster_type_rule` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`rule_code` VARCHAR(64) NOT NULL COMMENT '规则编码(唯一)',
`rule_name` VARCHAR(128) NOT NULL COMMENT '规则名称',
`emp_type` VARCHAR(32) NOT NULL COMMENT '员工类型(正式工/临时工/实习生/劳务派遣等)',
`required_field_codes` JSON NULL COMMENT '该类型必填字段编码列表, 格式:["emp_no","emp_name",...]',
`extra_config` JSON NULL COMMENT '扩展配置(校验/联动等)',
`is_enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用状态(1启用0停用)',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
`created_by` BIGINT UNSIGNED NULL DEFAULT NULL COMMENT '创建人用户ID',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_by` BIGINT UNSIGNED NULL DEFAULT NULL COMMENT '更新人用户ID',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted_at` DATETIME NULL DEFAULT NULL COMMENT '软删除时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_rule_code` (`rule_code`),
KEY `idx_emp_type` (`emp_type`),
KEY `idx_enabled` (`is_enabled`),
KEY `idx_deleted` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='员工类型必填规则';
-- 默认规则初始化
INSERT INTO `roster_type_rule` (`rule_code`, `rule_name`, `emp_type`, `required_field_codes`) VALUES
('type_formal', '正式工必填规则', '正式工', '["emp_no","emp_name","dept_id","position_id","join_date"]'),
('type_temp', '临时工必填规则', '临时工', '["emp_no","emp_name","dept_id","join_date"]'),
('type_intern', '实习生必填规则', '实习生', '["emp_no","emp_name","join_date","end_date"]');
-- -------------------------------------------------------------
-- 4. 工号生成规则表
-- -------------------------------------------------------------
DROP TABLE IF EXISTS `roster_empno_rule`;
CREATE TABLE `roster_empno_rule` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`rule_code` VARCHAR(64) NOT NULL COMMENT '规则编码(唯一)',
`rule_name` VARCHAR(128) NOT NULL COMMENT '规则名称',
`subsidiary_code` VARCHAR(32) NULL DEFAULT NULL COMMENT '子公司前缀编码(如子公A=001)',
`prefix` VARCHAR(32) NULL DEFAULT NULL COMMENT '固定前缀',
`date_format` VARCHAR(32) NULL DEFAULT NULL COMMENT '日期格式(如 %Y%m / YYYYMM / 空=无日期段)',
`seq_length` INT NOT NULL DEFAULT 4 COMMENT '流水号位数',
`start_seq` INT NOT NULL DEFAULT 1 COMMENT '起始流水号',
`current_seq` BIGINT NOT NULL DEFAULT 0 COMMENT '当前流水号(生成时原子递增)',
`is_enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用状态(1启用0停用)',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号(匹配优先级)',
`created_by` BIGINT UNSIGNED NULL DEFAULT NULL COMMENT '创建人用户ID',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_by` BIGINT UNSIGNED NULL DEFAULT NULL COMMENT '更新人用户ID',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted_at` DATETIME NULL DEFAULT NULL COMMENT '软删除时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_rule_code` (`rule_code`),
KEY `idx_subsidiary` (`subsidiary_code`),
KEY `idx_enabled` (`is_enabled`),
KEY `idx_deleted` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工号生成规则';
-- 默认规则初始化
INSERT INTO `roster_empno_rule` (`rule_code`, `rule_name`, `subsidiary_code`, `prefix`, `date_format`, `seq_length`, `start_seq`, `current_seq`) VALUES
('empno_default', '默认工号规则', NULL, 'E', '%Y%m', 5, 1, 0),
('empno_subs_a', '子公司A工号规则', '001', 'A', '%Y%m', 4, 1, 0);
-- -------------------------------------------------------------
-- 5. 操作审计日志表 (写操作审计落库)
-- -------------------------------------------------------------
DROP TABLE IF EXISTS `roster_op_log`;
CREATE TABLE `roster_op_log` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`op_type` VARCHAR(32) NOT NULL COMMENT '操作类型(create/update/delete/enable/disable/sort/gen_empno)',
`target_table` VARCHAR(64) NOT NULL COMMENT '目标表名',
`target_id` BIGINT UNSIGNED NULL DEFAULT NULL COMMENT '目标记录ID',
`before_json` JSON NULL COMMENT '变更前数据快照',
`after_json` JSON NULL COMMENT '变更后数据快照',
`operator_id` BIGINT UNSIGNED NULL DEFAULT NULL COMMENT '操作人用户ID',
`operator_name` VARCHAR(128) NULL DEFAULT NULL COMMENT '操作人姓名',
`client_ip` VARCHAR(64) NULL DEFAULT NULL COMMENT '客户端IP',
`remark` VARCHAR(512) NULL DEFAULT NULL COMMENT '备注',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
PRIMARY KEY (`id`),
KEY `idx_target` (`target_table`, `target_id`),
KEY `idx_op_type` (`op_type`),
KEY `idx_operator` (`operator_id`),
KEY `idx_created` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='花名册操作审计日志';
SET FOREIGN_KEY_CHECKS = 1;