From 627c4c872114fc26fcfa9ca3820e308723a7b1ac Mon Sep 17 00:00:00 2001 From: yaosutu <770858045@qq.com> Date: Tue, 11 Aug 2026 18:15:36 +0800 Subject: [PATCH] =?UTF-8?q?changelog(#5867):=20=E5=87=BA=E8=A1=8C=E4=BA=BA?= =?UTF-8?q?=E6=99=BA=E8=83=BD=E6=89=B9=E9=87=8F=E5=AF=BC=E5=85=A5=E7=BA=B3?= =?UTF-8?q?=E5=85=A5"=E8=87=B3=E5=B0=91=E4=B8=80=E5=90=8D=E6=88=90?= =?UTF-8?q?=E4=BA=BA=E5=A1=AB=E6=89=8B=E6=9C=BA=E5=8F=B7"=E7=A1=AC?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=EF=BC=88581136=EF=BC=8CPR=20#5868=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 补充 #5855 changelog:smart-parse(dryRun=false 正式落库)与 5 个保存入口复用同一 成人手机门禁;dryRun=true 预览不校验。部署测试服网关实调通过:无成人手机导入被 581136 阻断且 DB 零写入,含 1 成人手机导入 200 放行落库。 --- ...保存校验至少一成人填手机号-修改接口-管理后台.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/changelogs-v2/2026-08/11_5855_出行人保存校验至少一成人填手机号-修改接口-管理后台.md b/changelogs-v2/2026-08/11_5855_出行人保存校验至少一成人填手机号-修改接口-管理后台.md index 86b9e7f..1f833c1 100644 --- a/changelogs-v2/2026-08/11_5855_出行人保存校验至少一成人填手机号-修改接口-管理后台.md +++ b/changelogs-v2/2026-08/11_5855_出行人保存校验至少一成人填手机号-修改接口-管理后台.md @@ -31,14 +31,15 @@ base: "dev-v3" | 2 | `POST /v3/admin/order/{id}/traveler/batch-edit` | 新增服务端校验 | 批量编辑出行人保存时新增硬校验,触发返回 581136 | | 3 | `POST /v3/admin/order/{id}/traveler/add` | 新增服务端校验 | 单个新增出行人时新增硬校验,触发返回 581136 | | 4 | `GET /v3/admin/order/{id}/traveler/validate` | 出参文案收紧 | `blockReasons[]` 文案由"至少需要一名出行人填写手机号"收紧为"至少需要一名成人出行人填写手机号",判定口径同步收紧 | +| 5 | `POST /v3/admin/order/{id}/traveler/smart-parse` | 新增服务端校验 | 智能批量导入(`dryRun=false` 正式落库)保存时新增硬校验,触发返回 581136(#5867 补入,与 5 入口同一门禁) | -> 说明:删除出行人接口**不**加此校验。入参 / 出参结构、字段名、类型均无变化。 +> 说明:删除出行人接口**不**加此校验;智能导入的 `dryRun=true` 预览模式**不**校验(仅解析不落库)。入参 / 出参结构、字段名、类型均无变化。 ## 3. 接口详情 | 项 | 值 | |---|---| -| 方法 + 路径 | `PUT /v3/admin/order/{id}/traveler-info`;`POST /v3/admin/order/{id}/traveler/batch-edit`;`POST /v3/admin/order/{id}/traveler/add`;`GET /v3/admin/order/{id}/traveler/validate` | +| 方法 + 路径 | `PUT /v3/admin/order/{id}/traveler-info`;`POST /v3/admin/order/{id}/traveler/batch-edit`;`POST /v3/admin/order/{id}/traveler/add`;`GET /v3/admin/order/{id}/traveler/validate`;`POST /v3/admin/order/{id}/traveler/smart-parse` | | 使用场景 | 管理后台订单详情 - 出行人 Tab:补全出行信息 / 批量编辑 / 单个新增 / 保存前校验 | | 认证 | 管理后台 JWT(admin 端) | | 幂等性 | PUT traveler-info 为全量同步天然幂等;batch-edit / add 为普通写操作 | @@ -89,7 +90,7 @@ base: "dev-v3" | code | message | 触发条件 | |------|---------|----------| -| 581136 | 至少需要一名成人出行人填写手机号用于合同签署 | 保存后"最终生效的出行人集合"中没有任何一名成人(travelerType=ADULT)填写手机号;整个请求被拒,不写库 | +| 581136 | 至少需要一名成人出行人填写手机号用于合同签署 | 保存后"最终生效的出行人集合"中没有任何一名成人(travelerType=ADULT)填写手机号;整个请求被拒,不写库。适用接口:traveler-info 全量同步 / batch-edit 批量编辑 / add 单个新增 / smart-parse 智能批量导入(dryRun=false) | ## 8. 示例 @@ -127,9 +128,9 @@ base: "dev-v3" ## 9. 业务边界 -- 适用:订单出行人的补全 / 批量编辑 / 单个新增保存。 -- 不适用:删除出行人接口(删除不加此校验,即使删完后无成人有手机也不拦截删除动作本身)。 -- 特殊边界:校验看的是"保存后最终生效的集合",不是单条提交行——例如 batch-edit 把唯一有手机的成人 phone 清空,即使其他行不变也会触发 581136。 +- 适用:订单出行人的补全 / 批量编辑 / 单个新增 / 智能批量导入(`smart-parse` 且 `dryRun=false`)保存。 +- 不适用:删除出行人接口(删除不加此校验,即使删完后无成人有手机也不拦截删除动作本身);智能导入 `dryRun=true` 预览模式(仅解析不落库,不校验)。 +- 特殊边界:校验看的是"保存后最终生效的集合",不是单条提交行——例如 batch-edit 把唯一有手机的成人 phone 清空,即使其他行不变也会触发 581136。智能导入为**追加式**(最终集合 = 库中现有 + 本次解析行),只要合并后存在一名成人有手机即放行。 ## 10. 修改前后对比 @@ -151,10 +152,12 @@ base: "dev-v3" - 581136 通过 HTTP 200 + `code=581136` 返回(Result 约定),**不是** HTTP 4xx/5xx,前端拦截器按业务 code 处理。 - `phone` 字段更新语义:`null`=保留原值,`""`=清空。前端表单回显时注意区分"未改动"与"主动清空"。 - 删除出行人不受此校验约束。 +- 智能批量导入:仅 `dryRun=false` 正式落库时校验,`dryRun=true` 预览不校验;导入文本中无法识别手机号属正常,门禁统计的是"最终集合里是否有成人带手机",不是"每行是否都有手机"。 ## 13. 关联 / 联系人 - Issue: https://git.1814.love:8443/wx/HL/issues/5855 - PR: https://git.1814.love:8443/wx/HL/pulls/5858 - Commit: https://git.1814.love:8443/wx/HL/commit/06f03e40c3 +- 关联补充(智能批量导入纳入同一门禁):Issue https://git.1814.love:8443/wx/HL/issues/5867 | PR https://git.1814.love:8443/wx/HL/pulls/5868 - 后端负责人:腰苏图(yst)