BuyNowPurchase.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace addons\Bargain\common\logic\order\purchase;
  3. use addons\Bargain\common\enums\BargainEnum;
  4. use addons\Bargain\common\models\BargainActive;
  5. use addons\Bargain\common\models\BargainOrder;
  6. use addons\Bargain\common\models\BargainUserOrder;
  7. use common\enums\GoodsTypeEnum;
  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: 2022/1/6
  27. * @Time: 10:02
  28. * @Copyright: copyright (c) 2021 广东七件事集团
  29. * @param $form
  30. * @return false|mixed
  31. */
  32. public function execute($form){
  33. try {
  34. $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 = BargainActive::getOne([
  40. ['attr_id'=>$data['attr_id']],
  41. ['mall_id'=>$form->mall_id],
  42. ['id'=>$data['active_id']]
  43. ],true,[
  44. 'goods'=>function($query){
  45. $query->with('attr');
  46. }
  47. ]);
  48. if(empty($sku) || empty($sku['goods'])) throw new Exception('找不到该砍价商品信息');
  49. if(in_array($sku['goods']['goods_type'],[GoodsTypeEnum::GoodsTypePhysical])) {
  50. $this->checkAddress($form['action'],$data,$form->user_id);
  51. $form['is_address'] = 1;
  52. }
  53. $buy_num = $data['num'];
  54. // if ($buy_num > $sku['stock']) throw new Exception('商品' . $sku['goods']['goods_name'] . '库存不足! ');
  55. $bargain_order = BargainOrder::findOne(['bargain_active_id' => $data['active_id'], 'mall_id' => $form->mall_id, 'user_id' => $user['id'], 'order_status' => BargainEnum::ORDER_HANDING]);
  56. if (empty($bargain_order)) throw new \Exception('砍价订单不存在');
  57. $bargain_price = BargainUserOrder::find()
  58. ->where(['bargain_order_id' => $bargain_order->id, 'mall_id' => $form['mall_id'], 'status' => StatusEnum::ENABLED])
  59. ->sum('price');
  60. $attr = $sku['goods']['attr'][0];
  61. $cha_price = BcHelper::sub($attr['price'], $bargain_price);
  62. if($sku['type']==2&&$cha_price>$sku['min_price'])throw new \Exception('必须砍到最低价才能下单');
  63. $order_goods = new OrderDetail();
  64. $order_goods = $order_goods->loadDefaultValues();
  65. $order_goods->goods_id = $sku['goods_id'];
  66. $order_goods->goods_name = $sku['goods']['goods_name'];
  67. $order_goods->goods_attr_id = $sku['attr_id'];
  68. $order_goods->sign_id = $attr['sign_id'];
  69. $order_goods->goods_attr_name = $attr['name'];
  70. $order_goods->num = $buy_num;
  71. $order_goods->cost_price = $attr['cost_price'];
  72. $order_goods->price = $attr['price'] ;
  73. $order_goods->goods_price = BcHelper::mul($order_goods->num, $cha_price);
  74. $order_goods->original_goods_price = $attr['original_price'];
  75. $order_goods->pic_url = !empty($attr['pic_url']) ? $attr['pic_url'] : $sku['goods']['cover_pic'];
  76. $order_goods->user_id = $form->user_id;
  77. $order_goods->mch_id = $sku['goods']['mch_id'];
  78. $order_goods->mall_id = $form->mall_id;
  79. // 默认数据带下单数量方便计算
  80. $goods = $sku['goods'];
  81. $goods['number'] = $buy_num;
  82. $form->order_goods[] = ArrayHelper::toArray($order_goods);
  83. $form->sku[$sku['goods_id']] = $sku;
  84. $form->user = $user;
  85. return $form;
  86. } catch (Exception $e) {
  87. $this->setError($e->getMessage());
  88. return false;
  89. }
  90. }
  91. /**
  92. * 获取下单类型
  93. * @Author bing
  94. * @DateTime 2021-09-23 09:48:45
  95. * @copyright: Copyright (c) 2020 广东七件事集团
  96. * @return string
  97. */
  98. public static function getType(): string{
  99. return 'buy_now';
  100. }
  101. }