201 lines
5.2 KiB
Go
201 lines
5.2 KiB
Go
package cast
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"fonchain-fiee/cmd/config"
|
|
"fonchain-fiee/pkg/service/upload"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
|
|
"fonchain-fiee/api/cast"
|
|
modelCast "fonchain-fiee/pkg/model/cast"
|
|
"fonchain-fiee/pkg/model/login"
|
|
"fonchain-fiee/pkg/service"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/xuri/excelize/v2"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func TaskList(ctx *gin.Context) {
|
|
var req *cast.ListTaskListReq
|
|
var err error
|
|
if err = ctx.ShouldBind(&req); err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
loginInfo := login.GetUserInfoFromC(ctx)
|
|
req.OperatorID = fmt.Sprint(loginInfo.ID)
|
|
resp, err := service.CastProvider.ListTaskList(context.Background(), req)
|
|
if err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
service.Success(ctx, resp)
|
|
}
|
|
|
|
func DeleteTasK(ctx *gin.Context) {
|
|
var req *cast.DeleteTaskListReq
|
|
var err error
|
|
if err = ctx.ShouldBind(&req); err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
//loginInfo := login.GetUserInfoFromC(ctx)
|
|
//req.OperatorID = fmt.Sprint(loginInfo.ID)
|
|
resp, err := service.CastProvider.DeleteTaskList(context.Background(), req)
|
|
if err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
service.Success(ctx, resp)
|
|
}
|
|
|
|
func DownloadTaskFile(ctx *gin.Context) {
|
|
var req *cast.GetTaskListReq
|
|
var err error
|
|
if err = ctx.ShouldBind(&req); err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
resp, err := service.CastProvider.GetTaskList(context.Background(), req)
|
|
if err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
if resp == nil || resp.Data == nil {
|
|
service.Error(ctx, errors.New("没有此任务"))
|
|
return
|
|
}
|
|
|
|
var taskInfo modelCast.PublishTaskDto
|
|
if resp.Data.ExtraData != "" {
|
|
_ = json.Unmarshal([]byte(resp.Data.ExtraData), &taskInfo)
|
|
}
|
|
exportUrl, err := PublishTaskExcel(taskInfo.WorkUuids, false, resp.Data.Action)
|
|
if err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
service.Success(ctx, gin.H{
|
|
"url": exportUrl,
|
|
})
|
|
}
|
|
|
|
func PublishTaskExcel(workUuids []string, uploadOss bool, action string) (string, error) {
|
|
// 创建Excel文件
|
|
f := excelize.NewFile()
|
|
sheetName := "Sheet1"
|
|
f.SetSheetName("Sheet1", sheetName)
|
|
// 设置表头
|
|
headers := []interface{}{
|
|
"艺人编号", "艺人姓名", "内容类型", "内容标题",
|
|
"执行结果", "TIKTOK", "YOUTUBE", "INS", "DM", "BULESKY",
|
|
}
|
|
sw, err := f.NewStreamWriter(sheetName)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
if err = sw.SetRow("A1", headers); err != nil {
|
|
return "", err
|
|
}
|
|
// 遍历所有作品,收集数据
|
|
rowIndex := 2
|
|
for _, workUuid := range workUuids {
|
|
var workResp *cast.WorkDetailResp
|
|
workResp, err = service.CastProvider.WorkDetail(context.Background(), &cast.WorkDetailReq{WorkUuid: workUuid})
|
|
if err != nil {
|
|
continue // 如果某个作品获取失败,跳过继续处理其他作品
|
|
}
|
|
// 内容类型
|
|
contentType := ""
|
|
if workResp.WorkCategory == 1 {
|
|
contentType = "图文"
|
|
} else if workResp.WorkCategory == 2 {
|
|
contentType = "视频"
|
|
}
|
|
// 执行结果
|
|
executionResult := modelCast.WorkStatusMM[int(workResp.WorkStatus)]
|
|
tiktokStatus := ""
|
|
youtubeStatus := ""
|
|
insStatus := ""
|
|
dmStatus := ""
|
|
blueskyStatus := ""
|
|
|
|
// 获取平台信息和艺人姓名
|
|
artistName := ""
|
|
var infoResp *cast.WorkInfoResp
|
|
infoResp, err = service.CastProvider.WorkInfo(context.Background(), &cast.WorkInfoReq{WorkUuid: workUuid})
|
|
if err == nil && infoResp != nil {
|
|
artistName = infoResp.ArtistName
|
|
if infoResp.PlatformInfoData != nil {
|
|
for _, platform := range infoResp.PlatformInfoData {
|
|
statusText := modelCast.PlatformPublishStatusMM[platform.PublishMediaStatus]
|
|
switch cast.PlatformIDENUM(platform.PlatformID) {
|
|
case cast.PlatformIDENUM_TIKTOK:
|
|
tiktokStatus = statusText
|
|
case cast.PlatformIDENUM_YOUTUBE:
|
|
youtubeStatus = statusText
|
|
case cast.PlatformIDENUM_INS:
|
|
insStatus = statusText
|
|
case cast.PlatformIDENUM_DM:
|
|
dmStatus = statusText
|
|
case cast.PlatformIDENUM_BULESKY:
|
|
blueskyStatus = statusText
|
|
}
|
|
}
|
|
}
|
|
}
|
|
row := []interface{}{
|
|
workResp.ArtistSubNum,
|
|
artistName,
|
|
contentType,
|
|
workResp.Title,
|
|
executionResult,
|
|
tiktokStatus,
|
|
youtubeStatus,
|
|
insStatus,
|
|
dmStatus,
|
|
blueskyStatus,
|
|
}
|
|
cell, _ := excelize.CoordinatesToCellName(1, rowIndex)
|
|
if err = sw.SetRow(cell, row); err != nil {
|
|
continue
|
|
}
|
|
rowIndex++
|
|
}
|
|
if err = sw.Flush(); err != nil {
|
|
zap.L().Error("PublishTaskExcel Flush err", zap.Error(err))
|
|
return "", errors.New("生成Excel文件失败")
|
|
}
|
|
tempDir := "./runtime/task"
|
|
if _, err = os.Stat(tempDir); os.IsNotExist(err) {
|
|
if err = os.MkdirAll(tempDir, 0755); err != nil {
|
|
return "", err
|
|
}
|
|
}
|
|
TaskActionName, ok := modelCast.TaskActionName[action]
|
|
if !ok {
|
|
TaskActionName = "未知任务"
|
|
}
|
|
filename := fmt.Sprintf("%s_%s.xlsx", TaskActionName, time.Now().Format("20060102150405"))
|
|
filePath := tempDir + "/" + filename
|
|
var exportUrl string = fmt.Sprintf("%s/api/fiee/static/%s", config.AppConfig.System.FieeHost, strings.Replace(filePath, "./runtime/", "", 1))
|
|
if err = f.SaveAs(filePath); err != nil {
|
|
zap.L().Error("PublishTaskExcel SaveAs err", zap.Error(err))
|
|
return "", errors.New("保存Excel文件失败")
|
|
}
|
|
if uploadOss {
|
|
// 上传到阿里云
|
|
exportUrl, err = upload.PutBos(filePath, "excel", true)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
}
|
|
return exportUrl, nil
|
|
}
|