修复提现申请冻结余额

This commit is contained in:
yml2213
2026-08-23 16:51:32 +08:00
parent b49fa12484
commit 844f071aab
10 changed files with 409 additions and 42 deletions
@@ -251,7 +251,7 @@ export async function reviewAdminWorkerFinanceRequest(
publishWorkerFinanceRealtimeChange({
requestId: Number(reviewed.request.id),
workerId: Number(reviewed.request.worker_id),
walletChanged: reviewed.request.request_type === 'withdraw' && status === 'approved',
walletChanged: reviewed.request.request_type === 'withdraw',
})
return {
@@ -1,7 +1,7 @@
import {
countWorkerWithdrawRequestsOnDay,
createWorkerFinanceRequest,
getWorkerFinanceRequestSummary,
createWorkerWithdrawRequestWithFreeze,
getWorkerWithdrawalAccount,
listDueDepositUnfreezes,
releaseDepositUnfreeze,
@@ -164,20 +164,9 @@ export async function createWorkerWithdrawRequest(
})
}
const financeSummary = await getWorkerFinanceRequestSummary(worker.id)
const availableAmount = Number(worker.available_amount || 0)
const availableForWithdraw = Math.max(0, availableAmount - financeSummary.pendingWithdrawAmount)
if (amount > availableForWithdraw) {
throw createHttpError('可提现余额不足,请先减少提现金额或等待已提交申请处理', {
statusCode: 409,
errorCode: 'worker_withdraw_amount_insufficient',
})
}
const note = String(payload.note || payload.remark || '').trim()
const created = await createWorkerFinanceRequest({
const created = await createWorkerWithdrawRequestWithFreeze({
workerId: worker.id,
requestType: 'withdraw',
amount,
accountChannel,
accountName: withdrawalAccount.account_name,
@@ -192,25 +181,30 @@ export async function createWorkerWithdrawRequest(
}),
now: nowIso(),
})
if (!created) {
throw createHttpError('提现申请创建失败', {
statusCode: 500,
errorCode: 'worker_withdraw_request_create_failed',
if (created.failureReason === 'withdraw_insufficient') {
throw createHttpError('可提现余额不足,请先减少提现金额或等待已提交申请处理', {
statusCode: 409,
errorCode: 'worker_withdraw_amount_insufficient',
})
}
const request = created.request
await createWorkerWithdrawAdminNotification({
requestId: Number(created.id),
requestId: Number(request.id),
workerName: worker.display_name || worker.username,
amountFen: Number(created.amount || amount),
channel: created.account_channel,
amountFen: Number(request.amount || amount),
channel: request.account_channel,
})
publishWorkerFinanceRealtimeChange({
requestId: Number(created.id),
requestId: Number(request.id),
workerId: Number(worker.id),
})
publishWorkerWalletRealtimeChange(Number(worker.id))
return {
request: mapFinanceRequest(created),
availableForWithdraw,
request: mapFinanceRequest(request),
availableForWithdraw: Math.max(
0,
Number(worker.available_amount || 0) - Number(request.amount || amount),
),
}
}
@@ -68,7 +68,9 @@ export function normalizeWalletLedgerType(value: unknown) {
if (
[
'manual_credit',
'withdraw_freeze',
'withdraw_paid',
'withdraw_release',
'deposit_freeze',
'deposit_release',
'deposit_pending_unfreeze',