subject.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package service
  2. import (
  3. "context"
  4. "time"
  5. "go-common/app/admin/main/dm/model"
  6. "go-common/app/service/main/archive/api"
  7. "go-common/app/service/main/archive/model/archive"
  8. "go-common/library/log"
  9. manager "go-common/library/queue/databus/report"
  10. )
  11. // ArchiveList get archive list.
  12. func (s *Service) ArchiveList(c context.Context, req *model.ArchiveListReq) (res *model.ArchiveResult, err error) {
  13. var (
  14. oids, aids []int64
  15. aidMap = make(map[int64]struct{})
  16. arcMap = make(map[int64]*model.ArcVideo)
  17. archiveTypes = make(map[int64]*model.ArchiveType)
  18. subs map[int64]*model.Subject
  19. r = &model.SearchSubjectReq{
  20. State: req.State,
  21. Attrs: req.Attrs,
  22. Pn: req.Pn,
  23. Ps: req.Ps,
  24. Sort: req.Sort,
  25. Order: req.Order,
  26. }
  27. )
  28. res = &model.ArchiveResult{}
  29. res.Page = &model.Page{}
  30. if req.ID > 0 {
  31. switch req.IDType {
  32. case "oid":
  33. r.Oids = append(r.Oids, req.ID)
  34. case "mid":
  35. r.Mids = append(r.Mids, req.ID)
  36. case "aid":
  37. r.Aids = append(r.Aids, req.ID)
  38. case "ep", "ss":
  39. if r.Aids, r.Oids, err = s.dao.SeasonInfos(c, req.IDType, req.ID); err != nil {
  40. err = nil
  41. return
  42. }
  43. }
  44. }
  45. data := make([]*model.DMSubject, 0)
  46. if len(r.Aids) > 0 && req.Page >= 1 {
  47. var (
  48. pages []*api.Page
  49. arg = archive.ArgAid2{Aid: r.Aids[0]}
  50. )
  51. if pages, err = s.arcRPC.Page3(c, &arg); err != nil {
  52. log.Error("arcRPC.Page3(%v) error(%v)", arg, err)
  53. return
  54. }
  55. if len(pages) < int(req.Page) {
  56. log.Error("req.Page too big(%d) error(%v)", req.Page, err)
  57. return
  58. }
  59. r.Oids = append(r.Oids, pages[req.Page-1].Cid)
  60. }
  61. res = new(model.ArchiveResult)
  62. if oids, res.Page, err = s.dao.SearchSubject(c, r); err != nil {
  63. return
  64. }
  65. if subs, err = s.dao.Subjects(c, model.SubTypeVideo, oids); err != nil {
  66. return
  67. }
  68. for _, oid := range oids {
  69. if sub, ok := subs[oid]; ok {
  70. s := &model.DMSubject{
  71. OID: sub.Oid,
  72. Type: sub.Type,
  73. AID: sub.Pid,
  74. ACount: sub.ACount,
  75. Limit: sub.Maxlimit,
  76. CTime: sub.Ctime,
  77. MTime: sub.Mtime,
  78. MID: sub.Mid,
  79. State: sub.State,
  80. }
  81. data = append(data, s)
  82. }
  83. }
  84. if len(data) <= 0 {
  85. return
  86. }
  87. for _, idx := range data {
  88. if _, ok := aidMap[idx.AID]; !ok {
  89. aidMap[idx.AID] = struct{}{}
  90. aids = append(aids, idx.AID)
  91. }
  92. }
  93. if arcMap, err = s.dao.ArchiveVideos(c, aids); err != nil {
  94. return
  95. }
  96. if archiveTypes, err = s.dao.TypeInfo(c); err != nil {
  97. return
  98. }
  99. for _, idx := range data {
  100. info, ok := arcMap[idx.AID] // get archive info
  101. if !ok {
  102. continue
  103. }
  104. idx.Title = info.Archive.Title
  105. idx.TID = info.Archive.TID
  106. if v, ok := archiveTypes[idx.TID]; ok {
  107. idx.TName = v.Name
  108. }
  109. if len(info.Videos) > 0 { // get ep_title name
  110. for _, video := range info.Videos {
  111. if video.CID == idx.OID {
  112. idx.ETitle = video.Title
  113. }
  114. }
  115. }
  116. }
  117. res.ArcLists = data
  118. return
  119. }
  120. // UptSubjectsState change oids subject state and send manager log.
  121. func (s *Service) UptSubjectsState(c context.Context, tp int32, uid int64, uname string, oids []int64, state int32, comment string) (err error) {
  122. var affect int64
  123. for _, oid := range oids {
  124. if affect, err = s.dao.UpSubjectState(c, tp, oid, state); err != nil {
  125. return
  126. }
  127. if affect == 0 {
  128. log.Info("s.UpSubjectState affect=0 oid(%d)", oid)
  129. continue
  130. }
  131. managerInfo := &manager.ManagerInfo{
  132. UID: uid,
  133. Uname: uname,
  134. Business: model.DMLogBizID,
  135. Type: int(tp),
  136. Oid: oid,
  137. Ctime: time.Now(),
  138. Content: map[string]interface{}{
  139. "comment": comment,
  140. },
  141. }
  142. if state == model.SubStateOpen {
  143. managerInfo.Action = "开启弹幕池"
  144. } else {
  145. managerInfo.Action = "关闭弹幕池"
  146. }
  147. manager.Manager(managerInfo)
  148. log.Info("s.managerLogSend(%+v)", managerInfo)
  149. }
  150. return
  151. }
  152. // UpSubjectMaxLimit update maxlimit in dm subject.
  153. func (s *Service) UpSubjectMaxLimit(c context.Context, tp int32, oid, maxlimit int64) (err error) {
  154. _, err = s.dao.UpSubjectMaxlimit(c, tp, oid, maxlimit)
  155. return
  156. }
  157. // SubjectLog get subject log
  158. func (s *Service) SubjectLog(c context.Context, tp int32, oid int64) (data []*model.SubjectLog, err error) {
  159. data, err = s.dao.SearchSubjectLog(c, tp, oid)
  160. return
  161. }