--- schema: "hl-changelog/v2" ticket: "6155" title: "补全出行信息:身份证国籍/民族自动兜底,非身份证需前端增加输入框" consumer: "admin" author: "wx" change_type: "修改接口" backend_status: "deployed" gateway_status: "verified" frontend_status: "verified" frontend_owner: "mmg" frontend_ref: "8569529c" target_release: "" verified_at: "2026-08-22" status_note: "订单详情「补全出行信息」表单:身份证(ID_CARD)出行人提交时国籍/民族传空字符串不再被 581101 拒绝,后端自动兜底为「中国/汉族」;非身份证证件(护照等)仍要求国籍/民族非空,前端需在证件类型非身份证时增加国籍/民族输入框。" updated_at: "2026-08-22" base: "dev-v3" --- # 补全出行信息:身份证国籍/民族自动兜底,非身份证需前端增加输入框(#6155) ## ⚠️ 关键变化 - **之前**:`PUT /v3/admin/orders/{id}/traveler-info`(补全出行信息)与 `POST /v3/admin/orders/{id}/traveler/batch-edit`(批量编辑)对国籍/民族**空字符串一律抛 581101**(12301 必报字段缺失)。前端表单无国籍/民族输入框,身份证出行人补全提交被拒。 - **现在**:证件类型 = 身份证(ID_CARD)时,国籍/民族空字符串放行,后端兜底为「中国/汉族」落库;**证件类型 ≠ 身份证时维持原行为**(空串仍抛 581101)。 ## 变更接口清单 | # | 接口 | 方法 | 路径 | 变更类型 | 说明 | |---|------|------|------|----------|------| | 1 | 补全出行信息 | PUT | `/v3/admin/orders/{id}/traveler-info` | 校验行为变更 | ID_CARD 时 nationality/race 空串不再抛 581101,兜底「中国/汉族」;非身份证仍抛 | | 2 | 批量编辑出行人 | POST | `/v3/admin/orders/{id}/traveler/batch-edit` | 校验行为变更 | 同上(两处共用 `validate12301Fields`,行为一致) | ## 前端动作(非身份证场景) - 身份证场景:**前端无需改动**,空串提交即可,后端兜底。 - 非身份证(护照等)场景:**前端需增加国籍/民族输入框**,用户显式填写后再提交,否则仍报 581101。 - 字段说明:`nationality`(国籍)、`race`(民族)传空字符串时——身份证兜底「中国/汉族」;非身份证报 581101「12301 必报字段缺失(国籍 / 民族不能为空字符串)」。 ## 验证证据 - 单测:`TravelerServiceTest` +3(身份证空串放行 / 非身份证 nationality 空串仍抛 / 非身份证 race 空串仍抛)、`TravelerConverterTest` +4(新增空串兜底 / 新增 null 兜底 / 更新空串不覆盖原值 / 更新 null 不覆盖原值),全绿。 - TEST 网关实测:见工单 #6155 验收评论。