lh 3 місяців тому
батько
коміт
0c291f9f0b
2 змінених файлів з 90 додано та 83 видалено
  1. 74 75
      app/Libs/Helpers.php
  2. 16 8
      app/Services/DeepSeek/DeepSeekService.php

Різницю між файлами не показано, бо вона завелика
+ 74 - 75
app/Libs/Helpers.php


+ 16 - 8
app/Services/DeepSeek/DeepSeekService.php

@@ -2861,6 +2861,7 @@ class DeepSeekService
         // exit();
         $now = date('Y-m-d H:i:s');
 
+        $del_flag = false;
         try {
             DB::beginTransaction();
 
@@ -2912,6 +2913,7 @@ class DeepSeekService
                     if ($boolen2 === false) {
                         Utils::throwError('20003:分集内容保存失败');
                     }
+                    $del_flag = true;
                 } else {
                     DB::table('mp_anime_episodes')
                         ->where('anime_id', $anime_id)
@@ -2961,6 +2963,8 @@ class DeepSeekService
             }
 
             if ($segments) {
+                // 如果是更新剧集则需删除所有剧集分镜
+                if ($del_flag) DB::table('mp_episode_segments')->where('anime_id', $anime_id)->where('episode_id', $episode_id)->delete();
                 $boolen3 = DB::table('mp_episode_segments')->insert($segments);
                 if (!$boolen3) {
                     Utils::throwError('20003:分镜内容保存失败');
@@ -3017,13 +3021,11 @@ class DeepSeekService
             // 批量生成全局角色图片
             $this->batchSetGlobalRoleImg([
                 'anime_id' => $anime_id,
-                'episode_number' => $episode_number
             ]);
             
             // 批量生成全局场景图片
             $this->batchSetGlobalSceneImg([
                 'anime_id' => $anime_id,
-                'episode_number' => $episode_number
             ]);
         }
 
@@ -3208,20 +3210,22 @@ class DeepSeekService
     }
 
     // 生成全局角色图片
-    private function batchSetGlobalRoleImg($data) {
+    private function batchSetGlobalRoleImg($data, $is_force=false) {
         $anime_id = getProp($data, 'anime_id');
-        $episode_number = getProp($data, 'episode_number');
         if (!$anime_id) Utils::throwError('1002:请选择对话');
         $anime = DB::table('mp_animes')->where('id', $anime_id)->where('is_deleted', 0)->first();
         $roles = json_decode(getProp($anime, 'roles'), true);
         $art_style = getProp($anime, 'art_style');
         
+        $update_flag = false;
         foreach ($roles as &$role) {
             $role_name = getProp($role, 'role');
             $description = getProp($role, 'description');
             if ($art_style) $description = "美术风格:\n$art_style\n主体描述:$description";
             // 参考图地址
             $ref_img_url = getProp($role, 'url');
+            if (!$is_force && $ref_img_url) continue;
+            $update_flag = true;
             
             // 此处调用AIImageGenerationService的生成图片任务接口: createImageGenerationTask(注意使用默认参数,prompt使用角色描述),并返回任务id
             try {
@@ -3243,9 +3247,10 @@ class DeepSeekService
                 Utils::throwError("20003:" . $e->getMessage());
             }
         }
+
+        if (!$update_flag) return true;
         
         // 保存角色信息
-        // $boolen = DB::table('mp_animes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->where('is_default', 1)->update([
         $boolen = DB::table('mp_animes')->where('id', $anime_id)->update([
             'roles'             => json_encode($roles, 256),
             'generate_status'   => '执行中',
@@ -3260,20 +3265,22 @@ class DeepSeekService
     }
 
     // 生成全局场景图片
-    private function batchSetGlobalSceneImg($data) {
+    private function batchSetGlobalSceneImg($data, $is_force=false) {
         $anime_id = getProp($data, 'anime_id');
         if (!$anime_id) Utils::throwError('1002:请选择对话');
-        $episode_number = getProp($data, 'episode_number');
         $anime = DB::table('mp_animes')->where('id', $anime_id)->where('is_deleted', 0)->first();
         $scenes = json_decode(getProp($anime, 'scenes'), true);
         $art_style = getProp($anime, 'art_style');
         
+        $update_flag = false;
         foreach ($scenes as &$scene) {
             $scene_name = getProp($scene, 'scene');
             $description = getProp($scene, 'description');
             if ($art_style) $description = "美术风格:\n$art_style\n\n场景描述:$description";
             // 参考图地址
             $ref_img_url = getProp($scene, 'url');
+            if (!$is_force && $ref_img_url) continue;
+            $update_flag = true;
             
             // 此处调用AIImageGenerationService的生成图片任务接口: createImageGenerationTask(注意使用默认参数,prompt使用角色描述),并返回任务id
             try {
@@ -3295,9 +3302,10 @@ class DeepSeekService
                 Utils::throwError("20003:" . $e->getMessage());
             }
         }
+
+        if (!$update_flag) return true;
         
         // 保存角色信息
-        // $boolen = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->where('is_default', 1)->update([
         $boolen = DB::table('mp_animes')->where('id', $anime_id)->update([
             'scenes'             => json_encode($scenes, 256),
             'generate_status'   => '执行中',