EasyAudioEncode/internal/web/api/audiotask.go
2025-12-31 11:29:58 +08:00

132 lines
4.1 KiB
Go

package api
import (
"easyaudioencode/internal/core/audioencode"
"fmt"
"git.lnton.com/lnton/pkg/reason"
"github.com/gin-gonic/gin"
"strconv"
)
func (a AudioEncodeAPI) findAudioTask(c *gin.Context, in *audioencode.FindAudioTaskInput) (any, error) {
items, total, err := a.core.FindAudioTask(c.Request.Context(), in)
rows := make([]map[string]interface{}, 0)
for _, item := range items {
//row := structs.Map(item)
row := make(map[string]interface{})
row["audio_id"] = item.AudioID
row["audio_name"] = item.AudioName
row["channel_id"] = item.ChannelID
row["channel_name"] = item.ChannelName
row["size"] = item.Size
row["duration"] = item.Duration
row["id"] = item.ID
row["mode"] = item.Mode
row["created_at"] = item.CreatedAt
row["updated_at"] = item.UpdatedAt
row["task_status"] = item.TaskStatus
row["error_msg"] = item.ErrorMsg
task, errs := a.transcodeCore.GetTaskInfo(item.ID)
if errs == nil {
row["task_status"] = task.Status
row["end_time"] = task.EndTime
row["create_time"] = task.CreateTime
row["start_time"] = task.StartTime
} else {
if item.TaskStatus == 1 || item.TaskStatus == 0 {
row["task_status"] = 2
}
}
rows = append(rows, row)
}
return gin.H{"items": rows, "total": total}, err
}
func (a AudioEncodeAPI) addAudioTask(c *gin.Context, in *audioencode.AddAudioTaskInput) (any, error) {
if len(in.Items) == 0 {
return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`add audioencode Items is empty`))
}
var outputList []audioencode.AddErrorOutput
for _, item := range in.Items {
audioInfo, err := a.core.GetAudioEncode(c.Request.Context(), item.AudioID)
if err != nil {
list := audioencode.AddErrorOutput{
AudioID: item.AudioID,
ChannelID: item.ChannelID,
ErrorMsg: fmt.Sprintf(`find audioencode [%d] err [%s]`, item.AudioID, err.Error()),
ChannelName: item.ChannelName,
}
outputList = append(outputList, list)
continue
}
inAdd := &audioencode.AddAudioTask{
AudioID: item.AudioID,
ChannelID: item.ChannelID,
ChannelName: item.ChannelName,
Size: audioInfo.Size,
Duration: audioInfo.Duration,
AudioName: audioInfo.Name,
Mode: audioInfo.Mode,
}
info, err := a.core.AddAudioTask(c.Request.Context(), inAdd)
if err != nil {
list := audioencode.AddErrorOutput{
AudioID: item.AudioID,
ChannelID: item.ChannelID,
ErrorMsg: fmt.Sprintf(`find audioencode [%d] err [%s]`, item.AudioID, err.Error()),
ChannelName: item.ChannelName,
}
outputList = append(outputList, list)
continue
}
err = a.transcodeCore.AddTask(info.ID, info.ChannelID, audioInfo.EncodeUrl, audioInfo.Duration)
if err != nil {
list := audioencode.AddErrorOutput{
AudioID: item.AudioID,
ChannelID: item.ChannelID,
ErrorMsg: fmt.Sprintf(`find audioencode [%d] err [%s]`, item.AudioID, err.Error()),
ChannelName: item.ChannelName,
}
outputList = append(outputList, list)
continue
}
}
if len(outputList) == 0 {
return gin.H{"data": "ok", "msg": "下发成功"}, nil
}
return gin.H{"data": outputList, "msg": "下发失败通道!"}, nil
}
func (a AudioEncodeAPI) cancelAudioTask(c *gin.Context, _ *struct{}) (any, error) {
ID, _ := strconv.Atoi(c.Param("id"))
err := a.transcodeCore.CancelTask(ID)
if err != nil {
return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`add CancelTask err [%s]`, err.Error()))
}
return gin.H{"data": "OK!"}, err
}
func (a AudioEncodeAPI) delAudioTask(c *gin.Context, _ *struct{}) (any, error) {
ID, _ := strconv.Atoi(c.Param("id"))
_, err := a.core.DelAudioTask(c.Request.Context(), ID)
if err != nil {
return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`del audioencode [%d] err [%s]`, ID, err.Error()))
}
return gin.H{"data": "OK!"}, err
}
func (a AudioEncodeAPI) delAudioTaskAll(c *gin.Context, in *audioencode.DelAudioTaskInput) (any, error) {
if len(in.IDs) == 0 {
return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`del audioencode ids is empty`))
}
_, err := a.core.DelAudioTaskAll(c.Request.Context(), in.IDs)
if err != nil {
return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`del audioencode [%d] err [%s]`, in.IDs, err.Error()))
}
return gin.H{"data": "OK!"}, err
}