feat: 添加权益等级信息到用户接口,前端字段改为camelCase
This commit is contained in:
parent
50e0e544b0
commit
b0a54e6c30
|
|
@ -24,16 +24,16 @@
|
||||||
|
|
||||||
<view v-if="userinfo && getIsCheck()" class="lv-box align-center justify-between"
|
<view v-if="userinfo && getIsCheck()" class="lv-box align-center justify-between"
|
||||||
@click="$c.to({ url: '/package/mine/equity' })">
|
@click="$c.to({ url: '/package/mine/equity' })">
|
||||||
<text class="lv-box-dengji">LV.{{ userinfo.quan_yi_level.level }}</text>
|
<text class="lv-box-dengji">LV.{{ userinfo.quanYiLevel.level }}</text>
|
||||||
<view class="lv-box-ouqi column">
|
<view class="lv-box-ouqi column">
|
||||||
<text>
|
<text>
|
||||||
<template v-if="userinfo.quan_yi_level.cha > 0">还差{{ userinfo.quan_yi_level.cha
|
<template v-if="userinfo.quanYiLevel.cha > 0">还差{{ userinfo.quanYiLevel.cha
|
||||||
}}欧气值升级</template>
|
}}欧气值升级</template>
|
||||||
<template v-if="userinfo.quan_yi_level.cha == -1">已满级</template>
|
<template v-if="userinfo.quanYiLevel.cha == -1">已满级</template>
|
||||||
</text>
|
</text>
|
||||||
<view class="mt10 relative">
|
<view class="mt10 relative">
|
||||||
<!-- <text class="lv-box-num">{{userinfo.quan_yi_level.jindu+'%'}}</text> -->
|
<!-- <text class="lv-box-num">{{userinfo.quanYiLevel.jindu+'%'}}</text> -->
|
||||||
<cmd-progress :percent="userinfo.quan_yi_level.jindu" :show-info="false" stroke-color="#FF862D"
|
<cmd-progress :percent="userinfo.quanYiLevel.jindu" :show-info="false" stroke-color="#FF862D"
|
||||||
:strokeWidth="3"></cmd-progress>
|
:strokeWidth="3"></cmd-progress>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
|
||||||
|
|
@ -137,6 +137,9 @@ public class UserService : BaseService<User, int>, IUserService
|
||||||
var maskedMobile = MaskMobileNumber(user.Mobile);
|
var maskedMobile = MaskMobileNumber(user.Mobile);
|
||||||
var mobileIs = string.IsNullOrWhiteSpace(user.Mobile) ? 0 : 1;
|
var mobileIs = string.IsNullOrWhiteSpace(user.Mobile) ? 0 : 1;
|
||||||
|
|
||||||
|
// 计算权益等级信息
|
||||||
|
var quanYiLevel = await CalculateQuanYiLevelAsync(user.Score);
|
||||||
|
|
||||||
return new UserInfoDto
|
return new UserInfoDto
|
||||||
{
|
{
|
||||||
Id = user.Id,
|
Id = user.Id,
|
||||||
|
|
@ -152,7 +155,83 @@ public class UserService : BaseService<User, int>, IUserService
|
||||||
Vip = user.Vip,
|
Vip = user.Vip,
|
||||||
VipImgurl = GetVipImageUrl(user.Vip),
|
VipImgurl = GetVipImageUrl(user.Vip),
|
||||||
Coupon = couponCount,
|
Coupon = couponCount,
|
||||||
Day = registrationDays
|
Day = registrationDays,
|
||||||
|
QuanYiLevel = quanYiLevel
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 计算用户权益等级信息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="score">用户欧气值</param>
|
||||||
|
/// <returns>权益等级DTO</returns>
|
||||||
|
private async Task<QuanYiLevelDto> CalculateQuanYiLevelAsync(decimal score)
|
||||||
|
{
|
||||||
|
var userScore = (int)score;
|
||||||
|
|
||||||
|
// 获取所有权益等级,按所需积分升序排列
|
||||||
|
var levels = await _dbContext.EquityLevels
|
||||||
|
.Where(e => e.DeletedAt == null)
|
||||||
|
.OrderBy(e => e.RequiredPoints)
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
if (!levels.Any())
|
||||||
|
{
|
||||||
|
return new QuanYiLevelDto { Level = 0, Cha = -1, Jindu = 0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
// 找到当前等级和下一等级
|
||||||
|
int currentLevel = 0;
|
||||||
|
int currentLevelPoints = 0;
|
||||||
|
int nextLevelPoints = 0;
|
||||||
|
bool isMaxLevel = false;
|
||||||
|
|
||||||
|
for (int i = 0; i < levels.Count; i++)
|
||||||
|
{
|
||||||
|
if (userScore >= levels[i].RequiredPoints)
|
||||||
|
{
|
||||||
|
currentLevel = levels[i].Level;
|
||||||
|
currentLevelPoints = levels[i].RequiredPoints;
|
||||||
|
|
||||||
|
if (i + 1 < levels.Count)
|
||||||
|
{
|
||||||
|
nextLevelPoints = levels[i + 1].RequiredPoints;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isMaxLevel = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (currentLevel == 0)
|
||||||
|
{
|
||||||
|
// 用户还没达到第一级
|
||||||
|
nextLevelPoints = levels[i].RequiredPoints;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算差值和进度
|
||||||
|
int cha = isMaxLevel ? -1 : nextLevelPoints - userScore;
|
||||||
|
int jindu = 0;
|
||||||
|
|
||||||
|
if (isMaxLevel)
|
||||||
|
{
|
||||||
|
jindu = 100;
|
||||||
|
}
|
||||||
|
else if (nextLevelPoints > currentLevelPoints)
|
||||||
|
{
|
||||||
|
var progress = (userScore - currentLevelPoints) * 100 / (nextLevelPoints - currentLevelPoints);
|
||||||
|
jindu = Math.Max(0, Math.Min(100, progress));
|
||||||
|
}
|
||||||
|
|
||||||
|
return new QuanYiLevelDto
|
||||||
|
{
|
||||||
|
Level = currentLevel,
|
||||||
|
Cha = cha,
|
||||||
|
Jindu = jindu
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,4 +74,30 @@ public class UserInfoDto
|
||||||
/// 注册天数
|
/// 注册天数
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int Day { get; set; }
|
public int Day { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 权益等级信息
|
||||||
|
/// </summary>
|
||||||
|
public QuanYiLevelDto? QuanYiLevel { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 权益等级DTO
|
||||||
|
/// </summary>
|
||||||
|
public class QuanYiLevelDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 当前等级
|
||||||
|
/// </summary>
|
||||||
|
public int Level { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 距离下一级还差多少欧气值,-1表示已满级
|
||||||
|
/// </summary>
|
||||||
|
public int Cha { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 当前等级进度百分比 (0-100)
|
||||||
|
/// </summary>
|
||||||
|
public int Jindu { get; set; }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user