🎨 添加图库和客服插件(有问题-待修改)

This commit is contained in:
2025-05-14 16:51:31 +08:00
parent 5faff4afa0
commit a5ae680f94
41 changed files with 2592 additions and 12 deletions

View File

@@ -0,0 +1,130 @@
package service
import (
"encoding/base64"
"errors"
"git.echol.cn/loser/lckt/global"
"git.echol.cn/loser/lckt/model/user"
"git.echol.cn/loser/lckt/plugin/customerservice/model"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"time"
)
type CustomerServiceService struct{}
func (e *CustomerServiceService) PlugService() (err error) {
// 写你的业务逻辑
return nil
}
func (e *CustomerServiceService) ValidateServiceData(sys *model.SysService) error {
if sys.Uid == 0 {
return errors.New("客服关联的用户id不能为空")
} else {
db := global.GVA_DB.Model(&model.SysService{})
if sys.Id > 0 {
db = db.Where("uid=?", sys.Uid).Where("id<>?", sys.Id)
} else {
db = db.Where("uid=?", sys.Uid)
}
var dCount int64
db.Count(&dCount)
if dCount > 0 {
return errors.New("用户id已关联其他客服请重新输入")
}
}
db := global.GVA_DB.Model(&model.SysService{})
if sys.Id == 0 {
if sys.Password == "" {
return errors.New("客服密码必须填写")
}
db = db.Where("account=?", sys.Account)
} else {
db = db.Where("account=?", sys.Account).Where("id<>?", sys.Id)
var dCount int64
db.Count(&dCount)
if dCount > 0 {
return errors.New("账户已存在,请重新输入")
}
}
if sys.Account == "" {
return errors.New("客服账户必须填写")
}
if sys.Nickname == "" {
return errors.New("客服名称必须填写")
}
if sys.Avatar == "" {
return errors.New("客服头像必须选择")
}
return nil
}
func (e *CustomerServiceService) ValidateScriptData(sys *model.SysServiceScript) error {
if sys.Title == "" {
return errors.New("话术标题必须填写")
}
if sys.Content == "" {
return errors.New("话术内容必须填写")
}
return nil
}
func (e *CustomerServiceService) ValidateReplyData(sys *model.SysServiceReply) error {
if sys.Keyword == "" {
return errors.New("关键字必须填写")
}
if sys.Content == "" {
return errors.New("回复内容必须填写")
}
return nil
}
func (e *CustomerServiceService) GetUrlHost(c *gin.Context) string {
host := c.Request.Host
scheme := "http"
if c.Request.TLS != nil {
scheme = "https"
}
referer := c.Request.Referer()
if referer != "" {
return referer
}
return scheme + "://" + host + "/"
}
func (e *CustomerServiceService) CreateMsg(kfInfo model.SysService, userInfo user.User, msgType int64, content string, isKf string) (err error) {
msgRecord := &model.SysServiceRecord{
ServiceId: kfInfo.Id,
Uid: int64(userInfo.ID),
Message: base64.StdEncoding.EncodeToString([]byte(content)),
MessageType: msgType,
UpdateTime: time.Now().Unix(),
Avatar: userInfo.Avatar,
Nickname: userInfo.NickName,
Online: 1,
}
var record model.SysServiceRecord
eErr := global.GVA_DB.Where("service_id = ?", kfInfo.Id).Where("uid = ?", userInfo.ID).First(&record).Error
if errors.Is(eErr, gorm.ErrRecordNotFound) {
msgRecord.AddTime = time.Now().Unix()
global.GVA_DB.Create(msgRecord)
} else {
global.GVA_DB.Model(&model.SysServiceRecord{}).Where("id = ?", record.Id).Updates(msgRecord)
}
//插入消息记录
msg := map[string]interface{}{
"service_id": kfInfo.Id,
"uid": userInfo.ID,
"content": base64.StdEncoding.EncodeToString([]byte(content)),
"msg_type": msgType,
"is_view": 0,
"add_time": time.Now().Unix(),
"is_kf": isKf,
}
err = global.GVA_DB.Model(&model.SysServiceMsg{}).Create(msg).Error
return err
}