506583276@qq.com 2 years ago
parent
commit
a52c669b99
  1. 1
      BBWYB.Client/APIServices/PurchaseProductAPIService.cs
  2. 2
      BBWYB.Client/App.xaml
  3. 7
      BBWYB.Client/App.xaml.cs
  4. 13
      BBWYB.Client/BBWYB.Client.csproj
  5. 3
      BBWYB.Client/GlobalContext.cs
  6. 12
      BBWYB.Client/Models/APIModel/Response/PurchaseSchemeProductResponse.cs
  7. 36
      BBWYB.Client/Models/APIModel/Response/PurchaseSchemeResponse.cs
  8. 2
      BBWYB.Client/Models/Product/Purchaser.cs
  9. 28
      BBWYB.Client/Models/PurchaseScheme/PurchaseScheme.cs
  10. 16
      BBWYB.Client/Models/PurchaseScheme/PurchaseSchemeProduct.cs
  11. 21
      BBWYB.Client/ViewModels/MainViewModel.cs
  12. 18
      BBWYB.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs
  13. 4
      BBWYB.Client/ViewModels/Purchase/OnlinePurchaseViewModel.cs
  14. 9
      BBWYB.Client/ViewModels/ViewModelLocator.cs
  15. 250
      BBWYB.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs
  16. 228
      BBWYB.Client/ViewModels/Ware/WareManagerViewModel.cs
  17. 96
      BBWYB.Client/ViewModels/WebVM.cs
  18. 2
      BBWYB.Client/Views/Ware/BindingPurchaseProduct.xaml
  19. 19
      BBWYB.Client/Views/Ware/BindingPurchaseProduct.xaml.cs
  20. 59
      BBWYB.Client/Views/Ware/WareManager.xaml
  21. 25
      BBWYB.Client/Views/Web.xaml
  22. 83
      BBWYB.Client/Views/Web.xaml.cs
  23. 14
      BBWYB.Client/Views/WebB/WebB_GoodsSource.xaml
  24. 104
      BBWYB.Client/Views/WebB/WebB_GoodsSource.xaml.cs
  25. 2
      BBWYB.Client/appsettings.json
  26. 2
      BBWYB.Common/Log/NLogManager.cs
  27. 44
      BBWYB.Server.API/Controllers/DataRepairController.cs
  28. 25
      BBWYB.Server.API/Controllers/JDController.cs
  29. 14
      BBWYB.Server.API/Controllers/OrderSyncController.cs
  30. 23
      BBWYB.Server.API/Controllers/ProductController.cs
  31. 109
      BBWYB.Server.API/Controllers/PurchaseSchemeController.cs
  32. 7
      BBWYB.Server.API/Program.cs
  33. 1
      BBWYB.Server.API/appsettings.json
  34. 459
      BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
  35. 19
      BBWYB.Server.Business/Extensions/OrderStateExtension.cs
  36. 4
      BBWYB.Server.Business/FreeSqlMultiDBManager.cs
  37. 203
      BBWYB.Server.Business/JD/JDBusiness.cs
  38. 35
      BBWYB.Server.Business/Order/Message/OrderMessageBusiness.cs
  39. 71
      BBWYB.Server.Business/Order/OrderBusiness.cs
  40. 117
      BBWYB.Server.Business/Product/ProductBusiness.cs
  41. 910
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  42. 73
      BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs
  43. 1099
      BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
  44. 151
      BBWYB.Server.Business/QiKuManager.cs
  45. 24
      BBWYB.Server.Business/Sync/OrderSyncBusiness.cs
  46. 7
      BBWYB.Server.Business/Vender/VenderBusiness.cs
  47. 8
      BBWYB.Server.Model/BBWYB.Server.Model.csproj
  48. 223
      BBWYB.Server.Model/Db/BBWY/PurchaseOrderV2.cs
  49. 29
      BBWYB.Server.Model/Db/Order/InStoreOrderCheckTask.cs
  50. 30
      BBWYB.Server.Model/Db/Order/InStorePurchaseOrdeRrelationInfo.cs
  51. 2
      BBWYB.Server.Model/Db/Order/Order.cs
  52. 5
      BBWYB.Server.Model/Db/Order/OrderPurchaseRelationinfo.cs
  53. 6
      BBWYB.Server.Model/Db/Order/OrderSku.cs
  54. 40
      BBWYB.Server.Model/Db/PurchaseScheme/OrderPurchaseRelationInfo.cs
  55. 46
      BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs
  56. 45
      BBWYB.Server.Model/Db/PurchaseScheme/PurchaseSchemeGroup.cs
  57. 4
      BBWYB.Server.Model/Db/PurchaseScheme/Purchaser.cs
  58. 21
      BBWYB.Server.Model/Db/PurchaseScheme/PurchasesSchemeGroupIndex.cs
  59. 6
      BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproduct.cs
  60. 11
      BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs
  61. 83
      BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseScheme.cs
  62. 59
      BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseSchemeProduct.cs
  63. 72
      BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseSchemeProductsku.cs
  64. 51
      BBWYB.Server.Model/Dto/Core/HY/HYPurchaseScheme.cs
  65. 11
      BBWYB.Server.Model/Dto/Core/ProportionalCalculationCostResult.cs
  66. 8
      BBWYB.Server.Model/Dto/Request/Product/QueryBProductRequest.cs
  67. 15
      BBWYB.Server.Model/Dto/Request/Product/QueryProductSkuPriceRequest.cs
  68. 14
      BBWYB.Server.Model/Dto/Request/PurchaseOrder/CargoParamRequest.cs
  69. 4
      BBWYB.Server.Model/Dto/Request/PurchaseOrder/PreviewOrderRequest.cs
  70. 6
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs
  71. 9
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/DeletePurchaseSchemeRequest.cs
  72. 11
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/DeletePurchaseSkuRequest.cs
  73. 13
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/EditPurchaseRatioRequest.cs
  74. 3
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/EditPurchaseSchemeRequest.cs
  75. 42
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs
  76. 26
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductSkuRequest.cs
  77. 37
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs
  78. 20
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeAndGroupRequest.cs
  79. 7
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeCountRequest.cs
  80. 31
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs
  81. 2
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/RefreshSchemeRequest.cs
  82. 17
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/hy/QueryHYSchemeRequest.cs
  83. 5
      BBWYB.Server.Model/Dto/Request/QiKu/QiKuPackTaskSkuPurchaseSchemeIdRequest.cs
  84. 16
      BBWYB.Server.Model/Dto/Response/Product/BProductResponse.cs
  85. 9
      BBWYB.Server.Model/Dto/Response/Product/BProductSkuResponse.cs
  86. 10
      BBWYB.Server.Model/Dto/Response/PurchaseScheme/HY/HYPurchaseSchemeResponse.cs
  87. 11
      BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseProductBasicInfoResponse.cs
  88. 9
      BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeCountResponse.cs
  89. 9
      BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeGroupResponse.cs
  90. 31
      BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs
  91. 26
      BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs
  92. 9
      BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs
  93. 4
      BBWYB.Server.Model/Enums.cs
  94. 11
      BBWYB.Server.Model/MappingProfiles.cs
  95. 4
      SDKAdapter/ExpressCompanyNameConverter.cs
  96. 7
      SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs
  97. 21
      WebTest/GlobalContext.cs
  98. 106
      WebTest/MainWindow.xaml.cs
  99. 36
      WebTest/ShellExecuteHelper.cs

1
BBWYB.Client/APIServices/PurchaseProductAPIService.cs

@ -210,6 +210,7 @@ namespace BBWYB.Client.APIServices
Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(), Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(),
Id2 = jobject["globalData"]["tempModel"]["sellerLoginId"]?.ToString(), Id2 = jobject["globalData"]["tempModel"]["sellerLoginId"]?.ToString(),
Name = jobject["globalData"]["tempModel"]["companyName"].ToString(), Name = jobject["globalData"]["tempModel"]["companyName"].ToString(),
MemberId = jobject["globalData"]?["tempModel"]?["sellerMemberId"]?.ToString(),
Location = location, Location = location,
Platform = platform Platform = platform
}; };

2
BBWYB.Client/App.xaml

@ -4,7 +4,7 @@
xmlns:local="clr-namespace:BBWYB.Client" xmlns:local="clr-namespace:BBWYB.Client"
xmlns:vm="clr-namespace:BBWYB.Client.ViewModels" xmlns:vm="clr-namespace:BBWYB.Client.ViewModels"
xmlns:ctr="clr-namespace:BBWYB.Client.Converters" xmlns:ctr="clr-namespace:BBWYB.Client.Converters"
StartupUri="/Views/MainWindow.xaml" StartupUri="/Views/Web.xaml"
ShutdownMode="OnExplicitShutdown"> ShutdownMode="OnExplicitShutdown">
<!--StartupUri="/Views/MainWindow.xaml"--> <!--StartupUri="/Views/MainWindow.xaml"-->
<Application.Resources> <Application.Resources>

7
BBWYB.Client/App.xaml.cs

@ -50,9 +50,9 @@ namespace BBWYB.Client
gl.UserToken = userToken; gl.UserToken = userToken;
#region 注册全局异常 #region 注册全局异常
this.DispatcherUnhandledException += App_DispatcherUnhandledException; ; this.DispatcherUnhandledException += App_DispatcherUnhandledException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; ; AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException; ; TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
#endregion #endregion
@ -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);

13
BBWYB.Client/BBWYB.Client.csproj

@ -53,4 +53,17 @@
<Resource Include="Resources\Images\defaultItem.png" /> <Resource Include="Resources\Images\defaultItem.png" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Compile Update="Views\WebB\WebB_GoodsSource.xaml.cs">
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Page Update="Views\WebB\WebB_GoodsSource.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
<SubType>Designer</SubType>
</Page>
</ItemGroup>
</Project> </Project>

3
BBWYB.Client/GlobalContext.cs

@ -1,7 +1,6 @@
using BBWYB.Client.APIServices; using BBWYB.Client.APIServices;
using BBWYB.Client.Helpers; using BBWYB.Client.Helpers;
using BBWYB.Client.Models; using BBWYB.Client.Models;
using BBWYB.Client.ViewModels;
using BBWYB.Client.Views.PackPurchaseTaska; using BBWYB.Client.Views.PackPurchaseTaska;
using BBWYB.Client.Views.WebB; using BBWYB.Client.Views.WebB;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
@ -22,7 +21,7 @@ namespace BBWYB.Client
{ {
public GlobalContext() public GlobalContext()
{ {
BBWYBApiVersion = "10030"; BBWYBApiVersion = "10038";
} }
private User user; private User user;

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

@ -13,6 +13,18 @@ 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 string PurchaserMemberId { 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; }
} }
} }

2
BBWYB.Client/Models/Product/Purchaser.cs

@ -25,5 +25,7 @@ namespace BBWYB.Client.Models
public string Location { get; set; } public string Location { get; set; }
public Platform Platform { get; set; } public Platform Platform { get; set; }
public string MemberId { 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));

16
BBWYB.Client/Models/PurchaseScheme/PurchaseSchemeProduct.cs

@ -28,6 +28,14 @@ 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 string PurchaserMemberId { get; set; }
public bool IsEditing public bool IsEditing
{ {
get => isEditing; get => isEditing;
@ -79,7 +87,13 @@ 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,
PurchaserMemberId = apiModel.PurchaserMemberId
}; };
model.SelectedSkuIdList.AddRange(apiModel.PurchaseSchemeProductSkuList.Select(s => s.PurchaseSkuId)); model.SelectedSkuIdList.AddRange(apiModel.PurchaseSchemeProductSkuList.Select(s => s.PurchaseSkuId));
return model; return model;

21
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 = "商品管理",
@ -109,7 +109,8 @@ namespace BBWYB.Client.ViewModels
ChildList = new List<MenuModel>() ChildList = new List<MenuModel>()
{ {
new MenuModel(){ Name="订单列表Bata",Url="/Views/WebB/WebB.xaml" }, new MenuModel(){ Name="订单列表Bata",Url="/Views/WebB/WebB.xaml" },
new MenuModel(){ Name="绩效考核",Url="/Views/WebB/WebB_KPI.xaml" } new MenuModel(){ Name="绩效考核",Url="/Views/WebB/WebB_KPI.xaml" },
new MenuModel(){ Name="货源管理",Url="/Views/WebB/WebB_GoodsSource.xaml" }
} }
}); });
MenuList.Add(new MenuModel() MenuList.Add(new MenuModel()
@ -232,7 +233,7 @@ namespace BBWYB.Client.ViewModels
vm.OrderVM.Refresh(); vm.OrderVM.Refresh();
if (vm.IsCreateWareManager) if (vm.IsCreateWareManager)
vm.WareManager.Refresh(); vm.WareManager.Refresh();
if (SelectedMenuModel.Name == "订单列表Bata") if (SelectedMenuModel?.Name == "订单列表Bata")
{ {
WeakReferenceMessenger.Default.Send(new Message_WebB_Refresh(null)); WeakReferenceMessenger.Default.Send(new Message_WebB_Refresh(null));
} }

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,

9
BBWYB.Client/ViewModels/ViewModelLocator.cs

@ -118,5 +118,14 @@ namespace BBWYB.Client.ViewModels
return s.ServiceProvider.GetRequiredService<UpdatePurchaseTaskViewModel>(); return s.ServiceProvider.GetRequiredService<UpdatePurchaseTaskViewModel>();
} }
} }
public WebVM WebVM
{
get
{
using var s = sp.CreateScope();
return s.ServiceProvider.GetRequiredService<WebVM>();
}
}
} }
} }

