go-common/app/job/main/archive/service/archive.go

132 lines
3.4 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
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
}