EpisodeController.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace App\Http\Controllers\V1\User;
  3. use App\Http\Controllers\V1\Controller;
  4. use App\Models\Episode;
  5. use App\Models\EpisodesList;
  6. use App\Models\UserConsumeRecord;
  7. use App\Models\UserEpisodesRecord;
  8. use App\Models\UserInfo;
  9. use Illuminate\Database\QueryException;
  10. class EpisodeController extends Controller
  11. {
  12. public function buyRecord($episode)
  13. {
  14. $lists = UserEpisodesRecord::filterUser()
  15. ->select(['episodes_id', 'list_id'])
  16. ->where('episodes_id', $episode)
  17. ->get()
  18. ->pluck('list_id');
  19. return $this->success($lists);
  20. }
  21. public function buy($episode, $list)
  22. {
  23. try {
  24. \DB::beginTransaction();
  25. $episode = Episode::find($episode);
  26. $list = EpisodesList::find($list);
  27. $user = UserInfo::find(\user()->id);
  28. $count = UserEpisodesRecord::filterUser()->where('list_id', $list->id)->count();
  29. if ($count) {
  30. return $this->error('请勿重复购买');
  31. }
  32. if ($user->integral < $list->sale_price) {
  33. return $this->success([
  34. 'overage' => 0,
  35. ], 0, '余额不足');
  36. }
  37. // 购买记录
  38. $record = new UserEpisodesRecord();
  39. $record->user_id = \user()->id;
  40. $record->episodes_id = $episode->id;
  41. $record->list_id = $list->id;
  42. $record->price = $list->sale_price;
  43. $record->status = 1;
  44. $record->save();
  45. // 记录日志
  46. app(UserConsumeRecord::class)->record(
  47. \user()->id,
  48. UserConsumeRecord::TYPE_CONSUME,
  49. -$list->sale_price,
  50. "购买短剧 {$episode->name} 第{$list->sort}集"
  51. );
  52. // 扣除金币
  53. $user->integral = $user->integral - $list->sale_price;
  54. $user->save();
  55. \DB::commit();
  56. return $this->success(['episode_id' => $episode, 'list_id' => $list]);
  57. } catch (QueryException $e) {
  58. \DB::rollBack();
  59. return $this->error('购买失败');
  60. } catch (\Exception $ex) {
  61. \DB::rollBack();
  62. return $this->error('购买失败');
  63. }
  64. }
  65. }