123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package service
- import (
- "context"
- "time"
- "go-common/app/interface/main/web/model"
- arcmdl "go-common/app/service/main/archive/api"
- "go-common/app/service/main/archive/model/archive"
- coinmdl "go-common/app/service/main/coin/api"
- thumbup "go-common/app/service/main/thumbup/model"
- "go-common/library/ecode"
- "go-common/library/log"
- "go-common/library/net/metadata"
- )
- var _emptyCoinArcList = make([]*model.CoinArc, 0)
- // Coins get archive User added coins.
- func (s *Service) Coins(c context.Context, mid, aid int64) (res *model.ArchiveUserCoins, err error) {
- var rs *coinmdl.ItemUserCoinsReply
- if rs, err = s.coinClient.ItemUserCoins(c, &coinmdl.ItemUserCoinsReq{Mid: mid, Aid: aid, Business: model.CoinArcBusiness}); err != nil {
- log.Error("s.coinClient.ItemUserCoins(%d,%d) error(%v)", mid, aid, err)
- return
- }
- res = new(model.ArchiveUserCoins)
- if rs != nil {
- res.Multiply = rs.Number
- }
- return
- }
- // AddCoin add coin to archive.
- func (s *Service) AddCoin(c context.Context, aid, mid, upID, multiply, avtype int64, business, ck, ua, refer string, now time.Time, selectLike int) (like bool, err error) {
- var (
- pubTime int64
- typeID int32
- maxCoin int64 = 2
- ip = metadata.String(c, metadata.RemoteIP)
- )
- switch avtype {
- case model.CoinAddArcType:
- var a *arcmdl.ArcReply
- if a, err = s.arcClient.Arc(c, &arcmdl.ArcRequest{Aid: aid}); err != nil {
- log.Error("s.arcClient.Arc(%v) error(%v)", aid, err)
- return
- }
- if !a.Arc.IsNormal() {
- err = ecode.ArchiveNotExist
- return
- }
- if a.Arc.Copyright == int32(archive.CopyrightCopy) {
- maxCoin = 1
- }
- upID = a.Arc.Author.Mid
- typeID = a.Arc.TypeID
- pubTime = int64(a.Arc.PubDate)
- case model.CoinAddArtType:
- maxCoin = 1
- }
- arg := &coinmdl.AddCoinReq{
- IP: ip,
- Mid: mid,
- Upmid: upID,
- MaxCoin: maxCoin,
- Aid: aid,
- Business: business,
- Number: multiply,
- Typeid: typeID,
- PubTime: pubTime,
- }
- if _, err = s.coinClient.AddCoin(c, arg); err == nil && avtype == model.CoinAddArcType && selectLike == 1 {
- if err = s.thumbup.Like(c, &thumbup.ArgLike{Mid: mid, UpMid: upID, Business: _businessLike, MessageID: aid, Type: thumbup.TypeLike, RealIP: ip}); err != nil {
- log.Error("AddCoin s.thumbup.Like mid(%d) upID(%d) aid(%d) error(%+v)", mid, upID, aid, err)
- err = nil
- } else {
- like = true
- }
- }
- return
- }
- // CoinExp get coin exp today
- func (s *Service) CoinExp(c context.Context, mid int64) (exp int64, err error) {
- var todayExp *coinmdl.TodayExpReply
- if todayExp, err = s.coinClient.TodayExp(c, &coinmdl.TodayExpReq{Mid: mid}); err != nil {
- log.Error("CoinExp s.coinClient.TodayExp mid(%d) error(%v)", mid, err)
- err = nil
- return
- }
- exp = todayExp.Exp
- return
- }
- // CoinList get coin list.
- func (s *Service) CoinList(c context.Context, mid int64, pn, ps int) (list []*model.CoinArc, count int, err error) {
- var (
- coinReply *coinmdl.ListReply
- aids []int64
- arcsReply *arcmdl.ArcsReply
- )
- if coinReply, err = s.coinClient.List(c, &coinmdl.ListReq{Mid: mid, Business: model.CoinArcBusiness, Ts: time.Now().Unix()}); err != nil {
- log.Error("CoinList s.coinClient.List(%d) error(%v)", mid, err)
- err = nil
- list = _emptyCoinArcList
- return
- }
- existAids := make(map[int64]int64, len(coinReply.List))
- afVideos := make(map[int64]*coinmdl.ModelList, len(coinReply.List))
- for _, v := range coinReply.List {
- if _, ok := existAids[v.Aid]; ok {
- afVideos[v.Aid].Number += v.Number
- continue
- }
- afVideos[v.Aid] = v
- aids = append(aids, v.Aid)
- existAids[v.Aid] = v.Aid
- }
- count = len(aids)
- start := (pn - 1) * ps
- end := pn * ps
- switch {
- case start > count:
- aids = aids[:0]
- case end >= count:
- aids = aids[start:]
- default:
- aids = aids[start:end]
- }
- if len(aids) == 0 {
- list = _emptyCoinArcList
- return
- }
- if arcsReply, err = s.arcClient.Arcs(c, &arcmdl.ArcsRequest{Aids: aids}); err != nil {
- log.Error("CoinList s.arcClient.Arcs(%v) error(%v)", aids, err)
- err = nil
- list = _emptyCoinArcList
- return
- }
- for _, aid := range aids {
- if arc, ok := arcsReply.Arcs[aid]; ok && arc.IsNormal() {
- if arc.Access >= 10000 {
- arc.Stat.View = 0
- }
- if item, ok := afVideos[aid]; ok {
- list = append(list, &model.CoinArc{Arc: arc, Coins: item.Number, Time: item.Ts})
- }
- }
- }
- if len(list) == 0 {
- list = _emptyCoinArcList
- }
- return
- }
|