管理后台新增打手详情抽屉聚合钱包流水待解冻与订单数据

This commit is contained in:
yml2213
2026-08-22 19:56:23 +08:00
parent 90ff15b627
commit 1b8fdff162
8 changed files with 631 additions and 6 deletions
@@ -0,0 +1,80 @@
import type { WorkerDepositUnfreezeRow } from '../../repositories/worker-platform/index.js'
import {
countWorkerAcceptedOrders,
countWorkerActiveOrders,
countWorkerTimeoutEvents,
getWorkerOrderOverview,
listWorkerDepositUnfreezes,
listWorkerWalletLedgers,
} from '../../repositories/worker-platform/index.js'
import type { JsonObject } from '../../types/json.js'
import { normalizePage, normalizePageSize } from '../admin/admin-query-utils.js'
import { mapWalletLedger, mapWorkerUser } from './mappers.js'
import { getRequiredWorker } from './worker-session-context-service.js'
/** 管理端打手详情:聚合账号钱包、接单统计与订单概览,全部只读。 */
export async function getAdminWorkerDetail(workerId: number | string) {
const worker = await getRequiredWorker(workerId)
const [activeOrderCount, acceptedOrderCount, timeoutOrderCount, orderOverview] =
await Promise.all([
countWorkerActiveOrders(worker.id),
countWorkerAcceptedOrders(worker.id),
countWorkerTimeoutEvents(worker.id),
getWorkerOrderOverview(worker.id),
])
return {
worker: mapWorkerUser(worker),
summary: { activeOrderCount, acceptedOrderCount, timeoutOrderCount },
orderOverview,
}
}
export async function listAdminWorkerWalletLedgers(
workerId: number | string,
payload: JsonObject = {},
) {
const worker = await getRequiredWorker(workerId)
const page = normalizePage(payload.page)
const pageSize = normalizePageSize(payload.pageSize)
const ledgerType = String(payload.ledgerType || payload.ledger_type || '').trim()
const { items, total } = await listWorkerWalletLedgers({
page,
pageSize,
workerId: Number(worker.id),
ledgerType,
})
return { items: items.map(mapWalletLedger), pagination: { page, pageSize, total } }
}
export async function listAdminWorkerDepositUnfreezes(
workerId: number | string,
payload: JsonObject = {},
) {
const worker = await getRequiredWorker(workerId)
const page = normalizePage(payload.page)
const pageSize = normalizePageSize(payload.pageSize)
const status = String(payload.status || '').trim()
const { items, total } = await listWorkerDepositUnfreezes({
workerId: Number(worker.id),
status,
page,
pageSize,
})
return {
items: items.map(mapDepositUnfreeze),
pagination: { page, pageSize, total },
}
}
function mapDepositUnfreeze(row: WorkerDepositUnfreezeRow) {
return {
id: Number(row.id),
workerId: Number(row.worker_id),
workOrderId: Number(row.work_order_id),
amount: Number(row.amount || 0),
status: row.status,
unfreezeAt: row.unfreeze_at,
releasedAt: row.released_at || null,
createdAt: row.created_at,
}
}
@@ -28,6 +28,7 @@ export * from './admin-worker-leaderboard-service.js'
export * from './admin-kuaishou-match-service.js'
export * from './admin-worker-config-service.js'
export * from './admin-worker-user-service.js'
export * from './admin-worker-detail-service.js'
export * from './admin-work-order-query-service.js'
export * from './admin-worker-feedback-service.js'
export * from './admin-worker-cancel-service.js'