LuckyGroupBuyLimit.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace addons\LuckyGroup\common\logic\order\limit;
  3. use addons\GroupBuy\common\enums\GroupBuyEnum;
  4. use addons\GroupBuy\common\models\GroupBuyActive;
  5. use addons\GroupBuy\common\models\GroupBuyOrder;
  6. use addons\LuckyGroup\common\enums\LuckyGroupEnum;
  7. use addons\LuckyGroup\common\models\LuckyGroupActivity;
  8. use addons\LuckyGroup\common\models\LuckyGroupGoods;
  9. use addons\LuckyGroup\common\models\LuckyGroupOrder;
  10. use addons\LuckyGroup\common\models\LuckyGroupUser;
  11. use common\enums\AssetsType;
  12. use common\enums\StatusEnum;
  13. use common\enums\UserWalletEnum;
  14. use common\models\goods\GoodsAttr;
  15. use common\models\user\User;
  16. use common\models\user\UserWallet;
  17. use Exception;
  18. use services\common\UserWalletService;
  19. use yii\helpers\Json;
  20. class LuckyGroupBuyLimit extends BaseLimit
  21. {
  22. public function execute($form)
  23. {
  24. try {
  25. } catch (Exception $e) {
  26. return false;
  27. }
  28. }
  29. /**
  30. * @desc:购买限制验证
  31. * @Author: hua
  32. * @Date: 2021/12/15
  33. * @Time: 10:17
  34. * @Copyright: copyright (c) 2021 广东七件事集团
  35. * @param $form
  36. * @throws Exception
  37. */
  38. public static function compute($form)
  39. {
  40. $data = is_array($form->data) ? $form->data : Json::decode($form->data, true);
  41. if ($data['attend_type'] == 1 && $data['num'] != 1) {
  42. throw new Exception('手动拼团一次最多只能购买一个商品');
  43. }
  44. $basic = \Yii::$app->services->setting->addons->get($form['mall_id'], LuckyGroupEnum::ADDONS_NAME, 'basic');
  45. $is_auto_pintuan = 1;
  46. if(isset($basic['is_auto_pintuan'])){
  47. $is_auto_pintuan = $basic['is_auto_pintuan'];
  48. }
  49. if($is_auto_pintuan==0){
  50. if($data['attend_type'] == 2){
  51. throw new Exception('拼团类型错误');
  52. }
  53. }
  54. // 合法性验证
  55. if (!isset($data['num']) || (int)$data['num'] < 1) throw new Exception('请设置正确的下单数量');
  56. $sku = GoodsAttr::getOne([['<>', 'status', StatusEnum::DELETE], ['id' => $data['attr_id']]], true, ['goods', 'goods.extra']);
  57. if (empty($sku) || empty($sku['goods'])) throw new Exception('找不到产品信息或者产品已删除');
  58. $activity = LuckyGroupActivity::getOne([['id' => $data['activity_id'], 'status' => StatusEnum::ENABLED]]);
  59. if (empty($activity)) throw new Exception('拼团活动不存在');
  60. $now = time();
  61. $start_time = strtotime(date('Y-m-d ', time()) . $activity->start_time);
  62. $end_time = strtotime(date('Y-m-d ', time()) . $activity->end_time);
  63. if ($start_time > $now || $end_time < $now) throw new Exception('拼团活动未到开启时间');
  64. $total_expend_num = bcmul($activity->expend_num, $data['num'], 2);
  65. $user_wallet = UserWallet::getOne([['user_id' => $form['user_id']]], false, [], false, 'user_id,score,balance');
  66. $lucky_user = LuckyGroupUser::getGroupUser($form['mall_id'], $form['user_id']);
  67. if ($lucky_user->attend_times < $data['num']) throw new Exception('可参团次数不足');
  68. if ($activity->expend_type == LuckyGroupEnum::EXPEND_TYPE_SCORE) {//积分
  69. $score_name = \Yii::$app->services->setting->mall->get($form['mall_id'], 'score.score_name') ?? '积分';
  70. if ($user_wallet->score < $total_expend_num) throw new Exception($score_name.'不足,无法参与拼团');
  71. } else {//余额
  72. if ($user_wallet->balance < $total_expend_num) throw new Exception('余额不足,无法参与拼团');
  73. }
  74. $data['total_expend_num'] = $total_expend_num;
  75. $data['yu_attend_times'] = $data['num'];
  76. $data['expend_type'] = $activity->expend_type;
  77. //$form->data = json_encode($data);
  78. $form->data = $data;
  79. }
  80. }