Browse Source

[INIT]log文件上传

pull/1/head
zhaozhenjing 3 months ago
parent
commit
66f8008585
  1. 55
      src/2.services/ATS.NonCustodial.Application/Impl/Logs/AuditLogService.cs
  2. 102
      src/2.services/ATS.NonCustodial.Application/Impl/Logs/LoginLogService.cs
  3. 153
      src/2.services/ATS.NonCustodial.Application/Impl/Logs/OperationLogService.cs

55
src/2.services/ATS.NonCustodial.Application/Impl/Logs/AuditLogService.cs

@ -0,0 +1,55 @@
using ATS.NonCustodial.Application.Base;
using ATS.NonCustodial.Application.Contracts.Interfaces.Logs.AuditLog;
using ATS.NonCustodial.AuditLogging.AuditLoggings.Services;
using ATS.NonCustodial.AuditLogging.Dtos.Input;
using ATS.NonCustodial.AuditLogging.Dtos.Output;
using ATS.NonCustodial.AuditLogging.EntityFrameworkCore.Entities;
using ATS.NonCustodial.AuditLogging.Mappers;
using ATS.NonCustodial.DynamicApi;
using ATS.NonCustodial.DynamicApi.Attributes;
using Microsoft.AspNetCore.Mvc;
namespace ATS.NonCustodial.Application.Impl.Logs
{
/// <summary>
/// 审计日志服务
/// </summary>
/// Author:mxg
/// CreatedTimed:2022-04-25 16:31
[DynamicApi(Area = "admin")]
public class AuditLogService : AdminAppServiceBase, IAuditLogService, IDynamicApi
{
#region Identity
protected readonly IAuditLogRepository<AuditLog> AuditLogRepository;
public AuditLogService(IAuditLogRepository<AuditLog> auditLogRepository)
{
AuditLogRepository = auditLogRepository;
}
#endregion Identity
/// <summary>
/// 查询
/// </summary>
/// <param name="filters"></param>
/// <returns></returns>
[HttpPost]
public async Task<AuditLogsDto> GetAsync(AuditLogFilterDto filters)
{
var pagedList = await AuditLogRepository.GetAsync(filters.Event, filters.Source, filters.Category, filters.Created, filters.SubjectIdentifier, filters.SubjectName, filters.Page, filters.PageSize);
var auditLogsDto = pagedList.ToAuditLogModel();
return auditLogsDto;
}
/// <summary>
/// 删除
/// </summary>
/// <param name="deleteOlderThan"></param>
/// <returns></returns>
[HttpDelete]
public virtual async Task DeleteLogsOlderThanAsync(DateTime deleteOlderThan) => await AuditLogRepository.DeleteLogsOlderThanAsync(deleteOlderThan);
}
}

102
src/2.services/ATS.NonCustodial.Application/Impl/Logs/LoginLogService.cs

