agent.develop: 【重做·必须产出真实代码】批次1开发基础T01/T02:49表models JSON契约+ahserver(Python)/bricks脚手架+MariaDB

This commit is contained in:
Pipeline Agent 2026-08-19 18:44:59 +08:00
parent d801859c1c
commit 75d9ba3021
52 changed files with 5916 additions and 16 deletions

View File

@ -0,0 +1,165 @@
{
"summary": [
{
"name": "contract_info",
"title": "合同台账",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "contract_no",
"title": "合同编号",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "employee_id",
"title": "员工档案",
"type": "varchar",
"length": 32
},
{
"name": "type_id",
"title": "合同类型",
"type": "varchar",
"length": 32
},
{
"name": "company_id",
"title": "签约公司(org_contract_company)",
"type": "varchar",
"length": 32
},
{
"name": "template_id",
"title": "合同模板",
"type": "varchar",
"length": 32
},
{
"name": "start_date",
"title": "合同起始日",
"type": "date"
},
{
"name": "end_date",
"title": "合同到期日",
"type": "date"
},
{
"name": "sign_date",
"title": "签订日期",
"type": "date"
},
{
"name": "contract_status",
"title": "合同状态(字典CONTRACT_STATUS)",
"type": "varchar",
"length": 16,
"default": "active"
},
{
"name": "file_path",
"title": "合同文件(文件ID)",
"type": "varchar",
"length": 256
},
{
"name": "text_file_path",
"title": "模板生成合同文本(D4)",
"type": "varchar",
"length": 256
},
{
"name": "flow_instance_id",
"title": "流程实例",
"type": "varchar",
"length": 32
},
{
"name": "remind_rule_id",
"title": "到期提醒规则",
"type": "varchar",
"length": 32
},
{
"name": "esign_status",
"title": "电子签状态(字典ESIGN_STATUS,D4预留)",
"type": "varchar",
"length": 16,
"default": "not_enabled"
},
{
"name": "remark",
"title": "备注",
"type": "text"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_employee",
"fields": [
"employee_id"
]
},
{
"name": "idx_end_date",
"fields": [
"end_date"
]
},
{
"name": "idx_status",
"fields": [
"contract_status"
]
}
],
"codes": [
{
"name": "contract_status",
"source": "appcodes",
"code": "CONTRACT_STATUS"
},
{
"name": "esign_status",
"source": "appcodes",
"code": "ESIGN_STATUS"
}
]
}

View File

