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