You've already forked lubo_comment_query
							
							抽象封装简化
This commit is contained in:
		| @@ -6,6 +6,7 @@ use App\Models\Programs; | |||||||
| use App\Models\ProgramVideos; | use App\Models\ProgramVideos; | ||||||
| use App\Models\VideoComments; | use App\Models\VideoComments; | ||||||
| use App\Models\VideoParts; | use App\Models\VideoParts; | ||||||
|  | use App\Util\ProgramVideoUtil; | ||||||
| use App\Util\TimeUtil; | use App\Util\TimeUtil; | ||||||
| use Carbon\Carbon; | use Carbon\Carbon; | ||||||
| use Illuminate\Database\QueryException; | use Illuminate\Database\QueryException; | ||||||
| @@ -97,30 +98,6 @@ class ProgramConstructController extends BaseController | |||||||
|                 $video_pivot->start_part = $match["part"]; |                 $video_pivot->start_part = $match["part"]; | ||||||
|                 $video_pivot->start_time = $time; |                 $video_pivot->start_time = $time; | ||||||
|                 $video_pivot->stop_part = $match["part"]; |                 $video_pivot->stop_part = $match["part"]; | ||||||
|                 if (sizeof($video_parts) > 0) { |  | ||||||
|                     /** |  | ||||||
|                      * 计算开始时间 |  | ||||||
|                      * @var VideoParts $cur_part |  | ||||||
|                      */ |  | ||||||
|                     $cur_part = $video_parts->where("part_num", "=", $match["part"])->first(); |  | ||||||
|                     if ($cur_part) { |  | ||||||
|                         // 根据标题名称,判断开始时间
 |  | ||||||
|                         $title = $cur_part->title; |  | ||||||
|                         $date_str = substr($title, 0, 13); |  | ||||||
|                         $base_time = Carbon::createFromFormat("Ymd_Hi", $date_str); |  | ||||||
|                         $start_time = Carbon::createFromFormat("H:i:s", $time); |  | ||||||
|                         $video_pivot->created_at = TimeUtil::calculate_program_time( |  | ||||||
|                             $base_time, |  | ||||||
|                             $start_time->secondsSinceMidnight() |  | ||||||
|                         ); |  | ||||||
|                         if ($cur_part->duration->diffInMinutes($start_time) < 20) { |  | ||||||
|                             $video_pivot->stop_part += 1; |  | ||||||
|                             if ($video_pivot->stop_part > $video_parts->pluck("part_num")->max()) { |  | ||||||
|                                 $video_pivot->stop_part = $video_parts->pluck("part_num")->max(); |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 $program->save(); |                 $program->save(); | ||||||
|                 $program->video_pivots()->save($video_pivot); |                 $program->video_pivots()->save($video_pivot); | ||||||
|             } |             } | ||||||
| @@ -131,6 +108,7 @@ class ProgramConstructController extends BaseController | |||||||
|                 "content" => $e->getMessage() |                 "content" => $e->getMessage() | ||||||
|             ]); |             ]); | ||||||
|         } |         } | ||||||
|  |         ProgramVideoUtil::fix_created_at_by_part_info($bvid); | ||||||
|         return redirect(route("program.construct.list")); |         return redirect(route("program.construct.list")); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|   | |||||||
| @@ -4,8 +4,7 @@ namespace App\Http\Controllers; | |||||||
| 
 | 
 | ||||||
