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{