From 4e0bfb008103969835d7ad9fe6863fe158eb32bc Mon Sep 17 00:00:00 2001 From: wx Date: Thu, 7 May 2026 16:12:15 +0800 Subject: [PATCH] =?UTF-8?q?docs(backend-feat):=20=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=8A=A5=E5=91=8A=E4=BA=A7=E5=93=81=E5=A4=8D=E6=A0=B8=E7=AC=AC?= =?UTF-8?q?=E4=BA=8C=E8=BD=AE=2017=20=E9=A1=B9=E5=BF=85=E5=81=9A=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E5=AE=8C=E6=88=90=20(2026-05-07)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 来自 #1796 22 项产品复核分类后的 17 项"必做"已 6 PR 修复合并 dev: - PR #1815 (Closes #1808) resource: 5 资源 batchDelete + 景区名重复 + 手机号重复 - PR #1816 (Closes #1809) product: 删除产品/预订条款 + 跨服务 Feign 不配 fallback - PR #1817 (Closes #1810) refund: 拒绝必填原因 + 阶梯重叠 + 政策删除 - PR #1818 (Closes #1811) insurance: 删除方案 plan_id 反查 - PR #1819 (Closes #1812) contract: 删除方案跨服务 Feign 反查 - PR #1820 (Closes #1813) user: 探索分类删除/重名 + 电话格式 @mmg 看到请配合: 1. 删除按钮 catch 新业务码弹窗显示后端 message(含引用数) 2. 创建/更新表单 catch 重名/重号校验 3. PHONE 渠道兼容 400/800 客服热线 需重启 4 服务: hl-resource-service / hl-product-service-v2 / hl-order-service-v2 / hl-user-service 跨服务 Feign 部署顺序详见 changelog --- .../07_feat_admin_validation_round2_6prs.md | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 changelogs/2026-05/07_feat_admin_validation_round2_6prs.md diff --git a/changelogs/2026-05/07_feat_admin_validation_round2_6prs.md b/changelogs/2026-05/07_feat_admin_validation_round2_6prs.md new file mode 100644 index 0000000..68753ca --- /dev/null +++ b/changelogs/2026-05/07_feat_admin_validation_round2_6prs.md @@ -0,0 +1,105 @@ +--- +date: 2026-05-07 +type: backend-feat +module: multi-module(resource/product/refund/insurance/contract/user) +priority: medium +notify: ["@mmg"] +status: deployed-pending +restart_services: ["hl-resource-service", "hl-product-service-v2", "hl-order-service-v2", "hl-user-service"] +gitea_prs: [1815, 1816, 1817, 1818, 1819, 1820] +gitea_issues_closed: [1808, 1809, 1810, 1811, 1812, 1813] +parent_tracking: 1796 +--- + +# 测试报告 22 项产品复核第二轮:17 项必做校验全部修复(6 PR 合并 dev) + +## 背景 + +来自 #1796 测试报告产品复核工单的 22 项分类决策,17 项判定为"必做(数据完整性 + 合规 + 简单同模式)"已 6 PR 修复完成;剩 5 项涉及产品方向决策保留 #1796 等产品方过。 + +## 6 PR 改动总览 + +| PR | 工单 | 模块 | 改动 | 单测 | +|----|------|------|------|------| +| #1815 | #1808 | hl-resource-service | 5 资源 batchDelete + 景区名重复 + 服务人员手机号重复 | 1133 全绿 | +| #1816 | #1809 | hl-product-service-v2 + 跨服务 Feign | 删除产品/预订条款引用校验 | 1098+31 全绿 | +| #1817 | #1810 | hl-order-service-v2 refund | 拒绝必填原因 + 阶梯重叠 + 政策删除 | 194 全绿 | +| #1818 | #1811 | hl-order-service-v2 insurance | 删除方案 plan_id 反查校验 | 158 全绿 | +| #1819 | #1812 | hl-order-service-v2 contract + 跨服务 Feign | 合同方案删除 product 反查 | 302+24 全绿 | +| #1820 | #1813 | hl-user-service | 探索分类删除/重名 + PHONE 渠道格式 | 75 全绿 | + +总计 55 文件 ~1700 行,4500+ 单测全绿。dev HEAD: cc3e6ac6 → 60c653c4。 + +## 前端配合(@mmg) + +### 1. 删除按钮可能新增"已被引用"业务异常 + +下面接口删除前会调引用校验: + +| 接口 | 校验逻辑 | 错误码(业务码) | +|------|---------|-----------------| +| `DELETE /admin/scenic/batch` | 5 资源批量删除前查产品引用 | SCENIC_DELETE_IN_USE 等 | +| `DELETE /admin/restaurant/batch` | 同上 | RESTAURANT_DELETE_IN_USE | +| `DELETE /admin/supplies/batch` | 同上 | SUPPLIES_DELETE_IN_USE | +| `DELETE /admin/staff/batch` | 同上 | STAFF_DELETE_IN_USE | +| `PUT /admin/supplies-combo/{id}/disable` | 下架前查 | SUPPLIES_COMBO_DELETE_IN_USE | +| `DELETE /admin/product/{id}` | 删除前 Feign 查订单引用 | PRODUCT_HAS_ORDERS_CANNOT_DELETE (400303) / REF_CHECK_FAILED (400304) | +| `DELETE /admin/booking-terms/{id}` | 删除前查产品补充引用 | BOOKING_TERMS_IN_USE (440201) | +| `DELETE /admin/refund-policy/{id}` | 删除前查退款申请引用 | 530210 | +| `DELETE /admin/insurance/scheme/{id}` | 删除前 plan_id 反查保险订单 | 540222 | +| `DELETE /admin/contract/scheme/{id}` | 删除前 Feign 查产品引用 | 510218 / 510219 | +| `DELETE /admin/explore/category/{id}` | 删除前查内容引用 | 220902 | + +**前端建议**:catch 这些业务码时弹窗显示后端 message(含被引用数 N,方便用户去解关联)。 + +### 2. 创建/更新校验新增 + +- 景区名称重复 → SCENIC_NAME_DUPLICATE(400 业务码) +- 服务人员手机号重复 → STAFF_PHONE_DUPLICATE +- 探索分类标题重复 → EXPLORE_CATEGORY_TITLE_DUPLICATE (220901) +- 拒绝退款 remark 必填 → 530208/530209 +- 退款政策阶梯天数重叠 → 530209 + +### 3. PHONE 渠道电话格式 + +`/admin/contact/save` 的 PHONE 渠道 value 字段加格式校验,正则兼容: +- 手机号:`1[3-9]\d{9}` +- 座机:`0\d{2,3}-?\d{7,8}` +- 客服热线:`[48]00-?\d{3,4}-?\d{3,4}`(兼容 400/800 客服) + +## 重要部署注意 + +### 跨服务 Feign 依赖(#1816 + #1819) + +#### #1816 product 删除查订单(必看) +- hl-product-service-v2 调 hl-order-service-v2 的 `/internal/order/count-active-by-product` +- **Feign 不配 fallback**(写动作严格阻断,订单服务异常不放行删除) +- 部署顺序:先部署 hl-order-service-v2(提供新 endpoint)→ 再部署 hl-product-service-v2 + +#### #1819 contract 删除查产品(必看) +- hl-order-service-v2 调 hl-product-service-v2 的 `/internal/product/count-by-contract-scheme/{schemeId}` +- Feign 配 fallback 返 `Result.error("产品服务不可用")` 不放行删除 +- 部署顺序:先 hl-product-service-v2 → 再 hl-order-service-v2 + +### 重启服务清单 +- hl-resource-service(PR #1815) +- hl-product-service-v2(PR #1816 + #1819 接收方) +- hl-order-service-v2(PR #1817 + #1818 + #1819 + 提供 #1816 接收方) +- hl-user-service(PR #1820) + +## 已知 follow-up(不阻塞合并,会建独立工单跟踪) + +1. **product 侧 `/internal/product/resource-in-use` Controller 仍未实现** —— PR #1815 资源侧调用链路打通,但 product 侧 endpoint 缺失,FallbackFactory fail-open 返空 list,**部署后 5 项资源校验暂不真正拦截**。这是 PR #1807 起就存在的遗留。 +2. **PR #1815 分层违规**:ScenicSpotService.updateSpot:248-251 + StaffService.validatePhoneUnique:639-645 在 Service 层直接 `new LambdaQueryWrapper<>()`,违反 CODE_RULES 1.2 / 附录 C #2,应下沉为 Mapper default 方法。 +3. **/@bug 早期发现的资源服务共性问题**:8 个资源服务 (hotel/scenic/activity/restaurant/staff/supplies/cost/vehicle) 的 updateStatus 全缺 checkResourceInUse,本批 PR 仅修了 5 个,其他 3 个待延伸。 + +## 验收 + +- [ ] 测试服部署 4 服务后 admin token 跑各 DELETE 接口验业务码 +- [ ] 前端 catch 错误码 + 弹窗提示 +- [ ] 跨服务 Feign 链路通畅(部署顺序对) + +## 关联 + +- 父工单:#1796 测试报告产品复核 +- 6 子工单:#1808~#1813 已自动 close