重构:统一 IoT 模型到 internal/model/ 目录

将所有 IoT 相关的数据模型从 internal/iot/model/ 迁移到 internal/model/,
实现全局统一的模型层架构,符合项目横向分层设计原则。

变更内容:
- 迁移 11 个 IoT 模型文件(carrier, iot_card, device, order, package 等)
- 删除 internal/iot/model/ 目录
- 更新文档中的模型路径引用(25 处)
- 创建重构总结文档
- 归档 OpenSpec 变更为 2026-01-12-refactor-iot-model-location
- 创建 model-organization 规格文档

验证结果:
- 编译通过(go build 成功)
- 静态分析通过(go vet 无错误)
- 代码格式通过(go fmt 无变更)
- 无 Go 代码引用旧路径

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-12 16:01:53 +08:00
parent 034f00e2e7
commit 867e97af11
30 changed files with 1158 additions and 75 deletions

View File

@@ -78,7 +78,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
('CTCC', '中国电信', 1);
```
**GORM 模型**: `internal/iot/model/carrier.go:5`
**GORM 模型**: `internal/model/carrier.go:5`
---
@@ -132,7 +132,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- `owner_type``owner_id` 组合表示所有权
- `enable_polling = false` 的卡不参与轮询检查
**GORM 模型**: `internal/iot/model/iot_card.go:8`
**GORM 模型**: `internal/model/iot_card.go:8`
---
@@ -167,7 +167,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- `sim_slots` 取值范围 1-4
- 通过 `device_sim_bindings` 表管理设备与 IoT 卡的绑定关系
**GORM 模型**: `internal/iot/model/device.go:5`
**GORM 模型**: `internal/model/device.go:5`
---
@@ -203,7 +203,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- 使用虚拟商品编码映射运营商订单
- 从上游平台下单,不涉及本地库存管理
**GORM 模型**: `internal/iot/model/number_card.go:8`
**GORM 模型**: `internal/model/number_card.go:8`
---
@@ -235,7 +235,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- 套餐系列用于分组管理套餐
- 分佣规则可以按套餐系列统一配置
**GORM 模型**: `internal/iot/model/package.go:7`
**GORM 模型**: `internal/model/package.go:7`
---
@@ -274,7 +274,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- 停机判断基于 `virtual_data_mb` (虚流量用完即停机)
- `package_type = 'formal'` 表示正式套餐,`'addon'` 表示附加套餐
**GORM 模型**: `internal/iot/model/package.go:23`
**GORM 模型**: `internal/model/package.go:23`
---
@@ -307,7 +307,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- `retail_price` 是代理的零售价格
- 佣金 = `retail_price - cost_price`
**GORM 模型**: `internal/iot/model/package.go:48`
**GORM 模型**: `internal/model/package.go:48`
---
@@ -341,7 +341,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- `slot_position` 取值范围 1-4
- 同一设备的同一插槽位置只能绑定一张激活状态的 IoT 卡
**GORM 模型**: `internal/iot/model/package.go:66`
**GORM 模型**: `internal/model/package.go:66`
---
@@ -385,7 +385,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- `data_usage_mb = real_data_usage_mb + virtual_data_usage_mb`
- 轮询检查时更新 `last_package_check_at`
**GORM 模型**: `internal/iot/model/package.go:85`
**GORM 模型**: `internal/model/package.go:85`
---
@@ -426,7 +426,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- 可以按卡状态和运营商配置不同的轮询策略
- 优先级控制多个配置的执行顺序
**GORM 模型**: `internal/iot/model/polling.go:7`
**GORM 模型**: `internal/model/polling.go:7`
---
@@ -459,7 +459,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- `carrier_sync_data` 存储从运营商 Gateway 同步的原始数据
- 用于历史查询和统计分析
**GORM 模型**: `internal/iot/model/data_usage.go:5`
**GORM 模型**: `internal/model/data_usage.go:5`
---
@@ -510,7 +510,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- `number_card_id` 必须有值
- `package_id` 为空
**GORM 模型**: `internal/iot/model/order.go:11`
**GORM 模型**: `internal/model/order.go:11`
---
@@ -544,7 +544,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- `agent_path` 存储完整的代理路径,便于查询上级链
- 一级代理的 `parent_agent_id` 为 NULL
**GORM 模型**: `internal/iot/model/commission.go:8`
**GORM 模型**: `internal/model/commission.go:8`
---
@@ -585,7 +585,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- `unfreeze_mode = 'auto'`: 时间到期 OR 流量达标,满足其一即可自动解冻
- `unfreeze_mode = 'manual'`: 需要人工审批解冻
**GORM 模型**: `internal/iot/model/commission.go:24`
**GORM 模型**: `internal/model/commission.go:24`
---
@@ -619,7 +619,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
51+ 单: 20元/单
```
**GORM 模型**: `internal/iot/model/commission.go:47`
**GORM 模型**: `internal/model/commission.go:47`
---
@@ -652,7 +652,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- 一次性条件立即发放
- 长期条件冻结后按规则解冻
**GORM 模型**: `internal/iot/model/commission.go:68`
**GORM 模型**: `internal/model/commission.go:68`
---
@@ -697,7 +697,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
```
- 满足时间到期 **OR** 流量达标,任一条件满足即可自动解冻
**GORM 模型**: `internal/iot/model/commission.go:88`
**GORM 模型**: `internal/model/commission.go:88`
---
@@ -731,7 +731,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- 当分佣规则的 `unfreeze_mode = 'manual'` 时,需要创建审批记录
- 审批通过后才能解冻和发放佣金
**GORM 模型**: `internal/iot/model/commission.go:116`
**GORM 模型**: `internal/model/commission.go:116`
---
@@ -760,7 +760,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- `template_data` 存储分佣规则的完整配置
- 可以基于模板快速创建新的分佣规则
**GORM 模型**: `internal/iot/model/commission.go:137`
**GORM 模型**: `internal/model/commission.go:137`
---
@@ -794,7 +794,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- 按月统计与运营商的交易情况
- 支持结算和支付状态跟踪
**GORM 模型**: `internal/iot/model/commission.go:155`
**GORM 模型**: `internal/model/commission.go:155`
---
@@ -838,7 +838,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
}
```
**GORM 模型**: `internal/iot/model/financial.go:8`
**GORM 模型**: `internal/model/financial.go:8`
---
@@ -869,7 +869,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- 每个代理可以有独立的提现规则
- `withdrawal_fee_rate` 为 0.005 表示 0.5% 手续费
**GORM 模型**: `internal/iot/model/financial.go:31`
**GORM 模型**: `internal/model/financial.go:31`
---
@@ -907,7 +907,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
}
```
**GORM 模型**: `internal/iot/model/financial.go:51`
**GORM 模型**: `internal/model/financial.go:51`
---
@@ -940,7 +940,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
- 用于配置系统的开发能力开关
- `capability_config` 存储能力的详细配置
**GORM 模型**: `internal/iot/model/system.go:5`
**GORM 模型**: `internal/model/system.go:5`
---
@@ -977,7 +977,7 @@ INSERT INTO carriers (carrier_code, carrier_name, status) VALUES
2. 管理员审核 (status=2/3)
3. 审核通过后完成换卡 (status=4)
**GORM 模型**: `internal/iot/model/system.go:25`
**GORM 模型**: `internal/model/system.go:25`
---