From 2fbfaa014363211afa82e37fcad36a34b02834a9 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Fri, 21 Aug 2026 00:05:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B1=95=E7=A4=BA=E6=89=93=E6=89=8B=E6=8F=90?= =?UTF-8?q?=E7=8E=B0=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...050_worker_finance_request_withdraw_stats.sql | 4 ++++ .../src/repositories/worker-platform/types.ts | 5 +++++ .../repositories/worker-platform/worker-repo.ts | 16 +++++++++++++++- .../src/services/worker-platform/mappers.ts | 5 +++++ .../worker-platform-service.test.ts | 16 ++++++++++++++++ .../src/pages/admin/panels/FinancePanel.tsx | 14 +++++++++++++- apps/frontend/src/types/worker-platform.ts | 5 +++++ 7 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 apps/backend/src/db/migrations/050_worker_finance_request_withdraw_stats.sql diff --git a/apps/backend/src/db/migrations/050_worker_finance_request_withdraw_stats.sql b/apps/backend/src/db/migrations/050_worker_finance_request_withdraw_stats.sql new file mode 100644 index 00000000..ce04e43e --- /dev/null +++ b/apps/backend/src/db/migrations/050_worker_finance_request_withdraw_stats.sql @@ -0,0 +1,4 @@ +-- 支持资金申请列表按打手快速统计提现次数和已提现金额。 +CREATE INDEX IF NOT EXISTS idx_worker_finance_requests_worker_withdraw_stats + ON worker_finance_requests(worker_id, request_type) + INCLUDE (status, amount); diff --git a/apps/backend/src/repositories/worker-platform/types.ts b/apps/backend/src/repositories/worker-platform/types.ts index fbc49c3a..4d064763 100644 --- a/apps/backend/src/repositories/worker-platform/types.ts +++ b/apps/backend/src/repositories/worker-platform/types.ts @@ -154,6 +154,11 @@ export type WorkerFinanceRequestRow = { worker_username?: string worker_display_name?: string worker_phone?: string + worker_type?: string + worker_level_key?: string + worker_level_name?: string + worker_withdraw_request_count?: number + worker_total_withdraw_amount?: number } export type WorkerWithdrawalAccountRow = { diff --git a/apps/backend/src/repositories/worker-platform/worker-repo.ts b/apps/backend/src/repositories/worker-platform/worker-repo.ts index b193afa4..72648eae 100644 --- a/apps/backend/src/repositories/worker-platform/worker-repo.ts +++ b/apps/backend/src/repositories/worker-platform/worker-repo.ts @@ -39,9 +39,23 @@ const WORKER_FINANCE_REQUEST_SELECT = ` wfr.*, wu.username AS worker_username, wu.display_name AS worker_display_name, - wu.phone AS worker_phone + wu.phone AS worker_phone, + wu.worker_type, + wl.level_key AS worker_level_key, + wl.name AS worker_level_name, + withdraw_stats.withdraw_request_count AS worker_withdraw_request_count, + withdraw_stats.total_withdraw_amount AS worker_total_withdraw_amount FROM worker_finance_requests wfr LEFT JOIN worker_users wu ON wu.id = wfr.worker_id + LEFT JOIN worker_levels wl ON wl.id = wu.level_id + LEFT JOIN LATERAL ( + SELECT + COUNT(*)::int AS withdraw_request_count, + COALESCE(SUM(amount) FILTER (WHERE status = 'approved'), 0)::bigint AS total_withdraw_amount + FROM worker_finance_requests history_request + WHERE history_request.worker_id = wfr.worker_id + AND history_request.request_type = 'withdraw' + ) withdraw_stats ON TRUE ` export type CreateWorkerSessionInput = { diff --git a/apps/backend/src/services/worker-platform/mappers.ts b/apps/backend/src/services/worker-platform/mappers.ts index f0af71de..a2abb202 100644 --- a/apps/backend/src/services/worker-platform/mappers.ts +++ b/apps/backend/src/services/worker-platform/mappers.ts @@ -392,6 +392,11 @@ export function mapFinanceRequest(request: WorkerFinanceRequestRow | null | unde username: request.worker_username || '', displayName: request.worker_display_name || request.worker_username || '', phone: request.worker_phone || '', + workerType: normalizeWorkerType(request.worker_type), + levelKey: request.worker_level_key || '', + levelName: request.worker_level_name || '', + withdrawRequestCount: Number(request.worker_withdraw_request_count || 0), + totalWithdrawAmount: Number(request.worker_total_withdraw_amount || 0), } : null, } diff --git a/apps/backend/src/services/worker-platform/worker-platform-service.test.ts b/apps/backend/src/services/worker-platform/worker-platform-service.test.ts index f7c6ec3e..0f5d4a87 100644 --- a/apps/backend/src/services/worker-platform/worker-platform-service.test.ts +++ b/apps/backend/src/services/worker-platform/worker-platform-service.test.ts @@ -525,6 +525,11 @@ test('支付宝提现申请保留收款二维码快照', () => { created_at: '2026-08-20T00:00:00.000Z', updated_at: '2026-08-20T00:00:00.000Z', reviewed_at: null, + worker_type: 'internal', + worker_level_key: 'vip5', + worker_level_name: 'VIP5', + worker_withdraw_request_count: 3, + worker_total_withdraw_amount: 28_800, } const mapped = mapFinanceRequest(request) @@ -532,6 +537,17 @@ test('支付宝提现申请保留收款二维码快照', () => { (mapped?.payload.alipayQrCodeImage as { url?: string }).url, 'https://example.com/alipay-qr.png', ) + assert.deepEqual(mapped?.worker, { + workerId: 1, + username: '', + displayName: '', + phone: '', + workerType: 'internal', + levelKey: 'vip5', + levelName: 'VIP5', + withdrawRequestCount: 3, + totalWithdrawAmount: 28_800, + }) }) test('提现渠道仅支持支付宝和微信', () => { diff --git a/apps/frontend/src/pages/admin/panels/FinancePanel.tsx b/apps/frontend/src/pages/admin/panels/FinancePanel.tsx index 1a085702..b80dc3bc 100644 --- a/apps/frontend/src/pages/admin/panels/FinancePanel.tsx +++ b/apps/frontend/src/pages/admin/panels/FinancePanel.tsx @@ -201,13 +201,25 @@ export default function FinancePanel() { const requestColumns: TableColumnsType = [ { title: '打手', - minWidth: 180, + minWidth: 250, render: (_, row) => (
{row.worker?.displayName || row.worker?.username || '-'} {row.worker?.username || '-'} + {row.worker ? ( + + + {row.worker.workerType === 'internal' ? '内部打手' : '外部打手'} + + {row.worker.levelName || row.worker.levelKey || '未分级'} + + 提现 {row.worker.withdrawRequestCount} 次,累计 + {formatMoney(row.worker.totalWithdrawAmount)} + + + ) : null}
), }, diff --git a/apps/frontend/src/types/worker-platform.ts b/apps/frontend/src/types/worker-platform.ts index 67622d3d..36aa9ad8 100644 --- a/apps/frontend/src/types/worker-platform.ts +++ b/apps/frontend/src/types/worker-platform.ts @@ -99,6 +99,11 @@ export type WorkerFinanceRequest = { username: string displayName: string phone: string + workerType: 'internal' | 'external' + levelKey: string + levelName: string + withdrawRequestCount: number + totalWithdrawAmount: number } }