Просмотр исходного кода

新增海外书籍列表,多人有声兼容海外书籍格式

lh 2 месяцев назад
Родитель
Сommit
c21aa5e727

+ 19 - 0
app/Http/Controllers/Book/BookController.php

@@ -62,6 +62,25 @@ class BookController extends BaseController
     }
 
     /**
+     * 海外书籍列表
+     *
+     * @param Request $request
+     * @return mixed
+     */
+    public function overseasBookList(Request $request) {
+        $data = $request->all();
+        $result = $this->bookService->overseasBookList($data);
+        return $this->success($result, [new BookTransformer(), 'newBuildBookList']);
+    }
+
+    // 可选海外书籍
+    public function overseasBooks(Request $request) {
+        $data = $request->all();
+        $result = $this->bookService->overseasBooks($data);
+        return $this->success($result);
+    }
+
+    /**
      * 新增书籍版本
      *
      * @param Request $request

+ 27 - 2
app/Services/Anime/AnimeService.php

@@ -884,11 +884,36 @@ class AnimeService
 
         $query = DB::table('mp_anime_records')->where('segment_id', $segment_id)->select('role', 'content', 'segment_id', 'image_url', 'video_url', 'created_at');
         
-        return $query->orderBy('id')->get()->map(function ($value) {
+        $chat = $query->orderBy('id')->get()->map(function ($value) {
             $value = (array)$value;
             $value['created_at'] = transDate($value['created_at']);
             return $value;
         })->toArray();
+
+        // 获取历史图片
+        $url = [];
+        $pic_history = DB::table('mp_generate_pic_tasks')->where('alias_segment_id', $segment_id)->where('status', 'success')->orderBy('created_at', 'desc')->get();
+        foreach($pic_history as $task) {
+            $result_url = getProp($task, 'result_url');
+            if (is_json($result_url)) {
+                $url = array_merge($url, json_decode($result_url, true));
+            }else {
+                $url[] = $result_url;
+            }
+        }
+        
+        // 获取历史视频
+        $video_history = DB::table('mp_generate_video_tasks')->where('alias_segment_id', $segment_id)->where('status', 'success')->orderBy('created_at', 'desc')->get();
+        foreach($video_history as $task) {
+            $result_url = getProp($task, 'result_url');
+            if (is_json($result_url)) {
+                $url = array_merge($url, json_decode($result_url, true));
+            }else {
+                $url[] = $result_url;
+            }
+        }
+
+        return compact('chat', 'url');
     }
 
     public function changeEpisodeRoles($data) {
@@ -2160,7 +2185,7 @@ class AnimeService
         foreach($video_history as $task) {
             $result_url = getProp($task, 'result_url');
             if (is_json($result_url)) {
-                $videos = array_merge($pics, json_decode($result_url, true));
+                $videos = array_merge($videos, json_decode($result_url, true));
             }else {
                 $videos[] = $result_url;
             }

+ 60 - 4
app/Services/Book/BookService.php

@@ -81,16 +81,72 @@ class BookService
         })->toArray();
     }
 
+    public function overseasBookList($data) {
+        $bid = getProp($data, 'bid');
+        $book_name = getProp($data, 'book_name');
+        $status = getProp($data, 'status');
+        $page = getProp($data, 'page', 1);
+        $per_page = getProp($data, 'pageSize', 15);
+
+        $query = DB::table('mp_book_translation_push_records as a')->leftJoin('books as b', 'a.bid', '=', 'b.id')->leftJoin('book_configs as bc', 'b.id', '=', 'bc.bid')
+        ->select('a.version_id as bid', 'a.version_name as book_name', 'b.status', 'bc.origin_book_name');
+
+        if ($bid) {
+            $query->where('a.version_id', $bid);
+        }
+
+        if ($book_name) {
+            $query->where('bc.book_name', 'like', "%{$book_name}%");
+        }
+
+        if ($status !== '') {
+            $query->where('b.status', $status);
+        }
+
+        $result = $query->orderBy('a.id')->paginate($per_page);
+
+        return $result;
+    }
+
+    public function overseasBooks($data) {
+        $bid = getProp($data, 'bid');
+        $book_name = getProp($data, 'book_name');
+
+        $query = DB::table('mp_book_translation_push_records')->select('version_id as bid', 'version_name as book_name');
+        if ($bid) {
+            $query->where('version_id', $bid);
+        }
+
+        if ($book_name) {
+            $query->where('version_name', 'like', "%{$book_name}%");
+        }
+
+        return $query->orderBy('id', 'desc')->get()->map(function($value) {
+            return (array)$value;
+        })->toArray();
+    }
+
+
     public function addBookVersion($data) {
         $bid = getProp($data, 'bid');
         if (!$bid) Utils::throwError('20003:请选择书籍');
 
         $version_name = trim(getProp($data, 'version_name'));
         if (!$version_name) Utils::throwError('20003:请填写版本名');
-        $book_name = DB::table('book_configs')->where('bid', $bid)->value('book_name');
-        if (DB::table('mp_book_version')->where('bid', $bid)->where('version_name', $version_name)->exists()) Utils::throwError('20003:版本名已存在');
-        
-        $all_chapters = DB::table('chapters')->where('bid', $bid)->where('is_check', 1)->where('is_deleted', 0)->select('id', 'name', 'sequence', 'size', 'chapter_content_id')->get();
+
+        // 兼容海外翻译小说
+        if (strlen($bid) >= 8) {        // 海外翻译小说的书籍ID>=8位数(即AI翻译后台的版本ID,version_bid为真正的bid)
+            $origin_bid = DB::table('mp_book_translation_version')->where('id', $bid)->value('bid');
+            $book_name = DB::table('book_configs')->where('bid', $origin_bid)->value('book_name');
+
+            $all_chapters = DB::table('chapters_ai_translation')->where('version_id', $bid)->where('bid', $origin_bid)->where('is_push', 1)->select('id', 'name', 'sequence', 'charge_length as size')->orderBy('sequence')->get();
+        }else {
+            $book_name = DB::table('book_configs')->where('bid', $bid)->value('book_name');
+            if (DB::table('mp_book_version')->where('bid', $bid)->where('version_name', $version_name)->exists()) Utils::throwError('20003:版本名已存在');
+            
+            $all_chapters = DB::table('chapters')->where('bid', $bid)->where('is_check', 1)->where('is_deleted', 0)->select('id', 'name', 'sequence', 'size', 'chapter_content_id')->get();
+        }
+
         try {
             DB::beginTransaction();
 

+ 4 - 0
routes/api.php

@@ -29,6 +29,10 @@ Route::group(['middleware' => ['bindToken', 'bindExportToken', 'checkLogin']], f
         Route::get('chapterList', [BookController::class, 'chapterList']);
         Route::get('chapterContent', [BookController::class, 'chapterContent']);
 
+        // 海外小说
+        Route::get('overseasBookList', [BookController::class, 'overseasBookList']);
+        Route::get('overseasBooks', [BookController::class, 'overseasBooks']);
+
         // 版本管理
         Route::get('addVersion', [BookController::class, 'addBookVersion']);
         Route::get('editVersion', [BookController::class, 'editBookVersion']);