# 【后端修复·管理后台】取消绑定服务标准模板清不掉旧值（updateById 忽略 null）

> **PR**: #3489 | **关联工单**: 无（PR #3484 deferred 项收口 / 工单 #3147 followup）
> **服务**: hl-product-service-v2（Step5 补充信息保存）| **更新时间**: 2026-06-05
>
> **存放目录**: `changelogs-v2/2026-06/`
> **影响范围**: 管理后台「产品编辑 → 补充信息(Step5) → 服务标准」tab 的「取消绑定」
> **前端动作**: **无需改代码**，「取消绑定」现在能真正生效，可重新测试

---

## ⚠️ 关键说明

接 PR #3484（修复绑定回显）的遗留项。现象：服务标准模板下拉**清空（取消绑定）后保存，旧绑定清不掉**，刷新仍显示原模板。

接口路径/结构未变，纯后端行为修复。

## 1. 根因

`PUT /admin/product/item/{id}/supplement` 用 MyBatis-Plus `updateById` 持久化 `serviceStandardTemplateId`，默认 `FieldStrategy.NOT_NULL` 会**忽略 null 字段**——取消绑定时该列被跳过，旧值残留。

## 2. 修复

仅在 `serviceStandardTemplateId == null`（取消绑定）时追加一次定向清列（绑定/改绑路径零改动）：

- `ProductMapper.clearServiceStandardTemplateId(productId)` 用 `LambdaUpdateWrapper.set(column, null)` 显式置空（与既有 `clearApprovalFields` 同款）

## 3. 前端动作

- **无需改代码**：下拉本就 `clearable`，清空后保存即触发后端清列。
- **请重新测试**：服务标准 tab → 清空模板下拉 → 保存 → 刷新，应显示「未绑定模板」。

## 4. 验证（测试服已实测）

| 操作 | 结果 |
|---|---|
| 取消绑定（templateId=null）后查详情 | `supplement.serviceStandardTemplateId = null` ✅ |
| 重新绑定后查详情 | 恢复为原模板ID ✅ |
| 其余 Step5 字段（费用/人群优惠/保险等） | 完全不受影响 ✅ |

## 5. 关联 / 联系人

- **本次 PR**：#3489（已合并 dev-v3，已部署测试服并 API 实测取消绑定生效）
- **前序 PR**：#3484（绑定回显修复）
- **后端负责人**：@wx | **前端对接（管理后台）**：mmg
