OrderController.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <?php
  2. namespace addons\ScoreMall\api\modules\v1\controllers;
  3. use addons\JuheShop\common\service\OrderService;
  4. use addons\ScoreMall\common\enums\ScoreMallEnum;
  5. use addons\ScoreMall\common\logic\order\OrderFormLogic;
  6. use addons\ScoreMall\common\logic\order\OrderInitDataLogic;
  7. use addons\ScoreMall\common\logic\order\OrderLimitLogic;
  8. use addons\ScoreMall\common\logic\order\OrderMarketingLogic;
  9. use addons\ScoreMall\common\logic\order\OrderSupplyLogic;
  10. use addons\ScoreMall\common\models\ScoreMallGoods;
  11. use addons\StarChain\common\services\ChainOrderService;
  12. use common\enums\AppEnum;
  13. use common\enums\PreviewTypeEnum;
  14. use common\enums\ShippingTypeEnum;
  15. use common\enums\StatusEnum;
  16. use common\logic\common\GoodsLogic;
  17. use common\models\common\AddonsMarketingSetting;
  18. use common\models\mall\MallAddons;
  19. use common\models\order\Order;
  20. use common\models\user\UserAddress;
  21. use Yii;
  22. use api\controllers\OnAuthController;
  23. use yii\helpers\Json;
  24. /**
  25. * 订单控制器
  26. *
  27. * Class OrderController
  28. * @package addons\ScoreMall\api\controllers
  29. */
  30. class OrderController extends OnAuthController
  31. {
  32. public $modelClass = '';
  33. /**
  34. * 不用进行登录验证的方法
  35. *
  36. * 例如: ['index', 'update', 'create', 'view', 'delete']
  37. * 默认全部需要验证
  38. *
  39. * @var array
  40. */
  41. protected $authOptional = [];
  42. /**
  43. * 订单预览
  44. * @Author: lun
  45. * @DateTime: 2022/1/7 0007 17:29
  46. * @Copyright: copyright (c) 2021 广东七件事集团
  47. * @return mixed|void
  48. */
  49. public function actionPreview()
  50. {
  51. $params = \Yii::$app->request->post();
  52. $params['mall_id'] = $this->mall_id;
  53. $params['user_id'] = $this->user_id;
  54. $orderFormLogic = new OrderFormLogic();
  55. $form = $orderFormLogic->getDefaultform($this->mall_id, $this->user_id);
  56. $form->attributes = Yii::$app->request->post();
  57. $form['action'] = AppEnum::ACTION_PREVIEW;
  58. !empty($form->shipping_type) && $form->shipping_type = ShippingTypeEnum::LOGISTICS;
  59. // 初始化订单数据
  60. $orderInitDataLogic = new OrderInitDataLogic();
  61. $form = $orderInitDataLogic->execute($form, PreviewTypeEnum::BUY_NOW);
  62. if ($form === false) return $this->error($orderInitDataLogic->getError());
  63. // 购买验证
  64. $orderLimitLogic = new OrderLimitLogic();
  65. $form = $orderLimitLogic->run($form);
  66. if ($form === false) return $this->error($orderLimitLogic->getError());
  67. // 获取收货地址
  68. $address_info = UserAddress::getUserAddress($this->user_id, $form->address_id);
  69. $form->address_id = $address_info['id'];
  70. // 营销
  71. $orderMarketingLogic = new OrderMarketingLogic($form['score_goods']['use_coupon']);
  72. $form = $orderMarketingLogic->run($form);
  73. if ($form === false) return $this->error($orderMarketingLogic->getError());
  74. $group_order_goods = $form['group_order_goods'];
  75. $score_goods = $form['score_goods'];
  76. if(!empty($form['sku'])){
  77. $supply_shop = new OrderSupplyLogic();
  78. foreach ($form['sku'] as $sku){
  79. if(!empty($sku['goods']['goods_source'])){
  80. $form = $supply_shop->supplyShop($this->mall_id, $form, $sku['goods']['goods_source']);
  81. if ($form === false) continue;
  82. }
  83. }
  84. }
  85. if ($form === false) return $this->error($supply_shop->getError());
  86. $marketing = $form['marketing'];
  87. $pay_type_list = \Yii::$app->services->pay->getEnablePayment($this->mall_id, $this->platform);
  88. $shipping_type_list = ShippingTypeEnum::getMap();
  89. !empty($score_goods['pay_score']) && $total_pay_money[] = $score_goods['pay_score'] . $score_goods['score_name'];
  90. !empty($form['total_pay_money']) && $total_pay_money[] = '¥'. $form['total_pay_money'];
  91. unset($marketing['deduct']['score']);
  92. $info = compact('group_order_goods', 'marketing', 'address_info', 'pay_type_list', 'shipping_type_list');
  93. $info['total_pay_money'] = implode('+', $total_pay_money);
  94. $info['pay_money'] = $form['total_pay_money'];
  95. $info['pay_score'] = bcadd($score_goods['pay_score'], 0, 2);
  96. $info['total_pay_score'] = bcadd($score_goods['pay_score'], 0, 2);
  97. $info['is_address'] = $form['is_address'] ?? 0;
  98. return $this->success('操作成功', $info);
  99. }
  100. /**
  101. * 创建订单
  102. * @Author: lun
  103. * @DateTime: 2022/1/11 0011 10:30
  104. * @Copyright: copyright (c) 2021 广东七件事集团
  105. * @return mixed|void
  106. */
  107. public function actionCreate()
  108. {
  109. $params = \Yii::$app->request->post();
  110. $params['mall_id'] = $this->mall_id;
  111. $params['user_id'] = $this->user_id;
  112. $orderFormLogic = new OrderFormLogic();
  113. $form = $orderFormLogic->getDefaultform($this->mall_id, $this->user_id);
  114. $form->attributes = Yii::$app->request->post();
  115. $form['action'] = AppEnum::ACTION_CREATE;
  116. !empty($form->shipping_type) && $form->shipping_type = ShippingTypeEnum::LOGISTICS;
  117. // 初始化订单数据
  118. $orderInitDataLogic = new OrderInitDataLogic();
  119. $form = $orderInitDataLogic->execute($form, PreviewTypeEnum::BUY_NOW);
  120. if ($form === false) return $this->error($orderInitDataLogic->getError());
  121. // 购买验证
  122. $orderLimitLogic = new OrderLimitLogic();
  123. $form = $orderLimitLogic->run($form);
  124. if ($form === false) return $this->error($orderLimitLogic->getError(), [],$orderLimitLogic->getCodeError()['code']);
  125. // 获取收货地址
  126. $address_info = UserAddress::getUserAddress($this->user_id, $form->address_id);
  127. $form->address_id = $address_info['id'];
  128. // 营销减免活动
  129. $orderMarketingLogic = new OrderMarketingLogic($form['score_goods']['use_coupon']);
  130. $form = $orderMarketingLogic->run($form, true);
  131. if ($form === false) return $this->error($orderMarketingLogic->getError());
  132. if(!empty($form['sku'])){
  133. $supply_shop = new OrderSupplyLogic();
  134. foreach ($form['sku'] as $sku){
  135. if(!empty($sku['goods']['goods_source'])){
  136. $form = $supply_shop->supplyShop($this->mall_id, $form, $sku['goods']['goods_source']);
  137. if ($form === false) continue;
  138. }
  139. }
  140. }
  141. if ($form === false) return $this->error($supply_shop->getError());
  142. $res = Order::createOrder($form);
  143. if ($res === false) return $this->error(Order::getStaticError());
  144. $res['total_pay_money'] = '0';
  145. //获取订单需支付金额
  146. if($res['transaction']){
  147. $trade = \Yii::$app->services->pay->getByTradeId($res['transaction']['trade_id']);
  148. $res['total_pay_money'] = $trade ? $trade->pay_fee : 0;
  149. $res['total_pay_money'] = '¥'.$res['total_pay_money'];
  150. }
  151. return $this->success('操作成功', $res);
  152. }
  153. }