Files
junhong_cmp_fiber/openspec/changes/enforce-single-phone-per-asset/proposal.md
邹进 9ced14fa1b fix: 第1批 F1、M12 一资产一号与换货按手机号关联校验
- F1 一个资产同时只能有一个有效手机号关联,他号绑定返回 1192(不含号码),同号幂等
- 登录 need_bind_phone 改看资产是否已有有效关联,新增 asset_phone_bound、asset_phone_is_own;H5 绑定按客户/资产两侧状态分别写入
- 客户换号不再迁移资产关联
- M12 换货新资产有有效手机号关联即拒绝,号码只在 data.phone;换货完成清空旧资产客户绑定并失效旧资产关联(exchange_completed),均不迁移
- OpenSpec Change enforce-single-phone-per-asset:11/16,H5 短信与换货端到端验证待测试部署后完成
2026-10-12 00:10:41 +09:00

3.3 KiB
Raw Blame History

Why

现行规则只限制“一个手机号最多关联 10 个资产”,不限制一个资产能绑几个号;资产已被别人绑定时 H5 仍出现绑定入口;客户换号会把资产关联一并迁走。换货校验又看的是“是否有人扫过码”(tb_personal_customer_device),后台解除手机号也解不开,测试库 6 台设备全部被拦。依据为《第1批-8-9月迭代缺陷修复技术方案》第 5、6 节(F1、M12);原在途 Change limit-phones-per-asset 与本规则相反,已于 2026-10-11 作废并删除。

What Changes

  • BREAKING 一个资产同时只能有一个有效手机号关联;同号重复验证幂等成功;其他号码绑定被拒,提示“该资产已绑定手机号,如需更换请联系管理员”,不带号码。换号须后台先解除再绑定。
  • BREAKING need_bind_phone 的资产侧判断改为“当前资产是否已有有效关联”;客户自己没有手机号时仍强制绑定客户手机号。登录响应新增两个布尔值:资产是否已绑定手机号、是否为当前客户自己的号码,不返回号码。
  • H5 绑定按“客户有无手机号 × 资产有无手机号”四种场景分别写客户手机号、资产手机号;资产侧号码可与客户手机号不同,两者不联动。
  • BREAKING 客户更换手机号不再迁移资产关联。
  • BREAKING 换货校验改为:新资产有有效手机号关联就拒绝,提示后台先解除;完整号码放在错误响应 data.phone,不进日志。
  • BREAKING 换货完成时清空旧资产上的客户绑定(不迁移到新资产),并失效旧资产的手机号关联(失效方式 exchange_completed),释放名额。

Capabilities

New Capabilities

无。

Modified Capabilities

  • phone-asset-association:一资产一号、资产已绑定不强制、客户与资产手机号独立、换号不迁移关联、换货完成失效旧资产关联。
  • order-refund-exchange:换货新资产校验改看手机号关联;换货完成清空旧资产客户绑定、不迁移到新资产。

Impact

  • 代码:internal/service/phone_asset_association/association_write.go(Establish 增加一资产一号判断,不加锁)、internal/service/client_auth/service.go(need_bind_phone、绑定入口拆分、ChangePhone 去掉 migrateAssociations)、internal/model/dto/client_auth_dto.go;internal/service/exchange/service.go(ensureNewAssetBindingAvailableWithTx、switchCustomerBindingWithTx)、customer_binding 新增 ClearForExchange 并删除只有换货使用的 Migrate;phone_asset_association_store.go 复用 LockValidByAsset + InvalidateByIDs;pkg/errors 新增错误码;pkg/constants/phone_asset_association.go 新增失效方式常量。
  • 接口:H5 登录与绑定响应新增字段与错误码;换货被拒响应 data.phone,测试环境前端需读取展示;重新生成接口文档。
  • 数据:无迁移(不加数据库唯一约束);交付前只读统计测试库“同一资产多条有效关联”(2026-10-11 为 0 条)。
  • 运营与客服:换货后原客户手上的旧资产页面失效,需重新扫码才能再打开旧资产(谁扫谁能打开,规则不变);资产换号须后台解除。
  • 已删除作废的 openspec/changes/limit-phones-per-asset(未实施、未归档)。