Browse Source

完成初步剧本分析

lh 5 months ago
parent
commit
d12dcdf12b

+ 51 - 0
app/Http/Controllers/DeepSeek/DeepSeekController.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers\DeepSeek;
 
+use App\Transformer\DeepSeek\DeepSeekTransformer;
 use App\Facade\Site;
 use App\Consts\ErrorConst;
 use App\Exceptions\ApiException;
@@ -236,4 +237,54 @@ class DeepSeekController extends BaseController
         $result = $this->deepseekService->emotionGroups($data);
         return $this->success($result);
     }
+
+
+    /**
+     * 剧本列表
+     *
+     * @param Request $request
+     * @return mixed
+     */
+    public function scriptList(Request $request) {
+        $data = $request->all();
+        $result = $this->deepseekService->scriptList($data);
+        return $this->success($result, [new DeepSeekTransformer(), 'newBuildScriptList']);
+    }
+
+    /**
+     * 创建剧本
+     *
+     * @param Request $request
+     * @return mixed
+     */
+    public function createScript(Request $request) {
+        $data = $request->all();
+        $result = $this->deepseekService->createScript($data);
+        return $this->success(['script_id' => $result]);
+    }
+
+    /**
+     * 与DeepSeek对话(带文件上传)
+     * @param Request $request
+     * @return mixed
+     * @throws ApiException
+     */
+    public function chatWithFile(Request $request) {
+        // 忽略所有超时限制
+        set_time_limit(0);
+        ini_set('max_execution_time', '0');
+
+        $data = $request->all();
+        $result = $this->deepseekService->chatWithFile($data);
+        return $this->success($result);
+    }
+
+    /**
+     * 保存剧本
+     */
+    public function generateScript(Request $request) {
+        $data = $request->all();
+        $result = $this->deepseekService->generateScript($data);
+        return $this->success(['success'=>$result ? 1 : 0]);
+    }
 }

File diff suppressed because it is too large
+ 106 - 0
app/Libs/Helpers.php


File diff suppressed because it is too large
+ 450 - 0
app/Services/DeepSeek/DeepSeekService.php


+ 54 - 0
app/Transformer/DeepSeek/DeepSeekTransformer.php

@@ -0,0 +1,54 @@
+<?php
+
+namespace App\Transformer\DeepSeek;
+
+use Illuminate\Support\Facades\DB;
+
+class DeepSeekTransformer
+{
+    // 剧本列表
+    public function newBuildScriptList($data): array
+    {
+        return [
+            'meta'      => getMeta($data),
+            // 'header'    => $data['header'],
+            'list'      => $this->newEachScriptList($data),
+        ];
+    }
+
+    private function newEachScriptList($list): array
+    {
+        $result = [];
+        if (empty($list)) return $result;
+
+        foreach ($list as $item) {
+            $script_id = getProp($item, 'id');
+            $status = getProp($item, 'status');
+            $status_arr =[
+                '1' => '待创作',
+                '2' => '解析中',
+                '3' => '解析完成',
+                '4' => '解析失败',
+            ];
+
+            // 获取分集信息
+            $episodes = DB::table('mp_script_episodes')->where('script_id', $script_id)->orderBy('episode_number')->select('title', 'episode_number', 'content')->get()->map(function ($value) {
+                return (array)$value;
+            })->toArray();
+            $result[] = [
+                'user_id'               => getProp($item, 'user_id'),
+                'script_id'             => $script_id,
+                'script_name'           => getProp($item, 'script_name'),
+                'status'                => $status,
+                'status_info'           => isset($status_arr[$status]) ? $status_arr[$status] : '',
+                'created_at'            => transDate(getProp($item, 'created_at')),
+                'updated_at'            => transDate(getProp($item, 'updated_at')),
+                'episodes'              => $episodes,
+            ];
+        }
+
+        return $result;
+    }
+
+    
+}

+ 2 - 0
composer.json

@@ -20,8 +20,10 @@
 		"laravel/framework": "^8.75",
 		"laravel/sanctum": "^2.11",
 		"laravel/tinker": "^2.5",
+		"phpoffice/phpword": "^1.4",
 		"pimple/pimple": "^3.0",
 		"predis/predis": "^2.1",
+		"smalot/pdfparser": "^2.12",
 		"symfony/cache": "^5.0",
 		"vinkla/hashids": "^9.1",
 		"volcengine/ve-tos-php-sdk": "^2.1"

+ 6 - 0
routes/api.php

@@ -83,6 +83,12 @@ Route::group(['middleware' => ['bindToken', 'bindExportToken', 'checkLogin']], f
         Route::get('emotionGroups', [DeepSeekController::class, 'emotionGroups']);
         Route::post('insertAudioEffect', [DeepSeekController::class, 'insertAudioEffect']);
         Route::post('insertBgm', [DeepSeekController::class, 'insertBgm']);
+
+        // 剧本管理
+        Route::get('scriptList', [DeepSeekController::class, 'scriptList']);
+        Route::get('createScript', [DeepSeekController::class, 'createScript']);
+        Route::post('chatWithFile', [DeepSeekController::class, 'chatWithFile']);
+        Route::post('generateScript', [DeepSeekController::class, 'generateScript']);
     });
     
 });