111
This commit is contained in:
parent
a2d8a2919c
commit
6fb8ea0558
@ -274,7 +274,7 @@ public class DefaultForwardFlow : IForwardFlow
|
||||
|
||||
msg.RequestUri = new Uri(targetInterface.RequestAddress);
|
||||
|
||||
msg.Method = new HttpMethod(targetInterface.RequestMethod.ToUpper());
|
||||
msg.Method = new HttpMethod(targetInterface.RequestMethod.ToString().ToUpper());
|
||||
|
||||
// 将参数绑定到query
|
||||
var builder = new UriBuilder(targetInterface.RequestAddress);
|
||||
|
||||
@ -1,84 +1,89 @@
|
||||
using System.ComponentModel;
|
||||
using System.Reflection;
|
||||
using InterfaceForward.Repositories.Dictionary.Services;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace InterfaceForward.Application.Services.App
|
||||
namespace InterfaceForward.Application.Services.App;
|
||||
|
||||
/// <summary>
|
||||
/// 字典服务
|
||||
/// </summary>
|
||||
[ApiExplorerSettings(GroupName = "应用服务")]
|
||||
public class DictionaryService : ApplicationService
|
||||
{
|
||||
private static readonly Dictionary<string, List<EnumCacheEntry>> EnumCache = new();
|
||||
|
||||
/// <summary>
|
||||
/// 字典服务
|
||||
/// 列表
|
||||
/// </summary>
|
||||
[ApiExplorerSettings(GroupName = "应用服务")]
|
||||
public class DictionaryService : ApplicationService
|
||||
/// <param name="type">枚举类型</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("Dictionary/GetList")]
|
||||
public List<EnumCacheEntry> GetList(string type)
|
||||
{
|
||||
private readonly IDictionaryRepository _dictionaryRepository;
|
||||
private static readonly Dictionary<string, Dictionary<string, int>> EnumCache = new();
|
||||
// 优先读枚举值
|
||||
return GetKvsByEnumTypeName(type);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public DictionaryService(
|
||||
IDictionaryRepository dictionaryRepository)
|
||||
[HttpPost("Dictionary/CleanCache")]
|
||||
public void CleanCache(string type)
|
||||
{
|
||||
EnumCache.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取枚举下拉列表
|
||||
/// </summary>
|
||||
/// <param name="enumTypeName">枚举类型名称</param>
|
||||
/// <returns></returns>
|
||||
[NonAction]
|
||||
private List<EnumCacheEntry> GetKvsByEnumTypeName(string enumTypeName)
|
||||
{
|
||||
// Check if the type is already cached
|
||||
if (EnumCache.TryGetValue(enumTypeName, out var res))
|
||||
{
|
||||
_dictionaryRepository = dictionaryRepository;
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 列表
|
||||
/// </summary>
|
||||
/// <param name="type">类型</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("Dictionary/GetList")]
|
||||
public async Task<dynamic> GetList(string type)
|
||||
// Load the assembly
|
||||
var assemblyName = "InterfaceForward.Domain.Shared";
|
||||
var assembly = Assembly.Load(assemblyName);
|
||||
if (assembly == null)
|
||||
{
|
||||
return await _dictionaryRepository.AsQueryable().Where(x => x.Type == type).Select(x => new { Key = x.Id, Value = x.Name }).ToListAsync();
|
||||
throw new ArgumentException($"Assembly '{assemblyName}' could not be loaded.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取枚举下拉列表
|
||||
/// </summary>
|
||||
/// <param name="enumTypeName">枚举类型名称</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("Dictionary/GetKvsByEnumTypeName")]
|
||||
public Dictionary<string, int> GetKvsByEnumTypeName(string enumTypeName)
|
||||
// Get the enum type
|
||||
var enumType = assembly.GetType("InterfaceForward.Domain.Shared.Enum." + enumTypeName);
|
||||
if (enumType == null || !enumType.IsEnum)
|
||||
{
|
||||
// Check if the type is already cached
|
||||
if (EnumCache.TryGetValue(enumTypeName, out var res))
|
||||
{
|
||||
return res;
|
||||
}
|
||||
|
||||
// Load the assembly
|
||||
var assemblyName = "InterfaceForward.Domain.Shared";
|
||||
var assembly = Assembly.Load(assemblyName);
|
||||
if (assembly == null)
|
||||
{
|
||||
throw new ArgumentException($"Assembly '{assemblyName}' could not be loaded.");
|
||||
}
|
||||
|
||||
// Get the enum type
|
||||
var enumType = assembly.GetType("InterfaceForward.Domain.Shared.Enum." + enumTypeName);
|
||||
if (enumType == null || !enumType.IsEnum)
|
||||
{
|
||||
throw new ArgumentException($"The type '{enumTypeName}' is not a valid enum.");
|
||||
}
|
||||
|
||||
// Retrieve the descriptions and values
|
||||
var enumDict = new Dictionary<string, int>();
|
||||
foreach (var value in enumType.GetEnumValues())
|
||||
{
|
||||
var name = value.ToString();
|
||||
var fieldInfo = enumType.GetField(name);
|
||||
var descriptionAttribute = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
|
||||
string description = descriptionAttribute != null ? descriptionAttribute.Description : name;
|
||||
enumDict[description] = (int)value;
|
||||
}
|
||||
|
||||
// Cache the result
|
||||
EnumCache[enumTypeName] = enumDict;
|
||||
|
||||
return enumDict;
|
||||
throw new ArgumentException($"The type '{enumTypeName}' is not a valid enum.");
|
||||
}
|
||||
|
||||
// Retrieve the descriptions and values
|
||||
var list = new List<EnumCacheEntry>();
|
||||
foreach (var value in enumType.GetEnumValues())
|
||||
{
|
||||
var name = value.ToString();
|
||||
var fieldInfo = enumType.GetField(name);
|
||||
var descriptionAttribute = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
|
||||
string description = descriptionAttribute != null ? descriptionAttribute.Description : name;
|
||||
list.Add(new EnumCacheEntry
|
||||
{
|
||||
Key = (int)value,
|
||||
Value = description
|
||||
});
|
||||
}
|
||||
|
||||
// Cache the result
|
||||
EnumCache[enumTypeName] = list;
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
public class EnumCacheEntry
|
||||
{
|
||||
public int Key { get; set; }
|
||||
|
||||
public string Value { get; set; } = null!;
|
||||
}
|
||||
}
|
||||
@ -45,7 +45,7 @@ public class InterfaceForwardCommon(
|
||||
.ToObject<ForwardCoreContextCache>();
|
||||
if (cacheContext == null)
|
||||
{
|
||||
var systemInterface = await interfaceForwardQuery.GetInterfaceByCodeAsync(upStreamCode);
|
||||
var systemInterface = await interfaceForwardQuery.GetInterfaceByCodesAsync(upStreamCode);
|
||||
if (systemInterface == null) throw new BusinessException(message: "系统接口不存在");
|
||||
|
||||
logRepository.AppRequestLog.InterfaceCode = systemInterface.Code;
|
||||
|
||||
@ -59,7 +59,7 @@ public class InterfaceMapPublishService(
|
||||
public async Task<InterfaceMapPublishedDifferenceVO> GetPublishCompareAsync([Required] string interfaceCode,
|
||||
[Required] int serviceProviderId, string version)
|
||||
{
|
||||
var systemInterface = await interfaceForwardQuery.GetInterfaceByCodeAsync(interfaceCode);
|
||||
var systemInterface = await interfaceForwardQuery.GetInterfaceByCodesAsync(interfaceCode);
|
||||
if (systemInterface == null) throw new BusinessException(message: "系统接口不存在");
|
||||
|
||||
var serviceProvider = await interfaceForwardQuery.GetServiceProviderByIdAsync(serviceProviderId);
|
||||
@ -98,7 +98,7 @@ public class InterfaceMapPublishService(
|
||||
[HttpPost("InterfaceMap/Publish")]
|
||||
public async Task<bool> PublishAsync(InterfaceMapPublishInput input)
|
||||
{
|
||||
var systemInterface = await interfaceForwardQuery.GetInterfaceByCodeAsync(input.InterfaceCode);
|
||||
var systemInterface = await interfaceForwardQuery.GetInterfaceByCodesAsync(input.InterfaceCode);
|
||||
if (systemInterface == null) throw new BusinessException(message: "系统接口不存在");
|
||||
|
||||
var serviceProvider = await interfaceForwardQuery.GetServiceProviderByIdAsync(input.ServiceProviderId);
|
||||
@ -151,7 +151,7 @@ public class InterfaceMapPublishService(
|
||||
[HttpPost("InterfaceMap/PublishRollback")]
|
||||
public async Task<bool> PublishRollbackAsync(InterfaceMapRollbackInput input)
|
||||
{
|
||||
var systemInterface = await interfaceForwardQuery.GetInterfaceByCodeAsync(input.InterfaceCode);
|
||||
var systemInterface = await interfaceForwardQuery.GetInterfaceByCodesAsync(input.InterfaceCode);
|
||||
if (systemInterface == null) throw new BusinessException(message: "系统接口不存在");
|
||||
var serviceProvider = await interfaceForwardQuery.GetServiceProviderByIdAsync(input.ServiceProviderId);
|
||||
if (serviceProvider == null) throw new BusinessException(message: "服务商不存在");
|
||||
|
||||
@ -37,7 +37,7 @@ public class InterfaceDto
|
||||
///<summary>
|
||||
/// 请求方式
|
||||
///</summary>
|
||||
public string RequestMethod { get; set; } = null!;
|
||||
public RequestMethod RequestMethod { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 内容类型
|
||||
|
||||
@ -2,17 +2,17 @@
|
||||
|
||||
public enum ContentType
|
||||
{
|
||||
FormUrlEncoded = 17,
|
||||
FormData = 18,
|
||||
Json = 19,
|
||||
Xml = 20,
|
||||
FormUrlEncoded = 1,
|
||||
FormData,
|
||||
Json,
|
||||
Xml,
|
||||
}
|
||||
|
||||
public enum ResponseContentType
|
||||
{
|
||||
Json = 33,
|
||||
Xml = 34,
|
||||
pdf = 35,
|
||||
Base64 = 36,
|
||||
csv = 44
|
||||
Json = 1,
|
||||
Xml,
|
||||
pdf,
|
||||
Base64,
|
||||
csv
|
||||
}
|
||||
@ -1,38 +0,0 @@
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace InterfaceForward.Domain.Shared.Enum
|
||||
{
|
||||
/// <summary>
|
||||
/// 接口类型
|
||||
/// </summary>
|
||||
public enum InterfaceTypeEnum
|
||||
{
|
||||
/// <summary>
|
||||
/// 系统接口
|
||||
/// </summary>
|
||||
[Description("系统接口")]
|
||||
系统接口,
|
||||
/// <summary>
|
||||
/// 服务商接口
|
||||
/// </summary>
|
||||
[Description("服务商接口")]
|
||||
服务商接口
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 选择类型
|
||||
/// </summary>
|
||||
public enum LogListInputTypeEnum
|
||||
{
|
||||
/// <summary>
|
||||
/// 应用
|
||||
/// </summary>
|
||||
[Description("应用")]
|
||||
应用,
|
||||
/// <summary>
|
||||
/// 服务商
|
||||
/// </summary>
|
||||
[Description("服务商")]
|
||||
服务商
|
||||
}
|
||||
}
|
||||
@ -5,9 +5,9 @@ namespace InterfaceForward.Domain.Shared.Enum;
|
||||
/// </summary>
|
||||
public enum FieldPosition
|
||||
{
|
||||
Header = 5,
|
||||
Body = 6,
|
||||
Query = 7,
|
||||
Url = 32,
|
||||
Nothing = 42 //不处理
|
||||
Header = 1,
|
||||
Body,
|
||||
Query,
|
||||
Url,
|
||||
Nothing //不处理
|
||||
}
|
||||
@ -8,15 +8,15 @@ public enum InterfaceReturnConfigType
|
||||
/// 状态码
|
||||
/// </summary>
|
||||
[Description("状态码")]
|
||||
StatusCode = 101,
|
||||
StatusCode = 1,
|
||||
/// <summary>
|
||||
/// PDF标签上传
|
||||
/// </summary>
|
||||
[Description("PDF标签上传")]
|
||||
PdfLabel = 102,
|
||||
PdfLabel,
|
||||
/// <summary>
|
||||
/// 错误信息返回
|
||||
/// </summary>
|
||||
[Description("错误信息返回")]
|
||||
ErrorMsg = 103,
|
||||
ErrorMsg,
|
||||
}
|
||||
@ -11,7 +11,7 @@ public enum LabelType
|
||||
/// Url
|
||||
/// </summary>
|
||||
[Description("Url")]
|
||||
Url,
|
||||
Url = 1,
|
||||
/// <summary>
|
||||
/// Base64
|
||||
/// </summary>
|
||||
|
||||
@ -0,0 +1,20 @@
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace InterfaceForward.Domain.Shared.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// 选择类型
|
||||
/// </summary>
|
||||
public enum LogListInputTypeEnum
|
||||
{
|
||||
/// <summary>
|
||||
/// 应用
|
||||
/// </summary>
|
||||
[Description("应用")]
|
||||
应用 = 1,
|
||||
/// <summary>
|
||||
/// 服务商
|
||||
/// </summary>
|
||||
[Description("服务商")]
|
||||
服务商
|
||||
}
|
||||
@ -1,6 +0,0 @@
|
||||
namespace InterfaceForward.Domain.Shared.Enum;
|
||||
|
||||
public enum MessageType
|
||||
{
|
||||
Error, Info, Debug, Warn, Notice
|
||||
}
|
||||
@ -1,48 +1,15 @@
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace InterfaceForward.Domain.Shared.Enum
|
||||
namespace InterfaceForward.Domain.Shared.Enum;
|
||||
|
||||
public enum OptionType
|
||||
{
|
||||
|
||||
public enum OptionType
|
||||
{
|
||||
[Description("无")]
|
||||
无 = 0,
|
||||
[Description("新增")]
|
||||
新增 = 1,
|
||||
[Description("删除")]
|
||||
删除 = 2,
|
||||
[Description("修改")]
|
||||
修改 = 3
|
||||
}
|
||||
|
||||
public enum OptionTypeNoDelete
|
||||
{
|
||||
[Description("新增")]
|
||||
新增 = 1,
|
||||
[Description("修改")]
|
||||
修改 = 3
|
||||
}
|
||||
|
||||
public enum OptionTypeNoNull
|
||||
{
|
||||
[Description("新增")]
|
||||
新增 = 1,
|
||||
[Description("删除")]
|
||||
删除 = 2,
|
||||
[Description("修改")]
|
||||
修改 = 3
|
||||
}
|
||||
|
||||
public enum ButtonType
|
||||
{
|
||||
[Description("新增")]
|
||||
新增 = 1,
|
||||
[Description("删除")]
|
||||
删除 = 2,
|
||||
[Description("修改")]
|
||||
修改 = 3,
|
||||
[Description("查看")]
|
||||
查看 = 4
|
||||
}
|
||||
|
||||
[Description("无")]
|
||||
无 = 0,
|
||||
[Description("新增")]
|
||||
新增 = 1,
|
||||
[Description("删除")]
|
||||
删除 = 2,
|
||||
[Description("修改")]
|
||||
修改 = 3
|
||||
}
|
||||
@ -11,7 +11,7 @@ public enum ParameterParseTypeEnum
|
||||
/// JSON
|
||||
/// </summary>
|
||||
[Description("JSON")]
|
||||
Json,
|
||||
Json = 1,
|
||||
/// <summary>
|
||||
/// XML
|
||||
/// </summary>
|
||||
|
||||
@ -2,12 +2,12 @@ namespace InterfaceForward.Domain.Shared.Enum;
|
||||
|
||||
public enum ParameterType
|
||||
{
|
||||
String = 8,
|
||||
Float = 9,
|
||||
Object = 10,
|
||||
Boolean = 11,
|
||||
Array = 12,
|
||||
Integer = 43,
|
||||
DateTime = 114,
|
||||
DateTimeOffset = 115,
|
||||
String = 1,
|
||||
Float,
|
||||
Object,
|
||||
Boolean,
|
||||
Array,
|
||||
Integer,
|
||||
DateTime,
|
||||
DateTimeOffset,
|
||||
}
|
||||
12
src/InterfaceForward.Domain.Shared/Enum/RequestMethod.cs
Normal file
12
src/InterfaceForward.Domain.Shared/Enum/RequestMethod.cs
Normal file
@ -0,0 +1,12 @@
|
||||
namespace InterfaceForward.Domain.Shared.Enum;
|
||||
|
||||
public enum RequestMethod
|
||||
{
|
||||
GET = 1,
|
||||
POST = 2,
|
||||
PUT,
|
||||
DELETE,
|
||||
OPTIONS,
|
||||
HEAD,
|
||||
PATCH
|
||||
}
|
||||
@ -2,8 +2,8 @@
|
||||
|
||||
public enum RequestProtocol
|
||||
{
|
||||
Http = 13,
|
||||
Https = 14,
|
||||
WCF = 39,
|
||||
SOAP = 49
|
||||
Http = 1,
|
||||
Https,
|
||||
WCF,
|
||||
SOAP
|
||||
}
|
||||
@ -2,8 +2,8 @@
|
||||
|
||||
public enum ServiceProviderType
|
||||
{
|
||||
运输服务商 = 21,
|
||||
轨迹服务商 = 22,
|
||||
关务服务商 = 23,
|
||||
保险服务商 = 24
|
||||
运输服务商 = 1,
|
||||
轨迹服务商,
|
||||
关务服务商,
|
||||
保险服务商
|
||||
}
|
||||
@ -1,41 +0,0 @@
|
||||
namespace InterfaceForward.Repositories.Dictionary.Entitys
|
||||
{
|
||||
///<summary>
|
||||
/// 字典表
|
||||
///</summary>
|
||||
[SugarTable("t_dictionary")]
|
||||
public class DictionaryEntity : FullAuditedAggregateRoot<int>
|
||||
{
|
||||
|
||||
///<summary>
|
||||
/// 自增主键
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true, IsIdentity = true)]
|
||||
public int Id { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 类型
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "Type")]
|
||||
public string Type { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 名称
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "Name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 字典描述
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "Description")]
|
||||
public string Description { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 排序
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "Sort")]
|
||||
public int Sort { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
using InterfaceForward.Repositories.Dictionary.Entitys;
|
||||
|
||||
namespace InterfaceForward.Repositories.Dictionary.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 字典仓储实现
|
||||
/// </summary>
|
||||
public class DictionaryRepository : BasicRepository<DictionaryEntity>, IDictionaryRepository, IScopedDependency
|
||||
{
|
||||
}
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
using InterfaceForward.Repositories.Dictionary.Entitys;
|
||||
|
||||
namespace InterfaceForward.Repositories.Dictionary.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 字典仓储
|
||||
/// </summary>
|
||||
public interface IDictionaryRepository
|
||||
{
|
||||
ISugarQueryable<DictionaryEntity> AsQueryable();
|
||||
}
|
||||
}
|
||||
@ -8,7 +8,6 @@ namespace InterfaceForward.Repositories.Interface.Entitys;
|
||||
[SugarTable("t_interface")]
|
||||
public class InterfaceEntity : FullAuditedAggregateRoot<int>
|
||||
{
|
||||
|
||||
///<summary>
|
||||
/// 自增主键
|
||||
///</summary>
|
||||
@ -61,7 +60,7 @@ public class InterfaceEntity : FullAuditedAggregateRoot<int>
|
||||
/// 请求方式
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "RequestMethod")]
|
||||
public int RequestMethod { get; set; }
|
||||
public RequestMethod RequestMethod { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 内容类型
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
using InterfaceForward.Domain.Shared.Enum;
|
||||
using InterfaceForward.Application.Contracts.Dtos.Interface;
|
||||
using InterfaceForward.Domain.Shared.Dtos;
|
||||
using InterfaceForward.Repositories.Dictionary.Entitys;
|
||||
using InterfaceForward.Repositories.Interface.Entitys;
|
||||
using InterfaceForward.Repositories.Interface.ValueObjects;
|
||||
using InterfaceForward.Repositories.Parameter.VO;
|
||||
@ -21,8 +19,6 @@ public class InterfaceRepository : BasicRepository<InterfaceEntity>, IInterfaceR
|
||||
{
|
||||
// t_interface驱动t_interface_map,数据量上来可以在t_interface_map UpStreamId字段建立索引
|
||||
var query = AsQueryable()
|
||||
.LeftJoin<DictionaryEntity>((a, d) => (int)a.RequestProtocol == d.Id)
|
||||
.LeftJoin<DictionaryEntity>((a, d, e) => a.RequestMethod == e.Id)
|
||||
.Where(a => a.IsUpStream)
|
||||
;
|
||||
|
||||
@ -33,13 +29,13 @@ public class InterfaceRepository : BasicRepository<InterfaceEntity>, IInterfaceR
|
||||
|
||||
return await query
|
||||
.OrderBy(a => a.CreateTime)
|
||||
.Select((a, d, e) => new SystemInterfaceTreeListValueObject
|
||||
.Select(a => new SystemInterfaceTreeListValueObject
|
||||
{
|
||||
Id = a.Id,
|
||||
CategoryId = a.Category,
|
||||
Name = a.Name,
|
||||
Code = a.Code,
|
||||
RequestProtocol = d.Name,
|
||||
RequestProtocol = a.RequestProtocol,
|
||||
Description = a.Description,
|
||||
MapCount = SqlFunc.Subqueryable<InterfaceMapEntity>().Where(x => x.UpStreamId == a.Id && !x.IsDeleted)
|
||||
.DistinctCount(x => x.ServiceProviderId),
|
||||
@ -52,8 +48,6 @@ public class InterfaceRepository : BasicRepository<InterfaceEntity>, IInterfaceR
|
||||
GetServiceProviderInterfaceListAsync(ServiceProviderInterfaceTreeListInputObjectValue input)
|
||||
{
|
||||
var query = AsQueryable()
|
||||
.LeftJoin<DictionaryEntity>((a, b) => (int)a.RequestProtocol == b.Id)
|
||||
.LeftJoin<DictionaryEntity>((a, b, c) => a.RequestMethod == c.Id)
|
||||
.Where(a => !a.IsUpStream)
|
||||
.Where(a => a.ServiceProviderId == input.ServiceProviderId);
|
||||
|
||||
@ -63,18 +57,7 @@ public class InterfaceRepository : BasicRepository<InterfaceEntity>, IInterfaceR
|
||||
;
|
||||
return await query
|
||||
.OrderBy(a => a.CreateTime)
|
||||
.Select((a, b, c) => new ServiceProviderInterfaceTreeListOutputValueObject
|
||||
{
|
||||
Id = a.Id,
|
||||
CategoryId = a.Category,
|
||||
Name = a.Name,
|
||||
Code = a.Code,
|
||||
RequestProtocol = b.Name,
|
||||
RequestMethod = c.Name,
|
||||
RequestAddress = a.RequestAddress,
|
||||
Description = a.Description,
|
||||
UpdateTime = a.UpdateTime,
|
||||
})
|
||||
.Select<ServiceProviderInterfaceTreeListOutputValueObject>()
|
||||
.ToListAsync();
|
||||
}
|
||||
|
||||
@ -94,10 +77,12 @@ public class InterfaceRepository : BasicRepository<InterfaceEntity>, IInterfaceR
|
||||
public async Task<List<SystemInterfaceDropdownValueObject>> GetSystemInterfaceDropdownListAsync()
|
||||
{
|
||||
// 获取所有接口分组
|
||||
var groups = await Context.Queryable<DictionaryEntity>()
|
||||
.Where(x => x.Type == InterfaceGroup)
|
||||
.Select(x => new { x.Id, x.Name })
|
||||
.ToListAsync();
|
||||
// var groups = await Context.Queryable<DictionaryEntity>()
|
||||
// .Where(x => x.Type == InterfaceGroup)
|
||||
// .Select(x => new { x.Id, x.Name })
|
||||
// .ToListAsync();
|
||||
|
||||
var groups = new List<string>() { "全部" };
|
||||
|
||||
// 获取所有接口
|
||||
var interfaces = await AsQueryable()
|
||||
@ -109,8 +94,9 @@ public class InterfaceRepository : BasicRepository<InterfaceEntity>, IInterfaceR
|
||||
return groups.Select(x => new SystemInterfaceDropdownValueObject
|
||||
{
|
||||
Id = Guid.NewGuid().ToString(),
|
||||
GroupName = x.Name,
|
||||
Interfaces = interfaces.Where(y => y.Category == x.Id)
|
||||
GroupName = x,
|
||||
Interfaces = interfaces
|
||||
//.Where(y => y.Category == x.Id)
|
||||
.Select(y => new SystemInterfaceItemValueObject
|
||||
{
|
||||
Id = y.Id,
|
||||
@ -138,9 +124,6 @@ public class InterfaceRepository : BasicRepository<InterfaceEntity>, IInterfaceR
|
||||
{
|
||||
// t_interface驱动t_interface_map,数据量上来可以在t_interface_map UpStreamId字段建立索引
|
||||
var query = AsQueryable()
|
||||
.LeftJoin<DictionaryEntity>((a, c) => a.Category == c.Id)
|
||||
.LeftJoin<DictionaryEntity>((a, c, d) => (int)a.RequestProtocol == d.Id)
|
||||
.LeftJoin<DictionaryEntity>((a, c, d, e) => a.RequestMethod == e.Id)
|
||||
.Where(a => a.IsUpStream)
|
||||
;
|
||||
|
||||
@ -150,18 +133,22 @@ public class InterfaceRepository : BasicRepository<InterfaceEntity>, IInterfaceR
|
||||
|| a.Code.Contains(keyword)) // 默认为空,支持模糊搜索
|
||||
;
|
||||
|
||||
return await query.Select((a, c, d, e) => new SystemInterfacePaginatedOutputValueObject
|
||||
{
|
||||
Id = a.Id,
|
||||
Category = c.Name,
|
||||
Name = a.Name,
|
||||
Code = a.Code,
|
||||
RequestProtocol = d.Name,
|
||||
Description = a.Description,
|
||||
MapCount = SqlFunc.Subqueryable<InterfaceMapEntity>().Where(x => x.UpStreamId == a.Id && !x.IsDeleted)
|
||||
.DistinctCount(x => x.ServiceProviderId),
|
||||
UpdateTime = a.UpdateTime,
|
||||
}).OrderByDescending(a => a.UpdateTime).ToPagedListAsync(input.PageIndex, input.PageSize);
|
||||
var res = await query.Select(a => new SystemInterfacePaginatedOutputValueObject
|
||||
{
|
||||
Id = a.Id,
|
||||
Category = a.Category,
|
||||
Name = a.Name,
|
||||
Code = a.Code,
|
||||
RequestProtocol = a.RequestProtocol,
|
||||
Description = a.Description,
|
||||
MapCount = SqlFunc.Subqueryable<InterfaceMapEntity>().Where(x => x.UpStreamId == a.Id && !x.IsDeleted)
|
||||
.DistinctCount(x => x.ServiceProviderId),
|
||||
UpdateTime = a.UpdateTime,
|
||||
})
|
||||
.OrderByDescending(a => a.UpdateTime)
|
||||
.ToPagedListAsync(input.PageIndex, input.PageSize);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
@ -169,8 +156,6 @@ public class InterfaceRepository : BasicRepository<InterfaceEntity>, IInterfaceR
|
||||
GetServiceProviderInterfacePaginatedListAsync(ServiceProviderInterfacePaginatedInputObjectValue input)
|
||||
{
|
||||
var query = AsQueryable()
|
||||
.LeftJoin<DictionaryEntity>((a, b) => (int)a.RequestProtocol == b.Id)
|
||||
.LeftJoin<DictionaryEntity>((a, b, c) => a.RequestMethod == c.Id)
|
||||
.Where(a => !a.IsUpStream)
|
||||
.Where(a => a.ServiceProviderId == input.ServiceProviderId);
|
||||
|
||||
@ -178,17 +163,7 @@ public class InterfaceRepository : BasicRepository<InterfaceEntity>, IInterfaceR
|
||||
.WhereIF(!string.IsNullOrEmpty(input.Name), a => a.Name.Contains(input.Name!)) // 默认为空,支持模糊搜索
|
||||
.WhereIF(!string.IsNullOrEmpty(input.Code), a => a.Code.Contains(input.Code!)) // 默认为空,支持模糊搜索
|
||||
;
|
||||
return await query.Select((a, b, c) => new ServiceProviderInterfacePaginatedOutputValueObject
|
||||
{
|
||||
Id = a.Id,
|
||||
Name = a.Name,
|
||||
Code = a.Code,
|
||||
RequestProtocol = b.Name,
|
||||
RequestMethod = c.Name,
|
||||
RequestAddress = a.RequestAddress,
|
||||
Description = a.Description,
|
||||
UpdateTime = a.UpdateTime,
|
||||
})
|
||||
return await query.Select<ServiceProviderInterfacePaginatedOutputValueObject>()
|
||||
.OrderByDescending(a => a.UpdateTime)
|
||||
.ToPagedListAsync(input.PageIndex, input.PageSize);
|
||||
}
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
namespace InterfaceForward.Repositories.Interface.ValueObjects;
|
||||
using InterfaceForward.Domain.Shared.Enum;
|
||||
using InterfaceForward.Domain.Shared.Helpers;
|
||||
|
||||
namespace InterfaceForward.Repositories.Interface.ValueObjects;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
@ -23,12 +26,22 @@ public class ServiceProviderInterfacePaginatedOutputValueObject
|
||||
///<summary>
|
||||
/// 请求协议
|
||||
///</summary>
|
||||
public string RequestProtocol { get; set; }
|
||||
public int RequestProtocol { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 请求方式
|
||||
///</summary>
|
||||
public string RequestMethod { get; set; }
|
||||
public int RequestMethod { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 请求协议Name
|
||||
///</summary>
|
||||
public string RequestProtocolName => ((RequestProtocol)RequestProtocol).GetDescription();
|
||||
|
||||
///<summary>
|
||||
/// 请求方式Name
|
||||
///</summary>
|
||||
public string RequestMethodName => ((RequestMethod)RequestMethod).GetDescription();
|
||||
|
||||
///<summary>
|
||||
/// 请求地址
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
namespace InterfaceForward.Repositories.Interface.ValueObjects;
|
||||
using InterfaceForward.Domain.Shared.Enum;
|
||||
using InterfaceForward.Domain.Shared.Helpers;
|
||||
|
||||
namespace InterfaceForward.Repositories.Interface.ValueObjects;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
@ -23,12 +26,22 @@ public class ServiceProviderInterfaceTreeListOutputValueObject: HasCategoryId
|
||||
///<summary>
|
||||
/// 请求协议
|
||||
///</summary>
|
||||
public string RequestProtocol { get; set; }
|
||||
public RequestProtocol RequestProtocol { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 请求方式
|
||||
///</summary>
|
||||
public string RequestMethod { get; set; }
|
||||
public RequestMethod RequestMethod { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 请求协议Name
|
||||
///</summary>
|
||||
public string RequestProtocolName => RequestProtocol.GetDescription();
|
||||
|
||||
///<summary>
|
||||
/// 请求方式Name
|
||||
///</summary>
|
||||
public string RequestMethodName => RequestMethod.GetDescription();
|
||||
|
||||
///<summary>
|
||||
/// 请求地址
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
namespace InterfaceForward.Repositories.Interface.ValueObjects
|
||||
using InterfaceForward.Domain.Shared.Enum;
|
||||
using InterfaceForward.Domain.Shared.Helpers;
|
||||
|
||||
namespace InterfaceForward.Repositories.Interface.ValueObjects
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
@ -13,7 +16,12 @@
|
||||
///<summary>
|
||||
/// 接口分组
|
||||
///</summary>
|
||||
public string Category { get; set; }
|
||||
public int Category { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 接口分组Name
|
||||
///</summary>
|
||||
public string CategoryName => "全部";
|
||||
|
||||
///<summary>
|
||||
/// 接口名
|
||||
@ -28,7 +36,12 @@
|
||||
///<summary>
|
||||
/// 请求协议
|
||||
///</summary>
|
||||
public string RequestProtocol { get; set; }
|
||||
public RequestProtocol RequestProtocol { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 请求协议Name
|
||||
///</summary>
|
||||
public string RequestProtocolName => ((RequestProtocol)RequestProtocol).GetDescription();
|
||||
|
||||
///<summary>
|
||||
/// 接口描述
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
namespace InterfaceForward.Repositories.Interface.ValueObjects
|
||||
using InterfaceForward.Domain.Shared.Enum;
|
||||
using InterfaceForward.Domain.Shared.Helpers;
|
||||
|
||||
namespace InterfaceForward.Repositories.Interface.ValueObjects
|
||||
{
|
||||
public class HasCategoryId
|
||||
{
|
||||
@ -31,7 +34,12 @@
|
||||
///<summary>
|
||||
/// 请求协议
|
||||
///</summary>
|
||||
public string RequestProtocol { get; set; }
|
||||
public RequestProtocol RequestProtocol { get; set; }
|
||||
|
||||
///<summary>
|
||||
/// 请求协议
|
||||
///</summary>
|
||||
public string RequestProtocolName => ((RequestProtocol)RequestProtocol).GetDescription();
|
||||
|
||||
///<summary>
|
||||
/// 接口描述
|
||||
|
||||
@ -3,7 +3,6 @@ using InterfaceForward.Domain.Shared.Enum;
|
||||
using InterfaceForward.Domain.Shared.Helpers;
|
||||
using InterfaceForward.Repositories.App.Entitys;
|
||||
using InterfaceForward.Repositories.App.ValueObjects;
|
||||
using InterfaceForward.Repositories.Dictionary.Entitys;
|
||||
using InterfaceForward.Repositories.Interface.Entitys;
|
||||
using InterfaceForward.Repositories.Parameter.Entities;
|
||||
using InterfaceForward.Repositories.ServiceProvider.Entitys;
|
||||
@ -143,9 +142,9 @@ ORDER BY `b`.`Sort` ASC").ToListAsync();
|
||||
/// </summary>
|
||||
/// <param name="interfaceCode"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<InterfaceDto?> GetInterfaceByCodeAsync(string interfaceCode)
|
||||
public async Task<InterfaceDto?> GetInterfaceByCodesAsync(string interfaceCode)
|
||||
{
|
||||
var res = await GetInterfaceByCodesAsync(interfaceCode);
|
||||
var res = await GetInterfaceByCodesAsync(new[] { interfaceCode });
|
||||
return res.FirstOrDefault();
|
||||
}
|
||||
|
||||
@ -194,7 +193,7 @@ ORDER BY `b`.`Sort` ASC").ToListAsync();
|
||||
|
||||
if (serviceProvider.AuthInterfaceCode != null)
|
||||
{
|
||||
var authInterface = await GetInterfaceByCodeAsync(serviceProvider.AuthInterfaceCode);
|
||||
var authInterface = await GetInterfaceByCodesAsync(serviceProvider.AuthInterfaceCode);
|
||||
if (authInterface == null)
|
||||
{
|
||||
throw new BusinessException($"授权接口{serviceProvider.AuthInterfaceCode}不存在");
|
||||
@ -321,13 +320,10 @@ ORDER BY `b`.`Sort` ASC").ToListAsync();
|
||||
/// <returns></returns>
|
||||
private async Task<List<InterfaceDto>> GetInterfaceByCodesAsync(params string[] interfaceCodes)
|
||||
{
|
||||
var query = Context.Queryable<InterfaceEntity, DictionaryEntity>(
|
||||
(a, d) => new JoinQueryInfos(
|
||||
JoinType.Left, a.RequestMethod == d.Id
|
||||
))
|
||||
var query = Context.Queryable<InterfaceEntity>()
|
||||
.Where(a => interfaceCodes.Contains(a.Code) && a.IsDeleted == false)
|
||||
.Filter(null, true)
|
||||
.Select((a, d) =>
|
||||
.Select(a =>
|
||||
new InterfaceDto
|
||||
{
|
||||
Id = a.Id,
|
||||
@ -338,7 +334,7 @@ ORDER BY `b`.`Sort` ASC").ToListAsync();
|
||||
RequestProtocol = a.RequestProtocol,
|
||||
ContentType = a.ContentType,
|
||||
ResponseContentType = a.ResponseContentType,
|
||||
RequestMethod = d.Name,
|
||||
RequestMethod = a.RequestMethod,
|
||||
IsBatch = a.IsBatch,
|
||||
Limit = a.Limit,
|
||||
Qps = a.Qps,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user