/// <summary>
        /// 异步记录访问日志
        /// </summary>
        /// <param name="operation"></param>
        public void LogOperationAudit(P_OperationAudit OperationAudit)
        {
            IOperationAuditService operationAuditService = MvcApplication.applicationContext.GetBean("operationAuditService") as OperationAuditService;

            Task.Factory.StartNew(() =>
            {
                operationAuditService.SaveOperationAudit(OperationAudit);
            });
        }
        /// <summary>
        /// 保存操作日志
        /// </summary>
        /// <param name="OperationAudit"></param>
        /// <returns></returns>
        public void SaveOperationAudit(P_OperationAudit OperationAudit)
        {
            var sqlServerTemplate = sqlServerTemplFactory.CreateDbTemplate();
            int updCnt;

            using (var conn = sqlServerTemplate.GetSqlConnection())
            {
                conn.Open();
                updCnt = sqlServerTemplate.ExecuteNonQuery(
                    "INSERT INTO P_OPERATIONAUDIT(ID, OperatorName, OperatorID, TypeID,Operation,StateID,Exception,CreateDate) VALUES (@ID, @OperatorName, @OperatorID, @TypeID,@Operation,@StateID,@Exception,@CreateDate) ",
                    new SqlParameter[] {
                    SqlParameterFactory.GetSqlParameter("@ID", OperationAudit.ID),
                    SqlParameterFactory.GetSqlParameter("@OperatorName", OperationAudit.OperatorName),
                    SqlParameterFactory.GetSqlParameter("@OperatorID", OperationAudit.OperatorID),
                    SqlParameterFactory.GetSqlParameter("@TypeID", OperationAudit.TypeID),
                    SqlParameterFactory.GetSqlParameter("@Operation", OperationAudit.Operation),
                    SqlParameterFactory.GetSqlParameter("@StateID", OperationAudit.StateID),
                    SqlParameterFactory.GetSqlParameter("@Exception", OperationAudit.Exception),
                    SqlParameterFactory.GetSqlParameter("@CreateDate", OperationAudit.CreateDate)
                });
            }
        }
 /// <summary>
 /// 保存操作日志
 /// </summary>
 /// <param name="OperationAudit"></param>
 /// <returns></returns>
 public void SaveOperationAudit(P_OperationAudit OperationAudit)
 {
     operationAuditDao.SaveOperationAudit(OperationAudit);
 }
        /// <summary>
        /// 离开Action之后进行拦截
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            P_OperationAudit operationAudit;

            HttpSessionStateBase Session = filterContext.HttpContext.Session;

            AdminUser adminUser = Session[ConstantHelper.CurrentAdminUser] as AdminUser;

            if (adminUser != null)
            {
                var param = filterContext.HttpContext.Request.Form.ToString();
                //param = param.Replace("%u", @"\u");
                string OperationText = Operation;
                operationAudit              = new P_OperationAudit();
                operationAudit.ID           = Guid.NewGuid();
                operationAudit.OperatorName = adminUser.Name;
                operationAudit.OperatorID   = adminUser.Email;
                if (!string.IsNullOrEmpty(param) && param.Split('&').Length > 0)
                {
                    OperationText += ",参数:";
                    foreach (var item in param.Split('&'))
                    {
                        var value = item.Substring(item.LastIndexOf("=") + 1);
                        if (!string.IsNullOrEmpty(value))
                        {
                            var      str     = item.Substring(item.LastIndexOf("=") + 1);
                            string[] strlist = str.Replace("%u", ";").Split(';');
                            var      outStr  = "";
                            if (strlist.Length > 1)
                            {
                                for (int i = 0; i < strlist.Length; i++)
                                {
                                    if (!string.IsNullOrEmpty(strlist[i]))
                                    {
                                        if (strlist[i].Contains("+"))
                                        {
                                            strlist[i] = strlist[i].Replace("+", " ");
                                        }
                                        //将unicode字符转为10进制整数,然后转为char中文字符
                                        outStr += (char)int.Parse(strlist[i], System.Globalization.NumberStyles.HexNumber);
                                    }
                                }
                            }
                            else
                            {
                                outStr = strlist[0];
                            }
                            OperationText += "【@" + item.Substring(0, item.IndexOf('=') + 1) + outStr + "】";
                        }
                    }
                }
                else if (filterContext.HttpContext.Request.QueryString.Count > 0)
                {
                    OperationText += ",参数:";
                    foreach (string item in filterContext.HttpContext.Request.QueryString)
                    {
                        var value = filterContext.HttpContext.Request.QueryString[item].ToString();
                        if (!string.IsNullOrEmpty(value))
                        {
                            OperationText += "【@" + item + "=" + value + "】";
                        }
                    }
                }
                operationAudit.Operation = OperationText;
                if (filterContext.Exception == null)
                {
                    operationAudit.StateID = 1;
                }
                else
                {
                    operationAudit.StateID   = -1;
                    operationAudit.Exception = filterContext.Exception.Message;
                }
                operationAudit.CreateDate = DateTime.Now;
                LogOperationAudit(operationAudit);
            }
        }