250
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,16 @@ 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;
purchaseSchemeProduct.PurchaserMemberId = data.Value.purchaser.MemberId;
//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
{ {
@ -203,33 +276,33 @@ namespace BBWYB.Client.ViewModels
private void AddPurchaseProduct(ProductSku productSku) private void AddPurchaseProduct(ProductSku productSku)
{ {
if (productSku.PurchaseSchemeList.Count > 4) //if (productSku.PurchaseSchemeList.Count > 4)
{ //{
MessageBox.Show("该sku的采购方案已达上限(5)"); // MessageBox.Show("该sku的采购方案已达上限(5)");
return; // return;
} //}
if (productSku.SelectedPurchaseScheme == null) if (productSku.SelectedPurchaseScheme == null)
{ {
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)
{ //{
MessageBox.Show("该采购方案的商品数量已达上限(5)"); // MessageBox.Show("该采购方案的商品数量已达上限(4)");
return; // return;
} //}
productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Add(new PurchaseSchemeProduct() productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Add(new PurchaseSchemeProduct()
{ {
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 +310,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 +327,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 +349,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 +392,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 +458,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;
}); });
} }

96
BBWYB.Client/ViewModels/WebVM.cs

@ -0,0 +1,96 @@
using BBWYB.Client.APIServices;
using BBWYB.Client.Models;
using BBWYB.Client.Views;
using BBWYB.Common.Extensions;
using BBWYB.Common.Models;
using CommunityToolkit.Mvvm.Messaging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace BBWYB.Client.ViewModels
{
public class WebVM : BaseVM, IDenpendency
{
private MdsApiService mdsApiService;
private MenuModel selectedMenuModel;
private bool isLoading;
ShopService shopService;
public GlobalContext GlobalContext { get; set; }
public bool IsLoading { get => isLoading; set { SetProperty(ref isLoading, value); } }
public WebVM(GlobalContext globalContext,
MdsApiService mdsApiService,
ShopService shopService)
{
this.mdsApiService = mdsApiService;
this.GlobalContext = globalContext;
this.shopService = shopService;
Task.Factory.StartNew(Login);
}
private void Login()
{
IsLoading = true;
try
{
var mdsUserResponse = mdsApiService.GetUserInfo(GlobalContext.UserToken);
if (!mdsUserResponse.Success)
throw new Exception($"获取磨刀石用户信息失败 {mdsUserResponse.Msg}");
GlobalContext.User = mdsUserResponse.Data.Map<User>();
GlobalContext.User.Token = GlobalContext.UserToken;
GlobalContext.User.SonDepartmentNames = string.Empty;
if (mdsUserResponse.Data.SonDepartmentList != null && mdsUserResponse.Data.SonDepartmentList.Count > 0)
GlobalContext.User.SonDepartmentNames = string.Join(',', mdsUserResponse.Data.SonDepartmentList.Select(sd => sd.DepartmentName));
var res = shopService.GetDepartmentList();
if (!res.Success)
throw new Exception(res.Msg);
var allDepartmentList = res.Data.Map<IList<Department>>();
var shopList = new List<Shop>();
foreach (var d in allDepartmentList)
shopList.AddRange(d.ShopList);
GlobalContext.User.ShopList = shopList;
IList<Department> departmentList = null;
//var response = mdsApiService.GetShopDetailList();
//if (!response.Success)
// throw new Exception(response.Msg);
departmentList = allDepartmentList.Where(d => d.Name.Contains("供应链")).ToList();
if (departmentList.Count == 0)
throw new Exception("缺少有效的部门数据");
var shopIds = new List<string>();
foreach (var d in departmentList)
{
if (d.ShopList != null && d.ShopList.Count > 0)
{
foreach (var s in d.ShopList)
shopIds.Add(s.ShopId.ToString());
}
}
GlobalContext.User.DepartmentList = departmentList;
WeakReferenceMessenger.Default.Send(new Message_WebB_LoginCompleted(null));
IsLoading = false;
}
catch (Exception ex)
{
IsLoading = false;
App.Current.Dispatcher.Invoke(() =>
{
MessageBox.Show(ex.Message, "登录失败");
});
Environment.Exit(Environment.ExitCode);
}
}
}
}

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(() =>

59
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}"
@ -124,9 +127,9 @@
<DataTemplate> <DataTemplate>
<Border BorderThickness="0,0,0,0" BorderBrush="{StaticResource Border.Brush}" <Border BorderThickness="0,0,0,0" BorderBrush="{StaticResource Border.Brush}"
Width="{Binding ActualWidth,ElementName=listbox_sku}"> Width="{Binding ActualWidth,ElementName=listbox_sku}">
<Grid Height="150"> <Grid MinHeight="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}"

25
BBWYB.Client/Views/Web.xaml

@ -0,0 +1,25 @@
<c:BWindow x:Class="BBWYB.Client.Views.Web"
xmlns:c="clr-namespace:SJ.Controls;assembly=SJ.Controls"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BBWYB.Client.Views"
mc:Ignorable="d"
Style="{StaticResource bwstyle}"
DataContext="{Binding WebVM,Source={StaticResource Locator}}"
Title="Web" Height="450" Width="800">
<Grid x:Name="grid">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border BorderThickness="0,0,0,1" BorderBrush="{StaticResource MainMenu.BorderBrush}">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0">
<TextBlock Text="{Binding GlobalContext.User.Name}"/>
<TextBlock Text="{Binding GlobalContext.BBWYBApiVersion}" Margin="5,0,0,0"/>
</StackPanel>
</Border>
<c:RoundWaitProgress Play="{Binding IsLoading}" Panel.ZIndex="999" Grid.RowSpan="2"/>
</Grid>
</c:BWindow>

83
BBWYB.Client/Views/Web.xaml.cs

@ -0,0 +1,83 @@
using CommunityToolkit.Mvvm.Messaging;
using CommunityToolkit.Mvvm.Messaging.Messages;
using Microsoft.Extensions.DependencyInjection;
using SJ.Controls;
using System.Windows;
using System.Windows.Controls;
namespace BBWYB.Client.Views
{
/// <summary>
/// Web.xaml 的交互逻辑
/// </summary>
public partial class Web : BWindow
{
private WebView2Manager w2m;
private bool isNavigated;
private GlobalContext globalContext;
public Web()
{
InitializeComponent();
this.Width = SystemParameters.WorkArea.Size.Width * 0.8;
this.Height = SystemParameters.WorkArea.Size.Height * 0.7;
var sp = (App.Current as App).ServiceProvider;
using (var s = sp.CreateScope())
{
w2m = s.ServiceProvider.GetRequiredService<WebView2Manager>();
globalContext = s.ServiceProvider.GetRequiredService<GlobalContext>();
}
WeakReferenceMessenger.Default.Register<Message_WebB_LoginCompleted>(this, (o, x) =>
{
this.Dispatcher.BeginInvoke(initWebView);
});
}
private void Web_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
}
private void initWebView()
{
#if DEBUG
var url = "http://192.168.1.2:8080";
var registerName = "webTestContext";
//var url = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "s.html");
#else
var url = "http://qtbbwy.qiyue666.com";
var registerName = "webContext";
#endif
//var url = "http://qtbbwy.qiyue666.com";
w2m.CoreWebView2InitializationCompleted = (e) =>
{
w2m.wb2.CoreWebView2.AddHostObjectToScript(registerName, this.globalContext);
isNavigated = true;
w2m.wb2.CoreWebView2.Navigate(url);
};
w2m.Init("bbwyb_web");
w2m.wb2.SetValue(Grid.RowProperty, 1);
w2m.wb2.Margin = new Thickness(1, 0, 1, 0);
//grid.Children.Clear();
grid.Children.Add(w2m.wb2);
if (w2m.IsInitializationCompleted && !isNavigated)
{
w2m.wb2.CoreWebView2.Navigate(url);
//w2m.wb2.CoreWebView2.NavigateToString(content);
isNavigated = true;
}
}
}
public class Message_WebB_LoginCompleted : ValueChangedMessage<object>
{
public Message_WebB_LoginCompleted(object value) : base(value)
{
}
}
}

14
BBWYB.Client/Views/WebB/WebB_GoodsSource.xaml

@ -0,0 +1,14 @@
<Page x:Class="BBWYB.Client.Views.WebB.WebB_GoodsSource"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:BBWYB.Client.Views.WebB"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="WebB">
<Grid x:Name="grid">
</Grid>
</Page>

104
BBWYB.Client/Views/WebB/WebB_GoodsSource.xaml.cs

@ -0,0 +1,104 @@
using CommunityToolkit.Mvvm.Messaging;
using CommunityToolkit.Mvvm.Messaging.Messages;
using Microsoft.Extensions.DependencyInjection;
using System.Windows;
using System.Windows.Controls;
namespace BBWYB.Client.Views.WebB
{
/// <summary>
/// WebB.xaml 的交互逻辑
/// </summary>
public partial class WebB_GoodsSource : Page
{
private WebView2Manager w2m;
private bool isNavigated;
private GlobalContext globalContext;
public WebB_GoodsSource()
{
InitializeComponent();
this.Loaded += WebB_Loaded;
this.Unloaded += WebB_Unloaded;
//WeakReferenceMessenger.Default.Register<Message_WebB_Refresh>(this, (o, x) =>
//{
// this.Dispatcher.Invoke(() =>
// {
// _ = w2m.wb2.ExecuteScriptAsync("window.location.reload();");
// });
//});
//WeakReferenceMessenger.Default.Register<Message_WebB_RefreshPack>(this, (o, x) =>
//{
// this.Dispatcher.Invoke(() =>
// {
// _ = w2m.wb2.ExecuteScriptAsync("window.BBWY_B_WebContex('PACK_CONFIG_SUCCESS');");
// });
//});
}
private void WebB_Unloaded(object sender, RoutedEventArgs e)
{
grid.Children.Remove(w2m.wb2);
//w2m.wb2.Dispose();
w2m.Close();
WeakReferenceMessenger.Default.UnregisterAll(this);
}
private void WebB_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
var sp = (App.Current as App).ServiceProvider;
using (var s = sp.CreateScope())
{
w2m = s.ServiceProvider.GetRequiredService<WebView2Manager>();
globalContext = s.ServiceProvider.GetRequiredService<GlobalContext>();
}
#if DEBUG
var url = "http://192.168.1.2:8080/#/goods-source";
var registerName = "webTestContext";
//var url = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "s.html");
#else
var url = "http://qtbbwy.qiyue666.com/#/goods-source";
var registerName = "webContext";
#endif
w2m.CoreWebView2InitializationCompleted = (e) =>
{
w2m.wb2.CoreWebView2.AddHostObjectToScript(registerName, this.globalContext);
isNavigated = true;
w2m.wb2.CoreWebView2.Navigate(url);
};
w2m.Init("bbwyb_web");
w2m.wb2.SetValue(Grid.RowProperty, 1);
w2m.wb2.Margin = new Thickness(1, 0, 1, 0);
//grid.Children.Clear();
grid.Children.Add(w2m.wb2);
if (w2m.IsInitializationCompleted && !isNavigated)
{
w2m.wb2.CoreWebView2.Navigate(url);
//w2m.wb2.CoreWebView2.NavigateToString(content);
isNavigated = true;
}
}
}
//public class Message_WebB_GoodsSource_Refresh : ValueChangedMessage<object>
//{
// public Message_WebB_GoodsSource_Refresh(object value) : base(value)
// {
// }
//}
//public class Message_WebB_GoodsSource_RefreshPack : ValueChangedMessage<object>
//{
// public Message_WebB_GoodsSource_RefreshPack(object value) : base(value)
// {
// }
//}
}

2
BBWYB.Client/appsettings.json

@ -1,5 +1,5 @@
{ {
// "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",

2
BBWYB.Common/Log/NLogManager.cs

@ -29,8 +29,6 @@ namespace BBWYB.Common.Log
loggerDictionary.TryAdd(loggerName, logger); loggerDictionary.TryAdd(loggerName, logger);
} }
return logger; return logger;
} }
} }
} }

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

@ -26,8 +26,15 @@ namespace BBWYB.Server.API.Controllers
} }
/// <summary> /// <summary>
/// 修复采购商信息 /// 修复订单Sku成本
/// </summary> /// </summary>
[HttpPost]
public void SupplementOrderSkuCost()
{
dataRepairBusiness.SupplementOrderSkuCost();
}
[HttpPost] [HttpPost]
public void SupplementPurchaserInfo() public void SupplementPurchaserInfo()
{ {
@ -35,12 +42,41 @@ namespace BBWYB.Server.API.Controllers
} }
/// <summary> /// <summary>
/// 修复订单Sku成本 /// 补采购方案分组
/// </summary> /// </summary>
[HttpPost] [HttpPost]
public void SupplementOrderSkuCost() public void SupplementPurchaseSchemeGroup()
{ {
dataRepairBusiness.SupplementOrderSkuCost(); dataRepairBusiness.SupplementPurchaseSchemeGroup();
}
/// <summary>
/// 手动处理待核算
/// </summary>
[HttpPost]
public void RepairOrderStateToCheckComputation()
{
dataRepairBusiness.RepairOrderStateToCheckComputation();
}
[HttpPost]
public void SyncCCancelOrder()
{ dataRepairBusiness.SyncCCancelOrder(); }
[HttpPost]
public void BSyncToC()
{ dataRepairBusiness.BSyncToC(); }
[HttpPost]
public void SyncHistoryPurchaseScheme()
{ dataRepairBusiness.SyncHistoryPurchaseScheme(); }
[HttpPost]
public void BatchCompleteOrder()
{
dataRepairBusiness.BatchCompleteOrder();
} }
} }
} }

25
BBWYB.Server.API/Controllers/JDController.cs

@ -0,0 +1,25 @@
using BBWYB.Server.Business.JD;
using Microsoft.AspNetCore.Mvc;
namespace BBWYB.Server.API.Controllers
{
public class JDController : BaseApiController
{
private JDBusiness jdBusiness;
public JDController(IHttpContextAccessor httpContextAccessor, JDBusiness jdBusiness) : base(httpContextAccessor)
{
this.jdBusiness = jdBusiness;
}
/// <summary>
/// 检查入仓采购单
/// </summary>
[HttpPost]
public void CheckInStoreOrder()
{
jdBusiness.CheckInStoreOrder();
}
}
}

14
BBWYB.Server.API/Controllers/OrderSyncController.cs

@ -31,5 +31,17 @@ namespace BBWYB.Server.API.Controllers
{ {
orderSyncBusiness.ManualOrderSync(shopId, orderId, null, null); orderSyncBusiness.ManualOrderSync(shopId, orderId, null, null);
} }
}
/// <summary>
/// 根据时间同步订单
/// </summary>
/// <param name="shopId"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
[HttpPost]
public void ManualOrderSyncByTime([FromQuery] long shopId, [FromQuery] DateTime startTime, [FromQuery] DateTime endTime)
{
orderSyncBusiness.ManualOrderSync(shopId, startTime, endTime);
}
}
} }

23
BBWYB.Server.API/Controllers/ProductController.cs

@ -1,4 +1,5 @@
using BBWYB.Server.Business; using BBWYB.Server.Business;
using BBWYB.Server.Model.Dto;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using SDKAdapter.OperationPlatform.Models; using SDKAdapter.OperationPlatform.Models;
@ -34,6 +35,28 @@ namespace BBWYB.Server.API.Controllers
return productBusiness.GetProductSkuList(request); return productBusiness.GetProductSkuList(request);
} }
/// <summary>
/// spu列表查询(包含sku)
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public BProductListResponse GetProductAndSkuList([FromBody]QueryBProductRequest request)
{
return productBusiness.GetProductAndSkuList(request);
}
/// <summary>
/// 查询sku现有售价
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public decimal? GetProductSkuPrice([FromBody] QueryProductSkuPriceRequest request)
{
return productBusiness.GetProductSkuPrice(request);
}
/// <summary> /// <summary>
/// 修改商品价格 /// 修改商品价格
/// </summary> /// </summary>

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

@ -1,5 +1,4 @@
using BBWYB.Server.Business; using BBWYB.Server.Business;
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto; using BBWYB.Server.Model.Dto;
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
@ -28,7 +27,17 @@ namespace BBWYB.Server.API.Controllers
} }
/// <summary> /// <summary>
/// 查询采购方案列表 /// 添加/编辑采购方案(web)
/// </summary>
/// <param name="batchCURDSchemeRequest"></param>
[HttpPost]
public void EditPurchaseSchemeV2([FromBody] BatchCURDSchemeRequest batchCURDSchemeRequest)
{
purchaseSchemeBusiness.EditPurchaseSchemeV2(batchCURDSchemeRequest);
}
/// <summary>
/// 获取采购方案列表
/// </summary> /// </summary>
/// <param name="querySchemeRequest"></param> /// <param name="querySchemeRequest"></param>
/// <returns></returns> /// <returns></returns>
@ -39,15 +48,38 @@ namespace BBWYB.Server.API.Controllers
} }
/// <summary> /// <summary>
/// 删除采购商 /// 获取采购分组和采购方案
/// </summary> /// </summary>
/// <param name="deletePurchaseSchemeRequest"></param> /// <param name="request"></param>
[HttpDelete] /// <returns></returns>
public void DeletePurchaser([FromBody] DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) [HttpPost]
public IList<PurchaseSchemeGroupResponse> GetPurchaseSchemeAndGroupList(QuerySchemeAndGroupRequest request)
{ {
purchaseSchemeBusiness.DeletePurchaser(deletePurchaseSchemeRequest); return purchaseSchemeBusiness.GetPurchaseSchemeAndGroupList(request);
} }
/// <summary>
/// 获取Sku采购方案数量
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public IList<PurchaseSchemeCountResponse> GetPurchaseSchemeCountList([FromBody] QuerySchemeCountRequest request)
{
return purchaseSchemeBusiness.GetPurchaseSchemeCountList(request);
}
///// <summary>
///// 删除采购商
///// </summary>
///// <param name="deletePurchaseSchemeRequest"></param>
//[HttpDelete]
//public void DeletePurchaser([FromBody] DeletePurchaseSchemeRequest deletePurchaseSchemeRequest)
//{
// purchaseSchemeBusiness.DeletePurchaser(deletePurchaseSchemeRequest);
//}
/// <summary> /// <summary>
/// 删除采购方案 /// 删除采购方案
/// </summary> /// </summary>
@ -58,16 +90,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的基本信息
@ -101,5 +133,48 @@ namespace BBWYB.Server.API.Controllers
{ {
return purchaseSchemeBusiness.RefreshPurchaseScheme(request); return purchaseSchemeBusiness.RefreshPurchaseScheme(request);
} }
///// <summary>
///// 修改采购配件比例
///// </summary>
///// <param name="request"></param>
//[HttpPost]
//public void EditPurchaseRatio([FromBody]EditPurchaseRatioAndActualPriceRequest request)
//{
// purchaseSchemeBusiness.EditPurchaseRatio(request);
//}
/// <summary>
/// 根据慧眼标的Id获取慧眼采购方案(含全部配件基本信息)
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public IList<HYPurchaseSchemeResponse> GetPurchaseSchemeByHYBDId([FromBody] QueryHYSchemeRequest request)
{
return purchaseSchemeBusiness.GetPurchaseSchemeByHYBDId(request);
}
/// <summary>
/// 修改采购配件比例
/// </summary>
/// <param name="request">最新的采购方案成本</param>
/// <returns>最新的采购方案成本</returns>
[HttpPost]
public decimal EditPurchaseRatio([FromBody] EditPurchaseRatioRequest request)
{
return purchaseSchemeBusiness.EditPurchaseRatio(request);
}
/// <summary>
/// 删除采购Sku
/// </summary>
/// <param name="request"></param>
/// <returns>最新的采购方案成本</returns>
[HttpDelete]
public decimal DeletePurchaseSku([FromBody]DeletePurchaseSkuRequest request)
{
return purchaseSchemeBusiness.DeletePurchaseSku(request);
}
} }
} }

7
BBWYB.Server.API/Program.cs

@ -32,10 +32,13 @@ services.AddSingleton(typeof(IFreeSql), fsql);
var fsql2 = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, configuration.GetConnectionString("MDSDB")).Build(); var fsql2 = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, configuration.GetConnectionString("MDSDB")).Build();
var fsql_bbwyc = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, configuration.GetConnectionString("BBWYCDB")).Build();
services.AddSingleton(new FreeSqlMultiDBManager() services.AddSingleton(new FreeSqlMultiDBManager()
{ {
BBWYfsql = fsql, BBWYBfsql = fsql,
MDSfsql = fsql2 MDSfsql = fsql2,
BBWYCfsql = fsql_bbwyc,
}); });
services.AddSingleton<NLogManager>(); services.AddSingleton<NLogManager>();

1
BBWYB.Server.API/appsettings.json

@ -10,6 +10,7 @@
"ConnectionStrings": { "ConnectionStrings": {
//"DB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwy;charset=utf8;sslmode=none;" //"DB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwy;charset=utf8;sslmode=none;"
"DB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwyb;charset=utf8;sslmode=none;", "DB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwyb;charset=utf8;sslmode=none;",
"BBWYCDB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwy_test;charset=utf8;sslmode=none;",
"MDSDB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=mds;charset=utf8;sslmode=none;" "MDSDB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=mds;charset=utf8;sslmode=none;"
}, },
"AllowedSwagger": true, "AllowedSwagger": true,

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

