1. 新增用户实体字段IsLastOnline标记上次在线用户 2. 重构微信登录逻辑,返回同一OpenId下的所有用户列表而非单用户 3. 新增SwitchUserAsync服务方法与控制器接口,支持同OpenId下切换用户 4. 添加用户实体到输出DTO的映射工具方法 5. 实现切换用户时的身份校验、Token刷新与在线状态更新
255 lines
5.2 KiB
C#
255 lines
5.2 KiB
C#
using QYZH.InteractiveMagazine.Models.Dto;
|
||
using Newtonsoft.Json;
|
||
|
||
namespace QYZH.InteractiveMagazine.IService.Dto;
|
||
|
||
/// <summary>
|
||
/// 微信小程序登录输入
|
||
/// </summary>
|
||
public class WeChatLoginInput
|
||
{
|
||
/// <summary>
|
||
/// 微信登录凭证(wx.login 获取的 code)
|
||
/// </summary>
|
||
public string Code { get; set; } = string.Empty;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 微信登录输出
|
||
/// </summary>
|
||
public class WeChatLoginOutput
|
||
{
|
||
/// <summary>
|
||
/// 访问令牌
|
||
/// </summary>
|
||
public string Token { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 微信OpenId
|
||
/// </summary>
|
||
public string OpenId { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 该 OpenId 下的用户列表
|
||
/// </summary>
|
||
public List<WxUserOutput> Users { get; set; } = [];
|
||
}
|
||
|
||
/// <summary>
|
||
/// 微信用户创建/更新输入
|
||
/// </summary>
|
||
public class WxUserInput
|
||
{
|
||
/// <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; } = "Normal";
|
||
|
||
/// <summary>
|
||
/// 状态: Active, Disabled
|
||
/// </summary>
|
||
public string Status { get; set; } = "Active";
|
||
|
||
/// <summary>
|
||
/// 密码,默认手机后4位
|
||
/// </summary>
|
||
public string? Pwd { get; set; }
|
||
|
||
/// <summary>
|
||
/// 当前成长值
|
||
/// </summary>
|
||
public int GrowthPoints { get; set; } = 0;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 微信用户输出
|
||
/// </summary>
|
||
public class WxUserOutput
|
||
{
|
||
/// <summary>
|
||
/// 主键ID
|
||
/// </summary>
|
||
public long Id { get; set; }
|
||
|
||
/// <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; }
|
||
|
||
/// <summary>
|
||
/// 用户类型
|
||
/// </summary>
|
||
public string Type { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 状态
|
||
/// </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>
|
||
/// 微信用户分页查询输入
|
||
/// </summary>
|
||
public class WxUserQueryInput : PageQueryModel
|
||
{
|
||
/// <summary>
|
||
/// 昵称(模糊查询)
|
||
/// </summary>
|
||
public string? NickName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 手机号(模糊查询)
|
||
/// </summary>
|
||
public string? Phone { get; set; }
|
||
|
||
}
|
||
|
||
/// <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; }
|
||
}
|
||
|
||
/// <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();
|
||
}
|
||
|