All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m39s
6.9 KiB
6.9 KiB
1. 基础设施(常量 + 迁移 + Model)
- 1.1 在
pkg/constants/中定义RealnamePolicy枚举常量(none / before_order / after_order)及新增错误码CodeRealnameNotAvailable(pkg/errors/codes.go) - 1.2 创建数据库迁移文件,为
tb_iot_card新增realname_policy VARCHAR(20) NOT NULL DEFAULT 'none' - 1.3 创建数据库迁移文件,为
tb_device新增realname_policy VARCHAR(20) NOT NULL DEFAULT 'none' - 1.4 创建数据库迁移文件,为
tb_iot_card_import_task新增realname_policy VARCHAR(20) NOT NULL DEFAULT 'none' - 1.5 创建数据库迁移文件,为
tb_device_import_task新增realname_policy VARCHAR(20) NOT NULL DEFAULT 'none' - 1.6 在
internal/model/iot_card.go的IotCard结构体新增RealnamePolicy字段(含 gorm 标签和中文注释) - 1.7 在
internal/model/device.go的Device结构体新增RealnamePolicy字段(含 gorm 标签和中文注释) - 1.8 在
internal/model/iot_card_import_task.go的IotCardImportTask结构体新增RealnamePolicy字段 - 1.9 在
internal/model/device_import_task.go的DeviceImportTask结构体新增RealnamePolicy字段 - 1.10 执行迁移并验证四张表字段已正确添加
2. 公共策略判断逻辑(Service 层)
- 2.1 在合适的公共 Service 或工具包中实现
GetEffectiveRealnamePolicy(card *model.IotCard, device *model.Device) string:设备卡取 device.RealnamePolicy,单卡取 card.RealnamePolicy - 2.2 实现检查
after_order生效条件的方法:查询该资产当前 generation 内是否存在有效充值(status=2)或已支付订单(payment_status=2),返回 bool
3. IoT 卡导入模块改造
- 3.1 在
ImportIotCardRequestDTO 中新增realname_policy字段(含 validate、description 标签) - 3.2 更新
iot_card_importService 的 CreateImportTask 方法:将请求中的realname_policy保存到IotCardImportTask.realname_policy - 3.3 更新 IoT 卡导入 Worker 处理逻辑:创建
IotCard记录时从任务的realname_policy写入卡的realname_policy - 3.4 在
ImportTaskResponse(IoT 卡)中新增realname_policy字段(含 description 标签)
4. 设备导入模块改造
- 4.1 在
ImportDeviceRequestDTO 中新增realname_policy字段(含 validate、description 标签) - 4.2 更新
device_importService 的 CreateImportTask 方法:将请求中的realname_policy保存到DeviceImportTask.realname_policy - 4.3 更新设备导入 Worker 处理逻辑:创建
Device记录时从任务的realname_policy写入设备的realname_policy - 4.4 在
DeviceImportTaskResponse中新增realname_policy字段(含 description 标签)
5. 后台管理查询接口 DTO 添加字段
- 5.1 在
StandaloneIotCardResponse(iot_card_dto.go)中新增realname_policy字段,更新 Store/Service 中的 DTO 填充逻辑 - 5.2 在
DeviceResponse(device_dto.go)中新增realname_policy字段,更新填充逻辑 - 5.3 在
AssetResolveResponse(asset_dto.go)中新增realname_policy字段,更新assetService 的 Resolve 方法填充逻辑 - 5.4 在
AssetRealtimeStatusResponse(asset_dto.go)中新增realname_policy字段,更新填充逻辑 - 5.5 在
DeviceCardBindingResponse(device_dto.go)中新增realname_policy字段,更新填充逻辑 - 5.6 在
BoundCardInfo(asset_dto.go,后台管理端公共子结构)中新增realname_policy字段,更新填充逻辑
6. C 端查询接口 DTO 添加字段
- 6.1 在
AssetInfoResponse(client_asset_dto.go)中新增realname_policy字段,更新client_assetService 的填充逻辑 - 6.2 在 C 端
BoundCardInfo(client_asset_dto.go内嵌子结构)中新增realname_policy字段,更新填充逻辑 - 6.3 在
DeviceCardItem(client_realname_device_dto.go)中新增realname_policy字段,更新GetDeviceCards接口填充逻辑
7. C 端充值接口拦截(C3/C4)
- 7.1 在
client_walletService 的充值预检方法(C3 对应逻辑)中,在归属校验后插入实名策略检查:before_order + 未实名 → 返回 CodeNeedRealname - 7.2 在
client_walletService 的充值下单方法(C4 对应逻辑)中,在归属校验后、OpenID 查询前插入实名策略检查:before_order + 未实名 → 返回 CodeNeedRealname
8. C 端购买套餐/订单接口拦截(D1/D4)
- 8.1 删除
client_orderService 中的REALNAME-03注释代码 - 8.2 在
client_orderService 的 CreateOrder 方法(D1)中,套餐校验之后、OpenID 查询之前插入实名策略检查 - 8.3 在
client_orderService 的 PayOrder 方法(D4)中,在执行支付前插入实名策略检查
9. C 端实名链接接口改造(E1)
- 9.1 在
client_realnameService 的 GetRealnameLink 方法中,目标卡定位后,real_name_status=1检查前,插入策略检查:after_order + 无有效充值/订单 → 返回 CodeRealnameNotAvailable - 9.2 验证 before_order 和 none 模式下实名链接接口行为不受影响
10. 后台管理更新接口(UpdateRealnameMode)
- 10.1 在
iot_cardStore 中新增UpdateRealnamePolicy(ctx, cardID uint, policy string) error方法 - 10.2 在
deviceStore 中新增UpdateRealnamePolicy(ctx, deviceID uint, policy string) error方法 - 10.3 在
iot_cardService 中新增UpdateRealnamePolicy(ctx, cardID uint, policy string) error方法(含幂等检查) - 10.4 在
deviceService 中新增UpdateRealnamePolicy(ctx, deviceID uint, policy string) error方法(含幂等检查) - 10.5 在
asset_dto.go中新增UpdateAssetRealnameModRequest和UpdateAssetRealnameModResponseDTO - 10.6 在
assetHandler(internal/handler/admin/asset.go)中新增UpdateRealnameMode方法,遵循UpdatePollingStatus模式 - 10.7 在路由注册文件中注册新接口
PATCH /api/admin/assets/:identifier/realname-mode - 10.8 更新文档生成器
cmd/api/docs.go和cmd/gendocs/main.go,添加新 Handler
11. 验证与收尾
- 11.1 运行
lsp_diagnostics检查所有修改文件,确保无编译错误 - 11.2 使用 PostgreSQL MCP 验证四张表的字段已正确添加,存量数据 realname_policy 均为 'none'
- 11.3 手动验证 before_order 拦截:充值/购买接口在未实名时返回 CodeNeedRealname
- 11.4 手动验证 after_order 拦截:实名链接接口在无充值/订单时被拦截,有充值后放行
- 11.5 手动验证 none 模式:充值/购买/实名链接均正常放行
- 11.6 验证设备卡策略优先级:设备 before_order + 卡 none → 充值被拦截
- 11.7 验证后台更新接口:通过 ICCID 更新卡策略,通过设备号更新设备策略