CardRidingController.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  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. $cardRidingAreas = $cardRiding->areaRidingCard()->attach($areas, ['merchant_id' => AdminMerchant::putMerchantId()]);
  81. // $cardRidingAreas->merchant_id = AdminMerchant::putMerchantId();
  82. // $cardRidingAreas->save();
  83. }
  84. return $this->created(CardRidingResource::make($cardRiding));
  85. }
  86. /**
  87. * Display the specified resource.
  88. *
  89. * @param int $id
  90. * @return \Illuminate\Http\Response
  91. */
  92. public function show($id)
  93. {
  94. //
  95. }
  96. /**
  97. * edit 编辑骑行卡
  98. *
  99. * @param CardRiding $cardRiding
  100. * @return \Illuminate\Http\JsonResponse
  101. * @author Fx
  102. *
  103. */
  104. public function edit(CardRiding $cardRiding)
  105. {
  106. //
  107. $cardRiding->load(['areaRidingCard']);
  108. return $this->ok(CardRidingResource::make($cardRiding));
  109. }
  110. /**
  111. * update 更新骑行卡
  112. *
  113. * @param CardRidingRequest $ridingCardRequest
  114. * @param CardRiding $cardRiding
  115. * @return \Illuminate\Http\JsonResponse
  116. * @author Fx
  117. *
  118. */
  119. public function update(CardRidingRequest $ridingCardRequest, CardRiding $cardRiding)
  120. {
  121. //
  122. $admin_id = Admin::user()->id;
  123. $inputs = $ridingCardRequest->validated();
  124. if (!Admin::isAdministrator() && !Admin::isNormalAdministrator()) {
  125. if ($admin_id !== $cardRiding->admin_id) {
  126. return $this->error('暂无权限');
  127. }
  128. }
  129. if ($inputs['is_limit_times'] == CardRiding::LIMIT_TIMES_NO) {
  130. // 不限次设为0
  131. $inputs['times'] = 0;
  132. }
  133. if ($inputs['is_discount'] == CardRiding::DISCOUNT_NO) {
  134. // 无折扣设为1.00
  135. $inputs['discount'] = 1.00;
  136. }
  137. // Log::info($inputs);
  138. $cardRiding->update($inputs);
  139. if (isset($inputs['areas'])) {
  140. $cardRiding->areaRidingCard()->sync($inputs['areas']);
  141. }
  142. return $this->created(CardRidingResource::make($cardRiding));
  143. }
  144. /**
  145. * destroy 删除骑行卡
  146. *
  147. * @param CardRiding $ridingCard
  148. * @return \Illuminate\Http\JsonResponse
  149. * @author Fx
  150. *
  151. */
  152. public function destroy(CardRiding $ridingCard)
  153. {
  154. //
  155. $ridingCard->delete();
  156. return $this->noContent();
  157. }
  158. /**
  159. * giveCardToUser 赠送骑行卡
  160. *
  161. * @param Request $request
  162. * @return \Illuminate\Http\JsonResponse
  163. * @author Fx
  164. *
  165. */
  166. public function giveCardToUser(Request $request)
  167. {
  168. $mobile = $request->get('mobile') ?? '';
  169. $card_id = $request->get('card_id') ?? '';
  170. $user_id = $request->get('id', 0);
  171. if (empty($mobile) || !$user_id || empty($card_id)) return $this->error('参数错误');
  172. $users = User::query()
  173. ->where('id', $user_id)
  174. ->where('mobile', $mobile)
  175. ->first();
  176. if (empty($users)) return $this->error('找不到该用户');
  177. $cardRiding = CardRiding::query()
  178. ->where('is_give', CardRiding::GIVE_OK)
  179. ->find($card_id);
  180. if (empty($cardRiding)) return $this->error('找不到该骑行卡');
  181. if ($cardRiding->is_give == CardRiding::GIVE_NO) return $this->error('该骑行卡不可赠送');
  182. $expiration_time = Carbon::now()->addDays($cardRiding->effective_days)->format('Y-m-d H:i:s');
  183. try {
  184. DB::beginTransaction();
  185. $cardRidingOrder = CardRidingOrder::firstOrCreate([
  186. 'no' => CardRidingOrder::makeNo(),
  187. 'area_id' => $users->register_area_id,
  188. 'user_id' => $users->id,
  189. 'riding_card_id' => $card_id,
  190. 'money' => 0,
  191. 'discount' => 1,
  192. 'pay_money' => 0,
  193. 'pay_type' => CardRidingOrder::PAY_TYPE_ADMIN_GIVE,
  194. 'pay_status' => CardRidingOrder::PAY_STATUS_OK,
  195. 'pay_time' => Carbon::now(),
  196. 'merchant_id' => $cardRiding->merchant_id,
  197. ]);
  198. $data = [
  199. 'user_id' => $users->id,
  200. 'riding_card_id' => $card_id,
  201. 'card_riding_order_id' => $cardRidingOrder->id,
  202. 'take_effect_time' => Carbon::now(),
  203. 'deduction_money' => $cardRiding->deduction_money,
  204. 'expiration_time' => $expiration_time,
  205. 'is_limit_times' => $cardRiding->is_limit_times,
  206. 'can_ridding_times' => $cardRiding->times,
  207. 'day_can_ridding_times' => $cardRiding->day_can_ridding_times,
  208. 'status' => CardRidingUserBags::STATUS_OK,
  209. 'merchant_id' => $cardRiding->merchant_id,
  210. ];
  211. CardRidingUserBags::firstOrCreate(['card_riding_order_id' => $cardRidingOrder->id], $data);
  212. DB::commit();
  213. return $this->ok('操作成功');
  214. } catch (\Exception $e) {
  215. DB::rollBack();
  216. Log::error($e->getMessage());
  217. return $this->error('出现错误,请联系管理员');
  218. }
  219. }
  220. }