Files
tnb.server/system/Tnb.Systems/System/SysLogService.cs
2023-03-13 15:00:34 +08:00

164 lines
5.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using JNPF.Common.Extension;
using JNPF.Common.Filter;
using JNPF.DatabaseAccessor;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.LinqBuilder;
using JNPF.Logging.Attributes;
using JNPF.Systems.Entitys.Dto.SysLog;
using JNPF.Systems.Entitys.System;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using System.Reflection;
namespace JNPF.Systems;
/// <summary>
/// 系统日志
/// 版 本V3.2
/// 版 权拓通智联科技有限公司http://www.tuotong-tech.com
/// 日 期2021-06-01.
/// </summary>
[ApiDescriptionSettings(Tag = "System", Name = "Log", Order = 211)]
[Route("api/system/[controller]")]
public class SysLogService : IDynamicApiController, ITransient
{
/// <summary>
/// 服务基础仓储.
/// </summary>
private readonly ISqlSugarRepository<SysLogEntity> _repository;
/// <summary>
/// 初始化一个<see cref="SysLogService"/>类型的新实例.
/// </summary>
public SysLogService(
ISqlSugarRepository<SysLogEntity> repository)
{
_repository = repository;
}
#region GET
/// <summary>
/// 获取系统日志列表-登录日志(带分页).
/// </summary>
/// <param name="input">请求参数.</param>
/// <param name="Type">分类.</param>
/// <returns></returns>
[HttpGet("{Type}")]
public async Task<dynamic> GetList([FromQuery] LogListQuery input, int Type)
{
var whereLambda = LinqExpression.And<SysLogEntity>();
whereLambda = whereLambda.And(x => x.Category == Type);
var start = new DateTime();
var end = new DateTime();
if (input.endTime != null && input.startTime != null)
{
start = Convert.ToDateTime(string.Format("{0:yyyy-MM-dd 00:00:00}", input.startTime?.TimeStampToDateTime()));
end = Convert.ToDateTime(string.Format("{0:yyyy-MM-dd 23:59:59}", input.endTime?.TimeStampToDateTime()));
whereLambda = whereLambda.And(x => SqlFunc.Between(x.CreatorTime, start, end));
}
// 关键字用户、IP地址、功能名称
if (!string.IsNullOrEmpty(input.keyword))
whereLambda = whereLambda.And(m => m.UserName.Contains(input.keyword) || m.IPAddress.Contains(input.keyword) || m.ModuleName.Contains(input.keyword));
if (input.ipaddress.IsNotEmptyOrNull())
whereLambda = whereLambda.And(m => m.IPAddress.Contains(input.ipaddress));
if (input.userName.IsNotEmptyOrNull())
whereLambda = whereLambda.And(m => m.UserName.Contains(input.userName));
if (input.moduleName.IsNotEmptyOrNull())
whereLambda = whereLambda.And(m => m.ModuleName == input.moduleName);
if (input.requestMethod.IsNotEmptyOrNull())
whereLambda = whereLambda.And(m => m.RequestMethod == input.requestMethod);
var list = await _repository.AsQueryable().Where(whereLambda).OrderBy(x => x.CreatorTime, OrderByType.Desc).ToPagedListAsync(input.currentPage, input.pageSize);
object output = null;
switch (Type)
{
case 1:
{
var pageList = new SqlSugarPagedList<LogLoginOutput>()
{
list = list.list.Adapt<List<LogLoginOutput>>(),
pagination = list.pagination
};
return PageResult<LogLoginOutput>.SqlSugarPageResult(pageList);
}
case 3:
{
var pageList = new SqlSugarPagedList<LogOperationOutput>()
{
list = list.list.Adapt<List<LogOperationOutput>>(),
pagination = list.pagination
};
return PageResult<LogOperationOutput>.SqlSugarPageResult(pageList);
}
case 4:
{
var pageList = new SqlSugarPagedList<LogExceptionOutput>()
{
list = list.list.Adapt<List<LogExceptionOutput>>(),
pagination = list.pagination
};
return PageResult<LogExceptionOutput>.SqlSugarPageResult(pageList);
}
case 5:
{
var pageList = new SqlSugarPagedList<LogRequestOutput>()
{
list = list.list.Adapt<List<LogRequestOutput>>(),
pagination = list.pagination
};
return PageResult<LogRequestOutput>.SqlSugarPageResult(pageList);
}
}
return output;
}
/// <summary>
/// 操作模块.
/// </summary>
/// <returns></returns>
[HttpGet("ModuleName")]
public async Task<dynamic> ModuleNameSelector()
{
return App.EffectiveTypes
.Where(u => u.IsClass && !u.IsInterface && !u.IsAbstract && typeof(IDynamicApiController).IsAssignableFrom(u))
.SelectMany(u => u.GetMethods(BindingFlags.Public | BindingFlags.Instance))
.Where(x => x.IsDefined(typeof(OperateLogAttribute), false))
.Select(x => new { moduleName = x.GetCustomAttribute<OperateLogAttribute>().ModuleName }).Distinct();
}
#endregion
#region POST
/// <summary>
/// 批量删除.
/// </summary>
/// <param name="input">请求参数.</param>
/// <returns></returns>
[HttpDelete]
[UnitOfWork]
public async Task Delete([FromBody] LogDelInput input)
{
await _repository.AsDeleteable().In(it => it.Id, input.ids).ExecuteCommandAsync();
}
/// <summary>
/// 一键删除.
/// </summary>
/// <param name="type">请求参数.</param>
/// <returns></returns>
[HttpDelete("{type}")]
[UnitOfWork]
public async Task Delete(int type)
{
await _repository.DeleteAsync(x => x.Category == type);
}
#endregion
}