diff --git a/app/Admin/Controllers/OrderController.php b/app/Admin/Controllers/OrderController.php index 7b68fca6..477bbcd9 100644 --- a/app/Admin/Controllers/OrderController.php +++ b/app/Admin/Controllers/OrderController.php @@ -435,7 +435,8 @@ class OrderController extends AdminController $column->row($packagesBox->collapsable()); $logsBox = Box::make('操作记录', $orderLogoGrid); $column->row($logsBox->collapsable()); - $activityBox = Box::make('参与活动', Grid::make(OrderActivity::with('activity'), function (Grid $grid) { + $activityBuilder = OrderActivity::with('activity')->where('order_id', $id); + $activityBox = Box::make('参与活动', Grid::make($activityBuilder, function (Grid $grid) { $grid->column('activity.title', '活动名称'); $grid->column('show', '活动详情')->display(function () { return '查看'; diff --git a/app/Listeners/SendCoupons.php b/app/Listeners/SendCoupons.php index 9ca78390..12e69588 100644 --- a/app/Listeners/SendCoupons.php +++ b/app/Listeners/SendCoupons.php @@ -44,31 +44,42 @@ class SendCoupons $partSkus = ProductPartSku::with('part')->whereIn('sku_id', array_keys($_products))->get(); foreach ($partSkus as $partSku) { if ($partSku->part?->is_show) { - if (isset($inValidParts[$partSku->part_id])) { - $inValidParts[$partSku->part_id] += $_products[$partSku->sku_id] ?? 0; - } else { - $inValidParts[$partSku->part_id] = $_products[$partSku->sku_id] ?? 0; - } + $inValidParts[$partSku->part_id][$partSku->sku_id] = $_products[$partSku->sku_id] ?? 0; + // if (isset($inValidParts[$partSku->part_id])) { + // $inValidParts[$partSku->part_id] += $_products[$partSku->sku_id] ?? 0; + // } else { + // $inValidParts[$partSku->part_id] = $_products[$partSku->sku_id] ?? 0; + // } } } + // dd($inValidParts); //根据分区获取活动 - $partActivities = ActivityProductPart::with(['activity', 'activity.gifts'])->whereHas('activity', function (Builder $query) { + $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; + }); foreach ($partActivities as $partActivity) { - //获取活动的赠送规则 - $_giftsRule = $partActivity->activity?->gifts_rule; + //获取活动的赠品赠送规则 + $_couponsRule = $partActivity->activity?->coupons_rule; //判断是否首单:times=0为仅首单赠送, 1为不限 - if ($_giftsRule['times'] == 0 && UserCoupon::where('activity_id', $partActivity->activity_id)->exists()) { + if ($_couponsRule['times'] == 0 && UserCoupon::where('activity_id', $partActivity->activity_id)->exists()) { continue;//提前结束本次循环 } //判断是否满足门槛 - if (bcdiv($_giftsRule['value'], 100) > $inValidParts[$partActivity->part_id]) { + $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, $order->id); + (new CouponService())->receiveActivityCoupons($partActivity->activity, $order->user); //记录订单参与活动信息 OrderActivity::firstOrCreate([ diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index d7f3de96..f4ba3ca7 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -381,18 +381,23 @@ class OrderService $partSkus = ProductPartSku::with('part')->whereIn('sku_id', array_keys($_products))->get(); foreach ($partSkus as $partSku) { if ($partSku->part?->is_show) { - if (isset($inValidParts[$partSku->part_id])) { - $inValidParts[$partSku->part_id] += $_products[$partSku->sku_id] ?? 0; - } else { - $inValidParts[$partSku->part_id] = $_products[$partSku->sku_id] ?? 0; - } + $inValidParts[$partSku->part_id][$partSku->sku_id] = $_products[$partSku->sku_id] ?? 0; + // if (isset($inValidParts[$partSku->part_id])) { + // $inValidParts[$partSku->part_id] += $_products[$partSku->sku_id] ?? 0; + // } else { + // $inValidParts[$partSku->part_id] = $_products[$partSku->sku_id] ?? 0; + // } } } + // dd($inValidParts); //根据分区获取活动 $partActivities = ActivityProductPart::with(['activity', 'activity.gifts'])->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; + }); $giveGifts = []; foreach ($partActivities as $partActivity) { //获取活动的赠品赠送规则 @@ -402,7 +407,13 @@ class OrderService continue;//提前结束本次循环 } //判断是否满足门槛 - if (bcdiv($_giftsRule['value'], 100) > $inValidParts[$partActivity->part_id]) { + $inValidGoods = []; + foreach ($inValidParts as $key => $part) { + if (in_array($key, $activityArr[$partActivity->activity_id])) { + $inValidGoods = array_merge($inValidGoods, $part); + } + } + if (bcmul($_giftsRule['value'], 100) > array_sum($inValidGoods)) { continue;//提前结束本次循环 } //返回赠品