/// <summary>
        /// 执行上下文
        /// </summary>
        /// <param name="ctx"></param>
        /// <returns></returns>
        public override bool Process(OperatorResolveContext <DynamicBulkInsertRequest> ctx)
        {
            var defaultFields = new List <AppDefaultFieldConfig>();

            if (ctx.InitContext.App != null &&
                ctx.InitContext.App.ExtendConfig != null &&
                !ctx.InitContext.App.ExtendConfig.DefaultFields.IsNullOrEmpty())
            {
                defaultFields = ctx.InitContext.App.ExtendConfig.DefaultFields
                                .Where(s => s.DefaultType.Contains(AppDefaultFieldType.Insert.ToString("G")))
                                .ToList();
            }

            // 获取解析对象
            var parserCommand = Singleton <IEngine> .Instance.Resolve <ILinqParserCommand>();

            var commandList = new List <string>();

            foreach (var operateFields in ctx.Request.OperateFields)
            {
                var buildReulst = ResolveExtend.BuildInsertCommand(operateFields,
                                                                   ctx.InitContext, defaultFields);
                if (buildReulst.Response != null)
                {
                    ctx.Response = buildReulst.Response;
                    return(false);
                }
                commandList.AddRange(buildReulst.CommandList);
                ctx.InsertPrimaryKeys.Add(buildReulst.PrimaryKeys);
            }

            ctx.ExcuteLinqText = parserCommand.JoinInsert(commandList);
            return(true);
        }
        /// <summary>
        /// 执行上下文
        /// </summary>
        /// <param name="ctx"></param>
        /// <returns></returns>
        public override bool Process(OperatorResolveContext <TRequest> ctx)
        {
            // 配置信息读取服务
            var dataProvider = Singleton <IEngine> .Instance.Resolve <IResolveDataProvider>();

            // 处理参数上下文
            ctx.InitContext = dataProvider.InitResolveContext(ctx.Request);

            if (ctx.InitContext.App == null ||
                ctx.InitContext.App.ExtendConfig == null)
            {
                return(false);
            }

            return(true);
        }
Esempio n. 3
0
        /// <summary>
        /// 删除动态数据(包含详情)
        /// </summary>
        /// <param name="info">删除对象</param>
        /// <returns>操作结果</returns>
        public NGPResponse DeleteDynamicData(DynamicDeleteRequest info)
        {
            if (info == null)
            {
                return(new NGPResponse
                {
                    AffectedRows = 0,
                    ErrorCode = ErrorCode.ParamEmpty,
                    Message = CommonResource.ParameterError,
                    Status = OperateStatus.Error
                });
            }

            var context = new OperatorResolveContext <DynamicDeleteRequest>()
            {
                Request = info
            };

            ResolveProcessorFactory.DeleteSetp.HandleProcess(context);
            return(context.Response);
        }
