将Engine中的CodeGen移入到VisualDev

This commit is contained in:
2023-03-23 16:56:03 +08:00
parent 05985a0e43
commit f95ef4cf73
5 changed files with 122 additions and 18 deletions

View File

@@ -1,497 +0,0 @@
using JNPF.Common.Const;
using JNPF.Common.Extension;
using JNPF.Common.Manager;
using JNPF.Common.Security;
using JNPF.DependencyInjection;
using JNPF.Systems.Entitys.Permission;
using JNPF.VisualDev.Engine;
using JNPF.VisualDev.Entitys.Dto.VisualDevModelData;
using JNPF.VisualDev.Entitys;
using JNPF.VisualDev.Interfaces;
using Newtonsoft.Json.Linq;
using SqlSugar;
using JNPF.Systems.Entitys.System;
using JNPF.Systems.Interfaces.System;
using JNPF.RemoteRequest.Extensions;
using JNPF.Systems.Entitys.Model.DataInterFace;
using JNPF.Common.Core.Manager;
using Microsoft.AspNetCore.Identity;
using Spire.Pdf.Lists;
using Senparc.NeuChar.Entities;
namespace JNPF.Common.CodeGen.DataParsing;
public class ControlParsing : ITransient
{
/// <summary>
/// 服务基础仓储.
/// </summary>
private readonly ISqlSugarRepository<UserEntity> _repository;
/// <summary>
/// 缓存管理.
/// </summary>
private readonly ICacheManager _cacheManager;
/// <summary>
/// 用户管理.
/// </summary>
private readonly IUserManager _userManager;
/// <summary>
/// 数据接口.
/// </summary>
private readonly IDataInterfaceService _dataInterfaceService;
/// <summary>
/// 解析控件的控件属性 (vModel , Attr).
/// </summary>
private Dictionary<string, FieldsModel>? ControlAttr;
/// <summary>
/// 构造函数.
/// </summary>
public ControlParsing(
IUserManager userManager,
ISqlSugarRepository<UserEntity> repositoryRepository,
IDataInterfaceService dataInterfaceService,
ICacheManager cacheManager)
{
_userManager = userManager;
_repository = repositoryRepository;
_cacheManager = cacheManager;
_dataInterfaceService = dataInterfaceService;
}
/// <summary>
/// 解析控件数据.
/// </summary>
/// <param name="oldDatas">原数据集合.</param>
/// <param name="vModelStr">解析的字段集合 多个需以 ,号隔开.</param>
/// <param name="jnpfKeyConst">控件类型 (JnpfKeyConst).</param>
/// <param name="tenantId">租户Id.</param>
/// <param name="vModelAttr">控件属性 (vModel ,属性字符串).</param>
/// <returns></returns>
public async Task<List<Dictionary<string, object>>> GetParsDataList(List<Dictionary<string, object>> oldDatas, string vModelStr, string jnpfKeyConst, string tenantId, List<FieldsModel>? vModelAttr = null)
{
ControlAttr = new Dictionary<string, FieldsModel>();
if (vModelAttr != null) vModelAttr.ForEach(it => ControlAttr.Add(it.__vModel__, it));
var vModels = new Dictionary<string, object>();
var vModelList = vModelStr.Split(',');
oldDatas.ForEach(items =>
{
foreach (var item in items)
{
if (vModelList.Contains(item.Key) && !vModels.ContainsKey(item.Key)) vModels.Add(item.Key, jnpfKeyConst);
// 子表
if (item.Value != null && item.Key.ToLower().Contains("tablefield") && (item.Value is List<Dictionary<string, object>> || item.Value.GetType().Name.Equals("JArray")))
{
var ctOldDatas = item.Value.ToObject<List<Dictionary<string, object>>>();
ctOldDatas.ForEach(ctItems =>
{
foreach (var ctItem in ctItems) if (vModelList.Contains(ctItem.Key) && !vModels.ContainsKey(ctItem.Key)) vModels.Add(ctItem.Key, jnpfKeyConst);
});
}
}
});
return await GetParsDataByList(oldDatas, vModels, tenantId);
}
/// <summary>
/// 获取解析数据.
/// </summary>
/// <param name="oldDatas">原数据集合.</param>
/// <param name="vModels">需解析的字段 (字段名,JnpfKeyConst/子表dictionary).</param>
/// <param name="tenantId">租户Id.</param>
/// <returns></returns>
private async Task<List<Dictionary<string, object>>> GetParsDataByList(List<Dictionary<string, object>> oldDatas, Dictionary<string, object> vModels, string tenantId)
{
var cacheData = await GetCaCheData(vModels, tenantId);
var usersselectDatas = cacheData.Where(t => t.Key.Equals(CommonConst.CodeGenDynamic + "_usersSelect_" + tenantId)).FirstOrDefault().Value.ToObject<Dictionary<string, string>>(); // 用户组件
oldDatas.ForEach(async items =>
{
foreach (var item in items)
{
if (vModels.Any(x => x.Key.Equals(item.Key)))
{
FieldsModel model = ControlAttr.ContainsKey(item.Key) ? ControlAttr[item.Key] : new FieldsModel();
model.separator = ",";
var jnpfKey = vModels.FirstOrDefault(x => x.Key.Equals(item.Key)).Value;
switch (jnpfKey)
{
case JnpfKeyConst.USERSSELECT:
{
if (item.Value != null)
{
var vList = new List<string>();
if (item.Value.ToString().Contains("[")) vList = item.Value.ToString().ToObject<List<string>>();
else vList.Add(item.Value.ToString());
var itemValues = new List<string>();
vList.ForEach(it =>
{
if (usersselectDatas.ContainsKey(it)) itemValues.Add(usersselectDatas[it]);
});
if (itemValues.Any()) items[item.Key] = string.Join(",", itemValues);
}
}
break;
case JnpfKeyConst.POPUPTABLESELECT:
case JnpfKeyConst.POPUPSELECT: // 弹窗选择
{
if (model.interfaceId.IsNullOrEmpty()) continue;
List<Dictionary<string, string>> popupselectDataList = new List<Dictionary<string, string>>();
// 获取远端数据
var dynamic = await _dataInterfaceService.GetInfo(model.interfaceId);
var redisName = CommonConst.CodeGenDynamic + "_" + model.interfaceId + "_" + tenantId;
if (_cacheManager.Exists(redisName))
{
popupselectDataList = _cacheManager.Get(redisName).ToObject<List<Dictionary<string, string>>>();
}
else
{
if (dynamic == null) break;
switch (dynamic.DataType)
{
case 1: // SQL数据
{
_dataInterfaceService.ReplaceParameterValue(dynamic, new Dictionary<string, string>());
var pObj = await _dataInterfaceService.GetData(dynamic);
popupselectDataList = pObj.ToJsonString().ToObject<List<Dictionary<string, string>>>();
}
break;
case 2: // 静态数据
{
var children = model.props.props.children;
foreach (var data in JValue.Parse(dynamic.Query))
{
popupselectDataList.Add(new Dictionary<string, string>() { { data.Value<string>(model.props.props.value), data.Value<string>(model.props.props.label) } });
if (data.Value<object>(children) != null && data.Value<object>(children).ToString() != "")
popupselectDataList.AddRange(GetDynamicInfiniteData(data.Value<object>(children).ToString(), model.props.props));
}
}
break;
case 3: // Api数据
{
var result = await GetApiDataByTypePreview(dynamic); // 请求接口
popupselectDataList = result.ContainsKey("list") ? result["list"].ToObject<List<Dictionary<string, string>>>() : new List<Dictionary<string, string>>();
if ((popupselectDataList == null || !popupselectDataList.Any()) && result.ContainsKey("data"))
popupselectDataList = result["data"].ToObject<Dictionary<string, object>>().ContainsKey("list") ? result["data"]["list"].ToObject<List<Dictionary<string, string>>>() : new List<Dictionary<string, string>>();
}
break;
}
_cacheManager.Set(redisName, popupselectDataList.ToList(), TimeSpan.FromMinutes(10)); // 缓存10分钟
popupselectDataList = _cacheManager.Get(redisName).ToObject<List<Dictionary<string, string>>>();
}
switch (dynamic.DataType)
{
case 1: // SQL数据
{
var specificData = popupselectDataList.Where(it => it.ContainsKey(model.propsValue) && it.ContainsValue(items[item.Key].ToString())).FirstOrDefault();
if (specificData != null)
{
// 要用模板的 “显示字段 - relationField”来展示数据
items[item.Key + "_id"] = items[item.Key];
items[item.Key] = specificData[model.relationField];
}
else
{
if (model.multiple)
{
var nameList = new List<string>();
items[item.Key].ToObject<List<string>>().ForEach(strIt =>
{
var specificData = popupselectDataList.Where(it => it.ContainsKey(model.propsValue) && it.ContainsValue(strIt)).FirstOrDefault();
if (specificData != null)
{
// 要用模板的 “显示字段 - relationField”来展示数据
if (model.relationField.IsNotEmptyOrNull())
nameList.Add(specificData[model.relationField]);
}
});
if (nameList.Any())
{
items[item.Key + "_id"] = items[item.Key];
items[item.Key] = string.Join(model.separator, nameList);
}
}
else
{
items[item.Key] = items[item.Key].ToString().Contains("[") ? string.Join(model.separator, items[item.Key].ToObject<List<object>>()) : items[item.Key];
}
}
}
break;
case 2: // 静态数据
{
List<string> dataList = items[item.Key].ToJsonString().ToObject<List<string>>();
List<string> cascaderList = new List<string>();
foreach (var it in dataList)
{
var vara = popupselectDataList.Where(a => a.ContainsValue(it)).FirstOrDefault();
if (vara != null) cascaderList.Add(vara[model.props.props.label]);
}
items[item.Key + "_id"] = items[item.Key];
items[item.Key] = string.Join(model.separator, cascaderList);
}
break;
case 3: // Api数据
{
List<object> cascaderList = new List<object>();
if (popupselectDataList != null) popupselectDataList.ForEach(obj => { if (obj[model.propsValue] == items[item.Key].ToString()) cascaderList.Add(obj[model.relationField]); });
items[item.Key + "_id"] = items[item.Key];
items[item.Key] = string.Join(model.separator, cascaderList);
}
break;
}
}
break;
case JnpfKeyConst.RELATIONFORM: // 关联表单
{
if (model.modelId.IsNullOrEmpty()) continue;
List<Dictionary<string, object>> relationFormDataList = new List<Dictionary<string, object>>();
var redisName = CommonConst.CodeGenDynamic + "_" + model.modelId + "_" + tenantId;
if (_cacheManager.Exists(redisName))
{
relationFormDataList = _cacheManager.Get(redisName).ToObject<List<Dictionary<string, object>>>();
}
else
{
// 根据可视化功能ID获取该模板全部数据
var relationFormModel = await _repository.AsSugarClient().Queryable<VisualDevEntity>().FirstAsync(v => v.Id == model.modelId);
var newFieLdsModelList = relationFormModel.FormData.ToObject<FormDataModel>().fields.FindAll(x => model.relationField.Equals(x.__vModel__));
VisualDevModelListQueryInput listQueryInput = new VisualDevModelListQueryInput
{
dataType = "1",
pageSize = 999999
};
Scoped.Create(async (_, scope) =>
{
var services = scope.ServiceProvider;
var _runService = App.GetService<IRunService>(services);
var res = await _runService.GetRelationFormList(relationFormModel, listQueryInput);
_cacheManager.Set(redisName, res.list.ToList(), TimeSpan.FromMinutes(10)); // 缓存10分钟
});
var cacheStr = _cacheManager.Get(redisName);
if (cacheStr.IsNotEmptyOrNull()) relationFormDataList = _cacheManager.Get(redisName).ToObject<List<Dictionary<string, object>>>();
}
var relationFormRealData = relationFormDataList.Where(it => it["id"].Equals(items[item.Key])).FirstOrDefault();
if (relationFormRealData != null && relationFormRealData.Count > 0)
{
items[item.Key + "_id"] = relationFormRealData["id"];
items[item.Key] = relationFormRealData.ContainsKey(model.relationField) ? relationFormRealData[model.relationField] : string.Empty;
}
else
{
items[item.Key] = string.Empty;
}
}
break;
}
}
// 子表
if (item.Value != null && item.Key.ToLower().Contains("tablefield") && (item.Value is List<Dictionary<string, object>> || item.Value.GetType().Name.Equals("JArray")))
{
var ctList = item.Value.ToObject<List<Dictionary<string, object>>>();
var ctVModels = new Dictionary<string, object>();
vModels.Where(x => x.Key.Contains(item.Key)).ToList().ForEach(ctItem => ctVModels.Add(ctItem.Key.Split("-").LastOrDefault(), ctItem.Value));
if (ctList.Any()) items[item.Key] = await GetParsDataByList(ctList, ctVModels, tenantId);
}
}
});
return oldDatas;
}
/// <summary>
/// 获取解析数据缓存.
/// </summary>
/// <param name="vModels"></param>
/// <param name="tenantId"></param>
/// <returns></returns>
private async Task<Dictionary<string, object>> GetCaCheData(Dictionary<string, object> vModels, string tenantId)
{
var res = new Dictionary<string, object>();
if (vModels.Where(x => x.Value.Equals(JnpfKeyConst.USERSSELECT)).Any())
{
string? userCacheKey = CommonConst.CodeGenDynamic + "_usersSelect_" + tenantId;
if (_cacheManager.Exists(userCacheKey))
{
res.Add(userCacheKey, _cacheManager.Get(userCacheKey).ToObject<Dictionary<string, object>>());
}
else
{
var addList = new Dictionary<string, string>();
(await _repository.AsSugarClient().Queryable<UserEntity>().Where(x => x.DeleteMark == null).Select(x => new { x.Id, x.RealName, x.Account }).ToListAsync()).ForEach(item => addList.Add(item.Id + "--user", item.RealName + "/" + item.Account));
(await _repository.AsSugarClient().Queryable<OrganizeEntity>().Where(x => x.DeleteMark == null).Select(x => new { x.Id, x.FullName }).ToListAsync()).ForEach(item =>
{
addList.Add(item.Id + "--company", item.FullName);
addList.Add(item.Id + "--department", item.FullName);
});
(await _repository.AsSugarClient().Queryable<RoleEntity>().Where(x => x.DeleteMark == null).Select(x => new { x.Id, x.FullName }).ToListAsync()).ForEach(item => addList.Add(item.Id + "--role", item.FullName));
(await _repository.AsSugarClient().Queryable<PositionEntity>().Where(x => x.DeleteMark == null).Select(x => new { x.Id, x.FullName }).ToListAsync()).ForEach(item => addList.Add(item.Id + "--position", item.FullName));
(await _repository.AsSugarClient().Queryable<GroupEntity>().Where(x => x.DeleteMark == null).Select(x => new { x.Id, x.FullName }).ToListAsync()).ForEach(item => addList.Add(item.Id + "--group", item.FullName));
// 缓存5分钟
_cacheManager.Set(userCacheKey, addList, TimeSpan.FromMinutes(5));
res.Add(userCacheKey, addList);
}
}
return res;
}
/// <summary>
/// 获取用户组件查询条件组装.
/// </summary>
/// <param name="key">字段名.</param>
/// <param name="value">查询值.</param>
/// <param name="multiple">是否多选.</param>
/// <returns></returns>
public List<IConditionalModel> GetUsersSelectQueryWhere(string key, string value, bool multiple)
{
var conModels = new List<IConditionalModel>();
if (value.IsNullOrEmpty()) return conModels;
if (multiple)
{
var rIdList = _repository.AsSugarClient().Queryable<UserRelationEntity>().Where(x => x.UserId.Equals(value.Replace("--user", string.Empty))).Select(x => new { x.ObjectId, x.ObjectType }).ToList();
var objIdList = new List<string>() { value };
rIdList.ForEach(x =>
{
if (x.ObjectType.Equals("Organize"))
{
objIdList.Add(x.ObjectId + "--company");
objIdList.Add(x.ObjectId + "--department");
}
else
{
objIdList.Add(x.ObjectId + "--" + x.ObjectType.ToLower());
}
});
var whereList = new List<KeyValuePair<WhereType, ConditionalModel>>();
for (var i = 0; i < objIdList.Count(); i++)
{
if (i == 0)
{
whereList.Add(new KeyValuePair<WhereType, ConditionalModel>(WhereType.And, new ConditionalModel
{
FieldName = key,
ConditionalType = ConditionalType.Like,
FieldValue = objIdList[i]
}));
}
else
{
whereList.Add(new KeyValuePair<WhereType, ConditionalModel>(WhereType.Or, new ConditionalModel
{
FieldName = key,
ConditionalType = ConditionalType.Like,
FieldValue = objIdList[i]
}));
}
}
conModels.Add(new ConditionalCollections() { ConditionalList = whereList });
}
else
{
conModels.Add(new ConditionalCollections()
{
ConditionalList = new List<KeyValuePair<WhereType, ConditionalModel>>()
{
new KeyValuePair<WhereType, ConditionalModel>(WhereType.And, new ConditionalModel
{
FieldName = key,
ConditionalType = ConditionalType.Equal,
FieldValue = value
})
}
});
}
return conModels;
}
#region
/// <summary>
/// 获取动态无限级数据.
/// </summary>
/// <param name="data"></param>
/// <param name="props"></param>
/// <returns></returns>
private List<Dictionary<string, string>> GetDynamicInfiniteData(string data, PropsBeanModel props)
{
List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
string? value = props.value;
string? label = props.label;
string? children = props.children;
foreach (JToken? info in JToken.Parse(data))
{
Dictionary<string, string> dic = new Dictionary<string, string>();
dic[info.Value<string>(value)] = info.Value<string>(label);
list.Add(dic);
if (info.Value<object>(children) != null && info.Value<object>(children).ToString() != string.Empty)
list.AddRange(GetDynamicInfiniteData(info.Value<object>(children).ToString(), props));
}
return list;
}
/// <summary>
/// 根据不同规则请求接口(预览).
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task<JObject> GetApiDataByTypePreview(DataInterfaceEntity entity)
{
var result = new JObject();
var parameters = entity.RequestParameters.ToObject<List<DataInterfaceReqParameter>>();
var parametersHerader = entity.RequestHeaders.ToObject<List<DataInterfaceReqParameter>>();
var dic = new Dictionary<string, object>();
var dicHerader = new Dictionary<string, object>();
dicHerader.Add("JNPF_API", true);
if (_userManager.ToKen != null && !_userManager.ToKen.Contains("::"))
dicHerader.Add("Authorization", _userManager.ToKen);
foreach (var key in parameters)
{
dic.Add(key.field, key.defaultValue);
}
foreach (var key in parametersHerader)
{
dicHerader[key.field] = key.defaultValue;
}
switch (entity.RequestMethod)
{
case "6":
result = (await entity.Path.SetHeaders(dicHerader).SetQueries(dic).GetAsStringAsync()).ToObject<JObject>();
break;
case "7":
result = (await entity.Path.SetHeaders(dicHerader).SetBody(dic).PostAsStringAsync()).ToObject<JObject>();
break;
}
return result;
}
#endregion
}

