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

112 lines
3.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\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): JsonResponse
  33. {
  34. try {
  35. $validator = Validator::make($request->all(), [
  36. 'order_id' => ['required', 'int'],
  37. 'name' => 'required|between:2,20',
  38. 'tel' => ['required', 'regex:/^1\d{10}$/'],
  39. ], [
  40. '*.required' => ':attribute不能为空',
  41. '*.regex' => ':attribute格式不正确',
  42. 'order_id.int' => ':attribute错误',
  43. 'name.between' => ':attribute输入不正确',
  44. ], [
  45. 'order_id' => '订单ID',
  46. 'name' => '姓名',
  47. 'tel' => '手机号',
  48. ]);
  49. if ($validator->fails()) {
  50. throw new \Exception($validator->errors()->first());
  51. }
  52. $formData = $validator->validated();
  53. $user = User::where('tel', $formData['tel'])->first();
  54. if (!$user) {
  55. throw new \Exception('用户信息不存在');
  56. }
  57. $employee = LanzuEmployees::where(['user_id' => $user->id, 'name' => $formData['name']])->orderByDesc('id')->first();
  58. if (!$employee || !in_array(29, $employee->position)) { //29是骑手,见:config("role.position")
  59. throw new \Exception("您还不是骑手,请联系管理员增加骑手权限");
  60. }
  61. $order = ImsCjdcOrderMain::where('id', $formData['order_id'])->first();
  62. if (!$order) {
  63. throw new \Exception('订单跑丢了~~');
  64. } else if ($order->state != 3) {
  65. throw new \Exception('您来晚啦,订单已经被人接走啦~~');
  66. }
  67. $SelectHorseman = new \App\Admin\Forms\SelectHorseman;
  68. $result = $SelectHorseman->selectHorseman(['horseman_id' => $employee->id, 'order_id' => $order->id]);
  69. if (!$result) {
  70. throw new \Exception('服务器开小差,抢单失败~');
  71. }
  72. return self::success('抢单成功,已消息通知客户,请尽快配送');
  73. } catch (\Exception $exception) {
  74. return self::error($exception->getMessage());
  75. }
  76. }
  77. /**
  78. * 获取订单信息
  79. */
  80. public function orderInfo(): JsonResponse
  81. {
  82. $id = request('id');
  83. $fields = ['id', 'order_num', 'refund_time', 'complete_time', 'money', 'tel', 'name', 'address', 'note', 'area',
  84. 'lat', 'lng', 'pay_type', 'order_type', 'market_id', 'total_money', 'created_at', 'pay_time'];
  85. $order = ImsCjdcOrderMain::where('state', 3)->find($id, $fields);
  86. if (!$order) {
  87. return self::error('订单不存在或已配送完成~~');
  88. }
  89. if ($order->tel) {
  90. $order->tel = substr_replace($order->tel, '****', 3, 4);
  91. }
  92. return self::success($order);
  93. }
  94. }