OrderController.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. <?php
  2. namespace App\Http\Controllers\Client;
  3. use App\Http\Controllers\Controller;
  4. use App\Services\Client\OrderService;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\Auth;
  7. class OrderController extends Controller
  8. {
  9. protected OrderService $service;
  10. public function __construct(OrderService $service)
  11. {
  12. $this->service = $service;
  13. }
  14. /**
  15. * [订单管理] 订单初始化
  16. *
  17. * @description 初始化订单
  18. *
  19. * @bodyParam coach_id int required 技师ID Example: 1
  20. * @bodyParam area_code string required 区划代码 Example: 370602
  21. * @bodyParam project_id int required 项目ID Example: 1
  22. *
  23. * @response {
  24. * "status": "success",
  25. * "data": {}
  26. * }
  27. *
  28. * @return \Illuminate\Http\JsonResponse
  29. */
  30. public function initialize(Request $request)
  31. {
  32. $data = $request->only(['coach_id', 'area_code', 'project_id']);
  33. return $this->service->initialize(Auth::user()->id, $data);
  34. }
  35. /**
  36. * [订单管理] 创建订单
  37. *
  38. * @description 创建订单
  39. *
  40. * @bodyParam project_id int required 项目ID Example: 1
  41. * @bodyParam address_id int required 地址ID Example: 1
  42. * @bodyParam coach_id int required 技师ID Example: 6
  43. * @bodyParam use_balance boolean 使用余额 Example: false
  44. * @bodyParam service_time datetime required 服务时间 Example: 2024-01-01 10:00:00
  45. * @bodyParam order_id int 订单ID Example: null
  46. *
  47. * @response {
  48. * "status": "success",
  49. * "data": {}
  50. * }
  51. */
  52. public function create(Request $request)
  53. {
  54. $data = $request->only(['project_id', 'address_id', 'coach_id', 'use_balance', 'order_id', 'service_time']);
  55. return $this->service->createOrder(Auth::user()->id, $data);
  56. }
  57. /**
  58. * [订单管理] 结束订单
  59. *
  60. * @description 结束订单
  61. *
  62. * @bodyParam order_id int required 订单ID Example: 1
  63. *
  64. * @response {
  65. * "status": "success",
  66. * "data": {}
  67. * }
  68. *
  69. * @return \Illuminate\Http\JsonResponse
  70. */
  71. public function finish(Request $request)
  72. {
  73. $userId = Auth::user()->id;
  74. $orderId = $request->input('order_id');
  75. return $this->service->finishOrder($userId, $orderId);
  76. }
  77. /**
  78. * [订单管理] 确认技师离开
  79. *
  80. * @description 确认技师离开
  81. *
  82. * @bodyParam order_id int required 订单ID Example: 123
  83. *
  84. * @response {
  85. * "status": "success",
  86. * "data": {}
  87. * }
  88. *
  89. * @return \Illuminate\Http\JsonResponse
  90. */
  91. public function confirmLeave(Request $request)
  92. {
  93. $userId = Auth::user()->id;
  94. $orderId = $request->input('order_id');
  95. return $this->service->confirmLeave($userId, $orderId);
  96. }
  97. /**
  98. * [订单管理] 取消订单
  99. *
  100. * @description 取消订单
  101. *
  102. * @bodyParam order_id int required 订单ID Example: 123
  103. *
  104. * @response {
  105. * "status": "success",
  106. * "data": {}
  107. * }
  108. *
  109. * @return \Illuminate\Http\JsonResponse
  110. */
  111. public function cancel(Request $request)
  112. {
  113. $userId = Auth::user()->id;
  114. $orderId = $request->input('order_id');
  115. return $this->service->cancelOrder($userId, $orderId);
  116. }
  117. /**
  118. * [订单管理] 获取订单列表
  119. *
  120. * @description 获取订单列表
  121. *
  122. * @response {
  123. * "status": "success",
  124. * "data": []
  125. * }
  126. *
  127. * @return \Illuminate\Http\JsonResponse
  128. */
  129. public function list()
  130. {
  131. return $this->service->getOrderList(Auth::user()->id);
  132. }
  133. /**
  134. * [订单管理] 获取订单详情
  135. *
  136. * @description 获取订单详情
  137. *
  138. * @urlParam id required 订单ID Example: 123
  139. *
  140. * @response {
  141. * "status": "success",
  142. * "data": {}
  143. * }
  144. *
  145. * @param int $id
  146. * @return \Illuminate\Http\JsonResponse
  147. */
  148. public function detail($id)
  149. {
  150. return $this->service->getOrderDetail(Auth::user()->id, $id);
  151. }
  152. /**
  153. * [订单管理] 订单退款
  154. *
  155. * @description 订单退款
  156. *
  157. * @response {
  158. * "status": "success",
  159. * "data": {}
  160. * }
  161. *
  162. * @param int $id
  163. * @return \Illuminate\Http\JsonResponse
  164. */
  165. public function refund($id)
  166. {
  167. return $this->service->refundOrder($id);
  168. }
  169. /**
  170. * [订单管理] 获取代理商配置
  171. *
  172. * @description 获取代理商配置
  173. *
  174. * @response {
  175. * "min_distance": 0,
  176. * "min_fee": 0,
  177. * "per_km_fee": 0
  178. * }
  179. *
  180. * @return array
  181. */
  182. public function getAgentConfig(Request $request)
  183. {
  184. $agentId = $request->input('agent_id');
  185. return $this->service->getAgentConfig($agentId);
  186. }
  187. /**
  188. * [订单管理] 获取技师配置
  189. *
  190. * @description 获取技师配置
  191. *
  192. * @response {
  193. * "delivery_fee_type": "round_trip",
  194. * "charge_delivery_fee": true
  195. * }
  196. *
  197. * @return array
  198. */
  199. public function getCoachConfig(Request $request)
  200. {
  201. $coachId = $request->input('coach_id');
  202. return $this->service->getCoachConfig($coachId);
  203. }
  204. /**
  205. * [订单管理] 计算路费金额
  206. *
  207. * @description 计算路费金额
  208. *
  209. * @response {
  210. * "fee": 0
  211. * }
  212. *
  213. * @return float
  214. */
  215. public function calculateDeliveryFee(Request $request)
  216. {
  217. $coachId = $request->input('coach_id');
  218. $agentId = $request->input('agent_id');
  219. $distance = $request->input('distance');
  220. $latitude = $request->input('latitude');
  221. $longitude = $request->input('longitude');
  222. if ($agentId) {
  223. return $this->service->calculateDeliveryFee($coachId, $agentId, $distance);
  224. } else {
  225. // return $this->service->calculateDeliveryFeeByLocation($coachId, $latitude, $longitude, $distance);
  226. }
  227. }
  228. /**
  229. * [订单管理] 计算订单金额
  230. *
  231. * @description 计算订单金额
  232. *
  233. * @response {
  234. * "total_amount": 0,
  235. * "balance_amount": 0,
  236. * "pay_amount": 0,
  237. * "coupon_amount": 0,
  238. * "tip_amount": 0,
  239. * "project_amount": 0,
  240. * "delivery_fee": 0
  241. * }
  242. *
  243. * @return array
  244. */
  245. public function calculateOrderAmount(Request $request)
  246. {
  247. $userId = Auth::id();
  248. $addressId = $request->input('address_id');
  249. $coachId = $request->input('coach_id');
  250. $projectId = $request->input('project_id');
  251. $agentId = $request->input('agent_id');
  252. $useBalance = $request->input('use_balance', 0);
  253. return $this->service->calculateOrderAmount($userId, $addressId, $coachId, $projectId, $agentId, $useBalance);
  254. }
  255. /**
  256. * [订单管理] 加钟
  257. *
  258. * @description 加钟
  259. *
  260. * @urlParam order_id required 订单ID Example: 123
  261. *
  262. * @response {
  263. * "status": "success",
  264. * "data": {}
  265. * }
  266. */
  267. public function addTime(Request $request, $orderId)
  268. {
  269. $userId = Auth::id();
  270. return $this->service->addTime($userId, $orderId);
  271. }
  272. /**
  273. * [订单管理] 指定技师
  274. *
  275. * @description 指定技师
  276. *
  277. * @urlParam order_id required 订单ID Example: 123
  278. *
  279. * @bodyParam coach_id int required 技师ID Example: 1
  280. *
  281. * @response {
  282. * "status": "success",
  283. * "data": {}
  284. * }
  285. */
  286. public function assignCoach(Request $request, $orderId)
  287. {
  288. $userId = Auth::id();
  289. $coachId = $request->input('coach_id');
  290. return $this->service->assignCoach($userId, $orderId, $coachId);
  291. }
  292. }