View File

@@ -1,6 +1,8 @@
using JNPF.Common.Const;
using JNPF.Common.Core.Manager;
using JNPF.Common.Dtos;
using JNPF.Common.Extension;
using JNPF.Common.Filter;
using JNPF.Common.Manager;
using JNPF.Common.Models;
using JNPF.Common.Security;
@@ -18,6 +20,7 @@ using JNPF.VisualDev.Entitys;
using JNPF.VisualDev.Entitys.Dto.VisualDevModelData;
using JNPF.VisualDev.Interfaces;
using JNPF.WorkFlow.Entitys.Entity;
using Mapster;
using Newtonsoft.Json.Linq;
using SqlSugar;
@@ -1368,8 +1371,16 @@ public class FormDataParsing : ITransient
/// <param name="actionType"></param>
/// <param name="webType">表单类型1-纯表单、2-普通表单、3-工作流表单.</param>
/// <param name="primaryKey">数据主键.</param>
/// <param name="mainData">子表解析时调用 (控件联动可能需要主表的数据).</param>
/// <returns></returns>
public async Task<List<Dictionary<string, object>>> GetKeyData(List<FieldsModel> formData, List<Dictionary<string, object>> list, ColumnDesignModel? columnDesign = null, string actionType = "List", int webType = 2, string primaryKey = "F_Id")
public async Task<List<Dictionary<string, object>>> GetKeyData(
List<FieldsModel> formData,
List<Dictionary<string, object>> list,
ColumnDesignModel? columnDesign = null,
string actionType = "List",
int webType = 2,
string primaryKey = "F_Id",
Dictionary<string, object>? mainData = null)
{
// 获取控件缓存数据
Dictionary<string, object> templateData = await GetVisualDevCaCheData(formData);
@@ -1386,6 +1397,7 @@ public class FormDataParsing : ITransient
List<Dictionary<string, string>>? userselectTemplateValue = new List<Dictionary<string, string>>(); // 用户
List<Dictionary<string, string>>? usersselectTemplateValue = new List<Dictionary<string, string>>(); // 用户组件
List<Dictionary<string, string>>? posselectTemplateValue = new List<Dictionary<string, string>>(); // 岗位
List<Dictionary<string, string>>? radioTemplateValue = new List<Dictionary<string, string>>(); // 单选框
List<Dictionary<string, string>>? checkboxTemplateValue = new List<Dictionary<string, string>>(); // 复选框
List<Dictionary<string, string>>? selectTemplateValue = new List<Dictionary<string, string>>(); // 下拉框
List<Dictionary<string, string>>? treeSelectTemplateValue = new List<Dictionary<string, string>>(); // 树
@@ -1417,6 +1429,8 @@ public class FormDataParsing : ITransient
// 转换列表数据
foreach (Dictionary<string, object>? dataMap in list)
{
var oldDataMap = dataMap.Copy();
if (mainData != null) oldDataMap.Add("JnpfKeyConst_MainData", mainData);
if (dataMap.ContainsKey(primaryKey)) dataMap["id"] = dataMap[primaryKey].ToString(); // 主键
int dicCount = dataMap.Keys.Count;
@@ -1571,17 +1585,20 @@ public class FormDataParsing : ITransient
case JnpfKeyConst.POSSELECT:
dataMap[strKey[i]] = GetTemplateDataValueByKey(posselectTemplateValue, templateValue, moreValue, form);
break;
case JnpfKeyConst.RADIO:
dataMap[strKey[i]] = GetTemplateDataValueByKey(radioTemplateValue, templateValue, moreValue, form, formData, oldDataMap);
break;
case JnpfKeyConst.CHECKBOX:
dataMap[strKey[i]] = GetTemplateDataValueByKey(checkboxTemplateValue, templateValue, moreValue, form);
dataMap[strKey[i]] = GetTemplateDataValueByKey(checkboxTemplateValue, templateValue, moreValue, form, formData, oldDataMap);
break;
case JnpfKeyConst.SELECT:
dataMap[strKey[i]] = GetTemplateDataValueByKey(selectTemplateValue, templateValue, moreValue, form);
dataMap[strKey[i]] = GetTemplateDataValueByKey(selectTemplateValue, templateValue, moreValue, form, formData, oldDataMap);
break;
case JnpfKeyConst.TREESELECT:
dataMap[strKey[i]] = GetTemplateDataValueByKey(treeSelectTemplateValue, templateValue, moreValue, form);
dataMap[strKey[i]] = GetTemplateDataValueByKey(treeSelectTemplateValue, templateValue, moreValue, form, formData, oldDataMap);
break;
case JnpfKeyConst.CASCADER:
dataMap[strKey[i]] = GetTemplateDataValueByKey(cascaderTemplateValue, templateValue, moreValue, form);
dataMap[strKey[i]] = GetTemplateDataValueByKey(cascaderTemplateValue, templateValue, moreValue, form, formData, oldDataMap);
break;
case JnpfKeyConst.GROUPSELECT:
dataMap[strKey[i]] = GetTemplateDataValueByKey(groupTemplateValue, templateValue, moreValue, form);
@@ -1892,8 +1909,10 @@ public class FormDataParsing : ITransient
/// <param name="tValue">所有的缓存</param>
/// <param name="mValue">要转换的key</param>
/// <param name="form">组件</param>
/// <param name="fieldList">所有组件(控件联动会用到)</param>
/// <param name="dataMap">当前行数据(控件联动会用到)</param>
/// <returns></returns>
private string GetTemplateDataValueByKey(List<Dictionary<string, string>> keyTData, KeyValuePair<string, object> tValue, IEnumerable<object> mValue, FieldsModel? form)
private string GetTemplateDataValueByKey(List<Dictionary<string, string>> keyTData, KeyValuePair<string, object> tValue, IEnumerable<object> mValue, FieldsModel? form, List<FieldsModel>? fieldList = null, Dictionary<string, object>? dataMap = null)
{
List<string>? data = new List<string>();
if (keyTData.Count < 1) keyTData = tValue.Value.ToObject<List<Dictionary<string, string>>>();
@@ -1909,6 +1928,7 @@ public class FormDataParsing : ITransient
if (cascaderData != null) sb.Add(cascaderData[items]);
});
if (sb.Count != 0) data.Add(string.Join("/", sb));
else data.Add(item.ToString());
}
}
else if (form.IsNotEmptyOrNull() && form.__config__.IsNotEmptyOrNull() && form.__config__.props.IsNotEmptyOrNull() && form.__config__.props.value.IsNotEmptyOrNull() && form.__config__.props.label.IsNotEmptyOrNull())
@@ -1930,6 +1950,45 @@ public class FormDataParsing : ITransient
}
}
// 控件联动
if (data.ToJsonString().Equals(mValue.ToJsonString()) && (form.__config__.templateJson != null && form.__config__.templateJson.Any()))
{
data.Clear();
form.__config__.templateJson.ForEach(x =>
{
if (x.relationField.ToLower().Contains("tablefield") && x.relationField.Contains("-"))
{
var rField = x.relationField.Split("-").Last();
if (dataMap.ContainsKey(rField)) x.defaultValue = dataMap[rField] != null ? dataMap[rField]?.ToString() : x.defaultValue;
}
else
{
if (dataMap.ContainsKey(x.relationField))
{
x.defaultValue = dataMap[x.relationField] != null ? dataMap[x.relationField]?.ToString() : x.defaultValue;
}
else if (dataMap.ContainsKey("JnpfKeyConst_MainData"))
{
var mainData = dataMap["JnpfKeyConst_MainData"].ToObject<Dictionary<string, object>>();
if (mainData.ContainsKey(x.relationField)) x.defaultValue = mainData[x.relationField] != null ? mainData[x.relationField]?.ToString() : x.defaultValue;
}
}
});
_databaseService.ChangeDataBase(_databaseService.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName));
var res = _dataInterfaceService.GetResponseByType(form.__config__.propsUrl, 0, string.Empty, new Common.Dtos.VisualDev.VisualDevDataFieldDataListInput() { paramList = form.__config__.templateJson.Adapt<List<DataInterfaceReqParameterInfo>>(), pageSize = 500, currentPage = 1 }).Result;
var resList = res.ToObject<PageResult<Dictionary<string,object>>>();
if (resList != null && resList.list.Any())
{
foreach (object? item in mValue)
{
var comData = resList.list.Where(a => a.ContainsValue(item.ToString())).FirstOrDefault();
var props = form.__config__.props != null ? form.__config__.props.label : form.props.props.label;
if (comData != null) data.Add(comData[props].ToString());
else data.Add(item.ToString());
}
}
}
return string.Join(form.separator, data);
}

View File

@@ -282,6 +282,7 @@ public class TemplateParsingBase
/// <param name="uploaderKey">导入导出数据列名集合.</param>
/// <param name="_dataType">导入类型 1 新增, 2 新增和修改.</param>
/// <param name="enableFlow">是否开启流程 1 开启.</param>
/// <param name="flowFormId">流程表单Id.</param>
public TemplateParsingBase(
DbLinkEntity dblink,
List<FieldsModel> fieldList,
@@ -290,9 +291,11 @@ public class TemplateParsingBase
int webType,
int primaryKeyPolicy,
List<string> uploaderKey,
string _dataType, int enableFlow = 0)
string _dataType,
int enableFlow = 0,
string flowFormId = "")
{
if (enableFlow.Equals(1)) visualDevEntity = new VisualDevEntity() { EnableFlow = 1 };
if (enableFlow.Equals(1)) visualDevEntity = new VisualDevEntity() { EnableFlow = 1, Id = flowFormId };
DbLink = dblink;
AllTable = tables.ToObject<List<TableModel>>(); // 所有表
FieldsModelList = fieldList;