fundplatform/sql/fund_platform_schema.sql

442 lines
25 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================
-- 资金服务平台数据库结构
-- 数据库: fund_platform
-- 字符集: utf8mb4
-- ============================================
USE fund_platform;
-- ============================================
-- 1. 系统管理模块表结构
-- ============================================
-- 租户表
CREATE TABLE IF NOT EXISTS sys_tenant (
tenant_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '租户ID',
tenant_code VARCHAR(50) NOT NULL UNIQUE COMMENT '租户编码',
tenant_name VARCHAR(100) NOT NULL COMMENT '租户名称',
tenant_type TINYINT DEFAULT 1 COMMENT '租户类型1-一库多租户2-一库一租户',
contact_name VARCHAR(50) COMMENT '联系人姓名',
contact_phone VARCHAR(20) COMMENT '联系人电话',
contact_email VARCHAR(100) COMMENT '联系人邮箱',
db_config JSON COMMENT '数据库配置(一库一租户模式使用)',
status TINYINT DEFAULT 1 COMMENT '状态0-禁用1-启用',
expire_time DATETIME COMMENT '过期时间',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_code (tenant_code),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户表';
-- 部门表
CREATE TABLE IF NOT EXISTS sys_dept (
dept_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '部门ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
dept_name VARCHAR(100) NOT NULL COMMENT '部门名称',
parent_id BIGINT DEFAULT 0 COMMENT '父部门ID0表示顶级部门',
dept_code VARCHAR(50) COMMENT '部门编码',
dept_level INT DEFAULT 1 COMMENT '部门层级',
sort_order INT DEFAULT 0 COMMENT '排序顺序',
leader VARCHAR(50) COMMENT '部门负责人',
leader_phone VARCHAR(20) COMMENT '负责人电话',
status TINYINT DEFAULT 1 COMMENT '状态0-禁用1-启用',
remark VARCHAR(500) COMMENT '备注说明',
created_by BIGINT COMMENT '创建人ID',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_by BIGINT COMMENT '更新人ID',
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
INDEX idx_tenant (tenant_id),
INDEX idx_parent (parent_id),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门表';
-- 用户表
CREATE TABLE IF NOT EXISTS sys_user (
user_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
username VARCHAR(50) NOT NULL COMMENT '用户名(登录账号)',
password VARCHAR(100) NOT NULL COMMENT '密码(加密存储)',
real_name VARCHAR(50) NOT NULL COMMENT '真实姓名',
gender TINYINT DEFAULT 0 COMMENT '性别0-未知1-男2-女',
phone VARCHAR(20) COMMENT '手机号码',
email VARCHAR(100) COMMENT '邮箱地址',
dept_id BIGINT COMMENT '所属部门ID',
position VARCHAR(50) COMMENT '岗位/职位',
avatar VARCHAR(255) COMMENT '头像URL',
status TINYINT DEFAULT 1 COMMENT '状态0-禁用1-启用',
last_login_time DATETIME COMMENT '最后登录时间',
last_login_ip VARCHAR(50) COMMENT '最后登录IP',
created_by BIGINT COMMENT '创建人ID',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_by BIGINT COMMENT '更新人ID',
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
UNIQUE KEY uk_tenant_username (tenant_id, username),
INDEX idx_tenant (tenant_id),
INDEX idx_dept (dept_id),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
-- 角色表
CREATE TABLE IF NOT EXISTS sys_role (
role_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '角色ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
role_code VARCHAR(50) NOT NULL COMMENT '角色编码',
role_name VARCHAR(100) NOT NULL COMMENT '角色名称',
role_type VARCHAR(20) DEFAULT 'custom' COMMENT '角色类型system-系统角色custom-自定义角色',
data_scope VARCHAR(20) DEFAULT 'self' COMMENT '数据范围all-全部dept-本部门self-本人',
sort_order INT DEFAULT 0 COMMENT '排序顺序',
status TINYINT DEFAULT 1 COMMENT '状态0-禁用1-启用',
remark VARCHAR(500) COMMENT '备注说明',
created_by BIGINT COMMENT '创建人ID',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_by BIGINT COMMENT '更新人ID',
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
UNIQUE KEY uk_tenant_code (tenant_id, role_code),
INDEX idx_tenant (tenant_id),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
-- 菜单表
CREATE TABLE IF NOT EXISTS sys_menu (
menu_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '菜单ID',
tenant_id BIGINT DEFAULT 0 COMMENT '租户ID0表示系统通用菜单',
menu_name VARCHAR(100) NOT NULL COMMENT '菜单名称',
menu_type VARCHAR(20) NOT NULL COMMENT '菜单类型dir-目录menu-菜单button-按钮',
parent_id BIGINT DEFAULT 0 COMMENT '父菜单ID0表示顶级菜单',
menu_level INT DEFAULT 1 COMMENT '菜单层级',
icon VARCHAR(100) COMMENT '菜单图标',
path VARCHAR(200) COMMENT '路由路径',
component VARCHAR(200) COMMENT '组件路径',
permission VARCHAR(100) COMMENT '权限标识user:list',
sort_order INT DEFAULT 0 COMMENT '排序顺序',
status TINYINT DEFAULT 1 COMMENT '状态0-禁用1-启用',
remark VARCHAR(500) COMMENT '备注说明',
created_by BIGINT COMMENT '创建人ID',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_by BIGINT COMMENT '更新人ID',
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
INDEX idx_tenant (tenant_id),
INDEX idx_parent (parent_id),
INDEX idx_type (menu_type),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='菜单表';
-- 用户角色关联表
CREATE TABLE IF NOT EXISTS sys_user_role (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
user_id BIGINT NOT NULL COMMENT '用户ID',
role_id BIGINT NOT NULL COMMENT '角色ID',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
UNIQUE KEY uk_user_role (tenant_id, user_id, role_id),
INDEX idx_user (user_id),
INDEX idx_role (role_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';
-- 角色菜单关联表
CREATE TABLE IF NOT EXISTS sys_role_menu (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
role_id BIGINT NOT NULL COMMENT '角色ID',
menu_id BIGINT NOT NULL COMMENT '菜单ID',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
UNIQUE KEY uk_role_menu (tenant_id, role_id, menu_id),
INDEX idx_role (role_id),
INDEX idx_menu (menu_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色菜单关联表';
-- 操作日志表
CREATE TABLE IF NOT EXISTS sys_operation_log (
log_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '日志ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
user_id BIGINT COMMENT '操作人ID',
username VARCHAR(50) COMMENT '操作人用户名',
operation VARCHAR(100) COMMENT '操作描述',
method VARCHAR(200) COMMENT '操作方法',
params TEXT COMMENT '操作参数JSON格式',
ip VARCHAR(50) COMMENT '操作IP',
user_agent VARCHAR(500) COMMENT '用户代理',
operation_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
cost_time BIGINT DEFAULT 0 COMMENT '耗时(毫秒)',
result VARCHAR(20) DEFAULT 'success' COMMENT '操作结果success-成功fail-失败',
error_msg TEXT COMMENT '错误信息',
INDEX idx_tenant (tenant_id),
INDEX idx_user (user_id),
INDEX idx_time (operation_time),
INDEX idx_result (result)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作日志表';
-- ============================================
-- 2. 客户管理模块表结构
-- ============================================
-- 客户表
CREATE TABLE IF NOT EXISTS customer (
customer_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '客户ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
customer_code VARCHAR(50) NOT NULL COMMENT '客户编码(唯一)',
customer_name VARCHAR(200) NOT NULL COMMENT '客户名称',
customer_short VARCHAR(100) COMMENT '客户简称',
customer_type VARCHAR(20) DEFAULT 'enterprise' COMMENT '客户类型enterprise-企业individual-个人',
industry VARCHAR(50) COMMENT '所属行业',
scale VARCHAR(20) COMMENT '企业规模small-小型medium-中型large-大型',
level VARCHAR(20) DEFAULT 'normal' COMMENT '客户等级A/B/C/D/normal',
tax_no VARCHAR(50) COMMENT '纳税人识别号',
legal_person VARCHAR(50) COMMENT '法定代表人',
address VARCHAR(500) COMMENT '公司地址',
phone VARCHAR(20) COMMENT '联系电话',
email VARCHAR(100) COMMENT '邮箱地址',
website VARCHAR(200) COMMENT '公司网站',
status TINYINT DEFAULT 1 COMMENT '状态0-禁用1-启用',
remark VARCHAR(500) COMMENT '备注说明',
cooperation_start DATE COMMENT '合作开始日期',
cooperation_end DATE COMMENT '合作结束日期',
created_by BIGINT COMMENT '创建人ID',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_by BIGINT COMMENT '更新人ID',
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
UNIQUE KEY uk_tenant_code (tenant_id, customer_code),
INDEX idx_tenant (tenant_id),
INDEX idx_status (status),
INDEX idx_level (level)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户表';
-- 客户联系人表
CREATE TABLE IF NOT EXISTS customer_contact (
contact_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '联系人ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
customer_id BIGINT NOT NULL COMMENT '客户ID',
contact_name VARCHAR(50) NOT NULL COMMENT '联系人姓名',
position VARCHAR(50) COMMENT '职位/职务',
department VARCHAR(100) COMMENT '所属部门',
phone VARCHAR(20) COMMENT '联系电话',
mobile VARCHAR(20) COMMENT '手机号码',
email VARCHAR(100) COMMENT '邮箱地址',
wechat VARCHAR(50) COMMENT '微信号',
qq VARCHAR(20) COMMENT 'QQ号',
is_primary TINYINT DEFAULT 0 COMMENT '是否主要联系人0-否1-是',
sort_order INT DEFAULT 0 COMMENT '排序顺序',
status TINYINT DEFAULT 1 COMMENT '状态0-禁用1-启用',
remark VARCHAR(200) COMMENT '备注说明',
created_by BIGINT COMMENT '创建人ID',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_by BIGINT COMMENT '更新人ID',
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
INDEX idx_tenant (tenant_id),
INDEX idx_customer (customer_id),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户联系人表';
-- ============================================
-- 3. 项目管理模块表结构
-- ============================================
-- 项目表
CREATE TABLE IF NOT EXISTS project (
project_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '项目ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
project_code VARCHAR(50) NOT NULL COMMENT '项目编号(唯一)',
project_name VARCHAR(200) NOT NULL COMMENT '项目名称',
project_short VARCHAR(100) COMMENT '项目简称',
customer_id BIGINT NOT NULL COMMENT '客户ID',
project_type VARCHAR(20) DEFAULT 'development' COMMENT '项目类型development-开发maintenance-维护consulting-咨询',
project_manager_id BIGINT COMMENT '项目经理ID',
start_date DATE COMMENT '项目开始日期',
end_date DATE COMMENT '项目结束日期',
budget_amount DECIMAL(15,2) DEFAULT 0.00 COMMENT '项目预算金额',
contract_amount DECIMAL(15,2) DEFAULT 0.00 COMMENT '合同金额',
status VARCHAR(20) DEFAULT 'preparing' COMMENT '项目状态preparing-筹备中ongoing-进行中completed-已完成archived-已归档cancelled-已取消',
progress INT DEFAULT 0 COMMENT '项目进度0-100',
description TEXT COMMENT '项目描述',
remark VARCHAR(500) COMMENT '备注说明',
attachment_url VARCHAR(500) COMMENT '附件URL',
created_by BIGINT COMMENT '创建人ID',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_by BIGINT COMMENT '更新人ID',
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='项目表';
-- 项目成员表
CREATE TABLE IF NOT EXISTS project_member (
member_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '成员关系ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
project_id BIGINT NOT NULL COMMENT '项目ID',
user_id BIGINT NOT NULL COMMENT '用户ID',
role VARCHAR(50) DEFAULT 'member' COMMENT '项目角色pm-项目经理dev-开发test-测试finance-财务member-普通成员',
join_date DATE COMMENT '加入日期',
leave_date DATE COMMENT '离开日期',
workload DECIMAL(5,2) DEFAULT 0.00 COMMENT '工作量占比0-100',
status TINYINT DEFAULT 1 COMMENT '状态0-已离开1-在职',
remark VARCHAR(200) COMMENT '备注说明',
created_by BIGINT COMMENT '创建人ID',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_by BIGINT COMMENT '更新人ID',
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
UNIQUE KEY uk_project_user (tenant_id, project_id, user_id),
INDEX idx_project (project_id),
INDEX idx_user (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='项目成员表';
-- ============================================
-- 4. 需求工单模块表结构
-- ============================================
-- 需求工单表
CREATE TABLE IF NOT EXISTS requirement (
requirement_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '需求ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
requirement_code VARCHAR(50) NOT NULL COMMENT '需求编号(唯一)',
requirement_name VARCHAR(200) NOT NULL COMMENT '需求名称',
description TEXT COMMENT '需求描述',
project_id BIGINT NOT NULL COMMENT '项目ID',
customer_id BIGINT NOT NULL COMMENT '客户ID',
priority VARCHAR(20) DEFAULT 'normal' COMMENT '优先级high-高normal-中low-低',
estimated_hours DECIMAL(8,2) DEFAULT 0.00 COMMENT '预估开发工时(小时)',
actual_hours DECIMAL(8,2) DEFAULT 0.00 COMMENT '实际开发工时(小时)',
planned_start DATE COMMENT '计划开始日期',
planned_end DATE COMMENT '计划结束日期',
actual_start DATE COMMENT '实际开始日期',
actual_end DATE COMMENT '实际结束日期',
delivery_date DATE COMMENT '交付日期',
receivable_amount DECIMAL(15,2) DEFAULT 0.00 COMMENT '应收款金额',
receivable_date DATE COMMENT '应收款日期',
status VARCHAR(20) DEFAULT 'pending' COMMENT '状态pending-待开发developing-开发中delivered-已交付completed-已完成',
progress INT DEFAULT 0 COMMENT '开发进度0-100',
attachment_url VARCHAR(500) COMMENT '附件URL',
created_by BIGINT COMMENT '创建人ID',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_by BIGINT COMMENT '更新人ID',
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='需求工单表';
-- ============================================
-- 5. 支出管理模块表结构
-- ============================================
-- 支出类型表
CREATE TABLE IF NOT EXISTS expense_type (
type_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '支出类型ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
type_code VARCHAR(50) COMMENT '支出类型编码',
type_name VARCHAR(100) NOT NULL COMMENT '支出类型名称',
parent_id BIGINT DEFAULT 0 COMMENT '父类型ID0表示一级类型',
type_level INT DEFAULT 1 COMMENT '类型层级',
sort_order INT DEFAULT 0 COMMENT '排序顺序',
description VARCHAR(200) COMMENT '类型描述',
status TINYINT DEFAULT 1 COMMENT '状态0-禁用1-启用',
created_by BIGINT COMMENT '创建人ID',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_by BIGINT COMMENT '更新人ID',
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
INDEX idx_tenant (tenant_id),
INDEX idx_parent (parent_id),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支出类型表';
-- 支出表
CREATE TABLE IF NOT EXISTS expense (
expense_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '支出ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
expense_code VARCHAR(50) NOT NULL COMMENT '支出编号(唯一)',
expense_type_id BIGINT NOT NULL COMMENT '支出类型ID',
expense_amount DECIMAL(15,2) DEFAULT 0.00 COMMENT '支出金额',
expense_date DATE COMMENT '支出日期',
expense_reason TEXT COMMENT '支出事由',
project_id BIGINT COMMENT '所属项目ID',
applicant_id BIGINT NOT NULL COMMENT '申请人ID',
department_id BIGINT COMMENT '申请部门ID',
payment_method VARCHAR(20) DEFAULT 'transfer' COMMENT '付款方式transfer-转账cash-现金check-支票other-其他',
payment_account VARCHAR(100) COMMENT '付款账户',
attachment_url VARCHAR(500) COMMENT '附件URL',
status VARCHAR(20) DEFAULT 'pending' COMMENT '状态pending-待付款paid-已付款completed-已完成cancelled-已作废',
payment_date DATE COMMENT '付款日期',
payment_voucher VARCHAR(255) COMMENT '付款凭证',
remark VARCHAR(500) COMMENT '备注说明',
created_by BIGINT COMMENT '创建人ID',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_by BIGINT COMMENT '更新人ID',
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支出表';
-- ============================================
-- 6. 应收款管理模块表结构
-- ============================================
-- 应收款表
CREATE TABLE IF NOT EXISTS receivable (
receivable_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '应收款ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
receivable_code VARCHAR(50) NOT NULL COMMENT '应收款编号(唯一)',
requirement_id BIGINT NOT NULL COMMENT '需求ID',
project_id BIGINT NOT NULL COMMENT '项目ID',
customer_id BIGINT NOT NULL COMMENT '客户ID',
receivable_amount DECIMAL(15,2) DEFAULT 0.00 COMMENT '应收款金额',
receivable_date DATE COMMENT '应收款日期',
payment_due_date DATE COMMENT '付款截止日期',
payment_method VARCHAR(20) COMMENT '付款方式transfer-转账cash-现金check-支票other-其他',
bank_account VARCHAR(100) COMMENT '收款账户',
status VARCHAR(20) DEFAULT 'pending' COMMENT '状态pending-待收款partial-部分收款received-已收款overdue-逾期',
received_amount DECIMAL(15,2) DEFAULT 0.00 COMMENT '已收款金额',
unpaid_amount DECIMAL(15,2) DEFAULT 0.00 COMMENT '未收款金额',
overdue_days INT DEFAULT 0 COMMENT '逾期天数',
remark VARCHAR(500) COMMENT '备注说明',
created_by BIGINT COMMENT '创建人ID',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_by BIGINT COMMENT '更新人ID',
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted TINYINT DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应收款表';
-- 收款记录表
CREATE TABLE IF NOT EXISTS receipt (
receipt_id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '收款记录ID',
tenant_id BIGINT NOT NULL COMMENT '租户ID',
receipt_code VARCHAR(50) NOT NULL COMMENT '收款编号(唯一)',
receivable_id BIGINT NOT NULL COMMENT '应收款ID',
receipt_amount DECIMAL(15,2) DEFAULT 0.00 COMMENT '收款金额',
receipt_date DATE COMMENT '收款日期',
receipt_method VARCHAR(20) DEFAULT 'transfer' COMMENT '收款方式transfer-转账cash-现金check-支票other-其他',
receipt_account VARCHAR(100) COMMENT '收款账户',
payer_name VARCHAR(100) COMMENT '付款方名称',
receipt_voucher VARCHAR(255) COMMENT '收款凭证URL',
operator_id BIGINT COMMENT '操作人ID',
remark VARCHAR(200) COMMENT '备注说明',
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
UNIQUE KEY uk_tenant_code (tenant_id, receipt_code),
INDEX idx_tenant (tenant_id),
INDEX idx_receivable (receivable_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收款记录表';