用户获取信息返回角色信息
This commit is contained in:
@@ -67,7 +67,7 @@ namespace Apimanager_backend.Services
|
||||
#region 获取用户列表
|
||||
public async Task<List<UserInfoDto>> GetUsersAsync(int page, int pageSize, bool desc)
|
||||
{
|
||||
var query = context.Users.Where(x => true)
|
||||
var query = context.Users.Include(x => x.Roles).Where(x => true)
|
||||
.OrderBy(x => x.Id);
|
||||
//倒序
|
||||
if (desc)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Apimanager_backend.Dtos;
|
||||
using Apimanager_backend.Models;
|
||||
|
||||
namespace Apimanager_backend.Services
|
||||
{
|
||||
@@ -37,6 +38,27 @@ namespace Apimanager_backend.Services
|
||||
/// <param name="packageId"></param>
|
||||
/// <returns></returns>
|
||||
public Task<PackageInfoDto> PackageInfoByIdAsync(int packageId);
|
||||
/// <summary>
|
||||
/// 获取用户所有订阅套餐
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public Task<List<UserPackage>> GetUserPackagesAsync(int userId);
|
||||
/// <summary>
|
||||
/// 增加套餐订阅时长
|
||||
/// </summary>
|
||||
/// <param name="packageId">套餐Id(注意这里不是用户订阅套餐表的Id)</param>
|
||||
/// <param name="time"></param>
|
||||
/// <param name="isAdmin">判断是否为管理员操作(如果是则不扣除余额)</param>
|
||||
/// <returns></returns>
|
||||
public Task<UserPackage> AddUserPackageTimeAsync(int packageId,int userId,TimeSpan time,bool isAdmin);
|
||||
/// <summary>
|
||||
/// 扣除套餐订阅时长
|
||||
/// </summary>
|
||||
/// <param name="packageId">套餐Id(注意这里不是用户订阅套餐表的Id)</param>
|
||||
/// <param name="time"></param>
|
||||
/// <returns></returns>
|
||||
public Task<UserPackage> DecuteUserPackageTimeAsync(int packageId,int userId,TimeSpan time);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
using Apimanager_backend.Models;
|
||||
|
||||
namespace Apimanager_backend.Services
|
||||
{
|
||||
public interface ISystemConfigService
|
||||
{
|
||||
public Task<SystemConfig> UpdateSystemConfig(string configName,string configBody);
|
||||
public Task<SystemConfig> GetSystemConfig(string configName);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,201 @@
|
||||
using Apimanager_backend.Data;
|
||||
using Apimanager_backend.Dtos;
|
||||
using Apimanager_backend.Exceptions;
|
||||
using Apimanager_backend.Models;
|
||||
using AutoMapper;
|
||||
using AutoMapper.Configuration.Annotations;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Apimanager_backend.Services
|
||||
{
|
||||
public class PackageService : IPackageService
|
||||
{
|
||||
private readonly ApiContext apiContext;
|
||||
private readonly ILogger<PackageService> logger;
|
||||
private readonly IMapper mapper;
|
||||
public PackageService(ApiContext apiContext,ILogger<PackageService> logger,IMapper mapper)
|
||||
{
|
||||
this.apiContext = apiContext;
|
||||
this.logger = logger;
|
||||
this.mapper = mapper;
|
||||
}
|
||||
#region 新增套餐
|
||||
public async Task<PackageInfoDto> AddPackageAsync(AddPackageDto addPackageDto)
|
||||
{
|
||||
var packageInfo = mapper.Map<Apipackage>(addPackageDto);
|
||||
apiContext.Apipackages.Add(packageInfo);
|
||||
await apiContext.SaveChangesAsync();
|
||||
return mapper.Map<PackageInfoDto>(packageInfo);
|
||||
}
|
||||
#endregion
|
||||
#region 增加用户订阅套餐
|
||||
public async Task<UserPackage> AddUserPackageTimeAsync(int packageId,int userId,TimeSpan time,bool isAdmin)
|
||||
{
|
||||
await using var transaction = await apiContext.Database.BeginTransactionAsync();
|
||||
try
|
||||
{
|
||||
//查询用户名下有无对应套餐
|
||||
var userPackageInfo = await apiContext.UserPackages.FirstOrDefaultAsync(
|
||||
x => x.PackageId == packageId && x.UserId == userId
|
||||
);
|
||||
//查询套餐是否存在
|
||||
var packageInfo = await apiContext.Apipackages.FirstOrDefaultAsync(x => x.Id == packageId);
|
||||
if (packageInfo == null)
|
||||
{
|
||||
throw new BaseException(4004,"套餐不存在");
|
||||
}
|
||||
//查询用户是否存在
|
||||
var user = await apiContext.Users.FirstOrDefaultAsync(x => x.Id == userId);
|
||||
if (user == null)
|
||||
{
|
||||
throw new BaseException(2004,"用户不存在");
|
||||
}
|
||||
//如果没有对应套餐关联则新建
|
||||
if (userPackageInfo == null)
|
||||
{
|
||||
userPackageInfo = new UserPackage
|
||||
{
|
||||
PackageId = packageId,
|
||||
UserId = userId,
|
||||
ExpiryDate = DateTime.UtcNow + time,
|
||||
};
|
||||
apiContext.UserPackages.Add(userPackageInfo);
|
||||
}
|
||||
else
|
||||
{
|
||||
//否则直接在关联记录上添加有效期
|
||||
userPackageInfo.ExpiryDate += time;
|
||||
apiContext.UserPackages.Update(userPackageInfo);
|
||||
}
|
||||
if (!isAdmin)
|
||||
{
|
||||
//扣除对应用户余额
|
||||
user.Balance -= packageInfo.Price * time.Days;
|
||||
apiContext.Users.Update(user);
|
||||
}
|
||||
await apiContext.SaveChangesAsync();
|
||||
await transaction.CommitAsync();
|
||||
return userPackageInfo;
|
||||
} catch (Exception)
|
||||
{
|
||||
await transaction.RollbackAsync();
|
||||
throw;
|
||||
}
|
||||
|
||||
}
|
||||
#endregion
|
||||
#region 扣除用户订阅套餐
|
||||
|
||||
public async Task<UserPackage> DecuteUserPackageTimeAsync(int packageId,int userId, TimeSpan time)
|
||||
{
|
||||
await using var transaction = await apiContext.Database.BeginTransactionAsync();
|
||||
try
|
||||
{
|
||||
//查询用户名下有无对应套餐
|
||||
var userPackageInfo = await apiContext.UserPackages.FirstOrDefaultAsync(
|
||||
x => x.PackageId == packageId && x.UserId == userId
|
||||
);
|
||||
//如果没有对应套餐则返回错误信息
|
||||
if (userPackageInfo == null)
|
||||
{
|
||||
throw new BaseException(4004,"套餐未找到");
|
||||
}
|
||||
//否则直接在关联记录上添加有效期
|
||||
userPackageInfo.ExpiryDate -= time;
|
||||
apiContext.UserPackages.Update(userPackageInfo);
|
||||
await apiContext.SaveChangesAsync();
|
||||
await transaction.CommitAsync();
|
||||
return userPackageInfo;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
await transaction.RollbackAsync();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region 删除套餐
|
||||
public async Task DeletePackageAsync(int packageId)
|
||||
{
|
||||
await using var transaction = await apiContext.Database.BeginTransactionAsync();
|
||||
try
|
||||
{
|
||||
var packageInfo = await apiContext.Apipackages.FirstOrDefaultAsync(x => x.Id == packageId);
|
||||
if (packageInfo == null)
|
||||
{
|
||||
throw new BaseException(4004, "套餐未找到");
|
||||
}
|
||||
packageInfo.IsDeleted = true;
|
||||
apiContext.Apipackages.Update(packageInfo);
|
||||
await apiContext.SaveChangesAsync();
|
||||
await transaction.CommitAsync();
|
||||
}catch(Exception)
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region 获取套餐列表
|
||||
public async Task<List<PackageInfoDto>> GetAllPackagesAsync(int pageIndex, int pageSize, bool desc)
|
||||
{
|
||||
IQueryable<Apipackage> query = apiContext.Apipackages.Where(x => true).OrderBy(x => x.Id);
|
||||
if(desc)
|
||||
{
|
||||
query = query.OrderDescending();
|
||||
}
|
||||
query = query.Skip((pageIndex - 1) * pageSize).Take(pageSize);
|
||||
var list = await query.ToListAsync();
|
||||
return mapper.Map<List<PackageInfoDto>>(list);
|
||||
}
|
||||
#endregion
|
||||
#region 获取用户订阅套餐列表
|
||||
public async Task<List<UserPackage>> GetUserPackagesAsync(int userId)
|
||||
{
|
||||
var userpackageInfo = await apiContext.UserPackages.Where(x => x.UserId == userId).ToListAsync();
|
||||
return userpackageInfo;
|
||||
}
|
||||
#endregion
|
||||
#region 获取套餐信息
|
||||
public async Task<PackageInfoDto> PackageInfoByIdAsync(int packageId)
|
||||
{
|
||||
var packageInfo = await apiContext.Apipackages.FirstOrDefaultAsync(x => x.Id == packageId);
|
||||
if(packageInfo == null)
|
||||
{
|
||||
throw new BaseException(4004,"套餐未找到");
|
||||
}
|
||||
return mapper.Map<PackageInfoDto>(packageInfo);
|
||||
}
|
||||
#endregion
|
||||
#region 更新套餐信息
|
||||
public async Task<PackageInfoDto> UpdatePackageAsync(int packageId, UpdatePackageDto updatePackageDto)
|
||||
{
|
||||
await using var transaction = await apiContext.Database.BeginTransactionAsync();
|
||||
try
|
||||
{
|
||||
//查询对应套餐
|
||||
var packageInfo = await apiContext.Apipackages.FirstOrDefaultAsync(x => x.Id == packageId);
|
||||
if (packageInfo == null)
|
||||
{
|
||||
throw new BaseException(4004, "Success");
|
||||
}
|
||||
//更新字段
|
||||
packageInfo.Name = updatePackageDto.Name ?? packageInfo.Name;
|
||||
packageInfo.CallLimit = updatePackageDto.CallLimit != null ? updatePackageDto.CallLimit.Value : packageInfo.CallLimit;
|
||||
packageInfo.OneMinuteLimit = updatePackageDto.OneMinuteLimit != null ? updatePackageDto.OneMinuteLimit.Value : packageInfo.OneMinuteLimit;
|
||||
packageInfo.Price = updatePackageDto.Price != null ? updatePackageDto.Price.Value : packageInfo.Price;
|
||||
//更新
|
||||
apiContext.Apipackages.Update(packageInfo);
|
||||
await apiContext.SaveChangesAsync();
|
||||
await transaction.CommitAsync();
|
||||
return mapper.Map<PackageInfoDto>(packageInfo);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
await transaction.RollbackAsync();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
using Apimanager_backend.Data;
|
||||
using Apimanager_backend.Exceptions;
|
||||
using Apimanager_backend.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Apimanager_backend.Services
|
||||
{
|
||||
public class SystemConfigService : ISystemConfigService
|
||||
{
|
||||
private readonly ApiContext apiContext;
|
||||
private readonly ILogger<SystemConfigService> logger;
|
||||
public SystemConfigService(ApiContext apiContext,ILogger<SystemConfigService> logger)
|
||||
{
|
||||
this.apiContext = apiContext;
|
||||
this.logger = logger;
|
||||
}
|
||||
public async Task<SystemConfig> UpdateSystemConfig(string configName, string configBody)
|
||||
{
|
||||
var config = await apiContext.SystemConfigs.FirstOrDefaultAsync(x => x.ConfigName == configName);
|
||||
if (config == null)
|
||||
{
|
||||
throw new BaseException(5006,"配置不存在");
|
||||
}
|
||||
config.ConfigBody = configBody;
|
||||
apiContext.SystemConfigs.Update(config);
|
||||
await apiContext.SaveChangesAsync();
|
||||
return config;
|
||||
}
|
||||
public async Task<SystemConfig> GetSystemConfig(string configName)
|
||||
{
|
||||
var config = await apiContext.SystemConfigs.FirstOrDefaultAsync(x => x.ConfigName == configName);
|
||||
if (config == null)
|
||||
{
|
||||
throw new BaseException(5006, "配置不存在");
|
||||
}
|
||||
return config;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,7 @@ namespace Apimanager_backend.Services
|
||||
}
|
||||
public async Task<UserInfoDto> GetUserAsync(int userId)
|
||||
{
|
||||
User? user = await apiContext.Users.SingleOrDefaultAsync(x => x.Id == userId);
|
||||
User? user = await apiContext.Users.Include(x => x.Roles).SingleOrDefaultAsync(x => x.Id == userId);
|
||||
//未找到用户
|
||||
if (user == null)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user