调整进入getKeyData的判断条件
This commit is contained in:
@@ -824,6 +824,22 @@ public static class StringExtensions
|
||||
|
||||
return char.ToUpper(str[0]) + str.Substring(1, str.Length - 1);
|
||||
}
|
||||
/// <summary>
|
||||
/// Span实现首字符大写
|
||||
/// added by ly on 20230407
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
public static string FirstCharToUpperAsSpan(this string input)
|
||||
{
|
||||
if (string.IsNullOrEmpty(input))
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
Span<char> destination = stackalloc char[1];
|
||||
input.AsSpan(0, 1).ToUpperInvariant(destination);
|
||||
return $"{destination}{input.AsSpan(1)}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算当前字符串与指定字符串的编辑距离(相似度).
|
||||
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// 服务基础仓储.
|
||||
/// </summary>
|
||||
public readonly ISqlSugarRepository<DbLinkEntity> _repository;
|
||||
/// <summary>
|
||||
/// 服务基础仓储.
|
||||
/// </summary>
|
||||
public readonly ISqlSugarRepository<DbLinkEntity> _repository;
|
||||
|
||||
/// <summary>
|
||||
/// 数据连接服务.
|
||||
/// </summary>
|
||||
private readonly IDbLinkService _dbLinkService;
|
||||
/// <summary>
|
||||
/// 数据连接服务.
|
||||
/// </summary>
|
||||
private readonly IDbLinkService _dbLinkService;
|
||||
|
||||
/// <summary>
|
||||
/// 文件服务.
|
||||
/// </summary>
|
||||
private readonly IFileManager _fileManager;
|
||||
/// <summary>
|
||||
/// 文件服务.
|
||||
/// </summary>
|
||||
private readonly IFileManager _fileManager;
|
||||
|
||||
/// <summary>
|
||||
/// 数据库管理.
|
||||
/// </summary>
|
||||
private readonly IDataBaseManager _dataBaseManager;
|
||||
/// <summary>
|
||||
/// 数据库管理.
|
||||
/// </summary>
|
||||
private readonly IDataBaseManager _dataBaseManager;
|
||||
|
||||
/// <summary>
|
||||
/// 用户管理.
|
||||
/// </summary>
|
||||
private readonly IUserManager _userManager;
|
||||
/// <summary>
|
||||
/// 用户管理.
|
||||
/// </summary>
|
||||
private readonly IUserManager _userManager;
|
||||
|
||||
/// <summary>
|
||||
/// 初始化一个<see cref="DataBaseService"/>类型的新实例.
|
||||
/// </summary>
|
||||
public DataBaseService(
|
||||
ISqlSugarRepository<DbLinkEntity> repository,
|
||||
IDbLinkService dbLinkService,
|
||||
IFileManager fileManager,
|
||||
IDataBaseManager dataBaseManager,
|
||||
IUserManager userManager)
|
||||
{
|
||||
_repository = repository;
|
||||
_dbLinkService = dbLinkService;
|
||||
_fileManager = fileManager;
|
||||
_dataBaseManager = dataBaseManager;
|
||||
_userManager = userManager;
|
||||
}
|
||||
|
||||
#region GET
|
||||
|
||||
/// <summary>
|
||||
/// 表名列表.
|
||||
/// </summary>
|
||||
/// <param name="id">连接Id.</param>
|
||||
/// <param name="input">过滤条件.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{id}/Tables")]
|
||||
public async Task<dynamic> 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<List<DatabaseTableListOutput>>();
|
||||
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"))
|
||||
/// <summary>
|
||||
/// 初始化一个<see cref="DataBaseService"/>类型的新实例.
|
||||
/// </summary>
|
||||
public DataBaseService(
|
||||
ISqlSugarRepository<DbLinkEntity> 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<DatabaseTableListOutput>() };
|
||||
//}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 预览数据.
|
||||
/// </summary>
|
||||
/// <param name="input">请求参数.</param>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="tableName">表名.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{linkId}/Table/{tableName}/Preview")]
|
||||
public async Task<dynamic> 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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 字段列表.
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="tableName">表名.</param>
|
||||
/// <param name="type">字段类型.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{linkId}/Tables/{tableName}/Fields")]
|
||||
public async Task<dynamic> 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<List<TableFieldOutput>>();
|
||||
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
|
||||
|
||||
/// <summary>
|
||||
/// 信息.
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="tableName">主键值.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{linkId}/Table/{tableName}")]
|
||||
public async Task<dynamic> 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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取数据库表字段下拉框列表(弃用).
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="tableName">表名.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{linkId}/Tables/{tableName}/Fields/Selector")]
|
||||
public async Task<dynamic> 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<List<DatabaseTableFieldsSelectorOutput>>();
|
||||
return new { list = data };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导出.
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接ID.</param>
|
||||
/// <param name="tableName">表名称.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{linkId}/Table/{tableName}/Action/Export")]
|
||||
public async Task<dynamic> 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
|
||||
|
||||
/// <summary>
|
||||
/// 删除.
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="tableName">表名.</param>
|
||||
/// <returns></returns>
|
||||
[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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 新建.
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="input">请求参数.</param>
|
||||
/// <returns></returns>
|
||||
[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<DbTableModel>();
|
||||
tableInfo.table = input.tableInfo.newTable;
|
||||
var tableFieldList = input.tableFieldList.Adapt<List<DbTableFieldModel>>();
|
||||
if (!await _dataBaseManager.Create(tenantLink, tableInfo, tableFieldList))
|
||||
throw Oops.Oh(ErrorCode.D1501);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新.
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="input">请求参数.</param>
|
||||
/// <returns></returns>
|
||||
[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<List<TableFieldOutput>>();
|
||||
oldFieldList = _dataBaseManager.ViewDataTypeConversion(oldFieldList, _dataBaseManager.ToDbType(tenantLink.DbType));
|
||||
var oldTableInfo = _dataBaseManager.GetDBTableList(tenantLink).Find(m => m.table == input.tableInfo.table).Adapt<DbTableModel>();
|
||||
var data = _dataBaseManager.GetData(tenantLink, input.tableInfo.table);
|
||||
if (data.Rows.Count > 0)
|
||||
throw Oops.Oh(ErrorCode.D1508);
|
||||
var tableInfo = input.tableInfo.Adapt<DbTableModel>();
|
||||
tableInfo.table = input.tableInfo.newTable;
|
||||
if (IsSysTable(tableInfo.table))
|
||||
throw Oops.Oh(ErrorCode.D1504);
|
||||
var tableFieldList = input.tableFieldList.Adapt<List<DbTableFieldModel>>();
|
||||
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))
|
||||
/// <summary>
|
||||
/// 表名列表.
|
||||
/// </summary>
|
||||
/// <param name="id">连接Id.</param>
|
||||
/// <param name="input">过滤条件.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{id}/Tables")]
|
||||
public async Task<dynamic> GetList(string id, [FromQuery] KeywordInput input)
|
||||
{
|
||||
await _dataBaseManager.Create(tenantLink, oldTableInfo, oldFieldList.Adapt<List<DbTableFieldModel>>());
|
||||
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<List<DatabaseTableListOutput>>();
|
||||
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<DatabaseTableListOutput>() };
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新.
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="input">请求参数.</param>
|
||||
/// <returns></returns>
|
||||
[HttpPut("{linkId}/addFields")]
|
||||
[UnitOfWork]
|
||||
public async Task AddFields(string linkId, [FromBody] DatabaseTableUpInput input)
|
||||
{
|
||||
try
|
||||
/// <summary>
|
||||
/// 预览数据.
|
||||
/// </summary>
|
||||
/// <param name="input">请求参数.</param>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="tableName">表名.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{linkId}/Table/{tableName}/Preview")]
|
||||
public async Task<dynamic> 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<List<DbTableFieldModel>>());
|
||||
}
|
||||
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);
|
||||
|
||||
/// <summary>
|
||||
/// 导入.
|
||||
/// </summary>
|
||||
/// <param name="linkid"></param>
|
||||
/// <param name="file"></param>
|
||||
/// <returns></returns>
|
||||
[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<DatabaseTableInfoOutput>();
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 字段列表.
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="tableName">表名.</param>
|
||||
/// <param name="type">字段类型.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{linkId}/Tables/{tableName}/Fields")]
|
||||
public async Task<dynamic> 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<List<TableFieldOutput>>();
|
||||
if (type.Equals("1"))
|
||||
{
|
||||
data.ForEach(item =>
|
||||
{
|
||||
item.field = item.field.ReplaceRegex("^f_", string.Empty).ParseToPascalCase().ToLowerCase();
|
||||
});
|
||||
}
|
||||
|
||||
return new { list = data };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 信息.
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="tableName">主键值.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{linkId}/Table/{tableName}")]
|
||||
public async Task<dynamic> 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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取数据库表字段下拉框列表(弃用).
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="tableName">表名.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{linkId}/Tables/{tableName}/Fields/Selector")]
|
||||
public async Task<dynamic> 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<List<DatabaseTableFieldsSelectorOutput>>();
|
||||
return new { list = data };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导出.
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接ID.</param>
|
||||
/// <param name="tableName">表名称.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{linkId}/Table/{tableName}/Action/Export")]
|
||||
public async Task<dynamic> 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
|
||||
|
||||
/// <summary>
|
||||
/// 删除.
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="tableName">表名.</param>
|
||||
/// <returns></returns>
|
||||
[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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 新建.
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="input">请求参数.</param>
|
||||
/// <returns></returns>
|
||||
[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<DbTableModel>();
|
||||
tableInfo.table = input.tableInfo.newTable;
|
||||
var tableFieldList = input.tableFieldList.Adapt<List<DbTableFieldModel>>();
|
||||
if (!await _dataBaseManager.Create(tenantLink, tableInfo, tableFieldList))
|
||||
throw Oops.Oh(ErrorCode.D1501);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新.
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="input">请求参数.</param>
|
||||
/// <returns></returns>
|
||||
[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<List<TableFieldOutput>>();
|
||||
oldFieldList = _dataBaseManager.ViewDataTypeConversion(oldFieldList, _dataBaseManager.ToDbType(tenantLink.DbType));
|
||||
var oldTableInfo = _dataBaseManager.GetDBTableList(tenantLink).Find(m => m.table == input.tableInfo.table).Adapt<DbTableModel>();
|
||||
var data = _dataBaseManager.GetData(tenantLink, input.tableInfo.table);
|
||||
if (data.Rows.Count > 0)
|
||||
throw Oops.Oh(ErrorCode.D1508);
|
||||
var tableInfo = input.tableInfo.Adapt<DbTableModel>();
|
||||
tableInfo.table = input.tableInfo.newTable;
|
||||
if (IsSysTable(tableInfo.table))
|
||||
throw Oops.Oh(ErrorCode.D1504);
|
||||
var tableFieldList = input.tableFieldList.Adapt<List<DbTableFieldModel>>();
|
||||
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<List<DbTableFieldModel>>());
|
||||
throw Oops.Oh(ErrorCode.D1502);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新.
|
||||
/// </summary>
|
||||
/// <param name="linkId">连接Id.</param>
|
||||
/// <param name="input">请求参数.</param>
|
||||
/// <returns></returns>
|
||||
[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<List<DbTableFieldModel>>());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw Oops.Oh(ErrorCode.D1510);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导入.
|
||||
/// </summary>
|
||||
/// <param name="linkid"></param>
|
||||
/// <param name="file"></param>
|
||||
/// <returns></returns>
|
||||
[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<DatabaseTableInfoOutput>();
|
||||
if (data == null || data.tableFieldList == null || data.tableInfo == null)
|
||||
throw Oops.Oh(ErrorCode.D3006);
|
||||
data.tableInfo.newTable = data.tableInfo.table;
|
||||
await Create(linkid, data);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清除表数据
|
||||
@@ -356,7 +357,7 @@ public class DataBaseService : IDynamicApiController, ITransient
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
/// <exception cref="ArgumentException"></exception>
|
||||
[HttpPost("{linkId}/gen-code")]
|
||||
public async Task<dynamic> GenerateCode(string linkId,DatabaseTableDataCleanInput input)
|
||||
public async Task<dynamic> 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
|
||||
/// <param name="table"></param>
|
||||
/// <returns></returns>
|
||||
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());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取表条数.
|
||||
/// </summary>
|
||||
/// <param name="tableList"></param>
|
||||
private void GetTableCount(List<DatabaseTableListOutput> tableList, DbLinkEntity link)
|
||||
{
|
||||
var _sqlSugarClient = _dataBaseManager.ChangeDataBase(link);
|
||||
foreach (var item in tableList)
|
||||
{
|
||||
try
|
||||
{
|
||||
item.sum = _sqlSugarClient.Queryable<dynamic>().AS(item.table).Count();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
item.sum = 0;
|
||||
}
|
||||
return ((IList)byoTable).Contains(table.ToLower());
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
/// <summary>
|
||||
/// 获取表条数.
|
||||
/// </summary>
|
||||
/// <param name="tableList"></param>
|
||||
private void GetTableCount(List<DatabaseTableListOutput> tableList, DbLinkEntity link)
|
||||
{
|
||||
var _sqlSugarClient = _dataBaseManager.ChangeDataBase(link);
|
||||
foreach (var item in tableList)
|
||||
{
|
||||
try
|
||||
{
|
||||
item.sum = _sqlSugarClient.Queryable<dynamic>().AS(item.table).Count();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
item.sum = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -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
|
||||
/// <returns></returns>
|
||||
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<DbTableFieldModel>? 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<string>()).ToList();
|
||||
var values = jarr.ToList().Select(t => t.Value<string>()).ToList();
|
||||
var condition = new ConditionalCollections();
|
||||
condition.ConditionalList = new List<KeyValuePair<WhereType, ConditionalModel>>(values.Count);
|
||||
values.ForEach(x =>
|
||||
values.ForEach(x =>
|
||||
{
|
||||
new KeyValuePair<WhereType, ConditionalModel>(WhereType.Or, new ConditionalModel
|
||||
condition.ConditionalList.Add(new KeyValuePair<WhereType, ConditionalModel>(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<KeyValuePair<WhereType, ConditionalModel>>()
|
||||
@@ -3134,7 +3139,7 @@ public class RunService : IRunService, ITransient
|
||||
|
||||
var datas = new List<Dictionary<string, object>>();
|
||||
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]));
|
||||
|
||||
Reference in New Issue
Block a user