Showing
10 changed files
with
185 additions
and
26 deletions
This diff is collapsed. Click to expand it.
| ... | @@ -3,6 +3,7 @@ | ... | @@ -3,6 +3,7 @@ |
| 3 | namespace App\Http\Controllers\V1; | 3 | namespace App\Http\Controllers\V1; |
| 4 | 4 | ||
| 5 | use App\Http\Controllers\Controller; | 5 | use App\Http\Controllers\Controller; |
| 6 | +use App\Jobs\UserMakeImmerse; | ||
| 6 | use App\Models\Collect; | 7 | use App\Models\Collect; |
| 7 | use App\Models\Immerse; | 8 | use App\Models\Immerse; |
| 8 | use App\Jobs\UserMakeVideo as MakeVideo; | 9 | use App\Jobs\UserMakeVideo as MakeVideo; |
| ... | @@ -52,34 +53,56 @@ class ImmerseController extends Controller | ... | @@ -52,34 +53,56 @@ class ImmerseController extends Controller |
| 52 | $user_id = $request->user()->id; | 53 | $user_id = $request->user()->id; |
| 53 | 54 | ||
| 54 | $immerse = Immerse::query()->find($request->item_id); | 55 | $immerse = Immerse::query()->find($request->item_id); |
| 55 | - if ($validated['type'] == 1){ | 56 | +// if ($validated['type'] == 1){ |
| 56 | - $create = Immerse::query()->create([ | 57 | +// $create = Immerse::query()->create([ |
| 57 | - 'user_id' => $user_id, | 58 | +// 'user_id' => $user_id, |
| 58 | - 'title' => '', | 59 | +// 'title' => '', |
| 59 | - 'content' => $validated['content'], | 60 | +// 'content' => $validated['content'], |
| 60 | - 'url' => '', | 61 | +// 'url' => '', |
| 61 | - 'type' => $validated['type'], | 62 | +// 'type' => $validated['type'], |
| 62 | - 'duration' => 0, | 63 | +// 'duration' => 0, |
| 63 | - 'size' => 0, | 64 | +// 'size' => 0, |
| 64 | - 'poem_id' => $immerse->poem_id, | 65 | +// 'poem_id' => $immerse->poem_id, |
| 65 | - 'temp_id' => $immerse->temp_id, | 66 | +// 'temp_id' => $immerse->temp_id, |
| 66 | - 'thumbnail' => $immerse->thumbnail, | 67 | +// 'thumbnail' => $immerse->thumbnail, |
| 67 | - 'bgm' => $validated['item_url'], | 68 | +// 'bgm' => $validated['item_url'], |
| 68 | - 'state' => 0 | 69 | +// 'state' => 0 |
| 69 | - ]); | 70 | +// ]); |
| 71 | +// | ||
| 72 | +// // 添加至队列 | ||
| 73 | +// MakeImages::dispatch($create); | ||
| 74 | +// }else{ | ||
| 75 | +// // 视频 | ||
| 76 | +// $create = Immerse::query()->create([ | ||
| 77 | +// 'user_id' => $user_id, | ||
| 78 | +// 'title' => '', | ||
| 79 | +// 'content' => $validated['content'], | ||
| 80 | +// 'url' => '', | ||
| 81 | +// 'type' => $validated['type'], | ||
| 82 | +// 'duration' => 0, | ||
| 83 | +// 'size' => 0, | ||
| 84 | +// 'poem_id' => $immerse->poem_id, | ||
| 85 | +// 'temp_id' => $immerse->temp_id, | ||
| 86 | +// 'thumbnail' => '', | ||
| 87 | +// 'bgm' => $immerse->bgm, | ||
| 88 | +// 'state' => 0 | ||
| 89 | +// ]); | ||
| 90 | +// | ||
| 91 | +// // 添加至队列 | ||
| 92 | +// MakeVideo::dispatch($create, $validated['item_url']); | ||
| 93 | +// } | ||
| 70 | 94 | ||
| 71 | - // 添加至队列 | ||
| 72 | - MakeImages::dispatch($create); | ||
| 73 | - }else{ | ||
| 74 | - // 视频 | ||
| 75 | $create = Immerse::query()->create([ | 95 | $create = Immerse::query()->create([ |
| 76 | 'user_id' => $user_id, | 96 | 'user_id' => $user_id, |
| 77 | 'title' => '', | 97 | 'title' => '', |
| 78 | 'content' => $validated['content'], | 98 | 'content' => $validated['content'], |
| 79 | 'url' => '', | 99 | 'url' => '', |
| 80 | 'type' => $validated['type'], | 100 | 'type' => $validated['type'], |
| 101 | + 'upload_file' => $validated['item_url'], | ||
| 81 | 'duration' => 0, | 102 | 'duration' => 0, |
| 82 | 'size' => 0, | 103 | 'size' => 0, |
| 104 | + 'origin_video_url' => $immerse->origin_video_url, | ||
| 105 | + 'origin_image_url' => $immerse->origin_image_url, | ||
| 83 | 'poem_id' => $immerse->poem_id, | 106 | 'poem_id' => $immerse->poem_id, |
| 84 | 'temp_id' => $immerse->temp_id, | 107 | 'temp_id' => $immerse->temp_id, |
| 85 | 'thumbnail' => '', | 108 | 'thumbnail' => '', |
| ... | @@ -88,8 +111,7 @@ class ImmerseController extends Controller | ... | @@ -88,8 +111,7 @@ class ImmerseController extends Controller |
| 88 | ]); | 111 | ]); |
| 89 | 112 | ||
| 90 | // 添加至队列 | 113 | // 添加至队列 |
| 91 | - MakeVideo::dispatch($create, $validated['item_url']); | 114 | + UserMakeImmerse::dispatch($create); |
| 92 | - } | ||
| 93 | 115 | ||
| 94 | return Response::success($create); | 116 | return Response::success($create); |
| 95 | } | 117 | } | ... | ... |
| ... | @@ -82,8 +82,11 @@ class MakeImages implements ShouldQueue | ... | @@ -82,8 +82,11 @@ class MakeImages implements ShouldQueue |
| 82 | 'content' => $this->adminMakeVideo->feel, | 82 | 'content' => $this->adminMakeVideo->feel, |
| 83 | 'url' => str_replace(Storage::disk('public')->path(''),'',$output), | 83 | 'url' => str_replace(Storage::disk('public')->path(''),'',$output), |
| 84 | 'type' => $this->adminMakeVideo->type == 1 ? 2 : 1, | 84 | 'type' => $this->adminMakeVideo->type == 1 ? 2 : 1, |
| 85 | + 'upload_file' => '', | ||
| 85 | 'duration' => 0, | 86 | 'duration' => 0, |
| 86 | 'size' => filesize($image), | 87 | 'size' => filesize($image), |
| 88 | + 'origin_video_url' => '', | ||
| 89 | + 'origin_image_url' => $this->adminMakeVideo->image_url, | ||
| 87 | 'poem_id' => $this->adminMakeVideo->poem_id, | 90 | 'poem_id' => $this->adminMakeVideo->poem_id, |
| 88 | 'temp_id' => $this->adminMakeVideo->temp_id, | 91 | 'temp_id' => $this->adminMakeVideo->temp_id, |
| 89 | 'thumbnail' => str_replace(Storage::disk('public')->path(''),'',$image), | 92 | 'thumbnail' => str_replace(Storage::disk('public')->path(''),'',$image), |
| ... | @@ -154,8 +157,11 @@ class MakeImages implements ShouldQueue | ... | @@ -154,8 +157,11 @@ class MakeImages implements ShouldQueue |
| 154 | 'content' => $this->adminMakeVideo->feel, | 157 | 'content' => $this->adminMakeVideo->feel, |
| 155 | 'url' => str_replace(Storage::disk('public')->path(''),'',$output), | 158 | 'url' => str_replace(Storage::disk('public')->path(''),'',$output), |
| 156 | 'type' => $this->adminMakeVideo->type == 1 ? 2 : 1, | 159 | 'type' => $this->adminMakeVideo->type == 1 ? 2 : 1, |
| 160 | + 'upload_file' => '', | ||
| 157 | 'duration' => $video_info['format']['duration'], | 161 | 'duration' => $video_info['format']['duration'], |
| 158 | 'size' => $video_info['format']['size'], | 162 | 'size' => $video_info['format']['size'], |
| 163 | + 'origin_video_url' => '', | ||
| 164 | + 'origin_image_url' => $this->adminMakeVideo->image_url, | ||
| 159 | 'poem_id' => $this->adminMakeVideo->poem_id, | 165 | 'poem_id' => $this->adminMakeVideo->poem_id, |
| 160 | 'temp_id' => $this->adminMakeVideo->temp_id, | 166 | 'temp_id' => $this->adminMakeVideo->temp_id, |
| 161 | 'thumbnail' => str_replace(Storage::disk('public')->path(''),'',$this->adminMakeVideo->images_url), | 167 | 'thumbnail' => str_replace(Storage::disk('public')->path(''),'',$this->adminMakeVideo->images_url), | ... | ... |
| ... | @@ -116,13 +116,28 @@ class MakeVideo implements ShouldQueue | ... | @@ -116,13 +116,28 @@ class MakeVideo implements ShouldQueue |
| 116 | return; | 116 | return; |
| 117 | } | 117 | } |
| 118 | 118 | ||
| 119 | + if ($this->adminMakeVideo->thumbnail == 2){ | ||
| 120 | + // 截取中间帧作为视频封面 | ||
| 121 | + $frame = ceil($media_info['streams'][0]['nb_frames'] / 2); | ||
| 122 | + $thumbnail = $this->getTempPath('.jpg',false); | ||
| 123 | + $cmd = $this->ffmpeg . ' -y ' . | ||
| 124 | + ' -i ' . escapeshellarg($file) . | ||
| 125 | + ' -filter_complex "[0:v]select=\'eq(n,' . $frame . ')\'[img]" ' . | ||
| 126 | + ' -map [img]'. | ||
| 127 | + ' -frames:v 1 -s 720x1280 -preset superfast '. | ||
| 128 | + escapeshellarg($thumbnail); | ||
| 129 | + if (!$this->execmd($cmd)) return ; | ||
| 130 | + }else{ | ||
| 131 | + $thumbnail = $adminMakeVideo->thumbnail_url; | ||
| 132 | + } | ||
| 133 | + | ||
| 119 | $end_wallpaper = Storage::disk('public')->path('ffmpeg') . "/end_wallpaper.png"; | 134 | $end_wallpaper = Storage::disk('public')->path('ffmpeg') . "/end_wallpaper.png"; |
| 120 | - $thumbnail = Storage::disk('public')->path('ffmpeg') . "/thumbnail.png"; | 135 | + $avatar = Storage::disk('public')->path('ffmpeg') . "/thumbnail.png"; |
| 121 | $font = Storage::disk('public')->path('ffmpeg') . "/arialuni.ttf"; | 136 | $font = Storage::disk('public')->path('ffmpeg') . "/arialuni.ttf"; |
| 122 | $signature = "一言 · 官方出品"; | 137 | $signature = "一言 · 官方出品"; |
| 123 | 138 | ||
| 124 | // 生成贴纸和签名 | 139 | // 生成贴纸和签名 |
| 125 | - $end_wallpaper = $this->wallpaperWithSignature($end_wallpaper, $thumbnail, $signature, $font); | 140 | + $end_wallpaper = $this->wallpaperWithSignature($end_wallpaper, $avatar, $signature, $font); |
| 126 | 141 | ||
| 127 | // 截取最后一帧 | 142 | // 截取最后一帧 |
| 128 | $last_frame_video = $this->getTempPath(); | 143 | $last_frame_video = $this->getTempPath(); |
| ... | @@ -176,11 +191,14 @@ class MakeVideo implements ShouldQueue | ... | @@ -176,11 +191,14 @@ class MakeVideo implements ShouldQueue |
| 176 | 'content' => $this->adminMakeVideo->feel, | 191 | 'content' => $this->adminMakeVideo->feel, |
| 177 | 'url' => str_replace(Storage::disk('public')->path(''),'',$video), | 192 | 'url' => str_replace(Storage::disk('public')->path(''),'',$video), |
| 178 | 'type' => $this->adminMakeVideo->type == 1 ? 2 : 1, | 193 | 'type' => $this->adminMakeVideo->type == 1 ? 2 : 1, |
| 194 | + 'upload_file' => '', | ||
| 179 | 'duration' => $video_info['format']['duration'], | 195 | 'duration' => $video_info['format']['duration'], |
| 180 | 'size' => $video_info['format']['size'], | 196 | 'size' => $video_info['format']['size'], |
| 197 | + 'origin_video_url' => $this->adminMakeVideo->video_url, | ||
| 198 | + 'origin_image_url' => '', | ||
| 181 | 'poem_id' => $this->adminMakeVideo->poem_id, | 199 | 'poem_id' => $this->adminMakeVideo->poem_id, |
| 182 | 'temp_id' => $this->adminMakeVideo->temp_id, | 200 | 'temp_id' => $this->adminMakeVideo->temp_id, |
| 183 | - 'thumbnail' => '', | 201 | + 'thumbnail' => $thumbnail, |
| 184 | 'state' => 1, | 202 | 'state' => 1, |
| 185 | 'bgm' => $this->adminMakeVideo->bgm_url ?? '', | 203 | 'bgm' => $this->adminMakeVideo->bgm_url ?? '', |
| 186 | ]); | 204 | ]); | ... | ... |
app/Jobs/UserMakeImmerse.php
0 → 100644
This diff is collapsed. Click to expand it.
app/Payment/ApplePayment.php
0 → 100644
| 1 | +<?php | ||
| 2 | +/** | ||
| 3 | + * Created by PhpStorm. | ||
| 4 | + * User: lishuai | ||
| 5 | + * Date: 2022/2/15 | ||
| 6 | + * Time: 4:23 PM | ||
| 7 | + */ | ||
| 8 | + | ||
| 9 | +namespace App\Payment; | ||
| 10 | + | ||
| 11 | +use App\Models\MembershipGood; | ||
| 12 | +use App\Models\Order; | ||
| 13 | +use App\Models\User; | ||
| 14 | +use App\Models\UserProfile; | ||
| 15 | +use Carbon\Carbon; | ||
| 16 | +use GuzzleHttp\Client; | ||
| 17 | +use Illuminate\Support\Facades\Log; | ||
| 18 | +use Illuminate\Support\Facades\Redis; | ||
| 19 | + | ||
| 20 | +class ApplePayment implements PaymentInterface | ||
| 21 | +{ | ||
| 22 | + | ||
| 23 | + const IS_SANDBOX = true; | ||
| 24 | + | ||
| 25 | + | ||
| 26 | + | ||
| 27 | + public function __construct() | ||
| 28 | + { | ||
| 29 | + | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + | ||
| 33 | + | ||
| 34 | + public function prepare(Order $order) | ||
| 35 | + { | ||
| 36 | + // 查询订单对应的产品id | ||
| 37 | + } | ||
| 38 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
app/Payment/GooglePayment.php
0 → 100644
| 1 | +<?php | ||
| 2 | +/** | ||
| 3 | + * Created by PhpStorm. | ||
| 4 | + * User: lishuai | ||
| 5 | + * Date: 2022/2/15 | ||
| 6 | + * Time: 4:23 PM | ||
| 7 | + */ | ||
| 8 | + | ||
| 9 | +namespace App\Payment; | ||
| 10 | + | ||
| 11 | +use App\Models\MembershipGood; | ||
| 12 | +use App\Models\Order; | ||
| 13 | +use App\Models\User; | ||
| 14 | +use App\Models\UserProfile; | ||
| 15 | +use Carbon\Carbon; | ||
| 16 | +use GuzzleHttp\Client; | ||
| 17 | +use Illuminate\Support\Facades\Log; | ||
| 18 | +use Illuminate\Support\Facades\Redis; | ||
| 19 | + | ||
| 20 | +class GooglePayment implements PaymentInterface | ||
| 21 | +{ | ||
| 22 | + | ||
| 23 | + const IS_SANDBOX = true; | ||
| 24 | + | ||
| 25 | + | ||
| 26 | + | ||
| 27 | + public function __construct() | ||
| 28 | + { | ||
| 29 | + | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + | ||
| 33 | + | ||
| 34 | + public function prepare(Order $order) | ||
| 35 | + { | ||
| 36 | + // 查询订单对应的产品id | ||
| 37 | + } | ||
| 38 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -19,8 +19,12 @@ class PaymentFactory | ... | @@ -19,8 +19,12 @@ class PaymentFactory |
| 19 | return new WechatPayment(); | 19 | return new WechatPayment(); |
| 20 | case 'paypal': | 20 | case 'paypal': |
| 21 | return new PaypalPayment(); | 21 | return new PaypalPayment(); |
| 22 | + case 'google': | ||
| 23 | + return new GooglePayment(); | ||
| 24 | + case 'apple': | ||
| 25 | + return new ApplePayment(); | ||
| 22 | default: | 26 | default: |
| 23 | - throw new \Exception('未知的支付方式'); | 27 | + return new \Exception('未知的支付方式'); |
| 24 | } | 28 | } |
| 25 | } | 29 | } |
| 26 | } | 30 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| 1 | +<?php | ||
| 2 | + | ||
| 3 | +use Illuminate\Database\Migrations\Migration; | ||
| 4 | +use Illuminate\Database\Schema\Blueprint; | ||
| 5 | +use Illuminate\Support\Facades\Schema; | ||
| 6 | + | ||
| 7 | +class AlterImmerse2Table extends Migration | ||
| 8 | +{ | ||
| 9 | + /** | ||
| 10 | + * Run the migrations. | ||
| 11 | + * | ||
| 12 | + * @return void | ||
| 13 | + */ | ||
| 14 | + public function up() | ||
| 15 | + { | ||
| 16 | + Schema::table('immerse', function (Blueprint $table) { | ||
| 17 | + $table->string('upload_file')->after('type')->comment('上传资源路径'); | ||
| 18 | + $table->string('origin_video_url')->after('size')->comment('原始视频路径'); | ||
| 19 | + $table->string('origin_image_url')->after('origin_video_url')->comment('原始图片路径'); | ||
| 20 | + $table->string('tags')->after('comment')->default('')->comment('标签'); | ||
| 21 | + }); | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * Reverse the migrations. | ||
| 26 | + * | ||
| 27 | + * @return void | ||
| 28 | + */ | ||
| 29 | + public function down() | ||
| 30 | + { | ||
| 31 | + Schema::dropColumns('immerse', ['upload_file', 'origin_video_url', 'origin_image_url', 'tags']); | ||
| 32 | + } | ||
| 33 | +} |
| ... | @@ -23,7 +23,7 @@ Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Route | ... | @@ -23,7 +23,7 @@ Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Route |
| 23 | /** 社会化用户登录*/ | 23 | /** 社会化用户登录*/ |
| 24 | $api->any('auth/{service}/callback', 'AuthController@apiHandleProviderCallback'); | 24 | $api->any('auth/{service}/callback', 'AuthController@apiHandleProviderCallback'); |
| 25 | 25 | ||
| 26 | - /** */ | 26 | + /** 增加观看次数 */ |
| 27 | $api->get('/addview/{id}', 'ImmerseController@addview'); | 27 | $api->get('/addview/{id}', 'ImmerseController@addview'); |
| 28 | }); | 28 | }); |
| 29 | 29 | ... | ... |
-
Please register or login to post a comment