重构:统一 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:
@@ -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`
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user