Browse Source

采购方案逻辑兼容在线采购时编辑采购方案

qianyi
shanji 3 years ago
parent
commit
a377dfcc29
  1. 8
      BBWY.Client/APIServices/PurchaseService.cs
  2. 42
      BBWY.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs
  3. 110
      BBWY.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs
  4. 29
      BBWY.Client/ViewModels/Ware/WareManagerViewModel.cs
  5. 4
      BBWY.Client/Views/Order/ChoosePurchaseScheme.xaml
  6. 2
      BBWY.Client/Views/Ware/BindingPurchaseProduct.xaml
  7. 3
      BBWY.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
  8. 4
      BBWY.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs

8
BBWY.Client/APIServices/PurchaseService.cs

@ -17,11 +17,11 @@ namespace BBWY.Client.APIServices
/// <param name="purchaserId"></param> /// <param name="purchaserId"></param>
/// <param name="shopId"></param> /// <param name="shopId"></param>
/// <returns></returns> /// <returns></returns>
public ApiResponse<IList<PurchaseSchemeResponse>> GetPurchaseSchemeList(IList<string> productIdList, string purchaserId, long shopId) public ApiResponse<IList<PurchaseSchemeResponse>> GetPurchaseSchemeList(IList<string> skuIdList, string purchaserId, long shopId)
{ {
return SendRequest<IList<PurchaseSchemeResponse>>(globalContext.BBYWApiHost, return SendRequest<IList<PurchaseSchemeResponse>>(globalContext.BBYWApiHost,
"api/PurchaseScheme/GetPurchaseSchemeList", "api/PurchaseScheme/GetPurchaseSchemeList",
new { productIdList, purchaserId, shopId }, new { skuIdList, purchaserId, shopId },
null, null,
HttpMethod.Post); HttpMethod.Post);
} }
@ -32,11 +32,11 @@ namespace BBWY.Client.APIServices
/// <param name="skuId"></param> /// <param name="skuId"></param>
/// <param name="shopId"></param> /// <param name="shopId"></param>
/// <returns></returns> /// <returns></returns>
public ApiResponse<IList<PurchaseSchemeResponse>> GetPurchaseSchemeList(string skuId, long shopId) public ApiResponse<IList<PurchaseSchemeResponse>> GetPurchaseSchemeList(IList<string> skuIdList, long shopId)
{ {
return SendRequest<IList<PurchaseSchemeResponse>>(globalContext.BBYWApiHost, return SendRequest<IList<PurchaseSchemeResponse>>(globalContext.BBYWApiHost,
"api/PurchaseScheme/GetPurchaseSchemeList", "api/PurchaseScheme/GetPurchaseSchemeList",
new { skuId, shopId }, new { skuIdList, shopId },
null, null,
HttpMethod.Post); HttpMethod.Post);
} }

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

@ -20,6 +20,7 @@ namespace BBWY.Client.ViewModels
public ICommand DeleteCommand { get; set; } public ICommand DeleteCommand { get; set; }
public ICommand EditCommand { get; set; }
public ChoosePurchaseSchemeViewModel(PurchaseService purchaseService, GlobalContext globalContext) public ChoosePurchaseSchemeViewModel(PurchaseService purchaseService, GlobalContext globalContext)
{ {
@ -27,25 +28,26 @@ namespace BBWY.Client.ViewModels
this.globalContext = globalContext; this.globalContext = globalContext;
PurchaseSchemeList = new ObservableCollection<PurchaseScheme>(); PurchaseSchemeList = new ObservableCollection<PurchaseScheme>();
DeleteCommand = new RelayCommand<PurchaseScheme>(Delete); DeleteCommand = new RelayCommand<PurchaseScheme>(Delete);
EditCommand = new RelayCommand<PurchaseScheme>(Edit);
} }
protected override void Load() protected override void Load()
{ {
PurchaseSchemeList.Clear(); PurchaseSchemeList.Clear();
Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(SkuId, globalContext.User.Shop.ShopId)).ContinueWith(t => Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(new string[] { SkuId }, globalContext.User.Shop.ShopId)).ContinueWith(t =>
{ {
var r = t.Result; var r = t.Result;
if (!r.Success) if (!r.Success)
{ {
App.Current.Dispatcher.Invoke(() => MessageBox.Show(r.Msg, "获取采购方案")); App.Current.Dispatcher.Invoke(() => MessageBox.Show(r.Msg, "获取采购方案"));
return; return;
} }
App.Current.Dispatcher.Invoke(() => App.Current.Dispatcher.Invoke(() =>
{ {
foreach (var apiModel in r.Data) PurchaseSchemeList.Add(PurchaseScheme.Convert(apiModel)); foreach (var apiModel in r.Data) PurchaseSchemeList.Add(PurchaseScheme.Convert(apiModel));
}); });
}); });
} }
protected override void Unload() protected override void Unload()
@ -55,6 +57,18 @@ namespace BBWY.Client.ViewModels
} }
public void Delete(PurchaseScheme purchaseScheme) public void Delete(PurchaseScheme purchaseScheme)
{
Task.Factory.StartNew(() => purchaseService.DeletePurchaseScheme(purchaseScheme.Id)).ContinueWith(r =>
{
var response = r.Result;
if (response.Success)
App.Current.Dispatcher.Invoke(() => PurchaseSchemeList.Remove(purchaseScheme));
else
App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "删除采购方案"));
});
}
public void Edit(PurchaseScheme purchaseScheme)
{ {
} }