@ -0,0 +1,102 @@
using ATS.NonCustodial.Application.Base;
using ATS.NonCustodial.Application.Contracts.Interfaces.Logs.LoginLog;
using ATS.NonCustodial.Application.Contracts.Interfaces.Logs.LoginLog.Input;
using ATS.NonCustodial.Application.Contracts.Interfaces.Logs.LoginLog.Output;
using ATS.NonCustodial.Domain.Entities.Logs;
using ATS.NonCustodial.Domain.Shared.OrmRepositories.Basic.EfCore;
using ATS.NonCustodial.DynamicApi;
using ATS.NonCustodial.DynamicApi.Attributes;
using ATS.NonCustodial.Shared.Common.UnifiedResults;
using ATS.NonCustodial.Shared.Extensions;
using ATS.NonCustodial.Shared.Helpers;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace ATS.NonCustodial.Application.Impl.Logs
{
/// <summary>
/// 登录日志服务
/// </summary>
/// Author:mxg
/// CreatedTimed:2022-05-17 10:15 PM
[DynamicApi(Area = "admin")]
public class LoginLogService : AdminAppServiceBase, ILoginLogService, IDynamicApi
{
#region Identity
private readonly IHttpContextAccessor _context;
private readonly IEfRepository<AppLoginLog?, long> _loginLogRepository;
public LoginLogService(
IHttpContextAccessor context,
IEfRepository<AppLoginLog?, long> loginLogRepository
)
{
_context = context;
_loginLogRepository = loginLogRepository;
}
#endregion Identity
/// <summary>
/// 查询登录日志列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResultOutput> GetPageAsync(LogGetPageDto input)
{
var express = GetExpression(input, _loginLogRepository.AsQueryable(false, true));
var rtn = await base.GetPageAsync<AppLoginLog, LogGetPageDto, LoginLogListOutput>(input, express);
return ResultOutput.Ok(rtn);
}
/// <summary>
/// 新增
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<IResultOutput<long>> AddAsync(LoginLogAddInput input)
{
var res = new ResultOutput<long>();
input.IP = IPHelper.GetIP(_context?.HttpContext?.Request);
string ua = _context.HttpContext.Request.Headers["User-Agent"];
if (ua.NotNull())
{
var client = UAParser.Parser.GetDefault().Parse(ua);
var device = client.Device.Family;
device = device.ToLower() == "other" ? "" : device;
input.Browser = client.UA.Family;
input.Os = client.OS.Family;
input.Device = device;
input.BrowserInfo = ua;
}
var entity = Mapper.Map<AppLoginLog>(input);
var id = (await _loginLogRepository.InsertAsync(entity)).Id;
return id > 0 ? res.Ok(id) : res;
}
#region Private
/// <summary>
/// 查询条件
/// </summary>
/// <param name="pageInput"></param>
/// <param name="query"></param>
/// <returns></returns>
private IQueryable<AppLoginLog> GetExpression(LogGetPageDto pageInput, IQueryable<AppLoginLog?> query)
{
query = query
.WhereIf(pageInput.OperatorName.NotNull(), w => pageInput.OperatorName.Contains(w.CreatedUserName));
var express = base.GetEntityAddExpression<AppLoginLog, LogGetPageDto, long>(pageInput, query);
return express;
}
#endregion Private
}
}

153
src/2.services/ATS.NonCustodial.Application/Impl/Logs/OperationLogService.cs

