DepositCardController.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Filters\DepositCardFilter;
  4. use App\Http\Requests\DepositCardRequest;
  5. use App\Http\Resources\DepositCardResource;
  6. use App\Models\AdminMerchant;
  7. use App\Models\AdminUser;
  8. use App\Models\AdminUserArea;
  9. use App\Models\DepositCard;
  10. use App\Models\DepositCardOrder;
  11. use App\Models\User;
  12. use App\Utils\Admin;
  13. use Carbon\Carbon;
  14. use Illuminate\Http\Request;
  15. use App\Http\Controllers\Controller;
  16. use Illuminate\Support\Facades\DB;
  17. use Illuminate\Support\Facades\Log;
  18. class DepositCardController extends Controller
  19. {
  20. /**
  21. * index
  22. *
  23. * @param Request $request
  24. * @param DepositCardFilter $depositCardFilter
  25. * @return \Illuminate\Http\JsonResponse
  26. * @author Fx
  27. */
  28. public function index(Request $request, DepositCardFilter $depositCardFilter)
  29. {
  30. $area_ids = AdminUser::getAreaIdsByAdminId(Admin::user()->id);
  31. $depositCards = DepositCard::query()->filter($depositCardFilter)->where(AdminMerchant::getMerchantWhere())->orderByDesc('id')->whereIn('area_id', $area_ids);
  32. $depositCards = $request->get('all') ? $depositCards->get() : $depositCards->paginate();
  33. return $this->ok(DepositCardResource::collection($depositCards));
  34. }
  35. /**
  36. * Show the form for creating a new resource.
  37. *
  38. * @return \Illuminate\Http\Response
  39. */
  40. public function create()
  41. {
  42. //
  43. }
  44. /**
  45. * store
  46. *
  47. * @param DepositCardRequest $request
  48. * @param DepositCard $depositCard
  49. * @return \Illuminate\Http\JsonResponse
  50. * @author Fx
  51. *
  52. */
  53. public function store(DepositCardRequest $request, DepositCard $depositCard)
  54. {
  55. $inputs = $request->validated();
  56. if ($inputs['is_discount'] == DepositCard::DISCOUNT_NO) {
  57. // 无折扣设为100
  58. $inputs['discount'] = 100;
  59. }
  60. $inputs['merchant_id'] = AdminMerchant::getMerchantWhere();
  61. $depositCard = $depositCard->create($inputs);
  62. //
  63. return $this->created(DepositCardResource::make($depositCard));
  64. }
  65. /**
  66. * Display the specified resource.
  67. *
  68. * @param int $id
  69. * @return \Illuminate\Http\Response
  70. */
  71. public function show($id)
  72. {
  73. //
  74. }
  75. /**
  76. * Show the form for editing the specified resource.
  77. *
  78. * @param int $id
  79. * @return \Illuminate\Http\Response
  80. */
  81. public function edit(DepositCard $depositCard)
  82. {
  83. //
  84. return $this->ok(DepositCardResource::make($depositCard));
  85. }
  86. /**
  87. * Update the specified resource in storage.
  88. *
  89. * @param \Illuminate\Http\Request $request
  90. * @param int $id
  91. * @return \Illuminate\Http\Response
  92. */
  93. public function update(DepositCardRequest $request, DepositCard $depositCard)
  94. {
  95. //
  96. $inputs = $request->validated();
  97. if ($inputs['is_discount'] == DepositCard::DISCOUNT_NO) {
  98. // 无折扣设为100
  99. $inputs['discount'] = 100;
  100. }
  101. $depositCard->update($inputs);
  102. //
  103. return $this->created(DepositCardResource::make($depositCard));
  104. }
  105. /**
  106. * destroy
  107. *
  108. * @param DepositCard $depositCard
  109. * @return \Illuminate\Http\JsonResponse
  110. * @author Fx
  111. *
  112. */
  113. public function destroy(DepositCard $depositCard)
  114. {
  115. //
  116. $depositCard->delete();
  117. return $this->noContent();
  118. }
  119. public function giveDepositCardToUser(Request $request)
  120. {
  121. $mobile = $request->get('mobile') ?? '';
  122. $card_id = $request->get('card_id') ?? '';
  123. if (empty($mobile) || empty($card_id)) return $this->error('参数错误');
  124. $users = User::query()
  125. ->where('mobile', $mobile)
  126. ->first();
  127. if (empty($users)) return $this->error('找不到该用户,请检查手机号是否正确');
  128. $depositCard = DepositCard::query()
  129. ->where('status', DepositCard::STATUS_OK)
  130. ->find($card_id);
  131. if (empty($depositCard)) return $this->error('找不到该免押金卡');
  132. if ($depositCard->is_give == DepositCard::GIVE_NO) return $this->error('此卡不能赠送');
  133. DB::beginTransaction();
  134. try {
  135. $depositCardOrder = DepositCardOrder::firstOrCreate([
  136. 'no' => DepositCardOrder::makeNo(),
  137. 'area_id' => $users->register_area_id,
  138. 'user_id' => $users->id,
  139. 'deposit_cards_id' => $depositCard->id,
  140. 'money' => 0.00,
  141. 'effective_days' => $depositCard->effective_days,
  142. 'discount' => 100,
  143. 'pay_money' => 0.00,
  144. 'pay_type' => DepositCardOrder::PAY_TYPE_ADMIN_GIVE,
  145. 'pay_status' => DepositCardOrder::PAY_STATUS_OK,
  146. 'pay_time' => Carbon::now(),
  147. ]);
  148. $deposit_expire_time = Carbon::parse($users->deposit_expire_time);
  149. if(Carbon::now()->gte($deposit_expire_time)){
  150. $time = Carbon::now();
  151. }else{
  152. $time = $deposit_expire_time;
  153. }
  154. if($users->deposit_type == User::DEPOSIT_MONEY){
  155. User::where('id', $users->id)->update([
  156. 'deposit_expire_time' => $time->addDays($depositCardOrder->effective_days),
  157. // 'deposit_type' => User::DEPOSIT_CARD,
  158. 'is_deposit' => User::DEPOSIT_OK
  159. ]);
  160. }else{
  161. User::where('id', $users->id)->update([
  162. 'deposit_expire_time' => $time->addDays($depositCardOrder->effective_days),
  163. 'deposit_type' => User::DEPOSIT_CARD,
  164. 'is_deposit' => User::DEPOSIT_OK
  165. ]);
  166. }
  167. DB::commit();
  168. return $this->ok('操作成功');
  169. } catch (\Exception $exception) {
  170. DB::rollBack();
  171. Log::error($exception->getMessage());
  172. return $this->error('出现错误,请联系管理员');
  173. }
  174. }
  175. }