feat: 添加客服账号管理及WebSocket功能

This commit is contained in:
2026-04-03 17:52:09 +08:00
parent b7cce0befa
commit 7416bf8d96
20 changed files with 1065 additions and 74 deletions

View File

@@ -0,0 +1,64 @@
// Package controller - 客服账号控制器
// 功能:客服账号的增删改查、状态切换
package controller
import (
"context"
"customer-server/model/dto"
"customer-server/service"
"gitea.com/red-future/common/beans"
"github.com/gogf/gf/v2/frame/g"
)
var Account = new(account)
type account struct{}
// Add 添加客服账号
// 参数: req - 添加客服账号请求,包含客服账号名称、平台等信息
// 返回: res - 添加成功后的客服账号ID等信息
// 功能: 创建新的客服账号记录
func (c *account) Add(ctx context.Context, req *dto.AddAccountReq) (res *dto.AddAccountRes, err error) {
res, err = service.AccountService.Add(ctx, req)
return
}
// Update 更新客服账号
// 参数: req - 更新客服账号请求包含客服账号ID和待更新字段
// 返回: res - 空响应成功则err为nil
// 功能: 更新客服账号信息
func (c *account) Update(ctx context.Context, req *dto.UpdateAccountReq) (res *beans.ResponseEmpty, err error) {
err = service.AccountService.Update(ctx, req)
return
}
// Delete 删除客服账号
// 参数: req - 删除客服账号请求包含客服账号ID
// 返回: res - 空响应成功则err为nil
// 功能: 逻辑删除客服账号记录
func (c *account) Delete(ctx context.Context, req *dto.DeleteAccountReq) (res *beans.ResponseEmpty, err error) {
err = service.AccountService.Delete(ctx, req)
return
}
// Get 获取单个客服账号
// 参数: req - 获取客服账号请求包含客服账号ID
// 返回: res - 客服账号信息
// 功能: 根据ID获取单个客服账号详情
func (c *account) Get(ctx context.Context, req *dto.GetAccountReq) (res *dto.AccountVO, err error) {
res, err = service.AccountService.Get(ctx, req)
return
}
// List 获取客服账号列表
// 参数: req - 列表查询请求,支持分页、账号名称、状态、平台筛选
// 返回: res - 客服账号列表及分页信息
// 功能: 分页查询客服账号记录
func (c *account) List(ctx context.Context, req *dto.ListAccountReq) (res *dto.ListAccountRes, err error) {
if !g.IsEmpty(req.Page) {
req.Page = &beans.Page{PageNum: 1, PageSize: 20}
}
res, err = service.AccountService.List(ctx, req)
return
}

View File

@@ -0,0 +1,26 @@
// Package controller - WebSocket控制器
// 功能WebSocket连接管理、实时消息推送
package controller
import (
"context"
"customer-server/model/dto"
"customer-server/service"
"gitea.com/red-future/common/beans"
"github.com/gogf/gf/v2/frame/g"
)
var AccountWebsocket = new(accountWebSocket)
type accountWebSocket struct{}
// Connect WebSocket连接
// 参数: req - WebSocket连接请求包含用户ID和平台信息
// 返回: res - 连接结果实际通过WebSocket协议通信
// 功能: 升级HTTP连接为WebSocket建立实时通信通道
func (c *accountWebSocket) Connect(ctx context.Context, req *dto.AccountWebSocketConnectReq) (res *beans.ResponseEmpty, err error) {
r := g.RequestFromCtx(ctx)
err = service.AccountWebSocket.Connect(ctx, r, req.AccountName, req.Platform)
return
}

View File

@@ -0,0 +1,64 @@
// Package controller - 预制话术控制器
// 功能:预制话术的增删改查
package controller
import (
"context"
"customer-server/model/dto"
"customer-server/service"
"gitea.com/red-future/common/beans"
"github.com/gogf/gf/v2/frame/g"
)
var ScriptedSpeech = new(scriptedSpeech)
type scriptedSpeech struct{}
// Add 添加预制话术
// 参数: req - 添加预制话术请求包含账号ID、数据集ID、问题、回答等信息
// 返回: res - 添加成功后的预制话术ID等信息
// 功能: 创建新的预制话术记录
func (c *scriptedSpeech) Add(ctx context.Context, req *dto.AddScriptedSpeechReq) (res *dto.AddScriptedSpeechRes, err error) {
res, err = service.ScriptedSpeech.Add(ctx, req)
return
}
// Update 更新预制话术
// 参数: req - 更新预制话术请求包含预制话术ID和待更新字段
// 返回: res - 空响应成功则err为nil
// 功能: 更新预制话术信息
func (c *scriptedSpeech) Update(ctx context.Context, req *dto.UpdateScriptedSpeechReq) (res *beans.ResponseEmpty, err error) {
err = service.ScriptedSpeech.Update(ctx, req)
return
}
// Delete 删除预制话术
// 参数: req - 删除预制话术请求包含预制话术ID
// 返回: res - 空响应成功则err为nil
// 功能: 逻辑删除预制话术记录
func (c *scriptedSpeech) Delete(ctx context.Context, req *dto.DeleteScriptedSpeechReq) (res *beans.ResponseEmpty, err error) {
err = service.ScriptedSpeech.Delete(ctx, req)
return
}
// Get 获取单个预制话术
// 参数: req - 获取预制话术请求包含预制话术ID
// 返回: res - 预制话术信息
// 功能: 根据ID获取单个预制话术详情
func (c *scriptedSpeech) Get(ctx context.Context, req *dto.GetScriptedSpeechReq) (res *dto.ScriptedSpeechVO, err error) {
res, err = service.ScriptedSpeech.Get(ctx, req)
return
}
// List 获取预制话术列表
// 参数: req - 列表查询请求支持分页、账号ID、数据集ID筛选
// 返回: res - 预制话术列表及分页信息
// 功能: 分页查询预制话术记录
func (c *scriptedSpeech) List(ctx context.Context, req *dto.ListScriptedSpeechReq) (res *dto.ListScriptedSpeechRes, err error) {
if g.IsEmpty(req.Page) {
req.Page = &beans.Page{PageNum: 1, PageSize: 20}
}
res, err = service.ScriptedSpeech.List(ctx, req)
return
}