diff --git a/app/Listeners/SendCoupons.php b/app/Listeners/SendCoupons.php index cbedd670..195c0051 100644 --- a/app/Listeners/SendCoupons.php +++ b/app/Listeners/SendCoupons.php @@ -55,50 +55,51 @@ class SendCoupons // } } } - - // dd($inValidParts); - //根据分区获取活动 - $partActivities = ActivityProductPart::with(['activity', 'activity.coupons'])->whereHas('activity', function (Builder $query) { - return $query->where('is_use', true)->where('started_at', '<', now())->where('ended_at', '>=', now()); - })->whereIn('part_id', array_keys($inValidParts))->get(); - $activityArr = []; - $partActivities->each(function ($item) use (&$activityArr) { - $activityArr[$item->activity_id][] = $item->part_id; - }); - $sendedActivities = []; - foreach ($partActivities as $partActivity) { - //判断该活动是否已处理 - if (in_array($partActivity->activity_id, $sendedActivities)) { - continue; - } - $sendedActivities[] = $partActivity->activity_id; - //获取活动的赠品赠送规则 - $_couponsRule = $partActivity->activity?->coupons_rule; - //判断是否首单:times=0为仅首单赠送, 1为不限 - if ($_couponsRule['times'] == 0 && UserCoupon::where([ - 'activity_id' => $partActivity->activity_id, - 'user_id' => $order->user_id, - ])->exists()) { - continue;//提前结束本次循环 - } - //判断是否满足门槛 - $inValidGoods = []; - foreach ($inValidParts as $key => $part) { - if (in_array($key, $activityArr[$partActivity->activity_id])) { - $inValidGoods = array_merge($inValidGoods, $part); + //存在有效分区时 + if ($inValidParts) { + //根据分区获取活动 + $partActivities = ActivityProductPart::with(['activity', 'activity.coupons'])->whereHas('activity', function (Builder $query) { + return $query->where('is_use', true)->where('started_at', '<', now())->where('ended_at', '>=', now()); + })->whereIn('part_id', array_keys($inValidParts))->get(); + $activityArr = []; + $partActivities->each(function ($item) use (&$activityArr) { + $activityArr[$item->activity_id][] = $item->part_id; + }); + $sendedActivities = []; + foreach ($partActivities as $partActivity) { + //判断该活动是否已处理 + if (in_array($partActivity->activity_id, $sendedActivities)) { + continue; } - } - if (bcmul($_couponsRule['value'], 100) > array_sum($inValidGoods)) { - continue;//提前结束本次循环 - } - //赠券 - (new CouponService())->receiveActivityCoupons($partActivity->activity, $order->user); + $sendedActivities[] = $partActivity->activity_id; + //获取活动的赠品赠送规则 + $_couponsRule = $partActivity->activity?->coupons_rule; + //判断是否首单:times=0为仅首单赠送, 1为不限 + if ($_couponsRule['times'] == 0 && UserCoupon::where([ + 'activity_id' => $partActivity->activity_id, + 'user_id' => $order->user_id, + ])->exists()) { + continue;//提前结束本次循环 + } + //判断是否满足门槛 + $inValidGoods = []; + foreach ($inValidParts as $key => $part) { + if (in_array($key, $activityArr[$partActivity->activity_id])) { + $inValidGoods = array_merge($inValidGoods, $part); + } + } + if (bcmul($_couponsRule['value'], 100) > array_sum($inValidGoods)) { + continue;//提前结束本次循环 + } + //赠券 + (new CouponService())->receiveActivityCoupons($partActivity->activity, $order->user); - //记录订单参与活动信息 - OrderActivity::firstOrCreate([ - 'order_id'=>$order->id, - 'activity_id'=>$partActivity->activity_id, - ]); + //记录订单参与活动信息 + OrderActivity::firstOrCreate([ + 'order_id'=>$order->id, + 'activity_id'=>$partActivity->activity_id, + ]); + } } DB::commit();