hl-api-changelog/changelogs/2026-05/07_feat_admin_validation_round2_6prs.md
wx 4e0bfb0081 docs(backend-feat): 测试报告产品复核第二轮 17 项必做校验完成 (2026-05-07)
来自 #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
2026-05-07 16:12:15 +08:00

5.4 KiB

date, type, module, priority, notify, status, restart_services, gitea_prs, gitea_issues_closed, parent_tracking
date type module priority notify status restart_services gitea_prs gitea_issues_closed parent_tracking
2026-05-07 backend-feat multi-module(resource/product/refund/insurance/contract/user) medium
@mmg
deployed-pending
hl-resource-service
hl-product-service-v2
hl-order-service-v2
hl-user-service
1815
1816
1817
1818
1819
1820
1808
1809
1810
1811
1812
1813
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_DUPLICATE400 业务码)
  • 服务人员手机号重复 → 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-servicePR #1815
  • hl-product-service-v2PR #1816 + #1819 接收方)
  • hl-order-service-v2PR #1817 + #1818 + #1819 + 提供 #1816 接收方)
  • hl-user-servicePR #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