Esempio n. 4
0
        /// <summary>
        /// 批量添加动态数据
        /// </summary>
        /// <param name="info">追加对象</param>
        /// <returns>操作结果</returns>
        public NGPResponse <List <List <NGPKeyValuePair> > > BulkInsertDynamicData(DynamicBulkInsertRequest info)
        {
            if (info == null)
            {
                return(new NGPResponse <List <List <NGPKeyValuePair> > >
                {
                    AffectedRows = 0,
                    ErrorCode = ErrorCode.ParamEmpty,
                    Message = CommonResource.ParameterError,
                    Status = OperateStatus.Error,
                    Data = new List <List <NGPKeyValuePair> >()
                });
            }

            var context = new OperatorResolveContext <DynamicBulkInsertRequest>()
            {
                Request = info
            };

            ResolveProcessorFactory.BulkInsertSetp.HandleProcess(context);
            if (context.Response.Status == OperateStatus.Error)
            {
                return(new NGPResponse <List <List <NGPKeyValuePair> > >
                {
                    AffectedRows = context.Response.AffectedRows,
                    ErrorCode = context.Response.ErrorCode,
                    Message = context.Response.Message,
                    Status = context.Response.Status,
                    Data = new List <List <NGPKeyValuePair> >()
                });
            }
            return(new NGPResponse <List <List <NGPKeyValuePair> > >
            {
                AffectedRows = context.Response.AffectedRows,
                ErrorCode = context.Response.ErrorCode,
                Message = context.Response.Message,
                Status = context.Response.Status,
                Data = context.InsertPrimaryKeys
            });
        }
        /// <summary>
        /// 执行上下文
        /// </summary>
        /// <param name="ctx"></param>
        /// <returns></returns>
        public override bool Process(OperatorResolveContext <TRequest> ctx)
        {
            var engine = Singleton <IEngine> .Instance.Resolve <ILinqParserHandler>();

            var unitRepository = Singleton <IEngine> .Instance.Resolve <IUnitRepository>();

            var workContext = Singleton <IEngine> .Instance.Resolve <IWorkContext>();

            var parserResult = engine.Resolve(new LinqParserRequest
            {
                Current    = workContext.Current,
                DslContent = ctx.ExcuteLinqText
            });

            var count = unitRepository.ExecuteNonQuery(parserResult.Command.CommandText, parserResult.Command.ParameterCollection);

            if (count == 0)
            {
                ctx.Response = new NGPResponse
                {
                    AffectedRows = 0,
                    ErrorCode    = ErrorCode.SystemError,
                    Message      = CommonResource.OperatorError,
                    Status       = OperateStatus.Error
                };
                return(false);
            }

            ctx.Response = new NGPResponse
            {
                AffectedRows = count,
                Message      = CommonResource.OperatorSuccess,
                Status       = OperateStatus.Success
            };
            return(true);
        }
 /// <summary>
 /// 执行上下文
 /// </summary>
 /// <param name="ctx"></param>
 /// <returns></returns>
 public override bool Process(OperatorResolveContext <TRequest> ctx)
 {
     return(true);
 }
Esempio n. 7
0
        /// <summary>
        /// 执行上下文
        /// </summary>
        /// <param name="ctx"></param>
        /// <returns></returns>
        public override bool Process(OperatorResolveContext <DynamicDeleteRequest> ctx)
        {
            var defaultFields = ctx.InitContext.App.ExtendConfig.DefaultFields
                                .Where(s => s.DefaultType.Contains(AppDefaultFieldType.Delete.ToString("G")))
                                .ToList();

            // 获取解析对象
            var parserCommand = Singleton <IEngine> .Instance.Resolve <ILinqParserCommand>();

            var workContext = Singleton <IEngine> .Instance.Resolve <IWorkContext>();

            var commandList = new List <string>();

            // 解析where表达式
            foreach (var whereExpression in ctx.Request.WhereExpressions)
            {
                // 获取表达式的字段列表
                var whereFieldKeys = AppConfigExtend.MatchFieldKeys(whereExpression);

                if (whereFieldKeys.Count == 0)
                {
                    continue;
                }

                // 表单key
                var formKey = AppConfigExtend.GetFormKey(whereFieldKeys.FirstOrDefault());
                var setList = new List <string>();
                foreach (var field in defaultFields)
                {
                    var fieldKey = AppConfigExtend.GenerateFieldKey(formKey, field.ColumnName);
                    switch (field.FieldType.ToEnum <FieldType>())
                    {
                    case FieldType.EmployeeType:
                    {
                        var value = parserCommand.LinqStringFormatter(workContext.Current.EmplId);
                        setList.Add(parserCommand.LinqSetCommand(fieldKey, value));
                        break;
                    }

                    case FieldType.DeptType:
                    {
                        var value = parserCommand.LinqStringFormatter(workContext.Current.DeptId);
                        setList.Add(parserCommand.LinqSetCommand(fieldKey, value));
                        break;
                    }

                    case FieldType.FormType:
                    {
                        switch (field.ColumnType.ToEnum <FieldColumnType>())
                        {
                        case FieldColumnType.Bool:
                        {
                            setList.Add(parserCommand.LinqSetCommand(fieldKey, 1));
                            break;
                        }

                        case FieldColumnType.Time:
                        case FieldColumnType.Date:
                        case FieldColumnType.DateTime:
                        {
                            setList.Add(parserCommand.LinqSetCommand(fieldKey, parserCommand.DateCommand));
                            break;
                        }

                        case FieldColumnType.Decimal:
                        case FieldColumnType.String:
                        case FieldColumnType.Integer:
                        case FieldColumnType.Bits:
                        default:
                            break;
                        }
                        break;
                    }

                    case FieldType.GroupType:
                    case FieldType.RelationType:
                    default:
                        break;
                    }
                }

                var setCommand    = parserCommand.JoinSet(setList);
                var whereCommand  = parserCommand.WhereCommand(whereExpression);
                var updateCommand = parserCommand.UpdateCommand(formKey, setCommand, whereCommand);
                commandList.Add(updateCommand);
            }

            if (commandList.Count == 0)
            {
                return(false);
            }

            ctx.ExcuteLinqText = parserCommand.JoinUpdate(commandList);
            return(true);
        }
