chatLog.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package service
  2. import (
  3. "gadmin/config"
  4. "gadmin/internal/admin/consts"
  5. "gadmin/internal/admin/forms"
  6. "gadmin/internal/gorm/query"
  7. "gadmin/utility/serializer"
  8. "github.com/gin-gonic/gin"
  9. "time"
  10. )
  11. var ChatLog = new(sChatLog)
  12. type sChatLog struct{}
  13. type ChatRecord struct {
  14. RecordList []record `json:"recordlist,omitempty"`
  15. Number int `json:"number,omitempty"`
  16. MsgId int `json:"msgid,omitempty"`
  17. }
  18. type record struct {
  19. OpenId string `json:"openid,omitempty"`
  20. OperCode int `json:"opercode,omitempty"`
  21. Text string `json:"text,omitempty"`
  22. Time int64 `json:"time,omitempty"`
  23. Worker string `json:"worker,omitempty"`
  24. }
  25. func (c *sChatLog) ChatLogPlayerList(ctx *gin.Context, req forms.ChatLogPlayerListReq) (resp serializer.Response) {
  26. var (
  27. offset int64 = 0
  28. count int64 = 0
  29. result forms.ListRes
  30. )
  31. //page
  32. req.Page, req.PerPage, offset = forms.CalculatePage(req.Page, req.PerPage)
  33. result.Page = req.Page
  34. result.PerPage = req.PerPage
  35. subquery := config.DB.Table("customer_service_chat_log").
  36. Select("open_id, max(time) as max_time").
  37. Where("type = 1").
  38. Group("open_id")
  39. if len(req.Time) != 0 {
  40. subquery = subquery.Where("time between ? and ?", time.Unix(req.Time[0], 0), time.Unix(req.Time[1], 0))
  41. }
  42. if req.Name != "" {
  43. subquery = subquery.Where("player_name = ?", req.Name)
  44. }
  45. if req.AccId != 0 {
  46. subquery = subquery.Where("acc_id = ?", req.AccId)
  47. }
  48. if req.Text != "" {
  49. subquery = subquery.Where("text like ?", "%"+req.Text+"%")
  50. }
  51. if req.OpenId != "" {
  52. subquery = subquery.Where("open_id = ?", req.OpenId)
  53. }
  54. sql := config.DB.Table("customer_service_chat_log").
  55. Select("*").
  56. Joins("JOIN (?) sub ON customer_service_chat_log.open_id = sub.open_id AND customer_service_chat_log.time = sub.max_time", subquery).
  57. Where("customer_service_chat_log.type = 1").
  58. Order("customer_service_chat_log.time desc")
  59. err := sql.Count(&count).Error
  60. if err != nil {
  61. return serializer.Err(consts.CodeParamErr, "查询出错 count", err)
  62. }
  63. if count == 0 {
  64. result.PageCount = (count + req.PerPage - 1) / req.PerPage
  65. return serializer.Suc(result)
  66. }
  67. type playerList struct {
  68. PlayerName string `json:"playerName"`
  69. AccId int64 `json:"accId"`
  70. OpenId string `json:"openId"`
  71. Time time.Time `json:"time"`
  72. }
  73. list := make([]playerList, 0)
  74. err = sql.Limit(int(req.PerPage)).Offset(int(offset)).Scan(&list).Error
  75. if err != nil {
  76. return serializer.Err(consts.CodeParamErr, "查询出错 find", err)
  77. }
  78. result.PageCount = (count + req.PerPage - 1) / req.PerPage
  79. result.List = list
  80. return serializer.Suc(result)
  81. }
  82. func (c *sChatLog) ChatLogInfo(ctx *gin.Context, req forms.ChatLogInfoReq) (resp serializer.Response) {
  83. var (
  84. chatLogQuery = query.Use(config.DB).CustomerServiceChatLog
  85. chatLogModel = chatLogQuery.WithContext(ctx)
  86. offset int64 = 0
  87. result forms.ListRes
  88. )
  89. //page
  90. req.Page, req.PerPage, offset = forms.CalculatePage(req.Page, req.PerPage)
  91. result.Page = req.Page
  92. result.PerPage = req.PerPage
  93. if len(req.Time) != 0 {
  94. chatLogModel = chatLogModel.Where(chatLogQuery.Time.Between(time.Unix(req.Time[0], 0), time.Unix(req.Time[1], 0)))
  95. }
  96. count, err := chatLogModel.Where(chatLogQuery.OpenID.Eq(req.OpenId)).Order(chatLogQuery.Time).Count()
  97. if err != nil {
  98. return serializer.Err(consts.CodeParamErr, "查询出错 ChatLogInfo count", err)
  99. }
  100. if count == 0 {
  101. result.PageCount = (0 + req.PerPage - 1) / req.PerPage
  102. return serializer.Suc(result)
  103. }
  104. chatLogList, err := chatLogModel.Where(chatLogQuery.OpenID.Eq(req.OpenId)).Limit(int(req.PerPage)).Offset(int(offset)).Order(chatLogQuery.Time).Find()
  105. if err != nil {
  106. return serializer.Err(consts.CodeParamErr, "查询出错 ChatLogInfo find", err)
  107. }
  108. result.PageCount = (count + req.PerPage - 1) / req.PerPage
  109. result.List = chatLogList
  110. return serializer.Suc(result)
  111. }