lh 1 月之前
父节点
当前提交
42ea357bc9
共有 2 个文件被更改,包括 22 次插入6 次删除
  1. 19 6
      app/Services/AIGeneration/AIVideoGenerationService.php
  2. 3 0
      app/Services/Anime/AnimeService.php

+ 19 - 6
app/Services/AIGeneration/AIVideoGenerationService.php

@@ -1736,10 +1736,12 @@ class AIVideoGenerationService
      */
     private function kuaikuaiStatusToLocal(string $status): string
     {
-        switch ($status) {
+        switch (strtolower(trim($status))) {
             case 'ready':
+            case 'success':
                 return MpAsset::STATUS_ACTIVE;
             case 'failed':
+            case 'failure':
                 return MpAsset::STATUS_FAILED;
             default:
                 return MpAsset::STATUS_PROCESSING;
@@ -1843,9 +1845,20 @@ class AIVideoGenerationService
             $result['asset_id'] = $assetId;
         }
 
-        // 同步更新本地素材状态
-        if (!empty($result['status'])) {
-            $updateData = ['status' => $this->kuaikuaiStatusToLocal($result['status'])];
+        // 状态归一化:ready/success 视为就绪,failed/failure 视为失败
+        $resultStatus = $result['status'] ?? '';
+        if (!empty($resultStatus)) {
+            $normalizedStatus = in_array(strtolower((string)$resultStatus), ['ready', 'success'], true)
+                ? 'ready'
+                : (in_array(strtolower((string)$resultStatus), ['failed', 'failure'], true) ? 'failed' : 'pending');
+            $result['status'] = $normalizedStatus;
+
+            // 同步更新本地素材状态(同时刷新extra_params为最新查询结果,避免保留上传时的pending快照)
+            $updateData = [
+                'status' => $this->kuaikuaiStatusToLocal($normalizedStatus),
+                'extra_params' => json_encode($responseData, JSON_UNESCAPED_UNICODE),
+                'updated_at' => date('Y-m-d H:i:s'),
+            ];
             if (!empty($result['failure_reason'])) {
                 $updateData['error_message'] = $result['failure_reason'];
             }
@@ -1968,7 +1981,7 @@ class AIVideoGenerationService
             MpAsset::create($recordData);
 
             // 网关已就绪/失败,直接返回
-            if ($status === 'ready') {
+            if (in_array($status, ['ready', 'success'], true)) {
                 logDB('generate', 'info', '快快AI素材上传成功', ['asset_id' => $assetId, 'url' => $url]);
                 return [
                     'code' => 0,
@@ -2001,7 +2014,7 @@ class AIVideoGenerationService
                 $lastStatus = $assetInfo['status'] ?? '';
                 dLog('generate')->info("快快AI素材 {$assetId} 状态查询第 {$attempt} 次,状态: {$lastStatus}");
 
-                if ($lastStatus === 'ready') {
+                if (in_array($lastStatus, ['ready', 'success'], true)) {
                     logDB('generate', 'info', '快快AI素材处理成功', ['asset_id' => $assetId, 'url' => $url]);
                     return [
                         'code' => 0,

+ 3 - 0
app/Services/Anime/AnimeService.php

@@ -5152,6 +5152,9 @@ class AnimeService
                 // 限制只传入9张参考图
                 $reference_images = array_slice($reference_images, 0, 9);
 
+                // 维护ref_image_url字段(参考图URL,JSON数组,与智帧分支保持一致)
+                $videoParams['ref_image_url'] = json_encode($reference_images, 256);
+
                 // 参考图上传为素材(百度网关/快快AI),上传失败时同步清理提示词中的<图片N>标记
                 $reference_image_assets = $isKuaikuai
                     ? $this->aiVideoGenerationService->processReferenceImagesToKuaikuaiAssets($reference_images, $fullPrompt)