stat.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package service
  2. import (
  3. "context"
  4. "go-common/app/interface/main/playlist/model"
  5. favmdl "go-common/app/service/main/favorite/model"
  6. "go-common/library/log"
  7. "go-common/library/net/metadata"
  8. )
  9. func (s *Service) plsByMid(c context.Context, mid int64) (res []*model.PlStat, err error) {
  10. if res, err = s.dao.StatsCache(c, mid); err != nil || len(res) == 0 {
  11. err = nil
  12. if res, err = s.dao.PlsByMid(c, mid); err != nil {
  13. log.Error("s.dao.PlsByMid(%d) error(%v)", mid, err)
  14. return
  15. }
  16. if len(res) > 0 {
  17. s.cache.Save(func() {
  18. s.dao.SetStatsCache(context.Background(), mid, res)
  19. })
  20. }
  21. }
  22. return
  23. }
  24. func (s *Service) plByPid(c context.Context, pid int64) (res *model.PlStat, err error) {
  25. var pls []*model.PlStat
  26. pids := []int64{pid}
  27. if pls, err = s.dao.PlsCache(c, pids); err != nil {
  28. err = nil
  29. } else if len(pls) != 0 {
  30. res = pls[0]
  31. return
  32. }
  33. if res, err = s.dao.PlByPid(c, pid); err != nil {
  34. log.Error("s.dao.PlByPid(%d) error(%v)", pid, err)
  35. }
  36. return
  37. }
  38. func (s *Service) plsByPid(c context.Context, pids []int64) (res []*model.PlStat, err error) {
  39. var (
  40. tmpRs []*model.PlStat
  41. rsMap map[int64]*model.PlStat
  42. )
  43. if tmpRs, err = s.dao.PlsCache(c, pids); err != nil || len(pids) != len(tmpRs) || len(tmpRs) == 0 {
  44. err = nil
  45. if tmpRs, err = s.dao.PlsByPid(c, pids); err != nil {
  46. log.Error("s.dao.PlsByPid(%+v) error(%v)", pids, err)
  47. }
  48. if len(tmpRs) > 0 {
  49. s.cache.Save(func() {
  50. s.dao.SetPlCache(context.Background(), tmpRs)
  51. })
  52. }
  53. }
  54. rsMap = make(map[int64]*model.PlStat)
  55. for _, v := range tmpRs {
  56. rsMap[v.ID] = v
  57. }
  58. for _, v := range pids {
  59. if rsMap[v] == nil {
  60. continue
  61. }
  62. res = append(res, rsMap[v])
  63. }
  64. return
  65. }
  66. // SetStat set playlist stat cache.
  67. func (s *Service) SetStat(c context.Context, arg *model.PlStat) (err error) {
  68. var fav *favmdl.Folder
  69. argFav := &favmdl.ArgFolder{Type: favmdl.TypePlayVideo, Fid: arg.Fid, Mid: arg.Mid, RealIP: ""}
  70. if fav, err = s.fav.Folder(c, argFav); err != nil || fav == nil {
  71. log.Error("SetStat s.fav.Folder(%+v) error(%v)", argFav, err)
  72. return
  73. }
  74. log.Info("service SetStat(%v) favState(%d)", arg, fav.State)
  75. if fav.State == favmdl.StateNormal {
  76. if err = s.dao.SetPlStatCache(c, arg.Mid, arg.ID, arg); err != nil {
  77. log.Error("SetStat s.dao.SetPlStatCache(%d,%d) error(%v)", arg.Mid, arg.ID, err)
  78. }
  79. }
  80. return
  81. }
  82. // PubView pub playlist view.
  83. func (s *Service) PubView(c context.Context, pid, aid int64) (err error) {
  84. var (
  85. pls *model.PlStat
  86. ip = metadata.String(c, metadata.RemoteIP)
  87. )
  88. if pls, err = s.plInfo(c, 0, pid, ip); err != nil {
  89. return
  90. }
  91. //TODO aid in playlist
  92. err = s.cache.Save(func() {
  93. s.dao.PubView(context.Background(), pid, aid, pls.View)
  94. })
  95. return
  96. }
  97. // PubShare pub playlist share.
  98. func (s *Service) PubShare(c context.Context, pid, aid int64) (err error) {
  99. var (
  100. pls *model.PlStat
  101. ip = metadata.String(c, metadata.RemoteIP)
  102. )
  103. if pls, err = s.plInfo(c, 0, pid, ip); err != nil {
  104. return
  105. }
  106. //TODO aid in playlist
  107. err = s.cache.Save(func() {
  108. s.dao.PubShare(context.Background(), pid, aid, pls.Share)
  109. })
  110. return
  111. }