user_message_service.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package user
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. logger "eta/eta_mini_ht_api/common/component/log"
  6. "eta/eta_mini_ht_api/domian/message"
  7. messageDao "eta/eta_mini_ht_api/models/message"
  8. userDao "eta/eta_mini_ht_api/models/user"
  9. "fmt"
  10. "strconv"
  11. "strings"
  12. "text/template"
  13. )
  14. type MessageDTO struct {
  15. From int `gorm:"column:from"`
  16. To int `gorm:"column:to"`
  17. Message string `gorm:"column:message"`
  18. Type string `gorm:"column:type;type:enum('REPORT','VIDEO','AUDIO')"`
  19. Status string `gorm:"column:status;type:enum('UNREAD','READ')"`
  20. }
  21. type MyMessage struct {
  22. Id int `json:"messageId"`
  23. SourceId int `json:"SourceId"`
  24. Type string `json:"Type"`
  25. Message string `json:"Message"`
  26. }
  27. const (
  28. ReportMessageTemplate = "您关注的研究员%v更新了一篇报告"
  29. VideoMessageTemplate = "您关注的研究员%v更新了一个视频"
  30. AudioMessageTemplate = "您关注的研究员%v更新了一个音频"
  31. RefundMessageTemplate = "{{.Icon}} 订单:{{.ProductOrderNo}},姓名:{{.RealName}},退款{{.Result}}!"
  32. )
  33. type MessageInfo struct {
  34. analyst string
  35. }
  36. func createRefundMessage(meta message.MetaInfoDTO) (err error) {
  37. var content messageDao.RefundMetaData
  38. err = json.Unmarshal([]byte(meta.Meta), &content)
  39. messageInfo, _ := generateMessage(content, RefundMessageTemplate)
  40. userId, _ := strconv.Atoi(meta.To)
  41. userMessage := userDao.UserMessage{
  42. UserId: userId,
  43. Message: messageInfo,
  44. UserType: userDao.Admin,
  45. Type: messageDao.RefundSourceType,
  46. Status: userDao.UnReadStatus,
  47. }
  48. if err = userDao.CreateMessage(userMessage); err == nil {
  49. messageDao.FinishMetaInfo(meta.Id)
  50. } else {
  51. logger.Error("生成消息信息失败:%v", err)
  52. messageDao.FailedMetaInfo(meta.Id)
  53. }
  54. return
  55. }
  56. func CreateMessage(meta message.MetaInfoDTO) (err error) {
  57. if messageDao.SourceType(meta.SourceType) == messageDao.RefundSourceType {
  58. return createRefundMessage(meta)
  59. }
  60. messageType := messageDao.SourceType(meta.SourceType)
  61. var messageList []userDao.UserMessage
  62. users := strings.Split(meta.To, ",")
  63. var messageInfo string
  64. var content messageDao.MetaData
  65. err = json.Unmarshal([]byte(meta.Meta), &content)
  66. if err != nil {
  67. logger.Error("生成消息信息失败:%v", err)
  68. messageDao.FailedMetaInfo(meta.Id)
  69. }
  70. switch messageDao.SourceType(meta.SourceType) {
  71. case messageDao.ReportSourceType:
  72. messageInfo = fmt.Sprintf(ReportMessageTemplate, content.AuthorName)
  73. messageType = messageDao.ReportSourceType
  74. case messageDao.VideoSourceType:
  75. messageInfo = fmt.Sprintf(VideoMessageTemplate, content.AuthorName)
  76. case messageDao.AudioSourceType:
  77. messageInfo = fmt.Sprintf(AudioMessageTemplate, content.AuthorName)
  78. }
  79. for _, user := range users {
  80. id, _ := strconv.Atoi(user)
  81. userMessage := userDao.UserMessage{
  82. AnalystId: content.AuthorId,
  83. UserId: id,
  84. UserType: userDao.Customer,
  85. Message: messageInfo,
  86. SourceId: content.SourceId,
  87. Type: messageType,
  88. Status: userDao.UnReadStatus,
  89. }
  90. messageList = append(messageList, userMessage)
  91. }
  92. if userDao.BatchInsertMessage(messageList) {
  93. messageDao.FinishMetaInfo(meta.Id)
  94. } else {
  95. logger.Error("生成消息信息失败:%v", err)
  96. messageDao.FailedMetaInfo(meta.Id)
  97. }
  98. return
  99. }
  100. func generateMessage(data interface{}, tmpl string) (message string, err error) {
  101. t := template.Must(template.New("messageTemplate").Parse(tmpl))
  102. var buffer bytes.Buffer
  103. err = t.Execute(&buffer, data)
  104. if err != nil {
  105. logger.Error("生成消息模板失败:%v", err)
  106. return
  107. }
  108. message = buffer.String()
  109. return
  110. }
  111. func NeedNotice(userId int, analystId int) bool {
  112. return userDao.NeedNotice(userId, analystId)
  113. }
  114. func ReadMessage(userId int, messageId int) bool {
  115. return userDao.ReadMessage(userId, messageId)
  116. }
  117. func ReadMessages(userId int, analystId int) bool {
  118. return userDao.ReadMessages(userId, analystId)
  119. }
  120. func GetUnReadMessageList(userId int) (messageList []MyMessage, err error) {
  121. list, err := userDao.GetUnReadMessageList(userId)
  122. if err != nil {
  123. logger.Error("获取我的未读消息失败:%v", err)
  124. return
  125. }
  126. for _, message := range list {
  127. messageList = append(messageList, convertToMyMessage(message))
  128. }
  129. return
  130. }
  131. func convertToMyMessage(message userDao.UserMessage) MyMessage {
  132. return MyMessage{
  133. Id: message.Id,
  134. SourceId: message.SourceId,
  135. Type: string(message.Type),
  136. Message: message.Message,
  137. }
  138. }