feat: 添加 G5 room_status 写入的冲突键排序与去重功能,并实现死锁自动重试机制

This commit is contained in:
2026-03-24 09:54:46 +08:00
parent f14d8b155c
commit 1ee0988ac6
3 changed files with 139 additions and 21 deletions

View File

@@ -71,4 +71,15 @@
- **WHEN** 系统收到任意一包属于同一 `(hotel_id, room_id)` 的 G5 room_status 数据
- **THEN** 即使业务字段与现存记录完全一致,也应执行一次 `ON CONFLICT DO UPDATE`
- **AND** 不应在 G5 room_status 的冲突更新路径上使用“字段无变化则跳过 UPDATE”的 WHERE 条件
- **AND** 应依赖数据库触发器自动刷新 `ts_ms`
- **AND** 应依赖数据库触发器自动刷新 `ts_ms`
#### Scenario: G5 room_status 写入前按冲突键排序并去重
- **WHEN** 一批 G5 room_status 数据进入写入阶段
- **THEN** 系统应先按 `(hotel_id, room_id)` 排序
- **AND** 对同一 `(hotel_id, room_id)` 仅保留 `ts_ms` 最大的一条记录
- **AND** 去重后的结果再进入 `INSERT ... ON CONFLICT DO UPDATE`
#### Scenario: G5 room_status 死锁自动重试
- **WHEN** G5 room_status 的 upsert 遇到 PostgreSQL 死锁错误 `40P01`
- **THEN** 系统应进行短暂退避后自动重试
- **AND** 重试应仅作用于 G5 room_status 路径