init commit
This commit is contained in:
83
20220330_Vote/Ewide.Core/Service/Config/Dto/ConfigInput.cs
Normal file
83
20220330_Vote/Ewide.Core/Service/Config/Dto/ConfigInput.cs
Normal file
@@ -0,0 +1,83 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Ewide.Core.Service
|
||||
{
|
||||
/// <summary>
|
||||
/// 参数配置
|
||||
/// </summary>
|
||||
public class ConfigInput : PageInputBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 名称
|
||||
/// </summary>
|
||||
public virtual string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 编码
|
||||
/// </summary>
|
||||
public virtual string Code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 属性值
|
||||
/// </summary>
|
||||
public virtual string Value { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否是系统参数(Y-是,N-否)
|
||||
/// </summary>
|
||||
public virtual string SysFlag { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 备注
|
||||
/// </summary>
|
||||
public virtual string Remark { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 状态(字典 0正常 1停用 2删除)
|
||||
/// </summary>
|
||||
public virtual int Status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 常量所属分类的编码,来自于“常量的分类”字典
|
||||
/// </summary>
|
||||
public virtual string GroupCode { get; set; }
|
||||
}
|
||||
|
||||
public class AddConfigInput : ConfigInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 名称
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "参数名称不能为空")]
|
||||
public override string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 编码
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "参数编码不能为空")]
|
||||
public override string Code { get; set; }
|
||||
}
|
||||
|
||||
public class DeleteConfigInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 应用Id
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "参数Id不能为空")]
|
||||
public string Id { get; set; }
|
||||
}
|
||||
|
||||
public class UpdateConfigInput : AddConfigInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 应用Id
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "应用Id不能为空")]
|
||||
public string Id { get; set; }
|
||||
}
|
||||
|
||||
public class QueryConfigInput : DeleteConfigInput
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
18
20220330_Vote/Ewide.Core/Service/Config/ISysConfigService.cs
Normal file
18
20220330_Vote/Ewide.Core/Service/Config/ISysConfigService.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Ewide.Core.Service
|
||||
{
|
||||
public interface ISysConfigService
|
||||
{
|
||||
Task AddConfig(AddConfigInput input);
|
||||
Task DeleteConfig(DeleteConfigInput input);
|
||||
Task<SysConfig> GetConfig([FromQuery] QueryConfigInput input);
|
||||
Task<dynamic> GetConfigList([FromQuery] ConfigInput input);
|
||||
Task<dynamic> QueryConfigPageList([FromQuery] ConfigInput input);
|
||||
Task UpdateConfig(UpdateConfigInput input);
|
||||
Task<bool> GetDemoEnvFlag();
|
||||
Task<bool> GetCaptchaOpenFlag();
|
||||
Task UpdateConfigCache(string code, object value);
|
||||
}
|
||||
}
|
||||
175
20220330_Vote/Ewide.Core/Service/Config/SysConfigService.cs
Normal file
175
20220330_Vote/Ewide.Core/Service/Config/SysConfigService.cs
Normal file
@@ -0,0 +1,175 @@
|
||||
using Ewide.Core.Extension;
|
||||
using Furion.DatabaseAccessor;
|
||||
using Furion.DatabaseAccessor.Extensions;
|
||||
using Furion.DependencyInjection;
|
||||
using Furion.DynamicApiController;
|
||||
using Furion.FriendlyException;
|
||||
using Mapster;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Ewide.Core.Service
|
||||
{
|
||||
/// <summary>
|
||||
/// 系统参数配置服务
|
||||
/// </summary>
|
||||
[ApiDescriptionSettings(Name = "Config", Order = 100)]
|
||||
public class SysConfigService : ISysConfigService, IDynamicApiController, ITransient
|
||||
{
|
||||
private readonly IRepository<SysConfig> _sysConfigRep; // 参数配置表仓储
|
||||
private readonly ISysCacheService _sysCacheService;
|
||||
|
||||
public SysConfigService(IRepository<SysConfig> sysConfigRep, ISysCacheService sysCacheService)
|
||||
{
|
||||
_sysConfigRep = sysConfigRep;
|
||||
_sysCacheService = sysCacheService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 分页获取系统参数配置
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("/sysConfig/page")]
|
||||
public async Task<dynamic> QueryConfigPageList([FromBody] ConfigInput input)
|
||||
{
|
||||
var name = !string.IsNullOrEmpty(input.Name?.Trim());
|
||||
var code = !string.IsNullOrEmpty(input.Code?.Trim());
|
||||
var groupCode = !string.IsNullOrEmpty(input.GroupCode?.Trim());
|
||||
var configs = await _sysConfigRep.DetachedEntities
|
||||
.Where((name, u => EF.Functions.Like(u.Name, $"%{input.Name.Trim()}%")),
|
||||
(code, u => EF.Functions.Like(u.Code, $"%{input.Code.Trim()}%")),
|
||||
(groupCode, u => EF.Functions.Like(u.Code, $"%{input.GroupCode.Trim()}%")))
|
||||
.Where(u => u.Status != CommonStatus.DELETED).OrderBy(u => u.GroupCode)
|
||||
.ToPageData(input);
|
||||
return PageDataResult<SysConfig>.PageResult(configs);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取系统参数配置列表
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("/sysConfig/list")]
|
||||
public async Task<dynamic> GetConfigList([FromQuery] ConfigInput input)
|
||||
{
|
||||
return await _sysConfigRep.DetachedEntities.Where(u => u.Status != CommonStatus.DELETED).ToListAsync();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 增加系统参数配置
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("/sysConfig/add")]
|
||||
public async Task AddConfig(AddConfigInput input)
|
||||
{
|
||||
var isExist = await _sysConfigRep.DetachedEntities.AnyAsync(u => u.Name == input.Name || u.Code == input.Code);
|
||||
if (isExist)
|
||||
throw Oops.Oh(ErrorCode.D9000);
|
||||
|
||||
var config = input.Adapt<SysConfig>();
|
||||
await config.InsertAsync();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除系统参数配置
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("/sysConfig/delete")]
|
||||
public async Task DeleteConfig(DeleteConfigInput input)
|
||||
{
|
||||
var config = await _sysConfigRep.FirstOrDefaultAsync(u => u.Id == input.Id);
|
||||
// 禁止删除系统参数
|
||||
if (config.SysFlag == YesOrNot.Y.ToString())
|
||||
throw Oops.Oh(ErrorCode.D9001);
|
||||
|
||||
await config.DeleteAsync();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新系统参数配置
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("/sysConfig/edit")]
|
||||
public async Task UpdateConfig(UpdateConfigInput input)
|
||||
{
|
||||
var isExist = await _sysConfigRep.DetachedEntities.AnyAsync(u => (u.Name == input.Name || u.Code == input.Code) && u.Id != input.Id);
|
||||
if (isExist)
|
||||
throw Oops.Oh(ErrorCode.D9000);
|
||||
|
||||
var config = input.Adapt<SysConfig>();
|
||||
await config.UpdateAsync(ignoreNullValues: true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取系统参数配置
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("/sysConfig/detail")]
|
||||
public async Task<SysConfig> GetConfig([FromQuery] QueryConfigInput input)
|
||||
{
|
||||
return await _sysConfigRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取配置信息
|
||||
/// </summary>
|
||||
/// <param name="code"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<dynamic> GetConfigCache(string code)
|
||||
{
|
||||
var value = await _sysCacheService.GetAsync(code);
|
||||
if (string.IsNullOrEmpty(value))
|
||||
{
|
||||
var config = await _sysConfigRep.DetachedEntities.FirstOrDefaultAsync(u => u.Code == code);
|
||||
value = config != null ? config.Value : "";
|
||||
#if DEBUG
|
||||
#else
|
||||
await _sysCacheService.SetAsync(code, value);
|
||||
#endif
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新配置缓存
|
||||
/// </summary>
|
||||
/// <param name="code"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public async Task UpdateConfigCache(string code, object value)
|
||||
{
|
||||
#if DEBUG
|
||||
#else
|
||||
await _sysCacheService.SetAsync(code, value);
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取演示环境开关是否开启,默认为false
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[NonAction]
|
||||
public async Task<bool> GetDemoEnvFlag()
|
||||
{
|
||||
var value = await GetConfigCache("DILON_DEMO_ENV_FLAG");
|
||||
return bool.Parse(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取验证码开关标识
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> GetCaptchaOpenFlag()
|
||||
{
|
||||
var value = await GetConfigCache("DILON_CAPTCHA_OPEN");
|
||||
return bool.Parse(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user