fix: 修复卡类型资产绑定键错误导致归属校验永远失败
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m48s

resolveAssetBindingKey 对卡类型错误地返回 card.ICCID 作为绑定键,
但归属校验 isCustomerOwnAsset 使用 card.VirtualNo 比对,二者不一致
导致所有卡资产的 C 端接口返回 403 无权限。

修复:卡类型绑定键改为 card.VirtualNo,与设计文档一致。
附带数据迁移修正已有的错误绑定记录。
This commit is contained in:
2026-03-21 11:33:57 +08:00
parent ed334b946b
commit 7dfcf41b41
3 changed files with 18 additions and 1 deletions

View File

@@ -0,0 +1,8 @@
-- 回滚:将已修复的 VirtualNo 还原为 ICCID
-- 注意:只还原那些 virtual_no 能匹配到 iot_card.virtual_no 的记录
UPDATE tb_personal_customer_device pcd
SET virtual_no = ic.iccid
FROM tb_iot_card ic
WHERE pcd.virtual_no = ic.virtual_no
AND pcd.deleted_at IS NULL
AND ic.virtual_no != ic.iccid;

View File

@@ -0,0 +1,9 @@
-- 修复个人客户设备绑定表中卡类型资产的绑定键
-- 问题resolveAssetBindingKey 对卡类型错误地使用了 card.ICCID应使用 card.VirtualNo
-- 影响:所有通过卡 ICCID 登录的个人客户绑定记录的 virtual_no 字段存的是 ICCID 而非资产虚拟号
-- 导致:归属校验 isCustomerOwnAsset 比对 VirtualNo 时永远不匹配,返回 403
UPDATE tb_personal_customer_device pcd
SET virtual_no = ic.virtual_no
FROM tb_iot_card ic
WHERE pcd.virtual_no = ic.iccid
AND pcd.deleted_at IS NULL;