@ -1,9 +1,14 @@
using BBWYB.Common.Log; using BBWYB.Common.Extensions;
using BBWYB.Common.Http;
using BBWYB.Common.Log;
using BBWYB.Common.Models; using BBWYB.Common.Models;
using BBWYB.Server.Model; using BBWYB.Server.Model;
using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto; using BBWYB.Server.Model.Dto;
using FreeSql; using FreeSql;
using SDKAdapter;
using SDKAdapter.OperationPlatform.Client;
using SDKAdapter.OperationPlatform.Models;
using System.Net.Http.Headers; using System.Net.Http.Headers;
using Yitter.IdGenerator; using Yitter.IdGenerator;
@ -13,10 +18,20 @@ namespace BBWYB.Server.Business
{ {
private KuaiDi100Manager kuaiDi100Manager; private KuaiDi100Manager kuaiDi100Manager;
private PurchaseSchemeBusiness purchaseSchemeBusiness; private PurchaseSchemeBusiness purchaseSchemeBusiness;
public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness) : base(fsql, nLogManager, idGenerator) private PurchaseOrderBusiness purchaseOrderBusiness;
private FreeSqlMultiDBManager freeSqlMultiDBManager;
private VenderBusiness venderBusiness;
private OP_PlatformClientFactory opPlatformClientFactory;
private RestApiService restApiService;
public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness, PurchaseOrderBusiness purchaseOrderBusiness, FreeSqlMultiDBManager freeSqlMultiDBManager, VenderBusiness venderBusiness, OP_PlatformClientFactory opPlatformClientFactory, RestApiService restApiService) : base(fsql, nLogManager, idGenerator)
{ {
this.kuaiDi100Manager = kuaiDi100Manager; this.kuaiDi100Manager = kuaiDi100Manager;
this.purchaseSchemeBusiness = purchaseSchemeBusiness; this.purchaseSchemeBusiness = purchaseSchemeBusiness;
this.purchaseOrderBusiness = purchaseOrderBusiness;
this.freeSqlMultiDBManager = freeSqlMultiDBManager;
this.venderBusiness = venderBusiness;
this.opPlatformClientFactory = opPlatformClientFactory;
this.restApiService = restApiService;
} }
@ -25,13 +40,56 @@ namespace BBWYB.Server.Business
kuaiDi100Manager.SubscribeKuaiDi100(waybillNo, targetCompanyCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish"); kuaiDi100Manager.SubscribeKuaiDi100(waybillNo, targetCompanyCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish");
} }
public void SupplementOrderSkuCost()
{
var orderSkuCostList = fsql.Select<OrderCostDetail, Order>().InnerJoin((ocd, o) => ocd.OrderId == o.Id)
.Where((ocd, o) => ocd.IsEnabled == true &&
o.IsPurchased == true &&
o.OrderState != Enums.OrderState. &&
!fsql.Select<OrderSkuCost>().As("osc").Where(osc => osc.OrderId == o.Id).Any())
.GroupBy((ocd, o) => new { ocd.OrderId, ocd.SkuId })
.ToList(g => new
{
OrderId = g.Key.OrderId,
SkuId = g.Key.SkuId,
SkuAmount = g.Sum(g.Value.Item1.SkuAmount),
PurchaseFreight = g.Sum(g.Value.Item1.PurchaseFreight)
});
var orderIds = orderSkuCostList.Select(x => x.OrderId).Distinct().ToList();
var orderSkuList = fsql.Select<OrderSku>().Where(osku => orderIds.Contains(osku.OrderId)).ToList();
var insertOrderSkuCostList = new List<OrderSkuCost>();
foreach (var osc in orderSkuCostList)
{
var osku = orderSkuList.FirstOrDefault(osku => osku.SkuId == osc.SkuId && osku.OrderId == osc.OrderId);
var insert = new OrderSkuCost()
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
DeliveryExpressFreight = 0M,
OrderId = osc.OrderId,
SkuId = osc.SkuId,
OutPackAmount = 0M,
PurchaseFreight = osc.PurchaseFreight,
SkuAmount = osc.SkuAmount,
TotalCost = osc.PurchaseFreight + osc.SkuAmount,
Profit = ((osku.Price * osku.ItemTotal) ?? 0M) + osku.BuyerPayFreight - osc.PurchaseFreight - osc.SkuAmount
};
insertOrderSkuCostList.Add(insert);
}
fsql.Transaction(() =>
{
fsql.Insert(insertOrderSkuCostList).ExecuteAffrows();
});
}
public void SupplementPurchaserInfo() public void SupplementPurchaserInfo()
{ {
var purlList = fsql.Select<PurchaseSchemeProduct, PurchaseScheme, Purchaser>() var purlList = fsql.Select<PurchaseSchemeProduct, Purchaser>()
.InnerJoin((psp, ps, p) => psp.SkuPurchaseSchemeId == ps.Id) .InnerJoin((psp, p) => psp.PurchaserId == p.Id)
.InnerJoin((psp, ps, p) => ps.PurchaserId == p.Id) .Where((psp, p) => p.Platform == Enums.Platform. && string.IsNullOrEmpty(p.MemberId))
.Where((psp, ps, p) => ps.PurchasePlatform == Enums.Platform. && string.IsNullOrEmpty(p.Id2)) .ToList((psp, p) => new
.ToList((psp, ps, p) => new
{ {
//psp.PurchaseUrl, //psp.PurchaseUrl,
psp.PurchaseProductId, psp.PurchaseProductId,
@ -58,11 +116,11 @@ namespace BBWYB.Server.Business
PriceMode = Enums.PurchaseOrderMode., PriceMode = Enums.PurchaseOrderMode.,
PurchaseProductId = productId PurchaseProductId = productId
}); });
if (!string.IsNullOrEmpty(response?.Purchaser?.Id2)) if (!string.IsNullOrEmpty(response?.Purchaser?.MemberId))
{ {
if (response.Purchaser.Id2.Length > 20) if (response.Purchaser.MemberId.Length > 5)
Console.WriteLine(response.Purchaser.Id2); Console.WriteLine(response.Purchaser.MemberId);
var update = fsql.Update<Purchaser>(purchaseId).Set(p => p.Id2, response.Purchaser.Id2); var update = fsql.Update<Purchaser>(purchaseId).Set(p => p.MemberId, response.Purchaser.MemberId);
updatePurchaserList.Add(update); updatePurchaserList.Add(update);
} }
i++; i++;
@ -93,47 +151,364 @@ namespace BBWYB.Server.Business
} }
} }
public void SupplementOrderSkuCost() public void SupplementPurchaseSchemeGroup()
{ {
var orderSkuCostList = fsql.Select<OrderCostDetail, Order>().InnerJoin((ocd, o) => ocd.OrderId == o.Id) fsql.Transaction(() =>
.Where((ocd, o) => ocd.IsEnabled == true && {
o.IsPurchased == true && fsql.Delete<PurchaseSchemeGroup>().Where(psg => 1 == 1).ExecuteAffrows();
o.OrderState != Enums.OrderState. && fsql.Delete<PurchaseSchemeGroupIndex>().Where(psgi => 1 == 1).ExecuteAffrows();
!fsql.Select<OrderSkuCost>().As("osc").Where(osc => osc.OrderId == o.Id).Any()) fsql.Update<PurchaseScheme>().Set(ps => ps.SchemeGroupId == 0).Where(ps => 1 == 1).ExecuteAffrows();
.GroupBy((ocd, o) => new { ocd.OrderId, ocd.SkuId }) });
.ToList(g => new
{
OrderId = g.Key.OrderId,
SkuId = g.Key.SkuId,
SkuAmount = g.Sum(g.Value.Item1.SkuAmount),
PurchaseFreight = g.Sum(g.Value.Item1.PurchaseFreight)
});
var orderIds = orderSkuCostList.Select(x => x.OrderId).Distinct().ToList();
var orderSkuList = fsql.Select<OrderSku>().Where(osku => orderIds.Contains(osku.OrderId)).ToList();
var insertOrderSkuCostList = new List<OrderSkuCost>(); List<PurchaseSchemeGroup> insertSchemeGroups = new List<PurchaseSchemeGroup>();
foreach (var osc in orderSkuCostList) List<PurchaseSchemeGroupIndex> insertSchemeGroupIndexs = new List<PurchaseSchemeGroupIndex>();
Queue<IUpdate<PurchaseScheme>> updatePurchaseSchemeQueue = new Queue<IUpdate<PurchaseScheme>>();
var purchaseSchemeList = fsql.Select<PurchaseScheme>().OrderBy(ps => ps.Id).ToList();
var purchaseSchemeSpuGroups = purchaseSchemeList.GroupBy(ps => ps.ProductId);
foreach (var purchaseSchemeSpuGroup in purchaseSchemeSpuGroups)
{ {
var osku = orderSkuList.FirstOrDefault(osku => osku.SkuId == osc.SkuId && osku.OrderId == osc.OrderId); Console.WriteLine($"正在处理spu {purchaseSchemeSpuGroup.Key}");
var insert = new OrderSkuCost() var purchaseSchemeSkuGroups = purchaseSchemeSpuGroup.GroupBy(ps => ps.SkuId);
var maxPsGroupCount = purchaseSchemeSkuGroups.Max(g => g.Count()); //该spu最大的采购分组数
var groupIndex = new PurchaseSchemeGroupIndex()
{ {
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now, CreateTime = DateTime.Now,
DeliveryExpressFreight = 0M, Index = maxPsGroupCount,
OrderId = osc.OrderId, ShopId = purchaseSchemeSpuGroup.First().ShopId,
SkuId = osc.SkuId, ProductId = purchaseSchemeSpuGroup.First().ProductId
OutPackAmount = 0M,
PurchaseFreight = osc.PurchaseFreight,
SkuAmount = osc.SkuAmount,
TotalCost = osc.PurchaseFreight + osc.SkuAmount,
Profit = ((osku.Price * osku.ItemTotal) ?? 0M) + osku.BuyerPayFreight - osc.PurchaseFreight - osc.SkuAmount
}; };
insertOrderSkuCostList.Add(insert); insertSchemeGroupIndexs.Add(groupIndex);
for (var i = 0; i < maxPsGroupCount; i++)
{
Console.WriteLine($"正在处理第{i + 1}组");
IList<PurchaseScheme> currentIndexSchemeList = new List<PurchaseScheme>();
//取每个sku的第i个方案
foreach (var purchaseSchemeSkuGroup in purchaseSchemeSkuGroups)
{
var currentSkuPurchaseSchemeList = purchaseSchemeSkuGroup.ToList();
if (currentSkuPurchaseSchemeList.Count() >= (i + 1))
{
var scheme = currentSkuPurchaseSchemeList[i];
currentIndexSchemeList.Add(scheme);
}
}
var schemeGroupId = idGenerator.NewLong();
var insertSchemeGroup = new PurchaseSchemeGroup()
{
Id = schemeGroupId,
//GroupName = schemeGroupId.Value.ToString(),
GroupName = $"{purchaseSchemeSpuGroup.Key}-{i + 1}",
CreateTime = DateTime.Now,
ProductId = currentIndexSchemeList.First().ProductId,
ShopId = currentIndexSchemeList.First().ShopId
};
insertSchemeGroups.Add(insertSchemeGroup);
foreach (var purchaseScheme in currentIndexSchemeList)
{
if (purchaseScheme.SchemeGroupId != schemeGroupId)
{
var update = fsql.Update<PurchaseScheme>(purchaseScheme.Id).Set(ps => ps.SchemeGroupId, schemeGroupId);
updatePurchaseSchemeQueue.Enqueue(update);
}
}
}
} }
Console.WriteLine("数据库处理中");
fsql.Transaction(() => fsql.Transaction(() =>
{ {
fsql.Insert(insertOrderSkuCostList).ExecuteAffrows(); if (insertSchemeGroups.Count() > 0)
fsql.Insert(insertSchemeGroups).ExecuteAffrows();
if (insertSchemeGroupIndexs.Count() > 0)
fsql.Insert(insertSchemeGroupIndexs).ExecuteAffrows();
}); });
var updatePurchaseSchemeList = new List<IUpdate<PurchaseScheme>>();
while (true)
{
if (updatePurchaseSchemeQueue.TryDequeue(out var update))
updatePurchaseSchemeList.Add(update);
else
break;
if (updatePurchaseSchemeList.Count() == 10)
{
Console.WriteLine($"执行数据库 {DateTime.Now}");
fsql.Transaction(() =>
{
foreach (var _update in updatePurchaseSchemeList)
_update.ExecuteAffrows();
});
updatePurchaseSchemeList.Clear();
}
}
if (updatePurchaseSchemeList.Count() > 0)
{
Console.WriteLine($"最后执行数据库 {DateTime.Now}");
fsql.Transaction(() =>
{
foreach (var _update in updatePurchaseSchemeList)
_update.ExecuteAffrows();
});
}
}
public void RepairOrderStateToCheckComputation()
{
List<TimeLimitTask> insertComputationTaskList = new List<TimeLimitTask>();
var time = DateTime.Parse("2023-09-01");
var orderList = fsql.Select<Order>().Where(o => o.StartTime <= time && o.OrderState == Enums.OrderState.).ToList();
var orderIdsList = orderList.Select(o => o.Id).ToList();
var checmComputationTaskList = fsql.Select<TimeLimitTask>().Where(t => t.TaskType == Enums.TimeLimitTaskType. && orderIdsList.Contains(t.OrderId)).ToList();
foreach (var order in orderList)
{
if (!checmComputationTaskList.Any(x => x.OrderId == order.Id))
{
insertComputationTaskList.Add(new TimeLimitTask()
{
Id = idGenerator.NewLong(),
OrderId = order.Id,
CreateTme = DateTime.Now,
ExpirationTime = DateTime.Now.AddDays(1),
OrderSn = order.OrderSn,
Remark = "手工处理待核算",
ShopId = order.ShopId,
TaskType = Enums.TimeLimitTaskType.
});
}
}
fsql.Transaction(() =>
{
if (insertComputationTaskList.Count() > 0)
fsql.Insert(insertComputationTaskList).ExecuteAffrows();
fsql.Update<Order>().Set(o => o.OrderState, Enums.OrderState.)
.Where(o => o.StartTime <= time && o.OrderState == Enums.OrderState.)
.ExecuteAffrows();
});
}
public void SyncCCancelOrder()
{
var c_cancel_orderlist = freeSqlMultiDBManager.BBWYCfsql.Select<Model.Db.BBWY.PurchaseOrderV2>().Where(p => p.OrderState == Enums.OrderState.).ToList();
var c_cancel_orderIdlist = c_cancel_orderlist.Select(p => p.Id).ToList();
if (c_cancel_orderIdlist.Count() > 0)
{
fsql.Transaction(() =>
{
fsql.Update<Order>(c_cancel_orderIdlist).Set(o => o.OrderState, Enums.OrderState.).ExecuteAffrows();
});
}
}
public void BSyncToC()
{
var time = DateTime.Parse("2023-09-01");
var orderList = fsql.Select<Order>().Where(o => o.StartTime < time).OrderByDescending(o => o.Id).ToList(o => new { o.Id, o.OrderState });
var count = orderList.Count();
var i = 1;
foreach (var order in orderList)
{
Thread.Sleep(500);
try
{
var url = "https://bbwy.qiyue666.com";
var result = restApiService.SendRequest(url, "api/BatchPurchase/UpdatePurchaseOrderState", new
{
OrderId = order.Id,
PurchaseOrderState = order.OrderState
}, null, HttpMethod.Post);
Console.WriteLine($"{i}/{count},{order.Id},{result.StatusCode}");
}
catch (Exception ex)
{
}
finally
{
i++;
}
}
}
public void SyncHistoryPurchaseScheme()
{
var qtShops = venderBusiness.GetShopList(platform: Enums.Platform.);
foreach (var shop in qtShops)
{
var psList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest()
{
ShopId = long.Parse(shop.ShopId)
});
List<HistoryPurchaseScheme> insertHistoryPSList = new List<HistoryPurchaseScheme>();
List<HistoryPurchaseSchemeProduct> insertHistoryPSPList = new List<HistoryPurchaseSchemeProduct>();
List<HistoryPurchaseSchemeProductSku> insertHistoryPSSList = new List<HistoryPurchaseSchemeProductSku>();
foreach (var ps in psList)
{
//var newVersion = ps.Version + 1;
var newVersion = ps.Version;
foreach (var psp in ps.PurchaseSchemeProductList)
{
foreach (var pss in psp.PurchaseSchemeProductSkuList)
{
#region 处理历史版本
var historyPss = pss.Map<HistoryPurchaseSchemeProductSku>();
historyPss.HistoryId = idGenerator.NewLong();
historyPss.Version = newVersion;
insertHistoryPSSList.Add(historyPss);
#endregion
}
#region 处理历史版本
var historyPsp = psp.Map<HistoryPurchaseSchemeProduct>();
historyPsp.HistoryId = idGenerator.NewLong();
historyPsp.Version = newVersion;
insertHistoryPSPList.Add(historyPsp);
#endregion
}
#region 处理历史版本
var historyPs = ps.Map<HistoryPurchaseScheme>();
historyPs.HistoryId = idGenerator.NewLong();
historyPs.Version = newVersion;
insertHistoryPSList.Add(historyPs);
//updatePurchaseSchemeIdList.Add(ps.Id);
#endregion
}
fsql.Transaction(() =>
{
if (insertHistoryPSList.Count() > 0)
fsql.Insert(insertHistoryPSList).ExecuteAffrows();
if (insertHistoryPSPList.Count() > 0)
fsql.Insert(insertHistoryPSPList).ExecuteAffrows();
if (insertHistoryPSSList.Count() > 0)
fsql.Insert(insertHistoryPSSList).ExecuteAffrows();
//if (updatePurchaseSchemeIdList.Count() > 0)
// fsql.Update<PurchaseScheme>(updatePurchaseSchemeIdList).Set(ps => ps.Version + 1).ExecuteAffrows();
});
}
}
public void BatchCompleteOrder()
{
var time = DateTime.Parse("2023-09-01");
//var orderStateList = new List<Enums.OrderState?>() { Enums.OrderState.待付款, Enums.OrderState.已取消, Enums.OrderState.已完成 };
//var orderList = fsql.Select<Order>().Where(o => o.StartTime < time && !orderStateList.Contains(o.OrderState)).ToList();
var orderList = fsql.Select<Order>().Where(o => o.StartTime < time && o.OrderState == Enums.OrderState.).ToList();
var shops = venderBusiness.GetShopList(platform: Enums.Platform.);
var count = orderList.Count();
var i = 1;
Queue<IUpdate<Order>> updateOrderQueue = new Queue<IUpdate<Order>>();
List<IUpdate<Order>> updateOrderList = new List<IUpdate<Order>>();
foreach (var order in orderList)
{
Console.WriteLine($"{i}/{count},{order.Id}");
try
{
var shop = shops.FirstOrDefault(s => s.ShopId == order.ShopId.ToString());
if (shop == null)
{
i++;
continue;
}
var qtOrderList = opPlatformClientFactory.GetClient(AdapterEnums.PlatformType.).GetOrderList(new OP_QueryOrderRequest()
{
AppKey = shop.AppKey,
AppSecret = shop.AppSecret,
AppToken = shop.AppToken,
OrderId = order.Id,
PageIndex = 1,
PageSize = 100,
Platform = AdapterEnums.PlatformType.,
SortTimeField = AdapterEnums.SortTimeField.Modify,
SortType = AdapterEnums.SortType.Desc,
StartDate = null,
EndDate = null
});
if (qtOrderList.Count == 0)
{
var update = fsql.Update<Order>(order.Id).Set(o => o.OrderState, Enums.OrderState.);
updateOrderQueue.Enqueue(update);
i++;
continue;
}
var qtOrder = qtOrderList.Items[0];
if (qtOrder.OrderState != "-1" && qtOrder.IsPay)
{
var update = fsql.Update<Order>(order.Id).Set(o => o.OrderState, Enums.OrderState.);
updateOrderQueue.Enqueue(update);
}
if ((qtOrder.OrderState == "-1" || !qtOrder.IsPay) && order.OrderState != Enums.OrderState.)
{
var update = fsql.Update<Order>(order.Id).Set(o => o.OrderState, Enums.OrderState.);
updateOrderQueue.Enqueue(update);
}
}
catch
{
}
finally
{
i++;
}
}
if (updateOrderQueue.Count() > 0)
{
while (true)
{
if (updateOrderQueue.TryDequeue(out var update))
updateOrderList.Add(update);
else
break;
if (updateOrderList.Count() == 10)
{
Console.Write($"执行数据库 {DateTime.Now}");
fsql.Transaction(() =>
{
foreach (var u in updateOrderList)
{
u.ExecuteAffrows();
}
});
updateOrderList.Clear();
}
}
if (updateOrderList.Count() > 0)
{
Console.Write($"最后执行数据库 {DateTime.Now}");
fsql.Transaction(() =>
{
foreach (var u in updateOrderList)
{
u.ExecuteAffrows();
}
});
updateOrderList.Clear();
}
}
} }
} }
} }

19
BBWYB.Server.Business/Extensions/OrderStateExtension.cs

