-- 人事系统 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 张表