54 lines
1.2 KiB
PHP
54 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\User;
|
|
|
|
class CouponService
|
|
{
|
|
/**
|
|
* 根据SKU商品获取可用优惠券
|
|
*
|
|
* @param User $user
|
|
* @param array $products 至少包含以下内容
|
|
* [
|
|
* ['sku' => 商品SKU, 'quantity' => 10]
|
|
* ]
|
|
* @return array
|
|
*/
|
|
public function getAvailableCoupons(User $user, array $products): array
|
|
{
|
|
$coupons = $user->coupons()->onlyAvailable()->get();
|
|
|
|
$coupons->load(['ranges' => function ($query) {
|
|
$query->isEnable();
|
|
}]);
|
|
|
|
$availableCoupons = [];
|
|
|
|
foreach ($coupons as $coupon) {
|
|
// 是否满足券使用规则
|
|
$passes = false;
|
|
|
|
// 可用优惠券的商品的总额
|
|
$amount = 0;
|
|
|
|
foreach ($products as $product) {
|
|
$sku = $product['sku'];
|
|
|
|
if ($coupon->isSupport($sku)) {
|
|
$passes = true;
|
|
|
|
$amount += $sku->getRealPrice($user) * $product['quantity'];
|
|
}
|
|
}
|
|
|
|
if ($passes && $amount >= $coupon->coupon_threshold) {
|
|
$availableCoupons[] = $coupon;
|
|
}
|
|
}
|
|
|
|
return $availableCoupons;
|
|
}
|
|
}
|