package model // TrafficUsageSimCard is the basic card data needed when writing usage to TDengine. type TrafficUsageSimCard struct { Iccid string `json:"iccid"` PackageCode string `json:"packageCode"` } // TrafficUsageDailyRetryMessage is the retry message for daily traffic usage. type TrafficUsageDailyRetryMessage struct { UsageMb *float64 `json:"usageMb,omitempty"` Attempt int `json:"attempt,omitempty"` LastError string `json:"lastError,omitempty"` SimKey *SimKey `json:"simKey"` Card TrafficUsageSimCard `json:"card"` // QueryDate format: yyyyMMdd. QueryDate string `json:"queryDate"` } // TrafficUsageMonthlyRetryMessage is the retry message for monthly traffic usage. type TrafficUsageMonthlyRetryMessage struct { UsageMb *float64 `json:"usageMb,omitempty"` Attempt int `json:"attempt,omitempty"` LastError string `json:"lastError,omitempty"` SimKey *SimKey `json:"simKey"` Card TrafficUsageSimCard `json:"card"` // QueryDate format: yyyyMM. QueryDate string `json:"queryDate"` } // TrafficUsageMonthlyStartMessage starts one full monthly usage run. // Admin publishes this command; Worker owns the card scan and Redis production. // A nil Scope (or one whose channels normalize to empty) is a full sync. type TrafficUsageMonthlyStartMessage struct { RunID string `json:"runId"` Operation string `json:"operation"` QueryMonth string `json:"queryMonth"` TriggeredAt string `json:"triggeredAt"` Scope *SyncScope `json:"scope,omitempty"` } // TrafficUsageDailyStartMessage starts one full daily usage run. // Admin publishes this command; Worker owns the card scan and Redis production. // A nil Scope (or one whose channels normalize to empty) is a full sync. // // QueryDate is yyyyMMdd. The producer carries it through zset.Task.QueryMonth, // which is a period identifier rather than a month name; see that field's doc. type TrafficUsageDailyStartMessage struct { RunID string `json:"runId"` Operation string `json:"operation"` QueryDate string `json:"queryDate"` TriggeredAt string `json:"triggeredAt"` Scope *SyncScope `json:"scope,omitempty"` } // TrafficUsageMonthlyHistoryStartMessage starts one full monthly usage history // run. It writes the TDengine monthly table, which is a different target from // TrafficUsageMonthlyStartMessage (the current-month snapshot written to MySQL). // // QueryMonth is yyyyMM and names the month being backfilled, which is the // previous month rather than the current one. type TrafficUsageMonthlyHistoryStartMessage struct { RunID string `json:"runId"` Operation string `json:"operation"` QueryMonth string `json:"queryMonth"` TriggeredAt string `json:"triggeredAt"` Scope *SyncScope `json:"scope,omitempty"` } // OperationPreviousDayUsageFullSync identifies a daily usage run. It is the one // string that Admin publishes, Worker produces, and contract.SyncKindForOperation // maps to the traffic_usage_daily sync kind, so it lives here rather than in // either side's logic package. const OperationPreviousDayUsageFullSync = "previous_day_usage_full_sync" // OperationPreviousMonthUsageFullSync identifies a monthly usage history run. // It is deliberately distinct from current_month_usage_full_sync, which fills // the MySQL current-month snapshot instead of the TDengine monthly table. const OperationPreviousMonthUsageFullSync = "previous_month_usage_full_sync"