914 lines
22 KiB
Go
914 lines
22 KiB
Go
package controller
|
||
|
||
import (
|
||
"fmt"
|
||
"github.com/dchest/captcha"
|
||
"github.com/gin-contrib/sessions"
|
||
"github.com/gin-gonic/gin"
|
||
"kefu/common"
|
||
"kefu/models"
|
||
"kefu/tools"
|
||
"kefu/types"
|
||
"kefu/ws"
|
||
"strconv"
|
||
"time"
|
||
)
|
||
|
||
func GetKefuInfo(c *gin.Context) {
|
||
kefuId, _ := c.Get("kefu_id")
|
||
entIdStr, _ := c.Get("ent_id")
|
||
|
||
//user := models.FindUserById(kefuId)
|
||
//info := make(map[string]interface{})
|
||
//info["name"] = user.Nickname
|
||
//info["id"] = user.Name
|
||
//info["avator"] = user.Avator
|
||
//info["role_id"] = user.RoleId
|
||
user := models.User{ID: uint(kefuId.(float64))}
|
||
result := user.GetOneUser("*")
|
||
if result.ID == 0 {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "客服不存在",
|
||
})
|
||
return
|
||
}
|
||
result.Password = ""
|
||
result.EntId = entIdStr.(string)
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "ok",
|
||
"result": result,
|
||
})
|
||
}
|
||
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) {
|
||
idInterface, _ := c.Get("kefu_id")
|
||
entId, _ := c.Get("ent_id")
|
||
id := idInterface.(float64)
|
||
result := make([]interface{}, 0)
|
||
ws.SendPingToKefuClient()
|
||
kefus := models.FindUsersByEntId(entId)
|
||
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.Users) != 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)
|
||
ws.VisitorNotice(visitor.VisitorId, "客服转接到"+user.Nickname)
|
||
ws.VisitorTransfer(visitor.VisitorId, kefuId)
|
||
|
||
noticeContent := fmt.Sprintf("访客%s转接到您", visitor.Name)
|
||
go SendVisitorLoginNotice(kefuId, visitor.Name, visitor.Avator, noticeContent, visitor.VisitorId)
|
||
go SendWechatVisitorMessageTemplate(kefuId, visitor.Name, visitor.VisitorId, noticeContent, visitor.EntId)
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "转移成功",
|
||
})
|
||
}
|
||
func GetKefuInfoSettingOwn(c *gin.Context) {
|
||
kefuId := c.Query("kefu_id")
|
||
pid, _ := c.Get("kefu_id")
|
||
roleId, _ := c.Get("role_id")
|
||
var user models.User
|
||
var entConfigs []models.EntConfig
|
||
if roleId.(float64) == 1 {
|
||
user = models.FindUserById(kefuId)
|
||
entConfigs = models.FindEntConfigByEntid(kefuId)
|
||
} else {
|
||
user = models.FindUserByIdPid(pid, kefuId)
|
||
|
||
}
|
||
user.Password = ""
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "ok",
|
||
"result": gin.H{
|
||
"user": user,
|
||
"settings": entConfigs,
|
||
},
|
||
})
|
||
}
|
||
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")
|
||
email := c.PostForm("email")
|
||
emailCode := c.PostForm("emailCode")
|
||
roleId := 2
|
||
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
|
||
}
|
||
//强密码验证
|
||
isCheckStrongPass := models.FindConfig("CheckStrongPass")
|
||
if password != "" && isCheckStrongPass == "true" && !tools.IsStrongPass(password) {
|
||
c.JSON(200, gin.H{
|
||
"code": types.ApiCode.FAILED,
|
||
"msg": "密码必须包含大写字母,小写字母,数字和特殊字符,并且不能少于8位",
|
||
"result": "",
|
||
})
|
||
return
|
||
}
|
||
oldUser := models.FindUserWhere("name = ? or email = ?", name, email)
|
||
if oldUser.Name != "" {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "用户名或邮箱已经存在",
|
||
"result": "",
|
||
})
|
||
return
|
||
}
|
||
session := sessions.DefaultMany(c, "go-session-a")
|
||
if captchaId := session.Get("captcha"); captchaId != nil {
|
||
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
|
||
}
|
||
session2 := sessions.DefaultMany(c, "go-session")
|
||
if emailCodeSession := session2.Get("emailCode" + email); emailCodeSession != nil {
|
||
if emailCodeSession.(string) != emailCode {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "邮箱验证码验证失败",
|
||
"result": "",
|
||
})
|
||
return
|
||
}
|
||
} else {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "邮箱验证码失效",
|
||
"result": "",
|
||
})
|
||
return
|
||
}
|
||
|
||
//插入新用户
|
||
dd, _ := time.ParseDuration("180h")
|
||
dd1 := time.Now().Add(dd)
|
||
userObj := &models.User{
|
||
Name: name,
|
||
Password: tools.Md5(password),
|
||
Nickname: nickname,
|
||
Avator: avator,
|
||
Pid: 1,
|
||
RecNum: 0,
|
||
AgentNum: 0,
|
||
Status: 1,
|
||
Email: email,
|
||
Tel: "",
|
||
OnlineStatus: 1,
|
||
Uuid: tools.Uuid2(),
|
||
ExpiredAt: types.Time{dd1},
|
||
}
|
||
uid, err := userObj.AddUser()
|
||
if uid == 0 && err != nil {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": fmt.Sprintf("增加用户失败:%s", err.Error()),
|
||
"result": "",
|
||
})
|
||
return
|
||
}
|
||
models.CreateUserRole(uid, uint(roleId))
|
||
|
||
logContent := fmt.Sprintf("'%s'注册成功", name)
|
||
go models.CreateFlyLog(fmt.Sprintf("%d", uid), c.ClientIP(), logContent, "user")
|
||
go SendRegisterEmail(name, email, nickname)
|
||
|
||
//删除session
|
||
session.Delete("captcha")
|
||
session2.Delete("emailCode" + email)
|
||
_ = session.Save()
|
||
_ = session2.Save()
|
||
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "注册完成",
|
||
"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 PostUpdateUser(c *gin.Context) {
|
||
kefuName, _ := c.Get("kefu_name")
|
||
avator := c.PostForm("avator")
|
||
companyPic := c.PostForm("company_pic")
|
||
|
||
result := make(map[string]string)
|
||
result["company_pic"] = companyPic
|
||
result["avator"] = avator
|
||
models.UpdateUser2(result, "name = ?", kefuName)
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "ok",
|
||
})
|
||
}
|
||
func PostKefuinfo(c *gin.Context) {
|
||
|
||
avator := c.PostForm("avator")
|
||
nickname := c.PostForm("nickname")
|
||
if avator == "" || nickname == "" {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "参数不能为空",
|
||
"result": "",
|
||
})
|
||
return
|
||
}
|
||
kefuName, _ := c.Get("kefu_name")
|
||
models.UpdateKefuInfoByName(kefuName.(string), avator, nickname)
|
||
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
|
||
}
|
||
//强密码验证
|
||
isCheckStrongPass := models.FindConfig("CheckStrongPass")
|
||
if isCheckStrongPass == "true" && !tools.IsStrongPass(newPass) {
|
||
c.JSON(200, gin.H{
|
||
"code": types.ApiCode.FAILED,
|
||
"msg": "密码必须包含大写字母,小写字母,数字和特殊字符,并且不能少于8位",
|
||
"result": "",
|
||
})
|
||
return
|
||
}
|
||
models.UpdateUserPass(kefuName.(string), tools.Md5(newPass))
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "ok",
|
||
"result": "",
|
||
})
|
||
}
|
||
func PostKefuInfoStatus(c *gin.Context) {
|
||
kefuId, _ := c.Get("kefu_id")
|
||
roleId, _ := c.Get("role_id")
|
||
id := c.PostForm("id")
|
||
status := c.PostForm("status")
|
||
statusInt, _ := strconv.Atoi(status)
|
||
query := " id = ? "
|
||
arg := []interface{}{
|
||
id,
|
||
}
|
||
if roleId.(float64) != 1 {
|
||
query = query + " and pid = ? "
|
||
arg = append(arg, kefuId)
|
||
}
|
||
statusTxt := ""
|
||
if status == "1" {
|
||
statusTxt = "关闭"
|
||
} else {
|
||
statusTxt = "开通"
|
||
}
|
||
user := models.FindUserById(id)
|
||
go SendSystemNoticeEmail(user.Email, "在线客服系统审核通知", fmt.Sprintf("你好,账号 %s,%s", user.Name, statusTxt))
|
||
models.UpdateUserStatusWhere(uint(statusInt), query, arg...)
|
||
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "ok",
|
||
})
|
||
}
|
||
|
||
type StaffRegisteForm struct {
|
||
Account string `form:"account" json:"account" uri:"account" xml:"account" binding:"required"`
|
||
Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
|
||
Avator string `form:"avator" json:"avator" uri:"avator" xml:"avator"`
|
||
Nickname string `form:"nickname" json:"nickname" uri:"nickname" xml:"nickname" binding:"required"`
|
||
ExpiredTime string `form:"expiredTime" json:"expiredTime" uri:"expiredTime" xml:"expiredTime" binding:"required"`
|
||
Tel string `form:"tel" json:"tel" uri:"tel" xml:"tel"`
|
||
Email string `form:"email" json:"email" uri:"email" xml:"email"`
|
||
AuthKey string `form:"authKey" json:"authKey" uri:"authKey" xml:"authKey"`
|
||
EntId string `form:"entId" json:"entId" uri:"entId" xml:"entId"`
|
||
IdCard string `form:"idCard" json:"idCard" uri:"idCard" xml:"idCard"`
|
||
}
|
||
|
||
// 直接注册成功客服账户
|
||
func PostKefuRegister2(c *gin.Context) {
|
||
var form StaffRegisteForm
|
||
err := c.Bind(&form)
|
||
if err != nil {
|
||
c.JSON(200, gin.H{
|
||
"code": types.ApiCode.FAILED,
|
||
"msg": types.ApiCode.GetMessage(types.ApiCode.INVALID),
|
||
"result": err.Error(),
|
||
})
|
||
return
|
||
}
|
||
|
||
roleId := 3
|
||
if form.EntId == "" {
|
||
form.EntId = "1"
|
||
roleId = 2
|
||
}
|
||
expired := tools.TimeStrToTime(form.ExpiredTime)
|
||
entId := uint(tools.Str2Int(form.EntId))
|
||
userObj := &models.User{
|
||
Name: form.Account,
|
||
Password: tools.Md5(form.Password),
|
||
Nickname: form.Nickname,
|
||
Avator: form.Avator,
|
||
Pid: entId,
|
||
Status: 0,
|
||
Email: form.Email,
|
||
Tel: form.Tel,
|
||
OnlineStatus: 1,
|
||
ExpiredAt: types.Time{expired},
|
||
}
|
||
userAttr := &models.User_attr{
|
||
EntId: tools.Int2Str(entId),
|
||
AuthKey: form.AuthKey,
|
||
IdCard: form.IdCard,
|
||
KefuName: form.Account,
|
||
CreatedAt: types.Time{time.Now()},
|
||
}
|
||
|
||
oldUser := models.FindUser(form.Account)
|
||
if oldUser.Name != "" {
|
||
userObj.SaveUser("name = ?", form.Account)
|
||
userAttr.SaveUserAttr("kefu_name = ?", form.Account)
|
||
c.JSON(200, gin.H{
|
||
"code": types.ApiCode.SUCCESS,
|
||
"msg": types.ApiCode.GetMessage(types.ApiCode.SUCCESS),
|
||
})
|
||
return
|
||
}
|
||
|
||
//插入新用户
|
||
|
||
uid, _ := userObj.AddUser()
|
||
if uid == 0 {
|
||
c.JSON(200, gin.H{
|
||
"code": types.ApiCode.FAILED,
|
||
"msg": types.ApiCode.GetMessage(types.ApiCode.FAILED),
|
||
})
|
||
return
|
||
}
|
||
//插入用户角色表
|
||
models.CreateUserRole(uid, uint(roleId))
|
||
|
||
//插入扩展表
|
||
if entId == 1 {
|
||
entId = uid
|
||
}
|
||
|
||
userAttr.AddUserAttr()
|
||
|
||
logContent := fmt.Sprintf("'%s'注册成功", form.Account)
|
||
go models.CreateFlyLog(fmt.Sprintf("%d", uid), c.ClientIP(), logContent, "user")
|
||
|
||
c.JSON(200, gin.H{
|
||
"code": types.ApiCode.SUCCESS,
|
||
"msg": types.ApiCode.GetMessage(types.ApiCode.SUCCESS),
|
||
})
|
||
}
|
||
|
||
// 修改客服状态
|
||
func PostKefuInfoStatus2(c *gin.Context) {
|
||
kefuName := c.PostForm("kefuName")
|
||
status := c.PostForm("status")
|
||
statusInt, _ := strconv.Atoi(status)
|
||
query := " name = ? "
|
||
arg := []interface{}{
|
||
kefuName,
|
||
}
|
||
|
||
models.UpdateUserStatusWhere(uint(statusInt), query, arg...)
|
||
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "ok",
|
||
})
|
||
}
|
||
func PostKefuExpiredTime(c *gin.Context) {
|
||
kefuId, _ := c.Get("kefu_id")
|
||
roleId, _ := c.Get("role_id")
|
||
name := c.PostForm("name")
|
||
expiredTime := c.PostForm("expired_time")
|
||
query := " name = ? "
|
||
arg := []interface{}{
|
||
name,
|
||
}
|
||
if roleId.(float64) != 1 {
|
||
query = query + " and pid = ? "
|
||
arg = append(arg, kefuId)
|
||
}
|
||
|
||
models.UpdateUserExpiredWhere(expiredTime, query, arg...)
|
||
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "ok",
|
||
})
|
||
}
|
||
func PostKefuInfo(c *gin.Context) {
|
||
entId, _ := c.Get("ent_id")
|
||
kefuName, _ := c.Get("kefu_name")
|
||
kefuId, _ := c.Get("kefu_id")
|
||
mRoleId, _ := c.Get("role_id")
|
||
pidInterface, _ := c.Get("kefu_id")
|
||
pid := uint(pidInterface.(float64))
|
||
|
||
kefuInfo := models.FindUser(kefuName.(string))
|
||
uuid := tools.Uuid2()
|
||
var query string
|
||
var arg = []interface{}{}
|
||
if mRoleId.(float64) != 1 {
|
||
uuid = kefuInfo.Uuid
|
||
query = "pid=?"
|
||
arg = append(arg, kefuId)
|
||
count := models.CountUsersWhere(query, arg)
|
||
if kefuInfo.AgentNum <= count {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": fmt.Sprintf("子账号个数超过上限数: %d!", kefuInfo.AgentNum),
|
||
})
|
||
return
|
||
}
|
||
}
|
||
|
||
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")
|
||
email := c.PostForm("email")
|
||
tel := c.PostForm("tel")
|
||
agentNum, _ := strconv.Atoi(c.PostForm("agent_num"))
|
||
//验证密码强度
|
||
//强密码验证
|
||
isCheckStrongPass := models.FindConfig("CheckStrongPass")
|
||
if password != "" && isCheckStrongPass == "true" && !tools.IsStrongPass(password) {
|
||
c.JSON(200, gin.H{
|
||
"code": types.ApiCode.FAILED,
|
||
"msg": "密码必须包含大写字母,小写字母,数字和特殊字符,并且不能少于8位",
|
||
"result": "",
|
||
})
|
||
return
|
||
}
|
||
if roleId == "" {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "请选择角色!",
|
||
})
|
||
return
|
||
}
|
||
//如果不是管理员,添加超权限的角色
|
||
roleIdInt, _ := strconv.Atoi(roleId)
|
||
if mRoleId.(float64) != 1 && roleIdInt <= int(mRoleId.(float64)) {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "修改角色无权限!",
|
||
})
|
||
return
|
||
}
|
||
//添加非坐席账号,pid统一1
|
||
if roleIdInt < 3 {
|
||
pid = 1
|
||
}
|
||
//插入新用户
|
||
if id == "" {
|
||
oldUser := models.FindUser(name)
|
||
if oldUser.Name != "" {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "用户名已经存在",
|
||
"result": "",
|
||
})
|
||
return
|
||
}
|
||
//dd, _ := time.ParseDuration("720h")
|
||
//dd1 := time.Now().Add(dd)
|
||
//uid := models.CreateUser(name, tools.Md5(password), avator, nickname, uint(pid.(float64)), uint(agentNum), 0, types.Time{dd1})
|
||
|
||
//插入新用户
|
||
dd, _ := time.ParseDuration("720h")
|
||
dd1 := time.Now().Add(dd)
|
||
userObj := &models.User{
|
||
Name: name,
|
||
Password: tools.Md5(password),
|
||
Nickname: nickname,
|
||
Avator: avator,
|
||
Pid: pid,
|
||
RecNum: 0,
|
||
AgentNum: 0,
|
||
Status: 1,
|
||
Email: email,
|
||
Tel: tel,
|
||
OnlineStatus: 1,
|
||
ExpiredAt: types.Time{dd1},
|
||
Uuid: uuid,
|
||
}
|
||
uid, err := userObj.AddUser()
|
||
if uid == 0 && err != nil {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": fmt.Sprintf("增加用户失败:%s", err.Error()),
|
||
"result": "",
|
||
})
|
||
return
|
||
}
|
||
roleIdInt, _ := strconv.Atoi(roleId)
|
||
models.CreateUserRole(uid, uint(roleIdInt))
|
||
|
||
logContent := fmt.Sprintf("'%s'新增用户'%s'成功", kefuName, name)
|
||
go models.CreateFlyLog(entId.(string), c.ClientIP(), logContent, "user")
|
||
} else {
|
||
//更新用户
|
||
if password != "" {
|
||
password = tools.Md5(password)
|
||
}
|
||
oldUser := models.FindUser(name)
|
||
if oldUser.Name != "" && id != fmt.Sprintf("%d", oldUser.ID) {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "用户名已经存在",
|
||
"result": "",
|
||
})
|
||
return
|
||
}
|
||
models.UpdateUser(id, name, password, avator, nickname, email, tel, uint(agentNum))
|
||
roleIdInt, _ := strconv.Atoi(roleId)
|
||
uid, _ := strconv.Atoi(id)
|
||
models.DeleteRoleByUserId(uid)
|
||
models.CreateUserRole(uint(uid), uint(roleIdInt))
|
||
|
||
logContent := fmt.Sprintf("'%s'更新用户'%s'成功", kefuName, name)
|
||
go models.CreateFlyLog(entId.(string), c.ClientIP(), logContent, "user")
|
||
}
|
||
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "ok",
|
||
"result": "",
|
||
})
|
||
}
|
||
|
||
func GetKefuList(c *gin.Context) {
|
||
roleId, _ := c.Get("role_id")
|
||
if roleId.(float64) != 1 {
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "无权限",
|
||
"result": "",
|
||
})
|
||
}
|
||
page, _ := strconv.Atoi(c.Query("page"))
|
||
count := models.CountUsers()
|
||
list := models.FindUsersPages(uint(page), common.PageSize)
|
||
//users := models.FindUsers()
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "获取成功",
|
||
"result": gin.H{
|
||
"count": count,
|
||
"page": page,
|
||
"list": list,
|
||
"pagesize": common.PageSize,
|
||
},
|
||
})
|
||
}
|
||
func GetKefuListOwn(c *gin.Context) {
|
||
kefuId, _ := c.Get("kefu_id")
|
||
roleId, _ := c.Get("role_id")
|
||
query := "1=1 "
|
||
var arg = []interface{}{}
|
||
if roleId.(float64) != 1 {
|
||
query += "and pid = ? "
|
||
arg = append(arg, kefuId)
|
||
}
|
||
|
||
//通过客服名搜索
|
||
kefuName := c.Query("kefu_name")
|
||
if kefuName != "" {
|
||
query += "and user.name like ? "
|
||
arg = append(arg, kefuName+"%")
|
||
}
|
||
|
||
//通过邮箱搜索
|
||
email := c.Query("email")
|
||
if email != "" {
|
||
query += "and user.email like ? "
|
||
arg = append(arg, email+"%")
|
||
}
|
||
//通过手机搜索
|
||
tel := c.Query("tel")
|
||
if tel != "" {
|
||
query += "and user.tel like ? "
|
||
arg = append(arg, tel+"%")
|
||
}
|
||
pagesize, _ := strconv.Atoi(c.Query("pagesize"))
|
||
page, _ := strconv.Atoi(c.Query("page"))
|
||
count := models.CountUsersWhere(query, arg...)
|
||
list := models.FindUsersOwn(uint(page), uint(pagesize), query, arg...)
|
||
//判断实际在线状态
|
||
for key, item := range list {
|
||
kefuConnection, ok := ws.KefuList[item.Name]
|
||
if !ok || len(kefuConnection.Users) == 0 {
|
||
item.OnlineStatus = 2
|
||
}
|
||
item.RecNum = ws.VisitorCount(item.Name)
|
||
list[key] = item
|
||
}
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "获取成功",
|
||
"result": gin.H{
|
||
"count": count,
|
||
"page": page,
|
||
"list": list,
|
||
"pagesize": pagesize,
|
||
},
|
||
})
|
||
}
|
||
func GetKefuListMessages(c *gin.Context) {
|
||
kefuId, _ := c.Get("kefu_id")
|
||
roleId, _ := c.Get("role_id")
|
||
id := c.Query("id")
|
||
page, _ := strconv.Atoi(c.Query("page"))
|
||
pagesize, _ := strconv.Atoi(c.Query("pagesize"))
|
||
if pagesize == 0 {
|
||
pagesize = 30
|
||
}
|
||
user := models.FindUserById(id)
|
||
fmt.Printf("%T\n", kefuId)
|
||
fmt.Printf("%T\n", user.Pid)
|
||
if fmt.Sprintf("%v", user.Pid) != fmt.Sprintf("%v", kefuId) {
|
||
if roleId.(float64) != 1 {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "无权限",
|
||
"result": "",
|
||
})
|
||
return
|
||
}
|
||
}
|
||
count := models.CountMessage("message.kefu_id=?", user.Name)
|
||
list := models.FindMessageByPage(uint(page), uint(pagesize), "message.kefu_id=?", user.Name)
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "获取成功",
|
||
"result": gin.H{
|
||
"count": count,
|
||
"page": page,
|
||
"list": list,
|
||
"pagesize": pagesize,
|
||
},
|
||
})
|
||
}
|
||
func GetVisitorListMessages(c *gin.Context) {
|
||
visitorId := c.Query("visitor_id")
|
||
entId, _ := c.Get("ent_id")
|
||
page, _ := strconv.Atoi(c.Query("page"))
|
||
|
||
count := models.CountMessage("message.ent_id= ? and message.visitor_id=?", entId, visitorId)
|
||
list := models.FindMessageByPage(uint(page), common.PageSize, "message.ent_id= ? and message.visitor_id=?", entId, visitorId)
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "获取成功",
|
||
"result": gin.H{
|
||
"count": count,
|
||
"page": page,
|
||
"list": list,
|
||
"pagesize": common.PageSize,
|
||
},
|
||
})
|
||
}
|
||
func DeleteKefuInfo(c *gin.Context) {
|
||
kefuId := c.Query("id")
|
||
models.DeleteUserById(kefuId)
|
||
models.DeleteRoleByUserId(kefuId)
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "删除成功",
|
||
"result": "",
|
||
})
|
||
}
|
||
func DeleteKefuInfoOwn(c *gin.Context) {
|
||
kefuId := c.Query("id")
|
||
pid, _ := c.Get("kefu_id")
|
||
|
||
roleId, _ := c.Get("role_id")
|
||
|
||
if kefuId == fmt.Sprintf("%v", pid) {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "不能删除自己",
|
||
})
|
||
return
|
||
}
|
||
user := models.FindUserByUid(kefuId)
|
||
if roleId.(float64) == 1 {
|
||
models.DeleteUserById(kefuId)
|
||
models.DeleteRoleByUserId(kefuId)
|
||
models.DelVisitor("ent_id = ?", kefuId)
|
||
models.DelVisitorBlack("ent_id = ?", kefuId)
|
||
models.DelVisitorAttr("ent_id = ?", kefuId)
|
||
models.DelMessage("ent_id = ?", kefuId)
|
||
models.DelUserAttr("ent_id = ?", kefuId)
|
||
models.DelEntConfig("ent_id = ?", kefuId)
|
||
models.DelOauthKefuName(user.Name)
|
||
} else {
|
||
models.DeleteUserByIdPid(kefuId, pid)
|
||
models.DeleteRoleByUserId(kefuId)
|
||
}
|
||
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "删除成功",
|
||
"result": "",
|
||
})
|
||
}
|
||
|
||
// 更新用户的在线状态
|
||
func GetUpdateOnlineStatus(c *gin.Context) {
|
||
status := c.Query("status")
|
||
statusInt, _ := strconv.Atoi(status)
|
||
kefuId, _ := c.Get("kefu_id")
|
||
user := models.User{
|
||
ID: uint(kefuId.(float64)),
|
||
OnlineStatus: uint(statusInt),
|
||
}
|
||
user.UpdateUser()
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "成功",
|
||
})
|
||
}
|
||
|
||
// 绑定手机号
|
||
func PostKefuBindTel(c *gin.Context) {
|
||
|
||
phone := c.PostForm("phone")
|
||
code := c.PostForm("code")
|
||
if phone == "" || code == "" {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "参数不能为空",
|
||
"result": "",
|
||
})
|
||
return
|
||
}
|
||
info := models.FindUserWhere("tel = ?", phone)
|
||
if info.ID != 0 {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "该手机号已被绑定!",
|
||
"result": "",
|
||
})
|
||
return
|
||
}
|
||
session := sessions.DefaultMany(c, "go-session-a")
|
||
if codeSession := session.Get("smsCode" + phone); codeSession != nil {
|
||
if codeSession.(string) != code {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "短信验证码验证失败",
|
||
})
|
||
return
|
||
}
|
||
} else {
|
||
c.JSON(200, gin.H{
|
||
"code": 400,
|
||
"msg": "短信验证码失效",
|
||
})
|
||
return
|
||
}
|
||
//删除session
|
||
session.Delete("smsCode" + phone)
|
||
_ = session.Save()
|
||
|
||
kefuName, _ := c.Get("kefu_name")
|
||
models.UpdateUserTel(kefuName.(string), phone)
|
||
entId, _ := c.Get("ent_id")
|
||
logContent := fmt.Sprintf("'%s'绑定手机'%s'", kefuName, phone)
|
||
go models.CreateFlyLog(entId.(string), c.ClientIP(), logContent, "sms")
|
||
|
||
c.JSON(200, gin.H{
|
||
"code": 200,
|
||
"msg": "ok",
|
||
"result": "",
|
||
})
|
||
}
|