refactor: 重构用户与勋章体系,统一状态管理与数据结构

1.  新增通用默认状态枚举 DefaultStatusEnum,替换原有分散的状态枚举
2.  重构用户体系:拆分 WxUser 独立表存储微信身份,Users 表改为角色子用户表并关联 WxUser
3.  重构勋章模块:新增系统/期刊勋章类型,调整 JournalId 为可空,新增勋章状态字段
4.  重构微信认证流程:基于 WxUser 生成 Token,支持多子用户管理
5.  清理冗余枚举文件,重构多处业务逻辑适配新的数据结构
6.  修复用户手机号关联逻辑,迁移手机号字段至 WxUser 表
This commit is contained in:
glz
2026-06-10 13:47:13 +08:00
parent 296d87b245
commit 028e3dfb34
29 changed files with 477 additions and 515 deletions

View File

@ -1,4 +1,3 @@
using QYZH.InteractiveMagazine.Models.Dto;
using QYZH.InteractiveMagazine.Models.Enum;
using Newtonsoft.Json;
@ -32,89 +31,33 @@ public class WeChatQuickLoginInput
}
/// <summary>
/// 微信登录输出
/// 微信登录输出(含微信用户信息 + 该微信下的 Users 列表)
/// </summary>
public class WeChatLoginOutput
{
/// <summary>
/// 访问令牌
/// 访问令牌(基于 WxUser不绑定具体 User
/// </summary>
public string Token { get; set; } = string.Empty;
/// <summary>
/// 微信OpenId
/// 微信用户信息
/// </summary>
public string OpenId { get; set; } = string.Empty;
public WxUserInfoOutput WxUser { get; set; } = new();
/// <summary>
/// 该 OpenId 下的用户列表
/// 该微信用户下的用户列表
/// </summary>
public List<WxUserOutput> Users { get; set; } = [];
}
/// <summary>
/// 微信用户创建/更新输入
/// 微信用户信息输出WxUser 表数据)
/// </summary>
public class WxUserInput
public class WxUserInfoOutput
{
/// <summary>
/// 微信OpenId
/// </summary>
public string OpenId { get; set; } = string.Empty;
/// <summary>
/// 微信UnionId
/// </summary>
public string? UnionId { get; set; }
/// <summary>
/// 昵称
/// </summary>
public string? NickName { get; set; }
/// <summary>
/// 头像地址
/// </summary>
public string? AvatarUrl { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string? Phone { get; set; }
/// <summary>
/// 积分余额
/// </summary>
public int Points { get; set; } = 0;
/// <summary>
/// 用户类型: Normal, VIP
/// </summary>
public string Type { get; set; } = UsersTypeEnum.Normal.ToString();
/// <summary>
/// 状态: Active, Disabled
/// </summary>
public string Status { get; set; } = UserStatusEnum.Active.ToString();
/// <summary>
/// 密码默认手机后4位
/// </summary>
public string? Pwd { get; set; }
/// <summary>
/// 当前成长值
/// </summary>
public int GrowthPoints { get; set; } = 0;
}
/// <summary>
/// 微信用户输出
/// </summary>
public class WxUserOutput
{
/// <summary>
/// 主键ID
/// WxUser 主键Id
/// </summary>
public long Id { get; set; }
@ -131,7 +74,7 @@ public class WxUserOutput
/// <summary>
/// 昵称
/// </summary>
public string? NickName { get; set; }
public string? Name { get; set; }
/// <summary>
/// 头像地址
@ -142,6 +85,32 @@ public class WxUserOutput
/// 手机号
/// </summary>
public string? Phone { get; set; }
}
/// <summary>
/// 用户输出Users 表数据,即角色/子用户)
/// </summary>
public class WxUserOutput
{
/// <summary>
/// Users 主键Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 关联 WxUserId
/// </summary>
public long WxUserId { get; set; }
/// <summary>
/// 昵称
/// </summary>
public string? NickName { get; set; }
/// <summary>
/// 头像地址
/// </summary>
public string? AvatarUrl { get; set; }
/// <summary>
/// 积分余额
@ -149,7 +118,12 @@ public class WxUserOutput
public int Points { get; set; }
/// <summary>
/// 用户类型
/// 当前成长值
/// </summary>
public int GrowthPoints { get; set; }
/// <summary>
/// 用户类型: Normal, VIP
/// </summary>
public string Type { get; set; } = string.Empty;
@ -158,86 +132,74 @@ public class WxUserOutput
/// </summary>
public string Status { get; set; } = string.Empty;
/// <summary>
/// 当前成长值
/// </summary>
public int GrowthPoints { get; set; }
/// <summary>
/// 是否上次在线用户
/// </summary>
public bool IsLastOnline { get; set; }
/// <summary>
/// 创建人
/// </summary>
public string? CreatedBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreatedAt { get; set; }
/// <summary>
/// 更新人
/// </summary>
public string? UpdatedBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime? UpdatedAt { get; set; }
}
/// <summary>
/// 微信用户分页查询输入
/// 新增用户输入(在 WxUser 下创建子用户/角色)
/// </summary>
public class WxUserQueryInput : PageQueryModel
public class CreateChildUserInput
{
/// <summary>
/// 昵称(模糊查询)
/// 昵称
/// </summary>
public string? NickName { get; set; }
public string Name { get; set; } = string.Empty;
/// <summary>
/// 手机号(模糊查询
/// 头像地址(可选
/// </summary>
public string? Phone { get; set; }
public string? AvatarUrl { get; set; }
}
/// <summary>
/// 微信切换用户输入
/// </summary>
public class WeChatSwitchUserInput
{
/// <summary>
/// 目标用户IDUsers 表 Id
/// </summary>
public long UserId { get; set; }
}
/// <summary>
/// 微信切换用户输出JWT 基于 WxUser切换不更换 Token
/// </summary>
public class WeChatSwitchUserOutput
{
/// <summary>
/// 当前切换的用户详情
/// </summary>
public WxUserOutput User { get; set; } = new();
}
// ========== 微信 API 响应 DTO不变 ==========
/// <summary>
/// 微信 code2session 接口响应
/// </summary>
public class WxCode2SessionResponse
{
/// <summary>
/// 用户唯一标识
/// </summary>
[JsonProperty("openid")]
public string? OpenId { get; set; }
/// <summary>
/// 会话密钥
/// </summary>
[JsonProperty("session_key")]
public string? SessionKey { get; set; }
/// <summary>
/// 用户统一标识(在开放平台绑定了多个应用时使用)
/// </summary>
[JsonProperty("unionid")]
public string? UnionId { get; set; }
/// <summary>
/// 错误码
/// </summary>
[JsonProperty("errcode")]
public int ErrCode { get; set; }
/// <summary>
/// 错误信息
/// </summary>
[JsonProperty("errmsg")]
public string? ErrMsg { get; set; }
}
@ -247,21 +209,12 @@ public class WxCode2SessionResponse
/// </summary>
public class WxPhoneNumberResponse
{
/// <summary>
/// 错误码
/// </summary>
[JsonProperty("errcode")]
public int ErrCode { get; set; }
/// <summary>
/// 错误信息
/// </summary>
[JsonProperty("errmsg")]
public string? ErrMsg { get; set; }
/// <summary>
/// 手机号信息
/// </summary>
[JsonProperty("phone_info")]
public WxPhoneInfo? PhoneInfo { get; set; }
}
@ -271,21 +224,12 @@ public class WxPhoneNumberResponse
/// </summary>
public class WxPhoneInfo
{
/// <summary>
/// 用户绑定的手机号(国外手机号会有区号)
/// </summary>
[JsonProperty("phoneNumber")]
public string? PhoneNumber { get; set; }
/// <summary>
/// 没有区号的手机号
/// </summary>
[JsonProperty("purePhoneNumber")]
public string? PurePhoneNumber { get; set; }
/// <summary>
/// 区号
/// </summary>
[JsonProperty("countryCode")]
public string? CountryCode { get; set; }
}
@ -295,55 +239,15 @@ public class WxPhoneInfo
/// </summary>
public class WxAccessTokenResponse
{
/// <summary>
/// 获取到的凭证
/// </summary>
[JsonProperty("access_token")]
public string? AccessToken { get; set; }
/// <summary>
/// 凭证有效时间(秒)
/// </summary>
[JsonProperty("expires_in")]
public int ExpiresIn { get; set; }
/// <summary>
/// 错误码
/// </summary>
[JsonProperty("errcode")]
public int ErrCode { get; set; }
/// <summary>
/// 错误信息
/// </summary>
[JsonProperty("errmsg")]
public string? ErrMsg { get; set; }
}
/// <summary>
/// 微信切换用户输入
/// </summary>
public class WeChatSwitchUserInput
{
/// <summary>
/// 目标用户ID
/// </summary>
public long UserId { get; set; }
}
/// <summary>
/// 微信切换用户输出
/// </summary>
public class WeChatSwitchUserOutput
{
/// <summary>
/// 新的访问令牌
/// </summary>
public string Token { get; set; } = string.Empty;
/// <summary>
/// 当前切换的用户详情
/// </summary>
public WxUserOutput User { get; set; } = new();
}