363 lines
7.6 KiB
Go
363 lines
7.6 KiB
Go
package controller
|
|
|
|
import (
|
|
"ai-css/models"
|
|
"ai-css/tools"
|
|
"ai-css/ws"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func PostKefuStatus(c *gin.Context) {
|
|
v := c.GetString("kefu_name")
|
|
userInfo := models.FindUser(v)
|
|
if userInfo.Role != 1 {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "权限不足",
|
|
})
|
|
return
|
|
}
|
|
|
|
kefuName := c.PostForm("username")
|
|
statusStr := c.PostForm("status")
|
|
status, _ := strconv.Atoi(statusStr)
|
|
|
|
models.UpdateUserStatus(kefuName, int32(status))
|
|
c.JSON(200, gin.H{
|
|
"code": 200,
|
|
"msg": "ok",
|
|
"result": "",
|
|
})
|
|
}
|
|
|
|
func PostAdminResetPass(c *gin.Context) {
|
|
v := c.GetString("kefu_name")
|
|
userInfo := models.FindUser(v)
|
|
if userInfo.Role != 1 {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "权限不足",
|
|
})
|
|
return
|
|
}
|
|
|
|
kefuName := c.PostForm("username")
|
|
newPass := c.PostForm("password")
|
|
|
|
if kefuName == "" || newPass == "" {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "Username and password are required",
|
|
"result": "",
|
|
})
|
|
return
|
|
}
|
|
|
|
models.UpdateUserPass(kefuName, tools.Md5(newPass))
|
|
c.JSON(200, gin.H{
|
|
"code": 200,
|
|
"msg": "ok",
|
|
"result": "",
|
|
})
|
|
}
|
|
|
|
func PostKefuAvator(c *gin.Context) {
|
|
|
|
avator := c.PostForm("avator")
|
|
if avator == "" {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "不能为空",
|
|
"result": "",
|
|
})
|
|
return
|
|
}
|
|
kefuName, _ := c.Get("kefu_name")
|
|
models.UpdateUserAvator(kefuName.(string), avator)
|
|
c.JSON(200, gin.H{
|
|
"code": 200,
|
|
"msg": "ok",
|
|
"result": "",
|
|
})
|
|
}
|
|
func PostKefuPass(c *gin.Context) {
|
|
kefuName, _ := c.Get("kefu_name")
|
|
newPass := c.PostForm("new_pass")
|
|
confirmNewPass := c.PostForm("confirm_new_pass")
|
|
old_pass := c.PostForm("old_pass")
|
|
if newPass != confirmNewPass {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "密码不一致",
|
|
"result": "",
|
|
})
|
|
return
|
|
}
|
|
user := models.FindUser(kefuName.(string))
|
|
if user.Password != tools.Md5(old_pass) {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "旧密码不正确",
|
|
"result": "",
|
|
})
|
|
return
|
|
}
|
|
models.UpdateUserPass(kefuName.(string), tools.Md5(newPass))
|
|
c.JSON(200, gin.H{
|
|
"code": 200,
|
|
"msg": "ok",
|
|
"result": "",
|
|
})
|
|
}
|
|
func PostKefuClient(c *gin.Context) {
|
|
kefuName, _ := c.Get("kefu_name")
|
|
clientId := c.PostForm("client_id")
|
|
|
|
if clientId == "" {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "client_id不能为空",
|
|
})
|
|
return
|
|
}
|
|
models.CreateUserClient(kefuName.(string), clientId)
|
|
c.JSON(200, gin.H{
|
|
"code": 200,
|
|
"msg": "ok",
|
|
"result": "",
|
|
})
|
|
}
|
|
|
|
func GetIdleKefu(c *gin.Context) {
|
|
visitorId := c.Query("visitor_id")
|
|
var kefuName, oldKefuname string
|
|
var reset bool
|
|
var visitorDataId uint
|
|
if visitorId != "" {
|
|
visitor := models.FindVisitorByVistorId(visitorId)
|
|
if visitor.ToId != "" {
|
|
kefuName = visitor.ToId
|
|
visitorDataId = visitor.ID
|
|
}
|
|
if kefuName != "" {
|
|
userInfo := models.FindUser(kefuName)
|
|
if userInfo.ID == 0 || userInfo.Status == 0 || userInfo.IsOnline == 0 {
|
|
reset = true
|
|
oldKefuname = kefuName
|
|
kefuName = ""
|
|
}
|
|
}
|
|
}
|
|
if kefuName == "" {
|
|
user := models.FindIdleUser()
|
|
kefuName = user.Name
|
|
if reset {
|
|
if visitorDataId > 0 {
|
|
models.UpdatesVisitor(visitorDataId, kefuName)
|
|
}
|
|
}
|
|
}
|
|
if kefuName == "" {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "暂时没有在线客服",
|
|
})
|
|
} else {
|
|
c.JSON(200, gin.H{
|
|
"code": 200,
|
|
"msg": "ok",
|
|
"result": kefuName,
|
|
"oldResult": oldKefuname,
|
|
})
|
|
}
|
|
}
|
|
func GetKefuInfo(c *gin.Context) {
|
|
kefuName, _ := c.Get("kefu_name")
|
|
user := models.FindUser(kefuName.(string))
|
|
info := make(map[string]interface{})
|
|
info["avator"] = user.Avator
|
|
info["username"] = user.Name
|
|
info["nickname"] = user.Nickname
|
|
info["uid"] = user.ID
|
|
info["role"] = user.Role
|
|
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"
|
|
kefu, ok := ws.KefuList[kefu.Name]
|
|
if ok && kefu != nil {
|
|
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) {
|
|
kefuName := c.GetString("kefu_name")
|
|
userInfo := models.FindUser(kefuName)
|
|
if userInfo.Role != 1 {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "权限不足",
|
|
})
|
|
return
|
|
}
|
|
name := c.PostForm("username")
|
|
password := c.PostForm("password")
|
|
nickname := c.PostForm("nickname")
|
|
avatar := "/aicss/static/images/4.jpg"
|
|
|
|
if name == "" || password == "" {
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": 400,
|
|
"msg": "All fields are required",
|
|
"result": nil,
|
|
})
|
|
return
|
|
}
|
|
|
|
existingUser := models.FindUser(name)
|
|
if existingUser.Name != "" {
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": 409,
|
|
"msg": "Username already exists",
|
|
"result": nil,
|
|
})
|
|
return
|
|
}
|
|
|
|
userID := models.CreateUser(name, tools.Md5(password), avatar, nickname)
|
|
if userID == 0 {
|
|
c.JSON(http.StatusInternalServerError, gin.H{
|
|
"code": 500,
|
|
"msg": "Registration Failed",
|
|
"result": nil,
|
|
})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": 200,
|
|
"msg": "Registration successful",
|
|
"result": gin.H{
|
|
"user_id": userID,
|
|
},
|
|
})
|
|
}
|
|
func PostKefuInfo(c *gin.Context) {
|
|
name, _ := c.Get("kefu_name")
|
|
password := c.PostForm("password")
|
|
avator := c.PostForm("avator")
|
|
nickname := c.PostForm("nickname")
|
|
if password != "" {
|
|
password = tools.Md5(password)
|
|
}
|
|
if name == "" {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "客服账号不能为空",
|
|
})
|
|
return
|
|
}
|
|
models.UpdateUser(name.(string), password, avator, nickname)
|
|
|
|
c.JSON(200, gin.H{
|
|
"code": 200,
|
|
"msg": "ok",
|
|
"result": "",
|
|
})
|
|
}
|
|
func GetKefuList(c *gin.Context) {
|
|
kefuName := c.GetString("kefu_name")
|
|
userInfo := models.FindUser(kefuName)
|
|
if userInfo.Role != 1 {
|
|
c.JSON(200, gin.H{
|
|
"code": 400,
|
|
"msg": "权限不足",
|
|
})
|
|
return
|
|
}
|
|
users := models.FindUsers(kefuName)
|
|
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": "",
|
|
})
|
|
}
|