refactor: 重构项目基础架构与实体体系

- 替换原有自定义生命周期接口为通用基础服务体系
- 将所有实体基类替换为带雪花ID的SqlSugarBaseEntity
- 迁移DTO到Models项目并统一管理
- 移除冗余的Repository层实现,改用通用基础服务
- 添加Yitter.IdGenerator雪花ID生成支持
- 重构SqlSugar数据库上下文与依赖注入配置
- 新增微信用户、用户勋章、背包等实体与配套服务
- 整理分页查询与结果封装类
- 优化WebApi控制器结构
This commit is contained in:
glz
2026-06-02 14:10:43 +08:00
parent 831f8ba7f5
commit 8ed012bba8
51 changed files with 1762 additions and 1141 deletions

View File

@ -7,29 +7,22 @@ using QYZH.InteractiveMagazine.Models.Common;
using QYZH.InteractiveMagazine.Models.Dto;
using QYZH.InteractiveMagazine.Models.Entity;
using QYZH.InteractiveMagazine.Repository;
using SqlSugar;
namespace QYZH.InteractiveMagazine.Service;
/// <summary>
/// 管理员用户服务实现
/// </summary>
public class AdminUserService : IAdminUserService
public class AdminUserService(BaseRepository<AdminUser> adminUserRepository, ILogger<AdminUserService> logger) : BaseRepository<AdminUser>, IAdminUserService
{
private readonly IAdminUserRepository _adminUserRepository;
private readonly ILogger<AdminUserService> _logger;
public AdminUserService(IAdminUserRepository adminUserRepository, ILogger<AdminUserService> logger)
{
_adminUserRepository = adminUserRepository;
_logger = logger;
}
/// <summary>
/// 创建管理员
/// </summary>
public async Task<AdminUserOutput> CreateAsync(AdminUserInput input)
{
_logger.LogInformation("正在创建管理员,用户名: {UserName}", input.UserName);
logger.LogInformation("正在创建管理员,用户名: {UserName}", input.UserName);
if (string.IsNullOrWhiteSpace(input.UserName))
{
@ -42,10 +35,10 @@ public class AdminUserService : IAdminUserService
}
// 检查用户名是否已存在
var existingUser = await _adminUserRepository.GetByUserNameAsync(input.UserName);
var existingUser = await adminUserRepository.GetFirstAsync(a => a.UserName == input.UserName);
if (existingUser != null)
{
_logger.LogWarning("创建管理员失败,用户名已存在: {UserName}", input.UserName);
logger.LogWarning("创建管理员失败,用户名已存在: {UserName}", input.UserName);
throw new BusinessException("用户名已存在", 400);
}
@ -62,14 +55,14 @@ public class AdminUserService : IAdminUserService
IsDeleted = false
};
var result = await _adminUserRepository.InsertAsync(adminUser);
var result = await adminUserRepository.InsertAsync(adminUser);
if (!result)
{
_logger.LogError("管理员创建失败,用户名: {UserName}", input.UserName);
logger.LogError("管理员创建失败,用户名: {UserName}", input.UserName);
throw new BusinessException("创建管理员失败", 500);
}
_logger.LogInformation("管理员创建成功,用户名: {UserName}, ID: {Id}", input.UserName, adminUser.Id);
logger.LogInformation("管理员创建成功,用户名: {UserName}, ID: {Id}", input.UserName, adminUser.Id);
return MapToOutput(adminUser);
}
@ -79,22 +72,22 @@ public class AdminUserService : IAdminUserService
/// </summary>
public async Task<AdminUserOutput> UpdateAsync(long id, AdminUserInput input)
{
_logger.LogInformation("正在更新管理员ID: {Id}", id);
logger.LogInformation("正在更新管理员ID: {Id}", id);
var adminUser = await _adminUserRepository.GetByIdAsync(id);
var adminUser = await adminUserRepository.GetByIdAsync(id);
if (adminUser == null)
{
_logger.LogWarning("未找到要更新的管理员ID: {Id}", id);
logger.LogWarning("未找到要更新的管理员ID: {Id}", id);
throw new BusinessException("管理员不存在", 404);
}
// 如果用户名有变更,检查是否与其他用户重复
if (!string.IsNullOrWhiteSpace(input.UserName) && input.UserName != adminUser.UserName)
{
var existingUser = await _adminUserRepository.GetByUserNameAsync(input.UserName.Trim());
var existingUser = await adminUserRepository.GetFirstAsync(a => a.UserName == input.UserName.Trim());
if (existingUser != null && existingUser.Id != id)
{
_logger.LogWarning("更新管理员失败,用户名已存在: {UserName}", input.UserName);
logger.LogWarning("更新管理员失败,用户名已存在: {UserName}", input.UserName);
throw new BusinessException("用户名已存在", 400);
}
@ -120,14 +113,14 @@ public class AdminUserService : IAdminUserService
adminUser.UpdatedBy = "System";
adminUser.UpdatedAt = DateTime.Now;
var result = await _adminUserRepository.UpdateAsync(adminUser);
var result = await adminUserRepository.UpdateAsync(adminUser);
if (!result)
{
_logger.LogError("管理员更新失败ID: {Id}", id);
logger.LogError("管理员更新失败ID: {Id}", id);
throw new BusinessException("更新管理员失败", 500);
}
_logger.LogInformation("管理员更新成功ID: {Id}", id);
logger.LogInformation("管理员更新成功ID: {Id}", id);
return MapToOutput(adminUser);
}
@ -137,23 +130,23 @@ public class AdminUserService : IAdminUserService
/// </summary>
public async Task DeleteAsync(long id)
{
_logger.LogInformation("正在删除管理员ID: {Id}", id);
logger.LogInformation("正在删除管理员ID: {Id}", id);
var adminUser = await _adminUserRepository.GetByIdAsync(id);
var adminUser = await adminUserRepository.GetByIdAsync(id);
if (adminUser == null)
{
_logger.LogWarning("未找到要删除的管理员ID: {Id}", id);
logger.LogWarning("未找到要删除的管理员ID: {Id}", id);
throw new BusinessException("管理员不存在", 404);
}
var result = await _adminUserRepository.DeleteByIdAsync(id);
var result = await adminUserRepository.DeleteByIdAsync(id);
if (!result)
{
_logger.LogError("管理员删除失败ID: {Id}", id);
logger.LogError("管理员删除失败ID: {Id}", id);
throw new BusinessException("删除管理员失败", 500);
}
_logger.LogInformation("管理员删除成功ID: {Id}", id);
logger.LogInformation("管理员删除成功ID: {Id}", id);
}
/// <summary>
@ -161,12 +154,12 @@ public class AdminUserService : IAdminUserService
/// </summary>
public async Task<AdminUserOutput> GetByIdAsync(long id)
{
_logger.LogInformation("正在获取管理员信息ID: {Id}", id);
logger.LogInformation("正在获取管理员信息ID: {Id}", id);
var adminUser = await _adminUserRepository.GetByIdAsync(id);
var adminUser = await adminUserRepository.GetByIdAsync(id);
if (adminUser == null)
{
_logger.LogWarning("未找到管理员ID: {Id}", id);
logger.LogWarning("未找到管理员ID: {Id}", id);
throw new BusinessException("管理员不存在", 404);
}
@ -178,7 +171,7 @@ public class AdminUserService : IAdminUserService
/// </summary>
public async Task<PageListModel<AdminUserOutput>> GetListAsync(AdminUserQueryInput input)
{
_logger.LogInformation("正在查询管理员列表,页码: {PageIndex}, 每页条数: {PageSize}", input.PageIndex, input.PageSize);
logger.LogInformation("正在查询管理员列表,页码: {PageIndex}, 每页条数: {PageSize}", input.PageIndex, input.PageSize);
if (input.PageIndex <= 0)
{
@ -189,62 +182,13 @@ public class AdminUserService : IAdminUserService
{
throw new BusinessException("每页条数必须在1-100之间", 400);
}
var pageResult = await _adminUserRepository.GetPageListAsync(
BuildQueryExpression(input),
input
);
// 转换为输出DTO
var outputList = pageResult.List?.Select(MapToOutput).ToList() ?? new List<AdminUserOutput>();
return new PageListModel<AdminUserOutput>
{
List = outputList,
TotalCount = pageResult.TotalCount,
PageIndex = pageResult.PageIndex,
PageSize = pageResult.PageSize
};
}
/// <summary>
/// 构建查询表达式
/// </summary>
private static Expression<Func<AdminUser, bool>> BuildQueryExpression(AdminUserQueryInput input)
{
Expression<Func<AdminUser, bool>> where = x => !x.IsDeleted;
if (!string.IsNullOrWhiteSpace(input.UserName))
{
var userName = input.UserName;
Expression<Func<AdminUser, bool>> userNameCondition = x => x.UserName.Contains(userName);
where = Expression.Lambda<Func<AdminUser, bool>>(
Expression.AndAlso(where.Body,
Expression.Invoke(userNameCondition, where.Parameters[0])),
where.Parameters);
}
if (!string.IsNullOrWhiteSpace(input.Type))
{
var type = input.Type;
Expression<Func<AdminUser, bool>> typeCondition = x => x.Type == type;
where = Expression.Lambda<Func<AdminUser, bool>>(
Expression.AndAlso(where.Body,
Expression.Invoke(typeCondition, where.Parameters[0])),
where.Parameters);
}
if (!string.IsNullOrWhiteSpace(input.Status))
{
var status = input.Status;
Expression<Func<AdminUser, bool>> statusCondition = x => x.Status == status;
where = Expression.Lambda<Func<AdminUser, bool>>(
Expression.AndAlso(where.Body,
Expression.Invoke(statusCondition, where.Parameters[0])),
where.Parameters);
}
return where;
RefAsync<int> totalNumber = 0;
var pageResult = await adminUserRepository.Queryable()
.WhereIF(!string.IsNullOrWhiteSpace(input.UserName), a => a.UserName == input.UserName)
.OrderByDescending(a => a.CreatedAt)
.Select(a => MapToOutput(a), true)
.ToPageListAsync(input.PageIndex, input.PageSize, totalNumber);
return new PageListModel<AdminUserOutput>(pageResult, input.PageIndex, input.PageSize, totalNumber);
}
/// <summary>