lh 2 달 전
부모
커밋
b96ca8ae97
1개의 변경된 파일168개의 추가작업 그리고 0개의 파일을 삭제
  1. 168 0
      app/Services/DeepSeek/DeepSeekService.php

+ 168 - 0
app/Services/DeepSeek/DeepSeekService.php

@@ -3249,6 +3249,9 @@ class DeepSeekService
             $this->batchSetGlobalSceneImg([
             $this->batchSetGlobalSceneImg([
                 'anime_id' => $anime_id,
                 'anime_id' => $anime_id,
             ]);
             ]);
+
+            // 将全局角色和场景的task_id、task_status和url继承给当前分集
+            $this->inheritGlobalImagesToEpisodes($anime_id, $episode_id);
         }
         }
         $table_data['anime_id'] = $anime_id;
         $table_data['anime_id'] = $anime_id;
         $table_data['roles'] = json_decode($table_data['roles'], true);
         $table_data['roles'] = json_decode($table_data['roles'], true);
@@ -3919,6 +3922,9 @@ class DeepSeekService
             $this->batchSetGlobalSceneImg([
             $this->batchSetGlobalSceneImg([
                 'anime_id' => $anime_id,
                 'anime_id' => $anime_id,
             ]);
             ]);
+
+            // 将全局角色和场景的task_id、task_status和url继承给当前分集
+            $this->inheritGlobalImagesToEpisodes($anime_id, $episode_id);
         }
         }
         $table_data['anime_id'] = $anime_id;
         $table_data['anime_id'] = $anime_id;
         $table_data['roles'] = json_decode($table_data['roles'], true);
         $table_data['roles'] = json_decode($table_data['roles'], true);
@@ -4383,6 +4389,9 @@ class DeepSeekService
             $this->batchSetGlobalSceneImg([
             $this->batchSetGlobalSceneImg([
                 'anime_id' => $anime_id,
                 'anime_id' => $anime_id,
             ]);
             ]);
+            
+            // 将全局角色和场景的task_id、task_status和url继承给当前分集
+            $this->inheritGlobalImagesToEpisodes($anime_id, $episode_id);
         }
         }
 
 
         $episode['episode_id'] = $episode_id;
         $episode['episode_id'] = $episode_id;
@@ -4925,6 +4934,165 @@ class DeepSeekService
         return $boolen;
         return $boolen;
     }
     }
 
 
