记录日期:2026-10-10
用户第一次输入地址时,无论在哪个入口输入,如果 users.real_name(真实姓名)还没填,则用地址里的联系人姓名回填真实姓名。
realName 为空 → 用联系人姓名回填。
realName 非空,后续保存不再触发,效果等价于"第一次输入地址时"。realName 仍为空的情况也能覆盖。ConsigneeService(漏掉商城收货地址入口)。| 入口 | 联系人字段 | 改动点 |
|---|---|---|
商城收货地址 /api/user/address/create + /update |
receiverName |
UserAddressService.create() / update() |
收货人管理 /api/consignee/save(新增 + 编辑) |
name |
ConsigneeService.save() |
pages/family/address-edit)无联系人字段,不涉及。realName。userId 来源:UserAddressService.create/update 由方法参数传入;ConsigneeService.save 在新增分支取 consignee.getUserId()、编辑分支取 existing.getUserId()。RealNameBackfillService(@Service,依赖 UserMapper),提供方法 backfill(Long userId, String contactName):
contactName 空白 → 直接返回(不回填)realName == null || trim().isEmpty() → setRealName(contactName.trim()) + updateByIdUserAddressService 与 ConsigneeService 两个类都要调用,且避免 UserService 双向依赖UserAddressService.create/update、ConsigneeService.save(新增与编辑两支)在保存成功后注入并调用 RealNameBackfillService#backfill。ConsigneeService.syncUserRegion():回填失败 try-catch 静默,不阻塞地址保存主流程。users.real_name 列已存在);零前端改动;无新接口(不新增路由,无需更新 API_REFERENCE)。UserAddressService:
ConsigneeService:新增、编辑两支,用例同上。