diff --git a/BBWY.Client/APIServices/PurchaseService.cs b/BBWY.Client/APIServices/PurchaseService.cs index 91e1dcba..97af13d9 100644 --- a/BBWY.Client/APIServices/PurchaseService.cs +++ b/BBWY.Client/APIServices/PurchaseService.cs @@ -17,11 +17,11 @@ namespace BBWY.Client.APIServices /// /// /// - public ApiResponse> GetPurchaseSchemeList(IList productIdList, string purchaserId, long shopId) + public ApiResponse> GetPurchaseSchemeList(IList skuIdList, string purchaserId, long shopId) { return SendRequest>(globalContext.BBYWApiHost, "api/PurchaseScheme/GetPurchaseSchemeList", - new { productIdList, purchaserId, shopId }, + new { skuIdList, purchaserId, shopId }, null, HttpMethod.Post); } @@ -32,11 +32,11 @@ namespace BBWY.Client.APIServices /// /// /// - public ApiResponse> GetPurchaseSchemeList(string skuId, long shopId) + public ApiResponse> GetPurchaseSchemeList(IList skuIdList, long shopId) { return SendRequest>(globalContext.BBYWApiHost, "api/PurchaseScheme/GetPurchaseSchemeList", - new { skuId, shopId }, + new { skuIdList, shopId }, null, HttpMethod.Post); } diff --git a/BBWY.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs b/BBWY.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs index b6ba39ee..2bc6cd50 100644 --- a/BBWY.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs +++ b/BBWY.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs @@ -20,6 +20,7 @@ namespace BBWY.Client.ViewModels public ICommand DeleteCommand { get; set; } + public ICommand EditCommand { get; set; } public ChoosePurchaseSchemeViewModel(PurchaseService purchaseService, GlobalContext globalContext) { @@ -27,25 +28,26 @@ namespace BBWY.Client.ViewModels this.globalContext = globalContext; PurchaseSchemeList = new ObservableCollection(); DeleteCommand = new RelayCommand(Delete); + EditCommand = new RelayCommand(Edit); } protected override void Load() { PurchaseSchemeList.Clear(); - Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(SkuId, globalContext.User.Shop.ShopId)).ContinueWith(t => - { - var r = t.Result; - if (!r.Success) - { - App.Current.Dispatcher.Invoke(() => MessageBox.Show(r.Msg, "获取采购方案")); - return; - } - - App.Current.Dispatcher.Invoke(() => - { - foreach (var apiModel in r.Data) PurchaseSchemeList.Add(PurchaseScheme.Convert(apiModel)); - }); - }); + Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(new string[] { SkuId }, globalContext.User.Shop.ShopId)).ContinueWith(t => + { + var r = t.Result; + if (!r.Success) + { + App.Current.Dispatcher.Invoke(() => MessageBox.Show(r.Msg, "获取采购方案")); + return; + } + + App.Current.Dispatcher.Invoke(() => + { + foreach (var apiModel in r.Data) PurchaseSchemeList.Add(PurchaseScheme.Convert(apiModel)); + }); + }); } protected override void Unload() @@ -55,6 +57,18 @@ namespace BBWY.Client.ViewModels } public void Delete(PurchaseScheme purchaseScheme) + { + Task.Factory.StartNew(() => purchaseService.DeletePurchaseScheme(purchaseScheme.Id)).ContinueWith(r => + { + var response = r.Result; + if (response.Success) + App.Current.Dispatcher.Invoke(() => PurchaseSchemeList.Remove(purchaseScheme)); + else + App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "删除采购方案")); + }); + } + + public void Edit(PurchaseScheme purchaseScheme) { } diff --git a/BBWY.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs b/BBWY.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs index 041ad975..6876c687 100644 --- a/BBWY.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs +++ b/BBWY.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs @@ -25,7 +25,10 @@ namespace BBWY.Client.ViewModels private string purchaserName; private bool isLoading; - public Product Product { get; set; } + //public Product Product { get; set; } + + public IList ProductSkuList { get; set; } + public string PurchaserId { get; set; } public string PurchaserName { get => purchaserName; set { Set(ref purchaserName, value); } } public string PurchaserLocation { get; set; } @@ -64,9 +67,10 @@ namespace BBWY.Client.ViewModels SavePurchaseSchemeCommand = new RelayCommand(SavePurchaseScheme); } - public void SetData(Product product, string purchaserId, string purchaserName) + public void SetData(IList productSkuList, string purchaserId, string purchaserName) { - this.Product = product; + this.ProductSkuList = productSkuList; + //this.Product = product; this.PurchaserId = purchaserId; this.PurchaserName = purchaserName; } @@ -76,48 +80,48 @@ namespace BBWY.Client.ViewModels if (!string.IsNullOrEmpty(PurchaserId)) { IsLoading = true; - Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(new List() { Product.Id }, PurchaserId, globalContext.User.Shop.ShopId)).ContinueWith(r => - { - var apiResponse = r.Result; - if (!apiResponse.Success) - { - App.Current.Dispatcher.BeginInvoke((Action)delegate - { - MessageBox.Show(apiResponse.Msg, "查询采购方案"); - }); - IsLoading = false; - return; - } - - var purchaseSchemeList = apiResponse.Data; - - var waitList = new List(); - foreach (var sku in Product.SkuList) - { + Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(ProductSkuList.Select(s => s.Id).ToList(), PurchaserId, globalContext.User.Shop.ShopId)).ContinueWith(r => + { + var apiResponse = r.Result; + if (!apiResponse.Success) + { + App.Current.Dispatcher.BeginInvoke((Action)delegate + { + MessageBox.Show(apiResponse.Msg, "查询采购方案"); + }); + IsLoading = false; + return; + } + + var purchaseSchemeList = apiResponse.Data; + + var waitList = new List(); + foreach (var sku in ProductSkuList) + { //当前SKU下当前采购商的采购方案 var apiScheme = purchaseSchemeList.FirstOrDefault(s => s.SkuId == sku.Id && s.PurchaserId == PurchaserId); - if (apiScheme == null) - continue; - - sku.SelectedPurchaseScheme = PurchaseScheme.Convert(apiScheme); - var ewh = new ManualResetEvent(false); - waitList.Add(ewh); - - Task.Factory.StartNew(() => - { - foreach (var purchaseSchemeProduct in sku.SelectedPurchaseScheme.PurchaseSchemeProductList) - { - purchaseSchemeProduct.IsEditing = false; - LoadPurchaseProduct(purchaseSchemeProduct); - } - ewh.Set(); - ewh.Dispose(); - }); - } - WaitHandle.WaitAll(waitList.ToArray()); - IsLoading = false; - }); + if (apiScheme == null) + continue; + + sku.SelectedPurchaseScheme = PurchaseScheme.Convert(apiScheme); + var ewh = new ManualResetEvent(false); + waitList.Add(ewh); + + Task.Factory.StartNew(() => + { + foreach (var purchaseSchemeProduct in sku.SelectedPurchaseScheme.PurchaseSchemeProductList) + { + purchaseSchemeProduct.IsEditing = false; + LoadPurchaseProduct(purchaseSchemeProduct); + } + ewh.Set(); + ewh.Dispose(); + }); + } + WaitHandle.WaitAll(waitList.ToArray()); + IsLoading = false; + }); } } @@ -230,7 +234,7 @@ namespace BBWY.Client.ViewModels { productSku.SelectedPurchaseScheme = new PurchaseScheme() { - ProductId = Product.Id, + ProductId = productSku.ProductId, SkuId = productSku.Id }; } @@ -250,9 +254,9 @@ namespace BBWY.Client.ViewModels private void RemovePurchaseSchemeProduct(PurchaseSchemeProduct purchaseSchemeProduct) { - var productSku = Product.SkuList.FirstOrDefault(sku => sku.Id == purchaseSchemeProduct.SkuId); + var productSku = ProductSkuList.FirstOrDefault(sku => sku.Id == purchaseSchemeProduct.SkuId); productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Remove(purchaseSchemeProduct); - if (!Product.SkuList.Any(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count > 0)) + if (!ProductSkuList.Any(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count > 0)) PurchaserId = string.Empty; } @@ -274,7 +278,7 @@ namespace BBWY.Client.ViewModels MessageBox.Show("未能识别的url"); return; } - var sku = Product.SkuList.FirstOrDefault(s => s.Id == purchaseSchemeProduct.SkuId); + var sku = ProductSkuList.FirstOrDefault(s => s.Id == purchaseSchemeProduct.SkuId); var purchaseUrl = match.Groups[1].Value; if (sku.SelectedPurchaseScheme.PurchaseSchemeProductList.Any(p => p.PurchaseUrl == purchaseUrl)) { @@ -342,7 +346,7 @@ namespace BBWY.Client.ViewModels } purchaseSchemeProduct.IsEditing = false; - var productSku = Product.SkuList.FirstOrDefault(sku => sku.Id == purchaseSchemeProduct.SkuId); + var productSku = ProductSkuList.FirstOrDefault(sku => sku.Id == purchaseSchemeProduct.SkuId); productSku.SelectedPurchaseScheme.PurchaserId = PurchaserId; productSku.SelectedPurchaseScheme.PurchaserName = PurchaserName; productSku.SelectedPurchaseScheme.PurchaserLocation = PurchaserLocation; @@ -357,24 +361,24 @@ namespace BBWY.Client.ViewModels private void SavePurchaseScheme() { - if (!Product.SkuList.Any(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count != 0)) + if (!ProductSkuList.Any(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count != 0)) { MessageBox.Show("没有需要保存的数据,如需删除该采购商所有数据请返回采购商列表进行删除", "提示"); return; } - var hasNoReady = Product.SkuList.Any(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Any(p => p.IsEditing)); + var hasNoReady = ProductSkuList.Any(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Any(p => p.IsEditing)); if (hasNoReady) { MessageBox.Show("存在未保存的数据", "提示"); return; } - var addPurchaseSchemeList = Product.SkuList.Where(s => s.SelectedPurchaseScheme != null && + var addPurchaseSchemeList = ProductSkuList.Where(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count > 0 && s.SelectedPurchaseScheme.Id == 0) .Select(s => s.SelectedPurchaseScheme).ToList(); - var editPurchaseSchemeList = Product.SkuList.Where(s => s.SelectedPurchaseScheme != null && + var editPurchaseSchemeList = ProductSkuList.Where(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count > 0 && s.SelectedPurchaseScheme.Id != 0) .Select(s => s.SelectedPurchaseScheme).ToList(); @@ -409,11 +413,11 @@ namespace BBWY.Client.ViewModels { PurchaserId = PurchaserName = string.Empty; //clear data - foreach (var sku in Product.SkuList) + foreach (var sku in ProductSkuList) { sku.SelectedPurchaseScheme = null; } - Product = null; + //Product = null; e.Cancel = false; } diff --git a/BBWY.Client/ViewModels/Ware/WareManagerViewModel.cs b/BBWY.Client/ViewModels/Ware/WareManagerViewModel.cs index d2d6c315..beba19b2 100644 --- a/BBWY.Client/ViewModels/Ware/WareManagerViewModel.cs +++ b/BBWY.Client/ViewModels/Ware/WareManagerViewModel.cs @@ -143,7 +143,10 @@ namespace BBWY.Client.ViewModels #endregion #region 加载采购方案 - LoadPurchaseScheme(productList); + var skuList = new List(); + foreach (var p in productList) + skuList.AddRange(p.SkuList); + LoadPurchaseScheme(skuList); #endregion App.Current.Dispatcher.BeginInvoke((Action)delegate @@ -185,9 +188,9 @@ namespace BBWY.Client.ViewModels /// 加载采购方案 /// /// - private void LoadPurchaseScheme(IList productList) + private void LoadPurchaseScheme(IList skuList) { - var response = purchaseService.GetPurchaseSchemeList(productList.Select(p => p.Id).ToList(), string.Empty, globalContext.User.Shop.ShopId); + var response = purchaseService.GetPurchaseSchemeList(skuList.Select(s => s.Id).ToList(), string.Empty, globalContext.User.Shop.ShopId); if (!response.Success) { App.Current.Dispatcher.BeginInvoke((Action)delegate { MessageBox.Show(response.Msg, "获取采购方案"); }); @@ -198,16 +201,13 @@ namespace BBWY.Client.ViewModels App.Current.Dispatcher.Invoke(() => { - foreach (var p in productList) + foreach (var s in skuList) { - foreach (var s in p.SkuList) - { - s.PurchaseSchemeList.Clear(); - var currentSchemeList = schemeList.Where(scheme => scheme.SkuId == s.Id); - if (currentSchemeList.Count() > 0) - foreach (var scheme in currentSchemeList) - s.PurchaseSchemeList.Add(PurchaseScheme.Convert(scheme)); - } + s.PurchaseSchemeList.Clear(); + var currentSchemeList = schemeList.Where(scheme => scheme.SkuId == s.Id); + if (currentSchemeList.Count() > 0) + foreach (var scheme in currentSchemeList) + s.PurchaseSchemeList.Add(PurchaseScheme.Convert(scheme)); } }); @@ -297,7 +297,8 @@ namespace BBWY.Client.ViewModels private void OpenBindingView(Product product, string purchaserId, string purchaserName) { - bindingPurchaseProduct.SetData(product, purchaserId, purchaserName); + var skuList = product.SkuList; + bindingPurchaseProduct.SetData(skuList, purchaserId, purchaserName); var bindingView = new Views.Ware.BindingPurchaseProduct(); var r = bindingView.ShowDialog(); if (r == true) @@ -306,7 +307,7 @@ namespace BBWY.Client.ViewModels Task.Factory.StartNew(() => { IsLoading = true; - LoadPurchaseScheme(new List() { product }); + LoadPurchaseScheme(skuList); IsLoading = false; App.Current.Dispatcher.BeginInvoke((Action)delegate { diff --git a/BBWY.Client/Views/Order/ChoosePurchaseScheme.xaml b/BBWY.Client/Views/Order/ChoosePurchaseScheme.xaml index 02c0d25f..2cfb6a11 100644 --- a/BBWY.Client/Views/Order/ChoosePurchaseScheme.xaml +++ b/BBWY.Client/Views/Order/ChoosePurchaseScheme.xaml @@ -50,7 +50,9 @@ + Background="#02A7F0" + Command="{Binding DataContext.EditCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}" + CommandParameter="{Binding }"/> - diff --git a/BBWY.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWY.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 83420052..279a7b25 100644 --- a/BBWY.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWY.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -120,9 +120,8 @@ namespace BBWY.Server.Business { var purchaseSchemeList = fsql.Select().InnerJoin((ps, p) => ps.PurchaserId == p.Id) .Where((ps, p) => ps.ShopId == querySchemeRequest.ShopId) - .WhereIf(querySchemeRequest.ProductIdList != null && querySchemeRequest.ProductIdList.Count() > 0, (ps, p) => querySchemeRequest.ProductIdList.Contains(ps.ProductId)) + .WhereIf(querySchemeRequest.SkuIdList != null && querySchemeRequest.SkuIdList.Count() > 0, (ps, p) => querySchemeRequest.SkuIdList.Contains(ps.SkuId)) .WhereIf(!string.IsNullOrEmpty(querySchemeRequest.PurchaserId), (ps, p) => ps.PurchaserId == querySchemeRequest.PurchaserId) - .WhereIf(!string.IsNullOrEmpty(querySchemeRequest.SkuId), (ps, p) => ps.SkuId == querySchemeRequest.SkuId) .ToList((ps, p) => new PurchaseSchemeResponse() { Id = ps.Id, diff --git a/BBWY.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs b/BBWY.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs index c8c84ea0..b3c92353 100644 --- a/BBWY.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs +++ b/BBWY.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs @@ -8,13 +8,11 @@ namespace BBWY.Server.Model.Dto { public long ShopId { get; set; } - public IList ProductIdList { get; set; } + public IList SkuIdList { get; set; } /// /// 采购商Id, 可空 /// public string PurchaserId { get; set; } - - public string SkuId { get; set; } } }