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.

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