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

99 lines
3.2 KiB

  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\Redis;
  10. use Illuminate\Support\Facades\Validator;
  11. /**
  12. * 骑手抢单
  13. */
  14. class GrabOrderController extends Controller
  15. {
  16. use JsonReturn;
  17. public function index(Request $request)
  18. {
  19. $id = (int)$request->route('id');
  20. if (!$id || !$order = ImsCjdcOrderMain::find($id)) {
  21. return self::error('唉呀,来晚啦,订单已经被接走啦~~~');
  22. }
  23. /*$order = ImsCjdcOrderMain::with(['market:id,name'])
  24. ->where([['state', '=', 2], ['pay_time', '>', 0]])
  25. ->orderBy('pay_time')->orderByDesc('id')
  26. ->limit(15)->get();*/
  27. return view('web.grab_order', ['order_list' => $order ?? []]);
  28. }
  29. /**
  30. * 抢单post
  31. */
  32. public function grabOrder(Request $request)
  33. {
  34. try {
  35. $validator = Validator::make($request->all(), [
  36. 'order_num' => ['required', 'regex:/^\d+$/'],
  37. 'name' => 'required|between:2,20',
  38. 'tel' => ['required', 'regex:/^1\d{10}$/'],
  39. ], [
  40. '*.required' => ':attribute不能为空',
  41. '*.regex' => ':attribute格式不正确',
  42. 'name.between' => ':attribute输入不正确',
  43. ], [
  44. 'order_num' => '订单号',
  45. 'name' => '姓名',
  46. 'tel' => '手机号',
  47. ]);
  48. if ($validator->fails()) {
  49. throw new \Exception($validator->errors()->first());
  50. }
  51. $formData = $validator->validated();
  52. $user = User::where('tel', $formData['tel'])->first();
  53. if (!$user) {
  54. throw new \Exception('用户信息不存在');
  55. }
  56. $employee = LanzuEmployees::where(['user_id' => $user->id, 'name' => $formData['name']])->orderByDesc('id')->first();
  57. if (!$employee || !in_array(29, $employee->position)) { //29是骑手,见:config("role.position")
  58. throw new \Exception("您还不是骑手,请联系管理员增加骑手权限");
  59. }
  60. $order = ImsCjdcOrderMain::where('order_num', $formData['order_num'])->first();
  61. if (!$order) {
  62. throw new \Exception('订单跑丢了~~');
  63. } else if ($order->state != 3) {
  64. throw new \Exception('您来晚啦,订单已经被人接走啦~~');
  65. }
  66. /**
  67. * 抢单逻辑详见:
  68. * @see \App\Admin\Forms\SelectHorseman
  69. */
  70. $SelectHorseman = new \App\Admin\Forms\SelectHorseman;
  71. $result = $SelectHorseman->handle(['horseman_id' => $employee->id, 'order_id' => $order->id]);
  72. return self::success('抢单成功,已消息通知客户,请尽快配送');
  73. } catch (\Exception $exception) {
  74. return self::error($exception->getMessage());
  75. }
  76. }
  77. /**
  78. * 获取订单信息
  79. */
  80. public function orderInfo()
  81. {
  82. $order_num = \request('order_num');
  83. }
  84. }