hl-api-changelog/changelogs-v2/2026-06/03_性别字段全系统统一为字典编码-破坏性硬切_PR3381.md

4.6 KiB

【破坏性·硬切】性别字段全系统统一为数据字典编码 1=男/2=女/0=未知

  • 端类型:管理后台 + 小程序(跨 5 服务)
  • 变更类型⚠️ 破坏性契约变更(编码值改变,前端须同步切换)
  • 日期2026-06-03
  • 来源:前端《性别字段编码统一-后端对接需求.md》
  • Issue#3380
  • PR#3381(资源人员先行 #3379
  • 后端负责人wx

⚠️ 关键说明(前端必读)

  1. 本篇取代 同日早些的《性别字段编码统一-后端对接答复》中「order v2/v3 出行人、司机、合同暂不要动」的分批建议——wx 决定一次性整体硬切,后端已全部改完并部署测试服。
  2. 最终统一口径:全系统对内/对前端/DB 一律 数据字典 gender 编码 String '1'=男 / '2'=女 / '0'=未知。前端建唯一事实源 gender.js 按此口径,展示走字典 label。
  3. 破坏点:原先返回 MALE/FEMALE/UNKNOWNorder-v3 出行人)、中文 男/女(司机)、male/female(合同入参)的接口,现在一律是 1/2/0。前端解析与提交值必须同步切换,否则性别显示/提交错乱。
  4. 数据字典已补 '0'=未知dictValue=0, dictLabel=未知。注C 端 /dict/all 有缓存,新增项稍后随缓存刷新生效;/admin/dict/data/gender 已可见。

1. 各模块编码变化对照(前端按此切换)

模块 接口/字段 改前 改后(统一)
order-v3 出行人 gender(增/改/查/批量编辑/快照) MALE/FEMALE/UNKNOWN 1/2/0
order-v2 出行人 gender 混存(1/2/MALE/male) 1/2(后端已归一化收口)
合同创建入参 gender male/female 1/2(出站 12301 后端自动转中文「男/女」)
车队司机 gender(增/改/查/H5提交/导入) 中文 / 1/2Excel 仍填中文,后端导入边界自动转码)
资源人员 gender 注释 0/1 错乱 1/2#3379 已对齐,Integer 类型)
用户资料 gender MALE/FEMALE 1/2/0
小程序出行人 gender 已 1/2 1/2不变,BFF 透传跟随 order-v3
数据字典 gender dictValue 1/2 1/2 + 新增 0=未知

2. 第三方边界(前端无感,后端自动 adapter 转换)

以下转换在后端出/入站边界完成,前端统一只看到 1/2/0

边界 后端转换
12301 合同/团队报告 对内 1/2 ↔ 报文 中文「男/女」/ sex 0男1女
保游保险 对内 1/2 → 保游 1男/0女
身份证解析 自动得 1/2(奇男偶女)
Excel 导入(司机) 中文「男/女」→ 1/2(前端导出模板提示填 1/2 或保持中文均可)
OCR 证件识别 各证件 中文/Male/Female → 1/2,无法识别 0

3. 前端动作清单

  1. src/constants/gender.jsGENDER = { MALE:'1', FEMALE:'2', UNKNOWN:'0' }GENDER_LABEL_MAPGENDER_OPTIONS,以字典 gender 为唯一事实源。
  2. 移除各模块原有的本地 option/转换:尤其 ContractCreateDrawer.vue:260 那段 '1'/'2' → male/female 硬转整段删除,合同入参直接传 1/2
  3. 团队报告 TeamReportTab.vuesex 0/1后端报文内部仍用 sex,但 admin 接口对前端暴露的出行人性别统一 gender 1/2,按 gender 展示。
  4. 司机 DriverEditModal.vue 性别下拉 value 由中文 男/女 改为 1/2
  5. 身份证解析回填直接用 1/2parseGenderFromIdCard 已是该口径)。

4. 验证 / 风险

  • 5 服务测试服已部署双实例,4 个存量迁移脚本随启动跑通order_traveler / insured_personMALE/male→1, FEMALE/female→2、fleet_driver(_pending)(男/女→1/2、字典补 0。
  • 437 项单测全绿order-v3 111 / order-v2 142 / fleet 33 / user 105 / mp 46
  • ⚠️ 存量数据迁移上正式环境由 wx 单独确认后执行(本篇仅测试服)。
  • ⚠️ 这是破坏性硬切,前后端需同一发布窗口上线;前端切换前测试服性别相关功能会短暂不一致,属预期。

5. 顺带修复

order-v2 保险被保人 gender 此前从不写入(InsuredPersonVO.gender 恒 null,本次补持久化,保险详情现可正确返回被保人性别。