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, }, }) }