This commit is contained in:
@@ -42,6 +42,17 @@ func (s *PackageUsageStore) GetByID(ctx context.Context, id uint) (*model.Packag
|
||||
return &usage, nil
|
||||
}
|
||||
|
||||
// GetByIDForCarrier 根据载体查询套餐使用记录。
|
||||
func (s *PackageUsageStore) GetByIDForCarrier(ctx context.Context, id uint, carrierType string, carrierID uint) (*model.PackageUsage, error) {
|
||||
var usage model.PackageUsage
|
||||
query := s.db.WithContext(ctx).Where("id = ?", id)
|
||||
query = applyPackageUsageCarrierFilter(query, carrierType, carrierID)
|
||||
if err := query.First(&usage).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &usage, nil
|
||||
}
|
||||
|
||||
// Update 更新套餐使用记录
|
||||
func (s *PackageUsageStore) Update(ctx context.Context, usage *model.PackageUsage) error {
|
||||
return s.db.WithContext(ctx).Save(usage).Error
|
||||
@@ -140,6 +151,37 @@ func (s *PackageUsageStore) UpdateDataUsage(ctx context.Context, id uint, increm
|
||||
Update("data_usage_mb", gorm.Expr("data_usage_mb + ?", incrementMB)).Error
|
||||
}
|
||||
|
||||
// UpdateExpiresAtForCarrier 按载体条件更新套餐过期时间。
|
||||
func (s *PackageUsageStore) UpdateExpiresAtForCarrier(ctx context.Context, id uint, carrierType string, carrierID uint, expiresAt time.Time) (int64, error) {
|
||||
query := s.db.WithContext(ctx).
|
||||
Model(&model.PackageUsage{}).
|
||||
Where("id = ?", id)
|
||||
query = applyPackageUsageCarrierFilter(query, carrierType, carrierID)
|
||||
|
||||
result := query.Updates(map[string]any{
|
||||
"expires_at": expiresAt,
|
||||
})
|
||||
return result.RowsAffected, result.Error
|
||||
}
|
||||
|
||||
// UpdateDataUsageForCarrier 按载体条件更新套餐已用量。
|
||||
func (s *PackageUsageStore) UpdateDataUsageForCarrier(ctx context.Context, id uint, carrierType string, carrierID uint, dataUsageMB int64, status *int) (int64, error) {
|
||||
query := s.db.WithContext(ctx).
|
||||
Model(&model.PackageUsage{}).
|
||||
Where("id = ?", id)
|
||||
query = applyPackageUsageCarrierFilter(query, carrierType, carrierID)
|
||||
|
||||
updates := map[string]any{
|
||||
"data_usage_mb": dataUsageMB,
|
||||
}
|
||||
if status != nil {
|
||||
updates["status"] = *status
|
||||
}
|
||||
|
||||
result := query.Updates(updates)
|
||||
return result.RowsAffected, result.Error
|
||||
}
|
||||
|
||||
// GetPackagesForReset 查询需要重置的套餐(WHERE next_reset_at <= NOW)
|
||||
func (s *PackageUsageStore) GetPackagesForReset(ctx context.Context, limit int) ([]*model.PackageUsage, error) {
|
||||
var usages []*model.PackageUsage
|
||||
@@ -239,11 +281,7 @@ func (s *PackageUsageStore) ListByCarrier(ctx context.Context, carrierType strin
|
||||
var usages []*model.PackageUsage
|
||||
query := s.db.WithContext(ctx).Order("priority ASC, created_at DESC")
|
||||
|
||||
if carrierType == "iot_card" {
|
||||
query = query.Where("iot_card_id = ?", carrierID)
|
||||
} else if carrierType == "device" {
|
||||
query = query.Where("device_id = ?", carrierID)
|
||||
}
|
||||
query = applyPackageUsageCarrierFilter(query, carrierType, carrierID)
|
||||
if status != nil {
|
||||
query = query.Where("status = ?", *status)
|
||||
}
|
||||
@@ -253,3 +291,13 @@ func (s *PackageUsageStore) ListByCarrier(ctx context.Context, carrierType strin
|
||||
}
|
||||
return usages, nil
|
||||
}
|
||||
|
||||
func applyPackageUsageCarrierFilter(query *gorm.DB, carrierType string, carrierID uint) *gorm.DB {
|
||||
if carrierType == "iot_card" {
|
||||
return query.Where("iot_card_id = ?", carrierID)
|
||||
}
|
||||
if carrierType == "device" {
|
||||
return query.Where("device_id = ?", carrierID)
|
||||
}
|
||||
return query
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user