123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- package service
- import (
- "context"
- "encoding/json"
- artmdl "go-common/app/interface/openplatform/article/model"
- "go-common/app/job/openplatform/article/dao"
- "go-common/app/job/openplatform/article/model"
- "go-common/library/conf/env"
- "go-common/library/log"
- )
- func (s *Service) upArticles(c context.Context, action string, newMsg []byte, oldMsg []byte) {
- log.Info("s.upArticles action(%s) old(%s) new(%s)", action, string(oldMsg), string(newMsg))
- if action != model.ActUpdate && action != model.ActInsert && action != model.ActDelete {
- return
- }
- var (
- err error
- aid int64
- newArticle = &model.Article{}
- oldArticle = &model.Article{}
- )
- if err = json.Unmarshal(newMsg, newArticle); err != nil {
- log.Error("json.Unmarshal(%s) error(%+v)", newMsg, err)
- dao.PromError("article:解析过审文章databus新内容")
- return
- }
- if action == model.ActUpdate {
- if err = json.Unmarshal(oldMsg, oldArticle); err != nil {
- log.Error("json.Unmarshal(%s) error(%+v)", oldMsg, err)
- dao.PromError("article:解析过审文章databus旧内容")
- return
- }
- }
- aid = newArticle.ID
- mid := newArticle.Mid
- show := true
- var comment string
- if artmdl.NoDistributeAttr(newArticle.Attributes) {
- show = false
- comment = "禁止分发"
- }
- switch action {
- case model.ActInsert:
- s.openReply(c, aid, mid)
- s.addArtCache(c, aid)
- s.updateSearchArt(c, newArticle)
- s.flowSync(c, aid, mid)
- s.addURLNode(c, aid)
- if comment == "" {
- comment = "文章过审"
- }
- case model.ActUpdate:
- s.updateArtCache(c, aid, oldArticle.CategoryID)
- s.addURLNode(c, aid)
- if !artmdl.NoDistributeAttr(oldArticle.Attributes) && artmdl.NoDistributeAttr(newArticle.Attributes) {
- s.delSearchArt(c, aid)
- } else {
- s.updateSearchArt(c, newArticle)
- }
- if comment == "" {
- comment = "文章修改"
- }
- case model.ActDelete:
- s.closeReply(c, aid, mid)
- s.deleteArtCache(c, aid, mid)
- s.deleteArtRecommendCache(c, aid, newArticle.CategoryID)
- s.delSearchArt(c, aid)
- // s.delMediaScore(c, aid, newArticle.MediaID, mid)
- show = false
- comment = "文章不可见"
- }
- if e := s.dao.PubDynamic(c, mid, aid, show, comment, int64(newArticle.PublishTime), newArticle.DynamicIntro); e != nil {
- s.dao.PushDynamicCache(c, &model.DynamicCacheRetry{
- Aid: aid,
- Mid: mid,
- Show: show,
- Comment: comment,
- Ts: int64(newArticle.PublishTime),
- DynamicIntro: newArticle.DynamicIntro,
- })
- }
- if env.DeployEnv != env.DeployEnvProd {
- return
- }
- s.gameSync(c, aid, mid, action)
- urls := model.ReadURLs(aid)
- for _, u := range urls {
- if err = s.dao.PurgeCDN(c, u); err == nil {
- log.Info("s.dao.PurgeCDN(%s) success.", u)
- dao.PromInfo("article:刷新CDN")
- }
- }
- }
- func (s *Service) gameSync(c context.Context, aid, mid int64, action string) {
- authors, err := s.dao.GameList(c)
- if err != nil {
- dao.PromError("service:获得游戏数据")
- log.Error("s.gameSync(aid: %v, mid: %v) init err: %+v", aid, mid, err)
- return
- }
- var exist bool
- for _, author := range authors {
- if author == mid {
- exist = true
- break
- }
- }
- if !exist {
- return
- }
- if err = s.dao.GameSync(c, action, aid); err != nil {
- log.Error("s.gameSync(%d, %d, %s) error(%+v)", aid, mid, action, err)
- dao.PromError("service:同步游戏数据")
- s.dao.PushGameCache(c, &model.GameCacheRetry{
- Action: action,
- Aid: aid,
- })
- return
- }
- log.Info("s.gameSync(%d, %d, %s) success", aid, mid, action)
- }
- func (s *Service) flowSync(c context.Context, aid, mid int64) {
- if err := s.dao.FlowSync(c, mid, aid); err != nil {
- s.dao.PushFlowCache(c, &model.FlowCacheRetry{
- Aid: aid,
- Mid: mid,
- })
- return
- }
- log.Info("s.flowSync(aid: %d, mid: %d) success", aid, mid)
- }
- func (s *Service) openReply(c context.Context, aid, mid int64) (err error) {
- if err = s.dao.OpenReply(c, aid, mid); err == nil {
- log.Info("OpenReply(%d,%d) success.", aid, mid)
- dao.PromInfo("article:打开评论区")
- }
- return
- }
- func (s *Service) closeReply(c context.Context, aid, mid int64) (err error) {
- if err = s.dao.CloseReply(c, aid, mid); err == nil {
- log.Info("CloseReply(%d,%d) success.", aid, mid)
- dao.PromInfo("article:关闭评论区")
- }
- return
- }
- func (s *Service) addArtCache(c context.Context, aid int64) (err error) {
- arg := &artmdl.ArgAid{Aid: aid}
- if err = s.articleRPC.AddArticleCache(c, arg); err != nil {
- log.Error("s.articleRPC.AddArticleCache(%d) error(%+v)", aid, err)
- dao.PromError("article:新增文章缓存")
- s.dao.PushArtCache(c, &dao.CacheRetry{
- Action: dao.RetryAddArtCache,
- Aid: aid,
- })
- } else {
- log.Info("s.articleRPC.AddArticleCache(%d) success", aid)
- dao.PromInfo("article:新增文章缓存")
- }
- return
- }
- func (s *Service) updateArtCache(c context.Context, aid, cid int64) (err error) {
- arg := &artmdl.ArgAidCid{Aid: aid, Cid: cid}
- if err = s.articleRPC.UpdateArticleCache(c, arg); err != nil {
- log.Error("s.articleRPC.UpdateArticleCache(%d,%d) error(%+v)", aid, cid, err)
- dao.PromError("article:更新文章缓存")
- s.dao.PushArtCache(c, &dao.CacheRetry{
- Action: dao.RetryUpdateArtCache,
- Aid: aid,
- Cid: cid,
- })
- } else {
- log.Info("s.articleRPC.UpdateArticleCache(%d,%d) success", aid, cid)
- dao.PromInfo("article:更新文章缓存")
- }
- return
- }
- func (s *Service) deleteArtCache(c context.Context, aid, mid int64) (err error) {
- arg := &artmdl.ArgAidMid{Aid: aid, Mid: mid}
- if err = s.articleRPC.DelArticleCache(c, arg); err != nil {
- log.Error("s.articleRPC.DelArticleCache(%d,%d) error(%+v)", aid, mid, err)
- dao.PromError("article:删除文章缓存")
- s.dao.PushArtCache(c, &dao.CacheRetry{
- Action: dao.RetryDeleteArtCache,
- Aid: aid,
- Mid: mid,
- })
- } else {
- log.Info("s.articleRPC.DelArticleCache(%d,%d) success", aid, mid)
- dao.PromInfo("article:删除文章缓存")
- }
- return
- }
- func (s *Service) deleteArtRecommendCache(c context.Context, aid, cid int64) (err error) {
- arg := &artmdl.ArgAidCid{Aid: aid, Cid: cid}
- if err = s.articleRPC.DelRecommendArtCache(c, arg); err != nil {
- log.Error("s.articleRPC.DelRecommendArtCache(%d,%d) error(%+v)", aid, cid, err)
- dao.PromError("article:删除文章推荐缓存")
- s.dao.PushArtCache(c, &dao.CacheRetry{
- Action: dao.RetryDeleteArtRecCache,
- Aid: aid,
- Cid: cid,
- })
- } else {
- log.Info("s.articleRPC.DelRecommendArtCache(%d,%d) success", aid, cid)
- dao.PromInfo("article:删除文章推荐缓存")
- }
- return
- }
- func (s *Service) delMediaScore(c context.Context, aid, mediaID, mid int64) (err error) {
- err = s.dao.DelScore(c, aid, mediaID, mid)
- return
- }
|