media_service.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package media
  2. import (
  3. logger "eta_mini_ht_api/common/component/log"
  4. "eta_mini_ht_api/common/exception"
  5. "eta_mini_ht_api/common/utils/page"
  6. stringUtils "eta_mini_ht_api/common/utils/string"
  7. mediaService "eta_mini_ht_api/domian/media"
  8. "strings"
  9. "sync"
  10. )
  11. func GetTotalPageCount(mediaType string) (count int64, latestId int64) {
  12. if mediaType == "" {
  13. return
  14. }
  15. return mediaService.GetTotalPageCount(mediaType)
  16. }
  17. func GetTotalPageCountByAnalystId(mediaType string, analystId int) (total int64, latestId int64) {
  18. if mediaType == "" {
  19. return
  20. }
  21. return mediaService.GetTotalPageCountByAnalystId(mediaType, analystId)
  22. }
  23. func GetTotalPageCountByPermissionIds(mediaType string, permissionIds []int) (total int64, latestId int64, ids []int) {
  24. if mediaType == "" {
  25. return
  26. }
  27. if len(permissionIds) == 0 {
  28. total, latestId = mediaService.GetTotalPageCount(mediaType)
  29. ids = []int{}
  30. return
  31. }
  32. return mediaService.GetMediaPermissionMappingByPermissionIds(mediaType, permissionIds)
  33. }
  34. func SearchMaxMediaId(mediaType string, key string) (total int64, latestId int64) {
  35. return mediaService.SearchMaxMediaId(mediaType, key)
  36. }
  37. func GetMediaById(mediaType string, mediaId int) (media mediaService.MediaDTO, err error) {
  38. media, err = mediaService.GetMediaById(mediaType, mediaId)
  39. if err != nil {
  40. err = exception.New(exception.MediaFoundFailed)
  41. }
  42. return
  43. }
  44. func GetMediaPageByAnalystId(mediaType string, pageInfo page.PageInfo, analystId int) (list []mediaService.MediaDTO, err error) {
  45. list, err = mediaService.GetMediaPageByAnalystId(mediaType, pageInfo, analystId)
  46. if err != nil {
  47. err = exception.New(exception.GetAnalystMediaListFailed)
  48. return
  49. }
  50. //并发获取媒体的标签
  51. var wg sync.WaitGroup
  52. wg.Add(len(list))
  53. for i := 0; i < len(list); i++ {
  54. go func(media *mediaService.MediaDTO) {
  55. defer wg.Done()
  56. idStr := strings.Split(media.PermissionIDs, ",")
  57. var ids []int
  58. ids, err = stringUtils.StringToIntSlice(idStr)
  59. if err != nil {
  60. logger.Error("品种名称列表转换失败:%v", err)
  61. }
  62. media.PermissionNames = getMediaPermissionNames(ids)
  63. }(&list[i])
  64. }
  65. wg.Wait()
  66. if err != nil {
  67. err = exception.New(exception.QueryReportPageFailed)
  68. }
  69. return
  70. }
  71. func GetMediaPageByIds(mediaType string, pageInfo page.PageInfo, mediaIds []int) (list []mediaService.MediaDTO, err error) {
  72. list, err = mediaService.GetMediaPageByIds(mediaType, pageInfo, mediaIds)
  73. if err != nil {
  74. err = exception.New(exception.GetMediaListFailed)
  75. return
  76. }
  77. //并发获取媒体的标签
  78. var wg sync.WaitGroup
  79. wg.Add(len(list))
  80. for i := 0; i < len(list); i++ {
  81. go func(media *mediaService.MediaDTO) {
  82. defer wg.Done()
  83. idStr := strings.Split(media.PermissionIDs, ",")
  84. var ids []int
  85. ids, err = stringUtils.StringToIntSlice(idStr)
  86. if err != nil {
  87. logger.Error("品种名称列表转换失败:%v", err)
  88. }
  89. media.PermissionNames = getMediaPermissionNames(ids)
  90. }(&list[i])
  91. }
  92. wg.Wait()
  93. if err != nil {
  94. err = exception.New(exception.QueryReportPageFailed)
  95. }
  96. return
  97. }
  98. func getMediaPermissionNames(id []int) (labels []string) {
  99. permissions, err := mediaService.GetPermissionsByIds(id)
  100. if err != nil {
  101. logger.Error("查询品种名称列表失败:%v", err)
  102. labels = []string{}
  103. return
  104. }
  105. for _, permission := range permissions {
  106. labels = append(labels, permission.Name)
  107. }
  108. return
  109. }
  110. // stringToIntSlice 将一个包含数字字符串的切片转换为整数切片
  111. func SearchMediaList(mediaType string, key string, pageInfo page.PageInfo) (medias []mediaService.MediaDTO, err error) {
  112. offset := page.StartIndex(pageInfo.Current, pageInfo.PageSize)
  113. medias, err = mediaService.SearchMediaList(mediaType, key, offset, pageInfo.PageSize, pageInfo.LatestId)
  114. var wg sync.WaitGroup
  115. wg.Add(len(medias))
  116. for i := 0; i < len(medias); i++ {
  117. go func(media *mediaService.MediaDTO) {
  118. defer wg.Done()
  119. idStr := strings.Split(media.PermissionIDs, ",")
  120. var ids []int
  121. ids, err = stringUtils.StringToIntSlice(idStr)
  122. if err != nil {
  123. logger.Error("获取品种列表失败:%v", err)
  124. }
  125. media.PermissionNames = getMediaPermissionNames(ids)
  126. }(&medias[i])
  127. }
  128. wg.Wait()
  129. if err != nil {
  130. err = exception.New(exception.SearchReportPageFailed)
  131. }
  132. return
  133. }