From adba94e833eba7df6447d0ee12ba663c00cacdb1 Mon Sep 17 00:00:00 2001 From: "DEVICE8\\12494" Date: Fri, 7 Apr 2023 17:13:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=BF=9B=E5=85=A5getKeyData?= =?UTF-8?q?=E7=9A=84=E5=88=A4=E6=96=AD=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.Common/Extension/StringExtensions.cs | 16 + system/Tnb.Systems/System/DataBaseService.cs | 620 +++++++++--------- visualdev/Tnb.VisualDev/RunService.cs | 37 +- 3 files changed, 354 insertions(+), 319 deletions(-) diff --git a/common/Tnb.Common/Extension/StringExtensions.cs b/common/Tnb.Common/Extension/StringExtensions.cs index 9d168850..3d07967a 100644 --- a/common/Tnb.Common/Extension/StringExtensions.cs +++ b/common/Tnb.Common/Extension/StringExtensions.cs @@ -824,6 +824,22 @@ public static class StringExtensions return char.ToUpper(str[0]) + str.Substring(1, str.Length - 1); } + /// + /// Span实现首字符大写 + /// added by ly on 20230407 + /// + /// + /// + public static string FirstCharToUpperAsSpan(this string input) + { + if (string.IsNullOrEmpty(input)) + { + return string.Empty; + } + Span destination = stackalloc char[1]; + input.AsSpan(0, 1).ToUpperInvariant(destination); + return $"{destination}{input.AsSpan(1)}"; + } /// /// 计算当前字符串与指定字符串的编辑距离(相似度). diff --git a/system/Tnb.Systems/System/DataBaseService.cs b/system/Tnb.Systems/System/DataBaseService.cs index 493c16e9..2e5cf242 100644 --- a/system/Tnb.Systems/System/DataBaseService.cs +++ b/system/Tnb.Systems/System/DataBaseService.cs @@ -1,6 +1,7 @@ using System.Collections; using System.Data; using System.Text; +using System.Text.RegularExpressions; using JNPF.Common.Configuration; using JNPF.Common.Core.Manager; using JNPF.Common.Core.Manager.Files; @@ -35,295 +36,295 @@ namespace JNPF.Systems; [Route("api/system/[controller]")] public class DataBaseService : IDynamicApiController, ITransient { - /// - /// 服务基础仓储. - /// - public readonly ISqlSugarRepository _repository; + /// + /// 服务基础仓储. + /// + public readonly ISqlSugarRepository _repository; - /// - /// 数据连接服务. - /// - private readonly IDbLinkService _dbLinkService; + /// + /// 数据连接服务. + /// + private readonly IDbLinkService _dbLinkService; - /// - /// 文件服务. - /// - private readonly IFileManager _fileManager; + /// + /// 文件服务. + /// + private readonly IFileManager _fileManager; - /// - /// 数据库管理. - /// - private readonly IDataBaseManager _dataBaseManager; + /// + /// 数据库管理. + /// + private readonly IDataBaseManager _dataBaseManager; - /// - /// 用户管理. - /// - private readonly IUserManager _userManager; + /// + /// 用户管理. + /// + private readonly IUserManager _userManager; - /// - /// 初始化一个类型的新实例. - /// - public DataBaseService( - ISqlSugarRepository repository, - IDbLinkService dbLinkService, - IFileManager fileManager, - IDataBaseManager dataBaseManager, - IUserManager userManager) - { - _repository = repository; - _dbLinkService = dbLinkService; - _fileManager = fileManager; - _dataBaseManager = dataBaseManager; - _userManager = userManager; - } - - #region GET - - /// - /// 表名列表. - /// - /// 连接Id. - /// 过滤条件. - /// - [HttpGet("{id}/Tables")] - public async Task GetList(string id, [FromQuery] KeywordInput input) - { - var link = await _dbLinkService.GetInfo(id); - var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); - var tables = _dataBaseManager.GetDBTableList(tenantLink); - //tables = tables.Where((x, i) => tables.FindIndex(z => z.Name == x.Name) == i).ToList(); - //var output = tables.Adapt>(); - if (!string.IsNullOrEmpty(input.keyword)) - tables = tables.FindAll(d => d.table.ToLower().Contains(input.keyword.ToLower()) || (d.tableName.IsNotEmptyOrNull() && d.tableName.ToLower().Contains(input.keyword.ToLower()))); - if (tenantLink.DbType.ToLower().Equals("dm")) + /// + /// 初始化一个类型的新实例. + /// + public DataBaseService( + ISqlSugarRepository repository, + IDbLinkService dbLinkService, + IFileManager fileManager, + IDataBaseManager dataBaseManager, + IUserManager userManager) { - GetTableCount(tables, tenantLink); - } - return new { list = tables.OrderBy(x => x.table).ToList() }; - //try - //{ - //} - //catch (Exception ex) - //{ - // return new { list = new List() }; - //} - } - - /// - /// 预览数据. - /// - /// 请求参数. - /// 连接Id. - /// 表名. - /// - [HttpGet("{linkId}/Table/{tableName}/Preview")] - public async Task GetData([FromQuery] DatabaseTablePreviewQuery input, string linkId, string tableName) - { - var link = await _dbLinkService.GetInfo(linkId); - if (string.IsNullOrEmpty(tableName)) return new PageResult(); - var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); - StringBuilder dbSql = new StringBuilder(); - dbSql.AppendFormat("SELECT * FROM {0} WHERE 1=1", tableName); - if (!string.IsNullOrEmpty(input.field) && !string.IsNullOrEmpty(input.keyword)) - dbSql.AppendFormat(" AND {0} like '%{1}%'", input.field, input.keyword); - - return await _dataBaseManager.GetDataTablePage(tenantLink, dbSql.ToString(), input.currentPage, input.pageSize); - } - - /// - /// 字段列表. - /// - /// 连接Id. - /// 表名. - /// 字段类型. - /// - [HttpGet("{linkId}/Tables/{tableName}/Fields")] - public async Task GetFieldList(string linkId, string tableName, [FromQuery] string type) - { - var link = await _dbLinkService.GetInfo(linkId); - if (string.IsNullOrEmpty(tableName)) return new PageResult(); - var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); - var data = _dataBaseManager.GetFieldList(tenantLink, tableName).Adapt>(); - if (type.Equals("1")) - { - data.ForEach(item => - { - item.field = item.field.ReplaceRegex("^f_", string.Empty).ParseToPascalCase().ToLowerCase(); - }); + _repository = repository; + _dbLinkService = dbLinkService; + _fileManager = fileManager; + _dataBaseManager = dataBaseManager; + _userManager = userManager; } - return new { list = data }; - } + #region GET - /// - /// 信息. - /// - /// 连接Id. - /// 主键值. - /// - [HttpGet("{linkId}/Table/{tableName}")] - public async Task GetInfo(string linkId, string tableName) - { - var link = await _dbLinkService.GetInfo(linkId); - if (string.IsNullOrEmpty(tableName)) return new PageResult(); - var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); - var output = _dataBaseManager.GetDataBaseTableInfo(tenantLink, tableName); - var data = _dataBaseManager.GetData(tenantLink, tableName); - output.hasTableData = data.Rows.Count > 0; - return output; - } - - /// - /// 获取数据库表字段下拉框列表(弃用). - /// - /// 连接Id. - /// 表名. - /// - [HttpGet("{linkId}/Tables/{tableName}/Fields/Selector")] - public async Task SelectorData(string linkId, string tableName) - { - var link = await _dbLinkService.GetInfo(linkId); - if (string.IsNullOrEmpty(tableName)) return new PageResult(); - var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); - var data = _dataBaseManager.GetDBTableList(tenantLink).FindAll(m => m.table == tableName).Adapt>(); - return new { list = data }; - } - - /// - /// 导出. - /// - /// 连接ID. - /// 表名称. - /// - [HttpGet("{linkId}/Table/{tableName}/Action/Export")] - public async Task ActionsExport(string linkId, string tableName) - { - var link = await _dbLinkService.GetInfo(linkId); - var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); - var data = _dataBaseManager.GetDataBaseTableInfo(tenantLink, tableName); - var jsonStr = data.ToJsonString(); - return await _fileManager.Export(jsonStr, data.tableInfo.table, ExportFileType.bdb); - } - - #endregion - - #region POST - - /// - /// 删除. - /// - /// 连接Id. - /// 表名. - /// - [HttpDelete("{linkId}/Table/{tableName}")] - [UnitOfWork] - public async Task Delete(string linkId, string tableName) - { - if (IsSysTable(tableName)) - throw Oops.Oh(ErrorCode.D1504); - var link = await _dbLinkService.GetInfo(linkId); - var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); - var data = _dataBaseManager.GetData(tenantLink, tableName); - if (data.Rows.Count > 0) - throw Oops.Oh(ErrorCode.D1508); - if (!_dataBaseManager.Delete(tenantLink, tableName)) - throw Oops.Oh(ErrorCode.D1500); - } - - /// - /// 新建. - /// - /// 连接Id. - /// 请求参数. - /// - [HttpPost("{linkId}/Table")] - [UnitOfWork] - public async Task Create(string linkId, [FromBody] DatabaseTableInfoOutput input) - { - var link = await _dbLinkService.GetInfo(linkId); - var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); - if (_dataBaseManager.IsAnyTable(tenantLink, input.tableInfo.newTable)) - throw Oops.Oh(ErrorCode.D1503); - var tableInfo = input.tableInfo.Adapt(); - tableInfo.table = input.tableInfo.newTable; - var tableFieldList = input.tableFieldList.Adapt>(); - if (!await _dataBaseManager.Create(tenantLink, tableInfo, tableFieldList)) - throw Oops.Oh(ErrorCode.D1501); - } - - /// - /// 更新. - /// - /// 连接Id. - /// 请求参数. - /// - [HttpPut("{linkId}/Table")] - [UnitOfWork] - public async Task Update(string linkId, [FromBody] DatabaseTableUpInput input) - { - var link = await _dbLinkService.GetInfo(linkId); - var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); - var oldFieldList = _dataBaseManager.GetFieldList(tenantLink, input.tableInfo.table).Adapt>(); - oldFieldList = _dataBaseManager.ViewDataTypeConversion(oldFieldList, _dataBaseManager.ToDbType(tenantLink.DbType)); - var oldTableInfo = _dataBaseManager.GetDBTableList(tenantLink).Find(m => m.table == input.tableInfo.table).Adapt(); - var data = _dataBaseManager.GetData(tenantLink, input.tableInfo.table); - if (data.Rows.Count > 0) - throw Oops.Oh(ErrorCode.D1508); - var tableInfo = input.tableInfo.Adapt(); - tableInfo.table = input.tableInfo.newTable; - if (IsSysTable(tableInfo.table)) - throw Oops.Oh(ErrorCode.D1504); - var tableFieldList = input.tableFieldList.Adapt>(); - if (!input.tableInfo.table.Equals(input.tableInfo.newTable) && _dataBaseManager.IsAnyTable(tenantLink, input.tableInfo.newTable)) - throw Oops.Oh(ErrorCode.D1503); - if (!await _dataBaseManager.Update(tenantLink, input.tableInfo.table, tableInfo, tableFieldList)) + /// + /// 表名列表. + /// + /// 连接Id. + /// 过滤条件. + /// + [HttpGet("{id}/Tables")] + public async Task GetList(string id, [FromQuery] KeywordInput input) { - await _dataBaseManager.Create(tenantLink, oldTableInfo, oldFieldList.Adapt>()); - throw Oops.Oh(ErrorCode.D1502); + var link = await _dbLinkService.GetInfo(id); + var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); + var tables = _dataBaseManager.GetDBTableList(tenantLink); + //tables = tables.Where((x, i) => tables.FindIndex(z => z.Name == x.Name) == i).ToList(); + //var output = tables.Adapt>(); + if (!string.IsNullOrEmpty(input.keyword)) + tables = tables.FindAll(d => d.table.ToLower().Contains(input.keyword.ToLower()) || (d.tableName.IsNotEmptyOrNull() && d.tableName.ToLower().Contains(input.keyword.ToLower()))); + if (tenantLink.DbType.ToLower().Equals("dm")) + { + GetTableCount(tables, tenantLink); + } + return new { list = tables.OrderBy(x => x.table).ToList() }; + //try + //{ + //} + //catch (Exception ex) + //{ + // return new { list = new List() }; + //} } - } - /// - /// 更新. - /// - /// 连接Id. - /// 请求参数. - /// - [HttpPut("{linkId}/addFields")] - [UnitOfWork] - public async Task AddFields(string linkId, [FromBody] DatabaseTableUpInput input) - { - try + /// + /// 预览数据. + /// + /// 请求参数. + /// 连接Id. + /// 表名. + /// + [HttpGet("{linkId}/Table/{tableName}/Preview")] + public async Task GetData([FromQuery] DatabaseTablePreviewQuery input, string linkId, string tableName) { - var link = await _dbLinkService.GetInfo(linkId); - var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); - _dataBaseManager.AddTableColumn(tenantLink, input.tableInfo.table, input.tableFieldList.Adapt>()); - } - catch (Exception ex) - { - throw Oops.Oh(ErrorCode.D1510); - } - } + var link = await _dbLinkService.GetInfo(linkId); + if (string.IsNullOrEmpty(tableName)) return new PageResult(); + var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); + StringBuilder dbSql = new StringBuilder(); + dbSql.AppendFormat("SELECT * FROM {0} WHERE 1=1", tableName); + if (!string.IsNullOrEmpty(input.field) && !string.IsNullOrEmpty(input.keyword)) + dbSql.AppendFormat(" AND {0} like '%{1}%'", input.field, input.keyword); - /// - /// 导入. - /// - /// - /// - /// - [HttpPost("{linkid}/Action/Import")] - public async Task ActionsImport(string linkid, IFormFile file) - { - var fileType = Path.GetExtension(file.FileName).Replace(".", string.Empty); - if (!fileType.ToLower().Equals(ExportFileType.bdb.ToString())) - throw Oops.Oh(ErrorCode.D3006); - var josn = _fileManager.Import(file); - var data = josn.ToObject(); - if (data == null || data.tableFieldList == null || data.tableInfo == null) - throw Oops.Oh(ErrorCode.D3006); - data.tableInfo.newTable = data.tableInfo.table; - await Create(linkid, data); - } + return await _dataBaseManager.GetDataTablePage(tenantLink, dbSql.ToString(), input.currentPage, input.pageSize); + } + + /// + /// 字段列表. + /// + /// 连接Id. + /// 表名. + /// 字段类型. + /// + [HttpGet("{linkId}/Tables/{tableName}/Fields")] + public async Task GetFieldList(string linkId, string tableName, [FromQuery] string type) + { + var link = await _dbLinkService.GetInfo(linkId); + if (string.IsNullOrEmpty(tableName)) return new PageResult(); + var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); + var data = _dataBaseManager.GetFieldList(tenantLink, tableName).Adapt>(); + if (type.Equals("1")) + { + data.ForEach(item => + { + item.field = item.field.ReplaceRegex("^f_", string.Empty).ParseToPascalCase().ToLowerCase(); + }); + } + + return new { list = data }; + } + + /// + /// 信息. + /// + /// 连接Id. + /// 主键值. + /// + [HttpGet("{linkId}/Table/{tableName}")] + public async Task GetInfo(string linkId, string tableName) + { + var link = await _dbLinkService.GetInfo(linkId); + if (string.IsNullOrEmpty(tableName)) return new PageResult(); + var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); + var output = _dataBaseManager.GetDataBaseTableInfo(tenantLink, tableName); + var data = _dataBaseManager.GetData(tenantLink, tableName); + output.hasTableData = data.Rows.Count > 0; + return output; + } + + /// + /// 获取数据库表字段下拉框列表(弃用). + /// + /// 连接Id. + /// 表名. + /// + [HttpGet("{linkId}/Tables/{tableName}/Fields/Selector")] + public async Task SelectorData(string linkId, string tableName) + { + var link = await _dbLinkService.GetInfo(linkId); + if (string.IsNullOrEmpty(tableName)) return new PageResult(); + var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); + var data = _dataBaseManager.GetDBTableList(tenantLink).FindAll(m => m.table == tableName).Adapt>(); + return new { list = data }; + } + + /// + /// 导出. + /// + /// 连接ID. + /// 表名称. + /// + [HttpGet("{linkId}/Table/{tableName}/Action/Export")] + public async Task ActionsExport(string linkId, string tableName) + { + var link = await _dbLinkService.GetInfo(linkId); + var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); + var data = _dataBaseManager.GetDataBaseTableInfo(tenantLink, tableName); + var jsonStr = data.ToJsonString(); + return await _fileManager.Export(jsonStr, data.tableInfo.table, ExportFileType.bdb); + } + + #endregion + + #region POST + + /// + /// 删除. + /// + /// 连接Id. + /// 表名. + /// + [HttpDelete("{linkId}/Table/{tableName}")] + [UnitOfWork] + public async Task Delete(string linkId, string tableName) + { + if (IsSysTable(tableName)) + throw Oops.Oh(ErrorCode.D1504); + var link = await _dbLinkService.GetInfo(linkId); + var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); + var data = _dataBaseManager.GetData(tenantLink, tableName); + if (data.Rows.Count > 0) + throw Oops.Oh(ErrorCode.D1508); + if (!_dataBaseManager.Delete(tenantLink, tableName)) + throw Oops.Oh(ErrorCode.D1500); + } + + /// + /// 新建. + /// + /// 连接Id. + /// 请求参数. + /// + [HttpPost("{linkId}/Table")] + [UnitOfWork] + public async Task Create(string linkId, [FromBody] DatabaseTableInfoOutput input) + { + var link = await _dbLinkService.GetInfo(linkId); + var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); + if (_dataBaseManager.IsAnyTable(tenantLink, input.tableInfo.newTable)) + throw Oops.Oh(ErrorCode.D1503); + var tableInfo = input.tableInfo.Adapt(); + tableInfo.table = input.tableInfo.newTable; + var tableFieldList = input.tableFieldList.Adapt>(); + if (!await _dataBaseManager.Create(tenantLink, tableInfo, tableFieldList)) + throw Oops.Oh(ErrorCode.D1501); + } + + /// + /// 更新. + /// + /// 连接Id. + /// 请求参数. + /// + [HttpPut("{linkId}/Table")] + [UnitOfWork] + public async Task Update(string linkId, [FromBody] DatabaseTableUpInput input) + { + var link = await _dbLinkService.GetInfo(linkId); + var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); + var oldFieldList = _dataBaseManager.GetFieldList(tenantLink, input.tableInfo.table).Adapt>(); + oldFieldList = _dataBaseManager.ViewDataTypeConversion(oldFieldList, _dataBaseManager.ToDbType(tenantLink.DbType)); + var oldTableInfo = _dataBaseManager.GetDBTableList(tenantLink).Find(m => m.table == input.tableInfo.table).Adapt(); + var data = _dataBaseManager.GetData(tenantLink, input.tableInfo.table); + if (data.Rows.Count > 0) + throw Oops.Oh(ErrorCode.D1508); + var tableInfo = input.tableInfo.Adapt(); + tableInfo.table = input.tableInfo.newTable; + if (IsSysTable(tableInfo.table)) + throw Oops.Oh(ErrorCode.D1504); + var tableFieldList = input.tableFieldList.Adapt>(); + if (!input.tableInfo.table.Equals(input.tableInfo.newTable) && _dataBaseManager.IsAnyTable(tenantLink, input.tableInfo.newTable)) + throw Oops.Oh(ErrorCode.D1503); + if (!await _dataBaseManager.Update(tenantLink, input.tableInfo.table, tableInfo, tableFieldList)) + { + await _dataBaseManager.Create(tenantLink, oldTableInfo, oldFieldList.Adapt>()); + throw Oops.Oh(ErrorCode.D1502); + } + } + + /// + /// 更新. + /// + /// 连接Id. + /// 请求参数. + /// + [HttpPut("{linkId}/addFields")] + [UnitOfWork] + public async Task AddFields(string linkId, [FromBody] DatabaseTableUpInput input) + { + try + { + var link = await _dbLinkService.GetInfo(linkId); + var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); + _dataBaseManager.AddTableColumn(tenantLink, input.tableInfo.table, input.tableFieldList.Adapt>()); + } + catch (Exception ex) + { + throw Oops.Oh(ErrorCode.D1510); + } + } + + /// + /// 导入. + /// + /// + /// + /// + [HttpPost("{linkid}/Action/Import")] + public async Task ActionsImport(string linkid, IFormFile file) + { + var fileType = Path.GetExtension(file.FileName).Replace(".", string.Empty); + if (!fileType.ToLower().Equals(ExportFileType.bdb.ToString())) + throw Oops.Oh(ErrorCode.D3006); + var josn = _fileManager.Import(file); + var data = josn.ToObject(); + if (data == null || data.tableFieldList == null || data.tableInfo == null) + throw Oops.Oh(ErrorCode.D3006); + data.tableInfo.newTable = data.tableInfo.table; + await Create(linkid, data); + } /// /// 清除表数据 @@ -356,7 +357,7 @@ public class DataBaseService : IDynamicApiController, ITransient /// /// [HttpPost("{linkId}/gen-code")] - public async Task GenerateCode(string linkId,DatabaseTableDataCleanInput input) + public async Task GenerateCode(string linkId, DatabaseTableDataCleanInput input) { if (input.TableName.IsNullOrWhiteSpace()) { @@ -387,9 +388,22 @@ public class DataBaseService : IDynamicApiController, ITransient var pos = 0; if ((pos = s.IndexOf("_", StringComparison.Ordinal)) > -1) { - var first = s.AsSpan().Slice(0, pos).ToString().ToUpperCase(); - var second = s.AsSpan().Slice(pos + 1).ToString().ToUpperCase(); - return $"{first}{second}"; + var separatorStrings = Regex.Split(s, @"_", RegexOptions.Compiled); + if (separatorStrings.Length > 2) + { + var sb = new StringBuilder(); + foreach (var item in separatorStrings) + { + sb.Append(item.ToUpperCase()); + } + return sb.ToString(); + } + else + { + var first = s.AsSpan().Slice(0, pos).ToString().ToUpperCase(); + var second = s.AsSpan().Slice(pos + 1).ToString().ToUpperCase(); + return $"{first}{second}"; + } } else { @@ -433,9 +447,9 @@ public class DataBaseService : IDynamicApiController, ITransient /// /// private bool IsSysTable(string table) - { - string[] byoTable = { + string[] byoTable = + { "base_appdata", "base_authorize", "base_billrule", @@ -576,28 +590,28 @@ public class DataBaseService : IDynamicApiController, ITransient "wform_warehousereceiptentry", "wform_workcontactsheet" }; - return ((IList)byoTable).Contains(table.ToLower()); - } - - /// - /// 获取表条数. - /// - /// - private void GetTableCount(List tableList, DbLinkEntity link) - { - var _sqlSugarClient = _dataBaseManager.ChangeDataBase(link); - foreach (var item in tableList) - { - try - { - item.sum = _sqlSugarClient.Queryable().AS(item.table).Count(); - } - catch (Exception ex) - { - item.sum = 0; - } + return ((IList)byoTable).Contains(table.ToLower()); } - } - #endregion + /// + /// 获取表条数. + /// + /// + private void GetTableCount(List tableList, DbLinkEntity link) + { + var _sqlSugarClient = _dataBaseManager.ChangeDataBase(link); + foreach (var item in tableList) + { + try + { + item.sum = _sqlSugarClient.Queryable().AS(item.table).Count(); + } + catch (Exception ex) + { + item.sum = 0; + } + } + } + + #endregion } \ No newline at end of file diff --git a/visualdev/Tnb.VisualDev/RunService.cs b/visualdev/Tnb.VisualDev/RunService.cs index fdccee5d..273764b5 100644 --- a/visualdev/Tnb.VisualDev/RunService.cs +++ b/visualdev/Tnb.VisualDev/RunService.cs @@ -1,4 +1,5 @@ using System.Text; +using System.Text.RegularExpressions; using JNPF.Common.Const; using JNPF.Common.Core.Manager; using JNPF.Common.Dtos.VisualDev; @@ -206,8 +207,8 @@ public class RunService : IRunService, ITransient { if (templateInfo.SingleFormData.Any(x => x.__config__.templateJson != null && x.__config__.templateJson.Any())) realList.list = await _formDataParsing.GetKeyData(templateInfo.SingleFormData.Where(x => x.__config__.templateJson != null && x.__config__.templateJson.Any()).ToList(), realList.list, templateInfo.ColumnData, actionType, templateInfo.WebType, primaryKey); - else - realList.list = await _formDataParsing.GetKeyData(templateInfo.SingleFormData.Where(x => x.__config__.templateJson == null).ToList(), realList.list, templateInfo.ColumnData, actionType, templateInfo.WebType, primaryKey); + else //modified by ly on 20230407 + realList.list = await _formDataParsing.GetKeyData(templateInfo.SingleFormData.Where(x => x.__config__.templateJson == null|| !x.__config__.templateJson.Any()).ToList(), realList.list, templateInfo.ColumnData, actionType, templateInfo.WebType, primaryKey); // 如果是无表数据并且排序字段不为空,再进行数据排序 if (!templateInfo.IsHasTable && input.sidx.IsNotEmptyOrNull()) @@ -286,7 +287,7 @@ public class RunService : IRunService, ITransient if (!newItem.ContainsKey(item.Key.Replace(roweditId, string.Empty))) newItem.Add(item.Key.Replace(roweditId, string.Empty), obj); if (!newItem.ContainsKey(item.Key.Replace(roweditId, string.Empty) + "_name")) newItem.Add(item.Key.Replace(roweditId, string.Empty) + "_name", value); } - if(item.Key.Equals("flowState") || item.Key.Equals("flowState_name")) newItem.Add(item.Key, item.Value); + if (item.Key.Equals("flowState") || item.Key.Equals("flowState_name")) newItem.Add(item.Key, item.Value); if (item.Key.Equals("id") && !newItem.ContainsKey(item.Key)) newItem.Add(item.Key, item.Value); if (templateInfo.AllFieldsModel.Any(x => x.__vModel__.Equals(item.Key) && x.__config__.jnpfKey.Equals(JnpfKeyConst.TIME))) newItem[item.Key] = items[item.Key]; } @@ -1111,7 +1112,7 @@ public class RunService : IRunService, ITransient var oldTInfo = new TemplateParsingBase(oldFEntity.PropertyJson, oldFEntity.TableJson, (int)oldFEntity.FormType); // 旧模板 var newTInfo = new TemplateParsingBase(newFEntity.PropertyJson, newFEntity.TableJson, (int)newFEntity.FormType); // 新模板 - if(oldFEntity.FormType.Equals(1) || newFEntity.FormType.Equals(1)) + if (oldFEntity.FormType.Equals(1) || newFEntity.FormType.Equals(1)) { oldTInfo.AllFieldsModel.ForEach(it => { @@ -1733,9 +1734,9 @@ public class RunService : IRunService, ITransient /// private string GetPrimary(DbLinkEntity link, string MainTableName) { - var keys = _databaseService.GetPrimaries(link, MainTableName); - if (keys.Count < 1) throw Oops.Oh(ErrorCode.D1402); // 主表未设置主键 - return keys.First(); + var keys = _databaseService.GetPrimaries(link, MainTableName); + if (keys.Count < 1) throw Oops.Oh(ErrorCode.D1402); // 主表未设置主键 + return keys.First(); //List? tableList = _databaseService.GetFieldList(link, MainTableName); // 获取主表所有列 //DbTableFieldModel? mainPrimary = tableList.Find(t => t.primaryKey); // 主表主键 //if (mainPrimary == null || mainPrimary.IsNullOrEmpty()) throw Oops.Oh(ErrorCode.D1402); // 主表未设置主键 @@ -2378,7 +2379,7 @@ public class RunService : IRunService, ITransient else newItem.ConditionalList.RemoveAt(j); } - if(newItem.ConditionalList.Any()) cList[i] = newItem; + if (newItem.ConditionalList.Any()) cList[i] = newItem; else cList.RemoveAt(i); } else if (cList[i] is ConditionalModel) @@ -2865,8 +2866,8 @@ public class RunService : IRunService, ITransient break; case JnpfKeyConst.SELECT: { - //modified by ly on 20230407 var itemValue = item.Value.ToString().Contains("[") ? item.Value.ToJsonString() : item.Value.ToString(); + //modified by ly on 20230407 JArray jarr = null; if (itemValue!.Contains("[")) { @@ -2889,24 +2890,28 @@ public class RunService : IRunService, ITransient } }); } - else if (jarr?.Children()!= null && jarr?.Children().ToList().Count > 1) + //modified by ly on 20230407 + else if (jarr?.Children() != null && jarr?.Children().ToList().Count > 1) { - var values = jarr.ToList().Select(t =>t.Value()).ToList(); + var values = jarr.ToList().Select(t => t.Value()).ToList(); var condition = new ConditionalCollections(); condition.ConditionalList = new List>(values.Count); - values.ForEach(x => + values.ForEach(x => { - new KeyValuePair(WhereType.Or, new ConditionalModel + condition.ConditionalList.Add(new KeyValuePair(WhereType.Or, new ConditionalModel { FieldName = item.Key, ConditionalType = ConditionalType.Equal, - FieldValue = itemValue - }); + FieldValue = x, + })); }); conModels.Add(condition); } else { + //modified by ly on 20230407 + itemValue = Regex.Match(itemValue, @"\[(.+)\]").Groups[1].Value; + itemValue = itemValue.Trim('"'); conModels.Add(new ConditionalCollections() { ConditionalList = new List>() @@ -3134,7 +3139,7 @@ public class RunService : IRunService, ITransient var datas = new List>(); if (childTableModel.__config__.children.Any(x => x.__config__.templateJson != null && x.__config__.templateJson.Any())) - datas = (await _formDataParsing.GetKeyData(childTableModel.__config__.children.Where(x => x.__config__.templateJson != null && x.__config__.templateJson.Any()).ToList(), rows, templateInfo.ColumnData, "List",2, "F_Id", it)); + datas = (await _formDataParsing.GetKeyData(childTableModel.__config__.children.Where(x => x.__config__.templateJson != null && x.__config__.templateJson.Any()).ToList(), rows, templateInfo.ColumnData, "List", 2, "F_Id", it)); datas = await _formDataParsing.GetKeyData(childTableModel.__config__.children.Where(x => x.__config__.templateJson == null).ToList(), rows, templateInfo.ColumnData); var newDatas = datas.Copy(); newDatas.ForEach(x => x.Remove(relationField[item.Key]));