From 88999a3326c077a8a0cd89420fe0c0e37ea58fea Mon Sep 17 00:00:00 2001 From: taoshihan1991 <630892807@qq.com> Date: Thu, 22 Oct 2020 11:22:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=9C=A8=E7=BA=BF=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=9C=80=E6=96=B0=E4=B8=80=E6=9D=A1=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/visitor.go | 14 ++++++++++---- models/messages.go | 9 ++++++++- models/models.go | 3 +-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/controller/visitor.go b/controller/visitor.go index 788654d..8fec8b4 100644 --- a/controller/visitor.go +++ b/controller/visitor.go @@ -192,9 +192,16 @@ func GetVisitorOnlines(c *gin.Context) { users = append(users, userInfo) visitorIds = append(visitorIds, visitor.id) } + //查询最新消息 messages := models.FindLastMessage(visitorIds) - log.Println(messages) + temp := make(map[string]string, 0) + for _, mes := range messages { + temp[mes.VisitorId] = mes.Content + } + for _, user := range users { + user["last_message"] = temp[user["uid"]] + } tcps := make([]string, 0) for ip, _ := range clientTcpList { @@ -204,9 +211,8 @@ func GetVisitorOnlines(c *gin.Context) { "code": 200, "msg": "ok", "result": gin.H{ - "ws": users, - "tcp": tcps, - "messages": messages, + "ws": users, + "tcp": tcps, }, }) } diff --git a/models/messages.go b/models/messages.go index 6b4ab51..7737a54 100644 --- a/models/messages.go +++ b/models/messages.go @@ -43,7 +43,14 @@ func FindUnreadMessageNumByVisitorId(visitor_id string) uint { //查询最后一条消息 func FindLastMessage(visitorIds []string) []Message { var messages []Message - DB.Select("ANY_VALUE(visitor_id) visitor_id,ANY_VALUE(id) id,ANY_VALUE(Content) content").Where("visitor_id in (? )", visitorIds).Group("visitor_id").Find(&messages) + subQuery := DB. + Table("message"). + Where(" visitor_id in (? )", visitorIds). + Order("id desc"). + Limit(1024). + SubQuery() + 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) + //DB.Select("ANY_VALUE(visitor_id) visitor_id,ANY_VALUE(id) id,ANY_VALUE(Content) content").Table("?", subQuery).Group("visitor_id").Find(&messages) return messages } diff --git a/models/models.go b/models/models.go index 4c9972e..78fca24 100644 --- a/models/models.go +++ b/models/models.go @@ -4,7 +4,6 @@ import ( "fmt" "github.com/jinzhu/gorm" "github.com/taoshihan1991/imaptool/config" - "github.com/taoshihan1991/imaptool/tools" "time" ) @@ -27,7 +26,7 @@ func init() { } DB.SingularTable(true) DB.LogMode(true) - DB.SetLogger(tools.Logger()) + //DB.SetLogger(tools.Logger()) DB.DB().SetMaxIdleConns(10) DB.DB().SetMaxOpenConns(100)