111 lines
3.5 KiB
Go
111 lines
3.5 KiB
Go
package imports
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"fonchain-fiee/pkg/service"
|
|
"fonchain-fiee/pkg/utils"
|
|
"sort"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func ImageContentGetStatus(c *gin.Context) {
|
|
processor := GetBatchProcessorRead()
|
|
currentStatus := processor.GetStatus()
|
|
service.Success(c, gin.H{"status": currentStatus, "status_description": StatusMap[currentStatus]})
|
|
return
|
|
}
|
|
func ImageContentGetResult(c *gin.Context) {
|
|
processor := GetBatchProcessorRead()
|
|
currentStatus := processor.GetStatus()
|
|
switch currentStatus {
|
|
case StatusIdle:
|
|
service.Success(c, gin.H{
|
|
"status": currentStatus,
|
|
"status_description": StatusMap[currentStatus],
|
|
"message": "暂无执行中的任务",
|
|
})
|
|
return
|
|
|
|
case StatusProcessing:
|
|
completed, pending, total, completedTasks, failedTasks := processor.GetTaskStatistics()
|
|
service.Success(c, gin.H{
|
|
"status": currentStatus,
|
|
"status_description": StatusMap[currentStatus],
|
|
"message": "任务执行中,请稍后",
|
|
"total_tasks": total,
|
|
"pending_tasks": pending,
|
|
"failed_tasks": len(failedTasks), //失败数量
|
|
"success_tasks": len(completedTasks), //成功数量
|
|
"progress": fmt.Sprintf("%.1f%%", float64(completed)/float64(total)*100),
|
|
"completed_tasks": completed,
|
|
"completed_rate": float64(completed) / float64(total) * 100,
|
|
})
|
|
return
|
|
|
|
case StatusCompleted:
|
|
completed, pending, total, completedTasks, failedTasks := processor.GetTaskStatistics()
|
|
service.Success(c, gin.H{
|
|
"status": currentStatus,
|
|
"status_description": StatusMap[currentStatus],
|
|
"message": "所有任务已完成",
|
|
"total_tasks": total,
|
|
"failed_tasks": len(failedTasks), //失败数量
|
|
"success_tasks": len(completedTasks), //成功数量
|
|
"success_rate": fmt.Sprintf("%.1f%%", float64(len(completedTasks))/float64(total)*100),
|
|
"pending_tasks": pending,
|
|
"completed_tasks": completed,
|
|
"completed_rate": float64(completed) / float64(total) * 100,
|
|
}, "任务完成")
|
|
return
|
|
}
|
|
}
|
|
func ImageContentGetResultExcel(c *gin.Context) {
|
|
processor := GetBatchProcessorRead()
|
|
currentStatus := processor.GetStatus()
|
|
switch currentStatus {
|
|
case StatusCompleted:
|
|
_, _, _, _, failedTasks := processor.GetTaskStatistics()
|
|
if len(failedTasks) > 0 {
|
|
if err := returnExcel(failedTasks, c); err != nil {
|
|
service.Error(c, errors.New("生成错误报告失败"))
|
|
return
|
|
}
|
|
return
|
|
} else {
|
|
service.Error(c, errors.New("没有错误"))
|
|
}
|
|
case StatusIdle, StatusProcessing:
|
|
service.Error(c, errors.New("任务未开始或者任务在处理中"))
|
|
return
|
|
}
|
|
}
|
|
|
|
func returnExcel(failedTasks []*ImageTask, c *gin.Context) error {
|
|
titleList := []string{
|
|
"行数", "艺术家", "编号", "错误信息", "任务ID", "开始时间",
|
|
}
|
|
var dataList []interface{}
|
|
for _, task := range failedTasks {
|
|
data := []interface{}{
|
|
task.Data.LineNum,
|
|
task.Data.ArtistName,
|
|
task.Data.SubNum,
|
|
getErrorMessage(task.Error),
|
|
task.TaskID,
|
|
task.StartTime.Format("2006-01-02 15:04:05"),
|
|
}
|
|
dataList = append(dataList, &data)
|
|
}
|
|
sort.Slice(failedTasks, func(i, j int) bool { return failedTasks[i].Data.LineNum < failedTasks[j].Data.LineNum })
|
|
|
|
content, err := utils.ToExcelByType(titleList, dataList, "slice", "")
|
|
if err != nil {
|
|
return fmt.Errorf("生成Excel失败: %v", err)
|
|
}
|
|
utils.ResponseXls(c, content, fmt.Sprintf("失败任务报告_%s.xlsx", time.Now().Format("20060102150405")))
|
|
return nil
|
|
}
|