Pārlūkot izejas kodu

单一和批量创建视频任务新增对道具内容的适配,同步适配道具参考图

lh 2 dienas atpakaļ
vecāks
revīzija
f80b99e287

+ 14 - 1
app/Http/Controllers/Anime/AnimeController.php

@@ -2723,10 +2723,11 @@ class AnimeController extends BaseController
         $ratio = !empty($episode->ratio) ? $episode->ratio : '9:16';
         $generate_audio = getProp($data, 'generate_audio', 1);
 
-        // 合并角色和场景作为products,统一字段名为product_name
+        // 合并角色、场景和道具作为products,统一字段名为product_name
         $products = [];
         $roles = json_decode(getProp($episode, 'roles'), true) ?: [];
         $scenes = json_decode(getProp($episode, 'scenes'), true) ?: [];
+        $props = json_decode(getProp($episode, 'props'), true) ?: [];
         
         // 处理角色数组
         foreach ($roles as $role) {
@@ -2752,6 +2753,18 @@ class AnimeController extends BaseController
             $products[] = $product;
         }
         
+        // 处理道具数组
+        foreach ($props as $prop) {
+            $product = $prop;
+            // 将prop字段重命名为product_name
+            if (isset($product['prop'])) {
+                $product['product_name'] = $product['prop'];
+                unset($product['prop']);
+            }
+            $product['product'] = 3; // 标记类型为道具
+            $products[] = $product;
+        }
+        
         // 处理视频模型(在循环外统一处理)
         // $model = getProp($data, 'model');
         // if (!$model) {

+ 7 - 4
app/Services/Anime/AnimeService.php

@@ -4708,24 +4708,27 @@ class AnimeService
         if (!$video_resolution) $video_resolution = getProp($episode, 'video_resolution', '720p');
 
         // 将资产中新出现的资产放到extra_products中
-        // 满足以下要求: 遍历传入的$products,将product_name与$episode中的roles和scenes做比对,如果不在其中,则与$episode中的extra_products做比对,如果有同名的则覆盖,没有则新增后存入$episode中的extra_products字段中
+        // 满足以下要求: 遍历传入的$products,将product_name与$episode中的roles、scenes和props做比对,如果不在其中,则与$episode中的extra_products做比对,如果有同名的则覆盖,没有则新增后存入$episode中的extra_products字段中
         if (!empty($products) && $episode) {
-            // 获取剧集中的角色和场景列表
+            // 获取剧集中的角色、场景和道具列表
             $roles = json_decode(getProp($episode, 'roles', '[]'), true) ?: [];
             $scenes = json_decode(getProp($episode, 'scenes', '[]'), true) ?: [];
+            $props = json_decode(getProp($episode, 'props', '[]'), true) ?: [];
             $extra_products = json_decode(getProp($episode, 'extra_products', '[]'), true) ?: [];
             
             // 构建角色名称列表
             $role_names = array_column($roles, 'role');
             // 构建场景名称列表
             $scene_names = array_column($scenes, 'scene');
+            // 构建道具名称列表
+            $prop_names = array_column($props, 'prop');
             
             // 遍历传入的products
             foreach ($products as $product) {
                 $product_name = getProp($product, 'product_name');
                 
-                // 如果product_name不在roles和scenes中
-                if (!in_array($product_name, $role_names) && !in_array($product_name, $scene_names)) {
+                // 如果product_name不在roles、scenes和props中
+                if (!in_array($product_name, $role_names) && !in_array($product_name, $scene_names) && !in_array($product_name, $prop_names)) {
                     // 查找是否在extra_products中存在同名的
                     $found = false;
                     foreach ($extra_products as $key => $extra_product) {