新增大厅订单容量控制
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user