@ -13,18 +13,13 @@ namespace BBWYB.Server.Business
/// </summary> /// </summary>
/// <param name="order"></param> /// <param name="order"></param>
/// <param name="fsql"></param> /// <param name="fsql"></param>
/// <param name="IsNotifyDingDingWhenInStoreOrderFail">是否在入库单验证失败后通知钉钉</param>
/// <param name="orderSkuList"></param> /// <param name="orderSkuList"></param>
/// <param name="orderPurchaseInfoList"></param> /// <param name="orderPurchaseInfoList"></param>
/// <param name="jdInStoreOrderDetailList"></param>
public static void CalculationOrderState(this Order order, public static void CalculationOrderState(this Order order,
IFreeSql fsql, IFreeSql fsql,
out bool IsNotifyDingDingWhenInStoreOrderFail,
IList<OrderSku> orderSkuList = null, IList<OrderSku> orderSkuList = null,
IList<OrderPurchaseInfo> orderPurchaseInfoList = null, IList<OrderPurchaseInfo> orderPurchaseInfoList = null)
IList<JDInStoreOrderDetail> jdInStoreOrderDetailList = null)
{ {
IsNotifyDingDingWhenInStoreOrderFail = false;
if (order.OrderState == Enums.OrderState. || if (order.OrderState == Enums.OrderState. ||
order.OrderState == Enums.OrderState. || order.OrderState == Enums.OrderState. ||
order.OrderState == Enums.OrderState.) order.OrderState == Enums.OrderState.)
@ -46,7 +41,7 @@ namespace BBWYB.Server.Business
#region 部分采购 #region 部分采购
foreach (var osku in orderSkuList) foreach (var osku in orderSkuList)
{ {
if (!orderPurchaseInfoList.Any(opi => opi.BelongSkuIds.Contains(osku.SkuId))) if (!orderPurchaseInfoList.Any(opi => !string.IsNullOrEmpty(opi.BelongSkuIds) && opi.BelongSkuIds.Contains(osku.SkuId)))
{ {
order.OrderState = Enums.OrderState.; order.OrderState = Enums.OrderState.;
return; return;
@ -120,14 +115,12 @@ namespace BBWYB.Server.Business
} }
else if (order.IntoStoreType == Enums.IntoStoreType.) else if (order.IntoStoreType == Enums.IntoStoreType.)
{ {
if (jdInStoreOrderDetailList == null || jdInStoreOrderDetailList.Count() == 0 || jdInStoreOrderDetailList.Any(x => x.storageStatus != "2")) if (order.OrderState != Enums.OrderState.)
{
order.OrderState = Enums.OrderState.; order.OrderState = Enums.OrderState.;
IsNotifyDingDingWhenInStoreOrderFail = true;
}
else
order.OrderState = Enums.OrderState.;
} }
else if (order.IntoStoreType == Enums.IntoStoreType.)
order.OrderState = Enums.OrderState.;
return; return;
} }
#endregion #endregion

4
BBWYB.Server.Business/FreeSqlMultiDBManager.cs

@ -2,7 +2,9 @@
{ {
public class FreeSqlMultiDBManager public class FreeSqlMultiDBManager
{ {
public IFreeSql BBWYfsql { get; set; } public IFreeSql BBWYBfsql { get; set; }
public IFreeSql MDSfsql { get; set; } public IFreeSql MDSfsql { get; set; }
public IFreeSql BBWYCfsql { get; set; }
} }
} }

203
BBWYB.Server.Business/JD/JDBusiness.cs

@ -1,8 +1,12 @@
using BBWYB.Common.Http; using BBWYB.Common.Http;
using BBWYB.Common.Log; using BBWYB.Common.Log;
using BBWYB.Common.Models; using BBWYB.Common.Models;
using BBWYB.Server.Model;
using BBWYB.Server.Model.Db;
using FreeSql;
using JD.Dto; using JD.Dto;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.Text;
using Yitter.IdGenerator; using Yitter.IdGenerator;
namespace BBWYB.Server.Business.JD namespace BBWYB.Server.Business.JD
@ -11,14 +15,20 @@ namespace BBWYB.Server.Business.JD
{ {
private RestApiService restApiService; private RestApiService restApiService;
private VenderBusiness venderBusiness; private VenderBusiness venderBusiness;
private DingDingBusiness dingDingBusiness;
private TaskSchedulerManager taskSchedulerManager;
public JDBusiness(IFreeSql fsql, public JDBusiness(IFreeSql fsql,
NLogManager nLogManager, NLogManager nLogManager,
IIdGenerator idGenerator, IIdGenerator idGenerator,
RestApiService restApiService, RestApiService restApiService,
VenderBusiness venderBusiness) : base(fsql, nLogManager, idGenerator) VenderBusiness venderBusiness,
DingDingBusiness dingDingBusiness,
TaskSchedulerManager taskSchedulerManager) : base(fsql, nLogManager, idGenerator)
{ {
this.restApiService = restApiService; this.restApiService = restApiService;
this.venderBusiness = venderBusiness; this.venderBusiness = venderBusiness;
this.dingDingBusiness = dingDingBusiness;
this.taskSchedulerManager = taskSchedulerManager;
} }
public ApiResponse<IList<JDInStoreOrderDetail>> GetJDInStoreOrderDetailList(string sourceShopName, IList<string> poOrderNos) public ApiResponse<IList<JDInStoreOrderDetail>> GetJDInStoreOrderDetailList(string sourceShopName, IList<string> poOrderNos)
@ -50,5 +60,196 @@ namespace BBWYB.Server.Business.JD
return new ApiResponse<IList<JDInStoreOrderDetail>>() { Code = 0, Msg = ex.Message }; return new ApiResponse<IList<JDInStoreOrderDetail>>() { Code = 0, Msg = ex.Message };
} }
} }
public void CheckInStoreOrder()
{
List<string> orderIds = null;
List<IUpdate<Order>> updateOrderList = new List<IUpdate<Order>>();
List<TimeLimitTask> insertTimeLimitTaskList = new List<TimeLimitTask>();
try
{
var checkTaskList = fsql.Select<InStoreOrderCheckTask>().Where(x => x.IsChecked == false).ToList();
if (checkTaskList.Count() == 0)
return;
orderIds = checkTaskList.Select(x => x.OrderId).ToList();
var timelimitTaskList = fsql.Select<TimeLimitTask>().Where(t => orderIds.Contains(t.OrderId) && t.TaskType == Enums.TimeLimitTaskType.).ToList();
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => orderIds.Contains(opi.OrderId) && opi.IsEnabled == true).ToList();
var waitCheckInStoreOrderList = fsql.Select<InStorePurchaseOrdeRrelationInfo, Order>()
.InnerJoin((io, o) => io.OrderId == o.Id)
.Where((io, o) => orderIds.Contains(io.OrderId) && !string.IsNullOrEmpty(o.SourceShopName))
.ToList((io, o) => new
{
io.Id,
io.PurchaseOrderId,
io.CreateTime,
io.InStorePurchaseOrderId,
io.OrderId,
io.ShopId,
io.WaybillNo,
o.SourceShopName
});
var shopIds = checkTaskList.Select(x => x.ShopId.ToString()).ToList();
var shopList = venderBusiness.GetShopList(shopIds);
foreach (var checkTask in checkTaskList)
{
var dingdingMsg = new StringBuilder();
var inStoreOrderRelationList = waitCheckInStoreOrderList.Where(x => x.OrderId == checkTask.OrderId).ToList();
var currentPurchaseOrderList = orderPurchaseInfoList.Where(opi => opi.OrderId == checkTask.OrderId).ToList();
var shop = shopList.FirstOrDefault(s => s.ShopId == checkTask.ShopId.ToString());
if (inStoreOrderRelationList == null || inStoreOrderRelationList.Count() == 0)
{
if (currentPurchaseOrderList.Count() > 0)
{
foreach (var opi in currentPurchaseOrderList)
{
dingdingMsg.AppendLine($"店铺名称:{shop?.ShopName}");
dingdingMsg.AppendLine($"拳探订单号:{checkTask.OrderSn}");
dingdingMsg.AppendLine($"采购平台:{opi.PurchasePlatform}");
dingdingMsg.AppendLine($"采购单号:{opi.PurchaseOrderId}");
dingdingMsg.AppendLine("缺少入仓采购单号");
dingdingMsg.AppendLine();
}
}
}
else
{
var poOrderNos = inStoreOrderRelationList.Select(i => i.InStorePurchaseOrderId).Distinct().ToList();
//查询京东
var inStoreResponse = GetJDInStoreOrderDetailList(inStoreOrderRelationList.FirstOrDefault().SourceShopName, poOrderNos);
if (!inStoreResponse.Success)
{
if (currentPurchaseOrderList.Count() > 0)
{
foreach (var opi in currentPurchaseOrderList)
{
dingdingMsg.AppendLine($"店铺名称:{shop?.ShopName}");
dingdingMsg.AppendLine($"拳探订单号:{checkTask.OrderSn}");
dingdingMsg.AppendLine($"采购平台:{opi.PurchasePlatform}");
dingdingMsg.AppendLine($"采购单号:{opi.PurchaseOrderId}");
dingdingMsg.AppendLine($"{inStoreResponse.Msg}");
dingdingMsg.AppendLine();
}
}
}
else
{
bool validateResult = true;
foreach (var inStoreOrderRelation in inStoreOrderRelationList)
{
var jdInStore = inStoreResponse.Data.FirstOrDefault(x => x.poOrderNo == inStoreOrderRelation.InStorePurchaseOrderId);
if (jdInStore != null && jdInStore.storageStatus == "2")
continue;
validateResult = false;
var opi = currentPurchaseOrderList.FirstOrDefault(opi => opi.PurchaseOrderId == inStoreOrderRelation.PurchaseOrderId);
if (jdInStore == null)
{
dingdingMsg.AppendLine($"店铺名称:{shop?.ShopName}");
dingdingMsg.AppendLine($"拳探订单号:{checkTask.OrderSn}");
dingdingMsg.AppendLine($"采购平台:{opi?.PurchasePlatform}");
dingdingMsg.AppendLine($"采购单号:{opi?.PurchaseOrderId}");
dingdingMsg.AppendLine($"入仓采购单号:{inStoreOrderRelation.InStorePurchaseOrderId}");
dingdingMsg.AppendLine($"未找到该入仓采购单号");
dingdingMsg.AppendLine();
continue;
}
var stateText = "";
switch (jdInStore.storageStatus)
{
case "1":
stateText = "有差异待确认";
break;
case "3":
stateText = "待确认";
break;
case "4":
stateText = "有差异已确认";
break;
}
dingdingMsg.AppendLine($"店铺名称:{shop?.ShopName}");
dingdingMsg.AppendLine($"拳探订单号:{checkTask.OrderSn}");
dingdingMsg.AppendLine($"采购平台:{opi?.PurchasePlatform}");
dingdingMsg.AppendLine($"采购单号:{opi?.PurchaseOrderId}");
dingdingMsg.AppendLine($"入仓采购单号:{inStoreOrderRelation.InStorePurchaseOrderId}");
dingdingMsg.AppendLine($"入仓采购单状态:{jdInStore.storageStatus} {stateText}");
dingdingMsg.AppendLine();
}
if (validateResult)
{
var update = fsql.Update<Order>().Set(o => o.OrderState, Enums.OrderState.)
.Where(o => o.Id == checkTask.OrderId && o.OrderState == Enums.OrderState.);
updateOrderList.Add(update);
if (!timelimitTaskList.Any(t => t.OrderId == checkTask.OrderId && t.TaskType == Enums.TimeLimitTaskType.))
{
//创建待核算任务
var t = new TimeLimitTask()
{
CreateTme = DateTime.Now,
Id = idGenerator.NewLong(),
OrderId = checkTask.OrderId,
OrderSn = checkTask.OrderSn,
ShopId = checkTask.ShopId,
TaskType = Enums.TimeLimitTaskType.,
ExpirationTime = DateTime.Now.AddDays(1)
};
insertTimeLimitTaskList.Add(t);
}
}
}
}
if (dingdingMsg.Length > 0)
{
Task.Factory.StartNew(() => SendDingDing(dingdingMsg.ToString()), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
}
}
}
catch (Exception ex)
{
nLogManager.Default().Error(ex, "CheckInStoreOrder");
}
finally
{
try
{
fsql.Transaction(() =>
{
if (updateOrderList.Count() > 0)
{
foreach (var update in updateOrderList)
update.ExecuteAffrows();
}
if (orderIds != null && orderIds.Count() > 0)
fsql.Update<InStoreOrderCheckTask>().Set(x => x.IsChecked, true).Where(x => orderIds.Contains(x.OrderId)).ExecuteAffrows();
if (insertTimeLimitTaskList.Count() > 0)
fsql.Insert(insertTimeLimitTaskList).ExecuteAffrows();
});
}
catch { }
}
}
private void SendDingDing(string content)
{
try
{
dingDingBusiness.SendDingDingBotMessage("SEC5f08a3dd6813e50bf9a3b81350ec12a8086c64b9e29ef858a17f5cc7887906d7",
"https://oapi.dingtalk.com/robot/send?access_token=7ce472411bb8dde0c3ff503fcca9ead84d39950ee3c4c65c808dbc58981eb929",
content);
}
catch { }
}
} }
} }

35
BBWYB.Server.Business/Order/Message/OrderMessageBusiness.cs

@ -1,5 +1,6 @@
using BBWYB.Common.Log; using BBWYB.Common.Log;
using BBWYB.Common.Models; using BBWYB.Common.Models;
using BBWYB.Server.Business.Sync;
using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto; using BBWYB.Server.Model.Dto;
using Yitter.IdGenerator; using Yitter.IdGenerator;
@ -9,10 +10,19 @@ namespace BBWYB.Server.Business
public class OrderMessageBusiness : BaseBusiness, IDenpendency public class OrderMessageBusiness : BaseBusiness, IDenpendency
{ {
private MDSBusiness mdsBusiness; private MDSBusiness mdsBusiness;
private OrderSyncBusiness orderSyncBusiness;
private FreeSqlMultiDBManager mfsql;
public OrderMessageBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, MDSBusiness mdsBusiness) : base(fsql, nLogManager, idGenerator) public OrderMessageBusiness(IFreeSql fsql,
NLogManager nLogManager,
IIdGenerator idGenerator,
MDSBusiness mdsBusiness,
OrderSyncBusiness orderSyncBusiness,
FreeSqlMultiDBManager mfsql) : base(fsql, nLogManager, idGenerator)
{ {
this.mdsBusiness = mdsBusiness; this.mdsBusiness = mdsBusiness;
this.orderSyncBusiness = orderSyncBusiness;
this.mfsql = mfsql;
} }
public void AddOrderMessage(AddOrderMessageRequest request, string token, string clientCode) public void AddOrderMessage(AddOrderMessageRequest request, string token, string clientCode)
@ -23,9 +33,26 @@ namespace BBWYB.Server.Business
if (string.IsNullOrEmpty(clientCode)) if (string.IsNullOrEmpty(clientCode))
throw new BusinessException("缺少客户端标识"); throw new BusinessException("缺少客户端标识");
string orderSn = string.Empty;
long? shopId = null;
var order = fsql.Select<Order>(request.OrderId).ToOne(); var order = fsql.Select<Order>(request.OrderId).ToOne();
if (order == null) if (order == null)
throw new BusinessException("订单不存在"); {
var bbwyPurchaseOrder = mfsql.BBWYCfsql.Ado.QuerySingle<Model.Db.BBWY.PurchaseOrderV2>($"select * from purchaseorderv2 where Id='{request.OrderId}'");
if (bbwyPurchaseOrder == null)
throw new BusinessException("订单不存在");
else
{
orderSn = bbwyPurchaseOrder.OrderSn;
shopId = bbwyPurchaseOrder.ShopId;
}
}
else
{
orderSn = order.OrderSn;
shopId = order.ShopId;
}
var user = mdsBusiness.GetUserInfo(token); var user = mdsBusiness.GetUserInfo(token);
var om = new OrderMessage() var om = new OrderMessage()
@ -36,8 +63,8 @@ namespace BBWYB.Server.Business
CreatorName = user.UserName, CreatorName = user.UserName,
Message = request.Message, Message = request.Message,
OrderId = request.OrderId, OrderId = request.OrderId,
OrderSn = order.OrderSn, OrderSn = orderSn,
ShopId = order.ShopId, ShopId = shopId,
From = clientCode From = clientCode
}; };
fsql.Insert(om).ExecuteAffrows(); fsql.Insert(om).ExecuteAffrows();

71
BBWYB.Server.Business/Order/OrderBusiness.cs

