DepositPresaleLimit.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace addons\DepositPresale\common\logic\order\limit;
  3. use addons\DepositPresale\common\enums\DepositPresaleEnum;
  4. use addons\DepositPresale\common\models\DepositPresaleActive;
  5. use addons\DepositPresale\common\models\DepositPresaleOrder;
  6. use Exception;
  7. use yii\helpers\Json;
  8. class DepositPresaleLimit extends BaseLimit
  9. {
  10. public function execute($form)
  11. {
  12. try {
  13. } catch (Exception $e) {
  14. return false;
  15. }
  16. }
  17. /**
  18. * @desc:购买等级验证
  19. * @Author: hua
  20. * @Date: 2021/12/15
  21. * @Time: 10:17
  22. * @Copyright: copyright (c) 2021 广东七件事集团
  23. * @param $form
  24. * @throws Exception
  25. */
  26. public static function compute($form)
  27. {
  28. $user = $form->user;
  29. $time = time();
  30. $data = is_array($form->data) ? $form->data : Json::decode($form->data, true);
  31. $deposit_presale_active = DepositPresaleActive::findOne(['id' => $data['active_id'], 'mall_id' => $form->mall_id]);
  32. if (empty($deposit_presale_active)) throw new \Exception('活动不存在');
  33. if ($time < $deposit_presale_active['deposit_start_at']) throw new \Exception('活动还没开始');
  34. if ($time > $deposit_presale_active['deposit_end_at']) throw new \Exception('活动已过期');
  35. if (!empty($data['open_group_id'])) {
  36. //参与别人的团,团员身份
  37. $user_level_limit = $deposit_presale_active['user_level_limit'];
  38. if ($user_level_limit != 'all' && !in_array($user['level'], explode(',', $user_level_limit))) {
  39. throw new \Exception('不是指定的团员等级');
  40. }
  41. $open_order = DepositPresaleOrder::findOne(['id' => $data['open_group_id'], 'mall_id' => $form['mall_id']]);
  42. if ($open_order->deposit_presale_active_id != $data['active_id']) throw new \Exception('该团不合法');
  43. if ($open_order->order_status != DepositPresaleEnum::JOINING) throw new \Exception('该团无效');
  44. $effective_time = $deposit_presale_active['effective_time'] * 60;
  45. if ($time - $open_order['created_at'] > $effective_time) throw new \Exception('定金预售已结束');
  46. $counts = DepositPresaleOrder::find()->where(['open_group_id' => $data['open_group_id'], 'mall_id' => $form['mall_id'], 'order_status' => DepositPresaleEnum::JOINING])->count();
  47. $surplus_size = $deposit_presale_active['group_size'] - $counts;
  48. // if ($deposit_presale_active['is_virtual'] && $counts == $deposit_presale_active['gt_group_size']) throw new \Exception('该团已满员');
  49. if ($surplus_size <= 0) throw new \Exception('该团已满员');
  50. $open_order = DepositPresaleOrder::findOne(['open_group_id' => $data['open_group_id'], 'order_status' => [DepositPresaleEnum::NOT_PAY, DepositPresaleEnum::JOINING], 'user_id' => $form->user_id, 'mall_id' => $form['mall_id']]);
  51. if ($open_order) {
  52. if ($open_order->order_status == DepositPresaleEnum::NOT_PAY) throw new \Exception('您已参团,还未支付,请到定金预售订单付款');
  53. if ($open_order->order_status == DepositPresaleEnum::OPEN_GROUP) throw new \Exception('您已参与该定金预售,请耐心等级开团结果');
  54. }
  55. } else {
  56. //自己发起定金预售,团长身份
  57. $commander_level_limit = $deposit_presale_active['commander_level_limit'];
  58. if ($commander_level_limit != 'all' && !in_array($user['level'], explode(',', $commander_level_limit))) {
  59. throw new \Exception('不是指定的团长等级');
  60. }
  61. }
  62. $purchase_limit_num = $form->sku[$deposit_presale_active->goods_id]['purchase_limit_num'];
  63. $already_buy_count = DepositPresaleOrder::find()
  64. ->where(
  65. [
  66. 'and',
  67. ['goods_id' => $deposit_presale_active->goods_id],
  68. ['is_pay' => 1],
  69. ['user_id' => $user->id]
  70. ]
  71. )->count();
  72. $already_buy_count = $already_buy_count ?: 0;
  73. if (isset($data['num'])) {
  74. if (!empty($purchase_limit_num) && ($data['num'] + $already_buy_count) > $purchase_limit_num) throw new \Exception('限购' . $purchase_limit_num);
  75. if (!empty($deposit_presale_active['minimum_purchase']) && $data['num'] < $deposit_presale_active['minimum_purchase']) throw new \Exception('最低' . $deposit_presale_active['minimum_purchase'] . '件起购');
  76. }
  77. $data['deposit_presale_active'] = [
  78. 'final_payment_start_at' => date('Y-m-d H:i:s', $deposit_presale_active['final_payment_start_at']),
  79. 'final_payment_end_at' => date('Y-m-d H:i:s', $deposit_presale_active['final_payment_end_at']),
  80. ];
  81. $form->data = $data;
  82. }
  83. }