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.
230 lines
5.3 KiB
230 lines
5.3 KiB
package controller
|
|
|
|
import (
|
|
"github.com/dchest/captcha"
|
|
"github.com/gin-contrib/sessions"
|
|
"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 PostKefuRegister(c *gin.Context) {
|
|
name := c.PostForm("name")
|
|
password := c.PostForm("password")
|
|
rePassword := c.PostForm("rePassword")
|
|
avator := "/static/images/4.jpg"
|
|
nickname := c.PostForm("nickname")
|
|
captchaCode := c.PostForm("captcha")
|
|
roleId := 1
|
|
if name == "" || password == "" || rePassword == "" || nickname == "" || captchaCode == "" {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "参数不能为空",
|
|
"result": "",
|
|
})
|
|
return
|
|
}
|
|
if password != rePassword {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "密码不一致",
|
|
"result": "",
|
|
})
|
|
return
|
|
}
|
|
oldUser := models.FindUser(name)
|
|
if oldUser.Name != "" {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "用户名已经存在",
|
|
"result": "",
|
|
})
|
|
return
|
|
}
|
|
session := sessions.Default(c)
|
|
if captchaId := session.Get("captcha"); captchaId != nil {
|
|
session.Delete("captcha")
|
|
_ = session.Save()
|
|
if !captcha.VerifyString(captchaId.(string), captchaCode) {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "验证码验证失败",
|
|
"result": "",
|
|
})
|
|
return
|
|
}
|
|
} else {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "验证码失效",
|
|
"result": "",
|
|
})
|
|
return
|
|
}
|
|
//插入新用户
|
|
uid := models.CreateUser(name, tools.Md5(password), avator, nickname)
|
|
if uid == 0 {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "增加用户失败",
|
|
"result": "",
|
|
})
|
|
return
|
|
}
|
|
models.CreateUserRole(uid, uint(roleId))
|
|
ip, _ := tools.GetServerIP()
|
|
go ws.SendFlyServerJiang("管理员注册", name+"/"+password, ip.String()+":"+Port)
|
|
c.JSON(200, gin.H{
|
|
"code": 200,
|
|
"msg": "注册完成",
|
|
"result": "",
|
|
})
|
|
}
|
|
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": "",
|
|
})
|
|
}
|