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;
using JNPF.DependencyInjection;
using JNPF.RemoteRequest;
using JNPF.RemoteRequest.Extensions;
using JNPF.Systems.Entitys.Model.DataBase;
using JNPF.Systems.Entitys.Model.DataInterFace;
using JNPF.Systems.Entitys.Permission;
using JNPF.Systems.Entitys.System;
using JNPF.Systems.Interfaces.System;
using JNPF.UnifyResult;
using JNPF.VisualDev.Engine.Enum.VisualDevModelData;
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;
namespace JNPF.VisualDev.Engine.Core;
///
/// 模板表单列表数据解析.
///
public class FormDataParsing : ITransient
{
#region 构造
///
/// 用户管理.
///
private readonly IUserManager _userManager;
///
/// 切库.
///
private readonly IDataBaseManager _databaseService;
///
/// 数据接口.
///
private readonly IDataInterfaceService _dataInterfaceService;
///
/// 缓存管理.
///
private readonly ICacheManager _cacheManager;
///
/// 服务基础仓储.
///
private readonly ISqlSugarRepository _db;
///
/// 构造.
///
///
///
///
///
///
public FormDataParsing(
IUserManager userManager,
ICacheManager cacheManager,
IDataBaseManager databaseService,
IDataInterfaceService dataInterfaceService,
ISqlSugarRepository context)
{
_userManager = userManager;
_cacheManager = cacheManager;
_databaseService = databaseService;
_dataInterfaceService = dataInterfaceService;
_db = context;
}
#endregion
#region 解析模板数据
///
/// 控制模板数据转换.
///
/// 数据.
/// 数据模板.
/// 操作类型(List-列表值,create-创建值,update-更新值,detail-详情值,transition-过渡值,query-查询).
/// object.
public object TemplateControlsDataConversion(object data, FieldsModel fieldsModel, string? actionType = null)
{
if (fieldsModel == null || data == null || data.Equals("[]") || data.ToString().Equals("[]") || string.IsNullOrEmpty(data.ToString())) return string.Empty;
try
{
object conversionData = new object();
switch (fieldsModel.__config__.jnpfKey)
{
case JnpfKeyConst.SWITCH: // 开关
conversionData = data.ParseToInt();
break;
case JnpfKeyConst.RATE: // 评分
case JnpfKeyConst.NUMINPUT:
if (fieldsModel.precision.IsNullOrEmpty()) fieldsModel.precision = 0; // 数字输入
if (data.ToString().Contains("."))
{
var dataList = data.ToString().Split('.');
if (fieldsModel.precision == 0)
{
conversionData = dataList.First();
}
else
{
if (fieldsModel.precision > dataList.Last().Length) fieldsModel.precision = dataList.Last().Length;
conversionData = dataList.First() + "." + dataList.Last().Substring(0, (int)fieldsModel.precision);
}
conversionData = conversionData.ParseToDouble();//modifyby zhoukeda 20230605
}
else if (fieldsModel.precision > 0)
{
conversionData = data.ToString() + ".".PadRight((int)fieldsModel.precision + 1, '0');
conversionData = conversionData.ParseToDouble();//modifyby zhoukeda 20230605
}else conversionData = data;
break;
case JnpfKeyConst.JNPFAMOUNT:
conversionData = data.ParseToDecimal(); // 金额输入
break;
case JnpfKeyConst.CHECKBOX: // 多选框组
{
switch (actionType)
{
case "update":
case "create":
if (data.GetType().Name.ToLower().Equals("string")) conversionData = data.ToString();
else if (data.ToString().Contains("[")) conversionData = data.ToJsonString();
else conversionData = data;
break;
default:
if (data.ToString().Contains("[")) conversionData = data.ToString().ToObject>();
else conversionData = data;
break;
}
}
break;
case JnpfKeyConst.SELECT: // 下拉选择
{
switch (actionType)
{
case "transition":
conversionData = data;
break;
case "update":
case "create":
if (data.GetType().Name.ToLower().Equals("string")) conversionData = data.ToString();
else conversionData = data;
break;
default:
if (fieldsModel.multiple && actionType != "query")
{
if (data.ToString().Contains("[")) conversionData = data.ToString().ToObject>();
else if (data.ToString().Contains(",")) conversionData = string.Join(",", data.ToString().Split(',').ToArray());
else conversionData = data.ToString();
}
else
{
conversionData = data;
}
break;
}
}
break;
case JnpfKeyConst.TIME: // 时间选择
{
conversionData = data;
}
break;
case JnpfKeyConst.TIMERANGE: // 时间范围
{
switch (actionType)
{
case "transition":
conversionData = data;
break;
default:
conversionData = data.ToString().ToObject>();
break;
}
}
break;
case JnpfKeyConst.DATE: // 日期选择
{
switch (actionType)
{
case "List":
DateTime dtDate;
if (DateTime.TryParse(data.ToString(), out dtDate))
conversionData = data.ToString();
else
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", data.ToString().TimeStampToDateTime());
break;
case "create":
if (fieldsModel.format.ToLower().Equals("yyyy-mm-dd"))
conversionData = string.Format("{0:yyyy-MM-dd}", data.ToString().TimeStampToDateTime());
else
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", data.ToString().TimeStampToDateTime());
break;
case "detail":
conversionData = data;
break;
default:
try
{
DateTime.Parse(data.ToString());
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss} ", data.ToString());
}
catch
{
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss} ", data.ToString().TimeStampToDateTime());
}
break;
}
}
break;
case JnpfKeyConst.DATERANGE: // 日期范围
{
switch (actionType)
{
case "transition":
conversionData = data;
break;
default:
conversionData = data.ToString().ToObject>();
break;
}
}
break;
case JnpfKeyConst.CREATETIME: // 创建时间
case JnpfKeyConst.MODIFYTIME: // 修改时间
{
switch (actionType)
{
case "create":
conversionData = data.ToString();
break;
default:
DateTime dtDate;
if (DateTime.TryParse(data.ToString(), out dtDate))
conversionData = data.ToString();
else
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", data.ToString().TimeStampToDateTime());
break;
}
}
break;
case JnpfKeyConst.UPLOADFZ: // 文件上传
switch (actionType)
{
case "update":
case "create":
if (data.GetType().Name.ToLower().Equals("string")) conversionData = data.ToString();
else if (data.ToString().Contains("[")) conversionData = data.ToJsonString();
else conversionData = data;
break;
default:
if (data.ToJsonString() != "[]")
{
if (data is List) conversionData = data.ToJsonString().ToObject>();
else conversionData = data.ToString().ToObject>();
}
else
{
conversionData = null;
}
break;
}
break;
case JnpfKeyConst.UPLOADIMG: // 图片上传
{
switch (actionType)
{
case "update":
case "create":
if (data.GetType().Name.ToLower().Equals("string")) conversionData = data.ToString();
else if (data.ToString().Contains("[")) conversionData = data.ToJsonString();
else conversionData = data;
break;
default:
if (data.ToJsonString() != "[]") conversionData = data.ToString().ToObject>();
else conversionData = null;
break;
}
}
break;
case JnpfKeyConst.SLIDER: // 滑块
if (fieldsModel.range) conversionData = data.ToString().ToObject>();
else conversionData = data.ParseToInt();
break;
case JnpfKeyConst.ADDRESS: // 省市区联动
{
switch (actionType)
{
case "transition":
conversionData = data;
break;
case "update":
case "create":
if (data.GetType().Name.ToLower().Equals("string")) conversionData = data.ToString();
else if (data.ToString().Contains("[")) conversionData = data.ToJsonString();
else conversionData = data;
break;
default:
conversionData = data.ToString().ToObject>();
break;
}
}
break;
case JnpfKeyConst.TABLE: // 设计子表
break;
case JnpfKeyConst.CASCADER: // 级联
switch (actionType)
{
case "transition":
conversionData = data;
break;
case "update":
case "create":
if (data.GetType().Name.ToLower().Equals("string")) conversionData = data.ToString();
else if (data.ToString().Contains("[")) conversionData = data.ToJsonString();
else conversionData = data;
break;
default:
{
if (fieldsModel.props.props.multiple) conversionData = data.ToString().ToObject>();
else if (data.ToString().Contains("[")) conversionData = data.ToString().ToObject>();
else conversionData = data;
}
break;
}
break;
case JnpfKeyConst.COMSELECT: // 公司组件
{
switch (actionType)
{
case "transition":
{
conversionData = data;
}
break;
case "update":
case "create":
if (data.GetType().Name.ToLower().Equals("string")) conversionData = data.ToString();
else if (data.ToString().Contains("[")) conversionData = data.ToJsonString();
else conversionData = data;
break;
case "List":
{
if (fieldsModel.multiple)
{
conversionData = data.ToString().ToObject>>();
}
else
{
conversionData = data;
}
}
break;
default:
{
if (fieldsModel.multiple)
{
conversionData = data.ToString().ToObject>>();
}
else
{
conversionData = data.ToString().ToObject>();
}
}
break;
}
}
break;
case JnpfKeyConst.GROUPSELECT: // 分组
case JnpfKeyConst.ROLESELECT: // 角色
case JnpfKeyConst.DEPSELECT: // 部门组件
case JnpfKeyConst.POSSELECT: // 岗位组件
case JnpfKeyConst.USERSELECT: // 用户组件
case JnpfKeyConst.USERSSELECT: // 新用户组件
case JnpfKeyConst.TREESELECT: // 树形选择
{
switch (actionType)
{
case "transition":
conversionData = data;
break;
case "update":
case "create":
if (data.GetType().Name.ToLower().Equals("string")) conversionData = data.ToString();
else if (data.ToString().Contains("[")) conversionData = data.ToJsonString();
else conversionData = data;
break;
default:
if (fieldsModel.multiple) conversionData = data.ToString().ToObject>();
else conversionData = data;
break;
}
}
break;
case JnpfKeyConst.POPUPTABLESELECT: // 下拉表格
{
switch (actionType)
{
case "transition":
conversionData = data;
break;
case "update":
case "create":
if (data.GetType().Name.ToLower().Equals("string")) conversionData = data;
else if (data.ToString().Contains("[")) conversionData = data.ToJsonString();
else conversionData = data;
break;
case "List":
if (fieldsModel.multiple) conversionData = data.ToString().ToObject>();
else conversionData = data;
break;
default:
if (fieldsModel.multiple) conversionData = data.ToString().ToObject>();
else conversionData = data;
break;
}
}
break;
default:
conversionData = data;
break;
}
return conversionData;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
///
/// 获取有表单条数据.
///
///
///
///
///
public List> GetTableDataInfo(List> dataList, List fieldsModels, string actionType)
{
// 转换表字符串成数组
foreach (var dataMap in dataList)
{
int dicCount = dataMap.Keys.Count;
string[] strKey = new string[dicCount];
dataMap.Keys.CopyTo(strKey, 0);
for (int i = 0; i < strKey.Length; i++)
{
var dataValue = dataMap[strKey[i]];
if (dataValue != null && !string.IsNullOrEmpty(dataValue.ToString()))
{
var model = fieldsModels.Find(f => f.__vModel__.Equals(strKey[i]));
if (model != null)
{
dataMap[strKey[i]] = TemplateControlsDataConversion(dataMap[strKey[i]], model, actionType);
}
}
}
}
return dataList;
}
///
/// 解析处理 Sql 插入数据的 value.
///
/// 数据库 类型.
/// 表数据.
/// 前端字段名.
/// 插入的数据.
/// 控件集合.
/// 操作类型.
/// 是否外链.
/// string.
public object InsertValueHandle(string dbType, List _tableList, string field, object data, List _fieldsModelList, string actionType = "create", bool isShortLink = false)
{
// 根据KEY查找模板
FieldsModel? model = _fieldsModelList.Find(f => f.__vModel__ == field);
// 单独处理 Oracle,Kdbndp 日期格式转换
if (!actionType.Equals("create") && dbType == "Oracle" && _tableList.Find(x => x.dataType == "DateTime" && x.field == field.ReplaceRegex(@"(\w+)_jnpf_", string.Empty)) != null)
{
return string.Format("to_date('{0}','yyyy-mm-dd HH24/MI/SS')", TemplateControlsDataConversion(data, model, actionType));
}
else
{
var res = TemplateControlsDataConversion(data, model, actionType);
if (actionType.Equals("create"))
{
if (isShortLink && model.__config__.jnpfKey.Equals(JnpfKeyConst.CREATETIME))
return null;
else if(model.__config__.jnpfKey.Equals(JnpfKeyConst.CREATETIME) || model.__config__.jnpfKey.Equals(JnpfKeyConst.DATE))
return res.ToString().ParseToDateTime();
else if (model.__config__.jnpfKey.Equals(JnpfKeyConst.NUMINPUT) || model.__config__.jnpfKey.Equals(JnpfKeyConst.SWITCH))//modify by zhoukeda 2023427 开关默认数字
return res;
else if (model.__config__.jnpfKey.Equals(JnpfKeyConst.SELECT) && model.multiple)//modifyby zhoukeda 20230703 下拉框多选 数据保存为json
return res.ToJsonString();
else return res.ToString();
}
else
{
res = res.IsNullOrEmpty() ? "null" : string.Format("'{0}'", res);
return res;
}
}
}
#endregion
#region 缓存模板数据
///
/// 获取可视化开发模板可缓存数据.
///
/// 模型id.
/// 模板数据结构.
/// 控件缓存数据.
public async Task> GetVisualDevCaCheData(List formData)
{
Dictionary templateData = new Dictionary();
string? cacheKey = CommonConst.VISUALDEV + _userManager.TenantId + "_";
// 获取或设置控件缓存数据
foreach (FieldsModel? model in formData)
{
if (model != null && model.__vModel__ != null)
{
ConfigModel configModel = model.__config__;
string fieldCacheKey = cacheKey + configModel.renderKey + "_" + model.__vModel__;
switch (configModel.jnpfKey)
{
case JnpfKeyConst.RADIO: // 单选框
case JnpfKeyConst.SELECT: // 下拉框
case JnpfKeyConst.CHECKBOX: // 复选框
if (!GetCacheValues(fieldCacheKey, templateData))
{
List>? list = new List>();
if (vModelType.DICTIONARY.GetDescription() == configModel.dataType) list = await GetDictionaryList(configModel.dictionaryType);
if (vModelType.DYNAMIC.GetDescription() == configModel.dataType) list = await GetDynamicList(model);
if (vModelType.STATIC.GetDescription() == configModel.dataType)
{
if (model.__slot__ != null && model.__slot__.options != null && model.__slot__.options.Any())
{
foreach (Dictionary? item in model.__slot__.options)
{
Dictionary option = new Dictionary();
option.Add(item[model.__config__.props.value].ToString(), item[model.__config__.props.label].ToString());
list.Add(option);
}
}
else if (model.options != null && model.options.Any())
{
foreach (Dictionary? item in model.options.ToObject>>())
{
Dictionary option = new Dictionary();
option.Add(item[model.props.props.value].ToString(), item[model.props.props.label].ToString());
list.Add(option);
}
}
}
templateData.Add(fieldCacheKey, list);
_cacheManager.Set(fieldCacheKey, list, TimeSpan.FromMinutes(3));
}
break;
case JnpfKeyConst.TREESELECT: // 树形选择
if (!GetCacheValues(fieldCacheKey, templateData))
{
List>? list = new List>();
if (vModelType.DICTIONARY.GetDescription() == configModel.dataType) list = await GetDictionaryList(configModel.dictionaryType);
if (vModelType.DYNAMIC.GetDescription() == configModel.dataType) list = await GetDynamicList(model);
if (vModelType.STATIC.GetDescription() == configModel.dataType) list = GetStaticList(model);
templateData.Add(fieldCacheKey, list);
_cacheManager.Set(fieldCacheKey, list, TimeSpan.FromMinutes(3));
}
break;
case JnpfKeyConst.CASCADER: // 级联选择
if (!GetCacheValues(fieldCacheKey, templateData))
{
List>? list = new List>();
if (vModelType.DICTIONARY.GetDescription() == configModel.dataType) list = await GetDictionaryList(configModel.dictionaryType);
if (vModelType.STATIC.GetDescription() == configModel.dataType) list = GetStaticList(model);
if (vModelType.DYNAMIC.GetDescription() == configModel.dataType) list = await GetDynamicList(model);
templateData.Add(fieldCacheKey, list);
_cacheManager.Set(fieldCacheKey, list, TimeSpan.FromMinutes(3));
}
break;
case JnpfKeyConst.DEPSELECT: // 部门
await GetOrgList(fieldCacheKey, JnpfKeyConst.DEPSELECT, templateData);
break;
case JnpfKeyConst.COMSELECT: // 公司
await GetOrgList(fieldCacheKey, JnpfKeyConst.COMSELECT, templateData);
break;
case JnpfKeyConst.CURRORGANIZE: // 所属组织
await GetOrgList(fieldCacheKey, JnpfKeyConst.CURRORGANIZE, templateData);
break;
case JnpfKeyConst.DICTIONARY: // 数据字典
if (!GetCacheValues(fieldCacheKey, templateData))
{
List>? vlist = await GetDictionaryList();
templateData.Add(fieldCacheKey, vlist);
_cacheManager.Set(fieldCacheKey, vlist, TimeSpan.FromMinutes(3));
}
break;
case JnpfKeyConst.POSSELECT: // 岗位
if (!GetCacheValues(fieldCacheKey, templateData))
{
List? positionEntityList = await _db.AsSugarClient().Queryable().Where(u => u.DeleteMark == null).ToListAsync();
List> positionList = new List>();
foreach (PositionEntity? item in positionEntityList)
{
Dictionary position = new Dictionary();
position.Add(item.Id, item.FullName);
positionList.Add(position);
}
templateData.Add(fieldCacheKey, positionList);
_cacheManager.Set(fieldCacheKey, positionList, TimeSpan.FromMinutes(3));
}
break;
case JnpfKeyConst.GROUPSELECT: // 分组
if (!GetCacheValues(fieldCacheKey, templateData))
{
List? positionEntityList = await _db.AsSugarClient().Queryable().Where(u => u.DeleteMark == null).ToListAsync();
List> positionList = new List>();
foreach (GroupEntity? item in positionEntityList)
{
Dictionary position = new Dictionary();
position.Add(item.Id, item.FullName);
positionList.Add(position);
}
templateData.Add(fieldCacheKey, positionList);
_cacheManager.Set(fieldCacheKey, positionList, TimeSpan.FromMinutes(3));
}
break;
case JnpfKeyConst.ROLESELECT: // 角色
if (!GetCacheValues(fieldCacheKey, templateData))
{
List? positionEntityList = await _db.AsSugarClient().Queryable().Where(u => u.DeleteMark == null).ToListAsync();
List> positionList = new List>();
foreach (RoleEntity? item in positionEntityList)
{
Dictionary position = new Dictionary();
position.Add(item.Id, item.FullName);
positionList.Add(position);
}
templateData.Add(fieldCacheKey, positionList);
_cacheManager.Set(fieldCacheKey, positionList, TimeSpan.FromMinutes(3));
}
break;
}
}
}
#region 省市区 单独处理
if (formData.Where(x => x.__config__.jnpfKey == JnpfKeyConst.ADDRESS).Any())
{
bool level3 = formData.Where(x => x.__config__.jnpfKey == JnpfKeyConst.ADDRESS && x.level == 3).Any();
string? addCacheKey = CommonConst.VISUALDEV + "_address1";
string? addCacheKey2 = CommonConst.VISUALDEV + "_address2";
if (level3)
{
if (_cacheManager.Exists(addCacheKey2))
{
templateData.Add(addCacheKey2, _cacheManager.Get(addCacheKey2).ToObject>>());
}
else
{
List? addressEntityList = await _db.AsSugarClient().Queryable().Select(x => new ProvinceEntity { Id = x.Id, ParentId = x.ParentId, Type = x.Type, FullName = x.FullName }).ToListAsync();
// 处理省市区树
addressEntityList.Where(x => x.Type == "1").ToList().ForEach(item => item.QuickQuery = item.FullName);
addressEntityList.Where(x => x.Type == "2").ToList().ForEach(item => item.QuickQuery = addressEntityList.Find(x => x.Id == item.ParentId).QuickQuery + "/" + item.FullName);
addressEntityList.Where(x => x.Type == "3").ToList().ForEach(item => item.QuickQuery = addressEntityList.Find(x => x.Id == item.ParentId).QuickQuery + "/" + item.FullName);
addressEntityList.Where(x => x.Type == "4").ToList().ForEach(item =>
{
ProvinceEntity? it = addressEntityList.Find(x => x.Id == item.ParentId);
if (it != null) item.QuickQuery = it.QuickQuery + "/" + item.FullName;
});
// 分开 省市区街道 数据
List> addressList = new List>();
foreach (ProvinceEntity? item in addressEntityList.Where(x => x.Type == "4").ToList())
{
Dictionary address = new Dictionary();
address.Add(item.Id, item.QuickQuery);
addressList.Add(address);
}
var noTypeList = addressEntityList.Where(x => x.Type.IsNullOrWhiteSpace()).ToList();
foreach (ProvinceEntity? item in noTypeList) item.QuickQuery = GetAddressByPList(noTypeList, item);
foreach (ProvinceEntity? item in noTypeList)
{
Dictionary address = new Dictionary();
address.Add(item.Id, item.QuickQuery);
addressList.Add(address);
}
// 缓存七天
_cacheManager.Set(addCacheKey2, addressList, TimeSpan.FromDays(7));
templateData.Add(addCacheKey2, addressList);
}
}
if (_cacheManager.Exists(addCacheKey))
{
templateData.Add(addCacheKey, _cacheManager.Get(addCacheKey).ToObject>>());
}
else
{
List? addressEntityList = await _db.AsSugarClient().Queryable().Select(x => new ProvinceEntity { Id = x.Id, ParentId = x.ParentId, Type = x.Type, FullName = x.FullName }).ToListAsync();
// 处理省市区树
addressEntityList.Where(x => x.Type == "1").ToList().ForEach(item => item.QuickQuery = item.FullName);
addressEntityList.Where(x => x.Type == "2").ToList().ForEach(item => item.QuickQuery = addressEntityList.Find(x => x.Id == item.ParentId).QuickQuery + "/" + item.FullName);
addressEntityList.Where(x => x.Type == "3").ToList().ForEach(item => item.QuickQuery = addressEntityList.Find(x => x.Id == item.ParentId).QuickQuery + "/" + item.FullName);
// 分开 省市区街道 数据
List> addressList = new List>();
foreach (ProvinceEntity? item in addressEntityList.Where(x => x.Type == "1").ToList())
{
Dictionary address = new Dictionary();
address.Add(item.Id, item.QuickQuery);
addressList.Add(address);
}
foreach (ProvinceEntity? item in addressEntityList.Where(x => x.Type == "2").ToList())
{
Dictionary address = new Dictionary();
address.Add(item.Id, item.QuickQuery);
addressList.Add(address);
}
foreach (ProvinceEntity? item in addressEntityList.Where(x => x.Type == "3").ToList())
{
Dictionary address = new Dictionary();
address.Add(item.Id, item.QuickQuery);
addressList.Add(address);
}
var noTypeList = addressEntityList.Where(x => x.Type.IsNullOrWhiteSpace()).ToList();
foreach (ProvinceEntity? item in noTypeList) item.QuickQuery = GetAddressByPList(noTypeList, item);
foreach (ProvinceEntity? item in noTypeList)
{
Dictionary address = new Dictionary();
address.Add(item.Id, item.QuickQuery);
addressList.Add(address);
}
// 缓存七天
_cacheManager.Set(addCacheKey, addressList, TimeSpan.FromDays(7));
templateData.Add(addCacheKey, addressList);
}
}
#endregion
#region 用户单独处理
if (formData.Where(x => x.__config__.jnpfKey == JnpfKeyConst.USERSELECT).Any())
{
string? userCacheKey = CommonConst.VISUALDEV + "_userSelect";
if (_cacheManager.Exists(userCacheKey))
{
templateData.Add(userCacheKey, _cacheManager.Get(userCacheKey).ToObject>>());
}
else
{
List? userEntityList = await _db.AsSugarClient().Queryable().Where(x => x.DeleteMark == null).Select(x => new UserEntity() { Id = x.Id, RealName = x.RealName, Account = x.Account }).ToListAsync();
List> userList = new List>();
foreach (UserEntity? item in userEntityList)
{
Dictionary user = new Dictionary();
user.Add(item.Id, item.RealName + "/" + item.Account);
userList.Add(user);
}
// 缓存30分钟
_cacheManager.Set(userCacheKey, userList, TimeSpan.FromMinutes(30));
templateData.Add(userCacheKey, userList);
}
}
if (formData.Where(x => x.__config__.jnpfKey == JnpfKeyConst.USERSSELECT).Any())
{
string? userCacheKey = CommonConst.VISUALDEV + "_usersSelect";
if (_cacheManager.Exists(userCacheKey))
{
templateData.Add(userCacheKey, _cacheManager.Get(userCacheKey).ToObject>>());
}
else
{
var addList = new List>();
(await _db.AsSugarClient().Queryable().Where(x => x.DeleteMark == null).Select(x => new { x.Id, x.RealName, x.Account }).ToListAsync()).ForEach(item =>
{
Dictionary user = new Dictionary();
user.Add(item.Id + "--user", item.RealName + "/" + item.Account);
addList.Add(user);
});
(await _db.AsSugarClient().Queryable().Where(x => x.DeleteMark == null).Select(x => new { x.Id, x.FullName }).ToListAsync()).ForEach(item =>
{
Dictionary user = new Dictionary();
user.Add(item.Id + "--company", item.FullName);
user.Add(item.Id + "--department", item.FullName);
addList.Add(user);
});
(await _db.AsSugarClient().Queryable().Where(x => x.DeleteMark == null).Select(x => new { x.Id, x.FullName }).ToListAsync()).ForEach(item =>
{
Dictionary user = new Dictionary();
user.Add(item.Id + "--role", item.FullName);
addList.Add(user);
});
(await _db.AsSugarClient().Queryable().Where(x => x.DeleteMark == null).Select(x => new { x.Id, x.FullName }).ToListAsync()).ForEach(item =>
{
Dictionary user = new Dictionary();
user.Add(item.Id + "--position", item.FullName);
addList.Add(user);
});
(await _db.AsSugarClient().Queryable().Where(x => x.DeleteMark == null).Select(x => new { x.Id, x.FullName }).ToListAsync()).ForEach(item =>
{
Dictionary user = new Dictionary();
user.Add(item.Id + "--group", item.FullName);
addList.Add(user);
});
// 缓存30分钟
_cacheManager.Set(userCacheKey, addList, TimeSpan.FromMinutes(30));
templateData.Add(userCacheKey, addList);
}
}
#endregion
return templateData;
}
///
/// 获取缓存 根据控件key.
///
///
///
///
private bool GetCacheValues(string fieldCacheKey, Dictionary templateData)
{
if (_cacheManager.Exists(fieldCacheKey))
{
List>? list = _cacheManager.Get(fieldCacheKey).ToObject>>();
templateData.Add(fieldCacheKey, list);
return true;
}
return false;
}
///
/// 处理组织信息.
///
///
///
///
///
private async Task GetOrgList(string fieldCacheKey, string orgType, Dictionary templateData)
{
if (!GetCacheValues(fieldCacheKey, templateData))
{
List? dep_organizeEntityList = await _db.AsSugarClient().Queryable().Where(d => d.EnabledMark == 1 && d.DeleteMark == null)
.WhereIF(orgType.Equals(JnpfKeyConst.DEPSELECT), d => d.Category.Equals("department")).ToListAsync();
List> vlist = new List>();
foreach (OrganizeEntity? item in dep_organizeEntityList)
{
Dictionary organize = new Dictionary();
if (orgType.Equals(JnpfKeyConst.DEPSELECT)) organize.Add(item.Id, item.FullName); // 部门
if (orgType.Equals(JnpfKeyConst.COMSELECT)) organize.Add(item.Id, new string[] { item.OrganizeIdTree, item.FullName }); // 公司
if (orgType.Equals(JnpfKeyConst.CURRORGANIZE)) organize.Add(item.Id, new string[] { item.OrganizeIdTree, item.Category, item.FullName }); // 所属组织
vlist.Add(organize);
}
templateData.Add(fieldCacheKey, vlist);
_cacheManager.Set(fieldCacheKey, vlist, TimeSpan.FromMinutes(3));
}
}
///
/// 处理远端数据.
///
///
///
private async Task>> GetDynamicList(FieldsModel model)
{
List> list = new List>();
// 获取远端数据
DataInterfaceEntity? dynamic = await _dataInterfaceService.GetInfo(model.__config__.propsUrl);
if (dynamic == null) return list;
var propsValue = string.Empty;
var propsLabel = string.Empty;
var children = string.Empty;
if (model.__config__.jnpfKey.Equals(JnpfKeyConst.TREESELECT) || model.__config__.jnpfKey.Equals(JnpfKeyConst.CASCADER))
{
propsValue = model.props.props.value;
propsLabel = model.props.props.label;
children = model.props.props.children;
}
else
{
propsValue = model.__config__.props.value;
propsLabel = model.__config__.props.label;
children = model.__config__.props.children;
}
switch (dynamic.DataType)
{
// SQL数据
case 1:
{
// 远端数据 配置参数
List? parameter = new List();
if (_userManager.ToKen != null)
{
parameter.Add(new SugarParameter("@user", _userManager.UserId));
parameter.Add(new SugarParameter("@organization", _userManager?.User?.OrganizeId));
var subordinates = _userManager.Subordinates;
subordinates.Add(_userManager.UserId);
parameter.Add(new SugarParameter("@currentUsersAndSubordinates", subordinates));
var subsidiary = _userManager.Subsidiary;
subsidiary.Add(_userManager.User.OrganizeId);
parameter.Add(new SugarParameter("@currentOrganizationAndSuborganization", subsidiary));
var chargeorganization = _userManager.DataScope.Where(x => x.organizeId == _userManager.User.OrganizeId && x.Select).ToList().FirstOrDefault();
parameter.Add(new SugarParameter("@chargeorganization", chargeorganization?.organizeId));
subsidiary = _userManager.DataScope.Select(x => x.organizeId).Intersect(_userManager.Subsidiary).ToList();
parameter.Add(new SugarParameter("@currentChargeorganizationAndSuborganization", subsidiary));
}
DbLinkEntity? linkEntity = await _db.AsSugarClient().Queryable().Where(m => m.Id == dynamic.DBLinkId && m.DeleteMark == null).FirstAsync();
if (linkEntity == null) linkEntity = _databaseService.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName);
_dataInterfaceService.ReplaceParameterValue(dynamic, new Dictionary());
System.Data.DataTable? dt = _databaseService.GetInterFaceData(linkEntity, dynamic.Query, parameter.ToArray());
List> dynamicDataList = dt.ToJsonString().ToObject>>();
foreach (Dictionary? item in dynamicDataList)
{
Dictionary dynamicDic = new Dictionary();
dynamicDic.Add(item[propsValue]?.ToString(), item[propsLabel]?.ToString());
list.Add(dynamicDic);
}
}
break;
// 静态数据
case 2:
{
foreach (var data in JValue.Parse(dynamic.Query))
{
Dictionary dic = new Dictionary();
dic[data.Value(propsValue)] = data.Value(propsLabel);
list.Add(dic);
if (children != null && data.Value