+    /**
+     * 将全局角色和场景的task_id、task_status和url继承给指定分集
+     * 
+     * @param int $anime_id 动漫对话ID
+     * @param int $episode_id 分集ID
+     * @return bool
+     */
+    private function inheritGlobalImagesToEpisodes($anime_id, $episode_id) {
+        // 获取全局角色和场景数据
+        $anime = DB::table('mp_animes')->where('id', $anime_id)->where('is_deleted', 0)->first();
+        if (!$anime) {
+            dLog('deepseek')->warning('动漫对话不存在', ['anime_id' => $anime_id]);
+            return false;
+        }
+        
+        $global_roles = json_decode(getProp($anime, 'roles'), true) ?: [];
+        $global_scenes = json_decode(getProp($anime, 'scenes'), true) ?: [];
+        
+        // 获取指定的分集
+        $episode = DB::table('mp_anime_episodes')->where('id', $episode_id)->where('anime_id', $anime_id)->first();
+        
+        if (!$episode) {
+            dLog('deepseek')->warning('分集不存在', ['anime_id' => $anime_id, 'episode_id' => $episode_id]);
+            return false;
+        }
+        
+        $episode_roles = json_decode(getProp($episode, 'roles'), true) ?: [];
+        $episode_scenes = json_decode(getProp($episode, 'scenes'), true) ?: [];
+        
+        $roles_updated = false;
+        $scenes_updated = false;
+        
+        // 继承角色的task_id、task_status和url
+        foreach ($episode_roles as &$episode_role) {
+            $episode_role_name = getProp($episode_role, 'role');
+            $episode_description = getProp($episode_role, 'description');
+            $episode_url = getProp($episode_role, 'url');
+            
+            // 跳过旁白角色
+            if ($episode_role_name == '旁白') {
+                continue;
+            }
+            
+            // 如果剧集中已有URL,跳过
+            if (!empty($episode_url)) {
+                continue;
+            }
+            
+            // 遍历全局角色数据,查找匹配的角色
+            foreach ($global_roles as $global_role) {
+                $global_role_name = getProp($global_role, 'role');
+                $global_description = getProp($global_role, 'description');
+                $global_url = getProp($global_role, 'url');
+                $global_task_id = getProp($global_role, 'task_id');
+                $global_task_status = getProp($global_role, 'task_status');
+                
+                // 满足条件:1.角色名相同 2.描述相同 3.剧集中URL为空
+                if ($episode_role_name == $global_role_name && $episode_description == $global_description) {
+                    // 继承 task_id、task_status 和 url
+                    if (!empty($global_task_id)) {
+                        $episode_role['task_id'] = $global_task_id;
+                        $episode_role['task_status'] = $global_task_status;
+                        $roles_updated = true;
+                        dLog('deepseek')->info('剧集角色继承全局task_id', [
+                            'episode_id' => $episode_id,
+                            'role' => $episode_role_name,
+                            'task_id' => $global_task_id,
+                            'task_status' => $global_task_status
+                        ]);
+                    }
+                    
+                    if (!empty($global_url)) {
+                        $episode_role['url'] = $global_url;
+                        $roles_updated = true;
+                        dLog('deepseek')->info('剧集角色继承全局url', [
+                            'episode_id' => $episode_id,
+                            'role' => $episode_role_name,
+                            'url' => $global_url
+                        ]);
+                    }
+                    
+                    break;
+                }
+            }
+        }
+        
+        // 继承场景的task_id、task_status和url
+        foreach ($episode_scenes as &$episode_scene) {
+            $episode_scene_name = getProp($episode_scene, 'scene');
+            $episode_description = getProp($episode_scene, 'description');
+            $episode_url = getProp($episode_scene, 'url');
+            
+            // 如果剧集中已有URL,跳过
+            if (!empty($episode_url)) {
+                continue;
+            }
+            
+            // 遍历全局场景数据,查找匹配的场景
+            foreach ($global_scenes as $global_scene) {
+                $global_scene_name = getProp($global_scene, 'scene');
+                $global_description = getProp($global_scene, 'description');
+                $global_url = getProp($global_scene, 'url');
+                $global_task_id = getProp($global_scene, 'task_id');
+                $global_task_status = getProp($global_scene, 'task_status');
+                
+                // 满足条件:1.场景名相同 2.描述相同 3.剧集中URL为空
+                if ($episode_scene_name == $global_scene_name && $episode_description == $global_description) {
+                    // 继承 task_id、task_status 和 url
+                    if (!empty($global_task_id)) {
+                        $episode_scene['task_id'] = $global_task_id;
+                        $episode_scene['task_status'] = $global_task_status;
+                        $scenes_updated = true;
+                        dLog('deepseek')->info('剧集场景继承全局task_id', [
+                            'episode_id' => $episode_id,
+                            'scene' => $episode_scene_name,
+                            'task_id' => $global_task_id,
+                            'task_status' => $global_task_status
+                        ]);
+                    }
+                    
+                    if (!empty($global_url)) {
+                        $episode_scene['url'] = $global_url;
+                        $scenes_updated = true;
+                        dLog('deepseek')->info('剧集场景继承全局url', [
+                            'episode_id' => $episode_id,
+                            'scene' => $episode_scene_name,
+                            'url' => $global_url
+                        ]);
+                    }
+                    
+                    break;
+                }
+            }
+        }
+        
+        // 如果有更新,则保存到数据库
+        if ($roles_updated || $scenes_updated) {
+            $update_data = ['updated_at' => date('Y-m-d H:i:s')];
+            
+            if ($roles_updated) {
+                $update_data['roles'] = json_encode($episode_roles, 256);
+            }
+            
+            if ($scenes_updated) {
+                $update_data['scenes'] = json_encode($episode_scenes, 256);
+            }
+            
+            DB::table('mp_anime_episodes')->where('id', $episode_id)->update($update_data);
+            
+            dLog('deepseek')->info('剧集继承全局图片数据完成', [
+                'episode_id' => $episode_id,
+                'roles_updated' => $roles_updated,
+                'scenes_updated' => $scenes_updated
+            ]);
+        }
+        
+        return true;
+    }
+
     public function chatChangeImg($data) {
     public function chatChangeImg($data) {
         $segment = getProp($data, 'segment');
         $segment = getProp($data, 'segment');
         $segment_content = getProp($segment, 'segment_content');
         $segment_content = getProp($segment, 'segment_content');