using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WMS.Util; using WMS.Info; using SqlSugar; using System.Diagnostics; using System.Reflection; namespace WMS.Core { public class SysLogBLLCore { public static void WriteLog(BLLExecInfo BLLExec, ELogType eLogType) { try { SYS_LOG log = new SYS_LOG(); log.F_NO = Guid.NewGuid().ToString(); log.F_RUNMS = (decimal)CommonUtil.TimerEnd(BLLExec.RunWatch); log.F_LOGTIME = DateTime.Now; log.F_APPTYPENUM = 0; log.F_TYPENUM = (int)eLogType; if (BLLExec.Ex == null) { log.F_TEXT = string.IsNullOrWhiteSpace(BLLExec.BLLObj.SuccessMsg) ? "操作成功。" : BLLExec.BLLObj.SuccessMsg; log.F_ISSUCC = 1; } else { log.F_TEXT = BLLExec.Ex.Message; log.F_ISSUCC = 0; } if (BLLExec.BLLObj != null) { log.F_APPTYPENUM = (int)BLLExec.BLLObj.LoginUser.AppType; log.F_CLASSNO = BLLCore.GetBLLClassNo(BLLExec.BLLObj); log.F_CLASSDESC = BLLExec.BLLObj.BLLDesc; StringBuilder sb = new StringBuilder(); sb.Append("---------------------------------------请求数据-----------------------------------------------------------------"); sb.AppendLine(BLLExec.BLLObj.InJsonData); if (BLLExec.Ex != null) { sb.AppendLine("----------------------------------------异常数据----------------------------------------------------------------"); sb.AppendLine(BLLExec.Ex.ToString()); sb.AppendLine("----------------------------------------异常内部数据----------------------------------------------------------------"); if (BLLExec.Ex.InnerException == null) { sb.AppendLine(string.Format("Message:{0} Source:{1} StackTrace:{2} ", BLLExec.Ex.Message, BLLExec.Ex.Source, BLLExec.Ex.StackTrace)); } else { sb.AppendLine(string.Format("Message:{0} Source:{1} StackTrace:{2} ", BLLExec.Ex.InnerException.Message, BLLExec.Ex.InnerException.Source, BLLExec.Ex.InnerException.StackTrace)); } } log.F_TEXTDTL = sb.ToString(); log.F_IPADDRESS = BLLExec.BLLObj.LoginUser.IPAddress; log.F_USERNO = BLLExec.BLLObj.LoginUser.UserNo; log.F_APPDEVICENO = BLLExec.BLLObj.LoginUser.AppDeviceNo; } SysDbCore.GetDbCtx().Insertable(log).ExecuteCommand(); } catch (Exception ex) { LogFactory.GetLogger("WMS.Core.SysLogCore.WriteLog").Error(ex.ToString()); } } public static void WriteLog(LoginUserInfo LoginUser, string ModuleNo, string ModuleName, string UrlAddress) { try { SYS_LOG log = new SYS_LOG(); log.F_NO = Guid.NewGuid().ToString(); log.F_RUNMS = 0; log.F_LOGTIME = DateTime.Now; log.F_APPTYPENUM = (int)LoginUser.AppType; log.F_TYPENUM = (int)ELogType.Visit; log.F_TEXT = string.Format("{0}[{1},{2}]", ModuleNo, ModuleName, UrlAddress); log.F_ISSUCC = 1; log.F_IPADDRESS = LoginUser.IPAddress; log.F_CLASSNO = "VisitModule"; log.F_CLASSDESC = "模块访问"; log.F_APPDEVICENO = LoginUser.AppDeviceNo; log.F_USERNO = LoginUser.UserNo; var d =new { ModuleNo, ModuleName, UrlAddress, }; log.F_TEXTDTL = d.ToJson(); SysDbCore.GetDbCtx().Insertable(log).ExecuteCommand(); } catch (Exception ex) { LogFactory.GetLogger("WMS.Core.SysLogCore.WriteLog").Error(ex.ToString()); } } public static void WriteLog(LoginUserInfo LoginUser,dynamic JsonData, string ClassNo, string ClassDesc, Stopwatch ts, ELogType eLogType, Exception ex) { try { string injson = JsonData == null ? "" : JsonData.ToJson(); SYS_LOG log = new SYS_LOG(); log.F_NO = Guid.NewGuid().ToString(); log.F_RUNMS = (decimal)CommonUtil.TimerEnd(ts); log.F_LOGTIME = DateTime.Now; log.F_APPTYPENUM = (int)LoginUser.AppType; log.F_TYPENUM = (int)eLogType; log.F_TEXT = ex==null?"操作成功。":ex.Message; log.F_ISSUCC = ex == null?1:0; log.F_IPADDRESS = LoginUser.IPAddress; log.F_CLASSNO = ClassNo; log.F_CLASSDESC = ClassDesc; log.F_APPDEVICENO = LoginUser.AppDeviceNo; log.F_USERNO = LoginUser.UserNo; log.F_TEXTDTL = injson; SysDbCore.GetDbCtx().Insertable(log).ExecuteCommand(); } catch (Exception e) { CommonUtil.TimerEnd(ts); LogFactory.GetLogger("WMS.Core.SysLogCore.WriteLog").Error(e.ToString()); } } public static void WriteLog(LoginUserInfo LoginUser, string ClassDesc,dynamic JsonData, Action action) { Stopwatch ts = CommonUtil.TimerStart(); StackTrace ss = new StackTrace(true); //index:0为本身的方法;1为调用方法;2为其上上层,依次类推 MethodBase mb = ss.GetFrame(1).GetMethod(); string ClassNo = mb.ReflectedType.FullName + "." + mb.Name; try { action.Invoke(); WriteLog(LoginUser, JsonData, ClassNo, ClassDesc, ts, ELogType.Work, null); } catch (Exception ex) { WriteLog(LoginUser, JsonData, ClassNo, ClassDesc, ts, ELogType.Work, ex); throw ex; } } /// /// 清空日志 /// /// 日志分类Id /// 保留时间段内 public static void RemoveLog(int LogType, string keepTime) { try { DateTime operateTime = DateTime.Now; if (keepTime == "7")//保留近一周 { operateTime = DateTime.Now.AddDays(-7); } else if (keepTime == "1")//保留近一个月 { operateTime = DateTime.Now.AddMonths(-1); } else if (keepTime == "3")//保留近三个月 { operateTime = DateTime.Now.AddMonths(-3); } SysDbCore.GetDbCtx().Deleteable().Where(it => it.F_LOGTIME <= operateTime && it.F_TYPENUM == LogType).ExecuteCommand(); } catch (Exception ex) { throw ex; } } /// /// 日志列表 /// /// 分页 /// 查询参数 /// 操作用户Id /// public static IEnumerable GetPageList(Pagination pagination, string queryJson, string UserNo) { try { var queryParam = queryJson.ToJObject(); var db = SysDbCore.GetDbCtx().Queryable(); //// 日志分类 if (!queryParam["CategoryId"].IsEmpty()) { int categoryId = queryParam["CategoryId"].ToInt(); db.WhereIF(true, it => it.F_TYPENUM == categoryId); } // 操作时间 if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty()) { DateTime startTime = queryParam["StartTime"].ToDate(); DateTime endTime = queryParam["EndTime"].ToDate(); db.WhereIF(true, it => it.F_LOGTIME >= startTime && it.F_LOGTIME <= endTime); } // 操作用户Id if (!UserNo.IsEmpty()) { db.WhereIF(true, it => it.F_USERNO == UserNo); } int count = 0; var page = db.OrderBy(it => it.F_LOGTIME, OrderByType.Desc).ToPageList(pagination.page, pagination.rows, ref count); pagination.records = count; return page; } catch (Exception ex) { throw ex; } } } }