vip会员支持补差升级

This commit is contained in:
2026-04-12 14:17:01 +08:00
parent 00b9396dea
commit 82e29753b8
4 changed files with 155 additions and 47 deletions
+13 -6
View File
@@ -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;