diff options
author | Sergey Chebotar <s.chebotar@gmail.com> | 2021-12-03 22:25:20 +0300 |
---|---|---|
committer | Sergey Chebotar <s.chebotar@gmail.com> | 2021-12-03 22:25:20 +0300 |
commit | 355e2d36729b607c80b75a4e78342ed487cc56d4 (patch) | |
tree | d86059a3952bd9c1d2b147aed205e81385afa232 /Source/Assistant/SkuAssist.cs | |
parent | 915929fa9d0738a4e4db4134ea522b343ab2c1d2 (diff) |
Add RAUPRICE function. Refactoring.
Diffstat (limited to 'Source/Assistant/SkuAssist.cs')
-rw-r--r-- | Source/Assistant/SkuAssist.cs | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/Source/Assistant/SkuAssist.cs b/Source/Assistant/SkuAssist.cs index b6b5f7e..fd69a5b 100644 --- a/Source/Assistant/SkuAssist.cs +++ b/Source/Assistant/SkuAssist.cs @@ -1,7 +1,9 @@ using AngleSharp.Dom; +using ExcelDna.Integration; using Newtonsoft.Json; using System; using System.Linq; +using System.Runtime.Caching; using System.Text.RegularExpressions; using System.Threading.Tasks; @@ -16,6 +18,13 @@ namespace Rehau.Sku.Assist Series } + public enum ProductField + { + Name, + Id, + Price + } + static class SkuAssist { public static async Task<IProduct> GetProduct(string request) @@ -43,10 +52,52 @@ namespace Rehau.Sku.Assist IProduct product = storeResponse .Ecommerce .Impressions - .Where(i => Regex.IsMatch(i.Id, @"\d{11}", RegexOptions.None)) + .Where(p => Regex.IsMatch(p.Id, @"\d{11}", RegexOptions.None)) .FirstOrDefault(); return product; } + + public static object GetProduct(string request, ProductField field) + { + IProduct product; + + if (MemoryCache.Default.Contains(request)) + { + product = MemoryCache.Default[request] as IProduct; + } + + else + { + object result = ExcelAsyncUtil.Run("RauName", new[] { request }, + delegate + { + Task<IProduct> p = Task.Run(() => GetProduct(request)); + return p.Result; + }); + + if (result == null) + return "Не найдено"; + + if (result.Equals(ExcelError.ExcelErrorNA)) + return "Загрузка..."; + + product = result as IProduct; + MemoryCache.Default.Add(request, product, DateTime.Now.AddMinutes(10)); + return product.Name; + } + + switch (field) + { + case ProductField.Name: + return product.Name; + case ProductField.Id: + return product.Id; + case ProductField.Price: + return product.Price; + default: + return ExcelError.ExcelErrorValue; + } + } } }
\ No newline at end of file |