diff --git a/pkg/router/router.go b/pkg/router/router.go index c4f8c20..848a399 100644 --- a/pkg/router/router.go +++ b/pkg/router/router.go @@ -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) } //静态文件 diff --git a/pkg/service/import/imageContentGetResult.go b/pkg/service/import/imageContentGetResult.go index f929a45..8727c2f 100644 --- a/pkg/service/import/imageContentGetResult.go +++ b/pkg/service/import/imageContentGetResult.go @@ -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: diff --git a/pkg/service/import/imageContentImport.go b/pkg/service/import/imageContentImport.go index ef57cc5..6a045d9 100644 --- a/pkg/service/import/imageContentImport.go +++ b/pkg/service/import/imageContentImport.go @@ -109,8 +109,6 @@ func ImageContentImport(c *gin.Context) { return } processor.SetStatus(StatusProcessing) - processor = GetBatchProcessorRead() - qps := 10 interval := time.Second / time.Duration(qps) diff --git a/pkg/service/import/imageContentProcessor.go b/pkg/service/import/imageContentProcessor.go index d44b6c6..ce6d128 100644 --- a/pkg/service/import/imageContentProcessor.go +++ b/pkg/service/import/imageContentProcessor.go @@ -34,9 +34,8 @@ const ( ) var ( - batchProcessor *BatchProcessor - getBatchProcessorReadMutex sync.Mutex - getBatchProcessorMutex sync.Mutex + batchProcessor *BatchProcessor + 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() }