CartPurchase.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace addons\TinyShop\common\components\purchase;
  3. use addons\TinyShop\common\enums\MarketingEnum;
  4. use Yii;
  5. use yii\web\UnprocessableEntityHttpException;
  6. use common\helpers\BcHelper;
  7. use addons\TinyShop\common\forms\PreviewForm;
  8. use addons\TinyShop\common\models\order\OrderProduct;
  9. use addons\TinyShop\common\components\InitOrderDataInterface;
  10. /**
  11. * 购物车下单
  12. *
  13. * Class CartPurchase
  14. * @package addons\TinyShop\common\components\purchase
  15. * @author jianyan74 <751393839@qq.com>
  16. */
  17. class CartPurchase extends InitOrderDataInterface
  18. {
  19. /**
  20. * @param PreviewForm $form
  21. * @return PreviewForm|mixed
  22. * @throws \yii\web\NotFoundHttpException
  23. * @throws \yii\web\UnprocessableEntityHttpException
  24. */
  25. public function execute(PreviewForm $form): PreviewForm
  26. {
  27. $carts = Yii::$app->tinyShopService->memberCartItem->findByIds($form->data, $form->buyer_id, true);
  28. if (count($form->data) != count($carts)) {
  29. throw new UnprocessableEntityHttpException('找不到商品信息');
  30. }
  31. foreach ($carts as $model) {
  32. // 超值换购
  33. $plusBuyId = $model['marketing_id'];
  34. if ($plusBuyId > 0 && $model['marketing_type'] == MarketingEnum::PLUS_BUY) {
  35. if (!isset($form->plus_buy[$plusBuyId])) {
  36. $form->plus_buy[$plusBuyId] = [
  37. 'marketing_id' => $plusBuyId,
  38. 'number' => 0,
  39. 'price' => 0,
  40. 'product_ids' => [],
  41. 'carts' => [],
  42. ];
  43. }
  44. $form->plus_buy[$plusBuyId]['number'] += $model['number'];
  45. $form->plus_buy[$plusBuyId]['price'] += $model['number'] * $model['sku']['price'];
  46. $form->plus_buy[$plusBuyId]['product_ids'][] = $model['product_id'];
  47. $form->plus_buy[$plusBuyId]['carts'][] = $model;
  48. continue;
  49. }
  50. $orderProduct = new OrderProduct();
  51. $orderProduct = $orderProduct->loadDefaultValues();
  52. $orderProduct->merchant_id = $model['product']['merchant_id'];
  53. $orderProduct->product_id = $model['product_id'];
  54. $orderProduct->product_name = $model['product']['name'];
  55. $orderProduct->sku_id = $model['sku_id'];
  56. $orderProduct->sku_name = $model['sku']['name'];
  57. $orderProduct->num = $model['number'];
  58. $orderProduct->cost_price = BcHelper::mul($orderProduct->num, $model['sku']['cost_price']);
  59. $orderProduct->price = $model['sku']['price'];
  60. $orderProduct->product_money = BcHelper::mul($orderProduct->num, $orderProduct->price);
  61. $orderProduct->product_original_money = $orderProduct->product_money;
  62. $orderProduct->product_picture = !empty($model['sku']['picture']) ? $model['sku']['picture'] : $model['product']['picture'];
  63. $orderProduct->product_type = $model['product']['type'];
  64. $orderProduct->stock_deduction_type = $model['product']['stock_deduction_type'];
  65. $orderProduct->buyer_id = $model['member_id'];
  66. $orderProduct->point_exchange_type = $model['product']['point_exchange_type'];
  67. $orderProduct->supplier_id = $model['product']['supplier_id'];
  68. $orderProduct->is_commission = $model['product']['is_commission'];
  69. // 默认数据带购物车数量方便计算
  70. $product = $model['product'];
  71. $product['number'] = $model['number'];
  72. // 修改总订单
  73. $form->product_count += $model['number'];
  74. $form->merchant_id = $orderProduct->merchant_id;
  75. $form->product_money = BcHelper::add($form->product_money, $orderProduct->product_money);
  76. $form->product_original_money = BcHelper::add($form->product_original_money, $orderProduct->product_money);
  77. $form->product_type = $orderProduct->product_type;
  78. $form->max_use_point += $model['product']['max_use_point'] * $orderProduct->num; // 最多抵现积分
  79. $form->defaultProducts[] = $product;
  80. $form->orderProducts[] = $orderProduct;
  81. $form->sku[] = $model['sku'];
  82. empty($form->merchant) && $form->merchant = $model['merchant'];
  83. unset($product);
  84. }
  85. return $form;
  86. }
  87. /**
  88. * 下单类型
  89. *
  90. * @return string
  91. */
  92. public static function getType(): string
  93. {
  94. return 'cart';
  95. }
  96. }
粤ICP备19079148号