perf(worker-platform): 排行榜公共缓存与抢单短路,压制 8.5s 慢查询脉冲
- 排行榜:Top 10 改为按 period 全局共享缓存(TTL 30s),SQL 传 currentWorkerId=0; 个人单数解耦为 assigned_worker_id 精准索引查询(TTL 15s),未上榜展示「暂未上榜」, 消除「每个打手一份缓存」导致的 8.5 秒全表聚合穿透; - 抢单短路:新增 work-order-grab-guard,对已关闭工单打 10s 进程内标记,命中直接 409; publishWorkOrderRealtimeChange 统一作废标记,避免撤单/超时重开/重新发布后误杀正常抢单; - 我的订单:默认排序也走「先取 id 再批量回表」的延迟分页,避免宽列 material_json 参与排序; - 文档:新增生产 CPU 波动分析报告,慢查询数字按 6,235 行日志实测重算,并标注修复状态与验收口径。 验证:typecheck / check:sql / eslint / prettier 通过;后端 npm test 914 项(910 pass、4 skip、0 fail)。
This commit is contained in:
@@ -38,6 +38,7 @@ import {
|
||||
resolveWorkerPermissions,
|
||||
stripWorkerPersonalShareFields,
|
||||
} from '../worker-platform/mappers.js'
|
||||
import { evictWorkOrderGrabBlock } from '../worker-platform/work-order-grab-guard.js'
|
||||
import { invalidateWorkerMyOrderCaches } from '../worker-platform/worker-my-order-cache.js'
|
||||
|
||||
export type RealtimeEventType =
|
||||
@@ -188,6 +189,9 @@ export function publishWorkOrderRealtimeChange(input: {
|
||||
hallChanged?: boolean
|
||||
}) {
|
||||
const workOrderId = Math.max(0, Number(input.workOrderId) || 0)
|
||||
// 工单状态变更(撤单 / 超时重开 / 重新发布)会复用同一个工单 id,
|
||||
// 必须立刻作废抢单短路标记,否则正常打手会在 TTL 内被误判 409。
|
||||
evictWorkOrderGrabBlock(workOrderId)
|
||||
void publishWorkOrderSnapshots({ ...input, workOrderId }).catch(() => {
|
||||
publishRealtimeEvent({
|
||||
type: 'work_order.changed',
|
||||
|
||||
Reference in New Issue
Block a user