CardRidingController.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Filters\CardRidingFilter;
  4. use App\Http\Requests\CardRidingRequest;
  5. use App\Http\Resources\CardRidingResource;
  6. use App\Models\AdminMerchant;
  7. use App\Models\CardRiding;
  8. use App\Models\CardRidingOrder;
  9. use App\Models\CardRidingUserBags;
  10. use App\Models\User;
  11. use App\Utils\Admin;
  12. use Carbon\Carbon;
  13. use Illuminate\Http\Request;
  14. use App\Http\Controllers\Controller;
  15. use Illuminate\Support\Facades\DB;
  16. use Illuminate\Support\Facades\Log;
  17. class CardRidingController extends Controller
  18. {
  19. /**
  20. * index 骑行卡列表
  21. *
  22. * @param Request $request
  23. * @param CardRidingFilter $cardRidingFilter
  24. * @return \Illuminate\Http\JsonResponse
  25. * @author Fx
  26. *
  27. */
  28. public function index(Request $request, CardRidingFilter $cardRidingFilter)
  29. {
  30. //
  31. $admin_id = Admin::user()->id;
  32. $ridingCard = CardRiding::query()
  33. ->filter($cardRidingFilter)
  34. ->where(AdminMerchant::getMerchantWhere())
  35. ->with(['areaRidingCard'])
  36. ->orderByDesc('id');
  37. if (!Admin::isAdministrator()) {
  38. $ridingCard = $ridingCard->where(function ($q) use ($admin_id) {
  39. $q->where('admin_id', $admin_id)->orWhere('admin_id', 1);
  40. });
  41. }
  42. $ridingCard = $request->get('all') ? $ridingCard->get() : $ridingCard->paginate();
  43. return $this->ok(CardRidingResource::collection($ridingCard));
  44. }
  45. /**
  46. * Show the form for creating a new resource.
  47. *
  48. * @return \Illuminate\Http\Response
  49. */
  50. public function create()
  51. {
  52. //
  53. }
  54. /**
  55. * store 添加骑行卡
  56. *
  57. * @param CardRidingRequest $ridingCardRequest
  58. * @param CardRiding $cardRiding
  59. * @return \Illuminate\Http\Response
  60. * @author Fx
  61. *
  62. */
  63. public function store(CardRidingRequest $ridingCardRequest, CardRiding $cardRiding)
  64. {
  65. //
  66. $admin_id = Admin::user()->id;
  67. $inputs = $ridingCardRequest->validated();
  68. if ($inputs['is_limit_times'] == CardRiding::LIMIT_TIMES_NO) {
  69. // 不限次设为0
  70. $inputs['times'] = 0;
  71. }
  72. if ($inputs['is_discount'] == CardRiding::DISCOUNT_NO) {
  73. // 无折扣设为1.00
  74. $inputs['discount'] = 1.00;
  75. }
  76. $inputs['admin_id'] = $admin_id;
  77. $inputs['merchant_id'] = AdminMerchant::putMerchantId();
  78. $cardRiding = $cardRiding->create($inputs);
  79. if (!empty($areas = $inputs['areas'] ?? [])) {
  80. $cardRiding->areaRidingCard()->attach($areas);
  81. }
  82. return $this->created(CardRidingResource::make($cardRiding));
  83. }
  84. /**
  85. * Display the specified resource.
  86. *
  87. * @param int $id
  88. * @return \Illuminate\Http\Response
  89. */
  90. public function show($id)
  91. {
  92. //
  93. }
  94. /**
  95. * edit 编辑骑行卡
  96. *
  97. * @param CardRiding $cardRiding
  98. * @return \Illuminate\Http\JsonResponse
  99. * @author Fx
  100. *
  101. */
  102. public function edit(CardRiding $cardRiding)
  103. {
  104. //
  105. $cardRiding->load(['areaRidingCard']);
  106. return $this->ok(CardRidingResource::make($cardRiding));
  107. }
  108. /**
  109. * update 更新骑行卡
  110. *
  111. * @param CardRidingRequest $ridingCardRequest
  112. * @param CardRiding $cardRiding
  113. * @return \Illuminate\Http\JsonResponse
  114. * @author Fx
  115. *
  116. */
  117. public function update(CardRidingRequest $ridingCardRequest, CardRiding $cardRiding)
  118. {
  119. //
  120. $admin_id = Admin::user()->id;
  121. $inputs = $ridingCardRequest->validated();
  122. if (!Admin::isAdministrator() && !Admin::isNormalAdministrator()) {
  123. if ($admin_id !== $cardRiding->admin_id) {
  124. return $this->error('暂无权限');
  125. }
  126. }
  127. if ($inputs['is_limit_times'] == CardRiding::LIMIT_TIMES_NO) {
  128. // 不限次设为0
  129. $inputs['times'] = 0;
  130. }
  131. if ($inputs['is_discount'] == CardRiding::DISCOUNT_NO) {
  132. // 无折扣设为1.00
  133. $inputs['discount'] = 1.00;
  134. }
  135. // Log::info($inputs);
  136. $cardRiding->update($inputs);
  137. if (isset($inputs['areas'])) {
  138. $cardRiding->areaRidingCard()->sync($inputs['areas']);
  139. }
  140. return $this->created(CardRidingResource::make($cardRiding));
  141. }
  142. /**
  143. * destroy 删除骑行卡
  144. *
  145. * @param CardRiding $ridingCard
  146. * @return \Illuminate\Http\JsonResponse
  147. * @author Fx
  148. *
  149. */
  150. public function destroy(CardRiding $ridingCard)
  151. {
  152. //
  153. $ridingCard->delete();
  154. return $this->noContent();
  155. }
  156. /**
  157. * giveCardToUser 赠送骑行卡
  158. *
  159. * @param Request $request
  160. * @return \Illuminate\Http\JsonResponse
  161. * @author Fx
  162. *
  163. */
  164. public function giveCardToUser(Request $request)
  165. {
  166. $mobile = $request->get('mobile') ?? '';
  167. $card_id = $request->get('card_id') ?? '';
  168. if (empty($mobile) || empty($card_id)) return $this->error('参数错误');
  169. $users = User::query()
  170. ->where('mobile', $mobile)
  171. ->first();
  172. if (empty($users)) return $this->error('找不到该用户,请检查手机号是否正确');
  173. $cardRiding = CardRiding::query()
  174. ->where('status', CardRiding::STATUS_OK)
  175. ->find($card_id);
  176. if (empty($cardRiding)) return $this->error('找不到该骑行卡');
  177. if ($cardRiding->is_give == CardRiding::GIVE_NO) return $this->error('该骑行卡不可赠送');
  178. $expiration_time = Carbon::now()->addDays($cardRiding->effective_days)->format('Y-m-d H:i:s');
  179. try {
  180. DB::beginTransaction();
  181. $cardRidingOrder = CardRidingOrder::firstOrCreate([
  182. 'no' => CardRidingOrder::makeNo(),
  183. 'area_id' => $users->register_area_id,
  184. 'user_id' => $users->id,
  185. 'riding_card_id' => $card_id,
  186. 'money' => 0,
  187. 'discount' => 1,
  188. 'pay_money' => 0,
  189. 'pay_type' => CardRidingOrder::PAY_TYPE_ADMIN_GIVE,
  190. 'pay_status' => CardRidingOrder::PAY_STATUS_OK,
  191. 'pay_time' => Carbon::now(),
  192. ]);
  193. $data = [
  194. 'user_id' => $users->id,
  195. 'riding_card_id' => $card_id,
  196. 'card_riding_order_id' => $cardRidingOrder->id,
  197. 'take_effect_time' => Carbon::now(),
  198. 'deduction_money' => $cardRiding->deduction_money,
  199. 'expiration_time' => $expiration_time,
  200. 'is_limit_times' => $cardRiding->is_limit_times,
  201. 'can_ridding_times' => $cardRiding->times,
  202. 'day_can_ridding_times' => $cardRiding->day_can_ridding_times,
  203. 'status' => CardRidingUserBags::STATUS_OK
  204. ];
  205. CardRidingUserBags::firstOrCreate(['card_riding_order_id' => $cardRidingOrder->id], $data);
  206. DB::commit();
  207. return $this->ok('操作成功');
  208. } catch (\Exception $e) {
  209. DB::rollBack();
  210. Log::error($e->getMessage());
  211. return $this->error('出现错误,请联系管理员');
  212. }
  213. }
  214. }