vip会员支持补差升级
This commit is contained in:
@@ -46,17 +46,24 @@ class VipService
|
||||
* @param User $user 目标用户
|
||||
* @param int $vipLevelId VIP 等级 ID
|
||||
* @param int $days 天数(0=永久)
|
||||
* @param bool $isUpgrade 是否为补差价升级
|
||||
*/
|
||||
public function grantVip(User $user, int $vipLevelId, int $days = 30): void
|
||||
public function grantVip(User $user, int $vipLevelId, int $days = 30, bool $isUpgrade = false): void
|
||||
{
|
||||
$oldVipId = $user->vip_level_id;
|
||||
$user->vip_level_id = $vipLevelId;
|
||||
|
||||
if ($days > 0) {
|
||||
// 如果用户已有未过期的会员,在现有到期时间上延长
|
||||
$baseTime = ($user->hy_time && $user->hy_time->isFuture())
|
||||
? $user->hy_time
|
||||
: now();
|
||||
$user->hy_time = $baseTime->addDays($days);
|
||||
if ($isUpgrade && $oldVipId && $user->hy_time && $user->hy_time->isFuture()) {
|
||||
// 如果是升级,到期日期保持不变,除非新等级是永久(days=0)
|
||||
// 此时只需更新等级 ID,无需修改 hy_time。
|
||||
} else {
|
||||
// 如果是新购或续费,在现有到期时间上延长
|
||||
$baseTime = ($user->hy_time && $user->hy_time->isFuture())
|
||||
? $user->hy_time
|
||||
: now();
|
||||
$user->hy_time = $baseTime->addDays($days);
|
||||
}
|
||||
} else {
|
||||
// 永久会员
|
||||
$user->hy_time = null;
|
||||
|
||||
Reference in New Issue
Block a user