InitOrderData.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. namespace addons\TinyShop\common\components;
  3. use yii\web\UnprocessableEntityHttpException;
  4. use addons\TinyShop\common\enums\MarketingEnum;
  5. use addons\TinyShop\common\forms\PreviewForm;
  6. use addons\TinyShop\common\components\purchase\CartPurchase;
  7. use addons\TinyShop\common\components\purchase\BuyNowPurchase;
  8. use addons\TinyShop\common\components\purchase\BuyAgainPurchase;
  9. /**
  10. * 初始化订单数据
  11. *
  12. * Class InitOrderData
  13. * @package addons\TinyShop\common\components\purchase
  14. * @author jianyan74 <751393839@qq.com>
  15. */
  16. class InitOrderData
  17. {
  18. /**
  19. * 创建记录
  20. *
  21. * @var bool
  22. */
  23. public $isNewRecord = false;
  24. /**
  25. * 下单方式
  26. *
  27. * @var array
  28. */
  29. protected $handlers = [
  30. MarketingEnum::CART => CartPurchase::class, // 购物车
  31. MarketingEnum::BUY_NOW => BuyNowPurchase::class, // 立即下单
  32. MarketingEnum::BUY_AGAIN => BuyAgainPurchase::class, // 再次下单
  33. ];
  34. /**
  35. * 必须保证返回有商品信息不然报错
  36. *
  37. * @param PreviewForm $previewForm
  38. * @param $type
  39. * @return PreviewForm|mixed
  40. * @throws \yii\web\NotFoundHttpException
  41. * @throws \yii\web\UnprocessableEntityHttpException
  42. */
  43. public function execute(PreviewForm $previewForm, $type): PreviewForm
  44. {
  45. if (!isset($this->handlers[$type])) {
  46. throw new UnprocessableEntityHttpException('下单类型错误');
  47. }
  48. /** @var InitOrderDataInterface $class */
  49. $class = new $this->handlers[$type]();
  50. $class->isNewRecord = $this->isNewRecord;
  51. $previewForm = $class->execute($previewForm);
  52. if (!$previewForm->orderProducts || !$previewForm->sku) {
  53. throw new UnprocessableEntityHttpException('找不到可用的商品');
  54. }
  55. $previewForm = $class->afterExecute($previewForm, $class::getType());
  56. return $previewForm;
  57. }
  58. }
粤ICP备19079148号