-- =====================================================
-- 商户结算单与打款记录（场景 B 平台代收 · 阶段 C）
-- 模块：business-finance / merchantsettlement
-- 版本：1.0
-- 创建时间：2026-06-29
-- 号段：主键 1926061470000000101 起
-- =====================================================

CREATE TABLE IF NOT EXISTS `biz_merchant_settlement_bill` (
    `id` VARCHAR(64) NOT NULL COMMENT '主键ID',

    `settlement_no` VARCHAR(64) NOT NULL COMMENT '结算单号',
    `merchant_tenant_id` VARCHAR(64) NOT NULL COMMENT '子单商户租户ID',
    `settle_mode` VARCHAR(32) NOT NULL DEFAULT 'PLATFORM_COLLECT' COMMENT '结算模式：PLATFORM_COLLECT-平台代收',
    `period_start` DATETIME NOT NULL COMMENT '账期开始（含）',
    `period_end` DATETIME NOT NULL COMMENT '账期结束（含）',
    `pay_count` BIGINT NOT NULL DEFAULT 0 COMMENT '收款入账笔数',
    `refund_count` BIGINT NOT NULL DEFAULT 0 COMMENT '退款冲减笔数',
    `pay_base_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '收款基数合计（元）',
    `refund_base_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '退款冲减合计（元，正值）',
    `net_commission_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '平台佣金净额（元）',
    `net_merchant_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '应付商户净额（元）',
    `paid_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '已打款累计（元）',
    `status` VARCHAR(32) NOT NULL DEFAULT 'PENDING_PAYOUT' COMMENT '状态：PENDING_PAYOUT-待打款 PAID-已打款 MERCHANT_CONFIRMED-商户已确认 CANCELLED-已作废',
    `merchant_confirm_by` VARCHAR(64) DEFAULT NULL COMMENT '商户确认人',
    `merchant_confirm_date` DATETIME DEFAULT NULL COMMENT '商户确认时间',

    `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
    `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
    `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
    `update_date` DATETIME DEFAULT NULL COMMENT '更新时间',
    `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标记：0-正常 1-删除',
    `remarks` VARCHAR(255) DEFAULT NULL COMMENT '备注信息',
    `tenant_code` VARCHAR(64) DEFAULT NULL COMMENT '租户编码',
    `tenant_id` VARCHAR(64) DEFAULT NULL COMMENT '租户ID（与 merchant_tenant_id 一致，供 dataScope）',

    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_settlement_no` (`settlement_no`),
    UNIQUE KEY `uk_merchant_period` (`merchant_tenant_id`, `period_start`, `period_end`, `del_flag`),
    KEY `idx_merchant_tenant_id` (`merchant_tenant_id`),
    KEY `idx_status` (`status`),
    KEY `idx_period_start` (`period_start`),
    KEY `idx_create_date` (`create_date`),
    KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='商户结算单（平台代收）';

CREATE TABLE IF NOT EXISTS `biz_merchant_settlement_payout` (
    `id` VARCHAR(64) NOT NULL COMMENT '主键ID',

    `settlement_bill_id` VARCHAR(64) NOT NULL COMMENT '结算单ID',
    `settlement_no` VARCHAR(64) NOT NULL COMMENT '结算单号（冗余）',
    `payout_no` VARCHAR(64) NOT NULL COMMENT '打款流水号',
    `payout_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '打款金额（元）',
    `payout_method` VARCHAR(32) NOT NULL DEFAULT 'BANK_TRANSFER' COMMENT '打款方式：BANK_TRANSFER-银行转账 WECHAT_OFFLINE-微信线下 OTHER-其他',
    `payout_time` DATETIME DEFAULT NULL COMMENT '打款时间',
    `operator_id` VARCHAR(64) DEFAULT NULL COMMENT '操作人ID',
    `operator_name` VARCHAR(64) DEFAULT NULL COMMENT '操作人姓名',
    `voucher_url` VARCHAR(500) DEFAULT NULL COMMENT '打款凭证URL',
    `status` VARCHAR(32) NOT NULL DEFAULT 'SUCCESS' COMMENT '状态：SUCCESS-成功 FAILED-失败',

    `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
    `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
    `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
    `update_date` DATETIME DEFAULT NULL COMMENT '更新时间',
    `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标记：0-正常 1-删除',
    `remarks` VARCHAR(255) DEFAULT NULL COMMENT '备注信息',
    `tenant_code` VARCHAR(64) DEFAULT NULL COMMENT '租户编码',
    `tenant_id` VARCHAR(64) DEFAULT NULL COMMENT '租户ID',

    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_payout_no` (`payout_no`),
    KEY `idx_settlement_bill_id` (`settlement_bill_id`),
    KEY `idx_payout_time` (`payout_time`),
    KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='商户结算打款记录';

CREATE TABLE IF NOT EXISTS `biz_merchant_settlement_bill_line` (
    `id` VARCHAR(64) NOT NULL COMMENT '主键ID',

    `settlement_bill_id` VARCHAR(64) NOT NULL COMMENT '结算单ID',
    `settlement_no` VARCHAR(64) NOT NULL COMMENT '结算单号（冗余）',
    `receivable_id` VARCHAR(64) NOT NULL COMMENT '应收流水ID',
    `receivable_no` VARCHAR(64) NOT NULL COMMENT '应收流水号（冗余）',

    `entry_type` VARCHAR(32) NOT NULL COMMENT '流水类型：PAY、REFUND',
    `biz_scene` VARCHAR(32) NOT NULL COMMENT '业务场景：MALL_ORDER 等',
    `biz_order_id` VARCHAR(64) DEFAULT NULL COMMENT '业务子单ID（对应 receivable.mall_order_id）',
    `biz_order_no` VARCHAR(64) DEFAULT NULL COMMENT '业务单号快照',
    `pay_batch_id` VARCHAR(64) DEFAULT NULL COMMENT '合并支付批次ID',
    `finance_pay_order_id` VARCHAR(64) DEFAULT NULL COMMENT '财务支付单ID',

    `base_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '基数金额（元，快照）',
    `commission_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '平台佣金（元，快照）',
    `merchant_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '商户应得（元，快照）',
    `biz_time` DATETIME DEFAULT NULL COMMENT '业务发生时间（快照）',

    `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
    `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
    `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
    `update_date` DATETIME DEFAULT NULL COMMENT '更新时间',
    `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标记：0-正常 1-删除',
    `remarks` VARCHAR(255) DEFAULT NULL COMMENT '备注信息',
    `tenant_code` VARCHAR(64) DEFAULT NULL COMMENT '租户编码',
    `tenant_id` VARCHAR(64) DEFAULT NULL COMMENT '租户ID',

    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_receivable_bill` (`receivable_id`, `settlement_bill_id`, `del_flag`),
    KEY `idx_settlement_bill_id` (`settlement_bill_id`),
    KEY `idx_biz_order_id` (`biz_order_id`),
    KEY `idx_biz_time` (`biz_time`),
    KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='商户结算单构成明细（应收流水快照）';
