BuyNowPurchase.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. namespace addons\Happiness\common\logic\order\purchase;
  3. use addons\Happiness\common\models\HappinessStoreGoods;
  4. use addons\Happiness\common\models\HappinessStoreGoodsAttr;
  5. use common\enums\GoodsTypeEnum;
  6. use common\enums\StatusEnum;
  7. use common\helpers\ArrayHelper;
  8. use common\helpers\BcHelper;
  9. use common\logic\common\GoodsLogic;
  10. use common\models\goods\Goods;
  11. use common\models\goods\GoodsAttr;
  12. use common\models\order\OrderDetail;
  13. use common\models\user\User;
  14. use common\models\user\UserSignAgreement;
  15. use Exception;
  16. use yii\helpers\Json;
  17. /**
  18. * 立即付款订单处理
  19. * @Author bing
  20. * @DateTime 2021-09-23 09:40:40
  21. * @copyright: Copyright (c) 2020 广东七件事集团
  22. */
  23. class BuyNowPurchase extends BasePurchase{
  24. /**
  25. * 执行
  26. * @Author bing
  27. * @DateTime 2021-09-23 09:46:41
  28. * @copyright: Copyright (c) 2020 广东七件事集团
  29. * @param $form
  30. * @return
  31. */
  32. public function execute( $form){
  33. try {
  34. $form->data = $data = is_array($form->data)?$form->data:Json::decode($form->data,true);
  35. // 合法性验证
  36. $user = User::getOne([['id'=>$form->user_id,'mall_id'=>$form->mall_id]]);
  37. if(empty($user)) throw new Exception('下单用户不存在');
  38. if(!isset($data['num']) || (int)$data['num'] < 1) throw new Exception('请设置正确的下单数量');
  39. $sku = GoodsAttr::getOne([['<>','status',StatusEnum::DELETE],['id'=>$data['attr_id']]],true,['goods','goods.extra']);
  40. if(empty($sku) || empty($sku['goods'])) throw new Exception('找不到产品信息或者产品已删除');
  41. if(in_array(intval($sku['goods']['goods_type']),[GoodsTypeEnum::GoodsTypePhysical])) {
  42. $data['mall_id'] = $form->mall_id;
  43. $this->checkAddress($form['action'],$data,$form->user_id);
  44. $form['is_address'] = 1;
  45. $form['is_virtual'] = 1;
  46. }
  47. $form['is_virtual'] = 0;
  48. if(in_array(intval($sku['goods']['goods_type']),[GoodsTypeEnum::GoodsTypeVirtual])) {
  49. $form['is_virtual'] = 1;
  50. }
  51. if(empty($sku['goods']['is_on_sale'])) throw new Exception('商品' . $sku['goods']['goods_name'] . '已下架! ');
  52. $buy_num = $data['num'];
  53. $order_goods = new OrderDetail();
  54. $order_goods = $order_goods->loadDefaultValues();
  55. $order_goods->goods_id = $sku['goods_id'];
  56. $order_goods->goods_name = $sku['goods']['goods_name'];
  57. $order_goods->goods_attr_id = $sku['id'];
  58. $order_goods->sign_id = $sku['sign_id'];
  59. // dd($sku);
  60. $order_goods->goods_attr_name = $sku['name'];
  61. $order_goods->num = $buy_num;
  62. $order_goods->cost_price = $sku['cost_price'];
  63. $order_goods->price = $sku['price'];
  64. $order_goods->goods_price = BcHelper::mul($order_goods->num, $order_goods->price);
  65. $order_goods->original_goods_price = $order_goods->goods_price;
  66. $order_goods->pic_url = !empty($sku['pic_url']) ? $sku['pic_url'] : $sku['goods']['cover_pic'];
  67. $order_goods->user_id = $form->user_id;
  68. $order_goods->mch_id = $sku['goods']['mch_id'];
  69. $order_goods->mall_id = $form->mall_id;
  70. $order_goods->marketing_type = $data['marketing_type'] ?? '0';
  71. $order_goods->marketing_id = $data['marketing_id'] ?? 0;
  72. $order_goods->is_virtual = $form->is_virtual;
  73. $goods_info = HappinessStoreGoods::getOne([
  74. ['mall_id' => $form->mall_id],
  75. ['goods_id' => $sku['goods_id']],
  76. ['store_id'=>$form->store_id],
  77. ['status' => StatusEnum::ENABLED],
  78. ['is_on_sale' => 1],
  79. ]);
  80. if (!empty($goods_info)) {
  81. $goods_info['freight_type']=json_decode($goods_info['freight_type'], true);
  82. if (!in_array($form->data['shipping_type'], $goods_info['freight_type'])) $order_goods->status = 0;
  83. }
  84. if (empty($form->store_info)) {
  85. $order_goods->status = 0;
  86. } else {
  87. $today = date('Y-m-d', time());
  88. $business_time_start = $today. ' ' . $form->store_info['business_time_start'];
  89. $business_time_end = $today. ' ' . $form->store_info['business_time_end'];
  90. if (strtotime($business_time_start) > time() && strtotime($business_time_end) < time()) throw new Exception('该门店不在营业时间内');
  91. if ($form->data['shipping_type'] == 2 && $form->store_info['self_mention'] != 1) $order_goods->status = 0;
  92. if ($form->data['shipping_type'] == 3 && $form->store_info['merchant_distribution'] != 1) $order_goods->status = 0;
  93. //获取门店该商品库存
  94. $attr_data = HappinessStoreGoodsAttr::getOne([
  95. ['mall_id' => $form->mall_id],
  96. ['store_id' => $form->store_id],
  97. ['status' => StatusEnum::ENABLED],
  98. ['attr_id' => $form->data['attr_id']],
  99. ['is_on_sale' => 1],
  100. ], true);
  101. if (empty($attr_data) || $buy_num > $attr_data['stock']) $order_goods->status = 0;
  102. }
  103. // 默认数据带下单数量方便计算
  104. $goods = $sku['goods'];
  105. $goods['number'] = $buy_num;
  106. $form->order_goods[] = ArrayHelper::toArray($order_goods);
  107. // unset($sku['product']);
  108. $form->sku[$sku['goods_id']] = $sku;
  109. $form->user = $user;
  110. // 签署升级协判断 0不需要签署,1需要签署
  111. $is_sign_agreement = UserSignAgreement::checkIsNeedSign($user['level'], array_column($form->order_goods, 'goods_id'), $form->mall_id, $form->user_id);
  112. $form->is_sign_agreement = $is_sign_agreement;
  113. return $form;
  114. } catch (Exception $e) {
  115. $this->setError($e->getMessage());
  116. return false;
  117. }
  118. }
  119. /**
  120. * 获取下单类型
  121. * @Author bing
  122. * @DateTime 2021-09-23 09:48:45
  123. * @copyright: Copyright (c) 2020 广东七件事集团
  124. * @return string
  125. */
  126. public static function getType(): string{
  127. return 'buy_now';
  128. }
  129. }