BuyNowPurchase.php 3.8 KB

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