add:新增同一个工单同一人可以多次拼单
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
/** 客户端幂等键:一次用户点击一个,用于拼单参与/抢单的服务端去重。 */
|
||||
export function createRequestId(prefix = 'req'): string {
|
||||
const random =
|
||||
typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function'
|
||||
? crypto.randomUUID()
|
||||
: `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`
|
||||
return `${prefix}-${random}`
|
||||
}
|
||||
@@ -89,7 +89,20 @@ export function resolveWorkerMyOrderRealtimeVerdict(input: {
|
||||
}): { operation: 'upsert' | 'remove'; shouldInsert: boolean } {
|
||||
const item = isRecord(input.item) ? input.item : {}
|
||||
const statusFilter = String(input.statusFilter || '')
|
||||
const statusMatches = !statusFilter || statusFilter === String(item.status || '')
|
||||
/**
|
||||
* 服务端快照里的 `workerStatuses` 才是「这张单属于哪些页签」的准确答案。
|
||||
*
|
||||
* 同一打手在同一工单可能有多份份额(多次拼单),一张单可以同时出现在「代练中」和「待验收」;
|
||||
* 而快照的 `status` 只能是一个值。旧逻辑拿单个 status 跟页签比对,只要不相等就删行,
|
||||
* 于是多份额工单总会在其中一个页签里被删掉(表现为「待验收有时候没有数据」)。
|
||||
* 老事件/其它来源没有该字段时,退回原来的单状态比对。
|
||||
*/
|
||||
const tabs = Array.isArray(item.workerStatuses)
|
||||
? item.workerStatuses.map((tab) => String(tab || '')).filter(Boolean)
|
||||
: []
|
||||
const statusMatches =
|
||||
!statusFilter ||
|
||||
(tabs.length > 0 ? tabs.includes(statusFilter) : statusFilter === String(item.status || ''))
|
||||
const statusProvable = input.explicitOrderNo || statusMatches
|
||||
const shouldRemove = String(input.operation || '') === 'remove' || !statusProvable
|
||||
|
||||
|
||||
Reference in New Issue
Block a user