BuyNowPurchase.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace addons\LuckyGroup\common\logic\order\purchase;
  3. use addons\LuckyGroup\common\enums\LuckyGroupEnum;
  4. use addons\LuckyGroup\common\models\LuckyGroupActivity;
  5. use addons\LuckyGroup\common\models\LuckyGroupGoods;
  6. use addons\LuckyGroup\common\models\LuckyGroupOrder;
  7. use common\enums\GoodsTypeEnum;
  8. use common\enums\StatusEnum;
  9. use common\helpers\ArrayHelper;
  10. use common\helpers\BcHelper;
  11. use addons\LuckyGroup\common\logic\order\OrderFormLogic;
  12. use common\models\goods\GoodsAttr;
  13. use common\models\order\OrderDetail;
  14. use common\models\user\User;
  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. * @desc:执行
  27. * @Author: hua
  28. * @Date: 2021/12/15
  29. * @Time: 9:56
  30. * @Copyright: copyright (c) 2021 广东七件事集团
  31. * @param $form
  32. * @return object|false
  33. */
  34. public function execute($form)
  35. {
  36. try {
  37. $data = is_array($form->data) ? $form->data : Json::decode($form->data, true);
  38. $activity = LuckyGroupActivity::getOne([['id'=>$data['activity_id']],['mall_id'=>$form->mall_id]],true);
  39. if(empty($activity)) throw new Exception('活动不存在');
  40. if($activity['status']!=StatusEnum::ENABLED) throw new Exception('活动未开启');
  41. $time = time();
  42. $date = date('Y-m-d',$time);
  43. if($time<strtotime($date.' '.$activity['start_time']))throw new Exception('活动未开始');
  44. if($time>strtotime($date.' '.$activity['end_time']))throw new Exception('活动已结束');
  45. // 合法性验证
  46. $user = User::getOne([['id' => $form->user_id, 'mall_id' => $form->mall_id]]);
  47. if (empty($user)) throw new Exception('下单用户不存在');
  48. if (!isset($data['num']) || (int)$data['num'] < 1) throw new Exception('请设置正确的下单数量');
  49. $sku = GoodsAttr::getOne([['<>', 'status', StatusEnum::DELETE], ['id' => $data['attr_id']]], true, ['goods', 'goods.extra']);
  50. if (empty($sku) || empty($sku['goods'])) throw new Exception('找不到产品信息或者产品已删除');
  51. $lucky_group_goods = LuckyGroupGoods::getOne([['goods_id' => $sku['goods_id'], 'activity_id' => $data['activity_id']]]);
  52. if (empty($lucky_group_goods)) throw new Exception('找不到幸运拼团商品');
  53. $group_order = LuckyGroupOrder::getOne([['user_id' => $form->user_id, 'goods_id' => $sku['goods_id'], 'group_status' => LuckyGroupEnum::GROUP_JOINING]]);
  54. if ($group_order) throw new Exception('参团中,请勿重复参团');
  55. if (in_array($sku['goods']['goods_type'], [GoodsTypeEnum::GoodsTypePhysical])) {
  56. $data['mall_id'] = $form->mall_id;
  57. // $this->checkAddress($form['action'], $data, $form->user_id);
  58. $form['is_address'] = 1;
  59. }
  60. $buy_num = $data['num'];
  61. if ($buy_num > $sku['stock']) throw new Exception('商品' . $sku['goods']['goods_name'] . '库存不足! ');
  62. $order_goods = new OrderDetail();
  63. $order_goods = $order_goods->loadDefaultValues();
  64. $order_goods->goods_id = $sku['goods_id'];
  65. $order_goods->goods_name = $sku['goods']['goods_name'];
  66. $order_goods->goods_attr_id = $sku['id'];
  67. $order_goods->sign_id = $sku['sign_id'];
  68. $order_goods->goods_attr_name = $sku['name'];
  69. $order_goods->num = $buy_num;
  70. $order_goods->cost_price = $sku['cost_price'];
  71. $order_goods->price = $sku['price'];
  72. $order_goods->goods_price = BcHelper::mul($order_goods->num, $order_goods->price);
  73. $order_goods->original_goods_price = $order_goods->goods_price;
  74. $order_goods->pic_url = !empty($sku['pic_url']) ? $sku['pic_url'] : $sku['goods']['cover_pic'];
  75. $order_goods->user_id = $form->user_id;
  76. $order_goods->mch_id = $sku['goods']['mch_id'];
  77. $order_goods->mall_id = $form->mall_id;
  78. $order_goods->marketing_type = $data['marketing_type'] ?? '0';
  79. $order_goods->marketing_id = $data['marketing_id'] ?? 0;
  80. // 默认数据带下单数量方便计算
  81. $goods = $sku['goods'];
  82. $goods['number'] = $buy_num;
  83. $form->order_goods[] = ArrayHelper::toArray($order_goods);
  84. $form->sku[$sku['goods_id']] = $sku;
  85. $form->user = $user;
  86. return $form;
  87. } catch (Exception $e) {
  88. $this->setError($e->getMessage());
  89. return false;
  90. }
  91. }
  92. /**
  93. * 获取下单类型
  94. * @Author bing
  95. * @DateTime 2021-09-23 09:48:45
  96. * @return string
  97. * @copyright: Copyright (c) 2020 广东七件事集团
  98. */
  99. public static function getType(): string
  100. {
  101. return 'buy_now';
  102. }
  103. }