f
This commit is contained in:
70
app/main/api/internal/service/agentMembershipService.go
Normal file
70
app/main/api/internal/service/agentMembershipService.go
Normal file
@@ -0,0 +1,70 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"time"
|
||||
|
||||
"bdrp-server/app/main/model"
|
||||
"bdrp-server/common/globalkey"
|
||||
)
|
||||
|
||||
// IsMembershipExpired 判断代理会员是否已过期(仅VIP/SVIP会被判定)
|
||||
func IsMembershipExpired(agent *model.Agent, now time.Time) bool {
|
||||
if agent == nil {
|
||||
return false
|
||||
}
|
||||
if agent.LevelName != model.AgentLeveNameVIP && agent.LevelName != model.AgentLeveNameSVIP {
|
||||
return false
|
||||
}
|
||||
if !agent.MembershipExpiryTime.Valid {
|
||||
return true
|
||||
}
|
||||
return !agent.MembershipExpiryTime.Time.After(now)
|
||||
}
|
||||
|
||||
// DowngradeExpiredMembership 将已过期会员降级为普通代理,返回是否发生了降级
|
||||
func DowngradeExpiredMembership(ctx context.Context, agentModel model.AgentModel, agentID int64, now time.Time) (bool, error) {
|
||||
agent, err := agentModel.FindOne(ctx, agentID)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if !IsMembershipExpired(agent, now) {
|
||||
return false, nil
|
||||
}
|
||||
agent.LevelName = model.AgentLeveNameNormal
|
||||
ClearMembershipOnDowngrade(agent)
|
||||
agent.UpdateTime = now
|
||||
if err = agentModel.UpdateWithVersion(ctx, nil, agent); err != nil {
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// ListTodayWillExpireAgents 查询当天将到期的VIP/SVIP代理
|
||||
func ListTodayWillExpireAgents(ctx context.Context, agentModel model.AgentModel, start, end time.Time) ([]*model.Agent, error) {
|
||||
builder := agentModel.SelectBuilder().
|
||||
Where("level_name IN (?, ?)", model.AgentLeveNameVIP, model.AgentLeveNameSVIP).
|
||||
Where("membership_expiry_time IS NOT NULL").
|
||||
Where("membership_expiry_time >= ?", start).
|
||||
Where("membership_expiry_time <= ?", end).
|
||||
Where("del_state = ?", globalkey.DelStateNo)
|
||||
|
||||
return agentModel.FindAll(ctx, builder, "membership_expiry_time ASC")
|
||||
}
|
||||
|
||||
// ListExpiredUnprocessedAgents 查询已过期但仍为VIP/SVIP的代理
|
||||
func ListExpiredUnprocessedAgents(ctx context.Context, agentModel model.AgentModel, now time.Time) ([]*model.Agent, error) {
|
||||
builder := agentModel.SelectBuilder().
|
||||
Where("level_name IN (?, ?)", model.AgentLeveNameVIP, model.AgentLeveNameSVIP).
|
||||
Where("membership_expiry_time IS NOT NULL").
|
||||
Where("membership_expiry_time <= ?", now).
|
||||
Where("del_state = ?", globalkey.DelStateNo)
|
||||
|
||||
return agentModel.FindAll(ctx, builder, "membership_expiry_time ASC")
|
||||
}
|
||||
|
||||
// ClearMembershipOnDowngrade 降级时清理会员有效期,避免脏状态
|
||||
func ClearMembershipOnDowngrade(agent *model.Agent) {
|
||||
agent.MembershipExpiryTime = sql.NullTime{}
|
||||
}
|
||||
Reference in New Issue
Block a user