DROP TABLE IF EXISTS `customer_account`; CREATE TABLE `customer_account` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `customer_id` BIGINT(20) NOT NULL COMMENT '客户ID', `currency` CHAR(3) NOT NULL DEFAULT 'CNY' COMMENT '币种,如 CNY/USD', `balance` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '账户余额', `frozen_balance` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '冻结余额', `total_credit` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '总额度', `extra_credit` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '额外额度', `used_credit` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '已用额度', `tax` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '税金', `version` INT(11) NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', `create_by` VARCHAR(64) DEFAULT '' COMMENT '创建者', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` VARCHAR(64) DEFAULT '' COMMENT '更新者', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注', `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', PRIMARY KEY (`id`), UNIQUE KEY `uk_customer_currency` (`customer_id`, `currency`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='客户余额表'; DROP TABLE IF EXISTS `customer_receipt`; CREATE TABLE `customer_receipt` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `receipt_no` VARCHAR(64) NOT NULL COMMENT '收款单号', `customer_id` BIGINT(20) NOT NULL COMMENT '客户ID', `account_id` BIGINT(20) DEFAULT NULL COMMENT '客户账户ID', `receipt_type` VARCHAR(32) NOT NULL DEFAULT 'PREPAY' COMMENT '收款类型:PREPAY预充值/REPAY还款核销/MIXED混合', `amount` DECIMAL(18,2) NOT NULL COMMENT '收款金额', `allocated_amount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '已核销金额', `unallocated_amount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '待核销金额', `currency` CHAR(3) NOT NULL DEFAULT 'CNY' COMMENT '币种,如 CNY/USD', `pay_method` VARCHAR(32) DEFAULT NULL COMMENT '收款方式:BANK_TRANSFER/ALIPAY/WECHAT/CASH/OTHER', `bank_transaction_no` VARCHAR(64) DEFAULT NULL COMMENT '银行流水号/支付平台流水号', `received_at` DATETIME NOT NULL COMMENT '收款日期', `status` VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT '状态:PENDING待确认/CONFIRMED已确认/CANCELLED已取消', `confirmed_at` DATETIME DEFAULT NULL COMMENT '确认时间', `confirmed_by` BIGINT(20) DEFAULT NULL COMMENT '确认人', `invoice_status` VARCHAR(16) NOT NULL DEFAULT 'NONE' COMMENT '开票状态:NONE未开/PART部分/ALL全部', `version` INT(11) NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', `create_by` VARCHAR(64) DEFAULT '' COMMENT '创建者', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` VARCHAR(64) DEFAULT '' COMMENT '更新者', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注', `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', PRIMARY KEY (`id`), UNIQUE KEY `uk_receipt_no` (`receipt_no`), KEY `idx_customer_time` (`customer_id`, `received_at`), KEY `idx_account` (`account_id`), KEY `idx_status` (`status`), KEY `idx_bank_transaction_no` (`bank_transaction_no`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='客户收款表'; CREATE TABLE `customer_balance_flow` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `flow_no` VARCHAR(64) NOT NULL COMMENT '流水号', `customer_id` BIGINT(20) NOT NULL COMMENT '客户ID', `account_id` BIGINT(20) NOT NULL COMMENT '客户账户ID', `currency` CHAR(3) NOT NULL DEFAULT 'CNY' COMMENT '币种', `biz_type` VARCHAR(32) NOT NULL COMMENT '业务类型:RECEIPT收款/BILL_PAY账单支付/REFUND退款/ADJUST手工调整/FREEZE冻结/UNFREEZE解冻', `biz_id` BIGINT(20) DEFAULT NULL COMMENT '关联业务ID,如收款单ID、账单ID', `biz_no` VARCHAR(64) DEFAULT NULL COMMENT '关联业务单号', `direction` TINYINT(1) NOT NULL COMMENT '变动方向:1增加,-1减少', `amount` DECIMAL(18,2) NOT NULL COMMENT '变动金额', `before_balance` DECIMAL(18,2) NOT NULL COMMENT '变动前余额', `after_balance` DECIMAL(18,2) NOT NULL COMMENT '变动后余额', `before_frozen_balance` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '变动前冻结余额', `after_frozen_balance` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '变动后冻结余额', `operator_id` BIGINT(20) DEFAULT NULL COMMENT '操作人', `create_by` VARCHAR(64) DEFAULT '' COMMENT '创建者', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` VARCHAR(64) DEFAULT '' COMMENT '更新者', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注', `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)', PRIMARY KEY (`id`), UNIQUE KEY `uk_flow_no` (`flow_no`), KEY `idx_customer_time` (`customer_id`, `create_time`), KEY `idx_account_time` (`account_id`, `create_time`), KEY `idx_biz` (`biz_type`, `biz_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='余额流水表'; -- 收款单附件复用客户附件表:attachment_type='3'(其他),biz_id 关联 customer_receipt.id ALTER TABLE `bms_customer_attachment` ADD COLUMN `biz_id` BIGINT(20) DEFAULT NULL COMMENT '关联业务ID(如收款单ID,attachment_type=3时使用)' AFTER `attachment_type`, ADD KEY `idx_biz_id` (`biz_id`);