zoukankan      html  css  js  c++  java
  • 日志系统

    //=====================================================================================
    // All Rights Reserved , Copyright @ Learun 2014
    // Software Developers @ Learun 2014
    //=====================================================================================
    
    using LeaRun.DataAccess;
    using LeaRun.Entity;
    using LeaRun.Repository;
    using LeaRun.Utilities;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Data.Common;
    using System.Reflection;
    using System.Text;
    using System.Threading;
    
    namespace LeaRun.Business
    {
        /// <summary>
        /// 系统日志表
        /// <author>
        ///        <name>she</name>
        ///        <date>2014.07.22 22:43</date>
        /// </author>
        /// </summary>
        public class Base_SysLogBll : RepositoryFactory<Base_SysLog>
        {
            #region 静态实例化
            private static Base_SysLogBll item;
            public static Base_SysLogBll Instance
            {
                get
                {
                    if (item == null)
                    {
                        item = new Base_SysLogBll();
                    }
                    return item;
                }
            }
            #endregion
    
            public Base_SysLog SysLog = new Base_SysLog();
    
            #region 写入操作日志
            /// <summary>
            /// 写入作业日志
            /// </summary>
            /// <param name="ObjectId">对象主键</param>
            /// <param name="OperationType">操作类型</param>
            /// <param name="Status">状态</param>
            /// <param name="Remark">操作说明</param>
            /// <returns></returns>
            public void WriteLog(string ObjectId, OperationType OperationType, string Status, string Remark = "")
            {
                SysLog.SysLogId = CommonHelper.GetGuid;
                SysLog.ObjectId = ObjectId;
                SysLog.LogType = CommonHelper.GetString((int)OperationType);
                if (ManageProvider.Provider.IsOverdue())
                {
                    SysLog.IPAddress = ManageProvider.Provider.Current().IPAddress;
                    SysLog.IPAddressName = ManageProvider.Provider.Current().IPAddressName;
                    SysLog.CompanyId = ManageProvider.Provider.Current().CompanyId;
                    SysLog.DepartmentId = ManageProvider.Provider.Current().DepartmentId;
                    SysLog.CreateUserId = ManageProvider.Provider.Current().UserId;
                    SysLog.CreateUserName = ManageProvider.Provider.Current().UserName;
                }
                SysLog.ModuleId = DESEncrypt.Decrypt(CookieHelper.GetCookie("ModuleId"));
                SysLog.Remark = Remark;
                SysLog.Status = Status;
                ThreadPool.QueueUserWorkItem(new WaitCallback(WriteLogUsu), SysLog);//放入异步执行
            }
    
            private void WriteLogUsu(object obSysLog)
            {
                Base_SysLog VSysLog = (Base_SysLog)obSysLog;
                DataFactory.Database().Insert(VSysLog);
            }
            /// <summary>
            /// 写入作业日志(新增操作)
            /// </summary>
            /// <param name="entity">实体对象</param>
            /// <param name="OperationType">操作类型</param>
            /// <param name="Status">状态</param>
            /// <param name="Remark">操作说明</param>
            /// <returns></returns>
            public void WriteLog<T>(T entity, OperationType OperationType, string Status, string Remark = "")
            {
                IDatabase database = DataFactory.Database();
                DbTransaction isOpenTrans = database.BeginTrans();
                try
                {
                    SysLog.SysLogId = CommonHelper.GetGuid;
                    SysLog.ObjectId = DatabaseCommon.GetKeyFieldValue(entity).ToString();
                    SysLog.LogType = CommonHelper.GetString((int)OperationType);
                    SysLog.IPAddress = ManageProvider.Provider.Current().IPAddress;
                    SysLog.IPAddressName = ManageProvider.Provider.Current().IPAddressName;
                    SysLog.CompanyId = ManageProvider.Provider.Current().CompanyId;
                    SysLog.DepartmentId = ManageProvider.Provider.Current().DepartmentId;
                    SysLog.CreateUserId = ManageProvider.Provider.Current().UserId;
                    SysLog.CreateUserName = ManageProvider.Provider.Current().UserName;
                    SysLog.ModuleId = DESEncrypt.Decrypt(CookieHelper.GetCookie("ModuleId"));
                    if (Remark == "")
                    {
                        SysLog.Remark = DatabaseCommon.GetClassName<T>();
                    }
                    SysLog.Remark = Remark;
                    SysLog.Status = Status;
                    database.Insert(SysLog, isOpenTrans);
                    //添加日志详细信息
                    Type objTye = typeof(T);
                    foreach (PropertyInfo pi in objTye.GetProperties())
                    {
                        object value = pi.GetValue(entity, null);
                        if (value != null && value.ToString() != "&nbsp;" && value.ToString() != "")
                        {
    
                            Base_SysLogDetail syslogdetail = new Base_SysLogDetail();
                            syslogdetail.SysLogDetailId = CommonHelper.GetGuid;
                            syslogdetail.SysLogId = SysLog.SysLogId;
                            syslogdetail.PropertyField = pi.Name;
                            syslogdetail.PropertyName = DatabaseCommon.GetFieldText(pi);
                            syslogdetail.NewValue = "" + value + "";
                            database.Insert(syslogdetail, isOpenTrans);
                        }
                    }
                    database.Commit();
                }
                catch
                {
                    database.Rollback();
                }
            }
            /// <summary>
            /// 写入作业日志(更新操作)
            /// </summary>
            /// <param name="oldObj">旧实体对象</param>
            /// <param name="newObj">新实体对象</param>
            /// <param name="OperationType">操作类型</param>
            /// <param name="Status">状态</param>
            /// <param name="Remark">操作说明</param>
            /// <returns></returns>
            public void WriteLog<T>(T oldObj, T newObj, OperationType OperationType, string Status, string Remark = "")
            {
                IDatabase database = DataFactory.Database();
                DbTransaction isOpenTrans = database.BeginTrans();
                try
                {
                    SysLog.SysLogId = CommonHelper.GetGuid;
                    SysLog.ObjectId = DatabaseCommon.GetKeyFieldValue(newObj).ToString();
                    SysLog.LogType = CommonHelper.GetString((int)OperationType);
                    SysLog.IPAddress = ManageProvider.Provider.Current().IPAddress;
                    SysLog.IPAddressName = ManageProvider.Provider.Current().IPAddressName;
                    SysLog.CompanyId = ManageProvider.Provider.Current().CompanyId;
                    SysLog.DepartmentId = ManageProvider.Provider.Current().DepartmentId;
                    SysLog.CreateUserId = ManageProvider.Provider.Current().UserId;
                    SysLog.CreateUserName = ManageProvider.Provider.Current().UserName;
                    SysLog.ModuleId = DESEncrypt.Decrypt(CookieHelper.GetCookie("ModuleId"));
                    if (Remark == "")
                    {
                        SysLog.Remark = DatabaseCommon.GetClassName<T>();
                    }
                    SysLog.Remark = Remark;
                    SysLog.Status = Status;
                    database.Insert(SysLog, isOpenTrans);
                    //添加日志详细信息
                    Type objTye = typeof(T);
                    foreach (PropertyInfo pi in objTye.GetProperties())
                    {
                        object oldVal = pi.GetValue(oldObj, null);
                        object newVal = pi.GetValue(newObj, null);
                        if (!Equals(oldVal, newVal))
                        {
                            if (oldVal != null && oldVal.ToString() != "&nbsp;" && oldVal.ToString() != "" && newVal != null && newVal.ToString() != "&nbsp;" && newVal.ToString() != "")
                            {
                                Base_SysLogDetail syslogdetail = new Base_SysLogDetail();
                                syslogdetail.SysLogDetailId = CommonHelper.GetGuid;
                                syslogdetail.SysLogId = SysLog.SysLogId;
                                syslogdetail.PropertyField = pi.Name;
                                syslogdetail.PropertyName = DatabaseCommon.GetFieldText(pi);
                                syslogdetail.NewValue = "" + newVal + "";
                                syslogdetail.OldValue = "" + oldVal + "";
                                database.Insert(syslogdetail, isOpenTrans);
                            }
                        }
                    }
                    database.Commit();
                }
                catch
                {
                    database.Rollback();
                }
            }
            /// <summary>
            /// 写入作业日志(删除操作)
            /// </summary>
            /// <param name="oldObj">旧实体对象</param>
            /// <param name="KeyValue">对象主键</param>
            /// <param name="Status">状态</param>
            /// <param name="Remark">操作说明</param>
            public void WriteLog<T>(string[] KeyValue, string Status, string Remark = "") where T : new()
            {
                IDatabase database = DataFactory.Database();
                DbTransaction isOpenTrans = database.BeginTrans();
                try
                {
                    foreach (var item in KeyValue)
                    {
                        T Oldentity = database.FindEntity<T>(item.ToString());
                        SysLog.SysLogId = CommonHelper.GetGuid;
                        SysLog.ObjectId = item;
                        SysLog.LogType = CommonHelper.GetString((int)OperationType.Delete);
                        SysLog.IPAddress = ManageProvider.Provider.Current().IPAddress;
                        SysLog.IPAddressName = ManageProvider.Provider.Current().IPAddressName;
                        SysLog.CompanyId = ManageProvider.Provider.Current().CompanyId;
                        SysLog.DepartmentId = ManageProvider.Provider.Current().DepartmentId;
                        SysLog.CreateUserId = ManageProvider.Provider.Current().UserId;
                        SysLog.CreateUserName = ManageProvider.Provider.Current().UserName;
                        SysLog.ModuleId = DESEncrypt.Decrypt(CookieHelper.GetCookie("ModuleId"));
                        if (Remark == "")
                        {
                            SysLog.Remark = DatabaseCommon.GetClassName<T>();
                        }
                        SysLog.Remark = Remark;
                        SysLog.Status = Status;
                        database.Insert(SysLog, isOpenTrans);
                        //添加日志详细信息
                        Type objTye = typeof(T);
                        foreach (PropertyInfo pi in objTye.GetProperties())
                        {
                            object value = pi.GetValue(Oldentity, null);
                            if (value != null && value.ToString() != "&nbsp;" && value.ToString() != "")
                            {
                                Base_SysLogDetail syslogdetail = new Base_SysLogDetail();
                                syslogdetail.SysLogDetailId = CommonHelper.GetGuid;
                                syslogdetail.SysLogId = SysLog.SysLogId;
                                syslogdetail.PropertyField = pi.Name;
                                syslogdetail.PropertyName = DatabaseCommon.GetFieldText(pi);
                                syslogdetail.NewValue = "" + value + "";
                                database.Insert(syslogdetail, isOpenTrans);
                            }
                        }
                    }
                    database.Commit();
                }
                catch
                {
                    database.Rollback();
                }
            }
            #endregion
    
    
            /// <summary>
            /// 清空操作日志
            /// </summary>
            /// <param name="CreateDate"></param>
            /// <returns></returns>
            public int RemoveLog(string KeepTime)
            {
                StringBuilder strSql = new StringBuilder();
                DateTime CreateDate = DateTime.Now;
                if (KeepTime == "7")//保留近一周
                {
                    CreateDate = DateTime.Now.AddDays(-7);
                }
                else if (KeepTime == "1")//保留近一个月
                {
                    CreateDate = DateTime.Now.AddMonths(-1);
                }
                else if (KeepTime == "3")//保留近三个月
                {
                    CreateDate = DateTime.Now.AddMonths(-3);
                }
                if (KeepTime == "0")//不保留,全部删除
                {
                    strSql.Append("DELETE FROM Base_SysLog");
                    return DataFactory.Database().ExecuteBySql(strSql);
                }
                else
                {
                    strSql.Append("DELETE FROM Base_SysLog WHERE 1=1 ");
                    strSql.Append("AND CreateDate <= @CreateDate");
                    List<DbParameter> parameter = new List<DbParameter>();
                    parameter.Add(DbFactory.CreateDbParameter("@CreateDate", CreateDate));
                    return DataFactory.Database().ExecuteBySql(strSql, parameter.ToArray());
                }
            }
            /// <summary>
            /// 获取系统日志列表
            /// </summary>
            /// <param name="ModuleId">模块ID</param>
            /// <param name="ParameterJson">搜索条件</param>
            /// <param name="jqgridparam">分页条件</param>
            /// <returns></returns>
            public List<Base_SysLog> GetPageList(string ModuleId, string ParameterJson, ref JqGridParam jqgridparam)
            {
                StringBuilder strSql = new StringBuilder();
                List<DbParameter> parameter = new List<DbParameter>();
                strSql.Append(@"SELECT  *
                                FROM    ( SELECT    l.SysLogId ,
                                                    l.ObjectId ,
                                                    l.LogType ,
                                                    l.IPAddress ,
                                                    l.IPAddressName ,
                                                    c.FullName AS CompanyId ,
                                                    D.FullName AS DepartmentId ,
                                                    l.CreateDate ,
                                                    l.CreateUserId ,
                                                    l.CreateUserName ,
                                                    m.FullName AS ModuleId ,
                                                    l.Remark ,
                                                    l.Status
                                          FROM      Base_SysLog l
                                                    LEFT JOIN Base_Department d ON d.DepartmentId = l.DepartmentId
                                                    LEFT JOIN Base_Company c ON c.CompanyId = l.CompanyId
                                                    LEFT JOIN Base_Module m ON m.ModuleId = l.ModuleId
                                        ) A WHERE 1 = 1");
                //strSql.Append(WhereSql);
                if (!string.IsNullOrEmpty(ModuleId))
                {
                    strSql.Append(" AND ModuleId = @ModuleId");
                    parameter.Add(DbFactory.CreateDbParameter("@ModuleId", ModuleId));
                }
                return Repository().FindListPageBySql(strSql.ToString(), parameter.ToArray(), ref jqgridparam);
            }
            /// <summary>
            /// 获取系统日志明细列表
            /// </summary>
            /// <param name="SysLogId">系统日志主键</param>
            /// <returns></returns>
            public List<Base_SysLogDetail> GetSysLogDetailList(string SysLogId)
            {
                string WhereSql = " AND SysLogId = @SysLogId Order By CreateDate ASC";
                List<DbParameter> parameter = new List<DbParameter>();
                parameter.Add(DbFactory.CreateDbParameter("@SysLogId", SysLogId));
                return DataFactory.Database().FindList<Base_SysLogDetail>(WhereSql, parameter.ToArray());
            }
        }
        /// <summary>
        /// 操作类型
        /// </summary>
        public enum OperationType
        {
            /// <summary>
            /// 登陆
            /// </summary>
            Login = 0,
            /// <summary>
            /// 新增
            /// </summary>
            Add = 1,
            /// <summary>
            /// 修改
            /// </summary>
            Update = 2,
            /// <summary>
            /// 删除
            /// </summary>
            Delete = 3,
            /// <summary>
            /// 其他
            /// </summary>
            Other = 4,
            /// <summary>
            /// 访问
            /// </summary>
            Visit = 5,
            /// <summary>
            /// 离开
            /// </summary>
            Leave = 6,
            /// <summary>
            /// 查询
            /// </summary>
            Query = 7,
            /// <summary>
            /// 安全退出
            /// </summary>
            Exit = 8,
        }
    }
  • 相关阅读:
    大话设计模式--中介者模式
    大话设计模式--职责链模式
    大话设计模式--命令模式
    大话设计模式--桥接模式
    迷宫求解
    stuct、class、typedef
    软件测试
    Scrapy初探
    python练习
    链表基础
  • 原文地址:https://www.cnblogs.com/CZAO/p/6127665.html
Copyright © 2011-2022 走看看