CardRidingUserBagsRepository.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace App\Repositories;
  3. use App\Models\CardRidingOrder;
  4. use App\Models\CardRidingUserBags;
  5. use Carbon\Carbon;
  6. use Illuminate\Support\Facades\Log;
  7. class CardRidingUserBagsRepository extends BaseRepository
  8. {
  9. public $userRepository;
  10. public $cardRidingRepository;
  11. public $cardRidingOrderRepository;
  12. public function __construct(CardRidingUserBags $cardRidingUserBags, UserRepository $userRepository, CardRidingRepository $cardRidingRepository, CardRidingOrderRepository $cardRidingOrderRepository)
  13. {
  14. $this->model = $cardRidingUserBags;
  15. $this->userRepository = $userRepository;
  16. $this->cardRidingRepository = $cardRidingRepository;
  17. $this->cardRidingOrderRepository = $cardRidingOrderRepository;
  18. }
  19. /**
  20. * 判断用户是否存在有效骑行卡 有的话返回该卡 没有的话 返回[]
  21. *
  22. * @param $user_id integer
  23. *
  24. * @return mixed
  25. *
  26. * User:Fx
  27. * */
  28. public function isExist($user_id, $order_start_time = '')
  29. {
  30. $cardRidingUser = $this->model->query()
  31. ->where('user_id', $user_id)
  32. ->where('status', CardRidingUserBags::STATUS_OK)
  33. ->merchant()
  34. ->first();
  35. if (empty($cardRidingUser)) {
  36. // 不存在
  37. return [];
  38. }
  39. $t1 = Carbon::make($cardRidingUser->expiration_time); // 骑行卡过期时间
  40. $t2 = Carbon::now(); // 对比过期时间
  41. if (!empty($order_start_time)) {
  42. $t2 = Carbon::make($order_start_time);
  43. }
  44. if ($t1->lt($t2)) {
  45. // 已过期
  46. $cardRidingUser->status = CardRidingUserBags::STATUS_NO;
  47. $cardRidingUser->save();
  48. return [];
  49. }
  50. if ($cardRidingUser->is_limit_times == CardRidingUserBags::LIMIT_TIMES_YES) {
  51. // 限次卡 判断是否次数归0
  52. if ($cardRidingUser->can_ridding_times <= 0) {
  53. // 次数已经归0 更新卡失效
  54. $cardRidingUser->status = CardRidingUserBags::STATUS_NO;
  55. $cardRidingUser->save();
  56. return [];
  57. }
  58. }
  59. // 存在
  60. return $cardRidingUser;
  61. }
  62. /**
  63. * 更新用户骑行卡失效
  64. *
  65. * @param $id integer
  66. * @param $user_id integer
  67. *
  68. * @return bool
  69. * */
  70. public function updateStatusNo($id)
  71. {
  72. try {
  73. $this->model->query()->where('id', $id)->update(['status' => CardRidingUserBags::STATUS_NO]);
  74. return true;
  75. } catch (\Exception $exception) {
  76. Log::error($exception->getMessage());
  77. return false;
  78. }
  79. }
  80. /**
  81. * 邀请新用户送卡 inviteNewRewardCard
  82. *
  83. * @param $card_id
  84. * @param $user_id
  85. * @return void
  86. * @author Fx
  87. *
  88. */
  89. public function inviteNewRewardCard($card_id, $user_id)
  90. {
  91. $users = $this->userRepository->byIdGetModel($user_id);
  92. $cardRiding = $this->cardRidingRepository->byIdGetModel($card_id);
  93. $cardRidingOrdersData = [
  94. 'no' => CardRidingOrder::makeNo(),
  95. 'area_id' => $users->register_area_id,
  96. 'user_id' => $users->id,
  97. 'riding_card_id' => $card_id,
  98. 'money' => 0,
  99. 'discount' => 1,
  100. 'pay_money' => 0,
  101. 'pay_type' => CardRidingOrder::PAY_TYPE_INVITE_NEW_USER_GIVE,
  102. 'pay_status' => CardRidingOrder::PAY_STATUS_OK,
  103. 'pay_time' => Carbon::now(),
  104. 'merchant_id' => merchant_id()
  105. ];
  106. $cardRidingOrder = $this->cardRidingOrderRepository->model::firstOrCreate($cardRidingOrdersData);
  107. $expiration_time = Carbon::now()->addDays($cardRiding->effective_days)->format('Y-m-d H:i:s');
  108. $data = [
  109. 'user_id' => $users->id,
  110. 'riding_card_id' => $card_id,
  111. 'card_riding_order_id' => $cardRidingOrder->id,
  112. 'take_effect_time' => Carbon::now(),
  113. 'deduction_money' => $cardRiding->deduction_money,
  114. 'expiration_time' => $expiration_time,
  115. 'is_limit_times' => $cardRiding->is_limit_times,
  116. 'can_ridding_times' => $cardRiding->times,
  117. 'day_can_ridding_times' => $cardRiding->day_can_ridding_times,
  118. 'status' => CardRidingUserBags::STATUS_OK,
  119. 'merchant_id' => merchant_id()
  120. ];
  121. // Log::info($data);
  122. return $this->model::firstOrCreate(['card_riding_order_id' => $cardRidingOrder->id], $data);
  123. }
  124. }