diff --git a/backend/services/assetService/worker/season_reset_worker.go b/backend/services/assetService/worker/season_reset_worker.go new file mode 100644 index 0000000..59e06ae --- /dev/null +++ b/backend/services/assetService/worker/season_reset_worker.go @@ -0,0 +1,52 @@ +package worker + +import ( + "time" + + "github.com/topfans/backend/pkg/logger" + "github.com/topfans/backend/services/assetService/repository" + "github.com/topfans/backend/services/assetService/service" + "go.uber.org/zap" +) + +type SeasonResetWorker struct { + seasonRepo *repository.SeasonRepository + levelService service.AssetLevelService +} + +func NewSeasonResetWorker( + seasonRepo *repository.SeasonRepository, + levelService service.AssetLevelService, +) *SeasonResetWorker { + return &SeasonResetWorker{ + seasonRepo: seasonRepo, + levelService: levelService, + } +} + +func (w *SeasonResetWorker) Run() { + now := time.Now().UnixMilli() + + // 获取已结束的赛季 + seasons, err := w.seasonRepo.GetEndedSeasons() + if err != nil { + logger.Logger.Error("SeasonResetWorker: failed to get ended seasons", zap.Error(err)) + return + } + + for _, season := range seasons { + if season.EndTime > now { + continue // 还未真正结束 + } + + if err := w.levelService.SeasonReset(season.ID); err != nil { + logger.Logger.Error("SeasonResetWorker: failed to reset season", + zap.String("season_id", season.ID), + zap.Error(err)) + continue + } + + logger.Logger.Info("SeasonResetWorker: season reset completed", + zap.String("season_id", season.ID)) + } +} \ No newline at end of file