| use App\Models\Programs; | use App\Models\Programs; | ||||||
| use App\Models\ProgramVideos; | use App\Models\ProgramVideos; | ||||||
| use App\Util\TimeUtil; | use App\Util\ProgramVideoUtil; | ||||||
| use Illuminate\Database\Eloquent\Builder; |  | ||||||
| use Illuminate\Http\Request; | use Illuminate\Http\Request; | ||||||
| use Illuminate\Routing\Controller as BaseController; | use Illuminate\Routing\Controller as BaseController; | ||||||
| use Illuminate\Support\Carbon; | use Illuminate\Support\Carbon; | ||||||
| @@ -125,29 +124,7 @@ class ProgramVideoConstructController extends BaseController | |||||||
|         } |         } | ||||||
|         $each_time = $request->post("each_time"); |         $each_time = $request->post("each_time"); | ||||||
|         $each_time_sec = Carbon::createFromFormat("H:i:s", $each_time)->secondsSinceMidnight(); |         $each_time_sec = Carbon::createFromFormat("H:i:s", $each_time)->secondsSinceMidnight(); | ||||||
|         /** |         ProgramVideoUtil::fix_created_at_by_manual($program_video, $each_time_sec); | ||||||
|          * @var $program_videos ProgramVideos[] |  | ||||||
|          */ |  | ||||||
|         $program_videos = ProgramVideos::query() |  | ||||||
|             ->where("video_bvid", "=", $program_video->video_bvid) |  | ||||||
|             ->where("id", "!=", $program_video->id) |  | ||||||
|             ->where(function (Builder $query) use ($program_video) { |  | ||||||
|                 $query->where("created_at", ">", $program_video->created_at)->orWhere("created_at", "=", null); |  | ||||||
|             }) |  | ||||||
|             ->get(); |  | ||||||
|         $created_at = $program_video->created_at; |  | ||||||
|         $base_time = $created_at->subSeconds($program_video->start_sec)->subSeconds(($program_video->start_part - 1) * $each_time_sec); |  | ||||||
|         foreach ($program_videos as $video) { |  | ||||||
|             if ($video->id === $program_video->id) { |  | ||||||
|                 continue; |  | ||||||
|             } |  | ||||||
|             $video->created_at = TimeUtil::calculate_program_time( |  | ||||||
|                 $base_time, |  | ||||||
|                 $video->start_sec, |  | ||||||
|                 ($video->start_part - 1) * $each_time_sec |  | ||||||
|             ); |  | ||||||
|             $video->update(); |  | ||||||
|         } |  | ||||||
|         return redirect(route("program.construct.list")); |         return redirect(route("program.construct.list")); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										108
									
								
								app/Util/ProgramVideoUtil.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								app/Util/ProgramVideoUtil.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,108 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | namespace App\Util; | ||||||
|  | 
 | ||||||
|  | use App\Models\ProgramVideos; | ||||||
|  | use App\Models\VideoParts; | ||||||
|  | use Carbon\Carbon; | ||||||
|  | use Illuminate\Database\Eloquent\Builder; | ||||||
|  | use Illuminate\Database\Eloquent\ModelNotFoundException; | ||||||
|  | use Illuminate\Support\Facades\DB; | ||||||
|  | 
 | ||||||
