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]));