/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }