diff options
-rw-r--r-- | RhSolutions.AddIn/AddIn/ResetBarFunction.cs | 13 | ||||
-rw-r--r-- | RhSolutions.AddIn/AddIn/RhSolutionsFunction.cs (renamed from RhSolutions.AddIn/AddIn/Functions.cs) | 49 | ||||
-rw-r--r-- | RhSolutions.AddIn/Services/IDatabaseClient.cs | 6 | ||||
-rw-r--r-- | RhSolutions.AddIn/Services/RhDatabaseClient.cs | 29 |
4 files changed, 53 insertions, 44 deletions
diff --git a/RhSolutions.AddIn/AddIn/ResetBarFunction.cs b/RhSolutions.AddIn/AddIn/ResetBarFunction.cs new file mode 100644 index 0000000..bd0a591 --- /dev/null +++ b/RhSolutions.AddIn/AddIn/ResetBarFunction.cs @@ -0,0 +1,13 @@ +using ExcelDna.Integration; + +namespace RhSolutions.AddIn +{ + public static class ResetBarFunction + { + [ExcelFunction] + public static void _ResetStatusBar() + { + RhSolutionsAddIn.Excel.StatusBar = false; + } + } +}
\ No newline at end of file diff --git a/RhSolutions.AddIn/AddIn/Functions.cs b/RhSolutions.AddIn/AddIn/RhSolutionsFunction.cs index c775012..faa700f 100644 --- a/RhSolutions.AddIn/AddIn/Functions.cs +++ b/RhSolutions.AddIn/AddIn/RhSolutionsFunction.cs @@ -1,58 +1,57 @@ using ExcelDna.Integration; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Office.Interop.Excel; +using RhSolutions.Models; using RhSolutions.Services; +using System.Collections.Generic; using System.Linq; namespace RhSolutions.AddIn { - public class Functions + public class RhSolutionsFunction { [ExcelFunction(Description = "Распознать артикул и попробовать найти его в прайс-листе")] public static object RHSOLUTIONS([ExcelArgument(Name = "\"Строка с названием материала\"")] string line) { - object result; IDatabaseClient databaseClient = RhSolutionsAddIn.ServiceProvider.GetService<IDatabaseClient>(); - - result = ExcelAsyncUtil.Run("Database request", line, delegate + IEnumerable<Product> requestResult = ExcelAsyncUtil.Run("Database request", line, delegate { - return databaseClient.GetProduct(line).GetAwaiter().GetResult(); - }); + return databaseClient.GetProducts(line) + .GetAwaiter() + .GetResult(); + }) as IEnumerable<Product>; - string parsedSku = Sku.TryParse(line, out var skus) - ? skus.First().ToString() : string.Empty; + Sku.TryParse(line, out var skus); - if (result == null) + if (requestResult == null) { - if (string.IsNullOrEmpty(parsedSku)) + if (skus.Count() > 0) { - return ExcelError.ExcelErrorNA; + return $"{skus.First()} ..."; } else { - return skus.First().ToString(); + return "Загрузка..."; } } - if (result.Equals(ExcelError.ExcelErrorNA)) + else { - if (string.IsNullOrEmpty(parsedSku)) + if (requestResult.Count() == 0 && skus.Count() == 0) { - return "Загрузка..."; + return ExcelError.ExcelErrorNA; } + + else if (requestResult.Count() == 0) + { + return $"{skus.First()}"; + } + else { - return skus.First().ToString(); + var firstProduct = requestResult.First(); + return $"{firstProduct.ProductSku} {firstProduct.Name}"; } } - - return result; - } - - [ExcelFunction] - public static void _ResetStatusBar() - { - RhSolutionsAddIn.Excel.StatusBar = false; } } }
\ No newline at end of file diff --git a/RhSolutions.AddIn/Services/IDatabaseClient.cs b/RhSolutions.AddIn/Services/IDatabaseClient.cs index e275dec..36994c9 100644 --- a/RhSolutions.AddIn/Services/IDatabaseClient.cs +++ b/RhSolutions.AddIn/Services/IDatabaseClient.cs @@ -1,9 +1,11 @@ -using System.Threading.Tasks; +using RhSolutions.Models; +using System.Collections.Generic; +using System.Threading.Tasks; namespace RhSolutions.Services { public interface IDatabaseClient { - public Task<object> GetProduct(string line); + public Task<IEnumerable<Product>> GetProducts(string query); } }
\ No newline at end of file diff --git a/RhSolutions.AddIn/Services/RhDatabaseClient.cs b/RhSolutions.AddIn/Services/RhDatabaseClient.cs index a053e7b..65dfe0e 100644 --- a/RhSolutions.AddIn/Services/RhDatabaseClient.cs +++ b/RhSolutions.AddIn/Services/RhDatabaseClient.cs @@ -1,10 +1,12 @@ using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; +using RhSolutions; using RhSolutions.AddIn; using RhSolutions.Models; using System; using System.Collections.Generic; using System.Linq; +using System.Net; using System.Net.Http; using System.Threading.Tasks; @@ -12,14 +14,15 @@ namespace RhSolutions.Services { public class RhDatabaseClient : IDatabaseClient { - private IServiceProvider provider; + private IServiceProvider serviceProvider; + public HttpStatusCode StatusCode { get; private set; } public RhDatabaseClient(IServiceProvider provider) { - this.provider = provider; + this.serviceProvider = provider; } - public async Task<object> GetProduct(string line) + public async Task<IEnumerable<Product>> GetProducts(string line) { string request; @@ -33,30 +36,22 @@ namespace RhSolutions.Services request = @"https://rh.cebotari.ru/api/search?query=" + line; } - var client = provider.GetRequiredService<HttpClient>(); + var client = serviceProvider.GetRequiredService<HttpClient>(); var response = await client.GetAsync(request); try - { + { response.EnsureSuccessStatusCode(); string json = await response.Content.ReadAsStringAsync(); - var product = JsonConvert.DeserializeObject<IEnumerable<Product>>(json) - .FirstOrDefault(); - - if (product == null) - { - return null; - } - else - { - return $"{product.ProductSku} {product.Name}"; - } + return JsonConvert.DeserializeObject<IEnumerable<Product>>(json) ?? Enumerable.Empty<Product>(); } catch { - return $"Ошибка сервера {response.StatusCode}"; + StatusCode = response.StatusCode; } + + return Enumerable.Empty<Product>(); } } }
\ No newline at end of file |