169 lines
11 KiB
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;
|