| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- package controller
- import (
- "encoding/json"
- "github.com/gin-gonic/gin"
- "github.com/gorilla/websocket"
- "github.com/wenstudio/gofly/config"
- "github.com/wenstudio/gofly/models"
- "github.com/wenstudio/gofly/tools"
- "github.com/wenstudio/gofly/user/provider/twong"
- "log"
- "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",
- })
- }
- // post /visitor_login
- // 访客第一次连接时请求
- func PostVisitorLogin(c *gin.Context) {
- suid := c.PostForm("uid")
- uid, err := strconv.ParseUint(suid, 10, 64)
- if err != nil || uid <= 0 {
- c.JSON(200, gin.H{
- "code": 400,
- "msg": "参数错误",
- })
- return
- }
- ipcity := tools.ParseIp(c.ClientIP())
- toId := c.PostForm("to_id")
- refer := c.PostForm("refer")
- var city string
- if ipcity != nil {
- city = ipcity.CountryName + ipcity.RegionName + ipcity.CityName
- } else {
- city = "未识别地区"
- }
- client_ip := c.ClientIP() // c.PostForm("client_ip")
- ut := twong.NewTwongUser()
- v, err := ut.GetVisitorInfo(uid)
- if err != nil {
- c.JSON(200, gin.H{
- "code": 400,
- "msg": err.Error(),
- })
- }
- //log.Println(name,avator,c.ClientIP(),toId,id,refer,city,client_ip)
- if v.Name == "" || v.Avator == "" || toId == "" || v.VisitorId == "" || city == "" || client_ip == "" {
- c.JSON(200, gin.H{
- "code": 400,
- "msg": "error",
- })
- return
- }
- if refer == "" {
- refer = "app"
- }
- // 找到客服信息
- kefuInfo := models.FindUser(toId)
- if kefuInfo.ID == 0 {
- c.JSON(200, gin.H{
- "code": 400,
- "msg": "客服不存在",
- })
- return
- }
- // 插入或更新 访客信息
- models.CreateVisitor(v.Name, v.Avator,
- client_ip, toId, v.VisitorId, refer, city, client_ip)
- visitor := models.FindVisitorByVistorId(v.VisitorId)
- visitor.ToId = toId
- 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")
- kefuId := c.Query("kefuId")
- messages := models.FindMessagesByVisitorAndKefuId(visitorId, kefuId)
- 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,
- })
- }
- // @Summary 获取在线访客列表接口
- // @Produce json
- // @Success 200 {object} controller.Response
- // @Failure 200 {object} controller.Response
- // @Router /visitors_online [get]
- func GetVisitorOnlines(c *gin.Context) {
- users := make([]map[string]string, 0)
- visitorIds := make([]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)
- 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["last_message"] = temp[user["uid"]]
- }
- 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,
- },
- })
- }
|