BuyNowPurchase.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace addons\ValetOrder\common\logic\order\purchase;
  3. use common\enums\GoodsTypeEnum;
  4. use common\enums\StatusEnum;
  5. use common\helpers\ArrayHelper;
  6. use common\helpers\BcHelper;
  7. use common\models\goods\GoodsAttr;
  8. use common\models\order\OrderDetail;
  9. use Exception;
  10. use yii\helpers\Json;
  11. /**
  12. * 立即付款订单处理
  13. * @Author bing
  14. * @DateTime 2021-09-23 09:40:40
  15. * @copyright: Copyright (c) 2020 广东七件事集团
  16. */
  17. class BuyNowPurchase extends BasePurchase{
  18. /**
  19. * 执行
  20. * @Author bing
  21. * @DateTime 2021-09-23 09:46:41
  22. * @copyright: Copyright (c) 2020 广东七件事集团
  23. * @param $form
  24. * @return
  25. */
  26. public function execute( $form){
  27. try {
  28. $form->data = $data = is_array($form->data)?$form->data:Json::decode($form->data,true);
  29. // 合法性验证
  30. if(!isset($data['num']) || (int)$data['num'] < 1) throw new Exception('请设置正确的下单数量');
  31. $sku = GoodsAttr::getOne([['<>','status',StatusEnum::DELETE],['id'=>$data['attr_id']]],true,['goods','goods.extra']);
  32. if(empty($sku) || empty($sku['goods'])) throw new Exception('找不到产品信息或者产品已删除');
  33. if(in_array($sku['goods']['goods_type'],[GoodsTypeEnum::GoodsTypePhysical])) {
  34. $data['mall_id'] = $form->mall_id;
  35. // $this->checkAddress($form['action'],$data,$form->user_id);
  36. $form['is_address'] = 1;
  37. }
  38. if(empty($sku['goods']['is_on_sale'])) throw new Exception('商品' . $sku['goods']['goods_name'] . '已下架! ');
  39. $buy_num = $data['num'];
  40. if ($buy_num > $sku['stock']) throw new Exception('商品' . $sku['goods']['goods_name'] . '库存不足! ');
  41. $order_goods = new OrderDetail();
  42. $order_goods = $order_goods->loadDefaultValues();
  43. $order_goods->goods_id = $sku['goods_id'];
  44. $order_goods->goods_name = $sku['goods']['goods_name'];
  45. $order_goods->goods_attr_id = $sku['id'];
  46. $order_goods->sign_id = $sku['sign_id'];
  47. // dd($sku);
  48. $order_goods->goods_attr_name = $sku['name'];
  49. $order_goods->num = $buy_num;
  50. $order_goods->cost_price = $sku['cost_price'];
  51. $order_goods->price = $sku['price'];
  52. $order_goods->goods_price = BcHelper::mul($order_goods->num, $order_goods->price);
  53. $order_goods->original_goods_price = $order_goods->goods_price;
  54. $order_goods->pic_url = !empty($sku['pic_url']) ? $sku['pic_url'] : $sku['goods']['cover_pic'];
  55. $order_goods->user_id = $form->user_id;
  56. $order_goods->mch_id = $sku['goods']['mch_id'];
  57. $order_goods->mall_id = $form->mall_id;
  58. $order_goods->marketing_type = $data['marketing_type'] ?? '0';
  59. $order_goods->marketing_id = $data['marketing_id'] ?? 0;
  60. // 默认数据带下单数量方便计算
  61. $goods = $sku['goods'];
  62. $goods['number'] = $buy_num;
  63. $form->order_goods[] = ArrayHelper::toArray($order_goods);
  64. // unset($sku['product']);
  65. $form->sku[$sku['goods_id']] = $sku;
  66. return $form;
  67. } catch (Exception $e) {
  68. $this->setError($e->getMessage());
  69. return false;
  70. }
  71. }
  72. /**
  73. * 获取下单类型
  74. * @Author bing
  75. * @DateTime 2021-09-23 09:48:45
  76. * @copyright: Copyright (c) 2020 广东七件事集团
  77. * @return string
  78. */
  79. public static function getType(): string{
  80. return 'buy_now';
  81. }
  82. }