瀏覽代碼

新增任务管理

lh 4 天之前
父節點
當前提交
2b7da5dcf5

+ 25 - 0
app/Console/Test/TestCommand.php

@@ -138,11 +138,36 @@ class TestCommand extends Command
                 dd('更新角色信息失败');
             }
 
+            $count = DB::table('mp_audio_tasks')->where('bid', $bid)->where('version_id', $version_id)->where('cid', $cid)->count('id');
+            $chapter_audio = DB::table('mp_chapter_audios')->where('bid', $bid)->where('version_id', $version_id)->where('cid', $cid)->first();
+            if (!$count) {
+                $task_name = getProp($chapter_audio, 'book_name').' '.getProp($chapter_audio, 'chapter_name').'【'.getProp($chapter_audio, 'version_name').'】';
+            }else {
+                $task_name = getProp($chapter_audio, 'book_name').' '.getProp($chapter_audio, 'chapter_name').'【'.getProp($chapter_audio, 'version_name').'】('.($count+1).')';
+            }
             $boolen1 = DB::table('mp_chapter_audios')->where('bid', $bid)->where('version_id', $version_id)->where('cid', $cid)->update(['generate_status'=>'执行中', 'generate_json' => $generate_json, 'updated_at' => date('Y-m-d H:i:s')]);
             if (!$boolen1) {
                 DB::rollBack();
                 dd('更新生成数据失败');
             }
+            $boolen2 = DB::table('mp_audio_tasks')->insert([
+                'audio_id'      => getProp($chapter_audio, 'id'),
+                'status'        => '执行中',
+                'generate_json' => $generate_json,
+                'bid'           => $bid,
+                'book_name'     => getProp($chapter_audio, 'book_name'),
+                'version_id'    => $version_id,
+                'version_name'  => getProp($chapter_audio, 'version_name'),
+                'cid'           => $cid,
+                'chapter_name'  => getProp($chapter_audio, 'chapter_name'),
+                'task_name'     => $task_name,
+                'created_at'    => date('Y-m-d H:i:s'),
+                'updated_at'    => date('Y-m-d H:i:s')
+            ]);
+            if (!$boolen2) {
+                DB::rollBack();
+                dd('创建任务失败');
+            }
         } catch (\Exception $e) {
             DB::rollBack();
             dd('失败');

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

@@ -108,4 +108,28 @@ class BookController extends BaseController
         $result = $this->bookService->getVersionList($data);
         return $this->success($result, [new BookTransformer(), 'newBuildVersionList']);
     }
+
+    /**
+     * 合成任务列表
+     *
+     * @param Request $request
+     * @return mixed
+     */
+    public function taskList(Request $request) {
+        $data = $request->all();
+        $result = $this->bookService->getTaskList($data);
+        return $this->success($result, [new BookTransformer(), 'newBuildTaskList']);
+    }
+
+    /**
+     * 合成任务详情
+     *
+     * @param Request $request
+     * @return mixed
+     */
+    public function taskDetail(Request $request) {
+        $data = $request->all();
+        $result = $this->bookService->getTaskDetail($data);
+        return $this->success($result);
+    }
 }

+ 26 - 0
app/Services/Book/BookService.php

@@ -193,4 +193,30 @@ class BookService
 
         return $list;
     }
+
+
+    public function getTaskList($data) {
+        $task_id = getProp($data, 'task_id');
+        $task_name = getProp($data, 'task_name');
+        $generate_status = getProp($data, 'generate_status');
+
+        $query = DB::table('mp_audio_tasks')->select('id', 'task_name', 'generate_status', 'created_at');
+        if ($task_id) $query->where('id', $task_id);
+        if ($task_name) $query->where('task_name', 'like', '%'.$task_name.'%');
+        if ($generate_status) $query->where('generate_status',  $generate_status);
+        $list = $query->orderBy('id', 'desc')->paginate();
+
+        return $list;
+    }
+
+    public function getTaskDetail($data) {
+        $task_id = getProp($data, 'task_id');
+
+        $result = DB::table('mp_audio_tasks')->where('id', $task_id)->select('id as task_id', 'task_name', 'generate_status', 'generate_json')->first();
+        if (!$result) Utils::throwError('20003:任务不存在');
+        $result = (array)$result;
+        $result['generate_json'] = json_decode($result['generate_json'], true);
+
+        return $result;
+    }
 }