@ -12,6 +12,7 @@ using Newtonsoft.Json;
using SDKAdapter; using SDKAdapter;
using SDKAdapter.OperationPlatform.Client; using SDKAdapter.OperationPlatform.Client;
using SDKAdapter.OperationPlatform.Models; using SDKAdapter.OperationPlatform.Models;
using System.Collections.Concurrent;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Security.Cryptography; using System.Security.Cryptography;
using Yitter.IdGenerator; using Yitter.IdGenerator;
@ -524,15 +525,23 @@ namespace BBWYB.Server.Business
public void CancelOrder(CancelOrderRequest request, string mdsToken) public void CancelOrder(CancelOrderRequest request, string mdsToken)
{ {
opPlatformClientFactory.GetClient((AdapterEnums.PlatformType)request.Platform).CancelOrder(new OP_CancelOrderRequest() try
{ {
AppKey = request.AppKey, opPlatformClientFactory.GetClient((AdapterEnums.PlatformType)request.Platform).CancelOrder(new OP_CancelOrderRequest()
AppSecret = request.AppSecret, {
AppToken = request.AppToken, AppKey = request.AppKey,
OrderId = request.OrderId, AppSecret = request.AppSecret,
Platform = (AdapterEnums.PlatformType)request.Platform, AppToken = request.AppToken,
Remark = request.Remark OrderId = request.OrderId,
}); Platform = (AdapterEnums.PlatformType)request.Platform,
Remark = request.Remark
});
}
catch (Exception ex)
{
if (!ex.Message.Contains("订单已删除"))
throw new BusinessException(ex.Message);
}
fsql.Transaction(() => fsql.Transaction(() =>
{ {
@ -726,7 +735,7 @@ namespace BBWYB.Server.Business
updateOrderSku = fsql.Update<OrderSku>(orderSku.Id).Set(osku => osku.IsCheck, true); updateOrderSku = fsql.Update<OrderSku>(orderSku.Id).Set(osku => osku.IsCheck, true);
var oldOrderState = dbOrder.OrderState; var oldOrderState = dbOrder.OrderState;
dbOrder.CalculationOrderState(fsql, out _, orderSkuList, null); dbOrder.CalculationOrderState(fsql, orderSkuList);
if (oldOrderState != dbOrder.OrderState) if (oldOrderState != dbOrder.OrderState)
updateOrder = fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState); updateOrder = fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState);
@ -744,21 +753,27 @@ namespace BBWYB.Server.Business
throw new BusinessException("未查询到订单"); throw new BusinessException("未查询到订单");
if (order.OrderState != Enums.OrderState.) if (order.OrderState != Enums.OrderState.)
throw new BusinessException("订单状态不正确,只有待核算的订单才允许核算"); throw new BusinessException("订单状态不正确,只有待核算的订单才允许核算");
var orderCost = fsql.Select<OrderCost>(orderId).ToOne(); //var orderCost = fsql.Select<OrderCost>(orderId).ToOne();
if (orderCost == null) //if (orderCost == null)
throw new BusinessException("未查询到订单成本"); // throw new BusinessException("未查询到订单成本");
if (Math.Abs(orderCost.Profit ?? 0) > 1M) //if (Math.Abs(orderCost.Profit ?? 0) > 1M)
throw new BusinessException("订单利润绝对值不能大于1"); // throw new BusinessException("订单利润绝对值不能大于1");
var orderSkuCostList = fsql.Select<OrderSkuCost>().Where(o => o.OrderId == orderId).ToList();
if (orderSkuCostList.Count() == 0)
throw new BusinessException("未查询到订单sku成本");
if (orderSkuCostList.Any(osc => Math.Abs(osc.Profit ?? 0) > 1))
throw new BusinessException("订单sku利润绝对值不能大于1");
fsql.Transaction(() => fsql.Transaction(() =>
{ {
fsql.Update<Order>(orderId).Set(o => o.OrderState, Enums.OrderState.).ExecuteAffrows(); fsql.Update<Order>(orderId).Set(o => o.OrderState, Enums.OrderState.).ExecuteAffrows();
fsql.Update<TimeLimitTask>().Set(t => t.CompletionTime, DateTime.Now) fsql.Update<TimeLimitTask>().Set(t => t.CompletionTime, DateTime.Now)
.Set(t => t.IsTimely == (DateTime.Now < t.ExpirationTime ? true : false)) .Set(t => t.IsTimely == (DateTime.Now < t.ExpirationTime ? true : false))
.Where(t => t.OrderId == orderId) .Where(t => t.OrderId == orderId)
.Where(t => t.CompletionTime == null) .Where(t => t.CompletionTime == null)
.Where(t => t.TaskType == Enums.TimeLimitTaskType.).ExecuteAffrows(); .Where(t => t.TaskType == Enums.TimeLimitTaskType.).ExecuteAffrows();
}); });
SendPurchaseOrderStateToC(orderId, Enums.OrderState.); SendPurchaseOrderStateToC(orderId, Enums.OrderState.);
} }
@ -767,15 +782,21 @@ namespace BBWYB.Server.Business
{ {
try try
{ {
restApiService.SendRequest("https://bbwy.qiyue666.com", "api/BatchPurchase/UpdatePurchaseOrderState", new #if DEBUG
var url = "https://bbwy.qiyue666.com";
#else
var url = "http://172.16.54.105:8090";
#endif
restApiService.SendRequest(url, "api/BatchPurchase/UpdatePurchaseOrderState", new
{ {
OrderId = orderId, OrderId = orderId,
PurchaseOrderState = orderState PurchaseOrderState = orderState
}, null, HttpMethod.Post); }, null, HttpMethod.Post);
} }
catch catch (Exception ex)
{ {
nLogManager.Default().Error(ex, $"OrderId-{orderId}推送C订单状态[{orderState}]失败");
} }
} }

117
BBWYB.Server.Business/Product/ProductBusiness.cs

@ -1,6 +1,8 @@
using BBWYB.Common.Log; using BBWYB.Common.Log;
using BBWYB.Common.Models; using BBWYB.Common.Models;
using BBWYB.Server.Model; using BBWYB.Server.Model;
using BBWYB.Server.Model.Dto;
using Microsoft.Extensions.DependencyInjection;
using SDKAdapter.OperationPlatform.Client; using SDKAdapter.OperationPlatform.Client;
using SDKAdapter.OperationPlatform.Models; using SDKAdapter.OperationPlatform.Models;
using Yitter.IdGenerator; using Yitter.IdGenerator;
@ -10,10 +12,13 @@ namespace BBWYB.Server.Business
public class ProductBusiness : BaseBusiness, IDenpendency public class ProductBusiness : BaseBusiness, IDenpendency
{ {
private OP_PlatformClientFactory opPlatformClientFactory; private OP_PlatformClientFactory opPlatformClientFactory;
private Lazy<PurchaseSchemeBusiness> purchaseSchemeBusinessLazy;
private PurchaseSchemeBusiness purchaseSchemeBusiness => purchaseSchemeBusinessLazy.Value;
public ProductBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory) : base(fsql, nLogManager, idGenerator) public ProductBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, IServiceProvider serviceProvider) : base(fsql, nLogManager, idGenerator)
{ {
this.opPlatformClientFactory = opPlatformClientFactory; this.opPlatformClientFactory = opPlatformClientFactory;
this.purchaseSchemeBusinessLazy = new Lazy<PurchaseSchemeBusiness>(() => serviceProvider.GetService<PurchaseSchemeBusiness>());
} }
public OP_ProductListResponse GetProductList(OP_QueryProductRequest request) public OP_ProductListResponse GetProductList(OP_QueryProductRequest request)
@ -26,6 +31,116 @@ namespace BBWYB.Server.Business
return opPlatformClientFactory.GetClient(request.Platform).GetProductSkuList(request); return opPlatformClientFactory.GetClient(request.Platform).GetProductSkuList(request);
} }
public BProductListResponse GetProductAndSkuList(QueryBProductRequest request)
{
if (string.IsNullOrEmpty(request.Spu) && !string.IsNullOrEmpty(request.Sku))
{
var skuResponse = GetProductSkuList(new OP_QueryProductSkuRequest()
{
AppSecret = request.AppSecret,
AppKey = request.AppKey,
AppToken = request.AppToken,
PageIndex = 1,
PageSize = 50,
Platform = request.Platform,
Sku = request.Sku,
Spu = request.Spu
});
if (skuResponse.Count > 0)
{
request.Spu = skuResponse.Items.FirstOrDefault().ProductId;
request.PageIndex = 1;
request.PageSize = 50;
}
}
var list = new List<BProductResponse>();
var spuResponse = GetProductList(new OP_QueryProductRequest()
{
AppSecret = request.AppSecret,
AppKey = request.AppKey,
AppToken = request.AppToken,
PageIndex = request.PageIndex,
PageSize = request.PageSize,
Platform = request.Platform,
Spu = request.Spu
});
var skuIdList = new List<string>();
if (spuResponse.Items.Count() > 0)
{
foreach (var op_product in spuResponse.Items)
{
var bproduct = new BProductResponse()
{
Id = op_product.Id,
BrandName = op_product.BrandName,
CreateTime = op_product.CreateTime,
Logo = op_product.Logo,
ProductItemNum = op_product.ProductItemNum,
State = op_product.State,
Title = op_product.Title
};
list.Add(bproduct);
var skuResponse = GetProductSkuList(new OP_QueryProductSkuRequest
{
AppSecret = request.AppSecret,
AppKey = request.AppKey,
AppToken = request.AppToken,
PageIndex = 1,
PageSize = 50,
Platform = request.Platform,
Spu = op_product.Id
});
if (skuResponse.Count > 0)
{
bproduct.SkuList = skuResponse.Items.Select(x => new BProductSkuResponse()
{
CreateTime = x.CreateTime,
Id = x.Id,
Logo = x.Logo,
Price = x.Price,
ProductId = x.ProductId,
State = x.State,
Title = x.Title
}).ToList();
skuIdList.AddRange(skuResponse.Items.Select(s => s.Id));
}
}
}
var schemeCountRes = purchaseSchemeBusiness.GetPurchaseSchemeCountList(new QuerySchemeCountRequest()
{
SkuIdList = skuIdList
});
foreach (var bproduct in list)
{
foreach (var bsku in bproduct.SkuList)
bsku.SchemeCount = schemeCountRes.FirstOrDefault(ps => ps.SkuId == bsku.Id)?.SchemeCount ?? 0;
}
return new BProductListResponse()
{
Count = spuResponse.Count,
Items = list
};
}
public decimal? GetProductSkuPrice(QueryProductSkuPriceRequest request)
{
var response = GetProductSkuList(new OP_QueryProductSkuRequest()
{
AppSecret = request.AppSecret,
AppKey = request.AppKey,
AppToken = request.AppToken,
PageIndex = 1,
PageSize = 1,
Platform = (SDKAdapter.AdapterEnums.PlatformType)request.Platform,
Sku = request.Sku
});
return response.Items?.FirstOrDefault()?.Price;
}
public void EditProductPrice(OP_EditProductPriceRequest request) public void EditProductPrice(OP_EditProductPriceRequest request)
{ {
var skuRequest = new OP_QueryProductSkuRequest() var skuRequest = new OP_QueryProductSkuRequest()

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

File diff suppressed because it is too large

73
BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs

@ -31,8 +31,11 @@ namespace BBWYB.Server.Business
private List<string> locationIdList; private List<string> locationIdList;
private List<string> priceIdList; private List<string> priceIdList;
private IList<string> invalidPurchaserNameList;
public PurchaseProductAPIService(RestApiService restApiService, IMemoryCache memoryCache) public PurchaseProductAPIService(RestApiService restApiService, IMemoryCache memoryCache)
{ {
invalidPurchaserNameList = new List<string>() { "超级工厂", "实力工厂", "实力供应商" };
this.memoryCache = memoryCache; this.memoryCache = memoryCache;
this.restApiService = restApiService; this.restApiService = restApiService;
_1688ProductDetailRequestHeader = new Dictionary<string, string>() _1688ProductDetailRequestHeader = new Dictionary<string, string>()
@ -129,21 +132,40 @@ namespace BBWYB.Server.Business
if (string.IsNullOrEmpty(purchaserName)) if (string.IsNullOrEmpty(purchaserName))
purchaserName = jobject["item"]["seller_info"].Value<string>("shop_name"); purchaserName = jobject["item"]["seller_info"].Value<string>("shop_name");
var purchaserLocation = jobject["item"].Value<string>("location"); var purchaserLocation = jobject["item"].Value<string>("location");
var memberId = jobject["item"]["seller_info"].Value<string>("sid");
var purchaserId2 = jobject["item"]["seller_info"].Value<string>("shop_name");
return new PurchaseSkuBasicInfoResponse() return new PurchaseSkuBasicInfoResponse()
{ {
Purchaser = new Model.Db.Purchaser() Purchaser = new Purchaser()
{ {
Id = purchaserId, Id = purchaserId,
Location = purchaserLocation, Location = purchaserLocation,
Name = purchaserName, Name = purchaserName,
Platform = request.Platform Platform = request.Platform,
Id2 = purchaserId2,
MemberId = memberId
}, },
ItemList = list, ItemList = list,
PurchasePlatform = request.Platform, PurchasePlatform = request.Platform,
PurchaseProductId = request.PurchaseProductId PurchaseProductId = request.PurchaseProductId,
APIMode = Enums.PurchaseProductAPIMode.OneBound
};
}
else if (jobject.Value<string>("error_code") == "2000")
{
return new PurchaseSkuBasicInfoResponse()
{
IsInvalid = true,
APIMode = request.FirstApiMode,
PurchaseProductId = request.PurchaseProductId,
PurchasePlatform = request.Platform
}; };
} }
else
{
return null;
}
} }
catch { } catch { }
{ {
@ -202,11 +224,47 @@ namespace BBWYB.Server.Business
var match = Regex.Match(_1688pageResult.Content, @"(window\.__INIT_DATA=)(.*)(\r*\n*\s*</script>)"); var match = Regex.Match(_1688pageResult.Content, @"(window\.__INIT_DATA=)(.*)(\r*\n*\s*</script>)");
if (!match.Success) if (!match.Success)
{
if (_1688pageResult.Content.Contains("商品已下架"))
{
return new PurchaseSkuBasicInfoResponse()
{
IsInvalid = true,
PurchasePlatform = request.Platform,
APIMode = request.FirstApiMode,
PurchaseProductId = request.PurchaseProductId
};
}
return null; return null;
}
var jsonStr = match.Groups[2].Value; var jsonStr = match.Groups[2].Value;
var jobject = JObject.Parse(jsonStr); var jobject = JObject.Parse(jsonStr);
#region 验证purchaserName
var purchaserName = jobject["globalData"]["tempModel"]["companyName"].ToString();
if (invalidPurchaserNameList.Contains(purchaserName))
{
var storeDataMatch = Regex.Match(_1688pageResult.Content, @"(window\.__STORE_DATA=)(.*)(\r*\n*\s*</script>)");
if (storeDataMatch.Success)
{
try
{
var jsonStr_storeData = storeDataMatch.Groups[2].Value;
var jobject_storeData = JObject.Parse(jsonStr_storeData);
var purchaserName_storeData = jobject_storeData["components"]?["38229149"]?["moduleData"]?["companyName"].ToString();
if (string.IsNullOrEmpty(purchaserName_storeData))
purchaserName_storeData = jobject_storeData["components"]?["38229148"]?["moduleData"]?["companyName"].ToString();
if (string.IsNullOrEmpty(purchaserName_storeData))
purchaserName_storeData = jobject_storeData["components"]?["38229150"]?["moduleData"]?["companyName"].ToString();
if (!string.IsNullOrEmpty(purchaserName_storeData))
purchaserName = purchaserName_storeData;
}
catch { }
}
}
#endregion
var location = ""; var location = "";
for (var i = 0; i < locationIdList.Count(); i++) for (var i = 0; i < locationIdList.Count(); i++)
{ {
@ -216,11 +274,13 @@ namespace BBWYB.Server.Business
break; break;
} }
} }
var purchaser = new Purchaser() var purchaser = new Purchaser()
{ {
Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(), Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(),
Id2 = jobject["globalData"]["tempModel"]["sellerLoginId"]?.ToString(), Id2 = jobject["globalData"]["tempModel"]["sellerLoginId"]?.ToString(),
Name = jobject["globalData"]["tempModel"]["companyName"].ToString(), Name = purchaserName,
MemberId = jobject["globalData"]?["tempModel"]?["sellerMemberId"]?.ToString(),
Location = location, Location = location,
Platform = Enums.Platform. Platform = Enums.Platform.
}; };
@ -272,7 +332,10 @@ namespace BBWYB.Server.Business
ItemList = list, ItemList = list,
Purchaser = purchaser, Purchaser = purchaser,
PurchaseProductId = request.PurchaseProductId, PurchaseProductId = request.PurchaseProductId,
PurchasePlatform = Enums.Platform. PurchasePlatform = Enums.Platform.,
ProductName = jobject["globalData"]["tempModel"]["offerTitle"]?.ToString(),
ProductLogo = list.FirstOrDefault()?.Logo,
APIMode = Enums.PurchaseProductAPIMode.Spider
}; };
} }
catch catch

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

File diff suppressed because it is too large

151
BBWYB.Server.Business/QiKuManager.cs

