OrderController.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Requests\Admin\OrderAssign;
  4. use App\Http\Requests\Admin\OrderUpdate;
  5. use App\Services\OrderService;
  6. use App\Utils\Helper;
  7. use Illuminate\Http\Request;
  8. use App\Http\Controllers\Controller;
  9. use App\Models\Order;
  10. use App\Models\User;
  11. use App\Models\Plan;
  12. use Illuminate\Support\Facades\DB;
  13. class OrderController extends Controller
  14. {
  15. public function fetch(Request $request)
  16. {
  17. $current = $request->input('current') ? $request->input('current') : 1;
  18. $pageSize = $request->input('pageSize') >= 10 ? $request->input('pageSize') : 10;
  19. $orderModel = Order::orderBy('created_at', 'DESC');
  20. if ($request->input('trade_no')) {
  21. $orderModel->where('trade_no', $request->input('trade_no'));
  22. }
  23. if ($request->input('is_commission')) {
  24. $orderModel->where('invite_user_id', '!=', NULL);
  25. $orderModel->where('status', 3);
  26. }
  27. if ($request->input('id')) {
  28. $orderModel->where('id', $request->input('id'));
  29. }
  30. if ($request->input('user_id')) {
  31. $orderModel->where('user_id', $request->input('user_id'));
  32. }
  33. $total = $orderModel->count();
  34. $res = $orderModel->forPage($current, $pageSize)
  35. ->get();
  36. $plan = Plan::get();
  37. for ($i = 0; $i < count($res); $i++) {
  38. for ($k = 0; $k < count($plan); $k++) {
  39. if ($plan[$k]['id'] == $res[$i]['plan_id']) {
  40. $res[$i]['plan_name'] = $plan[$k]['name'];
  41. }
  42. }
  43. }
  44. return response([
  45. 'data' => $res,
  46. 'total' => $total
  47. ]);
  48. }
  49. public function update(OrderUpdate $request)
  50. {
  51. $params = $request->only([
  52. 'status',
  53. 'commission_status'
  54. ]);
  55. $order = Order::where('trade_no', $request->input('trade_no'))
  56. ->first();
  57. if (!$order) {
  58. abort(500, '订单不存在');
  59. }
  60. if (isset($params['status']) && (int)$params['status'] === 2) {
  61. $orderService = new OrderService($order);
  62. if (!$orderService->cancel()) {
  63. abort(500, '更新失败');
  64. }
  65. return response([
  66. 'data' => true
  67. ]);
  68. }
  69. try {
  70. $order->update($params);
  71. } catch (\Exception $e) {
  72. abort(500, '更新失败');
  73. }
  74. return response([
  75. 'data' => true
  76. ]);
  77. }
  78. public function repair(Request $request)
  79. {
  80. if (empty($request->input('trade_no'))) {
  81. abort(500, '参数错误');
  82. }
  83. $order = Order::where('trade_no', $request->input('trade_no'))
  84. ->where('status', 0)
  85. ->first();
  86. if (!$order) {
  87. abort(500, '订单不存在或订单已支付');
  88. }
  89. $order->status = 1;
  90. if (!$order->save()) {
  91. abort(500, '保存失败');
  92. }
  93. return response([
  94. 'data' => true
  95. ]);
  96. }
  97. public function assign(OrderAssign $request)
  98. {
  99. $plan = Plan::find($request->input('plan_id'));
  100. $user = User::where('email', $request->input('email'))->first();
  101. if (!$user) {
  102. abort(500, '该用户不存在');
  103. }
  104. if (!$plan) {
  105. abort(500, '该订阅不存在');
  106. }
  107. DB::beginTransaction();
  108. $order = new Order();
  109. $orderService = new OrderService($order);
  110. $order->user_id = $user->id;
  111. $order->plan_id = $plan->id;
  112. $order->cycle = $request->input('cycle');
  113. $order->trade_no = Helper::guid();
  114. $order->total_amount = $request->input('total_amount');
  115. $orderService->setOrderType($user);
  116. $orderService->setInvite($user);
  117. if (!$order->save()) {
  118. DB::rollback();
  119. abort(500, '订单创建失败');
  120. }
  121. DB::commit();
  122. return response([
  123. 'data' => $order->trade_no
  124. ]);
  125. }
  126. }