using Longbow.Web.Mvc;
using PetaPoco;
using System;
using System.Collections.Generic;
namespace Bootstrap.DataAccess
{
///
/// 操作日志实体类
///
[TableName("Logs")]
public class Log : Trace
{
///
/// 获得/设置 操作类型
///
public string CRUD { get; set; }
///
/// 获得/设置 请求数据
///
public string RequestData { get; set; }
///
/// 查询所有操作日志信息
///
///
///
///
///
///
public virtual new Page RetrievePages(PaginationOption po, DateTime? startTime, DateTime? endTime, string opType)
{
var sql = new Sql("select * from Logs");
if (startTime.HasValue) sql.Where("LogTime >= @0", startTime.Value);
if (endTime.HasValue) sql.Where("LogTime < @0", endTime.Value.AddDays(1).AddSeconds(-1));
if (startTime == null && endTime == null) sql.Where("LogTime > @0", DateTime.Today.AddMonths(0 - DictHelper.RetrieveExceptionsLogPeriod()));
if (!string.IsNullOrEmpty(opType)) sql.Where("CRUD = @0", opType);
sql.OrderBy($"{po.Sort} {po.Order}");
return DbManager.Create().Page(po.PageIndex, po.Limit, sql);
}
///
/// 查询所有操作日志
///
///
///
///
///
public virtual new IEnumerable RetrieveAll(DateTime? startTime, DateTime? endTime, string opType)
{
var sql = new Sql("select CRUD, UserName, LogTime, Ip, Browser, OS, City, RequestUrl, RequestData from Logs");
if (startTime.HasValue) sql.Where("LogTime >= @0", startTime.Value);
if (endTime.HasValue) sql.Where("LogTime < @0", endTime.Value.AddDays(1).AddSeconds(-1));
if (!string.IsNullOrEmpty(opType)) sql.Where("CRUD = @0", opType);
sql.OrderBy("LogTime");
return DbManager.Create().Fetch(sql);
}
///
/// 删除日志信息
///
///
private static void DeleteLogAsync()
{
System.Threading.Tasks.Task.Run(() =>
{
var dtm = DateTime.Now.AddMonths(0 - DictHelper.RetrieveLogsPeriod());
DbManager.Create().Execute("delete from Logs where LogTime < @0", dtm);
});
}
///
/// 保存新增的日志信息
///
///
///
public virtual bool Save(Log p)
{
if (p == null) throw new ArgumentNullException(nameof(p));
DeleteLogAsync();
DbManager.Create().Save(p);
return true;
}
}
}