using System.Reflection; 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; namespace JNPF.Systems; /// /// 系统日志 /// 版 本:V3.2 /// 版 权:拓通智联科技有限公司(http://www.tuotong-tech.com) /// 日 期:2021-06-01. /// [ApiDescriptionSettings(Tag = "System", Name = "Log", Order = 211)] [Route("api/system/[controller]")] public class SysLogService : IDynamicApiController, ITransient { /// /// 服务基础仓储. /// private readonly ISqlSugarRepository _repository; /// /// 初始化一个类型的新实例. /// public SysLogService( ISqlSugarRepository repository) { _repository = repository; } #region GET /// /// 获取系统日志列表-登录日志(带分页). /// /// 请求参数. /// 分类. /// [HttpGet("{Type}")] public async Task GetList([FromQuery] LogListQuery input, int Type) { var whereLambda = LinqExpression.And(); 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() { list = list.list.Adapt>(), pagination = list.pagination }; return PageResult.SqlSugarPageResult(pageList); } case 3: { var pageList = new SqlSugarPagedList() { list = list.list.Adapt>(), pagination = list.pagination }; return PageResult.SqlSugarPageResult(pageList); } case 4: { var pageList = new SqlSugarPagedList() { list = list.list.Adapt>(), pagination = list.pagination }; return PageResult.SqlSugarPageResult(pageList); } case 5: { var pageList = new SqlSugarPagedList() { list = list.list.Adapt>(), pagination = list.pagination }; return PageResult.SqlSugarPageResult(pageList); } } return output; } /// /// 操作模块. /// /// [HttpGet("ModuleName")] public async Task 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().ModuleName }).Distinct(); } #endregion #region POST /// /// 批量删除. /// /// 请求参数. /// [HttpDelete] [UnitOfWork] public async Task Delete([FromBody] LogDelInput input) { await _repository.AsDeleteable().In(it => it.Id, input.ids).ExecuteCommandAsync(); } /// /// 一键删除. /// /// 请求参数. /// [HttpDelete("{type}")] [UnitOfWork] public async Task Delete(int type) { await _repository.DeleteAsync(x => x.Category == type); } #endregion }