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/kefu.go

156 lines
3.6 KiB

package controller
import (
"github.com/gin-gonic/gin"
"github.com/taoshihan1991/imaptool/models"
"github.com/taoshihan1991/imaptool/tools"
"github.com/taoshihan1991/imaptool/ws"
"strconv"
)
func GetKefuInfo(c *gin.Context) {
kefuId, _ := c.Get("kefu_id")
user := models.FindUserById(kefuId)
info := make(map[string]interface{})
info["name"] = user.Nickname
info["id"] = user.Name
info["avator"] = user.Avator
c.JSON(200, gin.H{
"code": 200,
"msg": "ok",
"result": info,
})
}
func GetKefuInfoAll(c *gin.Context) {
id, _ := c.Get("kefu_id")
userinfo := models.FindUserRole("user.avator,user.name,user.id, role.name role_name", id)
c.JSON(200, gin.H{
"code": 200,
"msg": "验证成功",
"result": userinfo,
})
}
func GetOtherKefuList(c *gin.Context) {
idStr, _ := c.Get("kefu_id")
id := idStr.(float64)
result := make([]interface{}, 0)
ws.SendPingToKefuClient()
kefus := models.FindUsers()
for _, kefu := range kefus {
if uint(id) == kefu.ID {
continue
}
item := make(map[string]interface{})
item["name"] = kefu.Name
item["nickname"] = kefu.Nickname
item["avator"] = kefu.Avator
item["status"] = "offline"
kefus, ok := ws.KefuList[kefu.Name]
if ok && len(kefus) != 0 {
item["status"] = "online"
}
result = append(result, item)
}
c.JSON(200, gin.H{
"code": 200,
"msg": "ok",
"result": result,
})
}
func PostTransKefu(c *gin.Context) {
kefuId := c.Query("kefu_id")
visitorId := c.Query("visitor_id")
curKefuId, _ := c.Get("kefu_name")
user := models.FindUser(kefuId)
visitor := models.FindVisitorByVistorId(visitorId)
if user.Name == "" || visitor.Name == "" {
c.JSON(200, gin.H{
"code": 400,
"msg": "访客或客服不存在",
})
return
}
models.UpdateVisitorKefu(visitorId, kefuId)
ws.UpdateVisitorUser(visitorId, kefuId)
go ws.VisitorOnline(kefuId, visitor)
go ws.VisitorOffline(curKefuId.(string), visitor.VisitorId, visitor.Name)
go ws.VisitorNotice(visitor.VisitorId, "客服转接到"+user.Nickname)
c.JSON(200, gin.H{
"code": 200,
"msg": "转移成功",
})
}
func GetKefuInfoSetting(c *gin.Context) {
kefuId := c.Query("kefu_id")
user := models.FindUserById(kefuId)
c.JSON(200, gin.H{
"code": 200,
"msg": "ok",
"result": user,
})
}
func PostKefuInfo(c *gin.Context) {
id := c.PostForm("id")
name := c.PostForm("name")
password := c.PostForm("password")
avator := c.PostForm("avator")
nickname := c.PostForm("nickname")
roleId := c.PostForm("role_id")
if roleId == "" {
c.JSON(200, gin.H{
"code": 400,
"msg": "请选择角色!",
})
return
}
//插入新用户
if id == "" {
uid := models.CreateUser(name, tools.Md5(password), avator, nickname)
if uid == 0 {
c.JSON(200, gin.H{
"code": 400,
"msg": "增加用户失败",
"result": "",
})
return
}
roleIdInt, _ := strconv.Atoi(roleId)
models.CreateUserRole(uid, uint(roleIdInt))
} else {
//更新用户
if password != "" {
password = tools.Md5(password)
}
models.UpdateUser(id, name, password, avator, nickname)
roleIdInt, _ := strconv.Atoi(roleId)
uid, _ := strconv.Atoi(id)
models.DeleteRoleByUserId(uid)
models.CreateUserRole(uint(uid), uint(roleIdInt))
}
c.JSON(200, gin.H{
"code": 200,
"msg": "ok",
"result": "",
})
}
func GetKefuList(c *gin.Context) {
users := models.FindUsers()
c.JSON(200, gin.H{
"code": 200,
"msg": "获取成功",
"result": users,
})
}
func DeleteKefuInfo(c *gin.Context) {
kefuId := c.Query("id")
models.DeleteUserById(kefuId)
models.DeleteRoleByUserId(kefuId)
c.JSON(200, gin.H{
"code": 200,
"msg": "删除成功",
"result": "",
})
}