@ -0,0 +1,79 @@
{
"summary": [
{
"name": "contract_remind_rule",
"title": "合同到期提醒规则",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "rule_name",
"title": "规则名称",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "days_before",
"title": "提前天数",
"type": "int",
"default": 30
},
{
"name": "target_role",
"title": "提醒对象(self/leader/hr)",
"type": "varchar",
"length": 16,
"default": "hr"
},
{
"name": "content_template",
"title": "提醒内容模板",
"type": "text"
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [],
"codes": []
}

View File

@ -0,0 +1,78 @@
{
"summary": [
{
"name": "contract_template",
"title": "合同模板",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "template_name",
"title": "模板名称",
"type": "varchar",
"length": 128,
"notnull": true
},
{
"name": "type_id",
"title": "合同类型",
"type": "varchar",
"length": 32
},
{
"name": "file_path",
"title": "模板文件(文件ID)",
"type": "varchar",
"length": 256
},
{
"name": "field_marks_json",
"title": "占位符映射",
"type": "text"
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [],
"codes": []
}

View File

@ -0,0 +1,76 @@
{
"summary": [
{
"name": "contract_type",
"title": "合同类型",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "type_code",
"title": "类型编码",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "type_name",
"title": "类型名称(劳动合同/保密协议/竞业协议…)",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_type_code",
"fields": [
"type_code"
],
"unique": true
}
],
"codes": []
}

View File

@ -0,0 +1,111 @@
{
"summary": [
{
"name": "flow_def",
"title": "流程定义",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "flow_code",
"title": "流程编码",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "flow_name",
"title": "流程名称",
"type": "varchar",
"length": 128,
"notnull": true
},
{
"name": "form_id",
"title": "表单定义",
"type": "varchar",
"length": 32
},
{
"name": "biz_type",
"title": "业务类型(字典FLOW_BIZ_TYPE)",
"type": "varchar",
"length": 32
},
{
"name": "match_cond_json",
"title": "匹配条件(员工类型/部门)",
"type": "text"
},
{
"name": "version",
"title": "版本",
"type": "int",
"default": 1
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_flow_code",
"fields": [
"flow_code"
],
"unique": true
},
{
"name": "idx_biz_type",
"fields": [
"biz_type"
]
}
],
"codes": [
{
"name": "biz_type",
"source": "appcodes",
"code": "FLOW_BIZ_TYPE"
}
]
}

View File

@ -0,0 +1,93 @@
{
"summary": [
{
"name": "flow_form_def",
"title": "表单定义",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "form_code",
"title": "表单编码",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "form_name",
"title": "表单名称",
"type": "varchar",
"length": 128,
"notnull": true
},
{
"name": "biz_type",
"title": "业务类型(字典FLOW_BIZ_TYPE,含attendance_*桩位)",
"type": "varchar",
"length": 32
},
{
"name": "fields_json",
"title": "字段定义(引用roster_field_def或自定义项)",
"type": "text"
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_form_code",
"fields": [
"form_code"
],
"unique": true
}
],
"codes": [
{
"name": "biz_type",
"source": "appcodes",
"code": "FLOW_BIZ_TYPE"
}
]
}

View File

@ -0,0 +1,132 @@
{
"summary": [
{
"name": "flow_instance",
"title": "流程实例",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "inst_no",
"title": "审批编号",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "flow_id",
"title": "流程定义",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "form_id",
"title": "表单定义",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "biz_type",
"title": "业务类型(字典FLOW_BIZ_TYPE)",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "biz_id",
"title": "业务单据ID",
"type": "varchar",
"length": 32
},
{
"name": "title",
"title": "标题",
"type": "varchar",
"length": 256
},
{
"name": "initiator_id",
"title": "发起人",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "inst_status",
"title": "实例状态(字典INST_STATUS)",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "running"
},
{
"name": "submit_data_json",
"title": "提交表单数据快照",
"type": "text"
},
{
"name": "start_time",
"title": "发起时间",
"type": "timestamp"
},
{
"name": "finish_time",
"title": "结束时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_inst_no",
"fields": [
"inst_no"
],
"unique": true
},
{
"name": "idx_biz",
"fields": [
"biz_type",
"biz_id"
]
},
{
"name": "idx_initiator",
"fields": [
"initiator_id"
]
},
{
"name": "idx_status",
"fields": [
"inst_status"
]
}
],
"codes": [
{
"name": "biz_type",
"source": "appcodes",
"code": "FLOW_BIZ_TYPE"
},
{
"name": "inst_status",
"source": "appcodes",
"code": "INST_STATUS"
}
]
}

View File

@ -0,0 +1,79 @@
{
"summary": [
{
"name": "flow_node_def",
"title": "流程节点",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "flow_id",
"title": "流程定义",
"type": "varchar",
"length": 32
},
{
"name": "node_seq",
"title": "节点序号",
"type": "int",
"default": 1
},
{
"name": "node_name",
"title": "节点名称",
"type": "varchar",
"length": 64
},
{
"name": "approver_type",
"title": "审批人类型(user/role/leader/admin/flow_role)",
"type": "varchar",
"length": 16
},
{
"name": "approver_value",
"title": "审批人取值",
"type": "varchar",
"length": 256
},
{
"name": "pass_rule",
"title": "通过规则(any/all)",
"type": "varchar",
"length": 8,
"default": "all"
},
{
"name": "field_perm_json",
"title": "节点字段可读写权限",
"type": "text"
},
{
"name": "cc_to",
"title": "抄送对象",
"type": "varchar",
"length": 512
}
],
"indexes": [
{
"name": "idx_flow_id",
"fields": [
"flow_id"
]
}
],
"codes": []
}

View File

@ -0,0 +1,59 @@
{
"summary": [
{
"name": "flow_op_log",
"title": "流转日志",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "instance_id",
"title": "流程实例",
"type": "varchar",
"length": 32
},
{
"name": "op_type",
"title": "操作类型(submit/approve/reject/forward/cancel/withdraw)",
"type": "varchar",
"length": 16
},
{
"name": "operator_id",
"title": "操作人",
"type": "varchar",
"length": 32
},
{
"name": "comment",
"title": "意见",
"type": "text"
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_instance",
"fields": [
"instance_id"
]
}
],
"codes": []
}

View File

@ -0,0 +1,76 @@
{
"summary": [
{
"name": "flow_role",
"title": "审批角色",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "role_name",
"title": "角色名称",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "flow_scope_json",
"title": "可用流程范围",
"type": "text"
},
{
"name": "op_perm_json",
"title": "操作权限",
"type": "text"
},
{
"name": "data_scope_json",
"title": "数据查看范围",
"type": "text"
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [],
"codes": []
}

View File

@ -0,0 +1,84 @@
{
"summary": [
{
"name": "flow_task",
"title": "审批任务(待办/已办)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "instance_id",
"title": "流程实例",
"type": "varchar",
"length": 32
},
{
"name": "node_id",
"title": "节点定义",
"type": "varchar",
"length": 32
},
{
"name": "node_name",
"title": "节点名称",
"type": "varchar",
"length": 64
},
{
"name": "approver_id",
"title": "审批人",
"type": "varchar",
"length": 32
},
{
"name": "task_status",
"title": "任务状态(pending/approved/rejected/forwarded/cancelled)",
"type": "varchar",
"length": 16,
"default": "pending"
},
{
"name": "comment",
"title": "审批意见",
"type": "text"
},
{
"name": "handle_time",
"title": "处理时间",
"type": "timestamp"
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_approver_status",
"fields": [
"approver_id",
"task_status"
]
},
{
"name": "idx_instance",
"fields": [
"instance_id"
]
}
],
"codes": []
}

View File

@ -0,0 +1,83 @@
{
"summary": [
{
"name": "headcount_item",
"title": "编制细分项(F16)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "scheme_id",
"title": "编制方案",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "scope_json",
"title": "占编范围条件(员工类型/状态/职位/职级/自定义字段)",
"type": "text",
"notnull": true
},
{
"name": "seg_json",
"title": "细分维度(空=整体)",
"type": "text"
},
{
"name": "head_limit",
"title": "编制数量",
"type": "int",
"notnull": true,
"default": 0
},
{
"name": "remark",
"title": "备注",
"type": "text"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_scheme_id",
"fields": [
"scheme_id"
]
}
],
"codes": []
}

View File

@ -0,0 +1,79 @@
{
"summary": [
{
"name": "headcount_snapshot",
"title": "编制快照(F16历史回溯/实时计数)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "scheme_id",
"title": "编制方案",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "item_id",
"title": "细分项",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "snap_date",
"title": "快照日期",
"type": "date",
"notnull": true
},
{
"name": "used_count",
"title": "占编人数",
"type": "int",
"notnull": true,
"default": 0
},
{
"name": "over_count",
"title": "超编数(0=未超编)",
"type": "int",
"notnull": true,
"default": 0
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_scheme_item_date",
"fields": [
"scheme_id",
"item_id",
"snap_date"
],
"unique": true
},
{
"name": "idx_snap_date",
"fields": [
"snap_date"
]
}
],
"codes": []
}

View File

@ -0,0 +1,80 @@
{
"summary": [
{
"name": "org_blacklist",
"title": "黑名单",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "name",
"title": "姓名",
"type": "varchar",
"length": 64
},
{
"name": "id_number_hash",
"title": "证件号哈希(确定性,匹配用)",
"type": "varchar",
"length": 64,
"sensitive": true
},
{
"name": "id_number_cipher",
"title": "证件号密文",
"type": "varchar",
"length": 256,
"sensitive": true
},
{
"name": "reason",
"title": "拉黑原因",
"type": "varchar",
"length": 256
},
{
"name": "source",
"title": "来源(leave/manual)",
"type": "varchar",
"length": 16
},
{
"name": "source_employee_id",
"title": "来源员工档案",
"type": "varchar",
"length": 32
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_id_number_hash",
"fields": [
"id_number_hash"
]
}
],
"codes": []
}

View File

@ -0,0 +1,100 @@
{
"summary": [
{
"name": "org_concurrent_post",
"title": "兼岗",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "employee_id",
"title": "员工档案",
"type": "varchar",
"length": 32
},
{
"name": "org_id",
"title": "兼岗组织",
"type": "varchar",
"length": 32
},
{
"name": "position_id",
"title": "兼岗职位",
"type": "varchar",
"length": 32
},
{
"name": "start_date",
"title": "开始日期",
"type": "date"
},
{
"name": "end_date",
"title": "结束日期",
"type": "date"
},
{
"name": "status",
"title": "状态(awaiting/active/expired)",
"type": "varchar",
"length": 16,
"default": "awaiting"
},
{
"name": "flow_instance_id",
"title": "流程实例",
"type": "varchar",
"length": 32
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_employee_id",
"fields": [
"employee_id"
]
},
{
"name": "idx_status",
"fields": [
"status"
]
}
],
"codes": []
}

View File

@ -0,0 +1,94 @@
{
"summary": [
{
"name": "org_contract_company",
"title": "合同公司",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "company_code",
"title": "公司编码",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "company_name",
"title": "公司名称",
"type": "varchar",
"length": 128,
"notnull": true
},
{
"name": "credit_code",
"title": "统一社会信用代码",
"type": "varchar",
"length": 32
},
{
"name": "legal_person",
"title": "法人",
"type": "varchar",
"length": 64
},
{
"name": "contact_info",
"title": "联系方式",
"type": "varchar",
"length": 128
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_company_code",
"fields": [
"company_code"
],
"unique": true
}
],
"codes": []
}

View File

@ -0,0 +1,244 @@
{
"summary": [
{
"name": "org_entry",
"title": "入职记录",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "employee_id",
"title": "员工档案(可空,待入职)",
"type": "varchar",
"length": 32
},
{
"name": "name",
"title": "姓名",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "id_type",
"title": "证件类型(字典ID_TYPE)",
"type": "varchar",
"length": 16,
"default": "id_card"
},
{
"name": "id_number_cipher",
"title": "证件号密文",
"type": "varchar",
"length": 256,
"sensitive": true
},
{
"name": "id_number_hash",
"title": "证件号哈希",
"type": "varchar",
"length": 64,
"sensitive": true
},
{
"name": "id_valid_from",
"title": "证件有效期起",
"type": "date"
},
{
"name": "id_valid_to",
"title": "证件有效期止(长期=9999-12-31)",
"type": "date"
},
{
"name": "id_authority",
"title": "证件签发机关",
"type": "varchar",
"length": 128
},
{
"name": "id_source",
"title": "证件信息来源(字典ID_SOURCE,D1手工录入)",
"type": "varchar",
"length": 16,
"default": "manual"
},
{
"name": "employee_type",
"title": "员工类型(字典EMP_TYPE)",
"type": "varchar",
"length": 16
},
{
"name": "org_id",
"title": "入职组织",
"type": "varchar",
"length": 32
},
{
"name": "position_id",
"title": "职位",
"type": "varchar",
"length": 32
},
{
"name": "company_id",
"title": "合同公司",
"type": "varchar",
"length": 32
},
{
"name": "work_location",
"title": "办公地点",
"type": "varchar",
"length": 128
},
{
"name": "hire_date",
"title": "入职日期",
"type": "date"
},
{
"name": "entry_status",
"title": "入职状态(字典ENTRY_STATUS)",
"type": "varchar",
"length": 24,
"default": "pending_approval"
},
{
"name": "is_rehire",
"title": "是否复职(0/1)",
"type": "int",
"default": 0
},
{
"name": "register_status",
"title": "登记表状态(none/invited/filled)",
"type": "varchar",
"length": 16,
"default": "none"
},
{
"name": "register_token",
"title": "登记表token(扫码入职降级)",
"type": "varchar",
"length": 64
},
{
"name": "register_url",
"title": "登记表链接",
"type": "varchar",
"length": 256
},
{
"name": "qrcode_file",
"title": "登记二维码图片(文件ID)",
"type": "varchar",
"length": 64
},
{
"name": "register_expire",
"title": "登记链接过期时间",
"type": "timestamp"
},
{
"name": "flow_instance_id",
"title": "流程实例",
"type": "varchar",
"length": 32
},
{
"name": "remark",
"title": "备注",
"type": "text"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_entry_status",
"fields": [
"entry_status"
]
},
{
"name": "idx_hire_date",
"fields": [
"hire_date"
]
},
{
"name": "idx_flow_instance_id",
"fields": [
"flow_instance_id"
]
},
{
"name": "uk_register_token",
"fields": [
"register_token"
],
"unique": true
}
],
"codes": [
{
"name": "id_type",
"source": "appcodes",
"code": "ID_TYPE"
},
{
"name": "id_source",
"source": "appcodes",
"code": "ID_SOURCE"
},
{
"name": "employee_type",
"source": "appcodes",
"code": "EMP_TYPE"
},
{
"name": "entry_status",
"source": "appcodes",
"code": "ENTRY_STATUS"
},
{
"name": "register_status",
"source": "appcodes",
"code": "REGISTER_STATUS"
}
]
}

View File

@ -0,0 +1,99 @@
{
"summary": [
{
"name": "org_field_def",
"title": "组织自定义字段定义",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "field_code",
"title": "字段编码",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "field_name",
"title": "字段名称",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "field_type",
"title": "字段类型(text/number/date/select/file)",
"type": "varchar",
"length": 16
},
{
"name": "options_json",
"title": "选项定义JSON",
"type": "text"
},
{
"name": "required",
"title": "是否必填(0/1)",
"type": "int",
"default": 0
},
{
"name": "sort_no",
"title": "排序号",
"type": "int",
"default": 0
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_field_code",
"fields": [
"field_code"
],
"unique": true
}
],
"codes": []
}

View File

@ -0,0 +1,68 @@
{
"summary": [
{
"name": "org_field_value",
"title": "组织字段值(EAV)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "org_id",
"title": "组织",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "field_id",
"title": "字段定义",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "value_text",
"title": "文本值",
"type": "text"
},
{
"name": "value_date",
"title": "日期值",
"type": "date"
},
{
"name": "value_file",
"title": "附件值(文件ID)",
"type": "varchar",
"length": 64
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_org_field",
"fields": [
"org_id",
"field_id"
],
"unique": true
}
],
"codes": []
}

View File

@ -0,0 +1,92 @@
{
"summary": [
{
"name": "org_grade_level",
"title": "职级",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "level_code",
"title": "职级编码",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "level_name",
"title": "职级名称",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "level_category",
"title": "职级类别",
"type": "varchar",
"length": 32
},
{
"name": "start_rank_id",
"title": "起始职等",
"type": "varchar",
"length": 32
},
{
"name": "end_rank_id",
"title": "结束职等",
"type": "varchar",
"length": 32
},
{
"name": "sort_no",
"title": "排序号",
"type": "int",
"default": 0
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_level_code",
"fields": [
"level_code"
],
"unique": true
}
],
"codes": []
}

View File

@ -0,0 +1,79 @@
{
"summary": [
{
"name": "org_grade_rank",
"title": "职等",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "rank_code",
"title": "职等编码",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "rank_name",
"title": "职等名称",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "rank_level",
"title": "职等层级",
"type": "int"
},
{
"name": "sort_no",
"title": "排序号",
"type": "int",
"default": 0
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_rank_code",
"fields": [
"rank_code"
],
"unique": true
}
],
"codes": []
}

View File

@ -0,0 +1,105 @@
{
"summary": [
{
"name": "org_headcount_scheme",
"title": "编制方案(F16)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "scheme_name",
"title": "方案名称",
"type": "varchar",
"length": 128,
"notnull": true
},
{
"name": "cycle_type",
"title": "周期(字典HEADCOUNT_CYCLE: year/quarter/month)",
"type": "varchar",
"length": 16,
"notnull": true
},
{
"name": "cycle_start",
"title": "周期起",
"type": "date",
"notnull": true
},
{
"name": "cycle_end",
"title": "周期止",
"type": "date",
"notnull": true
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "remark",
"title": "备注",
"type": "text"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_cycle",
"fields": [
"cycle_start",
"cycle_end"
]
},
{
"name": "idx_status",
"fields": [
"status"
]
}
],
"codes": [
{
"name": "cycle_type",
"source": "appcodes",
"code": "HEADCOUNT_CYCLE"
}
]
}

107
models/hr_org/org_job.json Normal file
View File

@ -0,0 +1,107 @@
{
"summary": [
{
"name": "org_job",
"title": "职务(含F17横向职务)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "job_code",
"title": "职务编码",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "job_name",
"title": "职务名称",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "job_category",
"title": "职务类别(vertical/horizontal,F17)",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "vertical"
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "sort_no",
"title": "排序号",
"type": "int",
"default": 0
},
{
"name": "remark",
"title": "备注",
"type": "text"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_job_code",
"fields": [
"job_code"
],
"unique": true
},
{
"name": "idx_job_category",
"fields": [
"job_category"
]
}
],
"codes": [
{
"name": "job_category",
"source": "appcodes",
"code": "JOB_CATEGORY"
}
]
}

View File

@ -0,0 +1,137 @@
{
"summary": [
{
"name": "org_leave",
"title": "离职记录",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "employee_id",
"title": "员工档案",
"type": "varchar",
"length": 32
},
{
"name": "leave_type",
"title": "离职类型(辞职/劝退/合同到期/退休)",
"type": "varchar",
"length": 24
},
{
"name": "leave_reason",
"title": "离职原因(字典LEAVE_REASON)",
"type": "varchar",
"length": 32
},
{
"name": "leave_date",
"title": "离职日期",
"type": "date"
},
{
"name": "apply_type",
"title": "申请方式(self/proxy/manual)",
"type": "varchar",
"length": 16
},
{
"name": "status",
"title": "状态(pending_leave/left/cancelled)",
"type": "varchar",
"length": 16,
"default": "pending_leave"
},
{
"name": "handover_status",
"title": "交接状态(pending/done)",
"type": "varchar",
"length": 16,
"default": "pending"
},
{
"name": "certificate_file",
"title": "离职证明文件ID",
"type": "varchar",
"length": 64
},
{
"name": "blacklist_flag",
"title": "是否加入黑名单(0/1)",
"type": "int",
"default": 0
},
{
"name": "flow_instance_id",
"title": "流程实例",
"type": "varchar",
"length": 32
},
{
"name": "remark",
"title": "备注",
"type": "text"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_employee_id",
"fields": [
"employee_id"
]
},
{
"name": "idx_status",
"fields": [
"status"
]
},
{
"name": "idx_leave_date",
"fields": [
"leave_date"
]
}
],
"codes": [
{
"name": "leave_reason",
"source": "appcodes",
"code": "LEAVE_REASON"
}
]
}

View File

@ -0,0 +1,82 @@
{
"summary": [
{
"name": "org_leave_handover",
"title": "离职交接项",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "leave_id",
"title": "离职记录",
"type": "varchar",
"length": 32
},
{
"name": "item_type",
"title": "交接项类型(字典HANDOVER_TYPE,含dingtalk_resource占位D3)",
"type": "varchar",
"length": 32
},
{
"name": "item_content",
"title": "交接内容",
"type": "text"
},
{
"name": "handover_to_id",
"title": "交接人",
"type": "varchar",
"length": 32
},
{
"name": "status",
"title": "状态(pending/done)",
"type": "varchar",
"length": 16,
"default": "pending"
},
{
"name": "remark",
"title": "备注",
"type": "text"
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_leave_id",
"fields": [
"leave_id"
]
}
],
"codes": [
{
"name": "item_type",
"source": "appcodes",
"code": "HANDOVER_TYPE"
}
]
}

View File

@ -0,0 +1,123 @@
{
"summary": [
{
"name": "org_position",
"title": "职位",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "position_code",
"title": "职位编码",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "position_name",
"title": "职位名称",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "job_id",
"title": "职务",
"type": "varchar",
"length": 32
},
{
"name": "sequence_id",
"title": "序列",
"type": "varchar",
"length": 32
},
{
"name": "category",
"title": "职位类别(字典POS_CATEGORY)",
"type": "varchar",
"length": 16
},
{
"name": "dept_ids",
"title": "适用部门(多值,逗号分隔)",
"type": "varchar",
"length": 512
},
{
"name": "description",
"title": "职位描述",
"type": "text"
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "sort_no",
"title": "排序号",
"type": "int",
"default": 0
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_position_code",
"fields": [
"position_code"
],
"unique": true
},
{
"name": "idx_job_id",
"fields": [
"job_id"
]
}
],
"codes": [
{
"name": "category",
"source": "appcodes",
"code": "POS_CATEGORY"
}
]
}

View File

@ -0,0 +1,127 @@
{
"summary": [
{
"name": "org_project",
"title": "项目式组织(F17)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "project_code",
"title": "项目编码",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "project_name",
"title": "项目名称",
"type": "varchar",
"length": 128,
"notnull": true
},
{
"name": "parent_id",
"title": "上级项目(自引用多层级)",
"type": "varchar",
"length": 32
},
{
"name": "owner_id",
"title": "负责人",
"type": "varchar",
"length": 32
},
{
"name": "start_date",
"title": "开始日期",
"type": "date"
},
{
"name": "end_date",
"title": "结束日期",
"type": "date"
},
{
"name": "project_status",
"title": "项目状态(字典PROJECT_STATUS)",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "attrs_json",
"title": "项目属性",
"type": "text"
},
{
"name": "sort_no",
"title": "排序号",
"type": "int",
"default": 0
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_project_code",
"fields": [
"project_code"
],
"unique": true
},
{
"name": "idx_parent_id",
"fields": [
"parent_id"
]
},
{
"name": "idx_project_status",
"fields": [
"project_status"
]
}
],
"codes": [
{
"name": "project_status",
"source": "appcodes",
"code": "PROJECT_STATUS"
}
]
}

View File

@ -0,0 +1,101 @@
{
"summary": [
{
"name": "org_project_post",
"title": "项目任职(F17横向)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "project_id",
"title": "项目组织",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "employee_id",
"title": "员工",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "job_id",
"title": "横向职务(org_job.job_category=horizontal)",
"type": "varchar",
"length": 32
},
{
"name": "start_date",
"title": "开始日期",
"type": "date"
},
{
"name": "end_date",
"title": "结束日期",
"type": "date"
},
{
"name": "status",
"title": "状态 active/expired",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_proj_emp_job",
"fields": [
"project_id",
"employee_id",
"job_id",
"start_date"
],
"unique": true
},
{
"name": "idx_employee_id",
"fields": [
"employee_id"
]
}
],
"codes": []
}

View File

@ -0,0 +1,99 @@
{
"summary": [
{
"name": "org_regularization",
"title": "转正记录",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "employee_id",
"title": "员工档案",
"type": "varchar",
"length": 32
},
{
"name": "probation_end_date",
"title": "试用期止(预计转正日)",
"type": "date"
},
{
"name": "regular_date",
"title": "转正日期",
"type": "date"
},
{
"name": "apply_type",
"title": "申请方式(self/proxy/manual)",
"type": "varchar",
"length": 16
},
{
"name": "status",
"title": "状态(pending/approved/rejected/cancelled)",
"type": "varchar",
"length": 16,
"default": "pending"
},
{
"name": "flow_instance_id",
"title": "流程实例",
"type": "varchar",
"length": 32
},
{
"name": "remark",
"title": "备注",
"type": "text"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_employee_id",
"fields": [
"employee_id"
]
},
{
"name": "idx_regular_date",
"fields": [
"regular_date"
]
}
],
"codes": []
}

View File

@ -0,0 +1,73 @@
{
"summary": [
{
"name": "org_sequence",
"title": "序列",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "seq_category",
"title": "序列类别",
"type": "varchar",
"length": 32
},
{
"name": "seq_name",
"title": "序列名称",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "grade_level_ids",
"title": "关联职级类别(多值,逗号分隔)",
"type": "varchar",
"length": 512
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [],
"codes": []
}

View File

@ -0,0 +1,100 @@
{
"summary": [
{
"name": "org_transfer",
"title": "调动单(支持批量)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "transfer_type",
"title": "调动类型(字典TRANSFER_TYPE)",
"type": "varchar",
"length": 24
},
{
"name": "status",
"title": "状态(pending/confirmed/cancelled)",
"type": "varchar",
"length": 16,
"default": "pending"
},
{
"name": "effective_date",
"title": "生效日期",
"type": "date"
},
{
"name": "batch_no",
"title": "批次号",
"type": "varchar",
"length": 32
},
{
"name": "flow_instance_id",
"title": "流程实例",
"type": "varchar",
"length": 32
},
{
"name": "remark",
"title": "备注",
"type": "text"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_status",
"fields": [
"status"
]
},
{
"name": "idx_effective_date",
"fields": [
"effective_date"
]
}
],
"codes": [
{
"name": "transfer_type",
"source": "appcodes",
"code": "TRANSFER_TYPE"
}
]
}

View File

@ -0,0 +1,92 @@
{
"summary": [
{
"name": "org_transfer_detail",
"title": "调动明细(逐人)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "transfer_id",
"title": "调动单",
"type": "varchar",
"length": 32
},
{
"name": "employee_id",
"title": "员工档案",
"type": "varchar",
"length": 32
},
{
"name": "from_org_id",
"title": "原组织",
"type": "varchar",
"length": 32
},
{
"name": "to_org_id",
"title": "新组织",
"type": "varchar",
"length": 32
},
{
"name": "from_position_id",
"title": "原职位",
"type": "varchar",
"length": 32
},
{
"name": "to_position_id",
"title": "新职位",
"type": "varchar",
"length": 32
},
{
"name": "from_grade_level_id",
"title": "原职级",
"type": "varchar",
"length": 32
},
{
"name": "to_grade_level_id",
"title": "新职级",
"type": "varchar",
"length": 32
},
{
"name": "status",
"title": "状态(pending/done/cancelled)",
"type": "varchar",
"length": 16,
"default": "pending"
}
],
"indexes": [
{
"name": "idx_transfer_id",
"fields": [
"transfer_id"
]
},
{
"name": "idx_employee_id",
"fields": [
"employee_id"
]
}
],
"codes": []
}

133
models/hr_org/org_unit.json Normal file
View File

@ -0,0 +1,133 @@
{
"summary": [
{
"name": "org_unit",
"title": "组织",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "org_code",
"title": "组织编码",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "org_name",
"title": "组织名称",
"type": "varchar",
"length": 128,
"notnull": true
},
{
"name": "parent_id",
"title": "上级组织(自引用)",
"type": "varchar",
"length": 32
},
{
"name": "org_type",
"title": "组织类型(字典ORG_TYPE)",
"type": "varchar",
"length": 16
},
{
"name": "leader_id",
"title": "负责人",
"type": "varchar",
"length": 32
},
{
"name": "effective_date",
"title": "生效日期",
"type": "date"
},
{
"name": "expire_date",
"title": "失效日期(空=长期)",
"type": "date"
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "sort_no",
"title": "排序号",
"type": "int",
"default": 0
},
{
"name": "remark",
"title": "备注",
"type": "text"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_org_code",
"fields": [
"org_code"
],
"unique": true
},
{
"name": "idx_parent_id",
"fields": [
"parent_id"
]
},
{
"name": "idx_status",
"fields": [
"status"
]
}
],
"codes": [
{
"name": "org_type",
"source": "appcodes",
"code": "ORG_TYPE"
}
]
}

View File

@ -0,0 +1,81 @@
{
"summary": [
{
"name": "org_unit_change",
"title": "组织变更时间轴",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "org_id",
"title": "组织",
"type": "varchar",
"length": 32
},
{
"name": "change_type",
"title": "变更类型(add/edit/disable/move/split/merge/delete)",
"type": "varchar",
"length": 16
},
{
"name": "before_json",
"title": "变更前快照",
"type": "text"
},
{
"name": "after_json",
"title": "变更后快照",
"type": "text"
},
{
"name": "effective_date",
"title": "生效日期",
"type": "date"
},
{
"name": "operator_id",
"title": "操作人",
"type": "varchar",
"length": 32
},
{
"name": "flow_instance_id",
"title": "流程实例",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_org_id",
"fields": [
"org_id"
]
},
{
"name": "idx_created_at",
"fields": [
"created_at"
]
}
],
"codes": []
}

View File

@ -0,0 +1,302 @@
{
"summary": [
{
"name": "roster_employee",
"title": "员工主档",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "employee_no",
"title": "工号",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "name",
"title": "姓名",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "gender",
"title": "性别(字典GENDER)",
"type": "varchar",
"length": 16
},
{
"name": "id_type",
"title": "证件类型",
"type": "varchar",
"length": 16,
"default": "id_card"
},
{
"name": "id_number_cipher",
"title": "证件号密文(敏感)",
"type": "varchar",
"length": 256,
"sensitive": true
},
{
"name": "id_number_hash",
"title": "证件号哈希(确定性,唯一/黑名单匹配)",
"type": "varchar",
"length": 64,
"sensitive": true
},
{
"name": "id_valid_from",
"title": "证件有效期起",
"type": "date"
},
{
"name": "id_valid_to",
"title": "证件有效期止(长期=9999-12-31)",
"type": "date"
},
{
"name": "id_authority",
"title": "证件签发机关",
"type": "varchar",
"length": 128
},
{
"name": "id_source",
"title": "证件信息来源(字典ID_SOURCE)",
"type": "varchar",
"length": 16,
"default": "manual"
},
{
"name": "birthday",
"title": "出生日期",
"type": "date"
},
{
"name": "phone",
"title": "手机号(明文存储,按角色脱敏)",
"type": "varchar",
"length": 20,
"sensitive": true
},
{
"name": "email",
"title": "邮箱",
"type": "varchar",
"length": 128
},
{
"name": "org_id",
"title": "组织",
"type": "varchar",
"length": 32
},
{
"name": "position_id",
"title": "职位",
"type": "varchar",
"length": 32
},
{
"name": "job_id",
"title": "职务",
"type": "varchar",
"length": 32
},
{
"name": "grade_level_id",
"title": "职级",
"type": "varchar",
"length": 32
},
{
"name": "grade_rank_id",
"title": "职等",
"type": "varchar",
"length": 32
},
{
"name": "sequence_id",
"title": "序列",
"type": "varchar",
"length": 32
},
{
"name": "employee_type",
"title": "员工类型(字典EMP_TYPE)",
"type": "varchar",
"length": 16
},
{
"name": "employee_status",
"title": "员工状态(字典EMP_STATUS)",
"type": "varchar",
"length": 16
},
{
"name": "hire_date",
"title": "入职日期",
"type": "date"
},
{
"name": "probation_end_date",
"title": "试用期止(预计转正日)",
"type": "date"
},
{
"name": "regular_date",
"title": "转正日期",
"type": "date"
},
{
"name": "leave_date",
"title": "离职日期",
"type": "date"
},
{
"name": "company_id",
"title": "合同公司",
"type": "varchar",
"length": 32
},
{
"name": "work_location",
"title": "办公地点",
"type": "varchar",
"length": 128
},
{
"name": "direct_leader_id",
"title": "直属主管",
"type": "varchar",
"length": 32
},
{
"name": "prev_employee_id",
"title": "复职关联原档案ID",
"type": "varchar",
"length": 32
},
{
"name": "remark",
"title": "备注",
"type": "text"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_employee_no",
"fields": [
"employee_no"
],
"unique": true
},
{
"name": "uk_id_number_hash",
"fields": [
"id_number_hash"
],
"unique": true
},
{
"name": "idx_org_id",
"fields": [
"org_id"
]
},
{
"name": "idx_status",
"fields": [
"employee_status"
]
},
{
"name": "idx_hire_date",
"fields": [
"hire_date"
]
},
{
"name": "idx_probation_end",
"fields": [
"probation_end_date"
]
},
{
"name": "idx_direct_leader",
"fields": [
"direct_leader_id"
]
},
{
"name": "idx_prev_employee",
"fields": [
"prev_employee_id"
]
}
],
"codes": [
{
"name": "gender",
"source": "appcodes",
"code": "GENDER"
},
{
"name": "employee_type",
"source": "appcodes",
"code": "EMP_TYPE"
},
{
"name": "employee_status",
"source": "appcodes",
"code": "EMP_STATUS"
},
{
"name": "id_source",
"source": "appcodes",
"code": "ID_SOURCE"
},
{
"name": "id_type",
"source": "appcodes",
"code": "ID_TYPE"
}
]
}

View File

@ -0,0 +1,91 @@
{
"summary": [
{
"name": "roster_empno_rule",
"title": "工号规则",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "rule_name",
"title": "规则名称",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "prefix",
"title": "工号前缀",
"type": "varchar",
"length": 16
},
{
"name": "match_field",
"title": "匹配字段(如company_id)",
"type": "varchar",
"length": 32
},
{
"name": "match_value",
"title": "匹配值",
"type": "varchar",
"length": 64
},
{
"name": "seq_length",
"title": "流水号长度",
"type": "int",
"default": 4
},
{
"name": "current_seq",
"title": "当前流水号",
"type": "int",
"default": 0
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [],
"codes": []
}

View File

@ -0,0 +1,134 @@
{
"summary": [
{
"name": "roster_field_def",
"title": "花名册字段定义",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "group_id",
"title": "字段分组",
"type": "varchar",
"length": 32
},
{
"name": "field_code",
"title": "字段编码",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "field_name",
"title": "字段名称",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "field_type",
"title": "字段类型(text/number/date/select/multiselect/file)",
"type": "varchar",
"length": 16
},
{
"name": "options_json",
"title": "选项定义(字典code或自定义项)",
"type": "text"
},
{
"name": "required",
"title": "是否必填(0/1)",
"type": "int",
"default": 0
},
{
"name": "sensitive",
"title": "是否敏感(0/1,驱动脱敏与可见性)",
"type": "int",
"default": 0
},
{
"name": "editable_self",
"title": "员工自助可编辑(0/1)",
"type": "int",
"default": 0
},
{
"name": "need_audit",
"title": "自助修改需审核(0/1)",
"type": "int",
"default": 0
},
{
"name": "apply_types",
"title": "适用员工类型JSON",
"type": "text"
},
{
"name": "sort_no",
"title": "排序号",
"type": "int",
"default": 0
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_field_code",
"fields": [
"field_code"
],
"unique": true
},
{
"name": "idx_group_id",
"fields": [
"group_id"
]
}
],
"codes": []
}

View File

@ -0,0 +1,82 @@
{
"summary": [
{
"name": "roster_field_group",
"title": "花名册字段分组",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "group_code",
"title": "分组编码",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "group_name",
"title": "分组名称(工作信息/个人信息/绩效结果/培训记录)",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "sort_no",
"title": "排序号",
"type": "int",
"default": 0
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_group_code",
"fields": [
"group_code"
],
"unique": true
}
],
"codes": []
}

View File

@ -0,0 +1,87 @@
{
"summary": [
{
"name": "roster_field_value",
"title": "花名册字段值(EAV)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "employee_id",
"title": "员工档案",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "field_id",
"title": "字段定义",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "value_text",
"title": "文本值",
"type": "text"
},
{
"name": "value_number",
"title": "数值",
"type": "decimal",
"precision": 18,
"scale": 4
},
{
"name": "value_date",
"title": "日期值",
"type": "date"
},
{
"name": "value_file",
"title": "附件值(文件ID)",
"type": "varchar",
"length": 64
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_employee_field",
"fields": [
"employee_id",
"field_id"
],
"unique": true
},
{
"name": "idx_field_id",
"fields": [
"field_id"
]
}
],
"codes": []
}

View File

@ -0,0 +1,77 @@
{
"summary": [
{
"name": "roster_timeline",
"title": "员工时间轴",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "employee_id",
"title": "员工档案",
"type": "varchar",
"length": 32
},
{
"name": "event_type",
"title": "事件类型(entry/regular/transfer/leave/concurrent/contract/field_change/headcount/project/migrate)",
"type": "varchar",
"length": 24
},
{
"name": "event_date",
"title": "事件日期",
"type": "date"
},
{
"name": "title",
"title": "标题",
"type": "varchar",
"length": 128
},
{
"name": "content_json",
"title": "内容JSON",
"type": "text"
},
{
"name": "source_type",
"title": "来源类型",
"type": "varchar",
"length": 32
},
{
"name": "source_id",
"title": "来源ID",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_emp_date",
"fields": [
"employee_id",
"event_date"
]
}
],
"codes": []
}

View File

@ -0,0 +1,80 @@
{
"summary": [
{
"name": "roster_type_rule",
"title": "员工类型字段规则",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "employee_type",
"title": "员工类型(字典EMP_TYPE)",
"type": "varchar",
"length": 16,
"notnull": true
},
{
"name": "field_rules_json",
"title": "按类型必填/隐藏字段规则",
"type": "text"
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_employee_type",
"fields": [
"employee_type"
],
"unique": true
}
],
"codes": [
{
"name": "employee_type",
"source": "appcodes",
"code": "EMP_TYPE"
}
]
}

View File

@ -0,0 +1,82 @@
{
"summary": [
{
"name": "sys_announcement",
"title": "企业公告(F15)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "title",
"title": "标题",
"type": "varchar",
"length": 256,
"notnull": true
},
{
"name": "content",
"title": "内容",
"type": "text"
},
{
"name": "publish_scope_json",
"title": "发布范围",
"type": "text"
},
{
"name": "publish_time",
"title": "发布时间",
"type": "timestamp"
},
{
"name": "status",
"title": "状态(draft/published/offline)",
"type": "varchar",
"length": 16,
"default": "draft"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_status",
"fields": [
"status"
]
}
],
"codes": []
}

View File

@ -0,0 +1,120 @@
{
"summary": [
{
"name": "sys_audit_log",
"title": "操作日志(只增,F12)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "module",
"title": "模块(hr-org/hr-roster/...)",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "target_type",
"title": "对象类型(roster_employee/org_unit/...)",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "target_id",
"title": "对象ID",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "operation",
"title": "操作类型(字典AUDIT_OP)",
"type": "varchar",
"length": 16,
"notnull": true
},
{
"name": "operator_id",
"title": "操作人",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "operator_name",
"title": "操作人姓名",
"type": "varchar",
"length": 64,
"default": ""
},
{
"name": "before_json",
"title": "变更前快照",
"type": "text"
},
{
"name": "after_json",
"title": "变更后快照",
"type": "text"
},
{
"name": "request_ip",
"title": "请求IP",
"type": "varchar",
"length": 64
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_target",
"fields": [
"target_type",
"target_id"
]
},
{
"name": "idx_operator",
"fields": [
"operator_id"
]
},
{
"name": "idx_created_at",
"fields": [
"created_at"
]
},
{
"name": "idx_module_op",
"fields": [
"module",
"operation"
]
}
],
"codes": [
{
"name": "operation",
"source": "appcodes",
"code": "AUDIT_OP"
}
]
}

View File

@ -0,0 +1,68 @@
{
"summary": [
{
"name": "sys_care_config",
"title": "关怀配置(生日/周年,F15)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "care_type",
"title": "关怀类型(birthday/anniversary)",
"type": "varchar",
"length": 16,
"notnull": true
},
{
"name": "template",
"title": "文案模板",
"type": "text"
},
{
"name": "enable",
"title": "启用(0/1)",
"type": "int",
"default": 1
},
{
"name": "push_target",
"title": "推送对象(employee/leader)",
"type": "varchar",
"length": 16,
"default": "employee"
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_care_type",
"fields": [
"care_type"
],
"unique": true
}
],
"codes": []
}

View File

@ -0,0 +1,80 @@
{
"summary": [
{
"name": "sys_data_scope",
"title": "数据范围(F11)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "admin_user_id",
"title": "管理员用户",
"type": "varchar",
"length": 32
},
{
"name": "scope_type",
"title": "范围类型(org/field)",
"type": "varchar",
"length": 16
},
{
"name": "org_ids_json",
"title": "组织维度(含子树)",
"type": "text"
},
{
"name": "field_ids_json",
"title": "花名册字段维度",
"type": "text"
},
{
"name": "remark",
"title": "备注",
"type": "text"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_admin_user",
"fields": [
"admin_user_id"
]
}
],
"codes": []
}

View File

@ -0,0 +1,97 @@
{
"summary": [
{
"name": "sys_message",
"title": "站内消息(F15)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "receiver_id",
"title": "接收人",
"type": "varchar",
"length": 32
},
{
"name": "msg_type",
"title": "消息类型(todo/approval/remind/care/notice)",
"type": "varchar",
"length": 16
},
{
"name": "title",
"title": "标题",
"type": "varchar",
"length": 256
},
{
"name": "content",
"title": "内容",
"type": "text"
},
{
"name": "biz_type",
"title": "业务类型",
"type": "varchar",
"length": 32
},
{
"name": "biz_id",
"title": "业务ID",
"type": "varchar",
"length": 32
},
{
"name": "send_channel",
"title": "发送渠道(字典MSG_CHANNEL,一期仅site;D9)",
"type": "varchar",
"length": 16,
"default": "site"
},
{
"name": "is_read",
"title": "是否已读(0/1)",
"type": "int",
"default": 0
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_receiver_read",
"fields": [
"receiver_id",
"is_read"
]
},
{
"name": "idx_created_at",
"fields": [
"created_at"
]
}
],
"codes": [
{
"name": "send_channel",
"source": "appcodes",
"code": "MSG_CHANNEL"
}
]
}

View File

@ -0,0 +1,93 @@
{
"summary": [
{
"name": "sys_openapp",
"title": "API开放应用(一期预留,FEAT-B1-01⑦)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "app_key",
"title": "应用Key",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "app_secret_cipher",
"title": "应用密钥密文",
"type": "varchar",
"length": 256,
"sensitive": true
},
{
"name": "app_name",
"title": "应用名称",
"type": "varchar",
"length": 128
},
{
"name": "scope_json",
"title": "授权资源范围",
"type": "text"
},
{
"name": "rate_limit",
"title": "限流(req/s,默认10)",
"type": "int",
"default": 10
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_app_key",
"fields": [
"app_key"
],
"unique": true
}
],
"codes": []
}

View File

@ -0,0 +1,89 @@
{
"summary": [
{
"name": "sys_policy",
"title": "企业政策(F15)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "title",
"title": "标题",
"type": "varchar",
"length": 256,
"notnull": true
},
{
"name": "file_path",
"title": "政策文件(文件ID)",
"type": "varchar",
"length": 256
},
{
"name": "view_scope_json",
"title": "查阅范围",
"type": "text"
},
{
"name": "downloadable",
"title": "允许下载(0/1)",
"type": "int",
"default": 0
},
{
"name": "publish_time",
"title": "发布时间",
"type": "timestamp"
},
{
"name": "status",
"title": "状态(draft/published/offline)",
"type": "varchar",
"length": 16,
"default": "draft"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "idx_status",
"fields": [
"status"
]
}
],
"codes": []
}

View File

@ -0,0 +1,101 @@
{
"summary": [
{
"name": "sys_remind_rule",
"title": "通用提醒规则(F15)",
"pk": [
"id"
],
"charset": "utf8mb4",
"collate": "utf8mb4_unicode_ci"
}
],
"fields": [
{
"name": "id",
"title": "主键",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "scene_code",
"title": "提醒场景(字典REMIND_SCENE,≥6类)",
"type": "varchar",
"length": 32,
"notnull": true
},
{
"name": "rule_name",
"title": "规则名称",
"type": "varchar",
"length": 64,
"notnull": true
},
{
"name": "days_before",
"title": "提前天数",
"type": "int",
"default": 7
},
{
"name": "content_template",
"title": "提醒内容模板",
"type": "text"
},
{
"name": "target_role",
"title": "提醒对象(admin/employee/leader)",
"type": "varchar",
"length": 16,
"default": "admin"
},
{
"name": "status",
"title": "状态 active/inactive",
"type": "varchar",
"length": 16,
"notnull": true,
"default": "active"
},
{
"name": "created_by",
"title": "创建人",
"type": "varchar",
"length": 32
},
{
"name": "updated_by",
"title": "更新人",
"type": "varchar",
"length": 32
},
{
"name": "created_at",
"title": "创建时间",
"type": "timestamp"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "timestamp"
}
],
"indexes": [
{
"name": "uk_scene_rule",
"fields": [
"scene_code",
"rule_name"
],
"unique": true
}
],
"codes": [
{
"name": "scene_code",
"source": "appcodes",
"code": "REMIND_SCENE"
}
]
}

View File

@ -155,8 +155,8 @@ ORG = {
"title": "黑名单", "log": True, "fields": [
V("id", "主键", 32, notnull=True),
V("name", "姓名", 64),
V("id_number_hash", "证件号哈希(确定性,匹配用)", 64),
V("id_number_cipher", "证件号密文", 256),
V("id_number_hash", "证件号哈希(确定性,匹配用)", 64, sensitive=True),
V("id_number_cipher", "证件号密文", 256, sensitive=True),
V("reason", "拉黑原因", 256),
V("source", "来源(leave/manual)", 16),
V("source_employee_id", "来源员工档案", 32),
@ -183,8 +183,8 @@ ORG = {
V("employee_id", "员工档案(可空,待入职)", 32),
V("name", "姓名", 64, notnull=True),
V("id_type", "证件类型(字典ID_TYPE)", 16, default="id_card"),
V("id_number_cipher", "证件号密文", 256),
V("id_number_hash", "证件号哈希", 64),
V("id_number_cipher", "证件号密文", 256, sensitive=True),
V("id_number_hash", "证件号哈希", 64, sensitive=True),
F("id_valid_from", "证件有效期起", "date"),
F("id_valid_to", "证件有效期止(长期=9999-12-31)", "date"),
V("id_authority", "证件签发机关", 128),
@ -742,7 +742,7 @@ SYS = {
"title": "API开放应用(一期预留,FEAT-B1-01⑦)", "fields": [
V("id", "主键", 32, notnull=True),
V("app_key", "应用Key", 64, notnull=True),
V("app_secret_cipher", "应用密钥密文", 256),
V("app_secret_cipher", "应用密钥密文", 256, sensitive=True),
V("app_name", "应用名称", 128),
F("scope_json", "授权资源范围", "text"),
F("rate_limit", "限流(req/s,默认10)", "int", default=10),

View File

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*-
"""json2ddl 等价实现ocai database-table-definition-spec
读取 models/{module}/*.jsonsummary/fields/indexes/codes生成幂等 MySQL/MariaDB DDL
幂等性CREATE TABLE IF NOT EXISTS索引先查 information_schema 再按需补建可重跑
幂等性CREATE TABLE IF NOT EXISTS索引随建表语句一并声明可整体重跑不报错
用法python3 scripts/json2ddl.py <models根目录> [输出sql文件]
"""
import json, os, sys, glob
@ -26,7 +26,11 @@ def render_field(f):
if "default" in f and t != "timestamp":
dv = f["default"]
col += f" DEFAULT '{dv}'" if isinstance(dv, str) else f" DEFAULT {dv}"
col += f" COMMENT '{f['title']}'"
title = f["title"]
if f.get("sensitive"):
title += "【敏感:sensitive落库加密/脱敏展示】"
title = title.replace("'", " ")
col += f" COMMENT '{title}'"
return col
def render_index_sql(table, idx):
@ -45,23 +49,18 @@ def gen_table_ddl(path):
lines.append(render_index_sql(table, idx))
charset = s.get("charset", "utf8mb4")
collate = s.get("collate", "utf8mb4_unicode_ci")
title = s.get("title", table)
title = str(s.get("title", table)).replace("'", " ")
return table, (f"CREATE TABLE IF NOT EXISTS `{table}` (\n" + ",\n".join(lines) +
f"\n) ENGINE=InnoDB DEFAULT CHARSET={charset} COLLATE={collate} COMMENT='{title}';")
def gen_index_guard_sql(table, idx):
"""运行时补索引建表时已含此处供重跑补漏apply_ddl.py 使用)"""
kind = "UNIQUE INDEX" if idx.get("unique") else "INDEX"
cols = ",".join(f"`{c}`" for c in idx["fields"])
return f"ALTER TABLE `{table}` ADD {kind} `{idx['name']}` ({cols});"
def main():
src = sys.argv[1] if len(sys.argv) > 1 else "models"
out = sys.argv[2] if len(sys.argv) > 2 else None
parts = ["-- 人事系统 hr-web 批次1 DDLjson2ddl 生成,幂等可重跑)",
"-- 来源models/*.jsondatabase-design.md v3.049 表目标库hrs(MariaDB)",
"-- 执行mysql -utest -ptest123 hrs < mysql.ddl.sql 或 python3 scripts/apply_ddl.py",
"SET NAMES utf8mb4;", ""]
"-- 执行mysql -utest -ptest123 hrs < sql/V001__init_hrs.sql 或 python3 scripts/apply_ddl.py",
"SET NAMES utf8mb4;",
"SET FOREIGN_KEY_CHECKS=0;", ""]
n = 0
for moddir in sorted(glob.glob(os.path.join(src, "*"))):
if not os.path.isdir(moddir):
@ -76,9 +75,11 @@ def main():
parts.append(ddl)
parts.append("")
n += 1
parts.append("SET FOREIGN_KEY_CHECKS=1;")
parts.append(f"-- 共 {n} 张表")
sql = "\n".join(parts) + "\n"
if out:
os.makedirs(os.path.dirname(out) or ".", exist_ok=True)
with open(out, "w", encoding="utf-8") as f:
f.write(sql)
print(f"生成 {out}{n} 张表")

906
sql/V001__init_hrs.sql Normal file
View File

@ -0,0 +1,906 @@
-- 人事系统 hr-web 批次1 DDLjson2ddl 生成,幂等可重跑)
-- 来源models/*.jsondatabase-design.md v3.049 表目标库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_contract4 张)=====
-- 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_flow7 张)=====
-- 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_org23 张)=====
-- 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_roster7 张)=====
-- 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_system8 张)=====
-- 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 张表