add:新增同一个工单同一人可以多次拼单:抢单大厅优化
This commit is contained in:
@@ -339,6 +339,10 @@ async function publishWorkOrderSnapshots(input: {
|
||||
requiredDepositAmount: Number(workOrder.required_deposit_amount || 0),
|
||||
// 广播无法按打手等级过滤可见延迟,携带入厅时间由客户端按各自延迟推迟展示。
|
||||
hallQueuedAt: workOrder.hall_queued_at || null,
|
||||
// 置顶时间:客户端按 pinned_at DESC NULLS LAST 排序广播行,与列表 SQL 同序。
|
||||
// 不带它的话,这条广播行会以 undefined 参与排序,任何广播变更(拼单进度、
|
||||
// 置顶/取消置顶等)都会把已置顶的行挤到未置顶行后面。
|
||||
pinnedAt: workOrder.pinned_at || null,
|
||||
sharingProgress: { joinedQuantity, pendingSubmissionCount },
|
||||
}
|
||||
: { workOrderId },
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import test from 'node:test'
|
||||
|
||||
import { shouldReplayRealtimeEvents } from './realtime-event-service.js'
|
||||
|
||||
/**
|
||||
* 回归:整页刷新后大厅列表重复、可抢订单数越刷越多。
|
||||
*
|
||||
* 根因是新连接(lastEventId=0)也会补发最近 500 条历史事件。大厅 upsert 广播带的是
|
||||
* 当时的工单快照,被重新打进刚加载的列表后,已抢走/已出队的订单会复活并被插到第 1 页,
|
||||
* 前端还会按「插入行」把 pagination.total 加一。
|
||||
*/
|
||||
test('新连接(lastEventId=0)不补发历史事件,避免旧大厅快照复活订单', () => {
|
||||
assert.equal(shouldReplayRealtimeEvents(0), false)
|
||||
assert.equal(shouldReplayRealtimeEvents(Number.NaN), false)
|
||||
assert.equal(shouldReplayRealtimeEvents(-1), false)
|
||||
})
|
||||
|
||||
test('断线重连(带 Last-Event-ID)才补发事件', () => {
|
||||
assert.equal(shouldReplayRealtimeEvents(1), true)
|
||||
assert.equal(shouldReplayRealtimeEvents(3993659), true)
|
||||
})
|
||||
Reference in New Issue
Block a user