Browse Source

Merge branch 'MultiPurchaser' of http://code.qiyue666.com/pengcong001/bbwyb into MultiPurchaser

yijia
shanji 2 years ago
parent
commit
bef0bd182a
  1. 1
      BBWYB.Client/App.xaml.cs
  2. 2
      BBWYB.Client/GlobalContext.cs
  3. 10
      BBWYB.Client/Models/APIModel/Response/PurchaseSchemeProductResponse.cs
  4. 36
      BBWYB.Client/Models/APIModel/Response/PurchaseSchemeResponse.cs
  5. 28
      BBWYB.Client/Models/PurchaseScheme/PurchaseScheme.cs
  6. 13
      BBWYB.Client/Models/PurchaseScheme/PurchaseSchemeProduct.cs
  7. 16
      BBWYB.Client/ViewModels/MainViewModel.cs
  8. 18
      BBWYB.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs
  9. 4
      BBWYB.Client/ViewModels/Purchase/OnlinePurchaseViewModel.cs
  10. 229
      BBWYB.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs
  11. 228
      BBWYB.Client/ViewModels/Ware/WareManagerViewModel.cs
  12. 2
      BBWYB.Client/Views/Ware/BindingPurchaseProduct.xaml
  13. 19
      BBWYB.Client/Views/Ware/BindingPurchaseProduct.xaml.cs
  14. 57
      BBWYB.Client/Views/Ware/WareManager.xaml
  15. 4
      BBWYB.Client/appsettings.json
  16. 9
      BBWYB.Server.API/Controllers/DataRepairController.cs
  17. 38
      BBWYB.Server.API/Controllers/PurchaseSchemeController.cs
  18. 67
      BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
  19. 205
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  20. 92
      BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
  21. 5
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductSkuRequest.cs
  22. 21
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs
  23. 6
      BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs
  24. 21
      BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs

1
BBWYB.Client/App.xaml.cs

@ -79,6 +79,7 @@ namespace BBWYB.Client
serviceCollection.AddTransient<OnlinePurchaseViewModel>(); serviceCollection.AddTransient<OnlinePurchaseViewModel>();
serviceCollection.AddTransient<EditPriceViewModel>(); serviceCollection.AddTransient<EditPriceViewModel>();
serviceCollection.AddTransient<UpdatePurchaseTaskViewModel>(); serviceCollection.AddTransient<UpdatePurchaseTaskViewModel>();
serviceCollection.AddTransient<BindingPurchaseProductViewModel>();
serviceCollection.AddMapper(new MappingProfile()); serviceCollection.AddMapper(new MappingProfile());
ServiceProvider = serviceCollection.BuildServiceProvider(); ServiceProvider = serviceCollection.BuildServiceProvider();
base.OnStartup(e); base.OnStartup(e);

2
BBWYB.Client/GlobalContext.cs

@ -22,7 +22,7 @@ namespace BBWYB.Client
{ {
public GlobalContext() public GlobalContext()
{ {
BBWYBApiVersion = "10030"; BBWYBApiVersion = "10031";
} }
private User user; private User user;

10
BBWYB.Client/Models/APIModel/Response/PurchaseSchemeProductResponse.cs

@ -13,6 +13,16 @@ namespace BBWYB.Client.Models
public string SkuId { get; set; } public string SkuId { get; set; }
public long SkuPurchaseSchemeId { get; set; } public long SkuPurchaseSchemeId { get; set; }
public long UserId { 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<PurchaseSchemeProductSkuResponse> PurchaseSchemeProductSkuList { get; set; } public List<PurchaseSchemeProductSkuResponse> PurchaseSchemeProductSkuList { get; set; }
} }

36
BBWYB.Client/Models/APIModel/Response/PurchaseSchemeResponse.cs

@ -11,20 +11,20 @@ namespace BBWYB.Client.Models
/// </summary> /// </summary>
public decimal? DefaultCost { get; set; } public decimal? DefaultCost { get; set; }
public string ProductId { get; set; } public string ProductId { get; set; }
/// <summary> ///// <summary>
/// 采购商Id ///// 采购商Id
/// </summary> ///// </summary>
public string PurchaserId { get; set; } //public string PurchaserId { get; set; }
/// <summary> ///// <summary>
/// 采购商Id ///// 采购商Id
/// </summary> ///// </summary>
public string PurchaserId2 { get; set; } //public string PurchaserId2 { get; set; }
public string PurchaserName { get; set; } //public string PurchaserName { get; set; }
/// <summary> ///// <summary>
/// 发货地 ///// 发货地
/// </summary> ///// </summary>
public string PurchaserLocation { get; set; } //public string PurchaserLocation { get; set; }
/// <summary> /// <summary>
/// 采购实际成本 /// 采购实际成本
/// </summary> /// </summary>
@ -32,10 +32,10 @@ namespace BBWYB.Client.Models
public string SkuId { get; set; } public string SkuId { get; set; }
public long ShopId { get; set; } public long ShopId { get; set; }
/// <summary> ///// <summary>
/// 采购平台 ///// 采购平台
/// </summary> ///// </summary>
public Platform PurchasePlatform { get; set; } //public Platform PurchasePlatform { get; set; }
/// <summary> /// <summary>
/// 最后采购时间 /// 最后采购时间
@ -43,6 +43,8 @@ namespace BBWYB.Client.Models
public DateTime? LastPurchaseTime { get; set; } public DateTime? LastPurchaseTime { get; set; }
public List<PurchaseSchemeProductResponse> PurchaseSchemeProductList { get; set; } public List<PurchaseSchemeProductResponse> PurchaseSchemeProductList { get; set; }
public List<Purchaser> PurchaserList { get; set; }
} }
} }

28
BBWYB.Client/Models/PurchaseScheme/PurchaseScheme.cs

