示例#1
0
 public CommandConsumer(IServiceProvider provider, CommandCounter counter, IRoutingCache cache, ILogger <CommandConsumer> logger)
 {
     this.m_logger      = logger;
     this.m_handler     = new DataUpdateHandler(cache, provider);
     this.m_liveUpdater = new LiveDataRouteUpdateHandler(cache);
     this.m_counter     = counter;
 }
示例#2
0
 public void EventHandlersAddRemove(DataUpdateHandler methodData,
                                    ErrorMessagesHandler methodErrors, StatusErrorHandler methodStatus)
 {
     if (methodData == null)
     {
         DataUpdated = null;
     }
     else
     {
         DataUpdated += methodData;
     }
     if (methodErrors == null)
     {
         _port.ClearSubscribers();
     }
     else
     {
         _port.ErrorOccurrence += methodErrors;
     }
     if (methodStatus == null)
     {
         StatusErrorOccured = null;
     }
     else
     {
         StatusErrorOccured += methodStatus;
     }
 }
示例#3
0
        void IDataUpdateTrigger.AfterUpdateSql <TEntity>(IDataTable <TEntity> table, string condition, StringBuilder code)
        {
            if (!DataUpdateHandler.IsType <TEntity>(DataUpdateHandler.TypeofIVersionData))
            {
                return;
            }
            long ver;

            using (RedisProxy proxy = new RedisProxy(RedisProxy.Option.DbSystem))
            {
                ver = proxy.Redis.Incr($"ent:ver:{table.Name}");
            }

            switch (table.DataBaseType)
            {
            case DataBaseType.MySql:
                code.Append($@"
UPDATE `{table.ContextWriteTable}` 
SET `{table.FieldDictionary[nameof(IVersionData.DataVersion)]}` = {ver}");
                break;

            default:
                code.Append($@"
UPDATE [{table.ContextWriteTable}]
SET [{table.FieldDictionary[nameof(IVersionData.DataVersion)]}] = {ver}");
                break;
            }
            if (!string.IsNullOrEmpty(condition))
            {
                code.Append($@"
WHERE {condition}");
            }
            code.AppendLine(";");
        }
示例#4
0
        void IDataUpdateTrigger.AfterUpdateSql <TEntity>(IDataTable <TEntity> table, string condition, StringBuilder code)
        {
            bool          hase      = false;
            StringBuilder innerCode = new StringBuilder();

            if (DataUpdateHandler.IsType <TEntity>(DataUpdateHandler.TypeofIHistoryData))
            {
                innerCode.Append($@"
    `{table.FieldDictionary[nameof(IHistoryData.LastReviserId)]}` = {GlobalContext.Current.User.UserId},
    `{table.FieldDictionary[nameof(IHistoryData.LastModifyDate)]}` = Now()");
                //            var name = GlobalContext.Current.User.NickName?.Replace('\'', '’');
                //            innerCode.Append($@"
                //`{table.FieldDictionary[nameof(IHistoryData.LastReviserId)]}` = {GlobalContext.Current.User.UserId},
                //`{table.FieldDictionary[nameof(IHistoryData.LastReviser)]}` = '{name}',
                //`{table.FieldDictionary[nameof(IHistoryData.LastModifyDate)]}` = Now()");
                hase = true;
            }
            //        if (DataUpdateHandler.IsType<TEntity>(DataUpdateHandler.TypeofIOrganizationData) && GlobalContext.Current.User is IOrganizationData organizationData)
            //        {
            //            if (hase)
            //                code.Append(',');
            //            else
            //                hase = true;
            //            innerCode.Append($@"
            //`{table.FieldDictionary[nameof(IOrganizationData.OrganizationId)]}` = '{organizationData.OrganizationId}'");
            //        }
            //        if (DataUpdateHandler.IsType<TEntity>(DataUpdateHandler.TypeofIDepartmentData) && GlobalContext.Current.User is IDepartmentData departmentData)
            //        {
            //            if (hase)
            //                code.Append(',');
            //            else
            //                hase = true;
            //            innerCode.Append($@"
            //`{table.FieldDictionary[nameof(IDepartmentData.DepartmentId)]}` = '{departmentData.DepartmentId}',
            //`{table.FieldDictionary[nameof(IDepartmentData.DepartmentCode)]}` = '{departmentData.DepartmentCode}'");
            //        }

            if (hase)
            {
                code.AppendLine($@"
UPDATE `{ table.ContextWriteTable}` SET
{innerCode}");
                if (!string.IsNullOrEmpty(condition))
                {
                    code.Append($@"
WHERE {condition}");
                    code.AppendLine(";");
                }
            }
        }
示例#5
0
        /// <summary>
        ///     得到可正确拼接的SQL条件语句(可能是没有)
        /// </summary>
        /// <param name="condition"></param>
        /// <returns></returns>
        private string ConditionSqlCode(string condition)
        {
            if (NoInjection)
            {
                return(string.IsNullOrEmpty(condition) ? null : $"WHERE {condition}");
            }

            List <string> conditions = new List <string>();

            if (!_baseConditionInited)
            {
                InitBaseCondition();
                _baseConditionInited = true;
            }
            if (!string.IsNullOrEmpty(BaseCondition))
            {
                conditions.Add(BaseCondition);
            }
            if (!string.IsNullOrEmpty(condition))
            {
                conditions.Add(condition);
            }
            if (!NoInjection)
            {
                ConditionSqlCode(conditions);
                DataUpdateHandler.ConditionSqlCode(this, conditions);
            }
            if (conditions.Count == 0)
            {
                return(null);
            }
            var code = new StringBuilder();

            bool isFirst = true;

            foreach (var con in conditions)
            {
                if (isFirst)
                {
                    isFirst = false;
                    code.Append("\nWHERE ");
                }
                else
                {
                    code.Append(" AND ");
                }
                code.Append($"({con})");
            }
            return(code.ToString());
        }
示例#6
0
        /// <summary>
        ///     得到可正确拼接的SQL条件语句(可能是没有)
        /// </summary>
        /// <param name="code"></param>
        /// <param name="condition"></param>
        /// <returns></returns>
        private void ConditionSqlCode(StringBuilder code, string condition)
        {
            if (NoInjection)
            {
                if (!string.IsNullOrEmpty(condition))
                {
                    code.Append("WHERE ");
                    code.Append(condition);
                }
                return;
            }
            List <string> conditions = new List <string>();

            if (!_baseConditionInited)
            {
                InitBaseCondition();
                _baseConditionInited = true;
            }
            if (!string.IsNullOrEmpty(BaseCondition))
            {
                conditions.Add(BaseCondition);
            }
            if (!string.IsNullOrEmpty(condition))
            {
                conditions.Add(condition);
            }
            ConditionSqlCode(conditions);
            DataUpdateHandler.ConditionSqlCode(this, conditions);
            if (conditions.Count == 0)
            {
                return;
            }
            code.Append("WHERE ");
            bool isFirst = true;

            foreach (var con in conditions)
            {
                if (isFirst)
                {
                    isFirst = false;
                }
                else
                {
                    code.Append(" AND ");
                }
                code.Append($"({con})");
            }
            code.AppendLine();
        }
示例#7
0
        void IDataUpdateTrigger.AfterUpdateSql <TEntity>(IDataTable <TEntity> table, string condition, StringBuilder code)
        {
            if (!DataUpdateHandler.IsType <TEntity>(DataUpdateHandler.TypeofIHistoryData))
            {
                return;
            }
            code.Append($@"
UPDATE [{table.ContextWriteTable}]
SET [{table.FieldDictionary[nameof(IHistoryData.LastReviserId)]}] = {GlobalContext.Current.User.UserId},
    [{table.FieldDictionary[nameof(IHistoryData.LastModifyDate)]}] = GetDate()");
//            var name = GlobalContext.Current.User.NickName?.Replace('\'', '’');
//            code.Append($@"
//UPDATE [{table.ContextWriteTable}]
//SET [{table.FieldDictionary[nameof(IHistoryData.LastReviserId)]}] = {GlobalContext.Current.User.UserId},
//    [{table.FieldDictionary[nameof(IHistoryData.LastReviser)]}] = '{name}',
//    [{table.FieldDictionary[nameof(IHistoryData.LastModifyDate)]}] = GetDate()");
            if (!string.IsNullOrEmpty(condition))
            {
                code.Append($@"
WHERE {condition}");
            }

            code.AppendLine(";");
        }
示例#8
0
        public void UpdateDataTest()
        {
            DataUpdateHandler handler = new DataUpdateHandler();

            //handler.UpdateData(new AucTraderDbContext());
        }
示例#9
0
 public static void StatusControlsUpdateHadler(DataUpdateHandler method = null)
 {
     Protocol.DataUpdated += method;
 }
示例#10
0
        /// <summary>
        ///     得到可正确拼接的SQL条件语句(可能是没有)
        /// </summary>
        /// <param name="table">当前数据操作对象</param>
        /// <param name="conditions">附加的条件集合</param>
        /// <returns></returns>
        void IDataUpdateTrigger.ConditionSqlCode <TEntity>(IDataTable <TEntity> table, List <string> conditions)
        {
            //是否启用数据范围限制
            if (!(GlobalContext.Current.User is IDepartmentScopeData scopeData) || scopeData.DataScope == DataScopeType.None || scopeData.DataScope == DataScopeType.Unlimited)
            {
                return;
            }
            StringBuilder code  = new StringBuilder();
            bool          first = true;

            //个人数据边界过滤
            if (DataUpdateHandler.IsType <TEntity>(DataUpdateHandler.TypeofIAuthorData) && scopeData.DataScope.HasFlag(DataScopeType.Person))
            {
                code.Append($"`{table.FieldDictionary[nameof(IAuthorData.AuthorId)]}` = '{GlobalContext.Current.User.UserId}'");
                first = false;
            }
            //部门数据边界过滤
            if (DataUpdateHandler.IsType <TEntity>(DataUpdateHandler.TypeofIDepartmentData) &&
                GlobalContext.Current.User is IDepartmentData departmentData && !string.IsNullOrEmpty(departmentData.DepartmentId))
            {
                if (scopeData.DataScope.HasFlag(DataScopeType.Lower))
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        code.Append(" OR ");
                    }

                    if (!scopeData.DataScope.HasFlag(DataScopeType.Home))
                    {
                        code.Append($@"(`{table.FieldDictionary[nameof(IDepartmentData.DepartmentId)]}` <> '{departmentData.DepartmentId}' AND 
`{table.FieldDictionary[nameof(IDepartmentData.DepartmentCode)]}` LIKE '{departmentData.DepartmentCode}%')");
                    }
                    else
                    {
                        code.Append($"`{table.FieldDictionary[nameof(IDepartmentData.DepartmentCode)]}` LIKE '{departmentData.DepartmentCode}%'");
                    }
                }
                else if (scopeData.DataScope.HasFlag(DataScopeType.Home))
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        code.Append(" OR ");
                    }
                    code.Append($"`{table.FieldDictionary[nameof(IDepartmentData.DepartmentId)]}` = '{departmentData.DepartmentId}'");
                }
            }
            //组织数据边界过滤
            if (DataUpdateHandler.IsType <TEntity>(DataUpdateHandler.TypeofIOrganizationData) &&
                GlobalContext.Current.User is IOrganizationData organizationData && !string.IsNullOrEmpty(organizationData.OrganizationId))
            {
                if (first)
                {
                    conditions.Add($"`{table.FieldDictionary[nameof(IOrganizationData.OrganizationId)]}` = '{organizationData.OrganizationId}'");
                }
                else
                {
                    conditions.Add($"`{table.FieldDictionary[nameof(IOrganizationData.OrganizationId)]}` = '{organizationData.OrganizationId}' AND ({code})");
                }
            }
        }
示例#11
0
 static MySqlTable()
 {
     DataUpdateHandler.InitType <TData>();
 }