diff --git a/BBWYB.Client/App.xaml.cs b/BBWYB.Client/App.xaml.cs index 9f2d3f5..9b29706 100644 --- a/BBWYB.Client/App.xaml.cs +++ b/BBWYB.Client/App.xaml.cs @@ -79,6 +79,7 @@ namespace BBWYB.Client serviceCollection.AddTransient(); serviceCollection.AddTransient(); serviceCollection.AddTransient(); + serviceCollection.AddTransient(); serviceCollection.AddMapper(new MappingProfile()); ServiceProvider = serviceCollection.BuildServiceProvider(); base.OnStartup(e); diff --git a/BBWYB.Client/GlobalContext.cs b/BBWYB.Client/GlobalContext.cs index dcc7452..373eabc 100644 --- a/BBWYB.Client/GlobalContext.cs +++ b/BBWYB.Client/GlobalContext.cs @@ -22,7 +22,7 @@ namespace BBWYB.Client { public GlobalContext() { - BBWYBApiVersion = "10030"; + BBWYBApiVersion = "10031"; } private User user; diff --git a/BBWYB.Client/Models/APIModel/Response/PurchaseSchemeProductResponse.cs b/BBWYB.Client/Models/APIModel/Response/PurchaseSchemeProductResponse.cs index 712aaaf..995aa88 100644 --- a/BBWYB.Client/Models/APIModel/Response/PurchaseSchemeProductResponse.cs +++ b/BBWYB.Client/Models/APIModel/Response/PurchaseSchemeProductResponse.cs @@ -13,6 +13,16 @@ namespace BBWYB.Client.Models public string SkuId { get; set; } public long SkuPurchaseSchemeId { get; set; } public long UserId { get; set; } + + public string PurchaserName { get; set; } + + public string PurchaserId { get; set; } + public string PurchaserId2 { get; set; } + + public string PurchaserLocation { get; set; } + + public Platform? PurchasePlatform { get; set; } + public List PurchaseSchemeProductSkuList { get; set; } } diff --git a/BBWYB.Client/Models/APIModel/Response/PurchaseSchemeResponse.cs b/BBWYB.Client/Models/APIModel/Response/PurchaseSchemeResponse.cs index b010fef..01dc224 100644 --- a/BBWYB.Client/Models/APIModel/Response/PurchaseSchemeResponse.cs +++ b/BBWYB.Client/Models/APIModel/Response/PurchaseSchemeResponse.cs @@ -11,20 +11,20 @@ namespace BBWYB.Client.Models /// public decimal? DefaultCost { get; set; } public string ProductId { get; set; } - /// - /// 采购商Id - /// - public string PurchaserId { get; set; } + ///// + ///// 采购商Id + ///// + //public string PurchaserId { get; set; } - /// - /// 采购商Id - /// - public string PurchaserId2 { get; set; } - public string PurchaserName { get; set; } - /// - /// 发货地 - /// - public string PurchaserLocation { get; set; } + ///// + ///// 采购商Id + ///// + //public string PurchaserId2 { get; set; } + //public string PurchaserName { get; set; } + ///// + ///// 发货地 + ///// + //public string PurchaserLocation { get; set; } /// /// 采购实际成本 /// @@ -32,10 +32,10 @@ namespace BBWYB.Client.Models public string SkuId { get; set; } public long ShopId { get; set; } - /// - /// 采购平台 - /// - public Platform PurchasePlatform { get; set; } + ///// + ///// 采购平台 + ///// + //public Platform PurchasePlatform { get; set; } /// /// 最后采购时间 @@ -43,6 +43,8 @@ namespace BBWYB.Client.Models public DateTime? LastPurchaseTime { get; set; } public List PurchaseSchemeProductList { get; set; } + + public List PurchaserList { get; set; } } } diff --git a/BBWYB.Client/Models/PurchaseScheme/PurchaseScheme.cs b/BBWYB.Client/Models/PurchaseScheme/PurchaseScheme.cs index 3d5ad1c..45c82e3 100644 --- a/BBWYB.Client/Models/PurchaseScheme/PurchaseScheme.cs +++ b/BBWYB.Client/Models/PurchaseScheme/PurchaseScheme.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Linq; namespace BBWYB.Client.Models { @@ -21,10 +22,10 @@ namespace BBWYB.Client.Models public decimal DefaultCost { get => defaultCost; set { SetProperty(ref defaultCost, value); } } public decimal RealCost { get => realCost; set { SetProperty(ref realCost, value); } } - public string PurchaserId { get; set; } - public string PurchaserId2 { get; set; } + //public string PurchaserId { get; set; } + //public string PurchaserId2 { get; set; } public string PurchaserName { get; set; } - public string PurchaserLocation { get; set; } + //public string PurchaserLocation { get; set; } public string PurchaseProductId1 { get; set; } public int PurchaseProductSkuCount1 { get; set; } public string PurchaseProductId2 { get; set; } @@ -37,7 +38,7 @@ namespace BBWYB.Client.Models /// /// 采购平台 /// - public Platform PurchasePlatform { get; set; } + //public Platform PurchasePlatform { get; set; } /// /// 最后采购时间 @@ -49,9 +50,12 @@ namespace BBWYB.Client.Models /// public IList PurchaseSchemeProductList { get; set; } + public List PurchaserList { get; set; } + public PurchaseScheme() { PurchaseSchemeProductList = new ObservableCollection(); + PurchaserList = new List(); } /// @@ -68,13 +72,17 @@ namespace BBWYB.Client.Models ProductId = apiModel.ProductId, SkuId = apiModel.SkuId, DefaultCost = apiModel.DefaultCost ?? 0, - RealCost = apiModel.RealCost ?? 0, - PurchaserId = apiModel.PurchaserId, - PurchaserName = apiModel.PurchaserName, - PurchaserLocation = apiModel.PurchaserLocation, - PurchasePlatform = apiModel.PurchasePlatform + RealCost = apiModel.RealCost ?? 0 + //PurchaserId = apiModel.PurchaserId, + //PurchaserName = apiModel.PurchaserName, + //PurchaserLocation = apiModel.PurchaserLocation, + //PurchasePlatform = apiModel.PurchasePlatform }; - + foreach (var p in apiModel.PurchaserList) + { + model.PurchaserList.Add(p); + } + model.PurchaserName = model.PurchaserList.Count() == 1 ? model.PurchaserList[0].Name : $"{model.PurchaserList[0].Name}等{model.PurchaserList.Count()}个采购商"; foreach (var apiProduct in apiModel.PurchaseSchemeProductList) { model.PurchaseSchemeProductList.Add(PurchaseSchemeProduct.Convert(apiProduct)); diff --git a/BBWYB.Client/Models/PurchaseScheme/PurchaseSchemeProduct.cs b/BBWYB.Client/Models/PurchaseScheme/PurchaseSchemeProduct.cs index 16bc54e..052bbca 100644 --- a/BBWYB.Client/Models/PurchaseScheme/PurchaseSchemeProduct.cs +++ b/BBWYB.Client/Models/PurchaseScheme/PurchaseSchemeProduct.cs @@ -28,6 +28,12 @@ namespace BBWYB.Client.Models public string PurchaseUrl { get => purchaseUrl; set { SetProperty(ref purchaseUrl, value); } } public string PurchaseProductId { get => purchaseProductId; set => purchaseProductId = value; } + public string PurchaserId { get; set; } + public string PurchaserId2 { get; set; } + public string PurchaserLocation { get; set; } + public string PurchaserName { get; set; } + public Platform PurchasePlatform { get; set; } + public bool IsEditing { get => isEditing; @@ -79,7 +85,12 @@ namespace BBWYB.Client.Models ProductId = apiModel.ProductId, SkuId = apiModel.SkuId, PurchaseProductId = apiModel.PurchaseProductId, - PurchaseUrl = apiModel.PurchaseUrl + PurchaseUrl = apiModel.PurchaseUrl, + PurchaserId = apiModel.PurchaserId, + PurchaserId2 = apiModel.PurchaserId2, + PurchaserName = apiModel.PurchaserName, + PurchasePlatform = apiModel.PurchasePlatform.Value, + PurchaserLocation = apiModel.PurchaserLocation }; model.SelectedSkuIdList.AddRange(apiModel.PurchaseSchemeProductSkuList.Select(s => s.PurchaseSkuId)); return model; diff --git a/BBWYB.Client/ViewModels/MainViewModel.cs b/BBWYB.Client/ViewModels/MainViewModel.cs index 233aafa..766958f 100644 --- a/BBWYB.Client/ViewModels/MainViewModel.cs +++ b/BBWYB.Client/ViewModels/MainViewModel.cs @@ -87,14 +87,14 @@ namespace BBWYB.Client.ViewModels { App.Current.Dispatcher.Invoke(() => { - MenuList.Add(new MenuModel() - { - Name = "订单管理", - ChildList = new List() - { - new MenuModel(){ Name="订单列表",Url="/Views/Order/OrderList.xaml" } - } - }); + //MenuList.Add(new MenuModel() + //{ + // Name = "订单管理", + // ChildList = new List() + // { + // new MenuModel(){ Name="订单列表",Url="/Views/Order/OrderList.xaml" } + // } + //}); MenuList.Add(new MenuModel() { Name = "商品管理", diff --git a/BBWYB.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs b/BBWYB.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs index b445e3c..b5c3b97 100644 --- a/BBWYB.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs +++ b/BBWYB.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs @@ -117,17 +117,17 @@ namespace BBWYB.Client.ViewModels if (!isResponse) return; isResponse = false; - var purchaserId = skuGroup.SelectedScheme.PurchaserId; + //var purchaserId = skuGroup.SelectedScheme.PurchaserId; - foreach (var otherSkuGroup in SkuGroup) - { - if (otherSkuGroup.SkuId == skuGroup.SkuId) - continue; + //foreach (var otherSkuGroup in SkuGroup) + //{ + // if (otherSkuGroup.SkuId == skuGroup.SkuId) + // continue; - var samePurchaseScheme = otherSkuGroup.SchemeList.FirstOrDefault(s => s.PurchaserId == purchaserId); - if (samePurchaseScheme != null) - otherSkuGroup.SelectedScheme = samePurchaseScheme; - } + // var samePurchaseScheme = otherSkuGroup.SchemeList.FirstOrDefault(s => s.PurchaserId == purchaserId); + // if (samePurchaseScheme != null) + // otherSkuGroup.SelectedScheme = samePurchaseScheme; + //} isResponse = true; } diff --git a/BBWYB.Client/ViewModels/Purchase/OnlinePurchaseViewModel.cs b/BBWYB.Client/ViewModels/Purchase/OnlinePurchaseViewModel.cs index 5358607..ed49682 100644 --- a/BBWYB.Client/ViewModels/Purchase/OnlinePurchaseViewModel.cs +++ b/BBWYB.Client/ViewModels/Purchase/OnlinePurchaseViewModel.cs @@ -135,8 +135,8 @@ namespace BBWYB.Client.ViewModels Logo = orderSku.Logo, Price = orderSku.Price.Value, ProductId = scheme.ProductId, - PurchasePlatform = scheme.PurchasePlatform, - PurchaserId = scheme.PurchaserId, + //PurchasePlatform = scheme.PurchasePlatform, + //PurchaserId = scheme.PurchaserId, PurchaserName = scheme.PurchaserName, PurchaseSchemeId = scheme.Id, Quantity = orderSku.ItemTotal, diff --git a/BBWYB.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs b/BBWYB.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs index 85775b6..26cb3c9 100644 --- a/BBWYB.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs +++ b/BBWYB.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs @@ -4,9 +4,11 @@ using BBWYB.Client.Views.Ware; using BBWYB.Common.Models; using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Messaging; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Text.RegularExpressions; using System.Threading; @@ -16,17 +18,17 @@ using System.Windows.Input; namespace BBWYB.Client.ViewModels { - public class BindingPurchaseProductViewModel : BaseVM, IDenpendency + public class BindingPurchaseProductViewModel : BaseVM { #region Properties private GlobalContext globalContext; private PurchaseService purchaseService; private PurchaseProductAPIService purchaseProductAPIService; - private string purchaserName; + //private string purchaserName; private bool isLoading; - - private Platform purchasePlatform; + private long? schemeId; + //private Platform purchasePlatform; private IDictionary urlPatternDictionary; @@ -34,15 +36,18 @@ namespace BBWYB.Client.ViewModels public IList ProductSkuList { get; set; } - public string PurchaserId { get; set; } + //public string PurchaserId { get; set; } + + //public string PurchaserId2 { get; set; } - public string PurchaserId2 { get; set; } + //public string PurchaserName { get => purchaserName; set { SetProperty(ref purchaserName, value); } } + //public string PurchaserLocation { get; set; } - public string PurchaserName { get => purchaserName; set { SetProperty(ref purchaserName, value); } } - public string PurchaserLocation { get; set; } public bool IsLoading { get => isLoading; set { SetProperty(ref isLoading, value); } } - public Platform PurchasePlatform { get => purchasePlatform; set { SetProperty(ref purchasePlatform, value); } } + public long? SchemeId { get => schemeId; set { SetProperty(ref schemeId, value); } } + + //public Platform PurchasePlatform { get => purchasePlatform; set { SetProperty(ref purchasePlatform, value); } } #endregion @@ -86,68 +91,130 @@ namespace BBWYB.Client.ViewModels { Platform.阿里巴巴,@"^(https://detail.1688.com/offer/(\d+).html)[^\s]*" }, //{ Platform.拳探, @"^(https://qt.qiyue666.com/goods_detail/(\d+))(\?\w*)?$" } }; + ProductSkuList = new ObservableCollection(); } - public void SetData(IList productSkuList, string purchaserId, string purchaserId2, string purchaserName, Platform purchasePlatform) + //public void SetData(IList productSkuList, string purchaserId, string purchaserId2, string purchaserName, Platform purchasePlatform) + //{ + // this.ProductSkuList = productSkuList; + // //this.Product = product; + // this.PurchaserId = purchaserId; + // this.PurchaserId2 = purchaserId2; + // this.PurchaserName = purchaserName; + // this.PurchasePlatform = purchasePlatform; + //} + + public void SetData(IList productSkuList, long? schemeId) { - this.ProductSkuList = productSkuList; + foreach (var productSku in productSkuList) + ProductSkuList.Add(productSku); + this.SchemeId = schemeId; //this.Product = product; - this.PurchaserId = purchaserId; - this.PurchaserId2 = purchaserId2; - this.PurchaserName = purchaserName; - this.PurchasePlatform = purchasePlatform; + //this.PurchaserId = purchaserId; + //this.PurchaserId2 = purchaserId2; + //this.PurchaserName = purchaserName; + //this.PurchasePlatform = purchasePlatform; } protected override void Load() { - if (!string.IsNullOrEmpty(PurchaserId)) + if (this.SchemeId != null) { IsLoading = true; - Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(ProductSkuList.Select(s => s.Id).ToList(), PurchaserId, globalContext.User.Shop.ShopId, purchasePlatform: PurchasePlatform)).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(sku.SelectedPurchaseScheme.PurchasePlatform, purchaseSchemeProduct, purchaseSchemeProduct.PurchaseProductId, null, out _); - } - ewh.Set(); - ewh.Dispose(); - }); - } - WaitHandle.WaitAll(waitList.ToArray()); - IsLoading = false; - }); + var skuIdList = ProductSkuList.Select(s => s.Id).ToList(); + var sku = ProductSkuList.FirstOrDefault(); + Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(skuIdList, shopId: globalContext.User.Shop.ShopId, schemeId: SchemeId)).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 apiScheme = purchaseSchemeList.FirstOrDefault(); + if (apiScheme == null) + { + IsLoading = false; + return; + } + sku.SelectedPurchaseScheme = PurchaseScheme.Convert(apiScheme); + var ewh = new ManualResetEvent(false); + + var waitList = new List(); + waitList.Add(ewh); + + Task.Factory.StartNew(() => + { + foreach (var purchaseSchemeProduct in sku.SelectedPurchaseScheme.PurchaseSchemeProductList) + { + purchaseSchemeProduct.IsEditing = false; + LoadPurchaseProduct(purchaseSchemeProduct.PurchasePlatform, purchaseSchemeProduct, purchaseSchemeProduct.PurchaseProductId, null, out _); + } + ewh.Set(); + ewh.Dispose(); + }); + WaitHandle.WaitAll(waitList.ToArray()); + IsLoading = false; + }); } } + //protected override void Load() + //{ + // if (!string.IsNullOrEmpty(PurchaserId)) + // { + // IsLoading = true; + // Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(ProductSkuList.Select(s => s.Id).ToList(), PurchaserId, globalContext.User.Shop.ShopId, purchasePlatform: PurchasePlatform)).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(sku.SelectedPurchaseScheme.PurchasePlatform, purchaseSchemeProduct, purchaseSchemeProduct.PurchaseProductId, null, out _); + // } + // ewh.Set(); + // ewh.Dispose(); + // }); + // } + // WaitHandle.WaitAll(waitList.ToArray()); + // IsLoading = false; + // }); + // } + //} + public void LoadPurchaseProduct(Platform platform, PurchaseSchemeProduct purchaseSchemeProduct, string purchaseProductId, Func checkPurchaserFunc, out string errorMsg) { errorMsg = string.Empty; @@ -180,10 +247,15 @@ namespace BBWYB.Client.ViewModels return; } - PurchaserId = data.Value.purchaser.Id; - PurchaserId2 = data.Value.purchaser.Id2; - PurchaserName = data.Value.purchaser.Name; - PurchaserLocation = data.Value.purchaser.Location; + purchaseSchemeProduct.PurchaserId = data.Value.purchaser.Id; + purchaseSchemeProduct.PurchaserId2 = data.Value.purchaser.Id2; + purchaseSchemeProduct.PurchaserName = data.Value.purchaser.Name; + purchaseSchemeProduct.PurchaserLocation = data.Value.purchaser.Location; + + //PurchaserId = data.Value.purchaser.Id; + //PurchaserId2 = data.Value.purchaser.Id2; + //PurchaserName = data.Value.purchaser.Name; + //PurchaserLocation = data.Value.purchaser.Location; App.Current.Dispatcher.BeginInvoke((Action)delegate { @@ -214,8 +286,7 @@ namespace BBWYB.Client.ViewModels productSku.SelectedPurchaseScheme = new PurchaseScheme() { ProductId = productSku.ProductId, - SkuId = productSku.Id, - PurchasePlatform = PurchasePlatform + SkuId = productSku.Id }; } else if (productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Count >= 4) @@ -229,7 +300,8 @@ namespace BBWYB.Client.ViewModels Id = DateTime.Now.ToFileTime(), IsEditing = true, ProductId = productSku.ProductId, - SkuId = productSku.Id + SkuId = productSku.Id, + PurchasePlatform = Platform.阿里巴巴 //B端写死只能1688 }); } @@ -237,8 +309,8 @@ namespace BBWYB.Client.ViewModels { var productSku = ProductSkuList.FirstOrDefault(sku => sku.Id == purchaseSchemeProduct.SkuId); productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Remove(purchaseSchemeProduct); - if (!ProductSkuList.Any(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count > 0)) - PurchaserId = string.Empty; + //if (!ProductSkuList.Any(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count > 0)) + // PurchaserId = string.Empty; } /// @@ -254,7 +326,7 @@ namespace BBWYB.Client.ViewModels return; } - urlPatternDictionary.TryGetValue(PurchasePlatform, out string pattern); + urlPatternDictionary.TryGetValue(purchaseSchemeProduct.PurchasePlatform, out string pattern); var match = Regex.Match(purchaseSchemeProduct.PurchaseUrl, pattern); if (!match.Success) @@ -276,13 +348,13 @@ namespace BBWYB.Client.ViewModels Task.Factory.StartNew(() => { - LoadPurchaseProduct(sku.SelectedPurchaseScheme.PurchasePlatform, purchaseSchemeProduct, purchaseProductId, (p) => + LoadPurchaseProduct(purchaseSchemeProduct.PurchasePlatform, purchaseSchemeProduct, purchaseProductId, (p) => { - if (sku.PurchaseSchemeList.Any(s => s.Id != sku.SelectedPurchaseScheme.Id && s.PurchaserId == p)) - return $"sku{sku.Id}的采购方案中已存在相同的采购商"; //同一个sku中的采购方案不能有相同的采购商 + //if (sku.PurchaseSchemeList.Any(s => s.Id != sku.SelectedPurchaseScheme.Id && s.PurchaserId == p)) + // return $"sku{sku.Id}的采购方案中已存在相同的采购商"; //同一个sku中的采购方案不能有相同的采购商 - if (!string.IsNullOrEmpty(PurchaserId) && p != PurchaserId) //同一批操作的sku必须为相同的采购商 - return "采购商必须相同"; + //if (!string.IsNullOrEmpty(PurchaserId) && p != PurchaserId) //同一批操作的sku必须为相同的采购商 + // return "采购商必须相同"; return string.Empty; }, out string errorMsg); @@ -319,10 +391,10 @@ namespace BBWYB.Client.ViewModels purchaseSchemeProduct.IsEditing = false; var productSku = ProductSkuList.FirstOrDefault(sku => sku.Id == purchaseSchemeProduct.SkuId); - productSku.SelectedPurchaseScheme.PurchaserId = PurchaserId; - productSku.SelectedPurchaseScheme.PurchaserId2 = PurchaserId2; - productSku.SelectedPurchaseScheme.PurchaserName = PurchaserName; - productSku.SelectedPurchaseScheme.PurchaserLocation = PurchaserLocation; + //productSku.SelectedPurchaseScheme.PurchaserId = PurchaserId; + //productSku.SelectedPurchaseScheme.PurchaserId2 = PurchaserId2; + //productSku.SelectedPurchaseScheme.PurchaserName = PurchaserName; + //productSku.SelectedPurchaseScheme.PurchaserLocation = PurchaserLocation; productSku.SelectedPurchaseScheme.DefaultCost = productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Sum(p => p.PurchaseSchemeProductSkuList.Count() == 0 ? 0 : p.PurchaseSchemeProductSkuList.Sum(s => s.Price)); } @@ -385,12 +457,13 @@ namespace BBWYB.Client.ViewModels private void Closing(System.ComponentModel.CancelEventArgs e) { - PurchaserId = PurchaserName = string.Empty; + this.SchemeId = null; //clear data foreach (var sku in ProductSkuList) { sku.SelectedPurchaseScheme = null; } + this.ProductSkuList.Clear(); //Product = null; e.Cancel = false; } diff --git a/BBWYB.Client/ViewModels/Ware/WareManagerViewModel.cs b/BBWYB.Client/ViewModels/Ware/WareManagerViewModel.cs index 5661f0a..52b0f7c 100644 --- a/BBWYB.Client/ViewModels/Ware/WareManagerViewModel.cs +++ b/BBWYB.Client/ViewModels/Ware/WareManagerViewModel.cs @@ -20,7 +20,7 @@ namespace BBWYB.Client.ViewModels #region Properties private PurchaseService purchaseService; private ProductService productService; - private BindingPurchaseProductViewModel bindingPurchaseProduct; + //private BindingPurchaseProductViewModel bindingPurchaseProduct; private GlobalContext globalContext; private bool isLoading; private int pageIndex = 1; @@ -45,22 +45,32 @@ namespace BBWYB.Client.ViewModels #endregion #region Commands - public ICommand AddPurchaserCommand { get; set; } - public ICommand EditPurchaserCommand { get; set; } - public ICommand DeletePurchaserCommand { get; set; } + //public ICommand AddPurchaserCommand { get; set; } + //public ICommand EditPurchaserCommand { get; set; } + //public ICommand DeletePurchaserCommand { get; set; } public ICommand SearchCommand { get; set; } public ICommand ProductPageIndexChangedCommand { get; set; } public ICommand SwitchPurchasePlatformCommand { get; set; } + + public ICommand AddSchemeCommand { get; set; } + + public ICommand EditSchemeCommand { get; set; } + + public ICommand DeleteSchemeCommand { get; set; } #endregion #region Methods public WareManagerViewModel(GlobalContext globalContext, BindingPurchaseProductViewModel bindingPurchaseProduct, PurchaseService purchaseService, ProductService productService) { PageSize = 5; - AddPurchaserCommand = new RelayCommand(AddPurchaser); - EditPurchaserCommand = new RelayCommand(EditPurchaser); - DeletePurchaserCommand = new RelayCommand(DeletePurchaser); + //AddPurchaserCommand = new RelayCommand(AddPurchaser); + //EditPurchaserCommand = new RelayCommand(EditPurchaser); + //DeletePurchaserCommand = new RelayCommand(DeletePurchaser); + AddSchemeCommand = new RelayCommand(AddScheme); + EditSchemeCommand = new RelayCommand(EditScheme); + DeleteSchemeCommand = new RelayCommand(DeleteScheme); + SwitchPurchasePlatformCommand = new RelayCommand(SwitchPurchasePlatform); SearchCommand = new RelayCommand(() => { @@ -71,7 +81,7 @@ namespace BBWYB.Client.ViewModels this.purchaseService = purchaseService; this.productService = productService; this.globalContext = globalContext; - this.bindingPurchaseProduct = bindingPurchaseProduct; + //this.bindingPurchaseProduct = bindingPurchaseProduct; ProductList = new ObservableCollection(); Task.Factory.StartNew(() => LoadWare(1)); } @@ -164,7 +174,7 @@ namespace BBWYB.Client.ViewModels { foreach (var p in productList) ProductList.Add(p); - ExtractPurchaser(); + //ExtractPurchaser(); //使滚动条保持顶部 //Messenger.Default.Send(string.Empty, "WareManager_ProductListScrollToTop"); WeakReferenceMessenger.Default.Send(new Message_WareManager_ProductListScrollToTop(null)); @@ -227,96 +237,142 @@ namespace BBWYB.Client.ViewModels /// /// 提取SKU中的采购商到商品的采购商列表中 /// - private void ExtractPurchaser(string productId = "") + //private void ExtractPurchaser(string productId = "") + //{ + // var productList = string.IsNullOrEmpty(productId) ? ProductList : ProductList.Where(p => p.Id == productId); + // foreach (var product in productList) + // { + // product.PurchaserList.Clear(); + // foreach (var sku in product.SkuList) + // { + // if (sku.PurchaseSchemeList.Count() > 0) + // { + // foreach (var pscheme in sku.PurchaseSchemeList) + // { + // var purchaser = product.PurchaserList.FirstOrDefault(purchaser => purchaser.Id == pscheme.PurchaserId); + // if (purchaser == null) + // { + // purchaser = new Purchaser() + // { + // Id = pscheme.PurchaserId, + // Id2 = pscheme.PurchaserId2, + // Name = pscheme.PurchaserName, + // ProductId = product.Id + // }; + // product.PurchaserList.Add(purchaser); + // } + // purchaser.SkuUseCount++; + // } + // } + // } + // } + //} + + //private void AddPurchaser(Product product) + //{ + // if (product.PurchaserList.Count >= 5) + // { + // MessageBox.Show("一个SPU内最多允许5个采购商"); + // return; + // } + + // OpenBindingView(product, string.Empty, string.Empty, string.Empty); + //} + + //private void EditPurchaser(Purchaser purchaser) + //{ + // var product = ProductList.FirstOrDefault(p => p.Id == purchaser.ProductId); + // OpenBindingView(product, purchaser.Id, purchaser.Id2, purchaser.Name); + //} + + //private void DeletePurchaser(Purchaser purchaser) + //{ + // if (MessageBox.Show("确认删除该采购商吗?", "提示", MessageBoxButton.OKCancel) != MessageBoxResult.OK) + // return; + // IsLoading = true; + // Task.Factory.StartNew(() => + // { + // var response = purchaseService.DeletePurchaser(purchaser.ProductId, purchaser.Id); + // IsLoading = false; + // if (response.Success) + // { + // App.Current.Dispatcher.BeginInvoke((Action)delegate + // { + // var product = ProductList.FirstOrDefault(p => p.Id == purchaser.ProductId); + // if (product != null) + // { + // foreach (var sku in product.SkuList) + // { + // var deleteScheme = sku.PurchaseSchemeList.FirstOrDefault(s => s.PurchaserId == purchaser.Id); + // if (deleteScheme != null) + // sku.PurchaseSchemeList.Remove(deleteScheme); + // } + // product.PurchaserList.Remove(purchaser); + // } + // MessageBox.Show("采购商删除成功", "提示"); + // }); + // } + // else + // { + // App.Current.Dispatcher.BeginInvoke((Action)delegate + // { + // MessageBox.Show(response.Msg, "采购商删除"); + // }); + // } + // }); + //} + + private void AddScheme(Product product) { - var productList = string.IsNullOrEmpty(productId) ? ProductList : ProductList.Where(p => p.Id == productId); - foreach (var product in productList) - { - product.PurchaserList.Clear(); - foreach (var sku in product.SkuList) - { - if (sku.PurchaseSchemeList.Count() > 0) - { - foreach (var pscheme in sku.PurchaseSchemeList) - { - var purchaser = product.PurchaserList.FirstOrDefault(purchaser => purchaser.Id == pscheme.PurchaserId); - if (purchaser == null) - { - purchaser = new Purchaser() - { - Id = pscheme.PurchaserId, - Id2 = pscheme.PurchaserId2, - Name = pscheme.PurchaserName, - ProductId = product.Id - }; - product.PurchaserList.Add(purchaser); - } - purchaser.SkuUseCount++; - } - } - } - } - } - - private void AddPurchaser(Product product) - { - if (product.PurchaserList.Count >= 5) - { - MessageBox.Show("一个SPU内最多允许5个采购商"); - return; - } - - OpenBindingView(product, string.Empty, string.Empty, string.Empty); + OpenBindingView(product, string.Empty, null); } - private void EditPurchaser(Purchaser purchaser) + private void EditScheme(PurchaseScheme purchaseScheme) { - var product = ProductList.FirstOrDefault(p => p.Id == purchaser.ProductId); - OpenBindingView(product, purchaser.Id, purchaser.Id2, purchaser.Name); + var product = ProductList.FirstOrDefault(p => p.Id == purchaseScheme.ProductId); + OpenBindingView(product, purchaseScheme.SkuId, purchaseScheme.Id); } - private void DeletePurchaser(Purchaser purchaser) + private void DeleteScheme(PurchaseScheme purchaseScheme) { - if (MessageBox.Show("确认删除该采购商吗?", "提示", MessageBoxButton.OKCancel) != MessageBoxResult.OK) + if (MessageBox.Show("确定删除该采购方案吗?", "提示", MessageBoxButton.OKCancel) != MessageBoxResult.OK) return; IsLoading = true; - Task.Factory.StartNew(() => - { - var response = purchaseService.DeletePurchaser(purchaser.ProductId, purchaser.Id); - IsLoading = false; - if (response.Success) - { - App.Current.Dispatcher.BeginInvoke((Action)delegate - { - var product = ProductList.FirstOrDefault(p => p.Id == purchaser.ProductId); - if (product != null) + Task.Factory.StartNew(() => purchaseService.DeletePurchaseScheme(purchaseScheme.Id)) + .ContinueWith(t => { - foreach (var sku in product.SkuList) + IsLoading = false; + var response = t.Result; + if (!response.Success) { - var deleteScheme = sku.PurchaseSchemeList.FirstOrDefault(s => s.PurchaserId == purchaser.Id); - if (deleteScheme != null) - sku.PurchaseSchemeList.Remove(deleteScheme); + App.Current.Dispatcher.BeginInvoke((Action)delegate + { + MessageBox.Show(response.Msg, "删除采购方案"); + }); + return; } - product.PurchaserList.Remove(purchaser); - } - MessageBox.Show("采购商删除成功", "提示"); - }); - } - else - { - App.Current.Dispatcher.BeginInvoke((Action)delegate - { - MessageBox.Show(response.Msg, "采购商删除"); - }); - } - }); + App.Current.Dispatcher.Invoke(() => + { + var product = ProductList.FirstOrDefault(p => p.Id == purchaseScheme.ProductId); + if (product != null) + { + var sku = product.SkuList.FirstOrDefault(s => s.Id == purchaseScheme.SkuId); + if (sku != null) + { + sku.PurchaseSchemeList.Remove(purchaseScheme); + } + } + MessageBox.Show("采购方案删除成功", "提示"); + }); + }); } - private void OpenBindingView(Product product, string purchaserId, string purchaserId2, string purchaserName) + private void OpenBindingView(Product product, string skuId, long? schemeId) { - var skuList = product.SkuList; - bindingPurchaseProduct.SetData(skuList, purchaserId, purchaserId2, purchaserName, product.SelectedPurchasePlatformModel); - var bindingView = new BindingPurchaseProduct(); + var skuList = string.IsNullOrEmpty(skuId) ? product.SkuList : product.SkuList.Where(s => s.Id == skuId).ToList(); + //bindingPurchaseProduct.SetData(skuList, purchaserId, purchaserId2, purchaserName, product.SelectedPurchasePlatformModel); + //bindingPurchaseProduct.SetData(); + var bindingView = new BindingPurchaseProduct(skuList, schemeId); var r = bindingView.ShowDialog(); if (r == true) { @@ -328,7 +384,7 @@ namespace BBWYB.Client.ViewModels IsLoading = false; App.Current.Dispatcher.BeginInvoke((Action)delegate { - ExtractPurchaser(product.Id); + //ExtractPurchaser(product.Id); }); }); } @@ -345,7 +401,7 @@ namespace BBWYB.Client.ViewModels Task.Factory.StartNew(() => LoadPurchaseScheme(product.SkuList, platform)) .ContinueWith(t => { - App.Current.Dispatcher.Invoke(() => ExtractPurchaser(productId)); + //App.Current.Dispatcher.Invoke(() => ExtractPurchaser(productId)); IsLoading = false; }); } diff --git a/BBWYB.Client/Views/Ware/BindingPurchaseProduct.xaml b/BBWYB.Client/Views/Ware/BindingPurchaseProduct.xaml index b1ab4a4..31fdd4a 100644 --- a/BBWYB.Client/Views/Ware/BindingPurchaseProduct.xaml +++ b/BBWYB.Client/Views/Ware/BindingPurchaseProduct.xaml @@ -25,7 +25,7 @@ - + public partial class BindingPurchaseProduct : BWindow { - public BindingPurchaseProduct() + private BindingPurchaseProductViewModel bindingVM; + public BindingPurchaseProduct(IList productSkuList, long? schemeId) { InitializeComponent(); - //Messenger.Default.Register(this, "BindingPurchaseProduct_Close", (x) => - // { - // this.Dispatcher.Invoke(() => - // { - // this.DialogResult = x; - // this.Close(); - // }); - // }); - + bindingVM = this.DataContext as BindingPurchaseProductViewModel; + bindingVM.SetData(productSkuList, schemeId); WeakReferenceMessenger.Default.Register(this, (o, x) => { this.Dispatcher.Invoke(() => diff --git a/BBWYB.Client/Views/Ware/WareManager.xaml b/BBWYB.Client/Views/Ware/WareManager.xaml index 505200b..c19224b 100644 --- a/BBWYB.Client/Views/Ware/WareManager.xaml +++ b/BBWYB.Client/Views/Ware/WareManager.xaml @@ -42,7 +42,7 @@ - + @@ -79,7 +79,7 @@ - + - + @@ -110,8 +110,11 @@ - + + + - + @@ -177,6 +180,8 @@ + + + + + + + + + + + + + + + + + + + + + @@ -216,7 +249,9 @@ - + + + @@ -269,7 +304,7 @@ - - + --> - + - /// 修复采购商信息 - /// - [HttpPost] - public void SupplementPurchaserInfo() - { - dataRepairBusiness.SupplementPurchaserInfo(); - } - /// /// 修复订单Sku成本 /// diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index 1444c88..1b87505 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -38,15 +38,15 @@ namespace BBWYB.Server.API.Controllers return purchaseSchemeBusiness.GetPurchaseSchemeList(querySchemeRequest); } - /// - /// 删除采购商 - /// - /// - [HttpDelete] - public void DeletePurchaser([FromBody] DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) - { - purchaseSchemeBusiness.DeletePurchaser(deletePurchaseSchemeRequest); - } + ///// + ///// 删除采购商 + ///// + ///// + //[HttpDelete] + //public void DeletePurchaser([FromBody] DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) + //{ + // purchaseSchemeBusiness.DeletePurchaser(deletePurchaseSchemeRequest); + //} /// /// 删除采购方案 @@ -58,16 +58,16 @@ namespace BBWYB.Server.API.Controllers purchaseSchemeBusiness.DeletePurchaseScheme(schemeId); } - /// - /// 查询共有采购商 - /// - /// - /// - [HttpPost] - public IList GetSharePurchaser([FromBody] QuerySchemeRequest querySchemeRequest) - { - return purchaseSchemeBusiness.GetSharePurchaser(querySchemeRequest); - } + ///// + ///// 查询共有采购商 + ///// + ///// + ///// + //[HttpPost] + //public IList GetSharePurchaser([FromBody] QuerySchemeRequest querySchemeRequest) + //{ + // return purchaseSchemeBusiness.GetSharePurchaser(querySchemeRequest); + //} /// /// 查询采购方案中采购Sku的基本信息 diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index f70c444..dcf2821 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -38,73 +38,6 @@ namespace BBWYB.Server.Business purchaseOrderBusiness.OnSomeOnePurchaseOrderChanged(pid, false); } - public void SupplementPurchaserInfo() - { - var purlList = fsql.Select() - .InnerJoin((psp, ps, p) => psp.SkuPurchaseSchemeId == ps.Id) - .InnerJoin((psp, ps, p) => ps.PurchaserId == p.Id) - .Where((psp, ps, p) => ps.PurchasePlatform == Enums.Platform.阿里巴巴 && string.IsNullOrEmpty(p.Id2)) - .ToList((psp, ps, p) => new - { - //psp.PurchaseUrl, - psp.PurchaseProductId, - p.Id - }); - var groups = purlList.GroupBy(p => p.Id); - Console.WriteLine(groups.Count()); - IList> updatePurchaserList = new List>(); - int i = 1; - foreach (var group in groups) - { - var purchaseId = group.Key; - var productId = group.Max(p => p.PurchaseProductId); - Thread.Sleep(1000); - Console.WriteLine(); - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine($"index {i}"); - Console.ResetColor(); - Console.WriteLine(); - var response = purchaseSchemeBusiness.GetPurchaseSkuBasicInfo(new PurchaseSkuBasicInfoRequest() - { - FirstApiMode = Enums.PurchaseProductAPIMode.Spider, - Platform = Enums.Platform.阿里巴巴, - PriceMode = Enums.PurchaseOrderMode.批发, - PurchaseProductId = productId - }); - if (!string.IsNullOrEmpty(response?.Purchaser?.Id2)) - { - if (response.Purchaser.Id2.Length > 20) - Console.WriteLine(response.Purchaser.Id2); - var update = fsql.Update(purchaseId).Set(p => p.Id2, response.Purchaser.Id2); - updatePurchaserList.Add(update); - } - i++; - - if (updatePurchaserList.Count >= 10) - { - fsql.Transaction(() => - { - foreach (var update in updatePurchaserList) - update.ExecuteAffrows(); - }); - updatePurchaserList.Clear(); - Console.WriteLine(); - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("更新数据库更新"); - Console.ResetColor(); - Console.WriteLine(); - } - } - - if (updatePurchaserList.Count() > 0) - { - fsql.Transaction(() => - { - foreach (var update in updatePurchaserList) - update.ExecuteAffrows(); - }); - } - } public void SupplementOrderSkuCost() { diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index d91f624..a83adf7 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -36,6 +36,7 @@ namespace BBWYB.Server.Business private Lazy jdBusinessLazy; private Lazy opPlatformClientFactoryLazy; private Lazy venderBusinessLazy; + private Lazy purchaseSchemeBusinessLazy; private PP_PlatformClientFactory ppPlatformClientFactory => pplatformClientFactoryLazy.Value; private TaskSchedulerManager taskSchedulerManager => taskSchedulerManagerLazy.Value; @@ -50,6 +51,8 @@ namespace BBWYB.Server.Business private JDBusiness jdBusiness => jdBusinessLazy.Value; + private PurchaseSchemeBusiness purchaseSchemeBusiness => purchaseSchemeBusinessLazy.Value; + private IList cantPurchaseOrderStateList; public PurchaseOrderBusiness(IFreeSql fsql, @@ -68,6 +71,7 @@ namespace BBWYB.Server.Business jdBusinessLazy = new Lazy(() => serviceProvider.GetService()); opPlatformClientFactoryLazy = new Lazy(() => serviceProvider.GetService()); venderBusinessLazy = new Lazy(() => serviceProvider.GetService()); + purchaseSchemeBusinessLazy = new Lazy(() => serviceProvider.GetService()); cantPurchaseOrderStateList = new List() { Enums.OrderState.已取消, @@ -745,12 +749,13 @@ namespace BBWYB.Server.Business { if (purchaseOrder.PurchasePlatform == Enums.Platform.阿里巴巴) { - #region 补齐采购SKU + #region 补齐采购SKU和采购关系 var purchaseAccount = dbPurchaseAccountList.FirstOrDefault(pa => pa.Id == purchaseOrder.PurchaseAccountId || pa.AccountName == purchaseOrder.PurchaseAccountName); if (purchaseAccount == null) throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId}缺少有效的采购账号"); + #region 查询1688采购单 var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)purchaseOrder.PurchasePlatform); var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() { @@ -759,6 +764,7 @@ namespace BBWYB.Server.Business AppToken = purchaseAccount.AppToken, OrderId = purchaseOrder.PurchaseOrderId }); + #endregion #region 处理采购商Id var purchaserId = purchaseOrderSimpleInfo.PurchaserId; @@ -778,58 +784,29 @@ namespace BBWYB.Server.Business #region 匹配采购方案 var skuIds = purchaseOrder.AssocationOrderCostDetailList.Select(ocd => ocd.SkuId).ToList(); - var purchaseSchemeSkuList = fsql.Select() - .InnerJoin((p, ps, pss) => p.Id == ps.PurchaserId) - .InnerJoin((p, ps, pss) => ps.Id == pss.SkuPurchaseSchemeId) - .Where((p, ps, pss) => p.Id == purchaserId) - .Where((p, ps, pss) => ps.PurchasePlatform == Enums.Platform.阿里巴巴) - .Where((p, ps, pss) => skuIds.Contains(pss.SkuId)) - .ToList((p, ps, pss) => new - { - pss.Id, - pss.SkuId, - pss.ProductId, - pss.PurchaseProductId, - pss.PurchaseSkuId, - pss.PurchaseSkuSpecId, - pss.SkuPurchaseSchemeId - }); - if (purchaseSchemeSkuList.Count() == 0) - throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id{purchaserId} 未匹配到采购方案"); - #endregion - - - foreach (var purchaseOrderSku in purchaseOrderSimpleInfo.ItemList) + var purchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest() { - var orderPurchaseSkuInfo = new OrderPurchaseSkuInfo() - { - Id = purchaseOrderSku.OrderSkuId, - CreateTime = DateTime.Now, - OrderId = request.OrderId, - PurchaseOrderId = purchaseOrder.PurchaseOrderId, - PurchaseProductId = purchaseOrderSku.ProductId, - PurchaseSkuId = purchaseOrderSku.SkuId, - ShopId = request.ShopId - }; - insertOrderPurchaseSkuInfoList.Add(orderPurchaseSkuInfo); - } + ShopId = dbOrder.ShopId, + SkuIdList = skuIds + }); + if (purchaseSchemeList.Count() == 0) + throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id{purchaserId} 未匹配到采购方案"); #endregion #region 补齐采购关系 foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList) { - var currentPurchaseSchemeSkuList = purchaseSchemeSkuList.Where(x => x.SkuId == assOrderCostDetail.SkuId).ToList(); - if (currentPurchaseSchemeSkuList == null || currentPurchaseSchemeSkuList.Count() == 0) + var matchResultList = MatchPurchaseScheme(assOrderCostDetail.SkuId, + assOrderCostDetail.PurchaseQuantity, + purchaserId, + purchaseSchemeList, + purchaseOrderSimpleInfo); + if (matchResultList.Count() == 0) throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id {purchaserId} Sku{assOrderCostDetail.SkuId}缺少采购方案"); - var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId); - foreach (var currentPurchaseSchemeSku in currentPurchaseSchemeSkuList) + foreach (var cargoParam in matchResultList) { - var purchaseSkuFromApi = purchaseOrderSimpleInfo.ItemList.FirstOrDefault(x => x.SkuId == currentPurchaseSchemeSku.PurchaseSkuId); - if (purchaseSkuFromApi == null) - { - throw new BusinessException($"Sku{assOrderCostDetail.SkuId}使用了采购方案{currentPurchaseSchemeSku.SkuPurchaseSchemeId}下的采购Sku{currentPurchaseSchemeSku.PurchaseSkuId},而且在采购单{purchaseOrder.PurchaseOrderId}的商品明细中没有找到该采购sku"); - } + var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId); var orderPurchaseRelationInfo = new OrderPurchaseRelationInfo() { Id = idGenerator.NewLong(), @@ -837,16 +814,37 @@ namespace BBWYB.Server.Business CreateTime = DateTime.Now, OrderId = assOrderCostDetail.OrderId, PurchaseOrderId = purchaseOrder.PurchaseOrderId, - PurchaseSkuId = currentPurchaseSchemeSku.PurchaseSkuId, - PurchaseProductId = currentPurchaseSchemeSku.PurchaseProductId, - PurchaseSpecId = currentPurchaseSchemeSku.PurchaseSkuSpecId, - SchemeId = currentPurchaseSchemeSku.SkuPurchaseSchemeId, + PurchaseSkuId = cargoParam.SkuId, + PurchaseProductId = cargoParam.ProductId, + PurchaseSpecId = cargoParam.SpecId, + SchemeId = cargoParam.SchemeId, Quantity = assOrderCostDetail.PurchaseQuantity, SourceSkuId = dbOrderSku.BelongSkuId }; insertOrderPurchaseRelationInfoList.Add(orderPurchaseRelationInfo); + } } + + #region 补齐采购SKU + foreach (var purchaseOrderSku in purchaseOrderSimpleInfo.ItemList) + { + var orderPurchaseSkuInfo = new OrderPurchaseSkuInfo() + { + Id = purchaseOrderSku.OrderSkuId, + CreateTime = DateTime.Now, + OrderId = request.OrderId, + PurchaseOrderId = purchaseOrder.PurchaseOrderId, + PurchaseProductId = purchaseOrderSku.ProductId, + PurchaseSkuId = purchaseOrderSku.SkuId, + ShopId = request.ShopId + }; + insertOrderPurchaseSkuInfoList.Add(orderPurchaseSkuInfo); + } + #endregion + + #endregion + #endregion } @@ -1113,6 +1111,10 @@ namespace BBWYB.Server.Business if (request.PurchasePlatform != Enums.Platform.阿里巴巴) return null; + var order = fsql.Select(request.OrderId).ToOne(); + if (order == null) + throw new BusinessException("订单不存在"); + var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)request.PurchasePlatform); var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() { @@ -1143,46 +1145,28 @@ namespace BBWYB.Server.Business #region 查询订单sku所有采购方案 var skuIds = dbOrderSkuList.Select(osku => osku.SkuId).ToList(); - var purchaseSchemeSkuList = fsql.Select() - .InnerJoin((p, ps, pss) => p.Id == ps.PurchaserId) - .InnerJoin((p, ps, pss) => ps.Id == pss.SkuPurchaseSchemeId) - .Where((p, ps, pss) => p.Id == purchaserId) - .Where((p, ps, pss) => ps.PurchasePlatform == Enums.Platform.阿里巴巴) - .Where((p, ps, pss) => skuIds.Contains(pss.SkuId)) - .ToList((p, ps, pss) => new - { - pss.Id, - pss.SkuId, - pss.ProductId, - pss.PurchaseProductId, - pss.PurchaseSkuId, - pss.PurchaseSkuSpecId, - pss.SkuPurchaseSchemeId - }); - if (purchaseSchemeSkuList.Count() == 0) - throw new BusinessException($"采购单{request.PurchaseOrderId} 采购商Id{purchaserId} 未匹配到采购方案"); + var purchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest() + { + ShopId = order.ShopId, + SkuIdList = skuIds + }); + if (purchaseSchemeList.Count() == 0) + throw new BusinessException("未匹配到采购方案"); #endregion #region 匹配采购单所使用到的采购方案 - var assocationOrderCostDetailList = new List(); - var purchaseSchemeGroups = purchaseSchemeSkuList.GroupBy(s => s.SkuPurchaseSchemeId); var cargoParamList = new List(); - foreach (var schemeGroup in purchaseSchemeGroups) + foreach (var orderSku in dbOrderSkuList) { - var schemePurchaseSkuList = schemeGroup.ToList(); - if (schemePurchaseSkuList.Any(psku => purchaseOrderSimpleInfo.ItemList.Count(x => x.SkuId == psku.PurchaseSkuId) == 0)) - continue; - cargoParamList.AddRange(schemePurchaseSkuList.Select(x => new CargoParamRequest() - { - BelongSkuId = x.SkuId, - ProductId = x.PurchaseProductId, - SkuId = x.PurchaseSkuId, - Quantity = dbOrderSkuList.FirstOrDefault(s => s.SkuId == x.SkuId)?.ItemTotal ?? 1, - SchemeId = x.SkuPurchaseSchemeId, - SpecId = x.PurchaseSkuSpecId - })); + var matchResultList = MatchPurchaseScheme(orderSku.SkuId, orderSku.ItemTotal ?? 1, purchaserId, purchaseSchemeList, purchaseOrderSimpleInfo); + if (matchResultList.Count() > 0) + cargoParamList.AddRange(matchResultList); } + if (cargoParamList.Count() == 0) + throw new BusinessException("未匹配到采购方案"); + + var assocationOrderCostDetailList = new List(); var belongSkuGroups = cargoParamList.GroupBy(p => p.BelongSkuId); var purchaseSkuTotalQuantity = cargoParamList.Sum(x => x.Quantity); foreach (var belongSkuGroup in belongSkuGroups) @@ -1199,8 +1183,6 @@ namespace BBWYB.Server.Business { var currentPurchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) .Sum(p => p.ProductAmount); - //var currentPurchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) - // .Sum(p => p.Quantity); var currentPurchaseSkuTotalQuantity = cargoParamList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) .Sum(p => p.Quantity); @@ -2611,7 +2593,7 @@ namespace BBWYB.Server.Business if (order.IntoStoreType == Enums.IntoStoreType.厂商代发入仓 && state == "QianShou" && order.OrderState == Enums.OrderState.待验收 && - inStoreOrderCheckTaskList != null && + inStoreOrderCheckTaskList != null && !inStoreOrderCheckTaskList.Any(x => x.OrderId == order.Id)) { insertInStoreOrderCheckTaskList.Add(new InStoreOrderCheckTask() @@ -2978,5 +2960,60 @@ namespace BBWYB.Server.Business } } + /// + /// 匹配采购方案 + /// + /// + /// + /// + /// + /// + /// + private IList MatchPurchaseScheme(string skuId, + int itemTotal, + string purchaserId, + IList purchaseSchemeList, + PP_QueryOrderDetailResponse purchaseOrderSimpleInfo) + { + List cargoParamList = new List(); + var currentSkuSchemeList = purchaseSchemeList.Where(ps => ps.SkuId == skuId).ToList(); + if (currentSkuSchemeList.Count() > 0) + { + foreach (var scheme in currentSkuSchemeList) + { + var samePurchaserProductList = scheme.PurchaseSchemeProductList.Where(psp => psp.PurchaserId == purchaserId).ToList(); + if (samePurchaserProductList.Count() == 0) + continue; + + bool isMatch = true; + foreach (var schemeProduct in samePurchaserProductList) + { + if (schemeProduct.PurchaseSchemeProductSkuList.Any(pss => purchaseOrderSimpleInfo.ItemList.Count(x => x.SkuId == pss.PurchaseSkuId) == 0)) + { + isMatch = false; + break; + } + } + + if (isMatch) + { + foreach (var schemeProduct in samePurchaserProductList) + { + cargoParamList.AddRange(schemeProduct.PurchaseSchemeProductSkuList.Select(pss => new CargoParamRequest() + { + BelongSkuId = pss.SkuId, + ProductId = pss.PurchaseProductId, + SkuId = pss.PurchaseSkuId, + SchemeId = pss.SkuPurchaseSchemeId, + SpecId = pss.PurchaseSkuSpecId, + Quantity = (itemTotal * pss.PurchaseRatio) ?? 1 + })); + } + break; + } + } + } + return cargoParamList; + } } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 68ec95e..fd83cdb 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -124,6 +124,12 @@ namespace BBWYB.Server.Business } #endregion + foreach (var purchaseProductSku in addPurchaseSchemeProductSkuList) + { + if (purchaseProductSku.PurchaseRatio == null) + purchaseProductSku.PurchaseRatio = 1; + } + fsql.Transaction(() => { if (newPurchaserList.Count > 0) @@ -148,24 +154,32 @@ namespace BBWYB.Server.Business } /// - /// 获取采购方案(不含采购配配件基本信息) + /// 获取采购方案 /// /// /// - public IList GetPurchaseSchemeList(QuerySchemeRequest querySchemeRequest) + public IList GetPurchaseSchemeList(QuerySchemeRequest request) { var select = fsql.Select(); - if (querySchemeRequest.SchemeId != null && querySchemeRequest.SchemeId != 0) - select = select.Where(ps => ps.Id == querySchemeRequest.SchemeId); - else if (querySchemeRequest.SchemeIdList != null && querySchemeRequest.SchemeIdList.Count() > 0) - select = select.Where(ps => querySchemeRequest.SchemeIdList.Contains(ps.Id)); + if (request.SchemeId != null && request.SchemeId != 0) + select = select.Where(ps => ps.Id == request.SchemeId); + else if (request.SchemeIdList != null && request.SchemeIdList.Count() > 0) + select = select.Where(ps => request.SchemeIdList.Contains(ps.Id)); else { - select = select.WhereIf(querySchemeRequest.ShopId != null && querySchemeRequest.ShopId != 0, ps => ps.ShopId == querySchemeRequest.ShopId) - .WhereIf(querySchemeRequest.SkuIdList != null && querySchemeRequest.SkuIdList.Count() > 0, ps => querySchemeRequest.SkuIdList.Contains(ps.SkuId)); - //.WhereIf(querySchemeRequest.PurchasePlatform != null, ps => ps.PurchasePlatform == querySchemeRequest.PurchasePlatform); - } + select = select.WhereIf(request.ShopId != null && request.ShopId != 0, ps => ps.ShopId == request.ShopId) + .WhereIf(request.SkuIdList != null && request.SkuIdList.Count() > 0, ps => request.SkuIdList.Contains(ps.SkuId)); + if (request.PurchasePlatform != null || !string.IsNullOrEmpty(request.PurchaserId)) + { + select = select.Where(ps => fsql.Select() + .InnerJoin((psp, p) => psp.PurchaserId == p.Id) + .WhereIf(request.PurchasePlatform != null, (psp, p) => p.Platform == request.PurchasePlatform) + .WhereIf(!string.IsNullOrEmpty(request.PurchaserId), (psp, p) => psp.PurchaserId == request.PurchaserId) + .Where((psp, p) => psp.SkuPurchaseSchemeId == ps.Id).Any()); + } + } + var sql = select.ToSql(); var purchaseSchemeList = select.ToList(); @@ -226,6 +240,42 @@ namespace BBWYB.Server.Business } } #endregion + + #region 获取采购方案基本信息 + if (request.IncludePurchaseSkuBasicInfo == 1) + { + foreach (var schemeProduct in schemeProductList) + { + try + { + var basicInfo = GetPurchaseSkuBasicInfo(new PurchaseSkuBasicInfoRequest() + { + FirstApiMode = Enums.PurchaseProductAPIMode.Spider, + PriceMode = Enums.PurchaseOrderMode.批发, + Platform = schemeProduct.PurchasePlatform ?? Enums.Platform.阿里巴巴, + PurchaseProductId = schemeProduct.PurchaseProductId + }); + if (basicInfo != null) + { + foreach (var schemeProductSku in schemeProduct.PurchaseSchemeProductSkuList) + { + var basicSku = basicInfo.ItemList.FirstOrDefault(x => x.PurchaseSkuId == schemeProductSku.PurchaseSkuId); + if (basicSku != null) + { + schemeProductSku.PurchaseSkuTitle = basicSku.Title; + schemeProductSku.PurchaseSkuPrice = basicSku.Price; + schemeProductSku.PurchaseSkuLogo = basicSku.Logo; + } + } + } + } + catch + { + + } + } + } + #endregion } } return purchaseSchemeList; @@ -316,18 +366,18 @@ namespace BBWYB.Server.Business // return fsql.Select().Where(p => sharePurchaserIdList.Contains(p.Id)).ToList(); //} - public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) - { - var purchaseSchemeIdList = fsql.Select().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId && - ps.PurchaserId == deletePurchaseSchemeRequest.PurchaserId).ToList(ps => ps.Id); + //public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) + //{ + // var purchaseSchemeIdList = fsql.Select().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId && + // ps.PurchaserId == deletePurchaseSchemeRequest.PurchaserId).ToList(ps => ps.Id); - fsql.Transaction(() => - { - fsql.Delete(purchaseSchemeIdList).ExecuteAffrows(); - fsql.Delete().Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)).ExecuteAffrows(); - fsql.Delete().Where(psps => purchaseSchemeIdList.Contains(psps.SkuPurchaseSchemeId)).ExecuteAffrows(); - }); - } + // fsql.Transaction(() => + // { + // fsql.Delete(purchaseSchemeIdList).ExecuteAffrows(); + // fsql.Delete().Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)).ExecuteAffrows(); + // fsql.Delete().Where(psps => purchaseSchemeIdList.Contains(psps.SkuPurchaseSchemeId)).ExecuteAffrows(); + // }); + //} public void DeletePurchaseScheme(long schemeId) { diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductSkuRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductSkuRequest.cs index 9bdfd77..14b9bb5 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductSkuRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductSkuRequest.cs @@ -21,5 +21,10 @@ /// 采购Ske SpecId (1688独有) /// public string PurchaseSkuSpecId { get; set; } + + /// + /// 采购配比 + /// + public int? PurchaseRatio { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs index 8924508..0c2c4f1 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs @@ -18,14 +18,19 @@ namespace BBWYB.Server.Model.Dto public IList SkuIdList { get; set; } - ///// - ///// 采购商Id, 可空 - ///// - //public string PurchaserId { get; set; } + /// + /// 采购商Id, 只要其中一个采购商品满足采购商条件则命中查询 + /// + public string PurchaserId { get; set; } - ///// - ///// 采购平台 - ///// - //public Enums.Platform? PurchasePlatform { get; set; } + /// + /// 采购平台, 只要其中一个采购商品满足平台条件则命中查询 + /// + public Enums.Platform? PurchasePlatform { get; set; } + + /// + /// 是否包含采购配件的基本信息(单价,Logo,标题等) 是=1 否=0或null + /// + public int? IncludePurchaseSkuBasicInfo { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs index 288e9f2..15c33cf 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace BBWYB.Server.Model.Dto +namespace BBWYB.Server.Model.Dto { public class PurchaseSchemeProductResponse : Model.Db.PurchaseSchemeProduct { diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs index 7374eaa..30942ea 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs @@ -1,10 +1,21 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace BBWYB.Server.Model.Dto +namespace BBWYB.Server.Model.Dto { public class PurchaseSchemeProductSkuResponse : Model.Db.PurchaseSchemeProductSku { + + /// + /// 采购SKU标题 仅在查询条件IncludePurchaseSkuBasicInfo=1时具备该值 + /// + public string PurchaseSkuTitle { get; set; } + + /// + /// 采购SKULogo 仅在查询条件IncludePurchaseSkuBasicInfo=1时具备该值 + /// + public string PurchaseSkuLogo { get; set; } + + /// + /// 采购SKU单价 仅在查询条件IncludePurchaseSkuBasicInfo=1时具备该值 + /// + public decimal? PurchaseSkuPrice { get; set; } } }