hl-api-changelog/changelogs-v2/2026-05/22_2894-2896_R5-bugs_PR2900-2902.md

4.8 KiB

R5 真测发现 + 修复:PII 应急脱敏 + 配房 BLOCKER + 6 P1

服务: hl-order-service-v3 PR: #2900 / #2901 / #2902 Issue: #2894 / #2895 / #2896 日期: 2026-05-22 影响: 🔴 前端 breaking change(traveler 字段改名) + 配房链路恢复 + 订单详情补字段 + 金额格式统一


⚠️ 关键变化(前端 mmg 必读)

1. 🔴 traveler VO 字段改名(breaking change,前端必同步改 hl-ui)

旧字段 新字段 值格式
idNo idCardMasked 220***********1234(17 字符变长星)
phone phoneMasked 138****2046(11 字符固定星)
emergencyPhone emergencyPhoneMasked 139****5678

适用接口:

  • GET /v3/admin/order/{id}/traveler/list 列表
  • GET /v3/admin/order/{id} 详情 overview.travelers
  • traveler 智能解析 dry-run 输出

前端如有 traveler.idNo / traveler.phone 引用必须改为 traveler.idCardMasked / traveler.phoneMasked

2. 🟢 订单详情新增 transportPlans + itinerary 字段(BUG-3 修)

GET /v3/admin/order/{id} 顶层 data 新增:

  • transportPlans: List<TransportPlanVO>(大交通列表)
  • itinerary: OrderItineraryRespVO(行程)

前端可直接用(原本就缺,现在补上)。

3. 🟢 订单金额字段格式统一 2 位小数

之前 totalAmount=3105.0(1 位)/ refundAmount=0.00(2 位)不一致,统一改为 2 位小数:

  • OrderListItemVO / OrderMainVO:5 字段(totalAmount/paidAmount/balanceAmount/depositAmount/singleRoomSurcharge)走 OrderAmountUtil.to2()
  • Refund Converter 走 MoneyUtil.formatYuan()

前端如对 3105.0 字符串做精确匹配会出问题,改用 parseFloat 或宽松匹配。

4. 🟢 5 个原本经网关 503/500 的 v3 接口现在通了

  • POST /v3/admin/order/hotel-requirements/{rid}/assignments(原 JSON 500)→ 200
  • GET /v3/admin/house/staff(原 504)→ 3s 内返(Feign timeout 收紧 + fallback)
  • GET /v3/admin/contract/{id}(原 500 BadSqlGrammarException)→ 200

一、3 PR 改动

PR #2900 PII 应急脱敏(Closes #2894)

  • traveler 3 字段改名(*Masked 后缀) + Converter 全 SensitiveDataUtil.maskXxx() 包装
  • TravelerSmartParseService.buildDryRunVO 同步脱敏
  • 6 新单测 + 红线 PII 不泄漏断言,128 traveler 测试 0 failure
  • 后续独立工单:DB TypeHandler 加密(order_traveler+fleet_driver 明文存储)+ audit_log 接入

PR #2901 BLOCKER 修复(Closes #2895)

  • BLOCKER-1 配房 500:删 @JsonDeserialize(using = LongDeserializer) 错误用法 → 用原生 Long
  • BLOCKER-2 house/staff 504:houseStaffFeignClient 单独 connectTimeout=2s + readTimeout=3s,触发现有 fallback 返空
  • 5 新单测 29/29 全绿
  • 经验入 memory:雪花 Long 字段禁 @JsonDeserialize(LongDeserializer)

PR #2902 6 P1(Closes #2896)

  • P1-1 contract_status_log 缺 4 BaseDO 列 → V20260522_001.sql 补
  • P1-2 OrderDetailVO 补 transportPlans + itinerary + Service 聚合
  • P1-3 OrderAmountUtil.to2 统一 2 位小数 + RefundConverter 走 MoneyUtil
  • P1-4 inquiry_message.dayNumber → V20260522_002.sql + DO + Service 真实写入
  • P1-5 INVENTORY_CHECK op_log operator_name → AdminContextUtil.getRealName 兜底
  • P1-6 HouseGrabServiceImpl 双写 house_claim_history(opType/fromUserId/toUserId/reason)
  • 180 直接相关测试 0 failure

二、QA R5 真测全量发现(5 agent 累计 22 bug)

Agent 方法 发现
R5-F HOUSE 深度 5 业务链端到端 + 11 DB 反查 + 2 真并发 2 BLOCKER + 3 P1(已修)
R5-G 订单生命周期 5 业务链 + 12 DB 反查 + RateLimiter 实测 1 P0 + 3 P1 + 3 P2/P3(P0/P1 已修)
R5-H 通知字典 6 业务链 + 7 DB 反查 全 PASS,环境性 504 已处理
R5-I fleet+tag+大交通 6 业务链 + 8 DB 反查 + 17 错误码命中 1 P0 + 1 mock(P0 应急已修)

三、测试服验证

服务 commit 状态
hl-gateway dev-v3 含 #2900-2902 已部署
hl-order-service-v3 dev-v3 含 #2900-2902 + Flyway V20260522_001/002 已部署(双实例 8086+8186)

四、留尾(独立工单 backlog)

  • DB TypeHandler 加密迁移(order_traveler + fleet_driver phone/id_card 明文存储)
  • audit_log 接入 admin path decrypt
  • HouseModuleBoundaryTest ArchUnit 违规独立 PR 治理
  • TagLibraryIntegrationTest ApplicationContext 问题独立排查
  • user-service /internal/user/admin/house-staff 真实实装(H07 占位)
  • house_claim_history 表 @Deprecated 标记,前端历史轨迹切 T9 op_log 后下线本期双写

五、关联

  • 工单:#2894 / #2895 / #2896(全部 closed)
  • PR:#2900 / #2901 / #2902(全部 squash merged)
  • QA 报告:.tmp/qa-r5{f,g,h,i}-*-report.txt(共 4 份)
  • memory 升级:feedback_snowflake-long-no-jackson-deserializer.md(雪花 Long 禁 @JsonDeserialize(LongDeserializer))