修改过期时间,以及修改套餐已用量
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled

This commit is contained in:
Break
2026-06-12 10:41:24 +08:00
parent c437593a8c
commit 016e7bee79
8 changed files with 501 additions and 85 deletions

View File

@@ -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
}