- 网关客户端新增原始数据收集器,记录最后一次尝试的明文请求、HTTP 状态、响应体与 code/msg/trace_id - tb_card_traffic_collection 只写成功读数,新增 carrier_id 与原始数据列;新增 tb_card_traffic_collection_failure,失败不判断有无套餐并带错误详情 - 采集记录在线保留当月加最近 2 个整月,到期分区摘出、导出 csv.gz、校验行数与 SHA-256 后删除,本地保留 3 个月 - 新增采集成功/失败、卡日流量、套餐日流量详单、冲正流水、退款后处理尝试列表接口:可查单个也可查全部,分页与条件筛选 - 停复机记录支持资产标识、场景、原因、指令号筛选;单卡历史支持动作、结果、来源筛选 - 单卡采集记录支持筛选与合并失败记录;套餐日流量详单支持分页;退款列表支持后处理状态筛选 - 测试环境 api、worker 日志分目录,保留 40 个压缩备份;worker 挂载 archive 目录 - 迁移 000272、000273 需维护者在测试库执行后再部署 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
94 lines
6.1 KiB
Go
94 lines
6.1 KiB
Go
package model
|
|
|
|
import (
|
|
"time"
|
|
|
|
"gorm.io/datatypes"
|
|
)
|
|
|
|
// CardTrafficCollection 卡流量采集记录:采集时刻有套餐的卡每次采集一条,按月分区保留 90 天。
|
|
type CardTrafficCollection struct {
|
|
ID uint `gorm:"column:id;primaryKey;autoIncrement" json:"id"`
|
|
IotCardID uint `gorm:"column:iot_card_id;not null" json:"iot_card_id"`
|
|
ObservedAt time.Time `gorm:"column:observed_at;primaryKey;not null" json:"observed_at"`
|
|
ObservationID string `gorm:"column:observation_id;type:varchar(128);not null;default:''" json:"observation_id"`
|
|
Source string `gorm:"column:source;type:varchar(32);not null;default:''" json:"source"`
|
|
Scene string `gorm:"column:scene;type:varchar(64);not null;default:''" json:"scene"`
|
|
Result string `gorm:"column:result;type:varchar(32);not null" json:"result"`
|
|
VendorUsedMB *float64 `gorm:"column:vendor_used_mb;type:numeric(14,3)" json:"vendor_used_mb"`
|
|
QueuePoints datatypes.JSON `gorm:"column:queue_points;type:jsonb" json:"queue_points"`
|
|
Decision string `gorm:"column:decision;type:varchar(32);not null;default:''" json:"decision"`
|
|
MonthUsedMB *float64 `gorm:"column:month_used_mb;type:numeric(14,3)" json:"month_used_mb"`
|
|
StaleGuarded *bool `gorm:"column:stale_guarded" json:"stale_guarded"`
|
|
DeltaMB *float64 `gorm:"column:delta_mb;type:numeric(14,3)" json:"delta_mb"`
|
|
EventID string `gorm:"column:event_id;type:varchar(128);not null;default:''" json:"event_id"`
|
|
CarrierID uint `gorm:"column:carrier_id;not null;default:0" json:"carrier_id"`
|
|
CollectionRaw
|
|
CreatedAt time.Time `gorm:"column:created_at;not null;default:now()" json:"created_at"`
|
|
}
|
|
|
|
// TableName 指定表名。
|
|
func (CardTrafficCollection) TableName() string {
|
|
return "tb_card_traffic_collection"
|
|
}
|
|
|
|
// CollectionRaw 是采集记录保存的网关原始数据(成功表与失败表共用)。
|
|
type CollectionRaw struct {
|
|
RawRequest datatypes.JSON `gorm:"column:raw_request;type:jsonb" json:"raw_request"`
|
|
HTTPStatus *int `gorm:"column:http_status" json:"http_status"`
|
|
GatewayCode *int `gorm:"column:gateway_code" json:"gateway_code"`
|
|
GatewayMsg string `gorm:"column:gateway_msg;type:varchar(500);not null;default:''" json:"gateway_msg"`
|
|
GatewayTraceID string `gorm:"column:gateway_trace_id;type:varchar(128);not null;default:''" json:"gateway_trace_id"`
|
|
RawResponse datatypes.JSON `gorm:"column:raw_response;type:jsonb" json:"raw_response"`
|
|
RawResponseText string `gorm:"column:raw_response_text;type:text;not null;default:''" json:"raw_response_text"`
|
|
RawTruncated bool `gorm:"column:raw_truncated;not null;default:false" json:"raw_truncated"`
|
|
GatewayAttempts int `gorm:"column:gateway_attempts;not null;default:0" json:"gateway_attempts"`
|
|
}
|
|
|
|
// CardTrafficCollectionFailure 卡流量采集失败记录:所有被采集的卡每次失败一条,按月分区,在线保留 2 个月。
|
|
type CardTrafficCollectionFailure struct {
|
|
ID uint `gorm:"column:id;primaryKey;autoIncrement" json:"id"`
|
|
IotCardID uint `gorm:"column:iot_card_id;not null" json:"iot_card_id"`
|
|
ICCID string `gorm:"column:iccid;type:varchar(30);not null;default:''" json:"iccid"`
|
|
CarrierID uint `gorm:"column:carrier_id;not null;default:0" json:"carrier_id"`
|
|
ObservedAt time.Time `gorm:"column:observed_at;primaryKey;not null" json:"observed_at"`
|
|
ObservationID string `gorm:"column:observation_id;type:varchar(128);not null;default:''" json:"observation_id"`
|
|
Source string `gorm:"column:source;type:varchar(32);not null;default:''" json:"source"`
|
|
Scene string `gorm:"column:scene;type:varchar(64);not null;default:''" json:"scene"`
|
|
Result string `gorm:"column:result;type:varchar(32);not null" json:"result"`
|
|
ErrorCategory string `gorm:"column:error_category;type:varchar(30);not null;default:''" json:"error_category"`
|
|
ProviderCode string `gorm:"column:provider_code;type:varchar(30);not null;default:''" json:"provider_code"`
|
|
ProviderMessage string `gorm:"column:provider_message;type:varchar(500);not null;default:''" json:"provider_message"`
|
|
DurationMS int `gorm:"column:duration_ms;not null;default:0" json:"duration_ms"`
|
|
CollectionRaw
|
|
CreatedAt time.Time `gorm:"column:created_at;not null;default:now()" json:"created_at"`
|
|
}
|
|
|
|
// TableName 指定表名。
|
|
func (CardTrafficCollectionFailure) TableName() string {
|
|
return "tb_card_traffic_collection_failure"
|
|
}
|
|
|
|
// PackageUsageAdjustment 套餐流量人工冲正流水:只新增,不修改、不删除。
|
|
type PackageUsageAdjustment struct {
|
|
ID uint `gorm:"column:id;primaryKey;autoIncrement" json:"id"`
|
|
PackageUsageID uint `gorm:"column:package_usage_id;not null" json:"package_usage_id"`
|
|
IotCardID uint `gorm:"column:iot_card_id;not null;default:0" json:"iot_card_id"`
|
|
DeviceID uint `gorm:"column:device_id;not null;default:0" json:"device_id"`
|
|
DeltaMB int64 `gorm:"column:delta_mb;not null" json:"delta_mb"`
|
|
BeforeUsageMB int64 `gorm:"column:before_usage_mb;not null" json:"before_usage_mb"`
|
|
AfterUsageMB int64 `gorm:"column:after_usage_mb;not null" json:"after_usage_mb"`
|
|
BeforeStatus int `gorm:"column:before_status;not null" json:"before_status"`
|
|
AfterStatus int `gorm:"column:after_status;not null" json:"after_status"`
|
|
Reason string `gorm:"column:reason;type:varchar(500);not null" json:"reason"`
|
|
RefObservationID string `gorm:"column:ref_observation_id;type:varchar(128);not null;default:''" json:"ref_observation_id"`
|
|
RefEventID string `gorm:"column:ref_event_id;type:varchar(128);not null;default:''" json:"ref_event_id"`
|
|
OperatorID uint `gorm:"column:operator_id;not null" json:"operator_id"`
|
|
CreatedAt time.Time `gorm:"column:created_at;not null;default:now()" json:"created_at"`
|
|
}
|
|
|
|
// TableName 指定表名。
|
|
func (PackageUsageAdjustment) TableName() string {
|
|
return "tb_package_usage_adjustment"
|
|
}
|