using AutoMapper; using IRaCIS.Application.ExpressionExtend; using IRaCIS.Application.Interfaces; using IRaCIS.Application.ViewModels; using IRaCIS.Core.Application.Contracts.RequestAndResponse; using IRaCIS.Core.Domain.Interfaces; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Infrastructure; using IRaCIS.Infra.Data.ExpressionExtend; using Microsoft.AspNetCore.Http; using System; using System.Linq; using System.Linq.Expressions; namespace IRaCIS.Application.Services { public class LogService : ILogService { private readonly ISystemLogRepository _systemLogRepository; private readonly IUserRepository _userRepository; private readonly IMapper _mapper; private readonly IHttpContextAccessor _context; public LogService(ISystemLogRepository systemLogRepository, IUserRepository userRepository, IMapper mapper, IHttpContextAccessor context) { _systemLogRepository = systemLogRepository; _userRepository = userRepository; _mapper = mapper; _context = context; } public PageOutput GetLogList(QueryLogQueryDTO param) { Expression> logLambda = x => true; DateTime bTime = new DateTime(param.BeginTime.Year, param.BeginTime.Month, param.BeginTime.Day, 0, 0, 1); DateTime eTime = new DateTime(param.EndTime.Year, param.EndTime.Month, param.EndTime.Day, 23, 59, 59); logLambda = logLambda.And(o => o.RequestTime >= bTime && o.RequestTime <= eTime); if (!string.IsNullOrWhiteSpace(param.LogCategory)) { logLambda = logLambda.And(o => o.LogCategory == param.LogCategory); } if (!string.IsNullOrWhiteSpace(param.Keyword.Trim())) { logLambda = logLambda.And(o => o.Params.Contains(param.Keyword.Trim()) || o.Result.Contains(param.Keyword.Trim())); } var a = _systemLogRepository.Find(logLambda).ToList(); var logQueryable = from log in _systemLogRepository.GetAll().Where(logLambda) select new SystemLogDTO { Id = log.Id, LogCategory = log.LogCategory, ApiPath = log.ApiPath, Params = log.Params, Result = log.Result, ElapsedMilliseconds = log.ElapsedMilliseconds, RequestTime = log.RequestTime, ClientIP = log.ClientIP, Message = log.Message, Status = log.Status, OptUserId = log.OptUserId, OptUserName = log.OptUserName }; var count = logQueryable.Count(); var propName = string.Empty; if (string.IsNullOrWhiteSpace(param.SortField)) { propName = "RequestTime"; param.Asc = false; } else { propName = param.SortField; } logQueryable = param.Asc ? logQueryable.OrderBy(propName) : logQueryable.OrderByDescending(propName); logQueryable = logQueryable .Skip((param.PageIndex - 1) * param.PageSize) .Take(param.PageSize); var logList = logQueryable.ToList(); return new PageOutput(param.PageIndex, param.PageSize, count, logList); } public IResponseOutput SaveLog2Db(SystemLogDTO 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.ClientIP = IPHelper.GetIP(_context?.HttpContext?.Request); _systemLogRepository.Add(_mapper.Map(input)); var success = _systemLogRepository.SaveChanges(); return ResponseOutput.Result(success); } } }