Sfoglia il codice sorgente

新增编辑版本接口,新增音色管理和分类列表接口

lh 11 ore fa
parent
commit
fd7178fde5

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

@@ -74,6 +74,18 @@ class BookController extends BaseController
     }
 
     /**
+     * 修改版本名称
+     *
+     * @param Request $request
+     * @return mixed
+     */
+    public function editBookVersion(Request $request) {
+        $data = $request->all();
+        $result = $this->bookService->editBookVersion($data);
+        return $this->success($result);
+    }
+
+    /**
      * 章节列表
      *
      * @param Request $request

+ 64 - 0
app/Http/Controllers/Timbre/TimbreController.php

@@ -0,0 +1,64 @@
+<?php
+
+namespace App\Http\Controllers\Timbre;
+
+use App\Facade\Site;
+use App\Consts\ErrorConst;
+use App\Exceptions\ApiException;
+use App\Libs\ApiResponse;
+use App\Libs\Utils;
+use App\Services\Timbre\TimbreService;
+use App\Transformer\Timbre\TimbreTransformer;
+use Illuminate\Http\Request;
+use Illuminate\Routing\Controller as BaseController;
+use Illuminate\Support\Facades\Redis;
+use Illuminate\Support\Facades\Validator;
+
+class TimbreController extends BaseController
+{
+    use ApiResponse;
+    protected $timbreService;
+
+    public function __construct(
+        TimbreService $timbreService
+    ) {
+        $this->timbreService = $timbreService;
+    }
+
+    public function categoryList(Request $request) {
+        $data = $request->all();
+        $result = $this->timbreService->getCategoryList($data);
+        return $this->success($result, [new TimbreTransformer(), 'newBuildCategoryList']);
+    }
+
+    /**
+     * 音色列表
+     *
+     * @param Request $request
+     * @return mixed
+     */
+    public function timbreList(Request $request) {
+        $data = $request->all();
+        $result = $this->timbreService->getTimbreList($data);
+        return $this->success($result, [new TimbreTransformer(), 'newBuildTimbreList']);
+    }
+
+    /**
+     * 可选书籍
+     *
+     * @param Request $request
+     * @return mixed
+     */
+    public function allBooks(Request $request) {
+        $data = $request->all();
+        $result = $this->timbreService->getAllBooks($data);
+        return $this->success($result);
+    }
+
+    // 编辑音色
+    public function editTimbre(Request $request) {
+        $data = $request->all();
+        $result = $this->timbreService->editTimbre($data);
+        return $this->success(['success' => $result ? 1 : 0]);
+    }
+}

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

@@ -137,6 +137,35 @@ class BookService
         ];
     }
 
