🎨 添加图库和客服插件(有问题-待修改)
This commit is contained in:
484
plugin/customerservice/api/service.go
Normal file
484
plugin/customerservice/api/service.go
Normal file
@@ -0,0 +1,484 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"git.echol.cn/loser/lckt/global"
|
||||
"git.echol.cn/loser/lckt/model/common/response"
|
||||
"git.echol.cn/loser/lckt/plugin/customerservice/model"
|
||||
"git.echol.cn/loser/lckt/plugin/customerservice/service"
|
||||
"git.echol.cn/loser/lckt/plugin/customerservice/tools"
|
||||
"github.com/gin-gonic/gin"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
type AdminServiceApi struct{}
|
||||
|
||||
// GetServiceList
|
||||
// @Tags sysService
|
||||
// @Summary 客服列表
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.PageInfo true "页码, 每页大小"
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "分页客服列表,返回包括列表,总数,页码,每页数量"
|
||||
// @Router /service/get_service_list [post]
|
||||
func (ad *AdminServiceApi) GetServiceList(c *gin.Context) {
|
||||
var pageInfo model.PageInfo
|
||||
if err := c.ShouldBindQuery(&pageInfo); err != nil {
|
||||
response.FailWithMessage("参数错误:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
limit := pageInfo.Limit
|
||||
offset := pageInfo.Limit * (pageInfo.Page - 1)
|
||||
db := global.GVA_DB.Model(&model.SysService{})
|
||||
var list []model.SysService
|
||||
var total int64
|
||||
db.Count(&total)
|
||||
err := db.Omit("password").Order("add_time desc").Limit(limit).Offset(offset).Find(&list).Error
|
||||
if err != nil {
|
||||
response.FailWithMessage("查询失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
response.OkWithDetailed(response.PageResult{
|
||||
List: list,
|
||||
Total: total,
|
||||
Page: pageInfo.Page,
|
||||
PageSize: pageInfo.Limit,
|
||||
}, "获取成功", c)
|
||||
}
|
||||
|
||||
// SaveService
|
||||
// @Tags sysService
|
||||
// @Summary 添加/更新客服
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request true ""
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} ""
|
||||
// @Router /service/save_service [post]
|
||||
func (ad *AdminServiceApi) SaveService(c *gin.Context) {
|
||||
var serviceData model.SysService
|
||||
if err := c.ShouldBindJSON(&serviceData); err != nil {
|
||||
response.FailWithMessage("参数错误:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
//校验数据
|
||||
ser := service.ServiceGroupApp
|
||||
if err := ser.ValidateServiceData(&serviceData); err != nil {
|
||||
response.FailWithMessage("操作失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
var msg string
|
||||
if serviceData.Password != "" {
|
||||
hash := md5.Sum([]byte("gva-service" + serviceData.Password))
|
||||
serviceData.Password = hex.EncodeToString(hash[:])
|
||||
}
|
||||
|
||||
if serviceData.Id == 0 {
|
||||
serviceData.AddTime = time.Now().Unix()
|
||||
if err := global.GVA_DB.Create(&serviceData).Error; err != nil {
|
||||
response.FailWithMessage("添加失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
msg = "添加成功"
|
||||
} else {
|
||||
if err := global.GVA_DB.Model(&model.SysService{}).Where("id = ?", serviceData.Id).Updates(serviceData).Error; err != nil {
|
||||
response.FailWithMessage("更新失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
msg = "更新成功"
|
||||
}
|
||||
response.OkWithMessage(msg, c)
|
||||
}
|
||||
|
||||
// DeleteService
|
||||
// @Tags sysService
|
||||
// @Summary 删除客服
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.id true "id"
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "成功消息"
|
||||
// @Router /service/delete_service?id=xx [delete]
|
||||
func (ad *AdminServiceApi) DeleteService(c *gin.Context) {
|
||||
idParam := c.Query("id")
|
||||
id, err := strconv.Atoi(idParam)
|
||||
if err != nil {
|
||||
response.FailWithMessage("参数错误:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
var ser model.SysService
|
||||
if err := global.GVA_DB.First(&ser, id).Error; err != nil {
|
||||
//if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
//
|
||||
//}
|
||||
response.FailWithMessage("用户不存在:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
// 删除用户
|
||||
if err := global.GVA_DB.Delete(&model.SysService{}, id).Error; err != nil {
|
||||
response.FailWithMessage("删除失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
response.OkWithMessage("删除成功", c)
|
||||
}
|
||||
|
||||
// FindService
|
||||
// @Tags sysService
|
||||
// @Summary 查找客服
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.id true "id"
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "成功消息"
|
||||
// @Router /service/find_service?id=xx [get]
|
||||
func (ad *AdminServiceApi) FindService(c *gin.Context) {
|
||||
idParam := c.Query("id")
|
||||
id, err := strconv.Atoi(idParam)
|
||||
if err != nil {
|
||||
response.FailWithMessage("参数错误:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
var ser model.SysService
|
||||
if err := global.GVA_DB.First(&ser, id).Error; err != nil {
|
||||
response.FailWithMessage("客服不存在:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
ser.Password = ""
|
||||
response.OkWithDetailed(ser, "success", c)
|
||||
}
|
||||
|
||||
// AdminServiceLogin
|
||||
// @Tags sysService
|
||||
// @Summary 进入工作台
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.id true "id"
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "成功消息"
|
||||
// @Router /service/delete_reply/:id [delete]
|
||||
func (ad *AdminServiceApi) AdminServiceLogin(c *gin.Context) {
|
||||
idParam := c.Query("id")
|
||||
var ser model.SysService
|
||||
if err := global.GVA_DB.First(&ser, idParam).Error; err != nil {
|
||||
response.FailWithMessage("客服不存在:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
data := map[string]interface{}{}
|
||||
|
||||
expTime, token, err := tools.GenerateToken(ser.Id)
|
||||
if err != nil {
|
||||
response.FailWithMessage("登录失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
data["token"] = token
|
||||
data["exp_time"] = expTime
|
||||
|
||||
response.OkWithDetailed(data, "success", c)
|
||||
}
|
||||
|
||||
// AccountServiceLogin
|
||||
// @Tags sysService
|
||||
// @Summary 账户密码登录
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.id true "id"
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "成功消息"
|
||||
// @Router /service/admin_login?id=xx [get]
|
||||
func (ad *AdminServiceApi) AccountServiceLogin(c *gin.Context) {
|
||||
var loginInfo model.LoginInfo
|
||||
if err := c.ShouldBindJSON(&loginInfo); err != nil {
|
||||
response.FailWithMessage("参数错误:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
if loginInfo.Account == "" || loginInfo.Password == "" {
|
||||
response.FailWithMessage("账户或密码为空", c)
|
||||
return
|
||||
}
|
||||
var serviceInfo model.SysService
|
||||
if err := global.GVA_DB.Limit(1).Where("account=?", loginInfo.Account).Find(&serviceInfo).Error; err != nil {
|
||||
response.FailWithMessage("客服不存在:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
hash := md5.Sum([]byte("gva-service" + loginInfo.Password))
|
||||
md5Pwd := hex.EncodeToString(hash[:])
|
||||
if md5Pwd != serviceInfo.Password {
|
||||
response.FailWithMessage("密码不正确", c)
|
||||
return
|
||||
}
|
||||
|
||||
data := map[string]interface{}{}
|
||||
expTime, token, err := tools.GenerateToken(serviceInfo.Id)
|
||||
if err != nil {
|
||||
response.FailWithMessage("登录失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
data["token"] = token
|
||||
data["exp_time"] = expTime
|
||||
response.OkWithDetailed(data, "success", c)
|
||||
}
|
||||
|
||||
// GetScriptList
|
||||
// @Tags sysService
|
||||
// @Summary 客服话术列表
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.PageInfo true "页码, 每页大小"
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "分页客服列表,返回包括列表,总数,页码,每页数量"
|
||||
// @Router /service/get_script_list [get]
|
||||
func (ad *AdminServiceApi) GetScriptList(c *gin.Context) {
|
||||
var pageInfo model.PageInfo
|
||||
if err := c.ShouldBindQuery(&pageInfo); err != nil {
|
||||
response.FailWithMessage("参数错误:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
limit := pageInfo.Limit
|
||||
offset := pageInfo.Limit * (pageInfo.Page - 1)
|
||||
db := global.GVA_DB.Model(&model.SysServiceScript{})
|
||||
var list []model.SysServiceScript
|
||||
var total int64
|
||||
db.Count(&total)
|
||||
err := db.Order("sort desc,add_time desc").Limit(limit).Offset(offset).Find(&list).Error
|
||||
if err != nil {
|
||||
response.FailWithMessage("查询失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
for k, v := range list {
|
||||
t := time.Unix(v.AddTime, 0)
|
||||
v.AddTimeStr = t.Format("2006-01-02 15:04:05")
|
||||
list[k] = v
|
||||
}
|
||||
response.OkWithDetailed(response.PageResult{
|
||||
List: list,
|
||||
Total: total,
|
||||
Page: pageInfo.Page,
|
||||
PageSize: pageInfo.Limit,
|
||||
}, "获取成功", c)
|
||||
}
|
||||
|
||||
// SaveScript
|
||||
// @Tags sysService
|
||||
// @Summary 添加/更新客服话术
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request true ""
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} ""
|
||||
// @Router /service/save_script [post]
|
||||
func (ad *AdminServiceApi) SaveScript(c *gin.Context) {
|
||||
var scriptData model.SysServiceScript
|
||||
if err := c.ShouldBindJSON(&scriptData); err != nil {
|
||||
response.FailWithMessage("参数错误:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
//校验数据
|
||||
ser := service.ServiceGroupApp
|
||||
if err := ser.ValidateScriptData(&scriptData); err != nil {
|
||||
response.FailWithMessage("操作失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
var msg string
|
||||
if scriptData.Id == 0 {
|
||||
scriptData.AddTime = time.Now().Unix()
|
||||
if err := global.GVA_DB.Create(&scriptData).Error; err != nil {
|
||||
response.FailWithMessage("添加失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
msg = "添加成功"
|
||||
} else {
|
||||
if err := global.GVA_DB.Model(&model.SysServiceScript{}).Where("id = ?", scriptData.Id).Updates(scriptData).Error; err != nil {
|
||||
response.FailWithMessage("更新失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
msg = "更新成功"
|
||||
}
|
||||
response.OkWithMessage(msg, c)
|
||||
}
|
||||
|
||||
// DeleteScript
|
||||
// @Tags sysService
|
||||
// @Summary 删除客服话术
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.id true "id"
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "成功消息"
|
||||
// @Router /service/delete_script?id=xxx [delete]
|
||||
func (ad *AdminServiceApi) DeleteScript(c *gin.Context) {
|
||||
idParam := c.Query("id")
|
||||
id, err := strconv.Atoi(idParam)
|
||||
if err != nil {
|
||||
response.FailWithMessage("参数错误:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
var ser model.SysServiceScript
|
||||
if err := global.GVA_DB.First(&ser, id).Error; err != nil {
|
||||
response.FailWithMessage("话术不存在或已删除:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
// 删除
|
||||
if err := global.GVA_DB.Delete(&model.SysServiceScript{}, id).Error; err != nil {
|
||||
response.FailWithMessage("删除失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
response.OkWithMessage("删除成功", c)
|
||||
}
|
||||
|
||||
// FindScript
|
||||
// @Tags sysService
|
||||
// @Summary 查找话术
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.id true "id"
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "成功消息"
|
||||
// @Router /service/find_script?id=xx [get]
|
||||
func (ad *AdminServiceApi) FindScript(c *gin.Context) {
|
||||
idParam := c.Query("id")
|
||||
id, err := strconv.Atoi(idParam)
|
||||
if err != nil {
|
||||
response.FailWithMessage("参数错误:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
var ser model.SysServiceScript
|
||||
if err := global.GVA_DB.First(&ser, id).Error; err != nil {
|
||||
response.FailWithMessage("话术不存在:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
response.OkWithDetailed(ser, "success", c)
|
||||
}
|
||||
|
||||
// AutoReplyList
|
||||
// @Tags sysService
|
||||
// @Summary 自动回复列表
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.PageInfo true "页码, 每页大小"
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "分页客服列表,返回包括列表,总数,页码,每页数量"
|
||||
// @Router /service/auto_reply_list [get]
|
||||
func (ad *AdminServiceApi) AutoReplyList(c *gin.Context) {
|
||||
var pageInfo model.AutoPageInfo
|
||||
if err := c.ShouldBindQuery(&pageInfo); err != nil {
|
||||
response.FailWithMessage("参数错误:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
limit := pageInfo.Limit
|
||||
offset := pageInfo.Limit * (pageInfo.Page - 1)
|
||||
db := global.GVA_DB.Model(&model.SysServiceReply{})
|
||||
var list []model.SysServiceReply
|
||||
var total int64
|
||||
db.Count(&total)
|
||||
err := db.Order("add_time desc").Limit(limit).Offset(offset).Find(&list).Error
|
||||
if err != nil {
|
||||
response.FailWithMessage("查询失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
for k, v := range list {
|
||||
t := time.Unix(v.AddTime, 0)
|
||||
v.AddTimeStr = t.Format("2006-01-02 15:04:05")
|
||||
list[k] = v
|
||||
}
|
||||
response.OkWithDetailed(response.PageResult{
|
||||
List: list,
|
||||
Total: total,
|
||||
Page: pageInfo.Page,
|
||||
PageSize: pageInfo.Limit,
|
||||
}, "获取成功", c)
|
||||
}
|
||||
|
||||
// SaveReply
|
||||
// @Tags sysService
|
||||
// @Summary 添加/更新自动回复
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request true ""
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} ""
|
||||
// @Router /service/save_reply [post]
|
||||
func (ad *AdminServiceApi) SaveReply(c *gin.Context) {
|
||||
var replyData model.SysServiceReply
|
||||
if err := c.ShouldBindJSON(&replyData); err != nil {
|
||||
response.FailWithMessage("参数错误:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
//校验数据
|
||||
ser := service.ServiceGroupApp
|
||||
if err := ser.ValidateReplyData(&replyData); err != nil {
|
||||
response.FailWithMessage("操作失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
var msg string
|
||||
if replyData.Id == 0 {
|
||||
replyData.AddTime = time.Now().Unix()
|
||||
if err := global.GVA_DB.Create(&replyData).Error; err != nil {
|
||||
response.FailWithMessage("添加失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
msg = "添加成功"
|
||||
} else {
|
||||
if err := global.GVA_DB.Model(&model.SysServiceReply{}).Where("id = ?", replyData.Id).Updates(replyData).Error; err != nil {
|
||||
response.FailWithMessage("更新失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
msg = "更新成功"
|
||||
}
|
||||
response.OkWithMessage(msg, c)
|
||||
}
|
||||
|
||||
// DeleteReply
|
||||
// @Tags sysService
|
||||
// @Summary 删除自动回复
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.id true "id"
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "成功消息"
|
||||
// @Router /service/delete_reply?id=xx [delete]
|
||||
func (ad *AdminServiceApi) DeleteReply(c *gin.Context) {
|
||||
idParam := c.Query("id")
|
||||
id, err := strconv.Atoi(idParam)
|
||||
if err != nil {
|
||||
response.FailWithMessage("参数错误:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
var ser model.SysServiceReply
|
||||
if err := global.GVA_DB.First(&ser, id).Error; err != nil {
|
||||
response.FailWithMessage("内容不存在或已删除:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
// 删除数据
|
||||
if err := global.GVA_DB.Delete(&model.SysServiceReply{}, id).Error; err != nil {
|
||||
response.FailWithMessage("删除失败:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
response.OkWithMessage("删除成功", c)
|
||||
}
|
||||
|
||||
// FindReply
|
||||
// @Tags sysService
|
||||
// @Summary 查找自动回复详情
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.id true "id"
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "成功消息"
|
||||
// @Router /service/find_reply?id=xxx [get]
|
||||
func (ad *AdminServiceApi) FindReply(c *gin.Context) {
|
||||
idParam := c.Query("id")
|
||||
id, err := strconv.Atoi(idParam)
|
||||
if err != nil {
|
||||
response.FailWithMessage("参数错误:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
var ser model.SysServiceReply
|
||||
if err := global.GVA_DB.First(&ser, id).Error; err != nil {
|
||||
response.FailWithMessage("自动回复内容不存在:"+err.Error(), c)
|
||||
return
|
||||
}
|
||||
response.OkWithDetailed(ser, "success", c)
|
||||
}
|
||||
Reference in New Issue
Block a user