修复接单注册审核与拼单状态校验

This commit is contained in:
yml2213
2026-08-18 18:16:48 +08:00
parent ee79195f47
commit b2eaf3b6c7
8 changed files with 94 additions and 19 deletions
@@ -7,6 +7,7 @@ export type WorkerSmsCodeRow = {
code_hash: string
expires_at: string
consumed_at: string | null
failed_attempt_count: number
created_at: string
}
@@ -61,6 +62,29 @@ export async function consumeWorkerSmsCode(
return result.rows[0] || null
}
/** 记录错误验证码尝试,达到上限后立即锁定该验证码。 */
export async function recordWorkerSmsCodeFailure(
codeId: number,
now: string,
maxAttempts: number,
): Promise<WorkerSmsCodeRow | null> {
const result = await query<WorkerSmsCodeRow>(
`
UPDATE worker_sms_codes
SET
failed_attempt_count = COALESCE(failed_attempt_count, 0) + 1,
consumed_at = CASE
WHEN COALESCE(failed_attempt_count, 0) + 1 >= $3 THEN $2
ELSE consumed_at
END
WHERE id = $1 AND consumed_at IS NULL
RETURNING *
`,
[codeId, now, Math.max(1, Math.floor(maxAttempts))],
)
return result.rows[0] || null
}
export async function countWorkerSmsCodesOnDay(
phone: string,
dayStartIso: string,
@@ -184,7 +184,7 @@ export async function getWorkOrderShare(
): Promise<WorkOrderShareRow | null> {
const result = await query<WorkOrderShareRow>(
`${WORK_ORDER_SHARE_SELECT}
WHERE wos.work_order_id = $1 AND wos.worker_id = $2 LIMIT 1`,
WHERE wos.work_order_id = $1 AND wos.worker_id = $2 AND wos.status != 'cancelled' LIMIT 1`,
[Number(workOrderId), Number(workerId)],
)
return result.rows[0] || null
@@ -2394,7 +2394,10 @@ export async function acceptWorkOrderShareAndSettle(input: {
`UPDATE work_order_shares SET status = 'accepted', accepted_at = $1, updated_at = $1 WHERE id = $2`,
[input.now, input.shareId],
)
const progressResult = await client.query<{ joined_quantity: number; unfinished_count: number }>(
const progressResult = await client.query<{
joined_quantity: number
unfinished_count: number
}>(
`SELECT COALESCE(SUM(quantity), 0)::int AS joined_quantity,
COUNT(*) FILTER (WHERE status != 'accepted' AND status != 'cancelled')::int AS unfinished_count
FROM work_order_shares WHERE work_order_id = $1 AND status != 'cancelled'`,
@@ -3195,9 +3198,11 @@ function buildWorkOrderWhere({
AND wo.acceptance_json->>'evidenceStatus' = 'pending'
AND NULLIF(wo.acceptance_json->>'evidenceDueAt', '')::timestamptz > NOW()
`
if (normalizedStatuses.length > 0) {
if (normalizedStatuses.length > 0) {
params.push(normalizedStatuses)
filters.push(`(${useOperationalStatus ? adminOperationalStatusExpression() : 'wo.status'} = ANY($${params.length}::text[]) OR (${vipEvidencePendingWhere}))`)
filters.push(
`(${useOperationalStatus ? adminOperationalStatusExpression() : 'wo.status'} = ANY($${params.length}::text[]) OR (${vipEvidencePendingWhere}))`,
)
} else {
filters.push(`(${vipEvidencePendingWhere})`)
}
@@ -3210,7 +3215,9 @@ function buildWorkOrderWhere({
`${workerOrderStatusExpression(`$${params.length}`)} = ANY(${statusesPlaceholder}::text[])`,
)
} else {
filters.push(`${useOperationalStatus ? adminOperationalStatusExpression() : 'wo.status'} = ANY(${statusesPlaceholder}::text[])`)
filters.push(
`${useOperationalStatus ? adminOperationalStatusExpression() : 'wo.status'} = ANY(${statusesPlaceholder}::text[])`,
)
}
}
if (workOrderId) {