messageService.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package service
  2. import (
  3. "app.yhyue.com/moapp/MessageCenter/entity"
  4. "app.yhyue.com/moapp/MessageCenter/rpc/message"
  5. "log"
  6. )
  7. type MessageService struct {
  8. }
  9. // 修改消息阅读状态
  10. func (service *MessageService) ChangeReadStatus(data *message.ChangeReadStatusRequest) (int64, string) {
  11. orm := entity.Engine.NewSession()
  12. defer orm.Close()
  13. m := entity.Message{}
  14. count, err1 := orm.Where("id=? and isdel=1 and appid=?", data.Id, data.Appid).Count(m)
  15. if count == 0 || err1 != nil {
  16. return 0, "该消息不存在"
  17. }
  18. m.IsRead = int(data.ReadStatus)
  19. _, err := orm.Where("id=? and isdel=1", data.Id).Cols("isRead").Update(&m)
  20. if err != nil {
  21. orm.Rollback()
  22. return 0, "修改消息阅读状态失败"
  23. }
  24. err2 := orm.Commit()
  25. if err2 != nil {
  26. return 0, "修改消息阅读状态失败"
  27. }
  28. return 1, "修改消息阅读状态成功"
  29. }
  30. // 删除消息
  31. func (service *MessageService) DeleteMessage(id []string, appId string) (int64, string) {
  32. orm := entity.Engine.NewSession()
  33. defer orm.Close()
  34. m := entity.Message{}
  35. m.Isdel = -1
  36. count, err := orm.Where("appid=?", appId).In("id", id).Cols("isdel").Update(&m)
  37. if err != nil || count == 0 {
  38. log.Println(err)
  39. orm.Rollback()
  40. return 0, "删除消息失败"
  41. }
  42. err2 := orm.Commit()
  43. if err2 != nil {
  44. return 0, "删除消息失败"
  45. }
  46. return 1, "删除消息成功"
  47. }
  48. // 未读消息合计
  49. func (service *MessageService) CountUnread(userId string, appId string) (int64, string, int64) {
  50. orm := entity.Engine.NewSession()
  51. defer orm.Close()
  52. m := entity.Message{}
  53. count, err := orm.Where("receive_userid=? and isRead=0 and isdel=1 and appid=?", userId, appId).Count(m)
  54. if err != nil {
  55. log.Println(err)
  56. return 0, "查询未读消息失败", 0
  57. }
  58. log.Println(count)
  59. return 1, "查询未读消息成功", count
  60. }
  61. // 获取指定用户指定分类最新一条消息
  62. func (service *MessageService) LastMessage(userId string, appId string, msgType int64, isRead int64) (*message.Messages, error) {
  63. orm := entity.Engine.NewSession()
  64. defer orm.Close()
  65. m1 := []*entity.Message{}
  66. //m := []*message.Messages{}
  67. sql := "receive_userid=? and isdel=1 and appid=? and msg_type=?"
  68. valueList := []interface{}{userId, appId, msgType}
  69. if isRead != -1 {
  70. sql = sql + " and isRead=?"
  71. valueList = append(valueList, isRead)
  72. }
  73. err := orm.Select("*").Where(sql, valueList...).OrderBy("createtime desc").Limit(1, 0).Find(&m1)
  74. if err != nil {
  75. return nil, err
  76. }
  77. if len(m1) > 0 {
  78. m := m1[0]
  79. msg := message.Messages{
  80. Id: m.Id,
  81. Appid: m.AppId,
  82. ReceiveUserId: m.ReceiveUserid,
  83. ReceiveName: m.ReceiveName,
  84. SendUserId: m.SendUserid,
  85. SendName: m.SendName,
  86. Createtime: m.CreateTime.Format("2006-01-02 15:04:05"),
  87. Title: m.Title,
  88. MsgType: int64(m.MsgType),
  89. Link: m.Link,
  90. CiteId: int64(m.CiteId),
  91. Content: m.Content,
  92. IsRead: int64(m.IsRead),
  93. }
  94. return &msg, nil
  95. } else {
  96. return nil, nil
  97. }
  98. }
  99. //查询消息详情
  100. func FindMessageDetail(id string) (entity.Message, error) {
  101. orm := entity.Engine.NewSession()
  102. defer orm.Close()
  103. mess := entity.Message{}
  104. err := orm.Table("message").Select("*").Where("id = ?", id).Find(&mess)
  105. if err != nil {
  106. return mess, err
  107. }
  108. return mess, nil
  109. }
  110. // 获取用户未读消息分类及数量 及分类下的最新一条消息
  111. func (service *MessageService) ClassCountAndMessage(userId string, appId string) ([]*message.ResCount, error) {
  112. orm := entity.Engine.NewSession()
  113. defer orm.Close()
  114. //m := []*message.Messages{}
  115. query, err := orm.QueryInterface("SELECT msg_type,COUNT(CASE WHEN isRead=0 THEN 1 END) as count FROM message where receive_userid=? and isdel=1 and appid=? GROUP BY msg_type ORDER BY FIELD(`msg_type`,\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\")", userId, appId)
  116. if err != nil {
  117. return nil, err
  118. }
  119. typeCount := []*message.ResCount{}
  120. // 未读消息分类及数量
  121. if query != nil && len(query) > 0 {
  122. for _, v := range query {
  123. typeCount = append(typeCount, &message.ResCount{MsgType: v["msg_type"].(int64), Count: v["count"].(int64)})
  124. }
  125. }
  126. return typeCount, nil
  127. }
  128. // 已接收到消息的分类
  129. func (service *MessageService) ReceiveMsgType(userId string, appId string) ([]int64, error) {
  130. orm := entity.Engine.NewSession()
  131. defer orm.Close()
  132. m := []entity.Message{}
  133. err := orm.Distinct("msg_type").Where("receive_userid=? and isdel=1 and appid=?", userId, appId).Find(&m)
  134. if err != nil {
  135. return nil, err
  136. }
  137. msgTypeList := []int64{}
  138. for _, v := range m {
  139. msgTypeList = append(msgTypeList, int64(v.MsgType))
  140. }
  141. return msgTypeList, nil
  142. }
  143. func (service *MessageService) UpdateMessageReadStatus(msgType int, receiveUserid, appId string) (int, error) {
  144. orm := entity.Engine.NewSession()
  145. defer orm.Close()
  146. msg := entity.Message{}
  147. msg.IsRead = 1
  148. c, err := orm.Where("receive_userid=? and msg_type = ? and appid = ?", receiveUserid, msgType, appId).Cols("isRead").Update(&msg)
  149. //log.Println("更新后返回值:", c, err)
  150. if c < 0 && err != nil {
  151. return 0, err
  152. }
  153. return 1, nil
  154. }