Преглед изворни кода

AI生成图片和视频方法新增系统日志调整

lh пре 3 месеци
родитељ
комит
f69fba5edc

+ 21 - 2
app/Services/AIGeneration/AIImageGenerationService.php

@@ -35,8 +35,11 @@ class AIImageGenerationService
      */
     public function createImageGenerationTask(array $params): MpGeneratePicTask
     {
-        // 获取模型类型,默认使用即梦AI 4.0
-        $model = $params['model'] ?? self::MODEL_JIMENG_4;
+        // // 获取模型类型,默认使用即梦AI 4.0
+        // $model = $params['model'] ?? self::MODEL_JIMENG_4;
+
+        // 获取模型类型,默认使用即梦seedream5.0-lite
+        $model = $params['model'] ?? 'doubao-seedream-5-0-lite-260128';
         
         // 检查是否有正在处理的任务(仅即梦AI需要排队)
         if ($model === self::MODEL_JIMENG_4 && $this->hasProcessingTask()) {
@@ -163,6 +166,7 @@ class AIImageGenerationService
             }
 
             dLog('generate')->info('即梦AI文生图参数: ', $apiParams);
+            logDB('generate', 'info', '即梦AI文生图任务提交', ['task_id' => $task->task_id, 'params' => $apiParams]);
             
             //调用即梦AI 4.0 API提交任务
             $response = $this->volcEngineService->request(
@@ -182,9 +186,11 @@ class AIImageGenerationService
     
             $responseData = json_decode($response['body'], true);
             dLog('generate')->info('即梦AI 4.0 API提交任务响应: ', $responseData);
+            logDB('generate', 'info', '即梦AI 4.0 API提交任务响应', ['task_id' => $task->task_id, 'response' => $responseData]);
                 
             if ($responseData['code'] !== 10000) {
                 // API返回错误
+                logDB('generate', 'error', '即梦AI任务提交失败', ['task_id' => $task->task_id, 'error' => $responseData['message'] ?? 'API Error']);
                 $task->updateStatus(MpGeneratePicTask::STATUS_FAILED, [
                     'error_message' => $responseData['message'] ?? 'API Error',
                     'extra_params' => $responseData['data'] ?? []
@@ -202,6 +208,7 @@ class AIImageGenerationService
             }
         } catch (\Exception $e) {
             // 记录错误
+            logDB('generate', 'error', '即梦AI任务提交异常', ['task_id' => $task->task_id, 'error' => $e->getMessage()]);
             $task->updateStatus(MpGeneratePicTask::STATUS_FAILED, [
                 'error_message' => 'API请求失败: ' . $e->getMessage()
             ]);
@@ -261,6 +268,7 @@ class AIImageGenerationService
             }
 
             dLog('generate')->info('火山图片生成API参数: ', $apiParams);
+            logDB('generate', 'info', '火山图片生成任务提交', ['task_id' => $task->task_id, 'params' => $apiParams]);
             
             // 调用火山图片生成API
             $response = $this->httpClient->post('https://ark.cn-beijing.volces.com/api/v3/images/generations', [
@@ -273,9 +281,11 @@ class AIImageGenerationService
     
             $responseData = json_decode($response->getBody()->getContents(), true);
             dLog('generate')->info('火山图片生成API响应: ', $responseData);
+            logDB('generate', 'info', '火山图片生成API响应', ['task_id' => $task->task_id, 'response' => $responseData]);
                 
             if (isset($responseData['error'])) {
                 // API返回错误
+                logDB('generate', 'error', '火山图片生成任务失败', ['task_id' => $task->task_id, 'error' => $responseData['error']['message'] ?? 'API Error']);
                 $task->updateStatus(MpGeneratePicTask::STATUS_FAILED, [
                     'error_message' => $responseData['error']['message'] ?? 'API Error',
                     'result_json' => $responseData
@@ -287,6 +297,7 @@ class AIImageGenerationService
         } catch (\Exception $e) {
             // 记录错误
             dLog('generate')->error('火山API请求失败: ' . $e->getMessage());
+            logDB('generate', 'error', '火山图片生成任务异常', ['task_id' => $task->task_id, 'error' => $e->getMessage()]);
             $task->updateStatus(MpGeneratePicTask::STATUS_FAILED, [
                 'error_message' => 'API请求失败: ' . $e->getMessage()
             ]);
@@ -456,9 +467,11 @@ class AIImageGenerationService
     
             $responseData = json_decode($response['body'], true);
             dLog('generate')->info('即梦AI 4.0 API查询任务状态响应: ', $responseData);
+            logDB('generate', 'info', '即梦AI任务状态查询', ['task_id' => $apiTaskId, 'response' => $responseData]);
     
             if ($responseData['code'] !== 10000) {
                 // API返回错误
+                logDB('generate', 'error', '即梦AI任务状态查询失败', ['task_id' => $apiTaskId, 'error' => $responseData['message'] ?? 'API Error']);
                 return [
                     'status' => 'failed',
                     'error_message' => $responseData['message'] ?? 'API Error',
@@ -525,6 +538,7 @@ class AIImageGenerationService
     public function updatePendingTasks(): void
     {
         dLog('generate')->info('更新图片状态ing');
+        logDB('generate', 'info', '开始更新图片生成任务状态', []);
         
         // 1. 处理火山API的pending任务(批量提交)
         $volcPendingTasks = MpGeneratePicTask::where('status', MpGeneratePicTask::STATUS_PENDING)
@@ -535,6 +549,7 @@ class AIImageGenerationService
 
         foreach ($volcPendingTasks as $task) {
             dLog('generate')->info('开始处理火山API任务: ' . $task->task_id);
+            logDB('generate', 'info', '开始处理火山API待处理任务', ['task_id' => $task->task_id]);
             $this->submitTaskToVolcApi($task);
         }
         
@@ -547,6 +562,7 @@ class AIImageGenerationService
             $statusInfo = $this->queryTaskStatus($task);
 
             if ($statusInfo['status'] === 'success') {
+                logDB('generate', 'info', '即梦AI图片生成任务成功', ['task_id' => $task->task_id, 'result_url' => $statusInfo['result_url']]);
                 $task->updateStatus(MpGeneratePicTask::STATUS_SUCCESS, [
                     'result_url'    => $statusInfo['result_url'],
                     'result_json'   => $statusInfo['result_json'] ?? []
@@ -568,6 +584,7 @@ class AIImageGenerationService
                     }
                 }
             } elseif ($statusInfo['status'] === 'failed') {
+                logDB('generate', 'error', '即梦AI图片生成任务失败', ['task_id' => $task->task_id, 'error' => $statusInfo['error_message']]);
                 $task->updateStatus(MpGeneratePicTask::STATUS_FAILED, [
                     'error_message' => $statusInfo['error_message'],
                     'result_json'   => $statusInfo['result_json'] ?? []
@@ -584,6 +601,7 @@ class AIImageGenerationService
             //处理:如果任务处理超过12小时,标记为失败
             $processingTime = now()->diffInHours($task->created_at);
             if ($processingTime > 12) {
+                logDB('generate', 'warning', '即梦AI图片生成任务超时', ['task_id' => $task->task_id, 'processing_hours' => $processingTime]);
                 $task->updateStatus(MpGeneratePicTask::STATUS_FAILED, [
                     'error_message' => '任务处理超时(超过12小时)'
                 ]);
@@ -614,6 +632,7 @@ class AIImageGenerationService
 
         if ($nextTask) {
             dLog('generate')->info('开始处理排队任务: ' . $nextTask->task_id);
+            logDB('generate', 'info', '开始处理即梦AI排队任务', ['task_id' => $nextTask->task_id]);
             $this->submitTaskToJimengApi($nextTask);
         }
     }

+ 29 - 0
app/Services/AIGeneration/AIVideoGenerationService.php

@@ -95,6 +95,7 @@ class AIVideoGenerationService
             }
             
             dLog('generate')->info('图生视频参数: ', $apiParams);
+            logDB('generate', 'info', '即梦AI视频生成任务提交', ['id' => $task->id, 'params' => $apiParams]);
             
             // 调用即梦AI 3.0 视频生成API提交任务
             $response = $this->volcEngineService->request(
@@ -114,9 +115,11 @@ class AIVideoGenerationService
 
             $responseData = json_decode($response['body'], true);
             dLog('generate')->info('即梦AI 3.0 视频生成API提交任务响应: ', $responseData);
+            logDB('generate', 'info', '即梦AI视频生成API响应', ['id' => $task->id, 'response' => $responseData]);
                 
             if ($responseData['code'] !== 10000) {
                 // API返回错误
+                logDB('generate', 'error', '即梦AI视频生成任务提交失败', ['id' => $task->id, 'error' => $responseData['message'] ?? 'API Error']);
                 $task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
                     'error_message' => $responseData['message'] ?? 'API Error',
                     'extra_params' => $responseData['data'] ?? []
@@ -197,9 +200,11 @@ class AIVideoGenerationService
     
             $responseData = json_decode($response['body'], true);
             dLog('generate')->info('即梦AI 3.0 视频生成API查询任务状态响应: ', $responseData);
+            logDB('generate', 'info', '即梦AI视频任务状态查询', ['id' => $task->id, 'response' => $responseData]);
     
             if ($responseData['code'] !== 10000) {
                 // API返回错误
+                logDB('generate', 'error', '即梦AI视频任务状态查询失败', ['id' => $task->id, 'error' => $responseData['message'] ?? 'API Error']);
                 return [
                     'status' => 'failed',
                     'error_message' => $responseData['message'] ?? 'API Error',
@@ -285,6 +290,7 @@ class AIVideoGenerationService
         if (!isset($statusInfo['status'])) return;
 
         if ($statusInfo['status'] === 'success') {
+            logDB('generate', 'info', '即梦AI视频生成任务成功', ['id' => $task->id, 'result_url' => $statusInfo['result_url']]);
             $task->updateStatus(MpGenerateVideoTask::STATUS_SUCCESS, $statusInfo);
             
             // 同步调整分镜视频状态和结果
@@ -315,6 +321,7 @@ class AIVideoGenerationService
                 }
             }
         } elseif ($statusInfo['status'] === 'failed') {
+            logDB('generate', 'error', '即梦AI视频生成任务失败', ['id' => $task->id, 'error' => $statusInfo['error_message']]);
             $task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, $statusInfo);
             
             // 同步更新分镜表状态为失败
@@ -331,6 +338,7 @@ class AIVideoGenerationService
         // 处理:如果任务处理超过12小时,标记为失败
         $processingTime = now()->diffInHours($task->created_at);
         if ($processingTime > 12) {
+            logDB('generate', 'warning', '即梦AI视频生成任务超时', ['id' => $task->id, 'processing_hours' => $processingTime]);
             $task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
                 'error_message' => '任务处理超时(超过12小时)'
             ]);
@@ -477,6 +485,7 @@ class AIVideoGenerationService
             }
             
             dLog('generate')->info('Seedance 1.5 Pro 视频生成参数: ', $apiParams);
+            logDB('generate', 'info', 'Seedance视频生成任务提交', ['id' => $task->id, 'params' => $apiParams]);
             
             // 调用火山引擎 Seedance API
             $response = $client->post('https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks', [
@@ -490,9 +499,11 @@ class AIVideoGenerationService
 
             $responseData = json_decode($response->getBody(), true);
             dLog('generate')->info('Seedance 1.5 Pro API 响应: ', $responseData);
+            logDB('generate', 'info', 'Seedance视频生成API响应', ['id' => $task->id, 'response' => $responseData]);
                 
             if (isset($responseData['error'])) {
                 // API返回错误
+                logDB('generate', 'error', 'Seedance视频生成任务提交失败', ['id' => $task->id, 'error' => $responseData['error']['message'] ?? 'API Error']);
                 $task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
                     'error_message' => $responseData['error']['message'] ?? 'API Error',
                     'extra_params' => array_merge($task->extra_params, ['api_response' => $responseData])
@@ -525,6 +536,7 @@ class AIVideoGenerationService
         if (!isset($statusInfo['status'])) return;
 
         if ($statusInfo['status'] === 'success') {
+            logDB('generate', 'info', 'Seedance视频生成任务成功', ['id' => $task->id, 'result_url' => $statusInfo['result_url']]);
             $task->updateStatus(MpGenerateVideoTask::STATUS_SUCCESS, $statusInfo);
             
             // 同步调整分镜视频状态和结果
@@ -555,6 +567,7 @@ class AIVideoGenerationService
                 }
             }
         } elseif ($statusInfo['status'] === 'failed') {
+            logDB('generate', 'error', 'Seedance视频生成任务失败', ['id' => $task->id, 'error' => $statusInfo['error_message']]);
             $task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
                 'error_message' => $statusInfo['error_message'],
                 'result_json'   => $statusInfo['result_json'] ?? []
@@ -574,6 +587,7 @@ class AIVideoGenerationService
         // 处理:如果任务处理超过48小时,标记为失败
         $processingTime = now()->diffInHours($task->created_at);
         if ($processingTime > 48) {
+            logDB('generate', 'warning', 'Seedance视频生成任务超时', ['id' => $task->id, 'processing_hours' => $processingTime]);
             $task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
                 'error_message' => '任务处理超时(超过48小时)'
             ]);
@@ -639,8 +653,10 @@ class AIVideoGenerationService
 
             $responseData = json_decode($response->getBody(), true);
             dLog('generate')->info('Seedance 任务状态查询响应: ', $responseData);
+            logDB('generate', 'info', 'Seedance任务状态查询', ['id' => $task->id, 'response' => $responseData]);
 
             if (isset($responseData['error'])) {
+                logDB('generate', 'error', 'Seedance任务状态查询失败', ['id' => $task->id, 'error' => $responseData['error']['message'] ?? 'API查询失败']);
                 return [
                     'status'    => MpGenerateVideoTask::STATUS_FAILED,
                     'result_json' => $responseData,
@@ -738,11 +754,13 @@ class AIVideoGenerationService
     public function seedanceCallback($data) {
         try {
             dLog('generate')->info('Seedance 回调数据: ', $data);
+            logDB('generate', 'info', 'Seedance回调接收', ['task_id' => $data['id'] ?? null, 'status' => $data['status'] ?? null]);
             
             // 从回调数据中获取任务ID
             $taskId = $data['id'] ?? null;
             if (!$taskId) {
                 dLog('generate')->error('Seedance 回调缺少任务ID');
+                logDB('generate', 'error', 'Seedance回调缺少任务ID', ['data' => $data]);
                 return ['success' => false, 'message' => '缺少任务ID'];
             }
             
@@ -750,6 +768,7 @@ class AIVideoGenerationService
             $task = MpGenerateVideoTask::where('task_id', $taskId)->first();
             if (!$task) {
                 dLog('generate')->error('Seedance 回调找不到任务: ' . $taskId);
+                logDB('generate', 'error', 'Seedance回调找不到任务', ['task_id' => $taskId]);
                 return ['success' => false, 'message' => '任务不存在'];
             }
             
@@ -830,6 +849,7 @@ class AIVideoGenerationService
             $this->updateSegmentVideoStatus($task, $taskStatus, $updateData);
             
             dLog('generate')->info('Seedance 回调处理完成: ' . $taskId . ', 状态: ' . $taskStatus);
+            logDB('generate', 'info', 'Seedance回调处理完成', ['task_id' => $taskId, 'status' => $taskStatus]);
             
             return [
                 'success' => true,
@@ -840,6 +860,7 @@ class AIVideoGenerationService
             
         } catch (\Exception $e) {
             dLog('generate')->error('Seedance 回调处理异常: ' . $e->getMessage());
+            logDB('generate', 'error', 'Seedance回调处理异常', ['error' => $e->getMessage()]);
             return [
                 'success' => false,
                 'message' => '回调处理失败: ' . $e->getMessage()
@@ -1035,6 +1056,7 @@ class AIVideoGenerationService
             // }
             
             dLog('generate')->info('可灵AI Omni视频生成参数: ', $apiParams);
+            logDB('generate', 'info', '可灵AI Omni视频生成任务提交', ['id' => $task->id, 'params' => $apiParams]);
 
             // 调用可灵AI Omni API
             $response = $client->post('https://api-beijing.klingai.com/v1/videos/omni-video', [
@@ -1047,10 +1069,12 @@ class AIVideoGenerationService
 
             $responseData = json_decode($response->getBody(), true);
             dLog('generate')->info('可灵AI Omni API响应: ', $responseData);
+            logDB('generate', 'info', '可灵AI Omni API响应', ['id' => $task->id, 'response' => $responseData]);
                 
             if (isset($responseData['error']) || (isset($responseData['code']) && $responseData['code'] !== 0)) {
                 // API返回错误
                 $errorMessage = $responseData['error']['message'] ?? $responseData['message'] ?? 'API Error';
+                logDB('generate', 'error', '可灵AI Omni任务提交失败', ['id' => $task->id, 'error' => $errorMessage]);
                 $task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
                     'error_message' => $errorMessage,
                     'extra_params' => array_merge($task->extra_params, ['api_response' => $responseData])
@@ -1070,6 +1094,7 @@ class AIVideoGenerationService
             }
         } catch (\Exception $e) {
             // 记录错误
+            logDB('generate', 'error', '可灵AI Omni任务异常', ['id' => $task->id, 'error' => $e->getMessage()]);
             $task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
                 'error_message' => 'API请求失败: ' . $e->getMessage()
             ]);
@@ -1118,8 +1143,10 @@ class AIVideoGenerationService
 
             $responseData = json_decode($response->getBody(), true);
             dLog('generate')->info('可灵AI Omni任务状态查询响应: ', $responseData);
+            logDB('generate', 'info', '可灵AI Omni任务状态查询', ['id' => $task->id, 'response' => $responseData]);
 
             if (isset($responseData['error']) || (isset($responseData['code']) && $responseData['code'] !== 0)) {
+                logDB('generate', 'error', '可灵AI Omni任务状态查询失败', ['id' => $task->id, 'error' => $responseData['error']['message'] ?? $responseData['message'] ?? 'API查询失败']);
                 return [
                     'status' => 'failed',
                     'error_message' => $responseData['error']['message'] ?? $responseData['message'] ?? 'API查询失败',
@@ -1213,6 +1240,7 @@ class AIVideoGenerationService
         if (!isset($statusInfo['status'])) return;
 
         if ($statusInfo['status'] === 'success') {
+            logDB('generate', 'info', '可灵AI Omni视频生成任务成功', ['id' => $task->id, 'result_url' => $statusInfo['result_url']]);
             $task->updateStatus(MpGenerateVideoTask::STATUS_SUCCESS, $statusInfo);
             
             // 同步调整分镜视频状态和结果
@@ -1262,6 +1290,7 @@ class AIVideoGenerationService
         // 处理:如果任务处理超过24小时,标记为失败
         $processingTime = now()->diffInHours($task->created_at);
         if ($processingTime > 24) {
+            logDB('generate', 'warning', '可灵AI Omni视频生成任务超时', ['id' => $task->id, 'processing_hours' => $processingTime]);
             $task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, [
                 'error_message' => '任务处理超时(超过24小时)'
             ]);