BuyNowPurchase.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. namespace addons\Store\common\logic\order\purchase;
  3. use addons\GroupBuy\common\models\GroupBuyActiveGoodsAttr;
  4. use addons\Store\common\models\StoreGoodsAttr;
  5. use addons\Store\common\models\StoreOrderDetail;
  6. use common\enums\GoodsTypeEnum;
  7. use common\enums\ShippingTypeEnum;
  8. use common\enums\StatusEnum;
  9. use common\helpers\ArrayHelper;
  10. use common\helpers\BcHelper;
  11. use common\models\order\OrderDetail;
  12. use common\models\user\User;
  13. use Exception;
  14. use yii\helpers\Json;
  15. /**
  16. * 立即付款订单处理
  17. * @Author bing
  18. * @DateTime 2021-09-23 09:40:40
  19. * @copyright: Copyright (c) 2020 广东七件事集团
  20. */
  21. class BuyNowPurchase extends BasePurchase
  22. {
  23. /**
  24. * @desc:执行
  25. * @Author: hua
  26. * @Date: 2021/12/15
  27. * @Time: 9:56
  28. * @Copyright: copyright (c) 2021 广东七件事集团
  29. * @param $form
  30. * @return object|false
  31. */
  32. public function execute($form)
  33. {
  34. try {
  35. $data = is_array($form->data) ? $form->data : Json::decode($form->data, true);
  36. $shipping_type = $data['shipping_type'];
  37. // 合法性验证
  38. $user = User::getOne([['id' => $form->user_id, 'mall_id' => $form->mall_id]]);
  39. if (empty($user)) throw new Exception('下单用户不存在');
  40. if (!isset($data['num']) || (int)$data['num'] < 1) throw new Exception('请设置正确的下单数量');
  41. $sku = StoreGoodsAttr::getOne([
  42. ['id' => $data['attr_id']],
  43. ['status' => StatusEnum::ENABLED]
  44. ], true, [
  45. 'goods','goods.extra'
  46. ]);
  47. if (empty($sku)) throw new Exception('商品规格不存在或者已更改');
  48. $freight_type_arr = explode(',', $sku['goods']['freight_type']);
  49. if (in_array($sku['goods']['goods_type'], [GoodsTypeEnum::GoodsTypePhysical])) {
  50. // if($data['shipping_type']!= ShippingTypeEnum::PICKUP){
  51. $form['is_address'] = 1;
  52. $data['mall_id'] = $form->mall_id;
  53. $this->checkAddress($form['action'],$data,$form->user_id);
  54. // }
  55. }
  56. $form['is_virtual'] = 0;
  57. if (in_array($sku['goods']['goods_type'], [GoodsTypeEnum::GoodsTypeVirtual])) {
  58. $form['is_virtual'] = 1;
  59. }
  60. $buy_num = $data['num'];
  61. if ($buy_num > $sku['stock']) throw new Exception('商品' . $sku['goods']['goods_name'] . '库存不足! ');
  62. if ($sku['goods']['check_status'] != '1') throw new Exception('商品' . $sku['goods']['goods_name'] . '不是已通过审核的商品 ');
  63. if ($sku['goods']['is_on_sale'] != '1') throw new Exception('商品' . $sku['goods']['goods_name'] . '已下架 ');
  64. $order_goods = new StoreOrderDetail();
  65. $order_goods = $order_goods->loadDefaultValues();
  66. $order_goods->goods_id = $sku['goods_id'];
  67. $order_goods->goods_name = $sku['goods']['goods_name'];
  68. $order_goods->goods_attr_id = $sku['id'];
  69. $order_goods->sign_id = $sku['sign_id'];
  70. $order_goods->goods_attr_name = $sku['name'];
  71. $order_goods->num = $buy_num;
  72. $order_goods->cost_price = $sku['cost_price'];
  73. $order_goods->price = $sku['price'];
  74. $order_goods->goods_price = BcHelper::mul($order_goods->num, $sku['price']);
  75. $order_goods->original_goods_price = $order_goods->goods_price;
  76. $order_goods->pic_url = !empty($sku['pic_url']) ? $sku['pic_url'] : $sku['goods']['cover_pic'];
  77. $order_goods->user_id = $form->user_id;
  78. $order_goods->mch_id = $sku['goods']['mch_id'] ?? 0;
  79. $order_goods->mall_id = $form->mall_id;
  80. // 默认数据带下单数量方便计算
  81. $goods = $sku['goods'];
  82. $goods['number'] = $buy_num;
  83. $order_goods_arr = ArrayHelper::toArray($order_goods);
  84. if ($form['action'] != 'preview_order') {
  85. if ($goods['goods_type'] == 1) {
  86. if (!in_array($shipping_type, $freight_type_arr)) {
  87. throw new Exception('物流类型不匹配');
  88. }
  89. }
  90. }
  91. $order_goods_arr['freight_type'] = $freight_type_arr;
  92. $order_goods_arr['supplier_type'] = $sku['goods']['supplier_type'];
  93. $order_goods_arr['supplier_id'] = $sku['goods']['supplier_id'];
  94. $order_goods_arr['supplier_goods_id'] = $sku['goods']['supplier_goods_id'];
  95. $order_goods_arr['store_id'] = $sku['goods']['store_id'];
  96. $order_goods_arr['credit_rate'] = $sku['goods']['credit_rate']??0;
  97. $order_goods_arr['mall_goods_id'] = $sku['goods']['mall_goods_id'] ?? 0;
  98. $order_goods_arr['mall_attr_id'] = $sku['mall_attr_id'] ?? 0;
  99. // $order_goods_arr['mch_id'] = $sku['goods']['supplier_id'];
  100. $form->order_goods[] = $order_goods_arr;
  101. $form->sku[$sku['goods_id']] = $sku;
  102. $form->user = $user;
  103. return $form;
  104. } catch (Exception $e) {
  105. $this->setError($e->getMessage());
  106. return false;
  107. }
  108. }
  109. /**
  110. * 获取下单类型
  111. * @Author bing
  112. * @DateTime 2021-09-23 09:48:45
  113. * @return string
  114. * @copyright: Copyright (c) 2020 广东七件事集团
  115. */
  116. public static function getType(): string
  117. {
  118. return 'buy_now';
  119. }
  120. }