user_message.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package user
  2. import (
  3. logger "eta/eta_mini_ht_api/common/component/log"
  4. "eta/eta_mini_ht_api/models"
  5. "eta/eta_mini_ht_api/models/message"
  6. "gorm.io/gorm"
  7. "time"
  8. )
  9. type MessageType string
  10. const (
  11. UnReadStatus message.StatusType = "UNREAD"
  12. ReadStatus message.StatusType = "READ"
  13. MaxBatchNum = 1000
  14. MyMessageColumns = "id,source_id,type,message"
  15. )
  16. // UserMessage 表示 user_message 表的模型
  17. type UserMessage struct {
  18. Id int `gorm:"primaryKey;autoIncrement;column:id"`
  19. AnalystId int `gorm:"column:analyst_id"`
  20. UserId int `gorm:"column:user_id"`
  21. SourceId int `gorm:"column:source_id"`
  22. Message string `gorm:"column:message"`
  23. Type message.SourceType `gorm:"column:type;type:enum('REPORT','VIDEO','AUDIO')"`
  24. Status message.StatusType `gorm:"column:status;type:enum('UNREAD','READ')"`
  25. CreatedTime time.Time `gorm:"column:created_time;type:timestamps;comment:创建时间"`
  26. UpdatedTime time.Time `gorm:"column:updated_time"`
  27. }
  28. func (u *UserMessage) BeforeCreate(_ *gorm.DB) (err error) {
  29. u.CreatedTime = time.Now()
  30. return
  31. }
  32. func CreateMessage(message UserMessage) (err error) {
  33. db := models.Main()
  34. return db.Create(&message).Error
  35. }
  36. func BatchInsertMessage(messages []UserMessage) bool {
  37. db := models.Main()
  38. //手动事务
  39. tx := db.Begin()
  40. err := db.CreateInBatches(messages, MaxBatchNum).Error
  41. if err != nil {
  42. logger.Error("批量插入消息失败:%v", err)
  43. tx.Rollback()
  44. return false
  45. }
  46. tx.Commit()
  47. return true
  48. }
  49. func NeedNotice(userId int, analystId int) bool {
  50. db := models.Main()
  51. var count int
  52. err := db.Model(&UserMessage{}).Select("count(*)").Where("user_id =? and analyst_id =? and status=?", userId, analystId, UnReadStatus).Scan(&count).Error
  53. if err != nil {
  54. logger.Error("统计未读消息失败:%v", err)
  55. return false
  56. }
  57. return count > 0
  58. }
  59. func GetUnReadMessageList(userId int) (messages []UserMessage, err error) {
  60. db := models.Main()
  61. err = db.Select(MyMessageColumns).Where("user_id=? and status=?", userId, UnReadStatus).Order("created_time desc").Find(&messages).Error
  62. return
  63. }
  64. func ReadMessage(userId int, messageId int) bool {
  65. db := models.Main()
  66. err := db.Model(&UserMessage{}).Where("id=? and user_id=?", messageId, userId).Update("status", ReadStatus).Error
  67. if err != nil {
  68. return false
  69. }
  70. return true
  71. }
  72. func ReadMessages(userId int, analystId int) bool {
  73. db := models.Main()
  74. err := db.Model(&UserMessage{}).Where("user_id=? and analyst_id =?", userId, analystId).Update("status", ReadStatus).Error
  75. if err != nil {
  76. return false
  77. }
  78. return true
  79. }