fix: 免审验收容错与成本中心归一回填超时修复
- worker:等级升级计数移出验收事务,瞬时错误重试一次,最终失败转人工待办且不再返回 500 - worker:待验收阶段修改验收资料时保留 reviewMode/evidenceStatus/evidenceDueAt - cost-center:迁移 107 新增人工待归一覆盖部分索引(生产实测候选聚合 19.6s → 391ms) - cost-center:归一人工商品/按工单回填商品/模板预览前端超时放宽到 300s - cost-center:批处理接口语句超时放宽到 60s(SET LOCAL,在线接口仍为 15s)
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import test from 'node:test'
|
||||
import { hasAcceptanceEvidence } from './work-order-acceptance-evidence.js'
|
||||
import {
|
||||
hasAcceptanceEvidence,
|
||||
resolveVipAutoAcceptEvidencePatch,
|
||||
} from './work-order-acceptance-evidence.js'
|
||||
|
||||
const VIDEO = { url: 'https://example.com/worker-acceptance-video/a.mp4', durationSeconds: 12 }
|
||||
|
||||
@@ -29,3 +32,51 @@ test('验收证据:兼容非数组的 imageUrls(脏数据按无图片处理
|
||||
assert.equal(hasAcceptanceEvidence({ imageUrls: null, video: VIDEO }), true)
|
||||
assert.equal(hasAcceptanceEvidence({ imageUrls: null, video: null }), false)
|
||||
})
|
||||
|
||||
test('VIP 免审:待验收阶段改写验收资料后仍保留免审标记并清空补图期限', () => {
|
||||
const patch = resolveVipAutoAcceptEvidencePatch(
|
||||
{
|
||||
reviewMode: 'vip_auto',
|
||||
evidenceStatus: 'pending',
|
||||
evidenceDueAt: '2026-10-30T06:00:00.000Z',
|
||||
},
|
||||
hasAcceptanceEvidence({ imageUrls: ['https://example.com/a.jpg'] }),
|
||||
)
|
||||
|
||||
assert.deepEqual(patch, {
|
||||
reviewMode: 'vip_auto',
|
||||
evidenceStatus: 'complete',
|
||||
evidenceDueAt: null,
|
||||
})
|
||||
})
|
||||
|
||||
test('VIP 免审:仍无证据时保留原 24 小时补图期限', () => {
|
||||
const patch = resolveVipAutoAcceptEvidencePatch(
|
||||
{
|
||||
reviewMode: 'vip_auto',
|
||||
evidenceStatus: 'pending',
|
||||
evidenceDueAt: '2026-10-30T06:00:00.000Z',
|
||||
},
|
||||
hasAcceptanceEvidence({}),
|
||||
)
|
||||
|
||||
assert.deepEqual(patch, {
|
||||
reviewMode: 'vip_auto',
|
||||
evidenceStatus: 'pending',
|
||||
evidenceDueAt: '2026-10-30T06:00:00.000Z',
|
||||
})
|
||||
})
|
||||
|
||||
test('VIP 免审:改写资料时补图期限缺失也按无期限处理', () => {
|
||||
const patch = resolveVipAutoAcceptEvidencePatch({ reviewMode: 'vip_auto' }, false)
|
||||
|
||||
assert.deepEqual(patch, {
|
||||
reviewMode: 'vip_auto',
|
||||
evidenceStatus: 'pending',
|
||||
evidenceDueAt: null,
|
||||
})
|
||||
})
|
||||
|
||||
test('非 VIP 免审订单不写入免审标记', () => {
|
||||
assert.deepEqual(resolveVipAutoAcceptEvidencePatch({ evidenceStatus: 'complete' }, true), {})
|
||||
})
|
||||
|
||||
@@ -13,3 +13,26 @@ export function hasAcceptanceEvidence(input: {
|
||||
const imageCount = Array.isArray(imageUrls) ? imageUrls.length : 0
|
||||
return imageCount > 0 || Boolean(input.video)
|
||||
}
|
||||
|
||||
/**
|
||||
* 免审核验收的结算标记。
|
||||
*
|
||||
* 打手在「待验收」阶段改写验收资料时会整体重建 `acceptance_json`,
|
||||
* 这里把 `reviewMode` / `evidenceStatus` / `evidenceDueAt` 一起带回去,
|
||||
* 否则「VIP 免审核,待补图」标记、列表筛选和 24 小时补图期限都会丢。
|
||||
*/
|
||||
export function resolveVipAutoAcceptEvidencePatch(
|
||||
previous: Record<string, unknown>,
|
||||
hasEvidence: boolean,
|
||||
): Record<string, unknown> {
|
||||
if (String(previous.reviewMode || '') !== 'vip_auto') return {}
|
||||
return {
|
||||
reviewMode: 'vip_auto',
|
||||
evidenceStatus: hasEvidence ? 'complete' : 'pending',
|
||||
evidenceDueAt: hasEvidence
|
||||
? null
|
||||
: typeof previous.evidenceDueAt === 'string'
|
||||
? previous.evidenceDueAt
|
||||
: null,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user