refactor: 重构用户与商品模块,统一业务模型与服务

1.  新增用户状态枚举UserStatusEnum,统一用户状态定义
2.  重构用户体系:合并WxUser与User实体为Users实体,统一用户管理
3.  新增微信小程序认证相关服务与控制器,实现一键登录功能
4.  新增商品管理完整服务与控制器,修复商品表字段映射问题
5.  删除冗余的WxUser相关服务与控制器代码
6.  新增Newtonsoft.Json依赖用于微信接口响应解析
7.  清理无用的文件夹引用配置
This commit is contained in:
glz
2026-06-03 16:09:56 +08:00
parent 0a32754740
commit 32989e1fa0
22 changed files with 1200 additions and 491 deletions

View File

@ -0,0 +1,156 @@
using QYZH.InteractiveMagazine.Models.Dto;
namespace QYZH.InteractiveMagazine.Models.Dto;
/// <summary>
/// 商品创建/更新输入
/// </summary>
public class ProductInput
{
/// <summary>
/// 商品名称
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 描述
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 商品图片
/// </summary>
public string? ImageUrl { get; set; }
/// <summary>
/// 所需积分
/// </summary>
public int Price { get; set; }
/// <summary>
/// 商品类型: MakeUpCard, PetBg
/// </summary>
public string Type { get; set; } = string.Empty;
/// <summary>
/// 售卖状态: OnSale, OffSale
/// </summary>
public string SaleStatus { get; set; } = "OnSale";
/// <summary>
/// 扩展数据
/// </summary>
public string? MetaData { get; set; }
/// <summary>
/// 是否上架
/// </summary>
public bool IsActive { get; set; } = true;
/// <summary>
/// 库存(-1无限)
/// </summary>
public int Stock { get; set; } = -1;
}
/// <summary>
/// 商品输出
/// </summary>
public class ProductOutput
{
/// <summary>
/// 主键ID
/// </summary>
public long Id { get; set; }
/// <summary>
/// 商品名称
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 描述
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 商品图片
/// </summary>
public string? ImageUrl { get; set; }
/// <summary>
/// 所需积分
/// </summary>
public int Price { get; set; }
/// <summary>
/// 商品类型
/// </summary>
public string Type { get; set; } = string.Empty;
/// <summary>
/// 售卖状态
/// </summary>
public string SaleStatus { get; set; } = string.Empty;
/// <summary>
/// 扩展数据
/// </summary>
public string? MetaData { get; set; }
/// <summary>
/// 是否上架
/// </summary>
public bool IsActive { get; set; }
/// <summary>
/// 库存(-1无限)
/// </summary>
public int Stock { 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 ProductQueryInput : PageQueryModel
{
/// <summary>
/// 商品名称(模糊查询)
/// </summary>
public string? Name { get; set; }
/// <summary>
/// 商品类型
/// </summary>
public string? Type { get; set; }
/// <summary>
/// 售卖状态: OnSale, OffSale
/// </summary>
public string? SaleStatus { get; set; }
/// <summary>
/// 是否上架
/// </summary>
public bool? IsActive { get; set; }
}

View File

@ -0,0 +1,71 @@
using QYZH.InteractiveMagazine.Models.Dto;
namespace QYZH.InteractiveMagazine.IService.Dto;
/// <summary>
/// Users查询输入DTO
/// </summary>
public class UsersQueryInput : PageQueryModel
{
/// <summary>
/// 微信用户ID
/// </summary>
public string? WxUserId { get; set; }
}
/// <summary>
/// Users输出DTO (基本信息)
/// </summary>
public class UsersOutput
{
/// <summary>
/// 主键ID
/// </summary>
public long Id { get; set; }
/// <summary>
/// 微信用户ID
/// </summary>
public string WxUserId { get; set; } = string.Empty;
/// <summary>
/// 昵称
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 头像地址
/// </summary>
public string? AvatarUrl { 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>
/// 更新用户状态输入DTO
/// </summary>
public class UpdateUserStatusInput
{
/// <summary>
/// 用户状态: 1-启用, 2-冻结
/// </summary>
public int Status { get; set; }
}

View File

@ -1,7 +1,19 @@
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>
@ -177,3 +189,39 @@ public class WxUserQueryInput : PageQueryModel
}
/// <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; }
}

View File

@ -49,11 +49,12 @@ namespace QYZH.InteractiveMagazine.Models.Entity
public string Type {get;set;}
/// <summary>
/// Desc:状态: OnSale, OffSale
/// Desc:售卖状态: OnSale, OffSale
/// Default:OnSale
/// Nullable:False
/// </summary>
public string Status {get;set;}
[SugarColumn(ColumnName = "SaleStatus")]
public string SaleStatus {get;set;}
/// <summary>
/// Desc:扩展数据

View File

@ -1,58 +0,0 @@
using SqlSugar;
namespace QYZH.InteractiveMagazine.Models.Entity
{
///<summary>
///用户表
///</summary>
[SugarTable("User")]
public partial class User : SqlSugarBaseEntity
{
/// <summary>
/// Desc:微信用户ID
/// Default:
/// Nullable:True
/// </summary>
public string WxUserId { get; set; }
/// <summary>
/// Desc:昵称
/// Default:
/// Nullable:True
/// </summary>
public string Name { get; set; }
/// <summary>
/// Desc:当前成长值
/// Default:0
/// Nullable:False
/// </summary>
public int GrowthPoints { get; set; }
/// <summary>
/// Desc:头像地址
/// Default:
/// Nullable:True
/// </summary>
public string AvatarUrl { get; set; }
/// <summary>
/// Desc:积分余额
/// Default:0
/// Nullable:False
/// </summary>
public int Points { get; set; }
/// <summary>
/// Desc:用户类型: Normal, VIP
/// Default:Normal
/// Nullable:False
/// </summary>
public string Type { get; set; }
/// <summary>
/// Desc:状态: Active, Disabled
/// Default:Active
/// Nullable:False
/// </summary>
public string Status { get; set; }
}
}

View File

@ -5,44 +5,34 @@ namespace QYZH.InteractiveMagazine.Models.Entity
///<summary>
///用户表
///</summary>
[SugarTable("WxUser")]
public partial class WxUser : SqlSugarBaseEntity
[SugarTable("Users")]
public partial class Users : SqlSugarBaseEntity
{
/// <summary>
/// Desc:微信OpenId
/// Default:
/// Nullable:False
/// </summary>
public string OpenId { get; set; }
/// <summary>
/// Desc:微信UnionId
/// Default:
/// Nullable:True
/// </summary>
public string UnionId { get; set; }
/// <summary>
/// Desc:昵称
/// Default:
/// Nullable:True
/// </summary>
public string NickName { get; set; }
public string Name { get; set; }
/// <summary>
/// Desc:当前成长值
/// Default:0
/// Nullable:False
/// </summary>
public int GrowthPoints { get; set; }
/// <summary>
/// Desc:头像地址
/// Default:
/// Nullable:True
/// </summary>
public string AvatarUrl { get; set; }
/// <summary>
/// Desc:手机号
/// Default:
/// Nullable:True
/// Desc:积分余额
/// Default:0
/// Nullable:False
/// </summary>
public string Phone { get; set; }
public int Points { get; set; }
/// <summary>
/// Desc:用户类型: Normal, VIP
@ -57,12 +47,25 @@ namespace QYZH.InteractiveMagazine.Models.Entity
/// Nullable:False
/// </summary>
public string Status { get; set; }
/// <summary>
/// Desc:密码默认手机后4位
/// Default:Active
/// Desc:微信OpenId
/// Default:
/// Nullable:False
/// </summary>
public string Pwd { get; set; }
public string OpenId { get; set; }
/// <summary>
/// Desc:微信UnionId
/// Default:
/// Nullable:True
/// </summary>
public string UnionId { get; set; }
/// <summary>
/// Desc:手机号
/// Default:
/// Nullable:True
/// </summary>
public string Phone { get; set; }
}
}

View File

@ -0,0 +1,17 @@
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 用户状态枚举
/// </summary>
public enum UserStatusEnum
{
/// <summary>
/// 启用
/// </summary>
Active = 1,
/// <summary>
/// 冻结
/// </summary>
Frozen = 2
}

View File

@ -9,6 +9,7 @@
<ItemGroup>
<PackageReference Include="Mapster" Version="7.4.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.166" />
<PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
</ItemGroup>