OrderController.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php
  2. namespace App\Http\Controllers\Coach;
  3. use App\Http\Controllers\Controller;
  4. use App\Services\Coach\OrderService;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\Auth;
  7. /**
  8. * @group 技师端
  9. *
  10. * 订单相关的API接口
  11. */
  12. class OrderController extends Controller
  13. {
  14. protected OrderService $service;
  15. public function __construct(OrderService $service)
  16. {
  17. $this->service = $service;
  18. }
  19. /**
  20. * [订单]获取可抢订单列表
  21. *
  22. * @description 获取当前技师40公里范围内的可抢订单列表,包含订单基本信息和距离
  23. *
  24. * @authenticated
  25. *
  26. * @queryParam area_code string required 区划代码 Example: 370602
  27. * @queryParam page int 页码 Example: 1
  28. * @queryParam per_page int 每页数量 Example: 10
  29. *
  30. * @response {
  31. * "data": [
  32. * {
  33. * "id": 1,
  34. * "order_no": "202403210001",
  35. * "project_name": "精油推拿",
  36. * "project_duration": 60,
  37. * "project_price": "188.00",
  38. * "address": "山东省烟台市芝罘区幸福小区1号楼",
  39. * "distance": 2.5,
  40. * "service_time": "2024-03-21 10:00:00",
  41. * "created_at": "2024-03-21 09:30:00"
  42. * }
  43. * ],
  44. * "meta": {
  45. * "total": 100,
  46. * "per_page": 10,
  47. * "current_page": 1,
  48. * "last_page": 10
  49. * }
  50. * }
  51. */
  52. public function getGrabList(Request $request)
  53. {
  54. $params = $request->validate([
  55. 'area_code' => 'required|string',
  56. 'page' => 'nullable|integer|min:1',
  57. 'per_page' => 'nullable|integer|min:1|max:50',
  58. ]);
  59. return $this->service->getGrabList(Auth::user()->id, $params);
  60. }
  61. /**
  62. * [订单]获取订单列表
  63. *
  64. * @description 获取当前技师的订单列表,不包含已创建和已分配状态的订单
  65. *
  66. * @authenticated
  67. *
  68. * @queryParam page int 页码 Example: 1
  69. * @queryParam per_page int 每页数量 Example: 10
  70. *
  71. * @response {
  72. * "data": {
  73. * "items": [
  74. * {
  75. * "id": 1,
  76. * "order_no": "202403210001",
  77. * "project_name": "精油推拿",
  78. * "project_duration": 60,
  79. * "project_price": "188.00",
  80. * "address": "山东省烟台市芝罘区幸福小区1号楼",
  81. * "service_time": "2024-03-21 10:00:00",
  82. * "status": "completed",
  83. * "created_at": "2024-03-21 09:30:00"
  84. * }
  85. * ],
  86. * "total": 100
  87. * }
  88. * }
  89. */
  90. public function getOrderList(Request $request)
  91. {
  92. $params = $request->validate([
  93. 'page' => 'nullable|integer|min:1',
  94. 'per_page' => 'nullable|integer|min:1|max:50',
  95. ]);
  96. return $this->service->getOrderList(Auth::user()->id, $params);
  97. }
  98. /**
  99. * [订单]抢单
  100. *
  101. * @description 技师抢取指定订单
  102. *
  103. * @authenticated
  104. *
  105. * @urlParam order_id integer required 订单ID Example: 1
  106. *
  107. * @response {
  108. * "message": "抢单成功",
  109. * "order_id": 1
  110. * }
  111. * @response 400 {
  112. * "message": "订单状态异常,无法抢单"
  113. * }
  114. * @response 400 {
  115. * "message": "订单超出服务范围"
  116. * }
  117. * @response 400 {
  118. * "message": "未开通该项目服务资格"
  119. * }
  120. */
  121. public function grabOrder(int $order_id)
  122. {
  123. return $this->service->grabOrder(Auth::user()->id, $order_id);
  124. }
  125. /**
  126. * [订单]接单
  127. *
  128. * @description 技师接受已分配的订单
  129. *
  130. * @authenticated
  131. *
  132. * @urlParam order_id integer required 订单ID Example: 1
  133. *
  134. * @response {
  135. * "message": "接单成功",
  136. * "order_id": 1,
  137. * "order_no": "202403210001"
  138. * }
  139. * @response 400 {
  140. * "message": "订单状态异常,无法接单"
  141. * }
  142. * @response 403 {
  143. * "message": "该订单未分配给您"
  144. * }
  145. */
  146. public function acceptOrder(int $order_id)
  147. {
  148. return $this->service->acceptOrder(Auth::user()->id, $order_id);
  149. }
  150. }