From dd33a4db92c64f122d664a56041cc3c0d1c56472 Mon Sep 17 00:00:00 2001 From: zzhyyyyy <2685922758@qq.com> Date: Mon, 6 Jul 2026 19:30:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(withdraws):=20=E6=8F=90=E7=8E=B0=E8=B4=A6?= =?UTF-8?q?=E6=9C=AC=E6=A0=A1=E9=AA=8C=E5=8C=BA=E5=88=86=E7=8E=B0=E9=87=91?= =?UTF-8?q?/=E9=82=80=E8=AF=B7=E9=87=91=E4=B8=A4=E6=9C=AC=E8=B4=A6?= =?UTF-8?q?=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 配合后端 ledger-check 分账改造: - 异常清单按「现金」「邀请金」分别标注(缺扣款/缺退款/重复退款/ 非退款终态退款/余额差额),便于定位问题落在哪本账。 - 绿色(校验正常)时分别展示两账的余额与流水净额。 - WithdrawLedgerCheck 类型同步后端新增的 7 个 invite_* 字段。 修复现象:此前邀请奖励金提现单被误判为「缺扣款/缺退款流水」, 导致提现审核页现金账本报红。 Co-Authored-By: Claude Opus 4.8 --- src/app/(main)/withdraws/page.tsx | 27 +++++++++++++++++++++------ src/lib/types.ts | 9 +++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/app/(main)/withdraws/page.tsx b/src/app/(main)/withdraws/page.tsx index 478bd54..66b46e9 100644 --- a/src/app/(main)/withdraws/page.tsx +++ b/src/app/(main)/withdraws/page.tsx @@ -624,12 +624,27 @@ export default function WithdrawsPage() { const rejectAmount = rejectTargets.reduce((sum, item) => sum + item.amount_cents, 0); const ledgerIssues = ledger ? [ - ledger.balance_diff_cents ? `余额差额 ${yuan(ledger.balance_diff_cents)}` : '', - ledger.missing_withdraw_txn_count ? `缺扣款流水 ${ledger.missing_withdraw_txn_count} 笔` : '', - ledger.missing_refund_txn_count ? `缺退款流水 ${ledger.missing_refund_txn_count} 笔` : '', - ledger.duplicate_refund_txn_count ? `重复退款流水 ${ledger.duplicate_refund_txn_count} 类` : '', + // 普通现金账(coin_cash) + ledger.balance_diff_cents ? `现金余额差额 ${yuan(ledger.balance_diff_cents)}` : '', + ledger.missing_withdraw_txn_count ? `现金缺扣款流水 ${ledger.missing_withdraw_txn_count} 笔` : '', + ledger.missing_refund_txn_count ? `现金缺退款流水 ${ledger.missing_refund_txn_count} 笔` : '', + ledger.duplicate_refund_txn_count ? `现金重复退款流水 ${ledger.duplicate_refund_txn_count} 类` : '', ledger.refund_txn_on_non_terminal_count - ? `非退款终态存在退款流水 ${ledger.refund_txn_on_non_terminal_count} 笔` + ? `现金非退款终态存在退款流水 ${ledger.refund_txn_on_non_terminal_count} 笔` + : '', + // 邀请奖励金账(invite_cash) + ledger.invite_balance_diff_cents ? `邀请金余额差额 ${yuan(ledger.invite_balance_diff_cents)}` : '', + ledger.invite_missing_withdraw_txn_count + ? `邀请金缺扣款流水 ${ledger.invite_missing_withdraw_txn_count} 笔` + : '', + ledger.invite_missing_refund_txn_count + ? `邀请金缺退款流水 ${ledger.invite_missing_refund_txn_count} 笔` + : '', + ledger.invite_duplicate_refund_txn_count + ? `邀请金重复退款流水 ${ledger.invite_duplicate_refund_txn_count} 类` + : '', + ledger.invite_refund_txn_on_non_terminal_count + ? `邀请金非退款终态存在退款流水 ${ledger.invite_refund_txn_on_non_terminal_count} 笔` : '', ].filter(Boolean) : []; @@ -669,7 +684,7 @@ export default function WithdrawsPage() { message={ledger.ok ? '现金账本校验正常' : '现金账本存在异常'} description={ ledger.ok - ? `账户余额合计 ${yuan(ledger.cash_balance_total_cents)},现金流水净额 ${yuan(ledger.cash_transaction_total_cents)}` + ? `现金 余额 ${yuan(ledger.cash_balance_total_cents)} / 流水 ${yuan(ledger.cash_transaction_total_cents)};邀请金 余额 ${yuan(ledger.invite_cash_balance_total_cents)} / 流水 ${yuan(ledger.invite_cash_transaction_total_cents)}` : ledgerIssues.join(';') } action={ diff --git a/src/lib/types.ts b/src/lib/types.ts index 7f5ec3b..2e34983 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -233,6 +233,7 @@ export interface WithdrawBulkResult { export interface WithdrawLedgerCheck { ok: boolean; + // 普通现金账(coin_cash) cash_balance_total_cents: number; cash_transaction_total_cents: number; balance_diff_cents: number; @@ -240,6 +241,14 @@ export interface WithdrawLedgerCheck { missing_refund_txn_count: number; duplicate_refund_txn_count: number; refund_txn_on_non_terminal_count: number; + // 邀请奖励金账(invite_cash:与普通现金物理隔离,各自对账) + invite_cash_balance_total_cents: number; + invite_cash_transaction_total_cents: number; + invite_balance_diff_cents: number; + invite_missing_withdraw_txn_count: number; + invite_missing_refund_txn_count: number; + invite_duplicate_refund_txn_count: number; + invite_refund_txn_on_non_terminal_count: number; } export interface WxpayHealthCheck {