media_service.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package media
  2. import (
  3. logger "eta/eta_mini_ht_api/common/component/log"
  4. "eta/eta_mini_ht_api/common/exception"
  5. "eta/eta_mini_ht_api/common/utils/page"
  6. stringUtils "eta/eta_mini_ht_api/common/utils/string"
  7. mediaService "eta/eta_mini_ht_api/domian/media"
  8. userService "eta/eta_mini_ht_api/domian/user"
  9. "eta/eta_mini_ht_api/models/user"
  10. "strings"
  11. "sync"
  12. )
  13. const (
  14. video = "video"
  15. audio = "audio"
  16. )
  17. type RecordCount struct {
  18. UserId int
  19. Mobile string
  20. MediaId int
  21. MediaType string
  22. IpAddress string
  23. Location string
  24. Referer string
  25. Additional string
  26. }
  27. func convertToMediaCountDTO(record RecordCount, sourceType user.SourceType) (dto userService.RecordCountDTO) {
  28. return userService.RecordCountDTO{
  29. UserId: record.UserId,
  30. Mobile: record.Mobile,
  31. SourceId: record.MediaId,
  32. SourceType: sourceType,
  33. }
  34. }
  35. func getSourceType(mediaType string) user.SourceType {
  36. switch mediaType {
  37. case video:
  38. return user.VideoSourceType
  39. case audio:
  40. return user.AudioSourceType
  41. default:
  42. return ""
  43. }
  44. }
  45. func CountMedia(count RecordCount) (err error) {
  46. media, err := mediaService.GetMediaById(count.MediaType, count.MediaId)
  47. sourceType := getSourceType(media.MediaType)
  48. if sourceType == "" {
  49. err = exception.New(exception.MediaTypeError)
  50. return
  51. }
  52. dto := convertToMediaCountDTO(count, sourceType)
  53. return userService.CountMedia(dto)
  54. }
  55. func GetTotalPageCount(mediaType string) (count int64, latestId int64) {
  56. if mediaType == "" {
  57. return
  58. }
  59. return mediaService.GetTotalPageCount(mediaType)
  60. }
  61. func GetTotalPageCountByAnalystId(mediaType string, analystId int) (total int64, latestId int64) {
  62. if mediaType == "" {
  63. return
  64. }
  65. return mediaService.GetTotalPageCountByAnalystId(mediaType, analystId)
  66. }
  67. func GetTotalPageCountByPermissionIds(mediaType string, permissionIds []int) (total int64, latestId int64, ids []int) {
  68. if mediaType == "" {
  69. return
  70. }
  71. if len(permissionIds) == 0 {
  72. total, latestId = mediaService.GetTotalPageCount(mediaType)
  73. ids = []int{}
  74. return
  75. }
  76. return mediaService.GetMediaPermissionMappingByPermissionIds(mediaType, permissionIds)
  77. }
  78. func SearchMaxMediaId(mediaType string, key string) (total int64, latestId int64) {
  79. return mediaService.SearchMaxMediaId(mediaType, key)
  80. }
  81. func GetMediaById(mediaType string, mediaId int) (media mediaService.MediaDTO, err error) {
  82. media, err = mediaService.GetMediaById(mediaType, mediaId)
  83. if err != nil {
  84. err = exception.New(exception.MediaFoundFailed)
  85. }
  86. return
  87. }
  88. func GetMediaPageByAnalystId(mediaType string, pageInfo page.PageInfo, analystId int) (list []mediaService.MediaDTO, err error) {
  89. list, err = mediaService.GetMediaPageByAnalystId(mediaType, pageInfo, analystId)
  90. if err != nil {
  91. err = exception.New(exception.GetAnalystMediaListFailed)
  92. return
  93. }
  94. //并发获取媒体的标签
  95. var wg sync.WaitGroup
  96. wg.Add(len(list))
  97. for i := 0; i < len(list); i++ {
  98. go func(media *mediaService.MediaDTO) {
  99. defer wg.Done()
  100. idStr := strings.Split(media.PermissionIDs, ",")
  101. var ids []int
  102. ids, err = stringUtils.StringToIntSlice(idStr)
  103. if err != nil {
  104. logger.Error("品种名称列表转换失败:%v", err)
  105. }
  106. media.PermissionNames = getMediaPermissionNames(ids)
  107. }(&list[i])
  108. }
  109. wg.Wait()
  110. if err != nil {
  111. err = exception.New(exception.QueryReportPageFailed)
  112. }
  113. return
  114. }
  115. func GetMediaPageByIds(mediaType string, pageInfo page.PageInfo, mediaIds []int) (list []mediaService.MediaDTO, err error) {
  116. list, err = mediaService.GetMediaPageByIds(mediaType, pageInfo, mediaIds)
  117. if err != nil {
  118. err = exception.New(exception.GetMediaListFailed)
  119. return
  120. }
  121. //并发获取媒体的标签
  122. var wg sync.WaitGroup
  123. wg.Add(len(list))
  124. for i := 0; i < len(list); i++ {
  125. go func(media *mediaService.MediaDTO) {
  126. defer wg.Done()
  127. idStr := strings.Split(media.PermissionIDs, ",")
  128. var ids []int
  129. ids, err = stringUtils.StringToIntSlice(idStr)
  130. if err != nil {
  131. logger.Error("品种名称列表转换失败:%v", err)
  132. }
  133. media.PermissionNames = getMediaPermissionNames(ids)
  134. }(&list[i])
  135. }
  136. wg.Wait()
  137. if err != nil {
  138. err = exception.New(exception.QueryReportPageFailed)
  139. }
  140. return
  141. }
  142. func getMediaPermissionNames(id []int) (labels []string) {
  143. permissions, err := mediaService.GetPermissionsByIds(id)
  144. if err != nil {
  145. logger.Error("查询品种名称列表失败:%v", err)
  146. labels = []string{}
  147. return
  148. }
  149. for _, permission := range permissions {
  150. labels = append(labels, permission.Name)
  151. }
  152. return
  153. }
  154. // stringToIntSlice 将一个包含数字字符串的切片转换为整数切片
  155. func SearchMediaList(mediaType string, key string, pageInfo page.PageInfo) (medias []mediaService.MediaDTO, err error) {
  156. offset := page.StartIndex(pageInfo.Current, pageInfo.PageSize)
  157. medias, err = mediaService.SearchMediaList(mediaType, key, offset, pageInfo.PageSize, pageInfo.LatestId)
  158. var wg sync.WaitGroup
  159. wg.Add(len(medias))
  160. for i := 0; i < len(medias); i++ {
  161. go func(media *mediaService.MediaDTO) {
  162. defer wg.Done()
  163. idStr := strings.Split(media.PermissionIDs, ",")
  164. var ids []int
  165. ids, err = stringUtils.StringToIntSlice(idStr)
  166. if err != nil {
  167. logger.Error("获取品种列表失败:%v", err)
  168. }
  169. media.PermissionNames = getMediaPermissionNames(ids)
  170. }(&medias[i])
  171. }
  172. wg.Wait()
  173. if err != nil {
  174. err = exception.New(exception.SearchReportPageFailed)
  175. }
  176. return
  177. }