media_service.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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. return
  86. }
  87. idStr := strings.Split(media.PermissionIDs, ",")
  88. var ids []int
  89. ids, err = stringUtils.StringToIntSlice(idStr)
  90. if err != nil {
  91. logger.Error("品种名称列表转换失败:%v", err)
  92. return
  93. }
  94. media.PermissionNames = getMediaPermissionNames(ids)
  95. return
  96. }
  97. func GetMediaPageByAnalystId(mediaType string, pageInfo page.PageInfo, analystId int) (list []mediaService.MediaDTO, err error) {
  98. list, err = mediaService.GetMediaPageByAnalystId(mediaType, pageInfo, analystId)
  99. if err != nil {
  100. err = exception.New(exception.GetAnalystMediaListFailed)
  101. return
  102. }
  103. //并发获取媒体的标签
  104. var wg sync.WaitGroup
  105. wg.Add(len(list))
  106. for i := 0; i < len(list); i++ {
  107. go func(media *mediaService.MediaDTO) {
  108. defer wg.Done()
  109. idStr := strings.Split(media.PermissionIDs, ",")
  110. var ids []int
  111. ids, err = stringUtils.StringToIntSlice(idStr)
  112. if err != nil {
  113. logger.Error("品种名称列表转换失败:%v", err)
  114. }
  115. media.PermissionNames = getMediaPermissionNames(ids)
  116. }(&list[i])
  117. }
  118. wg.Wait()
  119. if err != nil {
  120. err = exception.New(exception.QueryReportPageFailed)
  121. }
  122. return
  123. }
  124. func GetMediaPageByIds(mediaType string, pageInfo page.PageInfo, mediaIds []int) (list []mediaService.MediaDTO, err error) {
  125. list, err = mediaService.GetMediaPageByIds(mediaType, pageInfo, mediaIds)
  126. if err != nil {
  127. err = exception.New(exception.GetMediaListFailed)
  128. return
  129. }
  130. //并发获取媒体的标签
  131. var wg sync.WaitGroup
  132. wg.Add(len(list))
  133. for i := 0; i < len(list); i++ {
  134. go func(media *mediaService.MediaDTO) {
  135. defer wg.Done()
  136. idStr := strings.Split(media.PermissionIDs, ",")
  137. var ids []int
  138. ids, err = stringUtils.StringToIntSlice(idStr)
  139. if err != nil {
  140. logger.Error("品种名称列表转换失败:%v", err)
  141. }
  142. media.PermissionNames = getMediaPermissionNames(ids)
  143. }(&list[i])
  144. }
  145. wg.Wait()
  146. if err != nil {
  147. err = exception.New(exception.QueryReportPageFailed)
  148. }
  149. return
  150. }
  151. func getMediaPermissionNames(id []int) (labels []string) {
  152. permissions, err := mediaService.GetPermissionsByIds(id)
  153. if err != nil {
  154. logger.Error("查询品种名称列表失败:%v", err)
  155. labels = []string{}
  156. return
  157. }
  158. for _, permission := range permissions {
  159. labels = append(labels, permission.Name)
  160. }
  161. return
  162. }
  163. // stringToIntSlice 将一个包含数字字符串的切片转换为整数切片
  164. func SearchMediaList(mediaType string, key string, pageInfo page.PageInfo) (medias []mediaService.MediaDTO, err error) {
  165. offset := page.StartIndex(pageInfo.Current, pageInfo.PageSize)
  166. medias, err = mediaService.SearchMediaList(mediaType, key, offset, pageInfo.PageSize, pageInfo.LatestId)
  167. var wg sync.WaitGroup
  168. wg.Add(len(medias))
  169. for i := 0; i < len(medias); i++ {
  170. go func(media *mediaService.MediaDTO) {
  171. defer wg.Done()
  172. idStr := strings.Split(media.PermissionIDs, ",")
  173. var ids []int
  174. ids, err = stringUtils.StringToIntSlice(idStr)
  175. if err != nil {
  176. logger.Error("获取品种列表失败:%v", err)
  177. }
  178. media.PermissionNames = getMediaPermissionNames(ids)
  179. }(&medias[i])
  180. }
  181. wg.Wait()
  182. if err != nil {
  183. err = exception.New(exception.SearchReportPageFailed)
  184. }
  185. return
  186. }