@ -0,0 +1,153 @@
using ATS.NonCustodial.Application.Base;
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.AppCaseManagements.AppCaseManagement;
using ATS.NonCustodial.Application.Contracts.Interfaces.Logs.LoginLog.Input;
using ATS.NonCustodial.Application.Contracts.Interfaces.Logs.OprationLog;
using ATS.NonCustodial.Application.Contracts.Interfaces.Logs.OprationLog.Input;
using ATS.NonCustodial.Application.Contracts.Interfaces.Logs.OprationLog.Output;
using ATS.NonCustodial.Domain.Entities.Logs;
using ATS.NonCustodial.Domain.Shared.AggRootEntities.Dtos;
using ATS.NonCustodial.Domain.Shared.OrmRepositories.Basic.EfCore;
using ATS.NonCustodial.DynamicApi;
using ATS.NonCustodial.DynamicApi.Attributes;
using ATS.NonCustodial.Shared.Common.UnifiedResults;
using ATS.NonCustodial.Shared.Extensions;
using AutoMapper.QueryableExtensions;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace ATS.NonCustodial.Application.Impl.Logs
{
/// <summary>
/// 操作日志服务
/// </summary>
/// Author:mxg
/// CreatedTimed:2022-05-17 10:11 PM
[DynamicApi(Area = "admin")]
public class OperationLogService : AdminAppServiceBase, IOperationLogService, IDynamicApi
{
#region Identity
private readonly IHttpContextAccessor _context;
private readonly IEfRepository<AppOperationLog?, long> _oprationLogRepository;
private readonly IAppCaseManagementService _appCaseManagementService;
public OperationLogService(
IHttpContextAccessor context,
IEfRepository<AppOperationLog?, long> oprationLogRepository,
IAppCaseManagementService appCaseManagementService
)
{
_context = context;
_oprationLogRepository = oprationLogRepository;
_appCaseManagementService = appCaseManagementService;
}
#endregion Identity
/// <summary>
/// 查询操作日志列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResultOutput> GetPageAsync(LogGetPageDto input)
{
var express = await GetExpression(input, _oprationLogRepository.AsQueryable(false, true).Take(3000));
var rtn = await base.GetPageAsync<AppOperationLog, LogGetPageDto, OprationLogListOutput>(input, express);
return ResultOutput.Ok(rtn);
}
/// <summary>
/// 查询操作日志明细
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<IResultOutput> Get(long id)
{
var rtn = await base.GetAsync<AppOperationLog, OprationLogListOutput, long>(_oprationLogRepository, id);
return ResultOutput.Ok(rtn);
}
/// <summary>
/// 新增
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<IResultOutput> AddAsync(OprationLogAddInput input)
{
string ua = _context.HttpContext!.Request.Headers["User-Agent"];
var client = UAParser.Parser.GetDefault().Parse(ua);
var device = client.Device.Family;
device = device.ToLower() == "other" ? "" : device;
input.Browser = client.UA.Family;
input.Os = client.OS.Family;
input.Device = device;
input.BrowserInfo = ua;
input.NickName = User.NickName;
input.IpAddress = _context.HttpContext.Connection.RemoteIpAddress?.ToString().Replace("::ffff:", "")/*IPHelper.GetIP(_context?.HttpContext?.Request)*/;
var entity = Mapper.Map<AppOperationLog>(input);
var id = ((await _oprationLogRepository.InsertAsync(entity))!).Id;
return ResultOutput.Result(id > 0);
}
/// <summary>
/// 业务工作台==>最新5条操作日志
/// </summary>
/// <returns></returns>
public async Task<IResultOutput> OperationBusinessWorkbench()
{
var userIds = await _appCaseManagementService.GetUserIdListByCurrentUser();
var dataList = await _oprationLogRepository.AsQueryable(false, true)
.Where(w => w.CreatedUserId != null && userIds.Contains(w.CreatedUserId.Value))
.OrderByDescending(w => w.CreatedTime)
.Skip(0)
.Take(5)
.ProjectTo<OprationLogListOutput>(Mapper.ConfigurationProvider)
.ToListAsync();
return ResultOutput.Ok(dataList);
}
/// <summary>
/// 批量删除操作日志
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<IResultOutput> BatchDeleteAsync(BatchIdsInput input)
{
var rtn = await _oprationLogRepository.DeleteAsync(w => input.Ids.Contains(w.Id));
return ResultOutput.Ok(rtn > 0);
}
#region Private
/// <summary>
/// 查询条件
/// </summary>
/// <param name="pageInput"></param>
/// <param name="query"></param>
/// <returns></returns>
private async Task<IQueryable<AppOperationLog>> GetExpression(LogGetPageDto pageInput, IQueryable<AppOperationLog?> query)
{
var userIds = await _appCaseManagementService.GetUserIdListByCurrentUser();
query = query
.Where(w => w.CreatedUserId != null && userIds.Contains(w.CreatedUserId.Value))
.WhereIf(pageInput.OperatorName.NotNull(), w => w.CreatedUserName.Contains(pageInput.OperatorName))
.WhereIf(pageInput.Device.NotNull(), w => w.Device==pageInput.Device)
.WhereIf(pageInput.NickName.NotNull(), w => w.NickName==pageInput.NickName);
var express = base.GetEntityAddExpression<AppOperationLog, LogGetPageDto, long>(pageInput, query);
return express;
}
#endregion Private
}
}
Loading…
Cancel
Save