messageService.go 6.0 KB

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