# 资金服务平台数据库设计文档 > 版本: v1.0 > 更新日期: 2026-02-13 > 作者: zhangjf > 数据库: MySQL 8.0 > 字符集: utf8mb4 --- ## 一、数据库概览 ### 1.1 数据库信息 | 项目 | 值 | |------|-----| | 数据库名 | fund_platform | | 字符集 | utf8mb4 | | 排序规则 | utf8mb4_unicode_ci | | 存储引擎 | InnoDB | | 时区 | +08:00 | ### 1.2 表清单 | 模块 | 表名 | 说明 | 记录数 | |------|------|------|--------| | **系统管理** | sys_tenant | 租户表 | 2 | | | sys_dept | 部门表 | 7 | | | sys_user | 用户表 | 6 | | | sys_role | 角色表 | 7 | | | sys_menu | 菜单表 | 38 | | | sys_user_role | 用户角色关联表 | 6 | | | sys_role_menu | 角色菜单关联表 | 动态 | | | sys_operation_log | 操作日志表 | 动态 | | **客户管理** | customer | 客户表 | 3 | | | customer_contact | 客户联系人表 | 0 | | **项目管理** | project | 项目表 | 3 | | | project_member | 项目成员表 | 6 | | **需求工单** | requirement | 需求工单表 | 0 | | **支出管理** | expense_type | 支出类型表 | 12 | | | expense | 支出表 | 0 | | **应收款管理** | receivable | 应收款表 | 0 | | | receipt | 收款记录表 | 0 | --- ## 二、ER 图 ``` ┌─────────────────────────────────────────────────────────────────────────────────────────┐ │ 资金服务平台数据库 ER 图 │ ├─────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ sys_tenant │ │ sys_user │ │ sys_role │ │ │ │ (租户表) │ │ (用户表) │ │ (角色表) │ │ │ ├──────────────┤ ├──────────────┤ ├──────────────┤ │ │ │ PK tenant_id │◄────────┤ FK tenant_id │ │ FK tenant_id │ │ │ │ code │ │ PK user_id │◄───────►│ PK role_id │ │ │ │ name │ │ username │ │ code │ │ │ │ type │ │ password │ │ name │ │ │ │ status │ │ real_name │ │ type │ │ │ └──────────────┘ │ dept_id │────────►│ scope │ │ │ │ status │ └──────────────┘ │ │ └──────────────┘ ▲ │ │ ▲ │ │ │ │ │ │ │ ┌──────┴──────┐ ┌──────┴──────┐ │ │ │ sys_dept │ │sys_user_role│ │ │ │ (部门表) │ │(用户角色关联)│ │ │ ├─────────────┤ ├─────────────┤ │ │ │ PK dept_id │ │ PK id │ │ │ │ FK tenant_id│ │ FK user_id │ │ │ │ name │ │ FK role_id │ │ │ │ parent_id │ └─────────────┘ │ │ └─────────────┘ │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ customer │ │ project │ │ requirement │ │ │ │ (客户表) │ │ (项目表) │ │ (需求工单表) │ │ │ ├──────────────┤ ├──────────────┤ ├──────────────┤ │ │ │ PK customer_id│◄───────┤ FK customer_id│◄───────┤ FK customer_id│ │ │ │ FK tenant_id │ │ FK tenant_id │ │ FK tenant_id │ │ │ │ code │ │ PK project_id│◄───────┤ FK project_id│ │ │ │ name │ │ code │ │ PK req_id │ │ │ │ type │ │ name │ │ code │ │ │ │ level │ │ manager_id│ │ name │ │ │ └──────────────┘ │ status │ │ amount │ │ │ │ └──────────────┘ │ status │ │ │ │ ▲ └──────────────┘ │ │ │ │ │ │ │ ┌──────┴──────┐ │ │ │ │project_member│ │ │ │ │(项目成员表) │ │ │ │ ├─────────────┤ │ │ │ │ PK member_id│ │ │ │ │ FK project_id│ │ │ │ │ FK user_id │ │ │ │ │ role │ │ │ │ └─────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │customer_contact│ │ │ │(客户联系人表) │ │ │ ├──────────────┤ │ │ │ PK contact_id │ │ │ │ FK customer_id│ │ │ │ name │ │ │ │ phone │ │ │ │ is_primary │ │ │ └──────────────┘ │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ expense_type │ │ expense │ │ receivable │ │ │ │ (支出类型表) │ │ (支出表) │ │ (应收款表) │ │ │ ├──────────────┤ ├──────────────┤ ├──────────────┤ │ │ │ PK type_id │◄────────┤ FK type_id │ │ PK receiv_id │ │ │ │ FK tenant_id │ │ FK tenant_id │ │ FK tenant_id │ │ │ │ code │ │ PK expense_id│ │ FK project_id│ │ │ │ name │ │ code │ │ FK customer_id│ │ │ │ parent_id │ │ amount │ │ FK req_id │ │ │ └──────────────┘ │ date │ │ amount │ │ │ │ status │ │ status │ │ │ └──────────────┘ └──────┬───────┘ │ │ │ │ │ ┌──────┴──────┐ │ │ │ receipt │ │ │ │ (收款记录表) │ │ │ ├─────────────┤ │ │ │ PK receipt_id│ │ │ │ FK receiv_id │ │ │ │ amount │ │ │ │ date │ │ │ └─────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 三、表结构详细说明 ### 3.1 系统管理模块 #### 3.1.1 sys_tenant(租户表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | tenant_id | BIGINT | - | 是 | 自增 | 主键,租户ID | | tenant_code | VARCHAR | 50 | 是 | - | 租户编码(唯一) | | tenant_name | VARCHAR | 100 | 是 | - | 租户名称 | | tenant_type | TINYINT | - | 否 | 1 | 租户类型:1-一库多租户,2-一库一租户 | | contact_name | VARCHAR | 50 | 否 | - | 联系人姓名 | | contact_phone | VARCHAR | 20 | 否 | - | 联系人电话 | | contact_email | VARCHAR | 100 | 否 | - | 联系人邮箱 | | db_config | JSON | - | 否 | - | 数据库配置(一库一租户模式使用) | | status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 | | expire_time | DATETIME | - | 否 | - | 过期时间 | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | | updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 | **索引:** - PRIMARY KEY (`tenant_id`) - UNIQUE KEY `uk_code` (`tenant_code`) - INDEX `idx_status` (`status`) --- #### 3.1.2 sys_dept(部门表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | dept_id | BIGINT | - | 是 | 自增 | 主键,部门ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | dept_name | VARCHAR | 100 | 是 | - | 部门名称 | | parent_id | BIGINT | - | 否 | 0 | 父部门ID(0表示顶级部门) | | dept_code | VARCHAR | 50 | 否 | - | 部门编码 | | dept_level | INT | - | 否 | 1 | 部门层级 | | sort_order | INT | - | 否 | 0 | 排序顺序 | | leader | VARCHAR | 50 | 否 | - | 部门负责人 | | leader_phone | VARCHAR | 20 | 否 | - | 负责人电话 | | status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 | | remark | VARCHAR | 500 | 否 | - | 备注说明 | | created_by | BIGINT | - | 否 | - | 创建人ID | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | | updated_by | BIGINT | - | 否 | - | 更新人ID | | updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 | | deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 | **索引:** - PRIMARY KEY (`dept_id`) - INDEX `idx_tenant` (`tenant_id`) - INDEX `idx_parent` (`parent_id`) - INDEX `idx_status` (`status`) --- #### 3.1.3 sys_user(用户表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | user_id | BIGINT | - | 是 | 自增 | 主键,用户ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | username | VARCHAR | 50 | 是 | - | 用户名(登录账号) | | password | VARCHAR | 100 | 是 | - | 密码(BCrypt加密存储) | | real_name | VARCHAR | 50 | 是 | - | 真实姓名 | | gender | TINYINT | - | 否 | 0 | 性别:0-未知,1-男,2-女 | | phone | VARCHAR | 20 | 否 | - | 手机号码 | | email | VARCHAR | 100 | 否 | - | 邮箱地址 | | dept_id | BIGINT | - | 否 | - | 所属部门ID(外键) | | position | VARCHAR | 50 | 否 | - | 岗位/职位 | | avatar | VARCHAR | 255 | 否 | - | 头像URL | | status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 | | last_login_time | DATETIME | - | 否 | - | 最后登录时间 | | last_login_ip | VARCHAR | 50 | 否 | - | 最后登录IP | | created_by | BIGINT | - | 否 | - | 创建人ID | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | | updated_by | BIGINT | - | 否 | - | 更新人ID | | updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 | | deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 | **索引:** - PRIMARY KEY (`user_id`) - UNIQUE KEY `uk_tenant_username` (`tenant_id`, `username`) - INDEX `idx_tenant` (`tenant_id`) - INDEX `idx_dept` (`dept_id`) - INDEX `idx_status` (`status`) --- #### 3.1.4 sys_role(角色表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | role_id | BIGINT | - | 是 | 自增 | 主键,角色ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | role_code | VARCHAR | 50 | 是 | - | 角色编码 | | role_name | VARCHAR | 100 | 是 | - | 角色名称 | | role_type | VARCHAR | 20 | 否 | custom | 角色类型:system-系统角色,custom-自定义角色 | | data_scope | VARCHAR | 20 | 否 | self | 数据范围:all-全部,dept-本部门,self-本人 | | sort_order | INT | - | 否 | 0 | 排序顺序 | | status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 | | remark | VARCHAR | 500 | 否 | - | 备注说明 | | created_by | BIGINT | - | 否 | - | 创建人ID | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | | updated_by | BIGINT | - | 否 | - | 更新人ID | | updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 | | deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 | **索引:** - PRIMARY KEY (`role_id`) - UNIQUE KEY `uk_tenant_code` (`tenant_id`, `role_code`) - INDEX `idx_tenant` (`tenant_id`) - INDEX `idx_status` (`status`) --- #### 3.1.5 sys_menu(菜单表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | menu_id | BIGINT | - | 是 | 自增 | 主键,菜单ID | | tenant_id | BIGINT | - | 否 | 0 | 租户ID(0表示系统通用菜单) | | menu_name | VARCHAR | 100 | 是 | - | 菜单名称 | | menu_type | VARCHAR | 20 | 是 | - | 菜单类型:dir-目录,menu-菜单,button-按钮 | | parent_id | BIGINT | - | 否 | 0 | 父菜单ID(0表示顶级菜单) | | menu_level | INT | - | 否 | 1 | 菜单层级 | | icon | VARCHAR | 100 | 否 | - | 菜单图标 | | path | VARCHAR | 200 | 否 | - | 路由路径 | | component | VARCHAR | 200 | 否 | - | 组件路径 | | permission | VARCHAR | 100 | 否 | - | 权限标识(如:user:list) | | sort_order | INT | - | 否 | 0 | 排序顺序 | | status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 | | remark | VARCHAR | 500 | 否 | - | 备注说明 | | created_by | BIGINT | - | 否 | - | 创建人ID | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | | updated_by | BIGINT | - | 否 | - | 更新人ID | | updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 | | deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 | **索引:** - PRIMARY KEY (`menu_id`) - INDEX `idx_tenant` (`tenant_id`) - INDEX `idx_parent` (`parent_id`) - INDEX `idx_type` (`menu_type`) - INDEX `idx_status` (`status`) --- #### 3.1.6 sys_user_role(用户角色关联表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | id | BIGINT | - | 是 | 自增 | 主键,ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | user_id | BIGINT | - | 是 | - | 用户ID(外键) | | role_id | BIGINT | - | 是 | - | 角色ID(外键) | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | **索引:** - PRIMARY KEY (`id`) - UNIQUE KEY `uk_user_role` (`tenant_id`, `user_id`, `role_id`) - INDEX `idx_user` (`user_id`) - INDEX `idx_role` (`role_id`) --- #### 3.1.7 sys_role_menu(角色菜单关联表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | id | BIGINT | - | 是 | 自增 | 主键,ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | role_id | BIGINT | - | 是 | - | 角色ID(外键) | | menu_id | BIGINT | - | 是 | - | 菜单ID(外键) | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | **索引:** - PRIMARY KEY (`id`) - UNIQUE KEY `uk_role_menu` (`tenant_id`, `role_id`, `menu_id`) - INDEX `idx_role` (`role_id`) - INDEX `idx_menu` (`menu_id`) --- #### 3.1.8 sys_operation_log(操作日志表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | log_id | BIGINT | - | 是 | 自增 | 主键,日志ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | user_id | BIGINT | - | 否 | - | 操作人ID(外键) | | username | VARCHAR | 50 | 否 | - | 操作人用户名 | | operation | VARCHAR | 100 | 否 | - | 操作描述 | | method | VARCHAR | 200 | 否 | - | 操作方法 | | params | TEXT | - | 否 | - | 操作参数(JSON格式) | | ip | VARCHAR | 50 | 否 | - | 操作IP | | user_agent | VARCHAR | 500 | 否 | - | 用户代理 | | operation_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 操作时间 | | cost_time | BIGINT | - | 否 | 0 | 耗时(毫秒) | | result | VARCHAR | 20 | 否 | success | 操作结果:success-成功,fail-失败 | | error_msg | TEXT | - | 否 | - | 错误信息 | **索引:** - PRIMARY KEY (`log_id`) - INDEX `idx_tenant` (`tenant_id`) - INDEX `idx_user` (`user_id`) - INDEX `idx_time` (`operation_time`) - INDEX `idx_result` (`result`) --- ### 3.2 客户管理模块 #### 3.2.1 customer(客户表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | customer_id | BIGINT | - | 是 | 自增 | 主键,客户ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | customer_code | VARCHAR | 50 | 是 | - | 客户编码(唯一) | | customer_name | VARCHAR | 200 | 是 | - | 客户名称 | | customer_short | VARCHAR | 100 | 否 | - | 客户简称 | | customer_type | VARCHAR | 20 | 否 | enterprise | 客户类型:enterprise-企业,individual-个人 | | industry | VARCHAR | 50 | 否 | - | 所属行业 | | scale | VARCHAR | 20 | 否 | - | 企业规模:small-小型,medium-中型,large-大型 | | level | VARCHAR | 20 | 否 | normal | 客户等级:A/B/C/D/normal | | tax_no | VARCHAR | 50 | 否 | - | 纳税人识别号 | | legal_person | VARCHAR | 50 | 否 | - | 法定代表人 | | address | VARCHAR | 500 | 否 | - | 公司地址 | | phone | VARCHAR | 20 | 否 | - | 联系电话 | | email | VARCHAR | 100 | 否 | - | 邮箱地址 | | website | VARCHAR | 200 | 否 | - | 公司网站 | | status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 | | remark | VARCHAR | 500 | 否 | - | 备注说明 | | cooperation_start | DATE | - | 否 | - | 合作开始日期 | | cooperation_end | DATE | - | 否 | - | 合作结束日期 | | created_by | BIGINT | - | 否 | - | 创建人ID | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | | updated_by | BIGINT | - | 否 | - | 更新人ID | | updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 | | deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 | **索引:** - PRIMARY KEY (`customer_id`) - UNIQUE KEY `uk_tenant_code` (`tenant_id`, `customer_code`) - INDEX `idx_tenant` (`tenant_id`) - INDEX `idx_status` (`status`) - INDEX `idx_level` (`level`) --- #### 3.2.2 customer_contact(客户联系人表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | contact_id | BIGINT | - | 是 | 自增 | 主键,联系人ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | customer_id | BIGINT | - | 是 | - | 客户ID(外键) | | contact_name | VARCHAR | 50 | 是 | - | 联系人姓名 | | position | VARCHAR | 50 | 否 | - | 职位/职务 | | department | VARCHAR | 100 | 否 | - | 所属部门 | | phone | VARCHAR | 20 | 否 | - | 联系电话 | | mobile | VARCHAR | 20 | 否 | - | 手机号码 | | email | VARCHAR | 100 | 否 | - | 邮箱地址 | | wechat | VARCHAR | 50 | 否 | - | 微信号 | | qq | VARCHAR | 20 | 否 | - | QQ号 | | is_primary | TINYINT | - | 否 | 0 | 是否主要联系人:0-否,1-是 | | sort_order | INT | - | 否 | 0 | 排序顺序 | | status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 | | remark | VARCHAR | 200 | 否 | - | 备注说明 | | created_by | BIGINT | - | 否 | - | 创建人ID | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | | updated_by | BIGINT | - | 否 | - | 更新人ID | | updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 | | deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 | **索引:** - PRIMARY KEY (`contact_id`) - INDEX `idx_tenant` (`tenant_id`) - INDEX `idx_customer` (`customer_id`) - INDEX `idx_status` (`status`) --- ### 3.3 项目管理模块 #### 3.3.1 project(项目表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | project_id | BIGINT | - | 是 | 自增 | 主键,项目ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | project_code | VARCHAR | 50 | 是 | - | 项目编号(唯一) | | project_name | VARCHAR | 200 | 是 | - | 项目名称 | | project_short | VARCHAR | 100 | 否 | - | 项目简称 | | customer_id | BIGINT | - | 是 | - | 客户ID(外键) | | project_type | VARCHAR | 20 | 否 | development | 项目类型:development-开发,maintenance-维护,consulting-咨询 | | project_manager_id | BIGINT | - | 否 | - | 项目经理ID(外键) | | start_date | DATE | - | 否 | - | 项目开始日期 | | end_date | DATE | - | 否 | - | 项目结束日期 | | budget_amount | DECIMAL | 15,2 | 否 | 0.00 | 项目预算金额 | | contract_amount | DECIMAL | 15,2 | 否 | 0.00 | 合同金额 | | status | VARCHAR | 20 | 否 | preparing | 项目状态:preparing-筹备中,ongoing-进行中,completed-已完成,archived-已归档,cancelled-已取消 | | progress | INT | - | 否 | 0 | 项目进度(0-100) | | description | TEXT | - | 否 | - | 项目描述 | | remark | VARCHAR | 500 | 否 | - | 备注说明 | | attachment_url | VARCHAR | 500 | 否 | - | 附件URL | | created_by | BIGINT | - | 否 | - | 创建人ID | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | | updated_by | BIGINT | - | 否 | - | 更新人ID | | updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 | | deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 | **索引:** - PRIMARY KEY (`project_id`) - UNIQUE KEY `uk_tenant_code` (`tenant_id`, `project_code`) - INDEX `idx_tenant` (`tenant_id`) - INDEX `idx_customer` (`customer_id`) - INDEX `idx_manager` (`project_manager_id`) - INDEX `idx_status` (`status`) --- #### 3.3.2 project_member(项目成员表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | member_id | BIGINT | - | 是 | 自增 | 主键,成员关系ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | project_id | BIGINT | - | 是 | - | 项目ID(外键) | | user_id | BIGINT | - | 是 | - | 用户ID(外键) | | role | VARCHAR | 50 | 否 | member | 项目角色:pm-项目经理,dev-开发,test-测试,finance-财务,member-普通成员 | | join_date | DATE | - | 否 | - | 加入日期 | | leave_date | DATE | - | 否 | - | 离开日期 | | workload | DECIMAL | 5,2 | 否 | 0.00 | 工作量占比(0-100) | | status | TINYINT | - | 否 | 1 | 状态:0-已离开,1-在职 | | remark | VARCHAR | 200 | 否 | - | 备注说明 | | created_by | BIGINT | - | 否 | - | 创建人ID | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | | updated_by | BIGINT | - | 否 | - | 更新人ID | | updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 | | deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 | **索引:** - PRIMARY KEY (`member_id`) - UNIQUE KEY `uk_project_user` (`tenant_id`, `project_id`, `user_id`) - INDEX `idx_project` (`project_id`) - INDEX `idx_user` (`user_id`) --- ### 3.4 需求工单模块 #### 3.4.1 requirement(需求工单表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | requirement_id | BIGINT | - | 是 | 自增 | 主键,需求ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | requirement_code | VARCHAR | 50 | 是 | - | 需求编号(唯一) | | requirement_name | VARCHAR | 200 | 是 | - | 需求名称 | | description | TEXT | - | 否 | - | 需求描述 | | project_id | BIGINT | - | 是 | - | 项目ID(外键) | | customer_id | BIGINT | - | 是 | - | 客户ID(外键) | | priority | VARCHAR | 20 | 否 | normal | 优先级:high-高,normal-中,low-低 | | estimated_hours | DECIMAL | 8,2 | 否 | 0.00 | 预估开发工时(小时) | | actual_hours | DECIMAL | 8,2 | 否 | 0.00 | 实际开发工时(小时) | | planned_start | DATE | - | 否 | - | 计划开始日期 | | planned_end | DATE | - | 否 | - | 计划结束日期 | | actual_start | DATE | - | 否 | - | 实际开始日期 | | actual_end | DATE | - | 否 | - | 实际结束日期 | | delivery_date | DATE | - | 否 | - | 交付日期 | | receivable_amount | DECIMAL | 15,2 | 否 | 0.00 | 应收款金额 | | receivable_date | DATE | - | 否 | - | 应收款日期 | | status | VARCHAR | 20 | 否 | pending | 状态:pending-待开发,developing-开发中,delivered-已交付,completed-已完成 | | progress | INT | - | 否 | 0 | 开发进度(0-100) | | attachment_url | VARCHAR | 500 | 否 | - | 附件URL | | created_by | BIGINT | - | 否 | - | 创建人ID | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | | updated_by | BIGINT | - | 否 | - | 更新人ID | | updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 | | deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 | **索引:** - PRIMARY KEY (`requirement_id`) - UNIQUE KEY `uk_tenant_code` (`tenant_id`, `requirement_code`) - INDEX `idx_tenant` (`tenant_id`) - INDEX `idx_project` (`project_id`) - INDEX `idx_customer` (`customer_id`) - INDEX `idx_status` (`status`) --- ### 3.5 支出管理模块 #### 3.5.1 expense_type(支出类型表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | type_id | BIGINT | - | 是 | 自增 | 主键,支出类型ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | type_code | VARCHAR | 50 | 否 | - | 支出类型编码 | | type_name | VARCHAR | 100 | 是 | - | 支出类型名称 | | parent_id | BIGINT | - | 否 | 0 | 父类型ID(0表示一级类型) | | type_level | INT | - | 否 | 1 | 类型层级 | | sort_order | INT | - | 否 | 0 | 排序顺序 | | description | VARCHAR | 200 | 否 | - | 类型描述 | | status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 | | created_by | BIGINT | - | 否 | - | 创建人ID | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | | updated_by | BIGINT | - | 否 | - | 更新人ID | | updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 | | deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 | **索引:** - PRIMARY KEY (`type_id`) - INDEX `idx_tenant` (`tenant_id`) - INDEX `idx_parent` (`parent_id`) - INDEX `idx_status` (`status`) --- #### 3.5.2 expense(支出表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | expense_id | BIGINT | - | 是 | 自增 | 主键,支出ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | expense_code | VARCHAR | 50 | 是 | - | 支出编号(唯一) | | expense_type_id | BIGINT | - | 是 | - | 支出类型ID(外键) | | expense_amount | DECIMAL | 15,2 | 否 | 0.00 | 支出金额 | | expense_date | DATE | - | 否 | - | 支出日期 | | expense_reason | TEXT | - | 否 | - | 支出事由 | | project_id | BIGINT | - | 否 | - | 所属项目ID(外键) | | applicant_id | BIGINT | - | 是 | - | 申请人ID(外键) | | department_id | BIGINT | - | 否 | - | 申请部门ID(外键) | | payment_method | VARCHAR | 20 | 否 | transfer | 付款方式:transfer-转账,cash-现金,check-支票,other-其他 | | payment_account | VARCHAR | 100 | 否 | - | 付款账户 | | attachment_url | VARCHAR | 500 | 否 | - | 附件URL | | status | VARCHAR | 20 | 否 | pending | 状态:pending-待付款,paid-已付款,completed-已完成,cancelled-已作废 | | payment_date | DATE | - | 否 | - | 付款日期 | | payment_voucher | VARCHAR | 255 | 否 | - | 付款凭证 | | remark | VARCHAR | 500 | 否 | - | 备注说明 | | created_by | BIGINT | - | 否 | - | 创建人ID | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | | updated_by | BIGINT | - | 否 | - | 更新人ID | | updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 | | deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 | **索引:** - PRIMARY KEY (`expense_id`) - UNIQUE KEY `uk_tenant_code` (`tenant_id`, `expense_code`) - INDEX `idx_tenant` (`tenant_id`) - INDEX `idx_type` (`expense_type_id`) - INDEX `idx_project` (`project_id`) - INDEX `idx_applicant` (`applicant_id`) - INDEX `idx_status` (`status`) --- ### 3.6 应收款管理模块 #### 3.6.1 receivable(应收款表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | receivable_id | BIGINT | - | 是 | 自增 | 主键,应收款ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | receivable_code | VARCHAR | 50 | 是 | - | 应收款编号(唯一) | | requirement_id | BIGINT | - | 是 | - | 需求ID(外键) | | project_id | BIGINT | - | 是 | - | 项目ID(外键) | | customer_id | BIGINT | - | 是 | - | 客户ID(外键) | | receivable_amount | DECIMAL | 15,2 | 否 | 0.00 | 应收款金额 | | receivable_date | DATE | - | 否 | - | 应收款日期 | | payment_due_date | DATE | - | 否 | - | 付款截止日期 | | payment_method | VARCHAR | 20 | 否 | - | 付款方式:transfer-转账,cash-现金,check-支票,other-其他 | | bank_account | VARCHAR | 100 | 否 | - | 收款账户 | | status | VARCHAR | 20 | 否 | pending | 状态:pending-待收款,partial-部分收款,received-已收款,overdue-逾期 | | received_amount | DECIMAL | 15,2 | 否 | 0.00 | 已收款金额 | | unpaid_amount | DECIMAL | 15,2 | 否 | 0.00 | 未收款金额 | | overdue_days | INT | - | 否 | 0 | 逾期天数 | | remark | VARCHAR | 500 | 否 | - | 备注说明 | | created_by | BIGINT | - | 否 | - | 创建人ID | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | | updated_by | BIGINT | - | 否 | - | 更新人ID | | updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 | | deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 | **索引:** - PRIMARY KEY (`receivable_id`) - UNIQUE KEY `uk_tenant_code` (`tenant_id`, `receivable_code`) - INDEX `idx_tenant` (`tenant_id`) - INDEX `idx_requirement` (`requirement_id`) - INDEX `idx_project` (`project_id`) - INDEX `idx_customer` (`customer_id`) - INDEX `idx_status` (`status`) --- #### 3.6.2 receipt(收款记录表) | 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|------|------|------|--------|------| | receipt_id | BIGINT | - | 是 | 自增 | 主键,收款记录ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | receipt_code | VARCHAR | 50 | 是 | - | 收款编号(唯一) | | receivable_id | BIGINT | - | 是 | - | 应收款ID(外键) | | receipt_amount | DECIMAL | 15,2 | 否 | 0.00 | 收款金额 | | receipt_date | DATE | - | 否 | - | 收款日期 | | receipt_method | VARCHAR | 20 | 否 | transfer | 收款方式:transfer-转账,cash-现金,check-支票,other-其他 | | receipt_account | VARCHAR | 100 | 否 | - | 收款账户 | | payer_name | VARCHAR | 100 | 否 | - | 付款方名称 | | receipt_voucher | VARCHAR | 255 | 否 | - | 收款凭证URL | | operator_id | BIGINT | - | 否 | - | 操作人ID(外键) | | remark | VARCHAR | 200 | 否 | - | 备注说明 | | created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 | **索引:** - PRIMARY KEY (`receipt_id`) - UNIQUE KEY `uk_tenant_code` (`tenant_id`, `receipt_code`) - INDEX `idx_tenant` (`tenant_id`) - INDEX `idx_receivable` (`receivable_id`) --- ## 四、数据库设计规范 ### 4.1 命名规范 | 项目 | 规范 | 示例 | |------|------|------| | 数据库名 | 小写,下划线分隔 | fund_platform | | 表名 | 小写,下划线分隔 | sys_user | | 字段名 | 小写,下划线分隔 | user_name | | 索引名 | 前缀_表名_字段名 | uk_tenant_username | | 外键名 | fk_表名_字段名 | fk_user_dept | ### 4.2 字段规范 | 字段类型 | 使用场景 | 示例 | |----------|----------|------| | BIGINT | 主键、外键、ID | user_id | | VARCHAR(50) | 编码、用户名、短文本 | user_code | | VARCHAR(100) | 名称、标题 | user_name | | VARCHAR(200) | 长名称、URL | project_name | | VARCHAR(500) | 备注、描述 | remark | | TEXT | 长文本、JSON | description | | TINYINT | 状态、布尔值 | status | | INT | 数量、排序 | sort_order | | DECIMAL(15,2) | 金额 | amount | | DATETIME | 日期时间 | created_time | | DATE | 日期 | start_date | ### 4.3 通用字段 所有表必须包含以下字段: | 字段名 | 类型 | 说明 | |--------|------|------| | created_by | BIGINT | 创建人ID | | created_time | DATETIME | 创建时间(DEFAULT CURRENT_TIMESTAMP) | | updated_by | BIGINT | 更新人ID | | updated_time | DATETIME | 更新时间(DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) | | deleted | TINYINT | 逻辑删除标志(DEFAULT 0) | --- **文档结束**