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