using NCC.Dependency;
using NCC.VisualDev.Entitys;
using NCC.VisualDev.Entitys.Dto.VisualDevModelData;
using NCC.VisualDev.Run.Interfaces;
using NCC.Common.Helper;
using NCC.VisualDev.Entitys.Model.VisualDevModelData;
using NCC.Common.Core.Manager;
using NCC.System.Interfaces.System;
using NCC.System.Interfaces.Permission;
using NCC.JsonSerialization;
using NCC.VisualDev.Entitys.Entity;
using NCC.System.Entitys.Model.System.DataBase;
using NCC.Common.Extension;
using NCC.Common.Filter;
using NCC.Common.Const;
using NCC.VisualDev.Entitys.Enum.VisualDevModelData;
using NCC.System.Entitys.System;
using NCC.FriendlyException;
using NCC.Common.Enum;
using Newtonsoft.Json.Linq;
using NCC.Common.Model;
using System;
using System.Text;
using System.Threading.Tasks;
using System.Linq;
using System.Collections.Generic;
using SqlSugar;
using Yitter.IdGenerator;
using NCC.ClayObject.Extensions;
using Newtonsoft.Json;
namespace NCC.VisualDev.Core
{
///
/// 在线开发运行服务
///
public class RunService : IRunService, ITransient
{
private readonly ISqlSugarRepository _visualDevModelDataRepository;
private readonly ISqlSugarRepository _visualDevRepository;
private readonly IBillRullService _billRuleService;
private readonly IOrganizeService _organizeService;
private readonly IDepartmentService _departmentService;
private readonly IUsersService _userService;
private readonly IPositionService _positionService;
private readonly IDataBaseService _databaseService;
private readonly IDbLinkService _dbLinkService;
private readonly ISysCacheService _sysCacheService;
private readonly IDictionaryDataService _dictionaryDataService;
private readonly IDataInterfaceService _dataInterfaceService;
private readonly IDictionaryTypeService _dictionaryTypeService;
private readonly IProvinceService _provinceService;
private readonly IUserManager _userManager; // 用户管理
///
/// 初始化一个类型的新实例
///
public RunService(ISqlSugarRepository visualDevModelDataRepository, ISqlSugarRepository visualDevRepository, IUserManager userManager, IBillRullService billRuleService, IOrganizeService organizeService, IUsersService userService, IPositionService positionService, IDataBaseService databaseService, IDbLinkService dbLinkService, ISysCacheService sysCacheService, IDictionaryDataService dictionaryDataService, IDataInterfaceService dataInterfaceService, IDictionaryTypeService dictionaryTypeService, IProvinceService provinceService, IDepartmentService departmentService)
{
_visualDevModelDataRepository = visualDevModelDataRepository;
_visualDevRepository = visualDevRepository;
_userManager = userManager;
_billRuleService = billRuleService;
_organizeService = organizeService;
_userService = userService;
_positionService = positionService;
_databaseService = databaseService;
_dbLinkService = dbLinkService;
_sysCacheService = sysCacheService;
_dictionaryDataService = dictionaryDataService;
_dataInterfaceService = dataInterfaceService;
_dictionaryTypeService = dictionaryTypeService;
_provinceService = provinceService;
_departmentService = departmentService;
}
#region Get
///
/// 列表数据处理
///
///
///
///
public async Task>> GetListResult(VisualDevEntity entity, VisualDevModelListQueryInput input, string actionType = "List")
{
var realList = new PageResult>();
realList.list = new List>();
var list = new List();
FormDataModel formDataModel = TemplateKeywordsHelper.ReplaceKeywords(entity.FormData).Deserialize();
List formData = formDataModel.fields;
//先模板数据缓存 解开子表无限children
formData = TemplateCacheDataConversion(formData);
Dictionary templateData = await GetVisualDevTemplateData(entity.Id, formData);
formData = formDataModel.fields;
//剔除布局控件
formData = TemplateDataConversion(formData);
var columnData = TemplateKeywordsHelper.ReplaceKeywords(entity.ColumnData).Deserialize();
//列表主键
var primaryKey = "F_Id";
if (!string.IsNullOrEmpty(entity.Tables) && !"[]".Equals(entity.Tables))
{
List mapList = entity.Tables.ToString().Deserialize>();
string mainTable = mapList.Find(m => m.relationTable == "").table;
var tableList = new List();
var link = await _dbLinkService.GetInfo(entity.DbLinkId);
tableList = _databaseService.GetFieldListByNoAsync(link, mainTable);
var mainPrimary = tableList.Find(t => t.primaryKey == 1);
primaryKey = mainPrimary.field;
StringBuilder feilds = new StringBuilder();
tableList.ForEach(item =>
{
feilds.AppendFormat("{0},", item.field);
});
if (columnData.columnList.Count > 0)
{
feilds = new StringBuilder(feilds.ToString().TrimEnd(','));
}
StringBuilder sql = new StringBuilder();
sql.AppendFormat("select {0} from {1}", feilds, mainTable);
realList = _databaseService.GetInterFaceData(link, sql.ToString(), input, columnData, input.menuId);
list = GetTableDataList(realList.list.ToList(), primaryKey);
}
else
{
list = await GetList(entity.Id);
}
input.sidx = string.IsNullOrEmpty(input.sidx) ? (columnData.defaultSidx == "" ? primaryKey : columnData.defaultSidx) : input.sidx;
//关键字过滤
if (list.Count > 0)
{
//将查询的关键字json转成Dictionary
Dictionary keywordJsonDic = string.IsNullOrEmpty(input.json) ? null : input.json.Deserialize>();
//将关键字查询传输的id转换成名称
Dictionary keyAndList = new Dictionary();
if ((!string.IsNullOrEmpty(entity.Tables) && "[]".Equals(entity.Tables)) || string.IsNullOrEmpty(entity.Tables))
{
list = GetNoTableFilteringData(list, keywordJsonDic, formData);
keyAndList = await GetKeyData(formData, templateData, null, list, columnData, actionType, entity.WebType.ToInt(), primaryKey);
realList.list = GetQueryDataConversion(keyAndList["list"].Serialize().Deserialize>());
//关键字过滤
//realList.list = GetQueryFilteringData(keyAndList["keyJsonMap"].Serialize().Deserialize>(), keyAndList["list"].Serialize().Deserialize>(), columnData);
}
else
{
keyAndList = await GetKeyData(formData, templateData, null, list, columnData, actionType, entity.WebType.ToInt(), primaryKey);
realList.list = GetQueryDataConversion(keyAndList["list"].Serialize().Deserialize>());
}
if (input.sort == "desc")
{
realList.list = realList.list.OrderByDescending(x =>
{
var dic = x as IDictionary;
dic.GetOrAdd(input.sidx, () => null);
return dic[input.sidx];
}).ToList();
}
else
{
realList.list = realList.list.OrderBy(x =>
{
var dic = x as IDictionary;
dic.GetOrAdd(input.sidx, () => null);
return dic[input.sidx];
}).ToList();
}
}
if (input.dataType == "0")
{
if (!string.IsNullOrEmpty(entity.Tables) && !"[]".Equals(entity.Tables))
{
}
else
{
realList.pagination = new PageResult();
realList.pagination.total = realList.list.Count;
realList.pagination.pageSize = input.pageSize;
realList.pagination.pageIndex = input.currentPage;
realList.list = realList.list.Skip(input.pageSize * (input.currentPage - 1)).Take(input.pageSize).ToList();
}
//分组表格
if (columnData.type == 3)
{
var groupList = columnData.columnList.Where(p => p.prop == columnData.groupField).ToList();
var exceptList = columnData.columnList.Except(groupList).FirstOrDefault();
//分组数据
Dictionary>> groupDic = new Dictionary>>();
foreach (var item in realList.list)
{
if (item.ContainsKey(columnData.groupField))
{
var groupDicKey = item[columnData.groupField] is null ? "" : item[columnData.groupField].ToString();
if (!groupDic.ContainsKey(groupDicKey))
{
groupDic.Add(groupDicKey, new List>()); //初始化
}
item.Remove(columnData.groupField);
groupDic[groupDicKey].Add(item);
}
else
{
var groupDicKey = "null";
if (!groupDic.ContainsKey(groupDicKey))
{
groupDic.Add(groupDicKey, new List>()); //初始化
}
groupDic[groupDicKey].Add(item);
}
}
List> realGroupDic = new List>();
foreach (var item in groupDic)
{
Dictionary dataMap = new Dictionary();
dataMap.Add("top", true);
dataMap.Add("id", YitIdHelper.NextId().ToString());
dataMap.Add("children", DateConver(item.Value));
dataMap.Add(exceptList.prop, item.Key);
realGroupDic.Add(dataMap);
}
realList.list = realGroupDic;
}
}
else
{
if (!string.IsNullOrEmpty(entity.Tables) && !"[]".Equals(entity.Tables))
{
}
else
{
realList.pagination = new PageResult();
realList.pagination.total = realList.list.Count;
realList.pagination.pageSize = input.pageSize;
realList.pagination.pageIndex = input.currentPage;
realList.list = realList.list.ToList();
}
}
realList.list = DateConver(realList.list);
return realList;
}
///
/// 获取表主键
///
///
///
public async Task GetTablePrimary(VisualDevEntity entity)
{
var primaryKey = "F_Id";
if (!string.IsNullOrEmpty(entity.Tables) && !"[]".Equals(entity.Tables))//
{
List mapList = entity.Tables.ToString().Deserialize>();
string mainTable = mapList.Find(m => m.relationTable == "").table;
var tableList = new List();
var link = await _dbLinkService.GetInfo(entity.DbLinkId);
tableList = _databaseService.GetFieldListByNoAsync(link, mainTable);
var mainPrimary = tableList.Find(t => t.primaryKey == 1);
primaryKey = mainPrimary.field;
}
return primaryKey;
}
///
/// 获取模型数据信息
///
///
///
public async Task GetInfo(string id)
{
return await _visualDevModelDataRepository.SingleAsync(m => m.Id == id);
}
///
/// 获取无表详情转换
///
/// 模板实体
/// 真实数据
///
public async Task GetIsNoTableInfo(VisualDevEntity templateEntity, string data)
{
var formData = TemplateKeywordsHelper.ReplaceKeywords(templateEntity.FormData).ToObject();
var modelList = formData.fields;
//获取Redis缓存模板数据
var templateData = await GetVisualDevTemplateData(templateEntity.Id, modelList);
data = await GetSystemComponentsData(modelList, templateData, data);
return data;
}
///
/// 获取有表详情转换
///
/// 主键
/// 模板实体
///
public async Task GetHaveTableInfo(string id, VisualDevEntity templateEntity)
{
FormDataModel formData = TemplateKeywordsHelper.ReplaceKeywords(templateEntity.FormData).ToObject();
List modelList = formData.fields.ToList();
//剔除无限极
modelList = TemplateDataConversion(modelList);
List tableMapList = templateEntity.Tables.ToObject>();
StringBuilder mainfeild = new StringBuilder();
StringBuilder mainSql = new StringBuilder();
var mainTable = tableMapList.Find(m => m.relationTable == "");
var tableList = new List();
var link = await _dbLinkService.GetInfo(templateEntity.DbLinkId);
tableList = _databaseService.GetFieldListByNoAsync(link, mainTable.table);
var mainPrimary = tableList.Find(t => t.primaryKey == 1);
mainSql.AppendFormat("select * from {0} where {2}='{1}';", mainTable.table, id, mainPrimary.field);
var mainData = _databaseService.GetInterFaceData(link, mainSql.ToString()).Serialize().Deserialize>>();
List> mainMap = GetTableDataInfoByTimeStamp(mainData, modelList, "update");
//记录全部主表数据
Dictionary dataMap = mainMap.FirstOrDefault();
Dictionary newDataMap = new Dictionary();
foreach (var model in modelList)
{
if (!string.IsNullOrEmpty(model.__vModel__))
{
if ("table".Equals(model.__config__.NCCKey))
{
StringBuilder feilds = new StringBuilder();
List childModelList = model.__config__.children;
foreach (var childModel in childModelList)
{
feilds.Append(childModel.__vModel__ + ",");
}
if (childModelList.Count > 0)
{
feilds = new StringBuilder(feilds.ToString().TrimEnd(','));
}
//子表字段
string relationFeild = "";
//主表字段
string relationMainFeild = "";
string relationMainFeildValue = "";
//查询子表数据
StringBuilder childSql = new StringBuilder();
childSql.Append("select " + feilds + " from " + model.__config__.tableName + " where 1=1 ");
foreach (var tableMap in tableMapList)
{
if (tableMap.table.Equals(model.__config__.tableName))
{
relationFeild = tableMap.tableField;
relationMainFeild = tableMap.relationField;
if (dataMap.ContainsKey(relationMainFeild))
{
relationMainFeildValue = dataMap[relationMainFeild].ToString();
childSql.Append(@" And " + relationFeild + "='" + relationMainFeildValue + "'");
}
var childData = _databaseService.GetInterFaceData(link, childSql.ToString()).Serialize().Deserialize>>();
var childTableData = GetTableDataInfoByTimeStamp(childData, model.__config__.children, "update");
if (childTableData.Count > 0)
{
newDataMap[model.__vModel__] = childTableData;
}
}
}
}
else
{
mainfeild.Append(model.__vModel__ + ",");
}
}
}
if (modelList.Count > 0)
{
mainfeild = new StringBuilder(mainfeild.ToString().TrimEnd(','));
}
int dicCount = newDataMap.Keys.Count;
string[] strKey = new string[dicCount];
newDataMap.Keys.CopyTo(strKey, 0);
for (int i = 0; i < strKey.Length; i++)
{
var model = modelList.Where(m => m.__vModel__ == strKey[i]).FirstOrDefault();
if (model != null)
{
List> tables = newDataMap[strKey[i]].ToObject>>();
List> newTables = new List>();
foreach (var item in tables)
{
Dictionary dic = new Dictionary();
foreach (var value in item)
{
var child = model.__config__.children.Find(c => c.__vModel__ == value.Key);
if (child != null)
{
dic.Add(value.Key, value.Value);
}
}
newTables.Add(dic);
}
if (newTables.Count > 0)
{
newDataMap[strKey[i]] = newTables;
}
}
}
foreach (var entryMap in dataMap)
{
if (entryMap.Value != null)
{
var model = modelList.Where(m => m.__vModel__ == entryMap.Key.ToString()).FirstOrDefault();
if (model != null)
{
if (entryMap.Key.Equals(model.__vModel__))
{
if (mainfeild.ToString().Contains(entryMap.Key))
{
newDataMap[entryMap.Key] = entryMap.Value;
}
}
}
}
}
return await GetTableInfoBySystemComponentsData(templateEntity.Id, modelList, newDataMap.Serialize());
}
///
/// 获取有表详情转换
///
/// 主键
/// 模板实体
///
public async Task GetHaveTableInfoDetails(string id, VisualDevEntity templateEntity, bool isFlowTask = false)
{
FormDataModel formData = !isFlowTask ? TemplateKeywordsHelper.ReplaceKeywords(templateEntity.FormData).ToObject() : templateEntity.FormData.ToObject();
List modelList = formData.fields;
//先模板数据缓存 解开子表无限children
modelList = TemplateCacheDataConversion(modelList);
Dictionary templateData = await GetVisualDevTemplateData(templateEntity.Id, modelList);
//再将模板数据还原回原始结构
modelList = formData.fields.ToList();
var columnData = TemplateKeywordsHelper.ReplaceKeywords(templateEntity.ColumnData).Deserialize();
//解开模板样式控件
modelList = TemplateDataConversion(modelList);
List tableMapList = templateEntity.Tables.ToObject>();
StringBuilder mainfeild = new StringBuilder();
StringBuilder mainSql = new StringBuilder();
var mainTable = tableMapList.Find(m => m.relationTable == "");
var tableList = new List();
var link = await _dbLinkService.GetInfo(templateEntity.DbLinkId);
tableList = _databaseService.GetFieldListByNoAsync(link, mainTable.table);
var mainPrimary = tableList.Find(t => t.primaryKey == 1);
mainSql.AppendFormat("select * from {0} where {2}='{1}';", mainTable.table, id, mainPrimary.field);
var mainData = _databaseService.GetInterFaceData(link, mainSql.ToString()).ToObeject>>();
List> mainMap = GetTableDataInfo(mainData, modelList, "detail");
//记录全部主表数据
Dictionary dataMap = mainMap.FirstOrDefault();
Dictionary newDataMap = new Dictionary();
foreach (var model in modelList)
{
if (!string.IsNullOrEmpty(model.__vModel__))
{
if ("table".Equals(model.__config__.NCCKey))
{
StringBuilder feilds = new StringBuilder();
List childModelList = model.__config__.children;
foreach (var childModel in childModelList)
{
feilds.Append(childModel.__vModel__ + ",");
}
if (childModelList.Count > 0)
{
feilds = new StringBuilder(feilds.ToString().TrimEnd(','));
}
//子表字段
string relationFeild = "";
//主表字段
string relationMainFeild = "";
string relationMainFeildValue = "";
//查询子表数据
StringBuilder childSql = new StringBuilder();
childSql.Append("select " + feilds + " from " + model.__config__.tableName + " where 1=1 ");
foreach (var tableMap in tableMapList)
{
if (tableMap.table.Equals(model.__config__.tableName))
{
relationFeild = tableMap.tableField;
relationMainFeild = tableMap.relationField;
if (dataMap.ContainsKey(relationMainFeild))
{
relationMainFeildValue = dataMap[relationMainFeild].ToString();
childSql.Append(@" And " + relationFeild + "='" + relationMainFeildValue + "'");
}
var childData = _databaseService.GetInterFaceData(link, childSql.ToString()).Serialize().Deserialize>>();
var childTableData = GetTableDataInfo(childData, model.__config__.children, "transition");
if (childTableData.Count > 0)
{
newDataMap[model.__vModel__] = childTableData;
}
}
}
}
else
{
mainfeild.Append(model.__vModel__ + ",");
}
}
}
if (modelList.Count > 0)
{
mainfeild = new StringBuilder(mainfeild.ToString().TrimEnd(','));
}
int dicCount = newDataMap.Keys.Count;
string[] strKey = new string[dicCount];
newDataMap.Keys.CopyTo(strKey, 0);
for (int i = 0; i < strKey.Length; i++)
{
var model = modelList.Find(m => m.__vModel__ == strKey[i]);
if (model != null)
{
List childModelData = new List();
List> tables = newDataMap[strKey[i]].ToObject>>();
List> newTables = new List>();
foreach (var item in tables)
{
Dictionary dic = new Dictionary();
foreach (KeyValuePair value in item)
{
var child = model.__config__.children.Find(c => c.__vModel__ == value.Key);
if (child != null && value.Value != null)
{
var NCCKey = child.__config__.NCCKey;
switch (NCCKey)
{
case "time":
dic.Add(value.Key, value.Value);
break;
case "date":
dic.Add(value.Key, Ext.TimeToTimeStamp(value.Value.ToDate()));
break;
default:
dic.Add(value.Key, value.Value);
break;
}
}
}
childModelData.Add(new VisualDevModelDataEntity()
{
Id = YitIdHelper.NextId().ToString(),
Data = dic.ToJson()
});
}
if (childModelData.Count > 0)
{
//将关键字查询传输的id转换成名称
Dictionary childKeyAndList = await GetKeyData(model.__config__.children, templateData, null, childModelData, columnData);
foreach (var item in childKeyAndList["list"].ToObject>())
{
newTables.Add(item.Data.ToObject>());
}
newDataMap[strKey[i]] = newTables;
}
}
}
var entity = new VisualDevModelDataEntity()
{
Id = dataMap[mainPrimary.field].ToString(),
Data = dataMap.ToJson()
};
List listEntity = new List();
listEntity.Add(entity);
//将关键字查询传输的id转换成名称
Dictionary keyAndList = await GetKeyData(modelList, templateData, null, listEntity, columnData, "detail");
var convData = keyAndList["list"].ToObject>().FirstOrDefault().Data.ToObject>();
foreach (var entryMap in convData)
{
if (entryMap.Value != null)
{
var model = modelList.Where(m => m.__vModel__.Contains(entryMap.Key.ToString())).FirstOrDefault();
if (model != null)
{
if (entryMap.Key.Equals(model.__vModel__))
{
if (mainfeild.ToString().Contains(entryMap.Key))
{
newDataMap[entryMap.Key] = entryMap.Value;
}
}
}
else
{
model = modelList.Where(m => m.__vModel__ == entryMap.Key.ToString().Replace("_id", "")).FirstOrDefault();
if (model != null)
{
newDataMap[entryMap.Key] = entryMap.Value;
}
}
}
}
return newDataMap.ToJson();
}
///
/// 获取无表信息详情
///
/// 模板实体
/// 真实数据
///
public async Task GetIsNoTableInfoDetails(VisualDevEntity templateEntity, VisualDevModelDataEntity data)
{
var formData = TemplateKeywordsHelper.ReplaceKeywords(templateEntity.FormData).ToObject();
List modelList = formData.fields;
//先模板数据缓存 解开子表无限children
modelList = TemplateCacheDataConversion(modelList);
Dictionary templateData = await GetVisualDevTemplateData(templateEntity.Id, modelList);
modelList = formData.fields;
//剔除布局控件
modelList = TemplateDataConversion(modelList);
//模板分离子表模板
var childTemplateList = modelList.FindAll(m => m.__config__.NCCKey == "table");
//删除模板内子表模板
modelList.RemoveAll(x => x.__config__.NCCKey == "table");
var columnData = TemplateKeywordsHelper.ReplaceKeywords(templateEntity.ColumnData).Deserialize();
//获取真实数据
var realData = data.Data.ToObject>();
//数据分离子表数据
var childRealData = realData.Where(p => p.Key.Contains("tableField"));
//获取关联表单
var relationFormList = modelList.FindAll(m => m.__config__.NCCKey == "relationForm");
if (relationFormList.Count > 0)
{
foreach (var item in relationFormList)
{
realData.Add(item.__vModel__ + "_id", null);
}
}
Dictionary newDataMap = new Dictionary();
//循环子表数据
foreach (var item in childRealData)
{
realData.Remove(item.Key);
List childModelData = new List();
var childTemplate = childTemplateList.Find(c => c.__vModel__ == item.Key);
List> tables = item.Value.ToObject>>();
List> newTables = new List>();
if (childTemplate != null)
{
foreach (var childColumn in tables)
{
Dictionary dic = new Dictionary();
foreach (KeyValuePair column in childColumn)
{
var child = childTemplate.__config__.children.Find(c => c.__vModel__ == column.Key);
if (child != null && column.Value != null)
{
dic.Add(column.Key, column.Value);
}
}
childModelData.Add(new VisualDevModelDataEntity()
{
Id = YitIdHelper.NextId().ToString(),
Data = dic.ToJson()
});
}
if (childModelData.Count > 0)
{
//将关键字查询传输的id转换成名称
Dictionary childKeyAndList = await GetKeyData(childTemplate.__config__.children, templateData, null, childModelData, columnData);
foreach (var items in childKeyAndList["list"].ToObject>())
{
newTables.Add(items.Data.ToObject>());
}
newDataMap[item.Key] = newTables;
}
}
}
var modelData = new VisualDevModelDataEntity()
{
Id = data.Id.ToString(),
Data = realData.ToJson()
};
List listEntity = new List();
listEntity.Add(modelData);
//将关键字查询传输的id转换成名称
Dictionary keyAndList = await GetKeyData(modelList, templateData, null, listEntity, columnData);
var convData = keyAndList["list"].ToObject>().FirstOrDefault().Data.ToObject>();
foreach (var entryMap in convData)
{
if (entryMap.Value != null)
{
var model = modelList.Where(m => m.__vModel__ == entryMap.Key.ToString()).FirstOrDefault();
if (model != null)
{
newDataMap[entryMap.Key] = entryMap.Value;
}
else
{
model = modelList.Where(m => m.__vModel__ == entryMap.Key.ToString().Replace("_id", "")).FirstOrDefault();
if (model != null)
{
newDataMap[entryMap.Key] = entryMap.Value;
}
}
}
}
return newDataMap.ToJson();
}
#endregion
#region Post
///
/// 创建在线开发功能
///
/// 功能模板实体
/// 数据输入
/// 是否创建新ID
///
public async Task Create(VisualDevEntity templateEntity, VisualDevModelDataCrInput dataInput)
{
if (!string.IsNullOrEmpty(templateEntity.Tables) && !"[]".Equals(templateEntity.Tables))
{
var mainId = YitIdHelper.NextId().ToString();
var link = await _dbLinkService.GetInfo(templateEntity.DbLinkId);
var haveTableSql = await CreateHaveTableSql(templateEntity, dataInput, mainId);
try
{
//开启事务
_visualDevModelDataRepository.Context.BeginTran();
//新增功能数据
await _databaseService.ExecuteSql(link, haveTableSql);
//关闭事务
_visualDevModelDataRepository.Context.CommitTran();
}
catch (Exception)
{
_visualDevModelDataRepository.Context.RollbackTran();
throw;
}
}
else
{
var allDataMap = dataInput.data.Deserialize>();
var formData = TemplateKeywordsHelper.ReplaceKeywords(templateEntity.FormData).Deserialize();
var fieldsModelList = formData.fields;
//剔除布局控件
fieldsModelList = TemplateDataConversion(fieldsModelList);
// 生成系统自动生成字段
allDataMap = await GenerateFeilds(fieldsModelList, allDataMap, true);
VisualDevModelDataEntity entity = new VisualDevModelDataEntity();
entity.Data = allDataMap.Serialize();
entity.VisualDevId = templateEntity.Id;
try
{
//开启事务
_visualDevModelDataRepository.Context.BeginTran();
//新增功能数据
var visualDevModelData = await _visualDevModelDataRepository.Context.Insertable(entity).CallEntityMethod(m => m.Creator()).ExecuteReturnEntityAsync();
//关闭事务
_visualDevModelDataRepository.Context.CommitTran();
}
catch (Exception)
{
_visualDevModelDataRepository.Context.RollbackTran();
throw;
}
}
}
///
/// 创建有表SQL
///
///
///
///
///
public async Task CreateHaveTableSql(VisualDevEntity templateEntity, VisualDevModelDataCrInput dataInput, string mainId)
{
var allDataMap = dataInput.data.Deserialize>();
var formData = TemplateKeywordsHelper.ReplaceKeywords(templateEntity.FormData).Deserialize();
var fieldsModelList = formData.fields;
//剔除布局控件
fieldsModelList = TemplateDataConversion(fieldsModelList);
// 生成系统自动生成字段
allDataMap = await GenerateFeilds(fieldsModelList, allDataMap, true);
//实例化模板信息
var tableMapList = templateEntity.Tables.Deserialize>();
//获取主表
var mainTable = tableMapList.Find(t => t.relationTable == "");
var tableList = new List();
var link = await _dbLinkService.GetInfo(templateEntity.DbLinkId);
tableList = _databaseService.GetFieldListByNoAsync(link, mainTable.table);
//分离主子表数据
//先记录子表数据
var childTableDataKey = allDataMap.Where(d => d.Key.Contains("tableField")).Select(d => d.Key).ToList();
//记录主表数据
var mainPrimary = tableList.Find(t => t.primaryKey == 1);
var mainTableDataKey = allDataMap.Keys.Except(childTableDataKey).ToList();
//主表字段集合
StringBuilder mainFelid = new StringBuilder();
List mainFelidList = new List();
//主表查询语句
StringBuilder mainSql = new StringBuilder();
StringBuilder mainColumn = new StringBuilder();
StringBuilder mainValues = new StringBuilder();
//子表查询语句
StringBuilder childSql = new StringBuilder();
//拼接主表查询语句
var mainFields = mainTable.fields;
foreach (var item in mainTableDataKey)
{
var mainField = mainFields.Where(f => f.Field == item).FirstOrDefault();
if (mainField != null)
{
var allMap = allDataMap[item];
if (allMap != null && !string.IsNullOrEmpty(allMap.ToString()) && allMap.ToString() != "[]")
{
//Column部分
mainColumn.AppendFormat("{0},", item);
//Values部分
var value = TransformDataObject(allMap, item, fieldsModelList, "create");
mainValues.AppendFormat("'{0}',", value);
}
}
}
//去除多余的,
if (mainTableDataKey.Count > 0)
{
mainSql.AppendFormat("insert into {0} ({3}{1}) values('{4}'{2});", mainTable.table, (mainColumn.Length > 0 ? "," : "") + mainColumn.ToString().Trim(','), (mainValues.Length > 0 ? "," : "") + mainValues.ToString().Trim(','), mainPrimary.field, mainId);
}
//拼接子表sql
foreach (var item in childTableDataKey)
{
//查找到该控件数据
var objectData = allDataMap[item];
var model = objectData.Serialize().Deserialize>>();
if (model.Count > 0)
{
//利用key去找模板
var fieldsModel = fieldsModelList.Find(f => f.__vModel__ == item);
var fieldsConfig = fieldsModel.__config__;
model = GetTableDataListByDic(model, fieldsConfig.children);
StringBuilder childColumn = new StringBuilder();
StringBuilder childValues = new StringBuilder();
var childTable = tableMapList.Find(t => t.table == fieldsModel.__config__.tableName);
tableList = new List();
tableList = _databaseService.GetFieldListByNoAsync(link, childTable.table);
var childPrimary = tableList.Find(t => t.primaryKey == 1);
foreach (var data in model)
{
if (data.Count > 0)
{
foreach (KeyValuePair child in data)
{
if (child.Value != null && child.Value.ToString() != "[]" && child.Value.ToString() != "")
{
//Column部分
childColumn.AppendFormat("{0},", child.Key);
//Values部分
var value = TransformDataObject(child.Value, child.Key, fieldsConfig.children, "create");
childValues.AppendFormat("'{0}',", value);
}
}
if (!string.IsNullOrEmpty(childColumn.ToString()))
{
childSql.AppendFormat("insert into {0}({6},{4},{1}) values('{3}','{5}',{2});", fieldsModel.__config__.tableName, childColumn.ToString().Trim(','), childValues.ToString().Trim(','), YitIdHelper.NextId().ToString(), childTable.tableField, mainId, childPrimary.field);
}
childColumn = new StringBuilder();
childValues = new StringBuilder();
}
}
}
}
return mainSql.ToString() + childSql.ToString();
}
///
/// 修改
///
/// 修改ID
///
///
///
public async Task Update(string id, VisualDevEntity templateEntity, VisualDevModelDataUpInput visualdevModelDataUpForm)
{
if (!string.IsNullOrEmpty(templateEntity.Tables) && !"[]".Equals(templateEntity.Tables))
{
var link = await _dbLinkService.GetInfo(templateEntity.DbLinkId);
var haveTableSql = await UpdateHaveTableSql(templateEntity, visualdevModelDataUpForm, id);
try
{
//开启事务
_visualDevModelDataRepository.Context.BeginTran();
//修改功能数据
await _databaseService.ExecuteSql(link, haveTableSql);
//关闭事务
_visualDevModelDataRepository.Context.CommitTran();
}
catch (Exception)
{
_visualDevModelDataRepository.Context.RollbackTran();
throw;
}
}
else
{
Dictionary allDataMap = visualdevModelDataUpForm.data.ToObject>();
FormDataModel formData = TemplateKeywordsHelper.ReplaceKeywords(templateEntity.FormData).ToObject();
List fieldsModelList = formData.fields.ToObject>();
fieldsModelList = TemplateDataConversion(fieldsModelList);
//生成系统自动生成字段
allDataMap = await GenerateFeilds(fieldsModelList, allDataMap, false);
VisualDevModelDataEntity entity = new VisualDevModelDataEntity();
entity.Data = allDataMap.Serialize();
entity.VisualDevId = templateEntity.Id;
entity.Id = id;
try
{
//开启事务
_visualDevModelDataRepository.Context.BeginTran();
//修改功能数据
await _visualDevModelDataRepository.Context.Updateable(entity).CallEntityMethod(m => m.LastModify()).ExecuteCommandAsync();
//关闭事务
_visualDevModelDataRepository.Context.CommitTran();
}
catch (Exception)
{
_visualDevModelDataRepository.Context.RollbackTran();
throw;
}
}
}
///
/// 修改有表SQL
///
///
///
///
///
public async Task UpdateHaveTableSql(VisualDevEntity templateEntity, VisualDevModelDataUpInput visualdevModelDataUpForm, string id)
{
Dictionary allDataMap = visualdevModelDataUpForm.data.ToObject>();
FormDataModel formData = TemplateKeywordsHelper.ReplaceKeywords(templateEntity.FormData).ToObject();
List fieldsModelList = formData.fields.ToObject>();
fieldsModelList = TemplateDataConversion(fieldsModelList);
//生成系统自动生成字段
allDataMap = await GenerateFeilds(fieldsModelList, allDataMap, false);
List tableMapList = templateEntity.Tables.ToObject>();
//循环表
var mainTable = tableMapList.Where(t => t.relationTable == "").FirstOrDefault();
var tableList = new List();
var link = await _dbLinkService.GetInfo(templateEntity.DbLinkId);
tableList = _databaseService.GetFieldListByNoAsync(link, mainTable.table);
var mainPrimary = tableList.Find(t => t.primaryKey == 1);
StringBuilder delMain = new StringBuilder();
delMain.AppendFormat("delete from {0} where {2}='{1}';", mainTable.table, id, mainPrimary.field);
StringBuilder allDelSql = new StringBuilder();
allDelSql.AppendFormat("{0}", delMain.ToString());
StringBuilder queryMain = new StringBuilder();
queryMain.AppendFormat("select * from {0} where {2}='{1}';", mainTable.table, id, mainPrimary.field);
var mainData = _databaseService.GetInterFaceData(link, queryMain.ToString()).Serialize().Deserialize>>();
Dictionary mainMap = GetTableDataInfo(mainData, fieldsModelList, "List").FirstOrDefault();
if (tableMapList.Count > 1)
{
//去除主表,剩余的为子表,再进行子表删除语句生成
tableMapList.RemoveAt(0);
foreach (var tableMap in tableMapList)
{
//主表字段
//与主表关联字段
string relationField = tableMap.relationField;
var relationFieldValue = mainMap.Where(f => f.Key == relationField).FirstOrDefault();
//子表字段
string tableField = tableMap.tableField;
allDelSql.AppendFormat("delete from {0} where {1}='{2}';", tableMap.table, tableField, relationFieldValue.Value);
}
}
string mainId = id;
//分离主子表数据
//先记录子表数据
var childTableDataKey = allDataMap.Where(d => d.Key.Contains("tableField")).Select(d => d.Key).ToList();
//记录主表数据
var mainTableDataKey = allDataMap.Keys.Except(childTableDataKey).ToList();
//实例化模板信息
//主表字段集合
StringBuilder mainFelid = new StringBuilder();
List mainFelidList = new List();
//主表查询语句
StringBuilder mainSql = new StringBuilder();
StringBuilder mainColumn = new StringBuilder();
StringBuilder mainValues = new StringBuilder();
//子表查询语句
StringBuilder childSql = new StringBuilder();
//拼接主表插入语句
var mainFields = mainTable.fields;
foreach (var item in mainTableDataKey)
{
var mainField = mainFields.Where(f => f.Field == item).FirstOrDefault();
if (mainField != null)
{
var allMap = allDataMap[item];
if (allMap != null && !string.IsNullOrEmpty(allMap.ToString()) && !allMap.ToString().Contains("[]"))
{
//Column部分
mainColumn.AppendFormat("{0},", item);
//Values部分
mainValues.AppendFormat("'{0}',", TransformDataObject(allMap, item, fieldsModelList, "create"));
}
}
}
//去除多余的,
if (mainTableDataKey.Count > 0)
{
mainSql.AppendFormat("insert into {0} ({3}{1}) values('{4}'{2});", mainTable.table, (mainColumn.Length > 0 ? "," : "") + mainColumn.ToString().Trim(','), (mainValues.Length > 0 ? "," : "") + mainValues.ToString().Trim(','), mainPrimary.field, mainId);
}
//拼接子表sql
foreach (var item in childTableDataKey)
{
//查找到该控件数据
var model = allDataMap[item].ToJson().ToList>();
if (model.Count > 0)
{
//利用key去找模板
var fieldsModel = fieldsModelList.Find(f => f.__vModel__ == item);
var fieldsConfig = fieldsModel.__config__;
model = GetTableDataListByDic(model, fieldsConfig.children);
StringBuilder childColumn = new StringBuilder();
StringBuilder childValues = new StringBuilder();
var childTable = tableMapList.Where(t => t.table == fieldsConfig.tableName).FirstOrDefault();
tableList = new List();
tableList = _databaseService.GetFieldListByNoAsync(link, childTable.table);
var childPrimary = tableList.Find(t => t.primaryKey == 1);
foreach (var data in model)
{
if (data.Count > 0)
{
foreach (KeyValuePair child in data)
{
if (child.Value != null)
{
//Column部分
childColumn.AppendFormat("{0},", child.Key);
//Values部分
childValues.AppendFormat("'{0}',", TransformDataObject(child.Value, child.Key, fieldsConfig.children, "create"));
}
}
if (!string.IsNullOrEmpty(childColumn.ToString()))
{
childSql.AppendFormat("insert into {0}({6},{4},{1}) values('{3}','{5}',{2});", fieldsModel.__config__.tableName, childColumn.ToString().Trim(','), childValues.ToString().Trim(','), YitIdHelper.NextId().ToString(), childTable.tableField, mainId, childPrimary.field);
}
childColumn = new StringBuilder();
childValues = new StringBuilder();
}
}
}
}
return allDelSql.ToString() + mainSql.ToString() + childSql.ToString();
}
#endregion
#region PrivateMethod
#region 拆解模板
///
/// 模板缓存数据转换
/// 专门为模板缓存数据,会将子表内的控件全部获取出来
/// 适用场景缓存模板数据
///
///
private List TemplateCacheDataConversion(List fieldsModelList)
{
var template = new List();
//将模板内的无限children解析出来
//包含子表children
foreach (var item in fieldsModelList)
{
var config = item.__config__;
switch (config.NCCKey)
{
//栅格布局
case "row":
{
template.AddRange(TemplateCacheDataConversion(config.children));
}
break;
//表格
case "table":
{
template.AddRange(TemplateCacheDataConversion(config.children));
}
break;
//卡片
case "card":
{
template.AddRange(TemplateCacheDataConversion(config.children));
}
break;
//折叠面板
case "collapse":
{
foreach (var collapse in config.children)
{
template.AddRange(TemplateCacheDataConversion(collapse.__config__.children));
}
}
break;
//tab标签
case "tab":
{
foreach (var collapse in config.children)
{
template.AddRange(TemplateCacheDataConversion(collapse.__config__.children));
}
}
break;
//文本
case "NCCText":
break;
//分割线
case "divider":
break;
//分组标题
case "groupTitle":
break;
default:
{
template.Add(item);
}
break;
}
}
return template;
}
#endregion
#region 解析模板数据
///
/// 控制模板数据转换
///
/// 数据
/// 数据模板
/// 操作类型(List-列表值,create-创建值,update-更新值,detail-详情值,transition-过渡值,query-查询)
///
private object TemplateControlsDataConversion(object data, FieldsModel fieldsModel, string actionType = null)
{
try
{
object conversionData = new object();
switch (fieldsModel.__config__.NCCKey)
{
#region 基础控件
//单行输入
case "comInput":
{
conversionData = string.IsNullOrEmpty(data.ToString()) ? null : data.ToString();
}
break;
//多行输入
case "textarea":
{
conversionData = data.ToString();
}
break;
//数字输入
case "numInputc":
{
conversionData = data.ToInt();
}
break;
//金额输入
case "NCCAmount":
{
conversionData = data.ToDecimal();
}
break;
//单选框组
case "radio":
{
conversionData = string.IsNullOrEmpty(data.ToString()) ? null : data.ToString();
}
break;
//多选框组
case "checkbox":
{
if (data.ToString().Contains("["))
conversionData = data.ToString().ToObject>();
else
conversionData = data.ToString();
}
break;
//下拉选择
case "select":
{
switch (actionType)
{
case "transition":
{
conversionData = data;
}
break;
case "List":
{
if (data.ToString().Contains(","))
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = data.ToString();
}
}
break;
default:
{
if (fieldsModel.multiple && actionType != "query")
{
if (data.ToString().Contains(","))
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = string.Join(",", data.ToString().Split(',').ToArray());
}
}
else
{
conversionData = data.ToString();
}
}
break;
}
}
break;
//时间选择
case "time":
{
switch (actionType)
{
case "List":
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", data);
break;
case "create":
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", data);
break;
case "detail":
conversionData = data.ToString();
break;
default:
conversionData = data.ToString();
break;
}
}
break;
//时间范围
case "timeRange":
{
switch (actionType)
{
case "List":
conversionData = data.ToString().ToObject>();
break;
case "create":
conversionData = data.ToString().ToObject>();
break;
case "transition":
conversionData = data;
break;
case "update":
conversionData = data.ToString().ToObject>();
break;
}
}
break;
//日期选择
case "date":
{
switch (actionType)
{
case "List":
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", Ext.GetDateTime(data.ToString()));
break;
case "create":
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", Ext.GetDateTime(data.ToString()));
break;
case "detail":
conversionData = data.ToString();
break;
case "update":
conversionData = data;
break;
default:
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", Ext.GetDateTime(data.ToString()));
break;
}
}
break;
//日期范围
case "dateRange":
{
switch (actionType)
{
case "List":
conversionData = data.ToString().ToObject>();
break;
case "transition":
conversionData = data;
break;
case "create":
conversionData = data.ToString().ToObject>();
break;
case "update":
conversionData = data.ToString().ToObject>();
break;
}
}
break;
//创建时间
case "createTime":
{
switch (actionType)
{
case "List":
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", Ext.GetDateTime(data.ToString()));
break;
case "create":
conversionData = data.ToString();
break;
case "update":
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", Ext.GetDateTime(data.ToString()));
break;
case "detail":
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", data);
break;
default:
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", data);
break;
}
}
break;
//修改时间
case "modifyTime":
{
switch (actionType)
{
case "List":
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", Ext.GetDateTime(data.ToString()));
break;
case "create":
conversionData = data.ToString();
break;
case "update":
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", Ext.GetDateTime(data.ToString()));
break;
default:
conversionData = string.Format("{0:yyyy-MM-dd HH:mm:ss}", data);
break;
}
}
break;
//文件上传
case "uploadFz":
{
if (data.ToString() != "[]")
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = null;
}
}
break;
//图片上传
case "uploadImg":
{
if (data.ToString() != "[]")
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = null;
}
}
break;
//颜色选择
case "colorPicker":
{
conversionData = string.IsNullOrEmpty(data.ToString()) ? null : data.ToString();
}
break;
//评分
case "rate":
{
conversionData = data.ToInt();
}
break;
//开关
case "switch":
{
conversionData = data.ToInt();
}
break;
//滑块
case "slider":
{
if (fieldsModel.range)
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = data.ToInt();
};
}
break;
////文本
//case "NCCText":
// break;
//富文本
case "editor":
{
conversionData = string.IsNullOrEmpty(data.ToString()) ? null : data.ToString();
}
break;
//单据组件
case "billRule":
{
conversionData = data.ToString();
}
break;
//省市区联动
case "address":
{
switch (actionType)
{
case "transition":
{
conversionData = data;
}
break;
default:
conversionData = data.ToString().ToObject>();
break;
}
}
break;
//创建人员
case "createUser":
{
conversionData = data.ToString();
}
break;
//修改人员
case "modifyUser":
{
conversionData = string.IsNullOrEmpty(data.ToString()) ? null : data.ToString();
}
break;
//所属组织
case "currOrganize":
{
conversionData = data.ToString();
}
break;
//所属部门
case "currDept":
{
conversionData = data.ToString();
}
break;
//所属岗位
case "currPosition":
{
conversionData = data.ToString();
}
break;
case "table":
{
}
break;
//级联
case "cascader":
switch (actionType)
{
case "transition":
{
conversionData = data;
}
break;
default:
{
if (fieldsModel.props.props.multiple)
{
conversionData = data.ToString().ToObject>>();
}
else
{
conversionData = data.ToString().ToObject>();
}
}
break;
}
break;
default:
conversionData = data.ToString();
break;
#endregion
#region 高级控件
//公司组件
case "comSelect":
{
switch (actionType)
{
case "List":
{
if (fieldsModel.multiple)
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = data.ToString();
}
}
break;
case "create":
{
if (fieldsModel.multiple)
{
conversionData = data.CastTo("").Split(",", true).ToList();
}
else
{
conversionData = data.ToString();
}
}
break;
case "update":
{
if (fieldsModel.multiple)
{
var list = data.ToString().ToObject>();
conversionData = string.Join(",", list.ToArray());
}
else
{
conversionData = data.ToString();
}
}
break;
case "detail":
{
if (fieldsModel.multiple)
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = data.ToString();
}
}
break;
case "transition":
{
conversionData = data;
}
break;
default:
{
if (fieldsModel.multiple)
{
conversionData = data.CastTo("").Split(",", true).ToList();
}
else
{
conversionData = data.ToString();
}
}
break;
}
}
break;
//部门组件
case "depSelect":
{
switch (actionType)
{
case "List":
{
if (fieldsModel.multiple)
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = data.ToString();
}
}
break;
case "create":
{
if (fieldsModel.multiple)
{
conversionData = data.CastTo("").Split(",", true).ToList();
}
else
{
conversionData = data.ToString();
}
}
break;
case "update":
{
if (fieldsModel.multiple)
{
var list = data.ToString().ToObject>();
conversionData = string.Join(",", list.ToArray());
}
else
{
conversionData = data.ToString();
}
}
break;
case "detail":
{
if (fieldsModel.multiple)
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = data.ToString();
}
}
break;
case "transition":
{
conversionData = data;
}
break;
default:
{
if (fieldsModel.multiple)
{
conversionData = data.CastTo("").Split(",", true).ToList();
}
else
{
conversionData = data.ToString();
}
}
break;
}
}
break;
//岗位组件
case "posSelect":
{
switch (actionType)
{
case "List":
{
if (fieldsModel.multiple)
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = data.ToString();
}
}
break;
case "create":
{
if (fieldsModel.multiple)
{
conversionData = data.CastTo("").Split(",", true).ToList();
}
else
{
conversionData = data.ToString();
}
}
break;
case "update":
{
if (fieldsModel.multiple)
{
var list = data.ToString().ToObject>();
conversionData = string.Join(",", list.ToArray());
}
else
{
conversionData = data.ToString();
}
}
break;
case "detail":
{
if (fieldsModel.multiple)
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = data.ToString();
}
}
break;
case "transition":
{
conversionData = data;
}
break;
default:
{
if (fieldsModel.multiple)
{
conversionData = data.CastTo("").Split(",", true).ToList();
}
else
{
conversionData = data.ToString();
}
}
break;
}
}
break;
//用户组件
case "userSelect":
{
switch (actionType)
{
case "List":
{
if (fieldsModel.multiple)
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = data.ToString();
}
}
break;
case "create":
{
if (fieldsModel.multiple)
{
conversionData = data.CastTo("").Split(",", true).ToList();
}
else
{
conversionData = data.ToString();
}
}
break;
case "update":
{
if (fieldsModel.multiple)
{
var list = data.ToString().ToObject>();
conversionData = string.Join(",", list.ToArray());
}
else
{
conversionData = data.ToString();
}
}
break;
case "detail":
{
if (fieldsModel.multiple)
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = data.ToString();
}
}
break;
case "transition":
{
conversionData = data;
}
break;
default:
{
if (fieldsModel.multiple)
{
conversionData = data.CastTo("").Split(",", true).ToList();
}
else
{
conversionData = data.ToString();
}
}
break;
}
}
break;
//树形选择
case "treeSelect":
{
switch (actionType)
{
case "List":
{
if (fieldsModel.multiple)
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = data.ToString();
}
}
break;
case "create":
{
if (fieldsModel.multiple)
{
conversionData = data.CastTo("").Split(",", true).ToList();
}
else
{
conversionData = data.ToString();
}
}
break;
case "update":
{
if (fieldsModel.multiple)
{
var list = data.ToString().ToObject>();
conversionData = string.Join(",", list.ToArray());
}
else
{
conversionData = data.ToString();
}
}
break;
case "detail":
{
if (fieldsModel.multiple)
{
conversionData = data.ToString().ToObject>();
}
else
{
conversionData = data.ToString();
}
}
break;
case "transition":
{
conversionData = data;
}
break;
default:
{
if (fieldsModel.multiple)
{
conversionData = data.CastTo("").Split(",", true).ToList();
}
else
{
conversionData = data.ToString();
}
}
break;
}
}
break;
//弹窗选择
case "popupSelect":
{
conversionData = data.ToString();
}
break;
#endregion
}
return conversionData;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
///
/// 转换对应数据Object
///
/// 数据值
/// 数据Key
/// 模板
/// 操作类型(List-列表值,create-创建值,detail-详情值,transition-过渡值)
///
private string TransformDataObject(object dataValue, string dataKey, List fieldsModelList, string actionType = null)
{
StringBuilder sb = new StringBuilder();
//根据KEY查找模板
var model = fieldsModelList.Find(f => f.__vModel__ == dataKey);
if (model != null)
{
switch (model.__config__.NCCKey)
{
//文件上传
case "uploadFz":
{
var fileList = TemplateControlsDataConversion(dataValue, model);
if (fileList != null)
{
sb.AppendFormat("{0}", fileList.Serialize());
}
}
break;
//图片上传
case "uploadImg":
{
var fileList = TemplateControlsDataConversion(dataValue, model);
if (fileList != null)
{
sb.AppendFormat("{0}", fileList.Serialize());
}
}
break;
//省市区联动
case "address":
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model).Serialize());
}
break;
//树形选择
case "treeSelect":
{
if (model.multiple)
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model).Serialize());
}
else
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model));
}
}
break;
//公司组件
case "comSelect":
{
if (model.multiple)
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model, actionType).Serialize());
}
else
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model));
}
}
break;
//部门组件
case "depSelect":
{
if (model.multiple)
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model).Serialize());
}
else
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model));
}
}
break;
//岗位组件
case "posSelect":
{
if (model.multiple)
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model).Serialize());
}
else
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model));
}
}
break;
//用户组件
case "userSelect":
{
if (model.multiple)
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model).Serialize());
}
else
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model));
}
}
break;
//滑块
case "slider":
{
if (model.multiple)
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model).Serialize());
}
else
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model));
}
}
break;
//时间范围
case "timeRange":
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model, actionType).Serialize());
}
break;
//日期范围
case "dateRange":
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model, actionType).Serialize());
}
break;
//下拉选择
case "select":
{
if (model.multiple)
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model).Serialize());
}
else
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model));
}
}
break;
//复选框
case "checkbox":
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model).Serialize());
}
break;
//级联
case "cascader":
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model).Serialize());
}
break;
//日期选择
case "date":
{
try
{
DateTime.Parse(dataValue.ToString());
sb.AppendFormat("{0}", TemplateControlsDataConversion(Ext.TimeToTimeStamp(Convert.ToDateTime(dataValue)), model, actionType));
}
catch
{
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model, actionType));
}
}
break;
default:
sb.AppendFormat("{0}", TemplateControlsDataConversion(dataValue, model, actionType));
break;
}
}
if (dataKey == "F_Id")
{
sb.AppendFormat("{0}", dataValue.ToString());
}
return sb.ToString().TrimStart('"').TrimEnd('"');
}
#endregion
#region 缓存模板数据
///
/// 获取可视化开发模板可缓存数据
///
/// 模型id
/// 模板数据结构
///
private async Task> GetVisualDevTemplateData(string moldelId, List formData)
{
Dictionary templateData = new Dictionary();
var cacheKey = CommonConst.VISUALDEV + _userManager.TenantId + "_" + moldelId;
if (_sysCacheService.Exists(cacheKey))
{
templateData = _sysCacheService.Get(cacheKey).Deserialize>();
}
else
{
foreach (var model in formData)
{
if (model != null && model.__vModel__ != null)
{
ConfigModel configModel = model.__config__;
string fieldName1 = model.__vModel__;
string type = configModel.NCCKey;
switch (type)
{
//单选框
case NCCKeyConst.RADIO:
{
if (vModelType.DICTIONARY.GetDescription() == configModel.dataType)
{
var dictionaryDataEntityList = string.IsNullOrEmpty(configModel.dictionaryType) ? null : await _dictionaryDataService.GetList(configModel.dictionaryType);
List> dictionaryDataList = new List>();
foreach (var item in dictionaryDataEntityList)
{
Dictionary dictionary = new Dictionary();
dictionary.Add(item.Id, item.FullName);
dictionaryDataList.Add(dictionary);
}
templateData.Add(fieldName1, dictionaryDataList);
}
if (vModelType.STATIC.GetDescription() == configModel.dataType)
{
var optionList = model.__slot__.options;
List> list = new List>();
foreach (var item in optionList)
{
Dictionary option = new Dictionary();
option.Add(item[model.__config__.props.value].ToString(), item[model.__config__.props.label].ToString());
list.Add(option);
}
templateData.Add(fieldName1, list);
}
if (vModelType.DYNAMIC.GetDescription() == configModel.dataType)
{
//获取远端数据
var dynamic = await _dataInterfaceService.GetInfo(model.__config__.propsUrl);
if (1.Equals(dynamic.DataType))
{
var linkEntity = await _dbLinkService.GetInfo(dynamic.DBLinkId);
var dt = _databaseService.GetInterFaceData(linkEntity, dynamic.Query);
List> dynamicDataList = dt.Serialize().Deserialize>>();
List> list = new List>();
foreach (var item in dynamicDataList)
{
Dictionary dynamicDic = new Dictionary();
dynamicDic.Add(item[model.__config__.props.value].ToString(), item[model.__config__.props.label].ToString());
list.Add(dynamicDic);
}
templateData.Add(fieldName1, list);
}
}
}
break;
//下拉框
case NCCKeyConst.SELECT:
{
if (vModelType.DICTIONARY.GetDescription() == configModel.dataType)
{
List dictionaryDataEntityList = string.IsNullOrEmpty(configModel.dictionaryType) ? null : await _dictionaryDataService.GetList(configModel.dictionaryType);
List> dictionaryDataList = new List>();
foreach (var item in dictionaryDataEntityList)
{
Dictionary dictionary = new Dictionary();
dictionary.Add(item.Id, item.FullName);
dictionaryDataList.Add(dictionary);
}
templateData.Add(fieldName1, dictionaryDataList);
}
else if (vModelType.STATIC.GetDescription() == configModel.dataType)
{
var optionList = model.__slot__.options;
List> list = new List>();
foreach (var item in optionList)
{
Dictionary option = new Dictionary();
option.Add(item[model.__config__.props.value].ToString(), item[model.__config__.props.label].ToString());
list.Add(option);
}
templateData.Add(fieldName1, list);
}
else if (vModelType.DYNAMIC.GetDescription() == configModel.dataType)
{
//获取远端数据
DataInterfaceEntity dynamic = await _dataInterfaceService.GetInfo(model.__config__.propsUrl);
if (1.Equals(dynamic.DataType))
{
var linkEntity = await _dbLinkService.GetInfo(dynamic.DBLinkId);
var dt = _databaseService.GetInterFaceData(linkEntity, dynamic.Query);
List> dynamicDataList = dt.Serialize().Deserialize>>();
List> list = new List>();
foreach (var item in dynamicDataList)
{
Dictionary dynamicDic = new Dictionary();
dynamicDic.Add(item[model.__config__.props.value].ToString(), item[model.__config__.props.label].ToString());
list.Add(dynamicDic);
}
templateData.Add(fieldName1, list);
}
}
}
break;
//复选框
case NCCKeyConst.CHECKBOX:
{
if (vModelType.DICTIONARY.GetDescription() == configModel.dataType)
{
List dictionaryDataEntityList = string.IsNullOrEmpty(configModel.dictionaryType) ? null : await _dictionaryDataService.GetList(configModel.dictionaryType);
List> dictionaryDataList = new List>();
foreach (var item in dictionaryDataEntityList)
{
Dictionary dictionary = new Dictionary();
dictionary.Add(item.Id, item.FullName);
dictionaryDataList.Add(dictionary);
}
templateData.Add(fieldName1, dictionaryDataList);
}
if (vModelType.STATIC.GetDescription() == configModel.dataType)
{
var optionList = model.__slot__.options;
List> list = new List>();
foreach (var item in optionList)
{
Dictionary option = new Dictionary();
option.Add(item[model.__config__.props.value].ToString(), item[model.__config__.props.label].ToString());
list.Add(option);
}
templateData.Add(fieldName1, list);
}
if (vModelType.DYNAMIC.GetDescription() == configModel.dataType)
{
//获取远端数据
DataInterfaceEntity dynamic = await _dataInterfaceService.GetInfo(model.__config__.propsUrl);
if (1.Equals(dynamic.DataType))
{
var linkEntity = await _dbLinkService.GetInfo(dynamic.DBLinkId);
var dt = _databaseService.GetInterFaceData(linkEntity, dynamic.Query);
List> dynamicDataList = dt.Serialize().Deserialize>>();
List> list = new List>();
foreach (var item in dynamicDataList)
{
Dictionary dynamicDic = new Dictionary();
dynamicDic.Add(item[model.__config__.props.value].ToString(), item[model.__config__.props.label].ToString());
list.Add(dynamicDic);
}
templateData.Add(fieldName1, list);
}
}
}
break;
//树形选择
case NCCKeyConst.TREESELECT:
{
if (vModelType.DICTIONARY.GetDescription() == configModel.dataType)
{
List dictionaryDataEntityList = await _dictionaryDataService.GetList();
List> dictionaryDataList = new List>();
foreach (var item in dictionaryDataEntityList)
{
Dictionary dictionary = new Dictionary();
dictionary.Add(item.Id, item.FullName);
dictionaryDataList.Add(dictionary);
}
templateData.Add(fieldName1, dictionaryDataList);
}
else if (vModelType.STATIC.GetDescription() == configModel.dataType)
{
var props = model.props.props;
var optionList = GetTreeOptions(model.options, props);
List> list = new List>();
foreach (var item in optionList)
{
Dictionary option = new Dictionary();
option.Add(item.value, item.label);
list.Add(option);
}
templateData.Add(fieldName1, list);
}
else if (vModelType.DYNAMIC.GetDescription() == configModel.dataType)
{
//获取远端数据
DataInterfaceEntity dynamic = await _dataInterfaceService.GetInfo(model.__config__.propsUrl);
if (1.Equals(dynamic.DataType))
{
var linkEntity = await _dbLinkService.GetInfo(dynamic.DBLinkId);
var dt = _databaseService.GetInterFaceData(linkEntity, dynamic.Query);
List> dynamicDataList = dt.Serialize().Deserialize>>();
List> list = new List>();
foreach (var item in dynamicDataList)
{
Dictionary dynamicDic = new Dictionary();
dynamicDic.Add(item[model.__config__.props.value].ToString(), item[model.__config__.props.label].ToString());
list.Add(dynamicDic);
}
templateData.Add(fieldName1, list);
}
}
}
break;
//公司
case NCCKeyConst.COMSELECT:
{
var com_organizeEntityList = await _organizeService.GetCompanyListAsync();
List> com_organizeList = new List>();
foreach (var item in com_organizeEntityList)
{
Dictionary com_organize = new Dictionary();
com_organize.Add(item.Id, item.FullName);
com_organizeList.Add(com_organize);
}
templateData.Add(fieldName1, com_organizeList);
}
break;
//部门
case NCCKeyConst.DEPSELECT:
{
var dep_organizeEntityList = await _departmentService.GetListAsync();
List