messages.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package models
  2. type Message struct {
  3. Model
  4. KefuId string `json:"kefu_id"`
  5. VisitorId string `json:"visitor_id"`
  6. Content string `json:"content"`
  7. MesType string `json:"mes_type"`
  8. Status string `json:"status"`
  9. }
  10. func CreateMessage(kefu_id string, visitor_id string, content string, mes_type string) {
  11. v := &Message{
  12. KefuId: kefu_id,
  13. VisitorId: visitor_id,
  14. Content: content,
  15. MesType: mes_type,
  16. Status: "unread",
  17. }
  18. DB.Create(v)
  19. }
  20. //func FindMessageByVisitorId(visitor_id string) []Message {
  21. // var messages []Message
  22. // DB.Where("visitor_id=?", visitor_id).Order("id asc").Find(&messages)
  23. // return messages
  24. //}
  25. func FindMessagesByVisitorAndKefuId(visitorId, kefuId string) []Message {
  26. var messages []Message
  27. DB.Where("visitor_id=? AND kefu_id=?", visitorId, kefuId).Order("id asc").Find(&messages)
  28. return messages
  29. }
  30. //修改消息状态
  31. func ReadMessageByVisitorId(visitor_id string) {
  32. message := &Message{
  33. Status: "read",
  34. }
  35. DB.Model(&message).Where("visitor_id=?", visitor_id).Update(message)
  36. }
  37. //获取未读数
  38. func FindUnreadMessageNumByVisitorId(visitor_id string) uint {
  39. var count uint
  40. DB.Where("visitor_id=? and status=?", visitor_id, "unread").Count(&count)
  41. return count
  42. }
  43. //查询最后一条消息
  44. func FindLastMessage(visitorIds []string) []Message {
  45. var messages []Message
  46. subQuery := DB.
  47. Table("message").
  48. Where(" visitor_id in (? )", visitorIds).
  49. Order("id desc").
  50. Limit(1024).
  51. SubQuery()
  52. DB.Raw("SELECT ANY_VALUE(visitor_id) visitor_id,ANY_VALUE(id) id,ANY_VALUE(content) content FROM ? message_alia GROUP BY visitor_id", subQuery).Scan(&messages)
  53. //DB.Select("ANY_VALUE(visitor_id) visitor_id,MAX(ANY_VALUE(id)) id,ANY_VALUE(content) content").Group("visitor_id").Find(&messages)
  54. return messages
  55. }
  56. //查询条数
  57. func CountMessage() uint {
  58. var count uint
  59. DB.Model(&Message{}).Count(&count)
  60. return count
  61. }