+    public function editBookVersion($data) {
+        $version_id = getProp($data, 'version_id');
+        $version_name = trim(getProp($data, 'version_name'));
+        if (!$version_id) Utils::throwError('20003:请选择版本');
+        if (!$version_name) Utils::throwError('20003:请填写版本名');
+
+        DB::beginTransaction();
+        $boolen = DB::table('mp_book_version')->where('id', $version_id)->update([
+            'version_name' => $version_name,
+            'updated_at' => date('Y-m-d H:i:s'),
+        ]);
+        if (!$boolen) {
+            DB::rollBack();
+            Utils::throwError('20003:修改书籍版本名称失败');
+        }
+
+        $boolen1 = DB::table('mp_chapter_audios')->where('version_id', $version_id)->update([
+            'version_name' => $version_name,
+            'updated_at' => date('Y-m-d H:i:s')
+        ]);
+        if (!$boolen1) {
+            DB::rollBack();
+            Utils::throwError('20003:修改章节版本名称失败');
+        }
+
+        DB::commit();
+        return true;
+    }
+
     public function getChapterList($data) {
         $bid = getProp($data, 'bid');
         $version_id = getProp($data, 'version_id');

+ 113 - 0
app/Services/Timbre/TimbreService.php

@@ -0,0 +1,113 @@
+<?php
+
+namespace App\Services\Timbre;
+
+use App\Consts\ErrorConst;
+use App\Facade\Site;
+use App\Libs\Utils;
+use GuzzleHttp\Client;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Redis;
+use OSS\Core\OssException;
+use OSS\OssClient;
+
+class TimbreService
+{
+
+    public function __construct() {
+
+    }
+
+    public function getCategoryList($data) {
+        $category_type = getProp($data, 'category_type', 1);
+        $category_id = getProp($data, 'category_id');
+        $category_name = getProp($data, 'category_name');
+        $pid = getProp($data, 'pid');
+
+        $query = DB::table('mp_timbre_categories')->where('is_enable', 1)->select('*');
+        switch ($category_type) {
+            case 1:
+                $query->where('pid', 0);
+                break;
+            case 2:
+                $query->where('pid', $pid);
+                break;
+            case 3:
+                $query->where('pid', $pid);
+                break;
+            default:
+                break;
+        }
+
+        if ($category_id) {
+            $query->where('id', $category_id);
+        }
+        if ($category_name) {
+            $query->where('category_name', 'like', "%{$category_name}%");
+        }
+
+        return $query->orderBy('id')->paginate();
+    }
+
+    public function getTimbreList($data) {
+        $timbre_name = getProp($data, 'voice_name');
+        $language = getProp($data, 'language');
+        $status = getProp($data, 'status');
+        $dialect = getProp($data, 'dialect');
+
+        $query = DB::table('mp_timbres')->where('is_enabled', 1)->select('*');
+
+        if ($timbre_name) {
+            $query->where('timbre_name', 'like', "%{$timbre_name}%");
+        }
+
+        if ($language) {
+            $query->where('language', 'like', "%{$language}%");
+        }
+
+        if ($dialect) {
+            $query->where('dialect', $dialect);
+        }
+
+        $result = $query->orderBy('id')->paginate();
+
+        return $result;
+    }
+
+    public function editTimbre($data) {
+        $timbre_id = getProp($data, 'voice_id');
+        $timbre = DB::table('mp_timbres')->where('id', $timbre_id)->first();
+        if (!$timbre) {
+            return Utils::throwError('20003:该音色不存在');
+        }
+
+        return DB::table('mp_timbres')->where('id', $timbre_id)->update([
+            'first_category_id'     => getProp($data, 'first_category_id'),
+            'first_category_name'   => getProp($data, 'first_category_name'),
+            'second_category_id'    => getProp($data, 'second_category_id'),
+            'second_category_name'  => getProp($data, 'second_category_name'),
+            'third_category_id'     => getProp($data, 'third_category_id'),
+            'third_category_name'   => getProp($data, 'third_category_name'),
+            'label'                 => getProp($data, 'label'),
+            'updated_at'            => date('Y-m-d H:i:s'),
+        ]);
+    }
+
+    public function getAllBooks($data) {
+        $bid = getProp($data, 'bid');
+        $book_name = getProp($data, 'book_name');
+
+        $query = DB::table('book_configs')->whereIn('is_on_shelf', [1,2])->select('bid', 'book_name');
+        if ($bid) {
+            $query->where('bid', $bid);
+        }
+
+        if ($book_name) {
+            $query->where('book_name', 'like', "%{$book_name}%");
+        }
+
+        return $query->orderBy('bid', 'desc')->get()->map(function($value) {
+            return (array)$value;
+        })->toArray();
+    }
+}

+ 0 - 6
app/Transformer/Account/AccountTransformer.php

@@ -2,12 +2,6 @@
 
 namespace App\Transformer\Account;
 
-use App\Cache\StatisticCache;
-use App\Consts\BaseConst;
-use Illuminate\Support\Facades\DB;
-use Illuminate\Support\Facades\Redis;
-use Vinkla\Hashids\Facades\Hashids;
-
 class AccountTransformer
 {
     // 用户列表

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

@@ -2,12 +2,6 @@
 
 namespace App\Transformer\Book;
 
-use App\Cache\StatisticCache;
-use App\Consts\BaseConst;
-use Illuminate\Support\Facades\DB;
-use Illuminate\Support\Facades\Redis;
-use Vinkla\Hashids\Facades\Hashids;
-
 class BookTransformer
 {
     // 书籍列表

+ 97 - 0
app/Transformer/Timbre/TimbreTransformer.php

@@ -0,0 +1,97 @@
+<?php
+
+namespace App\Transformer\Timbre;
+
+class TimbreTransformer
+{
+    // 分类列表
+    public function newBuildCategoryList($data): array
+    {
+        return [
+            'meta' => getMeta($data),
+            'list'  => $this->newEachCategoryList($data),
+        ];
+    }
+
+    private function newEachCategoryList($list): array
+    {
+        $result = [];
+        if (empty($list)) return $result;
+
+        foreach ($list as $item) {
+            $result[] = [
+                'category_id'           => getProp($item, 'id'),
+                'category_name'         => getProp($item, 'category_name'),
+                'created_at'            => transDate(getProp($item, 'created_at')),
+            ];
+        }
+
+        return $result;
+    }
+
+    // 书籍列表
+    public function newBuildTimbreList($data): array
+    {
+        return [
+            'meta' => getMeta($data),
+            'list'  => $this->newEachTimbreList($data),
+        ];
+    }
+
+    private function newEachTimbreList($list): array
+    {
+        $result = [];
+        if (empty($list)) return $result;
+
+        foreach ($list as $item) {
+            $result[] = [
+                'voice_id'              => getProp($item, 'id'),
+                'voice_name'            => str_replace('(多情感)', '', getProp($item, 'timbre_name')),
+                'timbre_url'            => getProp($item, 'timbre_url'),
+                'language'              => getProp($item, 'language'),
+                'dialect'               => getProp($item, 'dialect'),
+                'emotion'               => getProp($item, 'emotion'),
+                'first_category_id'     => getProp($item, 'first_category_id'),
+                'first_category_name'   => getProp($item, 'first_category_name'),
+                'second_category_id'    => getProp($item, 'second_category_id'),
+                'second_category_name'  => getProp($item, 'second_category_name'),
+                'third_category_id'     => getProp($item, 'third_category_id'),
+                'third_category_name'   => getProp($item, 'third_category_name'),
+                'label'                 => getProp($item, 'label'),
+                'created_at'            => transDate(getProp($item, 'created_at')),
+            ];
+        }
+
+        return $result;
+    }
+
+    // 章节列表
+    public function newBuildChapterList($data): array
+    {
+        return [
+            'meta'      => getMeta($data['list']),
+            'header'    => $data['header'],
+            'list'      => $this->newEachChapterList($data['list']),
+        ];
+    }
+
+    private function newEachChapterList($list): array
+    {
+        $result = [];
+        if (empty($list)) return $result;
+
+        foreach ($list as $item) {
+            $result[] = [
+                'cid'               => getProp($item, 'cid'),
+                'chapter_name'      => getProp($item, 'chapter_name'),
+                'sequence'          => getProp($item, 'sequence'),
+                'size'              => getProp($item, 'size'),
+                'generate_status'   => getProp($item, 'generate_status'),
+                'audio_url'         => getProp($item, 'audio_url'),
+                'remark'            => getProp($item, 'remark'),
+            ];
+        }
+
+        return $result;
+    }
+}

+ 10 - 0
routes/api.php

@@ -3,6 +3,7 @@
 use App\Http\Controllers\Account\AccountController;
 use App\Http\Controllers\DeepSeek\DeepSeekController;
 use App\Http\Controllers\Book\BookController;
+use App\Http\Controllers\Timbre\TimbreController;
 use Illuminate\Support\Facades\Route;
 
 /*
@@ -27,12 +28,21 @@ Route::group(['middleware' => ['bindToken', 'bindExportToken', 'checkLogin']], f
 
         // 版本管理
         Route::get('addVersion', [BookController::class, 'addBookVersion']);
+        Route::get('editVersion', [BookController::class, 'editBookVersion']);
         Route::get('bookVersion', [BookController::class, 'bookVersion']);
         Route::get('versionList', [BookController::class, 'versionList']);
         Route::get('taskList', [BookController::class, 'taskList']);
         Route::get('taskDetail', [BookController::class, 'taskDetail']);
     });
 
+    Route::group(['prefix' => 'timbre'], function () {
+        Route::get('categoryList', [TimbreController::class, 'categoryList']);
+
+        Route::get('list', [TimbreController::class, 'timbreList']);
+        Route::get('edit', [TimbreController::class, 'editTimbre']);
+    });
+
+
     Route::group(['prefix' => 'deepseek'], function () {
         Route::post('chatWithReasoner', [DeepSeekController::class, 'chatWithReasoner']);
         Route::get('timbreList', [DeepSeekController::class, 'timbreList']);