+ 14 - 4
app/Services/DeepSeek/DeepSeekService.php

@@ -35,14 +35,24 @@ class DeepSeekService
         $content = getProp($data, 'content');
         $model = getProp($data, 'model', 'r1');
         $model = $model == 'r1' ? 'deepseek-reasoner' : 'deepseek-chat';
+
+        // 是否启用情感
+        $enable_emotion = getProp($data, 'enable_emotion', 0);
+        if ($enable_emotion) {
+            $sys_content = '下面有一段小说文本,请帮我将文本中的每句话按从上到下的顺序拆分成角色不同的剧本文稿(不得更改上下文顺序和内容),文稿形式严格按照“角色名(男、女、中性):台词{情感}”输出,需要注意以下几点要求:
+1.角色名后不要加入任何其他词语,只能加性别,在男、女或中性中选
+2.非对话部分请全部用旁白角色代替
+3.情感必须在【开心、悲伤、生气、惊讶、恐惧、厌恶、激动、冷漠、中性、沮丧、撒娇、害羞、安慰鼓励、咆哮、温柔、自然讲述、情感电台、磁性、广告营销、气泡音、新闻播报、娱乐八卦】中选一个,不得使用其他词语';
+        }else {
+            $sys_content = '下面有一段小说文本,请帮我将文本中的每句话按从上到下的顺序拆分成角色不同的剧本文稿(不得更改上下文顺序和内容),文稿形式严格按照“角色名(男、女、中性):台词”输出,需要注意以下几点要求:
+1.角色名后不要加入任何其他词语,只能加性别,在男、女或中性中选
+2.非对话部分请全部用旁白角色代替';
+        }
         
         $messages = [
             [
                 'role'      => 'system',
-                'content'   => '下面有一段小说文本,请帮我将文本中的每句话按从上到下的顺序拆分成角色不同的剧本文稿(不得更改上下文顺序和内容),文稿形式严格按照“角色名(男或女):台词{情感}”输出,需要注意以下几点要求:
-1.角色名后不要加入任何其他词语,只能加不包括旁白的性别,在男或女中选
-2.非对话部分请全部用旁白角色代替
-3.情感必须在【开心、悲伤、生气、惊讶、恐惧、厌恶、激动、冷漠、中性、沮丧、撒娇、害羞、安慰鼓励、咆哮、温柔、自然讲述、情感电台、磁性、广告营销、气泡音、新闻播报、娱乐八卦】中选一个,不得使用其他词语'
+                'content'   => $sys_content
             ],
             [
                 'role'      => 'user',

+ 26 - 0
app/Transformer/Book/BookTransformer.php

@@ -94,4 +94,30 @@ class BookTransformer
 
         return $result;
     }
+
+    // 合成任务列表
+    public function newBuildTaskList($data): array
+    {
+        return [
+            'meta' => getMeta($data),
+            'list'  => $this->newEachTaskList($data),
+        ];
+    }
+
+    private function newEachTaskList($list): array
+    {
+        $result = [];
+        if (empty($list)) return $result;
+
+        foreach ($list as $item) {
+            $result[] = [
+                'task_id'           => getProp($item, 'id'),
+                'task_name'         => getProp($item, 'task_name'),
+                'generate_status'   => getProp($item, 'generate_status'),
+                'created_at'        => getProp($item, 'created_at'),
+            ];
+        }
+
+        return $result;
+    }
 }

+ 2 - 1
routes/api.php

@@ -29,7 +29,8 @@ Route::group(['middleware' => ['bindToken', 'bindExportToken', 'checkLogin']], f
         Route::get('addVersion', [BookController::class, 'addBookVersion']);
         Route::get('bookVersion', [BookController::class, 'bookVersion']);
         Route::get('versionList', [BookController::class, 'versionList']);
-        // Route::get('taskList', [BookController::class, 'taskList']);
+        Route::get('taskList', [BookController::class, 'taskList']);
+        Route::get('taskDetail', [BookController::class, 'taskDetail']);
     });
 
     Route::group(['prefix' => 'deepseek'], function () {