diff --git a/shortdrama/dao/generation_task_dao.go b/shortdrama/dao/generation_task_dao.go index 2ffa655..2bf860f 100644 --- a/shortdrama/dao/generation_task_dao.go +++ b/shortdrama/dao/generation_task_dao.go @@ -197,6 +197,24 @@ func (d *generationTaskDao) ListByEpisodeIds(ctx context.Context, episodeIds []i return } +// ListByStatuses — 按多状态查询所有生成任务 +func (d *generationTaskDao) ListByStatuses(ctx context.Context, statuses []string) (res []*entity.GenerationTask, err error) { + if len(statuses) == 0 { + return []*entity.GenerationTask{}, nil + } + r, err := g.DB().Model(public.TableNameGenerationTask).Ctx(ctx). + Where("status in (?)", statuses). + OrderDesc("id").All() + if err != nil { + return + } + if r == nil { + return []*entity.GenerationTask{}, nil + } + err = r.Structs(&res) + return +} + // ListByStatus — 按状态查询所有生成任务 func (d *generationTaskDao) ListByStatus(ctx context.Context, status string) (res []*entity.GenerationTask, err error) { r, err := g.DB().Model(public.TableNameGenerationTask).Ctx(ctx). diff --git a/shortdrama/service/drama_service.go b/shortdrama/service/drama_service.go index ceabacc..d447dae 100644 --- a/shortdrama/service/drama_service.go +++ b/shortdrama/service/drama_service.go @@ -790,33 +790,20 @@ func (s *dramaService) pollPendingVideos(ctx context.Context) { return } - tasks, err := dao.GenerationTask.ListByStatus(ctx, "generating") + allTasks, err := dao.GenerationTask.ListByStatuses(ctx, []string{"generating", "review"}) + if err != nil || len(allTasks) == 0 { + return + } - // 兜底:检查是否有剧集所有任务已完成但状态未更新 - if revTasks, _ := dao.GenerationTask.ListByStatus(ctx, "review"); len(revTasks) > 0 { - seenEp := make(map[int64]bool) - for _, rt := range revTasks { - if seenEp[rt.EpisodeId] { - continue - } - seenEp[rt.EpisodeId] = true - if ep, _ := dao.Episode.GetOne(ctx, rt.EpisodeId); ep != nil && ep.Status != "review" && ep.Status != "completed" { - allTasks, _ := dao.GenerationTask.ListByEpisode(ctx, rt.EpisodeId) - allDone := true - for _, t := range allTasks { - if t.Status != "review" && t.Status != "completed" { - allDone = false - break - } - } - if allDone { - _ = dao.Episode.UpdateStatus(ctx, rt.EpisodeId, "review", "") - } - } + // 只处理 generating 任务,review/completed 任务由主流程推进时已更新 episode 状态 + var tasks []*entity.GenerationTask + for _, t := range allTasks { + if t.Status == "generating" { + tasks = append(tasks, t) } } - if err != nil || len(tasks) == 0 { + if len(tasks) == 0 { return }