@ -35,104 +35,91 @@ namespace BBWYB.Server.Business
this.venderBusinessLazy = new Lazy<VenderBusiness>(() => serviceProvider.GetService<VenderBusiness>()); this.venderBusinessLazy = new Lazy<VenderBusiness>(() => serviceProvider.GetService<VenderBusiness>());
} }
/// <summary> public void PublishQikuReceiveInfo(string orderId,
/// 通知齐库到货情况 string wayBillNo,
/// <para>支持关联的采购平台以来源SKU为单位通知齐库</para> IList<OrderPurchaseInfo> currentPurchaseOrderList,
/// <para>不支持关联的采购平台以采购单为单位通知齐库</para> IList<OrderSku> currentOrderSkuList,
/// </summary> IList<PurchaseExpressOrder> purchaseExpressOrderList_all,
/// <param name="orderPurchaseInfo"></param> IList<OrderPurchaseRelationInfo> orderPurchaseRelationList_all,
/// <param name="orderPurchaseRelationInfoList"></param> IList<OrderPurchaseSkuInfo> orderPurchaseSkuList_all)
/// <param name="orderPurchaseSkuInfoList"></param>
/// <param name="purchaseExpressOrderList"></param>
public void PublishQiKuReceiveInfo(OrderPurchaseInfo orderPurchaseInfo,
IList<OrderPurchaseRelationInfo> orderPurchaseRelationInfoList,
IList<OrderPurchaseSkuInfo> orderPurchaseSkuInfoList,
IList<PurchaseExpressOrder> purchaseExpressOrderList)
{
if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.)
PublishQiKuByRelation(orderPurchaseRelationInfoList, orderPurchaseSkuInfoList, purchaseExpressOrderList);
else
PublishQiKuPurchaseExpressOrder(orderPurchaseInfo, purchaseExpressOrderList);
}
private void PublishQiKuByRelation(IList<OrderPurchaseRelationInfo> orderPurchaseRelationInfoList,
IList<OrderPurchaseSkuInfo> orderPurchaseSkuInfoList,
IList<PurchaseExpressOrder> purchaseExpressOrderList)
{ {
try try
{ {
var relationGroups = orderPurchaseRelationInfoList.GroupBy(opri => opri.SourceSkuId); //查询跟此快递单有关的当前订单的采购单
foreach (var relationGroup in relationGroups) var relationByWaybillNoPurchaseOrderIds = purchaseExpressOrderList_all.Where(peo => peo.OrderId == orderId && peo.WaybillNo == wayBillNo)
.Select(peo => peo.PurchaseOrderId)
.ToList();
var relationByWaybillNoPurchaseOrderList = currentPurchaseOrderList.Where(po => relationByWaybillNoPurchaseOrderIds.Contains(po.PurchaseOrderId)).ToList();
//查询跟采购单有关联的订单sku
var relationOrderSkuList = currentOrderSkuList.Where(osku => relationByWaybillNoPurchaseOrderList.Any(po => po.BelongSkuIds.Contains(osku.SkuId))).ToList();
foreach (var osku in relationOrderSkuList)
{ {
bool isSignAll = true; //查询跟此订单sku有关的采购单
foreach (var relation in relationGroup) var relationByOrderSkuPurchaseOrderList = currentPurchaseOrderList.Where(po => po.BelongSkuIds.Contains(osku.SkuId)).ToList();
var isSignAll = true;
foreach (var po in relationByOrderSkuPurchaseOrderList)
{ {
var purchaseSku = orderPurchaseSkuInfoList.FirstOrDefault(x => x.PurchaseSkuId == relation.PurchaseSkuId); if (po.PurchasePlatform == Enums.Platform.)
if (purchaseSku == null || string.IsNullOrEmpty(purchaseSku.WaybillNo))
{ {
isSignAll = false; //查询跟此sku有关的关联信息
continue; var oriRelationList = orderPurchaseRelationList_all.Where(ori => ori.OrderId == osku.OrderId &&
ori.PurchaseOrderId == po.PurchaseOrderId &&
ori.BelongSkuId == osku.SkuId).ToList();
if (oriRelationList.Count() == 0)
{
isSignAll = false;
break;
}
foreach (var relation in oriRelationList)
{
var pos = orderPurchaseSkuList_all.FirstOrDefault(pos => pos.OrderId == relation.OrderId &&
pos.PurchaseOrderId == relation.PurchaseOrderId &&
pos.PurchaseSkuId == relation.PurchaseSkuId);
if (pos == null || string.IsNullOrEmpty(pos.WaybillNo))
{
isSignAll = false;
break;
}
var peo = purchaseExpressOrderList_all.FirstOrDefault(x => x.WaybillNo == pos.WaybillNo);
if (peo == null || peo.ExpressState != "QianShou")
{
isSignAll = false;
break;
}
}
if (!isSignAll)
break;
} }
var purchaseExpressOrder = purchaseExpressOrderList.FirstOrDefault(x => x.WaybillNo == purchaseSku.WaybillNo); else
if (purchaseExpressOrder == null || purchaseExpressOrder.ExpressState != "QianShou")
{ {
isSignAll = false; var peoList = purchaseExpressOrderList_all.Where(x => x.OrderId == osku.OrderId && x.PurchaseOrderId == po.PurchaseOrderId);
continue; if (peoList.Count() == 0 || peoList.Any(peo => peo.ExpressState != "QianShou"))
{
isSignAll = false;
break;
}
} }
} }
//推送齐库
restApiService.SendRequest("http://qiku.qiyue666.com",
"/Api/PackPurchaseTask/UpdateAvailabilityState", var publishResult = restApiService.SendRequest("http://qiku.qiyue666.com",
new "/Api/PackPurchaseTask/UpdateAvailabilityState",
{ new
availability = isSignAll ? 0 : 1, {
orderId = relationGroup.FirstOrDefault().OrderId, availability = isSignAll ? 0 : 1,
skuId = relationGroup.Key orderId = osku.OrderId,
}, skuId = osku.BelongSkuId
null, }, null, HttpMethod.Post);
HttpMethod.Post); if (publishResult.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception(publishResult.Content);
}
}
catch (Exception ex)
{
}
}
private void PublishQiKuPurchaseExpressOrder(OrderPurchaseInfo orderPurchaseInfo, IList<PurchaseExpressOrder> purchaseExpressOrderList)
{
try
{
if (string.IsNullOrEmpty(orderPurchaseInfo.BelongSkuIds))
return;
var orderId = purchaseExpressOrderList.FirstOrDefault().OrderId;
var orderSkuList = fsql.Select<OrderSku>().Where(osku => osku.OrderId == orderId).ToList();
var isSignAll = !purchaseExpressOrderList.Any(x => x.ExpressState != "QianShou");
var notifyList = orderSkuList.Where(osku => orderPurchaseInfo.BelongSkuIds.Contains(osku.SkuId)).ToList();
if (notifyList.Count() == 0)
return;
foreach (var notifySku in notifyList)
{
restApiService.SendRequest("http://qiku.qiyue666.com",
"/Api/PackPurchaseTask/UpdateAvailabilityState",
new
{
availability = isSignAll ? 0 : 1,
orderId = notifySku.OrderId,
skuId = notifySku.BelongSkuId
},
null,
HttpMethod.Post);
} }
} }
catch catch
{ {
} }
} }

24
BBWYB.Server.Business/Sync/OrderSyncBusiness.cs

@ -5,7 +5,6 @@ using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto; using BBWYB.Server.Model.Dto;
using FreeSql; using FreeSql;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using Org.BouncyCastle.Bcpg;
using SDKAdapter; using SDKAdapter;
using SDKAdapter.OperationPlatform.Client; using SDKAdapter.OperationPlatform.Client;
using SDKAdapter.OperationPlatform.Models; using SDKAdapter.OperationPlatform.Models;
@ -44,6 +43,22 @@ namespace BBWYB.Server.Business.Sync
Task.Factory.StartNew(() => Sync(shop, orderId, startTime, endTime, AdapterEnums.SortTimeField.Modify, AdapterEnums.SortType.Desc), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncOrderTaskScheduler); Task.Factory.StartNew(() => Sync(shop, orderId, startTime, endTime, AdapterEnums.SortTimeField.Modify, AdapterEnums.SortType.Desc), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncOrderTaskScheduler);
} }
public void ManualOrderSync(long shopId, DateTime startTime, DateTime endTime)
{
var shop = venderBusiness.GetShopList(shopId, platform: Enums.Platform.).FirstOrDefault();
if (shop == null)
throw new BusinessException($"未找到店铺Id {shopId}");
while (true)
{
var s = startTime;
var e = s.AddHours(3);
Sync(shop, string.Empty, s, e, AdapterEnums.SortTimeField.Modify, AdapterEnums.SortType.Desc);
if (e >= endTime)
break;
startTime = startTime.AddHours(3);
}
}
private void Sync(ShopResponse shop, private void Sync(ShopResponse shop,
string orderId, string orderId,
DateTime? startTime, DateTime? startTime,
@ -163,6 +178,7 @@ namespace BBWYB.Server.Business.Sync
Logo = qtOrderSku.SkuLogo, Logo = qtOrderSku.SkuLogo,
OrderId = qtOrder.OrderId, OrderId = qtOrder.OrderId,
Price = qtOrderSku.SkuPrice, Price = qtOrderSku.SkuPrice,
InitialPrice = qtOrderSku.SkuPrice,
Title = qtOrderSku.SkuTitle, Title = qtOrderSku.SkuTitle,
ShopId = shopId, ShopId = shopId,
ProductId = qtOrderSku.ProductId, ProductId = qtOrderSku.ProductId,
@ -191,6 +207,12 @@ namespace BBWYB.Server.Business.Sync
{ {
#region 订单状态脱离拳探 只处理付款和取消 #region 订单状态脱离拳探 只处理付款和取消
Enums.OrderState? updateOrderState = null; Enums.OrderState? updateOrderState = null;
if (orderState == Enums.OrderState. && dbOrder.OrderState!=Enums.OrderState.)
{
//dbOrder.OrderState = Enums.OrderState.待付款;
updateOrderState = Enums.OrderState.;
}
if (dbOrder.OrderState == Enums.OrderState. && orderState != Enums.OrderState.) if (dbOrder.OrderState == Enums.OrderState. && orderState != Enums.OrderState.)
updateOrderState = Enums.OrderState.; updateOrderState = Enums.OrderState.;

7
BBWYB.Server.Business/Vender/VenderBusiness.cs

@ -32,6 +32,13 @@ namespace BBWYB.Server.Business
.ToList<ShopResponse>(); .ToList<ShopResponse>();
} }
public IList<ShopResponse> GetShopList(List<string> shopIds)
{
return fsqlManager.MDSfsql.Select<Shops>().Where(s => !string.IsNullOrEmpty(s.ShopId) &&
shopIds.Contains(s.ShopId))
.ToList<ShopResponse>();
}
public long SaveShopSetting(ShopSettingRequest shopSettingRequest) public long SaveShopSetting(ShopSettingRequest shopSettingRequest)
{ {

8
BBWYB.Server.Model/BBWYB.Server.Model.csproj

@ -12,4 +12,12 @@
<PackageReference Include="FreeSql" Version="3.2.690" /> <PackageReference Include="FreeSql" Version="3.2.690" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Dto\Request\PurchaseScheme\v2\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SDKAdapter\SDKAdapter.csproj" />
</ItemGroup>
</Project> </Project>

223
BBWYB.Server.Model/Db/BBWY/PurchaseOrderV2.cs

@ -0,0 +1,223 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db.BBWY
{
/// <summary>
/// 采购单表
/// </summary>
[Table(Name = "purchaseorderv2", DisableSyncStructure = true)]
public partial class PurchaseOrderV2
{
/// <summary>
/// 采购单号
/// </summary>
[Column(StringLength = 100, IsPrimary = true, IsNullable = false)]
public string Id { get; set; }
/// <summary>
/// 拳探订单独有Sn号
/// </summary>
[Column(StringLength = 50)]
public string OrderSn { get; set; }
/// <summary>
/// 完成时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? CompletionTime { get; set; }
/// <summary>
/// 收货详细地址
/// </summary>
public string ConsigneeAddress { get; set; }
/// <summary>
/// 收货市
/// </summary>
[Column(StringLength = 30)]
public string ConsigneeCity { get; set; }
/// <summary>
/// 收货联系人名称
/// </summary>
[Column(StringLength = 50)]
public string ConsigneeContactName { get; set; }
/// <summary>
/// 收货区
/// </summary>
[Column(StringLength = 30)]
public string ConsigneeCounty { get; set; }
/// <summary>
/// 收货联系人电话
/// </summary>
[Column(StringLength = 50)]
public string ConsigneeMobile { get; set; }
/// <summary>
/// 收货省
/// </summary>
[Column(StringLength = 30)]
public string ConsigneeProvince { get; set; }
/// <summary>
/// 收货镇
/// </summary>
[Column(StringLength = 30)]
public string ConsigneeTown { get; set; }
/// <summary>
/// 打包耗材费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? ConsumableAmount { get; set; } = 0.00M;
/// <summary>
/// 创建时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 快递公司
/// </summary>
[Column(StringLength = 100)]
public string ExpressName { get; set; }
/// <summary>
/// 头程运费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? FirstFreight { get; set; } = 0.00M;
/// <summary>
/// 入仓费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? InStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 是否转入库存
/// </summary>
public bool? IsConvertToStock { get; set; } = false;
/// <summary>
/// 是否订阅快递100
/// </summary>
public bool? IsSubscribeKuaiDi100 { get; set; } = false;
/// <summary>
/// 采购单状态(待付款=0,待发货=1,待收货=2,待质检=3,待打包=4,待结算=5,已完成=6)
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.OrderState? OrderState { get; set; }
/// <summary>
/// 支付时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? PayTime { get; set; }
/// <summary>
/// 采购货款
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? ProductAmount { get; set; } = 0.00M;
/// <summary>
/// 采购账号Id
/// </summary>
public long? PurchaseAccountId { get; set; }
/// <summary>
/// 采购金额(采购货款+采购运费)
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? PurchaseAmount { get; set; } = 0.00M;
/// <summary>
/// 采购运费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? PurchaseFreight { get; set; } = 0.00M;
/// <summary>
/// 采购平台
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.Platform? PurchasePlatform { get; set; }
/// <summary>
/// 商家Id
/// </summary>
[Column(StringLength = 20)]
public string PurchaserId { get; set; }
/// <summary>
/// 商家名称
/// </summary>
[Column(StringLength = 100)]
public string PurchaserName { get; set; }
/// <summary>
/// 质检费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? QualityInspectionAmount { get; set; } = 0.00M;
/// <summary>
/// 备注信息
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 店铺Id
/// </summary>
public long ShopId { get; set; }
/// <summary>
/// 签收时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? SignTime { get; set; }
/// <summary>
/// 快递单号
/// </summary>
[Column(StringLength = 100)]
public string WaybillNo { get; set; }
/// <summary>
/// 采购方式(线上=0, 线下=1)
/// </summary>
[Column(MapType = typeof(int))]
public Enums.PurchaseMethod PurchaseMethod { get; set; }
/// <summary>
/// 采购单模式 批发 = 0,代发 = 1
/// </summary>
[Column(MapType = typeof(int))]
public Enums.PurchaseOrderMode PurchaseOrderMode { get; set; }
///// <summary>
///// 打包状态 (待发布=0,打包中=1,已完成=2)
///// </summary>
//[Column(MapType = typeof(int))]
//public Enums.PackState PackState { get; set; }
/// <summary>
/// 入仓类型 (发回齐越 = 0, 厂商代发入仓 = 1)
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.IntoStoreType? IntoStoreType { get; set; }
}
}

29
BBWYB.Server.Model/Db/Order/InStoreOrderCheckTask.cs

@ -0,0 +1,29 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
[Table(Name = "instoreorderchecktask", DisableSyncStructure = true)]
public partial class InStoreOrderCheckTask
{
[Column(IsPrimary = true)]
public long Id { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
public bool? IsChecked { get; set; } = false;
[Column(StringLength = 50)]
public string OrderId { get; set; }
[Column(StringLength = 50)]
public string OrderSn { get; set; }
public long? ShopId { get; set; }
}
}

30
BBWYB.Server.Model/Db/Order/InStorePurchaseOrdeRrelationInfo.cs

@ -7,29 +7,29 @@ namespace BBWYB.Server.Model.Db
/// 入库采购单关系表 /// 入库采购单关系表
/// </summary> /// </summary>
[Table(Name = "instorepurchaseorderrelationinfo", DisableSyncStructure = true)] [Table(Name = "instorepurchaseorderrelationinfo", DisableSyncStructure = true)]
public partial class InStorePurchaseOrdeRrelationInfo public partial class InStorePurchaseOrdeRrelationInfo
{ {
[Column(IsPrimary = true)] [Column(IsPrimary = true)]
public long Id { get; set; } public long Id { get; set; }
[Column(DbType = "datetime")] [Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; } public DateTime? CreateTime { get; set; }
[Column(StringLength = 100)] [Column(StringLength = 100)]
public string InStorePurchaseOrderId { get; set; } public string InStorePurchaseOrderId { get; set; }
[Column(StringLength = 100)] [Column(StringLength = 100)]
public string OrderId { get; set; } public string OrderId { get; set; }
[Column(StringLength = 100)] [Column(StringLength = 100)]
public string PurchaseOrderId { get; set; } public string PurchaseOrderId { get; set; }
public long? ShopId { get; set; } public long? ShopId { get; set; }
[Column(StringLength = 100)] [Column(StringLength = 100)]
public string WaybillNo { get; set; } public string WaybillNo { get; set; }
} }
} }

2
BBWYB.Server.Model/Db/Order/Order.cs

@ -23,7 +23,7 @@ namespace BBWYB.Server.Model.Db
/// <summary> /// <summary>
/// 买家备注 /// 买家备注
/// </summary> /// </summary>
[Column(StringLength = 1000)]
public string BuyerRemark { get; set; } public string BuyerRemark { get; set; }
/// <summary> /// <summary>

5
BBWYB.Server.Model/Db/Order/OrderPurchaseRelationinfo.cs

@ -64,6 +64,11 @@ namespace BBWYB.Server.Model.Db
/// </summary> /// </summary>
public long? SchemeId { get; set; } public long? SchemeId { get; set; }
/// <summary>
/// 采购方案版本
/// </summary>
public int SchemeVersion { get; set; } = 1;
/// <summary> /// <summary>
/// 来源SkuId (JD) /// 来源SkuId (JD)
/// </summary> /// </summary>

6
BBWYB.Server.Model/Db/Order/OrderSku.cs

@ -43,6 +43,12 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "decimal(20,2)")] [Column(DbType = "decimal(20,2)")]
public decimal? Price { get; set; } public decimal? Price { get; set; }
/// <summary>
/// 最初单价
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? InitialPrice { get; set; }
[Column(StringLength = 50)] [Column(StringLength = 50)]
public string ProductId { get; set; } public string ProductId { get; set; }

40
BBWYB.Server.Model/Db/PurchaseScheme/OrderPurchaseRelationInfo.cs

@ -1,40 +0,0 @@
using FreeSql.DataAnnotations;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace BBWYB.Server.Model.Db.PurchaseScheme
{
[Table(Name = "orderpurchaserelationinfo", DisableSyncStructure = true)]
public class OrderPurchaseRelationInfo
{
[Column( IsPrimary = true)]
public long Id { get; set; }
/// <summary>
/// 采购单Id
/// </summary>
public string PurchaseOrderId { get; set; }
/// <summary>
/// 订单Id
/// </summary>
public string OrderId { get; set; }
/// <summary>
/// 采购方案Id
/// </summary>
public string SchemeId { get; set; }
/// <summary>
/// 采购spu
/// </summary>
public string PurchaseProductId { get; set; }
/// <summary>
/// 采购sku
/// </summary>
public string PurchaseSkuId { get; set; }
}
}

46
BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs

@ -1,6 +1,8 @@
using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db;
using FreeSql.DataAnnotations; using FreeSql.DataAnnotations;
using Newtonsoft.Json;
namespace BBWYB.Server.Model namespace BBWYB.Server.Model
{ {
@ -26,20 +28,19 @@ namespace BBWYB.Server.Model
public decimal DefaultCost { get; set; } = 0.0M; public decimal DefaultCost { get; set; } = 0.0M;
[Column(StringLength = 50, IsNullable = false)]
public string ProductId { get; set; }
/// <summary> /// <summary>
/// 采购商Id /// 上次采购成本
/// </summary> /// </summary>
[Column(StringLength = 20)] public decimal LastPurchasePriceCost { get; set; } = 0.0M;
public string PurchaserId { get; set; }
/// <summary> [Column(StringLength = 50, IsNullable = false)]
/// 采购实际成本 public string ProductId { get; set; }
/// </summary>
public decimal RealCost { get; set; } = 0.0M; ///// <summary>
///// 采购商Id
///// </summary>
//[Column(StringLength = 20)]
//public string PurchaserId { get; set; }
[Column(StringLength = 50, IsNullable = false)] [Column(StringLength = 50, IsNullable = false)]
public string SkuId { get; set; } public string SkuId { get; set; }
@ -51,8 +52,29 @@ namespace BBWYB.Server.Model
/// </summary> /// </summary>
public DateTime? LastPurchaseTime { get; set; } public DateTime? LastPurchaseTime { get; set; }
[Column(MapType = typeof(int), DbType = "int(1)")] /// <summary>
public Enums.Platform PurchasePlatform { get; set; } /// 慧眼标的Id
/// </summary>
[Column(StringLength = 50)]
public string HYBDId { get; set; }
/// <summary>
/// 慧眼方案Id
/// </summary>
[Column(StringLength = 50)]
public string HYSchemeId { get; set; }
/// <summary>
/// 分组Id
/// </summary>
[Column(DbType = "bigint")]
public long SchemeGroupId { get; set; } = 0;
/// <summary>
/// 方案版本
/// </summary>
[Column(DbType = "int")]
public int Version { get; set; } = 1;
[Column(IsIgnore = true)] [Column(IsIgnore = true)]
public List<PurchaseSchemeProduct> PurchaseSchemeProductList { get; set; } public List<PurchaseSchemeProduct> PurchaseSchemeProductList { get; set; }

45
BBWYB.Server.Model/Db/PurchaseScheme/PurchaseSchemeGroup.cs

@ -0,0 +1,45 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
/// <summary>
/// 采购方案分组表
/// </summary>
[Table(Name = "purchaseschemegroup", DisableSyncStructure = true)]
public partial class PurchaseSchemeGroup
{
/// <summary>
/// 分组Id
/// </summary>
[Column(DbType = "bigint", IsPrimary = true)]
public long Id { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 组名
/// </summary>
[Column(StringLength = 100)]
public string GroupName { get; set; }
/// <summary>
/// 店铺spu,店铺商品Id
/// </summary>
[Column(StringLength = 50)]
public string ProductId { get; set; }
/// <summary>
/// 店铺Id
/// </summary>
[Column(DbType = "bigint")]
public long? ShopId { get; set; }
}
}

4
BBWYB.Server.Model/Db/PurchaseScheme/Purchaser.cs

@ -40,6 +40,10 @@ namespace BBWYB.Server.Model.Db
[Column(MapType = typeof(int?))] [Column(MapType = typeof(int?))]
public Enums.Platform? Platform { get; set; } public Enums.Platform? Platform { get; set; }
[Column(StringLength = 50, IsNullable = true)]
public string MemberId { get; set; }
} }
} }

21
BBWYB.Server.Model/Db/PurchaseScheme/PurchasesSchemeGroupIndex.cs

@ -0,0 +1,21 @@
using FreeSql.DataAnnotations;
using Newtonsoft.Json;
namespace BBWYB.Server.Model.Db
{
[Table(Name = "purchaseschemegroupindex", DisableSyncStructure = true)]
public partial class PurchaseSchemeGroupIndex
{
[Column(IsPrimary = true)]
public string ProductId { get; set; }
public DateTime? CreateTime { get; set; }
public int? Index { get; set; }
public long? ShopId { get; set; }
}
}

