7 changed files with 185 additions and 11 deletions
@ -1,10 +1,143 @@ |
|||
namespace BBWY.Client.ViewModels |
|||
using BBWY.Client.APIServices; |
|||
using BBWY.Client.Models; |
|||
using Newtonsoft.Json.Linq; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Collections.ObjectModel; |
|||
using System.Linq; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace BBWY.Client.ViewModels |
|||
{ |
|||
public class _1688PreviewPurchaseViewModel : BaseVM |
|||
{ |
|||
public _1688PreviewPurchaseViewModel() |
|||
public IList<PurchaseSchemeProductSku> PurchaseSchemeProductSkuList { get; set; } |
|||
|
|||
public PurchaseScheme PurchaseScheme { get; set; } |
|||
public bool IsLoading { get => isLoading; set { Set(ref isLoading, value); } } |
|||
|
|||
private string orderId; |
|||
private int skuItemCount; |
|||
private bool isLoading; |
|||
private OneBoundAPIService oneBoundAPIService; |
|||
|
|||
public _1688PreviewPurchaseViewModel(OneBoundAPIService oneBoundAPIService) |
|||
{ |
|||
this.oneBoundAPIService = oneBoundAPIService; |
|||
PurchaseSchemeProductSkuList = new ObservableCollection<PurchaseSchemeProductSku>(); |
|||
} |
|||
|
|||
public void SetData(string orderId, int skuItemCount, PurchaseScheme purchaseScheme) |
|||
{ |
|||
this.orderId = orderId; |
|||
this.skuItemCount = skuItemCount; |
|||
this.PurchaseScheme = purchaseScheme; |
|||
} |
|||
|
|||
protected override void Load() |
|||
{ |
|||
IsLoading = true; |
|||
var waitList = new List<WaitHandle>(); |
|||
foreach (var purchaseSchemeProduct in PurchaseScheme.PurchaseSchemeProductList) |
|||
{ |
|||
var ewh = new ManualResetEvent(false); |
|||
waitList.Add(ewh); |
|||
Task.Factory.StartNew(() => LoadPurchaseProduct(purchaseSchemeProduct, ewh)); |
|||
} |
|||
|
|||
Task.Factory.StartNew(() => |
|||
{ |
|||
WaitHandle.WaitAll(waitList.ToArray()); |
|||
IsLoading = false; |
|||
}); |
|||
} |
|||
|
|||
protected override void Unload() |
|||
{ |
|||
PurchaseSchemeProductSkuList.Clear(); |
|||
PurchaseScheme = null; |
|||
orderId = string.Empty; |
|||
skuItemCount = 0; |
|||
} |
|||
|
|||
private void LoadPurchaseProduct(PurchaseSchemeProduct purchaseSchemeProduct, ManualResetEvent ewh) |
|||
{ |
|||
var purchaseSchemeProductSkuList = LoadPurchaseProductCore(purchaseSchemeProduct.PurchaseProductId, out string errorMsg); |
|||
if (purchaseSchemeProductSkuList != null && purchaseSchemeProductSkuList.Count > 0) |
|||
{ |
|||
App.Current.Dispatcher.BeginInvoke((Action)delegate |
|||
{ |
|||
foreach (var purchaseSchemeProductSku in purchaseSchemeProductSkuList) |
|||
{ |
|||
if (purchaseSchemeProduct.SelectedSkuIdList.Any(s => s == purchaseSchemeProductSku.PurchaseSkuId)) |
|||
{ |
|||
PurchaseSchemeProductSkuList.Add(purchaseSchemeProductSku); |
|||
purchaseSchemeProductSku.ItemTotal = skuItemCount; |
|||
} |
|||
} |
|||
}); |
|||
} |
|||
ewh.Set(); |
|||
ewh.Dispose(); |
|||
|
|||
} |
|||
|
|||
private IList<PurchaseSchemeProductSku> LoadPurchaseProductCore(string purchseProductId, out string errorMsg) |
|||
{ |
|||
errorMsg = string.Empty; |
|||
//1688商品详情接口
|
|||
var response = oneBoundAPIService.GetProductInfo("1688", purchseProductId); |
|||
if (!response.Success) |
|||
{ |
|||
//记录日志
|
|||
|
|||
errorMsg = response.Msg; |
|||
return null; |
|||
} |
|||
var jobject = response.Data; |
|||
//purchaserId = jobject["item"]["seller_info"].Value<string>("user_num_id");
|
|||
//purchaserName = jobject["item"]["seller_info"].Value<string>("title");
|
|||
//purchaserLocation = jobject["item"].Value<string>("location");
|
|||
//if (checkPurchaserFunc != null)
|
|||
//{
|
|||
// errorMsg = checkPurchaserFunc(purchaserId);
|
|||
// if (!string.IsNullOrEmpty(errorMsg))
|
|||
// return null;
|
|||
//}
|
|||
|
|||
var skuJArray = (JArray)jobject["item"]["skus"]["sku"]; |
|||
if (skuJArray.Count == 0) |
|||
{ |
|||
errorMsg = $"商品{purchseProductId}缺少sku信息"; |
|||
return null; |
|||
} |
|||
|
|||
return skuJArray.Select(j => new PurchaseSchemeProductSku() |
|||
{ |
|||
ProductId = PurchaseScheme.ProductId, |
|||
SkuId = PurchaseScheme.SkuId, |
|||
PurchaseProductId = purchseProductId, |
|||
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) |
|||
{ |
|||
if (!prop_img.HasValues) |
|||
return "pack://application:,,,/Resources/Images/defaultItem.png"; |
|||
var properties = skuJToken.Value<string>("properties").Split(';', StringSplitOptions.RemoveEmptyEntries); |
|||
foreach (var p in properties) |
|||
{ |
|||
var imgJToken = prop_img.FirstOrDefault(g => g.Value<string>("properties") == p); |
|||
if (imgJToken != null) |
|||
return imgJToken.Value<string>("url"); |
|||
} |
|||
return "pack://application:,,,/Resources/Images/defaultItem.png"; |
|||
} |
|||
} |
|||
} |
|||
|
Loading…
Reference in new issue