Browse Source

1688爬虫

qianyi
shanji 3 years ago
parent
commit
d6f37a5dfe
  1. 108
      BBWY.Client/APIServices/PurchaseProductAPIService.cs
  2. 7
      BBWY.Client/App.xaml.cs
  3. 12
      BBWY.Client/Extensions/CopyExtensions.cs
  4. 100
      BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs
  5. 132
      BBWY.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs
  6. 2
      BBWY.Common/Http/RestAPIService.cs

108
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<string, (Purchaser purchaser, IList<PurchaseSchemeProductSku> purchaseSchemeProductSkus)> productChaches;
private IDictionary<string, string> _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<string, (Purchaser purchaser, IList<PurchaseSchemeProductSku> purchaseSchemeProductSkus)>();
}
public (Purchaser purchaser, IList<PurchaseSchemeProductSku> 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<PurchaseSchemeProductSku> 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<PurchaseSchemeProductSku> 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<string>("sku_id"),
PurchaseSkuSpecId = j.Value<string>("spec_id"),
Title = j.Value<string>("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<string>("user_num_id");
@ -92,14 +102,16 @@ namespace BBWY.Client.APIServices
purchaserName = j["item"]["seller_info"].Value<string>("shop_name");
var purchaserLocation = j["item"].Value<string>("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<PurchaseSchemeProductSku> purchaseSchemeProductSkus)? LoadFromSpider(Platform platform, string productId, string skuId, string purchaseProductId, PurchaseOrderMode priceMode)
{
if (productChaches.TryGetValue($"{purchaseProductId}_{priceMode}", out (Purchaser purchaser, IList<PurchaseSchemeProductSku> 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?</script>)");
if (!match.Success)
return null;
var match = Regex.Match(_1688pageResult.Content, @"(window\.__INIT_DATA=)(.*)(\r*\n*\s*</script>)");
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<int>("fid") == 3216)["value"].Children().Select(j => new
{
name = j.Value<string>("name"),
imageUrl = j.Value<string>("imageUrl")
}).ToList();
var price = jobject["data"]["1081181309582"]["data"]["priceModel"]["currentPrices"][0].Value<decimal>("price");
var purchaseSchemeProductSkus = new List<PurchaseSchemeProductSku>();
foreach (var jsku in jobject["globalData"]["skuModel"]["skuInfoMap"].Children())
{
var jskuProperty = jsku as JProperty;
var name = jskuProperty.Name;
var matchName = name.Contains("&gt;") ? name.Substring(0, name.IndexOf("&gt;")) : name;
var value = jskuProperty.Value;
purchaseSchemeProductSkus.Add(new PurchaseSchemeProductSku()
{
ProductId = productId,
SkuId = skuId,
PurchaseProductId = purchaseProductId,
Price = price,
Title = name,
PurchaseSkuId = value.Value<string>("skuId"),
PurchaseSkuSpecId = value.Value<string>("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;
}
}
}
}

7
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<RestApiService>();
serviceCollection.AddSingleton(gl);
serviceCollection.BatchRegisterServices(new Assembly[] { Assembly.Load("BBWY.Client") }, typeof(IDenpendency));

12
BBWY.Client/Extensions/CopyExtensions.cs

@ -0,0 +1,12 @@
using Newtonsoft.Json;
namespace BBWY.Client.Extensions
{
public static class CopyExtensions
{
public static T Copy<T>(this T p)
{
return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(p));
}
}
}

100
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<PurchaseSchemeProductSku> LoadPurchaseProductCore(PurchaseSchemeProduct purchaseSchemeProduct, out string errorMsg)
{
errorMsg = string.Empty;
//1688商品详情接口
var response = oneBoundAPIService.GetProductInfo("1688", purchaseSchemeProduct.PurchaseProductId);
if (!response.Success)
{
//记录日志
//private IList<PurchaseSchemeProductSku> 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<decimal>("price"),
PurchaseSkuId = j.Value<string>("sku_id"),
PurchaseSkuSpecId = j.Value<string>("spec_id"),
Title = j.Value<string>("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<decimal>("price"),
// PurchaseSkuId = j.Value<string>("sku_id"),
// PurchaseSkuSpecId = j.Value<string>("spec_id"),
// Title = j.Value<string>("properties_name"),
// Logo = GetSkuLogo(j, (JArray)jobject["item"]["prop_imgs"]["prop_img"])
// }).ToList();
//}
private string GetSkuLogo(JToken skuJToken, JArray prop_img)
{

132
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<PurchaseSchemeProductSku> skuList = null)
public void LoadPurchaseProduct(Platform platform, PurchaseSchemeProduct purchaseSchemeProduct, string purchaseProductId, Func<string, string> 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<PurchaseSchemeProductSku> 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);
});
}

2
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))
{

Loading…
Cancel
Save