6
BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproduct.cs

@ -44,6 +44,12 @@ namespace BBWYB.Server.Model.Db
/// </summary> /// </summary>
public long SkuPurchaseSchemeId { get; set; } public long SkuPurchaseSchemeId { get; set; }
/// <summary>
/// 采购商Id
/// </summary>
[Column(StringLength = 20)]
public string PurchaserId { get; set; }
[Column(IsIgnore = true)] [Column(IsIgnore = true)]
public List<PurchaseSchemeProductSku> PurchaseSchemeProductSkuList { get; set; } public List<PurchaseSchemeProductSku> PurchaseSchemeProductSkuList { get; set; }

11
BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs

@ -46,6 +46,17 @@ namespace BBWYB.Server.Model.Db
/// </summary> /// </summary>
public long SkuPurchaseSchemeId { get; set; } public long SkuPurchaseSchemeId { get; set; }
/// <summary>
/// 采购比例
/// </summary>
[Column(DbType = "int(1)", IsNullable = true)]
public int? PurchaseRatio { get; set; } = 1;
/// <summary>
/// 实际单价
/// </summary>
public decimal? ActualPrice { get; set; } = 0.00M;
} }
} }

83
BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseScheme.cs

@ -0,0 +1,83 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
/// <summary>
/// 历史采购方案表
/// </summary>
[Table(Name = "historypurchasescheme", DisableSyncStructure = true)]
public partial class HistoryPurchaseScheme
{
/// <summary>
/// 历史流水Id
/// </summary>
[Column(DbType = "bigint", IsPrimary = true)]
public long HistoryId { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 采购默认成本
/// </summary>
public decimal? DefaultCost { get; set; }
/// <summary>
/// 慧眼标的Id
/// </summary>
[Column(StringLength = 50)]
public string HYBDId { get; set; }
/// <summary>
/// 慧眼采购方案Id
/// </summary>
[Column(StringLength = 50)]
public string HYSchemeId { get; set; }
/// <summary>
/// 采购方案Id
/// </summary>
[Column(DbType = "bigint")]
public long? Id { get; set; }
/// <summary>
/// 上次采购成本
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? LastPurchasePriceCost { get; set; }
/// <summary>
/// 上次采购时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? LastPurchaseTime { get; set; }
[Column(StringLength = 50, IsNullable = false)]
public string ProductId { get; set; }
/// <summary>
/// 方案分组Id
/// </summary>
[Column(DbType = "bigint")]
public long? SchemeGroupId { get; set; }
/// <summary>
/// 店铺Id
/// </summary>
[Column(DbType = "bigint")]
public long ShopId { get; set; }
[Column(StringLength = 50, IsNullable = false)]
public string SkuId { get; set; }
/// <summary>
/// 采购方案版本
/// </summary>
[Column(DbType = "int")]
public int? Version { get; set; } = 1;
}
}

59
BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseSchemeProduct.cs

@ -0,0 +1,59 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
/// <summary>
/// 采购方案商品表
/// </summary>
[ Table(Name = "historypurchaseschemeproduct", DisableSyncStructure = true)]
public partial class HistoryPurchaseSchemeProduct {
/// <summary>
/// 历史流水Id
/// </summary>
[Column(DbType = "bigint", IsPrimary = true)]
public long HistoryId { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
[Column(StringLength = 50)]
public string ProductId { get; set; }
/// <summary>
/// 采购商品Id
/// </summary>
[Column(StringLength = 50)]
public string PurchaseProductId { get; set; }
/// <summary>
/// 商家Id
/// </summary>
[Column(StringLength = 50)]
public string PurchaserId { get; set; }
/// <summary>
/// 采购商品链接
/// </summary>
[Column(StringLength = 500)]
public string PurchaseUrl { get; set; }
[Column(StringLength = 50)]
public string SkuId { get; set; }
/// <summary>
/// Sku采购方案Id
/// </summary>
[Column(DbType = "bigint")]
public long? SkuPurchaseSchemeId { get; set; }
/// <summary>
/// 采购方案版本
/// </summary>
[Column(DbType = "int")]
public int? Version { get; set; } = 1;
}
}

72
BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseSchemeProductsku.cs

@ -0,0 +1,72 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
/// <summary>
/// 采购方案sku表
/// </summary>
[Table(Name = "historypurchaseschemeproductsku", DisableSyncStructure = true)]
public partial class HistoryPurchaseSchemeProductSku {
/// <summary>
/// 历史流水Id
/// </summary>
[Column(DbType = "bigint", IsPrimary = true)]
public long HistoryId { get; set; }
/// <summary>
/// 实际单价(人工设置)
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? ActualPrice { get; set; } = 0.00M;
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
[Column(StringLength = 50, IsNullable = false)]
public string ProductId { get; set; }
/// <summary>
/// 采购商品Id
/// </summary>
[Column(StringLength = 50, IsNullable = false)]
public string PurchaseProductId { get; set; }
/// <summary>
/// 采购比例
/// </summary>
[Column(DbType = "int")]
public int? PurchaseRatio { get; set; } = 1;
/// <summary>
/// 采购商品的SkuId
/// </summary>
[Column(StringLength = 50)]
public string PurchaseSkuId { get; set; }
/// <summary>
/// 采购商品Sku的SpecId
/// </summary>
[Column(StringLength = 50)]
public string PurchaseSkuSpecId { get; set; }
[Column(StringLength = 50, IsNullable = false)]
public string SkuId { get; set; }
/// <summary>
/// Sku采购方案Id
/// </summary>
[Column(DbType = "bigint")]
public long SkuPurchaseSchemeId { get; set; }
/// <summary>
/// 采购方案版本
/// </summary>
[Column(DbType = "int")]
public int? Version { get; set; } = 1;
}
}

51
BBWYB.Server.Model/Dto/Core/HY/HYPurchaseScheme.cs

@ -0,0 +1,51 @@
namespace BBWYB.Server.Model.Dto
{
public class HYPurchaseScheme
{
/// <summary>
/// HY方案Id
/// </summary>
public int Id { get; set; }
public string TeamitemsId { get; set; }
public string UserId { get; set; }
/// <summary>
/// 配件数量
/// </summary>
public int SkuCount { get; set; }
public IList<HYPurchaseSchemeProduct> PlanItems { get; set; }
}
public class HYPurchaseSchemeProduct
{
public string Id { get; set; }
/// <summary>
/// 慧眼方案Id
/// </summary>
public int SupplierTaskPlanId { get; set; }
/// <summary>
/// Taobao=0 Jd=1 ALBB=2 PDD=3
/// </summary>
public int Platform { get; set; }
/// <summary>
/// 采购商品Id
/// </summary>
public string ItemId { get; set; }
}
public class HYPurchaseSchemeProductSku
{
}
public class HYSupplierInfo
{
}
}

11
BBWYB.Server.Model/Dto/Core/ProportionalCalculationCostResult.cs

@ -0,0 +1,11 @@
namespace BBWYB.Server.Model.Core
{
public class ProportionalCalculationCostResult
{
public string SkuId { get; set; }
public decimal ProductAmount { get; set; }
public decimal FreightAmount { get; set; }
}
}

8
BBWYB.Server.Model/Dto/Request/Product/QueryBProductRequest.cs

@ -0,0 +1,8 @@
using SDKAdapter.OperationPlatform.Models;
namespace BBWYB.Server.Model.Dto
{
public class QueryBProductRequest: OP_QueryProductSkuRequest
{
}
}

15
BBWYB.Server.Model/Dto/Request/Product/QueryProductSkuPriceRequest.cs

@ -0,0 +1,15 @@
namespace BBWYB.Server.Model.Dto
{
public class QueryProductSkuPriceRequest
{
public Enums.Platform Platform { get; set; }
public string AppKey { get; set; }
public string AppSecret { get; set; }
public string AppToken { get; set; }
public string Sku { get; set; }
}
}

14
BBWYB.Server.Model/Dto/Request/PurchaseOrder/CargoParamRequest.cs

@ -17,7 +17,7 @@
public string SpecId { get; set; } public string SpecId { get; set; }
/// <summary> /// <summary>
/// 采购数量 /// 采购配件数量 (订单sku数量 * 采购比例)
/// </summary> /// </summary>
public int Quantity { get; set; } public int Quantity { get; set; }
@ -30,6 +30,16 @@
/// 采购方案Id /// 采购方案Id
/// </summary> /// </summary>
public long SchemeId { get; set; } public long SchemeId { get; set; }
/// <summary>
/// 采购方案版本
/// </summary>
public int? SchemeVersion { get; set; } = 1;
/// <summary>
/// 配件的采购比例 不传值默认1
/// </summary>
public int? PurchaseRatio { get; set; }
} }
public class CargoParamGroupRequest public class CargoParamGroupRequest
{ {
@ -52,6 +62,6 @@
/// <summary> /// <summary>
/// 采购商品列表 /// 采购商品列表
/// </summary> /// </summary>
public IList<CargoParamRequest> CargoParamList { get; set; } public List<CargoParamRequest> CargoParamList { get; set; }
} }
} }

4
BBWYB.Server.Model/Dto/Request/PurchaseOrder/PreviewOrderRequest.cs

@ -7,7 +7,7 @@ namespace BBWYB.Server.Model.Dto
/// <summary> /// <summary>
/// 采购账号列表 /// 采购账号列表
/// </summary> /// </summary>
public IList<PurchaseAccountRequest> PurchaseAccountList { get; set; } public List<PurchaseAccountRequest> PurchaseAccountList { get; set; }
public Enums.PurchaseOrderMode PurchaseOrderMode { get; set; } public Enums.PurchaseOrderMode PurchaseOrderMode { get; set; }
@ -19,7 +19,7 @@ namespace BBWYB.Server.Model.Dto
/// <summary> /// <summary>
/// 采购参数列表(以采购商分组) /// 采购参数列表(以采购商分组)
/// </summary> /// </summary>
public IList<CargoParamGroupRequest> CargoParamGroupList { get; set; } public List<CargoParamGroupRequest> CargoParamGroupList { get; set; }
} }
} }

6
BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs

@ -7,11 +7,13 @@ namespace BBWYB.Server.Model.Dto
/// <summary> /// <summary>
/// 需要修改的采购方案 /// 需要修改的采购方案
/// </summary> /// </summary>
public IList<EditPurchaseSchemeRequest> EditPurchaseSchemeList { get; set; } public List<EditPurchaseSchemeRequest> EditPurchaseSchemeList { get; set; }
/// <summary> /// <summary>
/// 需要新增的采购方案 /// 需要新增的采购方案
/// </summary> /// </summary>
public IList<InputPurchaseSchemeRequest> AddPurchaseSchemeList { get; set; } public List<InputPurchaseSchemeRequest> AddPurchaseSchemeList { get; set; }
} }
} }

9
BBWYB.Server.Model/Dto/Request/PurchaseScheme/DeletePurchaseSchemeRequest.cs

@ -1,9 +0,0 @@
namespace BBWYB.Server.Model.Dto
{
public class DeletePurchaseSchemeRequest
{
public string ProductId { get; set; }
public string PurchaserId { get; set; }
}
}

11
BBWYB.Server.Model/Dto/Request/PurchaseScheme/DeletePurchaseSkuRequest.cs

@ -0,0 +1,11 @@
namespace BBWYB.Server.Model.Dto
{
public class DeletePurchaseSkuRequest
{
public long SchemeId { get; set; }
public string SkuId { get; set; }
public string PurchaseSkuId { get; set; }
}
}

13
BBWYB.Server.Model/Dto/Request/PurchaseScheme/EditPurchaseRatioRequest.cs

@ -0,0 +1,13 @@
namespace BBWYB.Server.Model.Dto
{
public class EditPurchaseRatioRequest
{
public long SchemeId { get; set; }
public string SkuId { get; set; }
public string PurchaseSkuId { get; set; }
public int Ratio { get; set; }
}
}

3
BBWYB.Server.Model/Dto/Request/PurchaseScheme/EditPurchaseSchemeRequest.cs

@ -2,6 +2,9 @@
{ {
public class EditPurchaseSchemeRequest: InputPurchaseSchemeRequest public class EditPurchaseSchemeRequest: InputPurchaseSchemeRequest
{ {
/// <summary>
/// 采购方案Id
/// </summary>
public long Id { get; set; } public long Id { get; set; }
} }
} }

42
BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs

@ -1,27 +1,43 @@
using System; namespace BBWYB.Server.Model.Dto
using System.Collections.Generic;
using System.Text;
namespace BBWYB.Server.Model.Dto
{ {
public class InputPurchaseSchemeProductRequest public class InputPurchaseSchemeProductRequest
{ {
/// <summary>
/// 店铺商品Id
/// </summary>
public string ProductId { get; set; } public string ProductId { get; set; }
/// <summary>
/// 店铺商品Skull
/// </summary>
public string SkuId { get; set; } public string SkuId { get; set; }
/// <summary> /// <summary>
/// 采购商品id /// 采购商品Id
/// </summary> /// </summary>
public string PurchaseProductId { get; set; } public string PurchaseProductId { get; set; }
/// <summary> /// <summary>
/// 采购链接 /// 采购链接
/// </summary> /// </summary>
public string PurchaseUrl { get; set; } public string PurchaseUrl { get; set; }
public IList<InputPurchaseSchemeProductSkuRequest> PurchaseSchemeProductSkuList { get; set; }
/// <summary>
/// 采购商Id (1688 SellerUserId)
/// </summary>
public string PurchaserId { get; set; }
/// <summary>
/// 采购商Id2 (1688 SellerLoginId)
/// </summary>
public string PurchaserId2 { get; set; }
/// <summary>
/// 采购商名称
/// </summary>
public string PurchaserName { get; set; }
/// <summary>
/// 采购商发货地
/// </summary>
public string PurchaserLocation { get; set; }
public string PurchaserMemberId { get; set; }
public Enums.Platform? PurchasePlatform { get; set; }
public List<InputPurchaseSchemeProductSkuRequest> PurchaseSchemeProductSkuList { get; set; }
} }
} }

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

@ -1,13 +1,10 @@
namespace BBWYB.Server.Model.Dto namespace BBWYB.Server.Model.Dto
{ {
public class InputPurchaseSchemeProductSkuRequest public class InputPurchaseSchemeProductSkuRequest
{/// <summary> {
/// 店铺商品Id
/// </summary>
public string ProductId { get; set; } public string ProductId { get; set; }
/// <summary>
/// 店铺商品Sku
/// </summary>
public string SkuId { get; set; } public string SkuId { get; set; }
/// <summary> /// <summary>
/// 采购商品Id /// 采购商品Id
@ -18,8 +15,23 @@
/// </summary> /// </summary>
public string PurchaseSkuId { get; set; } public string PurchaseSkuId { get; set; }
/// <summary> /// <summary>
/// 采购Ske SpecId (1688独有) /// 采购SpecId (1688独有)
/// </summary> /// </summary>
public string PurchaseSkuSpecId { get; set; } public string PurchaseSkuSpecId { get; set; }
/// <summary>
/// 采购配比
/// </summary>
public int? PurchaseRatio { get; set; }
/// <summary>
/// 实际单价(人工填写的单价,未填写传0或null)
/// </summary>
public decimal? ActualPrice { get; set; }
/// <summary>
/// 默认单价(采购配件基本信息接口里的单价)
/// </summary>
public decimal? DefaultPrice { get; set; }
} }
} }

37
BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs

@ -4,40 +4,25 @@ namespace BBWYB.Server.Model.Dto
{ {
public class InputPurchaseSchemeRequest public class InputPurchaseSchemeRequest
{ {
public string ShopId { get; set; }
public string ProductId { get; set; }
public string SkuId { get; set; }
/// <summary>
/// 采购默认成本
/// </summary>
public decimal? DefaultCost { get; set; }
/// <summary> /// <summary>
/// 采购实际成本 /// 采购方案分组Id,为空将新增分组
/// </summary> /// </summary>
public decimal? RealCost { get; set; } public long? SchemeGroupId { get; set; }
/// <summary>
/// 采购商Id
/// </summary>
public string PurchaserId { get; set; }
/// <summary> /// <summary>
/// 采购商Id /// 慧眼标的Id
/// </summary> /// </summary>
public string PurchaserId2 { get; set; } public string HYBDId { get; set; }
/// <summary> /// <summary>
/// 采购商名称 /// 慧眼方案Id
/// </summary> /// </summary>
public string PurchaserName { get; set; } public string HYSchemeId { get; set; }
/// <summary>
/// 采购商发货地 public long ShopId { get; set; }
/// </summary> public string ProductId { get; set; }
public string PurchaserLocation { get; set; } public string SkuId { get; set; }
/// <summary>
/// 采购平台
/// </summary>
public Enums.Platform PurchasePlatform { get; set; } = Enums.Platform.;
public IList<InputPurchaseSchemeProductRequest> PurchaseSchemeProductList { get; set; } public List<InputPurchaseSchemeProductRequest> PurchaseSchemeProductList { get; set; }
} }
} }

20
BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeAndGroupRequest.cs

@ -0,0 +1,20 @@
namespace BBWYB.Server.Model.Dto
{
public class QuerySchemeAndGroupRequest
{
/// <summary>
/// 店铺Id
/// </summary>
public long ShopId { get; set; }
/// <summary>
/// 店铺商品Id列表
/// </summary>
public IList<string> ProductIdList { get; set; }
/// <summary>
/// 是否包含采购配件的基本信息(单价,Logo,标题等) 是=1 否=0或null
/// </summary>
public int? IncludePurchaseSkuBasicInfo { get; set; }
}
}

7
BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeCountRequest.cs

@ -0,0 +1,7 @@
namespace BBWYB.Server.Model.Dto
{
public class QuerySchemeCountRequest
{
public IList<string> SkuIdList { get; set; }
}
}

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

@ -5,27 +5,46 @@ namespace BBWYB.Server.Model.Dto
public class QuerySchemeRequest public class QuerySchemeRequest
{ {
/// <summary> /// <summary>
/// 采购方案Id /// 采购方案Id,有值则忽略SchemeIdList,SchemeGroupIdList,SkuIdList,ProductIdList
/// </summary> /// </summary>
public long? SchemeId { get; set; } public long? SchemeId { get; set; }
/// <summary> /// <summary>
/// 采购方案Id集合 /// 采购方案Id集合,有值则忽略SchemeGroupIdList,SkuIdList,ProductIdList
/// </summary> /// </summary>
public IList<long> SchemeIdList { get; set; } public List<long> SchemeIdList { get; set; }
/// <summary>
/// 采购方案分组Id集合,有值则忽略SkuIdList,ProductIdList
/// </summary>
public List<long> SchemeGroupIdList { get; set; }
/// <summary>
/// skuId集合,有值则忽略ProductIdList
/// </summary>
public List<string> SkuIdList { get; set; }
/// <summary>
/// spuId集合,有值则忽略
/// </summary>
public List<string> ProductIdList { get; set; }
public long? ShopId { get; set; } public long? ShopId { 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; }
} }
} }

