add:新增同一个工单同一人可以多次拼单:抢单大厅优化
This commit is contained in:
@@ -2,6 +2,7 @@ import assert from 'node:assert/strict'
|
||||
import test from 'node:test'
|
||||
|
||||
import {
|
||||
compareWorkerHallOrderRows,
|
||||
evaluateWorkerKeywordVerdict,
|
||||
matchesWorkerWorkOrderKeyword,
|
||||
patchWorkerWorkOrderInfiniteEnvelope,
|
||||
@@ -326,3 +327,50 @@ test('大厅广播覆盖行时必须保留本打手的 myShare/myShares,并更
|
||||
assert.equal(insertedRow?.myShare ?? null, null)
|
||||
assert.equal(insertedRow?.myShares ?? null, null)
|
||||
})
|
||||
|
||||
/**
|
||||
* 线上坑:进大厅后过一会儿「排名靠后的订单跑到前面去」。
|
||||
*
|
||||
* 根因是大厅广播补丁只做「就地覆盖 + 顶部插入」、不重排缓存:
|
||||
* 1) 列表 SQL 按置顶时间排序时,广播快照没带 pinnedAt,排序口径直接丢失;
|
||||
* 2) 广播 upsert 插到第 1 页顶部,会把已置顶的行挤到后面。
|
||||
* 修复 = 后端快照带 pinnedAt + 前端按「置顶优先 → 工单号倒序」重排插行后的列表。
|
||||
*/
|
||||
test('大厅排序比较器:置顶行恒在未置顶行前,同置顶按置顶时间倒序', () => {
|
||||
const pinnedNewer = buildRow({ workOrderId: 1, pinnedAt: '2026-10-24T10:00:00Z' })
|
||||
const pinnedOlder = buildRow({ workOrderId: 2, pinnedAt: '2026-10-24T09:00:00Z' })
|
||||
const unpinned = buildRow({ workOrderId: 3, pinnedAt: null })
|
||||
|
||||
assert.equal(compareWorkerHallOrderRows(pinnedNewer, pinnedOlder) < 0, true)
|
||||
assert.equal(compareWorkerHallOrderRows(pinnedOlder, pinnedNewer) > 0, true)
|
||||
assert.equal(compareWorkerHallOrderRows(pinnedNewer, unpinned) < 0, true)
|
||||
assert.equal(compareWorkerHallOrderRows(unpinned, pinnedNewer) > 0, true)
|
||||
// 双方都未置顶:按工单号倒序(与列表 SQL 的 id DESC 一致)
|
||||
const newer = buildRow({ workOrderId: 10, pinnedAt: null })
|
||||
const older = buildRow({ workOrderId: 9, pinnedAt: null })
|
||||
assert.equal(compareWorkerHallOrderRows(newer, older) < 0, true)
|
||||
})
|
||||
|
||||
test('广播 upsert 插入新行后必须按大厅口径重排,不能把置顶行挤下去', () => {
|
||||
const pinnedRow = buildRow({
|
||||
workOrderId: 100,
|
||||
status: 'open',
|
||||
pinnedAt: '2026-10-24T09:00:00Z',
|
||||
})
|
||||
const envelope = { pages: [buildEnvelope([pinnedRow])], pageParams: [1] }
|
||||
const patched = patchWorkerWorkOrderInfiniteEnvelope(
|
||||
envelope,
|
||||
{
|
||||
operation: 'upsert',
|
||||
data: buildRow({ workOrderId: 200, status: 'open', pinnedAt: null }),
|
||||
},
|
||||
true,
|
||||
['myShare', 'myShares'],
|
||||
compareWorkerHallOrderRows,
|
||||
) as { pages: unknown[] }
|
||||
assert.deepEqual(
|
||||
itemsOf(patched.pages[0]).map((item) => item.workOrderId),
|
||||
[100, 200],
|
||||
'新单排在置顶单后面,而不是插到最前面',
|
||||
)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user