907 lines
44 KiB
SQL
907 lines
44 KiB
SQL
-- 人事系统 hr-web 批次1 DDL(json2ddl 生成,幂等可重跑)
|
||
-- 来源:models/*.json(database-design.md v3.0,49 表);目标库:hrs(MariaDB)
|
||
-- 执行:mysql -utest -ptest123 hrs < sql/V001__init_hrs.sql 或 python3 scripts/apply_ddl.py
|
||
SET NAMES utf8mb4;
|
||
SET FOREIGN_KEY_CHECKS=0;
|
||
|
||
-- ===== hr_contract(4 张)=====
|
||
-- contract_info
|
||
CREATE TABLE IF NOT EXISTS `contract_info` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`contract_no` VARCHAR(64) NOT NULL COMMENT '合同编号',
|
||
`employee_id` VARCHAR(32) COMMENT '员工档案',
|
||
`type_id` VARCHAR(32) COMMENT '合同类型',
|
||
`company_id` VARCHAR(32) COMMENT '签约公司(org_contract_company)',
|
||
`template_id` VARCHAR(32) COMMENT '合同模板',
|
||
`start_date` DATE COMMENT '合同起始日',
|
||
`end_date` DATE COMMENT '合同到期日',
|
||
`sign_date` DATE COMMENT '签订日期',
|
||
`contract_status` VARCHAR(16) DEFAULT 'active' COMMENT '合同状态(字典CONTRACT_STATUS)',
|
||
`file_path` VARCHAR(256) COMMENT '合同文件(文件ID)',
|
||
`text_file_path` VARCHAR(256) COMMENT '模板生成合同文本(D4)',
|
||
`flow_instance_id` VARCHAR(32) COMMENT '流程实例',
|
||
`remind_rule_id` VARCHAR(32) COMMENT '到期提醒规则',
|
||
`esign_status` VARCHAR(16) DEFAULT 'not_enabled' COMMENT '电子签状态(字典ESIGN_STATUS,D4预留)',
|
||
`remark` TEXT COMMENT '备注',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_employee` (`employee_id`),
|
||
KEY `idx_end_date` (`end_date`),
|
||
KEY `idx_status` (`contract_status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同台账';
|
||
|
||
-- contract_remind_rule
|
||
CREATE TABLE IF NOT EXISTS `contract_remind_rule` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`rule_name` VARCHAR(64) NOT NULL COMMENT '规则名称',
|
||
`days_before` INT DEFAULT 30 COMMENT '提前天数',
|
||
`target_role` VARCHAR(16) DEFAULT 'hr' COMMENT '提醒对象(self/leader/hr)',
|
||
`content_template` TEXT COMMENT '提醒内容模板',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同到期提醒规则';
|
||
|
||
-- contract_template
|
||
CREATE TABLE IF NOT EXISTS `contract_template` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`template_name` VARCHAR(128) NOT NULL COMMENT '模板名称',
|
||
`type_id` VARCHAR(32) COMMENT '合同类型',
|
||
`file_path` VARCHAR(256) COMMENT '模板文件(文件ID)',
|
||
`field_marks_json` TEXT COMMENT '占位符映射',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同模板';
|
||
|
||
-- contract_type
|
||
CREATE TABLE IF NOT EXISTS `contract_type` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`type_code` VARCHAR(32) NOT NULL COMMENT '类型编码',
|
||
`type_name` VARCHAR(64) NOT NULL COMMENT '类型名称(劳动合同/保密协议/竞业协议…)',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_type_code` (`type_code`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同类型';
|
||
|
||
-- ===== hr_flow(7 张)=====
|
||
-- flow_def
|
||
CREATE TABLE IF NOT EXISTS `flow_def` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`flow_code` VARCHAR(64) NOT NULL COMMENT '流程编码',
|
||
`flow_name` VARCHAR(128) NOT NULL COMMENT '流程名称',
|
||
`form_id` VARCHAR(32) COMMENT '表单定义',
|
||
`biz_type` VARCHAR(32) COMMENT '业务类型(字典FLOW_BIZ_TYPE)',
|
||
`match_cond_json` TEXT COMMENT '匹配条件(员工类型/部门)',
|
||
`version` INT DEFAULT 1 COMMENT '版本',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_flow_code` (`flow_code`),
|
||
KEY `idx_biz_type` (`biz_type`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流程定义';
|
||
|
||
-- flow_form_def
|
||
CREATE TABLE IF NOT EXISTS `flow_form_def` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`form_code` VARCHAR(64) NOT NULL COMMENT '表单编码',
|
||
`form_name` VARCHAR(128) NOT NULL COMMENT '表单名称',
|
||
`biz_type` VARCHAR(32) COMMENT '业务类型(字典FLOW_BIZ_TYPE,含attendance_*桩位)',
|
||
`fields_json` TEXT COMMENT '字段定义(引用roster_field_def或自定义项)',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_form_code` (`form_code`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='表单定义';
|
||
|
||
-- flow_instance
|
||
CREATE TABLE IF NOT EXISTS `flow_instance` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`inst_no` VARCHAR(32) NOT NULL COMMENT '审批编号',
|
||
`flow_id` VARCHAR(32) NOT NULL COMMENT '流程定义',
|
||
`form_id` VARCHAR(32) NOT NULL COMMENT '表单定义',
|
||
`biz_type` VARCHAR(32) NOT NULL COMMENT '业务类型(字典FLOW_BIZ_TYPE)',
|
||
`biz_id` VARCHAR(32) COMMENT '业务单据ID',
|
||
`title` VARCHAR(256) COMMENT '标题',
|
||
`initiator_id` VARCHAR(32) NOT NULL COMMENT '发起人',
|
||
`inst_status` VARCHAR(16) NOT NULL DEFAULT 'running' COMMENT '实例状态(字典INST_STATUS)',
|
||
`submit_data_json` TEXT COMMENT '提交表单数据快照',
|
||
`start_time` TIMESTAMP NULL DEFAULT NULL COMMENT '发起时间',
|
||
`finish_time` TIMESTAMP NULL DEFAULT NULL COMMENT '结束时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_inst_no` (`inst_no`),
|
||
KEY `idx_biz` (`biz_type`,`biz_id`),
|
||
KEY `idx_initiator` (`initiator_id`),
|
||
KEY `idx_status` (`inst_status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流程实例';
|
||
|
||
-- flow_node_def
|
||
CREATE TABLE IF NOT EXISTS `flow_node_def` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`flow_id` VARCHAR(32) COMMENT '流程定义',
|
||
`node_seq` INT DEFAULT 1 COMMENT '节点序号',
|
||
`node_name` VARCHAR(64) COMMENT '节点名称',
|
||
`approver_type` VARCHAR(16) COMMENT '审批人类型(user/role/leader/admin/flow_role)',
|
||
`approver_value` VARCHAR(256) COMMENT '审批人取值',
|
||
`pass_rule` VARCHAR(8) DEFAULT 'all' COMMENT '通过规则(any/all)',
|
||
`field_perm_json` TEXT COMMENT '节点字段可读写权限',
|
||
`cc_to` VARCHAR(512) COMMENT '抄送对象',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_flow_id` (`flow_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流程节点';
|
||
|
||
-- flow_op_log
|
||
CREATE TABLE IF NOT EXISTS `flow_op_log` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`instance_id` VARCHAR(32) COMMENT '流程实例',
|
||
`op_type` VARCHAR(16) COMMENT '操作类型(submit/approve/reject/forward/cancel/withdraw)',
|
||
`operator_id` VARCHAR(32) COMMENT '操作人',
|
||
`comment` TEXT COMMENT '意见',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_instance` (`instance_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流转日志';
|
||
|
||
-- flow_role
|
||
CREATE TABLE IF NOT EXISTS `flow_role` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`role_name` VARCHAR(64) NOT NULL COMMENT '角色名称',
|
||
`flow_scope_json` TEXT COMMENT '可用流程范围',
|
||
`op_perm_json` TEXT COMMENT '操作权限',
|
||
`data_scope_json` TEXT COMMENT '数据查看范围',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批角色';
|
||
|
||
-- flow_task
|
||
CREATE TABLE IF NOT EXISTS `flow_task` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`instance_id` VARCHAR(32) COMMENT '流程实例',
|
||
`node_id` VARCHAR(32) COMMENT '节点定义',
|
||
`node_name` VARCHAR(64) COMMENT '节点名称',
|
||
`approver_id` VARCHAR(32) COMMENT '审批人',
|
||
`task_status` VARCHAR(16) DEFAULT 'pending' COMMENT '任务状态(pending/approved/rejected/forwarded/cancelled)',
|
||
`comment` TEXT COMMENT '审批意见',
|
||
`handle_time` TIMESTAMP NULL DEFAULT NULL COMMENT '处理时间',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_approver_status` (`approver_id`,`task_status`),
|
||
KEY `idx_instance` (`instance_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批任务(待办/已办)';
|
||
|
||
-- ===== hr_org(23 张)=====
|
||
-- headcount_item
|
||
CREATE TABLE IF NOT EXISTS `headcount_item` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`scheme_id` VARCHAR(32) NOT NULL COMMENT '编制方案',
|
||
`scope_json` TEXT NOT NULL COMMENT '占编范围条件(员工类型/状态/职位/职级/自定义字段)',
|
||
`seg_json` TEXT COMMENT '细分维度(空=整体)',
|
||
`head_limit` INT NOT NULL DEFAULT 0 COMMENT '编制数量',
|
||
`remark` TEXT COMMENT '备注',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_scheme_id` (`scheme_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='编制细分项(F16)';
|
||
|
||
-- headcount_snapshot
|
||
CREATE TABLE IF NOT EXISTS `headcount_snapshot` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`scheme_id` VARCHAR(32) NOT NULL COMMENT '编制方案',
|
||
`item_id` VARCHAR(32) NOT NULL COMMENT '细分项',
|
||
`snap_date` DATE NOT NULL COMMENT '快照日期',
|
||
`used_count` INT NOT NULL DEFAULT 0 COMMENT '占编人数',
|
||
`over_count` INT NOT NULL DEFAULT 0 COMMENT '超编数(0=未超编)',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_scheme_item_date` (`scheme_id`,`item_id`,`snap_date`),
|
||
KEY `idx_snap_date` (`snap_date`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='编制快照(F16历史回溯/实时计数)';
|
||
|
||
-- org_blacklist
|
||
CREATE TABLE IF NOT EXISTS `org_blacklist` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`name` VARCHAR(64) COMMENT '姓名',
|
||
`id_number_hash` VARCHAR(64) COMMENT '证件号哈希(确定性,匹配用)【敏感:sensitive,落库加密/脱敏展示】',
|
||
`id_number_cipher` VARCHAR(256) COMMENT '证件号密文【敏感:sensitive,落库加密/脱敏展示】',
|
||
`reason` VARCHAR(256) COMMENT '拉黑原因',
|
||
`source` VARCHAR(16) COMMENT '来源(leave/manual)',
|
||
`source_employee_id` VARCHAR(32) COMMENT '来源员工档案',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_id_number_hash` (`id_number_hash`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='黑名单';
|
||
|
||
-- org_concurrent_post
|
||
CREATE TABLE IF NOT EXISTS `org_concurrent_post` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`employee_id` VARCHAR(32) COMMENT '员工档案',
|
||
`org_id` VARCHAR(32) COMMENT '兼岗组织',
|
||
`position_id` VARCHAR(32) COMMENT '兼岗职位',
|
||
`start_date` DATE COMMENT '开始日期',
|
||
`end_date` DATE COMMENT '结束日期',
|
||
`status` VARCHAR(16) DEFAULT 'awaiting' COMMENT '状态(awaiting/active/expired)',
|
||
`flow_instance_id` VARCHAR(32) COMMENT '流程实例',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_employee_id` (`employee_id`),
|
||
KEY `idx_status` (`status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='兼岗';
|
||
|
||
-- org_contract_company
|
||
CREATE TABLE IF NOT EXISTS `org_contract_company` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`company_code` VARCHAR(32) NOT NULL COMMENT '公司编码',
|
||
`company_name` VARCHAR(128) NOT NULL COMMENT '公司名称',
|
||
`credit_code` VARCHAR(32) COMMENT '统一社会信用代码',
|
||
`legal_person` VARCHAR(64) COMMENT '法人',
|
||
`contact_info` VARCHAR(128) COMMENT '联系方式',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_company_code` (`company_code`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同公司';
|
||
|
||
-- org_entry
|
||
CREATE TABLE IF NOT EXISTS `org_entry` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`employee_id` VARCHAR(32) COMMENT '员工档案(可空,待入职)',
|
||
`name` VARCHAR(64) NOT NULL COMMENT '姓名',
|
||
`id_type` VARCHAR(16) DEFAULT 'id_card' COMMENT '证件类型(字典ID_TYPE)',
|
||
`id_number_cipher` VARCHAR(256) COMMENT '证件号密文【敏感:sensitive,落库加密/脱敏展示】',
|
||
`id_number_hash` VARCHAR(64) COMMENT '证件号哈希【敏感:sensitive,落库加密/脱敏展示】',
|
||
`id_valid_from` DATE COMMENT '证件有效期起',
|
||
`id_valid_to` DATE COMMENT '证件有效期止(长期=9999-12-31)',
|
||
`id_authority` VARCHAR(128) COMMENT '证件签发机关',
|
||
`id_source` VARCHAR(16) DEFAULT 'manual' COMMENT '证件信息来源(字典ID_SOURCE,D1手工录入)',
|
||
`employee_type` VARCHAR(16) COMMENT '员工类型(字典EMP_TYPE)',
|
||
`org_id` VARCHAR(32) COMMENT '入职组织',
|
||
`position_id` VARCHAR(32) COMMENT '职位',
|
||
`company_id` VARCHAR(32) COMMENT '合同公司',
|
||
`work_location` VARCHAR(128) COMMENT '办公地点',
|
||
`hire_date` DATE COMMENT '入职日期',
|
||
`entry_status` VARCHAR(24) DEFAULT 'pending_approval' COMMENT '入职状态(字典ENTRY_STATUS)',
|
||
`is_rehire` INT DEFAULT 0 COMMENT '是否复职(0/1)',
|
||
`register_status` VARCHAR(16) DEFAULT 'none' COMMENT '登记表状态(none/invited/filled)',
|
||
`register_token` VARCHAR(64) COMMENT '登记表token(扫码入职降级)',
|
||
`register_url` VARCHAR(256) COMMENT '登记表链接',
|
||
`qrcode_file` VARCHAR(64) COMMENT '登记二维码图片(文件ID)',
|
||
`register_expire` TIMESTAMP NULL DEFAULT NULL COMMENT '登记链接过期时间',
|
||
`flow_instance_id` VARCHAR(32) COMMENT '流程实例',
|
||
`remark` TEXT COMMENT '备注',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_entry_status` (`entry_status`),
|
||
KEY `idx_hire_date` (`hire_date`),
|
||
KEY `idx_flow_instance_id` (`flow_instance_id`),
|
||
UNIQUE KEY `uk_register_token` (`register_token`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='入职记录';
|
||
|
||
-- org_field_def
|
||
CREATE TABLE IF NOT EXISTS `org_field_def` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`field_code` VARCHAR(64) NOT NULL COMMENT '字段编码',
|
||
`field_name` VARCHAR(64) NOT NULL COMMENT '字段名称',
|
||
`field_type` VARCHAR(16) COMMENT '字段类型(text/number/date/select/file)',
|
||
`options_json` TEXT COMMENT '选项定义JSON',
|
||
`required` INT DEFAULT 0 COMMENT '是否必填(0/1)',
|
||
`sort_no` INT DEFAULT 0 COMMENT '排序号',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_field_code` (`field_code`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='组织自定义字段定义';
|
||
|
||
-- org_field_value
|
||
CREATE TABLE IF NOT EXISTS `org_field_value` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`org_id` VARCHAR(32) NOT NULL COMMENT '组织',
|
||
`field_id` VARCHAR(32) NOT NULL COMMENT '字段定义',
|
||
`value_text` TEXT COMMENT '文本值',
|
||
`value_date` DATE COMMENT '日期值',
|
||
`value_file` VARCHAR(64) COMMENT '附件值(文件ID)',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_org_field` (`org_id`,`field_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='组织字段值(EAV)';
|
||
|
||
-- org_grade_level
|
||
CREATE TABLE IF NOT EXISTS `org_grade_level` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`level_code` VARCHAR(32) NOT NULL COMMENT '职级编码',
|
||
`level_name` VARCHAR(64) NOT NULL COMMENT '职级名称',
|
||
`level_category` VARCHAR(32) COMMENT '职级类别',
|
||
`start_rank_id` VARCHAR(32) COMMENT '起始职等',
|
||
`end_rank_id` VARCHAR(32) COMMENT '结束职等',
|
||
`sort_no` INT DEFAULT 0 COMMENT '排序号',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_level_code` (`level_code`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='职级';
|
||
|
||
-- org_grade_rank
|
||
CREATE TABLE IF NOT EXISTS `org_grade_rank` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`rank_code` VARCHAR(32) NOT NULL COMMENT '职等编码',
|
||
`rank_name` VARCHAR(64) NOT NULL COMMENT '职等名称',
|
||
`rank_level` INT COMMENT '职等层级',
|
||
`sort_no` INT DEFAULT 0 COMMENT '排序号',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_rank_code` (`rank_code`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='职等';
|
||
|
||
-- org_headcount_scheme
|
||
CREATE TABLE IF NOT EXISTS `org_headcount_scheme` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`scheme_name` VARCHAR(128) NOT NULL COMMENT '方案名称',
|
||
`cycle_type` VARCHAR(16) NOT NULL COMMENT '周期(字典HEADCOUNT_CYCLE: year/quarter/month)',
|
||
`cycle_start` DATE NOT NULL COMMENT '周期起',
|
||
`cycle_end` DATE NOT NULL COMMENT '周期止',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`remark` TEXT COMMENT '备注',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_cycle` (`cycle_start`,`cycle_end`),
|
||
KEY `idx_status` (`status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='编制方案(F16)';
|
||
|
||
-- org_job
|
||
CREATE TABLE IF NOT EXISTS `org_job` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`job_code` VARCHAR(32) NOT NULL COMMENT '职务编码',
|
||
`job_name` VARCHAR(64) NOT NULL COMMENT '职务名称',
|
||
`job_category` VARCHAR(16) NOT NULL DEFAULT 'vertical' COMMENT '职务类别(vertical/horizontal,F17)',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`sort_no` INT DEFAULT 0 COMMENT '排序号',
|
||
`remark` TEXT COMMENT '备注',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_job_code` (`job_code`),
|
||
KEY `idx_job_category` (`job_category`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='职务(含F17横向职务)';
|
||
|
||
-- org_leave
|
||
CREATE TABLE IF NOT EXISTS `org_leave` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`employee_id` VARCHAR(32) COMMENT '员工档案',
|
||
`leave_type` VARCHAR(24) COMMENT '离职类型(辞职/劝退/合同到期/退休)',
|
||
`leave_reason` VARCHAR(32) COMMENT '离职原因(字典LEAVE_REASON)',
|
||
`leave_date` DATE COMMENT '离职日期',
|
||
`apply_type` VARCHAR(16) COMMENT '申请方式(self/proxy/manual)',
|
||
`status` VARCHAR(16) DEFAULT 'pending_leave' COMMENT '状态(pending_leave/left/cancelled)',
|
||
`handover_status` VARCHAR(16) DEFAULT 'pending' COMMENT '交接状态(pending/done)',
|
||
`certificate_file` VARCHAR(64) COMMENT '离职证明文件ID',
|
||
`blacklist_flag` INT DEFAULT 0 COMMENT '是否加入黑名单(0/1)',
|
||
`flow_instance_id` VARCHAR(32) COMMENT '流程实例',
|
||
`remark` TEXT COMMENT '备注',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_employee_id` (`employee_id`),
|
||
KEY `idx_status` (`status`),
|
||
KEY `idx_leave_date` (`leave_date`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='离职记录';
|
||
|
||
-- org_leave_handover
|
||
CREATE TABLE IF NOT EXISTS `org_leave_handover` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`leave_id` VARCHAR(32) COMMENT '离职记录',
|
||
`item_type` VARCHAR(32) COMMENT '交接项类型(字典HANDOVER_TYPE,含dingtalk_resource占位D3)',
|
||
`item_content` TEXT COMMENT '交接内容',
|
||
`handover_to_id` VARCHAR(32) COMMENT '交接人',
|
||
`status` VARCHAR(16) DEFAULT 'pending' COMMENT '状态(pending/done)',
|
||
`remark` TEXT COMMENT '备注',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_leave_id` (`leave_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='离职交接项';
|
||
|
||
-- org_position
|
||
CREATE TABLE IF NOT EXISTS `org_position` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`position_code` VARCHAR(32) NOT NULL COMMENT '职位编码',
|
||
`position_name` VARCHAR(64) NOT NULL COMMENT '职位名称',
|
||
`job_id` VARCHAR(32) COMMENT '职务',
|
||
`sequence_id` VARCHAR(32) COMMENT '序列',
|
||
`category` VARCHAR(16) COMMENT '职位类别(字典POS_CATEGORY)',
|
||
`dept_ids` VARCHAR(512) COMMENT '适用部门(多值,逗号分隔)',
|
||
`description` TEXT COMMENT '职位描述',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`sort_no` INT DEFAULT 0 COMMENT '排序号',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_position_code` (`position_code`),
|
||
KEY `idx_job_id` (`job_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='职位';
|
||
|
||
-- org_project
|
||
CREATE TABLE IF NOT EXISTS `org_project` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`project_code` VARCHAR(32) NOT NULL COMMENT '项目编码',
|
||
`project_name` VARCHAR(128) NOT NULL COMMENT '项目名称',
|
||
`parent_id` VARCHAR(32) COMMENT '上级项目(自引用多层级)',
|
||
`owner_id` VARCHAR(32) COMMENT '负责人',
|
||
`start_date` DATE COMMENT '开始日期',
|
||
`end_date` DATE COMMENT '结束日期',
|
||
`project_status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '项目状态(字典PROJECT_STATUS)',
|
||
`attrs_json` TEXT COMMENT '项目属性',
|
||
`sort_no` INT DEFAULT 0 COMMENT '排序号',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_project_code` (`project_code`),
|
||
KEY `idx_parent_id` (`parent_id`),
|
||
KEY `idx_project_status` (`project_status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='项目式组织(F17)';
|
||
|
||
-- org_project_post
|
||
CREATE TABLE IF NOT EXISTS `org_project_post` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`project_id` VARCHAR(32) NOT NULL COMMENT '项目组织',
|
||
`employee_id` VARCHAR(32) NOT NULL COMMENT '员工',
|
||
`job_id` VARCHAR(32) COMMENT '横向职务(org_job.job_category=horizontal)',
|
||
`start_date` DATE COMMENT '开始日期',
|
||
`end_date` DATE COMMENT '结束日期',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/expired',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_proj_emp_job` (`project_id`,`employee_id`,`job_id`,`start_date`),
|
||
KEY `idx_employee_id` (`employee_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='项目任职(F17横向)';
|
||
|
||
-- org_regularization
|
||
CREATE TABLE IF NOT EXISTS `org_regularization` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`employee_id` VARCHAR(32) COMMENT '员工档案',
|
||
`probation_end_date` DATE COMMENT '试用期止(预计转正日)',
|
||
`regular_date` DATE COMMENT '转正日期',
|
||
`apply_type` VARCHAR(16) COMMENT '申请方式(self/proxy/manual)',
|
||
`status` VARCHAR(16) DEFAULT 'pending' COMMENT '状态(pending/approved/rejected/cancelled)',
|
||
`flow_instance_id` VARCHAR(32) COMMENT '流程实例',
|
||
`remark` TEXT COMMENT '备注',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_employee_id` (`employee_id`),
|
||
KEY `idx_regular_date` (`regular_date`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转正记录';
|
||
|
||
-- org_sequence
|
||
CREATE TABLE IF NOT EXISTS `org_sequence` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`seq_category` VARCHAR(32) COMMENT '序列类别',
|
||
`seq_name` VARCHAR(64) NOT NULL COMMENT '序列名称',
|
||
`grade_level_ids` VARCHAR(512) COMMENT '关联职级类别(多值,逗号分隔)',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='序列';
|
||
|
||
-- org_transfer
|
||
CREATE TABLE IF NOT EXISTS `org_transfer` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`transfer_type` VARCHAR(24) COMMENT '调动类型(字典TRANSFER_TYPE)',
|
||
`status` VARCHAR(16) DEFAULT 'pending' COMMENT '状态(pending/confirmed/cancelled)',
|
||
`effective_date` DATE COMMENT '生效日期',
|
||
`batch_no` VARCHAR(32) COMMENT '批次号',
|
||
`flow_instance_id` VARCHAR(32) COMMENT '流程实例',
|
||
`remark` TEXT COMMENT '备注',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_status` (`status`),
|
||
KEY `idx_effective_date` (`effective_date`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='调动单(支持批量)';
|
||
|
||
-- org_transfer_detail
|
||
CREATE TABLE IF NOT EXISTS `org_transfer_detail` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`transfer_id` VARCHAR(32) COMMENT '调动单',
|
||
`employee_id` VARCHAR(32) COMMENT '员工档案',
|
||
`from_org_id` VARCHAR(32) COMMENT '原组织',
|
||
`to_org_id` VARCHAR(32) COMMENT '新组织',
|
||
`from_position_id` VARCHAR(32) COMMENT '原职位',
|
||
`to_position_id` VARCHAR(32) COMMENT '新职位',
|
||
`from_grade_level_id` VARCHAR(32) COMMENT '原职级',
|
||
`to_grade_level_id` VARCHAR(32) COMMENT '新职级',
|
||
`status` VARCHAR(16) DEFAULT 'pending' COMMENT '状态(pending/done/cancelled)',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_transfer_id` (`transfer_id`),
|
||
KEY `idx_employee_id` (`employee_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='调动明细(逐人)';
|
||
|
||
-- org_unit
|
||
CREATE TABLE IF NOT EXISTS `org_unit` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`org_code` VARCHAR(32) NOT NULL COMMENT '组织编码',
|
||
`org_name` VARCHAR(128) NOT NULL COMMENT '组织名称',
|
||
`parent_id` VARCHAR(32) COMMENT '上级组织(自引用)',
|
||
`org_type` VARCHAR(16) COMMENT '组织类型(字典ORG_TYPE)',
|
||
`leader_id` VARCHAR(32) COMMENT '负责人',
|
||
`effective_date` DATE COMMENT '生效日期',
|
||
`expire_date` DATE COMMENT '失效日期(空=长期)',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`sort_no` INT DEFAULT 0 COMMENT '排序号',
|
||
`remark` TEXT COMMENT '备注',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_org_code` (`org_code`),
|
||
KEY `idx_parent_id` (`parent_id`),
|
||
KEY `idx_status` (`status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='组织';
|
||
|
||
-- org_unit_change
|
||
CREATE TABLE IF NOT EXISTS `org_unit_change` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`org_id` VARCHAR(32) COMMENT '组织',
|
||
`change_type` VARCHAR(16) COMMENT '变更类型(add/edit/disable/move/split/merge/delete)',
|
||
`before_json` TEXT COMMENT '变更前快照',
|
||
`after_json` TEXT COMMENT '变更后快照',
|
||
`effective_date` DATE COMMENT '生效日期',
|
||
`operator_id` VARCHAR(32) COMMENT '操作人',
|
||
`flow_instance_id` VARCHAR(32) COMMENT '流程实例',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_org_id` (`org_id`),
|
||
KEY `idx_created_at` (`created_at`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='组织变更时间轴';
|
||
|
||
-- ===== hr_roster(7 张)=====
|
||
-- roster_employee
|
||
CREATE TABLE IF NOT EXISTS `roster_employee` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`employee_no` VARCHAR(32) NOT NULL COMMENT '工号',
|
||
`name` VARCHAR(64) NOT NULL COMMENT '姓名',
|
||
`gender` VARCHAR(16) COMMENT '性别(字典GENDER)',
|
||
`id_type` VARCHAR(16) DEFAULT 'id_card' COMMENT '证件类型',
|
||
`id_number_cipher` VARCHAR(256) COMMENT '证件号密文(敏感)【敏感:sensitive,落库加密/脱敏展示】',
|
||
`id_number_hash` VARCHAR(64) COMMENT '证件号哈希(确定性,唯一/黑名单匹配)【敏感:sensitive,落库加密/脱敏展示】',
|
||
`id_valid_from` DATE COMMENT '证件有效期起',
|
||
`id_valid_to` DATE COMMENT '证件有效期止(长期=9999-12-31)',
|
||
`id_authority` VARCHAR(128) COMMENT '证件签发机关',
|
||
`id_source` VARCHAR(16) DEFAULT 'manual' COMMENT '证件信息来源(字典ID_SOURCE)',
|
||
`birthday` DATE COMMENT '出生日期',
|
||
`phone` VARCHAR(20) COMMENT '手机号(明文存储,按角色脱敏)【敏感:sensitive,落库加密/脱敏展示】',
|
||
`email` VARCHAR(128) COMMENT '邮箱',
|
||
`org_id` VARCHAR(32) COMMENT '组织',
|
||
`position_id` VARCHAR(32) COMMENT '职位',
|
||
`job_id` VARCHAR(32) COMMENT '职务',
|
||
`grade_level_id` VARCHAR(32) COMMENT '职级',
|
||
`grade_rank_id` VARCHAR(32) COMMENT '职等',
|
||
`sequence_id` VARCHAR(32) COMMENT '序列',
|
||
`employee_type` VARCHAR(16) COMMENT '员工类型(字典EMP_TYPE)',
|
||
`employee_status` VARCHAR(16) COMMENT '员工状态(字典EMP_STATUS)',
|
||
`hire_date` DATE COMMENT '入职日期',
|
||
`probation_end_date` DATE COMMENT '试用期止(预计转正日)',
|
||
`regular_date` DATE COMMENT '转正日期',
|
||
`leave_date` DATE COMMENT '离职日期',
|
||
`company_id` VARCHAR(32) COMMENT '合同公司',
|
||
`work_location` VARCHAR(128) COMMENT '办公地点',
|
||
`direct_leader_id` VARCHAR(32) COMMENT '直属主管',
|
||
`prev_employee_id` VARCHAR(32) COMMENT '复职关联原档案ID',
|
||
`remark` TEXT COMMENT '备注',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_employee_no` (`employee_no`),
|
||
UNIQUE KEY `uk_id_number_hash` (`id_number_hash`),
|
||
KEY `idx_org_id` (`org_id`),
|
||
KEY `idx_status` (`employee_status`),
|
||
KEY `idx_hire_date` (`hire_date`),
|
||
KEY `idx_probation_end` (`probation_end_date`),
|
||
KEY `idx_direct_leader` (`direct_leader_id`),
|
||
KEY `idx_prev_employee` (`prev_employee_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='员工主档';
|
||
|
||
-- roster_empno_rule
|
||
CREATE TABLE IF NOT EXISTS `roster_empno_rule` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`rule_name` VARCHAR(64) NOT NULL COMMENT '规则名称',
|
||
`prefix` VARCHAR(16) COMMENT '工号前缀',
|
||
`match_field` VARCHAR(32) COMMENT '匹配字段(如company_id)',
|
||
`match_value` VARCHAR(64) COMMENT '匹配值',
|
||
`seq_length` INT DEFAULT 4 COMMENT '流水号长度',
|
||
`current_seq` INT DEFAULT 0 COMMENT '当前流水号',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工号规则';
|
||
|
||
-- roster_field_def
|
||
CREATE TABLE IF NOT EXISTS `roster_field_def` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`group_id` VARCHAR(32) COMMENT '字段分组',
|
||
`field_code` VARCHAR(64) NOT NULL COMMENT '字段编码',
|
||
`field_name` VARCHAR(64) NOT NULL COMMENT '字段名称',
|
||
`field_type` VARCHAR(16) COMMENT '字段类型(text/number/date/select/multiselect/file)',
|
||
`options_json` TEXT COMMENT '选项定义(字典code或自定义项)',
|
||
`required` INT DEFAULT 0 COMMENT '是否必填(0/1)',
|
||
`sensitive` INT DEFAULT 0 COMMENT '是否敏感(0/1,驱动脱敏与可见性)',
|
||
`editable_self` INT DEFAULT 0 COMMENT '员工自助可编辑(0/1)',
|
||
`need_audit` INT DEFAULT 0 COMMENT '自助修改需审核(0/1)',
|
||
`apply_types` TEXT COMMENT '适用员工类型JSON',
|
||
`sort_no` INT DEFAULT 0 COMMENT '排序号',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_field_code` (`field_code`),
|
||
KEY `idx_group_id` (`group_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='花名册字段定义';
|
||
|
||
-- roster_field_group
|
||
CREATE TABLE IF NOT EXISTS `roster_field_group` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`group_code` VARCHAR(32) NOT NULL COMMENT '分组编码',
|
||
`group_name` VARCHAR(64) NOT NULL COMMENT '分组名称(工作信息/个人信息/绩效结果/培训记录)',
|
||
`sort_no` INT DEFAULT 0 COMMENT '排序号',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_group_code` (`group_code`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='花名册字段分组';
|
||
|
||
-- roster_field_value
|
||
CREATE TABLE IF NOT EXISTS `roster_field_value` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`employee_id` VARCHAR(32) NOT NULL COMMENT '员工档案',
|
||
`field_id` VARCHAR(32) NOT NULL COMMENT '字段定义',
|
||
`value_text` TEXT COMMENT '文本值',
|
||
`value_number` DECIMAL(18,4) COMMENT '数值',
|
||
`value_date` DATE COMMENT '日期值',
|
||
`value_file` VARCHAR(64) COMMENT '附件值(文件ID)',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_employee_field` (`employee_id`,`field_id`),
|
||
KEY `idx_field_id` (`field_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='花名册字段值(EAV)';
|
||
|
||
-- roster_timeline
|
||
CREATE TABLE IF NOT EXISTS `roster_timeline` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`employee_id` VARCHAR(32) COMMENT '员工档案',
|
||
`event_type` VARCHAR(24) COMMENT '事件类型(entry/regular/transfer/leave/concurrent/contract/field_change/headcount/project/migrate)',
|
||
`event_date` DATE COMMENT '事件日期',
|
||
`title` VARCHAR(128) COMMENT '标题',
|
||
`content_json` TEXT COMMENT '内容JSON',
|
||
`source_type` VARCHAR(32) COMMENT '来源类型',
|
||
`source_id` VARCHAR(32) COMMENT '来源ID',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_emp_date` (`employee_id`,`event_date`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='员工时间轴';
|
||
|
||
-- roster_type_rule
|
||
CREATE TABLE IF NOT EXISTS `roster_type_rule` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`employee_type` VARCHAR(16) NOT NULL COMMENT '员工类型(字典EMP_TYPE)',
|
||
`field_rules_json` TEXT COMMENT '按类型必填/隐藏字段规则',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_employee_type` (`employee_type`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='员工类型字段规则';
|
||
|
||
-- ===== hr_system(8 张)=====
|
||
-- sys_announcement
|
||
CREATE TABLE IF NOT EXISTS `sys_announcement` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`title` VARCHAR(256) NOT NULL COMMENT '标题',
|
||
`content` TEXT COMMENT '内容',
|
||
`publish_scope_json` TEXT COMMENT '发布范围',
|
||
`publish_time` TIMESTAMP NULL DEFAULT NULL COMMENT '发布时间',
|
||
`status` VARCHAR(16) DEFAULT 'draft' COMMENT '状态(draft/published/offline)',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_status` (`status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业公告(F15)';
|
||
|
||
-- sys_audit_log
|
||
CREATE TABLE IF NOT EXISTS `sys_audit_log` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`module` VARCHAR(32) NOT NULL COMMENT '模块(hr-org/hr-roster/...)',
|
||
`target_type` VARCHAR(32) NOT NULL COMMENT '对象类型(roster_employee/org_unit/...)',
|
||
`target_id` VARCHAR(32) NOT NULL COMMENT '对象ID',
|
||
`operation` VARCHAR(16) NOT NULL COMMENT '操作类型(字典AUDIT_OP)',
|
||
`operator_id` VARCHAR(32) NOT NULL COMMENT '操作人',
|
||
`operator_name` VARCHAR(64) DEFAULT '' COMMENT '操作人姓名',
|
||
`before_json` TEXT COMMENT '变更前快照',
|
||
`after_json` TEXT COMMENT '变更后快照',
|
||
`request_ip` VARCHAR(64) COMMENT '请求IP',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_target` (`target_type`,`target_id`),
|
||
KEY `idx_operator` (`operator_id`),
|
||
KEY `idx_created_at` (`created_at`),
|
||
KEY `idx_module_op` (`module`,`operation`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志(只增,F12)';
|
||
|
||
-- sys_care_config
|
||
CREATE TABLE IF NOT EXISTS `sys_care_config` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`care_type` VARCHAR(16) NOT NULL COMMENT '关怀类型(birthday/anniversary)',
|
||
`template` TEXT COMMENT '文案模板',
|
||
`enable` INT DEFAULT 1 COMMENT '启用(0/1)',
|
||
`push_target` VARCHAR(16) DEFAULT 'employee' COMMENT '推送对象(employee/leader)',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_care_type` (`care_type`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='关怀配置(生日/周年,F15)';
|
||
|
||
-- sys_data_scope
|
||
CREATE TABLE IF NOT EXISTS `sys_data_scope` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`admin_user_id` VARCHAR(32) COMMENT '管理员用户',
|
||
`scope_type` VARCHAR(16) COMMENT '范围类型(org/field)',
|
||
`org_ids_json` TEXT COMMENT '组织维度(含子树)',
|
||
`field_ids_json` TEXT COMMENT '花名册字段维度',
|
||
`remark` TEXT COMMENT '备注',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_admin_user` (`admin_user_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='数据范围(F11)';
|
||
|
||
-- sys_message
|
||
CREATE TABLE IF NOT EXISTS `sys_message` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`receiver_id` VARCHAR(32) COMMENT '接收人',
|
||
`msg_type` VARCHAR(16) COMMENT '消息类型(todo/approval/remind/care/notice)',
|
||
`title` VARCHAR(256) COMMENT '标题',
|
||
`content` TEXT COMMENT '内容',
|
||
`biz_type` VARCHAR(32) COMMENT '业务类型',
|
||
`biz_id` VARCHAR(32) COMMENT '业务ID',
|
||
`send_channel` VARCHAR(16) DEFAULT 'site' COMMENT '发送渠道(字典MSG_CHANNEL,一期仅site;D9)',
|
||
`is_read` INT DEFAULT 0 COMMENT '是否已读(0/1)',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_receiver_read` (`receiver_id`,`is_read`),
|
||
KEY `idx_created_at` (`created_at`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='站内消息(F15)';
|
||
|
||
-- sys_openapp
|
||
CREATE TABLE IF NOT EXISTS `sys_openapp` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`app_key` VARCHAR(64) NOT NULL COMMENT '应用Key',
|
||
`app_secret_cipher` VARCHAR(256) COMMENT '应用密钥密文【敏感:sensitive,落库加密/脱敏展示】',
|
||
`app_name` VARCHAR(128) COMMENT '应用名称',
|
||
`scope_json` TEXT COMMENT '授权资源范围',
|
||
`rate_limit` INT DEFAULT 10 COMMENT '限流(req/s,默认10)',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_app_key` (`app_key`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API开放应用(一期预留,FEAT-B1-01⑦)';
|
||
|
||
-- sys_policy
|
||
CREATE TABLE IF NOT EXISTS `sys_policy` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`title` VARCHAR(256) NOT NULL COMMENT '标题',
|
||
`file_path` VARCHAR(256) COMMENT '政策文件(文件ID)',
|
||
`view_scope_json` TEXT COMMENT '查阅范围',
|
||
`downloadable` INT DEFAULT 0 COMMENT '允许下载(0/1)',
|
||
`publish_time` TIMESTAMP NULL DEFAULT NULL COMMENT '发布时间',
|
||
`status` VARCHAR(16) DEFAULT 'draft' COMMENT '状态(draft/published/offline)',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_status` (`status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业政策(F15)';
|
||
|
||
-- sys_remind_rule
|
||
CREATE TABLE IF NOT EXISTS `sys_remind_rule` (
|
||
`id` VARCHAR(32) NOT NULL COMMENT '主键',
|
||
`scene_code` VARCHAR(32) NOT NULL COMMENT '提醒场景(字典REMIND_SCENE,≥6类)',
|
||
`rule_name` VARCHAR(64) NOT NULL COMMENT '规则名称',
|
||
`days_before` INT DEFAULT 7 COMMENT '提前天数',
|
||
`content_template` TEXT COMMENT '提醒内容模板',
|
||
`target_role` VARCHAR(16) DEFAULT 'admin' COMMENT '提醒对象(admin/employee/leader)',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive',
|
||
`created_by` VARCHAR(32) COMMENT '创建人',
|
||
`updated_by` VARCHAR(32) COMMENT '更新人',
|
||
`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
|
||
`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_scene_rule` (`scene_code`,`rule_name`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通用提醒规则(F15)';
|
||
|
||
SET FOREIGN_KEY_CHECKS=1;
|
||
-- 共 49 张表
|