2
BBWYB.Server.Model/Dto/Request/PurchaseScheme/RefreshSchemeRequest.cs

@ -2,6 +2,6 @@
{ {
public class RefreshSchemeRequest public class RefreshSchemeRequest
{ {
public IList<long> SchemeIdList { get; set; } public List<long> SchemeIdList { get; set; }
} }
} }

17
BBWYB.Server.Model/Dto/Request/PurchaseScheme/hy/QueryHYSchemeRequest.cs

@ -0,0 +1,17 @@
namespace BBWYB.Server.Model.Dto
{
public class QueryHYSchemeRequest
{
public long ShopId { get; set; }
/// <summary>
/// 店铺商品Id
/// </summary>
public string ProductId { get; set; }
/// <summary>
/// 慧眼标的Id
/// </summary>
public string HYBDId { get; set; }
}
}

5
BBWYB.Server.Model/Dto/Request/QiKu/QiKuPackTaskSkuPurchaseSchemeIdRequest.cs

@ -5,5 +5,10 @@
public string SkuId { get; set; } public string SkuId { get; set; }
public string SkuPurchaseSchemeId { get; set; } public string SkuPurchaseSchemeId { get; set; }
/// <summary>
/// 采购方案版本
/// </summary>
public long? SchemeVersion { get; set; } = 1;
} }
} }

16
BBWYB.Server.Model/Dto/Response/Product/BProductResponse.cs

@ -0,0 +1,16 @@
using SDKAdapter.OperationPlatform.Models;
namespace BBWYB.Server.Model.Dto
{
public class BProductResponse : OP_ProductResponse
{
public IList<BProductSkuResponse> SkuList { get; set; }
}
public class BProductListResponse
{
public int Count { get; set; }
public IList<BProductResponse> Items { get; set; }
}
}

9
BBWYB.Server.Model/Dto/Response/Product/BProductSkuResponse.cs

@ -0,0 +1,9 @@
using SDKAdapter.OperationPlatform.Models;
namespace BBWYB.Server.Model.Dto
{
public class BProductSkuResponse: OP_ProductSkuResponse
{
public int SchemeCount { get; set; }
}
}

10
BBWYB.Server.Model/Dto/Response/PurchaseScheme/HY/HYPurchaseSchemeResponse.cs

@ -0,0 +1,10 @@
namespace BBWYB.Server.Model.Dto
{
public class HYPurchaseSchemeResponse : PurchaseSchemeResponse
{
/// <summary>
/// 是否已经添加到SPU之中
/// </summary>
public bool IsAdded { get; set; }
}
}

11
BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseProductBasicInfoResponse.cs

@ -11,6 +11,10 @@ namespace BBWYB.Server.Model.Dto
public string PurchaseProductId { get; set; } public string PurchaseProductId { get; set; }
public string ProductName { get; set; }
public string ProductLogo { get; set; }
/// <summary> /// <summary>
/// 采购SKU基础信息列表 /// 采购SKU基础信息列表
/// </summary> /// </summary>
@ -20,6 +24,13 @@ namespace BBWYB.Server.Model.Dto
/// 采购商 /// 采购商
/// </summary> /// </summary>
public Purchaser Purchaser { get; set; } public Purchaser Purchaser { get; set; }
public Enums.PurchaseProductAPIMode APIMode { get; set; }
/// <summary>
/// 是否失效
/// </summary>
public bool IsInvalid { get; set; }
} }
/// <summary> /// <summary>

9
BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeCountResponse.cs

@ -0,0 +1,9 @@
namespace BBWYB.Server.Model.Dto
{
public class PurchaseSchemeCountResponse
{
public string SkuId { get; set; }
public int SchemeCount { get; set; }
}
}

9
BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeGroupResponse.cs

@ -0,0 +1,9 @@
using BBWYB.Server.Model.Db;
namespace BBWYB.Server.Model.Dto
{
public class PurchaseSchemeGroupResponse : PurchaseSchemeGroup
{
public IList<PurchaseSchemeResponse> PurchaseSchemeList { get; set; }
}
}

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

@ -1,13 +1,34 @@
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
{ {
public string PurchaserName { get; set; }
public string PurchaserId2 { get; set; }
public string PurchaserLocation { get; set; }
public Enums.Platform? PurchasePlatform { get; set; }
public string PurchaserMemberId { get; set; }
/// <summary>
/// 采购商品标题 仅在查询条件IncludePurchaseSkuBasicInfo=1时具备该值
/// </summary>
public string PurchaseProductName { get; set; }
/// <summary>
/// 采购商品Logo 仅在查询条件IncludePurchaseSkuBasicInfo=1时具备该值
/// </summary>
public string PurchaseProductLogo { get; set; }
public new List<PurchaseSchemeProductSkuResponse> PurchaseSchemeProductSkuList { get; set; } public new List<PurchaseSchemeProductSkuResponse> PurchaseSchemeProductSkuList { get; set; }
/// <summary>
/// 是否失效 失效=1 下架或无权都视为失效 其余情况默认为有效 仅在查询条件IncludePurchaseSkuBasicInfo=1时具备该值
/// </summary>
public int? IsInvalid { get; set; }
public PurchaseSchemeProductResponse() public PurchaseSchemeProductResponse()
{ {
PurchaseSchemeProductSkuList = new List<PurchaseSchemeProductSkuResponse>(); PurchaseSchemeProductSkuList = new List<PurchaseSchemeProductSkuResponse>();

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

@ -1,10 +1,26 @@
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; }
/// <summary>
/// 是否失效 失效=1 其余情况默认为有效 仅在查询条件IncludePurchaseSkuBasicInfo=1时具备该值
/// </summary>
public int? IsInvalid { get; set; }
} }
} }

9
BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs

@ -6,17 +6,20 @@ namespace BBWYB.Server.Model.Dto
{ {
public class PurchaseSchemeResponse : PurchaseScheme public class PurchaseSchemeResponse : PurchaseScheme
{ {
public string PurchaserName { get; set; } //public string PurchaserName { get; set; }
public string PurchaserId2 { get; set; } //public string PurchaserId2 { get; set; }
public string PurchaserLocation { get; set; } //public string PurchaserLocation { get; set; }
public new List<PurchaseSchemeProductResponse> PurchaseSchemeProductList { get; set; } public new List<PurchaseSchemeProductResponse> PurchaseSchemeProductList { get; set; }
public List<Purchaser> PurchaserList { get; set; }
public PurchaseSchemeResponse() public PurchaseSchemeResponse()
{ {
PurchaseSchemeProductList = new List<PurchaseSchemeProductResponse>(); PurchaseSchemeProductList = new List<PurchaseSchemeProductResponse>();
PurchaserList = new List<Purchaser>();
} }
} }
} }

4
BBWYB.Server.Model/Enums.cs

@ -300,11 +300,11 @@
} }
/// <summary> /// <summary>
/// 入仓类型 (发回齐越 = 0, 厂商代发入仓 = 1) /// 入仓类型 (发回齐越 = 0, 厂商代发入仓 = 1,其他仓不包装 = 2)
/// </summary> /// </summary>
public enum IntoStoreType public enum IntoStoreType
{ {
= 0, = 1 = 0, = 1, = 2
} }
/// <summary> /// <summary>

11
BBWYB.Server.Model/MappingProfiles.cs

@ -50,8 +50,15 @@ namespace BBWYB.Server.Model
.ForPath(t => t.OrderCost.PurchaseFreight, opt => opt.MapFrom(f => f.PurchaseFreight)); .ForPath(t => t.OrderCost.PurchaseFreight, opt => opt.MapFrom(f => f.PurchaseFreight));
CreateMap<OrderPurchaseInfo, OrderPurchaseInfoResponse>(); CreateMap<OrderPurchaseInfo, OrderPurchaseInfoResponse>();
//CreateMap<AddOrEditPromotionTaskRequest, PromotionTask>(); CreateMap<EditPurchaseSchemeRequest, HistoryPurchaseScheme>();
CreateMap<InputPurchaseSchemeProductRequest, HistoryPurchaseSchemeProduct>();
CreateMap<InputPurchaseSchemeProductSkuRequest, HistoryPurchaseSchemeProductSku>();
CreateMap<PurchaseScheme, HistoryPurchaseScheme>();
CreateMap<PurchaseSchemeProduct, HistoryPurchaseSchemeProduct>();
CreateMap<PurchaseSchemeProductSku, HistoryPurchaseSchemeProductSku>();
CreateMap<PurchaseSchemeResponse, HistoryPurchaseScheme>();
CreateMap<PurchaseSchemeProductResponse, HistoryPurchaseSchemeProduct>();
CreateMap<PurchaseSchemeProductSkuResponse, HistoryPurchaseSchemeProductSku>();
} }
} }
} }

4
SDKAdapter/ExpressCompanyNameConverter.cs

@ -127,7 +127,9 @@ namespace SDKAdapter
new LogisticsCompanyRelationship(){SourceName="京东物流",TargetName="京东物流",TargetCode="jd"}, new LogisticsCompanyRelationship(){SourceName="京东物流",TargetName="京东物流",TargetCode="jd"},
new LogisticsCompanyRelationship(){SourceName="速腾快递",TargetName="速腾快递",TargetCode="suteng"}, new LogisticsCompanyRelationship(){SourceName="速腾快递",TargetName="速腾快递",TargetCode="suteng"},
new LogisticsCompanyRelationship(){SourceName="运通快运",TargetName="运通快运",TargetCode="ytky168"}, new LogisticsCompanyRelationship(){SourceName="运通快运",TargetName="运通快运",TargetCode="ytky168"},
new LogisticsCompanyRelationship(){SourceName="汇森速运",TargetName="汇森速运",TargetCode="huisenky"} new LogisticsCompanyRelationship(){SourceName="汇森速运",TargetName="汇森速运",TargetCode="huisenky"},
new LogisticsCompanyRelationship(){SourceName="丹鸟物流",TargetName="丹鸟物流",TargetCode="danniao"},
new LogisticsCompanyRelationship(){SourceName="丹鸟",TargetName="丹鸟物流",TargetCode="danniao"}
}); });
} }

7
SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs

@ -1,4 +1,5 @@
using BBWYB.Common.Http; using BBWYB.Common.Http;
using BBWYB.Common.Models;
using QuanTan.SDK.Client.Supplier; using QuanTan.SDK.Client.Supplier;
using QuanTan.SDK.Models.Supplier; using QuanTan.SDK.Models.Supplier;
using SDKAdapter.OperationPlatform.Models; using SDKAdapter.OperationPlatform.Models;
@ -203,7 +204,7 @@ namespace SDKAdapter.OperationPlatform.Client
remark = request.Remark remark = request.Remark
}, request.AppKey, request.AppSecret); }, request.AppKey, request.AppSecret);
if (qtResponse.Status != 200) if (qtResponse.Status != 200)
throw new Exception(qtResponse.Message); throw new BusinessException(qtResponse.Message);
} }
public override void EditPrice(OP_EditPriceRequest request) public override void EditPrice(OP_EditPriceRequest request)
@ -222,7 +223,7 @@ namespace SDKAdapter.OperationPlatform.Client
}, request.AppKey, request.AppSecret); }, request.AppKey, request.AppSecret);
if (qtResponse.Status != 200) if (qtResponse.Status != 200)
throw new Exception(qtResponse.Message); throw new BusinessException(qtResponse.Message);
} }
public override void EditProductPrice(OP_EditProductPriceRequest request) public override void EditProductPrice(OP_EditProductPriceRequest request)
@ -238,7 +239,7 @@ namespace SDKAdapter.OperationPlatform.Client
}).ToList() }).ToList()
}, request.AppKey, request.AppSecret); }, request.AppKey, request.AppSecret);
if (qtResponse.Status != 200) if (qtResponse.Status != 200)
throw new Exception(qtResponse.Message); throw new BusinessException(qtResponse.Message);
} }
} }
} }

21
WebTest/GlobalContext.cs

@ -1,5 +1,7 @@
using Newtonsoft.Json; using Newtonsoft.Json;
using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Windows;
namespace WebTest namespace WebTest
{ {
@ -27,5 +29,24 @@ namespace WebTest
{ {
return "10123"; return "10123";
} }
public void CallALiWangWang(string sellerLoginId)
{
var url = $"aliim:sendmsg?siteid=cnalichn&portalId=&gid=&itemsId=&touid=cnalichn{sellerLoginId}&status=1";
try
{
//Process.Start("explorer.exe", url);
ShellExecuteHelper.ShellExecute(IntPtr.Zero, "open", url, string.Empty, string.Empty, ShellExecuteHelper.ShowCommands.SW_SHOWNORMAL);
}
catch (Exception ex)
{
try
{
Clipboard.SetText(url);
}
catch { }
MessageBox.Show($"{ex.Message}\r\n唤醒旺旺失败,唤醒链接已复制到剪切板,请手动打开浏览器唤醒", "提示");
}
}
} }
} }

106
WebTest/MainWindow.xaml.cs

@ -26,6 +26,14 @@ namespace WebTest
private MdsApiService mdsApiService; private MdsApiService mdsApiService;
private ShopService shopService; private ShopService shopService;
#if DEBUG
private string registerName = "webTestContext";
#else
private string registerName = "webContext";
#endif
public MainWindow() public MainWindow()
{ {
InitializeComponent(); InitializeComponent();
@ -87,7 +95,7 @@ namespace WebTest
if (args.PermissionKind == CoreWebView2PermissionKind.ClipboardRead) if (args.PermissionKind == CoreWebView2PermissionKind.ClipboardRead)
args.State = CoreWebView2PermissionState.Allow; args.State = CoreWebView2PermissionState.Allow;
}; };
w2m.wb2.CoreWebView2.AddHostObjectToScript("webTestContext", this.globalContext); w2m.wb2.CoreWebView2.AddHostObjectToScript(registerName, this.globalContext);
}; };
w2m.Init(); w2m.Init();
@ -118,78 +126,42 @@ namespace WebTest
if (mdsUserResponse.Data.SonDepartmentList != null && mdsUserResponse.Data.SonDepartmentList.Count > 0) if (mdsUserResponse.Data.SonDepartmentList != null && mdsUserResponse.Data.SonDepartmentList.Count > 0)
globalContext.User.SonDepartmentNames = string.Join(',', mdsUserResponse.Data.SonDepartmentList.Select(sd => sd.DepartmentName)); globalContext.User.SonDepartmentNames = string.Join(',', mdsUserResponse.Data.SonDepartmentList.Select(sd => sd.DepartmentName));
//if (GlobalContext.User.TeamName == "刷单组")
// return;
var res = shopService.GetDepartmentList();
if (!res.Success)
throw new Exception(res.Msg);
var allDepartmentList = res.Data.Map<IList<Department>>();
//if (GlobalContext.User.TeamName == "刷单组")
//{
//var shopList = new List<Shop>();
//foreach (var d in allDepartmentList)
// shopList.AddRange(d.ShopList);
//globalContext.User.ShopList = shopList;
IList<Department> departmentList = null; IList<Department> departmentList = null;
if (globalContext.User.TeamName == "刷单组" ||
managerDepartment.Contains(globalContext.User.TeamName) ||
managerDepartment.Any(m => globalContext.User.SonDepartmentNames.Contains(m)))
{
var response = shopService.GetDepartmentList();
if (!response.Success)
throw new Exception(response.Msg);
departmentList = response.Data.Map<List<Department>>();
}
else
{
var response = mdsApiService.GetShopDetailList();
if (!response.Success)
throw new Exception(response.Msg);
departmentList = response.Data;
if (departmentList.Count == 0)
throw new Exception("缺少有效的部门数据");
var shopIds = new List<string>();
foreach (var d in departmentList)
{
if (d.ShopList != null && d.ShopList.Count > 0)
{
foreach (var s in d.ShopList)
shopIds.Add(s.ShopId.ToString());
}
}
var shopList2Res = shopService.GetShopListByIds(shopIds); //var response = mdsApiService.GetShopDetailList();
if (shopList2Res.Success && shopList2Res.Data != null && shopList2Res.Data.Count() > 0) //if (!response.Success)
{ // throw new Exception(response.Msg);
foreach (var d in departmentList) departmentList = allDepartmentList?.Where(d => d.Name.Contains("供应链")).ToList();
{ if (departmentList.Count == 0)
foreach (var shop in d.ShopList) throw new Exception("缺少有效的部门数据");
{
var s2 = shopList2Res.Data.FirstOrDefault(s => s.ShopId == shop.ShopId); var shopIds = new List<string>();
if (s2 != null) foreach (var d in departmentList)
{
shop.DingDingKey = s2.DingDingKey;
shop.DingDingWebHook = s2.DingDingWebHook;
shop.SkuSafeTurnoverDays = s2.SkuSafeTurnoverDays;
shop.SiNanPolicyLevel = s2.SiNanPolicyLevel;
shop.SiNanDingDingKey = s2.SiNanDingDingKey;
shop.SiNanDingDingWebHook = s2.SiNanDingDingWebHook;
shop.AppKey2 = s2.AppKey2;
shop.AppSecret2 = s2.AppSecret2;
shop.AppToken2 = s2.AppToken2;
}
}
}
}
}
for (var i = 0; i < departmentList.Count(); i++)
{ {
var d = departmentList[i]; if (d.ShopList != null && d.ShopList.Count > 0)
for (var j = 0; j < d.ShopList.Count(); j++)
{
var shop = d.ShopList[j];
if (string.IsNullOrEmpty(shop.AppToken2))
{
d.ShopList.RemoveAt(j);
j--;
}
}
if (d.ShopList == null || d.ShopList.Count() == 0)
{ {
departmentList.RemoveAt(i); foreach (var s in d.ShopList)
i--; shopIds.Add(s.ShopId.ToString());
} }
} }
globalContext.User.DepartmentList = departmentList; globalContext.User.DepartmentList = departmentList;
} }

36
WebTest/ShellExecuteHelper.cs

@ -0,0 +1,36 @@
using System;
using System.Runtime.InteropServices;
namespace WebTest
{
public class ShellExecuteHelper
{
public enum ShowCommands : int
{
SW_HIDE = 0,
SW_SHOWNORMAL = 1,
SW_NORMAL = 1,
SW_SHOWMINIMIZED = 2,
SW_SHOWMAXIMIZED = 3,
SW_MAXIMIZE = 3,
SW_SHOWNOACTIVATE = 4,
SW_SHOW = 5,
SW_MINIMIZE = 6,
SW_SHOWMINNOACTIVE = 7,
SW_SHOWNA = 8,
SW_RESTORE = 9,
SW_SHOWDEFAULT = 10,
SW_FORCEMINIMIZE = 11,
SW_MAX = 11
}
[DllImport("shell32.dll")]
public static extern IntPtr ShellExecute(
IntPtr hwnd,
string lpOperation,
string lpFile,
string lpParameters,
string lpDirectory,
ShowCommands nShowCmd);
}
}
Loading…
Cancel
Save