|  | class ProgramVideoUtil | ||||||
|  | { | ||||||
|  |     public static function fix_created_at_by_manual(ProgramVideos $base_video, int $each_time_sec, bool $force = false): bool | ||||||
|  |     { | ||||||
|  |         $base_time = $base_video->created_at->copy() | ||||||
|  |             ->subSeconds($base_video->start_sec)->subSeconds(($base_video->start_part - 1) * $each_time_sec); | ||||||
|  |         $query = ProgramVideos::query() | ||||||
|  |             ->where("video_bvid", "=", $base_video->video_bvid) | ||||||
|  |             ->where("id", "!=", $base_video->id); | ||||||
|  |         if (!$force) { | ||||||
|  |             $query->where(function (Builder $query) use ($base_video) { | ||||||
|  |                 $query->where("created_at", ">", $base_video->created_at)->orWhere("created_at", "=", null); | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  |         $program_videos = $query->get(); | ||||||
|  |         DB::beginTransaction(); | ||||||
|  |         try { | ||||||
|  |             /** | ||||||
|  |              * @var ProgramVideos $video | ||||||
|  |              */ | ||||||
|  |             foreach ($program_videos as $video) { | ||||||
|  |                 if ($video->id === $base_video->id) { | ||||||
|  |                     continue; | ||||||
|  |                 } | ||||||
|  |                 $video->created_at = static::calculate_program_time( | ||||||
|  |                     $base_time, | ||||||
|  |                     $video->start_sec, | ||||||
|  |                     ($video->start_part - 1) * $each_time_sec | ||||||
|  |                 ); | ||||||
|  |                 $video->save(); | ||||||
|  |             } | ||||||
|  |             DB::commit(); | ||||||
|  |             return true; | ||||||
|  |         } catch (\Exception $e) { | ||||||
|  |             DB::rollBack(); | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static function fix_created_at_by_part_info(string $bvid, bool $force = false): bool | ||||||
|  |     { | ||||||
|  |         $video_parts = VideoParts::query()->where("bvid", "=", $bvid)->get(); | ||||||
|  |         if (sizeof($video_parts) === 0) { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |         $query = ProgramVideos::query()->where("video_bvid", "=", $bvid); | ||||||
|  |         if (!$force) { | ||||||
|  |             $query->where("created_at", "=", null); | ||||||
|  |         } | ||||||
|  |         $program_videos = $query->get(); | ||||||
|  |         DB::beginTransaction(); | ||||||
|  |         try { | ||||||
|  |             /** | ||||||
|  |              * @var ProgramVideos $program_video | ||||||
|  |              */ | ||||||
|  |             foreach ($program_videos as $program_video) { | ||||||
|  |                 /** | ||||||
|  |                  * 计算开始时间 | ||||||
|  |                  * @var VideoParts $cur_part | ||||||
|  |                  */ | ||||||
|  |                 $cur_part = $video_parts->where("part_num", "=", $program_video->start_part)->first(); | ||||||
|  |                 if ($cur_part) { | ||||||
|  |                     // 根据标题名称,判断开始时间
 | ||||||
|  |                     $title = $cur_part->title; | ||||||
|  |                     $date_str = substr($title, 0, 13); | ||||||
|  |                     $base_time = Carbon::createFromFormat("Ymd_Hi", $date_str); | ||||||
|  |                     $start_time = Carbon::createFromFormat("H:i:s", $program_video->start_time); | ||||||
|  |                     $program_video->created_at = static::calculate_program_time( | ||||||
|  |                         $base_time, | ||||||
|  |                         $start_time->secondsSinceMidnight() | ||||||
|  |                     ); | ||||||
|  |                     if ($cur_part->duration->diffInMinutes($start_time) < 20) { | ||||||
|  |                         $program_video->stop_part += 1; | ||||||
|  |                         if ($program_video->stop_part > $video_parts->pluck("part_num")->max()) { | ||||||
|  |                             $program_video->stop_part = $video_parts->pluck("part_num")->max(); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             DB::commit(); | ||||||
|  |             return true; | ||||||
|  |         } catch (\Exception $e) { | ||||||
|  |             DB::rollBack(); | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     protected static function calculate_program_time(Carbon $base_time, int $seconds, int $bias = 0): Carbon | ||||||
|  |     { | ||||||
|  |         $time = $base_time->copy()->addSeconds($seconds)->addSeconds($bias); | ||||||
|  |         if ($time->second > 30) { | ||||||
|  |             $time->addMinute(); | ||||||
|  |         } | ||||||
|  |         $time->seconds(0); | ||||||
|  |         return $time; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,19 +0,0 @@ | |||||||
| <?php |  | ||||||
| 
 |  | ||||||
| namespace App\Util; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| use Carbon\Carbon; |  | ||||||
| 
 |  | ||||||
| class TimeUtil |  | ||||||
| { |  | ||||||
|     public static function calculate_program_time(Carbon $base_time, int $seconds, int $bias = 0): Carbon |  | ||||||
|     { |  | ||||||
|         $time = $base_time->copy()->addSeconds($seconds)->addSeconds($bias); |  | ||||||
|         if ($time->second > 30) { |  | ||||||
|             $time->addMinute(); |  | ||||||
|         } |  | ||||||
|         $time->seconds(0); |  | ||||||
|         return $time; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
		Reference in New Issue
	
	Block a user