OrderController.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  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. /**
  151. * [订单]拒单
  152. *
  153. * @description 技师拒绝已分配的订单
  154. *
  155. * @authenticated
  156. *
  157. * @urlParam order_id integer required 订单ID Example: 1
  158. *
  159. * @bodyParam reason string required 拒单原因(8-200个字符) Example: 距离太远,无法服务
  160. *
  161. * @response {
  162. * "message": "拒单成功",
  163. * "order_id": 1,
  164. * "order_no": "202403210001"
  165. * }
  166. * @response 400 {
  167. * "message": "订单状态异常,无法拒单"
  168. * }
  169. * @response 403 {
  170. * "message": "该订单未分配给您"
  171. * }
  172. */
  173. public function rejectOrder(Request $request, int $order_id)
  174. {
  175. $data = $request->validate([
  176. 'reason' => 'required|string|min:8|max:200',
  177. ]);
  178. return $this->service->rejectOrder(Auth::user()->id, $order_id, $data['reason']);
  179. }
  180. /**
  181. * [订单]出发
  182. *
  183. * @description 技师确认出发前往服务地点
  184. *
  185. * @authenticated
  186. *
  187. * @urlParam order_id integer required 订单ID Example: 1
  188. *
  189. * @response {
  190. * "message": "已确认出发",
  191. * "order_id": 1,
  192. * "order_no": "202403210001",
  193. * "departed_at": "2024-03-21 10:00:00"
  194. * }
  195. * @response 400 {
  196. * "message": "订单状态异常,无法确认出发"
  197. * }
  198. * @response 403 {
  199. * "message": "该订单未分配给您"
  200. * }
  201. */
  202. public function depart(int $order_id)
  203. {
  204. return $this->service->depart(Auth::user()->id, $order_id);
  205. }
  206. /**
  207. * [订单]到达
  208. *
  209. * @description 技师确认已到达服务地点
  210. *
  211. * @authenticated
  212. *
  213. * @urlParam order_id integer required 订单ID Example: 1
  214. *
  215. * @response {
  216. * "message": "已确认到达",
  217. * "order_id": 1,
  218. * "order_no": "202403210001",
  219. * "arrived_at": "2024-03-21 10:30:00"
  220. * }
  221. * @response 400 {
  222. * "message": "订单状态异常,无法确认到达"
  223. * }
  224. * @response 403 {
  225. * "message": "该订单未分配给您"
  226. * }
  227. */
  228. public function arrive(int $order_id)
  229. {
  230. return $this->service->arrive(Auth::user()->id, $order_id);
  231. }
  232. }