package mongo import ( "context" "fwh-toolbox-server/database" "fwh-toolbox-server/dto" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo/options" ) const ( CollectionName_SimCardManage = "SimCardManage" CollectionName_SimCardMonthlyData = "SimCardMonthlyData" ) type SimStatus string const ( SmartHubSimStatusNotActivated SimStatus = "NOT_ACTIVATED" // 未激活 SmartHubSimStatusActivated SimStatus = "ACTIVATED" // 已激活 SmartHubSimStatusDeactivated SimStatus = "DEACTIVATED" // 已停用 SmartHubSimStatusRetired SimStatus = "RETIRED" // 失效 ) type SimCardInfo struct { GICCID string `bson:"_id" json:"giccid"` // 只取前19位不取检验码 IMEI string `bson:"imei" json:"imei"` // 国际移动用户识别码 IMSI string `bson:"imsi" json:"imsi"` // 国际移动用户识别码 MSISDN string `bson:"msisdn" json:"msisdn"` // 移动用户号码 Status SimStatus `bson:"status" json:"status"` // 卡状态 ExpirationTime string `bson:"expirationTime" json:"expirationTime"` // 到期时间(后付费卡没有到期时间) 格式:yyyy-MM-dd Month string `bson:"month" json:"month"` // 统计月份 格式:yyyy-MM AllDataUsage float64 `bson:"allDataUsage" json:"allDataUsage"` // 月数据用量(KB) UpdateTime time.Time `bson:"updateTime" json:"updateTime"` // UTC时间 } type SimCardMonthlyData struct { SimId string `bson:"_id" json:"simId"` // GICCID UpdateTime time.Time `bson:"updateTime" json:"updateTime"` // UTC时间 Month string `bson:"month" json:"month"` // 统计月份 格式:yyyy-MM AllDataUsage float64 `bson:"allDataUsage" json:"allDataUsage"` // 月数据用量(KB) DailyUsage map[string]SimCardDailyUsage `bson:"dailyUsage" json:"dailyUsage"` // 日用量数据信息 } type SimCardDailyUsage struct { UpdateTime time.Time `bson:"updateTime" json:"updateTime"` // UTC时间 Day string `bson:"day" json:"day"` // 统计日期 格式:yyyy-MM-DD DataUsage float64 `bson:"dataUsage" json:"dataUsage"` // 数据用量(KB) } // 查询SIM卡信息(批量) func GetSimCardBatchInfo(page, size uint) (*dto.ResPage[SimCardInfo], error) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection(CollectionName_SimCardManage) findOptions := options.Find(). SetSkip(int64((page - 1) * size)). SetLimit(int64(size)) cursor, err := collection.Find(ctx, bson.M{}, findOptions) if err != nil { return nil, err } defer cursor.Close(ctx) var infoList []SimCardInfo for cursor.Next(ctx) { var info SimCardInfo if err := cursor.Decode(&info); err != nil { return nil, err } infoList = append(infoList, info) } // 查询总数 total, err := collection.CountDocuments(ctx, bson.M{}) if err != nil { return nil, err } res := dto.ResPage[SimCardInfo]{ Data: infoList, PageSize: size, PageNum: page, Total: uint(total), } return &res, nil } // 查询SIM卡信息(单卡) func GetSimCardInfo(id string) (*SimCardInfo, error) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection(CollectionName_SimCardManage) var info SimCardInfo err := collection.FindOne(ctx, bson.M{"_id": id}).Decode(&info) if err != nil { return nil, err } return &info, nil } // 查询SIM卡月数据(单卡) func GetSimCardMonthlyData(month string, id string) (*SimCardMonthlyData, error) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection(CollectionName_SimCardMonthlyData) var info SimCardMonthlyData err := collection.FindOne(ctx, bson.M{"_id": id}).Decode(&info) if err != nil { return nil, err } return &info, nil } // 插入SIM卡基本信息数据 func UpdateSimCardInfo(info SimCardInfo) error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection(CollectionName_SimCardManage) filter := bson.M{"_id": info.GICCID} // 按ID匹配 _, err := collection.ReplaceOne(ctx, filter, info, options.Replace().SetUpsert(true)) if err != nil { return err } return nil } // 插入SIM卡月流量数据 func UpdateSimCardMonthlyData(data SimCardMonthlyData) error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection(CollectionName_SimCardMonthlyData) filter := bson.M{"_id": data.SimId} // 按ID匹配 _, err := collection.ReplaceOne(ctx, filter, data, options.Replace().SetUpsert(true)) if err != nil { return err } return nil }