kefu/controller/kefu.go

914 lines
22 KiB
Go
Raw Permalink Normal View History

2024-12-10 02:50:12 +00:00
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": "",
})
}