You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-fly/controller/visitor.go

196 lines
4.8 KiB

package controller
import (
"encoding/json"
"fmt"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
"github.com/taoshihan1991/imaptool/config"
"github.com/taoshihan1991/imaptool/models"
"github.com/taoshihan1991/imaptool/tools"
"log"
"math/rand"
"strconv"
)
func PostVisitor(c *gin.Context) {
name := c.PostForm("name")
avator := c.PostForm("avator")
toId := c.PostForm("to_id")
id := c.PostForm("id")
refer := c.PostForm("refer")
city := c.PostForm("city")
client_ip := c.PostForm("client_ip")
if name==""||avator==""||toId==""||id==""||refer==""||city==""||client_ip==""{
c.JSON(200, gin.H{
"code": 400,
"msg": "error",
})
return
}
kefuInfo:=models.FindUser(toId)
if kefuInfo.ID==0{
c.JSON(200, gin.H{
"code": 400,
"msg": "用户不存在",
})
return
}
models.CreateVisitor(name,avator,c.ClientIP(),toId,id,refer,city,client_ip)
userInfo := make(map[string]string)
userInfo["uid"] = id
userInfo["username"] = name
userInfo["avator"] = avator
msg := TypeMessage{
Type: "userOnline",
Data: userInfo,
}
str, _ := json.Marshal(msg)
kefuConns:=kefuList[toId]
if kefuConns!=nil{
for k,kefuConn:=range kefuConns{
log.Println(k,"xxxxxxxx")
kefuConn.WriteMessage(websocket.TextMessage,str)
}
}
c.JSON(200, gin.H{
"code": 200,
"msg": "ok",
})
}
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")
if id==""{
id = tools.Uuid()
}
refer := c.PostForm("refer")
var (
city string
name string
)
if ipcity!=nil{
city = ipcity.CountryName+ipcity.RegionName+ipcity.CityName
name=ipcity.CountryName+ipcity.RegionName+ipcity.CityName+"网友"
}else{
city="未识别地区"
name="匿名网友"
}
client_ip := c.PostForm("client_ip")
//log.Println(name,avator,c.ClientIP(),toId,id,refer,city,client_ip)
if name==""||avator==""||toId==""||id==""||refer==""||city==""||client_ip==""{
c.JSON(200, gin.H{
"code": 400,
"msg": "error",
})
return
}
kefuInfo:=models.FindUser(toId)
if kefuInfo.ID==0{
c.JSON(200, gin.H{
"code": 400,
"msg": "客服不存在",
})
return
}
models.CreateVisitor(name,avator,c.ClientIP(),toId,id,refer,city,client_ip)
visitor:=models.FindVisitorByVistorId(id)
c.JSON(200, gin.H{
"code": 200,
"msg": "ok",
"result":visitor,
})
}
func GetVisitor(c *gin.Context) {
visitorId:=c.Query("visitorId")
vistor:=models.FindVisitorByVistorId(visitorId)
c.JSON(200, gin.H{
"code": 200,
"msg": "ok",
"result":vistor,
})
}
// @Summary 获取访客列表接口
// @Produce json
// @Accept multipart/form-data
// @Param page query string true "分页"
// @Param token header string true "认证token"
// @Success 200 {object} controller.Response
// @Failure 200 {object} controller.Response
// @Router /visitors [get]
func GetVisitors(c *gin.Context) {
page,_:=strconv.Atoi(c.Query("page"))
kefuId,_:=c.Get("kefu_name")
vistors:=models.FindVisitorsByKefuId(uint(page),config.VisitorPageSize,kefuId.(string))
count:=models.CountVisitorsByKefuId(kefuId.(string))
c.JSON(200, gin.H{
"code": 200,
"msg": "ok",
"result":gin.H{
"list":vistors,
"count":count,
"pagesize":config.PageSize,
},
})
}
// @Summary 获取访客聊天信息接口
// @Produce json
// @Accept multipart/form-data
// @Param visitorId query string true "访客ID"
// @Param token header string true "认证token"
// @Success 200 {object} controller.Response
// @Failure 200 {object} controller.Response
// @Router /messages [get]
func GetVisitorMessage(c *gin.Context) {
visitorId:=c.Query("visitorId")
messages:=models.FindMessageByVisitorId(visitorId)
result:=make([]map[string]interface{},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)
}
item["time"]=message.CreatedAt.Format("2006-01-02 15:04:05")
item["content"]=message.Content
item["mes_type"]=message.MesType
item["visitor_name"]=visitor.Name
item["visitor_avator"]=visitor.Avator
item["kefu_name"]=kefu.Nickname
item["kefu_avator"]=kefu.Avator
result=append(result,item)
}
models.ReadMessageByVisitorId(visitorId)
c.JSON(200, gin.H{
"code": 200,
"msg": "ok",
"result":result,
})
}
func GetVisitorOnlines(c *gin.Context) {
users:=make([]map[string]string,0)
for uid,visitor :=range clientList{
userInfo := make(map[string]string)
userInfo["uid"] = uid
userInfo["name"] = visitor.name
userInfo["avator"] = visitor.avator
users=append(users,userInfo)
}
tcps:=make([]string,0)
for ip,_ :=range clientTcpList{
tcps=append(tcps,ip)
}
c.JSON(200, gin.H{
"code": 200,
"msg": "ok",
"result":gin.H{
"ws":users,
"tcp":tcps,
},
})
}