/// <summary>
 /// 设置实体
 /// </summary>
 /// <param name="sqlBuilder">Sql语句生成器</param>
 /// <param name="entity">实体</param>
 private void SetEntity(SqlBuilder sqlBuilder, BaseLogonLogEntity entity)
 {
     SetEntityExtend(sqlBuilder, entity);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldSystemCode, entity.SystemCode);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldSourceType, entity.SourceType);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldUserId, entity.UserId);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldUserName, entity.UserName);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldNickName, entity.NickName);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldRealName, entity.RealName);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldCompanyId, entity.CompanyId);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldCompanyName, entity.CompanyName);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldCompanyCode, entity.CompanyCode);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldProvince, entity.Province);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldCity, entity.City);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldService, entity.Service);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldElapsedTicks, entity.ElapsedTicks);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldTargetApplication, entity.TargetApplication);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldTargetIp, entity.TargetIp);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldResult, entity.Result);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldOperationType, entity.OperationType);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldLogonStatus, entity.LogonStatus);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldLogLevel, entity.LogLevel);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldIpAddress, entity.IpAddress);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldIpAddressName, entity.IpAddressName);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldMacAddress, entity.MacAddress);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldSortCode, entity.SortCode);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldDeleted, entity.Deleted);
     sqlBuilder.SetValue(BaseLogonLogEntity.FieldEnabled, entity.Enabled);
 }
 /// <summary>
 /// 添加, 这里可以人工干预,提高程序的性能
 /// </summary>
 /// <param name="entity">实体</param>
 /// <param name="identity">自增量方式,表主键是否采用自增的策略</param>
 /// <param name="returnId">返回主键,不返回程序允许速度会快,主要是为了主细表批量插入数据优化用的</param>
 /// <returns>主键</returns>
 public string Add(BaseLogonLogEntity entity, bool identity = true, bool returnId = true)
 {
     Identity  = identity;
     ReturnId  = returnId;
     entity.Id = AddEntity(entity).ToInt();
     return(entity.Id.ToString());
 }
        private static void AddLogTask(object param)
        {
            var tuple = param as Tuple <string, string, string, string, string, string, string, Tuple <string> >;

            if (tuple != null)
            {
                var systemCode    = tuple.Item1;
                var userId        = tuple.Item2;
                var userName      = tuple.Item3;
                var nickName      = tuple.Item4;
                var ipAddress     = tuple.Item5;
                var ipAddressName = tuple.Item6;
                var macAddress    = tuple.Item7;
                var loginStatus   = string.Empty;
                if (tuple.Rest != null)
                {
                    loginStatus = tuple.Rest.Item1;
                }

                var entity = new BaseLogonLogEntity
                {
                    SystemCode = systemCode,
                    UserId     = userId.ToInt(),
                    UserName   = userName,
                    //Troy.Cui 20160927
                    NickName      = nickName,
                    IpAddress     = ipAddress,
                    IpAddressName = ipAddressName,
                    MacAddress    = macAddress,
                    LogonStatus   = loginStatus,
                    LogLevel      = LogonStatusToLogLevel(loginStatus),
                    CreateTime    = DateTime.Now
                };

                var tableName = GetSplitTableName();
                using (var dbHelper = DbHelperFactory.Create(BaseSystemInfo.UserCenterDbType, BaseSystemInfo.UserCenterDbConnection))
                {
                    var loginLogManager = new BaseLogonLogManager(tableName);
                    try
                    {
                        // 2015-07-13 把登录日志无法正常写入的,进行日志记录
                        loginLogManager.Add(entity);
                    }
                    catch (Exception ex)
                    {
                        LogUtil.WriteLog("AddLogTask: 异常信息:" + ex.Message
                                         + Environment.NewLine + "错误源:" + ex.Source
                                         + Environment.NewLine + "堆栈信息:" + ex.StackTrace, "Log");
                    }
                }
            }
        }
 /// <summary>
 /// 添加或更新(主键是否为0)
 /// </summary>
 /// <param name="entity">实体</param>
 /// <param name="identity">自增量方式,表主键是否采用自增的策略</param>
 /// <param name="returnId">返回主键,不返回程序允许速度会快,主要是为了主细表批量插入数据优化用的</param>
 /// <returns>主键</returns>
 public string AddOrUpdate(BaseLogonLogEntity entity, bool identity = true, bool returnId = true)
 {
     Identity = identity;
     ReturnId = returnId;
     if (entity.Id == 0)
     {
         entity.Id = AddEntity(entity).ToInt();
         return(entity.Id.ToString());
     }
     else
     {
         return(UpdateEntity(entity) > 0 ? entity.Id.ToString() : string.Empty);
     }
 }
        private static void AddLogTaskByBaseUserInfo(object param)
        {
            var tuple = param as Tuple <string, BaseUserInfo, string, string, string, string>;

            if (tuple != null)
            {
                var systemCode    = tuple.Item1;
                var userInfo      = tuple.Item2;
                var ipAddress     = tuple.Item3;
                var ipAddressName = tuple.Item4;
                var macAddress    = tuple.Item5;
                var loginStatus   = tuple.Item6;

                var entity = new BaseLogonLogEntity
                {
                    SystemCode    = systemCode,
                    UserId        = userInfo.UserId,
                    UserName      = userInfo.UserName,
                    NickName      = userInfo.NickName,
                    RealName      = userInfo.RealName,
                    CompanyId     = userInfo.CompanyId.ToInt(),
                    CompanyName   = userInfo.CompanyName,
                    CompanyCode   = userInfo.CompanyCode,
                    IpAddress     = ipAddress,
                    IpAddressName = ipAddressName,
                    MacAddress    = macAddress,
                    LogonStatus   = loginStatus,
                    LogLevel      = LogonStatusToLogLevel(loginStatus),
                    CreateTime    = DateTime.Now
                };

                var tableName = GetSplitTableName(userInfo);

                var loginLogManager = new BaseLogonLogManager(tableName);
                try
                {
                    // 2015-07-13 把登录日志无法正常写入的,进行日志记录
                    loginLogManager.Add(entity);
                }
                catch (Exception ex)
                {
                    LogUtil.WriteLog("AddLogTask: ipAddress:" + ipAddress + "macAddress:" + macAddress + "userName:"******"异常信息:" + ex.Message
                                     + Environment.NewLine + "错误源:" + ex.Source
                                     + Environment.NewLine + "堆栈信息:" + ex.StackTrace, "Log");
                }
            }
        }
        /// <summary>
        /// 更新实体
        /// </summary>
        /// <param name="entity">实体</param>
        public int UpdateEntity(BaseLogonLogEntity entity)
        {
            var sqlBuilder = new SqlBuilder(DbHelper);

            sqlBuilder.BeginUpdate(CurrentTableName);
            SetEntity(sqlBuilder, entity);
            if (UserInfo != null)
            {
                sqlBuilder.SetValue(BaseLogonLogEntity.FieldUpdateUserId, UserInfo.UserId);
                sqlBuilder.SetValue(BaseLogonLogEntity.FieldUpdateUserName, UserInfo.UserName);
                sqlBuilder.SetValue(BaseLogonLogEntity.FieldUpdateBy, UserInfo.RealName);
            }
            sqlBuilder.SetDbNow(BaseLogonLogEntity.FieldUpdateTime);
            sqlBuilder.SetValue(BaseLogonLogEntity.FieldUpdateIp, Utils.GetIp());
            sqlBuilder.SetWhere(PrimaryKey, entity.Id);
            //return sqlBuilder.EndUpdate();
            var result = sqlBuilder.EndUpdate();

            if (result > 0)
            {
                RemoveCache(entity.Id);
            }
            return(result);
        }
 // 这个是声明扩展方法
 partial void SetEntityExtend(SqlBuilder sqlBuilder, BaseLogonLogEntity entity);
        /// <summary>
        /// 添加实体
        /// </summary>
        /// <param name="entity">实体</param>
        public string AddEntity(BaseLogonLogEntity entity)
        {
            var key = string.Empty;

            if (entity.SortCode == 0)
            {
                var managerSequence = new BaseSequenceManager(DbHelper, Identity);
                if (DbHelper.CurrentDbType == CurrentDbType.Oracle || DbHelper.CurrentDbType == CurrentDbType.Db2)
                {
                    key = managerSequence.Increment($"SC_{CurrentTableName}_SEQ");
                }
                else
                {
                    key = managerSequence.Increment(CurrentTableName);
                }
                entity.SortCode = key.ToInt();
            }
            var sqlBuilder = new SqlBuilder(DbHelper, Identity, ReturnId);

            sqlBuilder.BeginInsert(CurrentTableName, PrimaryKey);
            if (!Identity)
            {
                // 这里已经是指定了主键了,所以不需要返回主键了
                sqlBuilder.ReturnId = false;
                sqlBuilder.SetValue(PrimaryKey, entity.Id);
            }
            else
            {
                if (!ReturnId && (DbHelper.CurrentDbType == CurrentDbType.Oracle || DbHelper.CurrentDbType == CurrentDbType.Db2))
                {
                    if (DbHelper.CurrentDbType == CurrentDbType.Oracle)
                    {
                        sqlBuilder.SetFormula(PrimaryKey, $"{CurrentTableName}_SEQ.NEXTVAL");
                    }
                    if (DbHelper.CurrentDbType == CurrentDbType.Db2)
                    {
                        sqlBuilder.SetFormula(PrimaryKey, $"NEXT VALUE FOR {CurrentTableName}_SEQ");
                    }
                }
                else
                {
                    if (Identity && (DbHelper.CurrentDbType == CurrentDbType.Oracle || DbHelper.CurrentDbType == CurrentDbType.Db2))
                    {
                        var managerSequence = new BaseSequenceManager(DbHelper);
                        entity.Id = managerSequence.Increment($"{CurrentTableName}_SEQ").ToInt();
                        sqlBuilder.SetValue(PrimaryKey, entity.Id);
                    }
                }
            }
            SetEntity(sqlBuilder, entity);
            if (UserInfo != null)
            {
                sqlBuilder.SetValue(BaseLogonLogEntity.FieldCreateUserId, UserInfo.UserId);
                sqlBuilder.SetValue(BaseLogonLogEntity.FieldCreateUserName, UserInfo.UserName);
                sqlBuilder.SetValue(BaseLogonLogEntity.FieldCreateBy, UserInfo.RealName);
            }
            else
            {
                sqlBuilder.SetValue(BaseLogonLogEntity.FieldCreateBy, entity.CreateBy);
                sqlBuilder.SetValue(BaseLogonLogEntity.FieldCreateUserName, entity.CreateUserName);
            }
            sqlBuilder.SetDbNow(BaseLogonLogEntity.FieldCreateTime);
            sqlBuilder.SetValue(BaseLogonLogEntity.FieldCreateIp, Utils.GetIp());
            if (UserInfo != null)
            {
                sqlBuilder.SetValue(BaseLogonLogEntity.FieldUpdateUserId, UserInfo.UserId);
                sqlBuilder.SetValue(BaseLogonLogEntity.FieldUpdateUserName, UserInfo.UserName);
                sqlBuilder.SetValue(BaseLogonLogEntity.FieldUpdateBy, UserInfo.RealName);
            }
            sqlBuilder.SetDbNow(BaseLogonLogEntity.FieldUpdateTime);
            sqlBuilder.SetValue(BaseLogonLogEntity.FieldUpdateIp, Utils.GetIp());
            if (Identity && (DbHelper.CurrentDbType == CurrentDbType.SqlServer || DbHelper.CurrentDbType == CurrentDbType.Access))
            {
                key = sqlBuilder.EndInsert().ToString();
            }
            else
            {
                sqlBuilder.EndInsert();
            }
            if (Identity && (DbHelper.CurrentDbType == CurrentDbType.Oracle || DbHelper.CurrentDbType == CurrentDbType.Db2))
            {
                key = entity.Id.ToString();
            }
            if (!string.IsNullOrWhiteSpace(key))
            {
                RemoveCache();
            }
            return(key);
        }
 /// <summary>
 /// 更新
 /// </summary>
 /// <param name="entity">实体</param>
 public int Update(BaseLogonLogEntity entity)
 {
     return(UpdateEntity(entity));
 }
        /// <summary>
        /// 增加日志
        /// </summary>
        /// <param name="systemCode">系统编码</param>
        /// <param name="userEntity"></param>
        /// <param name="ipAddress"></param>
        /// <param name="ipAddressName"></param>
        /// <param name="macAddress"></param>
        /// <param name="loginStatus"></param>
        /// <param name="operationType"></param>
        /// <param name="loginResult"></param>
        /// <param name="sourceType"></param>
        /// <param name="targetApplication"></param>
        /// <param name="targetIp"></param>
        /// <returns></returns>
        public static string AddLog(string systemCode, BaseUserEntity userEntity, string ipAddress, string ipAddressName, string macAddress, string loginStatus, int operationType = 1, int loginResult = 1, string sourceType = null, string targetApplication = null, string targetIp = null)
        {
            if (!BaseSystemInfo.RecordLogonLog)
            {
                return(string.Empty);
            }

            if (userEntity == null)
            {
                return(null);
            }

            var result = string.Empty;

            var entity = new BaseLogonLogEntity
            {
                SystemCode  = systemCode,
                UserId      = userEntity.Id,
                UserName    = userEntity.UserName,
                NickName    = userEntity.NickName,
                RealName    = userEntity.RealName,
                CompanyId   = userEntity.CompanyId,
                CompanyName = userEntity.CompanyName
            };

            if (BaseSystemInfo.OnInternet && userEntity.CompanyId > 0)
            {
                entity.CompanyCode = BaseOrganizationManager.GetCodeByCache(userEntity.CompanyId.ToString());
            }

            entity.Province = userEntity.Province;
            entity.City     = userEntity.City;

            entity.TargetApplication = targetApplication;
            entity.TargetIp          = targetIp;
            entity.SourceType        = sourceType;

            entity.IpAddress     = ipAddress;
            entity.IpAddressName = ipAddressName;
            entity.MacAddress    = macAddress;
            entity.LogonStatus   = loginStatus;

            entity.OperationType = operationType;
            entity.Result        = loginResult;

            entity.LogLevel   = LogonStatusToLogLevel(loginStatus);
            entity.CreateTime = DateTime.Now;

            var tableName = GetSplitTableName(userEntity);

            var loginLogManager = new BaseLogonLogManager(tableName);

            try
            {
                // 2015-07-13 把登录日志无法正常写入的,进行日志记录
                result = loginLogManager.Add(entity);
            }
            catch (Exception ex)
            {
                LogUtil.WriteLog("AddLogTask: 异常信息:" + ex.Message + "userName:"******"错误源:" + ex.Source
                                 + Environment.NewLine + "堆栈信息:" + ex.StackTrace, "Log");
            }

            return(result);
        }