Browse Source

多sku采购下单

qianyi
shanji 3 years ago
parent
commit
e8dae04303
  1. 7
      BBWY.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs
  2. 107
      BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs
  3. 2
      BBWY.Client/Views/Purchase/1688Purchase.xaml
  4. 4
      BBWY.Client/Views/Purchase/1688Purchase.xaml.cs

7
BBWY.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs

@ -1,5 +1,6 @@
using BBWY.Client.APIServices; using BBWY.Client.APIServices;
using BBWY.Client.Models; using BBWY.Client.Models;
using BBWY.Client.Views.Purchase;
using BBWY.Common.Models; using BBWY.Common.Models;
using GalaSoft.MvvmLight.Command; using GalaSoft.MvvmLight.Command;
using System.Collections.Generic; using System.Collections.Generic;
@ -101,9 +102,9 @@ namespace BBWY.Client.ViewModels
} }
else if (count == 1) else if (count == 1)
{ {
//var p = new _1688Purchase(this.OrderId, this.ItemTotal, purchaseScheme, globalContext.User.Shop.PurchaseAccountList[0], this.Consignee); var p = new _1688Purchase(order, purchaser, globalContext.User.Shop.PurchaseAccountList[0]);
//p.ShowDialog(); p.ShowDialog();
//GalaSoft.MvvmLight.Messaging.Messenger.Default.Send<object>(null, "ChoosePurchaseScheme_Close"); GalaSoft.MvvmLight.Messaging.Messenger.Default.Send<object>(null, "ChoosePurchaseScheme_Close");
} }
else else
{ {

107
BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs

@ -6,8 +6,8 @@ using Newtonsoft.Json.Linq;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq;
using System.Threading; using System.Threading;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Input; using System.Windows.Input;
@ -20,8 +20,6 @@ namespace BBWY.Client.ViewModels
public IList<PurchaseSchemeProductSku> PurchaseSchemeProductSkuList { get; set; } public IList<PurchaseSchemeProductSku> PurchaseSchemeProductSkuList { get; set; }
public PurchaseScheme PurchaseScheme { get; set; }
public PurchaseAccount PurchaseAccount { get; set; }
public bool IsLoading { get => isLoading; set { Set(ref isLoading, value); } } public bool IsLoading { get => isLoading; set { Set(ref isLoading, value); } }
public decimal ProductAmount { get => productAmount; set { Set(ref productAmount, value); } } public decimal ProductAmount { get => productAmount; set { Set(ref productAmount, value); } }
@ -45,12 +43,16 @@ namespace BBWY.Client.ViewModels
} }
} }
private Purchaser purchaser;
private Order order;
private PurchaseAccount purchaseAccount;
private IList<PurchaseScheme> purchaseSchemeList;
private OrderListViewModel orderListViewModel; private OrderListViewModel orderListViewModel;
private GlobalContext globalContext; private GlobalContext globalContext;
private string orderId;
private int skuItemCount;
private bool isLoading; private bool isLoading;
private OneBoundAPIService oneBoundAPIService; private OneBoundAPIService oneBoundAPIService;
private PurchaseService purchaseService;
private PurchaseOrderService purchaseOrderService; private PurchaseOrderService purchaseOrderService;
private DelayTrigger delayTrigger; private DelayTrigger delayTrigger;
@ -68,48 +70,69 @@ namespace BBWY.Client.ViewModels
private PurchaseOrderMode purchaseOrderMode = PurchaseOrderMode.; private PurchaseOrderMode purchaseOrderMode = PurchaseOrderMode.;
private string tradeMode; private string tradeMode;
public _1688PreviewPurchaseViewModel(OneBoundAPIService oneBoundAPIService, PurchaseOrderService purchaseOrderService, GlobalContext globalContext, OrderListViewModel orderListViewModel) public _1688PreviewPurchaseViewModel(OneBoundAPIService oneBoundAPIService,
PurchaseService purchaseService,
PurchaseOrderService purchaseOrderService,
GlobalContext globalContext,
OrderListViewModel orderListViewModel)
{ {
this.oneBoundAPIService = oneBoundAPIService; this.oneBoundAPIService = oneBoundAPIService;
this.purchaseOrderService = purchaseOrderService; this.purchaseOrderService = purchaseOrderService;
this.purchaseService = purchaseService;
this.delayTrigger = new DelayTrigger(); this.delayTrigger = new DelayTrigger();
this.delayTrigger.OnExecute = OnDelayTriggerExecute; this.delayTrigger.OnExecute = OnDelayTriggerExecute;
PurchaseSchemeProductSkuList = new ObservableCollection<PurchaseSchemeProductSku>(); PurchaseSchemeProductSkuList = new ObservableCollection<PurchaseSchemeProductSku>();
purchaseSchemeList = new List<PurchaseScheme>();
FastCreateOrderCommand = new RelayCommand(FastCreateOrder); FastCreateOrderCommand = new RelayCommand(FastCreateOrder);
this.globalContext = globalContext; this.globalContext = globalContext;
this.orderListViewModel = orderListViewModel; this.orderListViewModel = orderListViewModel;
//PurchaseOrderMode = PurchaseOrderMode.代发; //PurchaseOrderMode = PurchaseOrderMode.代发;
} }
public void SetData(string orderId, int skuItemCount, PurchaseScheme purchaseScheme, PurchaseAccount purchaseAccount, Consignee consignee) public void SetData(Order order, Purchaser purchaser, PurchaseAccount purchaseAccount)
{ {
this.orderId = orderId; this.order = order;
this.skuItemCount = skuItemCount; this.purchaser = purchaser;
this.PurchaseScheme = purchaseScheme; this.purchaseAccount = purchaseAccount;
this.PurchaseAccount = purchaseAccount;
this.ContactName = consignee.ContactName; this.ContactName = order.Consignee.ContactName;
this.Address = consignee.Address; this.Address = order.Consignee.Address;
this.Province = consignee.Province; this.Province = order.Consignee.Province;
this.City = consignee.City; this.City = order.Consignee.City;
this.County = consignee.County; this.County = order.Consignee.County;
this.Town = consignee.Town; this.Town = order.Consignee.Town;
this.Mobile = consignee.Mobile; this.Mobile = order.Consignee.Mobile;
} }
protected override void Load() protected override void Load()
{ {
IsLoading = true; IsLoading = true;
Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(order.ItemList.Select(osku => osku.Id).ToList(), purchaser.Id, globalContext.User.Shop.ShopId))
.ContinueWith(r =>
{
var purchaseSchemeResponse = r.Result;
if (!purchaseSchemeResponse.Success)
{
IsLoading = false;
App.Current.Dispatcher.Invoke(() => MessageBox.Show(purchaseSchemeResponse.Msg, "获取采购方案"));
return;
}
var waitList = new List<WaitHandle>(); var waitList = new List<WaitHandle>();
foreach (var purchaseSchemeProduct in PurchaseScheme.PurchaseSchemeProductList) foreach (var purchaseSchemeApiModel in purchaseSchemeResponse.Data)
{
var purchaseScheme = PurchaseScheme.Convert(purchaseSchemeApiModel);
purchaseSchemeList.Add(purchaseScheme);
foreach (var purchaseSchemeProduct in purchaseScheme.PurchaseSchemeProductList)
{ {
var ewh = new ManualResetEvent(false); var ewh = new ManualResetEvent(false);
waitList.Add(ewh); waitList.Add(ewh);
Task.Factory.StartNew(() => LoadPurchaseProduct(purchaseSchemeProduct, ewh)); var orderSku = order.ItemList.FirstOrDefault(osku => osku.Id == purchaseScheme.SkuId);
Task.Factory.StartNew(() => LoadPurchaseProduct(purchaseSchemeProduct, orderSku, ewh));
}
} }
Task.Factory.StartNew(() =>
{
WaitHandle.WaitAll(waitList.ToArray()); WaitHandle.WaitAll(waitList.ToArray());
//IsLoading = false; //IsLoading = false;
if (PurchaseSchemeProductSkuList.Count() > 0) if (PurchaseSchemeProductSkuList.Count() > 0)
@ -124,19 +147,21 @@ namespace BBWY.Client.ViewModels
protected override void Unload() protected override void Unload()
{ {
order = null;
purchaser = null;
purchaseAccount = null;
purchaseSchemeList.Clear();
PurchaseSchemeProductSkuList.Clear(); PurchaseSchemeProductSkuList.Clear();
PurchaseScheme = null;
orderId = string.Empty;
tradeMode = string.Empty; tradeMode = string.Empty;
skuItemCount = 0;
ProductAmount = FreightAmount = TotalAmount = 0; ProductAmount = FreightAmount = TotalAmount = 0;
ContactName = Address = Mobile = Province = City = County = Town = PrucahseRemark = string.Empty; ContactName = Address = Mobile = Province = City = County = Town = PrucahseRemark = string.Empty;
} }
private void LoadPurchaseProduct(PurchaseSchemeProduct purchaseSchemeProduct, ManualResetEvent ewh) private void LoadPurchaseProduct(PurchaseSchemeProduct purchaseSchemeProduct, OrderSku orderSku, ManualResetEvent ewh)
{ {
var purchaseSchemeProductSkuList = LoadPurchaseProductCore(purchaseSchemeProduct.PurchaseProductId, out string errorMsg); var purchaseSchemeProductSkuList = LoadPurchaseProductCore(purchaseSchemeProduct, out string errorMsg);
if (purchaseSchemeProductSkuList != null && purchaseSchemeProductSkuList.Count > 0) if (purchaseSchemeProductSkuList != null && purchaseSchemeProductSkuList.Count > 0)
{ {
App.Current.Dispatcher.Invoke(() => App.Current.Dispatcher.Invoke(() =>
@ -146,7 +171,7 @@ namespace BBWY.Client.ViewModels
if (purchaseSchemeProduct.SelectedSkuIdList.Any(s => s == purchaseSchemeProductSku.PurchaseSkuId)) if (purchaseSchemeProduct.SelectedSkuIdList.Any(s => s == purchaseSchemeProductSku.PurchaseSkuId))
{ {
PurchaseSchemeProductSkuList.Add(purchaseSchemeProductSku); PurchaseSchemeProductSkuList.Add(purchaseSchemeProductSku);
purchaseSchemeProductSku.ItemTotal = skuItemCount; purchaseSchemeProductSku.ItemTotal = orderSku.ItemTotal;
purchaseSchemeProductSku.OnItemTotalChanged = OnItemTotalChanged; purchaseSchemeProductSku.OnItemTotalChanged = OnItemTotalChanged;
} }
} }
@ -156,11 +181,11 @@ namespace BBWY.Client.ViewModels
ewh.Dispose(); ewh.Dispose();
} }
private IList<PurchaseSchemeProductSku> LoadPurchaseProductCore(string purchseProductId, out string errorMsg) private IList<PurchaseSchemeProductSku> LoadPurchaseProductCore(PurchaseSchemeProduct purchaseSchemeProduct, out string errorMsg)
{ {
errorMsg = string.Empty; errorMsg = string.Empty;
//1688商品详情接口 //1688商品详情接口
var response = oneBoundAPIService.GetProductInfo("1688", purchseProductId); var response = oneBoundAPIService.GetProductInfo("1688", purchaseSchemeProduct.PurchaseProductId);
if (!response.Success) if (!response.Success)
{ {
//记录日志 //记录日志
@ -183,15 +208,15 @@ namespace BBWY.Client.ViewModels
var skuJArray = (JArray)jobject["item"]["skus"]["sku"]; var skuJArray = (JArray)jobject["item"]["skus"]["sku"];
if (skuJArray.Count == 0) if (skuJArray.Count == 0)
{ {
errorMsg = $"商品{purchseProductId}缺少sku信息"; errorMsg = $"商品{purchaseSchemeProduct.PurchaseProductId}缺少sku信息";
return null; return null;
} }
return skuJArray.Select(j => new PurchaseSchemeProductSku() return skuJArray.Select(j => new PurchaseSchemeProductSku()
{ {
ProductId = PurchaseScheme.ProductId, ProductId = purchaseSchemeProduct.ProductId,
SkuId = PurchaseScheme.SkuId, SkuId = purchaseSchemeProduct.SkuId,
PurchaseProductId = purchseProductId, PurchaseProductId = purchaseSchemeProduct.PurchaseProductId,
Price = j.Value<decimal>("price"), Price = j.Value<decimal>("price"),
PurchaseSkuId = j.Value<string>("sku_id"), PurchaseSkuId = j.Value<string>("sku_id"),
PurchaseSkuSpecId = j.Value<string>("spec_id"), PurchaseSkuSpecId = j.Value<string>("spec_id"),
@ -235,7 +260,7 @@ namespace BBWY.Client.ViewModels
Province = Province, Province = Province,
TelePhone = Mobile, TelePhone = Mobile,
Town = Town Town = Town
}, PurchaseSchemeProductSkuList, Platform., PurchaseAccount, PurchaseOrderMode)) }, PurchaseSchemeProductSkuList, Platform., purchaseAccount, PurchaseOrderMode))
.ContinueWith(t => .ContinueWith(t =>
{ {
IsLoading = false; IsLoading = false;
@ -286,15 +311,15 @@ namespace BBWY.Client.ViewModels
Town = Town Town = Town
}, PurchaseSchemeProductSkuList, }, PurchaseSchemeProductSkuList,
Platform., Platform.,
PurchaseAccount, purchaseAccount,
PurchaseOrderMode, PurchaseOrderMode,
tradeMode, tradeMode,
PrucahseRemark, PrucahseRemark,
orderId, order.Id,
globalContext.User.Shop.ShopId, globalContext.User.Shop.ShopId,
PurchaseAccount.Id, purchaseAccount.Id,
PurchaseAccount.AccountName, purchaseAccount.AccountName,
PurchaseScheme.PurchaserName)).ContinueWith(t => purchaseSchemeList[0].PurchaserName)).ContinueWith(t =>
{ {
IsLoading = false; IsLoading = false;
var r = t.Result; var r = t.Result;
@ -305,7 +330,7 @@ namespace BBWY.Client.ViewModels
} }
//刷新订单列表 //刷新订单列表
orderListViewModel.RefreshOrder(orderId); orderListViewModel.RefreshOrder(order.Id);
//关闭当前窗口 //关闭当前窗口
GalaSoft.MvvmLight.Messaging.Messenger.Default.Send<object>(null, "OnlinePurchase_Close"); GalaSoft.MvvmLight.Messaging.Messenger.Default.Send<object>(null, "OnlinePurchase_Close");

2
BBWY.Client/Views/Purchase/1688Purchase.xaml

@ -41,7 +41,7 @@
ItemsSource="{Binding PurchaseSchemeProductSkuList}" ItemsSource="{Binding PurchaseSchemeProductSkuList}"
RowHeight="90"> RowHeight="90">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTemplateColumn Header="货品信息" HeaderStyle="{StaticResource ColumnHeaderStyle_Center}" Width="1*"> <DataGridTemplateColumn Header="采购货品信息" HeaderStyle="{StaticResource ColumnHeaderStyle_Center}" Width="1*">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<Grid Width="{Binding ActualWidth,ElementName=listbox_orerSku}"> <Grid Width="{Binding ActualWidth,ElementName=listbox_orerSku}">

4
BBWY.Client/Views/Purchase/1688Purchase.xaml.cs

@ -10,10 +10,10 @@ namespace BBWY.Client.Views.Purchase
/// </summary> /// </summary>
public partial class _1688Purchase : BWindow public partial class _1688Purchase : BWindow
{ {
public _1688Purchase(string orderId, int skuItemCount, PurchaseScheme purchaseScheme, PurchaseAccount purchaseAccount, Consignee consignee) public _1688Purchase(Models.Order order, Purchaser purchaser, PurchaseAccount purchaseAccount)
{ {
InitializeComponent(); InitializeComponent();
(this.DataContext as _1688PreviewPurchaseViewModel).SetData(orderId, skuItemCount, purchaseScheme, purchaseAccount, consignee); (this.DataContext as _1688PreviewPurchaseViewModel).SetData(order, purchaser, purchaseAccount);
this.Loaded += _1688Purchase_Loaded; this.Loaded += _1688Purchase_Loaded;
this.Unloaded += _1688Purchase_Unloaded; this.Unloaded += _1688Purchase_Unloaded;
} }

Loading…
Cancel
Save