diff --git a/BBWY.Client/APIServices/LogisticsService.cs b/BBWY.Client/APIServices/LogisticsService.cs index 347484ad..fc6e67ff 100644 --- a/BBWY.Client/APIServices/LogisticsService.cs +++ b/BBWY.Client/APIServices/LogisticsService.cs @@ -20,5 +20,16 @@ namespace BBWY.Client.APIServices globalContext.User.Shop.AppToken }, null, HttpMethod.Post); } + + public ApiResponse> GetStoreList() + { + return SendRequest>(globalContext.BBYWApiHost, "api/vender/GetStoreHouseList", new + { + globalContext.User.Shop.Platform, + globalContext.User.Shop.AppKey, + globalContext.User.Shop.AppSecret, + globalContext.User.Shop.AppToken + }, null, HttpMethod.Post); + } } } diff --git a/BBWY.Client/App.xaml.cs b/BBWY.Client/App.xaml.cs index ed5c0cd0..e749423e 100644 --- a/BBWY.Client/App.xaml.cs +++ b/BBWY.Client/App.xaml.cs @@ -122,6 +122,7 @@ namespace BBWY.Client serviceCollection.AddTransient(); serviceCollection.AddTransient(); serviceCollection.AddTransient(); + serviceCollection.AddTransient(); #region 注册拳探SDK相关类 serviceCollection.AddSingleton(); diff --git a/BBWY.Client/Models/APIModel/Response/Logistics/StoreResponse.cs b/BBWY.Client/Models/APIModel/Response/Logistics/StoreResponse.cs index 5f821c65..8ed924cf 100644 --- a/BBWY.Client/Models/APIModel/Response/Logistics/StoreResponse.cs +++ b/BBWY.Client/Models/APIModel/Response/Logistics/StoreResponse.cs @@ -1,9 +1,18 @@ -namespace BBWY.Client.Models +using System; + +namespace BBWY.Client.Models { public class StoreResponse { - public string StoreId { get; set; } + public DateTime? CreateTime { get; set; } + public string Id { get; set; } + + public string Name { get; set; } + + public Platform Platform { get; set; } + + public StockStatus Status { get; set; } - public string StoreName { get; set; } + public StockType Type { get; set; } } } diff --git a/BBWY.Client/Models/Enums.cs b/BBWY.Client/Models/Enums.cs index 3c353aee..433dc415 100644 --- a/BBWY.Client/Models/Enums.cs +++ b/BBWY.Client/Models/Enums.cs @@ -402,4 +402,20 @@ 胶带 = 2, 其他 = 3 } + + /// + /// 京东仓库类型 1商家仓 2京东仓 + /// + public enum StockType + { + 商家仓 = 1, 京仓 = 2 + } + + /// + /// 仓库状态 0暂停,1使用 + /// + public enum StockStatus + { + 暂停 = 0, 使用 = 1 + } } diff --git a/BBWY.Client/Models/QiKu/PackSkuConfig.cs b/BBWY.Client/Models/QiKu/PackSkuConfig.cs index 968fed0c..619a3757 100644 --- a/BBWY.Client/Models/QiKu/PackSkuConfig.cs +++ b/BBWY.Client/Models/QiKu/PackSkuConfig.cs @@ -1,7 +1,14 @@ -namespace BBWY.Client.Models.QiKu +using System.Collections.ObjectModel; + +namespace BBWY.Client.Models.QiKu { public class PackSkuConfig : NotifyObject { + public PackSkuConfig() + { + PackSkuSplitConfigList = new ObservableCollection(); + } + private int splitCount; public string SkuId { get; set; } @@ -19,6 +26,8 @@ /// 分箱数量 /// public int SplitCount { get => splitCount; set { Set(ref splitCount, value); } } + + public ObservableCollection PackSkuSplitConfigList { get; set; } } public class PackSkuSplitConfig : NotifyObject diff --git a/BBWY.Client/ViewModels/BatchPurchase/BatchPurchaseCreateNewOrderViewModel.cs b/BBWY.Client/ViewModels/BatchPurchase/BatchPurchaseCreateNewOrderViewModel.cs index ac3dc3d2..b50bd3f5 100644 --- a/BBWY.Client/ViewModels/BatchPurchase/BatchPurchaseCreateNewOrderViewModel.cs +++ b/BBWY.Client/ViewModels/BatchPurchase/BatchPurchaseCreateNewOrderViewModel.cs @@ -400,7 +400,19 @@ namespace BBWY.Client.ViewModels return; } + var packWindow = new PackSkuConfigWindow(ProductSkuWithSchemeList.Select(ps => new Models.QiKu.PackSkuConfig() + { + Logo = ps.Logo, + SkuId = ps.SkuId, + Title = ps.Title, + PurchaseCount = ps.Quantity + }).ToList()); + + if (packWindow.ShowDialog() != true) + return; + var packSkuConfigList = packWindow.GetPackSkuConfigList(); + Console.WriteLine(packSkuConfigList); } } } diff --git a/BBWY.Client/ViewModels/QiKu/PackSkuSplitConfigViewModel.cs b/BBWY.Client/ViewModels/QiKu/PackSkuSplitConfigViewModel.cs new file mode 100644 index 00000000..324ef251 --- /dev/null +++ b/BBWY.Client/ViewModels/QiKu/PackSkuSplitConfigViewModel.cs @@ -0,0 +1,105 @@ +using BBWY.Client.APIServices; +using BBWY.Client.Models; +using BBWY.Client.Models.QiKu; +using BBWY.Client.Views.BatchPurchase; +using GalaSoft.MvvmLight.Command; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Windows; +using System.Windows.Input; + +namespace BBWY.Client.ViewModels +{ + public class PackSkuSplitConfigViewModel : BaseVM + { + public IList PackSkuConfigList { get; set; } + + private IList storeList; + + public ICommand SetSplitCountCommand { get; set; } + + public ICommand SetPackCountAndStoreCommand { get; set; } + + public ICommand SaveCommand { get; set; } + + private LogisticsService logisticsService; + + public PackSkuSplitConfigViewModel(LogisticsService logisticsService) + { + this.logisticsService = logisticsService; + SetSplitCountCommand = new RelayCommand(SetSplitCount); + SetPackCountAndStoreCommand = new RelayCommand(SetPackCountAndStore); + SaveCommand = new RelayCommand(Save); + PackSkuConfigList = new ObservableCollection(); + } + + public void SetData(IList packSkuConfigList) + { + foreach (var item in packSkuConfigList) + PackSkuConfigList.Add(item); + } + + public IList GetPackSkuConfigList() + { + return PackSkuConfigList; + } + + private void SetSplitCount(PackSkuConfig packSkuConfig) + { + if (packSkuConfig.SplitCount <= 0) + { + MessageBox.Show("份数不正确"); + return; + } + + packSkuConfig.PackSkuSplitConfigList.Clear(); + for (var i = 1; i <= packSkuConfig.SplitCount; i++) + { + packSkuConfig.PackSkuSplitConfigList.Add(new PackSkuSplitConfig() + { + Index = i, + PackCount = 0 + }); + } + } + + private void SetPackCountAndStore(PackSkuSplitConfig packSkuSplitConfig) + { + if (storeList == null) + { + var response = logisticsService.GetStoreList(); + if (!response.Success) + { + MessageBox.Show(response.Msg, "获取仓库"); + return; + } + storeList = response.Data; + } + var w = new PackSkuSplitCountAndStoreWindow(packSkuSplitConfig.PackCount, packSkuSplitConfig.Store, storeList); + if (w.ShowDialog() == true) + { + packSkuSplitConfig.PackCount = w.Quantity; + packSkuSplitConfig.Store = w.Store; + } + } + + private void Save() + { + if (PackSkuConfigList.Any(s => s.PackSkuSplitConfigList.Count() == 0 || + s.PackSkuSplitConfigList.Any(sp => sp.PackCount <= 0))) + { + MessageBox.Show("装箱设置不正确", "提示"); + return; + } + + if (PackSkuConfigList.Any(s => s.PurchaseCount != s.PackSkuSplitConfigList.Sum(sp => sp.PackCount))) + { + MessageBox.Show("打包份数总数与采购数量不相等", "提示"); + return; + } + + GalaSoft.MvvmLight.Messaging.Messenger.Default.Send(true, "PackSkuConfigWindowClose"); + } + } +} diff --git a/BBWY.Client/ViewModels/ViewModelLocator.cs b/BBWY.Client/ViewModels/ViewModelLocator.cs index 7ccd0dad..cfd7e27c 100644 --- a/BBWY.Client/ViewModels/ViewModelLocator.cs +++ b/BBWY.Client/ViewModels/ViewModelLocator.cs @@ -294,5 +294,14 @@ namespace BBWY.Client.ViewModels return s.ServiceProvider.GetRequiredService(); } } + + public PackSkuSplitConfigViewModel PackSkuConfig + { + get + { + using var s = sp.CreateScope(); + return s.ServiceProvider.GetRequiredService(); + } + } } } diff --git a/BBWY.Client/Views/BatchPurchase/BatchCreateNewPurchaseOrder.xaml b/BBWY.Client/Views/BatchPurchase/BatchCreateNewPurchaseOrder.xaml index b208bd6e..6c1dc8a0 100644 --- a/BBWY.Client/Views/BatchPurchase/BatchCreateNewPurchaseOrder.xaml +++ b/BBWY.Client/Views/BatchPurchase/BatchCreateNewPurchaseOrder.xaml @@ -345,10 +345,10 @@ - - + + diff --git a/BBWY.Client/Views/BatchPurchase/BatchPurchaseOrderList.xaml b/BBWY.Client/Views/BatchPurchase/BatchPurchaseOrderList.xaml index 108f6f48..2ea7916f 100644 --- a/BBWY.Client/Views/BatchPurchase/BatchPurchaseOrderList.xaml +++ b/BBWY.Client/Views/BatchPurchase/BatchPurchaseOrderList.xaml @@ -202,7 +202,7 @@ - + diff --git a/BBWY.Client/Views/BatchPurchase/PackSkuConfigWindow.xaml b/BBWY.Client/Views/BatchPurchase/PackSkuConfigWindow.xaml new file mode 100644 index 00000000..99738e9f --- /dev/null +++ b/BBWY.Client/Views/BatchPurchase/PackSkuConfigWindow.xaml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BBWY.Client/Views/BatchPurchase/PackSkuConfigWindow.xaml.cs b/BBWY.Client/Views/BatchPurchase/PackSkuConfigWindow.xaml.cs new file mode 100644 index 00000000..5a093730 --- /dev/null +++ b/BBWY.Client/Views/BatchPurchase/PackSkuConfigWindow.xaml.cs @@ -0,0 +1,44 @@ +using BBWY.Client.Models.QiKu; +using BBWY.Client.ViewModels; +using BBWY.Controls; +using System.Collections.Generic; + +namespace BBWY.Client.Views.BatchPurchase +{ + /// + /// PackSkuConfigWindow.xaml 的交互逻辑 + /// + public partial class PackSkuConfigWindow : BWindow + { + private PackSkuSplitConfigViewModel vm; + + public PackSkuConfigWindow(IList list) + { + InitializeComponent(); + vm = this.DataContext as PackSkuSplitConfigViewModel; + vm.SetData(list); + + this.Loaded += PackSkuConfigWindow_Loaded; + this.Unloaded += PackSkuConfigWindow_Unloaded; + } + + private void PackSkuConfigWindow_Unloaded(object sender, System.Windows.RoutedEventArgs e) + { + GalaSoft.MvvmLight.Messaging.Messenger.Default.Unregister(this); + } + + private void PackSkuConfigWindow_Loaded(object sender, System.Windows.RoutedEventArgs e) + { + GalaSoft.MvvmLight.Messaging.Messenger.Default.Register(this, "PackSkuConfigWindowClose", (r) => + { + this.DialogResult = r; + this.Close(); + }); + } + + public IList GetPackSkuConfigList() + { + return vm.GetPackSkuConfigList(); + } + } +} diff --git a/BBWY.Client/Views/BatchPurchase/PackSkuSplitCountAndStoreWindow.xaml b/BBWY.Client/Views/BatchPurchase/PackSkuSplitCountAndStoreWindow.xaml new file mode 100644 index 00000000..8ada0b01 --- /dev/null +++ b/BBWY.Client/Views/BatchPurchase/PackSkuSplitCountAndStoreWindow.xaml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BBWY.Client/Views/BatchPurchase/PackSkuSplitCountAndStoreWindow.xaml.cs b/BBWY.Client/Views/BatchPurchase/PackSkuSplitCountAndStoreWindow.xaml.cs new file mode 100644 index 00000000..b00651f8 --- /dev/null +++ b/BBWY.Client/Views/BatchPurchase/PackSkuSplitCountAndStoreWindow.xaml.cs @@ -0,0 +1,64 @@ +using BBWY.Client.Models; +using BBWY.Controls; +using System.Collections.Generic; +using System.Linq; +using System.Windows; + +namespace BBWY.Client.Views.BatchPurchase +{ + /// + /// PackSkuSplitCountAndStoreWindow.xaml 的交互逻辑 + /// + public partial class PackSkuSplitCountAndStoreWindow : BWindow + { + public int Quantity { get; set; } + + public StoreResponse Store { get; set; } + + private IList storeList; + + public PackSkuSplitCountAndStoreWindow(int quantity, StoreResponse store, IList storeList) + { + InitializeComponent(); + this.Quantity = quantity; + this.Store = store; + this.storeList = storeList; + this.Loaded += PackSkuSplitCountAndStoreWindow_Loaded; + } + + private void PackSkuSplitCountAndStoreWindow_Loaded(object sender, System.Windows.RoutedEventArgs e) + { + this.txtQuantity.Text = Quantity.ToString(); + this.cbx_stroeList.ItemsSource = storeList; + if (Store != null) + this.cbx_stroeList.SelectedItem = storeList.FirstOrDefault(s => s.Id == Store.Id); + else + this.cbx_stroeList.SelectedItem = storeList.FirstOrDefault(); + } + + private void btn_save_Click(object sender, System.Windows.RoutedEventArgs e) + { + if (!int.TryParse(txtQuantity.Text, out int q)) + { + MessageBox.Show("件数不正确", "提示"); + return; + } + if (q <= 0) + { + MessageBox.Show("件数不正确", "提示"); + return; + } + if (cbx_stroeList.SelectedItem == null) + { + MessageBox.Show("请选择一个仓库", "提示"); + return; + } + + this.Quantity = q; + this.Store = cbx_stroeList.SelectedItem as StoreResponse; + + this.DialogResult = true; + this.Close(); + } + } +}