changelog(#5867): 出行人智能批量导入纳入"至少一名成人填手机号"硬校验(581136,PR #5868)
一些检查失败了
changelog-filename-gate / validate (push) Failing after 2s

补充 #5855 changelog:smart-parse(dryRun=false 正式落库)与 5 个保存入口复用同一
成人手机门禁;dryRun=true 预览不校验。部署测试服网关实调通过:无成人手机导入被
581136 阻断且 DB 零写入,含 1 成人手机导入 200 放行落库。
这个提交包含在:
yaosutu 2026-08-11 18:15:36 +08:00
父节点 c2ec420f36
当前提交 627c4c8721

查看文件

@ -31,14 +31,15 @@ base: "dev-v3"
| 2 | `POST /v3/admin/order/{id}/traveler/batch-edit` | 新增服务端校验 | 批量编辑出行人保存时新增硬校验,触发返回 581136 | | 2 | `POST /v3/admin/order/{id}/traveler/batch-edit` | 新增服务端校验 | 批量编辑出行人保存时新增硬校验,触发返回 581136 |
| 3 | `POST /v3/admin/order/{id}/traveler/add` | 新增服务端校验 | 单个新增出行人时新增硬校验,触发返回 581136 | | 3 | `POST /v3/admin/order/{id}/traveler/add` | 新增服务端校验 | 单个新增出行人时新增硬校验,触发返回 581136 |
| 4 | `GET /v3/admin/order/{id}/traveler/validate` | 出参文案收紧 | `blockReasons[]` 文案由"至少需要一名出行人填写手机号"收紧为"至少需要一名成人出行人填写手机号",判定口径同步收紧 | | 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. 接口详情 ## 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补全出行信息 / 批量编辑 / 单个新增 / 保存前校验 | | 使用场景 | 管理后台订单详情 - 出行人 Tab补全出行信息 / 批量编辑 / 单个新增 / 保存前校验 |
| 认证 | 管理后台 JWTadmin 端) | | 认证 | 管理后台 JWTadmin 端) |
| 幂等性 | PUT traveler-info 为全量同步天然幂等;batch-edit / add 为普通写操作 | | 幂等性 | PUT traveler-info 为全量同步天然幂等;batch-edit / add 为普通写操作 |
@ -89,7 +90,7 @@ base: "dev-v3"
| code | message | 触发条件 | | code | message | 触发条件 |
|------|---------|----------| |------|---------|----------|
| 581136 | 至少需要一名成人出行人填写手机号用于合同签署 | 保存后"最终生效的出行人集合"中没有任何一名成人travelerType=ADULT填写手机号;整个请求被拒,不写库 | | 581136 | 至少需要一名成人出行人填写手机号用于合同签署 | 保存后"最终生效的出行人集合"中没有任何一名成人travelerType=ADULT填写手机号;整个请求被拒,不写库。适用接口traveler-info 全量同步 / batch-edit 批量编辑 / add 单个新增 / smart-parse 智能批量导入dryRun=false |
## 8. 示例 ## 8. 示例
@ -127,9 +128,9 @@ base: "dev-v3"
## 9. 业务边界 ## 9. 业务边界
- 适用:订单出行人的补全 / 批量编辑 / 单个新增保存。 - 适用:订单出行人的补全 / 批量编辑 / 单个新增 / 智能批量导入(`smart-parse``dryRun=false`保存。
- 不适用:删除出行人接口(删除不加此校验,即使删完后无成人有手机也不拦截删除动作本身)。 - 不适用:删除出行人接口(删除不加此校验,即使删完后无成人有手机也不拦截删除动作本身);智能导入 `dryRun=true` 预览模式(仅解析不落库,不校验)
- 特殊边界:校验看的是"保存后最终生效的集合",不是单条提交行——例如 batch-edit 把唯一有手机的成人 phone 清空,即使其他行不变也会触发 581136。 - 特殊边界:校验看的是"保存后最终生效的集合",不是单条提交行——例如 batch-edit 把唯一有手机的成人 phone 清空,即使其他行不变也会触发 581136。智能导入为**追加式**(最终集合 = 库中现有 + 本次解析行),只要合并后存在一名成人有手机即放行。
## 10. 修改前后对比 ## 10. 修改前后对比
@ -151,10 +152,12 @@ base: "dev-v3"
- 581136 通过 HTTP 200 + `code=581136` 返回Result 约定),**不是** HTTP 4xx/5xx,前端拦截器按业务 code 处理。 - 581136 通过 HTTP 200 + `code=581136` 返回Result 约定),**不是** HTTP 4xx/5xx,前端拦截器按业务 code 处理。
- `phone` 字段更新语义:`null`=保留原值,`""`=清空。前端表单回显时注意区分"未改动"与"主动清空"。 - `phone` 字段更新语义:`null`=保留原值,`""`=清空。前端表单回显时注意区分"未改动"与"主动清空"。
- 删除出行人不受此校验约束。 - 删除出行人不受此校验约束。
- 智能批量导入:仅 `dryRun=false` 正式落库时校验,`dryRun=true` 预览不校验;导入文本中无法识别手机号属正常,门禁统计的是"最终集合里是否有成人带手机",不是"每行是否都有手机"。
## 13. 关联 / 联系人 ## 13. 关联 / 联系人
- Issue: https://git.1814.love:8443/wx/HL/issues/5855 - Issue: https://git.1814.love:8443/wx/HL/issues/5855
- PR: https://git.1814.love:8443/wx/HL/pulls/5858 - PR: https://git.1814.love:8443/wx/HL/pulls/5858
- Commit: https://git.1814.love:8443/wx/HL/commit/06f03e40c3 - 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 - 后端负责人腰苏图yst