From abd55835054389f70fe26fba9c8e960d5818a94b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=BE=E8=8D=A3=E5=9B=BD?= Date: Mon, 23 May 2022 11:14:03 +0800 Subject: [PATCH] =?UTF-8?q?[fix]=E9=83=A8=E5=88=86API=E5=9C=A8swagger?= =?UTF-8?q?=E4=B8=AD=E5=BF=BD=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Asns/X12AsnAppService.cs | 34 ++++++++++++++++--- .../Parts/PartAppService.cs | 4 ++- .../PurchaseOrders/PurchaseOrderAppService.cs | 4 ++- .../Receipts/ReceiptAppService.cs | 4 ++- .../Suppliers/SuppliersAppService.cs | 4 ++- .../UnplannedReceiptAppService.cs | 4 ++- .../AsnOptions.cs} | 3 +- .../EnumExchangeDataErrorCode.cs | 2 +- .../HiddenApiAttribute.cs | 0 .../AsnBackgroundWorker.cs | 4 +-- .../EnumExchangeDataErrorCode.cs | 9 ----- .../HiddenApiFilter.cs | 30 +++++++++------- .../WebApiHttpApiHostModule.cs | 2 +- .../appsettings.json | 1 + 14 files changed, 69 insertions(+), 36 deletions(-) rename WebApiService/src/{Win_in.Sfs.Scp.WebApi.HttpApi.Host/AsnBackgroundWorker/AsnBgWorker.cs => Win_in.Sfs.Scp.WebApi.Domain.Shared/AsnOptions.cs} (83%) rename WebApiService/src/{Win_in.Sfs.Scp.WebApi.HttpApi.Host => Win_in.Sfs.Scp.WebApi.Domain.Shared}/HiddenApiAttribute.cs (100%) delete mode 100644 WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/AsnBackgroundWorker/EnumExchangeDataErrorCode.cs diff --git a/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Asns/X12AsnAppService.cs b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Asns/X12AsnAppService.cs index d096013..64e3bb2 100644 --- a/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Asns/X12AsnAppService.cs +++ b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Asns/X12AsnAppService.cs @@ -26,6 +26,8 @@ using Volo.Abp.TenantManagement; using Win_in.Sfs.Scp.WebApi.Asns; using Volo.Abp.Domain.Entities; using System.Security.Cryptography; +using IdentityModel; +using Microsoft.Extensions.Options; namespace Win_in.Sfs.Scp.WebApi { @@ -39,12 +41,19 @@ namespace Win_in.Sfs.Scp.WebApi public class X12AsnAppService : ReadOnlyAppService, IX12AsnAppService { private readonly IX12AsnRepository _x12AsnRepository; + private readonly ITenantRepository _tenantRepository; + private readonly IOptions _options; public X12AsnAppService( IX12AsnRepository repository + , ITenantRepository tenantRepository + , IOptions options + ) : base(repository) { _x12AsnRepository = repository; + _tenantRepository = tenantRepository; + _options = options; } /// @@ -55,6 +64,7 @@ namespace Win_in.Sfs.Scp.WebApi [HttpGet] [Route("{id}")] + [HiddenApi] public override async Task GetAsync(Guid id) { return await base.GetAsync(id); @@ -68,6 +78,7 @@ namespace Win_in.Sfs.Scp.WebApi /// [HttpGet] [Route("paged-list")] + [HiddenApi] public override async Task> GetListAsync(RequestDTO requestDTO) { return await base.GetListAsync(requestDTO); @@ -84,6 +95,12 @@ namespace Win_in.Sfs.Scp.WebApi [Route("unread-list")] public async Task> GetUnreadListAsync(string site, int count, bool autoUpdateStatus) { + Validator.CheckSite(_tenantRepository, site); + + if (count < 1 || count > _options.Value.MaxCount) + { + throw new AbpValidationException($"Count must bigger than 1 and smaller than {_options.Value.MaxCount}"); + } var entities = await _x12AsnRepository.GetUnreadListAsync(site, count, autoUpdateStatus); @@ -102,12 +119,14 @@ namespace Win_in.Sfs.Scp.WebApi /// /// [HttpGet] - [Route("between-id")] + [Route("between-uid")] public async Task> GetListAsync(string site, long beginUid, long endUid) { + Validator.CheckSite(_tenantRepository, site); + if (endUid < beginUid) { - throw new AbpValidationException("beginUid is bigger than endUid"); + throw new AbpValidationException("beginUid can not bigger than endUid"); } var entities = await _x12AsnRepository.GetListAsync(p => p.Site == site && p.UID >= beginUid && p.UID <= endUid); @@ -129,9 +148,11 @@ namespace Win_in.Sfs.Scp.WebApi [Route("between-date")] public async Task> GetListAsync(string site, DateTime beginDate, DateTime endDate) { + Validator.CheckSite(_tenantRepository, site); + if (endDate < beginDate) { - throw new AbpValidationException("beginDate is after endDate"); + throw new AbpValidationException("beginDate can not after endDate"); } var entities = await _x12AsnRepository.GetListAsync(p => p.Site == site && p.EffectiveDate >= beginDate && p.EffectiveDate <= endDate); @@ -149,9 +170,11 @@ namespace Win_in.Sfs.Scp.WebApi /// /// [HttpGet] - [Route("by-id")] + [Route("by-uid")] public async Task> GetAsync(string site, long uid) { + Validator.CheckSite(_tenantRepository, site); + var entity = await _x12AsnRepository.FirstOrDefaultAsync(p => p.Site == site && p.UID == uid); if (entity == null) @@ -176,6 +199,8 @@ namespace Win_in.Sfs.Scp.WebApi [Route("by-number")] public async Task> GetAsync(string site, string number) { + Validator.CheckSite(_tenantRepository, site); + var entity = await _x12AsnRepository.FirstOrDefaultAsync(p => p.Site == site && p.BillNum == number); if (entity == null) @@ -207,6 +232,7 @@ namespace Win_in.Sfs.Scp.WebApi [Route("update-status")] public async Task> UpdateStatusAsync(string site, string number, EnumExchangeDataStatus status) { + Validator.CheckSite(_tenantRepository, site); var entity = await _x12AsnRepository.FirstOrDefaultAsync(p => p.Site == site && p.BillNum == number); diff --git a/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Parts/PartAppService.cs b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Parts/PartAppService.cs index 462dd0d..51e02fb 100644 --- a/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Parts/PartAppService.cs +++ b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Parts/PartAppService.cs @@ -58,6 +58,7 @@ namespace Win_in.Sfs.Scp.WebApi [HttpGet] [Route("{id}")] + [HiddenApi] public override async Task GetAsync(Guid id) { return await base.GetAsync(id); @@ -70,7 +71,8 @@ namespace Win_in.Sfs.Scp.WebApi /// 请求条件DTO(Request condition DTO) /// [HttpGet] - [Route("")] + [Route("paged-list")] + [HiddenApi] public override async Task> GetListAsync(RequestDTO requestDTO) { return await base.GetListAsync(requestDTO); diff --git a/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/PurchaseOrders/PurchaseOrderAppService.cs b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/PurchaseOrders/PurchaseOrderAppService.cs index c000f2b..e46311e 100644 --- a/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/PurchaseOrders/PurchaseOrderAppService.cs +++ b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/PurchaseOrders/PurchaseOrderAppService.cs @@ -55,6 +55,7 @@ namespace Win_in.Sfs.Scp.WebApi /// [HttpGet] [Route("{id}")] + [HiddenApi] public override async Task GetAsync(Guid id) { return await base.GetAsync(id); @@ -66,7 +67,8 @@ namespace Win_in.Sfs.Scp.WebApi /// /// [HttpGet] - [Route("")] + [Route("paged-list")] + [HiddenApi] public override async Task> GetListAsync(RequestDTO input) { return await base.GetListAsync(input); diff --git a/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Receipts/ReceiptAppService.cs b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Receipts/ReceiptAppService.cs index 79708b4..a740ea8 100644 --- a/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Receipts/ReceiptAppService.cs +++ b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Receipts/ReceiptAppService.cs @@ -55,6 +55,7 @@ namespace Win_in.Sfs.Scp.WebApi /// [HttpGet] [Route("{id}")] + [HiddenApi] public override async Task GetAsync(Guid id) { return await base.GetAsync(id); @@ -67,7 +68,8 @@ namespace Win_in.Sfs.Scp.WebApi /// 请求条件DTO(Request condition DTO) /// [HttpGet] - [Route("")] + [Route("paged-list")] + [HiddenApi] public override async Task> GetListAsync(RequestDTO requestDTO) { return await base.GetListAsync(requestDTO); diff --git a/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Suppliers/SuppliersAppService.cs b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Suppliers/SuppliersAppService.cs index 845d96f..78944af 100644 --- a/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Suppliers/SuppliersAppService.cs +++ b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/Suppliers/SuppliersAppService.cs @@ -51,6 +51,7 @@ namespace Win_in.Sfs.Scp.WebApi /// [HttpGet] [Route("{id}")] + [HiddenApi] public override async Task GetAsync(Guid id) { return await base.GetAsync(id); @@ -63,7 +64,8 @@ namespace Win_in.Sfs.Scp.WebApi /// 请求条件DTO(Request condition DTO) /// [HttpGet] - [Route("")] + [Route("paged-list")] + [HiddenApi] public override async Task> GetListAsync(RequestDTO requestDTO) { return await base.GetListAsync(requestDTO); diff --git a/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/UnplannedReceipts/UnplannedReceiptAppService.cs b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/UnplannedReceipts/UnplannedReceiptAppService.cs index 0223243..ec0bf54 100644 --- a/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/UnplannedReceipts/UnplannedReceiptAppService.cs +++ b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Application/UnplannedReceipts/UnplannedReceiptAppService.cs @@ -57,6 +57,7 @@ namespace Win_in.Sfs.Scp.WebApi /// [HttpGet] [Route("{id}")] + [HiddenApi] public override async Task GetAsync(Guid id) { return await base.GetAsync(id); @@ -69,7 +70,8 @@ namespace Win_in.Sfs.Scp.WebApi /// 请求条件DTO(Request condition DTO) /// [HttpGet] - [Route("")] + [Route("paged-list")] + [HiddenApi] public override async Task> GetListAsync(RequestDTO requestDTO) { return await base.GetListAsync(requestDTO); diff --git a/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/AsnBackgroundWorker/AsnBgWorker.cs b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Domain.Shared/AsnOptions.cs similarity index 83% rename from WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/AsnBackgroundWorker/AsnBgWorker.cs rename to WebApiService/src/Win_in.Sfs.Scp.WebApi.Domain.Shared/AsnOptions.cs index f2bc6da..46b0fa3 100644 --- a/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/AsnBackgroundWorker/AsnBgWorker.cs +++ b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Domain.Shared/AsnOptions.cs @@ -2,12 +2,13 @@ using System.Collections.Generic; namespace Win_in.Sfs.Scp.WebApi; -public class AsnBgWorker +public class AsnOptions { public bool Active { get; set; } = false; public int PeriodSeconds { get; set; } = 60; public int RetryTimes { get; set; } = 3; public int BatchSize { get; set; } = 10; + public int MaxCount { get; set; } = 100; public List Sites { get; set; } =new() ; public string Receiver { get; set; } = "IACNA_ID"; } \ No newline at end of file diff --git a/WebApiService/src/Win_in.Sfs.Scp.WebApi.Domain.Shared/EnumExchangeDataErrorCode.cs b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Domain.Shared/EnumExchangeDataErrorCode.cs index c8840ed..e9f507d 100644 --- a/WebApiService/src/Win_in.Sfs.Scp.WebApi.Domain.Shared/EnumExchangeDataErrorCode.cs +++ b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Domain.Shared/EnumExchangeDataErrorCode.cs @@ -1,4 +1,4 @@ -namespace Win_in.Sfs.Scp.WebApi.Asns; +namespace Win_in.Sfs.Scp.WebApi; public enum EnumExchangeDataErrorCode { diff --git a/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/HiddenApiAttribute.cs b/WebApiService/src/Win_in.Sfs.Scp.WebApi.Domain.Shared/HiddenApiAttribute.cs similarity index 100% rename from WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/HiddenApiAttribute.cs rename to WebApiService/src/Win_in.Sfs.Scp.WebApi.Domain.Shared/HiddenApiAttribute.cs diff --git a/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/AsnBackgroundWorker/AsnBackgroundWorker.cs b/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/AsnBackgroundWorker/AsnBackgroundWorker.cs index cd7f48e..c92ae68 100644 --- a/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/AsnBackgroundWorker/AsnBackgroundWorker.cs +++ b/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/AsnBackgroundWorker/AsnBackgroundWorker.cs @@ -24,11 +24,11 @@ namespace Win_in.Sfs.Scp.WebApi; public class AsnBackgroundWorker : AsyncPeriodicBackgroundWorkerBase { - private readonly IOptions _options; + private readonly IOptions _options; public AsnBackgroundWorker( AbpAsyncTimer timer, - IOptions options, + IOptions options, IServiceScopeFactory serviceScopeFactory ) : base(timer, serviceScopeFactory) { diff --git a/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/AsnBackgroundWorker/EnumExchangeDataErrorCode.cs b/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/AsnBackgroundWorker/EnumExchangeDataErrorCode.cs deleted file mode 100644 index e9f507d..0000000 --- a/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/AsnBackgroundWorker/EnumExchangeDataErrorCode.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Win_in.Sfs.Scp.WebApi; - -public enum EnumExchangeDataErrorCode -{ - None = 0, - UnknownDataType = 1, - WrongDataFormat = 2, - Exception = 9, -} \ No newline at end of file diff --git a/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/HiddenApiFilter.cs b/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/HiddenApiFilter.cs index 1c287a3..4ef1850 100644 --- a/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/HiddenApiFilter.cs +++ b/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/HiddenApiFilter.cs @@ -13,22 +13,26 @@ public class HiddenApiFilter : IDocumentFilter { public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) { - foreach (ApiDescription apiDescription in context.ApiDescriptions) + foreach (var apiDescription in context.ApiDescriptions) { - if (apiDescription.TryGetMethodInfo(out MethodInfo method)) + if (!apiDescription.TryGetMethodInfo(out var method)) { - if (method.ReflectedType.CustomAttributes.Any(t => t.AttributeType == typeof(HiddenApiAttribute)) - || method.CustomAttributes.Any(t => t.AttributeType == typeof(HiddenApiAttribute))) - { - string key = "/" + apiDescription.RelativePath; - if (key.Contains("?")) - { - int idx = key.IndexOf("?", System.StringComparison.Ordinal); - key = key.Substring(0, idx); - } - swaggerDoc.Paths.Remove(key); - } + continue; } + + if (!method.ReflectedType.CustomAttributes.Any(t => t.AttributeType == typeof(HiddenApiAttribute)) && + method.CustomAttributes.All(t => t.AttributeType != typeof(HiddenApiAttribute))) + { + continue; + } + + var key = "/" + apiDescription.RelativePath; + if (key.Contains("?")) + { + var idx = key.IndexOf("?", System.StringComparison.Ordinal); + key = key.Substring(0, idx); + } + swaggerDoc.Paths.Remove(key); } } diff --git a/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/WebApiHttpApiHostModule.cs b/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/WebApiHttpApiHostModule.cs index fcbb7b7..622c9ac 100644 --- a/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/WebApiHttpApiHostModule.cs +++ b/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/WebApiHttpApiHostModule.cs @@ -78,7 +78,7 @@ namespace Win_in.Sfs.Scp.WebApi ConfigureMultiTenancy(configuration); ConfigureAuthorization(context,configuration); context.Services.AddScoped(); - Configure(configuration.GetSection("AsnBgWorker")); + Configure(configuration.GetSection("AsnOptions")); } diff --git a/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/appsettings.json b/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/appsettings.json index 04cbcb2..b1b0a34 100644 --- a/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/appsettings.json +++ b/WebApiService/src/Win_in.Sfs.Scp.WebApi.HttpApi.Host/appsettings.json @@ -39,6 +39,7 @@ "PeriodSeconds": 10, "RetryTimes": 3, "BatchSize": 10, + "MaxCount": 100, "Receiver": "IACNA_ID", "Sites": [ "T8", "T5" ] },