- 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 短信与换货端到端验证待测试部署后完成
32 lines
3.3 KiB
Markdown
32 lines
3.3 KiB
Markdown
## 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`(未实施、未归档)。
|