hl-api-changelog/changelogs-v2/2026-08/3_5444_Step2-canonical-full-snapshot-与稳定槽位.md
Mimingguang 3177d81542
一些检查失败了
changelog-filename-gate / validate (push) Failing after 2s
chore(changelog): 回写 #5336 #5379 #5444 #5446 管理后台实现
修改原因:四项管理后台契约已完成实现、审核、验证并推送业务提交,需要同步终态证据。

修改内容:将四份 source 更新为 implemented,记录 Pi、v2.1 业务提交和验证日期。

实际验证:pnpm checkpoint 全部通过;source npm test 46 项全部通过。涉及 #5336、#5379、#5444、#5446 对应路径。
2026-08-04 10:56:07 +08:00

5.0 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 5444 Step2 canonical full snapshot 与稳定槽位 admin wx(GIT) 修改接口 released verified implemented Pi v2.1@49f38c7cfb4d5859a13c6ab1a7fea540cb524de5 2026-08-04 后端 canonicalSnapshot 契约已发布并完成网关验证;管理后台已由 Pi 领取并开始适配。 2026-08-04 dev-v3 2026-08-03T23:34:18+08:00

Step2 canonical full snapshot 与稳定槽位

#5444#5366 B08/B09 后端):派车弹窗 Step2 canonical full snapshot 与稳定槽位。 后端实现已合入 PR #5448merge 8ceb8c5;测试部署 task 80234589;网关验证通过。

关联

联系人

  • 后端负责人: @wx

变更接口

方法 路径 来源
POST /admin/fleet/assignments/candidates 响应新增 canonicalSnapshot 区块;请求新增可选同代校验参数additive,向后兼容

契约影响文件

  • hl-fleet-service/src/main/java/com/hulalv/fleet/assignment/vo/AssignmentCandidateReqVO.java
  • hl-fleet-service/src/main/java/com/hulalv/fleet/assignment/vo/AssignmentCandidateRespVO.java
  • hl-fleet-service/src/test/java/com/hulalv/fleet/assignment/controller/AssignmentControllerTest.java

请求新增(均可选)

  • expectedPlanGenerationLong·StringStep2 幂等重试/同代校验期望计划代际;携带且与当前 canonical 快照不符时以 605061 拒绝generation 漂移 fail-closed
  • expectedSnapshotVersionLong·String同上,期望快照版本。

响应新增 canonicalSnapshot 区块additive

  • planGenerationLong·String当前计划代际不透明令牌;与 snapshotVersion 共同标识同一份 canonical 快照。
  • snapshotVersionLong·String当前快照版本;同代内容修订递增。
  • retainedSlotIdsLong·String[]):有序 RetainedSlotSet稳定槽位集合;不重编号、不丢 protected/active slot、至少 1 个。
  • editableServiceDatesLocalDate[]):完整有序可编辑服务日。
  • cells:每个 RetainedSlotSet × editableServiceDates 笛卡尔积位置唯一 cell
    • slotIdLong·String
    • serviceDateLocalDate
    • usedUSED / UNUSED / null(无切片行=未编辑)
    • readOnlyBoolean只读 cell 不可被批量操作改写
    • readOnlyReasonString只读原因;可编辑为 null派单已完结 / 派单已取消 / 服务日期已过去 / 对账期已关账)
    • vehicleId / driverIdLong·String,未派或不用车为 null
  • selectedVehicle(对象,未选或资源失效为 nullvehicleId / plate / modelName / seats
  • selectedDriver(对象,未选或资源失效为 nulldriverId / name / maskedPhone(司机域脱敏)/ driverStatus / season

行为说明B08/B09

  • 首次进入 Step2 且不存在稳定槽位时,后端在 requirement 锁 + 独立新事务内原子生成至少 1 个稳定 slotId 并落 fleet_assignment unassigned 每日切片;同一 planGeneration + snapshotVersion 下重复读取/幂等重试不重复建槽、不重编号。
  • selectedVehicle/selectedDriver 为与 snapshotVersion 同代的已选资源展示快照,独立于候选分页/筛选;null/失效资源 fail-closed 不编造。
  • 未传 requirementId 或需求上下文不可用时 canonicalSnapshotnull,候选查询本身不受影响。

前端/调用方动作

  • Step2 前端可消费 canonicalSnapshot 区块组织稳定槽位 UI;重复读取/幂等重试时回传 expectedPlanGeneration/expectedSnapshotVersion 做同代校验。
  • 不新增前端建槽 API 与二次批量查询 API;selectedVehicle/selectedDriver 直接取自现有 selectedVehicleId/selectedDriverId 入参。
  • 未消费新字段的既有调用保持兼容additive

验证证据

  • 定向测试:Step2CanonicalSnapshotServiceTest11 用例:首次原子建槽/同代幂等不重编号/并发/漂移 fail-closed/脱敏/跨页过滤/null 失效/readOnly cellAssignmentCandidateServiceTestAssignmentControllerTestcanonicalSnapshot 挂载 + 透传),全部通过。
  • Fleet 全量测试3022/3023 通过;唯一失败 FleetInsuranceTaskTeamNoMysqlTest 为 Testcontainers 无 Docker 环境型失败(基线上同样失败)。
  • Spotless spotless:check 通过。
  • 网关验证:https://api.test.1814.love:9443 POST /admin/fleet/assignments/candidates 真实订单 3 槽×3 天 9 cell;同代 expected 重试 snapshotVersion 不变;漂移 605061 fail-closed;无 requirement/未知需求快照 null。证据 D:/evidence/5444-gateway-step2-snapshot.json
  • 兼容性结论:请求/响应均为 additive 扩展,向后兼容。