修改配置文件

This commit is contained in:
南浔
2024-12-08 20:35:47 +08:00
23 changed files with 1368 additions and 11 deletions
+1 -1
View File
@@ -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;
}
}
}
+1 -1
View File
@@ -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)
{