✨ 司机个人认证新增出生年月与住址字段

个人认证快照(PersonCertSubmitRequest)增加 birthday / addressRegion / address,
审核通过时写回司机档案的 birthday / address_region / address 三列。

住址拆成两段是与管理端对齐:blade_transport_driver 有 address_region(地址区划)
与 address(详细地址)两列,管理端的 address_region 存的是各级区划名称直接拼接的
串(如「广西壮族自治区柳州市柳北区」),不是编码,这里沿用同一形状,两端才互相认得。

写回时区划与详细地址都过 blankToNull:框架的 not_null 更新策略只跳过 null,
司机端这两项都是选填,没填时提交的是空串,直接写会把管理端已填的住址清空。

OCR 身份证别名补上「出生」「住址」;birthday 拼写不以 Date 结尾,还要一并纳入
isDateField,否则「1979年11月17日」会原样下发,填不进日期框。
This commit is contained in:
2026-10-17 12:38:02 +08:00
parent 584d03508d
commit 60e2afe938
5 changed files with 55 additions and 1 deletions
@@ -354,6 +354,10 @@ public class CertAuditServiceImpl implements ICertAuditService {
requireIdCardNotTaken(snapshot.getIdCardNo(), driver.getId());
driver.setDriverName(snapshot.getRealName());
driver.setIdCardNo(snapshot.getIdCardNo());
driver.setBirthday(snapshot.getBirthday());
// 空串不是「没填」:框架的 not_null 策略只跳过 null,写空串会把管理端填过的住址清掉
driver.setAddressRegion(blankToNull(snapshot.getAddressRegion()));
driver.setAddress(blankToNull(snapshot.getAddress()));
driver.setIdCardFront(snapshot.getIdCardFrontUrl());
driver.setIdCardBack(snapshot.getIdCardBackUrl());
driver.setIdCardValidStart(snapshot.getIdCardValidStart());
@@ -279,6 +279,10 @@ public final class OcrFieldSupport {
Map<String, List<String>> aliases = new LinkedHashMap<>();
aliases.put("realName", List.of("姓名"));
aliases.put("idCardNo", List.of("公民身份号码", "公民身份证号码", "身份证号", "身份证号码"));
// 身份证正面的「出生」是一整串日期(1990年1月1日),按 birthday 归一成 yyyy-MM-dd;
// 住址是身份证上的登记住址,写进 driver.address
aliases.put("birthday", List.of("出生", "出生年月", "出生日期"));
aliases.put("address", List.of("住址", "地址"));
aliases.put("idCardValidStart", List.of("签发日期", "有效起始日期", "有效期限起"));
aliases.put("idCardValidEnd", List.of("失效日期", "有效期限", "有效期限止"));
return aliases;
@@ -319,7 +323,8 @@ public final class OcrFieldSupport {
}
private static boolean isDateField(String key) {
return key.endsWith("Date") || key.endsWith("ValidStart") || key.endsWith("ValidEnd");
// birthday 的语义是日期但拼写不以 Date 结尾,漏了它会把「1990年1月1日」原样下发
return "birthday".equals(key) || key.endsWith("Date") || key.endsWith("ValidStart") || key.endsWith("ValidEnd");
}
private static boolean isNumberField(String key) {