OrderController.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. namespace addons\Purchase\api\modules\v1\controllers;
  3. use addons\Purchase\common\enums\PurchaseEnum;
  4. use addons\Purchase\common\logic\order\OrderFormLogic;
  5. use addons\Purchase\common\logic\order\OrderInitDataLogic;
  6. use addons\Purchase\common\logic\order\OrderLimitLogic;
  7. use addons\Purchase\common\logic\order\OrderMarketingLogic;
  8. use addons\Purchase\common\models\PurchaseCart;
  9. use addons\Purchase\common\models\PurchaseManager;
  10. use common\enums\AppEnum;
  11. use common\enums\PreviewTypeEnum;
  12. use common\enums\ShippingTypeEnum;
  13. use common\enums\StatusEnum;
  14. use common\models\order\Order;
  15. use common\models\user\UserAddress;
  16. use common\models\user\UserWallet;
  17. use Yii;
  18. use api\controllers\OnAuthController;
  19. /**
  20. * 订单控制器
  21. *
  22. * Class OrderController
  23. * @package addons\Purchase\api\controllers
  24. */
  25. class OrderController extends OnAuthController
  26. {
  27. public $modelClass = '';
  28. /**
  29. * 不用进行登录验证的方法
  30. *
  31. * 例如: ['index', 'update', 'create', 'view', 'delete']
  32. * 默认全部需要验证
  33. *
  34. * @var array
  35. */
  36. protected $authOptional = [];
  37. /**
  38. * 订单预览
  39. * @Author: lun
  40. * @DateTime: 2022/1/7 0007 17:29
  41. * @Copyright: copyright (c) 2021 广东七件事集团
  42. * @return mixed|void
  43. */
  44. public function actionPreview()
  45. {
  46. $post = Yii::$app->request->post();
  47. $orderFormLogic = new OrderFormLogic();
  48. $form = $orderFormLogic->getDefaultform($this->mall_id, $this->user_id);
  49. $form->attributes = $post;
  50. $form['action'] = AppEnum::ACTION_PREVIEW;
  51. !empty($form->shipping_type) && $form->shipping_type = ShippingTypeEnum::LOGISTICS;
  52. // 获取积分配置信息
  53. $config = Yii::$app->services->setting->mall->get($this->mall_id, 'score');// 获取积分配置
  54. $score = UserWallet::find()->select("score")->where(['user_id' => $this->user_id, 'status' => StatusEnum::ENABLED])->asArray()->scalar() ?? 0;
  55. $score_config = [
  56. 'score_name' => $config['score_name'] ?? '积分',
  57. 'score_deduct_ratio' => empty((float)$config['score_deduct_ratio']) ? 1 : $config['score_deduct_ratio'],
  58. 'score' => $score,
  59. ];
  60. $form->score_config = $score_config;
  61. // 初始化订单数据
  62. $orderInitDataLogic = new OrderInitDataLogic();
  63. $form = $orderInitDataLogic->execute($form, $form->type);
  64. if ($form === false) return $this->error($orderInitDataLogic->getError());
  65. // 购买验证
  66. $orderLimitLogic = new OrderLimitLogic();
  67. $form = $orderLimitLogic->run($form);
  68. if ($form === false) return $this->error($orderLimitLogic->getError());
  69. // 获取收货地址
  70. $address_info = UserAddress::getUserAddress($this->user_id, $form->address_id);
  71. $form->address_id = $address_info['id'];
  72. // 营销
  73. $orderMarketingLogic = new OrderMarketingLogic();
  74. $form = $orderMarketingLogic->run($form);
  75. if ($form === false) return $this->error($orderMarketingLogic->getError());
  76. $group_order_goods = $form['group_order_goods'];
  77. $marketing = $form['marketing'];
  78. $pay_type_list = \Yii::$app->services->pay->getEnablePayment($this->mall_id, $this->platform);
  79. $shipping_type_list = ShippingTypeEnum::getMap();
  80. isset($form['total_pay_score']) && $total_pay_money[] = $form['total_pay_score'] . $score_config['score_name'];
  81. isset($form['total_pay_money']) && $total_pay_money[] = '¥'. $form['total_pay_money'];
  82. $info = compact('group_order_goods', 'marketing', 'address_info', 'pay_type_list', 'shipping_type_list');
  83. $info['total_pay_money'] = implode('+', $total_pay_money);
  84. $info['pay_money'] = $form['total_pay_money'];
  85. $info['total_pay_score'] = $form['total_pay_score'];
  86. $info['is_address'] = $form['is_address'] ?? 0;
  87. return $this->success('操作成功', $info);
  88. }
  89. /**
  90. * 创建订单
  91. * @Author: lun
  92. * @DateTime: 2022/1/11 0011 10:30
  93. * @Copyright: copyright (c) 2021 广东七件事集团
  94. * @return mixed|void
  95. */
  96. public function actionCreate()
  97. {
  98. // 检查用户申请是否通过
  99. if (PurchaseManager::check($this->user_id) == false) return $this->error("请申请资格");
  100. $orderFormLogic = new OrderFormLogic();
  101. $form = $orderFormLogic->getDefaultform($this->mall_id, $this->user_id);
  102. $form->attributes = Yii::$app->request->post();
  103. $form['action'] = AppEnum::ACTION_CREATE;
  104. !empty($form->shipping_type) && $form->shipping_type = ShippingTypeEnum::LOGISTICS;
  105. // 获取积分配置信息
  106. $config = Yii::$app->services->setting->mall->get($this->mall_id, 'score');// 获取积分配置
  107. $score = UserWallet::find()->select("score")->where(['user_id' => $this->user_id, 'status' => StatusEnum::ENABLED])->asArray()->scalar() ?? 0;
  108. $score_config = [
  109. 'score_name' => $config['score_name'] ?? '积分',
  110. 'score_deduct_ratio' => empty((float)$config['score_deduct_ratio']) ? 1 : $config['score_deduct_ratio'],
  111. 'score' => $score,
  112. ];
  113. $form->score_config = $score_config;
  114. // 初始化订单数据
  115. $orderInitDataLogic = new OrderInitDataLogic();
  116. $form = $orderInitDataLogic->execute($form, $form->type);
  117. if ($form === false) return $this->error($orderInitDataLogic->getError());
  118. // 购买验证
  119. $orderLimitLogic = new OrderLimitLogic();
  120. $form = $orderLimitLogic->run($form);
  121. if ($form === false) return $this->error($orderLimitLogic->getError());
  122. // 获取收货地址
  123. $address_info = UserAddress::getUserAddress($this->user_id, $form->address_id);
  124. $form->address_id = $address_info['id'];
  125. // 营销减免活动
  126. $orderMarketingLogic = new OrderMarketingLogic();
  127. $form = $orderMarketingLogic->run($form, true);
  128. if ($form === false) return $this->error($orderMarketingLogic->getError());
  129. $res = Order::createOrder($form);
  130. if ($res === false) return $this->error(Order::getStaticError());
  131. //删除购物车
  132. if ($form->type == PreviewTypeEnum::CART) PurchaseCart::decreaseNumb(['user_id' => $form->user_id, 'list' => $form->attr]);
  133. return $this->success('操作成功', $res);
  134. }
  135. }