新增大厅订单容量控制

This commit is contained in:
yml2213
2026-08-21 14:02:30 +08:00
parent cc03382921
commit 874b093a4b
20 changed files with 407 additions and 44 deletions
@@ -169,6 +169,16 @@ export function publishWorkOrderRealtimeChange(input: {
})
}
/** 大厅全局配置变化时刷新所有打手的候选集合。 */
export function publishWorkerHallRealtimeRefresh() {
publishRealtimeEvent({
type: 'work_order.changed',
scopes: ['worker_hall'],
operation: 'refresh',
broadcastWorkers: true,
})
}
/** 资金申请变更会同步后台资金页与申请所属打手的钱包页面。 */
export function publishWorkerFinanceRealtimeChange(input: {
requestId: number
@@ -282,17 +292,13 @@ async function publishWorkOrderSnapshots(input: {
})
if (input.hallChanged) {
const sharingFilled = isWorkOrderSharingFilled(
workOrder.sharing_enabled === true,
Number(workOrder.sharing_total_quantity || 1),
joinedQuantity,
)
publishRealtimeEvent({
type: 'work_order.changed',
entityId: workOrderId,
scopes: ['worker_hall'],
operation: workOrder.status === 'open' && !sharingFilled ? 'upsert' : 'remove',
data: mapWorkerHallWorkOrder(workOrder, shares),
// 队首补位可能影响多张订单,客户端需要重新读取大厅快照。
operation: 'refresh',
data: { workOrderId },
broadcastWorkers: true,
})
}
@@ -329,24 +335,6 @@ async function publishWorkOrderSnapshots(input: {
}
}
function mapWorkerHallWorkOrder(
workOrder: NonNullable<Awaited<ReturnType<typeof getWorkOrderById>>>,
shares: Awaited<ReturnType<typeof listWorkOrderShares>>,
) {
const mapped = mapWorkOrderAdmin(workOrder)
const { worker: _worker, orderId: _orderId, orderItemId: _orderItemId, ...visibleOrder } = mapped
const joinedQuantity = shares
.filter((share) => share.status !== 'cancelled')
.reduce((sum, share) => sum + Number(share.quantity || 0), 0)
const pendingSubmissionCount = shares.filter((share) => share.status === 'joined').length
return {
...visibleOrder,
// 大厅接收端根据自身等级重新计算实际冻结金额,避免不同等级看到同一笔错误押金。
requiredDepositAmount: mapped.requiredDepositAmount,
sharingProgress: { joinedQuantity, pendingSubmissionCount },
}
}
async function publishWorkerFinanceSnapshots(input: {
requestId: number
workerId: number