Esempio n. 8
0
        /// <summary>
        /// 执行上下文
        /// </summary>
        /// <param name="ctx"></param>
        /// <returns></returns>
        public override bool Process(OperatorResolveContext <DynamicUpdateRequest> ctx)
        {
            var defaultFields = new List <AppDefaultFieldConfig>();

            if (ctx.InitContext.App != null &&
                ctx.InitContext.App.ExtendConfig != null &&
                !ctx.InitContext.App.ExtendConfig.DefaultFields.IsNullOrEmpty())
            {
                defaultFields = ctx.InitContext.App.ExtendConfig.DefaultFields
                                .Where(s => s.DefaultType.Contains(AppDefaultFieldType.Update.ToString("G")))
                                .ToList();
            }

            // 获取解析对象
            var engine = Singleton <IEngine> .Instance.Resolve <ILinqParserHandler>();

            var parserCommand = Singleton <IEngine> .Instance.Resolve <ILinqParserCommand>();

            var workContext = Singleton <IEngine> .Instance.Resolve <IWorkContext>();

            var unitRepository = Singleton <IEngine> .Instance.Resolve <IUnitRepository>();

            var commandList = new List <string>();

            // 解析where表达式
            foreach (var whereExpression in ctx.Request.WhereExpressions)
            {
                // 获取表达式的字段列表
                var whereFieldKeys = AppConfigExtend.MatchFieldKeys(whereExpression);

                // 表单key
                var formKey = AppConfigExtend.GetFormKey(whereFieldKeys.FirstOrDefault());

                // 获取form的配置
                var formItem = ctx.InitContext.Forms.FirstOrDefault(s => s.FormKey == formKey);
                if (formItem == null)
                {
                    continue;
                }

                var setList = new List <string>();

                var operatorFields = from formField in ctx.InitContext.FormFields.Where(s => s.FormKey.Equals(formKey))
                                     join operateField in ctx.Request.OperateFields.Where(s => AppConfigExtend.GetFormKey(s.FieldKey).Equals(formKey))
                                     on formField.FieldKey equals operateField.FieldKey
                                     select new
                {
                    formField.FieldKey,
                    FormField    = formField,
                    OperateField = operateField
                };

                // 没有操作的数据
                if (operatorFields.IsNullOrEmpty())
                {
                    continue;
                }

                // 获取验证字段
                var operatorFieldKeys = operatorFields.Select(s => s.FieldKey).ToList();
                var uniqueFields      = new List <FormUniqueConfig>();
                if (formItem.ExtendConfig != null && !formItem.ExtendConfig.UniqueFields.IsNullOrEmpty())
                {
                    uniqueFields = formItem.ExtendConfig.UniqueFields.Where(s => operatorFieldKeys.Contains(s.FieldKey)).ToList();
                }

                IDictionary <string, object> dbValue = new Dictionary <string, object>();

                // 存在验证字段
                if (!uniqueFields.IsNullOrEmpty())
                {
                    // 执行解析where
                    var parserResult = engine.Resolve(new LinqParserRequest
                    {
                        Current    = workContext.Current,
                        DslContent = whereExpression
                    });

                    // 查询列
                    var selectList = ctx.InitContext.FormFields
                                     .Where(s => s.FormKey.Equals(formKey))
                                     .Select(s => parserCommand.RenameCommand(AppConfigExtend.GetSqlFullName(s.FieldKey), s.FieldKey));

                    var whereString = parserCommand.WhereCommand(parserResult.Command.CommandText);

                    // 查询列
                    var selectString = parserCommand.JoinField(selectList);

                    var singleCommandText = parserCommand.SelectQuery(
                        string.Empty,
                        parserCommand.TopCommand(1),
                        selectString,
                        formKey,
                        string.Empty,
                        whereString,
                        string.Empty,
                        string.Empty);

                    // 执行查询
                    dbValue = unitRepository.QuerySingleDictionary(singleCommandText, parserResult.Command.ParameterCollection);
                }

                foreach (var operatorField in operatorFields)
                {
                    // 需要验证
                    var uniqueField = uniqueFields.FirstOrDefault(s => s.FieldKey == operatorField.FieldKey);
                    if (uniqueField != null)
                    {
                        // 组装验证逻辑
                        var andDsls = new List <string>();

                        // 添加当前条件的取反
                        andDsls.Add(parserCommand.NotCommand(whereExpression));

                        // 添加当前字段的值
                        var currentUniqueDsl = parserCommand.EqualCommand(operatorField.FieldKey, operatorField.OperateField.Value);
                        if (operatorField.FormField.DbConfig.ColumnType.ToEnum <FieldColumnType>() == FieldColumnType.String)
                        {
                            currentUniqueDsl = parserCommand.EqualCommand(operatorField.FieldKey,
                                                                          parserCommand.LinqStringFormatter(Convert.ToString(operatorField.OperateField.Value)));
                        }
                        andDsls.Add(currentUniqueDsl);

                        // 获取应用配置里是删除标记的字段
                        var defaultField = ctx.InitContext.App.ExtendConfig.DefaultFields.FirstOrDefault(s =>
                                                                                                         s.DefaultType.Contains(AppDefaultFieldType.Delete.ToString("G")) &&
                                                                                                         s.ColumnType.ToEnum <FieldColumnType>() == FieldColumnType.Bool);
                        andDsls.Add(parserCommand.EqualCommand(AppConfigExtend.GenerateFieldKey(formKey, defaultField.ColumnName), 0));

                        // 约束验证
                        if (!uniqueField.ScopeFieldKeys.IsNullOrEmpty())
                        {
                            foreach (var scopeFieldKey in uniqueField.ScopeFieldKeys)
                            {
                                // 先从操作字段获取约束验证的值
                                object scopeValue = string.Empty;
                                var    scopeItem  = operatorFields.FirstOrDefault(s => s.FieldKey == scopeFieldKey);
                                if (scopeItem != null && scopeItem.OperateField.Value != null)
                                {
                                    if (scopeItem.OperateField.Value.GetType() == typeof(string))
                                    {
                                        andDsls.Add(parserCommand.EqualCommand(scopeItem.FieldKey,
                                                                               parserCommand.LinqStringFormatter(Convert.ToString(scopeItem.OperateField.Value))));
                                        continue;
                                    }
                                    andDsls.Add(parserCommand.EqualCommand(scopeItem.FieldKey, scopeItem.OperateField.Value));
                                    continue;
                                }

                                // 没有就从DB获取
                                var scopeDbValue = dbValue.GetVlaue(scopeFieldKey.ToUpper());
                                if (scopeDbValue != null)
                                {
                                    if (scopeDbValue.GetType() == typeof(string))
                                    {
                                        andDsls.Add(parserCommand.EqualCommand(scopeFieldKey,
                                                                               parserCommand.LinqStringFormatter(Convert.ToString(scopeDbValue))));
                                        continue;
                                    }
                                    andDsls.Add(parserCommand.EqualCommand(scopeFieldKey, scopeDbValue));
                                }
                            }
                        }

                        // 验证where
                        var uniqueWhere = parserCommand.JoinCondition(andDsls);

                        var uniqueParserResult = engine.Resolve(new LinqParserRequest
                        {
                            Current    = workContext.Current,
                            DslContent = uniqueWhere
                        });
                        var uniqueWhereCommand = parserCommand.WhereCommand(uniqueParserResult.Command.CommandText);
                        var uniqueCommand      = parserCommand.SelectTotalCountQuery(formKey, string.Empty, uniqueWhereCommand);
                        var count = unitRepository.ExecuteScalar <int>(uniqueCommand, uniqueParserResult.Command.ParameterCollection);
                        if (count > 0)
                        {
                            ctx.Response = new NGPResponse
                            {
                                AffectedRows = 0,
                                Message      = string.Format(CommonResource.Exist, operatorField.FormField.FieldName),
                                Status       = OperateStatus.Error
                            };
                            return(false);
                        }
                    }

                    // 如果值为null
                    if (string.IsNullOrWhiteSpace(Convert.ToString(operatorField.OperateField.Value)))
                    {
                        // 不为空验证
                        if (operatorField.FormField.ExtendConfig.IsRequired == true)
                        {
                            ctx.Response = new NGPResponse
                            {
                                AffectedRows = 0,
                                Message      = string.Format(CommonResource.NotEmpty, operatorField.FormField.FieldName),
                                Status       = OperateStatus.Error
                            };
                            return(false);
                        }
                        setList.Add(parserCommand.LinqSetCommand(operatorField.FieldKey, parserCommand.NullCommandKey));
                        continue;
                    }

                    // 添加设定字段
                    if (operatorField.FormField.DbConfig.ColumnType.ToEnum <FieldColumnType>() == FieldColumnType.String ||
                        operatorField.FormField.DbConfig.ColumnType.ToEnum <FieldColumnType>() == FieldColumnType.Attachment)
                    {
                        setList.Add(parserCommand.LinqSetCommand(operatorField.FieldKey,
                                                                 parserCommand.LinqStringFormatter(Convert.ToString(operatorField.OperateField.Value))));
                        continue;
                    }
                    setList.Add(parserCommand.LinqSetCommand(operatorField.FieldKey, operatorField.OperateField.Value));
                }

                foreach (var field in defaultFields)
                {
                    var fieldKey = AppConfigExtend.GenerateFieldKey(formKey, field.ColumnName);
                    var paramKey = parserCommand.ParamCommand(fieldKey);
                    switch (field.FieldType.ToEnum <FieldType>())
                    {
                    case FieldType.EmployeeType:
                    {
                        var value = parserCommand.LinqStringFormatter(workContext.Current.EmplId);
                        setList.Add(parserCommand.LinqSetCommand(fieldKey, value));
                        break;
                    }

                    case FieldType.DeptType:
                    {
                        var value = parserCommand.LinqStringFormatter(workContext.Current.DeptId);
                        setList.Add(parserCommand.LinqSetCommand(fieldKey, value));
                        break;
                    }

                    case FieldType.FormType:
                    {
                        switch (field.ColumnType.ToEnum <FieldColumnType>())
                        {
                        case FieldColumnType.Time:
                        case FieldColumnType.Date:
                        case FieldColumnType.DateTime:
                        {
                            setList.Add(parserCommand.LinqSetCommand(fieldKey, parserCommand.LinqDateCommand));
                            break;
                        }

                        case FieldColumnType.Bool:
                        case FieldColumnType.Decimal:
                        case FieldColumnType.String:
                        case FieldColumnType.Integer:
                        case FieldColumnType.Bits:
                        default:
                            break;
                        }
                        break;
                    }

                    case FieldType.GroupType:
                    case FieldType.RelationType:
                    default:
                        break;
                    }
                }

                var setCommand            = parserCommand.JoinSet(setList);
                var whereExpressionString = parserCommand.WhereCommand(whereExpression);
                var updateCommand         = parserCommand.UpdateCommand(formKey, setCommand, whereExpressionString);
                commandList.Add(updateCommand);
            }

            ctx.ExcuteLinqText = parserCommand.JoinUpdate(commandList);
            return(true);
        }