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)