From d5daf7f5dd2241efa66c0584143b00f298b3368b Mon Sep 17 00:00:00 2001 From: yml2213 Date: Fri, 21 Aug 2026 18:14:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=86=E5=88=86=E5=B7=A5=E5=8D=95=E6=8A=BC?= =?UTF-8?q?=E9=87=91=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/repositories/worker-platform/index.ts | 1 + .../work-order-deposit-query-repo.ts | 24 +++++++++++++++++++ .../worker-platform/work-order-repo.ts | 23 +----------------- 3 files changed, 26 insertions(+), 22 deletions(-) create mode 100644 apps/backend/src/repositories/worker-platform/work-order-deposit-query-repo.ts diff --git a/apps/backend/src/repositories/worker-platform/index.ts b/apps/backend/src/repositories/worker-platform/index.ts index 7fbb8056..baa36710 100644 --- a/apps/backend/src/repositories/worker-platform/index.ts +++ b/apps/backend/src/repositories/worker-platform/index.ts @@ -8,6 +8,7 @@ export * from './worker-finance-repo.js' export * from './worker-ranking-repo.js' export * from './work-order-repo.js' export * from './work-order-query-repo.js' +export * from './work-order-deposit-query-repo.js' export * from './work-order-event-repo.js' export * from './work-order-share-repo.js' export * from './work-category-repo.js' diff --git a/apps/backend/src/repositories/worker-platform/work-order-deposit-query-repo.ts b/apps/backend/src/repositories/worker-platform/work-order-deposit-query-repo.ts new file mode 100644 index 00000000..db3667eb --- /dev/null +++ b/apps/backend/src/repositories/worker-platform/work-order-deposit-query-repo.ts @@ -0,0 +1,24 @@ +import { query } from '../../db/client.js' + +/** 汇总仍在等待解冻的押金,供订单详情和实时通知展示。 */ +export async function sumPendingUnfreezeByOrderIds( + workOrderIds: number[], +): Promise> { + const totals = new Map() + const uniqueIds = [...new Set(workOrderIds.map(Number).filter((id) => id > 0))] + if (uniqueIds.length === 0) return totals + const result = await query<{ work_order_id: number; total: number }>( + ` + SELECT work_order_id, SUM(amount)::int AS total + FROM worker_deposit_unfreezes + WHERE work_order_id = ANY($1::bigint[]) + AND status = 'pending' + GROUP BY work_order_id + `, + [uniqueIds], + ) + for (const row of result.rows) { + totals.set(Number(row.work_order_id), Number(row.total || 0)) + } + return totals +} diff --git a/apps/backend/src/repositories/worker-platform/work-order-repo.ts b/apps/backend/src/repositories/worker-platform/work-order-repo.ts index e4bcffd3..a7dff7f6 100644 --- a/apps/backend/src/repositories/worker-platform/work-order-repo.ts +++ b/apps/backend/src/repositories/worker-platform/work-order-repo.ts @@ -34,6 +34,7 @@ import type { PoolClient } from 'pg' import { maybeUpgradeWorkerLevelWithClient } from './worker-ranking-repo.js' export * from './work-order-query-repo.js' +export { sumPendingUnfreezeByOrderIds } from './work-order-deposit-query-repo.js' export async function createWorkOrder(input: CreateWorkOrderInput): Promise { const result = await query<{ id: number }>( @@ -1882,28 +1883,6 @@ export async function settleOverdueWorkOrder(input: { }) } -export async function sumPendingUnfreezeByOrderIds( - workOrderIds: number[], -): Promise> { - const totals = new Map() - const uniqueIds = [...new Set(workOrderIds.map(Number).filter((id) => id > 0))] - if (uniqueIds.length === 0) return totals - const result = await query<{ work_order_id: number; total: number }>( - ` - SELECT work_order_id, SUM(amount)::int AS total - FROM worker_deposit_unfreezes - WHERE work_order_id = ANY($1::bigint[]) - AND status = 'pending' - GROUP BY work_order_id - `, - [uniqueIds], - ) - for (const row of result.rows) { - totals.set(Number(row.work_order_id), Number(row.total || 0)) - } - return totals -} - export async function deductPendingDepositUnfreeze(input: { workOrderId: number amount: number