BuyNowPurchase.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace addons\Sudoku\common\logic\order\purchase;
  3. use addons\Sudoku\common\logic\order\purchase\BasePurchase;
  4. use addons\Sudoku\common\models\AddonsSudokuLog;
  5. use common\enums\AppEnum;
  6. use common\enums\GoodsTypeEnum;
  7. use common\enums\StatusEnum;
  8. use common\helpers\ArrayHelper;
  9. use common\helpers\BcHelper;
  10. use addons\Sudoku\common\logic\order\OrderFormLogic;
  11. use common\helpers\StringHelper;
  12. use common\models\goods\GoodsAttr;
  13. use common\models\order\OrderDetail;
  14. use common\models\user\User;
  15. use common\models\user\UserAddress;
  16. use common\traits\ErrorTrait;
  17. use Exception;
  18. use yii\helpers\Json;
  19. /**
  20. * 立即付款订单处理
  21. * @Author ltm
  22. * @DateTime 2021-12-30 16:40:40
  23. * @copyright: Copyright (c) 2020 广东七件事集团
  24. */
  25. class BuyNowPurchase extends BasePurchase {
  26. use ErrorTrait;
  27. /**
  28. * @desc:执行
  29. * @Author: ltm
  30. * @Date: 2021/12/30
  31. * @Time: 16:56
  32. * @Copyright: copyright (c) 2021 广东七件事集团
  33. * @param OrderFormLogic $form
  34. * @return OrderFormLogic|false
  35. */
  36. public function execute(OrderFormLogic $form){
  37. try {
  38. // 合法性验证
  39. $user = User::getOne([['id'=>$form->user_id,'mall_id'=>$form->mall_id]]);
  40. if(empty($user)) throw new Exception('下单用户不存在');
  41. $params['where'][] = ['id' => $form->id];
  42. $params['where'][] = ['user_id' => $form->user_id];
  43. $params['with'] = ['goods','user','address','order'];
  44. $detail = AddonsSudokuLog::getOne($params['where'],true,$params['with']);
  45. $sku = GoodsAttr::getOne([['<>','status',StatusEnum::DELETE],['goods_id' => $detail['goods_id']]],true,['goods','goods.extra']);
  46. if(empty($sku) || empty($sku['goods'])) throw new Exception('找不到产品信息或者产品已删除');
  47. if($detail['status'] == StatusEnum::ENABLED&&$detail['order']['order_status'] == StatusEnum::ENABLED) throw new Exception('奖品已经领取');
  48. if($detail['status'] == StatusEnum::ENABLED&&$detail['order']['order_status'] != StatusEnum::ENABLED) $form->status = 0; //订单过去重新领取
  49. if($detail['status'] == StatusEnum::ENABLED&&$detail['order']['order_status'] == StatusEnum::DISABLED) $form->status = 1; //订单未支付
  50. $form->sku[$detail['goods']['id']] = $sku;
  51. $form->type = 'buy_now';
  52. $form->data['num'] = 1; //补充参数
  53. //获取奖品规格详情
  54. if($detail['goods']['id']){
  55. $goods_attr_params['where'][] = ['=','goods_id',$detail['goods']['id']];
  56. $goods_attr_params['select'] = 'id,goods_id,name,sign_id,stock,price,original_price,cost_price,goods_no,weight,pic_url';
  57. $sku = GoodsAttr::getOne($goods_attr_params['where'],true,null,'id',$goods_attr_params['select']);
  58. $form->sku[$detail['goods']['id']]['weight'] = $sku['weight'];
  59. $form->data['attr_id'] = $sku['id']; //补充参数
  60. }
  61. if(empty($detail) || empty($detail['goods'])) throw new Exception('找不到该商品信息');
  62. if($form->address_id) $detail['address'] = UserAddress::getOne([['user_id' =>$form->user_id ],['id' => $form->address_id]],true);
  63. if(!$detail['address']){
  64. $detail['address'] = UserAddress::getOne([['user_id' =>$form->user_id ]],true);
  65. }
  66. if(empty($detail['address']) || empty($detail['address'])) throw new Exception('收货地址无效');
  67. $form->address_id = $detail['address']['id']; //收货地址
  68. $form->address_default = $detail['address'];
  69. $buy_num = 1;
  70. if ($buy_num > $detail['goods']['stock']) throw new Exception('商品' . $detail['goods']['goods_name'] . '库存不足! ');
  71. $order_goods = new OrderDetail();
  72. $order_goods = $order_goods->loadDefaultValues();
  73. $order_goods->goods_id = $detail['goods_id'];
  74. $order_goods->goods_name = $detail['goods']['goods_name'];
  75. $order_goods->goods_attr_id = $sku['id'];
  76. $order_goods->sign_id = $sku['sign_id'];
  77. $order_goods->goods_attr_name = $sku['name'];
  78. $order_goods->num = $buy_num;
  79. $order_goods->cost_price = $sku['cost_price'];
  80. $order_goods->price = $sku['price'] ;
  81. $order_goods->goods_price = "0";
  82. $order_goods->original_goods_price = $sku['original_price'];
  83. $order_goods->pic_url = !empty($sku['pic_url']) ? $sku['pic_url'] : $detail['goods']['cover_pic'];
  84. $order_goods->user_id = $form->user_id;
  85. $order_goods->mch_id = $detail['goods']['mch_id'];
  86. $order_goods->mall_id = $form->mall_id;
  87. // 默认数据带下单数量方便计算
  88. $goods = $detail['goods'];
  89. $form->goods = $detail['goods'];
  90. $form->order = $detail['order'];
  91. $goods['number'] = $buy_num;
  92. $form->order_goods[] = ArrayHelper::toArray($order_goods);
  93. $form->mch_id = $detail['goods']['mch_id'];
  94. $form->user = $user;
  95. return $form;
  96. } catch (Exception $e) {
  97. $this->setError($e->getMessage());
  98. return false;
  99. }
  100. }
  101. /**
  102. * 获取下单类型
  103. * @Author ltm
  104. * @DateTime 2021-09-23 09:48:45
  105. * @copyright: Copyright (c) 2020 广东七件事集团
  106. * @return string
  107. */
  108. public static function getType(): string{
  109. return 'buy_now';
  110. }
  111. }