链街Dcat后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
5.8 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\JsonReturn;
  4. use App\Models\ImsCjdcOrderMain;
  5. use App\Models\v3\LanzuEmployees;
  6. use App\Models\v3\User;
  7. use Illuminate\Http\JsonResponse;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Validator;
  10. /**
  11. * 骑手抢单
  12. */
  13. class GrabOrderController extends Controller
  14. {
  15. use JsonReturn;
  16. public function index(Request $request)
  17. {
  18. try {
  19. $user = $request->session()->get('wechat_user');
  20. $id = $request->route('id');
  21. if (!$id || !$order = ImsCjdcOrderMain::with('employees')->where('state', 3)->find($id)) {
  22. throw new \Exception('唉呀,来晚啦,订单已经被接走啦~~~');
  23. } else if (!empty($order->employees->user_id)) {
  24. if ($order->employees->user_id == $user->id) {
  25. $success_msg = '运气太好了吧,订单被您抢到啦~~';
  26. } else {
  27. unset($order);
  28. throw new \Exception('唉呀,来晚啦,订单已经被接走啦~~~');
  29. }
  30. }
  31. } catch (\Exception $exception) {
  32. $error_msg = $exception->getMessage();
  33. }
  34. return view('web.grab_order', [
  35. 'error_msg' => $error_msg ?? null,
  36. 'success_msg' => $success_msg ?? null,
  37. 'user' => $user ?? null,
  38. 'order' => $order ?? [],
  39. ]);
  40. }
  41. /**
  42. * blade模板抢单
  43. */
  44. public function grabOrderPost(Request $request): JsonResponse
  45. {
  46. $id = $request->route('id');
  47. /** @var User $user */
  48. $user = session('wechat_user');
  49. try {
  50. $employee = LanzuEmployees::where(['user_id' => $user->id, 'status' => 1])->orderByDesc('id')->first();
  51. if (!$employee || !in_array(29, $employee->position)) { //29是骑手,见:config("role.position")
  52. throw new \Exception("您还不是骑手,请联系管理员增加骑手权限");
  53. }
  54. $order = ImsCjdcOrderMain::with('employees')->where('id', $id)->first();
  55. if (!$order) {
  56. throw new \Exception('订单跑丢了~~');
  57. } else if ($order->state != 3 || !empty($order->horseman_id)) {
  58. throw new \Exception('您来晚啦,订单已经被人接走啦~~');
  59. }
  60. $SelectHorseman = new \App\Admin\Forms\SelectHorseman;
  61. $result = $SelectHorseman->selectHorseman(['horseman_id' => $employee->id, 'order_id' => $order->id]);
  62. if (!$result) {
  63. throw new \Exception('服务器开小差,抢单失败~');
  64. }
  65. return self::success([], '抢单成功,已消息通知客户,请尽快配送');
  66. } catch (\Exception $exception) {
  67. return self::error($exception->getMessage(), 1, config('app.debug') ? $exception->getTrace() : null);
  68. }
  69. }
  70. /**
  71. * 抢单post
  72. */
  73. public function grabOrder(Request $request): JsonResponse
  74. {
  75. try {
  76. $validator = Validator::make($request->all(), [
  77. 'order_id' => ['required', 'int'],
  78. 'name' => 'required|between:2,20',
  79. 'tel' => ['required', 'regex:/^1\d{10}$/'],
  80. ], [
  81. '*.required' => ':attribute不能为空',
  82. '*.regex' => ':attribute格式不正确',
  83. 'order_id.int' => ':attribute错误',
  84. 'name.between' => ':attribute输入不正确',
  85. ], [
  86. 'order_id' => '订单ID',
  87. 'name' => '姓名',
  88. 'tel' => '手机号',
  89. ]);
  90. if ($validator->fails()) {
  91. throw new \Exception($validator->errors()->first());
  92. }
  93. $formData = $validator->validated();
  94. $user = User::where('tel', $formData['tel'])->first();
  95. if (!$user) {
  96. throw new \Exception('用户信息不存在');
  97. }
  98. $employee = LanzuEmployees::where(['user_id' => $user->id, 'name' => $formData['name'], 'status' => 1])->orderByDesc('id')->first();
  99. if (!$employee || !in_array(29, $employee->position)) { //29是骑手,见:config("role.position")
  100. throw new \Exception("您还不是骑手,请联系管理员增加骑手权限");
  101. }
  102. $order = ImsCjdcOrderMain::where('id', $formData['order_id'])->first();
  103. if (!$order) {
  104. throw new \Exception('订单跑丢了~~');
  105. } else if ($order->state != 3 || !empty($order->horseman_id)) {
  106. throw new \Exception('您来晚啦,订单已经被人接走啦~~');
  107. }
  108. $SelectHorseman = new \App\Admin\Forms\SelectHorseman;
  109. $result = $SelectHorseman->selectHorseman(['horseman_id' => $employee->id, 'order_id' => $order->id]);
  110. if (!$result) {
  111. throw new \Exception('服务器开小差,抢单失败~');
  112. }
  113. return self::success([], '抢单成功,已消息通知客户,请尽快配送');
  114. } catch (\Exception $exception) {
  115. return self::error($exception->getMessage());
  116. }
  117. }
  118. /**
  119. * 获取订单信息
  120. */
  121. public function orderInfo(): JsonResponse
  122. {
  123. $id = request('id');
  124. $fields = ['id', 'order_num', 'refund_time', 'complete_time', 'money', 'tel', 'name', 'address', 'note', 'area',
  125. 'lat', 'lng', 'pay_type', 'order_type', 'market_id', 'total_money', 'created_at', 'pay_time'];
  126. $order = ImsCjdcOrderMain::where('state', 3)->find($id, $fields);
  127. if (!$order) {
  128. return self::error('订单不存在或已配送完成~~');
  129. }
  130. if ($order->tel) {
  131. $order->tel = substr_replace($order->tel, '****', 3, 4);
  132. }
  133. return self::success($order);
  134. }
  135. }