hl-api-changelog/changelogs-v2/2026-08/06_5588_司机车辆占用缓存态对账任务-新增接口-管理后台.md
API Changelog Bot 5aa3c55dc2
所有检测均成功
changelog-filename-gate / validate (push) Successful in 1s
changelog(#5588): 司机/车辆占用缓存态对账任务(修正脏busy并释放过期holding占用)
2026-08-06 13:00:28 +08:00

3.7 KiB

schema, ticket, title, consumer, author, change_type, backend_status, gateway_status, frontend_status, frontend_owner, frontend_ref, target_release, verified_at, status_note, updated_at, base, generated
schema ticket title consumer author change_type backend_status gateway_status frontend_status frontend_owner frontend_ref target_release verified_at status_note updated_at base generated
hl-changelog/v2 5588 司机/车辆占用缓存态对账任务修正脏busy并释放过期holding占用 admin wx(GIT) 新增接口 deployed verified not_required 后端完成PR #5591 已合并 dev-v3 并部署 TEST,网关验证 3/3 通过。新增 internal 对账端点Quartz 触发),无前端 API 变化。 2026-08-06 dev-v3 2026-08-06T13:10:00+08:00

司机/车辆占用缓存态对账任务修正脏busy并释放过期holding占用

后端完成PR #5591 已合并 dev-v3 并部署 TEST,网关验证 3/3 通过。

关联 / 联系人

链接

联系人

  • 后端负责人: @wx

背景

协调台 E2E 实证:派单发送被"尚未通过候选校验"拦截,根因是 driver_status/vehicle_status 未释放回 idle——16 个 busy 司机中 6 个无 active 占用37%),车辆同样,可派资源被大面积误锁。

代码链路核对结论取消派单释放占用的既有链路publishCanceledEvents → OCCUPANCY_RECOMPUTE outbox → hasActiveAssignmentBy* 反算 → applyOccupancy 守卫已覆盖全部取消入口。TEST 库脏 busy 实际根因:

  1. 5 个司机从未有派单却 busy(外部批量写入缓存列,无事件链路可修复)
  2. holding 单服务日自然过期后无事件触发反算(如乌力吉/蒙C04E0408-03~05 holding 单 08-05 结束后占用永久残留)——AssignmentCompleteJob 只完结 assigned,不处理过期 holding

变更接口

方法 路径 来源 说明
POST /internal/fleet/jobs/occupancy-reconcile/run FleetJobInternalControllerfleet 新增 internal 端点,由 hl-user-service Quartzsys_job单点触发;返回本轮写入的 OCCUPANCY_RECOMPUTE 意图数

/internal/* 经 InternalAuthInterceptor 校验 X-Internal-Token,走内网 Feign LB 直连不经网关admin token 直 curl 403 属正常)。无前端 API 变化

行为变化

新增 OccupancyReconcileJob(占用缓存态对账):

  • 对账口径:以 active 派单holding/assigned 且 end_date >= today为唯一真相;busy 但无 active 占用的司机/车辆为脏态
  • 执行方式:扫 busy 司机/车辆 + 过期 holding 行资源,逐一写 OCCUPANCY_RECOMPUTE 意图Outbox,由既有处理器在资源锁内反算并按守卫写回 busy/idle
  • 安全性不改派单行、不直接改缓存列、不绕过业务守卫rest/pending/maint 人工态不被覆盖);幂等(无 active 占用才回 idle;单资源失败不反噬整轮
  • 附带修复:过期 holding服务日已过但从未产生事件行资源的占用一并释放

前端/调用方动作

无。对账由 sys_job 定时触发(建议每日一次),无需前端配合。

验证证据

  • 定向测试OccupancyReconcileJobTest 4/4;AssignmentServiceTest 372、AssignmentCandidateServiceTest 45 全过
  • fleet verify 3184 项(含 MySQL 8.0.33 集成0 失败;spotless 通过
  • 网关验证TEST,12:58对账前脏 busy 司机=6 车辆=5;触发对账端点32 条 recompute 意图全 SUCCESS;对账后脏 busy 归零(原 6 司机 5 车辆全部 idle;候选复验朝鲁门有 active 占用)仍 busy + available=falseASSIGNMENT_CONFLICT未被误释放