21
This commit is contained in:
parent
3f24b57e8c
commit
8b5a404042
|
|
@ -141,7 +141,7 @@ public class UserService : BaseService<User, int>, IUserService
|
||||||
var mobileIs = string.IsNullOrWhiteSpace(user.Mobile) ? 0 : 1;
|
var mobileIs = string.IsNullOrWhiteSpace(user.Mobile) ? 0 : 1;
|
||||||
|
|
||||||
// 计算权益等级信息
|
// 计算权益等级信息
|
||||||
var quanYiLevel = await CalculateQuanYiLevelAsync(user.Score);
|
var quanYiLevel = await CalculateQuanYiLevelAsync(user.OuQi ?? 0, user.OuQiLevel ?? 0);
|
||||||
|
|
||||||
return new UserInfoDto
|
return new UserInfoDto
|
||||||
{
|
{
|
||||||
|
|
@ -166,76 +166,52 @@ public class UserService : BaseService<User, int>, IUserService
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 计算用户权益等级信息
|
/// 计算用户权益等级信息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="score">用户欧气值</param>
|
/// <param name="ouQi">用户欧气值</param>
|
||||||
|
/// <param name="ouQiLevel">用户欧气等级</param>
|
||||||
/// <returns>权益等级DTO</returns>
|
/// <returns>权益等级DTO</returns>
|
||||||
private async Task<QuanYiLevelDto> CalculateQuanYiLevelAsync(decimal score)
|
private Task<QuanYiLevelDto> CalculateQuanYiLevelAsync(int ouQi, int ouQiLevel)
|
||||||
{
|
{
|
||||||
var userScore = (int)score;
|
// 等级阈值配置
|
||||||
|
var levelThresholds = new Dictionary<int, int>
|
||||||
// 获取所有权益等级(使用VipLevels表),按所需积分升序排列
|
|
||||||
var levels = await _dbContext.VipLevels
|
|
||||||
.Where(e => e.DeletedAt == null && e.Level > 0)
|
|
||||||
.OrderBy(e => e.Number)
|
|
||||||
.ToListAsync();
|
|
||||||
|
|
||||||
if (!levels.Any())
|
|
||||||
{
|
{
|
||||||
return new QuanYiLevelDto { Level = 0, Cha = -1, Jindu = 0 };
|
{ 0, 0 },
|
||||||
}
|
{ 1, 100 },
|
||||||
|
{ 2, 500 },
|
||||||
|
{ 3, 1000 },
|
||||||
|
{ 4, 3000 },
|
||||||
|
{ 5, 6000 },
|
||||||
|
{ 6, 10000 },
|
||||||
|
{ 7, 20000 }
|
||||||
|
};
|
||||||
|
|
||||||
// 找到当前等级和下一等级
|
var nextLevel = ouQiLevel + 1;
|
||||||
int currentLevel = 0;
|
var currentLevelOuQi = levelThresholds.GetValueOrDefault(ouQiLevel, 0);
|
||||||
int currentLevelPoints = 0;
|
var nextOuQi = levelThresholds.GetValueOrDefault(nextLevel, 99999);
|
||||||
int nextLevelPoints = 0;
|
|
||||||
bool isMaxLevel = false;
|
|
||||||
|
|
||||||
for (int i = 0; i < levels.Count; i++)
|
|
||||||
{
|
|
||||||
if (userScore >= levels[i].Number)
|
|
||||||
{
|
|
||||||
currentLevel = levels[i].Level;
|
|
||||||
currentLevelPoints = levels[i].Number;
|
|
||||||
|
|
||||||
if (i + 1 < levels.Count)
|
|
||||||
{
|
|
||||||
nextLevelPoints = levels[i + 1].Number;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
isMaxLevel = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (currentLevel == 0)
|
|
||||||
{
|
|
||||||
// 用户还没达到第一级
|
|
||||||
nextLevelPoints = levels[i].Number;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 计算差值和进度
|
// 计算差值和进度
|
||||||
int cha = isMaxLevel ? -1 : nextLevelPoints - userScore;
|
int cha;
|
||||||
int jindu = 0;
|
int jindu;
|
||||||
|
if (nextLevel > 7)
|
||||||
if (isMaxLevel)
|
|
||||||
{
|
{
|
||||||
|
// 已满级
|
||||||
|
cha = -1;
|
||||||
jindu = 100;
|
jindu = 100;
|
||||||
}
|
}
|
||||||
else if (nextLevelPoints > currentLevelPoints)
|
else
|
||||||
{
|
{
|
||||||
var progress = (userScore - currentLevelPoints) * 100 / (nextLevelPoints - currentLevelPoints);
|
cha = Math.Max(0, nextOuQi - ouQi);
|
||||||
jindu = Math.Max(0, Math.Min(100, progress));
|
// 计算当前等级内的进度
|
||||||
|
var levelRange = nextOuQi - currentLevelOuQi;
|
||||||
|
var progress = ouQi - currentLevelOuQi;
|
||||||
|
jindu = levelRange > 0 ? Math.Min(100, Math.Max(0, progress * 100 / levelRange)) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new QuanYiLevelDto
|
return Task.FromResult(new QuanYiLevelDto
|
||||||
{
|
{
|
||||||
Level = currentLevel,
|
Level = ouQiLevel,
|
||||||
Cha = cha,
|
Cha = cha,
|
||||||
Jindu = jindu
|
Jindu = jindu
|
||||||
};
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user