123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- 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/database/sql"
- "go-common/library/log"
- )
- func (s *Service) updateSubjectMid(nw *result.Archive, old *result.Archive) {
- if nw.Mid == old.Mid {
- return
- }
- if err := s.replyDao.ChangeSubjectMid(nw.AID, nw.Mid); err == nil {
- log.Info("/x/v2/reply/admin/subject/mid called")
- }
- }
- // sendMail send e-mail after state change
- func (s *Service) sendMail(nw *result.Archive, old *result.Archive) {
- // nw.Attribute == old.Attribute tmp remove
- if nw.Mid == old.Mid && nw.TypeID == old.TypeID && nw.Duration == old.Duration && nw.Title == old.Title &&
- nw.Cover == old.Cover && nw.Content == old.Content && nw.Copyright == old.Copyright &&
- nw.State == old.State && nw.Access == old.Access && nw.Forward == old.Forward && nw.PubTime == old.PubTime && nw.CTime == old.CTime { // all field
- log.Info("archive(%d) change only mtime no email", nw.ID)
- return
- }
- a, err := s.arcServices[0].Archive3(context.TODO(), &arcmdl.ArgAid2{Aid: nw.AID})
- if err != nil || a == nil {
- log.Error("s.arcRPC.Archive3(%d) error(%v) or arc is nil", nw.AID, err)
- return
- }
- // not bangumi or movie
- if a.AttrVal(arcmdl.AttrBitIsBangumi) == arcmdl.AttrNo && a.AttrVal(arcmdl.AttrBitIsMovie) == arcmdl.AttrNo {
- return
- }
- s.emailDao.PGCNotifyMail(a, nw, old)
- log.Info("pgc notify(%d) mail send success", nw.AID)
- }
- func (s *Service) updateResultCache(nw *result.Archive, old *result.Archive) (err error) {
- var (
- c = context.TODO()
- oldMid int64
- )
- if old != nil && old.Mid != nw.Mid {
- oldMid = old.Mid
- }
- for k, rpc := range s.arcServices {
- if err = rpc.ArcCache2(c, &arcmdl.ArgCache2{Aid: nw.AID, Tp: arcmdl.CacheUpdate}); err != nil {
- log.Error("s.arcRPC(%d).ArcCache2(%d, %s) error(%v)", k, nw.AID, arcmdl.CacheUpdate, err)
- }
- if nw.State >= 0 || nw.State == -6 {
- if err = rpc.ArcCache2(c, &arcmdl.ArgCache2{Aid: nw.AID, OldMid: oldMid, Tp: arcmdl.CacheAdd}); err != nil {
- log.Error("s.arcRpc(%d).ArcCache2(%d, %s) error(%v)", k, nw.AID, arcmdl.CacheAdd, err)
- }
- } else {
- if err = rpc.ArcCache2(c, &arcmdl.ArgCache2{Aid: nw.AID, OldMid: oldMid, Tp: arcmdl.CacheDelete}); err != nil {
- log.Error("s.arcRpc(%d).ArcCache2(%d, %s) error(%v)", k, nw.AID, arcmdl.CacheDelete, err)
- }
- }
- if err != nil {
- rt := &retry.Info{Action: retry.FailUpCache}
- rt.Data.Aid = nw.AID
- rt.Data.State = nw.State
- s.PushFail(c, rt)
- log.Error("updateResultCache error(%v)", err)
- }
- }
- return
- }
- func (s *Service) updateResultField(nw *result.Archive, old *result.Archive) {
- var (
- c = context.TODO()
- err error
- )
- if nw.TypeID != old.TypeID {
- for k, rpc := range s.arcServices {
- if err = rpc.ArcFieldCache2(c, &arcmdl.ArgFieldCache2{Aid: nw.AID, TypeID: nw.TypeID, OldTypeID: old.TypeID}); err != nil {
- log.Error("s.arcRPC(%d).ArcFieldCache2(%d, %d, %d) error(%v)", k, nw.AID, nw.TypeID, old.TypeID, err)
- }
- }
- }
- }
- func (s *Service) tranResult(c context.Context, aid int64) (changed bool, upCids []int64, delCids []int64, err error) {
- var (
- tx *sql.Tx
- rows int64
- a *archive.Archive
- aResult *result.Archive
- ad *archive.Addit
- vs []*archive.Video
- videosCnt int
- staff []*archive.Staff
- )
- defer func() {
- if err != nil {
- rt := &retry.Info{Action: retry.FailResultAdd}
- rt.Data.Aid = aid
- s.PushFail(c, rt)
- log.Error("tranResult error(%v)", err)
- }
- }()
- if a, err = s.archiveDao.Archive(c, aid); err != nil || a == nil {
- log.Error("s.arc.Archive(%d) error(%v)", aid, err)
- return
- }
- if !a.IsSyncState() {
- log.Info("archive(%d) state(%d) cant change", aid, a.State)
- // FIXME: eeeee
- if s.isPGC(aid) && !s.hadPassed(c, aid) {
- log.Info("archive(%d) is PGC first change", aid)
- } else {
- return
- }
- }
- if ad, err = s.archiveDao.Addit(c, aid); err != nil {
- log.Error("s.arc.Addit(%d) error(%v)", aid, err)
- return
- }
- if ad == nil {
- ad = &archive.Addit{Aid: aid}
- }
- // if aid%10 == 0 || aid%10 == 1 || aid%10 == 2 {
- if vs, err = s.archiveDao.Videos2(c, aid); err != nil {
- log.Error("s.arc.Videos2(%d) error(%v)", aid, err)
- return
- }
- // } else {
- // if vs, err = s.archiveDao.Videos(c, aid); err != nil {
- // log.Error("s.arc.Videos(%d) error(%v)", aid, err)
- // return
- // }
- // }
- for _, v := range vs {
- if (v.Status == archive.VideoStatusAccess || v.Status == archive.VideoStatusOpen) && v.State >= 0 {
- videosCnt++
- }
- }
- // 辣鸡dede, check cid
- for _, v := range vs {
- if v.Cid == 0 && v.Status == archive.VideoStatusSubmit {
- // NOTE: 刚上传,没必要同步去
- log.Error("aid(%d) vid(%d) cid(%d) videoStatus(%d) return", v.Aid, v.ID, v.Cid, v.Status)
- return
- }
- }
- if aResult, err = s.resultDao.Archive(c, aid); err != nil {
- log.Error("s.resultDao.Archive error(%+v)", err)
- return
- }
- if tx, err = s.resultDao.BeginTran(c); err != nil {
- log.Error("s.result.BeginTran error(%v)", err)
- return
- }
- var (
- duration int
- firstCid int64
- dimensions string
- )
- for _, v := range vs {
- if (v.Status == archive.VideoStatusAccess || v.Status == archive.VideoStatusOpen) && v.State == archive.VideoRelationBind {
- if _, err = s.resultDao.TxAddVideo(c, tx, v); err != nil {
- tx.Rollback()
- log.Error("s.result.TxAddVideo error(%v)", err)
- break
- }
- duration += int(v.Duration)
- upCids = append(upCids, v.Cid)
- if v.Index == 1 && v.SrcType == "vupload" {
- firstCid = v.Cid
- dimensions = v.Dimensions
- }
- } else {
- if _, err = s.resultDao.TxDelVideoByCid(c, tx, aid, v.Cid); err != nil {
- tx.Rollback()
- log.Error("s.result.TxDelVideoByCid error(%v)")
- break
- }
- delCids = append(delCids, v.Cid)
- }
- }
- a.Duration = duration
- if rows, err = s.resultDao.TxAddArchive(c, tx, a, ad, videosCnt, firstCid, dimensions); err != nil {
- tx.Rollback()
- log.Error("s.result.TxAddArchive error(%v)", err)
- return
- }
- if rows == 0 {
- if _, err = s.resultDao.TxUpArchive(c, tx, a, ad, videosCnt, firstCid, dimensions); err != nil {
- tx.Rollback()
- log.Error("s.result.TxUpArchive error(%v)")
- return
- }
- }
- // 更新联合投稿人
- if a.AttrVal(archive.AttrBitIsCooperation) == archive.AttrYes {
- if staff, err = s.archiveDao.Staff(c, aid); err != nil {
- tx.Rollback()
- log.Error("s.archiveDao.Staff aid(%d) error(%v)", aid, err)
- return
- }
- if err = s.resultDao.TxDelStaff(c, tx, aid); err != nil {
- tx.Rollback()
- log.Error("s.result.TxDelStaff aid(%d) error(%v)", aid, err)
- return
- }
- if staff != nil {
- if err = s.resultDao.TxAddStaff(c, tx, aid, staff); err != nil {
- tx.Rollback()
- log.Error("s.result.TxAddStaff aid(%d) error(%v)", aid, err)
- return
- }
- }
- } else { //从联合投稿改为非联合投稿的 删除staff数据
- if aResult != nil && aResult.AttrVal(archive.AttrBitIsCooperation) == archive.AttrYes {
- if err = s.resultDao.TxDelStaff(c, tx, aid); err != nil {
- tx.Rollback()
- log.Error("s.result.TxDelStaff aid(%d) error(%v)", aid, err)
- return
- }
- }
- }
- if err = tx.Commit(); err != nil {
- log.Error("tx.Commit error(%v)")
- return
- }
- log.Info("aid(%d) upCids(%d) delCids(%d) db updated", aid, len(upCids), len(delCids))
- changed = true
- return
- }
|