v3.4.6
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user