#region using System; using System.Data; using System.Text; using CSFramework.DB; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using CSFrameworkV5.Interfaces; using CSFrameworkV5.Models; #endregion namespace CSFrameworkV5.DataAccess { public class dalLog : dalBase, IBridge_Log { /// /// 构造器 /// /// 当前用户登录信息 public dalLog(Loginer user) : base(user) { _Database = DatabaseProvider.SystemDatabase; } public void ClearAll() { _Database.ExecuteSQL("DELETE FROM sys_LogOperation"); } public void ClearLog(DateTime beginDate, DateTime endDate) { var sql = $"DELETE FROM sys_LogOperation WHERE OperationTime BETWEEN {_Database.ParamSymboName}D1 AND {_Database.ParamSymboName}D2"; var cmd = _Database.CreateCommand(sql); cmd.AddParam("D1", DbType.DateTime, beginDate); cmd.AddParam("D2", DbType.DateTime, endDate); _Database.ExecuteCommand(cmd.Command); } public void ClearLog(string user, DateTime beginDate, DateTime endDate) { var sql = $"DELETE FROM sys_LogOperation WHERE Account={_Database.ParamSymboName}Account AND OperationTime BETWEEN {_Database.ParamSymboName}D1 AND {_Database.ParamSymboName}D2"; var cmd = _Database.CreateCommand(sql); cmd.AddParam("Account", DbType.String, user); cmd.AddParam("D1", DbType.DateTime, beginDate); cmd.AddParam("D2", DbType.DateTime, endDate); _Database.ExecuteCommand(cmd.Command); } public int DeleteLoginLog(string isids) { var cmd = _Database.CreateSqlProc("usp_DeleteLoginLog"); cmd.AddParam("isids", isids); var i = _Database.ExecuteCommand(cmd.Command); return i; } public int DeleteOperateLog(string isids) { var cmd = _Database.CreateSqlProc("usp_DeleteOperateLog"); cmd.AddParam("isids", isids); var i = _Database.ExecuteCommand(cmd.Command); return i; } public DataSet GetDynamicReport(string[] years) { //组合SQL1 var sb = new StringBuilder(); sb.AppendLine("SELECT Account,OperationType, "); for (var i = 0; i <= years.Length - 1; i++) { var year = years[i].Trim(); //必须去空格! var item = $" SUM(CASE WHEN YEAR(OperationTime)={year} THEN 1 ELSE 0 END) AS Y{year} "; if (i < years.Length - 1) item += ", "; sb.AppendLine(item); } sb.AppendLine("FROM sys_LogOperation "); sb.AppendLine("GROUP BY Account,OperationType; "); var sql1 = sb.ToStringEx(); var p = DatabaseProvider.SystemDatabase.ParamSymboName; //组合SQL2 var sql2 = "SELECT YEAR(OperationTime) AS YearItem, " + " SUM(CASE WHEN OperationType = " + p + "OperationType1 THEN 1 ELSE 0 END) AS OpenForm, " + " SUM(CASE WHEN OperationType = " + p + "OperationType2 THEN 1 ELSE 0 END) AS Exception, " + " SUM(CASE WHEN OperationType = " + p + "OperationType3 THEN 1 ELSE 0 END) AS CustomError " + "FROM sys_LogOperation " + "GROUP BY YEAR(OperationTime); "; var cmd = DatabaseProvider.SystemDatabase.CreateCommand(sql1 + sql2); cmd.AddParam("OperationType1", "OpenForm"); cmd.AddParam("OperationType2", "Exception"); cmd.AddParam("OperationType3", "CustomError"); var ds = DatabaseProvider.SystemDatabase.GetDataSet(cmd.Command); return ds; } public DataTable QueryLoginLog(string loginType, string loginUser, string loginIP, string loginMAC, DateTime LoginD1, DateTime LoginD2) { var cmd = _Database.CreateCommand(""); var p = _Database.ParamSymboName; //SQL参数符号 var sb = new StringBuilder(); sb.AppendLine( "SELECT isid,Account,LoginResult,CurrentTime,IP,MAC,LoginType FROM sys_LogLogin WHERE 1=1 "); if (!string.IsNullOrEmpty(loginType)) { sb.AppendLine($" AND LoginType={p}LoginType"); cmd.AddParam("LoginType", loginType); } if (!string.IsNullOrEmpty(loginUser)) { sb.AppendLine($" AND Account={p}Account"); cmd.AddParam("Account", loginUser); } if (!string.IsNullOrEmpty(loginIP)) { sb.AppendLine($" AND IP={p}IP"); cmd.AddParam("IP", loginIP); } if (!string.IsNullOrEmpty(loginMAC)) { sb.AppendLine($" AND MAC={p}MAC"); cmd.AddParam("MAC", loginMAC); } if (LoginD1 > DateTime.Parse("1901-01-01")) { sb.AppendLine($" AND CurrentTime>={p}CurrentTime1"); cmd.AddParam("CurrentTime1", ConvertEx.ToCharYYYYMMDDLong(LoginD1)); } if (LoginD2 > DateTime.Parse("1901-01-01")) { sb.AppendLine($" AND CurrentTime<={p}CurrentTime2"); cmd.AddParam("CurrentTime2", ConvertEx.ToCharYYYYMMDDLong(LoginD2)); } cmd.Command.CommandText = CodeSafeHelper.GetSafeSQL(sb.ToStringEx()); return _Database.GetTable(cmd.Command, "sys_LogLogin"); } public DataTable QueryOperateLog(string Content, DateTime Date1, DateTime Date2, string OperateType, string User) { var cmd = _Database.CreateCommand(""); var p = _Database.ParamSymboName; //SQL参数符号 var sb = new StringBuilder(); sb.AppendLine("SELECT * FROM sys_LogOperation WHERE 1=1 "); if (!string.IsNullOrEmpty(Content)) { sb.AppendLine( $" AND (MSG LIKE {p}MSG OR FormName LIKE {p}FormName OR FormCaption LIKE {p}FormCaption OR MenuName LIKE {p}MenuName)"); cmd.AddParam("MSG", "%" + Content + "%"); cmd.AddParam("FormName", "%" + Content + "%"); cmd.AddParam("FormCaption", "%" + Content + "%"); cmd.AddParam("MenuName", "%" + Content + "%"); } if (!string.IsNullOrEmpty(OperateType)) { sb.AppendLine($" AND OperationType={p}OperateType"); cmd.AddParam("OperateType", OperateType); } if (!string.IsNullOrEmpty(User)) { sb.AppendLine($" AND Account={p}Account"); cmd.AddParam("Account", User); } if (Date1 > DateTime.Parse("1901-01-01")) { sb.AppendLine($" AND OperationTime>={p}OperationTime1"); cmd.AddParam("OperationTime1", Date1); } if (Date2 > DateTime.Parse("1901-01-01")) { sb.AppendLine($" AND OperationTime<={p}OperationTime2"); cmd.AddParam("OperationTime2", Date2); } cmd.Command.CommandText = CodeSafeHelper.GetSafeSQL(sb.ToStringEx()); return _Database.GetTable(cmd.Command, sys_LogOperation.__TableName); } /// /// 写操作日志 /// /// String或sys_LogOperation对象 public void WriteLog(object content) { if (content is sys_LogOperation) { var log = content as sys_LogOperation; var data = new DbDataUpdate(_Database); data.AddObject(log, "isid"); } else if (content is string) { var log = new sys_LogOperation { MSG = content.ToStringEx(), OperationTime = DateTime.Now, OperationType = LogTypeSystem.Normal.ToStringEx() }; var data = new DbDataUpdate(_Database); data.AddObject(log, "isid"); } } /// /// 高级查询 - 查询条件参数化 /// /// /// /// public object AdvancedSearch(string whereSQL, DbParameterModel[] parameters) { var sql = "SELECT * FROM sys_LogOperation WHERE 1=1 "; var cmd = _Database.CreateCommand(""); var p = _Database.ParamSymboName; //SQL参数符号 //有查询条件 if (!string.IsNullOrWhiteSpace(whereSQL)) { //替换参数符号 whereSQL = whereSQL.Replace(DbParameterModel.ParamSymbol, p); sql = sql + " AND " + whereSQL; if (parameters != null) foreach (var m in parameters) //替换参数符号 cmd.AddParam( m.ParamName.Replace(DbParameterModel.ParamSymbol, p), m.ParamValue); } //返回DataTable cmd.Command.CommandText = CodeSafeHelper.GetSafeSQL(sql); return _Database.GetTable(cmd.Command, sys_LogOperation.__TableName); } } }