From e3e1782c232d146b64ed1221719644a459433d63 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Fri, 18 Feb 2022 19:47:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E9=87=87=E8=B4=AD=E5=AE=8C?= =?UTF-8?q?=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Product/PurchaseSchemeProductSku.cs | 7 + .../Order/ChoosePurchaseSchemeViewModel.cs | 9 +- .../ViewModels/Order/OrderListViewModel.cs | 2 +- .../Purchase/1688PreviewPurchaseViewModel.cs | 137 +++++++++++++++++- BBWY.Client/Views/Purchase/1688Purchase.xaml | 36 ++++- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 3 +- .../DeletePurchaseSchemeRequest.cs | 2 - 7 files changed, 185 insertions(+), 11 deletions(-) diff --git a/BBWY.Client/Models/Product/PurchaseSchemeProductSku.cs b/BBWY.Client/Models/Product/PurchaseSchemeProductSku.cs index b10ecd14..998d5079 100644 --- a/BBWY.Client/Models/Product/PurchaseSchemeProductSku.cs +++ b/BBWY.Client/Models/Product/PurchaseSchemeProductSku.cs @@ -32,5 +32,12 @@ public string PurchaseSkuSpecId { get; set; } public long SkuPurchaseSchemeId { get; set; } public long UserId { get; set; } + + public int ItemTotal { get => itemTotal; set { Set(ref itemTotal, value); } } + + public decimal SkuAmount { get => skuAmount; set { Set(ref skuAmount, value); } } + + private int itemTotal; + private decimal skuAmount; } } diff --git a/BBWY.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs b/BBWY.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs index 65af59f7..3918c232 100644 --- a/BBWY.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs +++ b/BBWY.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs @@ -18,6 +18,8 @@ namespace BBWY.Client.ViewModels public string SkuId { get; set; } public string SkuName { get; set; } public string OrderId { get; set; } + + public int ItemTotal { get; set; } public IList PurchaseSchemeList { get; set; } @@ -48,11 +50,12 @@ namespace BBWY.Client.ViewModels PurchaseSchemeList.Clear(); } - public void SetData(string orderId, string skuId, string skuName) + public void SetData(string orderId, string skuId, string skuName, int itemTotal) { this.OrderId = orderId; this.SkuId = skuId; this.SkuName = skuName; + this.ItemTotal = itemTotal; } public void LoadPurchaseScheme(string skuId) @@ -96,8 +99,8 @@ namespace BBWY.Client.ViewModels } public void PreviewPurchase(PurchaseScheme purchaseScheme) - { - + { + } } } diff --git a/BBWY.Client/ViewModels/Order/OrderListViewModel.cs b/BBWY.Client/ViewModels/Order/OrderListViewModel.cs index 82690aba..d7afa335 100644 --- a/BBWY.Client/ViewModels/Order/OrderListViewModel.cs +++ b/BBWY.Client/ViewModels/Order/OrderListViewModel.cs @@ -257,7 +257,7 @@ namespace BBWY.Client.ViewModels } else if (chooseDFType.DFType == DFType.在线采购) { - choosePurchaseSchemeViewModel.SetData(order.Id, order.ItemList[0].Id, order.ItemList[0].Title); + choosePurchaseSchemeViewModel.SetData(order.Id, order.ItemList[0].Id, order.ItemList[0].Title, order.ItemList[0].ItemTotal); var choosePurchaseScheme = new ChoosePurchaseScheme(); choosePurchaseScheme.ShowDialog(); } diff --git a/BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs b/BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs index df303037..e25b1e6a 100644 --- a/BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs +++ b/BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs @@ -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 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(); + } + + 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(); + 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 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("user_num_id"); + //purchaserName = jobject["item"]["seller_info"].Value("title"); + //purchaserLocation = jobject["item"].Value("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("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) + { + if (!prop_img.HasValues) + return "pack://application:,,,/Resources/Images/defaultItem.png"; + var properties = skuJToken.Value("properties").Split(';', StringSplitOptions.RemoveEmptyEntries); + foreach (var p in properties) + { + var imgJToken = prop_img.FirstOrDefault(g => g.Value("properties") == p); + if (imgJToken != null) + return imgJToken.Value("url"); + } + return "pack://application:,,,/Resources/Images/defaultItem.png"; + } } } diff --git a/BBWY.Client/Views/Purchase/1688Purchase.xaml b/BBWY.Client/Views/Purchase/1688Purchase.xaml index f618e654..3bc5f88d 100644 --- a/BBWY.Client/Views/Purchase/1688Purchase.xaml +++ b/BBWY.Client/Views/Purchase/1688Purchase.xaml @@ -11,7 +11,7 @@ MinButtonVisibility="Collapsed" MaxButtonVisibility="Collapsed" DataContext="{Binding _1688PreviewPurchase,Source={StaticResource Locator}}"> - + @@ -24,6 +24,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BBWY.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWY.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 572812b1..b4e83dbf 100644 --- a/BBWY.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWY.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -167,8 +167,7 @@ namespace BBWY.Server.Business public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) { - var purchaseSchemeIdList = fsql.Select().Where(ps => ps.ShopId == deletePurchaseSchemeRequest.ShopId && - ps.ProductId == deletePurchaseSchemeRequest.ProductId && + var purchaseSchemeIdList = fsql.Select().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId && ps.PurchaserId == deletePurchaseSchemeRequest.PurchaserId).ToList(ps => ps.Id); fsql.Transaction(() => diff --git a/BBWY.Server.Model/Dto/Request/PurchaseScheme/DeletePurchaseSchemeRequest.cs b/BBWY.Server.Model/Dto/Request/PurchaseScheme/DeletePurchaseSchemeRequest.cs index aeabf143..2465d14f 100644 --- a/BBWY.Server.Model/Dto/Request/PurchaseScheme/DeletePurchaseSchemeRequest.cs +++ b/BBWY.Server.Model/Dto/Request/PurchaseScheme/DeletePurchaseSchemeRequest.cs @@ -2,8 +2,6 @@ { public class DeletePurchaseSchemeRequest { - public long ShopId { get; set; } - public string ProductId { get; set; } public string PurchaserId { get; set; }