From 9bbb232afe96daca18e31dbefb575167db41f25d Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Thu, 18 Jun 2026 10:16:18 +0800 Subject: [PATCH] =?UTF-8?q?docs(changelog):=20=E8=B5=84=E6=BA=90=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=8E=A5=E5=8F=A3=E5=A5=91=E7=BA=A6=E5=AE=A1=E8=AE=A1?= =?UTF-8?q?=E4=B8=8B=E4=B8=80=E6=A2=AF=E9=98=9F=20P1=E4=B8=AD/P2=20(PR=20#?= =?UTF-8?q?3957,=20=E7=AE=A1=E7=90=86=E5=90=8E=E5=8F=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...队-更多状态校验+季节引用替换+错误码-修改接口-管理后台.md | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 changelogs-v2/2026-06/18_3957_资源服务接口契约审计修复下一梯队-更多状态校验+季节引用替换+错误码-修改接口-管理后台.md diff --git a/changelogs-v2/2026-06/18_3957_资源服务接口契约审计修复下一梯队-更多状态校验+季节引用替换+错误码-修改接口-管理后台.md b/changelogs-v2/2026-06/18_3957_资源服务接口契约审计修复下一梯队-更多状态校验+季节引用替换+错误码-修改接口-管理后台.md new file mode 100644 index 0000000..e6e29c7 --- /dev/null +++ b/changelogs-v2/2026-06/18_3957_资源服务接口契约审计修复下一梯队-更多状态校验+季节引用替换+错误码-修改接口-管理后台.md @@ -0,0 +1,64 @@ +# 资源服务接口契约审计修复(下一梯队 P1中/P2:更多状态校验 + 季节引用替换 + 错误码)— 修改接口 — 管理后台 + +> 变更类型:⚠️ 行为收紧(更多端点非法状态拒绝)+ 数据一致性修复,无破坏性删除 +> 端类型:管理后台(景区/活动/酒店/餐厅/服务/人员/车型/费用/攻略/素材) +> 日期:2026-06-18 +> 服务:hl-resource-service +> PR:https://git.1814.love:8443/wx/HL/pulls/3957 +> 承接:高置信 P0/P1 批次 PR #3948(见 17_3948_*.md) + +--- + +## ⚠️ 关键说明 + +接口契约审计的**下一梯队**(P2-high/medium + P1-medium,145 条原始发现)对抗复核后修复,承接 #3948。已合并 dev-v3、部署测试服双实例(totalCodes=249)、本地全量 1630 单测零新增回归。对抗复核正确丢弃 46 项假阳性/已修项。 + +下面只列与前端对接相关的增量(在 #3948 基础上)。 + +--- + +## 1. 更多状态端点收紧:非法状态值被拒绝(承接 #3948 第 1 节,覆盖更多端点) + +价格日历批量改状态 / 标签等端点补齐状态字典白名单校验,传字典外值返业务错误码而非静默落库: + +| 域 | 端点 | 字典 | +|---|---|---| +| 活动 | `/admin/activity/.../prices/batch-status` | 价格日历 AVAILABLE/SOLD_OUT/CLOSED | +| 酒店房型 | `/admin/hotel/room-type/.../prices/batch-status` | 同上 | +| 人员/车型/服务 | 各 `.../prices/batch-status` | 同上 | +| 价格日历日期 | 各价格日历端点 | 日期格式 yyyy-MM-dd 非法拒绝 | + +--- + +## 2. 季节素材引用「替换」语义修复(数据一致性) + +`DELETE/保存景区季节`(`saveSeason` 编辑场景)此前只新增引用、不清旧引用 → 被移除的素材 `material_ref` 残留、`ref_count` 虚高。本次改为**先按 biz 解绑旧引用再按本次入参重绑**,引用集合如实反映保存后状态。 + +--- + +## 3. 新增错误码(前端按 Result.code 处理,承接 #3948 共 26 个) + +本批新增 11 个(resource 段 3xxxxx): + +| 场景 | 错误码 | +|---|---| +| 价格日历状态非法 | 320501/310410/350304/360304 等 | +| 价格日历日期格式非法 | 320502/310411 | +| 住宿/标签不存在 | 310407/310409/320303/360305/370706 | +| 住宿被产品引用无法删除 | 310408 | +| 批量酒店ID为空 | 310412 | +| 费用变更原因必填 | 390903 | +| 车型价格日历状态非法 | 340404 | + +--- + +## 4. 其它(前端基本无感) + +- adhoc 标签并发建重名兜底(唯一键);多写补事务;内部裸异常 → IErrorCode;删除被引用守卫 +- *Name/关联字段回填、Map→VO、列表过滤补全(承接 #3948 第 2/3 节) + +--- + +## 备注 + +- P3 + low 置信发现暂未处理;待产品确认项见 #3948 PR body(InternalHotel status 类型、Material 权限 no-op、MpScenic seasons、GROUP 车型等)。