aboutsummaryrefslogtreecommitdiff
path: root/Source/Assistant/SkuAssist.cs
diff options
context:
space:
mode:
authorSergey Chebotar <s.chebotar@gmail.com>2021-12-03 22:25:20 +0300
committerSergey Chebotar <s.chebotar@gmail.com>2021-12-03 22:25:20 +0300
commit355e2d36729b607c80b75a4e78342ed487cc56d4 (patch)
treed86059a3952bd9c1d2b147aed205e81385afa232 /Source/Assistant/SkuAssist.cs
parent915929fa9d0738a4e4db4134ea522b343ab2c1d2 (diff)
Add RAUPRICE function. Refactoring.
Diffstat (limited to 'Source/Assistant/SkuAssist.cs')
-rw-r--r--Source/Assistant/SkuAssist.cs53
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