This commit is contained in:
2023-05-31 10:19:05 +08:00
parent 1b65a7a9e5
commit 9c621c75cd
238 changed files with 9905 additions and 4034 deletions

View File

@@ -1,11 +1,10 @@
using JNPF.Common.Const;
using JNPF.Common.Extension;
using JNPF.Common.Models;
using JNPF.Common.Security;
using JNPF.Systems.Entitys.System;
using JNPF.VisualDev.Engine.Model;
using JNPF.VisualDev.Entitys;
using Mapster;
using SqlSugar;
namespace JNPF.VisualDev.Engine.Core;
@@ -145,6 +144,16 @@ public class TemplateParsingBase
/// </summary>
public List<string> selectKey { get; set; }
/// <summary>
/// PC数据过滤 .
/// </summary>
public List<IConditionalModel> DataRuleListJson { get; set; }
/// <summary>
/// App数据过滤 .
/// </summary>
public List<IConditionalModel> AppDataRuleListJson { get; set; }
/// <summary>
/// 模板解析帮助 构造 (功能表单).
/// </summary>
@@ -177,96 +186,75 @@ public class TemplateParsingBase
visualDevEntity = entity;
WebType = entity.WebType;
if (entity.FlowId.IsNotEmptyOrNull() && entity.EnableFlow.Equals(1)) WebType = 3;
FormDataModel formModel = entity.FormData.ToObject<FormDataModel>();
FormModel = formModel; // 表单Json模型
IsHasTable = !string.IsNullOrEmpty(entity.Tables) && !"[]".Equals(entity.Tables); // 是否有表
AllFieldsModel = GetInDataFieldsModel(formModel.fields.ToJsonString().ToObject<List<FieldsModel>>()); // 所有控件集合
FieldsModelList = GetInDataFieldsModel(formModel.fields); // 已剔除布局控件集合
MainTable = entity.Tables.ToList<TableModel>().Find(m => m.typeId.Equals("1")); // 主表
MainTableName = MainTable?.table; // 主表名称
AddChlidTableFeildsModel();
// 处理旧控件 部分没有 tableName
FieldsModelList.Where(x => string.IsNullOrWhiteSpace(x.__config__.tableName)).ToList().ForEach(item =>
// 数据视图
if (entity.WebType.Equals(4))
{
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<List<TableModel>>(); // 所有表
AuxiliaryTableFieldsModelList = FieldsModelList.Where(x => x.__vModel__.Contains("_jnpf_")).ToList(); // 单控件副表集合
ChildTableFieldsModelList = FieldsModelList.Where(x => x.__config__.jnpfKey == "table").ToList(); // 子表集合
MainTableFieldsModelList = FieldsModelList.Except(AuxiliaryTableFieldsModelList).Except(ChildTableFieldsModelList).ToList(); // 主表控件集合
SingleFormData = FieldsModelList.Where(x => x.__config__.jnpfKey != "table").ToList(); // 非子表集合
GenerateFields = GetGenerateFields(); // 系统生成控件
MainTableFields = new Dictionary<string, string>();
AuxiliaryTableFields = new Dictionary<string, string>();
ChildTableFields = new Dictionary<string, string>();
AllTableFields = new Dictionary<string, string>();
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 =>
FullName = entity.FullName;
IsHasTable = false;
InitColumnData(entity);
AllFieldsModel = new List<FieldsModel>();
ColumnData.columnList.ForEach(item =>
{
ChildTableFields.Add(item.__vModel__ + "-" + x.__vModel__, item.__config__.tableName + "." + x.__vModel__);
AllTableFields.Add(item.__vModel__ + "-" + x.__vModel__, item.__config__.tableName + "." + x.__vModel__);
AllFieldsModel.Add(new FieldsModel() { __vModel__ = item.__vModel__, __config__ = new ConfigModel() { label = item.label, jnpfKey = item.jnpfKey } });
});
});
if (!string.IsNullOrWhiteSpace(entity.ColumnData)) ColumnData = entity.ColumnData.ToObject<ColumnDesignModel>(); // 列配置模型
else ColumnData = new ColumnDesignModel();
if (!string.IsNullOrWhiteSpace(entity.AppColumnData)) AppColumnData = entity.AppColumnData.ToObject<ColumnDesignModel>(); // 列配置模型
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);
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;
}
if (AppColumnData.searchList != null && AppColumnData.searchList.Any())
else
{
AppColumnData.searchList.ForEach(item =>
FormDataModel formModel = entity.FormData.ToObjectOld<FormDataModel>();
FormModel = formModel; // 表单Json模型
IsHasTable = !string.IsNullOrEmpty(entity.Tables) && !"[]".Equals(entity.Tables); // 是否有表
AllFieldsModel = GetInDataFieldsModel(formModel.fields.ToJsonString().ToObjectOld<List<FieldsModel>>()); // 所有控件集合
FieldsModelList = GetInDataFieldsModel(formModel.fields); // 已剔除布局控件集合
MainTable = entity.Tables.ToList<TableModel>().Find(m => m.typeId.Equals("1")); // 主表
MainTableName = MainTable?.table; // 主表名称
AddChlidTableFeildsModel();
// 处理旧控件 部分没有 tableName
FieldsModelList.Where(x => string.IsNullOrWhiteSpace(x.__config__.tableName)).ToList().ForEach(item =>
{
var addSearch = ColumnData.searchList.Find(x => x.__config__.jnpfKey == item.__config__.jnpfKey);
if (addSearch == null) ColumnData.searchList.Add(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<List<TableModel>>(); // 所有表
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(); // 系统生成控件
if (ColumnData.searchList != null && ColumnData.searchList.Any())
{
ColumnData.searchList.Where(x => x.__config__.jnpfKey == JnpfKeyConst.CASCADER).ToList().ForEach(item =>
MainTableFields = new Dictionary<string, string>();
AuxiliaryTableFields = new Dictionary<string, string>();
ChildTableFields = new Dictionary<string, string>();
AllTableFields = new Dictionary<string, string>();
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 =>
{
var it = SingleFormData.FirstOrDefault(x => x.__vModel__ == item.__vModel__);
if (it != null) item.multiple = it.props.props.multiple;
ChildTableFields.Add(item.__vModel__ + "-" + x.__vModel__, item.__config__.tableName + "." + x.__vModel__);
AllTableFields.Add(item.__vModel__ + "-" + x.__vModel__, item.__config__.tableName + "." + x.__vModel__);
});
}
FullName = entity.FullName;
if (ColumnData.uploaderTemplateJson != null && ColumnData.uploaderTemplateJson.selectKey != null)
{
dataType = ColumnData.uploaderTemplateJson.dataType;
selectKey = new List<string>();
// 列顺序
AllFieldsModel.ForEach(item =>
{
if (ColumnData.uploaderTemplateJson.selectKey.Any(x => x.Equals(item.__vModel__))) selectKey.Add(item.__vModel__);
});
InitColumnData(entity);
}
}
@@ -312,9 +300,9 @@ public class TemplateParsingBase
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 == "table").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 != "table").ToList(); // 非子表集合
SingleFormData = FieldsModelList.Where(x => x.__config__.jnpfKey != JnpfKeyConst.TABLE).ToList(); // 非子表集合
GenerateFields = GetGenerateFields(); // 系统生成控件
MainTableFields = new Dictionary<string, string>();
@@ -356,7 +344,7 @@ public class TemplateParsingBase
/// <returns>true 通过.</returns>
public bool VerifyTemplate()
{
if (FieldsModelList != null && FieldsModelList.Any(x => x.__config__.jnpfKey == "table"))
if (FieldsModelList != null && FieldsModelList.Any(x => x.__config__.jnpfKey == JnpfKeyConst.TABLE))
{
foreach (FieldsModel? item in ChildTableFieldsModelList)
{
@@ -477,10 +465,10 @@ public class TemplateParsingBase
}
else
{
FormDataModel formModel = formJson.ToObject<FormDataModel>();
FormDataModel formModel = formJson.ToObjectOld<FormDataModel>();
FormModel = formModel; // 表单Json模型
IsHasTable = !string.IsNullOrEmpty(tables) && !"[]".Equals(tables); // 是否有表
AllFieldsModel = GetInDataFieldsModel(formModel.fields.ToJsonString().ToObject<List<FieldsModel>>()); // 所有控件集合
IsHasTable = !string.IsNullOrEmpty(tables) && !"[]".Equals(tables) && tables.IsNullOrEmpty(); // 是否有表
AllFieldsModel = GetInDataFieldsModel(formModel.fields.ToJsonString().ToObjectOld<List<FieldsModel>>()); // 所有控件集合
FieldsModelList = GetInDataFieldsModel(formModel.fields); // 已剔除布局控件集合
MainTable = tables.ToList<TableModel>().Find(m => m.typeId.Equals("1")); // 主表
MainTableName = MainTable?.table; // 主表名称
@@ -494,9 +482,9 @@ public class TemplateParsingBase
});
AllTable = tables.ToObject<List<TableModel>>(); // 所有表
AuxiliaryTableFieldsModelList = FieldsModelList.Where(x => x.__vModel__.Contains("_jnpf_")).ToList(); // 单控件副表集合
ChildTableFieldsModelList = FieldsModelList.Where(x => x.__config__.jnpfKey == "table").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 != "table").ToList(); // 非子表集合
SingleFormData = FieldsModelList.Where(x => x.__config__.jnpfKey != JnpfKeyConst.TABLE).ToList(); // 非子表集合
GenerateFields = GetGenerateFields(); // 系统生成控件
MainTableFields = new Dictionary<string, string>();
@@ -526,4 +514,233 @@ public class TemplateParsingBase
AppColumnData = new ColumnDesignModel();
}
}
/// <summary>
/// 初始化列配置模型.
/// </summary>
private void InitColumnData(VisualDevEntity entity)
{
if (!string.IsNullOrWhiteSpace(entity.ColumnData)) ColumnData = entity.ColumnData.ToObject<ColumnDesignModel>(); // 列配置模型
else ColumnData = new ColumnDesignModel();
if (!string.IsNullOrWhiteSpace(entity.AppColumnData)) AppColumnData = entity.AppColumnData.ToObject<ColumnDesignModel>(); // 列配置模型
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<string>();
// 列顺序
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<IConditionalModel>();
var condTree = new ConditionalTree() { ConditionalList = new List<KeyValuePair<WhereType, IConditionalModel>>() };
ColumnData.ruleList.ForEach(item => condTree.ConditionalList.Add(new KeyValuePair<WhereType, IConditionalModel>(WhereType.And, GetItemRule(item))));
DataRuleListJson.Add(condTree);
}
if (AppColumnData.ruleListApp != null && AppColumnData.ruleListApp.Any())
{
AppDataRuleListJson = new List<IConditionalModel>();
var condTree = new ConditionalTree() { ConditionalList = new List<KeyValuePair<WhereType, IConditionalModel>>() };
AppColumnData.ruleListApp.ForEach(item => condTree.ConditionalList.Add(new KeyValuePair<WhereType, IConditionalModel>(WhereType.And, GetItemRule(item))));
AppDataRuleListJson.Add(condTree);
}
}
private IConditionalModel GetItemRule(RuleFieldModel item)
{
var conditionalType = ConditionalType.Equal;
var between = new List<string>();
if (item.fieldValue.IsNotEmptyOrNull())
{
if (item.symbol.Equals("between")) between = item.fieldValue.ToObject<List<string>>();
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<KeyValuePair<WhereType, ConditionalModel>>() };
var ids = new List<string>();
if (item.fieldValue.ToString().Replace("\r\n", "").Replace(" ", "").Contains("[[")) ids = item.fieldValue.ToObject<List<List<string>>>().Select(x => x.Last()).ToList();
else ids = item.fieldValue.ToObject<List<string>>();
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, ConditionalModel>(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, ConditionalModel>(WhereType.And, new ConditionalModel
{
FieldName = item.field,
ConditionalType = ConditionalType.IsNot,
FieldValue = null
}));
conditionalList.ConditionalList.Add(new KeyValuePair<WhereType, ConditionalModel>(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<KeyValuePair<WhereType, ConditionalModel>>()
{
new KeyValuePair<WhereType, ConditionalModel>((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, ConditionalModel>(WhereType.And, new ConditionalModel
{
FieldName = item.field,
ConditionalType = ConditionalType.LessThanOrEqual,
FieldValue = between.Last(),
FieldValueConvertFunc = it => Convert.ToDateTime(it)
})
}
};
}
return new ConditionalCollections()
{
ConditionalList = new List<KeyValuePair<WhereType, ConditionalModel>>()
{
new KeyValuePair<WhereType, ConditionalModel>((item.logic.Equals("&&") ? WhereType.And : WhereType.Or), new ConditionalModel
{
FieldName = item.field,
ConditionalType = conditionalType,
FieldValue = item.fieldValue == null ? null : item.fieldValue.ToString()
})
}
};
}
}