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="shopId"></param>
/// <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,
"api/PurchaseScheme/GetPurchaseSchemeList",
new { productIdList, purchaserId, shopId },
new { skuIdList, purchaserId, shopId },
null,
HttpMethod.Post);
}
@ -32,11 +32,11 @@ namespace BBWY.Client.APIServices
/// <param name="skuId"></param>
/// <param name="shopId"></param>
/// <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,
"api/PurchaseScheme/GetPurchaseSchemeList",
new { skuId, shopId },
new { skuIdList, shopId },
null,
HttpMethod.Post);
}

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

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

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

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

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

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

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

@ -50,7 +50,9 @@
<c:BButton Content="下单" HorizontalAlignment="Stretch"
Background="#1CC2A2"/>
<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"
Background="#EC808D"
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="绑定采购商品"/>
</TextBlock>
<ListBox x:Name="listbox_skuList" ItemsSource="{Binding Product.SkuList}"
<ListBox x:Name="listbox_skuList" ItemsSource="{Binding ProductSkuList}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
Grid.Row="1"
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)
.Where((ps, p) => ps.ShopId == querySchemeRequest.ShopId)
.WhereIf(querySchemeRequest.ProductIdList != null && querySchemeRequest.ProductIdList.Count() > 0, (ps, p) => querySchemeRequest.ProductIdList.Contains(ps.ProductId))
.WhereIf(querySchemeRequest.SkuIdList != null && querySchemeRequest.SkuIdList.Count() > 0, (ps, p) => querySchemeRequest.SkuIdList.Contains(ps.SkuId))
.WhereIf(!string.IsNullOrEmpty(querySchemeRequest.PurchaserId), (ps, p) => ps.PurchaserId == querySchemeRequest.PurchaserId)
.WhereIf(!string.IsNullOrEmpty(querySchemeRequest.SkuId), (ps, p) => ps.SkuId == querySchemeRequest.SkuId)
.ToList((ps, p) => new PurchaseSchemeResponse()
{
Id = ps.Id,

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

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

Loading…
Cancel
Save