链街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.

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