Files
ai-agent/digital-human/dao/custom_voice_dao.go
2026-06-10 15:29:21 +08:00

136 lines
3.7 KiB
Go

package dao
import (
"ai-agent/digital-human/consts/public"
"ai-agent/digital-human/model/dto"
"ai-agent/digital-human/model/entity"
"context"
"gitea.redpowerfuture.com/red-future/common/beans"
"gitea.redpowerfuture.com/red-future/common/db/gfdb"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/util/gconv"
)
// CustomVoice 自定义音色数据访问层
var CustomVoice = &customVoice{}
type customVoice struct{}
// Insert 插入自定义音色
func (d *customVoice) Insert(ctx context.Context, req *dto.CreateCustomVoiceReq) (id int64, err error) {
var result *entity.CustomVoice
if err = gconv.Struct(req, &result); err != nil {
return
}
// 初始状态:生成中
result.Status = 0
r, err := gfdb.DB(ctx).Model(ctx, public.TableNameCustomVoice).Data(&result).Insert()
if err != nil {
return
}
return r.LastInsertId()
}
func (d *customVoice) UpdateReferenceAudio(ctx context.Context, id int64, referenceAudio []byte) (rows int64, err error) {
r, err := gfdb.DB(ctx).Model(ctx, public.TableNameCustomVoice).
Where(entity.CustomVoiceCol.Id, id).
Data(gdb.Map{
entity.CustomVoiceCol.ReferenceAudio: referenceAudio,
}).
Update()
if err != nil {
return
}
return r.RowsAffected()
}
func (d *customVoice) UpdateDescription(ctx context.Context, id int64, description string) (rows int64, err error) {
r, err := gfdb.DB(ctx).Model(ctx, public.TableNameCustomVoice).
Where(entity.CustomVoiceCol.Id, id).
Data(gdb.Map{
entity.CustomVoiceCol.Description: description,
}).
Update()
if err != nil {
return
}
return r.RowsAffected()
}
// UpdateStatus 更新自定义音色状态/结果
func (d *customVoice) UpdateStatus(ctx context.Context, id int64, status int, errorMsg string, ossFile string) (rows int64, err error) {
data := gdb.Map{
entity.CustomVoiceCol.Status: status,
}
if errorMsg != "" {
data[entity.CustomVoiceCol.ErrorMsg] = errorMsg
}
if ossFile != "" {
data[entity.CustomVoiceCol.OssFile] = ossFile
}
r, err := gfdb.DB(ctx).Model(ctx, public.TableNameCustomVoice).
Where(entity.CustomVoiceCol.Id, id).
Data(data).
Update()
if err != nil {
return 0, err
}
return r.RowsAffected()
}
// Delete 删除自定义音色
func (d *customVoice) Delete(ctx context.Context, id int64) (rows int64, err error) {
r, err := gfdb.DB(ctx).Model(ctx, public.TableNameCustomVoice).Where(entity.CustomVoiceCol.Id, id).Delete()
if err != nil {
return
}
return r.RowsAffected()
}
// GetOne 获取单个自定义音色
func (d *customVoice) GetOne(ctx context.Context, id int64) (customVoice *entity.CustomVoice, err error) {
r, err := gfdb.DB(ctx).Model(ctx, public.TableNameCustomVoice).Where(entity.CustomVoiceCol.Id, id).One()
if err != nil {
return
}
err = r.Struct(&customVoice)
return
}
// List 获取自定义音色列表
func (d *customVoice) List(ctx context.Context, req *dto.ListCustomVoiceReq) (res []*entity.CustomVoice, total int, err error) {
model := gfdb.DB(ctx).Model(ctx, public.TableNameCustomVoice)
// 处理分页
if req.Page == nil {
req.Page = &beans.Page{PageNum: 1, PageSize: 20}
}
r, total, err := model.OrderDesc(entity.CustomVoiceCol.CreatedAt).Page(int(req.Page.PageNum), int(req.Page.PageSize)).AllAndCount(false)
if err != nil {
return
}
err = r.Structs(&res)
return
}
// GetCustomVoiceItem 转换为 DTO 列表项
func (d *customVoice) GetCustomVoiceItem(entity *entity.CustomVoice) *dto.CustomVoiceItem {
item := &dto.CustomVoiceItem{
ID: gconv.String(entity.Id),
Name: entity.Name,
Description: entity.Description,
Status: entity.Status,
ErrorMsg: entity.ErrorMsg,
OssFile: entity.OssFile,
}
if entity.CreatedAt != nil {
item.CreatedAt = entity.CreatedAt
}
if entity.UpdatedAt != nil {
item.UpdatedAt = entity.UpdatedAt
}
return item
}