using Longbow.Web.Mvc; using PetaPoco; using System; namespace Bootstrap.DataAccess { /// /// /// public class Trace { /// /// 获得/设置 操作日志主键ID /// public string Id { get; set; } /// /// 获得/设置 用户名称 /// public string UserName { get; set; } /// /// 获得/设置 操作时间 /// public DateTime LogTime { get; set; } /// /// 获得/设置 客户端IP /// public string Ip { get; set; } /// /// /// public string City { get; set; } /// /// /// public string Browser { get; set; } /// /// /// public string OS { get; set; } /// /// 获取/设置 请求网址 /// public string RequestUrl { get; set; } /// /// /// public string UserAgent { get; set; } /// /// 保存访问历史记录 /// /// public virtual bool Save(Trace p) { if (p == null) throw new ArgumentNullException(nameof(p)); DbManager.Create().Save(p); ClearTraces(); return true; } /// /// /// /// /// public virtual Page Retrieves(PaginationOption po, DateTime? startTime, DateTime? endTime) { var sql = new Sql("select * from Traces"); if (startTime.HasValue) sql.Append("where LogTime > @0", startTime.Value); if (endTime.HasValue) sql.Append("where LogTime < @0", endTime.Value.AddDays(1).AddSeconds(-1)); if (startTime == null && endTime == null) sql.Append("where LogTime > @0", DateTime.Today.AddMonths(0 - DictHelper.RetrieveAccessLogPeriod())); sql.Append($"order by {po.Sort} {po.Order}"); return DbManager.Create().Page(po.PageIndex, po.Limit, sql); } private static void ClearTraces() => System.Threading.Tasks.Task.Run(() => { DbManager.Create().Execute("delete from Traces where LogTime < @0", DateTime.Now.AddMonths(0 - DictHelper.RetrieveAccessLogPeriod())); }); } }