feat(dispatch): unify whole vehicle scheduling, source ownership and staged execution

This commit is contained in:
2026-10-19 23:40:42 +08:00
parent e0677e7ae7
commit 9dd34791f7
346 changed files with 29245 additions and 12602 deletions
@@ -58,10 +58,18 @@ test('eight-hour cutoff has coherent later departure delivery and driver end wit
assert.deepEqual(grayUiSchedule(now + 999), schedule)
assert.match(schedule.cutoffAt, /Z$/); assert.match(schedule.plannedDepartureAt, /Z$/)
assert.doesNotMatch(schedule.plannedDeliveryAt, /Z$/)
const body = { idempotencyKey: 'stable', plannedDeliveryAt: 'old', fees: [{ amount: 30 }] }
const body = { idempotencyKey: 'stable', recordVersion: '9007199254740993', groups: [
{ groupKey: 'A:FBA:ONT8', plannedDeliveryAt: 'old', fees: [{ amount: 30 }] },
{ groupKey: 'B:FBA:ONT8', plannedDeliveryAt: 'other', fees: [{ amount: 20 }] },
] }
const applied = applyGrayUiTransportWindow('POST', '/api/platform/v1/last-leg/dispatches/DS-1/transfer-delivery', body, schedule)
assert.equal(applied.plannedDeliveryAt, schedule.plannedDeliveryAt)
assert.equal(applied.idempotencyKey, body.idempotencyKey); assert.deepEqual(applied.fees, body.fees); assert.equal(body.plannedDeliveryAt, 'old')
assert.deepEqual(applied.groups.map(group => group.plannedDeliveryAt), [schedule.plannedDeliveryAt, schedule.plannedDeliveryAt].map(value => new Date(value).toISOString()))
assert.equal(applied.idempotencyKey, body.idempotencyKey); assert.equal(applied.recordVersion, body.recordVersion)
assert.deepEqual(applied.groups.map(group => group.fees), body.groups.map(group => group.fees))
assert.deepEqual(applied.groups.map(group => group.groupKey), body.groups.map(group => group.groupKey))
assert.deepEqual(body.groups.map(group => group.plannedDeliveryAt), ['old', 'other'])
assert.throws(() => applyGrayUiTransportWindow('POST', '/api/platform/v1/last-leg/dispatches/DS-1/transfer-delivery',
{ idempotencyKey: 'stable', plannedDeliveryAt: 'old', fees: [{ amount: 30 }] }, schedule), /NATIVE_DELIVERY/)
assert.equal(applyGrayUiTransportWindow('POST', '/api/auth/login', body, schedule), body)
assert.equal(applyGrayUiTransportWindow('GET', '/api/platform/v1/last-leg/dispatches/DS-1/transfer-delivery', body, schedule), body)
assert.throws(() => grayUiSchedule(NaN), /CLOCK/)