浏览代码

add:活动充值次数限制;

Wang Chen 4 年之前
父节点
当前提交
eca52cf320

+ 1 - 0
app/Consts/ErrorConst.php

@@ -45,4 +45,5 @@ class ErrorConst
     const ACTIVITY_NOT_START                = '20002:活动还未开始';
     const ACTIVITY_IS_END                   = '20003:活动已经结束';
     const ACTIVITY_INVALID                  = '20004:无效的活动';
+    const ACTIVITY_CHARGE_OUT_OF_LIMIT      = '20005:活动充值已达最大次数限制';
 }

+ 27 - 0
app/Http/Controllers/QuickApp/Order/OrdersController.php

@@ -2,6 +2,8 @@
 
 namespace App\Http\Controllers\QuickApp\Order;
 
+use App\Consts\ErrorConst;
+use App\Libs\Utils;
 use App\Modules\Activity\Models\Activity;
 use App\Modules\Statistic\Services\AdVisitStatService;
 use App\Http\Controllers\QuickApp\BaseController;
@@ -20,6 +22,7 @@ use App\Modules\Book\Services\BookConfigService;
 use App\Modules\Book\Services\BookService;
 use App\Modules\Channel\Services\PayTemplateService;
 use App\Modules\Subscribe\Models\Order;
+use App\Modules\Trade\Models\Order as TradeOrder;
 use App\Modules\Trade\Pay\OrderArousePayFactory;
 use App\Modules\Trade\Pay\OrderPaySuccess;
 use App\Modules\Trade\Services\PayMerchantService;
@@ -426,6 +429,30 @@ class OrdersController extends BaseController
         if ($activity_token) {
             $activity    = Activity::getActivityBuToken($activity_token);
             $activity_id = (int)getProp($activity, 'id');
+
+            // 校验活动次数
+            $settingJson = getProp($activity, 'setting');
+            if ($settingJson) {
+                $setting      = json_decode($settingJson, true);
+                $productInfos = getProp($setting, 'product_info', []);
+                $productInfo  = collect($productInfos)->firstWhere('product_id', $product_id);
+                $limit        = (int)getProp($productInfo, 'limit');
+                if ($limit > 0) {
+                    // 查询用户通过该活动已经充值的次数
+                    $paidNum = TradeOrder::getActivityOrderNum([
+                        'uid'         => $uid,
+                        'begin_time'  => getProp($activity, 'start_time'),
+                        'end_time'    => getProp($activity, 'end_time'),
+                        'status'      => 'PAID',
+                        'activity_id' => $activity_id
+                    ]);
+
+                    // 活动充值次数限制
+                    if ($paidNum >= $limit) {
+                        Utils::throwError(ErrorConst::ACTIVITY_CHARGE_OUT_OF_LIMIT);
+                    }
+                }
+            }
         }
 
         return compact(

+ 1 - 0
app/Modules/Trade/Models/Order.php

@@ -215,6 +215,7 @@ class Order extends Model
     static function getActivityOrderNum($params = [])
     {
         $search_obj = self::orderBy('created_at', 'desc');
+        if (isset($params['uid']) && $params['uid']) $search_obj->where('uid', $params['uid']);
         if (isset($params['status']) && $params['status']) $search_obj->where('status', $params['status']);
         if (isset($params['activity_id']) && $params['activity_id']) $search_obj->where('activity_id', $params['activity_id']);
         if (isset($params['begin_time']) && $params['begin_time']) $search_obj->where('created_at', '>=', $params['begin_time']);