2121
This commit is contained in:
parent
eb339da935
commit
e1dc8c37ee
|
|
@ -8,7 +8,7 @@ using Microsoft.Extensions.Logging;
|
|||
namespace MiAssessment.Core.Services;
|
||||
|
||||
/// <summary>
|
||||
/// 用户服务实现
|
||||
/// <EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>
|
||||
/// </summary>
|
||||
public class UserService : BaseService<User, long>, IUserService
|
||||
{
|
||||
|
|
@ -59,7 +59,7 @@ public class UserService : BaseService<User, long>, IUserService
|
|||
if (dto == null)
|
||||
throw new ArgumentNullException(nameof(dto));
|
||||
|
||||
// 生成唯一UID
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΨһUID
|
||||
var uid = await GenerateUidAsync();
|
||||
|
||||
var user = new User
|
||||
|
|
@ -135,27 +135,20 @@ public class UserService : BaseService<User, long>, IUserService
|
|||
Headimg = user.Avatar,
|
||||
Mobile = maskedMobile,
|
||||
MobileIs = mobileIs,
|
||||
Money = 0, // 业务字段已移除,返回默认值
|
||||
Money2 = 0, // 业务字段已移除,返回默认值
|
||||
Integral = 0, // 业务字段已移除,返回默认值
|
||||
Score = 0, // 业务字段已移除,返回默认值
|
||||
Vip = 0, // 业务字段已移除,返回默认值
|
||||
VipImgurl = null, // 业务字段已移除
|
||||
Coupon = 0, // 优惠券功能已移除,返回0
|
||||
Day = registrationDays,
|
||||
QuanYiLevel = new QuanYiLevelDto { Level = 0, Cha = -1, Jindu = 0 } // 权益等级功能已移除
|
||||
Vip = 0, // 用户等级,待接入业务逻辑
|
||||
Day = registrationDays
|
||||
};
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Task<int> CalculateVipLevelAsync(long userId, int currentVip)
|
||||
{
|
||||
// VIP等级计算功能已移除,返回0
|
||||
// VIP<49>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD>㹦<EFBFBD><E3B9A6><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
return Task.FromResult(0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成6位唯一用户UID
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>6λΨһ<EFBFBD>û<EFBFBD>UID
|
||||
/// </summary>
|
||||
private async Task<string> GenerateUidAsync()
|
||||
{
|
||||
|
|
@ -167,7 +160,7 @@ public class UserService : BaseService<User, long>, IUserService
|
|||
if (!exists)
|
||||
return uid;
|
||||
}
|
||||
// 兜底:使用时间戳后6位
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ף<EFBFBD>ʹ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>6λ
|
||||
return DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString()[^6..];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,103 +1,47 @@
|
|||
namespace MiAssessment.Model.Models.Auth;
|
||||
|
||||
/// <summary>
|
||||
/// 用户信息DTO
|
||||
/// 用户信息DTO
|
||||
/// </summary>
|
||||
public class UserInfoDto
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户ID
|
||||
/// 用户ID
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 用户唯一标识
|
||||
/// 用户唯一标识
|
||||
/// </summary>
|
||||
public string? Uid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 昵称
|
||||
/// 昵称
|
||||
/// </summary>
|
||||
public string? Nickname { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 头像URL
|
||||
/// 头像URL
|
||||
/// </summary>
|
||||
public string? Headimg { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 脱敏后的手机号(格式:138****8000)
|
||||
/// 脱敏手机号(格式:138****8000)
|
||||
/// </summary>
|
||||
public string? Mobile { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否绑定手机号:0否 1是
|
||||
/// 是否绑手机(0否 1是)
|
||||
/// </summary>
|
||||
public int MobileIs { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 账户余额
|
||||
/// </summary>
|
||||
public decimal Money { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 余额2/积分2
|
||||
/// </summary>
|
||||
public decimal Money2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 积分
|
||||
/// </summary>
|
||||
public decimal Integral { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 评分
|
||||
/// </summary>
|
||||
public decimal Score { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// VIP等级
|
||||
/// 用户等级(1普通用户 2合伙人 3渠道合伙人)
|
||||
/// </summary>
|
||||
public int Vip { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// VIP等级图片URL
|
||||
/// </summary>
|
||||
public string? VipImgurl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 优惠券数量
|
||||
/// </summary>
|
||||
public int Coupon { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 注册天数
|
||||
/// 注册天数
|
||||
/// </summary>
|
||||
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; }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ public class UserServicePropertyTests
|
|||
/// <summary>
|
||||
/// Property 9: 用户信息完整性
|
||||
/// For any user, GetUserInfoAsync should return complete information including:
|
||||
/// - All required fields (id, uid, nickname, headimg, mobile, money, integral, vip)
|
||||
/// - All required fields (id, uid, nickname, headimg, mobile, mobileIs, vip, day)
|
||||
/// - Masked mobile number in format XXX****XXXX
|
||||
/// - Correct MobileIs flag (0 if no mobile, 1 if mobile exists)
|
||||
/// Validates: Requirements 4.1, 4.4
|
||||
|
|
|
|||
|
|
@ -191,7 +191,7 @@ $orange-gradient-end: #FFFFFF;
|
|||
}
|
||||
|
||||
.page-content {
|
||||
padding: $spacing-lg;
|
||||
padding: 24rpx 28rpx;
|
||||
padding-bottom: env(safe-area-inset-bottom);
|
||||
}
|
||||
|
||||
|
|
@ -200,23 +200,22 @@ $orange-gradient-end: #FFFFFF;
|
|||
text-align: center;
|
||||
font-size: $font-size-md;
|
||||
color: $text-secondary;
|
||||
margin-bottom: $spacing-lg;
|
||||
margin-bottom: 28rpx;
|
||||
}
|
||||
|
||||
// 规划师列表
|
||||
.planner-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: $spacing-lg;
|
||||
gap: 24rpx;
|
||||
}
|
||||
|
||||
// 规划师卡片 - 橙色渐变背景
|
||||
// 规划师卡片 - 顶部橙色渐变,无左侧边框
|
||||
.planner-card {
|
||||
background: linear-gradient(135deg, $orange-gradient-start 0%, $orange-gradient-end 60%);
|
||||
border-radius: $border-radius-xl;
|
||||
padding: $spacing-lg;
|
||||
box-shadow: $shadow-sm;
|
||||
border-left: 6rpx solid $orange-color;
|
||||
background: linear-gradient(180deg, $orange-gradient-start 0%, $orange-gradient-end 40%);
|
||||
border-radius: 24rpx;
|
||||
padding: 28rpx;
|
||||
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.06);
|
||||
|
||||
&:active {
|
||||
opacity: 0.9;
|
||||
|
|
@ -234,9 +233,9 @@ $orange-gradient-end: #FFFFFF;
|
|||
flex-shrink: 0;
|
||||
width: 160rpx;
|
||||
height: 180rpx;
|
||||
border-radius: $border-radius-md;
|
||||
border-radius: 16rpx;
|
||||
overflow: hidden;
|
||||
margin-right: $spacing-md;
|
||||
margin-right: 24rpx;
|
||||
|
||||
.avatar-image {
|
||||
width: 100%;
|
||||
|
|
@ -255,11 +254,11 @@ $orange-gradient-end: #FFFFFF;
|
|||
display: flex;
|
||||
align-items: baseline;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: $spacing-sm;
|
||||
margin-bottom: 16rpx;
|
||||
}
|
||||
|
||||
.planner-name {
|
||||
font-size: $font-size-xl;
|
||||
font-size: 34rpx;
|
||||
font-weight: $font-weight-bold;
|
||||
color: $text-color;
|
||||
}
|
||||
|
|
@ -267,25 +266,25 @@ $orange-gradient-end: #FFFFFF;
|
|||
.planner-title {
|
||||
font-size: $font-size-sm;
|
||||
color: $text-secondary;
|
||||
margin-left: 8rpx;
|
||||
margin-left: 4rpx;
|
||||
}
|
||||
|
||||
// 标签列表
|
||||
.planner-tags {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: $spacing-xs;
|
||||
gap: 12rpx;
|
||||
}
|
||||
|
||||
.tag-item {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
padding: 6rpx 16rpx;
|
||||
font-size: $font-size-xs;
|
||||
padding: 8rpx 18rpx;
|
||||
font-size: 22rpx;
|
||||
color: $orange-color;
|
||||
background-color: rgba(232, 116, 14, 0.08);
|
||||
border: 1rpx solid rgba(232, 116, 14, 0.2);
|
||||
border-radius: $border-radius-sm;
|
||||
border-radius: 8rpx;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
|
@ -305,7 +304,7 @@ $orange-gradient-end: #FFFFFF;
|
|||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-top: $spacing-md;
|
||||
margin-top: 20rpx;
|
||||
}
|
||||
|
||||
// 价格
|
||||
|
|
@ -314,13 +313,13 @@ $orange-gradient-end: #FFFFFF;
|
|||
align-items: baseline;
|
||||
|
||||
.price-symbol {
|
||||
font-size: $font-size-lg;
|
||||
font-size: 28rpx;
|
||||
color: $orange-color;
|
||||
font-weight: $font-weight-bold;
|
||||
}
|
||||
|
||||
.price-value {
|
||||
font-size: 44rpx;
|
||||
font-size: 48rpx;
|
||||
color: $orange-color;
|
||||
font-weight: $font-weight-bold;
|
||||
margin-left: 2rpx;
|
||||
|
|
@ -332,7 +331,7 @@ $orange-gradient-end: #FFFFFF;
|
|||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 16rpx 48rpx;
|
||||
padding: 18rpx 56rpx;
|
||||
background-color: $orange-color;
|
||||
color: $text-white;
|
||||
font-size: $font-size-md;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user