simCardManageRepo.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package mongo
  2. import (
  3. "context"
  4. "fwh-toolbox-server/database"
  5. "fwh-toolbox-server/dto"
  6. "time"
  7. "go.mongodb.org/mongo-driver/bson"
  8. "go.mongodb.org/mongo-driver/mongo/options"
  9. )
  10. const (
  11. CollectionName_SimCardManage = "SimCardManage"
  12. CollectionName_SimCardMonthlyData = "SimCardMonthlyData"
  13. )
  14. type SimStatus string
  15. const (
  16. SmartHubSimStatusNotActivated SimStatus = "NOT_ACTIVATED" // 未激活
  17. SmartHubSimStatusActivated SimStatus = "ACTIVATED" // 已激活
  18. SmartHubSimStatusDeactivated SimStatus = "DEACTIVATED" // 已停用
  19. SmartHubSimStatusRetired SimStatus = "RETIRED" // 失效
  20. )
  21. type SimCardInfo struct {
  22. GICCID string `bson:"_id" json:"giccid"` // 只取前19位不取检验码
  23. IMEI string `bson:"imei" json:"imei"` // 国际移动用户识别码
  24. IMSI string `bson:"imsi" json:"imsi"` // 国际移动用户识别码
  25. MSISDN string `bson:"msisdn" json:"msisdn"` // 移动用户号码
  26. Status SimStatus `bson:"status" json:"status"` // 卡状态
  27. ExpirationTime string `bson:"expirationTime" json:"expirationTime"` // 到期时间(后付费卡没有到期时间) 格式:yyyy-MM-dd
  28. Month string `bson:"month" json:"month"` // 统计月份 格式:yyyy-MM
  29. AllDataUsage float64 `bson:"allDataUsage" json:"allDataUsage"` // 月数据用量(KB)
  30. UpdateTime time.Time `bson:"updateTime" json:"updateTime"` // UTC时间
  31. }
  32. type SimCardMonthlyData struct {
  33. SimId string `bson:"_id" json:"simId"` // GICCID
  34. UpdateTime time.Time `bson:"updateTime" json:"updateTime"` // UTC时间
  35. Month string `bson:"month" json:"month"` // 统计月份 格式:yyyy-MM
  36. AllDataUsage float64 `bson:"allDataUsage" json:"allDataUsage"` // 月数据用量(KB)
  37. DailyUsage map[string]SimCardDailyUsage `bson:"dailyUsage" json:"dailyUsage"` // 日用量数据信息
  38. }
  39. type SimCardDailyUsage struct {
  40. UpdateTime time.Time `bson:"updateTime" json:"updateTime"` // UTC时间
  41. Day string `bson:"day" json:"day"` // 统计日期 格式:yyyy-MM-DD
  42. DataUsage float64 `bson:"dataUsage" json:"dataUsage"` // 数据用量(KB)
  43. }
  44. // 查询SIM卡信息(批量)
  45. func GetSimCardBatchInfo(page, size uint) (*dto.ResPage[SimCardInfo], error) {
  46. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  47. defer cancel()
  48. collection := database.GetCollection(CollectionName_SimCardManage)
  49. findOptions := options.Find().
  50. SetSkip(int64((page - 1) * size)).
  51. SetLimit(int64(size))
  52. cursor, err := collection.Find(ctx, bson.M{}, findOptions)
  53. if err != nil {
  54. return nil, err
  55. }
  56. defer cursor.Close(ctx)
  57. var infoList []SimCardInfo
  58. for cursor.Next(ctx) {
  59. var info SimCardInfo
  60. if err := cursor.Decode(&info); err != nil {
  61. return nil, err
  62. }
  63. infoList = append(infoList, info)
  64. }
  65. // 查询总数
  66. total, err := collection.CountDocuments(ctx, bson.M{})
  67. if err != nil {
  68. return nil, err
  69. }
  70. res := dto.ResPage[SimCardInfo]{
  71. Data: infoList,
  72. PageSize: size,
  73. PageNum: page,
  74. Total: uint(total),
  75. }
  76. return &res, nil
  77. }
  78. // 查询SIM卡信息(单卡)
  79. func GetSimCardInfo(id string) (*SimCardInfo, error) {
  80. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  81. defer cancel()
  82. collection := database.GetCollection(CollectionName_SimCardManage)
  83. var info SimCardInfo
  84. err := collection.FindOne(ctx, bson.M{"_id": id}).Decode(&info)
  85. if err != nil {
  86. return nil, err
  87. }
  88. return &info, nil
  89. }
  90. // 查询SIM卡月数据(单卡)
  91. func GetSimCardMonthlyData(month string, id string) (*SimCardMonthlyData, error) {
  92. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  93. defer cancel()
  94. collection := database.GetCollection(CollectionName_SimCardMonthlyData)
  95. var info SimCardMonthlyData
  96. err := collection.FindOne(ctx, bson.M{"_id": id}).Decode(&info)
  97. if err != nil {
  98. return nil, err
  99. }
  100. return &info, nil
  101. }
  102. // 插入SIM卡基本信息数据
  103. func UpdateSimCardInfo(info SimCardInfo) error {
  104. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  105. defer cancel()
  106. collection := database.GetCollection(CollectionName_SimCardManage)
  107. filter := bson.M{"_id": info.GICCID} // 按ID匹配
  108. _, err := collection.ReplaceOne(ctx, filter, info, options.Replace().SetUpsert(true))
  109. if err != nil {
  110. return err
  111. }
  112. return nil
  113. }
  114. // 插入SIM卡月流量数据
  115. func UpdateSimCardMonthlyData(data SimCardMonthlyData) error {
  116. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  117. defer cancel()
  118. collection := database.GetCollection(CollectionName_SimCardMonthlyData)
  119. filter := bson.M{"_id": data.SimId} // 按ID匹配
  120. _, err := collection.ReplaceOne(ctx, filter, data, options.Replace().SetUpsert(true))
  121. if err != nil {
  122. return err
  123. }
  124. return nil
  125. }