132 lines
3.4 KiB
Go
132 lines
3.4 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
|
|
"go-common/app/job/main/archive/model/archive"
|
|
"go-common/app/job/main/archive/model/result"
|
|
"go-common/app/job/main/archive/model/retry"
|
|
arcmdl "go-common/app/service/main/archive/model/archive"
|
|
"go-common/library/log"
|
|
)
|
|
|
|
func (s *Service) isPGC(aid int64) bool {
|
|
if addit, _ := s.archiveDao.Addit(context.TODO(), aid); addit != nil && (addit.UpFrom == archive.UpFromPGC || addit.UpFrom == archive.UpFromPGCSecret) {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (s *Service) consumerVideoup(i int) {
|
|
defer s.waiter.Done()
|
|
for {
|
|
var (
|
|
aid int64
|
|
ok bool
|
|
)
|
|
if aid, ok = <-s.videoupAids[i]; !ok {
|
|
log.Error("s.videoupAids chan closed")
|
|
return
|
|
}
|
|
arc, _ := s.arcServices[0].Archive3(context.TODO(), &arcmdl.ArgAid2{Aid: aid})
|
|
if arc != nil && (arc.AttrVal(arcmdl.AttrBitIsPGC) == arcmdl.AttrYes || arc.AttrVal(arcmdl.AttrBitIsBangumi) == arcmdl.AttrYes) {
|
|
if s.c.PGCAsync == 1 {
|
|
rt := &retry.Info{Action: retry.FailResultAdd}
|
|
rt.Data.Aid = aid
|
|
s.PushFail(context.TODO(), rt)
|
|
log.Warn("async PGC archive(%d)", aid)
|
|
continue
|
|
}
|
|
s.pgcAids <- aid
|
|
log.Info("aid(%d) title(%s) is PGC", aid, arc.Title)
|
|
continue
|
|
}
|
|
if s.c.UGCAsync == 1 {
|
|
rt := &retry.Info{Action: retry.FailResultAdd}
|
|
rt.Data.Aid = aid
|
|
s.PushFail(context.TODO(), rt)
|
|
log.Warn("async UGC archive(%d)", aid)
|
|
continue
|
|
}
|
|
s.arcUpdate(aid)
|
|
}
|
|
}
|
|
|
|
func (s *Service) pgcConsumer() {
|
|
defer s.waiter.Done()
|
|
for {
|
|
var (
|
|
aid int64
|
|
ok bool
|
|
)
|
|
if aid, ok = <-s.pgcAids; !ok {
|
|
log.Error("s.pgcAids closed")
|
|
return
|
|
}
|
|
s.arcUpdate(aid)
|
|
}
|
|
}
|
|
|
|
func (s *Service) arcUpdate(aid int64) {
|
|
var (
|
|
oldResult *result.Archive
|
|
newResult *result.Archive
|
|
c = context.TODO()
|
|
upCids []int64
|
|
delCids []int64
|
|
err error
|
|
changed bool
|
|
)
|
|
log.Info("sync resultDB archive(%d) start", aid)
|
|
defer func() {
|
|
if err != nil {
|
|
if oldResult != nil && (oldResult.AttrVal(result.AttrBitIsBangumi) == result.AttrYes || oldResult.AttrVal(result.AttrBitIsPGC) == result.AttrYes) {
|
|
s.pgcAids <- aid
|
|
} else {
|
|
s.videoupAids[aid%int64(s.c.ChanSize)] <- aid
|
|
}
|
|
log.Error("s.arcUpdate(%d) error(%v)", aid, err)
|
|
}
|
|
}()
|
|
if oldResult, err = s.resultDao.Archive(c, aid); err != nil {
|
|
log.Error("s.resultDao.Archive(%d) error(%v)", aid, err)
|
|
}
|
|
if changed, upCids, delCids, err = s.tranResult(c, aid); err != nil || !changed {
|
|
log.Error("aid(%d) nothing changed err(%+v)", aid, err)
|
|
err = nil
|
|
return
|
|
}
|
|
s.upVideoCache(aid, upCids)
|
|
s.delVideoCache(aid, delCids)
|
|
if newResult, err = s.resultDao.Archive(c, aid); err != nil {
|
|
log.Error("s.resultDao.Archive(%d) error(%v)", aid, err)
|
|
return
|
|
}
|
|
err = s.updateResultCache(newResult, oldResult)
|
|
if oldResult != nil {
|
|
s.updateResultField(newResult, oldResult)
|
|
s.updateSubjectMid(newResult, oldResult)
|
|
s.sendMail(newResult, oldResult)
|
|
}
|
|
action := "update"
|
|
if oldResult == nil {
|
|
action = "insert"
|
|
}
|
|
s.sendNotify(&result.ArchiveUpInfo{Table: "archive", Action: action, Nw: newResult, Old: oldResult})
|
|
if oldResult != nil {
|
|
log.Info("sync resultDB archive(%d) sync old(%+v) new(%+v) updated", aid, oldResult, newResult)
|
|
return
|
|
}
|
|
log.Info("sync resultDB archive(%d) new(%+v) inserted", aid, newResult)
|
|
}
|
|
|
|
func (s *Service) hadPassed(c context.Context, aid int64) (had bool) {
|
|
id, err := s.archiveDao.GetFirstPassByAID(c, aid)
|
|
if err != nil {
|
|
log.Error("hadPassed s.arc.GetFirstPassByAID error(%v) aid(%d)", err, aid)
|
|
return
|
|
}
|
|
had = id > 0
|
|
return
|
|
}
|