media.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package media
  2. import (
  3. "errors"
  4. logger "eta/eta_mini_ht_api/common/component/log"
  5. "eta/eta_mini_ht_api/models"
  6. "eta/eta_mini_ht_api/models/report"
  7. "gorm.io/gorm"
  8. "time"
  9. )
  10. const (
  11. CommonColumns = "id,media_type,src,media_name,source_type,media_play_milliseconds,permission_ids,published_time,cover_src"
  12. DetailColumns = "id,media_type,src,media_name,source_type,media_play_milliseconds,permission_ids,published_time,author_id,author_name,cover_src"
  13. )
  14. type MediaType string
  15. const (
  16. Video MediaType = "video"
  17. Audio MediaType = "audio"
  18. )
  19. type Media struct {
  20. Id int `gorm:"primary_key;auto_increment;column:id"`
  21. AuthorID int `gorm:"column:author_id"`
  22. AuthorName string `gorm:"column:author_name"`
  23. MediaType MediaType `gorm:"column:media_type"`
  24. Src string `gorm:"column:src"`
  25. MediaName string `gorm:"column:media_name"`
  26. SourceType string `gorm:"column:source_type"`
  27. CoverSrc string `gorm:"column:cover_src"`
  28. MediaPlayMilliseconds int `gorm:"column:media_play_milliseconds"`
  29. PermissionIDs string `gorm:"column:permission_ids"`
  30. PublishedTime time.Time `gorm:"column:published_time"`
  31. SendStatus report.SendStatus `gorm:"column:send_status"`
  32. Deleted int `gorm:"column:deleted"`
  33. CreatedTime time.Time `gorm:"column:created_time"`
  34. UpdatedTime time.Time `gorm:"column:updated_time"`
  35. }
  36. func (m *Media) BeforeCreate(_ *gorm.DB) (err error) {
  37. m.PublishedTime = time.Now()
  38. m.CreatedTime = time.Now()
  39. return
  40. }
  41. func GetCountByMediaType(mediaType string) (count int64, latestId int64) {
  42. db := models.Main()
  43. var ids []int
  44. err := db.Model(&Media{}).Select("id").Where("media_type = ? and deleted = ?", mediaType, false).Order("id desc").Scan(&ids).Error
  45. if err != nil {
  46. return 0, 0
  47. }
  48. count = int64(len(ids))
  49. err = db.Model(&Media{}).Select("MAX(id) id ").Where("media_type = ? and deleted = ?", mediaType, false).Scan(&latestId).Error
  50. if err != nil {
  51. logger.Error("获取最新的媒体Id失败:%v", err)
  52. return 0, 0
  53. }
  54. //latestId = int64(ids[0])
  55. return
  56. }
  57. func GetCountByMediaTypeByAnalystId(mediaType string, analystId int) (count int64, latestId int64) {
  58. db := models.Main()
  59. err := db.Model(&Media{}).Select("id").Where("media_type = ? and deleted = ? and author_id = ?", mediaType, false, analystId).Count(&count).Error
  60. if err != nil {
  61. return
  62. }
  63. err = db.Model(&Media{}).Select("Max(id)").Where("media_type = ? and deleted = ? and author_id = ?", mediaType, false, analystId).Scan(&latestId).Error
  64. if err != nil {
  65. return
  66. }
  67. return
  68. }
  69. func GetMediaPage(latestId int64, limit int, offset int, mediaType string) (mediaList []Media, err error) {
  70. if latestId < 0 {
  71. err = errors.New("非法的id参数")
  72. logger.Error("非法的id参数:%d", latestId)
  73. return
  74. }
  75. if limit <= 0 {
  76. err = errors.New("非法的limit参数")
  77. logger.Error("非法的limit参数:%d", limit)
  78. }
  79. db := models.Main()
  80. err = db.Select(CommonColumns).Where("media_type= ? and id<= ? and deleted=?", mediaType, latestId, false).Order("created_time desc").Limit(limit).Offset(offset).Find(&mediaList).Error
  81. return
  82. }
  83. func GetMediaPageByIds(latestId int64, limit int, offset int, mediaType string, mediasIds []int) (mediaList []Media, err error) {
  84. if len(mediasIds) == 0 {
  85. return GetMediaPage(latestId, limit, offset, mediaType)
  86. }
  87. if latestId < 0 {
  88. err = errors.New("非法的id参数")
  89. logger.Error("非法的id参数:%d", latestId)
  90. return
  91. }
  92. if limit <= 0 {
  93. err = errors.New("非法的limit参数")
  94. logger.Error("非法的limit参数:%d", limit)
  95. }
  96. db := models.Main()
  97. err = db.Select(CommonColumns).Where(" id<= ? and media_type= ? and id in ? and deleted =?", latestId, mediaType, mediasIds, false).Order("created_time desc").Limit(limit).Offset(offset).Find(&mediaList).Error
  98. return
  99. }
  100. func GetAnalystMediaRangeReportIds(srcIds []int, analystId int) (mediaIds []int, err error) {
  101. if len(srcIds) == 0 {
  102. logger.Info("过滤的媒体ID为空")
  103. return
  104. }
  105. db := models.Main()
  106. err = db.Model(&Media{}).Select(CommonColumns).Where(" id in ? and author_id = ? and deleted =?", mediaIds, analystId, false).Find(&mediaIds).Error
  107. return
  108. }
  109. func GetMediaPageByAnalystId(latestId int64, limit int, offset int, mediaType string, analystId int, mediaIds []int) (mediaList []Media, err error) {
  110. if latestId < 0 {
  111. err = errors.New("非法的id参数")
  112. logger.Error("非法的id参数:%d", latestId)
  113. return
  114. }
  115. if limit <= 0 {
  116. err = errors.New("非法的limit参数")
  117. logger.Error("非法的limit参数:%d", limit)
  118. }
  119. db := models.Main()
  120. err = db.Select(CommonColumns).Where(" id<= ? and media_type= ? and author_id = ? and id in ? and deleted = ?", latestId, mediaType, analystId, mediaIds, false).Order("published_time desc").Limit(limit).Offset(offset).Find(&mediaList).Error
  121. return
  122. }
  123. func GetMediaById(mediaType string, mediaId int) (media Media, err error) {
  124. db := models.Main()
  125. err = db.Select(DetailColumns).Where("id =? and media_type=? and deleted =?", mediaId, mediaType, false).First(&media).Error
  126. return
  127. }
  128. // 测试造数据
  129. func GetlIST() (media []Media) {
  130. db := models.Main()
  131. _ = db.Model(&Media{}).Where("deleted = ?", false).Find(&media).Error
  132. return
  133. }