79 lines
5.2 KiB
C#
79 lines
5.2 KiB
C#
using InterfaceForward.Repositories.Interface.Entitys;
|
|
using InterfaceForward.Repositories.Interface.ValueObjects;
|
|
using InterfaceForward.Repositories.ServiceProvider.Entitys;
|
|
|
|
namespace InterfaceForward.Repositories.Interface.Services;
|
|
|
|
/// <summary>
|
|
/// 接口映射
|
|
/// </summary>
|
|
public class InterfaceMapRepository : BasicRepository<InterfaceMapEntity>, IScopedDependency,
|
|
IInterfaceMapRepository
|
|
{
|
|
/// <summary>
|
|
/// 获取映射列表
|
|
/// </summary>
|
|
/// <param name="inputVo"></param>
|
|
/// <returns></returns>
|
|
public async Task<PagedListDto<InterfaceMapOutputValueObject>> GetMapListAsync(GetMapListInputVO inputVo)
|
|
{
|
|
// 上下游一对多关系
|
|
var query = Context.Queryable<InterfaceMapEntity>()
|
|
.LeftJoin<InterfaceEntity>((a, b) => a.UpStreamId == b.Id) // 系统接口 1
|
|
.LeftJoin<InterfaceEntity>((a, b, c) => a.DownStreamId == c.Id) // 服务商接口 N
|
|
.LeftJoin<ServiceProviderEntity>((a, b, c, d) => c.ServiceProviderId == d.Id)
|
|
.Filter(null, true) // 禁用全局过滤器
|
|
.Where(a => a.UpStreamId == inputVo.InterfaceId)
|
|
.Where((a, b, c, d) => !a.IsDeleted && !b.IsDeleted && !c.IsDeleted && !d.IsDeleted)
|
|
.WhereIF(!inputVo.NameOrCode.IsNullOrWhiteSpace(),
|
|
(a, b, c, d) => d.Code.Contains(inputVo.NameOrCode) || d.Name.Contains(inputVo.NameOrCode))
|
|
.GroupBy(a => new { a.UpStreamId, a.ServiceProviderId })
|
|
.OrderBy(a => a.UpdateTime, OrderByType.Desc);
|
|
|
|
return await query.Select((a, b, c, d) => new InterfaceMapOutputValueObject
|
|
{
|
|
SystemInterfaceId = a.UpStreamId,
|
|
SystemInterfaceName = b.Name,
|
|
SystemInterfaceCode = b.Code,
|
|
ServiceProviderId = d.Id,
|
|
ServiceProviderName = d.Name,
|
|
ServiceProviderCode = d.Code,
|
|
InterfaceName = SqlFunc.MappingColumn<string>("GROUP_CONCAT(c.Name ORDER BY a.id SEPARATOR ',')"),
|
|
InterfaceCode = SqlFunc.MappingColumn<string>("GROUP_CONCAT(c.Code ORDER BY a.id SEPARATOR ',')"),
|
|
UpdateTime = a.UpdateTime,
|
|
PublishedVersion = a.PublishedVersion
|
|
}).ToPagedListAsync(inputVo.PageIndex, inputVo.PageSize);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public async Task<List<InterfaceParameterMapOutputValueObject>> GetParameterMapListAsync(List<int> mapIds,
|
|
bool isInParaMap)
|
|
{
|
|
/*
|
|
select `a`.`Id` AS `InterfaceMapDetailId` , `t`.`Id` AS `InterfaceMapId` , `b`.`Id` AS `Id`, b.InterfaceId, `b`.`Alias` AS `Alias` , `b`.`CnName` AS `CnName` , `e`.`Name` AS `Type` , `b`.`IsInPara` AS `IsInPara`, `b`.`IsRequired` AS `IsRequired` , `b`.`Description` AS `Description` , `d`.`Id` AS `FixedId` , `d`.`FieldValue` AS `FixedValue` , `a`.`MappedParaId` AS `MapId` , `c`.`Alias` AS `MapAlias`, `c`.`CnName` AS `MapCnName` , `c`.`Description` AS `MapDescription`
|
|
from t_interface_map t
|
|
LEFT JOIN `t_parameter` `b` ON ( `t`.`UpStreamId` = `b`.`InterfaceId` ) and b.IsInPara = false AND ( `b`.`Type` <> 12 ) AND ( `b`.`Type` <> 10 ) and `b`.`IsDeleted` = 0
|
|
Left JOIN `t_interface_map_detail` `a` ON ( `t`.`Id` = `a`.`InterfaceMapId` ) and b.id = a.ParaId and a.IsDeleted = 0
|
|
Left JOIN `t_parameter` `c` ON ( `a`.`MappedParaId` = `c`.`Id` ) AND ( `c`.`IsDeleted` = 0 )
|
|
Left JOIN `t_parameter_fixed` `d` ON d.InterfaceId = b.InterfaceId and `b`.`Alias` = `d`.`FieldName` AND `d`.`FieldPositions` like concat('%', CAST(N'Body' AS CHAR),'%') AND d.IsDeleted = 0
|
|
Left JOIN `t_dictionary` `e` ON (( `b`.`Type` = `e`.`Id` ) AND ( `e`.`Type` = N'ParameterType' ))
|
|
WHERE (( `t`.`UpStreamId` = 30 ) AND ( `t`.`ServiceProviderId` = 137 )) and t.IsDeleted = 0 and t.DownStreamId = 509
|
|
ORDER BY `b`.`Sort` ASC
|
|
*/
|
|
|
|
var ids = mapIds.JoinAsString(",");
|
|
// 因为入参映射有多个 出参映射只有一个(挂在第一个映射)
|
|
return await Context.SqlQueryable<InterfaceParameterMapOutputValueObject>(@$"
|
|
select `a`.`Id` AS `InterfaceMapDetailId` , `t`.`Id` AS `InterfaceMapId` , `b`.`Id` AS `Id`, b.InterfaceId, `b`.`Alias` AS `Alias` , `b`.`CnName` AS `CnName`
|
|
, `e`.`Name` AS `Type`, `b`.`IsInPara` AS `IsInPara` , `b`.`IsRequired` AS `IsRequired` , `b`.`Description` AS `Description` , `d`.`Id` AS `FixedId`
|
|
, `d`.`FieldValue` AS `FixedValue` , `a`.`MappedParaId` AS `MapId` , `c`.`Alias` AS `MapAlias`, `c`.`CnName` AS `MapCnName` , `c`.`Description` AS `MapDescription`
|
|
from t_interface_map t
|
|
LEFT JOIN `t_parameter` `b` ON {(isInParaMap ? "t.DownStreamId" : "t.UpStreamId")} = `b`.`InterfaceId` and b.IsInPara = {isInParaMap} AND ( `b`.`IsDeleted` = 0 ) AND ( `b`.`Type` <> 12 ) AND ( `b`.`Type` <> 10 )
|
|
Left JOIN `t_interface_map_detail` `a` ON ( `t`.`Id` = `a`.`InterfaceMapId` ) and b.id = a.ParaId and a.IsDeleted = 0
|
|
Left JOIN `t_parameter` `c` ON ( `a`.`MappedParaId` = `c`.`Id` ) AND ( `c`.`IsDeleted` = 0 )
|
|
Left JOIN `t_parameter_fixed` `d` ON d.InterfaceId = b.InterfaceId and `b`.`Alias` = `d`.`FieldName` AND `d`.`FieldPositions` like concat('%', CAST(N'Body' AS CHAR),'%') AND d.IsDeleted = 0
|
|
Left JOIN `t_dictionary` `e` ON (( `b`.`Type` = `e`.`Id` ) AND ( `e`.`Type` = N'ParameterType' ))
|
|
WHERE {(isInParaMap ? $"t.id in ({ids})" : $"t.id = {mapIds.First()}")} and t.IsDeleted = 0
|
|
ORDER BY `b`.`Sort` ASC").ToListAsync();
|
|
}
|
|
} |