|
@@ -22,14 +22,15 @@
|
|
|
| 收货人管理 `/api/consignee/save`(新增 + 编辑) | `name` | `ConsigneeService.save()` |
|
|
| 收货人管理 `/api/consignee/save`(新增 + 编辑) | `name` | `ConsigneeService.save()` |
|
|
|
|
|
|
|
|
- 家庭地址页(`pages/family/address-edit`)无联系人字段,不涉及。
|
|
- 家庭地址页(`pages/family/address-edit`)无联系人字段,不涉及。
|
|
|
-- 回填目标始终为**当前登录用户**的 `realName`(userId 已是两个 Service 的方法参数)。
|
|
|
|
|
|
|
+- 回填目标始终为**当前登录用户**的 `realName`。userId 来源:`UserAddressService.create/update` 由方法参数传入;`ConsigneeService.save` 在新增分支取 `consignee.getUserId()`、编辑分支取 `existing.getUserId()`。
|
|
|
|
|
|
|
|
## 实现要点
|
|
## 实现要点
|
|
|
|
|
|
|
|
-1. 新增私有方法 `backfillRealNameIfEmpty(Long userId, String contactName)`:
|
|
|
|
|
|
|
+1. 新增独立组件 `RealNameBackfillService`(`@Service`,依赖 `UserMapper`),提供方法 `backfill(Long userId, String contactName)`:
|
|
|
- `contactName` 空白 → 直接返回(不回填)
|
|
- `contactName` 空白 → 直接返回(不回填)
|
|
|
- 查询用户,`realName == null || trim().isEmpty()` → `setRealName(contactName.trim())` + `updateById`
|
|
- 查询用户,`realName == null || trim().isEmpty()` → `setRealName(contactName.trim())` + `updateById`
|
|
|
-2. `UserAddressService.create/update`、`ConsigneeService.save`(新增与编辑两支)在保存成功后调用。
|
|
|
|
|
|
|
+ - 用独立组件而非私有方法:`UserAddressService` 与 `ConsigneeService` 两个类都要调用,且避免 `UserService` 双向依赖
|
|
|
|
|
+2. `UserAddressService.create/update`、`ConsigneeService.save`(新增与编辑两支)在保存成功后注入并调用 `RealNameBackfillService#backfill`。
|
|
|
3. 风格参照现有 `ConsigneeService.syncUserRegion()`:回填失败 try-catch 静默,**不阻塞地址保存主流程**。
|
|
3. 风格参照现有 `ConsigneeService.syncUserRegion()`:回填失败 try-catch 静默,**不阻塞地址保存主流程**。
|
|
|
4. 零 schema 变更(`users.real_name` 列已存在);零前端改动;无新接口(不新增路由,无需更新 API_REFERENCE)。
|
|
4. 零 schema 变更(`users.real_name` 列已存在);零前端改动;无新接口(不新增路由,无需更新 API_REFERENCE)。
|
|
|
|
|
|