@ -2,6 +2,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq;
namespace BBWYB.Client.Models namespace BBWYB.Client.Models
{ {
@ -21,10 +22,10 @@ namespace BBWYB.Client.Models
public decimal DefaultCost { get => defaultCost; set { SetProperty(ref defaultCost, value); } } public decimal DefaultCost { get => defaultCost; set { SetProperty(ref defaultCost, value); } }
public decimal RealCost { get => realCost; set { SetProperty(ref realCost, value); } } public decimal RealCost { get => realCost; set { SetProperty(ref realCost, value); } }
public string PurchaserId { get; set; } //public string PurchaserId { get; set; }
public string PurchaserId2 { get; set; } //public string PurchaserId2 { get; set; }
public string PurchaserName { get; set; } public string PurchaserName { get; set; }
public string PurchaserLocation { get; set; } //public string PurchaserLocation { get; set; }
public string PurchaseProductId1 { get; set; } public string PurchaseProductId1 { get; set; }
public int PurchaseProductSkuCount1 { get; set; } public int PurchaseProductSkuCount1 { get; set; }
public string PurchaseProductId2 { get; set; } public string PurchaseProductId2 { get; set; }
@ -37,7 +38,7 @@ namespace BBWYB.Client.Models
/// <summary> /// <summary>
/// 采购平台 /// 采购平台
/// </summary> /// </summary>
public Platform PurchasePlatform { get; set; } //public Platform PurchasePlatform { get; set; }
/// <summary> /// <summary>
/// 最后采购时间 /// 最后采购时间
@ -49,9 +50,12 @@ namespace BBWYB.Client.Models
/// </summary> /// </summary>
public IList<PurchaseSchemeProduct> PurchaseSchemeProductList { get; set; } public IList<PurchaseSchemeProduct> PurchaseSchemeProductList { get; set; }
public List<Purchaser> PurchaserList { get; set; }
public PurchaseScheme() public PurchaseScheme()
{ {
PurchaseSchemeProductList = new ObservableCollection<PurchaseSchemeProduct>(); PurchaseSchemeProductList = new ObservableCollection<PurchaseSchemeProduct>();
PurchaserList = new List<Purchaser>();
} }
/// <summary> /// <summary>
@ -68,13 +72,17 @@ namespace BBWYB.Client.Models
ProductId = apiModel.ProductId, ProductId = apiModel.ProductId,
SkuId = apiModel.SkuId, SkuId = apiModel.SkuId,
DefaultCost = apiModel.DefaultCost ?? 0, DefaultCost = apiModel.DefaultCost ?? 0,
RealCost = apiModel.RealCost ?? 0, RealCost = apiModel.RealCost ?? 0
PurchaserId = apiModel.PurchaserId, //PurchaserId = apiModel.PurchaserId,
PurchaserName = apiModel.PurchaserName, //PurchaserName = apiModel.PurchaserName,
PurchaserLocation = apiModel.PurchaserLocation, //PurchaserLocation = apiModel.PurchaserLocation,
PurchasePlatform = apiModel.PurchasePlatform //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) foreach (var apiProduct in apiModel.PurchaseSchemeProductList)
{ {
model.PurchaseSchemeProductList.Add(PurchaseSchemeProduct.Convert(apiProduct)); model.PurchaseSchemeProductList.Add(PurchaseSchemeProduct.Convert(apiProduct));

13
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 PurchaseUrl { get => purchaseUrl; set { SetProperty(ref purchaseUrl, value); } }
public string PurchaseProductId { get => purchaseProductId; set => purchaseProductId = 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 public bool IsEditing
{ {
get => isEditing; get => isEditing;
@ -79,7 +85,12 @@ namespace BBWYB.Client.Models
ProductId = apiModel.ProductId, ProductId = apiModel.ProductId,
SkuId = apiModel.SkuId, SkuId = apiModel.SkuId,
PurchaseProductId = apiModel.PurchaseProductId, 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)); model.SelectedSkuIdList.AddRange(apiModel.PurchaseSchemeProductSkuList.Select(s => s.PurchaseSkuId));
return model; return model;

16
BBWYB.Client/ViewModels/MainViewModel.cs

@ -87,14 +87,14 @@ namespace BBWYB.Client.ViewModels
{ {
App.Current.Dispatcher.Invoke(() => App.Current.Dispatcher.Invoke(() =>
{ {
MenuList.Add(new MenuModel() //MenuList.Add(new MenuModel()
{ //{
Name = "订单管理", // Name = "订单管理",
ChildList = new List<MenuModel>() // ChildList = new List<MenuModel>()
{ // {
new MenuModel(){ Name="订单列表",Url="/Views/Order/OrderList.xaml" } // new MenuModel(){ Name="订单列表",Url="/Views/Order/OrderList.xaml" }
} // }
}); //});
MenuList.Add(new MenuModel() MenuList.Add(new MenuModel()
{ {
Name = "商品管理", Name = "商品管理",

18
BBWYB.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs

@ -117,17 +117,17 @@ namespace BBWYB.Client.ViewModels
if (!isResponse) if (!isResponse)
return; return;
isResponse = false; isResponse = false;
var purchaserId = skuGroup.SelectedScheme.PurchaserId; //var purchaserId = skuGroup.SelectedScheme.PurchaserId;
foreach (var otherSkuGroup in SkuGroup) //foreach (var otherSkuGroup in SkuGroup)
{ //{
if (otherSkuGroup.SkuId == skuGroup.SkuId) // if (otherSkuGroup.SkuId == skuGroup.SkuId)
continue; // continue;
var samePurchaseScheme = otherSkuGroup.SchemeList.FirstOrDefault(s => s.PurchaserId == purchaserId); // var samePurchaseScheme = otherSkuGroup.SchemeList.FirstOrDefault(s => s.PurchaserId == purchaserId);
if (samePurchaseScheme != null) // if (samePurchaseScheme != null)
otherSkuGroup.SelectedScheme = samePurchaseScheme; // otherSkuGroup.SelectedScheme = samePurchaseScheme;
} //}
isResponse = true; isResponse = true;
} }

4
BBWYB.Client/ViewModels/Purchase/OnlinePurchaseViewModel.cs

@ -135,8 +135,8 @@ namespace BBWYB.Client.ViewModels
Logo = orderSku.Logo, Logo = orderSku.Logo,
Price = orderSku.Price.Value, Price = orderSku.Price.Value,
ProductId = scheme.ProductId, ProductId = scheme.ProductId,
PurchasePlatform = scheme.PurchasePlatform, //PurchasePlatform = scheme.PurchasePlatform,
PurchaserId = scheme.PurchaserId, //PurchaserId = scheme.PurchaserId,
PurchaserName = scheme.PurchaserName, PurchaserName = scheme.PurchaserName,
PurchaseSchemeId = scheme.Id, PurchaseSchemeId = scheme.Id,
Quantity = orderSku.ItemTotal, Quantity = orderSku.ItemTotal,

229
BBWYB.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs

@ -4,9 +4,11 @@ using BBWYB.Client.Views.Ware;
using BBWYB.Common.Models; using BBWYB.Common.Models;
using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging; using CommunityToolkit.Mvvm.Messaging;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading; using System.Threading;
@ -16,17 +18,17 @@ using System.Windows.Input;
namespace BBWYB.Client.ViewModels namespace BBWYB.Client.ViewModels
{ {
public class BindingPurchaseProductViewModel : BaseVM, IDenpendency public class BindingPurchaseProductViewModel : BaseVM
{ {
#region Properties #region Properties
private GlobalContext globalContext; private GlobalContext globalContext;
private PurchaseService purchaseService; private PurchaseService purchaseService;
private PurchaseProductAPIService purchaseProductAPIService; private PurchaseProductAPIService purchaseProductAPIService;
private string purchaserName; //private string purchaserName;
private bool isLoading; private bool isLoading;
private long? schemeId;
private Platform purchasePlatform; //private Platform purchasePlatform;
private IDictionary<Platform, string> urlPatternDictionary; private IDictionary<Platform, string> urlPatternDictionary;
@ -34,15 +36,18 @@ namespace BBWYB.Client.ViewModels
public IList<ProductSku> ProductSkuList { get; set; } public IList<ProductSku> 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 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 #endregion
@ -86,68 +91,130 @@ namespace BBWYB.Client.ViewModels
{ Platform.,@"^(https://detail.1688.com/offer/(\d+).html)[^\s]*" }, { Platform.,@"^(https://detail.1688.com/offer/(\d+).html)[^\s]*" },
//{ Platform.拳探, @"^(https://qt.qiyue666.com/goods_detail/(\d+))(\?\w*)?$" } //{ Platform.拳探, @"^(https://qt.qiyue666.com/goods_detail/(\d+))(\?\w*)?$" }
}; };
ProductSkuList = new ObservableCollection<ProductSku>();
} }
public void SetData(IList<ProductSku> productSkuList, string purchaserId, string purchaserId2, string purchaserName, Platform purchasePlatform) //public void SetData(IList<ProductSku> 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<ProductSku> productSkuList, long? schemeId)
{ {
this.ProductSkuList = productSkuList; foreach (var productSku in productSkuList)
ProductSkuList.Add(productSku);
this.SchemeId = schemeId;
//this.Product = product; //this.Product = product;
this.PurchaserId = purchaserId; //this.PurchaserId = purchaserId;
this.PurchaserId2 = purchaserId2; //this.PurchaserId2 = purchaserId2;
this.PurchaserName = purchaserName; //this.PurchaserName = purchaserName;
this.PurchasePlatform = purchasePlatform; //this.PurchasePlatform = purchasePlatform;
} }
protected override void Load() protected override void Load()
{ {
if (!string.IsNullOrEmpty(PurchaserId)) if (this.SchemeId != null)
{ {
IsLoading = true; IsLoading = true;
Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(ProductSkuList.Select(s => s.Id).ToList(), PurchaserId, globalContext.User.Shop.ShopId, purchasePlatform: PurchasePlatform)).ContinueWith(r => var skuIdList = ProductSkuList.Select(s => s.Id).ToList();
{ var sku = ProductSkuList.FirstOrDefault();
var apiResponse = r.Result; Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(skuIdList, shopId: globalContext.User.Shop.ShopId, schemeId: SchemeId)).ContinueWith(r =>
if (!apiResponse.Success) {
{ var apiResponse = r.Result;
App.Current.Dispatcher.BeginInvoke((Action)delegate if (!apiResponse.Success)
{ {
MessageBox.Show(apiResponse.Msg, "查询采购方案"); App.Current.Dispatcher.BeginInvoke((Action)delegate
}); {
IsLoading = false; MessageBox.Show(apiResponse.Msg, "查询采购方案");
return; });
} IsLoading = false;
return;
var purchaseSchemeList = apiResponse.Data; }
var waitList = new List<EventWaitHandle>(); var purchaseSchemeList = apiResponse.Data;
foreach (var sku in ProductSkuList) var apiScheme = purchaseSchemeList.FirstOrDefault();
{ if (apiScheme == null)
//当前SKU下当前采购商的采购方案 {
var apiScheme = purchaseSchemeList.FirstOrDefault(s => s.SkuId == sku.Id && s.PurchaserId == PurchaserId); IsLoading = false;
return;
if (apiScheme == null) }
continue; sku.SelectedPurchaseScheme = PurchaseScheme.Convert(apiScheme);
var ewh = new ManualResetEvent(false);
sku.SelectedPurchaseScheme = PurchaseScheme.Convert(apiScheme);
var ewh = new ManualResetEvent(false); var waitList = new List<EventWaitHandle>();
waitList.Add(ewh); waitList.Add(ewh);
Task.Factory.StartNew(() => Task.Factory.StartNew(() =>
{ {
foreach (var purchaseSchemeProduct in sku.SelectedPurchaseScheme.PurchaseSchemeProductList) foreach (var purchaseSchemeProduct in sku.SelectedPurchaseScheme.PurchaseSchemeProductList)
{ {
purchaseSchemeProduct.IsEditing = false; purchaseSchemeProduct.IsEditing = false;
LoadPurchaseProduct(sku.SelectedPurchaseScheme.PurchasePlatform, purchaseSchemeProduct, purchaseSchemeProduct.PurchaseProductId, null, out _); LoadPurchaseProduct(purchaseSchemeProduct.PurchasePlatform, purchaseSchemeProduct, purchaseSchemeProduct.PurchaseProductId, null, out _);
} }
ewh.Set(); ewh.Set();
ewh.Dispose(); ewh.Dispose();
}); });
} WaitHandle.WaitAll(waitList.ToArray());
WaitHandle.WaitAll(waitList.ToArray()); IsLoading = false;
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<EventWaitHandle>();
// 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<string, string> checkPurchaserFunc, out string errorMsg) public void LoadPurchaseProduct(Platform platform, PurchaseSchemeProduct purchaseSchemeProduct, string purchaseProductId, Func<string, string> checkPurchaserFunc, out string errorMsg)
{ {
errorMsg = string.Empty; errorMsg = string.Empty;
@ -180,10 +247,15 @@ namespace BBWYB.Client.ViewModels
return; return;
} }
PurchaserId = data.Value.purchaser.Id; purchaseSchemeProduct.PurchaserId = data.Value.purchaser.Id;
PurchaserId2 = data.Value.purchaser.Id2; purchaseSchemeProduct.PurchaserId2 = data.Value.purchaser.Id2;
PurchaserName = data.Value.purchaser.Name; purchaseSchemeProduct.PurchaserName = data.Value.purchaser.Name;
PurchaserLocation = data.Value.purchaser.Location; 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 App.Current.Dispatcher.BeginInvoke((Action)delegate
{ {
@ -214,8 +286,7 @@ namespace BBWYB.Client.ViewModels
productSku.SelectedPurchaseScheme = new PurchaseScheme() productSku.SelectedPurchaseScheme = new PurchaseScheme()
{ {
ProductId = productSku.ProductId, ProductId = productSku.ProductId,
SkuId = productSku.Id, SkuId = productSku.Id
PurchasePlatform = PurchasePlatform
}; };
} }
else if (productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Count >= 4) else if (productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Count >= 4)
@ -229,7 +300,8 @@ namespace BBWYB.Client.ViewModels
Id = DateTime.Now.ToFileTime(), Id = DateTime.Now.ToFileTime(),
IsEditing = true, IsEditing = true,
ProductId = productSku.ProductId, 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); var productSku = ProductSkuList.FirstOrDefault(sku => sku.Id == purchaseSchemeProduct.SkuId);
productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Remove(purchaseSchemeProduct); productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Remove(purchaseSchemeProduct);
if (!ProductSkuList.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; // PurchaserId = string.Empty;
} }
/// <summary> /// <summary>
@ -254,7 +326,7 @@ namespace BBWYB.Client.ViewModels
return; return;
} }
urlPatternDictionary.TryGetValue(PurchasePlatform, out string pattern); urlPatternDictionary.TryGetValue(purchaseSchemeProduct.PurchasePlatform, out string pattern);
var match = Regex.Match(purchaseSchemeProduct.PurchaseUrl, pattern); var match = Regex.Match(purchaseSchemeProduct.PurchaseUrl, pattern);
if (!match.Success) if (!match.Success)
@ -276,13 +348,13 @@ namespace BBWYB.Client.ViewModels
Task.Factory.StartNew(() => 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)) //if (sku.PurchaseSchemeList.Any(s => s.Id != sku.SelectedPurchaseScheme.Id && s.PurchaserId == p))
return $"sku{sku.Id}的采购方案中已存在相同的采购商"; //同一个sku中的采购方案不能有相同的采购商 // return $"sku{sku.Id}的采购方案中已存在相同的采购商"; //同一个sku中的采购方案不能有相同的采购商
if (!string.IsNullOrEmpty(PurchaserId) && p != PurchaserId) //同一批操作的sku必须为相同的采购商 //if (!string.IsNullOrEmpty(PurchaserId) && p != PurchaserId) //同一批操作的sku必须为相同的采购商
return "采购商必须相同"; // return "采购商必须相同";
return string.Empty; return string.Empty;
}, out string errorMsg); }, out string errorMsg);
@ -319,10 +391,10 @@ namespace BBWYB.Client.ViewModels
purchaseSchemeProduct.IsEditing = false; purchaseSchemeProduct.IsEditing = false;
var productSku = ProductSkuList.FirstOrDefault(sku => sku.Id == purchaseSchemeProduct.SkuId); var productSku = ProductSkuList.FirstOrDefault(sku => sku.Id == purchaseSchemeProduct.SkuId);
productSku.SelectedPurchaseScheme.PurchaserId = PurchaserId; //productSku.SelectedPurchaseScheme.PurchaserId = PurchaserId;
productSku.SelectedPurchaseScheme.PurchaserId2 = PurchaserId2; //productSku.SelectedPurchaseScheme.PurchaserId2 = PurchaserId2;
productSku.SelectedPurchaseScheme.PurchaserName = PurchaserName; //productSku.SelectedPurchaseScheme.PurchaserName = PurchaserName;
productSku.SelectedPurchaseScheme.PurchaserLocation = PurchaserLocation; //productSku.SelectedPurchaseScheme.PurchaserLocation = PurchaserLocation;
productSku.SelectedPurchaseScheme.DefaultCost = productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Sum(p => p.PurchaseSchemeProductSkuList.Count() == 0 ? 0 : p.PurchaseSchemeProductSkuList.Sum(s => s.Price)); 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) private void Closing(System.ComponentModel.CancelEventArgs e)
{ {
PurchaserId = PurchaserName = string.Empty; this.SchemeId = null;
//clear data //clear data
foreach (var sku in ProductSkuList) foreach (var sku in ProductSkuList)
{ {
sku.SelectedPurchaseScheme = null; sku.SelectedPurchaseScheme = null;
} }
this.ProductSkuList.Clear();
//Product = null; //Product = null;
e.Cancel = false; e.Cancel = false;
} }

228
BBWYB.Client/ViewModels/Ware/WareManagerViewModel.cs

@ -20,7 +20,7 @@ namespace BBWYB.Client.ViewModels
#region Properties #region Properties
private PurchaseService purchaseService; private PurchaseService purchaseService;
private ProductService productService; private ProductService productService;
private BindingPurchaseProductViewModel bindingPurchaseProduct; //private BindingPurchaseProductViewModel bindingPurchaseProduct;
private GlobalContext globalContext; private GlobalContext globalContext;
private bool isLoading; private bool isLoading;
private int pageIndex = 1; private int pageIndex = 1;
@ -45,22 +45,32 @@ namespace BBWYB.Client.ViewModels
#endregion #endregion
#region Commands #region Commands
public ICommand AddPurchaserCommand { get; set; } //public ICommand AddPurchaserCommand { get; set; }
public ICommand EditPurchaserCommand { get; set; } //public ICommand EditPurchaserCommand { get; set; }
public ICommand DeletePurchaserCommand { get; set; } //public ICommand DeletePurchaserCommand { get; set; }
public ICommand SearchCommand { get; set; } public ICommand SearchCommand { get; set; }
public ICommand ProductPageIndexChangedCommand { get; set; } public ICommand ProductPageIndexChangedCommand { get; set; }
public ICommand SwitchPurchasePlatformCommand { get; set; } public ICommand SwitchPurchasePlatformCommand { get; set; }
public ICommand AddSchemeCommand { get; set; }
public ICommand EditSchemeCommand { get; set; }
public ICommand DeleteSchemeCommand { get; set; }
#endregion #endregion
#region Methods #region Methods
public WareManagerViewModel(GlobalContext globalContext, BindingPurchaseProductViewModel bindingPurchaseProduct, PurchaseService purchaseService, ProductService productService) public WareManagerViewModel(GlobalContext globalContext, BindingPurchaseProductViewModel bindingPurchaseProduct, PurchaseService purchaseService, ProductService productService)
{ {
PageSize = 5; PageSize = 5;
AddPurchaserCommand = new RelayCommand<Product>(AddPurchaser); //AddPurchaserCommand = new RelayCommand<Product>(AddPurchaser);
EditPurchaserCommand = new RelayCommand<Purchaser>(EditPurchaser); //EditPurchaserCommand = new RelayCommand<Purchaser>(EditPurchaser);
DeletePurchaserCommand = new RelayCommand<Purchaser>(DeletePurchaser); //DeletePurchaserCommand = new RelayCommand<Purchaser>(DeletePurchaser);
AddSchemeCommand = new RelayCommand<Product>(AddScheme);
EditSchemeCommand = new RelayCommand<PurchaseScheme>(EditScheme);
DeleteSchemeCommand = new RelayCommand<PurchaseScheme>(DeleteScheme);
SwitchPurchasePlatformCommand = new RelayCommand<object>(SwitchPurchasePlatform); SwitchPurchasePlatformCommand = new RelayCommand<object>(SwitchPurchasePlatform);
SearchCommand = new RelayCommand(() => SearchCommand = new RelayCommand(() =>
{ {
@ -71,7 +81,7 @@ namespace BBWYB.Client.ViewModels
this.purchaseService = purchaseService; this.purchaseService = purchaseService;
this.productService = productService; this.productService = productService;
this.globalContext = globalContext; this.globalContext = globalContext;
this.bindingPurchaseProduct = bindingPurchaseProduct; //this.bindingPurchaseProduct = bindingPurchaseProduct;
ProductList = new ObservableCollection<Product>(); ProductList = new ObservableCollection<Product>();
Task.Factory.StartNew(() => LoadWare(1)); Task.Factory.StartNew(() => LoadWare(1));
} }
@ -164,7 +174,7 @@ namespace BBWYB.Client.ViewModels
{ {
foreach (var p in productList) foreach (var p in productList)
ProductList.Add(p); ProductList.Add(p);
ExtractPurchaser(); //ExtractPurchaser();
//使滚动条保持顶部 //使滚动条保持顶部
//Messenger.Default.Send(string.Empty, "WareManager_ProductListScrollToTop"); //Messenger.Default.Send(string.Empty, "WareManager_ProductListScrollToTop");
WeakReferenceMessenger.Default.Send(new Message_WareManager_ProductListScrollToTop(null)); WeakReferenceMessenger.Default.Send(new Message_WareManager_ProductListScrollToTop(null));
@ -227,96 +237,142 @@ namespace BBWYB.Client.ViewModels
/// <summary> /// <summary>
/// 提取SKU中的采购商到商品的采购商列表中 /// 提取SKU中的采购商到商品的采购商列表中
/// </summary> /// </summary>
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); OpenBindingView(product, string.Empty, null);
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) private void EditScheme(PurchaseScheme purchaseScheme)
{ {
var product = ProductList.FirstOrDefault(p => p.Id == purchaser.ProductId); var product = ProductList.FirstOrDefault(p => p.Id == purchaseScheme.ProductId);
OpenBindingView(product, purchaser.Id, purchaser.Id2, purchaser.Name); 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; return;
IsLoading = true; IsLoading = true;
Task.Factory.StartNew(() => Task.Factory.StartNew(() => purchaseService.DeletePurchaseScheme(purchaseScheme.Id))
{ .ContinueWith(t =>
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) IsLoading = false;
var response = t.Result;
if (!response.Success)
{ {
var deleteScheme = sku.PurchaseSchemeList.FirstOrDefault(s => s.PurchaserId == purchaser.Id); App.Current.Dispatcher.BeginInvoke((Action)delegate
if (deleteScheme != null) {
sku.PurchaseSchemeList.Remove(deleteScheme); MessageBox.Show(response.Msg, "删除采购方案");
});
return;
} }
product.PurchaserList.Remove(purchaser); App.Current.Dispatcher.Invoke(() =>
} {
MessageBox.Show("采购商删除成功", "提示"); var product = ProductList.FirstOrDefault(p => p.Id == purchaseScheme.ProductId);
}); if (product != null)
} {
else var sku = product.SkuList.FirstOrDefault(s => s.Id == purchaseScheme.SkuId);
{ if (sku != null)
App.Current.Dispatcher.BeginInvoke((Action)delegate {
{ sku.PurchaseSchemeList.Remove(purchaseScheme);
MessageBox.Show(response.Msg, "采购商删除"); }
}); }
} 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; 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(skuList, purchaserId, purchaserId2, purchaserName, product.SelectedPurchasePlatformModel);
var bindingView = new BindingPurchaseProduct(); //bindingPurchaseProduct.SetData();
var bindingView = new BindingPurchaseProduct(skuList, schemeId);
var r = bindingView.ShowDialog(); var r = bindingView.ShowDialog();
if (r == true) if (r == true)
{ {
@ -328,7 +384,7 @@ namespace BBWYB.Client.ViewModels
IsLoading = false; IsLoading = false;
App.Current.Dispatcher.BeginInvoke((Action)delegate 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)) Task.Factory.StartNew(() => LoadPurchaseScheme(product.SkuList, platform))
.ContinueWith(t => .ContinueWith(t =>
{ {
App.Current.Dispatcher.Invoke(() => ExtractPurchaser(productId)); //App.Current.Dispatcher.Invoke(() => ExtractPurchaser(productId));
IsLoading = false; IsLoading = false;
}); });
} }

2
BBWYB.Client/Views/Ware/BindingPurchaseProduct.xaml

@ -25,7 +25,7 @@
<RowDefinition Height="40"/> <RowDefinition Height="40"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
<Run Text="{Binding PurchaserName}"/> <Run Text="{Binding SchemeId}"/>
<Run Text="绑定采购商品"/> <Run Text="绑定采购商品"/>
</TextBlock> </TextBlock>
<ListBox x:Name="listbox_skuList" ItemsSource="{Binding ProductSkuList}" <ListBox x:Name="listbox_skuList" ItemsSource="{Binding ProductSkuList}"

19
BBWYB.Client/Views/Ware/BindingPurchaseProduct.xaml.cs

@ -1,6 +1,9 @@
using CommunityToolkit.Mvvm.Messaging; using BBWYB.Client.Models;
using BBWYB.Client.ViewModels;
using CommunityToolkit.Mvvm.Messaging;
using CommunityToolkit.Mvvm.Messaging.Messages; using CommunityToolkit.Mvvm.Messaging.Messages;
using SJ.Controls; using SJ.Controls;
using System.Collections.Generic;
using System.Windows; using System.Windows;
namespace BBWYB.Client.Views.Ware namespace BBWYB.Client.Views.Ware
@ -10,18 +13,12 @@ namespace BBWYB.Client.Views.Ware
/// </summary> /// </summary>
public partial class BindingPurchaseProduct : BWindow public partial class BindingPurchaseProduct : BWindow
{ {
public BindingPurchaseProduct() private BindingPurchaseProductViewModel bindingVM;
public BindingPurchaseProduct(IList<ProductSku> productSkuList, long? schemeId)
{ {
InitializeComponent(); InitializeComponent();
//Messenger.Default.Register<bool>(this, "BindingPurchaseProduct_Close", (x) => bindingVM = this.DataContext as BindingPurchaseProductViewModel;
// { bindingVM.SetData(productSkuList, schemeId);
// this.Dispatcher.Invoke(() =>
// {
// this.DialogResult = x;
// this.Close();
// });
// });
WeakReferenceMessenger.Default.Register<Message_BindingPurchaseProductClose>(this, (o, x) => WeakReferenceMessenger.Default.Register<Message_BindingPurchaseProductClose>(this, (o, x) =>
{ {
this.Dispatcher.Invoke(() => this.Dispatcher.Invoke(() =>

57
BBWYB.Client/Views/Ware/WareManager.xaml

@ -42,7 +42,7 @@
<c:BButton Content="搜索" Padding="10,0" Margin="5,0,0,0" <c:BButton Content="搜索" Padding="10,0" Margin="5,0,0,0"
Command="{Binding SearchCommand}"/> Command="{Binding SearchCommand}"/>
</StackPanel> </StackPanel>
<Border Grid.Row="2" BorderBrush="{StaticResource Border.Brush}" BorderThickness="1,1,1,0" <Border Grid.Row="2" BorderBrush="{StaticResource Border.Brush}" BorderThickness="1,1,1,0"
Background="#F2F2F2"> Background="#F2F2F2">
<Grid> <Grid>
@ -79,7 +79,7 @@
</Grid> </Grid>
</Border> </Border>
<ListBox x:Name="listbox_productList" <ListBox x:Name="listbox_productList"
Grid.Row="3" Grid.Row="3"
ItemsSource="{Binding ProductList}" ItemsSource="{Binding ProductList}"
@ -94,10 +94,10 @@
<RowDefinition Height="30"/> <RowDefinition Height="30"/>
<RowDefinition/> <RowDefinition/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <!--<Grid.ColumnDefinitions>
<ColumnDefinition/> <ColumnDefinition/>
<ColumnDefinition Width="280"/> <ColumnDefinition Width="280"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>-->
<Grid Background="#F2F2F2" Grid.ColumnSpan="2"> <Grid Background="#F2F2F2" Grid.ColumnSpan="2">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
@ -110,8 +110,11 @@
<Run Text="{Binding ProductItemNum}"/> <Run Text="{Binding ProductItemNum}"/>
</TextBlock> </TextBlock>
</StackPanel> </StackPanel>
<c:BButton HorizontalAlignment="Right" Content="添加采购商" Width="110" <!--<c:BButton HorizontalAlignment="Right" Content="添加采购商" Width="110"
Command="{Binding DataContext.AddPurchaserCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}" CommandParameter="{Binding }"/> Command="{Binding DataContext.AddPurchaserCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}" CommandParameter="{Binding }"/>-->
<c:BButton HorizontalAlignment="Right" Content="添加采购方案" Width="110"
Command="{Binding DataContext.AddSchemeCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}" CommandParameter="{Binding }"/>
</Grid> </Grid>
<ListBox x:Name="listbox_sku" Grid.Row="1" ItemsSource="{Binding SkuList}" <ListBox x:Name="listbox_sku" Grid.Row="1" ItemsSource="{Binding SkuList}"
@ -126,7 +129,7 @@
Width="{Binding ActualWidth,ElementName=listbox_sku}"> Width="{Binding ActualWidth,ElementName=listbox_sku}">
<Grid Height="150"> <Grid Height="150">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="300"/> <ColumnDefinition Width="299"/>
<ColumnDefinition Width="80"/> <ColumnDefinition Width="80"/>
<ColumnDefinition/> <ColumnDefinition/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
@ -177,6 +180,8 @@
<ColumnDefinition Width="0.15*"/> <ColumnDefinition Width="0.15*"/>
<ColumnDefinition Width="0.1*"/> <ColumnDefinition Width="0.1*"/>
<ColumnDefinition Width="50"/> <ColumnDefinition Width="50"/>
<ColumnDefinition Width="170"/>
<ColumnDefinition Width="110"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock Text="{Binding PurchaseProductId1}" Style="{StaticResource middleTextBlock}"/> <TextBlock Text="{Binding PurchaseProductId1}" Style="{StaticResource middleTextBlock}"/>
<TextBlock Grid.Column="1" Style="{StaticResource middleTextBlock}" <TextBlock Grid.Column="1" Style="{StaticResource middleTextBlock}"
@ -208,6 +213,34 @@
<!--毛利率--> <!--毛利率-->
</Border> </Border>
<TextBlock Grid.Column="9" Style="{StaticResource middleTextBlock}"
Text="{Binding PurchaserName}">
<TextBlock.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<ListBox Style="{StaticResource NoScrollViewListBoxStyle}"
ItemsSource="{Binding PurchaserList}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
Foreground="{StaticResource Text.Color}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ToolTip>
</TextBlock.ToolTip>
</TextBlock>
<StackPanel Orientation="Horizontal" Grid.Column="10"
HorizontalAlignment="Center">
<c:BButton Style="{StaticResource LinkButton}"
Content="编辑"
Command="{Binding DataContext.EditSchemeCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Page}}}" CommandParameter="{Binding }"/>
<c:BButton Style="{StaticResource LinkButton}"
Content="删除" Margin="10,0,0,0"
Command="{Binding DataContext.DeleteSchemeCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Page}}}" CommandParameter="{Binding }"/>
</StackPanel>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/> <Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="1"/> <Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="1"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="2"/> <Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="2"/>
@ -216,7 +249,9 @@
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="5"/> <Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="5"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="6"/> <Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="6"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="7"/> <Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="7"/>
<Border Height="1" Grid.ColumnSpan="9" Background="{StaticResource Border.Brush}" VerticalAlignment="Bottom"/> <Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="8"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="9"/>
<Border Height="1" Grid.ColumnSpan="11" Background="{StaticResource Border.Brush}" VerticalAlignment="Bottom"/>
</Grid> </Grid>
</DataTemplate> </DataTemplate>
</ListBox.ItemTemplate> </ListBox.ItemTemplate>
@ -269,7 +304,7 @@
</ListBox.ItemTemplate> </ListBox.ItemTemplate>
</ListBox> </ListBox>
<ListBox x:Name="listbox_purchaser" ItemsSource="{Binding PurchaserList}" <!--<ListBox x:Name="listbox_purchaser" ItemsSource="{Binding PurchaserList}"
Grid.Row="1" Grid.Column="1" Grid.Row="1" Grid.Column="1"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}" ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
Style="{StaticResource NoScrollViewListBoxStyle}" Style="{StaticResource NoScrollViewListBoxStyle}"
@ -310,13 +345,13 @@
</DataTemplate> </DataTemplate>
</ListBox.ItemTemplate> </ListBox.ItemTemplate>
</ListBox> </ListBox>-->
</Grid> </Grid>
</DataTemplate> </DataTemplate>
</ListBox.ItemTemplate> </ListBox.ItemTemplate>
</ListBox> </ListBox>
<c:PageControl PageIndex="{Binding PageIndex}" <c:PageControl PageIndex="{Binding PageIndex}"
PageSize="5" PageSize="5"
RecordCount="{Binding ProductCount}" RecordCount="{Binding ProductCount}"

4
BBWYB.Client/appsettings.json

@ -1,6 +1,6 @@
{ {
// "BBWYApiHost": "http://localhost:5000", "BBWYApiHost": "http://localhost:5000",
"BBWYApiHost": "http://bbwyb.qiyue666.com", //"BBWYApiHost": "http://bbwyb.qiyue666.com",
"MDSApiHost": "http://mdsapi.qiyue666.com", "MDSApiHost": "http://mdsapi.qiyue666.com",
"BBWYCApiHost": "http://bbwytest.qiyue666.com", "BBWYCApiHost": "http://bbwytest.qiyue666.com",
"QKApiHost": "http://localhost:8080" "QKApiHost": "http://localhost:8080"

9
BBWYB.Server.API/Controllers/DataRepairController.cs

@ -25,15 +25,6 @@ namespace BBWYB.Server.API.Controllers
dataRepairBusiness.SubscribeKD100(waybillNo, targetCompanyCode); dataRepairBusiness.SubscribeKD100(waybillNo, targetCompanyCode);
} }
/// <summary>
/// 修复采购商信息
/// </summary>
[HttpPost]
public void SupplementPurchaserInfo()
{
dataRepairBusiness.SupplementPurchaserInfo();
}
/// <summary> /// <summary>
/// 修复订单Sku成本 /// 修复订单Sku成本
/// </summary> /// </summary>

38
BBWYB.Server.API/Controllers/PurchaseSchemeController.cs

@ -38,15 +38,15 @@ namespace BBWYB.Server.API.Controllers
return purchaseSchemeBusiness.GetPurchaseSchemeList(querySchemeRequest); return purchaseSchemeBusiness.GetPurchaseSchemeList(querySchemeRequest);
} }
/// <summary> ///// <summary>
/// 删除采购商 ///// 删除采购商
/// </summary> ///// </summary>
/// <param name="deletePurchaseSchemeRequest"></param> ///// <param name="deletePurchaseSchemeRequest"></param>
[HttpDelete] //[HttpDelete]
public void DeletePurchaser([FromBody] DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) //public void DeletePurchaser([FromBody] DeletePurchaseSchemeRequest deletePurchaseSchemeRequest)
{ //{
purchaseSchemeBusiness.DeletePurchaser(deletePurchaseSchemeRequest); // purchaseSchemeBusiness.DeletePurchaser(deletePurchaseSchemeRequest);
} //}
/// <summary> /// <summary>
/// 删除采购方案 /// 删除采购方案
@ -58,16 +58,16 @@ namespace BBWYB.Server.API.Controllers
purchaseSchemeBusiness.DeletePurchaseScheme(schemeId); purchaseSchemeBusiness.DeletePurchaseScheme(schemeId);
} }
/// <summary> ///// <summary>
/// 查询共有采购商 ///// 查询共有采购商
/// </summary> ///// </summary>
/// <param name="querySchemeRequest"></param> ///// <param name="querySchemeRequest"></param>
/// <returns></returns> ///// <returns></returns>
[HttpPost] //[HttpPost]
public IList<Purchaser> GetSharePurchaser([FromBody] QuerySchemeRequest querySchemeRequest) //public IList<Purchaser> GetSharePurchaser([FromBody] QuerySchemeRequest querySchemeRequest)
{ //{
return purchaseSchemeBusiness.GetSharePurchaser(querySchemeRequest); // return purchaseSchemeBusiness.GetSharePurchaser(querySchemeRequest);
} //}
/// <summary> /// <summary>
/// 查询采购方案中采购Sku的基本信息 /// 查询采购方案中采购Sku的基本信息

67
BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs

@ -38,73 +38,6 @@ namespace BBWYB.Server.Business
purchaseOrderBusiness.OnSomeOnePurchaseOrderChanged(pid, false); purchaseOrderBusiness.OnSomeOnePurchaseOrderChanged(pid, false);
} }
public void SupplementPurchaserInfo()
{
var purlList = fsql.Select<PurchaseSchemeProduct, PurchaseScheme, Purchaser>()
.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<IUpdate<Purchaser>> updatePurchaserList = new List<IUpdate<Purchaser>>();
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<Purchaser>(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() public void SupplementOrderSkuCost()
{ {

205
BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs

@ -36,6 +36,7 @@ namespace BBWYB.Server.Business
private Lazy<JDBusiness> jdBusinessLazy; private Lazy<JDBusiness> jdBusinessLazy;
private Lazy<OP_PlatformClientFactory> opPlatformClientFactoryLazy; private Lazy<OP_PlatformClientFactory> opPlatformClientFactoryLazy;
private Lazy<VenderBusiness> venderBusinessLazy; private Lazy<VenderBusiness> venderBusinessLazy;
private Lazy<PurchaseSchemeBusiness> purchaseSchemeBusinessLazy;
private PP_PlatformClientFactory ppPlatformClientFactory => pplatformClientFactoryLazy.Value; private PP_PlatformClientFactory ppPlatformClientFactory => pplatformClientFactoryLazy.Value;
private TaskSchedulerManager taskSchedulerManager => taskSchedulerManagerLazy.Value; private TaskSchedulerManager taskSchedulerManager => taskSchedulerManagerLazy.Value;
@ -50,6 +51,8 @@ namespace BBWYB.Server.Business
private JDBusiness jdBusiness => jdBusinessLazy.Value; private JDBusiness jdBusiness => jdBusinessLazy.Value;
private PurchaseSchemeBusiness purchaseSchemeBusiness => purchaseSchemeBusinessLazy.Value;
private IList<Enums.OrderState> cantPurchaseOrderStateList; private IList<Enums.OrderState> cantPurchaseOrderStateList;
public PurchaseOrderBusiness(IFreeSql fsql, public PurchaseOrderBusiness(IFreeSql fsql,
@ -68,6 +71,7 @@ namespace BBWYB.Server.Business
jdBusinessLazy = new Lazy<JDBusiness>(() => serviceProvider.GetService<JDBusiness>()); jdBusinessLazy = new Lazy<JDBusiness>(() => serviceProvider.GetService<JDBusiness>());
opPlatformClientFactoryLazy = new Lazy<OP_PlatformClientFactory>(() => serviceProvider.GetService<OP_PlatformClientFactory>()); opPlatformClientFactoryLazy = new Lazy<OP_PlatformClientFactory>(() => serviceProvider.GetService<OP_PlatformClientFactory>());
venderBusinessLazy = new Lazy<VenderBusiness>(() => serviceProvider.GetService<VenderBusiness>()); venderBusinessLazy = new Lazy<VenderBusiness>(() => serviceProvider.GetService<VenderBusiness>());
purchaseSchemeBusinessLazy = new Lazy<PurchaseSchemeBusiness>(() => serviceProvider.GetService<PurchaseSchemeBusiness>());
cantPurchaseOrderStateList = new List<Enums.OrderState>() cantPurchaseOrderStateList = new List<Enums.OrderState>()
{ {
Enums.OrderState., Enums.OrderState.,
@ -745,12 +749,13 @@ namespace BBWYB.Server.Business
{ {
if (purchaseOrder.PurchasePlatform == Enums.Platform.) if (purchaseOrder.PurchasePlatform == Enums.Platform.)
{ {
#region 补齐采购SKU #region 补齐采购SKU和采购关系
var purchaseAccount = dbPurchaseAccountList.FirstOrDefault(pa => pa.Id == purchaseOrder.PurchaseAccountId || var purchaseAccount = dbPurchaseAccountList.FirstOrDefault(pa => pa.Id == purchaseOrder.PurchaseAccountId ||
pa.AccountName == purchaseOrder.PurchaseAccountName); pa.AccountName == purchaseOrder.PurchaseAccountName);
if (purchaseAccount == null) if (purchaseAccount == null)
throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId}缺少有效的采购账号"); throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId}缺少有效的采购账号");
#region 查询1688采购单
var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)purchaseOrder.PurchasePlatform); var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)purchaseOrder.PurchasePlatform);
var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest()
{ {
@ -759,6 +764,7 @@ namespace BBWYB.Server.Business
AppToken = purchaseAccount.AppToken, AppToken = purchaseAccount.AppToken,
OrderId = purchaseOrder.PurchaseOrderId OrderId = purchaseOrder.PurchaseOrderId
}); });
#endregion
#region 处理采购商Id #region 处理采购商Id
var purchaserId = purchaseOrderSimpleInfo.PurchaserId; var purchaserId = purchaseOrderSimpleInfo.PurchaserId;
@ -778,58 +784,29 @@ namespace BBWYB.Server.Business
#region 匹配采购方案 #region 匹配采购方案
var skuIds = purchaseOrder.AssocationOrderCostDetailList.Select(ocd => ocd.SkuId).ToList(); var skuIds = purchaseOrder.AssocationOrderCostDetailList.Select(ocd => ocd.SkuId).ToList();
var purchaseSchemeSkuList = fsql.Select<Purchaser, PurchaseScheme, PurchaseSchemeProductSku>() var purchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest()
.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 orderPurchaseSkuInfo = new OrderPurchaseSkuInfo() ShopId = dbOrder.ShopId,
{ SkuIdList = skuIds
Id = purchaseOrderSku.OrderSkuId, });
CreateTime = DateTime.Now, if (purchaseSchemeList.Count() == 0)
OrderId = request.OrderId, throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id{purchaserId} 未匹配到采购方案");
PurchaseOrderId = purchaseOrder.PurchaseOrderId,
PurchaseProductId = purchaseOrderSku.ProductId,
PurchaseSkuId = purchaseOrderSku.SkuId,
ShopId = request.ShopId
};
insertOrderPurchaseSkuInfoList.Add(orderPurchaseSkuInfo);
}
#endregion #endregion
#region 补齐采购关系 #region 补齐采购关系
foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList) foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList)
{ {
var currentPurchaseSchemeSkuList = purchaseSchemeSkuList.Where(x => x.SkuId == assOrderCostDetail.SkuId).ToList(); var matchResultList = MatchPurchaseScheme(assOrderCostDetail.SkuId,
if (currentPurchaseSchemeSkuList == null || currentPurchaseSchemeSkuList.Count() == 0) assOrderCostDetail.PurchaseQuantity,
purchaserId,
purchaseSchemeList,
purchaseOrderSimpleInfo);
if (matchResultList.Count() == 0)
throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id {purchaserId} Sku{assOrderCostDetail.SkuId}缺少采购方案"); throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id {purchaserId} Sku{assOrderCostDetail.SkuId}缺少采购方案");
var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId); foreach (var cargoParam in matchResultList)
foreach (var currentPurchaseSchemeSku in currentPurchaseSchemeSkuList)
{ {
var purchaseSkuFromApi = purchaseOrderSimpleInfo.ItemList.FirstOrDefault(x => x.SkuId == currentPurchaseSchemeSku.PurchaseSkuId); var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId);
if (purchaseSkuFromApi == null)
{
throw new BusinessException($"Sku{assOrderCostDetail.SkuId}使用了采购方案{currentPurchaseSchemeSku.SkuPurchaseSchemeId}下的采购Sku{currentPurchaseSchemeSku.PurchaseSkuId},而且在采购单{purchaseOrder.PurchaseOrderId}的商品明细中没有找到该采购sku");
}
var orderPurchaseRelationInfo = new OrderPurchaseRelationInfo() var orderPurchaseRelationInfo = new OrderPurchaseRelationInfo()
{ {
Id = idGenerator.NewLong(), Id = idGenerator.NewLong(),
@ -837,16 +814,37 @@ namespace BBWYB.Server.Business
CreateTime = DateTime.Now, CreateTime = DateTime.Now,
OrderId = assOrderCostDetail.OrderId, OrderId = assOrderCostDetail.OrderId,
PurchaseOrderId = purchaseOrder.PurchaseOrderId, PurchaseOrderId = purchaseOrder.PurchaseOrderId,
PurchaseSkuId = currentPurchaseSchemeSku.PurchaseSkuId, PurchaseSkuId = cargoParam.SkuId,
PurchaseProductId = currentPurchaseSchemeSku.PurchaseProductId, PurchaseProductId = cargoParam.ProductId,
PurchaseSpecId = currentPurchaseSchemeSku.PurchaseSkuSpecId, PurchaseSpecId = cargoParam.SpecId,
SchemeId = currentPurchaseSchemeSku.SkuPurchaseSchemeId, SchemeId = cargoParam.SchemeId,
Quantity = assOrderCostDetail.PurchaseQuantity, Quantity = assOrderCostDetail.PurchaseQuantity,
SourceSkuId = dbOrderSku.BelongSkuId SourceSkuId = dbOrderSku.BelongSkuId
}; };
insertOrderPurchaseRelationInfoList.Add(orderPurchaseRelationInfo); 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 #endregion
} }
@ -1113,6 +1111,10 @@ namespace BBWYB.Server.Business
if (request.PurchasePlatform != Enums.Platform.) if (request.PurchasePlatform != Enums.Platform.)
return null; return null;
var order = fsql.Select<Order>(request.OrderId).ToOne();
if (order == null)
throw new BusinessException("订单不存在");
var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)request.PurchasePlatform); var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)request.PurchasePlatform);
var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest()
{ {
@ -1143,46 +1145,28 @@ namespace BBWYB.Server.Business
#region 查询订单sku所有采购方案 #region 查询订单sku所有采购方案
var skuIds = dbOrderSkuList.Select(osku => osku.SkuId).ToList(); var skuIds = dbOrderSkuList.Select(osku => osku.SkuId).ToList();
var purchaseSchemeSkuList = fsql.Select<Purchaser, PurchaseScheme, PurchaseSchemeProductSku>() var purchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest()
.InnerJoin((p, ps, pss) => p.Id == ps.PurchaserId) {
.InnerJoin((p, ps, pss) => ps.Id == pss.SkuPurchaseSchemeId) ShopId = order.ShopId,
.Where((p, ps, pss) => p.Id == purchaserId) SkuIdList = skuIds
.Where((p, ps, pss) => ps.PurchasePlatform == Enums.Platform.) });
.Where((p, ps, pss) => skuIds.Contains(pss.SkuId)) if (purchaseSchemeList.Count() == 0)
.ToList((p, ps, pss) => new throw new BusinessException("未匹配到采购方案");
{
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} 未匹配到采购方案");
#endregion #endregion
#region 匹配采购单所使用到的采购方案 #region 匹配采购单所使用到的采购方案
var assocationOrderCostDetailList = new List<AssocationOrderCostDetailResponse>();
var purchaseSchemeGroups = purchaseSchemeSkuList.GroupBy(s => s.SkuPurchaseSchemeId);
var cargoParamList = new List<CargoParamRequest>(); var cargoParamList = new List<CargoParamRequest>();
foreach (var schemeGroup in purchaseSchemeGroups) foreach (var orderSku in dbOrderSkuList)
{ {
var schemePurchaseSkuList = schemeGroup.ToList(); var matchResultList = MatchPurchaseScheme(orderSku.SkuId, orderSku.ItemTotal ?? 1, purchaserId, purchaseSchemeList, purchaseOrderSimpleInfo);
if (schemePurchaseSkuList.Any(psku => purchaseOrderSimpleInfo.ItemList.Count(x => x.SkuId == psku.PurchaseSkuId) == 0)) if (matchResultList.Count() > 0)
continue; cargoParamList.AddRange(matchResultList);
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
}));
} }
if (cargoParamList.Count() == 0)
throw new BusinessException("未匹配到采购方案");
var assocationOrderCostDetailList = new List<AssocationOrderCostDetailResponse>();
var belongSkuGroups = cargoParamList.GroupBy(p => p.BelongSkuId); var belongSkuGroups = cargoParamList.GroupBy(p => p.BelongSkuId);
var purchaseSkuTotalQuantity = cargoParamList.Sum(x => x.Quantity); var purchaseSkuTotalQuantity = cargoParamList.Sum(x => x.Quantity);
foreach (var belongSkuGroup in belongSkuGroups) foreach (var belongSkuGroup in belongSkuGroups)
@ -1199,8 +1183,6 @@ namespace BBWYB.Server.Business
{ {
var currentPurchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) var currentPurchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId)
.Sum(p => p.ProductAmount); .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) var currentPurchaseSkuTotalQuantity = cargoParamList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId)
.Sum(p => p.Quantity); .Sum(p => p.Quantity);
@ -2611,7 +2593,7 @@ namespace BBWYB.Server.Business
if (order.IntoStoreType == Enums.IntoStoreType. && if (order.IntoStoreType == Enums.IntoStoreType. &&
state == "QianShou" && state == "QianShou" &&
order.OrderState == Enums.OrderState. && order.OrderState == Enums.OrderState. &&
inStoreOrderCheckTaskList != null && inStoreOrderCheckTaskList != null &&
!inStoreOrderCheckTaskList.Any(x => x.OrderId == order.Id)) !inStoreOrderCheckTaskList.Any(x => x.OrderId == order.Id))
{ {
insertInStoreOrderCheckTaskList.Add(new InStoreOrderCheckTask() insertInStoreOrderCheckTaskList.Add(new InStoreOrderCheckTask()
@ -2978,5 +2960,60 @@ namespace BBWYB.Server.Business
} }
} }
/// <summary>
/// 匹配采购方案
/// </summary>
/// <param name="skuId"></param>
/// <param name="itemTotal"></param>
/// <param name="purchaserId"></param>
/// <param name="purchaseSchemeList"></param>
/// <param name="purchaseOrderSimpleInfo"></param>
/// <returns></returns>
private IList<CargoParamRequest> MatchPurchaseScheme(string skuId,
int itemTotal,
string purchaserId,
IList<PurchaseSchemeResponse> purchaseSchemeList,
PP_QueryOrderDetailResponse purchaseOrderSimpleInfo)
{
List<CargoParamRequest> cargoParamList = new List<CargoParamRequest>();
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;
}
} }
} }

92
BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs

@ -124,6 +124,12 @@ namespace BBWYB.Server.Business
} }
#endregion #endregion
foreach (var purchaseProductSku in addPurchaseSchemeProductSkuList)
{
if (purchaseProductSku.PurchaseRatio == null)
purchaseProductSku.PurchaseRatio = 1;
}
fsql.Transaction(() => fsql.Transaction(() =>
{ {
if (newPurchaserList.Count > 0) if (newPurchaserList.Count > 0)
@ -148,24 +154,32 @@ namespace BBWYB.Server.Business
} }
/// <summary> /// <summary>
/// 获取采购方案(不含采购配配件基本信息) /// 获取采购方案
/// </summary> /// </summary>
/// <param name="querySchemeRequest"></param> /// <param name="querySchemeRequest"></param>
/// <returns></returns> /// <returns></returns>
public IList<PurchaseSchemeResponse> GetPurchaseSchemeList(QuerySchemeRequest querySchemeRequest) public IList<PurchaseSchemeResponse> GetPurchaseSchemeList(QuerySchemeRequest request)
{ {
var select = fsql.Select<PurchaseScheme>(); var select = fsql.Select<PurchaseScheme>();
if (querySchemeRequest.SchemeId != null && querySchemeRequest.SchemeId != 0) if (request.SchemeId != null && request.SchemeId != 0)
select = select.Where(ps => ps.Id == querySchemeRequest.SchemeId); select = select.Where(ps => ps.Id == request.SchemeId);
else if (querySchemeRequest.SchemeIdList != null && querySchemeRequest.SchemeIdList.Count() > 0) else if (request.SchemeIdList != null && request.SchemeIdList.Count() > 0)
select = select.Where(ps => querySchemeRequest.SchemeIdList.Contains(ps.Id)); select = select.Where(ps => request.SchemeIdList.Contains(ps.Id));
else else
{ {
select = select.WhereIf(querySchemeRequest.ShopId != null && querySchemeRequest.ShopId != 0, ps => ps.ShopId == querySchemeRequest.ShopId) select = select.WhereIf(request.ShopId != null && request.ShopId != 0, ps => ps.ShopId == request.ShopId)
.WhereIf(querySchemeRequest.SkuIdList != null && querySchemeRequest.SkuIdList.Count() > 0, ps => querySchemeRequest.SkuIdList.Contains(ps.SkuId)); .WhereIf(request.SkuIdList != null && request.SkuIdList.Count() > 0, ps => request.SkuIdList.Contains(ps.SkuId));
//.WhereIf(querySchemeRequest.PurchasePlatform != null, ps => ps.PurchasePlatform == querySchemeRequest.PurchasePlatform);
}
if (request.PurchasePlatform != null || !string.IsNullOrEmpty(request.PurchaserId))
{
select = select.Where(ps => fsql.Select<PurchaseSchemeProduct, Purchaser>()
.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<PurchaseSchemeResponse>(); var purchaseSchemeList = select.ToList<PurchaseSchemeResponse>();
@ -226,6 +240,42 @@ namespace BBWYB.Server.Business
} }
} }
#endregion #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; return purchaseSchemeList;
@ -316,18 +366,18 @@ namespace BBWYB.Server.Business
// return fsql.Select<Purchaser>().Where(p => sharePurchaserIdList.Contains(p.Id)).ToList(); // return fsql.Select<Purchaser>().Where(p => sharePurchaserIdList.Contains(p.Id)).ToList();
//} //}
public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) //public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest)
{ //{
var purchaseSchemeIdList = fsql.Select<PurchaseScheme>().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId && // var purchaseSchemeIdList = fsql.Select<PurchaseScheme>().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId &&
ps.PurchaserId == deletePurchaseSchemeRequest.PurchaserId).ToList(ps => ps.Id); // ps.PurchaserId == deletePurchaseSchemeRequest.PurchaserId).ToList(ps => ps.Id);
fsql.Transaction(() => // fsql.Transaction(() =>
{ // {
fsql.Delete<PurchaseScheme>(purchaseSchemeIdList).ExecuteAffrows(); // fsql.Delete<PurchaseScheme>(purchaseSchemeIdList).ExecuteAffrows();
fsql.Delete<PurchaseSchemeProduct>().Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)).ExecuteAffrows(); // fsql.Delete<PurchaseSchemeProduct>().Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)).ExecuteAffrows();
fsql.Delete<PurchaseSchemeProductSku>().Where(psps => purchaseSchemeIdList.Contains(psps.SkuPurchaseSchemeId)).ExecuteAffrows(); // fsql.Delete<PurchaseSchemeProductSku>().Where(psps => purchaseSchemeIdList.Contains(psps.SkuPurchaseSchemeId)).ExecuteAffrows();
}); // });
} //}
public void DeletePurchaseScheme(long schemeId) public void DeletePurchaseScheme(long schemeId)
{ {

5
BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductSkuRequest.cs

@ -21,5 +21,10 @@
/// 采购Ske SpecId (1688独有) /// 采购Ske SpecId (1688独有)
/// </summary> /// </summary>
public string PurchaseSkuSpecId { get; set; } public string PurchaseSkuSpecId { get; set; }
/// <summary>
/// 采购配比
/// </summary>
public int? PurchaseRatio { get; set; }
} }
} }

