123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- package service
- import (
- "context"
- "fmt"
- "go-common/app/admin/main/mcn/model"
- accgrpc "go-common/app/service/main/account/api"
- memgrpc "go-common/app/service/main/member/api"
- blkmdl "go-common/app/service/main/member/model/block"
- "go-common/library/ecode"
- "go-common/library/log"
- "go-common/library/xstr"
- )
- // RecommendAdd .
- func (s *Service) RecommendAdd(c context.Context, arg *model.RecommendUpReq) error {
- var (
- err error
- ok bool
- bindMids []int64
- blockInfo *memgrpc.BlockInfoReply
- bi *model.UpBaseInfo
- pi *model.UpPlayInfo
- mbi map[int64]*model.UpBaseInfo
- mpi map[int64]*model.UpPlayInfo
- rpp *model.McnUpRecommendPool
- )
- if blockInfo, err = s.memGRPC.BlockInfo(c, &memgrpc.MemberMidReq{Mid: arg.UpMid}); err != nil {
- return err
- }
- if blockInfo.BlockStatus > int32(blkmdl.BlockStatusFalse) {
- return fmt.Errorf("添加到推荐池的mid为(%d)的up主已经被封禁", arg.UpMid)
- }
- if bindMids, err = s.dao.McnUpBindMids(c, []int64{arg.UpMid}); err != nil {
- return err
- }
- if len(bindMids) > 0 {
- return fmt.Errorf("添加到推荐池的mid为(%s)的up主已经被绑定", xstr.JoinInts(bindMids))
- }
- if rpp, err = s.dao.McnUpRecommendMid(c, arg.UpMid); err != nil {
- return err
- }
- if rpp != nil && rpp.State != model.MCNUPRecommendStateDel {
- return ecode.MCNRecommendUpInPool
- }
- if mbi, err = s.dao.UpBaseInfoMap(c, []int64{arg.UpMid}); err != nil {
- return err
- }
- if mpi, err = s.dao.UpPlayInfoMap(c, []int64{arg.UpMid}); err != nil {
- return err
- }
- rp := &model.McnUpRecommendPool{UpMid: arg.UpMid}
- if bi, ok = mbi[arg.UpMid]; ok {
- rp.FansCount = bi.FansCount
- rp.ActiveTid = bi.ActiveTid
- }
- if pi, ok = mpi[arg.UpMid]; ok {
- rp.ArchiveCount = pi.ArticleCount
- rp.PlayCountAccumulate = pi.PlayCountAccumulate
- rp.PlayCountAverage = pi.PlayCountAverage
- }
- if _, err = s.dao.AddMcnUpRecommend(c, rp); err != nil {
- return err
- }
- s.worker.Add(func() {
- index := []interface{}{int8(model.MCNUPRecommendStateOff), arg.UpMid}
- content := map[string]interface{}{
- "up_mid": arg.UpMid,
- "fans_count": rp.FansCount,
- "archive_count": rp.ArchiveCount,
- "play_count_accumulate": rp.PlayCountAccumulate,
- "play_count_average": rp.PlayCountAverage,
- "active_tid": rp.ActiveTid,
- "source": model.MCNUPRecommendStateManual,
- }
- s.AddAuditLog(context.Background(), model.MCNRecommendLogBizID, int8(model.MCNUPRecommendActionAdd), model.MCNUPRecommendActionAdd.String(), arg.UID, arg.UserName, []int64{arg.UpMid}, index, content)
- })
- return nil
- }
- // RecommendOP .
- func (s *Service) RecommendOP(c context.Context, arg *model.RecommendStateOpReq) error {
- var (
- err error
- blockInfosReply *memgrpc.BlockBatchInfoReply
- blockMids, bindMids, banMids, recMids []int64
- mrp map[int64]*model.McnUpRecommendPool
- )
- if len(arg.UpMids) == 0 {
- return ecode.MCNRecommendUpMidsIsEmpty
- }
- if arg.Action == model.MCNUPRecommendActionOn || arg.Action == model.MCNUPRecommendActionRestore {
- if blockInfosReply, err = s.memGRPC.BlockBatchInfo(c, &memgrpc.MemberMidsReq{Mids: arg.UpMids}); err != nil {
- return err
- }
- for _, v := range blockInfosReply.BlockInfos {
- if v.BlockStatus > int32(blkmdl.BlockStatusFalse) {
- blockMids = append(blockMids, v.MID)
- }
- }
- if len(blockMids) > 0 {
- return fmt.Errorf("推荐的mid为(%s)的up主已经被封禁", xstr.JoinInts(blockMids))
- }
- if bindMids, err = s.dao.McnUpBindMids(c, arg.UpMids); err != nil {
- return err
- }
- if len(bindMids) > 0 {
- return fmt.Errorf("推荐的mid为(%s)的up主已经被绑定", xstr.JoinInts(bindMids))
- }
- }
- state := arg.Action.GetState()
- if state == model.MCNUPRecommendStateUnKnown {
- return ecode.MCNRecommendUpStateFlowErr
- }
- if mrp, err = s.dao.McnUpRecommendMids(c, arg.UpMids); err != nil {
- return err
- }
- for _, upMids := range arg.UpMids {
- if rp, ok := mrp[upMids]; ok {
- if rp.State == model.MCNUPRecommendStateBan && arg.Action == model.MCNUPRecommendActionOn {
- banMids = append(banMids, upMids)
- }
- if rp.State == model.MCNUPRecommendStateOn && arg.Action == model.MCNUPRecommendActionRestore {
- recMids = append(recMids, upMids)
- }
- }
- }
- if len(banMids) > 0 {
- return fmt.Errorf("推荐的mid为(%s)的up主已被禁止推荐,不能推荐", xstr.JoinInts(banMids))
- }
- if len(recMids) > 0 {
- return fmt.Errorf("推荐的mid为(%s)的up主已被推荐,不需要恢复", xstr.JoinInts(recMids))
- }
- if _, err = s.dao.UpMcnUpsRecommendOP(c, arg.UpMids, state); err != nil {
- return err
- }
- for _, mid := range arg.UpMids {
- s.worker.Add(func() {
- index := []interface{}{int8(state), mid}
- content := map[string]interface{}{
- "up_mid": mid,
- }
- s.AddAuditLog(context.Background(), model.MCNRecommendLogBizID, int8(state), arg.Action.String(), arg.UID, arg.UserName, []int64{mid}, index, content)
- })
- }
- return nil
- }
- // RecommendList .
- func (s *Service) RecommendList(c context.Context, arg *model.MCNUPRecommendReq) (res *model.McnUpRecommendListReply, err error) {
- var (
- mids, tids []int64
- tpNames map[int64]string
- accsReply *accgrpc.InfosReply
- )
- res = new(model.McnUpRecommendListReply)
- res.Page = arg.Page
- if res.TotalCount, err = s.dao.McnUpRecommendTotal(c, arg); err != nil {
- return
- }
- if res.TotalCount <= 0 {
- return
- }
- if res.List, err = s.dao.McnUpRecommends(c, arg); err != nil {
- return
- }
- if len(res.List) <= 0 {
- return
- }
- for _, v := range res.List {
- mids = append(mids, v.UpMid)
- tids = append(tids, int64(v.ActiveTid))
- }
- if accsReply, err = s.accGRPC.Infos3(c, &accgrpc.MidsReq{Mids: mids}); err != nil {
- log.Error("s.accGRPC.Infos3(%+v) err(%v)", mids, err)
- err = nil
- }
- tpNames = s.videoup.GetTidName(tids)
- infos := accsReply.Infos
- for _, v := range res.List {
- if info, ok := infos[v.UpMid]; ok {
- v.UpName = info.Name
- }
- if tyName, ok := tpNames[int64(v.ActiveTid)]; ok {
- v.TpName = tyName
- } else {
- v.TpName = model.DefaultTyName
- }
- }
- return
- }
|