coin.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package service
  2. import (
  3. "context"
  4. "time"
  5. "go-common/app/interface/main/space/model"
  6. arcmdl "go-common/app/service/main/archive/api"
  7. coinmdl "go-common/app/service/main/coin/api"
  8. "go-common/library/log"
  9. )
  10. const (
  11. _coinVideoLimit = 100
  12. _businessCoin = "archive"
  13. )
  14. var _emptyCoinArcList = make([]*model.CoinArc, 0)
  15. // CoinVideo get coin archives
  16. func (s *Service) CoinVideo(c context.Context, mid, vmid int64) (list []*model.CoinArc, err error) {
  17. var (
  18. coinReply *coinmdl.ListReply
  19. aids []int64
  20. arcReply *arcmdl.ArcsReply
  21. )
  22. if mid != vmid {
  23. if err = s.privacyCheck(c, vmid, model.PcyCoinVideo); err != nil {
  24. return
  25. }
  26. }
  27. if coinReply, err = s.coinClient.List(c, &coinmdl.ListReq{Mid: vmid, Business: _businessCoin, Ts: time.Now().Unix()}); err != nil {
  28. log.Error("s.coinClinet.List(%d) error(%v)", vmid, err)
  29. err = nil
  30. list = _emptyCoinArcList
  31. return
  32. }
  33. existAids := make(map[int64]int64, len(coinReply.List))
  34. afVideos := make(map[int64]*coinmdl.ModelList, len(coinReply.List))
  35. for _, v := range coinReply.List {
  36. if len(aids) > _coinVideoLimit {
  37. break
  38. }
  39. if _, ok := existAids[v.Aid]; ok {
  40. if v.Aid > 0 {
  41. afVideos[v.Aid].Number += v.Number
  42. }
  43. continue
  44. }
  45. if v.Aid > 0 {
  46. afVideos[v.Aid] = v
  47. aids = append(aids, v.Aid)
  48. existAids[v.Aid] = v.Aid
  49. }
  50. }
  51. if len(aids) == 0 {
  52. list = _emptyCoinArcList
  53. return
  54. }
  55. if arcReply, err = s.arcClient.Arcs(c, &arcmdl.ArcsRequest{Aids: aids}); err != nil {
  56. log.Error("s.arcClient.Arcs(%v) error(%v)", aids, err)
  57. return
  58. }
  59. for _, aid := range aids {
  60. if arc, ok := arcReply.Arcs[aid]; ok && arc.IsNormal() {
  61. if arc.Access >= 10000 {
  62. arc.Stat.View = -1
  63. }
  64. if item, ok := afVideos[aid]; ok {
  65. list = append(list, &model.CoinArc{Arc: arc, Coins: item.Number, Time: item.Ts})
  66. }
  67. }
  68. }
  69. if len(list) == 0 {
  70. list = _emptyCoinArcList
  71. }
  72. return
  73. }