21
BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs

@ -18,14 +18,19 @@ namespace BBWYB.Server.Model.Dto
public IList<string> SkuIdList { get; set; } public IList<string> SkuIdList { get; set; }
///// <summary> /// <summary>
///// 采购商Id, 可空 /// 采购商Id, 只要其中一个采购商品满足采购商条件则命中查询
///// </summary> /// </summary>
//public string PurchaserId { get; set; } public string PurchaserId { get; set; }
///// <summary> /// <summary>
///// 采购平台 /// 采购平台, 只要其中一个采购商品满足平台条件则命中查询
///// </summary> /// </summary>
//public Enums.Platform? PurchasePlatform { get; set; } public Enums.Platform? PurchasePlatform { get; set; }
/// <summary>
/// 是否包含采购配件的基本信息(单价,Logo,标题等) 是=1 否=0或null
/// </summary>
public int? IncludePurchaseSkuBasicInfo { get; set; }
} }
} }

6
BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs

@ -1,8 +1,4 @@
using System; namespace BBWYB.Server.Model.Dto
using System.Collections.Generic;
using System.Text;
namespace BBWYB.Server.Model.Dto
{ {
public class PurchaseSchemeProductResponse : Model.Db.PurchaseSchemeProduct public class PurchaseSchemeProductResponse : Model.Db.PurchaseSchemeProduct
{ {

21
BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs

@ -1,10 +1,21 @@
using System; namespace BBWYB.Server.Model.Dto
using System.Collections.Generic;
using System.Text;
namespace BBWYB.Server.Model.Dto
{ {
public class PurchaseSchemeProductSkuResponse : Model.Db.PurchaseSchemeProductSku public class PurchaseSchemeProductSkuResponse : Model.Db.PurchaseSchemeProductSku
{ {
/// <summary>
/// 采购SKU标题 仅在查询条件IncludePurchaseSkuBasicInfo=1时具备该值
/// </summary>
public string PurchaseSkuTitle { get; set; }
/// <summary>
/// 采购SKULogo 仅在查询条件IncludePurchaseSkuBasicInfo=1时具备该值
/// </summary>
public string PurchaseSkuLogo { get; set; }
/// <summary>
/// 采购SKU单价 仅在查询条件IncludePurchaseSkuBasicInfo=1时具备该值
/// </summary>
public decimal? PurchaseSkuPrice { get; set; }
} }
} }

Loading…
Cancel
Save