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.

126 lines
3.9 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. <?php
  2. namespace App\Controller;
  3. use App\Constants\ErrorCode;
  4. use App\Constants\LogLabel;
  5. use App\Model\OrderMain;
  6. use App\Request\OrderOfflineRequest;
  7. use App\Request\OrderOnlineRequest;
  8. use App\Request\UserOrdersRequest;
  9. use App\Service\SeparateAccountsServiceInterface;
  10. use Hyperf\DbConnection\Db;
  11. use Hyperf\Di\Annotation\Inject;
  12. use App\Service\OrderServiceInterface;
  13. use Hyperf\HttpMessage\Stream\SwooleStream;
  14. use Hyperf\Validation\ValidationException;
  15. class OrderController extends BaseController
  16. {
  17. /**
  18. * @Inject
  19. * @var OrderServiceInterface
  20. */
  21. protected $orderService;
  22. /**
  23. * @Inject
  24. * @var SeparateAccountsServiceInterface
  25. */
  26. protected $separateAccountsService;
  27. public function addOnlineOrder(OrderOnlineRequest $request)
  28. {
  29. $orderMainId = $this->orderService->addOnlineOrder($request->validated());
  30. if (!is_int($orderMainId)) {
  31. return $this->result(ErrorCode::ORDER_FAILURE, '', $orderMainId);
  32. }
  33. return $this->success(['order_id' => $orderMainId]);
  34. }
  35. public function addOfflineOrder(OrderOfflineRequest $request)
  36. {
  37. $orderMainId = $this->orderService->addOfflineOrder($request->validated());
  38. if (!is_int($orderMainId)) {
  39. return $this->result(ErrorCode::ORDER_FAILURE, '', $orderMainId);
  40. }
  41. return $this->success(['order_id' => $orderMainId]);
  42. }
  43. /**
  44. * 用户完成订单-确认收货
  45. */
  46. public function userComp()
  47. {
  48. $validator = $this->validationFactory->make(
  49. $this->request->all(),
  50. [
  51. 'user_id' => 'required|nonempty|integer',
  52. 'order_id' => 'required|nonempty|numeric',
  53. ],
  54. [
  55. '*.*' => ':attribute 参数不正确',
  56. ]
  57. );
  58. if ($validator->fails()) {
  59. // Handle exception
  60. throw new ValidationException($validator);
  61. return;
  62. }
  63. $userId = $this->request->input('user_id');
  64. $orderId = $this->request->input('order_id'); // TODO 等新订单列表接口处理完毕后全面转换成global_order_id
  65. $orderMain = OrderMain::query()
  66. ->where(['id' => $orderId, 'state' => OrderMain::ORDER_STATE_DELIVERY, 'user_id' => $userId])
  67. ->first();
  68. if (empty($orderMain)) {
  69. $this->log->event(LogLabel::ONLINE_COMPLETE_LOG, ['order_not_found' => 'order_not_found']);
  70. return $this->result(ErrorCode::SEPARATE_ACCOUNTS_ERROR, '', '操作失败,订单异常或不存在');
  71. }
  72. Db::beginTransaction();
  73. try {
  74. $this->orderService->onlineCompleted($orderMain->global_order_id);
  75. $this->separateAccountsService->orderOnlineCompleted($orderMain->global_order_id);
  76. Db::commit();
  77. return $this->success('');
  78. } catch (\Exception $e) {
  79. Db::rollBack();
  80. $this->log->event(LogLabel::ONLINE_COMPLETE_LOG, ['exception' => $e->getMessage()]);
  81. return $this->result(ErrorCode::SEPARATE_ACCOUNTS_ERROR, '', '操作失败,请稍后重试');
  82. }
  83. }
  84. /**
  85. * 用户取消订单
  86. */
  87. public function onlineCancel(){
  88. $orderId = $this->request->input('order_id');
  89. $orderMain = OrderMain::where('id',$orderId)
  90. ->select('global_order_id')
  91. ->first();
  92. return $this->success($this->orderService->onlineCancel($orderMain->global_order_id));
  93. }
  94. /**
  95. * 用户订单
  96. * @param UserOrdersRequest $request
  97. * @return \Psr\Http\Message\ResponseInterface
  98. */
  99. public function userOnlineOrders(UserOrdersRequest $request)
  100. {
  101. $params = $request->validated();
  102. $this->orderService->onlineAutoCancelByUserId($params['user_id']);
  103. $result = $this->orderService->userOnlineOrders($params['user_id'], $params['state'], $params['page'], $params['pagesize']);
  104. return $this->success($result);
  105. }
  106. }