From 200fa57b8bc70d4315904cb007a2ae8694e0ccc5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=B6=E5=A3=AB=E6=B6=B5?= <630892807@qq.com>
Date: Sat, 24 Oct 2020 12:03:48 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=87=E6=8D=A2=E4=B8=BA=E6=8B=86=E5=88=86?=
=?UTF-8?q?=E5=90=8E=E7=9A=84=E6=96=B0=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
controller/response.go | 6 ++++
controller/visitor.go | 56 ++++++++++++++++++++++++++++++++++----
router/api.go | 1 +
static/html/chat_main.html | 8 ++++--
static/html/chat_page.html | 2 +-
static/js/chat-main.js | 44 +++++++++++++++++++++++-------
static/js/chat-page.js | 34 +++++++++++++----------
ws/user.go | 12 ++++----
ws/visitor.go | 6 +++-
9 files changed, 129 insertions(+), 40 deletions(-)
diff --git a/controller/response.go b/controller/response.go
index cd63d15..d650fab 100644
--- a/controller/response.go
+++ b/controller/response.go
@@ -12,3 +12,9 @@ type ChatMessage struct {
Name string `json:"name"`
Avator string `json:"avator"`
}
+type VisitorOnline struct {
+ Uid string `json:"uid"`
+ Username string `json:"username"`
+ Avator string `json:"avator"`
+ LastMessage string `json:"last_message"`
+}
diff --git a/controller/visitor.go b/controller/visitor.go
index 8fec8b4..fce8dec 100644
--- a/controller/visitor.go
+++ b/controller/visitor.go
@@ -8,6 +8,7 @@ import (
"github.com/taoshihan1991/imaptool/config"
"github.com/taoshihan1991/imaptool/models"
"github.com/taoshihan1991/imaptool/tools"
+ "github.com/taoshihan1991/imaptool/ws"
"log"
"math/rand"
"strconv"
@@ -63,7 +64,7 @@ func PostVisitorLogin(c *gin.Context) {
ipcity := tools.ParseIp(c.ClientIP())
avator := fmt.Sprintf("/static/images/%d.jpg", rand.Intn(14))
toId := c.PostForm("to_id")
- id := c.PostForm("id")
+ id := c.PostForm("visitor_id")
if id == "" {
id = tools.Uuid()
}
@@ -184,13 +185,13 @@ func GetVisitorMessage(c *gin.Context) {
func GetVisitorOnlines(c *gin.Context) {
users := make([]map[string]string, 0)
visitorIds := make([]string, 0)
- for uid, visitor := range clientList {
+ for uid, visitor := range ws.ClientList {
userInfo := make(map[string]string)
userInfo["uid"] = uid
- userInfo["name"] = visitor.name
- userInfo["avator"] = visitor.avator
+ userInfo["name"] = visitor.Name
+ userInfo["avator"] = visitor.Avator
users = append(users, userInfo)
- visitorIds = append(visitorIds, visitor.id)
+ visitorIds = append(visitorIds, visitor.Id)
}
//查询最新消息
@@ -216,3 +217,48 @@ func GetVisitorOnlines(c *gin.Context) {
},
})
}
+
+// @Summary 获取客服的在线访客列表接口
+// @Produce json
+// @Success 200 {object} controller.Response
+// @Failure 200 {object} controller.Response
+// @Router /visitors_kefu_online [get]
+func GetKefusVisitorOnlines(c *gin.Context) {
+ kefuName, _ := c.Get("kefu_name")
+ users := make([]*VisitorOnline, 0)
+ visitorIds := make([]string, 0)
+ for uid, visitor := range ws.ClientList {
+ if visitor.To_id != kefuName {
+ continue
+ }
+ userInfo := new(VisitorOnline)
+ userInfo.Uid = uid
+ userInfo.Username = visitor.Name
+ userInfo.Avator = visitor.Avator
+ users = append(users, userInfo)
+ visitorIds = append(visitorIds, visitor.Id)
+ }
+
+ //查询最新消息
+ messages := models.FindLastMessage(visitorIds)
+ temp := make(map[string]string, 0)
+ for _, mes := range messages {
+ temp[mes.VisitorId] = mes.Content
+ }
+ for _, user := range users {
+ user.LastMessage = temp[user.Uid]
+ if user.LastMessage == "" {
+ user.LastMessage = "新访客"
+ }
+ }
+
+ tcps := make([]string, 0)
+ for ip, _ := range clientTcpList {
+ tcps = append(tcps, ip)
+ }
+ c.JSON(200, gin.H{
+ "code": 200,
+ "msg": "ok",
+ "result": users,
+ })
+}
diff --git a/router/api.go b/router/api.go
index dcb73e0..ae0fe57 100644
--- a/router/api.go
+++ b/router/api.go
@@ -50,6 +50,7 @@ func InitApiRouter(engine *gin.Engine) {
engine.GET("/mysql", middleware.JwtApiMiddleware, middleware.RbacAuth, controller.MysqlGetConf)
engine.POST("/mysql", middleware.JwtApiMiddleware, middleware.RbacAuth, controller.MysqlSetConf)
engine.GET("/visitors_online", controller.GetVisitorOnlines)
+ engine.GET("/visitors_kefu_online", middleware.JwtApiMiddleware, controller.GetKefusVisitorOnlines)
engine.GET("/clear_online_tcp", controller.DeleteOnlineTcp)
engine.POST("/visitor_login", middleware.Ipblack, controller.PostVisitorLogin)
engine.POST("/visitor", controller.PostVisitor)
diff --git a/static/html/chat_main.html b/static/html/chat_main.html
index 74e1616..c07c1ac 100644
--- a/static/html/chat_main.html
+++ b/static/html/chat_main.html
@@ -168,7 +168,11 @@
- 时间:<{visitor.created_at}>
+ 创建时间:<{visitor.created_at}>
+
+
+
+ 访问时间:<{visitor.updated_at}>
@@ -198,5 +202,5 @@