Files
media/dao/video/concat_task_dao.go
2026-06-10 16:10:10 +08:00

114 lines
3.1 KiB
Go

package video
import (
"context"
"time"
dto "media/model/dto/video"
entity "media/model/entity/video"
"gitea.redpowerfuture.com/red-future/common/db/gfdb"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/gconv"
)
var ConcatTask = new(concatTaskDao)
type concatTaskDao struct{}
const concatTaskTable = "concat_task"
// Insert 创建任务(排除 id 字段,让数据库自增)
func (d *concatTaskDao) Insert(ctx context.Context, data *entity.ConcatTask) (id int64, err error) {
r, err := gfdb.DB(ctx).Model(ctx, concatTaskTable).
Data(data).
FieldsEx(entity.ConcatTaskCols.Id).
Insert()
if err != nil {
return 0, err
}
return r.LastInsertId()
}
// GetByTaskID 根据taskId查询任务
func (d *concatTaskDao) GetByTaskID(ctx context.Context, taskID string) (res *entity.ConcatTask, err error) {
r, err := gfdb.DB(ctx).Model(ctx, concatTaskTable).
Where(entity.ConcatTaskCols.TaskID, taskID).
One()
if err != nil {
return nil, err
}
if r == nil {
return nil, nil
}
err = r.Struct(&res)
return
}
// UpdateRunning 更新为运行中
func (d *concatTaskDao) UpdateRunning(ctx context.Context, taskID string) error {
_, err := gfdb.DB(ctx).Model(ctx, concatTaskTable).
Data(g.Map{
entity.ConcatTaskCols.Status: "running",
}).
Where(entity.ConcatTaskCols.TaskID, taskID).
Update()
return err
}
// UpdateSuccess 更新为成功
func (d *concatTaskDao) UpdateSuccess(ctx context.Context, taskID string, fileURL string, fileSize int64, fileName, fileFormat, fileAddrPrefix, methodUsed, durationStr string) error {
_, err := gfdb.DB(ctx).Model(ctx, concatTaskTable).
Data(g.Map{
entity.ConcatTaskCols.Status: "success",
entity.ConcatTaskCols.FileURL: fileURL,
entity.ConcatTaskCols.FileSize: fileSize,
entity.ConcatTaskCols.FileName: fileName,
entity.ConcatTaskCols.FileFormat: fileFormat,
entity.ConcatTaskCols.FileAddressPrefix: fileAddrPrefix,
entity.ConcatTaskCols.MethodUsed: methodUsed,
entity.ConcatTaskCols.DurationStr: durationStr,
entity.ConcatTaskCols.ErrorMessage: "",
}).
Where(entity.ConcatTaskCols.TaskID, taskID).
Update()
return err
}
// UpdateError 更新为失败
func (d *concatTaskDao) UpdateError(ctx context.Context, taskID string, errMsg string) error {
_, err := gfdb.DB(ctx).Model(ctx, concatTaskTable).
Data(g.Map{
entity.ConcatTaskCols.Status: "failed",
entity.ConcatTaskCols.ErrorMessage: errMsg,
}).
Where(entity.ConcatTaskCols.TaskID, taskID).
Update()
return err
}
// EntityToTaskRes 实体转DTO
func EntityToTaskRes(e *entity.ConcatTask) *dto.GetConcatTaskRes {
res := &dto.GetConcatTaskRes{
TaskID: e.TaskID,
Status: e.Status,
CreatedAt: gconv.Int64(e.CreatedAt.Timestamp()),
}
if e.CreatedAt == nil {
res.CreatedAt = time.Now().UnixMilli()
}
if e.Status == "success" {
res.FileURL = e.FileURL
res.FileSize = e.FileSize
res.FileName = e.FileName
res.FileFormat = e.FileFormat
res.FileAddressPrefix = e.FileAddressPrefix
res.MethodUsed = e.MethodUsed
res.DurationStr = e.DurationStr
}
if e.Status == "failed" {
res.ErrorMessage = e.ErrorMessage
}
return res
}