/// <summary> /// 异步写日志 主要用于后台程序记录 1添加 2编辑 3修改 4常规日志 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="tableName">日志表名 方法内会自动统一转小写</param> /// <param name="logContent">日志内容</param> /// <param name="kIDValue">主键字段对应的值 如 KID 的值</param> /// <param name="reqParams">请求的对象 仅用于日志展示</param> /// <param name="opertionUser">操作用户</param> /// <param name="operLogType">枚举操作类型</param> /// <param name="keyFields">主键字段名 默认KID</param> public static void WriteDbLog <T>(string tableName, string logContent, object kIDValue, T reqParams, OpertionUser opertionUser, OperLogType operLogType = OperLogType.常规日志, string keyFields = "KID") { ThreadPool.QueueUserWorkItem(state => { if (IsWriteOpertionLog) { #region 得到原始数据 日志表前一条记录 var oldlog = GetObjectLastState(tableName, kIDValue, keyFields); var newlog = ""; using (CommonRepository db = new CommonRepository(tableName, keyFields)) { var dr = db.GetRow($"{keyFields}='{kIDValue.ToString()}'"); newlog = dr.Table.ToJsonString(); } #endregion var dic = new Dictionary <string, object>(); dic.Add(nameof(Fd_sys_operationlog.TableName), tableName.ToLower().Trim()); dic.Add(nameof(Fd_sys_operationlog.TablePriKeyField), keyFields); dic.Add(nameof(Fd_sys_operationlog.TablePriKeyValue), kIDValue); dic.Add(nameof(Fd_sys_operationlog.CreateTime), DateTime.Now.ToStr()); dic.Add(nameof(Fd_sys_operationlog.LogContent), logContent); dic.Add(nameof(Fd_sys_operationlog.CreateUserId), opertionUser.IsNull() ? "1" : opertionUser.UserId); dic.Add(nameof(Fd_sys_operationlog.CreateUserName), opertionUser.IsNull() ? "系统用户" : opertionUser.UserName); dic.Add(nameof(Fd_sys_operationlog.IpAddr), (opertionUser.IsNull() ? IPHelper.GetClientIP() : opertionUser.UserClientIp)); dic.Add(nameof(Fd_sys_operationlog.OperType), operLogType.GetHashCode()); dic.Add(nameof(Fd_sys_operationlog.ReqData), reqParams.IsNull() ? "" : reqParams.ToJsonString()); dic.Add(nameof(Fd_sys_operationlog.ResOldData), oldlog); dic.Add(nameof(Fd_sys_operationlog.ResResult), newlog); Add(dic); } }, null); }
/// <summary> /// 异步写日志 主要用于后台程序记录 1添加 2编辑 3修改 4常规日志 /// </summary> /// <param name="tableName">日志表名 方法内会自动统一转小写</param> /// <param name="logContent">日志内容</param> /// <param name="kIDValue">主键字段对应的值 如 KID 的值</param> /// <param name="reqParams">请求的字典数据,仅用于日志展示</param> /// <param name="operLogType">操作类型</param> /// <param name="keyFields">主键字段名 默认KID</param> public static void WriteDbLog(string tableName, string logContent, object kIDValue, Dictionary <string, object> reqParams, OperLogType operLogType = OperLogType.常规日志, OpertionUser opertionUser = null, string keyFields = "KID") { ThreadPool.QueueUserWorkItem(state => { if (IsWriteOpertionLog) { #region 得到原始数据 日志表前一条记录 var oldlog = GetObjectLastState(tableName, kIDValue, keyFields); var newlog = ""; using (CommonRepository db = new CommonRepository(tableName, keyFields)) { var dr = db.GetRow($"{keyFields}='{kIDValue.ToString()}'"); newlog = dr.Table.ToDictionary().ToJsonString(); } #endregion #region 处理修改者信息 object updateUserId = "1", updateUserName = "******", clientIpAddr = IPHelper.GetClientIP(); if (opertionUser != null) { updateUserId = opertionUser?.UserId; updateUserName = opertionUser?.UserName; clientIpAddr = opertionUser?.UserClientIp; } else { if (reqParams != null) { if (reqParams.ContainsKey("UpdateUserId")) { updateUserId = reqParams["UpdateUserId"]; } if (reqParams.ContainsKey("UpdateUserName")) { updateUserName = reqParams["UpdateUserName"]; } if (reqParams.ContainsKey("ClientIpAddr")) { clientIpAddr = reqParams["ClientIpAddr"]; } } } #endregion var dic = new Dictionary <string, object>(); dic.Add(nameof(Fd_sys_operationlog.TableName), tableName.ToLower().Trim()); dic.Add(nameof(Fd_sys_operationlog.TablePriKeyField), keyFields); dic.Add(nameof(Fd_sys_operationlog.TablePriKeyValue), kIDValue); dic.Add(nameof(Fd_sys_operationlog.CreateTime), DateTime.Now.ToStr()); dic.Add(nameof(Fd_sys_operationlog.LogContent), logContent); dic.Add(nameof(Fd_sys_operationlog.CreateUserId), updateUserId); dic.Add(nameof(Fd_sys_operationlog.CreateUserName), updateUserName); dic.Add(nameof(Fd_sys_operationlog.IpAddr), clientIpAddr); dic.Add(nameof(Fd_sys_operationlog.OperType), operLogType.GetHashCode()); dic.Add(nameof(Fd_sys_operationlog.ReqData), reqParams.IsNull() ? "" : reqParams.ToJsonString()); dic.Add(nameof(Fd_sys_operationlog.ResOldData), oldlog); dic.Add(nameof(Fd_sys_operationlog.ResResult), newlog); Add(dic); } }, null); }