All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m28s
- tb_iot_card 新增 device_virtual_no 字段,存储绑定设备的虚拟号快照 - 列表/详情接口响应新增 device_virtual_no 字段 - 列表接口 is_standalone 改为可选参数(不传返回全部卡) - 移除列表接口 virtual_no 查询参数 - 绑卡/解绑时同步更新 device_virtual_no 快照 - 设备导入时批量写入 device_virtual_no 快照 - 归档 feat-iot-card-device-virtual-no 变更提案 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.8 KiB
2.8 KiB
1. 数据库迁移
- 1.1 新建迁移文件
migrations/000110_add_device_virtual_no_to_iot_card.up.sql,添加device_virtual_no VARCHAR(100) NOT NULL DEFAULT ''列,并附回填 SQL(JOINtb_device_sim_binding+tb_device更新现有绑定数据) - 1.2 新建对应 down 文件
migrations/000110_add_device_virtual_no_to_iot_card.down.sql,执行DROP COLUMN device_virtual_no - 1.3 执行迁移:
make migrate-up,确认列存在且回填数据正确
2. Model 层
- 2.1 在
internal/model/iot_card.go的IotCard结构体新增字段DeviceVirtualNo string,添加正确的 GORM tag 和中文注释
3. Store 层
- 3.1 在
internal/store/postgres/iot_card_store.go的ListStandalone方法中,将硬编码的WHERE is_standalone = true改为:仅当 filters["is_standalone"] 非 nil 时才拼接该条件 - 3.2 在
IotCardStore新增方法UpdateDeviceVirtualNo(ctx, cardID uint, deviceVirtualNo string) error,使用 GORMUpdates单卡更新 - 3.3 在
IotCardStore新增方法BatchUpdateDeviceVirtualNo(ctx, cardIDs []uint, deviceVirtualNo string) error,使用 GORMWHERE id IN (?)批量更新
4. DTO 层
- 4.1 在
internal/model/dto/iot_card_dto.go的ListStandaloneIotCardRequest中:删除VirtualNo字段,新增IsStandalone *bool字段(含 query tag 和 description) - 4.2 在
StandaloneIotCardResponse中新增DeviceVirtualNo string字段(含 json tag 和 description)
5. Service 层 - IoT 卡列表
- 5.1 在
internal/service/iot_card/service.go的ListStandalone方法中:删除对req.VirtualNo的处理,改为读取req.IsStandalone并写入filters["is_standalone"] - 5.2 在
toStandaloneResponse方法中新增DeviceVirtualNo: card.DeviceVirtualNo字段赋值
6. Service 层 - 绑定/解绑快照
- 6.1 在
internal/service/device/binding.go的BindCard方法中,绑定记录创建成功后,调用s.iotCardStore.UpdateDeviceVirtualNo(ctx, card.ID, device.VirtualNo);失败仅记录 warn 日志,不阻断主流程 - 6.2 在
internal/service/device/binding.go的UnbindCard方法中,解绑成功后,调用s.iotCardStore.UpdateDeviceVirtualNo(ctx, cardID, "");失败仅记录 warn 日志,不阻断主流程
7. Task 层 - 设备导入快照
- 7.1 在
internal/task/device_import.go的事务块内,创建绑定记录后,收集所有validCardIDs,调用h.iotCardStore.BatchUpdateDeviceVirtualNo(ctx, validCardIDs, device.VirtualNo)(在同一事务中执行)
8. 构建验证
- 8.1 运行
go build ./...确认无编译错误 - 8.2 运行
bash scripts/check-all.sh确认无规范违规(check 失败项为已有历史问题,本次变更未引入新违规)