110
BBWY.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs

@ -25,7 +25,10 @@ namespace BBWY.Client.ViewModels
private string purchaserName; private string purchaserName;
private bool isLoading; private bool isLoading;
public Product Product { get; set; } //public Product Product { get; set; }
public IList<ProductSku> ProductSkuList { get; set; }
public string PurchaserId { get; set; } public string PurchaserId { get; set; }
public string PurchaserName { get => purchaserName; set { Set(ref purchaserName, value); } } public string PurchaserName { get => purchaserName; set { Set(ref purchaserName, value); } }
public string PurchaserLocation { get; set; } public string PurchaserLocation { get; set; }
@ -64,9 +67,10 @@ namespace BBWY.Client.ViewModels
SavePurchaseSchemeCommand = new RelayCommand(SavePurchaseScheme); SavePurchaseSchemeCommand = new RelayCommand(SavePurchaseScheme);
} }
public void SetData(Product product, string purchaserId, string purchaserName) public void SetData(IList<ProductSku> productSkuList, string purchaserId, string purchaserName)
{ {
this.Product = product; this.ProductSkuList = productSkuList;
//this.Product = product;
this.PurchaserId = purchaserId; this.PurchaserId = purchaserId;
this.PurchaserName = purchaserName; this.PurchaserName = purchaserName;
} }
@ -76,48 +80,48 @@ namespace BBWY.Client.ViewModels
if (!string.IsNullOrEmpty(PurchaserId)) if (!string.IsNullOrEmpty(PurchaserId))
{ {
IsLoading = true; IsLoading = true;
Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(new List<string>() { Product.Id }, PurchaserId, globalContext.User.Shop.ShopId)).ContinueWith(r => Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(ProductSkuList.Select(s => s.Id).ToList(), PurchaserId, globalContext.User.Shop.ShopId)).ContinueWith(r =>
{ {
var apiResponse = r.Result; var apiResponse = r.Result;
if (!apiResponse.Success) if (!apiResponse.Success)
{ {
App.Current.Dispatcher.BeginInvoke((Action)delegate App.Current.Dispatcher.BeginInvoke((Action)delegate
{ {
MessageBox.Show(apiResponse.Msg, "查询采购方案"); MessageBox.Show(apiResponse.Msg, "查询采购方案");
}); });
IsLoading = false; IsLoading = false;
return; return;
} }
var purchaseSchemeList = apiResponse.Data; var purchaseSchemeList = apiResponse.Data;
var waitList = new List<EventWaitHandle>(); var waitList = new List<EventWaitHandle>();
foreach (var sku in Product.SkuList) foreach (var sku in ProductSkuList)
{ {
//当前SKU下当前采购商的采购方案 //当前SKU下当前采购商的采购方案
var apiScheme = purchaseSchemeList.FirstOrDefault(s => s.SkuId == sku.Id && s.PurchaserId == PurchaserId); var apiScheme = purchaseSchemeList.FirstOrDefault(s => s.SkuId == sku.Id && s.PurchaserId == PurchaserId);
if (apiScheme == null) if (apiScheme == null)
continue; continue;
sku.SelectedPurchaseScheme = PurchaseScheme.Convert(apiScheme); sku.SelectedPurchaseScheme = PurchaseScheme.Convert(apiScheme);
var ewh = new ManualResetEvent(false); var ewh = new ManualResetEvent(false);
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(purchaseSchemeProduct); LoadPurchaseProduct(purchaseSchemeProduct);
} }
ewh.Set(); ewh.Set();
ewh.Dispose(); ewh.Dispose();
}); });
} }
WaitHandle.WaitAll(waitList.ToArray()); WaitHandle.WaitAll(waitList.ToArray());
IsLoading = false; IsLoading = false;
}); });
} }
} }
@ -230,7 +234,7 @@ namespace BBWY.Client.ViewModels
{ {
productSku.SelectedPurchaseScheme = new PurchaseScheme() productSku.SelectedPurchaseScheme = new PurchaseScheme()
{ {
ProductId = Product.Id, ProductId = productSku.ProductId,
SkuId = productSku.Id SkuId = productSku.Id
}; };
} }
@ -250,9 +254,9 @@ namespace BBWY.Client.ViewModels
private void RemovePurchaseSchemeProduct(PurchaseSchemeProduct purchaseSchemeProduct) private void RemovePurchaseSchemeProduct(PurchaseSchemeProduct purchaseSchemeProduct)
{ {
var productSku = Product.SkuList.FirstOrDefault(sku => sku.Id == purchaseSchemeProduct.SkuId); var productSku = ProductSkuList.FirstOrDefault(sku => sku.Id == purchaseSchemeProduct.SkuId);
productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Remove(purchaseSchemeProduct); productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Remove(purchaseSchemeProduct);
if (!Product.SkuList.Any(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count > 0)) if (!ProductSkuList.Any(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count > 0))
PurchaserId = string.Empty; PurchaserId = string.Empty;
} }
@ -274,7 +278,7 @@ namespace BBWY.Client.ViewModels
MessageBox.Show("未能识别的url"); MessageBox.Show("未能识别的url");
return; return;
} }
var sku = Product.SkuList.FirstOrDefault(s => s.Id == purchaseSchemeProduct.SkuId); var sku = ProductSkuList.FirstOrDefault(s => s.Id == purchaseSchemeProduct.SkuId);
var purchaseUrl = match.Groups[1].Value; var purchaseUrl = match.Groups[1].Value;
if (sku.SelectedPurchaseScheme.PurchaseSchemeProductList.Any(p => p.PurchaseUrl == purchaseUrl)) if (sku.SelectedPurchaseScheme.PurchaseSchemeProductList.Any(p => p.PurchaseUrl == purchaseUrl))
{ {
@ -342,7 +346,7 @@ namespace BBWY.Client.ViewModels
} }
purchaseSchemeProduct.IsEditing = false; purchaseSchemeProduct.IsEditing = false;
var productSku = Product.SkuList.FirstOrDefault(sku => sku.Id == purchaseSchemeProduct.SkuId); var productSku = ProductSkuList.FirstOrDefault(sku => sku.Id == purchaseSchemeProduct.SkuId);
productSku.SelectedPurchaseScheme.PurchaserId = PurchaserId; productSku.SelectedPurchaseScheme.PurchaserId = PurchaserId;
productSku.SelectedPurchaseScheme.PurchaserName = PurchaserName; productSku.SelectedPurchaseScheme.PurchaserName = PurchaserName;
productSku.SelectedPurchaseScheme.PurchaserLocation = PurchaserLocation; productSku.SelectedPurchaseScheme.PurchaserLocation = PurchaserLocation;
@ -357,24 +361,24 @@ namespace BBWY.Client.ViewModels
private void SavePurchaseScheme() private void SavePurchaseScheme()
{ {
if (!Product.SkuList.Any(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count != 0)) if (!ProductSkuList.Any(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count != 0))
{ {
MessageBox.Show("没有需要保存的数据,如需删除该采购商所有数据请返回采购商列表进行删除", "提示"); MessageBox.Show("没有需要保存的数据,如需删除该采购商所有数据请返回采购商列表进行删除", "提示");
return; return;
} }
var hasNoReady = Product.SkuList.Any(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Any(p => p.IsEditing)); var hasNoReady = ProductSkuList.Any(s => s.SelectedPurchaseScheme != null && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Any(p => p.IsEditing));
if (hasNoReady) if (hasNoReady)
{ {
MessageBox.Show("存在未保存的数据", "提示"); MessageBox.Show("存在未保存的数据", "提示");
return; return;
} }
var addPurchaseSchemeList = Product.SkuList.Where(s => s.SelectedPurchaseScheme != null && var addPurchaseSchemeList = ProductSkuList.Where(s => s.SelectedPurchaseScheme != null &&
s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count > 0 && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count > 0 &&
s.SelectedPurchaseScheme.Id == 0) s.SelectedPurchaseScheme.Id == 0)
.Select(s => s.SelectedPurchaseScheme).ToList(); .Select(s => s.SelectedPurchaseScheme).ToList();
var editPurchaseSchemeList = Product.SkuList.Where(s => s.SelectedPurchaseScheme != null && var editPurchaseSchemeList = ProductSkuList.Where(s => s.SelectedPurchaseScheme != null &&
s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count > 0 && s.SelectedPurchaseScheme.PurchaseSchemeProductList.Count > 0 &&
s.SelectedPurchaseScheme.Id != 0) s.SelectedPurchaseScheme.Id != 0)
.Select(s => s.SelectedPurchaseScheme).ToList(); .Select(s => s.SelectedPurchaseScheme).ToList();
@ -409,11 +413,11 @@ namespace BBWY.Client.ViewModels
{ {
PurchaserId = PurchaserName = string.Empty; PurchaserId = PurchaserName = string.Empty;
//clear data //clear data
foreach (var sku in Product.SkuList) foreach (var sku in ProductSkuList)
{ {
sku.SelectedPurchaseScheme = null; sku.SelectedPurchaseScheme = null;
} }
Product = null; //Product = null;
e.Cancel = false; e.Cancel = false;
} }

29
BBWY.Client/ViewModels/Ware/WareManagerViewModel.cs

@ -143,7 +143,10 @@ namespace BBWY.Client.ViewModels
#endregion #endregion
#region 加载采购方案 #region 加载采购方案
LoadPurchaseScheme(productList); var skuList = new List<ProductSku>();
foreach (var p in productList)
skuList.AddRange(p.SkuList);
LoadPurchaseScheme(skuList);
#endregion #endregion
App.Current.Dispatcher.BeginInvoke((Action)delegate App.Current.Dispatcher.BeginInvoke((Action)delegate
@ -185,9 +188,9 @@ namespace BBWY.Client.ViewModels
/// 加载采购方案 /// 加载采购方案
/// </summary> /// </summary>
/// <param name="productList"></param> /// <param name="productList"></param>
private void LoadPurchaseScheme(IList<Product> productList) private void LoadPurchaseScheme(IList<ProductSku> skuList)
{ {
var response = purchaseService.GetPurchaseSchemeList(productList.Select(p => p.Id).ToList(), string.Empty, globalContext.User.Shop.ShopId); var response = purchaseService.GetPurchaseSchemeList(skuList.Select(s => s.Id).ToList(), string.Empty, globalContext.User.Shop.ShopId);
if (!response.Success) if (!response.Success)
{ {
App.Current.Dispatcher.BeginInvoke((Action)delegate { MessageBox.Show(response.Msg, "获取采购方案"); }); App.Current.Dispatcher.BeginInvoke((Action)delegate { MessageBox.Show(response.Msg, "获取采购方案"); });
@ -198,16 +201,13 @@ namespace BBWY.Client.ViewModels
App.Current.Dispatcher.Invoke(() => App.Current.Dispatcher.Invoke(() =>
{ {
foreach (var p in productList) foreach (var s in skuList)
{ {
foreach (var s in p.SkuList) s.PurchaseSchemeList.Clear();
{ var currentSchemeList = schemeList.Where(scheme => scheme.SkuId == s.Id);
s.PurchaseSchemeList.Clear(); if (currentSchemeList.Count() > 0)
var currentSchemeList = schemeList.Where(scheme => scheme.SkuId == s.Id); foreach (var scheme in currentSchemeList)
if (currentSchemeList.Count() > 0) s.PurchaseSchemeList.Add(PurchaseScheme.Convert(scheme));
foreach (var scheme in currentSchemeList)
s.PurchaseSchemeList.Add(PurchaseScheme.Convert(scheme));
}
} }
}); });
@ -297,7 +297,8 @@ namespace BBWY.Client.ViewModels
private void OpenBindingView(Product product, string purchaserId, string purchaserName) private void OpenBindingView(Product product, string purchaserId, string purchaserName)
{ {
bindingPurchaseProduct.SetData(product, purchaserId, purchaserName); var skuList = product.SkuList;
bindingPurchaseProduct.SetData(skuList, purchaserId, purchaserName);
var bindingView = new Views.Ware.BindingPurchaseProduct(); var bindingView = new Views.Ware.BindingPurchaseProduct();
var r = bindingView.ShowDialog(); var r = bindingView.ShowDialog();
if (r == true) if (r == true)
@ -306,7 +307,7 @@ namespace BBWY.Client.ViewModels
Task.Factory.StartNew(() => Task.Factory.StartNew(() =>
{ {
IsLoading = true; IsLoading = true;
LoadPurchaseScheme(new List<Product>() { product }); LoadPurchaseScheme(skuList);
IsLoading = false; IsLoading = false;
App.Current.Dispatcher.BeginInvoke((Action)delegate App.Current.Dispatcher.BeginInvoke((Action)delegate
{ {

4
BBWY.Client/Views/Order/ChoosePurchaseScheme.xaml

@ -50,7 +50,9 @@
<c:BButton Content="下单" HorizontalAlignment="Stretch" <c:BButton Content="下单" HorizontalAlignment="Stretch"
Background="#1CC2A2"/> Background="#1CC2A2"/>
<c:BButton Content="编辑" Grid.Column="1" HorizontalAlignment="Stretch" <c:BButton Content="编辑" Grid.Column="1" HorizontalAlignment="Stretch"
Background="#02A7F0"/> Background="#02A7F0"
Command="{Binding DataContext.EditCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding }"/>
<c:BButton Content="删除" Grid.Column="2" HorizontalAlignment="Stretch" <c:BButton Content="删除" Grid.Column="2" HorizontalAlignment="Stretch"
Background="#EC808D" Background="#EC808D"
Command="{Binding DataContext.DeleteCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}" Command="{Binding DataContext.DeleteCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}"

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

@ -28,7 +28,7 @@
<Run Text="{Binding PurchaserName}"/> <Run Text="{Binding PurchaserName}"/>
<Run Text="绑定采购商品"/> <Run Text="绑定采购商品"/>
</TextBlock> </TextBlock>
<ListBox x:Name="listbox_skuList" ItemsSource="{Binding Product.SkuList}" <ListBox x:Name="listbox_skuList" ItemsSource="{Binding ProductSkuList}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}" ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
Grid.Row="1" Grid.Row="1"
Foreground="{StaticResource Text.Color}"> Foreground="{StaticResource Text.Color}">

3
BBWY.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs

@ -120,9 +120,8 @@ namespace BBWY.Server.Business
{ {
var purchaseSchemeList = fsql.Select<PurchaseScheme, Purchaser>().InnerJoin((ps, p) => ps.PurchaserId == p.Id) var purchaseSchemeList = fsql.Select<PurchaseScheme, Purchaser>().InnerJoin((ps, p) => ps.PurchaserId == p.Id)
.Where((ps, p) => ps.ShopId == querySchemeRequest.ShopId) .Where((ps, p) => ps.ShopId == querySchemeRequest.ShopId)
.WhereIf(querySchemeRequest.ProductIdList != null && querySchemeRequest.ProductIdList.Count() > 0, (ps, p) => querySchemeRequest.ProductIdList.Contains(ps.ProductId)) .WhereIf(querySchemeRequest.SkuIdList != null && querySchemeRequest.SkuIdList.Count() > 0, (ps, p) => querySchemeRequest.SkuIdList.Contains(ps.SkuId))
.WhereIf(!string.IsNullOrEmpty(querySchemeRequest.PurchaserId), (ps, p) => ps.PurchaserId == querySchemeRequest.PurchaserId) .WhereIf(!string.IsNullOrEmpty(querySchemeRequest.PurchaserId), (ps, p) => ps.PurchaserId == querySchemeRequest.PurchaserId)
.WhereIf(!string.IsNullOrEmpty(querySchemeRequest.SkuId), (ps, p) => ps.SkuId == querySchemeRequest.SkuId)
.ToList((ps, p) => new PurchaseSchemeResponse() .ToList((ps, p) => new PurchaseSchemeResponse()
{ {
Id = ps.Id, Id = ps.Id,

4
BBWY.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs

@ -8,13 +8,11 @@ namespace BBWY.Server.Model.Dto
{ {
public long ShopId { get; set; } public long ShopId { get; set; }
public IList<string> ProductIdList { get; set; } public IList<string> SkuIdList { get; set; }
/// <summary> /// <summary>
/// 采购商Id, 可空 /// 采购商Id, 可空
/// </summary> /// </summary>
public string PurchaserId { get; set; } public string PurchaserId { get; set; }
public string SkuId { get; set; }
} }
} }

Loading…
Cancel
Save