diff --git a/BBWY.Client/APIServices/PurchaseProductAPIService.cs b/BBWY.Client/APIServices/PurchaseProductAPIService.cs index 1f0507dd..5ba88e70 100644 --- a/BBWY.Client/APIServices/PurchaseProductAPIService.cs +++ b/BBWY.Client/APIServices/PurchaseProductAPIService.cs @@ -4,6 +4,7 @@ using BBWY.Common.Http; using BBWY.Common.Models; using Newtonsoft.Json.Linq; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Net.Http; @@ -17,6 +18,7 @@ namespace BBWY.Client.APIServices private RestApiService restApiService; private string oneBoundKey = "t5060712539"; private string oneBoundSecret = "20211103"; + private ConcurrentDictionary purchaseSchemeProductSkus)> productChaches; private IDictionary _1688ProductDetailRequestHeader; @@ -31,6 +33,7 @@ namespace BBWY.Client.APIServices { "Accept-Encoding","gzip, deflate, br"}, { "Accept-Language","zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"} }; + productChaches = new ConcurrentDictionary purchaseSchemeProductSkus)>(); } public (Purchaser purchaser, IList purchaseSchemeProductSkus)? GetProductInfo(Platform platform, string productId, string skuId, string purchaseProductId, PurchaseOrderMode priceMode, PurchaseProductAPIMode apiMode) @@ -39,13 +42,17 @@ namespace BBWY.Client.APIServices if (apiMode == PurchaseProductAPIMode.Spider) { data = LoadFromSpider(platform, productId, skuId, purchaseProductId, priceMode); + if (data == null) + data = LoadFromOneBound(platform, productId, skuId, purchaseProductId, priceMode); } else if (apiMode == PurchaseProductAPIMode.OneBound) { data = LoadFromOneBound(platform, productId, skuId, purchaseProductId, priceMode); + if (data == null) + data = LoadFromSpider(platform, productId, skuId, purchaseProductId, priceMode); } - return data; + return data?.Copy(); } private (Purchaser purchaser, IList purchaseSchemeProductSkus)? LoadFromOneBound(Platform platform, string productId, string skuId, string purchaseProductId, PurchaseOrderMode priceMode) @@ -59,6 +66,9 @@ namespace BBWY.Client.APIServices if (string.IsNullOrEmpty(platformStr)) return null; + if (productChaches.TryGetValue($"{purchaseProductId}_{priceMode}", out (Purchaser purchaser, IList purchaseSchemeProductSkus) tuple)) + return tuple; + var result = restApiService.SendRequest("https://api-gw.onebound.cn/", $"{platformStr}/item_get", $"key={oneBoundKey}&secret={oneBoundSecret}&num_iid={purchaseProductId}&lang=zh-CN&cache=no&agent={(priceMode == PurchaseOrderMode.批发 ? 0 : 1)}", null, HttpMethod.Get, paramPosition: ParamPosition.Query, enableRandomTimeStamp: true); if (result.StatusCode != System.Net.HttpStatusCode.OK) throw new Exception($"{result.StatusCode} {result.Content}"); @@ -83,7 +93,7 @@ namespace BBWY.Client.APIServices PurchaseSkuId = j.Value("sku_id"), PurchaseSkuSpecId = j.Value("spec_id"), Title = j.Value("properties_name"), - Logo = GetSkuLogo(j, (JArray)j["item"]["prop_imgs"]["prop_img"]) + Logo = GetOneBoundSkuLogo(j, (JArray)j["item"]["prop_imgs"]["prop_img"]) }).ToList(); var purchaserId = j["item"]["seller_info"].Value("user_num_id"); @@ -92,14 +102,16 @@ namespace BBWY.Client.APIServices purchaserName = j["item"]["seller_info"].Value("shop_name"); var purchaserLocation = j["item"].Value("location"); - return ( - new Purchaser() + tuple = (new Purchaser() { Id = purchaserId, Name = purchaserName, Location = purchaserLocation - }, - list); + }, list); + + productChaches.TryAdd($"{purchaseProductId}_{priceMode}", tuple); + + return tuple; } } catch { } @@ -108,7 +120,7 @@ namespace BBWY.Client.APIServices } } - private string GetSkuLogo(JToken skuJToken, JArray prop_img) + private string GetOneBoundSkuLogo(JToken skuJToken, JArray prop_img) { if (!prop_img.HasValues) return "pack://application:,,,/Resources/Images/defaultItem.png"; @@ -124,11 +136,13 @@ namespace BBWY.Client.APIServices private (Purchaser purchaser, IList purchaseSchemeProductSkus)? LoadFromSpider(Platform platform, string productId, string skuId, string purchaseProductId, PurchaseOrderMode priceMode) { + if (productChaches.TryGetValue($"{purchaseProductId}_{priceMode}", out (Purchaser purchaser, IList purchaseSchemeProductSkus) tuple)) + return tuple; + switch (platform) { case Platform.阿里巴巴: - LoadFrom1688Spider(platform, productId, skuId, purchaseProductId, priceMode); - break; + return LoadFrom1688Spider(platform, productId, skuId, purchaseProductId, priceMode); case Platform.拼多多: break; @@ -146,23 +160,73 @@ namespace BBWY.Client.APIServices //data/1081181309582/data/pirceModel/[currentPrices]/[0]price - var _1688pageResult = restApiService.SendRequest("https://detail.1688.com", - $"offer/{purchaseProductId}.html", - $"clickid={Guid.NewGuid().ToString().Md5Encrypt()}&sessionid={Guid.NewGuid().ToString().Md5Encrypt()}&sk={(priceMode == PurchaseOrderMode.批发 ? "order" : "consign")}", - _1688ProductDetailRequestHeader, - HttpMethod.Get); - if (_1688pageResult.StatusCode != System.Net.HttpStatusCode.OK) - return null; + try + { + var _1688pageResult = restApiService.SendRequest("https://detail.1688.com", + $"offer/{purchaseProductId}.html", + $"clickid={Guid.NewGuid().ToString().Md5Encrypt()}&sessionid={Guid.NewGuid().ToString().Md5Encrypt()}&sk={(priceMode == PurchaseOrderMode.批发 ? "order" : "consign")}", + _1688ProductDetailRequestHeader, + HttpMethod.Get, + httpClientName: "gzip"); + + if (_1688pageResult.StatusCode != System.Net.HttpStatusCode.OK) + return null; - var match = Regex.Match(_1688pageResult.Content, @"(window\.__INIT_DATA=)(.*)(\s?)"); - if (!match.Success) - return null; + var match = Regex.Match(_1688pageResult.Content, @"(window\.__INIT_DATA=)(.*)(\r*\n*\s*)"); + if (!match.Success) + return null; - var jsonStr = match.Groups[2].Value; - var j = JObject.Parse(jsonStr); + var jsonStr = match.Groups[2].Value; + var jobject = JObject.Parse(jsonStr); - return null; + var purchaser = new Purchaser() + { + Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(), + Name = jobject["globalData"]["tempModel"]["companyName"].ToString(), + Location = jobject["data"]["1081181309101"]["data"]["location"].ToString() + }; + + var colors3216 = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => j.Value("fid") == 3216)["value"].Children().Select(j => new + { + name = j.Value("name"), + imageUrl = j.Value("imageUrl") + }).ToList(); + + var price = jobject["data"]["1081181309582"]["data"]["priceModel"]["currentPrices"][0].Value("price"); + + var purchaseSchemeProductSkus = new List(); + + foreach (var jsku in jobject["globalData"]["skuModel"]["skuInfoMap"].Children()) + { + var jskuProperty = jsku as JProperty; + var name = jskuProperty.Name; + var matchName = name.Contains(">") ? name.Substring(0, name.IndexOf(">")) : name; + var value = jskuProperty.Value; + + purchaseSchemeProductSkus.Add(new PurchaseSchemeProductSku() + { + ProductId = productId, + SkuId = skuId, + PurchaseProductId = purchaseProductId, + Price = price, + Title = name, + PurchaseSkuId = value.Value("skuId"), + PurchaseSkuSpecId = value.Value("specId"), + Logo = colors3216.FirstOrDefault(c => c.name == matchName)?.imageUrl ?? "pack://application:,,,/Resources/Images/defaultItem.png" + }); + } + + var tuple = (purchaser, purchaseSchemeProductSkus); + productChaches.TryAdd($"{purchaseProductId}_{priceMode}", tuple); + + return tuple; + } + catch + { + + return null; + } } } } diff --git a/BBWY.Client/App.xaml.cs b/BBWY.Client/App.xaml.cs index 13716fff..7ad30a21 100644 --- a/BBWY.Client/App.xaml.cs +++ b/BBWY.Client/App.xaml.cs @@ -9,6 +9,7 @@ using System; using System.IO; using System.IO.MemoryMappedFiles; using System.Linq; +using System.Net.Http; using System.Reflection; using System.Text; using System.Threading.Tasks; @@ -35,7 +36,7 @@ namespace BBWY.Client //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNDM5OTA1OTcyOTk3ODUzMTg0IiwidGVhbUlkIjoiMTQzOTkwNDA1MDc3NzY5MDExMiIsImV4cCI6MTY4NjQxODcyOH0.K7-MXjt_zfNK5v_08VjmCDnhAGF6SI7sEQr5sgDn7Jk"; //齐越珍珍 //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNDM5OTE0NjczMzA5NzQ5MjQ4IiwidGVhbUlkIjoiMTQ0ODY4MTU0NDE4ODE3MDI0MCIsImV4cCI6MTY4NjQ1OTY0Mn0.4yCbZxOtogD0N868-YgySR5A-16VNnrp8fC13VCRs20"; //齐越耐克 - + #else var uid = e.Args.Count() > 0 ? e.Args.LastOrDefault(args => args.StartsWith("uid:")) : string.Empty; if (string.IsNullOrEmpty(uid)) @@ -70,6 +71,10 @@ namespace BBWY.Client IServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddHttpClient(); + serviceCollection.AddHttpClient("gzip").ConfigurePrimaryHttpMessageHandler(handler => new HttpClientHandler() + { + AutomaticDecompression = System.Net.DecompressionMethods.GZip + }); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(gl); serviceCollection.BatchRegisterServices(new Assembly[] { Assembly.Load("BBWY.Client") }, typeof(IDenpendency)); diff --git a/BBWY.Client/Extensions/CopyExtensions.cs b/BBWY.Client/Extensions/CopyExtensions.cs new file mode 100644 index 00000000..c2f2d442 --- /dev/null +++ b/BBWY.Client/Extensions/CopyExtensions.cs @@ -0,0 +1,12 @@ +using Newtonsoft.Json; + +namespace BBWY.Client.Extensions +{ + public static class CopyExtensions + { + public static T Copy(this T p) + { + return JsonConvert.DeserializeObject(JsonConvert.SerializeObject(p)); + } + } +} diff --git a/BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs b/BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs index 165ceffe..01288d5c 100644 --- a/BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs +++ b/BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs @@ -54,6 +54,7 @@ namespace BBWY.Client.ViewModels private OneBoundAPIService oneBoundAPIService; private PurchaseService purchaseService; private PurchaseOrderService purchaseOrderService; + private PurchaseProductAPIService purchaseProductAPIService; private DelayTrigger delayTrigger; private decimal productAmount; @@ -73,11 +74,13 @@ namespace BBWY.Client.ViewModels public _1688PreviewPurchaseViewModel(OneBoundAPIService oneBoundAPIService, PurchaseService purchaseService, PurchaseOrderService purchaseOrderService, + PurchaseProductAPIService purchaseProductAPIService, GlobalContext globalContext, OrderListViewModel orderListViewModel) { this.oneBoundAPIService = oneBoundAPIService; this.purchaseOrderService = purchaseOrderService; + this.purchaseProductAPIService = purchaseProductAPIService; this.purchaseService = purchaseService; this.delayTrigger = new DelayTrigger(); this.delayTrigger.OnExecute = OnDelayTriggerExecute; @@ -129,7 +132,7 @@ namespace BBWY.Client.ViewModels var ewh = new ManualResetEvent(false); waitList.Add(ewh); var orderSku = order.ItemList.FirstOrDefault(osku => osku.Id == purchaseScheme.SkuId); - Task.Factory.StartNew(() => LoadPurchaseProduct(purchaseSchemeProduct, orderSku, ewh)); + Task.Factory.StartNew(() => LoadPurchaseProduct(purchaseScheme.PurchasePlatform, purchaseSchemeProduct, orderSku, ewh)); } } @@ -159,14 +162,36 @@ namespace BBWY.Client.ViewModels } - private void LoadPurchaseProduct(PurchaseSchemeProduct purchaseSchemeProduct, OrderSku orderSku, ManualResetEvent ewh) + private void LoadPurchaseProduct(Platform platform, PurchaseSchemeProduct purchaseSchemeProduct, OrderSku orderSku, ManualResetEvent ewh) { - var purchaseSchemeProductSkuList = LoadPurchaseProductCore(purchaseSchemeProduct, out string errorMsg); - if (purchaseSchemeProductSkuList != null && purchaseSchemeProductSkuList.Count > 0) + //var purchaseSchemeProductSkuList = LoadPurchaseProductCore(purchaseSchemeProduct, out string errorMsg); + //if (purchaseSchemeProductSkuList != null && purchaseSchemeProductSkuList.Count > 0) + //{ + // App.Current.Dispatcher.Invoke(() => + // { + // foreach (var purchaseSchemeProductSku in purchaseSchemeProductSkuList) + // { + // if (purchaseSchemeProduct.SelectedSkuIdList.Any(s => s == purchaseSchemeProductSku.PurchaseSkuId)) + // { + // PurchaseSchemeProductSkuList.Add(purchaseSchemeProductSku); + // purchaseSchemeProductSku.ItemTotal = orderSku.ItemTotal; + // purchaseSchemeProductSku.OnItemTotalChanged = OnItemTotalChanged; + // } + // } + // }); + //} + + var data = purchaseProductAPIService.GetProductInfo(platform, + purchaseSchemeProduct.ProductId, + purchaseSchemeProduct.SkuId, + purchaseSchemeProduct.PurchaseProductId, + PurchaseOrderMode, + PurchaseProductAPIMode.Spider); + if (data != null && data.Value.purchaseSchemeProductSkus != null && data.Value.purchaseSchemeProductSkus.Count > 0) { App.Current.Dispatcher.Invoke(() => { - foreach (var purchaseSchemeProductSku in purchaseSchemeProductSkuList) + foreach (var purchaseSchemeProductSku in data.Value.purchaseSchemeProductSkus) { if (purchaseSchemeProduct.SelectedSkuIdList.Any(s => s == purchaseSchemeProductSku.PurchaseSkuId)) { @@ -177,45 +202,46 @@ namespace BBWY.Client.ViewModels } }); } + ewh.Set(); ewh.Dispose(); } - private IList LoadPurchaseProductCore(PurchaseSchemeProduct purchaseSchemeProduct, out string errorMsg) - { - errorMsg = string.Empty; - //1688商品详情接口 - var response = oneBoundAPIService.GetProductInfo("1688", purchaseSchemeProduct.PurchaseProductId); - if (!response.Success) - { - //记录日志 + //private IList LoadPurchaseProductCore(PurchaseSchemeProduct purchaseSchemeProduct, out string errorMsg) + //{ + // errorMsg = string.Empty; + // //1688商品详情接口 + // var response = oneBoundAPIService.GetProductInfo("1688", purchaseSchemeProduct.PurchaseProductId); + // if (!response.Success) + // { + // //记录日志 - errorMsg = response.Msg; - Console.WriteLine(errorMsg); - return null; - } - var jobject = response.Data; - + // errorMsg = response.Msg; + // Console.WriteLine(errorMsg); + // return null; + // } + // var jobject = response.Data; - var skuJArray = (JArray)jobject["item"]["skus"]["sku"]; - if (skuJArray.Count == 0) - { - errorMsg = $"商品{purchaseSchemeProduct.PurchaseProductId}缺少sku信息"; - return null; - } - return skuJArray.Select(j => new PurchaseSchemeProductSku() - { - ProductId = purchaseSchemeProduct.ProductId, - SkuId = purchaseSchemeProduct.SkuId, - PurchaseProductId = purchaseSchemeProduct.PurchaseProductId, - Price = j.Value("price"), - PurchaseSkuId = j.Value("sku_id"), - PurchaseSkuSpecId = j.Value("spec_id"), - Title = j.Value("properties_name"), - Logo = GetSkuLogo(j, (JArray)jobject["item"]["prop_imgs"]["prop_img"]) - }).ToList(); - } + // var skuJArray = (JArray)jobject["item"]["skus"]["sku"]; + // if (skuJArray.Count == 0) + // { + // errorMsg = $"商品{purchaseSchemeProduct.PurchaseProductId}缺少sku信息"; + // return null; + // } + + // return skuJArray.Select(j => new PurchaseSchemeProductSku() + // { + // ProductId = purchaseSchemeProduct.ProductId, + // SkuId = purchaseSchemeProduct.SkuId, + // PurchaseProductId = purchaseSchemeProduct.PurchaseProductId, + // Price = j.Value("price"), + // PurchaseSkuId = j.Value("sku_id"), + // PurchaseSkuSpecId = j.Value("spec_id"), + // Title = j.Value("properties_name"), + // Logo = GetSkuLogo(j, (JArray)jobject["item"]["prop_imgs"]["prop_img"]) + // }).ToList(); + //} private string GetSkuLogo(JToken skuJToken, JArray prop_img) { diff --git a/BBWY.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs b/BBWY.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs index 171aa833..0630bf17 100644 --- a/BBWY.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs +++ b/BBWY.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs @@ -115,7 +115,7 @@ namespace BBWY.Client.ViewModels foreach (var purchaseSchemeProduct in sku.SelectedPurchaseScheme.PurchaseSchemeProductList) { purchaseSchemeProduct.IsEditing = false; - LoadPurchaseProduct(sku.SelectedPurchaseScheme.PurchasePlatform, purchaseSchemeProduct); + LoadPurchaseProduct(sku.SelectedPurchaseScheme.PurchasePlatform, purchaseSchemeProduct, purchaseSchemeProduct.PurchaseProductId, null, out _); } ewh.Set(); ewh.Dispose(); @@ -127,47 +127,54 @@ namespace BBWY.Client.ViewModels } } - public void LoadPurchaseProduct(Platform platform, PurchaseSchemeProduct purchaseSchemeProduct, IList skuList = null) + public void LoadPurchaseProduct(Platform platform, PurchaseSchemeProduct purchaseSchemeProduct, string purchaseProductId, Func checkPurchaserFunc, out string errorMsg) { + errorMsg = string.Empty; App.Current.Dispatcher.Invoke(() => { purchaseSchemeProduct.SkuList.Clear(); purchaseSchemeProduct.PurchaseSchemeProductSkuList.Clear(); }); - - if (skuList == null) + //skuList = LoadPurchaseProductCore(purchaseSchemeProduct.PurchaseProductId, out _, out _, out _, out _, null); + var data = purchaseProductAPIService.GetProductInfo(platform, + purchaseSchemeProduct.ProductId, + purchaseSchemeProduct.SkuId, + purchaseProductId, + PurchaseOrderMode.批发, + PurchaseProductAPIMode.Spider); + + if (data != null) { - //skuList = LoadPurchaseProductCore(purchaseSchemeProduct.PurchaseProductId, out _, out _, out _, out _, null); - var data = purchaseProductAPIService.GetProductInfo(platform, - purchaseSchemeProduct.ProductId, - purchaseSchemeProduct.SkuId, - purchaseSchemeProduct.PurchaseProductId, - PurchaseOrderMode.批发, - PurchaseProductAPIMode.Spider); - if (data != null) + if (checkPurchaserFunc != null) { - PurchaserId = data.Value.purchaser.Id; - PurchaserName = data.Value.purchaser.Name; - PurchaserLocation = data.Value.purchaser.Location; + errorMsg = checkPurchaserFunc(data.Value.purchaser.Id); + if (!string.IsNullOrEmpty(errorMsg)) + return; } - } + if (data.Value.purchaseSchemeProductSkus.Count == 0) + { + errorMsg = $"商品{purchaseSchemeProduct.PurchaseProductId}缺少sku信息"; + return; + } - if (skuList == null) - return; + PurchaserId = data.Value.purchaser.Id; + PurchaserName = data.Value.purchaser.Name; + PurchaserLocation = data.Value.purchaser.Location; - App.Current.Dispatcher.BeginInvoke((Action)delegate - { - foreach (var sku in skuList) + App.Current.Dispatcher.BeginInvoke((Action)delegate { - purchaseSchemeProduct.SkuList.Add(sku); - if (purchaseSchemeProduct.SelectedSkuIdList.Any(s => s == sku.PurchaseSkuId)) + foreach (var sku in data.Value.purchaseSchemeProductSkus) { - sku.IsSelected = true; - purchaseSchemeProduct.PurchaseSchemeProductSkuList.Add(sku); + purchaseSchemeProduct.SkuList.Add(sku); + if (purchaseSchemeProduct.SelectedSkuIdList.Any(s => s == sku.PurchaseSkuId)) + { + sku.IsSelected = true; + purchaseSchemeProduct.PurchaseSchemeProductSkuList.Add(sku); + } } - } - }); + }); + } } //private IList LoadPurchaseProductCore(string purchseProductId, @@ -255,7 +262,8 @@ namespace BBWY.Client.ViewModels productSku.SelectedPurchaseScheme = new PurchaseScheme() { ProductId = productSku.ProductId, - SkuId = productSku.Id + SkuId = productSku.Id, + PurchasePlatform = Platform.阿里巴巴 }; } else if (productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Count >= 4) @@ -313,38 +321,60 @@ namespace BBWY.Client.ViewModels Task.Factory.StartNew(() => { - var purchaseSchemeProductSkuList = LoadPurchaseProductCore(purchaseProductId, - out string errorMsg, - out string purchaserId, - out string purchaserName, - out string purchaserLocation, - (p) => - { - if (sku.PurchaseSchemeList.Any(s => s.PurchaserId == p)) - return $"sku{sku.Id}的采购方案中已存在相同的采购商"; - - if (!string.IsNullOrEmpty(PurchaserId) && p != PurchaserId) - return "采购商必须相同"; - - return string.Empty; - }); + LoadPurchaseProduct(sku.SelectedPurchaseScheme.PurchasePlatform, purchaseSchemeProduct, purchaseProductId, (p) => + { + if (sku.PurchaseSchemeList.Any(s => s.PurchaserId == p)) + return $"sku{sku.Id}的采购方案中已存在相同的采购商"; + + if (!string.IsNullOrEmpty(PurchaserId) && p != PurchaserId) + return "采购商必须相同"; + + return string.Empty; + }, out string errorMsg); IsLoading = false; + if (!string.IsNullOrEmpty(errorMsg)) { - App.Current.Dispatcher.Invoke(() => - { - MessageBox.Show(errorMsg, "绑定采购商"); - }); + App.Current.Dispatcher.Invoke(() => MessageBox.Show(errorMsg, "绑定采购商")); return; } - PurchaserId = purchaserId; - PurchaserName = purchaserName; - PurchaserLocation = purchaserLocation; purchaseSchemeProduct.PurchaseUrl = purchaseUrl; purchaseSchemeProduct.PurchaseProductId = purchaseProductId; - LoadPurchaseProduct(purchaseSchemeProduct, purchaseSchemeProductSkuList); + + //var purchaseSchemeProductSkuList = LoadPurchaseProductCore(purchaseProductId, + // out string errorMsg, + // out string purchaserId, + // out string purchaserName, + // out string purchaserLocation, + // (p) => + // { + // if (sku.PurchaseSchemeList.Any(s => s.PurchaserId == p)) + // return $"sku{sku.Id}的采购方案中已存在相同的采购商"; + + // if (!string.IsNullOrEmpty(PurchaserId) && p != PurchaserId) + // return "采购商必须相同"; + + // return string.Empty; + // }); + //IsLoading = false; + //if (!string.IsNullOrEmpty(errorMsg)) + //{ + // App.Current.Dispatcher.Invoke(() => + // { + // MessageBox.Show(errorMsg, "绑定采购商"); + // }); + // return; + //} + + //PurchaserId = purchaserId; + //PurchaserName = purchaserName; + //PurchaserLocation = purchaserLocation; + //purchaseSchemeProduct.PurchaseUrl = purchaseUrl; + //purchaseSchemeProduct.PurchaseProductId = purchaseProductId; + + //LoadPurchaseProduct(purchaseSchemeProduct, purchaseSchemeProductSkuList); }); } diff --git a/BBWY.Common/Http/RestAPIService.cs b/BBWY.Common/Http/RestAPIService.cs index 28ca6c14..29ff248e 100644 --- a/BBWY.Common/Http/RestAPIService.cs +++ b/BBWY.Common/Http/RestAPIService.cs @@ -67,7 +67,7 @@ namespace BBWY.Common.Http if (enableRandomTimeStamp) url = $"{url}{(isCombineParam ? "&" : "?")}t={DateTime.Now.DateTimeToStamp()}"; - using (var httpClient = httpClientFactory.CreateClient()) + using (var httpClient = string.IsNullOrEmpty(httpClientName) ? httpClientFactory.CreateClient() : httpClientFactory.CreateClient(httpClientName)) { using (var request = new HttpRequestMessage(httpMethod, url)) {