using JNPF.Common.Const; using JNPF.Common.Extension; using JNPF.Common.Security; using JNPF.Systems.Entitys.System; using JNPF.VisualDev.Engine.Model; using JNPF.VisualDev.Entitys; using SqlSugar; namespace JNPF.VisualDev.Engine.Core; /// /// 模板解析 基础类. /// public class TemplateParsingBase { public TemplateParsingBase() { } /// /// 模板实体. /// public VisualDevEntity visualDevEntity { get; set; } /// /// 页面类型 (1、纯表单,2、表单加列表,3、表单列表工作流). /// public int WebType { get; set; } /// /// 是否有表 (true 有表, false 无表). /// public bool IsHasTable { get; set; } /// /// 表单配置JSON模型. /// public FormDataModel? FormModel { get; set; } /// /// 列配置JSON模型. /// public ColumnDesignModel ColumnData { get; set; } /// /// App列配置JSON模型. /// public ColumnDesignModel AppColumnData { get; set; } /// /// 所有控件集合. /// public List AllFieldsModel { get; set; } /// /// 所有控件集合(已剔除布局控件). /// public List FieldsModelList { get; set; } /// /// 主表控件集合. /// public List MainTableFieldsModelList { get; set; } /// /// 副表控件集合. /// public List AuxiliaryTableFieldsModelList { get; set; } /// /// 子表控件集合. /// public List ChildTableFieldsModelList { get; set; } /// /// 主/副表控件集合(列表展示数据控件). /// public List SingleFormData { get; set; } /// /// 所有表. /// public List AllTable { get; set; } /// /// 主表. /// public TableModel? MainTable { get; set; } /// /// 主表 表名. /// public string? MainTableName { get; set; } /// /// 主/副表 系统生成控件集合. /// public List GenerateFields { get; set; } /// /// 主表 vModel 字段 字典. /// Key : vModel , Value : 主表.vModel. /// public Dictionary MainTableFields { get; set; } /// /// 副表 vModel 字段 字典. /// Key : vModel , Value : 副表.vModel. /// public Dictionary AuxiliaryTableFields { get; set; } /// /// 子表 vModel 字段 字典. /// Key : 设计子表-vModel , Value : 子表.vModel. /// public Dictionary ChildTableFields { get; set; } /// /// 所有表 vModel 字段 字典. /// Key : 设计子表-vModel , Value : 表.vModel. /// public Dictionary AllTableFields { get; set; } /// /// 功能名称. /// public string FullName { get; set; } /// /// 主表主键名. /// public string MainPrimary { get; set; } /// /// 数据库连接. /// public DbLinkEntity DbLink { get; set; } /// /// 导入模式.(1 仅新增,2 更新和新增数据). /// public string dataType { get; set; } = "1"; /// /// 导入数据列表. /// public List selectKey { get; set; } /// /// PC数据过滤 . /// public List DataRuleListJson { get; set; } /// /// App数据过滤 . /// public List AppDataRuleListJson { get; set; } /// /// 模板解析帮助 构造 (功能表单). /// /// 表单Json. /// 涉及表Json. /// public TemplateParsingBase(string formJson, string tables, bool isFlowTask = false) { InitByFormType(formJson, tables, 2); } /// /// 模板解析帮助 构造. /// /// 表单Json. /// 涉及表Json. /// 表单类型(1:系统表单 2:自定义表单). public TemplateParsingBase(string formJson, string tables, int formType) { InitByFormType(formJson, tables, formType); } /// /// 模板解析帮助 构造. /// /// 功能实体 /// public TemplateParsingBase(VisualDevEntity entity, bool isFlowTask = false) { visualDevEntity = entity; WebType = entity.WebType; if (entity.FlowId.IsNotEmptyOrNull() && entity.EnableFlow.Equals(1)) WebType = 3; // 数据视图 if (entity.WebType.Equals(4)) { FullName = entity.FullName; IsHasTable = false; InitColumnData(entity); AllFieldsModel = new List(); ColumnData.columnList.ForEach(item => { AllFieldsModel.Add(new FieldsModel() { __vModel__ = item.__vModel__, __config__ = new ConfigModel() { label = item.label, jnpfKey = item.jnpfKey } }); }); AppColumnData.columnList.ForEach(item => { AllFieldsModel.Add(new FieldsModel() { __vModel__ = item.__vModel__, __config__ = new ConfigModel() { label = item.label, jnpfKey = item.jnpfKey } }); }); AllFieldsModel = AllFieldsModel.DistinctBy(x => x.__vModel__).ToList(); FieldsModelList = AllFieldsModel; AuxiliaryTableFieldsModelList = AllFieldsModel; MainTableFieldsModelList = AllFieldsModel; SingleFormData = AllFieldsModel; } else { FormDataModel formModel = entity.FormData.ToObjectOld(); FormModel = formModel; // 表单Json模型 IsHasTable = !string.IsNullOrEmpty(entity.Tables) && !"[]".Equals(entity.Tables); // 是否有表 AllFieldsModel = GetInDataFieldsModel(formModel.fields.ToJsonString().ToObjectOld>()); // 所有控件集合 FieldsModelList = GetInDataFieldsModel(formModel.fields); // 已剔除布局控件集合 MainTable = entity.Tables.ToList().Find(m => m.typeId.Equals("1")); // 主表 MainTableName = MainTable?.table; // 主表名称 AddChlidTableFeildsModel(); // 处理旧控件 部分没有 tableName FieldsModelList.Where(x => string.IsNullOrWhiteSpace(x.__config__.tableName)).ToList().ForEach(item => { if (item.__vModel__.Contains("_jnpf_")) item.__config__.tableName = item.__vModel__.ReplaceRegex(@"_jnpf_(\w+)", string.Empty).Replace("jnpf_", string.Empty); // 副表 else item.__config__.tableName = MainTableName != null ? MainTableName : string.Empty; // 主表 }); AllTable = entity.Tables.ToObject>(); // 所有表 AuxiliaryTableFieldsModelList = FieldsModelList.Where(x => x.__vModel__.Contains("_jnpf_")).ToList(); // 单控件副表集合 ChildTableFieldsModelList = FieldsModelList.Where(x => x.__config__.jnpfKey == JnpfKeyConst.TABLE).ToList(); // 子表集合 MainTableFieldsModelList = FieldsModelList.Except(AuxiliaryTableFieldsModelList).Except(ChildTableFieldsModelList).ToList(); // 主表控件集合 SingleFormData = FieldsModelList.Where(x => x.__config__.jnpfKey != JnpfKeyConst.TABLE).ToList(); // 非子表集合 GenerateFields = GetGenerateFields(); // 系统生成控件 MainTableFields = new Dictionary(); AuxiliaryTableFields = new Dictionary(); ChildTableFields = new Dictionary(); AllTableFields = new Dictionary(); MainTableFieldsModelList.Where(x => x.__vModel__.IsNotEmptyOrNull()).ToList().ForEach(x => { MainTableFields.Add(x.__vModel__, x.__config__.tableName + "." + x.__vModel__); AllTableFields.Add(x.__vModel__, x.__config__.tableName + "." + x.__vModel__); }); AuxiliaryTableFieldsModelList.Where(x => x.__vModel__.IsNotEmptyOrNull()).ToList().ForEach(x => { AuxiliaryTableFields.Add(x.__vModel__, x.__vModel__.Replace("_jnpf_", ".").Replace("jnpf_", string.Empty)); AllTableFields.Add(x.__vModel__, x.__vModel__.Replace("_jnpf_", ".").Replace("jnpf_", string.Empty)); }); ChildTableFieldsModelList.ForEach(item => { item.__config__.children.Where(x => x.__vModel__.IsNotEmptyOrNull()).ToList().ForEach(x => { ChildTableFields.Add(item.__vModel__ + "-" + x.__vModel__, item.__config__.tableName + "." + x.__vModel__); AllTableFields.Add(item.__vModel__ + "-" + x.__vModel__, item.__config__.tableName + "." + x.__vModel__); }); }); InitColumnData(entity); } } /// /// 模板解析帮助 构造(代码生成用). /// /// 数据连接. /// 控件集合. /// 主/副/子 表. /// 主表主键. /// 页面类型 (1、纯表单,2、表单加列表,3、表单列表工作流). /// 主键策略(1 雪花ID 2 自增长ID). /// 导入导出数据列名集合. /// 导入类型 1 新增, 2 新增和修改. /// 是否开启流程 1 开启. /// 流程表单Id. public TemplateParsingBase( DbLinkEntity dblink, List fieldList, List tables, string mainPrimary, int webType, int primaryKeyPolicy, List uploaderKey, string _dataType, int enableFlow = 0, string flowFormId = "") { if (enableFlow.Equals(1)) visualDevEntity = new VisualDevEntity() { EnableFlow = 1, Id = flowFormId }; DbLink = dblink; AllTable = tables.ToObject>(); // 所有表 FieldsModelList = fieldList; AllFieldsModel = FieldsModelList.Copy(); MainTable = AllTable.Find(m => m.typeId.Equals("1")); // 主表 MainTableName = MainTable?.table; // 主表名称 MainPrimary = mainPrimary; AddCodeGenChlidTableFeildsModel(); // 处理旧控件 部分没有 tableName FieldsModelList.Where(x => string.IsNullOrWhiteSpace(x.__config__.tableName)).ToList().ForEach(item => { if (item.__vModel__.Contains("_jnpf_")) item.__config__.tableName = item.__vModel__.ReplaceRegex(@"_jnpf_(\w+)", string.Empty).Replace("jnpf_", string.Empty); // 副表 else item.__config__.tableName = MainTableName != null ? MainTableName : string.Empty; // 主表 }); AuxiliaryTableFieldsModelList = FieldsModelList.Where(x => x.__vModel__.Contains("_jnpf_")).ToList(); // 单控件副表集合 ChildTableFieldsModelList = FieldsModelList.Where(x => x.__config__.jnpfKey == JnpfKeyConst.TABLE).ToList(); // 子表集合 MainTableFieldsModelList = FieldsModelList.Except(AuxiliaryTableFieldsModelList).Except(ChildTableFieldsModelList).ToList(); // 主表控件集合 SingleFormData = FieldsModelList.Where(x => x.__config__.jnpfKey != JnpfKeyConst.TABLE).ToList(); // 非子表集合 GenerateFields = GetGenerateFields(); // 系统生成控件 MainTableFields = new Dictionary(); AuxiliaryTableFields = new Dictionary(); ChildTableFields = new Dictionary(); AllTableFields = new Dictionary(); MainTableFieldsModelList.Where(x => x.__vModel__.IsNotEmptyOrNull()).ToList().ForEach(x => { MainTableFields.Add(x.__vModel__, x.__config__.tableName + "." + x.__vModel__); AllTableFields.Add(x.__vModel__, x.__config__.tableName + "." + x.__vModel__); }); AuxiliaryTableFieldsModelList.Where(x => x.__vModel__.IsNotEmptyOrNull()).ToList().ForEach(x => { AuxiliaryTableFields.Add(x.__vModel__, x.__vModel__.Replace("_jnpf_", ".").Replace("jnpf_", string.Empty)); AllTableFields.Add(x.__vModel__, x.__vModel__.Replace("_jnpf_", ".").Replace("jnpf_", string.Empty)); }); ChildTableFieldsModelList.ForEach(item => { item.__config__.children.Where(x => x.__vModel__.IsNotEmptyOrNull()).ToList().ForEach(x => { ChildTableFields.Add(item.__vModel__ + "-" + x.__vModel__, item.__config__.tableName + "." + x.__vModel__); AllTableFields.Add(item.__vModel__ + "-" + x.__vModel__, item.__config__.tableName + "." + x.__vModel__); }); }); WebType = webType; FormModel = new FormDataModel(); FormModel.primaryKeyPolicy = primaryKeyPolicy; ColumnData = new ColumnDesignModel(); ColumnData.type = 1; AppColumnData = new ColumnDesignModel(); selectKey = uploaderKey; dataType = _dataType; } /// /// 验证模板. /// /// true 通过. public bool VerifyTemplate() { if (FieldsModelList != null && FieldsModelList.Any(x => x.__config__.jnpfKey == JnpfKeyConst.TABLE)) { foreach (FieldsModel? item in ChildTableFieldsModelList) { FieldsModel? tc = AuxiliaryTableFieldsModelList.Find(x => x.__vModel__.Contains(item.__config__.tableName + "_jnpf_")); if (tc != null) return false; } } return true; } /// /// 获取带数据转换的控件 /// 移除模板内的布局类型控件. /// /// 组件集合. /// 带数据的控件. public List GetInDataFieldsModel(List fieldsModelList) { List? template = new List(); // 将模板内的无限children解析出来 // 不包含子表children foreach (FieldsModel? item in fieldsModelList) { ConfigModel? config = item.__config__; switch (config.jnpfKey) { case JnpfKeyConst.TABLE: // 表格 template.Add(item); break; case JnpfKeyConst.ROW: // 卡片 case JnpfKeyConst.CARD: // 栅格布局 template.AddRange(GetInDataFieldsModel(config.children)); break; case JnpfKeyConst.COLLAPSE: // 折叠面板 case JnpfKeyConst.TAB: // Tab标签 config.children.ForEach(item => template.AddRange(GetInDataFieldsModel(item.__config__.children))); break; case JnpfKeyConst.JNPFTEXT: // 文本 case JnpfKeyConst.DIVIDER: // 分割线 case JnpfKeyConst.BUTTON: // 按钮 case JnpfKeyConst.GROUPTITLE: // 分组标题 case JnpfKeyConst.ALERT: case JnpfKeyConst.LINK: // 链接 break; default: template.Add(item); break; } } return template; } /// /// 获取系统生成字段空格键. /// /// public List GetGenerateFields() { // 系统生成字段 key var gfList = new List() { JnpfKeyConst.BILLRULE, JnpfKeyConst.CREATEUSER, JnpfKeyConst.CREATETIME, JnpfKeyConst.MODIFYUSER, JnpfKeyConst.MODIFYTIME, JnpfKeyConst.CURRPOSITION, JnpfKeyConst.CURRORGANIZE, JnpfKeyConst.UPLOADFZ }; return SingleFormData.Where(x => gfList.Contains(x.__config__.jnpfKey)).ToList(); } /// /// 处理子表内的控件 添加到所有控件. /// private void AddChlidTableFeildsModel() { var ctList = new List(); AllFieldsModel.Where(x => x.__config__.jnpfKey.Equals(JnpfKeyConst.TABLE)).ToList().ForEach(item => { item.__config__.children.Where(it => it.__vModel__.IsNotEmptyOrNull()).ToList().ForEach(it => it.__vModel__ = item.__vModel__ + "-" + it.__vModel__); ctList.AddRange(GetInDataFieldsModel(item.__config__.children)); }); AllFieldsModel.AddRange(ctList); } /// /// 处理子表内的控件 添加到所有控件. /// private void AddCodeGenChlidTableFeildsModel() { var ctList = new List(); AllFieldsModel.Where(x => x.__config__.jnpfKey.Equals(JnpfKeyConst.TABLE)).ToList().ForEach(item => { item.__config__.children.Where(it => it.__vModel__.IsNotEmptyOrNull()).ToList().ForEach(it => { it.__config__.label = it.__config__.label.Replace(it.__vModel__, item.__vModel__ + "-" + it.__vModel__); it.__vModel__ = item.__vModel__ + "-" + it.__vModel__; }); ctList.AddRange(item.__config__.children); }); AllFieldsModel.AddRange(ctList); } /// /// 根据表单类型初始化. /// /// 表单Json. /// 涉及表Json. /// 表单类型(1:系统表单 2:自定义表单). private void InitByFormType(string formJson, string tables, int formType) { if (formType.Equals(1)) { AllFieldsModel = new List(); var fields = formJson.ToObject>>(); fields.ForEach(it => { if (it.ContainsKey("filedId")) AllFieldsModel.Add(new FieldsModel() { __vModel__ = it["filedId"].ToString(), __config__ = new ConfigModel() { label = it["filedName"].ToString(), jnpfKey = JnpfKeyConst.COMINPUT } }); }); FieldsModelList = AllFieldsModel; } else { FormDataModel formModel = formJson.ToObjectOld(); FormModel = formModel; // 表单Json模型 IsHasTable = !string.IsNullOrEmpty(tables) && !"[]".Equals(tables) && tables.IsNullOrEmpty(); // 是否有表 AllFieldsModel = GetInDataFieldsModel(formModel.fields.ToJsonString().ToObjectOld>()); // 所有控件集合 FieldsModelList = GetInDataFieldsModel(formModel.fields); // 已剔除布局控件集合 MainTable = tables.ToList().Find(m => m.typeId.Equals("1")); // 主表 MainTableName = MainTable?.table; // 主表名称 AddChlidTableFeildsModel(); // 处理旧控件 部分没有 tableName FieldsModelList.Where(x => string.IsNullOrWhiteSpace(x.__config__.tableName)).ToList().ForEach(item => { if (item.__vModel__.Contains("_jnpf_")) item.__config__.tableName = item.__vModel__.ReplaceRegex(@"_jnpf_(\w+)", string.Empty).Replace("jnpf_", string.Empty); // 副表 else item.__config__.tableName = MainTableName != null ? MainTableName : string.Empty; // 主表 }); AllTable = tables.ToObject>(); // 所有表 AuxiliaryTableFieldsModelList = FieldsModelList.Where(x => x.__vModel__.Contains("_jnpf_")).ToList(); // 单控件副表集合 ChildTableFieldsModelList = FieldsModelList.Where(x => x.__config__.jnpfKey == JnpfKeyConst.TABLE).ToList(); // 子表集合 MainTableFieldsModelList = FieldsModelList.Except(AuxiliaryTableFieldsModelList).Except(ChildTableFieldsModelList).ToList(); // 主表控件集合 SingleFormData = FieldsModelList.Where(x => x.__config__.jnpfKey != JnpfKeyConst.TABLE).ToList(); // 非子表集合 GenerateFields = GetGenerateFields(); // 系统生成控件 MainTableFields = new Dictionary(); AuxiliaryTableFields = new Dictionary(); ChildTableFields = new Dictionary(); AllTableFields = new Dictionary(); MainTableFieldsModelList.Where(x => x.__vModel__.IsNotEmptyOrNull()).ToList().ForEach(x => { MainTableFields.Add(x.__vModel__, x.__config__.tableName + "." + x.__vModel__); AllTableFields.Add(x.__vModel__, x.__config__.tableName + "." + x.__vModel__); }); AuxiliaryTableFieldsModelList.Where(x => x.__vModel__.IsNotEmptyOrNull()).ToList().ForEach(x => { AuxiliaryTableFields.Add(x.__vModel__, x.__vModel__.Replace("_jnpf_", ".").Replace("jnpf_", string.Empty)); AllTableFields.Add(x.__vModel__, x.__vModel__.Replace("_jnpf_", ".").Replace("jnpf_", string.Empty)); }); ChildTableFieldsModelList.ForEach(item => { item.__config__.children.Where(x => x.__vModel__.IsNotEmptyOrNull()).ToList().ForEach(x => { ChildTableFields.Add(item.__vModel__ + "-" + x.__vModel__, item.__config__.tableName + "." + x.__vModel__); AllTableFields.Add(item.__vModel__ + "-" + x.__vModel__, item.__config__.tableName + "." + x.__vModel__); }); }); ColumnData = new ColumnDesignModel(); AppColumnData = new ColumnDesignModel(); } } /// /// 初始化列配置模型. /// private void InitColumnData(VisualDevEntity entity) { if (!string.IsNullOrWhiteSpace(entity.ColumnData)) ColumnData = entity.ColumnData.ToObject(); // 列配置模型 else ColumnData = new ColumnDesignModel(); if (!string.IsNullOrWhiteSpace(entity.AppColumnData)) AppColumnData = entity.AppColumnData.ToObject(); // 列配置模型 else AppColumnData = new ColumnDesignModel(); if (AppColumnData.columnList != null && AppColumnData.columnList.Any()) { AppColumnData.columnList.ForEach(item => { var addColumn = ColumnData.columnList.Find(x => x.prop == item.prop); if (addColumn == null) ColumnData.columnList.Add(item); }); } if (AppColumnData.searchList != null && AppColumnData.searchList.Any()) { AppColumnData.searchList.ForEach(item => { var addSearch = ColumnData.searchList.Find(x => x.__config__.jnpfKey == item.__config__.jnpfKey); if (addSearch == null) ColumnData.searchList.Add(item); }); } if (ColumnData.searchList != null && ColumnData.searchList.Any()) { ColumnData.searchList.Where(x => x.__config__.jnpfKey == JnpfKeyConst.CASCADER).ToList().ForEach(item => { var it = SingleFormData.FirstOrDefault(x => x.__vModel__ == item.__vModel__); if (it != null) item.multiple = it.props.props.multiple; }); } FullName = entity.FullName; if (ColumnData.uploaderTemplateJson != null && ColumnData.uploaderTemplateJson.selectKey != null) { dataType = ColumnData.uploaderTemplateJson.dataType; selectKey = new List(); // 列顺序 AllFieldsModel.ForEach(item => { if (ColumnData.uploaderTemplateJson.selectKey.Any(x => x.Equals(item.__vModel__))) selectKey.Add(item.__vModel__); }); } // 数据过滤 if (ColumnData.ruleList != null && ColumnData.ruleList.Any()) { DataRuleListJson = new List(); var condTree = new ConditionalTree() { ConditionalList = new List>() }; ColumnData.ruleList.ForEach(item => condTree.ConditionalList.Add(new KeyValuePair(WhereType.And, GetItemRule(item)))); DataRuleListJson.Add(condTree); } if (AppColumnData.ruleListApp != null && AppColumnData.ruleListApp.Any()) { AppDataRuleListJson = new List(); var condTree = new ConditionalTree() { ConditionalList = new List>() }; AppColumnData.ruleListApp.ForEach(item => condTree.ConditionalList.Add(new KeyValuePair(WhereType.And, GetItemRule(item)))); AppDataRuleListJson.Add(condTree); } } private IConditionalModel GetItemRule(RuleFieldModel item) { var conditionalType = ConditionalType.Equal; var between = new List(); if (item.fieldValue.IsNotEmptyOrNull()) { if (item.symbol.Equals("between")) between = item.fieldValue.ToObject>(); switch (item.jnpfKey) { case JnpfKeyConst.CREATETIME: case JnpfKeyConst.MODIFYTIME: case JnpfKeyConst.DATE: { if (item.symbol.Equals("between")) { var startTime = between.First().TimeStampToDateTime(); var endTime = between.Last().TimeStampToDateTime(); between[0] = startTime.ToString(); between[1] = endTime.ToString(); if (item.format == "yyyy-MM-dd") { between[0] = new DateTime(startTime.Year, startTime.Month, startTime.Day, 0, 0, 0, 0).ToString(); between[1] = new DateTime(endTime.Year, endTime.Month, endTime.Day, 23, 59, 59, 999).ToString(); } } else { if (item.format == "yyyy-MM-dd") { var value = item.fieldValue.ToString().TimeStampToDateTime(); item.fieldValue = new DateTime(value.Year, value.Month, value.Day, 0, 0, 0, 0).ToString(); } else { item.fieldValue = item.fieldValue.IsNotEmptyOrNull() ? item.fieldValue.ToString().TimeStampToDateTime() : item.fieldValue; } } } break; } } switch (item.symbol) { case ">=": conditionalType = ConditionalType.GreaterThanOrEqual; break; case ">": conditionalType = ConditionalType.GreaterThan; break; case "==": conditionalType = ConditionalType.Equal; break; case "<=": conditionalType = ConditionalType.LessThanOrEqual; break; case "<": conditionalType = ConditionalType.LessThan; break; case "<>": conditionalType = ConditionalType.NoEqual; break; case "like": if (item.fieldValue != null && item.fieldValue.ToString().Contains("[")) item.fieldValue = item.fieldValue.ToString().Replace("[", string.Empty).Replace("]", string.Empty); conditionalType = ConditionalType.Like; break; case "notLike": if (item.fieldValue != null && item.fieldValue.ToString().Contains("[")) item.fieldValue = item.fieldValue.ToString().Replace("[", string.Empty).Replace("]", string.Empty); conditionalType = ConditionalType.NoLike; break; case "in": case "notIn": if (item.fieldValue != null && item.fieldValue.ToString().Contains("[")) { var isListValue = false; var itemField = AllFieldsModel.Find(x => x.__vModel__.Equals(item.__vModel__)); if (itemField.multiple || item.jnpfKey.Equals(JnpfKeyConst.CHECKBOX) || item.jnpfKey.Equals(JnpfKeyConst.CASCADER) || item.jnpfKey.Equals(JnpfKeyConst.ADDRESS)) isListValue = true; var conditionalList = new ConditionalCollections() { ConditionalList = new List>() }; var ids = new List(); if (item.fieldValue.ToString().Replace("\r\n", "").Replace(" ", "").Contains("[[")) ids = item.fieldValue.ToObject>>().Select(x => x.Last()).ToList(); else ids = item.fieldValue.ToObject>(); for (var i = 0; i < ids.Count; i++) { var it = ids[i]; var whereType = WhereType.And; if (item.symbol.Equals("in")) whereType = i.Equals(0) && item.logic.Equals("&&") ? WhereType.And : WhereType.Or; else whereType = i.Equals(0) && item.logic.Equals("||") ? WhereType.Or : WhereType.And; conditionalList.ConditionalList.Add(new KeyValuePair(whereType, new ConditionalModel { FieldName = item.field, ConditionalType = item.symbol.Equals("in") ? ConditionalType.Like : ConditionalType.NoLike, FieldValue = isListValue ? it.ToJsonString() : it })); } if (item.symbol.Equals("notIn")) { conditionalList.ConditionalList.Add(new KeyValuePair(WhereType.And, new ConditionalModel { FieldName = item.field, ConditionalType = ConditionalType.IsNot, FieldValue = null })); conditionalList.ConditionalList.Add(new KeyValuePair(WhereType.And, new ConditionalModel { FieldName = item.field, ConditionalType = ConditionalType.IsNot, FieldValue = string.Empty })); } return conditionalList; } conditionalType = item.symbol.Equals("in") ? ConditionalType.In : ConditionalType.NotIn; break; case "null": conditionalType = (item.jnpfKey.Equals(JnpfKeyConst.CALCULATE) || item.jnpfKey.Equals(JnpfKeyConst.NUMINPUT)) ? ConditionalType.EqualNull : ConditionalType.IsNullOrEmpty; break; case "notNull": conditionalType = ConditionalType.IsNot; break; case "between": return new ConditionalCollections() { ConditionalList = new List>() { new KeyValuePair((item.logic.Equals("&&") ? WhereType.And : WhereType.Or), new ConditionalModel { FieldName = item.field, ConditionalType = ConditionalType.GreaterThanOrEqual, FieldValue = between.First(), FieldValueConvertFunc = it => Convert.ToDateTime(it) }), new KeyValuePair(WhereType.And, new ConditionalModel { FieldName = item.field, ConditionalType = ConditionalType.LessThanOrEqual, FieldValue = between.Last(), FieldValueConvertFunc = it => Convert.ToDateTime(it) }) } }; } return new ConditionalCollections() { ConditionalList = new List>() { new KeyValuePair((item.logic.Equals("&&") ? WhereType.And : WhereType.Or), new ConditionalModel { FieldName = item.field, ConditionalType = conditionalType, FieldValue = item.fieldValue == null ? null : item.fieldValue.ToString() }) } }; } }