# 资产审计日志验收准备 ## 0.1 资产敏感写操作覆盖矩阵 | 业务域 | 场景 | `operation_type` | 主要入口 | |---|---|---|---| | IoT 卡 | 分配 | `card_allocate` | `iot_card.Service.AllocateCards` | | IoT 卡 | 回收 | `card_recall` | `iot_card.Service.RecallCards` | | IoT 卡 | 系列绑定 | `card_series_binding` | `iot_card.Service.BatchSetSeriesBinding` | | IoT 卡 | 轮询开关 | `card_polling_status` | `iot_card.Service.UpdatePollingStatus/BatchUpdatePollingStatus` | | IoT 卡 | 实名策略 | `card_realname_policy` | `iot_card.Service.UpdateRealnamePolicy` | | IoT 卡 | 手动实名状态 | `card_realname_status` | `iot_card.Service.ManualUpdateRealnameStatus` | | IoT 卡 | 删除/批量删除 | `card_delete` / `card_batch_delete` | `iot_card.Service.DeleteCard/BatchDeleteCards` | | IoT 卡停复机 | 自动停机/复机 | `card_auto_stop` / `card_auto_start` | `iot_card.StopResumeService.stopCardWithRetry/resumeSingleCard` | | IoT 卡停复机 | 手动停机/复机 | `card_manual_stop` / `card_manual_start` | `iot_card.StopResumeService.ManualStopCard/ManualStartCard` | | 设备 | 删除 | `device_delete` | `device.Service.Delete` | | 设备 | 分配/回收 | `device_allocate` / `device_recall` | `device.Service.AllocateDevices/RecallDevices` | | 设备 | 系列绑定 | `device_series_binding` | `device.Service.BatchSetSeriesBinding` | | 设备 | 绑卡/解绑 | `device_bind_card` / `device_unbind_card` | `device.Service.BindCard/UnbindCard` | | 设备 | 停机/复机 | `device_stop` / `device_start` | `device.Service.StopDevice/StartDevice` | | 设备远程控制 | 限速 | `device_speed_limit` | `device.Service.GatewaySetSpeedLimit` | | 设备远程控制 | WiFi 设置 | `device_set_wifi` | `device.Service.GatewaySetWiFi` | | 设备远程控制 | 切卡 | `device_switch_card` | `device.Service.GatewaySwitchCard` | | 设备远程控制 | 切卡模式 | `device_switch_mode` | `device.Service.GatewaySwitchMode` | | 设备远程控制 | 重启/恢复出厂 | `device_reboot` / `device_reset` | `device.Service.GatewayRebootDevice/ResetDevice` | | 统一资产入口 | 停用 | `asset_deactivate` | `asset.LifecycleService.DeactivateIotCard/DeactivateDevice` | | 统一资产入口 | 轮询开关 | `asset_polling_status` | `polling.AssetPollingService.UpdatePollingStatus` | | 统一资产入口 | 实名策略 | `asset_realname_policy` | `device.Service.UpdateRealnamePolicy`(设备路径) | | 导入任务 | 设备导入任务创建 | `device_import_task_create` | `device_import.Service.CreateImportTask` | | 导入任务 | 卡导入任务创建 | `iot_card_import_task_create` | `iot_card_import.Service.CreateImportTask` | ## 0.2 审计字段验收清单 | 字段组 | 核对项 | 说明 | |---|---|---| | `operator_*` | `operator_id/operator_type/operator_name` | 系统触发场景 `operator_type=system` 且 `operator_id` 可为空 | | `asset_*` | `asset_type/asset_id/asset_identifier` | 设备使用虚拟号,卡使用 ICCID;批量/导入场景允许按任务摘要记录 | | `operation_*` | `operation_type/operation_desc` | `operation_type` 必须来自 `pkg/constants/asset_audit.go` | | `before_data/after_data` | 变更镜像 | 状态/配置修改类要求体现前后差异 | | `request_*` | `request_id/ip_address/user_agent/request_path/request_method` | 由日志中间件注入到 `context`,审计统一读取 | | `result_*` | `result_status/error_code/error_msg` | 覆盖 `success/failed/denied`;失败/拒绝需记录错误摘要 | | 批量聚合 | `batch_total/success_count/fail_count` | 批量与设备停复机场景需写入聚合统计 | ## 0.3 手工验收数据与脚本 ### 接口回放建议(Postman/curl) 1. 成功样例:设备分配、卡分配、设备远程控制(限速) 2. 失败样例:远程控制网关失败、非法设备 ID、事务失败 3. 拒绝样例:停复机保护期、越权分配、无效实名策略 ### SQL 脚本 - 统一查询脚本:`docs/add-asset-operation-audit-log/手工验收脚本.sql` - 重点核对: - 同一操作存在 `success/failed/denied` 三类结果 - `before_data/after_data` 存在且字段合理 - WiFi 密码字段已脱敏(不出现明文)