6
0
Fork 0

调整下单listener通过活动发送优惠券

release
vine_liutk 2022-04-14 09:43:16 +08:00
parent 9020b9501a
commit b67c53c2c2
1 changed files with 43 additions and 42 deletions

View File

@ -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();