This commit is contained in:
2023-05-31 10:19:05 +08:00
parent 1b65a7a9e5
commit 9c621c75cd
238 changed files with 9905 additions and 4034 deletions

View File

@@ -21,6 +21,7 @@ using JNPF.Common.Security;
using JNPF.DatabaseAccessor;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.Extras.DatabaseAccessor.SqlSugar.Models;
using JNPF.Extras.Thirdparty.JSEngine;
using JNPF.FriendlyException;
using JNPF.LinqBuilder;
@@ -506,19 +507,65 @@ public class DataInterfaceService : IDataInterfaceService, IDynamicApiController
ConnectionString = string.Format($"{App.Configuration["ConnectionStrings:DefaultConnection"]}", result.data.dotnet)
});
}
_sqlSugarClient.ChangeDatabase(tenantId);
if (!"default".Equals(tenantId) && KeyVariable.MultiTenancyType.Equals("COLUMN"))
{
_sqlSugarClient.QueryFilter.AddTableFilter<ITenantFilter>(it => it.TenantId == tenantId);
}
else
{
_sqlSugarClient.ChangeDatabase(tenantId);
}
}
var interfaceOauthEntity = await _sqlSugarClient.Queryable<InterfaceOauthEntity>().FirstAsync(x => x.AppId == appId && x.DeleteMark == null && x.EnabledMark == 1);
if (interfaceOauthEntity == null) return null;
var ymDate = DateTime.Now.ParseToUnixTime().ToString();
var authorization = GetVerifySignature(interfaceOauthEntity, intefaceId, ymDate);
return new
{
return new {
YmDate = ymDate,
Authorization = authorization,
};
}
/// <summary>
/// 复制.
/// </summary>
/// <param name="id">主键值.</param>
/// <returns></returns>
[HttpPost("{id}/Actions/Copy")]
public async Task ActionsCopy(string id)
{
var entity = await _repository.GetFirstAsync(x => x.Id == id && x.DeleteMark == null);
if (entity == null)
throw Oops.Oh(ErrorCode.COM1005);
var random = RandomExtensions.NextLetterAndNumberString(new Random(), 5).ToLower();
entity.FullName = string.Format("{0}.副本{1}", entity.FullName, random);
entity.EnCode = string.Format("{0}{1}", entity.EnCode, random);
if (entity.FullName.Length >= 50 || entity.EnCode.Length >= 50)
throw Oops.Oh(ErrorCode.COM1009);
entity.EnabledMark = 0;
var isOk = await _repository.AsInsertable(entity).IgnoreColumns(ignoreNullColumn: true).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync();
if (isOk < 1)
throw Oops.Oh(ErrorCode.COM1000);
}
/// <summary>
/// 预览接口字段.
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("{id}/Actions/GetFields")]
[UnitOfWork]
public async Task<dynamic> GetFields(string id, [FromBody] DataInterfacePreviewInput input)
{
try
{
return (await Preview(id, input)).ToObject<List<Dictionary<string, object>>>().FirstOrDefault().Keys.ToList();
}
catch (Exception e)
{
throw Oops.Oh(ErrorCode.COM1020);
}
}
#endregion
#region PublicMethod
@@ -549,7 +596,7 @@ public class DataInterfaceService : IDataInterfaceService, IDynamicApiController
/// 根据不同类型请求接口.
/// </summary>
/// <param name="id"></param>
/// <param name="type">0 分页 1 :详情 ,其他 原始.</param>
/// <param name="type">0 分页 1 :详情 2数据视图 ,其他 原始.</param>
/// <param name="tenantId"></param>
/// <param name="input"></param>
/// <returns></returns>
@@ -579,36 +626,61 @@ public class DataInterfaceService : IDataInterfaceService, IDynamicApiController
});
}
_sqlSugarClient.ChangeDatabase(tenantId);
if (!"default".Equals(tenantId) && KeyVariable.MultiTenancyType.Equals("COLUMN"))
{
_sqlSugarClient.QueryFilter.AddTableFilter<ITenantFilter>(it => it.TenantId == tenantId);
}
else
{
_sqlSugarClient.ChangeDatabase(tenantId);
}
_configId = tenantId;
_dbName = result.data.dotnet;
}
var data = await _sqlSugarClient.Queryable<DataInterfaceEntity>().FirstAsync(x => x.Id == id && x.DeleteMark == null);
var data = await _sqlSugarClient.CopyNew().Queryable<DataInterfaceEntity>().FirstAsync(x => x.Id == id && x.DeleteMark == null);
if (data == null)
throw Oops.Oh(ErrorCode.COM1005);
// 远端数据sql过滤
if (input.IsNotEmptyOrNull())
{
var columnList = new List<string>();
if (input.keyword.IsNotEmptyOrNull())
input.columnOptions.Split(",").ToList().ForEach(x => columnList.Add(string.Format("{0} like '%{1}%'", x, input.keyword)));
if (columnList.Any() && !string.IsNullOrWhiteSpace(input.keyword))
data.Query = string.Format("select * from ({0}) t where {1} ", data.Query.TrimEnd(';'), string.Join(" or ", columnList));
else if (!string.IsNullOrWhiteSpace(input.relationField) && !string.IsNullOrWhiteSpace(input.keyword))
data.Query = string.Format("select * from ({0}) t where {1} like '%{2}%' ", data.Query.TrimEnd(';'), input.relationField, input.keyword);
if (!string.IsNullOrWhiteSpace(input.propsValue) && !string.IsNullOrWhiteSpace(input.id))
data.Query = string.Format("select * from ({0}) t where {1} = '{2}' ", data.Query.TrimEnd(';'), input.propsValue, input.id);
if (!string.IsNullOrWhiteSpace(input.propsValue) && input.ids.Any())
data.Query = string.Format("select * from ({0}) t where {1} in ('{2}') ", data.Query.TrimEnd(';'), input.propsValue, string.Join("','", input.ids));
if (input.columnOptions.IsNotEmptyOrNull() && !string.IsNullOrWhiteSpace(input.keyword))
if (type == 2 && !2.Equals(data.DataType) && (input.queryJson.IsNotEmptyOrNull() || input.sidx.IsNotEmptyOrNull()))
{
var whereStr = new List<string>();
input.columnOptions.Split(",").ToList().ForEach(item => whereStr.Add(string.Format(" {0} like '%{1}%' ", item, input.keyword)));
data.Query = string.Format("select * from ({0}) t where {1} ", data.Query.TrimEnd(';'), string.Join(" or ", whereStr));
if (input.queryJson.IsNotEmptyOrNull())
{
var sqlFields = input.queryJson.ToObject<Dictionary<string, string>>();
var whereList = new List<string>();
foreach (var item in sqlFields)
{
if (item.Key.Contains("jnpf_searchType_equals_")) whereList.Add(string.Format("{0} = '{1}' ", item.Key.Replace("jnpf_searchType_equals_", string.Empty), item.Value));
else whereList.Add(string.Format("{0} like '%{1}%' ", item.Key, item.Value));
}
data.Query = string.Format("select * from ({0}) t where {1} ", data.Query.TrimEnd(';'), string.Join(" and ", whereList));
}
if (input.sidx.IsNotEmptyOrNull()) data.Query = string.Format("{0} order by {1} {2}", data.Query.TrimEnd(';'), input.sidx, input.sort);
}
else
{
var columnList = new List<string>();
if (input.keyword.IsNotEmptyOrNull())
input.columnOptions.Split(",").ToList().ForEach(x => columnList.Add(string.Format("{0} like '%{1}%'", x, input.keyword)));
if (columnList.Any() && !string.IsNullOrWhiteSpace(input.keyword))
data.Query = string.Format("select * from ({0}) t where {1} ", data.Query.TrimEnd(';'), string.Join(" or ", columnList));
else if (!string.IsNullOrWhiteSpace(input.relationField) && !string.IsNullOrWhiteSpace(input.keyword))
data.Query = string.Format("select * from ({0}) t where {1} like '%{2}%' ", data.Query.TrimEnd(';'), input.relationField, input.keyword);
if (!string.IsNullOrWhiteSpace(input.propsValue) && !string.IsNullOrWhiteSpace(input.id))
data.Query = string.Format("select * from ({0}) t where {1} = '{2}' ", data.Query.TrimEnd(';'), input.propsValue, input.id);
if (!string.IsNullOrWhiteSpace(input.propsValue) && input.ids.Any())
data.Query = string.Format("select * from ({0}) t where {1} in ('{2}') ", data.Query.TrimEnd(';'), input.propsValue, string.Join("','", input.ids));
if (input.columnOptions.IsNotEmptyOrNull() && !string.IsNullOrWhiteSpace(input.keyword))
{
var whereStr = new List<string>();
input.columnOptions.Split(",").ToList().ForEach(item => whereStr.Add(string.Format(" {0} like '%{1}%' ", item, input.keyword)));
data.Query = string.Format("select * from ({0}) t where {1} ", data.Query.TrimEnd(';'), string.Join(" or ", whereStr));
}
}
if (input.paramList.IsNotEmptyOrNull() && input.paramList.Count > 0)
{
@@ -625,12 +697,11 @@ public class DataInterfaceService : IDataInterfaceService, IDynamicApiController
if (1.Equals(data.DataType))
{
var resTable = await GetData(data);
if (type == 0)
if (type == 0 || type == 2)
{
// 分页
var dt = GetPageToDataTable(resTable, input.currentPage, input.pageSize);
output = new
{
output = new {
pagination = new PageResult()
{
currentPage = input.currentPage,
@@ -677,8 +748,7 @@ public class DataInterfaceService : IDataInterfaceService, IDynamicApiController
// });
//}
resList = resList.FindAll(x => x.Where(xx => xx.Value != null && xx.Value.Contains(input.keyword)).Any());
output = new
{
output = new {
pagination = new PageResult()
{
currentPage = input.currentPage,
@@ -699,6 +769,47 @@ public class DataInterfaceService : IDataInterfaceService, IDynamicApiController
return resList.FindAll(x => x.ContainsKey(input.propsValue) && x.Any(it => input.ids.Contains(it.Value)));
}
}
else if (type == 2)
{
if (input.queryJson.IsNotEmptyOrNull() || input.sidx.IsNotEmptyOrNull())
{
if (input.queryJson.IsNotEmptyOrNull())
{
var querList = input.queryJson.ToObject<Dictionary<string, string>>();
foreach (var item in querList)
{
if (item.Key.Contains("jnpf_searchType_equals_")) resList = resList.Where(x => x[item.Key.Replace("jnpf_searchType_equals_", "")].Equals(item.Value)).ToList();
else resList = resList.Where(x => x[item.Key].Contains(item.Value)).ToList();
}
}
if (input.sidx.IsNotEmptyOrNull())
{
if (input.sort.Equals("desc")) resList = resList.OrderBy(x => x[input.sidx]).ToList();
else resList = resList.OrderByDescending(x => x[input.sidx]).ToList();
}
output = new {
pagination = new PageResult()
{
currentPage = input.currentPage,
pageSize = input.pageSize,
total = resList.Count
},
list = resList.Skip((input.currentPage - 1) * input.pageSize).Take(input.pageSize).ToList(),
};
}
else
{
output = new {
pagination = new PageResult()
{
currentPage = input.currentPage,
pageSize = input.pageSize,
total = resList.Count
},
list = resList.Skip((input.currentPage - 1) * input.pageSize).Take(input.pageSize).ToList(),
};
}
}
else
{
output = result;
@@ -800,12 +911,12 @@ public class DataInterfaceService : IDataInterfaceService, IDynamicApiController
}
else
{
dataProcessingResults = resList.ToJsonString();
dataProcessingResults = resList;
}
break;
// 静态数据
case 2:
dataProcessingResults = resList.ToJsonString();
dataProcessingResults = resList;
break;
}
if (!dataProcessingResults.IsNullOrEmpty())
@@ -868,11 +979,11 @@ public class DataInterfaceService : IDataInterfaceService, IDynamicApiController
var link = new DbLinkEntity();
if (!_sqlSugarClient.AsTenant().IsAnyConnection(_configId))
{
link = await _sqlSugarClient.Queryable<DbLinkEntity>().FirstAsync(x => x.Id == dbLinkId && x.DeleteMark == null);
link = await _sqlSugarClient.CopyNew().Queryable<DbLinkEntity>().FirstAsync(x => x.Id == dbLinkId && x.DeleteMark == null);
}
else
{
link = await _repository.AsSugarClient().Queryable<DbLinkEntity>().FirstAsync(x => x.Id == dbLinkId && x.DeleteMark == null);
link = await _repository.AsSugarClient().CopyNew().Queryable<DbLinkEntity>().FirstAsync(x => x.Id == dbLinkId && x.DeleteMark == null);
}
var tenantLink = link ?? await GetTenantDbLink();
@@ -880,7 +991,7 @@ public class DataInterfaceService : IDataInterfaceService, IDynamicApiController
sql = await GetSqlParameter(sql, parameter);
if (reqMethod.Equals("3"))
{
return _dataBaseManager.GetInterFaceData(tenantLink, sql, parameter.ToArray());
return _dataBaseManager.GetInterFaceDataCopyNew(tenantLink, sql, parameter.ToArray());
}
else
{
@@ -914,16 +1025,23 @@ public class DataInterfaceService : IDataInterfaceService, IDynamicApiController
dicHerader[key.field] = key.defaultValue;
}
switch (entity?.RequestMethod)
try
{
case "6":
result = (await entity.Path.SetHeaders(dicHerader).SetQueries(dic).GetAsStringAsync()).ToObject<JObject>();
break;
case "7":
result = (await entity.Path.SetHeaders(dicHerader).SetBody(dic).PostAsStringAsync()).ToObject<JObject>();
break;
switch (entity.RequestMethod)
{
case "6":
result = (await entity.Path.SetHeaders(dicHerader).SetQueries(dic).GetAsStringAsync()).ToObject<JObject>();
break;
case "7":
result = (await entity.Path.SetHeaders(dicHerader).SetBody(dic).PostAsStringAsync()).ToObject<JObject>();
break;
}
}
return result.ContainsKey("data") ? result["data"].ToObject<JObject>() : result;
catch (Exception e)
{
throw Oops.Oh(ErrorCode.COM1018);
}
return result.ContainsKey("data") && result["data"].IsNotEmptyOrNull() ? result["data"].ToObject<JObject>() : result;
}
/// <summary>
@@ -1158,7 +1276,14 @@ public class DataInterfaceService : IDataInterfaceService, IDynamicApiController
});
}
_sqlSugarClient.ChangeDatabase(tenantId);
if (!"default".Equals(tenantId) && KeyVariable.MultiTenancyType.Equals("COLUMN"))
{
_sqlSugarClient.QueryFilter.AddTableFilter<ITenantFilter>(it => it.TenantId == tenantId);
}
else
{
_sqlSugarClient.ChangeDatabase(tenantId);
}
_configId = tenantId;
_dbName = result.data.dotnet;
}