feat:ai生成图文
This commit is contained in:
parent
a60132086d
commit
a093ab9e9c
@ -190,7 +190,6 @@ func NewRouter() *gin.Engine {
|
||||
}
|
||||
{
|
||||
importRoute := v1.Group("/import")
|
||||
importRoute.GET("generate/photo/test2", imports.Test2)
|
||||
importRoute.Use(middleware.CheckWebLogin(service.AccountProvider))
|
||||
importRoute.POST("data/bind", imports.ImportBind)
|
||||
importRoute.POST("data/publish", imports.ImportPublish)
|
||||
@ -198,13 +197,13 @@ func NewRouter() *gin.Engine {
|
||||
importRoute.POST("data/publish3", imports.ImportPublishV3)
|
||||
importRoute.POST("data/publish4", imports.ImportPublishV4)
|
||||
importRoute.POST("data/confirm", imports.WorkConfirm)
|
||||
importRoute.GET("image-content/status", imports.ImageContentGetStatus) // 获取处理结果
|
||||
importRoute.POST("image-content/import", imports.ImageContentImport) // AI生成内容并导入系统
|
||||
importRoute.GET("image-content/result", imports.ImageContentGetResult) // 获取导入结果
|
||||
importRoute.GET("image-content/result/excel", imports.ImageContentGetResultExcel) // 导出错误的excel
|
||||
|
||||
importRoute.GET("generate/photo/test", imports.Test)
|
||||
importRoute.GET("generate/photo/test1", imports.Test1)
|
||||
importRoute.GET("generate/photo/test2", imports.Test2)
|
||||
|
||||
}
|
||||
//静态文件
|
||||
|
||||
@ -11,14 +11,8 @@ import (
|
||||
"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 := GetBatchProcessorEx()
|
||||
processor := GetBatchProcessorRead()
|
||||
if processor == nil {
|
||||
service.Success(c, gin.H{
|
||||
"status": 0,
|
||||
@ -72,6 +66,10 @@ func ImageContentGetResult(c *gin.Context) {
|
||||
}
|
||||
func ImageContentGetResultExcel(c *gin.Context) {
|
||||
processor := GetBatchProcessorRead()
|
||||
if processor == nil {
|
||||
service.Error(c, errors.New("任务未开始或者任务在处理中"))
|
||||
return
|
||||
}
|
||||
currentStatus := processor.GetStatus()
|
||||
switch currentStatus {
|
||||
case StatusCompleted:
|
||||
|
||||
@ -109,8 +109,6 @@ func ImageContentImport(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
processor.SetStatus(StatusProcessing)
|
||||
processor = GetBatchProcessorRead()
|
||||
|
||||
qps := 10
|
||||
interval := time.Second / time.Duration(qps)
|
||||
|
||||
|
||||
@ -35,8 +35,7 @@ const (
|
||||
|
||||
var (
|
||||
batchProcessor *BatchProcessor
|
||||
getBatchProcessorReadMutex sync.Mutex
|
||||
getBatchProcessorMutex sync.Mutex
|
||||
RwWMutex sync.RWMutex
|
||||
)
|
||||
|
||||
const (
|
||||
@ -67,28 +66,15 @@ type ImageTask struct {
|
||||
Content string //内容
|
||||
}
|
||||
|
||||
func GetBatchProcessorEx() *BatchProcessor {
|
||||
return batchProcessor
|
||||
}
|
||||
|
||||
func GetBatchProcessorRead() *BatchProcessor {
|
||||
getBatchProcessorReadMutex.Lock()
|
||||
defer getBatchProcessorReadMutex.Unlock()
|
||||
|
||||
if batchProcessor == nil {
|
||||
batchProcessor = &BatchProcessor{
|
||||
tasks: make(map[string]*ImageTask),
|
||||
inProgress: make(map[string]bool),
|
||||
pollInterval: 100 * time.Millisecond,
|
||||
status: StatusIdle,
|
||||
}
|
||||
}
|
||||
RwWMutex.RLock() //
|
||||
defer RwWMutex.RUnlock()
|
||||
return batchProcessor
|
||||
}
|
||||
|
||||
func GetBatchProcessor() *BatchProcessor {
|
||||
getBatchProcessorReadMutex.Lock()
|
||||
defer getBatchProcessorReadMutex.Unlock()
|
||||
RwWMutex.Lock()
|
||||
defer RwWMutex.Unlock()
|
||||
|
||||
if batchProcessor == nil || batchProcessor.status == StatusCompleted {
|
||||
batchProcessor = &BatchProcessor{
|
||||
@ -326,7 +312,6 @@ func (p *BatchProcessor) StartPolling() {
|
||||
defer ticker.Stop()
|
||||
|
||||
for range ticker.C {
|
||||
fmt.Println(1)
|
||||
if p.IsAllCompleted() {
|
||||
p.SetStatus(StatusCompleted)
|
||||
zap.L().Info("所有任务已完成,停止轮询")
|
||||
@ -335,7 +320,6 @@ func (p *BatchProcessor) StartPolling() {
|
||||
}
|
||||
for i, v := range p.inProgress {
|
||||
if !v {
|
||||
fmt.Println(2)
|
||||
if err := p.UpdateTaskStatuses(i); err != nil {
|
||||
zap.L().Error("批量更新任务状态失败: %v", zap.Error(err))
|
||||
continue
|
||||
@ -460,14 +444,14 @@ func (p *BatchProcessor) IsAllCompleted() bool {
|
||||
func (p *BatchProcessor) UpdateTaskStatuses(taskId string) (err error) {
|
||||
p.mu.Lock()
|
||||
defer p.mu.Unlock()
|
||||
if p.tasks[taskId].Data.PhotoUrl != "" {
|
||||
//生成标题
|
||||
if p.tasks[taskId].Data.PhotoUrl != "" { //如果有图片
|
||||
title, content, err := p.generateTitleAndContent(p.tasks[taskId].Data)
|
||||
if err != nil {
|
||||
p.tasks[taskId].Status = TaskFailed
|
||||
p.inProgress[taskId] = true
|
||||
p.tasks[taskId].EndTime = time.Now()
|
||||
p.tasks[taskId].Error = fmt.Errorf("生成标题和内容失败: %v", err)
|
||||
zap.L().Error("生成标题和内容失败: %v", zap.Error(err))
|
||||
p.tasks[taskId].Error = fmt.Errorf("生成标题和内容失败")
|
||||
return err
|
||||
}
|
||||
p.tasks[taskId].Title = title
|
||||
@ -487,7 +471,8 @@ func (p *BatchProcessor) UpdateTaskStatuses(taskId string) (err error) {
|
||||
p.tasks[taskId].Status = TaskFailed
|
||||
p.inProgress[taskId] = true
|
||||
p.tasks[taskId].EndTime = time.Now()
|
||||
p.tasks[taskId].Error = fmt.Errorf("发布内容失败: %v", err)
|
||||
zap.L().Error("发布内容失败: %v", zap.Error(err))
|
||||
p.tasks[taskId].Error = fmt.Errorf("发布内容失败")
|
||||
}
|
||||
p.tasks[taskId].Status = TaskSuccessful
|
||||
p.inProgress[taskId] = true
|
||||
@ -497,7 +482,8 @@ func (p *BatchProcessor) UpdateTaskStatuses(taskId string) (err error) {
|
||||
|
||||
getTaskDetailRes, err := NewAiGenerator().GetTaskDetail(taskId)
|
||||
if err != nil {
|
||||
return fmt.Errorf("查看图片生成结果失败: %v", err)
|
||||
zap.L().Error("查看图片生成结果失败: %v", zap.Error(err))
|
||||
return fmt.Errorf("查看图片生成结果失败")
|
||||
}
|
||||
// 更新本地任务状态
|
||||
if localTask, exists := p.tasks[getTaskDetailRes.Output.TaskID]; exists {
|
||||
@ -507,17 +493,17 @@ func (p *BatchProcessor) UpdateTaskStatuses(taskId string) (err error) {
|
||||
//生成标题
|
||||
title, content, err := p.generateTitleAndContent(p.tasks[taskId].Data)
|
||||
if err != nil {
|
||||
zap.L().Debug("生成标题失败")
|
||||
localTask.Status = TaskFailed
|
||||
p.tasks[getTaskDetailRes.Output.TaskID].Error = err
|
||||
p.inProgress[getTaskDetailRes.Output.TaskID] = true
|
||||
p.tasks[getTaskDetailRes.Output.TaskID].EndTime = time.Now()
|
||||
return fmt.Errorf("生成标题和内容失败: %v", err)
|
||||
zap.L().Error("生成标题和内容失败: %v", zap.Error(err))
|
||||
return fmt.Errorf("生成标题和内容失败")
|
||||
}
|
||||
p.tasks[taskId].Title = title
|
||||
p.tasks[taskId].Content = content
|
||||
|
||||
// 直接下载并上传到桶
|
||||
//上传图片
|
||||
localTask.EndTime = time.Now()
|
||||
urls := make([]string, 0, len(getTaskDetailRes.Output.Results))
|
||||
for _, v1 := range getTaskDetailRes.Output.Results {
|
||||
@ -525,18 +511,20 @@ func (p *BatchProcessor) UpdateTaskStatuses(taskId string) (err error) {
|
||||
}
|
||||
uploadedURLs, err := downloadAndUploadImages(urls)
|
||||
if err != nil {
|
||||
zap.L().Debug("图片上传失败")
|
||||
localTask.Status = TaskFailed
|
||||
p.tasks[getTaskDetailRes.Output.TaskID].Error = err
|
||||
p.inProgress[getTaskDetailRes.Output.TaskID] = true
|
||||
p.tasks[getTaskDetailRes.Output.TaskID].EndTime = time.Now()
|
||||
localTask.Error = fmt.Errorf("图片上传失败: %v", err)
|
||||
zap.L().Error("图片上传失败: %v", zap.Error(err))
|
||||
localTask.Error = fmt.Errorf("图片上传失败")
|
||||
return err
|
||||
}
|
||||
var messages string
|
||||
for _, v1 := range getTaskDetailRes.Output.Results {
|
||||
messages += v1.Message
|
||||
}
|
||||
|
||||
//发布
|
||||
if err = publishImage(publishImageReq{
|
||||
ArtistName: p.tasks[getTaskDetailRes.Output.TaskID].Data.ArtistName,
|
||||
SubNum: p.tasks[getTaskDetailRes.Output.TaskID].Data.SubNum,
|
||||
@ -553,6 +541,8 @@ func (p *BatchProcessor) UpdateTaskStatuses(taskId string) (err error) {
|
||||
p.inProgress[getTaskDetailRes.Output.TaskID] = true
|
||||
p.tasks[getTaskDetailRes.Output.TaskID].EndTime = time.Now()
|
||||
}
|
||||
|
||||
//成功
|
||||
localTask.Status = TaskSuccessful
|
||||
p.inProgress[getTaskDetailRes.Output.TaskID] = true
|
||||
p.tasks[getTaskDetailRes.Output.TaskID].EndTime = time.Now()
|
||||
@ -561,7 +551,7 @@ func (p *BatchProcessor) UpdateTaskStatuses(taskId string) (err error) {
|
||||
case "FAILED":
|
||||
if localTask.Status != TaskFailed {
|
||||
localTask.Status = TaskFailed
|
||||
p.tasks[getTaskDetailRes.Output.TaskID].Error = errors.New("转换失败")
|
||||
p.tasks[getTaskDetailRes.Output.TaskID].Error = errors.New("生成失败")
|
||||
p.inProgress[getTaskDetailRes.Output.TaskID] = true
|
||||
p.tasks[getTaskDetailRes.Output.TaskID].EndTime = time.Now()
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user