From 03887166346cd20cba321d869f67b5235bb8d983 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Thu, 21 May 2026 20:48:43 +0800 Subject: [PATCH] docs(changelog-v2): Round 1 review followup (PR #2845-2848) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dev-v3 5 天工作流 Round 1 review 4 张 P0/P1 工单(#2841-2844)修复落地测试服: - HOUSE 砍死代码 -1198 行(3 零订阅 Event + publishHotelSwapped + 4 薄 Service + ErrorCode 段位合并) - 红线整改反向违规修复 + CRYPTO/MD5 错误码 4 处去重 + BusinessException cause 重载 - product-v2 简化(EntityFieldDiffUtil + restore @Lock4j + meal_option 缓存) - HOUSE 收尾(DRIVER 撤 + maskPhone 复用 PiiMaskUtil + writeOpLog 统一) 前端关注: - 产品操作日志 changes 详情格式从展开收敛为聚合 summary - 大交通 mode Converter 默认值删除,后端 Service 显式补 - HOUSE 换酒店 DRIVER 通知暂撤,等 FLEET 接通后恢复 --- ...841-2844_review-r1-followup_PR2845-2848.md | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 changelogs-v2/2026-05/22_2841-2844_review-r1-followup_PR2845-2848.md diff --git a/changelogs-v2/2026-05/22_2841-2844_review-r1-followup_PR2845-2848.md b/changelogs-v2/2026-05/22_2841-2844_review-r1-followup_PR2845-2848.md new file mode 100644 index 0000000..a4003ca --- /dev/null +++ b/changelogs-v2/2026-05/22_2841-2844_review-r1-followup_PR2845-2848.md @@ -0,0 +1,119 @@ +# Round 1 review 跟进:HOUSE 砍 1198 行 + 红线整改反向修复 + product-v2 简化 + 出行人/大交通清理 + +> **存放目录**: 二期(`order-v3` 标签)→ `changelogs-v2/2026-05/` +> **服务**: hl-user-service + hl-product-service-v2 + hl-resource-service + hl-mp-service + hl-gateway + hl-order-service-v3 +> **PR**: #2845 / #2846 / #2847 / #2848 +> **Issue**: #2841 / #2842 / #2843 / #2844 +> **日期**: 2026-05-22 +> **影响范围**: 多服务接口契约**无破坏性变更**,内部代码简化为主,但**操作日志 changes 详情格式从展开改为聚合** + +--- + +## ⚠️ 关键变化(前端需关注) + +### 1. 🔴 产品操作日志 `changes` 详情格式收敛(影响:运营后台展示) +PR #2847 把 `EntityFieldDiffUtil.diffCollectionDetailed`(86 行 8 参展开)简化回 `diffCollection` 聚合: + +**前**:每个节点 ADD/DELETE/MODIFY 单独一条 changes(改一天 5 节点 5 条),超 30 条裁断"其他 N 项变更未展开" +**后**:聚合为 `共 N → 共 M (新增 X / 删除 Y)` 单条 summary + +前端 `/admin/product/operation-log/search` 接口返回的 `changes` JSON 字段格式简化,**展示"动了哪个节点"如有需求需后端补 detail 端点或前端拿原 nodeList diff 渲染**。 + +### 2. 🟡 大交通 `TransportPlan.mode` 不再有 Converter 默认值 +PR #2848 删 `TransportPlanConverter.fromAdminReq` 中硬编码的 `mode="TOGETHER"`。前端如果之前 add/edit 不传 mode 依赖后端默认 TOGETHER 仍能工作(addTransportPlan Service 显式补);**batchReplace 后端显式 SEPARATE**,与文档 §2.6.2 一致。 + +### 3. 🟡 换酒店 DRIVER 通知暂时撤回(等 FLEET 接通再补) +PR #2848 撤回 `HOUSE_HOTEL_SWAPPED_DRIVER` event 发布 + Dispatcher 删 DRIVER case + V20260522_001 SQL 删 notification_event_config 行。**司机暂不再收到换酒店通知**,等 FLEET vehicle_plan 反查 Feign 工单接通后一次性补 publisher + V*.sql + dispatcher 三件套(独立工单)。 + +--- + +## 一、背景 + +dev-v3 5 天工作流 Round 1 review(2026-05-22),6 agent 并发对 05-16~05-21 wx 提交 50+ PR 复审,维度加 "**反过度设计 + 简洁可读**" 专项,产出 10 P0 + 30+ P1,打包 4 张工单 #2841-#2844 → 4 个 dev agent 并行修 → 4 张 PR squash 合 dev-v3 → 测试服全部署生效。 + +**总收益**:HOUSE 模块净 -1198 行,product-v2 净 -198 行,user/resource/mp 错误码段位收敛,4 处 Service 内 Wrapper 下沉 Mapper default。**零功能损失,代码可读性显著提升**。 + +--- + +## 二、关键改动汇总 + +### #2845 (Closes #2841) — 红线整改反向违规 + 错误码去重 + Object 字段 +- **PR #2439 红线 5 整改反向引入红线 1+4 修复**:LoginLogService / UserService / AdminUserService 4 处 Service 内构造 Wrapper 下沉到 Mapper default +- **CRYPTO/MD5 错误码 4 处去重**:全部复用 `SystemErrorCode.CRYPTO_ALGORITHM_UNAVAILABLE (900102)` +- **BusinessException 加 cause 重载**:JwtAuthFilter/VariFlight/Amap/WxCrypt 异常带 cause 透传堆栈 +- **PR #2467 DASHBOARD 4 错误码合并** → 复用 `CommonErrorCode.FEIGN_CALL_FAILED` +- **PR #2430 7 枚举错误码合并** → 复用 `CommonErrorCode.INVALID_PARAM` +- **MpTripDetailVO.suppliesList/contracts/insurances**:`Object` → `List>`;`dailyNodes` 加 `@Deprecated` +- **删纯透传 facade**:AdminUserService.countAll/listByAdminIds + UserService.countAll +- **决策**:不新增 ErrorCode 常量(用户铁规"不引入新错误码");User 未启用 @TableLogic 保留 `isNull(deletedAt)` + +### #2846 (Closes #2842) — HOUSE 砍死代码 -1198 行 +- 删 **3 个零订阅 Event POJO**:EnrollChangedEvent / OrderCancelledHouseEvent / RoomChangedEvent +- 删 **publishHotelSwapped MQ 链路**(零订阅 topic + HotelSwappedEvent POJO + TOPIC_HOTEL_SWAPPED + RocketMQTemplate 注入) +- 合并 **4 个薄 Service**:HouseStateChangeService → HouseStateMachineHelper / HouseInquiryTimeoutService → HouseInquiryService / HouseAssignmentInternalQueryService → HouseAssignmentService / HouseHotelSwapAdapter → HouseHotelSwapServiceImpl +- **HouseFeignErrorCode 整段并入 HouseInternalErrorCode**(段位重叠 + 语义重复) +- **HouseInquiryErrorCode 595xxx → 808xxx 段位** +- HouseE2EWalkthroughIT 8 个 @Test 改 `Assertions.fail("待 QA 工单 Hxx")` +- 删死状态机:CUSTOMER_CHANGE 5 from(main 零 fire)+ SWAP_HOTEL_COMMIT CLAIMING→CLAIMING 自循环 +- 删 HouseInventoryCheckedEvent + publish 调用(零消费方) +- swap 触发收紧:fireSwapStateChange 只在 OPEN SWAP_HOTEL/REFUND 待办存在时触发 + +### #2847 (Closes #2844) — product-v2 简化 + 餐饮 facade 缓存 +- **EntityFieldDiffUtil.diffCollectionDetailed 简化**(86 行 → 删,回 diffCollection 聚合) +- **ProductItineraryService.buildItineraryChanges 同步简化**(-63 行) +- **ProductSnapshotService.restoreSnapshot 加 @Lock4j(keys="#productId")** +- **FieldLabelDict 抽 dict(String...) helper**(-28 行) +- **product-v2 改动文件 javadoc HTML 标签清零**(铁规 15h) +- **ProductDetailAggregator.toOperationLogVO 删,改调 ProductOperationLogService.toRespVO**(消除双份实现) +- **ProductItineraryAggregateFacade meal_option 缓存**(7 天产品 Feign 21 次 → 0 次,类成员 volatile Map + @PostConstruct + @Scheduled 5min) + +### #2848 (Closes #2843) — HOUSE 收尾 + 出行人/大交通清理 +- **DRIVER 通知占位 noop 撤回**(publisher + dispatcher + V20260522_001 SQL DELETE config 三件套) +- HouseAssignmentService.maskPhone 改调 **复用现有 PiiMaskUtil**(KISS) +- **resolveSwapFromState 合并双查为单 IN 查询**(HouseTodoMapper.selectOpenByOrderAndTypes) +- **HouseAssignmentService.submit hotelName 接通 HouseHotelCacheService 真实拉**(空时落 null 不再写中文占位"待拉取酒店主数据") +- **HouseInquiryService.writeOpLog 签名加 operatorName 参数**,5 调用方显式传(MQ/@Async 场景拿到真实姓名) +- **TravelerConverter 删 2 个 0 调用 toInternalVOList 重载**(单参 + 双参) +- **TravelerErrorCode 删 4 个 0 调用错误码**(581117/581124/581126/581133)+ 581121 @Deprecated 指向 581144 +- **TransportPlanConverter.fromAdminReq 不硬编码 mode**(Service 显式传) +- ProductSnapshotService javadoc 措辞修正 + +--- + +## 三、变更接口清单(仅前端可感知) + +| # | 接口 | 方法 | 路径 | 变更类型 | 说明 | +|---|------|------|------|----------|------| +| 1 | 产品操作日志 search | GET | `/admin/product/operation-log/search` | **响应字段格式收敛** | `changes` 数组中 collection-diff 由"展开 N 条节点级"改为"1 条聚合 summary" | +| 2 | 大交通 add/edit | POST/PUT | `/v3/admin/order/{id}/transport-plan/*` | **不变** | mode 字段后端 Service 显式设默认值,前端可继续不传 | +| 3 | HOUSE 换酒店通知 | (后端事件) | - | **DRIVER 暂撤** | 司机收不到换酒店通知,等 FLEET Feign 接通后恢复 | + +--- + +## 四、测试服验证状态 + +| 服务 | 部署 commit | uptime | 验证 | +|------|------------|--------|------| +| hl-user-service | dev-v3 含 #2845/#2848 | 20:40 | ✅ V20260522_001 success=1 + DRIVER config 已删 | +| hl-product-service-v2 | dev-v3 含 #2845/#2847/#2848 | 20:41 | ✅ Spring 启动正常 | +| hl-resource-service | dev-v3 含 #2845 | 20:42 | ✅ | +| hl-mp-service | dev-v3 含 #2845 | 20:43 | ✅ | +| hl-gateway | dev-v3 含 #2845 | 20:44 | ✅ | +| hl-order-service-v3 | dev-v3 含 #2846/#2848 | 20:46(SSH restart 兜底) | ✅ HOUSE 接口活着(grab-pool/inquiry 返 200/400 合规) | + +--- + +## 五、留尾(独立工单后续) + +- **HOUSE-SWAP DRIVER 通知 wework 真值切换** → FLEET `vehicle_plan` 反查 Feign 接通后补 publisher + V*.sql + dispatcher 三件套 +- **HOUSE-FIX-A `loadProductPool` 真实化** → H04 接通 `ProductV2FeignClient.getOrderProductId` +- **#2515 MaterialCategory ↔ Permission 双 @Lazy 循环依赖** → 抽 `PermissionGate` 接口重构(大改动 backlog) +- **EquipmentTemplateService ↔ ProductLineService 双 @Lazy** → 抽 `ProductEquipmentBindingService`(backlog) + +--- + +## 六、关联 + +- 工单: #2841 / #2842 / #2843 / #2844(全部 closed) +- PR: #2845 / #2846 / #2847 / #2848(全部 merged into dev-v3) +- Review 来源: Claude /@cr Round 1 6 agent 并发 2026-05-22(维度:反过度设计 + 简洁可读)