From ea4c5bb3ba6a6ac3c182d9cb1741fba9850d9e35 Mon Sep 17 00:00:00 2001 From: taoshihan1991 <630892807@qq.com> Date: Thu, 22 Oct 2020 14:24:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=AE=BF=E5=AE=A2=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E6=B6=88=E6=81=AF=E7=89=88=E6=9C=AC2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/message.go | 34 ++++++++++++++++++++++++++++++++++ controller/response.go | 7 +++++++ models/messages.go | 2 +- router/api.go | 1 + ws/user.go | 2 ++ ws/ws.go | 2 ++ 6 files changed, 47 insertions(+), 1 deletion(-) diff --git a/controller/message.go b/controller/message.go index 23a29eb..4849c95 100644 --- a/controller/message.go +++ b/controller/message.go @@ -195,3 +195,37 @@ func UploadImg(c *gin.Context) { }) } } + +func GetMessagesV2(c *gin.Context) { + visitorId := c.Query("visitor_id") + messages := models.FindMessageByVisitorId(visitorId) + //result := make([]map[string]interface{}, 0) + chatMessages := make([]ChatMessage, 0) + for _, message := range messages { + //item := make(map[string]interface{}) + var visitor models.Visitor + var kefu models.User + if visitor.Name == "" || kefu.Name == "" { + kefu = models.FindUser(message.KefuId) + visitor = models.FindVisitorByVistorId(message.VisitorId) + } + var chatMessage ChatMessage + chatMessage.Time = message.CreatedAt.Format("2006-01-02 15:04:05") + chatMessage.Content = message.Content + chatMessage.MesType = message.MesType + if message.MesType == "kefu" { + chatMessage.Name = kefu.Nickname + chatMessage.Avator = kefu.Avator + } else { + chatMessage.Name = visitor.Name + chatMessage.Avator = visitor.Avator + } + chatMessages = append(chatMessages, chatMessage) + } + models.ReadMessageByVisitorId(visitorId) + c.JSON(200, gin.H{ + "code": 200, + "msg": "ok", + "result": chatMessages, + }) +} diff --git a/controller/response.go b/controller/response.go index c6af981..cd63d15 100644 --- a/controller/response.go +++ b/controller/response.go @@ -5,3 +5,10 @@ type Response struct { Msg string `json:"msg"` result interface{} `json:"result"` } +type ChatMessage struct { + Time string `json:"time"` + Content string `json:"content"` + MesType string `json:"mes_type"` + Name string `json:"name"` + Avator string `json:"avator"` +} diff --git a/models/messages.go b/models/messages.go index 7737a54..215100f 100644 --- a/models/messages.go +++ b/models/messages.go @@ -50,7 +50,7 @@ func FindLastMessage(visitorIds []string) []Message { 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) + //DB.Select("ANY_VALUE(visitor_id) visitor_id,MAX(ANY_VALUE(id)) id,ANY_VALUE(content) content").Group("visitor_id").Find(&messages) return messages } diff --git a/router/api.go b/router/api.go index 8526364..d174a82 100644 --- a/router/api.go +++ b/router/api.go @@ -19,6 +19,7 @@ func InitApiRouter(engine *gin.Engine) { //获取消息 engine.GET("/messages", controller.GetVisitorMessage) + engine.GET("/2/messages", controller.GetMessagesV2) engine.GET("/message_notice", controller.SendVisitorNotice) //发送单条消息 engine.POST("/message", middleware.Ipblack, controller.SendMessage) diff --git a/ws/user.go b/ws/user.go index 5384992..1d9a774 100644 --- a/ws/user.go +++ b/ws/user.go @@ -89,7 +89,9 @@ func kefuServerBackend() { Type: "pong", } str, _ := json.Marshal(msg) + Mux.Lock() conn.WriteMessage(websocket.TextMessage, str) + Mux.Unlock() } } diff --git a/ws/ws.go b/ws/ws.go index 0b5078d..049fc1a 100644 --- a/ws/ws.go +++ b/ws/ws.go @@ -4,6 +4,7 @@ import ( "github.com/gin-gonic/gin" "github.com/gorilla/websocket" "net/http" + "sync" ) type User struct { @@ -41,6 +42,7 @@ var ClientList = make(map[string]*User) var KefuList = make(map[string][]*User) var message = make(chan *Message) var upgrader = websocket.Upgrader{} +var Mux sync.RWMutex func init() { upgrader = websocket.Upgrader{