From e34f4e51e5a63e409955ac3e358159e98b81bf6e Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 12 Sep 2023 00:40:27 +0800 Subject: [PATCH 001/222] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Order/OrderBusiness.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index b231f07..0ba7854 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -71,9 +71,10 @@ namespace BBWYB.Server.Business .WhereIf(!string.IsNullOrEmpty(request.ProductId), osku => osku.ProductId == request.ProductId) .WhereIf(request.IsWaitConfig && request.IsOnlyDisplayPackConfigEditState != 1, osku => waitConfigStateList.Contains(osku.PackConfigState) || osku.PackConfigState == null) .WhereIf(request.IsWaitConfig && request.IsOnlyDisplayPackConfigEditState == 1, osku => osku.PackConfigState == Enums.PackConfigState.需修改); - select = select.WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.OrderState != Enums.OrderState.已取消) - .WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.IntoStoreType == Enums.IntoStoreType.发回齐越) - .WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.IsPurchased == true) + select = select.WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.OrderState != Enums.OrderState.已取消 && + o.OrderState != Enums.OrderState.已完成 && + o.IntoStoreType == Enums.IntoStoreType.发回齐越 && + o.IsPurchased == true) .Where((o, ocs, oct) => childSelect.Where(osku => osku.OrderId == o.Id).Any()); if (request.IsWaitConfig && request.IsOnlyDisplayCerConfigTimeOut == 1) From f972a3f668eb1c534df17f8aa86336701af60c93 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 12 Sep 2023 16:56:33 +0800 Subject: [PATCH 002/222] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=E6=9D=A1=E4=BB=B6=E5=AF=B9?= =?UTF-8?q?=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Order/OrderBusiness.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 0ba7854..0b95bf7 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -71,7 +71,7 @@ namespace BBWYB.Server.Business .WhereIf(!string.IsNullOrEmpty(request.ProductId), osku => osku.ProductId == request.ProductId) .WhereIf(request.IsWaitConfig && request.IsOnlyDisplayPackConfigEditState != 1, osku => waitConfigStateList.Contains(osku.PackConfigState) || osku.PackConfigState == null) .WhereIf(request.IsWaitConfig && request.IsOnlyDisplayPackConfigEditState == 1, osku => osku.PackConfigState == Enums.PackConfigState.需修改); - select = select.WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.OrderState != Enums.OrderState.已取消 && + select = select.WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.OrderState != Enums.OrderState.已取消 && o.OrderState != Enums.OrderState.已完成 && o.IntoStoreType == Enums.IntoStoreType.发回齐越 && o.IsPurchased == true) @@ -828,12 +828,12 @@ namespace BBWYB.Server.Business return new OrderCountByStateResponse() { WaitPayCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.待付款)?.OrderCount ?? 0, - WaitPurchaseCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.等待采购 || - o.OrderState == Enums.OrderState.部分采购)?.OrderCount ?? 0, - WaitShipmentCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.待发货 || - o.OrderState == Enums.OrderState.部分发货)?.OrderCount ?? 0, - WaitReceiveCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.待收货 || - o.OrderState == Enums.OrderState.部分收货)?.OrderCount ?? 0, + WaitPurchaseCount = orderCountGroup.Where(o => o.OrderState == Enums.OrderState.等待采购 || + o.OrderState == Enums.OrderState.部分采购).Sum(o => o.OrderCount), + WaitShipmentCount = orderCountGroup.Where(o => o.OrderState == Enums.OrderState.待发货 || + o.OrderState == Enums.OrderState.部分发货).Sum(o => o.OrderCount), + WaitReceiveCount = orderCountGroup.Where(o => o.OrderState == Enums.OrderState.待收货 || + o.OrderState == Enums.OrderState.部分收货).Sum(o => o.OrderCount), WaitCheckCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.待验收)?.OrderCount ?? 0, WaitComputationCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.待核算)?.OrderCount ?? 0, WaitConfigCount = waitConfigCount, From f4b0e9952b90bfc0ab144fcd39061d705d545923 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 14 Sep 2023 17:31:01 +0800 Subject: [PATCH 003/222] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=A4=B1=E6=95=88?= =?UTF-8?q?=E7=9A=84web=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Client/App.xaml.cs | 2 +- BBWYB.Client/BBWYB.Client.csproj | 13 --- BBWYB.Client/GlobalContext.cs | 2 - BBWYB.Client/ViewModels/MainViewModel.cs | 5 - .../UpdatePurchaseTaskWindow.xaml.cs | 13 --- BBWYB.Client/Views/Web.xaml.cs | 2 + BBWYB.Client/Views/WebB/WebB.xaml | 14 --- BBWYB.Client/Views/WebB/WebB.xaml.cs | 105 ------------------ BBWYB.Client/Views/WebB/WebB_GoodsSource.xaml | 14 --- .../Views/WebB/WebB_GoodsSource.xaml.cs | 104 ----------------- BBWYB.Client/Views/WebB/WebB_KPI.xaml | 14 --- BBWYB.Client/Views/WebB/WebB_KPI.xaml.cs | 87 --------------- WebTest/App.xaml.cs | 2 +- WebTest/MainWindow.xaml.cs | 16 +-- WebTest/WebView2Manager.cs | 6 + 15 files changed, 18 insertions(+), 381 deletions(-) delete mode 100644 BBWYB.Client/Views/WebB/WebB.xaml delete mode 100644 BBWYB.Client/Views/WebB/WebB.xaml.cs delete mode 100644 BBWYB.Client/Views/WebB/WebB_GoodsSource.xaml delete mode 100644 BBWYB.Client/Views/WebB/WebB_GoodsSource.xaml.cs delete mode 100644 BBWYB.Client/Views/WebB/WebB_KPI.xaml delete mode 100644 BBWYB.Client/Views/WebB/WebB_KPI.xaml.cs diff --git a/BBWYB.Client/App.xaml.cs b/BBWYB.Client/App.xaml.cs index 9b29706..669ad01 100644 --- a/BBWYB.Client/App.xaml.cs +++ b/BBWYB.Client/App.xaml.cs @@ -32,7 +32,7 @@ namespace BBWYB.Client #if DEBUG //齐越山鸡 - userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTM1MzMwMzI4ODkyMTQ5NzYwIiwidGVhbUlkIjoiMTUxNjk3NDI1MDU0MjUwMTg4OCIsInNvblRlYW1JZHMiOiIxNDM2Mjg4NTAwMjM1MjQzNTIwIiwiZXhwIjoxNjk0NjY5NjkxfQ.cSwro-7bGwOu92YejH9JhMenTai7Mvf99i2paQCmxIw"; + userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTM1MzMwMzI4ODkyMTQ5NzYwIiwidGVhbUlkIjoiMTUxNjk3NDI1MDU0MjUwMTg4OCIsInNvblRlYW1JZHMiOiIxNDM2Mjg4NTAwMjM1MjQzNTIwIiwiZXhwIjoxNzI2MzAwNjY0fQ.hPSbgJEuTt0MLy_7YkSJX4rRG3drJAfso-5IS8ZlOkY"; //拳探店铺 陈默 //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNjI0OTUxNjgzNTc2NTAwMjI0IiwidGVhbUlkIjoiMTYyMDM0MjAxNDcwNjk3ODgxNiIsInNvblRlYW1JZHMiOiIxNjIwMzQyMDE0NzA2OTc4ODE2LDE2MjAzNDM4Mjc0NzI1ODQ3MDQsMTYyMDM0NDAzMzczNTg3MjUxMiwxNjIwMzQ0MDkyODI5NDIxNTY4LDE2MjAzNDQxNDA4NTAwMDgwNjQiLCJleHAiOjE3MjA3NjQzMjV9.Q8fiKXCHgvzbm7NDEre-MeoSju_AmC6Ae6eDY22rUAw"; diff --git a/BBWYB.Client/BBWYB.Client.csproj b/BBWYB.Client/BBWYB.Client.csproj index 91a07a9..5fca9cb 100644 --- a/BBWYB.Client/BBWYB.Client.csproj +++ b/BBWYB.Client/BBWYB.Client.csproj @@ -53,17 +53,4 @@ - - - Code - - - - - - $(DefaultXamlRuntime) - Designer - - - diff --git a/BBWYB.Client/GlobalContext.cs b/BBWYB.Client/GlobalContext.cs index 1471516..c3db6ad 100644 --- a/BBWYB.Client/GlobalContext.cs +++ b/BBWYB.Client/GlobalContext.cs @@ -2,7 +2,6 @@ using BBWYB.Client.Helpers; using BBWYB.Client.Models; using BBWYB.Client.Views.PackPurchaseTaska; -using BBWYB.Client.Views.WebB; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; using Microsoft.Extensions.DependencyInjection; @@ -119,7 +118,6 @@ namespace BBWYB.Client UpdatePurchaseTaskWindow packTask = new(res.Data, originShopName, orderSku); if (!packTask.IsClosed) packTask.Show(); - WeakReferenceMessenger.Default.Send(new Message_WebB_RefreshPack(null)); // } #endregion diff --git a/BBWYB.Client/ViewModels/MainViewModel.cs b/BBWYB.Client/ViewModels/MainViewModel.cs index 4903cbf..a3b73a8 100644 --- a/BBWYB.Client/ViewModels/MainViewModel.cs +++ b/BBWYB.Client/ViewModels/MainViewModel.cs @@ -1,7 +1,6 @@ using BBWYB.Client.APIServices; using BBWYB.Client.Models; using BBWYB.Client.Views.SelectShop; -using BBWYB.Client.Views.WebB; using BBWYB.Common.Extensions; using BBWYB.Common.Models; using CommunityToolkit.Mvvm.Input; @@ -233,10 +232,6 @@ namespace BBWYB.Client.ViewModels vm.OrderVM.Refresh(); if (vm.IsCreateWareManager) vm.WareManager.Refresh(); - if (SelectedMenuModel?.Name == "订单列表Bata") - { - WeakReferenceMessenger.Default.Send(new Message_WebB_Refresh(null)); - } } } catch (Exception ex) diff --git a/BBWYB.Client/Views/PackPurchaseTask/UpdatePurchaseTaskWindow.xaml.cs b/BBWYB.Client/Views/PackPurchaseTask/UpdatePurchaseTaskWindow.xaml.cs index 715c23c..1bb322d 100644 --- a/BBWYB.Client/Views/PackPurchaseTask/UpdatePurchaseTaskWindow.xaml.cs +++ b/BBWYB.Client/Views/PackPurchaseTask/UpdatePurchaseTaskWindow.xaml.cs @@ -1,24 +1,11 @@ using BBWYB.Client.Models; using BBWYB.Client.Models.APIModel.Response.PackPurchaseTask; using BBWYB.Client.ViewModels; -using BBWYB.Client.Views.Ware; -using BBWYB.Client.Views.WebB; using CommunityToolkit.Mvvm.Messaging; using CommunityToolkit.Mvvm.Messaging.Messages; using SJ.Controls; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Shapes; namespace BBWYB.Client.Views.PackPurchaseTaska { diff --git a/BBWYB.Client/Views/Web.xaml.cs b/BBWYB.Client/Views/Web.xaml.cs index 19ed019..6a31dde 100644 --- a/BBWYB.Client/Views/Web.xaml.cs +++ b/BBWYB.Client/Views/Web.xaml.cs @@ -43,6 +43,8 @@ namespace BBWYB.Client.Views private void initWebView() { #if DEBUG + //var url = "http://qtbbwy.qiyue666.com"; + //var registerName = "webContext"; var url = "http://192.168.1.2:8080"; var registerName = "webTestContext"; //var url = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "s.html"); diff --git a/BBWYB.Client/Views/WebB/WebB.xaml b/BBWYB.Client/Views/WebB/WebB.xaml deleted file mode 100644 index 9131a20..0000000 --- a/BBWYB.Client/Views/WebB/WebB.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/BBWYB.Client/Views/WebB/WebB.xaml.cs b/BBWYB.Client/Views/WebB/WebB.xaml.cs deleted file mode 100644 index b365133..0000000 --- a/BBWYB.Client/Views/WebB/WebB.xaml.cs +++ /dev/null @@ -1,105 +0,0 @@ -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 -{ - /// - /// WebB.xaml 的交互逻辑 - /// - public partial class WebB : Page - { - private WebView2Manager w2m; - private bool isNavigated; - - private GlobalContext globalContext; - - public WebB() - { - InitializeComponent(); - this.Loaded += WebB_Loaded; - this.Unloaded += WebB_Unloaded; - - WeakReferenceMessenger.Default.Register(this, (o, x) => - { - this.Dispatcher.Invoke(() => - { - _ = w2m.wb2.ExecuteScriptAsync("window.location.reload();"); - }); - }); - - WeakReferenceMessenger.Default.Register(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(); - globalContext = s.ServiceProvider.GetRequiredService(); - } - -#if DEBUG - var url = "http://192.168.1.8: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_Refresh : ValueChangedMessage - { - public Message_WebB_Refresh(object value) : base(value) - { - } - } - - public class Message_WebB_RefreshPack : ValueChangedMessage - { - public Message_WebB_RefreshPack(object value) : base(value) - { - } - } -} diff --git a/BBWYB.Client/Views/WebB/WebB_GoodsSource.xaml b/BBWYB.Client/Views/WebB/WebB_GoodsSource.xaml deleted file mode 100644 index 8df7144..0000000 --- a/BBWYB.Client/Views/WebB/WebB_GoodsSource.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/BBWYB.Client/Views/WebB/WebB_GoodsSource.xaml.cs b/BBWYB.Client/Views/WebB/WebB_GoodsSource.xaml.cs deleted file mode 100644 index d4b329c..0000000 --- a/BBWYB.Client/Views/WebB/WebB_GoodsSource.xaml.cs +++ /dev/null @@ -1,104 +0,0 @@ -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 -{ - /// - /// WebB.xaml 的交互逻辑 - /// - 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(this, (o, x) => - //{ - // this.Dispatcher.Invoke(() => - // { - // _ = w2m.wb2.ExecuteScriptAsync("window.location.reload();"); - // }); - //}); - - //WeakReferenceMessenger.Default.Register(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(); - globalContext = s.ServiceProvider.GetRequiredService(); - } - -#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 - //{ - // public Message_WebB_GoodsSource_Refresh(object value) : base(value) - // { - // } - //} - - //public class Message_WebB_GoodsSource_RefreshPack : ValueChangedMessage - //{ - // public Message_WebB_GoodsSource_RefreshPack(object value) : base(value) - // { - // } - //} -} diff --git a/BBWYB.Client/Views/WebB/WebB_KPI.xaml b/BBWYB.Client/Views/WebB/WebB_KPI.xaml deleted file mode 100644 index 261dbfd..0000000 --- a/BBWYB.Client/Views/WebB/WebB_KPI.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/BBWYB.Client/Views/WebB/WebB_KPI.xaml.cs b/BBWYB.Client/Views/WebB/WebB_KPI.xaml.cs deleted file mode 100644 index da0813d..0000000 --- a/BBWYB.Client/Views/WebB/WebB_KPI.xaml.cs +++ /dev/null @@ -1,87 +0,0 @@ -using CommunityToolkit.Mvvm.Messaging; -using CommunityToolkit.Mvvm.Messaging.Messages; -using Microsoft.Extensions.DependencyInjection; -using System; -using System.Windows; -using System.Windows.Controls; - -namespace BBWYB.Client.Views.WebB -{ - /// - /// WebB_KPI.xaml 的交互逻辑 - /// - public partial class WebB_KPI : Page - { - private WebView2Manager w2m; - private bool isNavigated; - - private GlobalContext globalContext; - public WebB_KPI() - { - InitializeComponent(); - - this.Loaded += WebB_KPI_Loaded; ; - this.Unloaded += WebB_KPI_Unloaded; - - WeakReferenceMessenger.Default.Register(this, (o, x) => - { - this.Dispatcher.Invoke(() => - { - _ = w2m.wb2.ExecuteScriptAsync("window.location.reload();"); - }); - }); - } - - private void WebB_KPI_Unloaded(object sender, RoutedEventArgs e) - { - grid.Children.Remove(w2m.wb2); - w2m.Close(); - WeakReferenceMessenger.Default.UnregisterAll(this); - } - - private void WebB_KPI_Loaded(object sender, RoutedEventArgs e) - { - var sp = (App.Current as App).ServiceProvider; - using (var s = sp.CreateScope()) - { - w2m = s.ServiceProvider.GetRequiredService(); - globalContext = s.ServiceProvider.GetRequiredService(); - } - -#if DEBUG - var url = "http://localhost:8080/#/performance"; - var registerName = "webTestContext"; -#else - var url = "http://qtbbwy.qiyue666.com/#/performance"; - 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_WebBKPI_Refresh : ValueChangedMessage - { - public Message_WebBKPI_Refresh(object value) : base(value) - { - } - } -} diff --git a/WebTest/App.xaml.cs b/WebTest/App.xaml.cs index 0425e36..d75d7a9 100644 --- a/WebTest/App.xaml.cs +++ b/WebTest/App.xaml.cs @@ -25,7 +25,7 @@ namespace WebTest string userToken = string.Empty; //齐越山鸡 - userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTM1MzMwMzI4ODkyMTQ5NzYwIiwidGVhbUlkIjoiMTUxNjk3NDI1MDU0MjUwMTg4OCIsInNvblRlYW1JZHMiOiIxNDM2Mjg4NTAwMjM1MjQzNTIwIiwiZXhwIjoxNjk0NjY5NjkxfQ.cSwro-7bGwOu92YejH9JhMenTai7Mvf99i2paQCmxIw"; + userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTM1MzMwMzI4ODkyMTQ5NzYwIiwidGVhbUlkIjoiMTUxNjk3NDI1MDU0MjUwMTg4OCIsInNvblRlYW1JZHMiOiIxNDM2Mjg4NTAwMjM1MjQzNTIwIiwiZXhwIjoxNzI2MzAwNjY0fQ.hPSbgJEuTt0MLy_7YkSJX4rRG3drJAfso-5IS8ZlOkY"; gl.UserToken = userToken; diff --git a/WebTest/MainWindow.xaml.cs b/WebTest/MainWindow.xaml.cs index 93a2694..5d72d9c 100644 --- a/WebTest/MainWindow.xaml.cs +++ b/WebTest/MainWindow.xaml.cs @@ -27,7 +27,7 @@ namespace WebTest private ShopService shopService; #if DEBUG -private string registerName = "webTestContext"; + private string registerName = "webTestContext"; #else private string registerName = "webContext"; #endif @@ -87,7 +87,7 @@ private string registerName = "webContext"; shopService = s.ServiceProvider.GetRequiredService(); } - Login(); + //Login(); w2m.CoreWebView2InitializationCompleted = (e) => { w2m.wb2.CoreWebView2.PermissionRequested += (sender, args) => @@ -103,7 +103,7 @@ private string registerName = "webContext"; w2m.wb2.Margin = new Thickness(1, 0, 1, 0); grid.Children.Add(w2m.wb2); - + //if (w2m.IsInitializationCompleted && !isNavigated) //{ // w2m.wb2.CoreWebView2.Navigate(url); @@ -183,11 +183,11 @@ private string registerName = "webContext"; MessageBox.Show("地址不能为空", "提示"); return; } - if (!txtUrl.Text.StartsWith("http")) - { - MessageBox.Show("地址需要携带协议头", "提示"); - return; - } + //if (!txtUrl.Text.StartsWith("http")) + //{ + // MessageBox.Show("地址需要携带协议头", "提示"); + // return; + //} w2m.wb2.CoreWebView2.Navigate(txtUrl.Text); } } diff --git a/WebTest/WebView2Manager.cs b/WebTest/WebView2Manager.cs index 5faa032..5c75417 100644 --- a/WebTest/WebView2Manager.cs +++ b/WebTest/WebView2Manager.cs @@ -26,6 +26,11 @@ namespace WebTest } } + private void CoreWebView2_WebResourceRequested(object? sender, CoreWebView2WebResourceRequestedEventArgs e) + { + Console.WriteLine($"{DateTime.Now} WebSroucesRequest {e.Request.Uri}"); + } + public Action OnWebMessageReceived; public Action OnNavigationCompleted; public Action CoreWebView2InitializationCompleted; @@ -43,6 +48,7 @@ namespace WebTest private void Wb2_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e) { + wb2.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested; CoreWebView2InitializationCompleted?.Invoke(e); IsInitializationCompleted = true; } From c09067b955472ea71bfdb353c28e3cc3c5fb4c9e Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 15 Sep 2023 00:53:01 +0800 Subject: [PATCH 004/222] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E9=BD=90=E5=BA=93s?= =?UTF-8?q?ku=E6=A3=80=E6=9F=A5=E6=8E=A8=E9=80=81=E6=97=A5=E5=BF=97=202.?= =?UTF-8?q?=E5=AE=9A=E6=9C=9F=E4=BF=AE=E5=A4=8D=E5=BE=85=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E7=BC=BA=E5=A4=B1=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/TimeLimitTaskController.cs | 10 +++++ BBWYB.Server.Business/Order/OrderBusiness.cs | 1 + .../TimeLimitTask/TimeLimitTaskBusiness.cs | 38 ++++++++++++++++++- 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.API/Controllers/TimeLimitTaskController.cs b/BBWYB.Server.API/Controllers/TimeLimitTaskController.cs index deca3ce..6d82ec4 100644 --- a/BBWYB.Server.API/Controllers/TimeLimitTaskController.cs +++ b/BBWYB.Server.API/Controllers/TimeLimitTaskController.cs @@ -28,6 +28,16 @@ namespace BBWYB.Server.API.Controllers timeLimitTaskBusiness.CheckTask(); } + /// + /// 修复订单缺失的待核算任务 + /// + [HttpPost] + [AllowAnonymous] + public void RepairOrderComputationTask() + { + timeLimitTaskBusiness.RepairOrderComputationTask(); + } + /// /// 查询限时任务列表 /// diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 0b95bf7..6f7f8d3 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -717,6 +717,7 @@ namespace BBWYB.Server.Business public void CheckSku(CheckSkuRequest request) { + nLogManager.Default().Info($"CheckSku {JsonConvert.SerializeObject(request)}"); var dbOrder = fsql.Select(request.OrderId).ToOne(); if (dbOrder == null) throw new BusinessException($"订单{request.OrderId}不存在"); diff --git a/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs b/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs index 4a016b8..78225b4 100644 --- a/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs +++ b/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs @@ -28,6 +28,40 @@ namespace BBWYB.Server.Business .ExecuteAffrows(); } + /// + /// 修复订单待核算任务 + /// + public void RepairOrderComputationTask() + { + var childSelect = fsql.Select().As("t").Where(t => t.TaskType == Enums.TimeLimitTaskType.待核算任务); + var noComputationTaskOrderList = fsql.Select().Where(o => o.OrderState == Enums.OrderState.待核算 && + !childSelect.Where(t => t.OrderId == o.Id).Any()) + .ToList(o => new + { + o.Id, + o.OrderSn, + o.ShopId, + }); + var insertComputationTaskList = noComputationTaskOrderList.Select(o => new TimeLimitTask() + { + Id = idGenerator.NewLong(), + CreateTme = DateTime.Now, + OrderId = o.Id, + OrderSn = o.OrderSn, + ShopId = o.ShopId, + TaskType = Enums.TimeLimitTaskType.待核算任务, + ExpirationTime = DateTime.Now.AddDays(1), + Remark = "RepairOrderComputationTask" + }).ToList(); + + if (insertComputationTaskList.Count() > 0) + { + fsql.Transaction(() => + { + fsql.Insert(insertComputationTaskList).ExecuteAffrows(); + }); + } + } public TimeLimitTaskListResponse QueryTimeLimitTask(QueryTimeLimitTaskRequest request) { @@ -122,9 +156,9 @@ namespace BBWYB.Server.Business var purchaseTaskTimeOutCount = purchaseTaskTimOutCountGroups.FirstOrDefault(x => x.ShopId == response.ShopId)?.TaskCount ?? 0; response.PurchaseTimeOutPercent = purchaseTaskCount == 0 ? 0 : Math.Round(1.0 * purchaseTaskTimeOutCount / purchaseTaskCount * 100, 2); - response.CerEditTimeOutCount = cerTimeOutCountGroups.FirstOrDefault(x => x.ShopId == response.ShopId && + response.CerEditTimeOutCount = cerTimeOutCountGroups.FirstOrDefault(x => x.ShopId == response.ShopId && x.TaskType == Enums.TimeLimitTaskType.合格证补充任务)?.TaskCount ?? 0; - response.CerConfigTimeOutCount = cerTimeOutCountGroups.FirstOrDefault(x => x.ShopId == response.ShopId && + response.CerConfigTimeOutCount = cerTimeOutCountGroups.FirstOrDefault(x => x.ShopId == response.ShopId && x.TaskType == Enums.TimeLimitTaskType.合格证拟定任务)?.TaskCount ?? 0; list.Add(response); } From 1f81070eaf166cd283d28b05d97f760b30fa2af4 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 18 Sep 2023 01:31:42 +0800 Subject: [PATCH 005/222] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E6=81=A2=E5=A4=8D=E5=85=A8=E9=83=A8=E9=97=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebTest/MainWindow.xaml.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WebTest/MainWindow.xaml.cs b/WebTest/MainWindow.xaml.cs index 5d72d9c..c9ac554 100644 --- a/WebTest/MainWindow.xaml.cs +++ b/WebTest/MainWindow.xaml.cs @@ -87,7 +87,7 @@ private string registerName = "webContext"; shopService = s.ServiceProvider.GetRequiredService(); } - //Login(); + Login(); w2m.CoreWebView2InitializationCompleted = (e) => { w2m.wb2.CoreWebView2.PermissionRequested += (sender, args) => @@ -143,12 +143,12 @@ private string registerName = "webContext"; //globalContext.User.ShopList = shopList; - IList departmentList = null; + IList departmentList = allDepartmentList; //var response = mdsApiService.GetShopDetailList(); //if (!response.Success) // throw new Exception(response.Msg); - departmentList = allDepartmentList?.Where(d => d.Name.Contains("供应链")).ToList(); + //departmentList = allDepartmentList?.Where(d => d.Name.Contains("供应链")).ToList(); if (departmentList.Count == 0) throw new Exception("缺少有效的部门数据"); From e8c5bc5dafcb62c6e96c3dac85f6968340b6acde Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 19 Sep 2023 15:41:29 +0800 Subject: [PATCH 006/222] =?UTF-8?q?=E6=81=A2=E5=A4=8D=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebTest/MainWindow.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebTest/MainWindow.xaml.cs b/WebTest/MainWindow.xaml.cs index 5d72d9c..12ba1fc 100644 --- a/WebTest/MainWindow.xaml.cs +++ b/WebTest/MainWindow.xaml.cs @@ -87,7 +87,7 @@ private string registerName = "webContext"; shopService = s.ServiceProvider.GetRequiredService(); } - //Login(); + Login(); w2m.CoreWebView2InitializationCompleted = (e) => { w2m.wb2.CoreWebView2.PermissionRequested += (sender, args) => From e5d08bf31d0e7c1ea3606d549898fbfa0bad50b6 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 19 Sep 2023 18:57:41 +0800 Subject: [PATCH 007/222] =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ProductSyncController.cs | 23 ++ .../Sync/ProductSyncBusiness.cs | 214 ++++++++++++++++++ BBWYB.Server.Business/TaskSchedulerManager.cs | 2 + BBWYB.Server.Model/Db/Product/Product.cs | 54 +++++ BBWYB.Server.Model/Db/Product/ProductSku.cs | 59 +++++ .../QuanTan_Supplier_ProductListResponse.cs | 6 + ...QuanTan_Supplier_ProductSkuListResponse.cs | 6 + .../Client/Impl/OP_QuanTanClient.cs | 9 +- .../Response/Product/OP_ProductResponse.cs | 1 + .../Response/Product/OP_ProductSkuResponse.cs | 3 + 10 files changed, 373 insertions(+), 4 deletions(-) create mode 100644 BBWYB.Server.API/Controllers/ProductSyncController.cs create mode 100644 BBWYB.Server.Business/Sync/ProductSyncBusiness.cs create mode 100644 BBWYB.Server.Model/Db/Product/Product.cs create mode 100644 BBWYB.Server.Model/Db/Product/ProductSku.cs diff --git a/BBWYB.Server.API/Controllers/ProductSyncController.cs b/BBWYB.Server.API/Controllers/ProductSyncController.cs new file mode 100644 index 0000000..b196c48 --- /dev/null +++ b/BBWYB.Server.API/Controllers/ProductSyncController.cs @@ -0,0 +1,23 @@ +using BBWYB.Server.Business.Sync; +using Microsoft.AspNetCore.Mvc; + +namespace BBWYB.Server.API.Controllers +{ + public class ProductSyncController : BaseApiController + { + private ProductSyncBusiness productSyncBusiness; + public ProductSyncController(IHttpContextAccessor httpContextAccessor, ProductSyncBusiness productSyncBusiness) : base(httpContextAccessor) + { + this.productSyncBusiness = productSyncBusiness; + } + + /// + /// 全店同步产品 + /// + [HttpPost] + public void SyncAllShopAllProduct() + { + productSyncBusiness.SyncAllShopAllProduct(); + } + } +} diff --git a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs new file mode 100644 index 0000000..4bcca99 --- /dev/null +++ b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs @@ -0,0 +1,214 @@ +using BBWYB.Common.Log; +using BBWYB.Common.Models; +using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Dto; +using FreeSql; +using SDKAdapter.OperationPlatform.Models; +using Yitter.IdGenerator; +using System.Linq; +using Newtonsoft.Json; +using BBWYB.Server.Model; + +namespace BBWYB.Server.Business.Sync +{ + public class ProductSyncBusiness : BaseBusiness, IDenpendency + { + private ProductBusiness productBusiness; + private VenderBusiness venderBusiness; + private TaskSchedulerManager taskSchedulerManager; + + public ProductSyncBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, ProductBusiness productBusiness, VenderBusiness venderBusiness, TaskSchedulerManager taskSchedulerManager) : base(fsql, nLogManager, idGenerator) + { + this.productBusiness = productBusiness; + this.venderBusiness = venderBusiness; + this.taskSchedulerManager = taskSchedulerManager; + } + + /// + /// 同步所有店铺的全部产品 + /// + public void SyncAllShopAllProduct() + { + //var shopList = venderBusiness.GetShopList(platform: Enums.Platform.拳探); + var shopList = venderBusiness.GetShopList(shopId: 9); + foreach (var shop in shopList) + { + Task.Factory.StartNew(() => SyncProduct(shop, true), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncProductTaskScheduler); + } + } + + + private void SyncProduct(ShopResponse shop, bool IsSyncAllProduct = false) + { + try + { + var shopId = long.Parse(shop.ShopId); + var dbProductList = fsql.Select().Where(p => p.ShopId == shopId).ToList(); + var dbProductSkuList = fsql.Select().Where(p => p.ShopId == shopId).ToList(); + + List productList = new List(); + List productSkuList = new List(); + + List insertProductList = new List(); + List insertProductSkuList = new List(); + + List> updateProductList = new List>(); + List> updateProductSkuList = new List>(); + + var request = new OP_QueryProductRequest() + { + PageSize = 50, + PageIndex = 1, + AppKey = shop.AppKey, + AppSecret = shop.AppSecret, + AppToken = shop.AppToken, + Platform = SDKAdapter.AdapterEnums.PlatformType.拳探 + }; + + var requestSku = new OP_QueryProductSkuRequest() + { + AppKey = shop.AppKey, + AppSecret = shop.AppSecret, + AppToken = shop.AppToken, + Platform = SDKAdapter.AdapterEnums.PlatformType.拳探, + //Spu = product.Id, + PageSize = 50, + PageIndex = 1 + }; + + while (true) + { + var pListRes = productBusiness.GetProductList(request); + if (pListRes == null || pListRes.Items == null || pListRes.Items.Count == 0) + break; + productList.AddRange(pListRes.Items); + + foreach (var product in pListRes.Items) + { + requestSku.Spu = product.Id; + var psListRes = productBusiness.GetProductSkuList(requestSku); + if (psListRes == null || psListRes.Items == null || psListRes.Items.Count == 0) + continue; + productSkuList.AddRange(psListRes.Items); + } + + if (pListRes.Items.Count < 50 || !IsSyncAllProduct) + break; + request.PageIndex++; + Thread.Sleep(1000); + } + + #region 找出新增的产品 + var newProductList = productList.Where(p => !dbProductList.Any(dp => dp.Id == p.Id)).ToList(); + if (newProductList.Count() > 0) + { + insertProductList.AddRange(newProductList.Select(p => new Product() + { + Id = p.Id, + Logo = p.Logo, + ProductName = p.Title, + ShopId = int.Parse(shop.ShopId), + State = p.State, + SyncTime = DateTime.Now, + UpdateTime = DateTime.Now, + UpperTime = p.CreateTime + })); + } + #endregion + + #region 找出变化的产品 (状态,标题) + var stateChangeProductList = productList.Where(p => dbProductList.Any(dp => dp.Id == p.Id && (dp.State != p.State || dp.ProductName != p.Title))).ToList(); + if (stateChangeProductList.Count() > 0) + { + foreach (var product in stateChangeProductList) + { + var update = fsql.Update(product.Id).Set(p => p.State, product.State) + .Set(p => p.ProductName, product.Title); + updateProductList.Add(update); + } + } + #endregion + + #region 找出接口查不出的产品 + var goneProductList = dbProductList.Where(dp => !productList.Any(p => p.Id == dp.Id)).ToList(); + if (goneProductList.Count() > 0) + { + var goneProductIdList = goneProductList.Select(p => p.Id).ToList(); + var update = fsql.Update().Set(p => p.State, 0).Where(p => goneProductIdList.Contains(p.Id)); + updateProductList.Add(update); + } + #endregion + + #region 找出新增的SKU + var newProductSkuList = productSkuList.Where(ps => !dbProductSkuList.Any(dps => dps.Id == ps.Id)).ToList(); + if (newProductSkuList.Count() > 0) + { + insertProductSkuList.AddRange(newProductSkuList.Select(ps => new ProductSku() + { + Id = ps.Id, + Logo = ps.Logo, + Price = ps.Price, + ProductId = ps.ProductId, + ShopId = int.Parse(shop.ShopId), + SkuName = ps.Title, + State = ps.State, + SyncTime = DateTime.Now, + UpdateTime = DateTime.Now, + UpperTime = ps.CreateTime + })); + } + #endregion + + #region 找出状态变化的SKU + var stateChangeProductSkuList = productSkuList.Where(ps => dbProductSkuList.Any(dps => dps.Id == ps.Id && (dps.State != ps.State || dps.SkuName != ps.Title))).ToList(); + if (stateChangeProductSkuList.Count() > 0) + { + foreach (var productSku in stateChangeProductSkuList) + { + var update = fsql.Update(productSku.Id).Set(p => p.State, productSku.State) + .Set(p => p.SkuName, productSku.Title); + updateProductSkuList.Add(update); + } + } + #endregion + + #region 找出接口查不出的SKU + var goneProductSkuList = dbProductSkuList.Where(dps => !productSkuList.Any(ps => ps.Id == dps.Id)).ToList(); + if (goneProductSkuList.Count() > 0) + { + var goneProductSkuIdList = goneProductSkuList.Select(ps => ps.Id).ToList(); + var update = fsql.Update().Set(ps => ps.State, 0).Where(ps => goneProductSkuIdList.Contains(ps.Id)); + updateProductSkuList.Add(update); + } + #endregion + + + fsql.Transaction(() => + { + if (insertProductList.Count() > 0) + fsql.Insert(insertProductList).ExecuteAffrows(); + if (insertProductSkuList.Count() > 0) + fsql.Insert(insertProductSkuList).ExecuteAffrows(); + + if (updateProductList.Count() > 0) + { + foreach (var update in updateProductList) + update.ExecuteAffrows(); + } + + if (updateProductSkuList.Count() > 0) + { + foreach (var update in updateProductSkuList) + update.ExecuteAffrows(); + } + }); + + Console.WriteLine($"{shop.ShopName}同步完毕,新增spu{insertProductList.Count()}个,新增sku{insertProductSkuList.Count()}个,更新spu{updateProductList.Count()}个,更新sku{updateProductSkuList.Count()}个"); + } + catch (Exception ex) + { + nLogManager.Default().Error(ex, $"SyncProduct ShopId:{shop.ShopName}"); + } + } + } +} diff --git a/BBWYB.Server.Business/TaskSchedulerManager.cs b/BBWYB.Server.Business/TaskSchedulerManager.cs index fa971c1..6bab173 100644 --- a/BBWYB.Server.Business/TaskSchedulerManager.cs +++ b/BBWYB.Server.Business/TaskSchedulerManager.cs @@ -4,6 +4,7 @@ namespace BBWYB.Server.Business { public class TaskSchedulerManager { + public LimitedConcurrencyLevelTaskScheduler SyncProductTaskScheduler { get; private set; } public LimitedConcurrencyLevelTaskScheduler SyncOrderTaskScheduler { get; private set; } public LimitedConcurrencyLevelTaskScheduler PurchaseOrderCallbackTaskScheduler { get; private set; } @@ -13,6 +14,7 @@ namespace BBWYB.Server.Business { SyncOrderTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); PurchaseOrderCallbackTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); + SyncProductTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); } } } diff --git a/BBWYB.Server.Model/Db/Product/Product.cs b/BBWYB.Server.Model/Db/Product/Product.cs new file mode 100644 index 0000000..ee4f128 --- /dev/null +++ b/BBWYB.Server.Model/Db/Product/Product.cs @@ -0,0 +1,54 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// 商品表(SPU) + /// + [Table(Name = "product", DisableSyncStructure = true)] + public partial class Product + { + + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string Id { get; set; } + + + public string Logo { get; set; } + + /// + /// 商品名称 + /// + [Column(StringLength = 200)] + public string ProductName { get; set; } + + [Column(DbType = "bigint")] + public long? ShopId { get; set; } + + /// + /// 状态(0下架 1上架) + /// + [Column(DbType = "int")] + public int? State { get; set; } + + /// + /// 同步时间 + /// + [Column(DbType = "datetime")] + public DateTime? SyncTime { get; set; } + + /// + /// 更新时间 + /// + [Column(DbType = "datetime")] + public DateTime? UpdateTime { get; set; } + + /// + /// 最近上架时间 + /// + [Column(DbType = "datetime")] + public DateTime? UpperTime { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Db/Product/ProductSku.cs b/BBWYB.Server.Model/Db/Product/ProductSku.cs new file mode 100644 index 0000000..0a385ba --- /dev/null +++ b/BBWYB.Server.Model/Db/Product/ProductSku.cs @@ -0,0 +1,59 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// 商品Sku表 + /// + [ Table(Name = "productsku", DisableSyncStructure = true)] + public partial class ProductSku { + + /// + /// SkuId + /// + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string Id { get; set; } + + + public string Logo { get; set; } + + [Column(DbType = "decimal(18,2)")] + public decimal? Price { get; set; } = 0.00M; + + [Column(StringLength = 50)] + public string ProductId { get; set; } + + [Column(DbType = "bigint")] + public long? ShopId { get; set; } + + [Column(StringLength = 200)] + public string SkuName { get; set; } + + /// + /// 0下架 1上架 + /// + [Column(DbType = "int")] + public int? State { get; set; } + + /// + /// 同步时间 + /// + [Column(DbType = "datetime")] + public DateTime? SyncTime { get; set; } + + /// + /// 更新时间 + /// + [Column(DbType = "datetime")] + public DateTime? UpdateTime { get; set; } + + /// + /// 最近上架时间 + /// + [Column(DbType = "datetime")] + public DateTime? UpperTime { get; set; } + + } + +} diff --git a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductListResponse.cs b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductListResponse.cs index c56f556..49f68d0 100644 --- a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductListResponse.cs +++ b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductListResponse.cs @@ -9,6 +9,12 @@ public string Image { get; set; } public string StoreId { get; set; } + + public int? IsShow { get; set; } + + public int? Status { get; set; } + + public DateTime? UpperTime { get; set; } } public class QuanTan_Supplier_ProductListResponse : QuanTanListResponse diff --git a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductSkuListResponse.cs b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductSkuListResponse.cs index 51d8c36..ec89b75 100644 --- a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductSkuListResponse.cs +++ b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductSkuListResponse.cs @@ -17,6 +17,12 @@ public string CategoryId { get; set; } public string StoreId { get; set; } + + public int? IsShow { get; set; } + + public int? Status { get; set; } + + public DateTime? UpperTime { get; set; } } public class QuanTan_Supplier_ProductSkuListResponse : QuanTanListResponse diff --git a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs index 6cd3169..e0cfb85 100644 --- a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs @@ -3,6 +3,7 @@ using BBWYB.Common.Models; using QuanTan.SDK.Client.Supplier; using QuanTan.SDK.Models.Supplier; using SDKAdapter.OperationPlatform.Models; +using static System.Net.WebRequestMethods; namespace SDKAdapter.OperationPlatform.Client { @@ -41,10 +42,10 @@ namespace SDKAdapter.OperationPlatform.Client { Id = qtp.ProductId, BrandName = string.Empty, - CreateTime = null, + CreateTime = qtp.UpperTime, Logo = qtp.Image, ProductItemNum = string.Empty, - State = 0, + State = qtp.IsShow == 1 && qtp.Status == 1 ? 1 : 0, Title = qtp.ProductName }).ToList() }; @@ -69,12 +70,12 @@ namespace SDKAdapter.OperationPlatform.Client Count = qtResponse.Data.Count, Items = qtResponse.Data.List.Select(qtps => new OP_ProductSkuResponse() { - CreateTime = null, + CreateTime = qtps.UpperTime, Id = qtps.ProductSku, Logo = qtps.SkuImage, Price = qtps.SkuPrice, ProductId = qtps.ProductId, - State = 0, + State = qtps.IsShow == 1 && qtps.Status == 1 ? 1 : 0, Title = qtps.SkuName }).ToList() }; diff --git a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductResponse.cs b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductResponse.cs index 85a0a2c..4f6b3b9 100644 --- a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductResponse.cs +++ b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductResponse.cs @@ -20,6 +20,7 @@ /// /// 商品状态 /// 京东【-1:删除 1:从未上架 2:自主下架 4:系统下架 8:上架 513:从未上架待审 514:自主下架待审 516:系统下架待审 520:上架待审核 1028:系统下架审核失败】 + /// 拳探【0下架 1上架】 /// public int State { get; set; } diff --git a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductSkuResponse.cs b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductSkuResponse.cs index ce130e8..3d39a54 100644 --- a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductSkuResponse.cs +++ b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductSkuResponse.cs @@ -20,6 +20,9 @@ /// /// 京东【1:上架 2:下架 4:删除】 /// + /// + /// 拳探【0下架 1上架】 + /// /// public int State { get; set; } From b330aa191d3c57dc064e629b4dfd29b3472aa3a5 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 20 Sep 2023 02:29:11 +0800 Subject: [PATCH 008/222] =?UTF-8?q?=E7=BC=96=E8=BE=91=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E6=94=AF=E6=8C=81=E8=AE=AE=E4=BB=B7=E6=88=90?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 30 +++++++++++++++++-- .../Db/PurchaseScheme/PurchaseScheme.cs | 15 ++++++++++ .../history/HistoryPurchaseScheme.cs | 15 ++++++++++ 3 files changed, 57 insertions(+), 3 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 748c5de..0423870 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -390,7 +390,8 @@ namespace BBWYB.Server.Business { if (psReq.SchemeGroupId == null || psReq.SchemeGroupId == 0) psReq.SchemeGroupId = newPurchaseGroupId; - + var defaultCost = 0M; + decimal? bargainingCost = null; var ps = new PurchaseScheme() { CreateTime = DateTime.Now, @@ -419,7 +420,15 @@ namespace BBWYB.Server.Business pss.CreateTime = DateTime.Now; pss.SkuPurchaseSchemeId = ps.Id; addPurchaseSchemeProductSkuList.Add(pss); - ps.DefaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); + //ps.DefaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); + + defaultCost += pssReq.DefaultPrice ?? 0; + if (pssReq.ActualPrice != null && pssReq.ActualPrice > 0M) + { + if (bargainingCost == null) + bargainingCost = 0M; + bargainingCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); + } #region 处理历史版本 var historyPss = pss.Map(); @@ -438,6 +447,9 @@ namespace BBWYB.Server.Business } #region 处理历史版本 + + ps.DefaultCost = defaultCost; + ps.BargainingCost = bargainingCost; var historyPs = ps.Map(); historyPs.HistoryId = idGenerator.NewLong(); insertHistoryPSList.Add(historyPs); @@ -461,6 +473,7 @@ namespace BBWYB.Server.Business throw new BusinessException($"未找到编辑方案{schemeId}"); var newVersion = dbps.Version + 1; //采购方案版本 var defaultCost = 0M; + decimal? bargainingCost = null; //只有当任意配件包含议价成本时才具备此值 foreach (var pspReq in psReq.PurchaseSchemeProductList) { var psp = pspReq.Map(); @@ -476,7 +489,14 @@ namespace BBWYB.Server.Business pss.CreateTime = DateTime.Now; pss.SkuPurchaseSchemeId = schemeId; addPurchaseSchemeProductSkuList.Add(pss); - defaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); + //defaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); + defaultCost += pssReq.DefaultPrice ?? 0; + if (pssReq.ActualPrice != null && pssReq.ActualPrice > 0M) + { + if (bargainingCost == null) + bargainingCost = 0M; + bargainingCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); + } #region 处理历史版本 var historyPss = pssReq.Map(); @@ -499,6 +519,7 @@ namespace BBWYB.Server.Business } var psupdate = fsql.Update(schemeId) .Set(ps => ps.DefaultCost, defaultCost) + .Set(ps => ps.BargainingCost, bargainingCost) .Set(ps => ps.HYSchemeId, psReq.HYSchemeId) .Set(ps => ps.HYBDId, psReq.HYBDId) .Set(ps => ps.Version, newVersion); @@ -509,6 +530,9 @@ namespace BBWYB.Server.Business historyPs.LastPurchaseTime = dbps.LastPurchaseTime; historyPs.LastPurchasePriceCost = dbps.LastPurchasePriceCost; historyPs.DefaultCost = defaultCost; + historyPs.BargainingCost = bargainingCost; + historyPs.PurchasedCount = dbps.PurchasedCount; + historyPs.PurchasedAmount = dbps.PurchasedAmount; historyPs.CreateTime = DateTime.Now; historyPs.Version = newVersion; historyPs.HistoryId = idGenerator.NewLong(); diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs index 2880073..b46941e 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs @@ -78,6 +78,21 @@ namespace BBWYB.Server.Model [Column(IsIgnore = true)] public List PurchaseSchemeProductList { get; set; } + + /// + /// 议价成本,只有当任意配件包含议价成本时才具备此值 + /// + public decimal? BargainingCost { get; set; } + + /// + /// 采购次数 + /// + public int? PurchasedCount { get; set; } = 0; + + /// + /// 采购金额 + /// + public decimal? PurchasedAmount { get; set; } = 0M; } } diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseScheme.cs b/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseScheme.cs index fa4f370..8985be5 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseScheme.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/history/HistoryPurchaseScheme.cs @@ -78,6 +78,21 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "int")] public int? Version { get; set; } = 1; + /// + /// 议价成本,只有当任意配件包含议价成本时才具备此值 + /// + public decimal? BargainingCost { get; set; } + + /// + /// 采购次数 + /// + public int? PurchasedCount { get; set; } = 0; + + /// + /// 采购金额 + /// + public decimal? PurchasedAmount { get; set; } = 0M; + } } From 31a564d1bd09c5bad063dba9616420727855fe17 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 20 Sep 2023 13:51:17 +0800 Subject: [PATCH 009/222] =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Sync/ProductSyncBusiness.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs index 4bcca99..b31bac2 100644 --- a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs @@ -29,8 +29,8 @@ namespace BBWYB.Server.Business.Sync /// public void SyncAllShopAllProduct() { - //var shopList = venderBusiness.GetShopList(platform: Enums.Platform.拳探); - var shopList = venderBusiness.GetShopList(shopId: 9); + var shopList = venderBusiness.GetShopList(platform: Enums.Platform.拳探); + //var shopList = venderBusiness.GetShopList(shopId: 9); foreach (var shop in shopList) { Task.Factory.StartNew(() => SyncProduct(shop, true), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncProductTaskScheduler); @@ -78,6 +78,8 @@ namespace BBWYB.Server.Business.Sync while (true) { + Console.WriteLine($"{shop.ShopName} 获取第{request.PageIndex}页产品"); + var pListRes = productBusiness.GetProductList(request); if (pListRes == null || pListRes.Items == null || pListRes.Items.Count == 0) break; From b9ccd6e13a69b6b24904c2aad13016d6da5f220b Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 20 Sep 2023 17:33:53 +0800 Subject: [PATCH 010/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 60 +++++++++++++++++-- .../Db/PurchaseScheme/Purchaser.cs | 10 ++++ .../history/SkuHistoryPurchaserRelation.cs | 39 ++++++++++++ 3 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 BBWYB.Server.Model/Db/PurchaseScheme/history/SkuHistoryPurchaserRelation.cs diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 15ea68e..c7ba566 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -264,7 +264,7 @@ namespace BBWYB.Server.Business throw new BusinessException("缺少收货人信息"); if (request.PurchaseAccountList == null || request.PurchaseAccountList.Count() == 0) throw new BusinessException("缺少采购账号"); - if (request.CargoParamGroupList == null || request.CargoParamGroupList.Count() == 0) + if (request.CargoParamGroupList == null || request.CargoParamGroupList.Count() == 0 || request.CargoParamGroupList.Any(g => string.IsNullOrEmpty(g.PurchaserId))) throw new BusinessException("缺少下单商品参数"); #region 验证同一个批次中,一个订单sku不能同时拥有多个采购方案 @@ -320,6 +320,9 @@ namespace BBWYB.Server.Business List> updatePurchaseSchemeList = new List>(); List insertOrderPurchaseRelationInfoList = new List(); List updatePurchaseTimeLimitTaskOrderSkuList = new List(); + List> updatePurchaserList = new List>(); + List insertSkuHistoryPurchaserRelationList = new List(); + List notifyQikuPackSchemeParamList = null; if (dbOrder.IntoStoreType == Enums.IntoStoreType.发回齐越) notifyQikuPackSchemeParamList = new List(); @@ -507,18 +510,56 @@ namespace BBWYB.Server.Business var cargoParamGroupsBySchemeList = allCargoParamList.GroupBy(c => c.SchemeId); foreach (var cargoParamGroupsByScheme in cargoParamGroupsBySchemeList) { - var defalutCost = 0M; var schemeId = cargoParamGroupsByScheme.Key; - - defalutCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId) - .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1)).DefaultIfEmpty(0M).First()); + var skuId = cargoParamGroupsByScheme.FirstOrDefault().BelongSkuId; + + var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList + .Where(x => x.SkuId == cargoParam.SkuId) + .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1)) + .DefaultIfEmpty(0M) + .First()); + var purchasedAmount = insertOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == skuId)?.SkuAmount ?? 0M; var update = fsql.Update(schemeId).Set(ps => ps.LastPurchaseTime, DateTime.Now) - .Set(ps => ps.LastPurchasePriceCost, defalutCost); + .Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost) + .Set(ps => ps.PurchasedCount + 1) + .Set(ps => ps.PurchasedAmount + purchasedAmount); updatePurchaseSchemeList.Add(update); } } #endregion + #region 更新采购商采购次数和sku数 + { + var purchaserIdList = new List(); + var purchaserSkuDictionary = new Dictionary>(); + request.CargoParamGroupList.ForEach(x => + { + purchaserIdList.Add(x.PurchaserId); + purchaserSkuDictionary.Add(x.PurchaserId, x.CargoParamList.Select(c => c.BelongSkuId).Distinct().ToList()); + }); + + //采购商的sku采购关系表 + var dbSkuAndPurchaserRelationList = fsql.Select() + .Where(spr => purchaserIdList.Contains(spr.PurchaserId)) + .ToList(); + + foreach (var purchaserId in purchaserIdList) + { + purchaserSkuDictionary.TryGetValue(purchaserId, out var fromRequestSkuList); + var fromDBSkuList = dbSkuAndPurchaserRelationList.Where(x => x.PurchaserId == purchaserId) + .Select(x => x.SkuId) + .Distinct() + .ToList(); + var exceptSkuList = fromRequestSkuList.Except(fromDBSkuList); + if (exceptSkuList.Count() > 0) + { + //insertSkuHistoryPurchaserRelationList.AddRange(); + } + } + + } + #endregion + #region 订单Sku成本 var allOrderCostDetail = orderCostDetailList.Union(insertOrderCostDetails).ToList(); foreach (var orderSku in orderSkus) @@ -610,6 +651,8 @@ namespace BBWYB.Server.Business fsql.Insert(insertOrderPurchaseSkuInfos).ExecuteAffrows(); if (insertOrderPurchaseRelationInfoList.Count() > 0) fsql.Insert(insertOrderPurchaseRelationInfoList).ExecuteAffrows(); + if (insertSkuHistoryPurchaserRelationList.Count() > 0) + fsql.Insert(insertSkuHistoryPurchaserRelationList).ExecuteAffrows(); updateOrderCost?.ExecuteAffrows(); insertOrderCost?.ExecuteAffrows(); if (updatePurchaseSchemeList.Count() > 0) @@ -628,6 +671,11 @@ namespace BBWYB.Server.Business foreach (var update in updateOrderSkuCostList) update.ExecuteAffrows(); } + if (updatePurchaserList.Count() > 0) + { + foreach (var update in updatePurchaserList) + update.ExecuteAffrows(); + } }); //#region 更新采购方案最新价格 diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/Purchaser.cs b/BBWYB.Server.Model/Db/PurchaseScheme/Purchaser.cs index 2dd256f..e4292ac 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/Purchaser.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/Purchaser.cs @@ -44,6 +44,16 @@ namespace BBWYB.Server.Model.Db [Column(StringLength = 50, IsNullable = true)] public string MemberId { get; set; } + /// + /// 采购过的Sku数 + /// + public int? PurchasedSkuCount { get; set; } = 0; + + /// + /// 采购次数 + /// + public int? PurchasedCount { get; set; } = 0; + } } diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/history/SkuHistoryPurchaserRelation.cs b/BBWYB.Server.Model/Db/PurchaseScheme/history/SkuHistoryPurchaserRelation.cs new file mode 100644 index 0000000..000ab51 --- /dev/null +++ b/BBWYB.Server.Model/Db/PurchaseScheme/history/SkuHistoryPurchaserRelation.cs @@ -0,0 +1,39 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// Sku历史采购商关系表 + /// + [Table(Name = "skuhistorypurchaserrelation", DisableSyncStructure = true)] + public partial class SkuHistoryPurchaserRelation + { + + [Column(DbType = "bigint", IsPrimary = true)] + public long Id { get; set; } + + /// + /// 创建时间 + /// + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 采购商Id + /// + [Column(StringLength = 50)] + public string PurchaserId { get; set; } + + [Column(DbType = "bigint")] + public long? ShopId { get; set; } + + /// + /// 店铺Sku + /// + [Column(StringLength = 50)] + public string SkuId { get; set; } + + } + +} From b472a0877f1e39ca4f1bf080077c8973f891a97f Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 20 Sep 2023 22:50:02 +0800 Subject: [PATCH 011/222] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88=E5=92=8C?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=95=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 30 ++++++++++++++----- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 8 +++-- .../PurchaseSchemeProductResponse.cs | 12 ++++++++ 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index c7ba566..e3eb2b9 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -264,8 +264,12 @@ namespace BBWYB.Server.Business throw new BusinessException("缺少收货人信息"); if (request.PurchaseAccountList == null || request.PurchaseAccountList.Count() == 0) throw new BusinessException("缺少采购账号"); - if (request.CargoParamGroupList == null || request.CargoParamGroupList.Count() == 0 || request.CargoParamGroupList.Any(g => string.IsNullOrEmpty(g.PurchaserId))) + if (request.CargoParamGroupList == null || request.CargoParamGroupList.Count() == 0) throw new BusinessException("缺少下单商品参数"); + if (request.CargoParamGroupList.Any(g => string.IsNullOrEmpty(g.PurchaserId))) + throw new BusinessException("缺少采购商Id"); + if (request.CargoParamGroupList.GroupBy(c => c.PurchaserId).Any(g => g.Count() > 1)) + throw new BusinessException("提交采购商包含重复"); #region 验证同一个批次中,一个订单sku不能同时拥有多个采购方案 IDictionary schemeValidationDictionary = new Dictionary(); @@ -501,7 +505,7 @@ namespace BBWYB.Server.Business #endregion } - #region 更新采购方案最近采购价格 + #region 更新采购方案 { var allCargoParamList = new List(); @@ -518,7 +522,7 @@ namespace BBWYB.Server.Business .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1)) .DefaultIfEmpty(0M) .First()); - var purchasedAmount = insertOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == skuId)?.SkuAmount ?? 0M; + var purchasedAmount = insertOrderCostDetails.Where(ocd => ocd.SkuId == skuId).Sum(ocd => ocd.SkuAmount); var update = fsql.Update(schemeId).Set(ps => ps.LastPurchaseTime, DateTime.Now) .Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost) .Set(ps => ps.PurchasedCount + 1) @@ -528,7 +532,7 @@ namespace BBWYB.Server.Business } #endregion - #region 更新采购商采购次数和sku数 + #region 更新采购商 { var purchaserIdList = new List(); var purchaserSkuDictionary = new Dictionary>(); @@ -540,7 +544,7 @@ namespace BBWYB.Server.Business //采购商的sku采购关系表 var dbSkuAndPurchaserRelationList = fsql.Select() - .Where(spr => purchaserIdList.Contains(spr.PurchaserId)) + .Where(spr => purchaserIdList.Contains(spr.PurchaserId) && spr.ShopId == request.ShopId) .ToList(); foreach (var purchaserId in purchaserIdList) @@ -551,10 +555,22 @@ namespace BBWYB.Server.Business .Distinct() .ToList(); var exceptSkuList = fromRequestSkuList.Except(fromDBSkuList); - if (exceptSkuList.Count() > 0) + var newSkuRelationCount = exceptSkuList.Count(); + if (newSkuRelationCount > 0) { - //insertSkuHistoryPurchaserRelationList.AddRange(); + insertSkuHistoryPurchaserRelationList.AddRange(exceptSkuList.Select(x => new SkuHistoryPurchaserRelation() + { + Id = idGenerator.NewLong(), + CreateTime = DateTime.Now, + PurchaserId = purchaserId, + ShopId = request.ShopId, + SkuId = x + })); } + var update = fsql.Update(purchaserId) + .Set(p => p.PurchasedCount + 1) + .SetIf(newSkuRelationCount > 0, p => p.PurchasedSkuCount + newSkuRelationCount); + updatePurchaserList.Add(update); } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 0423870..4da9300 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -663,7 +663,9 @@ namespace BBWYB.Server.Business PurchaserLocation = p.Location, PurchaserName = p.Name, PurchasePlatform = p.Platform, - PurchaserMemberId = p.MemberId + PurchaserMemberId = p.MemberId, + PurchaserPurchasedCount = p.PurchasedCount, + PurchaserPurchasedSkuCount = p.PurchasedSkuCount, }); var purchaseSchemeProductSkuList = fsql.Select().Where(p => purchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)) @@ -696,7 +698,9 @@ namespace BBWYB.Server.Business Location = schemeProduct.PurchaserLocation, Name = schemeProduct.PurchaserName, Platform = schemeProduct.PurchasePlatform, - MemberId = schemeProduct.PurchaserMemberId + MemberId = schemeProduct.PurchaserMemberId, + PurchasedCount = schemeProduct.PurchaserPurchasedCount, + PurchasedSkuCount = schemeProduct.PurchaserPurchasedSkuCount }); } } diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs index a1033c5..60f1bf9 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs @@ -2,6 +2,7 @@ { public class PurchaseSchemeProductResponse : Model.Db.PurchaseSchemeProduct { + #region 采购商信息 public string PurchaserName { get; set; } public string PurchaserId2 { get; set; } @@ -12,6 +13,17 @@ public string PurchaserMemberId { get; set; } + /// + /// 采购商的采购次数 + /// + public int? PurchaserPurchasedCount { get; set; } + + /// + /// 采购商的采购SKU数 + /// + public int? PurchaserPurchasedSkuCount { get; set; } + #endregion + /// /// 采购商品标题 仅在查询条件IncludePurchaseSkuBasicInfo=1时具备该值 /// From 42f9c1402dcaf12b740a0137c77b53c9ca356d97 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 21 Sep 2023 01:32:18 +0800 Subject: [PATCH 012/222] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E9=A6=96=E9=80=89=EF=BC=8C=E5=B9=B6=E6=8C=89?= =?UTF-8?q?=E9=A6=96=E9=80=89=E5=92=8C=E6=97=B6=E9=97=B4=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaseSchemeController.cs | 14 ++++++++++-- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 22 ++++++++++++++++++- .../Db/PurchaseScheme/PurchaseScheme.cs | 5 +++++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index 171612f..1b7f63d 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -172,9 +172,19 @@ namespace BBWYB.Server.API.Controllers /// /// 最新的采购方案成本 [HttpDelete] - public decimal DeletePurchaseSku([FromBody]DeletePurchaseSkuRequest request) - { + public decimal DeletePurchaseSku([FromBody] DeletePurchaseSkuRequest request) + { return purchaseSchemeBusiness.DeletePurchaseSku(request); } + + /// + /// 设置首选采购方案,同时互斥相同Sku的其他采购方案 + /// + /// + [HttpPost("{schemeId}")] + public void SetFirstPurchaseScheme([FromRoute]long schemeId) + { + purchaseSchemeBusiness.SetFirstPurchaseScheme(schemeId); + } } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 4da9300..f3ffbde 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -639,7 +639,7 @@ namespace BBWYB.Server.Business .Where((psp, p) => psp.SkuPurchaseSchemeId == ps.Id).Any()); } //var sql = select.ToSql(); - var purchaseSchemeList = select.OrderByDescending(ps => ps.CreateTime).ToList(); + var purchaseSchemeList = select.OrderByDescending(ps => ps.IsFirst).OrderByDescending(ps => ps.CreateTime).ToList(); if (purchaseSchemeList.Count > 0) @@ -1194,5 +1194,25 @@ namespace BBWYB.Server.Business }); return defaultCost; } + + /// + /// 设置首选采购方案 + /// + /// + public void SetFirstPurchaseScheme(long schemeId) + { + var scheme = fsql.Select(schemeId).ToOne(s => new + { + s.Id, + s.SkuId + }); + if (scheme == null) + new BusinessException("采购方案不存在"); + fsql.Transaction(() => + { + fsql.Update().Set(s => s.IsFirst, 0).Where(s => s.SkuId == scheme.SkuId && s.Id != schemeId).ExecuteAffrows(); + fsql.Update(schemeId).Set(s => s.IsFirst, 1).ExecuteAffrows(); + }); + } } } diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs index b46941e..a840856 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs @@ -93,6 +93,11 @@ namespace BBWYB.Server.Model /// 采购金额 /// public decimal? PurchasedAmount { get; set; } = 0M; + + /// + /// 首选采购方案 (是=1 否=0) + /// + public int? IsFirst { get; set; } = 0; } } From 81e3724d2a4ddf7a2218562b9a43922c3533378b Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 22 Sep 2023 15:53:40 +0800 Subject: [PATCH 013/222] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AE=9E=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Db/Product/Skuoptimizationhistory.cs | 39 ++++++++++ .../Db/Product/Skutotalsaleinfo.cs | 74 +++++++++++++++++++ WebTest/WebTest.csproj | 2 +- WebTest/WebView2Manager.cs | 21 +++++- 4 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs create mode 100644 BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs new file mode 100644 index 0000000..dd3bf12 --- /dev/null +++ b/BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs @@ -0,0 +1,39 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// Sku历史优化表 + /// + [Table(Name = "skuoptimizationhistory", DisableSyncStructure = true)] + public partial class SkuOptimizationHistory + { + + [Column(DbType = "bigint", IsPrimary = true)] + public long Id { get; set; } + + /// + /// 优化时间 + /// + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 优化率 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? OptimizationRatio { get; set; } + + [Column(StringLength = 50)] + public string ProductId { get; set; } + + [Column(DbType = "bigint")] + public long? ShopId { get; set; } + + [Column(StringLength = 50)] + public string SkuId { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs b/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs new file mode 100644 index 0000000..09f8db9 --- /dev/null +++ b/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs @@ -0,0 +1,74 @@ +using FreeSql.DatabaseModel; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using Newtonsoft.Json; +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// Sku总销量表 + /// + [Table(Name = "skutotalsaleinfo", DisableSyncStructure = true)] + public partial class SkuTotalSaleInfo + { + + /// + /// Sku + /// + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string SkuId { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 是否有效 + /// + + public bool? IsEnabled { get; set; } = false; + + /// + /// 是否需要议价 + /// + + public bool? IsNeedOptimization { get; set; } = false; + + /// + /// 销量,销售件数 + /// + [Column(DbType = "bigint")] + public long? ItemCount { get; set; } + + /// + /// 上次优化时的销量 + /// + [Column(DbType = "bigint")] + public long? LastOptimizationItemCount { get; set; } + + /// + /// 上次优化时间 + /// + [Column(DbType = "datetime")] + public DateTime? LastOptimizationTime { get; set; } + + /// + /// Spu + /// + [Column(StringLength = 50)] + public string ProductId { get; set; } + + [Column(DbType = "bigint")] + public long? ShopId { get; set; } + + [Column(DbType = "datetime")] + public DateTime? UpdateTime { get; set; } + + } + +} diff --git a/WebTest/WebTest.csproj b/WebTest/WebTest.csproj index 8d4029b..f9e32d0 100644 --- a/WebTest/WebTest.csproj +++ b/WebTest/WebTest.csproj @@ -1,7 +1,7 @@  - WinExe + Exe net6.0-windows enable true diff --git a/WebTest/WebView2Manager.cs b/WebTest/WebView2Manager.cs index 5c75417..2569d68 100644 --- a/WebTest/WebView2Manager.cs +++ b/WebTest/WebView2Manager.cs @@ -46,9 +46,28 @@ namespace WebTest OnNavigationCompleted?.Invoke(e); } - private void Wb2_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e) + private async void Wb2_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e) { + wb2.CoreWebView2.AddWebResourceRequestedFilter("*", CoreWebView2WebResourceContext.All); wb2.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested; + + //Mozilla/5.0 (Linux; Android 11; M2006J10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/13.8 SP-engine/2.46.0 baiduboxapp/13.8.1.10 (Baidu; P1 11) NABar/1.0 Edg/117.0.0.0 + //Mozilla/5.0 (Linux; Android 12; PEDM00 Build/SKQ1.210216.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/12.29 SP-engine/2.38.0 other/12.29.5.10 (Baidu; P1 12) NABar/1.0 + var platform = "Android"; + var userAgent = "Mozilla/5.0 (Linux; Android 12; PEDM00 Build/SKQ1.210216.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/12.29 SP-engine/2.38.0 other/12.29.5.10 (Baidu; P1 12) NABar/1.0"; + + await wb2.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync( + "(() => {" + + $"const platform = \"{platform}\";" + + $"const userAgent = \"{userAgent}\";" + + "if (platform || userAgent) {" + + "const navigator = window.navigator;" + + "if (platform) Object.defineProperty(navigator, \"platform\", { value: platform, configurable: false, enumerable: true, writable: false });" + + "if (userAgent) Object.defineProperty(navigator, \"userAgent\", { value: userAgent, configurable: false, enumerable: true, writable: false });" + + "}" + + "})();"); + + CoreWebView2InitializationCompleted?.Invoke(e); IsInitializationCompleted = true; } From c9ebced1987cd2ae49673754973a4078d39c4331 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 23 Sep 2023 03:20:12 +0800 Subject: [PATCH 014/222] 1 --- .../Sync/OrderSyncBusiness.cs | 72 +++++++++++++++++-- BBWYB.Server.Model/Db/Order/OrderSku.cs | 6 ++ .../Db/Product/Skutotalsaleinfo.cs | 6 -- 3 files changed, 72 insertions(+), 12 deletions(-) diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 3dad87f..5dda27e 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -90,21 +90,33 @@ namespace BBWYB.Server.Business.Sync var qtOrderIdList = qtOrderList.Items.Select(qto => qto.OrderId).ToList(); var dbOrderList = fsql.Select(qtOrderIdList).ToList(); - //采购限时任务列表 + var payedQTOrderIdList = qtOrderList.Items.Where(qto => qto.IsPay).Select(qto => qto.OrderId).ToList(); + var payedQTSpuIdList = qtOrderList.Items.Where(qto => qto.IsPay).SelectMany(qto => qto.OrderSkuList).Select(qtos => qtos.ProductId).Distinct().ToList(); + + //限时任务列表 var dbPurchaseTimeLimitTaskList = fsql.Select().Where(t => t.TaskType == Enums.TimeLimitTaskType.采购任务 && payedQTOrderIdList.Contains(t.OrderId)).ToList(); + //现有sku销量 + var dbSkuTotalSakeInfoList = fsql.Select().Where(s => s.ShopId == shopId && s.IsEnabled == true && payedQTSpuIdList.Contains(s.ProductId)).ToList(); + + #region DB Operation List insertOrderList = new List(); List insertOrderSkuList = new List(); List insertOrderConsigneeList = new List(); List insertTimeLimitTaskList = new List(); List deleteTimeLimitTaskOrderIdList = new List(); - List> updateOrderList = new List>(); + List insertSkuTotalSaleInfoList = new List(); + IList updateSkuTotalSaleInfoList = new List(); + #endregion + //等待检查sku销量的订单集合 + List waitToCheckSkuSaleOrderList = new List(); + #region 同步订单 foreach (var qtOrder in qtOrderList.Items) { var dbOrder = dbOrderList.FirstOrDefault(o => o.Id == qtOrder.OrderId); @@ -184,10 +196,10 @@ namespace BBWYB.Server.Business.Sync ProductId = qtOrderSku.ProductId, BelongSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == qtOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty, InPackAmount = qtOrderSku.PackAmount, - BuyerPayFreight = qtOrderSku.FreightAmount + BuyerPayFreight = qtOrderSku.FreightAmount, + IsNeedOptimization = 0 }); } - //收货人 insertOrderConsigneeList.Add(new OrderConsignee() { @@ -202,19 +214,26 @@ namespace BBWYB.Server.Business.Sync TelePhone = qtOrder.Consignee.Mobile, Town = qtOrder.Consignee.Town }); + + if (qtOrder.IsPay && !waitToCheckSkuSaleOrderList.Any(x => x.OrderId == qtOrder.OrderId)) + waitToCheckSkuSaleOrderList.Add(qtOrder); } else { #region 订单状态脱离拳探 只处理付款和取消 Enums.OrderState? updateOrderState = null; - if (orderState == Enums.OrderState.待付款 && dbOrder.OrderState!=Enums.OrderState.待付款) + 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.待付款 && orderState != Enums.OrderState.已取消) + { updateOrderState = Enums.OrderState.等待采购; + if (!waitToCheckSkuSaleOrderList.Any(x => x.OrderId == qtOrder.OrderId)) + waitToCheckSkuSaleOrderList.Add(qtOrder); + } if (dbOrder.OrderState != Enums.OrderState.已取消 && orderState == Enums.OrderState.已取消) { @@ -244,7 +263,46 @@ namespace BBWYB.Server.Business.Sync updateOrderList.Add(update); } } + + if (!qtOrder.IsPay) + continue; + } + #endregion + + #region 统计sku销量 + foreach (var qtOrder in waitToCheckSkuSaleOrderList) + { + foreach (var qtOrderSku in qtOrder.OrderSkuList) + { + var skuTotalSaleInfo = dbSkuTotalSakeInfoList.FirstOrDefault(s => s.SkuId == qtOrderSku.SkuId); + if (skuTotalSaleInfo == null) + { + skuTotalSaleInfo = insertSkuTotalSaleInfoList.FirstOrDefault(s => s.SkuId == qtOrderSku.SkuId); + if (skuTotalSaleInfo == null) + { + skuTotalSaleInfo = new SkuTotalSaleInfo() + { + SkuId = qtOrderSku.SkuId, + CreateTime = DateTime.Now, + IsEnabled = true, + ItemCount = 0, + LastOptimizationItemCount = 0, + LastOptimizationTime = null, + ProductId = qtOrderSku.ProductId, + ShopId = shopId, + UpdateTime = DateTime.Now + }; + insertSkuTotalSaleInfoList.Add(skuTotalSaleInfo); + } + } + else if (!updateSkuTotalSaleInfoList.Any(s => s.SkuId == qtOrderSku.SkuId)) + { + updateSkuTotalSaleInfoList.Add(skuTotalSaleInfo); + } + skuTotalSaleInfo.ItemCount += qtOrderSku.Quantity; + } } + #endregion CheckPurchaseTimeLimitTask(shopId, qtOrderList.Items, dbPurchaseTimeLimitTaskList, insertTimeLimitTaskList); @@ -268,6 +326,8 @@ namespace BBWYB.Server.Business.Sync if (deleteTimeLimitTaskOrderIdList.Count() > 0) fsql.Delete().Where(t => deleteTimeLimitTaskOrderIdList.Contains(t.OrderId)).ExecuteAffrows(); + + }); } catch (Exception ex) diff --git a/BBWYB.Server.Model/Db/Order/OrderSku.cs b/BBWYB.Server.Model/Db/Order/OrderSku.cs index 95b13d2..f526230 100644 --- a/BBWYB.Server.Model/Db/Order/OrderSku.cs +++ b/BBWYB.Server.Model/Db/Order/OrderSku.cs @@ -102,6 +102,12 @@ namespace BBWYB.Server.Model.Db /// [Column(DbType = "bit", IsNullable = true)] public bool? IsCheck { get; set; } + + /// + /// 是否需要议价 是=1 否=0 + /// + [Column(DbType = "int(1)", IsNullable = true)] + public int? IsNeedOptimization { get; set; } = 0; } } diff --git a/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs b/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs index 09f8db9..4358d0d 100644 --- a/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs +++ b/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs @@ -33,12 +33,6 @@ namespace BBWYB.Server.Model.Db public bool? IsEnabled { get; set; } = false; - /// - /// 是否需要议价 - /// - - public bool? IsNeedOptimization { get; set; } = false; - /// /// 销量,销售件数 /// From 235db2f6cc31663ac6e2d9b001001836f0c591b7 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 23 Sep 2023 16:31:58 +0800 Subject: [PATCH 015/222] 1 --- .../Sync/OrderSyncBusiness.cs | 5 +- .../Db/Product/Skutotalsaleinfo.cs | 22 +------- .../Db/Product/SpuTotalSaleInfo.cs | 54 +++++++++++++++++++ 3 files changed, 56 insertions(+), 25 deletions(-) create mode 100644 BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 5dda27e..e278255 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -196,8 +196,7 @@ namespace BBWYB.Server.Business.Sync ProductId = qtOrderSku.ProductId, BelongSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == qtOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty, InPackAmount = qtOrderSku.PackAmount, - BuyerPayFreight = qtOrderSku.FreightAmount, - IsNeedOptimization = 0 + BuyerPayFreight = qtOrderSku.FreightAmount }); } //收货人 @@ -286,8 +285,6 @@ namespace BBWYB.Server.Business.Sync CreateTime = DateTime.Now, IsEnabled = true, ItemCount = 0, - LastOptimizationItemCount = 0, - LastOptimizationTime = null, ProductId = qtOrderSku.ProductId, ShopId = shopId, UpdateTime = DateTime.Now diff --git a/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs b/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs index 4358d0d..a880f04 100644 --- a/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs +++ b/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs @@ -1,12 +1,4 @@ -using FreeSql.DatabaseModel; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Threading.Tasks; -using Newtonsoft.Json; -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; namespace BBWYB.Server.Model.Db { @@ -39,18 +31,6 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "bigint")] public long? ItemCount { get; set; } - /// - /// 上次优化时的销量 - /// - [Column(DbType = "bigint")] - public long? LastOptimizationItemCount { get; set; } - - /// - /// 上次优化时间 - /// - [Column(DbType = "datetime")] - public DateTime? LastOptimizationTime { get; set; } - /// /// Spu /// diff --git a/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs b/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs new file mode 100644 index 0000000..bc44a14 --- /dev/null +++ b/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs @@ -0,0 +1,54 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// Spu总销量表 + /// + [Table(Name = "sputotalsaleinfo", DisableSyncStructure = true)] + public partial class SpuTotalSaleInfo + { + + /// + /// Spu + /// + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string ProductId { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 是否有效 + /// + + public bool? IsEnabled { get; set; } = false; + + /// + /// 销量,销售件数 + /// + [Column(DbType = "bigint")] + public long? ItemCount { get; set; } + + /// + /// 上次优化时的销量 + /// + [Column(DbType = "bigint")] + public long? LastOptimizationItemCount { get; set; } + + /// + /// 上次优化时间 + /// + [Column(DbType = "datetime")] + public DateTime? LastOptimizationTime { get; set; } + + [Column(DbType = "bigint")] + public long? ShopId { get; set; } + + [Column(DbType = "datetime")] + public DateTime? UpdateTime { get; set; } + + } + +} From 8dbd8e7b80564fcf165a089be58be68084bc8093 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 24 Sep 2023 01:44:25 +0800 Subject: [PATCH 016/222] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Db/Product/Skuoptimizationhistory.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs index dd3bf12..8d1fde0 100644 --- a/BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs +++ b/BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs @@ -34,6 +34,18 @@ namespace BBWYB.Server.Model.Db [Column(StringLength = 50)] public string SkuId { get; set; } + /// + /// 上次采购单价 + /// + [Column(DbType = "decimal(18,2)", IsNullable = true)] + public decimal? LastPurchasePrice { get; set; } = 0.0M; + + /// + /// 本次采购单价 + /// + [Column(DbType = "decimal(18,2)", IsNullable = true)] + public decimal? CurrentPurchasePrice { get; set; } = 0.0M; + } } From e148cd8614fbdb21648f726b93d7f63e529282ac Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 24 Sep 2023 02:42:33 +0800 Subject: [PATCH 017/222] =?UTF-8?q?spu=E9=94=80=E9=87=8F=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sync/OrderSyncBusiness.cs | 94 ++++++++++++++----- BBWYB.Server.Model/Db/Order/OrderSku.cs | 10 +- 2 files changed, 81 insertions(+), 23 deletions(-) diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index e278255..37bd904 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -100,17 +100,26 @@ namespace BBWYB.Server.Business.Sync payedQTOrderIdList.Contains(t.OrderId)).ToList(); //现有sku销量 - var dbSkuTotalSakeInfoList = fsql.Select().Where(s => s.ShopId == shopId && s.IsEnabled == true && payedQTSpuIdList.Contains(s.ProductId)).ToList(); + var dbSkuTotalSaleInfoList = fsql.Select().Where(s => s.ShopId == shopId && s.IsEnabled == true && payedQTSpuIdList.Contains(s.ProductId)) + .ToList(); + + //现有spu销量 + var dbSpuTotalSaleInfoList = fsql.Select().Where(s => s.ShopId == shopId && s.IsEnabled == true && payedQTSpuIdList.Contains(s.ProductId)) + .ToList(); #region DB Operation List insertOrderList = new List(); List insertOrderSkuList = new List(); + List updateOrderSkuIdList_OptimizationFlag = new List(); List insertOrderConsigneeList = new List(); List insertTimeLimitTaskList = new List(); List deleteTimeLimitTaskOrderIdList = new List(); List> updateOrderList = new List>(); List insertSkuTotalSaleInfoList = new List(); IList updateSkuTotalSaleInfoList = new List(); + + List insertSpuTotalSaleInfoList = new List(); + IList updateSpuTotalSaleInfoList = new List(); #endregion //等待检查sku销量的订单集合 @@ -262,46 +271,82 @@ namespace BBWYB.Server.Business.Sync updateOrderList.Add(update); } } - - if (!qtOrder.IsPay) - continue; } #endregion - #region 统计sku销量 + #region 统计销量 foreach (var qtOrder in waitToCheckSkuSaleOrderList) { foreach (var qtOrderSku in qtOrder.OrderSkuList) { - var skuTotalSaleInfo = dbSkuTotalSakeInfoList.FirstOrDefault(s => s.SkuId == qtOrderSku.SkuId); - if (skuTotalSaleInfo == null) + #region 统计sku销量 { - skuTotalSaleInfo = insertSkuTotalSaleInfoList.FirstOrDefault(s => s.SkuId == qtOrderSku.SkuId); + var skuTotalSaleInfo = dbSkuTotalSaleInfoList.FirstOrDefault(s => s.SkuId == qtOrderSku.SkuId); if (skuTotalSaleInfo == null) { - skuTotalSaleInfo = new SkuTotalSaleInfo() + skuTotalSaleInfo = insertSkuTotalSaleInfoList.FirstOrDefault(s => s.SkuId == qtOrderSku.SkuId); + if (skuTotalSaleInfo == null) { - SkuId = qtOrderSku.SkuId, - CreateTime = DateTime.Now, - IsEnabled = true, - ItemCount = 0, - ProductId = qtOrderSku.ProductId, - ShopId = shopId, - UpdateTime = DateTime.Now - }; - insertSkuTotalSaleInfoList.Add(skuTotalSaleInfo); + skuTotalSaleInfo = new SkuTotalSaleInfo() + { + SkuId = qtOrderSku.SkuId, + CreateTime = DateTime.Now, + IsEnabled = true, + ItemCount = 0, + ProductId = qtOrderSku.ProductId, + ShopId = shopId, + UpdateTime = DateTime.Now + }; + insertSkuTotalSaleInfoList.Add(skuTotalSaleInfo); + } + } + else if (!updateSkuTotalSaleInfoList.Any(s => s.SkuId == qtOrderSku.SkuId)) + { + updateSkuTotalSaleInfoList.Add(skuTotalSaleInfo); } + skuTotalSaleInfo.ItemCount += qtOrderSku.Quantity; } - else if (!updateSkuTotalSaleInfoList.Any(s => s.SkuId == qtOrderSku.SkuId)) + #endregion + + #region 统计spu销量 { - updateSkuTotalSaleInfoList.Add(skuTotalSaleInfo); + var spuTotalSaleInfo = dbSpuTotalSaleInfoList.FirstOrDefault(s => s.ProductId == qtOrderSku.ProductId); + if (spuTotalSaleInfo == null) + { + spuTotalSaleInfo = insertSpuTotalSaleInfoList.FirstOrDefault(s => s.ProductId == qtOrderSku.ProductId); + if (spuTotalSaleInfo == null) + { + spuTotalSaleInfo = new SpuTotalSaleInfo() + { + CreateTime = DateTime.Now, + IsEnabled = true, + ItemCount = 0, + ProductId = qtOrderSku.ProductId, + ShopId = shopId, + UpdateTime = DateTime.Now, + LastOptimizationItemCount = 0 + }; + insertSpuTotalSaleInfoList.Add(spuTotalSaleInfo); + } + } + else if (!updateSpuTotalSaleInfoList.Any(s => s.ProductId == qtOrderSku.ProductId)) + { + updateSpuTotalSaleInfoList.Add(spuTotalSaleInfo); + } + spuTotalSaleInfo.ItemCount += qtOrderSku.Quantity; } - skuTotalSaleInfo.ItemCount += qtOrderSku.Quantity; + #endregion } } #endregion + #region 检查待议价任务 + + #endregion + + #region 检查限时采购任务 CheckPurchaseTimeLimitTask(shopId, qtOrderList.Items, dbPurchaseTimeLimitTaskList, insertTimeLimitTaskList); + #endregion fsql.Transaction(() => { @@ -333,6 +378,13 @@ namespace BBWYB.Server.Business.Sync } } + /// + /// 检查限时采购任务 + /// + /// + /// + /// + /// private void CheckPurchaseTimeLimitTask(long shopId, IList orderList, IList dbTimeLimits, List insertTimeLimitTasks) { foreach (var order in orderList) diff --git a/BBWYB.Server.Model/Db/Order/OrderSku.cs b/BBWYB.Server.Model/Db/Order/OrderSku.cs index f526230..f80eaa9 100644 --- a/BBWYB.Server.Model/Db/Order/OrderSku.cs +++ b/BBWYB.Server.Model/Db/Order/OrderSku.cs @@ -104,10 +104,16 @@ namespace BBWYB.Server.Model.Db public bool? IsCheck { get; set; } /// - /// 是否需要议价 是=1 否=0 + /// 是否需要优化 是=1 否=0 /// - [Column(DbType = "int(1)", IsNullable = true)] + [Column(DbType = "int(1)", IsNullable = true)] public int? IsNeedOptimization { get; set; } = 0; + + /// + /// 是否优化完成 是=1 否=0 + /// + [Column(DbType = "int(1)", IsNullable = true)] + public int? IsOptimizationCompleted { get; set; } = 0; } } From a13e1b3d9b8a4c6e3de61e807cd6f6d7dae960b8 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 24 Sep 2023 22:13:31 +0800 Subject: [PATCH 018/222] =?UTF-8?q?1.=E6=96=B0=E5=A2=9E=E9=94=80=E9=87=8F?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=202.=E6=96=B0=E5=A2=9E=E5=BE=85=E8=AE=AE?= =?UTF-8?q?=E4=BB=B7=E4=BB=BB=E5=8A=A1=203.=E6=96=B0=E5=A2=9E=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E4=BC=98=E5=8C=96=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sync/OrderSyncBusiness.cs | 100 +++++++++++++++++- .../Db/Product/Skutotalsaleinfo.cs | 2 +- .../Db/Product/SpuTotalSaleInfo.cs | 4 +- BBWYB.Server.Model/Enums.cs | 4 +- 4 files changed, 100 insertions(+), 10 deletions(-) diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 37bd904..3bf574c 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -17,12 +17,18 @@ namespace BBWYB.Server.Business.Sync private OP_PlatformClientFactory opPlatformClientFactory; private VenderBusiness venderBusiness; private TaskSchedulerManager taskSchedulerManager; + private List timeLimitTaskTypes; public OrderSyncBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, VenderBusiness venderBusiness, TaskSchedulerManager taskSchedulerManager) : base(fsql, nLogManager, idGenerator) { this.opPlatformClientFactory = opPlatformClientFactory; this.venderBusiness = venderBusiness; this.taskSchedulerManager = taskSchedulerManager; + timeLimitTaskTypes = new List() + { + Enums.TimeLimitTaskType.采购任务, + Enums.TimeLimitTaskType.待议价任务 + }; } public void AutoOrderSync() @@ -94,13 +100,20 @@ namespace BBWYB.Server.Business.Sync var payedQTOrderIdList = qtOrderList.Items.Where(qto => qto.IsPay).Select(qto => qto.OrderId).ToList(); var payedQTSpuIdList = qtOrderList.Items.Where(qto => qto.IsPay).SelectMany(qto => qto.OrderSkuList).Select(qtos => qtos.ProductId).Distinct().ToList(); + var payedQTSkuIdList = qtOrderList.Items.Where(qto => qto.IsPay).SelectMany(qto => qto.OrderSkuList).Select(qtos => qtos.SkuId).Distinct().ToList(); //限时任务列表 - var dbPurchaseTimeLimitTaskList = fsql.Select().Where(t => t.TaskType == Enums.TimeLimitTaskType.采购任务 && - payedQTOrderIdList.Contains(t.OrderId)).ToList(); + var dbTimeLimitTaskList = fsql.Select().Where(t => timeLimitTaskTypes.Contains(t.TaskType.Value) && + payedQTOrderIdList.Contains(t.OrderId)).ToList(); + + //限时采购任务列表 + var dbPurchaseTimeLimitTaskList = dbTimeLimitTaskList.Where(t => t.TaskType == Enums.TimeLimitTaskType.采购任务).ToList(); + + //限时议价任务列表 + var dbOptimizationLimitTaskList = dbTimeLimitTaskList.Where(t => t.TaskType == Enums.TimeLimitTaskType.待议价任务).ToList(); //现有sku销量 - var dbSkuTotalSaleInfoList = fsql.Select().Where(s => s.ShopId == shopId && s.IsEnabled == true && payedQTSpuIdList.Contains(s.ProductId)) + var dbSkuTotalSaleInfoList = fsql.Select().Where(s => s.ShopId == shopId && s.IsEnabled == true && payedQTSkuIdList.Contains(s.SkuId)) .ToList(); //现有spu销量 @@ -205,7 +218,9 @@ namespace BBWYB.Server.Business.Sync ProductId = qtOrderSku.ProductId, BelongSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == qtOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty, InPackAmount = qtOrderSku.PackAmount, - BuyerPayFreight = qtOrderSku.FreightAmount + BuyerPayFreight = qtOrderSku.FreightAmount, + IsNeedOptimization = 0, + IsOptimizationCompleted = 0 }); } //收货人 @@ -341,7 +356,60 @@ namespace BBWYB.Server.Business.Sync #endregion #region 检查待议价任务 - + { + if (waitToCheckSkuSaleOrderList.Count() > 0) + { + var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s => + { + if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20) + return true; + if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) + return true; + return false; + }); + if (optimizationSpuSaleList.Count() > 0) + { + foreach (var spuSale in optimizationSpuSaleList) + { + var orderList = waitToCheckSkuSaleOrderList.Where(o => o.OrderSkuList.Any(osku => osku.ProductId == spuSale.ProductId)).ToList(); + foreach (var o in orderList) + { + foreach (var osku in o.OrderSkuList) + { + if (osku.ProductId != spuSale.ProductId) + continue; + + #region 更新sku优化标记 + var oskuId = long.Parse(osku.Id); + var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); + if (insertOrderSku != null) + insertOrderSku.IsNeedOptimization = 1; + else + updateOrderSkuIdList_OptimizationFlag.Add(oskuId); + #endregion + + #region 创建待议价任务 + if (!dbOptimizationLimitTaskList.Any(t => t.OrderId == o.OrderId && t.SkuId == osku.SkuId)) + { + insertTimeLimitTaskList.Add(new TimeLimitTask() + { + Id = idGenerator.NewLong(), + CreateTme = DateTime.Now, + ExpirationTime = DateTime.Now.AddDays(1), + OrderId = o.OrderId, + OrderSn = o.OrderSn, + ShopId = shopId, + SkuId = osku.SkuId, + TaskType = Enums.TimeLimitTaskType.待议价任务 + }); + } + #endregion + } + } + } + } + } + } #endregion #region 检查限时采购任务 @@ -369,6 +437,28 @@ namespace BBWYB.Server.Business.Sync if (deleteTimeLimitTaskOrderIdList.Count() > 0) fsql.Delete().Where(t => deleteTimeLimitTaskOrderIdList.Contains(t.OrderId)).ExecuteAffrows(); + if (insertSkuTotalSaleInfoList.Count() > 0) + fsql.Insert(insertSkuTotalSaleInfoList).ExecuteAffrows(); + if (updateSkuTotalSaleInfoList.Count() > 0) + { + foreach (var item in updateSkuTotalSaleInfoList) + fsql.Update(item.SkuId).Set(s => s.ItemCount, item.ItemCount) + .Set(s => s.UpdateTime, DateTime.Now) + .ExecuteAffrows(); + } + + if (insertSpuTotalSaleInfoList.Count() > 0) + fsql.Insert(insertSpuTotalSaleInfoList).ExecuteAffrows(); + if (updateSpuTotalSaleInfoList.Count() > 0) + { + foreach (var item in updateSpuTotalSaleInfoList) + fsql.Update(item.ProductId).Set(s => s.ItemCount, item.ItemCount) + .Set(s => s.UpdateTime, DateTime.Now) + .ExecuteAffrows(); + } + + if (updateOrderSkuIdList_OptimizationFlag.Count() > 0) + fsql.Update(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows(); }); } diff --git a/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs b/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs index a880f04..18269d5 100644 --- a/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs +++ b/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs @@ -29,7 +29,7 @@ namespace BBWYB.Server.Model.Db /// 销量,销售件数 /// [Column(DbType = "bigint")] - public long? ItemCount { get; set; } + public long? ItemCount { get; set; } = 0; /// /// Spu diff --git a/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs b/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs index bc44a14..ca1b63b 100644 --- a/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs +++ b/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs @@ -29,13 +29,13 @@ namespace BBWYB.Server.Model.Db /// 销量,销售件数 /// [Column(DbType = "bigint")] - public long? ItemCount { get; set; } + public long? ItemCount { get; set; } = 0; /// /// 上次优化时的销量 /// [Column(DbType = "bigint")] - public long? LastOptimizationItemCount { get; set; } + public long? LastOptimizationItemCount { get; set; } = 0; /// /// 上次优化时间 diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index 104bf09..e07a061 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -308,11 +308,11 @@ } /// - /// 限时任务类型 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11, 待核算任务 = 20 + /// 限时任务类型 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11, 待核算任务 = 20, 待议价任务 = 30 /// public enum TimeLimitTaskType { - 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11, 待核算任务 = 20 + 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11, 待核算任务 = 20, 待议价任务 = 30 } /// From 29f715decc3490d5e1c3ad6329743a6c842e891f Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 25 Sep 2023 02:02:54 +0800 Subject: [PATCH 019/222] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=AE=AE=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/OrderController.cs | 10 +++++++ BBWYB.Server.Business/Order/OrderBusiness.cs | 27 +++++++++++++++++-- .../Order/CompleteOptimizationRequest.cs | 11 ++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 BBWYB.Server.Model/Dto/Request/Order/CompleteOptimizationRequest.cs diff --git a/BBWYB.Server.API/Controllers/OrderController.cs b/BBWYB.Server.API/Controllers/OrderController.cs index 538d1f8..8a3b6a6 100644 --- a/BBWYB.Server.API/Controllers/OrderController.cs +++ b/BBWYB.Server.API/Controllers/OrderController.cs @@ -163,5 +163,15 @@ namespace BBWYB.Server.API.Controllers { orderBusiness.SetSpecialOrder(request); } + + /// + /// 完成议价,此操作将完成相同SKU的议价标记和待议价任务 + /// + /// + [HttpPost] + public void CompleteOptimization([FromBody]CompleteOptimizationRequest request) + { + orderBusiness.CompleteOptimization(request); + } } } diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 6f7f8d3..ed2bba6 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -12,9 +12,7 @@ using Newtonsoft.Json; using SDKAdapter; using SDKAdapter.OperationPlatform.Client; using SDKAdapter.OperationPlatform.Models; -using System.Collections.Concurrent; using System.Linq.Expressions; -using System.Security.Cryptography; using Yitter.IdGenerator; namespace BBWYB.Server.Business @@ -854,5 +852,30 @@ namespace BBWYB.Server.Business { fsql.Update(request.OrderId).Set(o => o.IsSpecialOrder, request.IsSpecialOrder).ExecuteAffrows(); } + + /// + /// 完成议价 + /// + /// + public void CompleteOptimization(CompleteOptimizationRequest request) + { + fsql.Transaction(() => + { + fsql.Update().Set(osku => osku.IsOptimizationCompleted, 1) + .Where(osku => osku.ShopId == request.ShopId && + osku.SkuId == request.SkuId && + osku.IsNeedOptimization == 1 && + osku.IsOptimizationCompleted == 0) + .ExecuteAffrows(); + + fsql.Update().Set(t => t.CompletionTime, DateTime.Now) + .Set(t => t.IsTimely == (DateTime.Now < t.ExpirationTime ? true : false)) + .Where(t => t.ShopId == request.ShopId && + t.SkuId == request.SkuId && + t.CompletionTime == null && + t.TaskType == Enums.TimeLimitTaskType.待议价任务) + .ExecuteAffrows(); + }); + } } } diff --git a/BBWYB.Server.Model/Dto/Request/Order/CompleteOptimizationRequest.cs b/BBWYB.Server.Model/Dto/Request/Order/CompleteOptimizationRequest.cs new file mode 100644 index 0000000..d47f383 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/Order/CompleteOptimizationRequest.cs @@ -0,0 +1,11 @@ +namespace BBWYB.Server.Model.Dto +{ + public class CompleteOptimizationRequest + { + //public string OrderId { get; set; } + + public long ShopId { get; set; } + + public string SkuId { get; set; } + } +} From 4ad1063a46339a1b55eade1b2404a90b870df1db Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 25 Sep 2023 14:53:20 +0800 Subject: [PATCH 020/222] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=BE=85=E8=AE=AE=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Order/OrderBusiness.cs | 41 ++++++++++++++++--- .../Dto/Request/Order/QueryOrderRequest.cs | 5 +++ .../Order/OrderCountByStateResponse.cs | 5 +++ .../Dto/Response/Order/OrderSkuResponse.cs | 5 +++ 4 files changed, 50 insertions(+), 6 deletions(-) diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index ed2bba6..418e15e 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -58,17 +58,27 @@ namespace BBWYB.Server.Business select = select.Where((o, ocs, oct) => o.OrderSn == request.OrderSn); else { + //if (request.IsNeedOptimization == 1) + // request.OrderState = Enums.OrderState.等待采购; + //else if (request.OrderState == Enums.OrderState.等待采购) + //{ + // request.IsNeedOptimization = 0; + //} + if (!string.IsNullOrEmpty(request.Sku) || !string.IsNullOrEmpty(request.SourceSku) || !string.IsNullOrEmpty(request.ProductId) || - request.IsWaitConfig) + request.IsWaitConfig || + request.OrderState == Enums.OrderState.等待采购) { var childSelect = fsql.Select().As("osku") .WhereIf(!string.IsNullOrEmpty(request.Sku), osku => osku.SkuId == request.Sku) .WhereIf(!string.IsNullOrEmpty(request.SourceSku), osku => osku.BelongSkuId == request.SourceSku) .WhereIf(!string.IsNullOrEmpty(request.ProductId), osku => osku.ProductId == request.ProductId) .WhereIf(request.IsWaitConfig && request.IsOnlyDisplayPackConfigEditState != 1, osku => waitConfigStateList.Contains(osku.PackConfigState) || osku.PackConfigState == null) - .WhereIf(request.IsWaitConfig && request.IsOnlyDisplayPackConfigEditState == 1, osku => osku.PackConfigState == Enums.PackConfigState.需修改); + .WhereIf(request.IsWaitConfig && request.IsOnlyDisplayPackConfigEditState == 1, osku => osku.PackConfigState == Enums.PackConfigState.需修改) + .WhereIf(request.OrderState == Enums.OrderState.等待采购 && request.IsNeedOptimization == 1, osku => osku.IsNeedOptimization == 1) + .WhereIf(request.OrderState == Enums.OrderState.等待采购 && request.IsNeedOptimization != 1, osku => osku.IsNeedOptimization == 0); select = select.WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.OrderState != Enums.OrderState.已取消 && o.OrderState != Enums.OrderState.已完成 && o.IntoStoreType == Enums.IntoStoreType.发回齐越 && @@ -390,6 +400,12 @@ namespace BBWYB.Server.Business t.TaskType == Enums.TimeLimitTaskType.待核算任务); #endregion + #region 待议价任务 + orderSku.OptimizationTimeLimitTask = orderTimeLimitTaskList.FirstOrDefault(t => t.OrderId == order.Id && + t.SkuId == orderSku.SkuId && + t.TaskType == Enums.TimeLimitTaskType.待议价任务); + #endregion + #region 判断sku的发货状态 var purchaseOrder = order.OrderPurchaseInfoList.FirstOrDefault(opi => opi.OrderId == order.Id && opi.BelongSkuIds.Contains(orderSku.SkuId)); if (purchaseOrder != null) @@ -815,20 +831,32 @@ namespace BBWYB.Server.Business OrderState = g.Key, OrderCount = g.Count() }); - - var childSelect = fsql.Select().As("osku").Where(osku => waitConfigStateList.Contains(osku.PackConfigState) || osku.PackConfigState == null); - var waitConfigCount = fsql.Select().Where(o => o.ShopId == shopId) + long waitConfigCount = 0; + { + var childSelect = fsql.Select().As("osku").Where(osku => waitConfigStateList.Contains(osku.PackConfigState) || osku.PackConfigState == null); + waitConfigCount = fsql.Select().Where(o => o.ShopId == shopId) .Where(o => !noOrderStateList.Contains(o.OrderState.Value)) .Where(o => o.IntoStoreType == Enums.IntoStoreType.发回齐越) .Where(o => o.IsPurchased == true) .Where(o => childSelect.Where(osku => osku.OrderId == o.Id).Any()) .Count(); + } + + int opitimizationCount = 0; + { + var childSelect = fsql.Select().As("osku").Where(osku => osku.IsNeedOptimization == 1); + opitimizationCount = Convert.ToInt32(fsql.Select().Where(o => o.ShopId == shopId) + .Where(o => o.OrderState == Enums.OrderState.等待采购) + .Where(o => childSelect.Where(osku => osku.OrderId == o.Id).Any()) + .Count()); + } + return new OrderCountByStateResponse() { WaitPayCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.待付款)?.OrderCount ?? 0, WaitPurchaseCount = orderCountGroup.Where(o => o.OrderState == Enums.OrderState.等待采购 || - o.OrderState == Enums.OrderState.部分采购).Sum(o => o.OrderCount), + o.OrderState == Enums.OrderState.部分采购).Sum(o => o.OrderCount) - opitimizationCount, WaitShipmentCount = orderCountGroup.Where(o => o.OrderState == Enums.OrderState.待发货 || o.OrderState == Enums.OrderState.部分发货).Sum(o => o.OrderCount), WaitReceiveCount = orderCountGroup.Where(o => o.OrderState == Enums.OrderState.待收货 || @@ -836,6 +864,7 @@ namespace BBWYB.Server.Business WaitCheckCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.待验收)?.OrderCount ?? 0, WaitComputationCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.待核算)?.OrderCount ?? 0, WaitConfigCount = waitConfigCount, + OpitimizationCount = opitimizationCount }; } diff --git a/BBWYB.Server.Model/Dto/Request/Order/QueryOrderRequest.cs b/BBWYB.Server.Model/Dto/Request/Order/QueryOrderRequest.cs index 7a0508d..d28de70 100644 --- a/BBWYB.Server.Model/Dto/Request/Order/QueryOrderRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Order/QueryOrderRequest.cs @@ -114,5 +114,10 @@ /// 是否仅显示特殊单,是=1否=0,null则不处理该条件 /// public int? IsOnlyDisplaySpecialOrder { get; set; } + + /// + /// 是否需要优化(待议价),仅在订单为等待采购状态有效, 是=1 否=0 + /// + public int? IsNeedOptimization { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Response/Order/OrderCountByStateResponse.cs b/BBWYB.Server.Model/Dto/Response/Order/OrderCountByStateResponse.cs index 723ad6f..9130d58 100644 --- a/BBWYB.Server.Model/Dto/Response/Order/OrderCountByStateResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Order/OrderCountByStateResponse.cs @@ -36,5 +36,10 @@ /// 待核算数量 /// public long WaitComputationCount { get; set; } + + /// + /// 待议价数量 + /// + public long OpitimizationCount { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs index a890d67..43284ff 100644 --- a/BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs @@ -39,5 +39,10 @@ namespace BBWYB.Server.Model.Dto /// 待核算任务 /// public TimeLimitTaskResponse? CheckComputationTimeLimitTask { get; set; } + + /// + /// 待议价任务 + /// + public TimeLimitTaskResponse OptimizationTimeLimitTask { get; set; } } } From 01d4dcc9255fa394fb9b5246a34c1651edd58a1e Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 25 Sep 2023 16:25:07 +0800 Subject: [PATCH 021/222] =?UTF-8?q?=E5=BE=85=E8=AE=AE=E4=BB=B7=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Order/OrderBusiness.cs | 21 ++++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 418e15e..7595e99 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -58,27 +58,25 @@ namespace BBWYB.Server.Business select = select.Where((o, ocs, oct) => o.OrderSn == request.OrderSn); else { - //if (request.IsNeedOptimization == 1) - // request.OrderState = Enums.OrderState.等待采购; - //else if (request.OrderState == Enums.OrderState.等待采购) - //{ - // request.IsNeedOptimization = 0; - //} + if (request.OrderState == Enums.OrderState.等待采购) + { + var childSelect = fsql.Select().As("osku1") + .Where(osku1 => osku1.IsNeedOptimization == 1); + select = select.WhereIf(request.IsNeedOptimization == 1, (o, ocs, oct) => childSelect.Where(osku1 => osku1.OrderId == o.Id).Any()) + .WhereIf(request.IsNeedOptimization != 1, (o, ocs, oct) => !childSelect.Where(osku1 => osku1.OrderId == o.Id).Any()); + } if (!string.IsNullOrEmpty(request.Sku) || !string.IsNullOrEmpty(request.SourceSku) || !string.IsNullOrEmpty(request.ProductId) || - request.IsWaitConfig || - request.OrderState == Enums.OrderState.等待采购) + request.IsWaitConfig) { var childSelect = fsql.Select().As("osku") .WhereIf(!string.IsNullOrEmpty(request.Sku), osku => osku.SkuId == request.Sku) .WhereIf(!string.IsNullOrEmpty(request.SourceSku), osku => osku.BelongSkuId == request.SourceSku) .WhereIf(!string.IsNullOrEmpty(request.ProductId), osku => osku.ProductId == request.ProductId) .WhereIf(request.IsWaitConfig && request.IsOnlyDisplayPackConfigEditState != 1, osku => waitConfigStateList.Contains(osku.PackConfigState) || osku.PackConfigState == null) - .WhereIf(request.IsWaitConfig && request.IsOnlyDisplayPackConfigEditState == 1, osku => osku.PackConfigState == Enums.PackConfigState.需修改) - .WhereIf(request.OrderState == Enums.OrderState.等待采购 && request.IsNeedOptimization == 1, osku => osku.IsNeedOptimization == 1) - .WhereIf(request.OrderState == Enums.OrderState.等待采购 && request.IsNeedOptimization != 1, osku => osku.IsNeedOptimization == 0); + .WhereIf(request.IsWaitConfig && request.IsOnlyDisplayPackConfigEditState == 1, osku => osku.PackConfigState == Enums.PackConfigState.需修改); select = select.WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.OrderState != Enums.OrderState.已取消 && o.OrderState != Enums.OrderState.已完成 && o.IntoStoreType == Enums.IntoStoreType.发回齐越 && @@ -891,6 +889,7 @@ namespace BBWYB.Server.Business fsql.Transaction(() => { fsql.Update().Set(osku => osku.IsOptimizationCompleted, 1) + .Set(osku => osku.IsNeedOptimization, 0) .Where(osku => osku.ShopId == request.ShopId && osku.SkuId == request.SkuId && osku.IsNeedOptimization == 1 && From d9cb0b48bea16694304ca9fde6f87570ca2d9bd7 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 25 Sep 2023 22:49:21 +0800 Subject: [PATCH 022/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E4=BC=98=E5=8C=96=E5=8E=86=E5=8F=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 63 +++++++++++++++++-- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index e3eb2b9..3a7effa 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -326,6 +326,7 @@ namespace BBWYB.Server.Business List updatePurchaseTimeLimitTaskOrderSkuList = new List(); List> updatePurchaserList = new List>(); List insertSkuHistoryPurchaserRelationList = new List(); + List insertSkuOptimizationHistoryList = new List(); List notifyQikuPackSchemeParamList = null; if (dbOrder.IntoStoreType == Enums.IntoStoreType.发回齐越) @@ -517,11 +518,10 @@ namespace BBWYB.Server.Business var schemeId = cargoParamGroupsByScheme.Key; var skuId = cargoParamGroupsByScheme.FirstOrDefault().BelongSkuId; - var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList - .Where(x => x.SkuId == cargoParam.SkuId) - .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1)) - .DefaultIfEmpty(0M) - .First()); + var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId) + .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1)) + .DefaultIfEmpty(0M) + .First()); var purchasedAmount = insertOrderCostDetails.Where(ocd => ocd.SkuId == skuId).Sum(ocd => ocd.SkuAmount); var update = fsql.Update(schemeId).Set(ps => ps.LastPurchaseTime, DateTime.Now) .Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost) @@ -617,7 +617,9 @@ namespace BBWYB.Server.Business // totalPurchaseFreight ?? 0M, // 0M, // 0M); - orderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value, orderSkuCostList.Union(insertOrderSkuCostList).ToList()); + + var allOrderSkuCostList = orderSkuCostList.Union(insertOrderSkuCostList).ToList(); + orderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value, allOrderSkuCostList); if (!isRepurchase) @@ -647,6 +649,53 @@ namespace BBWYB.Server.Business } #endregion + #region 创建优化历史 + { + //本批次在线采购的订单sku集合 + var allBelongSkuIdList = request.CargoParamGroupList.SelectMany(cg => cg.CargoParamList.Select(c => c.BelongSkuId)).Distinct().ToList(); + var optimizationSkuIdList = orderSkus.Where(osku => osku.IsOptimizationCompleted == 1 && allBelongSkuIdList.Contains(osku.SkuId)) + .Select(osku => osku.SkuId) + .ToList(); + if (optimizationSkuIdList.Count() > 0) + { + //优化历史 + var optimizationHistoryList = fsql.Select() + .Where(s1 => s1.ShopId == request.ShopId && optimizationSkuIdList.Contains(s1.SkuId)) + .GroupBy(s1 => s1.SkuId) + .WithTempQuery(g => new { MaxId = g.Max(g.Value.Id) }) + .From() + .InnerJoin((s1, s2) => s1.MaxId == s2.Id) + .ToList((s1, s2) => s2); + + + foreach (var optimizationSkuId in optimizationSkuIdList) + { + var orderSkuCost = allOrderSkuCostList.FirstOrDefault(x => x.SkuId == optimizationSkuId); + if (orderSkuCost == null) + continue; + var orderSku = orderSkus.FirstOrDefault(x => x.SkuId == optimizationSkuId); + var lastHistory = optimizationHistoryList.FirstOrDefault(x => x.SkuId == optimizationSkuId); + + var currentPurchasePrice = orderSkuCost.SkuAmount / orderSku.ItemTotal; + var ratio = (lastHistory?.LastPurchasePrice ?? 0) == 0 ? 0 : 1 - currentPurchasePrice / lastHistory.LastPurchasePrice; + + var newOptimizationHistory = new SkuOptimizationHistory() + { + Id = idGenerator.NewLong(), + CreateTime = DateTime.Now, + CurrentPurchasePrice = orderSkuCost.SkuAmount / orderSku.ItemTotal, + ProductId = orderSku.ProductId, + ShopId = request.ShopId, + SkuId = optimizationSkuId, + LastPurchasePrice = lastHistory?.LastPurchasePrice ?? 0, + OptimizationRatio = ratio + }; + insertSkuOptimizationHistoryList.Add(newOptimizationHistory); + } + } + } + #endregion + fsql.Transaction(() => { if (updatePurchaseTimeLimitTaskOrderSkuList.Count() > 0) @@ -669,6 +718,8 @@ namespace BBWYB.Server.Business fsql.Insert(insertOrderPurchaseRelationInfoList).ExecuteAffrows(); if (insertSkuHistoryPurchaserRelationList.Count() > 0) fsql.Insert(insertSkuHistoryPurchaserRelationList).ExecuteAffrows(); + if (insertSkuOptimizationHistoryList.Count() > 0) + fsql.Insert(insertSkuOptimizationHistoryList).ExecuteAffrows(); updateOrderCost?.ExecuteAffrows(); insertOrderCost?.ExecuteAffrows(); if (updatePurchaseSchemeList.Count() > 0) From 438a174b3f150b9d63aca36d1dc01210e8e32f3a Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 26 Sep 2023 01:51:31 +0800 Subject: [PATCH 023/222] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=90=8Cspu=E5=90=8C?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=95=86=E7=9A=84=E5=85=B6=E4=BB=96=E9=85=8D?= =?UTF-8?q?=E4=BB=B6=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaseSchemeController.cs | 13 ++- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 92 ++++++++++++++++--- ...AndSamePurchaserOtherPurchaseSkuRequest.cs | 11 +++ .../PurchaseScheme/QuerySchemeRequest.cs | 3 +- 4 files changed, 104 insertions(+), 15 deletions(-) create mode 100644 BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySameSpuAndSamePurchaserOtherPurchaseSkuRequest.cs diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index 1b7f63d..603b653 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -182,9 +182,20 @@ namespace BBWYB.Server.API.Controllers /// /// [HttpPost("{schemeId}")] - public void SetFirstPurchaseScheme([FromRoute]long schemeId) + public void SetFirstPurchaseScheme([FromRoute] long schemeId) { purchaseSchemeBusiness.SetFirstPurchaseScheme(schemeId); } + + /// + /// 查询同spu同采购商的其他配件接口,排除失效配件 + /// + /// + /// + [HttpPost] + public IList QuerySameSpuAndSamePurchaserOtherPurchaseSkuList([FromBody] QuerySameSpuAndSamePurchaserOtherPurchaseSkuRequest request) + { + return purchaseSchemeBusiness.QuerySameSpuAndSamePurchaserOtherPurchaseSkuList(request); + } } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index f3ffbde..d5feb4e 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -938,14 +938,14 @@ namespace BBWYB.Server.Business var list = new List(); foreach (var param in request.Params) { - foreach (var purchaseId in param.PurchaseProductIds) + foreach (var pId in param.PurchaseProductIds) { var response = GetPurchaseSkuBasicInfo(new PurchaseSkuBasicInfoRequest() { FirstApiMode = request.FirstApiMode, PriceMode = request.PriceMode, Platform = param.Platform, - PurchaseProductId = purchaseId + PurchaseProductId = pId }); if (response != null) { @@ -1106,17 +1106,6 @@ namespace BBWYB.Server.Business } defaultCost += schemeProduct.PurchaseSchemeProductSkuList.Sum(pss => ((pss.ActualPrice ?? pss.PurchaseSkuPrice) ?? 0) * (pss.PurchaseRatio ?? 1)); - - //foreach (var schemeProductSku in schemeProduct.PurchaseSchemeProductSkuList) - //{ - // if (schemeProductSku.SkuId == request.SkuId && - // schemeProductSku.PurchaseSkuId == request.PurchaseSkuId) - // { - // schemeProductSku.PurchaseRatio = request.Ratio; - // pssId = schemeProductSku.Id; - // } - // defaultCost += ((schemeProductSku.ActualPrice ?? schemeProductSku.PurchaseSkuPrice) ?? 0) * (schemeProductSku.PurchaseRatio ?? 1); - //} } if (pssId == null) throw new BusinessException("未找到需要更新的采购配件"); @@ -1214,5 +1203,82 @@ namespace BBWYB.Server.Business fsql.Update(schemeId).Set(s => s.IsFirst, 1).ExecuteAffrows(); }); } + + /// + /// 查询同spu同采购商的其他配件接口,排除失效配件 + /// + /// + /// + public IList QuerySameSpuAndSamePurchaserOtherPurchaseSkuList(QuerySameSpuAndSamePurchaserOtherPurchaseSkuRequest request) + { + var purchaseSchemeProductSkuList = new List(); + + var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest() + { + IncludePurchaseSkuBasicInfo = 0, + PurchasePlatform = Enums.Platform.阿里巴巴, + ProductIdList = new List() { request.ProductId }, + PurchaserId = request.PurchaserId, + ShopId = request.ShopId + }); + if (purchaseSchemeList != null && purchaseSchemeList.Count() > 0) + { + var purchaseProductIdList = new List(); + + foreach (var scheme in purchaseSchemeList) + { + var samePspList = scheme.PurchaseSchemeProductList.Where(psp => psp.PurchaserId == request.PurchaserId); + if (samePspList.Any()) + { + purchaseProductIdList.AddRange(samePspList.Select(psp => psp.PurchaseProductId)); + purchaseSchemeProductSkuList.AddRange(samePspList.SelectMany(psp => psp.PurchaseSchemeProductSkuList)); + } + } + purchaseProductIdList = purchaseProductIdList.Distinct().ToList(); + var purchaseProductSkuIdList = purchaseSchemeProductSkuList.Select(pss => pss.PurchaseSkuId).Distinct().ToList(); + + var skuBasicInfoList = BatchGetPurchaseSkuBasicInfo(new BatchPurchaseSkuBasicInfoRequest() + { + FirstApiMode = Enums.PurchaseProductAPIMode.Spider, + PriceMode = Enums.PurchaseOrderMode.批发, + Params = new List() + { + new BatchPurchaseSkuBasicInfoParamRequest() + { + Platform = Enums.Platform.阿里巴巴, + PurchaseProductIds = purchaseProductIdList, + PurchaseSkuIds = purchaseProductSkuIdList + } + } + }); + + for (var i = 0; i < purchaseSchemeProductSkuList.Count(); i++) + { + var pss = purchaseSchemeProductSkuList[i]; + pss.IsInvalid = 0; + var basicInfo = skuBasicInfoList.FirstOrDefault(x => x.PurchaseProductId == pss.PurchaseProductId); + if (basicInfo == null || basicInfo.IsInvalid) + { + //排除失效配件 + purchaseSchemeProductSkuList.RemoveAt(i); + i--; + } + + var skuBasicInfo = basicInfo.ItemList?.FirstOrDefault(x => x.PurchaseSkuId == pss.PurchaseSkuId); + if (skuBasicInfo == null) + { + //排除失效配件 + purchaseSchemeProductSkuList.RemoveAt(i); + i--; + } + + pss.PurchaseSkuLogo = skuBasicInfo.Logo; + pss.PurchaseSkuPrice = skuBasicInfo.Price; + pss.PurchaseSkuTitle = skuBasicInfo.Title; + } + } + + return purchaseSchemeProductSkuList; + } } } diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySameSpuAndSamePurchaserOtherPurchaseSkuRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySameSpuAndSamePurchaserOtherPurchaseSkuRequest.cs new file mode 100644 index 0000000..ef84303 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySameSpuAndSamePurchaserOtherPurchaseSkuRequest.cs @@ -0,0 +1,11 @@ +namespace BBWYB.Server.Model.Dto +{ + public class QuerySameSpuAndSamePurchaserOtherPurchaseSkuRequest + { + public long ShopId { get; set; } + + public string ProductId { get; set; } + + public string PurchaserId { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs index 04d8b45..419c3cb 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs @@ -25,7 +25,7 @@ namespace BBWYB.Server.Model.Dto public List SkuIdList { get; set; } /// - /// spuId集合,有值则忽略 + /// spuId集合 /// public List ProductIdList { get; set; } @@ -46,5 +46,6 @@ namespace BBWYB.Server.Model.Dto /// 是否包含采购配件的基本信息(单价,Logo,标题等) 是=1 否=0或null /// public int? IncludePurchaseSkuBasicInfo { get; set; } + } } From ff9bebd4a03f6217efdf0fb0d9bfc604a42e800f Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 26 Sep 2023 02:21:37 +0800 Subject: [PATCH 024/222] =?UTF-8?q?=E6=89=B9=E9=87=8F=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E9=85=8D=E4=BB=B6=E5=AE=9E=E9=99=85=E5=8D=95?= =?UTF-8?q?=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaseSchemeController.cs | 10 +++++++ .../PurchaseScheme/PurchaseSchemeBusiness.cs | 9 ++++++ .../BatchEditPurchaseSkuActualPriceRequest.cs | 30 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index 603b653..13470ce 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -197,5 +197,15 @@ namespace BBWYB.Server.API.Controllers { return purchaseSchemeBusiness.QuerySameSpuAndSamePurchaserOtherPurchaseSkuList(request); } + + /// + /// 批量修改采购配件实际单价 + /// + /// + [HttpPost] + public void BatchEditPurchaseSkuActualPrice([FromBody] BatchEditPurchaseSkuActualPriceRequest request) + { + purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request); + } } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index d5feb4e..db874e6 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1280,5 +1280,14 @@ namespace BBWYB.Server.Business return purchaseSchemeProductSkuList; } + + /// + /// 批量修改采购配件实际单价 + /// + /// + public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request) + { + + } } } diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs new file mode 100644 index 0000000..5d3b3d8 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs @@ -0,0 +1,30 @@ +namespace BBWYB.Server.Model.Dto +{ + public class BatchEditPurchaseSkuActualPriceRequest + { + public IList ItemList { get; set; } + } + + public class BatchEditPurchaseSkuActualPriceItemRequest + { + /// + /// 采购方案Id + /// + public long SchemeId { get; set; } + + /// + /// SkuId + /// + public string SkuId { get; set; } + + /// + /// 采购SkuId + /// + public string PurchaseSkuId { get; set; } + + /// + /// 实际单价 + /// + public decimal? ActualPrice { get; set; } + } +} From e12d99b933ffb904d0ce3eb3b6f244d4ff3d090c Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 26 Sep 2023 02:34:12 +0800 Subject: [PATCH 025/222] =?UTF-8?q?=E6=96=B0=E5=A2=9Esku=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=8E=86=E5=8F=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Order/OrderBusiness.cs | 19 ++++++++++++++++++- .../Dto/Response/Order/OrderSkuResponse.cs | 5 +++++ .../Product/SkuOptimizationHistoryResponse.cs | 8 ++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 7595e99..1d232e6 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -227,6 +227,7 @@ namespace BBWYB.Server.Business var orderList = orderSourceList.Map>(); var orderIdList = orderList.Select(o => o.Id).ToList(); + if (orderList.Count() > 0) { #region 查询关联信息 @@ -446,7 +447,23 @@ namespace BBWYB.Server.Business #endregion - + #region SKU优化历史 + if (request.IsNeedOptimization == 1 && request.OrderState == Enums.OrderState.等待采购) + { + var orderSkuIdList = orderSkuList.Select(osku => osku.SkuId).Distinct().ToList(); + var skuOptimizationHistoryList = fsql.Select() + .Where(x => x.ShopId == request.ShopId && orderSkuIdList.Contains(x.SkuId)) + .OrderByDescending(x => x.CreateTime) + .ToList(); + if (skuOptimizationHistoryList.Count() > 0) + { + foreach (var orderSku in orderSkuList) + { + orderSku.OptimizationHistoryList = skuOptimizationHistoryList.Where(x => x.SkuId == orderSku.SkuId).ToList(); + } + } + } + #endregion } return new OrderListResponse() { diff --git a/BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs index 43284ff..e5f69a4 100644 --- a/BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs @@ -44,5 +44,10 @@ namespace BBWYB.Server.Model.Dto /// 待议价任务 /// public TimeLimitTaskResponse OptimizationTimeLimitTask { get; set; } + + /// + /// SKU优化历史列表 + /// + public IList OptimizationHistoryList { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs b/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs new file mode 100644 index 0000000..b32d4bc --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs @@ -0,0 +1,8 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Model.Dto +{ + public class SkuOptimizationHistoryResponse: SkuOptimizationHistory + { + } +} From 8667a9a0d8bdce03231b0073cddbae447976f30a Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 26 Sep 2023 15:08:41 +0800 Subject: [PATCH 026/222] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=AE=AE=E4=BB=B7?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Order/OrderBusiness.cs | 6 +++++ .../PurchaseScheme/PurchaseSchemeBusiness.cs | 26 +++++++++++++++++++ .../Order/CompleteOptimizationRequest.cs | 8 ++++++ 3 files changed, 40 insertions(+) diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 1d232e6..e869954 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -920,6 +920,12 @@ namespace BBWYB.Server.Business t.CompletionTime == null && t.TaskType == Enums.TimeLimitTaskType.待议价任务) .ExecuteAffrows(); + + fsql.Update(request.ProductId).Set(s => s.LastOptimizationItemCount == s.ItemCount) + .Set(s => s.LastOptimizationTime, DateTime.Now) + .Set(s => s.UpdateTime, DateTime.Now) + .ExecuteAffrows(); + }); } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index db874e6..797aa4d 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1287,7 +1287,33 @@ namespace BBWYB.Server.Business /// public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request) { + if (request.ItemList == null || request.ItemList.Count() == 0) + throw new BusinessException("缺少参数"); + var schemeIdList = request.ItemList.Select(x => x.SchemeId).Distinct().ToList(); + var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest() + { + IncludePurchaseSkuBasicInfo = 1, + SchemeIdList = schemeIdList + }); + + if (purchaseSchemeList.Count() == 0) + return; + foreach (var ps in purchaseSchemeList) + { + foreach (var psp in ps.PurchaseSchemeProductList) + { + if (psp.IsInvalid == 1) + throw new BusinessException($"采购商品{psp.PurchaseProductId}已失效"); + foreach (var pss in psp.PurchaseSchemeProductSkuList) + { + if (pss.IsInvalid == 1) + throw new BusinessException($"采购配件{pss.PurchaseSkuId}已失效"); + } + } + } + + } } } diff --git a/BBWYB.Server.Model/Dto/Request/Order/CompleteOptimizationRequest.cs b/BBWYB.Server.Model/Dto/Request/Order/CompleteOptimizationRequest.cs index d47f383..f4cb0e3 100644 --- a/BBWYB.Server.Model/Dto/Request/Order/CompleteOptimizationRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Order/CompleteOptimizationRequest.cs @@ -6,6 +6,14 @@ public long ShopId { get; set; } + /// + /// 店铺SkuId + /// public string SkuId { get; set; } + + /// + /// 店铺商品Id + /// + public string ProductId { get; set; } } } From 34e51a79d61a51494360cb64143327f0cc2bb662 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 26 Sep 2023 15:09:32 +0800 Subject: [PATCH 027/222] 1 --- BBWYB.Server.Business/Order/OrderBusiness.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index e869954..ab48ca4 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -903,6 +903,8 @@ namespace BBWYB.Server.Business /// public void CompleteOptimization(CompleteOptimizationRequest request) { + if (!string.IsNullOrEmpty(request.ProductId) || string.IsNullOrEmpty(request.SkuId) || request.ShopId == 0) + throw new BusinessException("参数无效"); fsql.Transaction(() => { fsql.Update().Set(osku => osku.IsOptimizationCompleted, 1) From ac078b001878fe6f5aa963f4bd5f40e67f5401b9 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 26 Sep 2023 18:12:01 +0800 Subject: [PATCH 028/222] =?UTF-8?q?=E6=89=B9=E9=87=8F=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=AE=AE=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 797aa4d..a51173d 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1309,11 +1309,51 @@ namespace BBWYB.Server.Business { if (pss.IsInvalid == 1) throw new BusinessException($"采购配件{pss.PurchaseSkuId}已失效"); + var requestSku = request.ItemList.FirstOrDefault(x => x.SkuId == pss.SkuId && x.PurchaseSkuId == pss.PurchaseSkuId); + if (requestSku != null) + pss.ActualPrice = requestSku.ActualPrice; } } } - + EditPurchaseSchemeV2(new BatchCURDSchemeRequest() + { + EditPurchaseSchemeList = purchaseSchemeList.Select(ps => new EditPurchaseSchemeRequest() + { + HYBDId = ps.HYBDId, + HYSchemeId = ps.HYSchemeId, + Id = ps.Id, + ProductId = ps.ProductId, + SkuId = ps.SkuId, + ShopId = ps.ShopId, + SchemeGroupId = ps.SchemeGroupId, + PurchaseSchemeProductList = ps.PurchaseSchemeProductList.Select(psp => new InputPurchaseSchemeProductRequest() + { + ProductId = psp.ProductId, + PurchasePlatform = psp.PurchasePlatform, + PurchaseProductId = psp.PurchaseProductId, + PurchaserId = psp.PurchaserId, + PurchaserId2 = psp.PurchaserId2, + PurchaserLocation = psp.PurchaserLocation, + PurchaserMemberId = psp.PurchaserMemberId, + PurchaserName = psp.PurchaserName, + PurchaseUrl = psp.PurchaseUrl, + SkuId = psp.SkuId, + PurchaseSchemeProductSkuList = psp.PurchaseSchemeProductSkuList.Select(pss => new InputPurchaseSchemeProductSkuRequest() + { + ActualPrice = pss.ActualPrice, + DefaultPrice = pss.PurchaseSkuPrice, + ProductId = pss.ProductId, + SkuId = pss.SkuId, + PurchaseProductId = pss.PurchaseProductId, + PurchaseRatio = pss.PurchaseRatio, + PurchaseSkuId = pss.PurchaseSkuId, + PurchaseSkuSpecId = pss.PurchaseSkuSpecId + }).ToList() + }).ToList() + }).ToList() + }); + } } } From f7614b30d3a8ee1266649149b1367fcdb7b2f194 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 28 Sep 2023 04:59:22 +0800 Subject: [PATCH 029/222] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=8F=96=E6=B6=88?= =?UTF-8?q?=EF=BC=8C=E6=89=A3=E5=87=8FSPU/SKU=E9=94=80=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Order/OrderBusiness.cs | 37 +++++++++++++++---- .../Sync/OrderSyncBusiness.cs | 19 ++++++++++ 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index ab48ca4..6afaf58 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -555,6 +555,12 @@ namespace BBWYB.Server.Business public void CancelOrder(CancelOrderRequest request, string mdsToken) { + var order = fsql.Select(request.OrderId).ToOne(); + if (order == null) + throw new BusinessException("订单不存在"); + if (order.OrderState == Enums.OrderState.已取消) + return; + try { opPlatformClientFactory.GetClient((AdapterEnums.PlatformType)request.Platform).CancelOrder(new OP_CancelOrderRequest() @@ -573,10 +579,33 @@ namespace BBWYB.Server.Business throw new BusinessException(ex.Message); } + var orderSkus = fsql.Select().Where(osku => osku.OrderId == request.OrderId).ToList(); + + IList> updateSpuTotalSaleInfoList = new List>(); + IList> updateSkuTotalSaleInfoList = new List>(); + + var skuGroupsByProductId = orderSkus.GroupBy(osku => osku.ProductId); + foreach (var group in skuGroupsByProductId) + { + var totalItemCount = group.Sum(osku => osku.ItemTotal ?? 0); + foreach (var osku in group) + { + var updateSku = fsql.Update(osku.SkuId).Set(s => s.ItemCount - osku.ItemTotal); + updateSkuTotalSaleInfoList.Add(updateSku); + } + var updateSpu = fsql.Update(group.Key).Set(s => s.ItemCount - totalItemCount); + updateSpuTotalSaleInfoList.Add(updateSpu); + } + + fsql.Transaction(() => { fsql.Update(request.OrderId).Set(o => o.OrderState, Enums.OrderState.已取消).ExecuteAffrows(); fsql.Delete().Where(t => t.OrderId == request.OrderId).ExecuteAffrows(); + foreach (var update in updateSkuTotalSaleInfoList) + update.ExecuteAffrows(); + foreach (var update in updateSpuTotalSaleInfoList) + update.ExecuteAffrows(); }); try @@ -592,14 +621,6 @@ namespace BBWYB.Server.Business } - //var sql = $"update purchaseorderv2 set OrderState=6 where Id='{request.OrderId}'"; - ////取消C端采购单 - //restApiService.SendRequest("https://bbwy.qiyue666.com", - // "/Api/Sql/ExecuteNonQuery", - // new { sql = sql.AESEncrypt() }, - // new Dictionary() { { "Authorization", $"Bearer {mdsToken}" } }, - // HttpMethod.Post); - try { //取消齐库的任务 diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 3bf574c..6b095ac 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -138,6 +138,9 @@ namespace BBWYB.Server.Business.Sync //等待检查sku销量的订单集合 List waitToCheckSkuSaleOrderList = new List(); + IDictionary deductionSkuCountDictionary = new Dictionary(); + IDictionary deductionSpuCountDictionary = new Dictionary(); + #region 同步订单 foreach (var qtOrder in qtOrderList.Items) { @@ -263,6 +266,17 @@ namespace BBWYB.Server.Business.Sync updateOrderState = Enums.OrderState.已取消; if (dbPurchaseTimeLimitTaskList.Any(t => t.OrderId == qtOrder.OrderId)) deleteTimeLimitTaskOrderIdList.Add(qtOrder.OrderId); + + foreach (var qtOrderSku in qtOrder.OrderSkuList) + { + if (!deductionSkuCountDictionary.ContainsKey(qtOrderSku.SkuId)) + deductionSkuCountDictionary.Add(qtOrderSku.SkuId, 0); + deductionSkuCountDictionary[qtOrderSku.SkuId] += qtOrderSku.Quantity; + + if (!deductionSpuCountDictionary.ContainsKey(qtOrderSku.ProductId)) + deductionSpuCountDictionary.Add(qtOrderSku.ProductId, 0); + deductionSpuCountDictionary[qtOrderSku.ProductId] += qtOrderSku.Quantity; + } } #endregion @@ -460,6 +474,11 @@ namespace BBWYB.Server.Business.Sync if (updateOrderSkuIdList_OptimizationFlag.Count() > 0) fsql.Update(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows(); + foreach (var key in deductionSkuCountDictionary.Keys) + fsql.Update(key).Set(s => s.ItemCount - deductionSkuCountDictionary[key]).ExecuteAffrows(); + foreach (var key in deductionSpuCountDictionary.Keys) + fsql.Update(key).Set(s => s.ItemCount - deductionSpuCountDictionary[key]).ExecuteAffrows(); + }); } catch (Exception ex) From a45520f12fce84674d69323bc7ce1026f078ad40 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 28 Sep 2023 05:05:57 +0800 Subject: [PATCH 030/222] =?UTF-8?q?=E5=BE=85=E8=AE=AE=E4=BB=B7=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E9=A6=96=E6=AC=A1=E9=87=87=E8=B4=AD2=E5=A4=A9?= =?UTF-8?q?=E8=BF=87=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Sync/OrderSyncBusiness.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 6b095ac..55ddaa1 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -405,11 +405,14 @@ namespace BBWYB.Server.Business.Sync #region 创建待议价任务 if (!dbOptimizationLimitTaskList.Any(t => t.OrderId == o.OrderId && t.SkuId == osku.SkuId)) { + //判断sku是否首次采购 + var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == osku.SkuId); + insertTimeLimitTaskList.Add(new TimeLimitTask() { Id = idGenerator.NewLong(), CreateTme = DateTime.Now, - ExpirationTime = DateTime.Now.AddDays(1), + ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), OrderId = o.OrderId, OrderSn = o.OrderSn, ShopId = shopId, From 7719cc0ac074e7e21f31579daf77280c24921ad1 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 28 Sep 2023 11:25:05 +0800 Subject: [PATCH 031/222] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Db/PurchaseScheme/PurchaseScheme.cs | 7 ++++++- .../Db/PurchaseScheme/Purchaseschemeproductsku.cs | 12 +++++++++++- .../PurchaseScheme/PurchaseSchemeResponse.cs | 15 +++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs index a840856..b9679e5 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs @@ -29,7 +29,7 @@ namespace BBWYB.Server.Model public decimal DefaultCost { get; set; } = 0.0M; /// - /// 上次采购成本 + /// 采购方案最近采购成本(配件单价之和) /// public decimal LastPurchasePriceCost { get; set; } = 0.0M; @@ -98,6 +98,11 @@ namespace BBWYB.Server.Model /// 首选采购方案 (是=1 否=0) /// public int? IsFirst { get; set; } = 0; + + /// + /// 最近议价日期 + /// + public DateTime? LastBargainingTime { get; set; } } } diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs b/BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs index 8d4a605..001a729 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs @@ -55,7 +55,17 @@ namespace BBWYB.Server.Model.Db /// /// 实际单价 /// - public decimal? ActualPrice { get; set; } = 0.00M; + public decimal? ActualPrice { get; set; } + + /// + /// 最近议价日期 + /// + public DateTime? LastBargainingTime { get; set; } + + /// + /// 配件的最近采购价(配件单价) + /// + public decimal? LastPurchasePriceCost { get; set; } } diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs index e1c617b..562a1ad 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs @@ -12,6 +12,21 @@ namespace BBWYB.Server.Model.Dto //public string PurchaserLocation { get; set; } + /// + /// 店铺SKU的最近采购成本(配件单价之和) + /// + public decimal? SkuLastPurchasePriceCost { get; set; } + + /// + /// 近30天Spu销量 + /// + public long? Recent30DaySpuItemCount { get; set; } + + /// + /// 近30天Sku销量 + /// + public long? Recent30DaySkuItemCount { get; set; } + public new List PurchaseSchemeProductList { get; set; } public List PurchaserList { get; set; } From a4921efc74b1126d9a9ae9db8fff581b0cd1f0a0 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 28 Sep 2023 11:27:41 +0800 Subject: [PATCH 032/222] 1 --- BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs | 2 ++ .../Db/PurchaseScheme/Purchaseschemeproductsku.cs | 1 + 2 files changed, 3 insertions(+) diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs index b9679e5..6e303e4 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs @@ -50,6 +50,7 @@ namespace BBWYB.Server.Model /// /// 最后采购时间 /// + [Column(DbType = "datetime")] public DateTime? LastPurchaseTime { get; set; } /// @@ -102,6 +103,7 @@ namespace BBWYB.Server.Model /// /// 最近议价日期 /// + [Column(DbType = "datetime")] public DateTime? LastBargainingTime { get; set; } } diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs b/BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs index 001a729..f9347f0 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs @@ -60,6 +60,7 @@ namespace BBWYB.Server.Model.Db /// /// 最近议价日期 /// + [Column(DbType = "datetime", IsNullable = true)] public DateTime? LastBargainingTime { get; set; } /// From c40538165c5d54d886fd80ef0403ffd06332316e Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 28 Sep 2023 13:39:17 +0800 Subject: [PATCH 033/222] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=BE=85=E8=AE=AE=E4=BB=B7=E8=BF=87=E6=BB=A4=E4=B8=8D=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E8=AE=AE=E4=BB=B7=E7=9A=84sku?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Order/OrderBusiness.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 6afaf58..13dd1cd 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -450,7 +450,7 @@ namespace BBWYB.Server.Business #region SKU优化历史 if (request.IsNeedOptimization == 1 && request.OrderState == Enums.OrderState.等待采购) { - var orderSkuIdList = orderSkuList.Select(osku => osku.SkuId).Distinct().ToList(); + var orderSkuIdList = orderSkuList.Where(osku => osku.IsNeedOptimization == 1).Select(osku => osku.SkuId).Distinct().ToList(); var skuOptimizationHistoryList = fsql.Select() .Where(x => x.ShopId == request.ShopId && orderSkuIdList.Contains(x.SkuId)) .OrderByDescending(x => x.CreateTime) @@ -462,6 +462,18 @@ namespace BBWYB.Server.Business orderSku.OptimizationHistoryList = skuOptimizationHistoryList.Where(x => x.SkuId == orderSku.SkuId).ToList(); } } + + foreach (var order in orderList) + { + for (var i = 0; i < order.ItemList.Count(); i++) + { + if (order.ItemList[i].IsNeedOptimization != 1) + { + order.ItemList.RemoveAt(i); + i--; + } + } + } } #endregion } From 84ead9daff31655b58060124d00078bc133043bb Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 28 Sep 2023 14:50:05 +0800 Subject: [PATCH 034/222] =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BB=B7=E6=A0=BC=E5=92=8CLogo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Sync/ProductSyncBusiness.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs index b31bac2..feeee0d 100644 --- a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs @@ -1,13 +1,11 @@ using BBWYB.Common.Log; using BBWYB.Common.Models; +using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; using FreeSql; using SDKAdapter.OperationPlatform.Models; using Yitter.IdGenerator; -using System.Linq; -using Newtonsoft.Json; -using BBWYB.Server.Model; namespace BBWYB.Server.Business.Sync { @@ -162,13 +160,15 @@ namespace BBWYB.Server.Business.Sync #endregion #region 找出状态变化的SKU - var stateChangeProductSkuList = productSkuList.Where(ps => dbProductSkuList.Any(dps => dps.Id == ps.Id && (dps.State != ps.State || dps.SkuName != ps.Title))).ToList(); + var stateChangeProductSkuList = productSkuList.Where(ps => dbProductSkuList.Any(dps => dps.Id == ps.Id && (dps.State != ps.State || dps.SkuName != ps.Title || dps.Price != ps.Price || dps.Logo != ps.Logo))).ToList(); if (stateChangeProductSkuList.Count() > 0) { foreach (var productSku in stateChangeProductSkuList) { var update = fsql.Update(productSku.Id).Set(p => p.State, productSku.State) - .Set(p => p.SkuName, productSku.Title); + .Set(p => p.SkuName, productSku.Title) + .Set(p => p.Price, productSku.Price) + .Set(p => p.Logo, productSku.Logo); updateProductSkuList.Add(update); } } From 443e4badcdbe3a1ae2c2eb3af3f5900d57196129 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 5 Oct 2023 01:26:13 +0800 Subject: [PATCH 035/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=80=E8=BF=9130=E5=A4=A9=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/ConverterExtensions.cs | 17 +++++++++ .../PurchaseScheme/PurchaseSchemeBusiness.cs | 35 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 BBWYB.Common/Extensions/ConverterExtensions.cs diff --git a/BBWYB.Common/Extensions/ConverterExtensions.cs b/BBWYB.Common/Extensions/ConverterExtensions.cs new file mode 100644 index 0000000..2bc884e --- /dev/null +++ b/BBWYB.Common/Extensions/ConverterExtensions.cs @@ -0,0 +1,17 @@ +namespace BBWYB.Common.Extensions +{ + public static class ConverterExtensions + { + public static long? ToInt64(this object? o) + { + try + { + return Convert.ToInt64(o); + } + catch + { + return null; + } + } + } +} diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index a51173d..045eaa4 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -16,6 +16,8 @@ namespace BBWYB.Server.Business private PurchaseProductAPIService purchaseProductAPIService; private RestApiService restApiService; + private IList invalidOrderStateList; + public PurchaseSchemeBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, @@ -24,6 +26,7 @@ namespace BBWYB.Server.Business { this.purchaseProductAPIService = purchaseProductAPIService; this.restApiService = restApiService; + this.invalidOrderStateList = new List() { Enums.OrderState.待付款, Enums.OrderState.已取消 }; } private void ExtractNewPurchaser(IList purchaserSchemeList, IList addPurchaserList) where T : InputPurchaseSchemeRequest @@ -645,6 +648,9 @@ namespace BBWYB.Server.Business if (purchaseSchemeList.Count > 0) { var purchaseSchemeIdList = purchaseSchemeList.Select(p => p.Id).ToList(); + var spuIdList = purchaseSchemeList.Select(ps => ps.ProductId).Distinct().ToList(); + var skuIdList = purchaseSchemeList.Select(ps => ps.SkuId).Distinct().ToList(); + var recentDate = DateTime.Now.Date.AddDays(-30); var purchaseSchemeProductList = fsql.Select() .InnerJoin((psp, p) => psp.PurchaserId == p.Id) @@ -671,6 +677,30 @@ namespace BBWYB.Server.Business var purchaseSchemeProductSkuList = fsql.Select().Where(p => purchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)) .ToList().Map>(); + var recent30daySpuItemCountGroups = fsql.Select() + .LeftJoin((osku, o) => osku.OrderId == o.Id) + .Where((osku, o) => spuIdList.Contains(osku.ProductId) && + !invalidOrderStateList.Contains(o.OrderState) && + o.StartTime >= recentDate) + .GroupBy((osku, o) => osku.ProductId) + .ToList(g => new + { + ProductId = g.Key, + ItemTotal = g.Sum(g.Value.Item1.ItemTotal) + }); + + var recent30daySkuItemCountGroups = fsql.Select() + .LeftJoin((osku, o) => osku.OrderId == o.Id) + .Where((osku, o) => skuIdList.Contains(osku.SkuId) && + !invalidOrderStateList.Contains(o.OrderState) && + o.StartTime >= recentDate) + .GroupBy((osku, o) => osku.SkuId) + .ToList(g => new + { + SkuId = g.Key, + ItemTotal = g.Sum(g.Value.Item1.ItemTotal) + }); + foreach (var scheme in purchaseSchemeList) { var schemeProductList = purchaseSchemeProductList.Where(ps => ps.SkuPurchaseSchemeId == scheme.Id); @@ -747,6 +777,11 @@ namespace BBWYB.Server.Business } } #endregion + + #region 近30天spu/sku销量 + scheme.Recent30DaySpuItemCount = Convert.ToInt64(recent30daySpuItemCountGroups.FirstOrDefault(x => x.ProductId == scheme.ProductId)?.ItemTotal ?? 0); + scheme.Recent30DaySkuItemCount = Convert.ToInt64(recent30daySkuItemCountGroups.FirstOrDefault(x => x.SkuId == scheme.SkuId)?.ItemTotal ?? 0); + #endregion } } return purchaseSchemeList; From 02a55d1ec9ade6ced0e5aa12877c86445a5c4bd0 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 5 Oct 2023 11:34:24 +0800 Subject: [PATCH 036/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=90=84=E7=BB=9F=E8=AE=A1=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 131 +++++++++++++----- .../PurchaseScheme/QuerySchemeRequest.cs | 5 + .../PurchaseScheme/PurchaseSchemeResponse.cs | 5 + 3 files changed, 105 insertions(+), 36 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 045eaa4..c83d183 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -395,6 +395,7 @@ namespace BBWYB.Server.Business psReq.SchemeGroupId = newPurchaseGroupId; var defaultCost = 0M; decimal? bargainingCost = null; + var isContainsActualPrice = psReq.PurchaseSchemeProductList.Any(pspReq => pspReq.PurchaseSchemeProductSkuList.Any(pssReq => pssReq.ActualPrice != null)); var ps = new PurchaseScheme() { CreateTime = DateTime.Now, @@ -426,11 +427,13 @@ namespace BBWYB.Server.Business //ps.DefaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); defaultCost += pssReq.DefaultPrice ?? 0; - if (pssReq.ActualPrice != null && pssReq.ActualPrice > 0M) + if (isContainsActualPrice) { if (bargainingCost == null) bargainingCost = 0M; bargainingCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); + if (pssReq.ActualPrice != null && pssReq.ActualPrice > 0) + pss.LastBargainingTime = DateTime.Now; } #region 处理历史版本 @@ -453,6 +456,8 @@ namespace BBWYB.Server.Business ps.DefaultCost = defaultCost; ps.BargainingCost = bargainingCost; + if (bargainingCost != null) + ps.LastBargainingTime = DateTime.Now; var historyPs = ps.Map(); historyPs.HistoryId = idGenerator.NewLong(); insertHistoryPSList.Add(historyPs); @@ -465,7 +470,15 @@ namespace BBWYB.Server.Business { ExtractNewPurchaser(batchCURDSchemeRequest.EditPurchaseSchemeList, newPurchaserList); var editSchemeIdList = batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id).ToList(); - List dbPurchaseSchemes = fsql.Select().Where(ps => editSchemeIdList.Contains(ps.Id)).ToList(); + var dbPurchaseSchemes = GetPurchaseSchemeList(new QuerySchemeRequest() + { + SchemeIdList = editSchemeIdList, + IncludePurchaseSkuBasicInfo = 0, + IncludeSkuStatisticsInfo = 0 + }); + var dbPssList = dbPurchaseSchemes.SelectMany(ps => ps.PurchaseSchemeProductList.SelectMany(psp => psp.PurchaseSchemeProductSkuList)); + + //List dbPurchaseSchemes = fsql.Select().Where(ps => editSchemeIdList.Contains(ps.Id)).ToList(); deletePartsSchemeIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id)); foreach (var psReq in batchCURDSchemeRequest.EditPurchaseSchemeList) @@ -477,6 +490,7 @@ namespace BBWYB.Server.Business var newVersion = dbps.Version + 1; //采购方案版本 var defaultCost = 0M; decimal? bargainingCost = null; //只有当任意配件包含议价成本时才具备此值 + var isContainsActualPrice = psReq.PurchaseSchemeProductList.Any(pspReq => pspReq.PurchaseSchemeProductSkuList.Any(pssReq => pssReq.ActualPrice != null)); foreach (var pspReq in psReq.PurchaseSchemeProductList) { var psp = pspReq.Map(); @@ -491,14 +505,19 @@ namespace BBWYB.Server.Business pss.Id = idGenerator.NewLong(); pss.CreateTime = DateTime.Now; pss.SkuPurchaseSchemeId = schemeId; + var dbPss = dbPssList.FirstOrDefault(x => x.SkuId == pssReq.SkuId && x.PurchaseSkuId == pssReq.PurchaseSkuId && x.SkuPurchaseSchemeId == schemeId); + pss.LastBargainingTime = dbPss?.LastBargainingTime; addPurchaseSchemeProductSkuList.Add(pss); - //defaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); + defaultCost += pssReq.DefaultPrice ?? 0; - if (pssReq.ActualPrice != null && pssReq.ActualPrice > 0M) + if (isContainsActualPrice) { if (bargainingCost == null) bargainingCost = 0M; bargainingCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); + + if (pssReq.ActualPrice != null && pssReq.ActualPrice > 0M && dbPss != null && dbPss.ActualPrice != pssReq.ActualPrice) + pss.LastBargainingTime = DateTime.Now; } #region 处理历史版本 @@ -523,6 +542,7 @@ namespace BBWYB.Server.Business var psupdate = fsql.Update(schemeId) .Set(ps => ps.DefaultCost, defaultCost) .Set(ps => ps.BargainingCost, bargainingCost) + .SetIf(bargainingCost != null && bargainingCost != dbps.BargainingCost, ps => ps.LastBargainingTime, DateTime.Now) .Set(ps => ps.HYSchemeId, psReq.HYSchemeId) .Set(ps => ps.HYBDId, psReq.HYBDId) .Set(ps => ps.Version, newVersion); @@ -677,29 +697,61 @@ namespace BBWYB.Server.Business var purchaseSchemeProductSkuList = fsql.Select().Where(p => purchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)) .ToList().Map>(); - var recent30daySpuItemCountGroups = fsql.Select() - .LeftJoin((osku, o) => osku.OrderId == o.Id) - .Where((osku, o) => spuIdList.Contains(osku.ProductId) && - !invalidOrderStateList.Contains(o.OrderState) && - o.StartTime >= recentDate) - .GroupBy((osku, o) => osku.ProductId) - .ToList(g => new - { - ProductId = g.Key, - ItemTotal = g.Sum(g.Value.Item1.ItemTotal) - }); - - var recent30daySkuItemCountGroups = fsql.Select() - .LeftJoin((osku, o) => osku.OrderId == o.Id) - .Where((osku, o) => skuIdList.Contains(osku.SkuId) && - !invalidOrderStateList.Contains(o.OrderState) && - o.StartTime >= recentDate) - .GroupBy((osku, o) => osku.SkuId) - .ToList(g => new - { - SkuId = g.Key, - ItemTotal = g.Sum(g.Value.Item1.ItemTotal) - }); + if (request.IncludeSkuStatisticsInfo == 1) + { + var recent30daySpuItemCountGroups = fsql.Select() + .LeftJoin((osku, o) => osku.OrderId == o.Id) + .Where((osku, o) => spuIdList.Contains(osku.ProductId) && + !invalidOrderStateList.Contains(o.OrderState) && + o.StartTime >= recentDate) + .GroupBy((osku, o) => osku.ProductId) + .ToList(g => new + { + ProductId = g.Key, + ItemTotal = g.Sum(g.Value.Item1.ItemTotal) + }); + + var recent30daySkuItemCountGroups = fsql.Select() + .LeftJoin((osku, o) => osku.OrderId == o.Id) + .Where((osku, o) => skuIdList.Contains(osku.SkuId) && + !invalidOrderStateList.Contains(o.OrderState) && + o.StartTime >= recentDate) + .GroupBy((osku, o) => osku.SkuId) + .ToList(g => new + { + SkuId = g.Key, + ItemTotal = g.Sum(g.Value.Item1.ItemTotal) + }); + + //sku最近使用的采购方案 + var skuRecentPurchaseList = fsql.Select() + .Where(ps => skuIdList.Contains(ps.SkuId)) + .GroupBy(ps => ps.SkuId) + .WithTempQuery(g => new { SkuId = g.Key, MaxTime = g.Max(g.Value.LastPurchaseTime) }) + .From() + .InnerJoin((ps1, ps2) => ps1.SkuId == ps2.SkuId && ps1.MaxTime == ps2.LastPurchaseTime) + .ToList((ps1, ps2) => new + { + SkuId = ps2.SkuId, + LastPurchaseTime = ps2.LastPurchaseTime, + LastPurchasePriceCost = ps2.LastPurchasePriceCost + }); + + foreach (var scheme in purchaseSchemeList) + { + #region 近30天spu/sku销量 + scheme.Recent30DaySpuItemCount = Convert.ToInt64(recent30daySpuItemCountGroups.FirstOrDefault(x => x.ProductId == scheme.ProductId)?.ItemTotal ?? 0); + scheme.Recent30DaySkuItemCount = Convert.ToInt64(recent30daySkuItemCountGroups.FirstOrDefault(x => x.SkuId == scheme.SkuId)?.ItemTotal ?? 0); + #endregion + + #region sku最近采购价和最近采购时间 + var recentScheme = skuRecentPurchaseList.FirstOrDefault(x => x.SkuId == scheme.SkuId); + scheme.SkuLastPurchasePriceCost = recentScheme?.LastPurchasePriceCost; + scheme.SkuLastPurchaseTime = recentScheme?.LastPurchaseTime; + #endregion + } + } + foreach (var scheme in purchaseSchemeList) { @@ -777,11 +829,6 @@ namespace BBWYB.Server.Business } } #endregion - - #region 近30天spu/sku销量 - scheme.Recent30DaySpuItemCount = Convert.ToInt64(recent30daySpuItemCountGroups.FirstOrDefault(x => x.ProductId == scheme.ProductId)?.ItemTotal ?? 0); - scheme.Recent30DaySkuItemCount = Convert.ToInt64(recent30daySkuItemCountGroups.FirstOrDefault(x => x.SkuId == scheme.SkuId)?.ItemTotal ?? 0); - #endregion } } return purchaseSchemeList; @@ -1127,7 +1174,9 @@ namespace BBWYB.Server.Business if (schemeList.Count() == 0) throw new BusinessException("采购方案不存在"); var scheme = schemeList[0]; + var isContainsActualPrice = scheme.PurchaseSchemeProductList.Any(pspReq => pspReq.PurchaseSchemeProductSkuList.Any(pssReq => pssReq.ActualPrice != null)); var defaultCost = 0M; + decimal? bargainingCost = null; long? pssId = null; foreach (var schemeProduct in scheme.PurchaseSchemeProductList) { @@ -1139,14 +1188,23 @@ namespace BBWYB.Server.Business tartegtPurchaseProductSku.PurchaseRatio = request.Ratio; pssId = tartegtPurchaseProductSku.Id; } + if (pssId == null) + throw new BusinessException("未找到需要更新的采购配件"); - defaultCost += schemeProduct.PurchaseSchemeProductSkuList.Sum(pss => ((pss.ActualPrice ?? pss.PurchaseSkuPrice) ?? 0) * (pss.PurchaseRatio ?? 1)); + defaultCost += schemeProduct.PurchaseSchemeProductSkuList.Sum(pss => (pss.PurchaseSkuPrice ?? 0) * (pss.PurchaseRatio ?? 1)); + if (isContainsActualPrice) + { + if (bargainingCost == null) + bargainingCost = 0M; + bargainingCost += schemeProduct.PurchaseSchemeProductSkuList.Sum(pss => ((pss.ActualPrice ?? pss.PurchaseSkuPrice) ?? 0) * (pss.PurchaseRatio ?? 1)); + } } - if (pssId == null) - throw new BusinessException("未找到需要更新的采购配件"); + fsql.Transaction(() => { - fsql.Update(request.SchemeId).Set(ps => ps.DefaultCost, defaultCost).ExecuteAffrows(); + fsql.Update(request.SchemeId).Set(ps => ps.DefaultCost, defaultCost) + .SetIf(bargainingCost != null, ps => ps.BargainingCost, bargainingCost) + .ExecuteAffrows(); fsql.Update(pssId.Value).Set(pss => pss.PurchaseRatio, request.Ratio).ExecuteAffrows(); }); return defaultCost; @@ -1329,6 +1387,7 @@ namespace BBWYB.Server.Business var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest() { IncludePurchaseSkuBasicInfo = 1, + IncludeSkuStatisticsInfo = 0, SchemeIdList = schemeIdList }); diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs index 419c3cb..94e748f 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs @@ -47,5 +47,10 @@ namespace BBWYB.Server.Model.Dto /// public int? IncludePurchaseSkuBasicInfo { get; set; } + /// + /// 是否包含店铺Sku统计信息 (最近采购时间/最近采购价/最近30天销量) 是=1 否=0或null + /// + public int? IncludeSkuStatisticsInfo { get; set; } + } } diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs index 562a1ad..d7dc078 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs @@ -17,6 +17,11 @@ namespace BBWYB.Server.Model.Dto /// public decimal? SkuLastPurchasePriceCost { get; set; } + /// + /// 店铺SKU的最近采购时间 + /// + public DateTime? SkuLastPurchaseTime { get; set; } + /// /// 近30天Spu销量 /// From b249036627b60fef12175ff1dd026cfe32421f4c Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 6 Oct 2023 14:23:53 +0800 Subject: [PATCH 037/222] 1 --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 45 +++++++++++-------- .../Db/PurchaseScheme/PurchaseScheme.cs | 5 +++ 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 3a7effa..de9ed2e 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -506,29 +506,38 @@ namespace BBWYB.Server.Business #endregion } - #region 更新采购方案 + #region 更新采购方案/配件 { var allCargoParamList = new List(); - request.CargoParamGroupList.ForEach(x => allCargoParamList.AddRange(x.CargoParamList)); - var cargoParamGroupsBySchemeList = allCargoParamList.GroupBy(c => c.SchemeId); - foreach (var cargoParamGroupsByScheme in cargoParamGroupsBySchemeList) - { - var schemeId = cargoParamGroupsByScheme.Key; - var skuId = cargoParamGroupsByScheme.FirstOrDefault().BelongSkuId; - - var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId) - .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1)) - .DefaultIfEmpty(0M) - .First()); - var purchasedAmount = insertOrderCostDetails.Where(ocd => ocd.SkuId == skuId).Sum(ocd => ocd.SkuAmount); - var update = fsql.Update(schemeId).Set(ps => ps.LastPurchaseTime, DateTime.Now) - .Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost) - .Set(ps => ps.PurchasedCount + 1) - .Set(ps => ps.PurchasedAmount + purchasedAmount); - updatePurchaseSchemeList.Add(update); + #region 更新采购方案 + { + var cargoParamGroupsBySchemeList = allCargoParamList.GroupBy(c => c.SchemeId); + foreach (var cargoParamGroupsByScheme in cargoParamGroupsBySchemeList) + { + var schemeId = cargoParamGroupsByScheme.Key; + var skuId = cargoParamGroupsByScheme.FirstOrDefault().BelongSkuId; + var skuItemCount = orderSkus.FirstOrDefault(osku => osku.SkuId == skuId)?.ItemTotal ?? 0; + + var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId) + .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1)) + .DefaultIfEmpty(0M) + .First()); + var purchasedAmount = insertOrderCostDetails.Where(ocd => ocd.SkuId == skuId).Sum(ocd => ocd.SkuAmount); + var update = fsql.Update(schemeId).Set(ps => ps.LastPurchaseTime, DateTime.Now) + .Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost) + .Set(ps => ps.PurchasedCount + 1) + .Set(ps => ps.PurchasedItemCount + skuItemCount) + .Set(ps => ps.PurchasedAmount + purchasedAmount); + updatePurchaseSchemeList.Add(update); + } } + #endregion + + #region 更新采购配件 + + #endregion } #endregion diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs index b9679e5..59c320b 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs @@ -103,6 +103,11 @@ namespace BBWYB.Server.Model /// 最近议价日期 /// public DateTime? LastBargainingTime { get; set; } + + /// + /// 采购件数 + /// + public int? PurchasedItemCount { get; set; } = 0; } } From 28b3aea00cdf23e44f6646b1af15f3c3505611e6 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 7 Oct 2023 00:31:47 +0800 Subject: [PATCH 038/222] 1 --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index de9ed2e..5b5c5f9 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -322,6 +322,7 @@ namespace BBWYB.Server.Business List insertOrderPurchaseInfos = new List(); List insertOrderPurchaseSkuInfos = new List(); List> updatePurchaseSchemeList = new List>(); + List> updatePssList = new List>(); List insertOrderPurchaseRelationInfoList = new List(); List updatePurchaseTimeLimitTaskOrderSkuList = new List(); List> updatePurchaserList = new List>(); @@ -536,7 +537,12 @@ namespace BBWYB.Server.Business #endregion #region 更新采购配件 - + { + foreach (var cargoParam in allCargoParamList) + { + + } + } #endregion } #endregion From afd26b018f3efb6343a45ece7d7232b22613725a Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 7 Oct 2023 00:59:49 +0800 Subject: [PATCH 039/222] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E9=85=8D=E4=BB=B6=E6=9C=80=E8=BF=91=E9=87=87=E8=B4=AD=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 5b5c5f9..bdeef82 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -539,8 +539,15 @@ namespace BBWYB.Server.Business #region 更新采购配件 { foreach (var cargoParam in allCargoParamList) - { - + { + var createOrderItem = createdPurchaseOrderItemList.FirstOrDefault(x => x.SkuId == cargoParam.SkuId); + if (createOrderItem != null) + { + var update = fsql.Update() + .Set(pss => pss.LastPurchasePriceCost, createOrderItem.Price) + .Where(pss => pss.SkuId == cargoParam.SkuId && pss.SkuPurchaseSchemeId == cargoParam.SchemeId); + updatePssList.Add(update); + } } } #endregion @@ -742,6 +749,11 @@ namespace BBWYB.Server.Business foreach (var update in updatePurchaseSchemeList) update.ExecuteAffrows(); } + if (updatePssList.Count() > 0) + { + foreach (var update in updatePssList) + update.ExecuteAffrows(); + } fsql.Update(request.OrderId).Set(o => o.OrderState, dbOrder.OrderState) .SetIf(!string.IsNullOrEmpty(request.Remark), o => o.PurchaseRemark, request.Remark) .Set(o => o.IsPurchased, true) From db62bd67d020b59f7b5135d807c262d648fa932b Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 7 Oct 2023 01:08:25 +0800 Subject: [PATCH 040/222] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=96=B9=E6=A1=88LastPurchasePriceCost=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index bdeef82..10e787c 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -521,10 +521,17 @@ namespace BBWYB.Server.Business var skuId = cargoParamGroupsByScheme.FirstOrDefault().BelongSkuId; var skuItemCount = orderSkus.FirstOrDefault(osku => osku.SkuId == skuId)?.ItemTotal ?? 0; - var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId) - .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1)) - .DefaultIfEmpty(0M) - .First()); + //var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId) + // .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1)) + // .DefaultIfEmpty(0M) + // .First()); + + var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => + { + return (createdPurchaseOrderItemList.FirstOrDefault(x => x.SkuId == cargoParam.SkuId)?.Price ?? 0) * (cargoParam.PurchaseRatio ?? 1); + }); + + var purchasedAmount = insertOrderCostDetails.Where(ocd => ocd.SkuId == skuId).Sum(ocd => ocd.SkuAmount); var update = fsql.Update(schemeId).Set(ps => ps.LastPurchaseTime, DateTime.Now) .Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost) From 03205b39a7c62b893aae0c2a943a9c6399dcf525 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 7 Oct 2023 10:26:24 +0800 Subject: [PATCH 041/222] =?UTF-8?q?=E8=A7=A6=E5=8F=91=E5=BE=85=E8=AE=AE?= =?UTF-8?q?=E4=BB=B7=E6=9D=A1=E4=BB=B6=E5=A2=9E=E5=8A=A0=E9=A6=96=E6=AC=A1?= =?UTF-8?q?=E9=87=87=E8=B4=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sync/OrderSyncBusiness.cs | 60 ++++++++++++++++--- BBWYB.Server.Model/Db/Order/OrderSku.cs | 8 ++- BBWYB.Server.Model/Enums.cs | 8 +++ 3 files changed, 66 insertions(+), 10 deletions(-) diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 55ddaa1..2c979da 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -123,7 +123,8 @@ namespace BBWYB.Server.Business.Sync #region DB Operation List insertOrderList = new List(); List insertOrderSkuList = new List(); - List updateOrderSkuIdList_OptimizationFlag = new List(); + //List updateOrderSkuIdList_OptimizationFlag = new List(); + Dictionary> updateOSkuOptimizationFlagByReasonGroups = new Dictionary>(); List insertOrderConsigneeList = new List(); List insertTimeLimitTaskList = new List(); List deleteTimeLimitTaskOrderIdList = new List(); @@ -375,11 +376,14 @@ namespace BBWYB.Server.Business.Sync { var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s => { - if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20) - return true; - if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) - return true; - return false; + //if (insertSpuTotalSaleInfoList.Any(x => x.ProductId == s.ProductId)) + // return true; //首次触发 + //if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20) + // return true; //销量大于20 + //if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) + // return true; + //return false; + return GetOptimizationReason(s, insertSpuTotalSaleInfoList) != null; }); if (optimizationSpuSaleList.Count() > 0) { @@ -393,13 +397,27 @@ namespace BBWYB.Server.Business.Sync if (osku.ProductId != spuSale.ProductId) continue; + var triggerOptimizationReason = GetOptimizationReason(spuSale, insertSpuTotalSaleInfoList); + #region 更新sku优化标记 var oskuId = long.Parse(osku.Id); var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); if (insertOrderSku != null) + { insertOrderSku.IsNeedOptimization = 1; + insertOrderSku.TriggerOptimizationReason = triggerOptimizationReason; + } else - updateOrderSkuIdList_OptimizationFlag.Add(oskuId); + { + //updateOrderSkuIdList_OptimizationFlag.Add(oskuId); + if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(triggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList)) + { + updateOSkuOptimizationFlagByReasonList = new List(); + updateOSkuOptimizationFlagByReasonGroups.Add(triggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList); + } + updateOSkuOptimizationFlagByReasonList.Add(oskuId); + } + #endregion #region 创建待议价任务 @@ -474,8 +492,21 @@ namespace BBWYB.Server.Business.Sync .ExecuteAffrows(); } - if (updateOrderSkuIdList_OptimizationFlag.Count() > 0) - fsql.Update(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows(); + //if (updateOrderSkuIdList_OptimizationFlag.Count() > 0) + // fsql.Update(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows(); + if (updateOSkuOptimizationFlagByReasonGroups.Keys.Count() > 0) + { + foreach (var triggerOptimizationReason in updateOSkuOptimizationFlagByReasonGroups.Keys) + { + var updateOSkuListOptimizationFlagList = updateOSkuOptimizationFlagByReasonGroups[triggerOptimizationReason]; + if (updateOSkuListOptimizationFlagList != null && updateOSkuListOptimizationFlagList.Count > 0) + { + fsql.Update(updateOSkuListOptimizationFlagList).Set(osku => osku.IsNeedOptimization, 1) + .Set(osku => osku.TriggerOptimizationReason, triggerOptimizationReason) + .ExecuteAffrows(); + } + } + } foreach (var key in deductionSkuCountDictionary.Keys) fsql.Update(key).Set(s => s.ItemCount - deductionSkuCountDictionary[key]).ExecuteAffrows(); @@ -576,5 +607,16 @@ namespace BBWYB.Server.Business.Sync return Enums.OrderState.已完成; return null; } + + public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s, List insertSpuTotalSaleInfoList) + { + if (insertSpuTotalSaleInfoList.Any(x => x.ProductId == s.ProductId)) + return Enums.TriggerOptimizationReason.首次采购; //首次触发 + if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20) + return Enums.TriggerOptimizationReason.首次优化; //销量大于20 + if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) + return Enums.TriggerOptimizationReason.再次优化; + return null; + } } } diff --git a/BBWYB.Server.Model/Db/Order/OrderSku.cs b/BBWYB.Server.Model/Db/Order/OrderSku.cs index f80eaa9..fda8c84 100644 --- a/BBWYB.Server.Model/Db/Order/OrderSku.cs +++ b/BBWYB.Server.Model/Db/Order/OrderSku.cs @@ -106,7 +106,7 @@ namespace BBWYB.Server.Model.Db /// /// 是否需要优化 是=1 否=0 /// - [Column(DbType = "int(1)", IsNullable = true)] + [Column(DbType = "int(1)", IsNullable = true)] public int? IsNeedOptimization { get; set; } = 0; /// @@ -114,6 +114,12 @@ namespace BBWYB.Server.Model.Db /// [Column(DbType = "int(1)", IsNullable = true)] public int? IsOptimizationCompleted { get; set; } = 0; + + /// + /// 触发优化原因 + /// + [Column(DbType = "int(1)", MapType = typeof(int?), IsNullable = true)] + public Enums.TriggerOptimizationReason? TriggerOptimizationReason { get; set; } } } diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index e07a061..dc80d1e 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -322,5 +322,13 @@ { 未平价 = 0, 已平价 = 1, 部分平价 = 2 } + + /// + /// 触发优化原因 首次采购 = 0, 首次优化 = 1, 再次优化 = 2 + /// + public enum TriggerOptimizationReason + { + 首次采购 = 0, 首次优化 = 1, 再次优化 = 2 + } } } From b807998180ba7bdc5f5c5607bfee72c0e0ce3806 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 8 Oct 2023 11:32:57 +0800 Subject: [PATCH 042/222] =?UTF-8?q?30=E5=A4=A9=E9=94=80=E9=87=8F=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E6=8E=92=E9=99=A4=E5=BE=85=E9=87=87=E8=B4=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index c83d183..5dd3cd7 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -26,7 +26,13 @@ namespace BBWYB.Server.Business { this.purchaseProductAPIService = purchaseProductAPIService; this.restApiService = restApiService; - this.invalidOrderStateList = new List() { Enums.OrderState.待付款, Enums.OrderState.已取消 }; + this.invalidOrderStateList = new List() + { + Enums.OrderState.待付款, + Enums.OrderState.已取消, + Enums.OrderState.等待采购, + Enums.OrderState.部分采购 + }; } private void ExtractNewPurchaser(IList purchaserSchemeList, IList addPurchaserList) where T : InputPurchaseSchemeRequest From dee7a08fbdb30a20a3e651db1b5532181b17bc3e Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 9 Oct 2023 00:43:28 +0800 Subject: [PATCH 043/222] =?UTF-8?q?=E9=94=80=E9=87=8F=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E6=94=B9=E5=8F=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Order/OrderBusiness.cs | 26 +++++++++++++++--- .../Sync/OrderSyncBusiness.cs | 18 +++++++------ .../Db/Product/SpuTotalSaleInfo.cs | 27 ++++++++++++++++--- 3 files changed, 56 insertions(+), 15 deletions(-) diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 13dd1cd..9ee7c19 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -938,6 +938,23 @@ namespace BBWYB.Server.Business { if (!string.IsNullOrEmpty(request.ProductId) || string.IsNullOrEmpty(request.SkuId) || request.ShopId == 0) throw new BusinessException("参数无效"); + + var spuSaleInfo = fsql.Select(request.ProductId).ToOne(); + if (spuSaleInfo == null) + throw new BusinessException($"未找到spu{request.ProductId}销量"); + + var updateSpuSaleInfo = fsql.Update(request.ProductId) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == false, s => s.IsFirstPurchaseCompleted, true) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == false, s => s.FirstPurchaseCompletedItemCount == s.ItemCount) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == true && + spuSaleInfo.IsFirstOptimizationCompleted == false, s => s.IsFirstOptimizationCompleted, true) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == true && + spuSaleInfo.IsFirstOptimizationCompleted == false, s => s.FirstOptimizationCompletedItemCount == s.ItemCount) + .Set(s => s.LastOptimizationItemCount == s.ItemCount) + .Set(s => s.LastOptimizationTime, DateTime.Now) + .Set(s => s.UpdateTime, DateTime.Now); + + fsql.Transaction(() => { fsql.Update().Set(osku => osku.IsOptimizationCompleted, 1) @@ -956,10 +973,11 @@ namespace BBWYB.Server.Business t.TaskType == Enums.TimeLimitTaskType.待议价任务) .ExecuteAffrows(); - fsql.Update(request.ProductId).Set(s => s.LastOptimizationItemCount == s.ItemCount) - .Set(s => s.LastOptimizationTime, DateTime.Now) - .Set(s => s.UpdateTime, DateTime.Now) - .ExecuteAffrows(); + //fsql.Update(request.ProductId).Set(s => s.LastOptimizationItemCount == s.ItemCount) + // .Set(s => s.LastOptimizationTime, DateTime.Now) + // .Set(s => s.UpdateTime, DateTime.Now) + // .ExecuteAffrows(); + updateSpuSaleInfo?.ExecuteAffrows(); }); } diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 2c979da..f85dd4d 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -383,7 +383,7 @@ namespace BBWYB.Server.Business.Sync //if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) // return true; //return false; - return GetOptimizationReason(s, insertSpuTotalSaleInfoList) != null; + return GetOptimizationReason(s) != null; }); if (optimizationSpuSaleList.Count() > 0) { @@ -397,7 +397,7 @@ namespace BBWYB.Server.Business.Sync if (osku.ProductId != spuSale.ProductId) continue; - var triggerOptimizationReason = GetOptimizationReason(spuSale, insertSpuTotalSaleInfoList); + var triggerOptimizationReason = GetOptimizationReason(spuSale); #region 更新sku优化标记 var oskuId = long.Parse(osku.Id); @@ -608,13 +608,15 @@ namespace BBWYB.Server.Business.Sync return null; } - public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s, List insertSpuTotalSaleInfoList) + public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s) { - if (insertSpuTotalSaleInfoList.Any(x => x.ProductId == s.ProductId)) - return Enums.TriggerOptimizationReason.首次采购; //首次触发 - if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20) - return Enums.TriggerOptimizationReason.首次优化; //销量大于20 - if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) + if (s.IsFirstPurchaseCompleted == false) + return Enums.TriggerOptimizationReason.首次采购; + if (s.IsFirstPurchaseCompleted == true && + s.IsFirstOptimizationCompleted == false && + s.ItemCount - s.FirstPurchaseCompletedItemCount >= 20) + return Enums.TriggerOptimizationReason.首次优化; + if (s.IsFirstOptimizationCompleted == true && s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) return Enums.TriggerOptimizationReason.再次优化; return null; } diff --git a/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs b/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs index ca1b63b..92dd93e 100644 --- a/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs +++ b/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs @@ -10,21 +10,42 @@ namespace BBWYB.Server.Model.Db public partial class SpuTotalSaleInfo { - /// - /// Spu - /// [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] public string ProductId { get; set; } [Column(DbType = "datetime")] public DateTime? CreateTime { get; set; } + /// + /// 完成首次优化时的销量 + /// + [Column(DbType = "bigint")] + public long? FirstOptimizationCompletedItemCount { get; set; } = 0; + + /// + /// 完成首次采购时的销量 + /// + [Column(DbType = "bigint")] + public long? FirstPurchaseCompletedItemCount { get; set; } = 0; + /// /// 是否有效 /// public bool? IsEnabled { get; set; } = false; + /// + /// 是否完成首次优化 + /// + + public bool? IsFirstOptimizationCompleted { get; set; } = false; + + /// + /// 是否完成首次采购 + /// + + public bool? IsFirstPurchaseCompleted { get; set; } = false; + /// /// 销量,销售件数 /// From 36535f0829ded9e989ae8ae881dc9c64f01c67db Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 9 Oct 2023 13:38:45 +0800 Subject: [PATCH 044/222] =?UTF-8?q?=E4=BF=AE=E8=A1=A5=E9=94=80=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataRepair/DataRepairBusiness.cs | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index a18cacc..fb2be4e 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -40,7 +40,6 @@ namespace BBWYB.Server.Business kuaiDi100Manager.SubscribeKuaiDi100(waybillNo, targetCompanyCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish"); } - public void SupplementOrderSkuCost() { var orderSkuCostList = fsql.Select().InnerJoin((ocd, o) => ocd.OrderId == o.Id) @@ -510,5 +509,54 @@ namespace BBWYB.Server.Business } } } + + public void RepairHistoryItemCount() + { + List insertSpuSaleInfoList = new List(); + List insertSkuSaleInfoList = new List(); + + var noOrderStateList = new List() + { + Enums.OrderState.已取消, + Enums.OrderState.待付款 + }; + var spuSaleGroups = fsql.Select() + .InnerJoin((osku, o) => osku.OrderId == o.Id) + .Where((osku, o) => !noOrderStateList.Contains(o.OrderState)) + .GroupBy((osku, o) => new { osku.ProductId, o.ShopId }) + .ToList(g => new + { + g.Key.ProductId, + g.Key.ShopId, + ItemCount = g.Sum(g.Value.Item1.ItemTotal) + }); + + var skuSaleGroups = fsql.Select() + .InnerJoin((osku, o) => osku.OrderId == o.Id) + .Where((osku, o) => !noOrderStateList.Contains(o.OrderState)) + .GroupBy((osku, o) => new { osku.ProductId, osku.SkuId, o.ShopId }) + .ToList(g => new + { + g.Key.ProductId, + g.Key.SkuId, + g.Key.ShopId, + ItemCount = g.Sum(g.Value.Item1.ItemTotal) + }); + + foreach (var spuSale in spuSaleGroups) + { + var insertSpuSale = new SpuTotalSaleInfo() + { + ProductId = spuSale.ProductId, + ShopId = spuSale.ShopId, + CreateTime = DateTime.Now, + IsEnabled = true, + ItemCount = Convert.ToInt64(spuSale.ItemCount), + UpdateTime = DateTime.Now, + LastOptimizationItemCount = Convert.ToInt64(spuSale.ItemCount), + LastOptimizationTime = DateTime.Now + }; + } + } } } From 3f2441ae159dc969318bf3a38260a1a8f4a5b3ef Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 9 Oct 2023 19:19:57 +0800 Subject: [PATCH 045/222] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DataRepairController.cs | 6 + .../DataRepair/DataRepairBusiness.cs | 162 ++++++++++++++---- 2 files changed, 133 insertions(+), 35 deletions(-) diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index 36204fd..2d16d68 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -78,5 +78,11 @@ namespace BBWYB.Server.API.Controllers { dataRepairBusiness.BatchCompleteOrder(); } + + [HttpPost] + public void RepairHistoryItemCount() + { + dataRepairBusiness.RepairHistoryItemCount(); + } } } diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index fb2be4e..3ea8042 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -514,49 +514,141 @@ namespace BBWYB.Server.Business { List insertSpuSaleInfoList = new List(); List insertSkuSaleInfoList = new List(); - var noOrderStateList = new List() { Enums.OrderState.已取消, Enums.OrderState.待付款 }; - var spuSaleGroups = fsql.Select() - .InnerJoin((osku, o) => osku.OrderId == o.Id) - .Where((osku, o) => !noOrderStateList.Contains(o.OrderState)) - .GroupBy((osku, o) => new { osku.ProductId, o.ShopId }) - .ToList(g => new - { - g.Key.ProductId, - g.Key.ShopId, - ItemCount = g.Sum(g.Value.Item1.ItemTotal) - }); - - var skuSaleGroups = fsql.Select() - .InnerJoin((osku, o) => osku.OrderId == o.Id) - .Where((osku, o) => !noOrderStateList.Contains(o.OrderState)) - .GroupBy((osku, o) => new { osku.ProductId, osku.SkuId, o.ShopId }) - .ToList(g => new - { - g.Key.ProductId, - g.Key.SkuId, - g.Key.ShopId, - ItemCount = g.Sum(g.Value.Item1.ItemTotal) - }); - - foreach (var spuSale in spuSaleGroups) + + #region 补销量 { - var insertSpuSale = new SpuTotalSaleInfo() + var spuSaleGroups = fsql.Select() + .InnerJoin((osku, o) => osku.OrderId == o.Id) + .Where((osku, o) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11) + .GroupBy((osku, o) => new { osku.ProductId, o.ShopId }) + .ToList(g => new + { + g.Key.ProductId, + g.Key.ShopId, + ItemCount = g.Sum(g.Value.Item1.ItemTotal) + }); + + var skuSaleGroups = fsql.Select() + .InnerJoin((osku, o) => osku.OrderId == o.Id) + .Where((osku, o) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11) + .GroupBy((osku, o) => new { osku.ProductId, osku.SkuId, o.ShopId }) + .ToList(g => new + { + g.Key.ProductId, + g.Key.SkuId, + g.Key.ShopId, + ItemCount = g.Sum(g.Value.Item1.ItemTotal) + }); + + foreach (var spuSale in spuSaleGroups) { - ProductId = spuSale.ProductId, - ShopId = spuSale.ShopId, - CreateTime = DateTime.Now, - IsEnabled = true, - ItemCount = Convert.ToInt64(spuSale.ItemCount), - UpdateTime = DateTime.Now, - LastOptimizationItemCount = Convert.ToInt64(spuSale.ItemCount), - LastOptimizationTime = DateTime.Now - }; + var itemCount = Convert.ToInt64(spuSale.ItemCount); + var insertSpuSale = new SpuTotalSaleInfo() + { + ProductId = spuSale.ProductId, + ShopId = spuSale.ShopId, + CreateTime = DateTime.Now, + IsEnabled = true, + ItemCount = itemCount, + UpdateTime = DateTime.Now, + LastOptimizationItemCount = itemCount, + LastOptimizationTime = DateTime.Now, + FirstOptimizationCompletedItemCount = itemCount, + FirstPurchaseCompletedItemCount = 0, + IsFirstOptimizationCompleted = true, + IsFirstPurchaseCompleted = true + }; + insertSpuSaleInfoList.Add(insertSpuSale); + } + + foreach (var skuSale in skuSaleGroups) + { + var insertSkuSale = new SkuTotalSaleInfo() + { + ProductId = skuSale.ProductId, + SkuId = skuSale.SkuId, + ShopId = skuSale.ShopId, + CreateTime = DateTime.Now, + IsEnabled = true, + ItemCount = Convert.ToInt64(skuSale.ItemCount), + UpdateTime = DateTime.Now + }; + insertSkuSaleInfoList.Add(insertSkuSale); + } } + #endregion + + #region 采购方案累计信息 + #region 采购件数 + /* + select opi.SchemeId,sum(osku.ItemTotal) from orderpurchaserelationinfo opi + inner join `order` o on opi.OrderId=o.Id + inner join ordersku osku on osku.OrderId=opi.OrderId and osku.SkuId=opi.BelongSkuId + where o.OrderState not in (0,6) and o.ShopId!=11 + group by opi.SchemeId; + */ + + { + var psItemCountGroups = fsql.Select() + .InnerJoin((opi, o, osku) => opi.OrderId == o.Id) + .InnerJoin((opi, o, osku) => osku.OrderId == opi.OrderId && osku.SkuId == opi.BelongSkuId) + .Where((opi, o, osku) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11) + .GroupBy((opi, o, osku) => opi.SchemeId) + .ToList(g => new + { + SchemeId = g.Key, + ItemTotal = g.Sum(g.Value.Item3.ItemTotal) + }); + } + #endregion + + #region 采购金额 + /* + select opi.SchemeId,sum(osc.SkuAmount) from orderpurchaserelationinfo opi + inner join `order` o on opi.OrderId=o.Id + inner join orderSkuCost osc on osc.OrderId=opi.OrderId and osc.SkuId = opi.BelongSkuId + where o.OrderState not in (0,6) and o.ShopId!=11 + group by opi.SchemeId; + */ + { + var psAmountGroups = fsql.Select() + .InnerJoin((opi, o, osc) => opi.OrderId == o.Id) + .InnerJoin((opi, o, osc) => osc.OrderId == opi.OrderId && osc.SkuId == opi.BelongSkuId) + .Where((opi, o, osc) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11) + .GroupBy((opi, o, osc) => opi.SchemeId) + .ToList(g => new + { + SchemeId = g.Key, + Amount = g.Sum(g.Value.Item3.SkuAmount) + }); + } + #endregion + + + #endregion + + #region 采购商累计信息 + + #endregion + + fsql.Transaction(() => + { + fsql.Delete().Where(s => 1 == 1).ExecuteAffrows(); + fsql.Delete().Where(s => 1 == 1).ExecuteAffrows(); + fsql.Delete().Where(s => 1 == 1).ExecuteAffrows(); + fsql.Delete().Where(t => t.TaskType == Enums.TimeLimitTaskType.待议价任务).ExecuteAffrows(); + fsql.Update().Set(osku => osku.IsNeedOptimization, 0) + .Set(osku => osku.IsOptimizationCompleted, 0) + .Where(osku => osku.IsNeedOptimization == 1) + .ExecuteAffrows(); + fsql.Insert(insertSpuSaleInfoList).ExecuteAffrows(); + fsql.Insert(insertSkuSaleInfoList).ExecuteAffrows(); + }); } } } From 872ffd09a081373b3b736efe723b08d3c1a4c20f Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 10 Oct 2023 01:51:57 +0800 Subject: [PATCH 046/222] =?UTF-8?q?=E4=BF=AE=E8=A1=A5=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/ConverterExtensions.cs | 12 ++ .../DataRepair/DataRepairBusiness.cs | 125 +++++++++++++++++- 2 files changed, 136 insertions(+), 1 deletion(-) diff --git a/BBWYB.Common/Extensions/ConverterExtensions.cs b/BBWYB.Common/Extensions/ConverterExtensions.cs index 2bc884e..9f27cc3 100644 --- a/BBWYB.Common/Extensions/ConverterExtensions.cs +++ b/BBWYB.Common/Extensions/ConverterExtensions.cs @@ -13,5 +13,17 @@ return null; } } + + public static int? ToInt32(this object? o) + { + try + { + return Convert.ToInt32(o); + } + catch + { + return null; + } + } } } diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 3ea8042..9f7905d 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -9,6 +9,7 @@ using FreeSql; using SDKAdapter; using SDKAdapter.OperationPlatform.Client; using SDKAdapter.OperationPlatform.Models; +using System.Data; using System.Net.Http.Headers; using Yitter.IdGenerator; @@ -514,6 +515,9 @@ namespace BBWYB.Server.Business { List insertSpuSaleInfoList = new List(); List insertSkuSaleInfoList = new List(); + List updatePurchaseSchemeList = new List(); + List updatePurchaserList = new List(); + List insertSkuHistoryPurchaserRelationList = new List(); var noOrderStateList = new List() { Enums.OrderState.已取消, @@ -584,6 +588,7 @@ namespace BBWYB.Server.Business #endregion #region 采购方案累计信息 + #region 采购件数 /* select opi.SchemeId,sum(osku.ItemTotal) from orderpurchaserelationinfo opi @@ -604,6 +609,15 @@ namespace BBWYB.Server.Business SchemeId = g.Key, ItemTotal = g.Sum(g.Value.Item3.ItemTotal) }); + foreach (var psItemCount in psItemCountGroups) + { + updatePurchaseSchemeList.Add(new PurchaseScheme() + { + Id = psItemCount.SchemeId.Value, + PurchasedItemCount = Convert.ToInt32(psItemCount.ItemTotal), + PurchasedAmount = 0M + }); + } } #endregion @@ -626,14 +640,109 @@ namespace BBWYB.Server.Business SchemeId = g.Key, Amount = g.Sum(g.Value.Item3.SkuAmount) }); + foreach (var psAmount in psAmountGroups) + { + var ps = updatePurchaseSchemeList.FirstOrDefault(x => x.Id == psAmount.SchemeId); + if (ps == null) + { + ps = new PurchaseScheme() { Id = psAmount.SchemeId.Value, PurchasedItemCount = 0 }; + updatePurchaseSchemeList.Add(ps); + } + ps.PurchasedAmount = psAmount.Amount; + } } #endregion - #endregion #region 采购商累计信息 + { + #region 采购SKU数 + var purchaserPurchasedList = fsql.Select() + .InnerJoin((opri, o, opi) => opri.OrderId == o.Id) + .InnerJoin((opri, o, opi) => opi.OrderId == opri.OrderId && opi.IsEnabled == true) + .Where((opri, o, opi) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11 && !string.IsNullOrEmpty(opi.PurchaserId)) + .GroupBy((opri, o, opi) => new { o.ShopId, opi.PurchaserId, opri.BelongSkuId }) + .ToList(g => new + { + g.Key.ShopId, + g.Key.PurchaserId, + g.Key.BelongSkuId + }); + + var purchaserPurchasedGroups = purchaserPurchasedList.GroupBy(x => x.PurchaserId); + foreach (var g in purchaserPurchasedGroups) + { + updatePurchaserList.Add(new Purchaser() + { + Id = g.Key, + PurchasedSkuCount = g.Count(), + PurchasedCount = 0 + }); + insertSkuHistoryPurchaserRelationList.AddRange(g.Select(x => new SkuHistoryPurchaserRelation() + { + CreateTime = DateTime.Now, + Id = idGenerator.NewLong(), + PurchaserId = x.PurchaserId, + ShopId = x.ShopId, + SkuId = x.BelongSkuId + })); + } + #endregion + + #region 采购次数 + /* + select opi.PurchaserId,count(DISTINCT(opi.OrderId)) from orderpurchaserelationinfo opri + inner join `order` o on opri.OrderId=o.Id + inner join orderpurchaseinfo opi on opi.OrderId=opri.OrderId and opi.IsEnabled=1 + where o.OrderState not in (0,6) and o.ShopId !=11 and opi.PurchaserId is not null + group by opi.PurchaserId; + */ + var purchaserPurchasedCountList = fsql.Select() + .InnerJoin((opri, o, opi) => opri.OrderId == o.Id) + .InnerJoin((opri, o, opi) => opi.OrderId == opri.OrderId && opi.IsEnabled == true) + .Where((opri, o, opi) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11 && !string.IsNullOrEmpty(opi.PurchaserId)) + .GroupBy((opri, o, opi) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + //Count = g.Count(g.Value.Item3.OrderId.Distinct()) + Count = SqlExt.DistinctCount(g.Value.Item3.OrderId) + }); + + foreach (var pcount in purchaserPurchasedCountList) + { + var p = updatePurchaserList.FirstOrDefault(x => x.Id == pcount.PurchaserId); + if (p == null) + { + p = new Purchaser() { Id = pcount.PurchaserId, PurchasedSkuCount = 0 }; + updatePurchaserList.Add(p); + } + p.PurchasedCount = Convert.ToInt32(pcount.Count); + } + //var purchaserPurchasedCountDataTable = fsql.Ado.ExecuteDataTable(@"select opi.PurchaserId,count(DISTINCT(opi.OrderId)) from orderpurchaserelationinfo opri + // inner join `order` o on opri.OrderId = o.Id + // inner join orderpurchaseinfo opi on opi.OrderId = opri.OrderId and opi.IsEnabled = 1 + // where o.OrderState not in (0, 6) and o.ShopId != 11 and opi.PurchaserId is not null + // group by opi.PurchaserId;"); + + //foreach (DataRow dataRow in purchaserPurchasedCountDataTable.Rows) + //{ + // var purchaserId = dataRow[0].ToString(); + // var count = dataRow[1].ToInt32() ?? 0; + + // var p = updatePurchaserList.FirstOrDefault(x => x.Id == purchaserId); + // if (p == null) + // { + // p = new Purchaser() { Id = purchaserId, PurchasedSkuCount = 0 }; + // updatePurchaserList.Add(p); + // } + // p.PurchasedCount = count; + + //} + #endregion + } #endregion fsql.Transaction(() => @@ -642,12 +751,26 @@ namespace BBWYB.Server.Business fsql.Delete().Where(s => 1 == 1).ExecuteAffrows(); fsql.Delete().Where(s => 1 == 1).ExecuteAffrows(); fsql.Delete().Where(t => t.TaskType == Enums.TimeLimitTaskType.待议价任务).ExecuteAffrows(); + fsql.Delete().Where(s => 1 == 1).ExecuteAffrows(); fsql.Update().Set(osku => osku.IsNeedOptimization, 0) .Set(osku => osku.IsOptimizationCompleted, 0) .Where(osku => osku.IsNeedOptimization == 1) .ExecuteAffrows(); + foreach (var updatePs in updatePurchaseSchemeList) + { + fsql.Update(updatePs.Id).Set(ps => ps.PurchasedItemCount, updatePs.PurchasedItemCount) + .Set(ps => ps.PurchasedAmount, updatePs.PurchasedAmount) + .ExecuteAffrows(); + } + foreach (var updatePurchaser in updatePurchaserList) + { + fsql.Update(updatePurchaser.Id).Set(p => p.PurchasedSkuCount, updatePurchaser.PurchasedSkuCount) + .Set(p => p.PurchasedCount, updatePurchaser.PurchasedCount) + .ExecuteAffrows(); + } fsql.Insert(insertSpuSaleInfoList).ExecuteAffrows(); fsql.Insert(insertSkuSaleInfoList).ExecuteAffrows(); + fsql.Insert(insertSkuHistoryPurchaserRelationList).ExecuteAffrows(); }); } } From 938e6fd5e937eef43e417e14607ed4cd216ac243 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 15 Oct 2023 22:56:00 +0800 Subject: [PATCH 047/222] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E9=85=8D=E4=BB=B6=E6=9C=80=E8=BF=91=E9=87=87=E8=B4=AD=E4=BB=B7?= =?UTF-8?q?=E4=B8=8D=E6=AD=A3=E7=A1=AE=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 10e787c..ba1e15e 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -552,7 +552,7 @@ namespace BBWYB.Server.Business { var update = fsql.Update() .Set(pss => pss.LastPurchasePriceCost, createOrderItem.Price) - .Where(pss => pss.SkuId == cargoParam.SkuId && pss.SkuPurchaseSchemeId == cargoParam.SchemeId); + .Where(pss => pss.PurchaseSkuId == cargoParam.SkuId && pss.SkuPurchaseSchemeId == cargoParam.SchemeId); updatePssList.Add(update); } } From fed70120f3c7a323f06182ea57998f4f6970a105 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 20 Oct 2023 01:22:19 +0800 Subject: [PATCH 048/222] =?UTF-8?q?=E4=BF=AE=E8=A1=A5=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DataRepairController.cs | 6 ++ .../DataRepair/DataRepairBusiness.cs | 90 ++++++++++++++++++- 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index 2d16d68..86fa11a 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -84,5 +84,11 @@ namespace BBWYB.Server.API.Controllers { dataRepairBusiness.RepairHistoryItemCount(); } + + [HttpPost] + public void RepairPurchaseSkuLastPurchasePriceCost() + { + dataRepairBusiness.RepairPurchaseSkuLastPurchasePriceCost(); + } } } diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 9f7905d..7eceb2a 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -9,6 +9,8 @@ using FreeSql; using SDKAdapter; using SDKAdapter.OperationPlatform.Client; using SDKAdapter.OperationPlatform.Models; +using SDKAdapter.PurchasePlatform.Client; +using SDKAdapter.PurchasePlatform.Models; using System.Data; using System.Net.Http.Headers; using Yitter.IdGenerator; @@ -23,8 +25,9 @@ namespace BBWYB.Server.Business private FreeSqlMultiDBManager freeSqlMultiDBManager; private VenderBusiness venderBusiness; private OP_PlatformClientFactory opPlatformClientFactory; + private PP_PlatformClientFactory pp_PlatformClientFactory; 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) + public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness, PurchaseOrderBusiness purchaseOrderBusiness, FreeSqlMultiDBManager freeSqlMultiDBManager, VenderBusiness venderBusiness, OP_PlatformClientFactory opPlatformClientFactory, PP_PlatformClientFactory pp_PlatformClientFactory, RestApiService restApiService) : base(fsql, nLogManager, idGenerator) { this.kuaiDi100Manager = kuaiDi100Manager; this.purchaseSchemeBusiness = purchaseSchemeBusiness; @@ -32,6 +35,7 @@ namespace BBWYB.Server.Business this.freeSqlMultiDBManager = freeSqlMultiDBManager; this.venderBusiness = venderBusiness; this.opPlatformClientFactory = opPlatformClientFactory; + this.pp_PlatformClientFactory = pp_PlatformClientFactory; this.restApiService = restApiService; } @@ -653,6 +657,10 @@ namespace BBWYB.Server.Business } #endregion + #region 采购配件最近采购价 + + #endregion + #endregion #region 采购商累计信息 @@ -773,5 +781,85 @@ namespace BBWYB.Server.Business fsql.Insert(insertSkuHistoryPurchaserRelationList).ExecuteAffrows(); }); } + + public void RepairPurchaseSkuLastPurchasePriceCost() + { + //IDictionary> updatePssDictionary = new Dictionary>(); + List updatePssKeyList = new List(); + + var oriList = fsql.Select() + .InnerJoin((ori, ps, psp, pr) => ori.SchemeId == ps.Id) + .InnerJoin((ori, ps, psp, pr) => ps.Id == psp.SkuPurchaseSchemeId) + .InnerJoin((ori, ps, psp, pr) => pr.Id == psp.PurchaserId) + .Where((ori, ps, psp, pr) => pr.Platform == Enums.Platform.阿里巴巴 && fsql.Select().Where(pss => pss.PurchaseSkuId == ori.PurchaseSkuId && pss.LastPurchasePriceCost == null).Any()) + .OrderByDescending((ori, ps, psp, pr) => ori.CreateTime) + .ToList((ori, ps, psp, pr) => new + { + ori.OrderId, + ori.PurchaseOrderId, + ori.PurchaseSkuId, + ori.SchemeId, + ps.ShopId + }); + + var a = oriList.Any(x => x.SchemeId == 459761181151301); + + var purchaseAccountList = freeSqlMultiDBManager.MDSfsql.Select() + .InnerJoin((pa, s) => pa.ShopId == s.Id) + .Where((pa, s) => s.PlatformId == 10 && pa.PurchasePlatformId == "2") + .ToList((pa, s) => new + { + s.ShopId, + pa.AppKey, + pa.AppSecret, + pa.AppToken + }); + + var client = pp_PlatformClientFactory.GetClient(AdapterEnums.PlatformType.阿里巴巴); + + var puchaseOrderGroups = oriList.GroupBy(ori => ori.PurchaseOrderId); + var poIndex = 0; + foreach (var poGroup in puchaseOrderGroups) + { + var poId = poGroup.Key; + poIndex++; + Console.WriteLine($"查询采购单 {poId}, {poIndex}/{puchaseOrderGroups.Count()}"); + try + { + var shopId = poGroup.FirstOrDefault().ShopId.ToString(); + var purchaseAccount = purchaseAccountList.FirstOrDefault(s => s.ShopId == shopId); + Thread.Sleep(1500); + var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() + { + AppKey = purchaseAccount.AppKey, + AppSecret = purchaseAccount.AppSecret, + AppToken = purchaseAccount.AppToken, + OrderId = poId + }); + + foreach (var ori in poGroup) + { + var key = $"{ori.PurchaseSkuId}_{ori.SchemeId}"; + if (updatePssKeyList.Contains(key)) + continue; + + var purchaseSku = purchaseOrderSimpleInfo.ItemList.FirstOrDefault(x => x.SkuId == ori.PurchaseSkuId); + if (purchaseSku != null) + { + Console.WriteLine($"更新 {key}"); + var update = fsql.Update().Set(pss => pss.LastPurchasePriceCost, purchaseSku.Price) + .Where(pss => pss.PurchaseSkuId == ori.PurchaseSkuId && pss.SkuPurchaseSchemeId == ori.SchemeId); + update.ExecuteAffrows(); + updatePssKeyList.Add(key); + + } + } + } + catch (Exception ex) + { + Console.WriteLine($"{poId},{ex.Message}"); + } + } + } } } From 850a902823122d3cb3c10b10d3a7d63b8daed609 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 21 Oct 2023 00:32:08 +0800 Subject: [PATCH 049/222] 1 --- BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 7eceb2a..0ffd189 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -818,6 +818,7 @@ namespace BBWYB.Server.Business var client = pp_PlatformClientFactory.GetClient(AdapterEnums.PlatformType.阿里巴巴); var puchaseOrderGroups = oriList.GroupBy(ori => ori.PurchaseOrderId); + var count = puchaseOrderGroups.Count(); var poIndex = 0; foreach (var poGroup in puchaseOrderGroups) { From cec3d0ea12571fadf56abfca3dfd24635217ae00 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 22 Oct 2023 13:00:31 +0800 Subject: [PATCH 050/222] 1 --- WebTest/MainWindow.xaml.cs | 2 +- WebTest/WebTest.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WebTest/MainWindow.xaml.cs b/WebTest/MainWindow.xaml.cs index c9ac554..1bfb19b 100644 --- a/WebTest/MainWindow.xaml.cs +++ b/WebTest/MainWindow.xaml.cs @@ -95,7 +95,7 @@ private string registerName = "webContext"; if (args.PermissionKind == CoreWebView2PermissionKind.ClipboardRead) args.State = CoreWebView2PermissionState.Allow; }; - w2m.wb2.CoreWebView2.AddHostObjectToScript(registerName, this.globalContext); + w2m.wb2.CoreWebView2.AddHostObjectToScript("webContext", this.globalContext); }; w2m.Init(); diff --git a/WebTest/WebTest.csproj b/WebTest/WebTest.csproj index f9e32d0..8d4029b 100644 --- a/WebTest/WebTest.csproj +++ b/WebTest/WebTest.csproj @@ -1,7 +1,7 @@  - Exe + WinExe net6.0-windows enable true From 834ee6bb987ca3c42ac7fdb378a046fdced7e5aa Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 22 Oct 2023 13:16:42 +0800 Subject: [PATCH 051/222] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=90=8C=E9=85=8D?= =?UTF-8?q?=E4=BB=B6=E5=8E=BB=E9=87=8D=E5=A4=8D=EF=BC=8C=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=B7=A8=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 19 ++++++++++++++++--- .../BatchEditPurchaseSkuActualPriceRequest.cs | 8 ++++---- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 5dd3cd7..1381560 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1304,7 +1304,7 @@ namespace BBWYB.Server.Business } /// - /// 查询同spu同采购商的其他配件接口,排除失效配件 + /// 查询同spu同采购商的其他配件接口,排除失效和重复配件 /// /// /// @@ -1330,7 +1330,13 @@ namespace BBWYB.Server.Business if (samePspList.Any()) { purchaseProductIdList.AddRange(samePspList.Select(psp => psp.PurchaseProductId)); - purchaseSchemeProductSkuList.AddRange(samePspList.SelectMany(psp => psp.PurchaseSchemeProductSkuList)); + var currentPssList = samePspList.SelectMany(psp => psp.PurchaseSchemeProductSkuList); + foreach (var currentPss in currentPssList) + { + if (purchaseSchemeProductSkuList.Any(x => x.PurchaseSkuId == currentPss.PurchaseSkuId)) + continue; + purchaseSchemeProductSkuList.Add(currentPss); + } } } purchaseProductIdList = purchaseProductIdList.Distinct().ToList(); @@ -1388,7 +1394,14 @@ namespace BBWYB.Server.Business { if (request.ItemList == null || request.ItemList.Count() == 0) throw new BusinessException("缺少参数"); - var schemeIdList = request.ItemList.Select(x => x.SchemeId).Distinct().ToList(); + //var schemeIdList = request.ItemList.Select(x => x.SchemeId).Distinct().ToList(); + + var purchseSkuIdList = request.ItemList.Select(x => x.PurchaseSkuId).Distinct().ToList(); + + var schemeIdList = fsql.Select() + .Where(pss => purchseSkuIdList.Contains(pss.PurchaseSkuId)) + .Distinct() + .ToList(pss => pss.SkuPurchaseSchemeId); var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest() { diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs index 5d3b3d8..349e8b0 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs @@ -7,10 +7,10 @@ public class BatchEditPurchaseSkuActualPriceItemRequest { - /// - /// 采购方案Id - /// - public long SchemeId { get; set; } + ///// + ///// 采购方案Id + ///// + ////public long SchemeId { get; set; } /// /// SkuId From 01e1ea2bc3883cf20b89deed7d0760ccd67d96ab Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 22 Oct 2023 23:17:34 +0800 Subject: [PATCH 052/222] =?UTF-8?q?1=EF=BC=89=E6=9F=A5=E8=AF=A2=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E6=96=B9=E6=A1=88=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E5=A6=82=E6=9E=9C=E9=9C=80=E8=A6=81=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E9=85=8D=E4=BB=B6=E4=BF=A1=E6=81=AF=EF=BC=8C=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E9=BB=98=E8=AE=A4=E6=88=90=E6=9C=AC=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E6=9C=80=E6=96=B0=E5=80=BC=202=EF=BC=89=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E4=BF=AE=E5=A4=8D=E6=89=80=E6=9C=89=E9=85=8D=E4=BB=B6?= =?UTF-8?q?=E7=9A=84=E6=9C=80=E8=BF=91=E9=87=87=E8=B4=AD=E4=BB=B7=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E5=8F=96api=E7=9A=84price=20,=E7=94=A8itemAmount=20/?= =?UTF-8?q?=20quantity=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs | 2 ++ SDKAdapter/PurchasePlatform/Client/Impl/PP_1688Client.cs | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 1381560..5283752 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -797,6 +797,7 @@ namespace BBWYB.Server.Business #region 获取采购方案基本信息 if (request.IncludePurchaseSkuBasicInfo == 1) { + scheme.DefaultCost = 0; foreach (var schemeProduct in schemeProductList) { try @@ -823,6 +824,7 @@ namespace BBWYB.Server.Business schemeProductSku.PurchaseSkuTitle = basicSku.Title; schemeProductSku.PurchaseSkuPrice = basicSku.Price; schemeProductSku.PurchaseSkuLogo = basicSku.Logo; + scheme.DefaultCost += schemeProductSku.PurchaseSkuPrice.Value * (schemeProductSku.PurchaseRatio ?? 1); } } } diff --git a/SDKAdapter/PurchasePlatform/Client/Impl/PP_1688Client.cs b/SDKAdapter/PurchasePlatform/Client/Impl/PP_1688Client.cs index f1cc945..438e020 100644 --- a/SDKAdapter/PurchasePlatform/Client/Impl/PP_1688Client.cs +++ b/SDKAdapter/PurchasePlatform/Client/Impl/PP_1688Client.cs @@ -245,7 +245,8 @@ namespace SDKAdapter.PurchasePlatform.Client SpecId = itemJToken.Value("specId"), ProductAmount = itemJToken.Value("itemAmount"), Quantity = Convert.ToInt32(itemJToken.Value("quantity")), - Price = itemJToken.Value("price"), + //Price = itemJToken.Value("price"), + Price = itemJToken.Value("itemAmount") / itemJToken.Value("quantity"), OrderSkuId = itemJToken.Value("subItemID") }).ToList() }; From d690bc595af30fa9325d76888a31e6edfef9bd47 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 23 Oct 2023 06:58:58 +0800 Subject: [PATCH 053/222] 1 --- BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 0ffd189..4915df4 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -802,7 +802,6 @@ namespace BBWYB.Server.Business ps.ShopId }); - var a = oriList.Any(x => x.SchemeId == 459761181151301); var purchaseAccountList = freeSqlMultiDBManager.MDSfsql.Select() .InnerJoin((pa, s) => pa.ShopId == s.Id) From 6744fddfd34bb72a0d367061d57617177bf0357b Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 24 Oct 2023 05:52:41 +0800 Subject: [PATCH 054/222] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E6=9C=80=E8=BF=91=E9=87=87=E8=B4=AD=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DataRepairController.cs | 6 ++ .../DataRepair/DataRepairBusiness.cs | 97 ++++++++++++++++++- 2 files changed, 99 insertions(+), 4 deletions(-) diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index 86fa11a..71178f4 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -90,5 +90,11 @@ namespace BBWYB.Server.API.Controllers { dataRepairBusiness.RepairPurchaseSkuLastPurchasePriceCost(); } + + [HttpPost] + public void RepairPurchaseSchemeLastPurchasePrice() + { + dataRepairBusiness.RepairPurchaseSchemeLastPurchasePrice(); + } } } diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 4915df4..8d20e92 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -657,10 +657,6 @@ namespace BBWYB.Server.Business } #endregion - #region 采购配件最近采购价 - - #endregion - #endregion #region 采购商累计信息 @@ -861,5 +857,98 @@ namespace BBWYB.Server.Business } } } + + public void RepairPurchaseSchemeLastPurchasePrice() + { + /* + select opi.SchemeId,opi.PurchaseOrderId from orderpurchaserelationinfo opi + inner join (select max(opi1.OrderId) as maxOrderId,opi1.SchemeId from orderpurchaserelationinfo opi1 group by opi1.SchemeId) as temp + on opi.OrderId=temp.maxOrderId and opi.SchemeId=temp.SchemeId + group by opi.SchemeId,opi.PurchaseOrderId + */ + + var opiList = fsql.Select().ToList(); + var pssList = fsql.Select().ToList(); + var poList = fsql.Select().ToList(); + + var purchaseAccountList = freeSqlMultiDBManager.MDSfsql.Select() + .InnerJoin((pa, s) => pa.ShopId == s.Id) + .Where((pa, s) => s.PlatformId == 10 && pa.PurchasePlatformId == "2") + .ToList((pa, s) => new + { + s.ShopId, + pa.AppKey, + pa.AppSecret, + pa.AppToken + }); + + var schemeGroups = fsql.Select() + .GroupBy(opi1 => opi1.SchemeId) + .WithTempQuery(g => new { MaxOrderId = g.Max(g.Value.OrderId), SchemeId = g.Value.SchemeId }) + .From() + .InnerJoin((opi1, opi2) => opi1.MaxOrderId == opi2.OrderId && opi1.SchemeId == opi2.SchemeId) + .GroupBy((opi1, opi2) => new { opi2.SchemeId, opi2.PurchaseOrderId }) + .ToList(g => new + { + g.Value.Item2.SchemeId, + g.Value.Item2.PurchaseOrderId + }).GroupBy(x => x.SchemeId); + + var client = pp_PlatformClientFactory.GetClient(AdapterEnums.PlatformType.阿里巴巴); + + IDictionary> purchaseOrderDictionary = new Dictionary>(); + var index = 1; + foreach (var schemeGroup in schemeGroups) + { + var schemeId = schemeGroup.Key; + var lastPurchasePriceCost = 0M; + foreach (var schemeItem in schemeGroup) + { + Thread.Sleep(1500); + try + { + var poId = schemeItem.PurchaseOrderId; + var currentOpiList = opiList.Where(x => x.SchemeId == schemeId && x.PurchaseOrderId == poId).ToList(); + if (!purchaseOrderDictionary.TryGetValue(poId, out var _1688itemList)) + { + var po = poList.FirstOrDefault(x => x.PurchaseOrderId == poId); + if (po == null) + continue; + var shopId = po.ShopId.ToString(); + var pa = purchaseAccountList.FirstOrDefault(x => x.ShopId == shopId); + + var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() + { + AppKey = pa.AppKey, + AppSecret = pa.AppSecret, + AppToken = pa.AppToken, + OrderId = poId + }); + _1688itemList = purchaseOrderSimpleInfo.ItemList; + purchaseOrderDictionary.TryAdd(poId, _1688itemList); + } + foreach (var ppsku in _1688itemList) + { + if (currentOpiList.Any(x => x.PurchaseSkuId == ppsku.SkuId)) + { + var pss = pssList.FirstOrDefault(x => x.SkuPurchaseSchemeId == schemeId && x.PurchaseSkuId == ppsku.SkuId); + if (pss != null) + { + lastPurchasePriceCost += ppsku.Price * (pss.PurchaseRatio ?? 1); + } + } + } + } + catch (Exception ex) + { + Console.WriteLine($"{schemeItem.PurchaseOrderId},{ex.Message}"); + } + } + fsql.Update(schemeId).Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost).ExecuteAffrows(); + Console.WriteLine($"更新进度 {index}/{schemeGroups.Count()}"); + index++; + } + Console.WriteLine(schemeGroups.Count()); + } } } From 5c7da8a45912c78aafebc4ae9a66b8a4fddddd99 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 31 Oct 2023 11:21:03 +0800 Subject: [PATCH 055/222] =?UTF-8?q?=E5=85=A5=E4=BB=93=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=8D=95=E6=A3=80=E6=9F=A5=E6=94=B9=E6=88=90http?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/JD/JDBusiness.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/JD/JDBusiness.cs b/BBWYB.Server.Business/JD/JDBusiness.cs index 42fd4e6..ad644c9 100644 --- a/BBWYB.Server.Business/JD/JDBusiness.cs +++ b/BBWYB.Server.Business/JD/JDBusiness.cs @@ -39,7 +39,7 @@ namespace BBWYB.Server.Business.JD try { - var httpResult = restApiService.SendRequest("https://yunding.qiyue666.com/", "api/PlatformSDK/GetJDInStorePurchaseOrderList", new + var httpResult = restApiService.SendRequest("http://yunding.qiyue666.com/", "api/PlatformSDK/GetJDInStorePurchaseOrderList", new { Platform = shop.PlatformId, shop.AppKey, From bfe1e366b8fb20223e539a74dab427ce823114bd Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 3 Nov 2023 16:41:36 +0800 Subject: [PATCH 056/222] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E5=B9=B3=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 3 ++- BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index ba1e15e..a9d5430 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -717,7 +717,8 @@ namespace BBWYB.Server.Business ShopId = request.ShopId, SkuId = optimizationSkuId, LastPurchasePrice = lastHistory?.LastPurchasePrice ?? 0, - OptimizationRatio = ratio + OptimizationRatio = ratio, + TriggerOptimizationReason = orderSku.TriggerOptimizationReason }; insertSkuOptimizationHistoryList.Add(newOptimizationHistory); } diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs index 8d1fde0..8b8adf0 100644 --- a/BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs +++ b/BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs @@ -46,6 +46,12 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "decimal(18,2)", IsNullable = true)] public decimal? CurrentPurchasePrice { get; set; } = 0.0M; + + /// + /// 触发优化原因 + /// + [Column(DbType = "int(1)", MapType = typeof(int?), IsNullable = true)] + public Enums.TriggerOptimizationReason? TriggerOptimizationReason { get; set; } } } From f78a3d4569e78aff3076327d48ff25121dcb2f0c Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 5 Nov 2023 16:36:51 +0800 Subject: [PATCH 057/222] =?UTF-8?q?=E6=8E=A8C=E6=94=B9http?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs | 2 +- BBWYB.Server.Business/Order/OrderBusiness.cs | 6 +++--- .../PurchaseOrder/PurchaseOrderBusiness.cs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 8d20e92..ef88196 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -324,7 +324,7 @@ namespace BBWYB.Server.Business Thread.Sleep(500); try { - var url = "https://bbwy.qiyue666.com"; + var url = "http://bbwytest.qiyue666.com"; var result = restApiService.SendRequest(url, "api/BatchPurchase/UpdatePurchaseOrderState", new { OrderId = order.Id, diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 9ee7c19..e24e469 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -622,7 +622,7 @@ namespace BBWYB.Server.Business try { - restApiService.SendRequest("https://bbwy.qiyue666.com", "api/BatchPurchase/UpdatePurchaseOrderState", new + restApiService.SendRequest("http://bbwytest.qiyue666.com", "api/BatchPurchase/UpdatePurchaseOrderState", new { OrderId = request.OrderId, PurchaseOrderState = Enums.OrderState.已取消 @@ -751,7 +751,7 @@ namespace BBWYB.Server.Business }); #region 通知C端 - restApiService.SendRequest("https://bbwy.qiyue666.com", + restApiService.SendRequest("http://bbwytest.qiyue666.com", "/Api/PurchaseOrder/QuanTanEditPriceCallback", new { orderId = request.OrderId }, null, @@ -847,7 +847,7 @@ namespace BBWYB.Server.Business try { #if DEBUG - var url = "https://bbwy.qiyue666.com"; + var url = "http://bbwytest.qiyue666.com"; #else var url = "http://172.16.54.105:8090"; #endif diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index a9d5430..73b108c 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -3192,7 +3192,7 @@ namespace BBWYB.Server.Business #endregion #region 通知C端改价 - restApiService.SendRequest("https://bbwy.qiyue666.com", + restApiService.SendRequest("http://bbwytest.qiyue666.com", "/Api/PurchaseOrder/QuanTanEditPriceCallback", new { orderId = dbOrder.Id }, null, @@ -3222,7 +3222,7 @@ namespace BBWYB.Server.Business try { #if DEBUG - var url = "https://bbwy.qiyue666.com"; + var url = "http://bbwytest.qiyue666.com"; #else var url = "http://172.16.54.105:8090"; #endif From 6acfa1d1f26b2a7341e67e7485b0ef6cddae7e0f Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 5 Nov 2023 21:14:41 +0800 Subject: [PATCH 058/222] =?UTF-8?q?=E4=BF=AE=E5=A4=8DC=E5=8D=95=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataRepair/DataRepairBusiness.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index ef88196..88bacda 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -313,25 +313,30 @@ namespace BBWYB.Server.Business public void BSyncToC() { - var time = DateTime.Parse("2023-09-01"); - var orderList = fsql.Select().Where(o => o.StartTime < time).OrderByDescending(o => o.Id).ToList(o => new { o.Id, o.OrderState }); + var time = DateTime.Parse("2023-10-29"); + var orderList = fsql.Select().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 = "http://bbwytest.qiyue666.com"; - var result = restApiService.SendRequest(url, "api/BatchPurchase/UpdatePurchaseOrderState", new + var result_orderState = restApiService.SendRequest(url, "api/BatchPurchase/UpdatePurchaseOrderState", new { OrderId = order.Id, PurchaseOrderState = order.OrderState }, null, HttpMethod.Post); - Console.WriteLine($"{i}/{count},{order.Id},{result.StatusCode}"); + + var result_editPrice = restApiService.SendRequest(url, + "/Api/PurchaseOrder/QuanTanEditPriceCallback", + new { orderId = order.Id }, + null, + HttpMethod.Post); + + Console.WriteLine($"{i}/{count},{order.Id},{result_orderState.StatusCode},{result_editPrice.StatusCode}"); } catch (Exception ex) { From ed911bb2c336a5c7ca8f1fbc7fa1019e6e9338e4 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 15 Dec 2023 13:40:54 +0800 Subject: [PATCH 059/222] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=89=A9=E4=BD=99?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/Response/TimeLimitTask/TimeLimitTaskResponse.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskResponse.cs index 802c9ad..5dc7d3f 100644 --- a/BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskResponse.cs @@ -5,5 +5,10 @@ namespace BBWYB.Server.Model.Dto public class TimeLimitTaskResponse : TimeLimitTask { public string ShopName { get; set; } + + /// + /// 该任务在工作时范围内的剩余时间,单位秒 + /// + public long? RemainingTime { get; set; } } } From 20b6e2a0f08ad98945d23eb5e88cfbe5aaeb7bad Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sat, 16 Dec 2023 03:14:08 +0800 Subject: [PATCH 060/222] =?UTF-8?q?=E8=AE=A1=E7=AE=97=E6=97=B6=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataRepair/DataRepairBusiness.cs | 9 +- BBWYB.Server.Business/JD/JDBusiness.cs | 11 +- .../PurchaseOrder/PurchaseOrderBusiness.cs | 7 +- BBWYB.Server.Business/QiKuManager.cs | 34 ++-- .../Sync/OrderSyncBusiness.cs | 11 +- .../TimeLimitTask/TimeLimitRules.cs | 168 ++++++++++++++++++ .../TimeLimitTask/TimeLimitTaskBusiness.cs | 8 +- 7 files changed, 221 insertions(+), 27 deletions(-) create mode 100644 BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 88bacda..590054a 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -27,7 +27,8 @@ namespace BBWYB.Server.Business private OP_PlatformClientFactory opPlatformClientFactory; private PP_PlatformClientFactory pp_PlatformClientFactory; private RestApiService restApiService; - public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness, PurchaseOrderBusiness purchaseOrderBusiness, FreeSqlMultiDBManager freeSqlMultiDBManager, VenderBusiness venderBusiness, OP_PlatformClientFactory opPlatformClientFactory, PP_PlatformClientFactory pp_PlatformClientFactory, RestApiService restApiService) : base(fsql, nLogManager, idGenerator) + private TimeLimitRules timeLimitRules; + public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness, PurchaseOrderBusiness purchaseOrderBusiness, FreeSqlMultiDBManager freeSqlMultiDBManager, VenderBusiness venderBusiness, OP_PlatformClientFactory opPlatformClientFactory, PP_PlatformClientFactory pp_PlatformClientFactory, RestApiService restApiService, TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator) { this.kuaiDi100Manager = kuaiDi100Manager; this.purchaseSchemeBusiness = purchaseSchemeBusiness; @@ -37,6 +38,7 @@ namespace BBWYB.Server.Business this.opPlatformClientFactory = opPlatformClientFactory; this.pp_PlatformClientFactory = pp_PlatformClientFactory; this.restApiService = restApiService; + this.timeLimitRules = timeLimitRules; } @@ -278,11 +280,12 @@ namespace BBWYB.Server.Business Id = idGenerator.NewLong(), OrderId = order.Id, CreateTme = DateTime.Now, - ExpirationTime = DateTime.Now.AddDays(1), + //ExpirationTime = DateTime.Now.AddDays(1), OrderSn = order.OrderSn, Remark = "手工处理待核算", ShopId = order.ShopId, - TaskType = Enums.TimeLimitTaskType.待核算任务 + TaskType = Enums.TimeLimitTaskType.待核算任务, + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待核算任务, DateTime.Now) }); } } diff --git a/BBWYB.Server.Business/JD/JDBusiness.cs b/BBWYB.Server.Business/JD/JDBusiness.cs index ad644c9..7987817 100644 --- a/BBWYB.Server.Business/JD/JDBusiness.cs +++ b/BBWYB.Server.Business/JD/JDBusiness.cs @@ -17,18 +17,22 @@ namespace BBWYB.Server.Business.JD private VenderBusiness venderBusiness; private DingDingBusiness dingDingBusiness; private TaskSchedulerManager taskSchedulerManager; + private TimeLimitRules timeLimitRules; + public JDBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, RestApiService restApiService, VenderBusiness venderBusiness, DingDingBusiness dingDingBusiness, - TaskSchedulerManager taskSchedulerManager) : base(fsql, nLogManager, idGenerator) + TaskSchedulerManager taskSchedulerManager, + TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator) { this.restApiService = restApiService; this.venderBusiness = venderBusiness; this.dingDingBusiness = dingDingBusiness; this.taskSchedulerManager = taskSchedulerManager; + this.timeLimitRules = timeLimitRules; } public ApiResponse> GetJDInStoreOrderDetailList(string sourceShopName, IList poOrderNos) @@ -71,7 +75,7 @@ namespace BBWYB.Server.Business.JD var checkTaskList = fsql.Select().Where(x => x.IsChecked == false).ToList(); if (checkTaskList.Count() == 0) return; - + orderIds = checkTaskList.Select(x => x.OrderId).ToList(); var timelimitTaskList = fsql.Select().Where(t => orderIds.Contains(t.OrderId) && t.TaskType == Enums.TimeLimitTaskType.待核算任务).ToList(); @@ -200,7 +204,8 @@ namespace BBWYB.Server.Business.JD OrderSn = checkTask.OrderSn, ShopId = checkTask.ShopId, TaskType = Enums.TimeLimitTaskType.待核算任务, - ExpirationTime = DateTime.Now.AddDays(1) + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待核算任务, DateTime.Now) + //ExpirationTime = DateTime.Now.AddDays(1) }; insertTimeLimitTaskList.Add(t); } diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 73b108c..47f8727 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -38,6 +38,7 @@ namespace BBWYB.Server.Business private Lazy opPlatformClientFactoryLazy; private Lazy venderBusinessLazy; private Lazy purchaseSchemeBusinessLazy; + private Lazy timeLimitRulesLazy; private PP_PlatformClientFactory ppPlatformClientFactory => pplatformClientFactoryLazy.Value; private TaskSchedulerManager taskSchedulerManager => taskSchedulerManagerLazy.Value; @@ -54,6 +55,8 @@ namespace BBWYB.Server.Business private PurchaseSchemeBusiness purchaseSchemeBusiness => purchaseSchemeBusinessLazy.Value; + private TimeLimitRules timeLimitRules => timeLimitRulesLazy.Value; + private IList cantPurchaseOrderStateList; public PurchaseOrderBusiness(IFreeSql fsql, @@ -73,6 +76,7 @@ namespace BBWYB.Server.Business opPlatformClientFactoryLazy = new Lazy(() => serviceProvider.GetService()); venderBusinessLazy = new Lazy(() => serviceProvider.GetService()); purchaseSchemeBusinessLazy = new Lazy(() => serviceProvider.GetService()); + timeLimitRulesLazy = new Lazy(() => serviceProvider.GetService()); cantPurchaseOrderStateList = new List() { Enums.OrderState.已取消, @@ -2835,7 +2839,8 @@ namespace BBWYB.Server.Business OrderSn = order.OrderSn, ShopId = order.ShopId, TaskType = Enums.TimeLimitTaskType.待核算任务, - ExpirationTime = DateTime.Now.AddDays(1) + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待核算任务, DateTime.Now) + //ExpirationTime = DateTime.Now.AddDays(1) }; insertTimeLimitTaskList.Add(t); } diff --git a/BBWYB.Server.Business/QiKuManager.cs b/BBWYB.Server.Business/QiKuManager.cs index 3382f4c..cfd9399 100644 --- a/BBWYB.Server.Business/QiKuManager.cs +++ b/BBWYB.Server.Business/QiKuManager.cs @@ -19,10 +19,14 @@ namespace BBWYB.Server.Business private Lazy dingDingBusinessLazy; private Lazy venderBusinessLazy; + private Lazy timeLimitRulesLazy; private DingDingBusiness dingDingBusiness => dingDingBusinessLazy.Value; + private VenderBusiness venderBusiness => venderBusinessLazy.Value; + private TimeLimitRules timeLimitRules => timeLimitRulesLazy.Value; + public QiKuManager(RestApiService restApiService, IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, IServiceProvider serviceProvider) : base(fsql, nLogManager, idGenerator) { this.restApiService = restApiService; @@ -33,6 +37,7 @@ namespace BBWYB.Server.Business }; this.dingDingBusinessLazy = new Lazy(() => serviceProvider.GetService()); this.venderBusinessLazy = new Lazy(() => serviceProvider.GetService()); + this.timeLimitRulesLazy = new Lazy(() => serviceProvider.GetService()); } public void PublishQikuReceiveInfo(string orderId, @@ -103,14 +108,14 @@ namespace BBWYB.Server.Business } //推送齐库 - var publishResult = restApiService.SendRequest("http://qiku.qiyue666.com", - "/Api/PackPurchaseTask/UpdateAvailabilityState", - new - { - availability = isSignAll ? 0 : 1, - orderId = osku.OrderId, - skuId = osku.BelongSkuId - }, null, HttpMethod.Post); + var publishResult = restApiService.SendRequest("http://qiku.qiyue666.com", + "/Api/PackPurchaseTask/UpdateAvailabilityState", + new + { + availability = isSignAll ? 0 : 1, + orderId = osku.OrderId, + skuId = osku.BelongSkuId + }, null, HttpMethod.Post); if (publishResult.StatusCode != System.Net.HttpStatusCode.OK) throw new Exception(publishResult.Content); } @@ -179,7 +184,7 @@ namespace BBWYB.Server.Business OrderSn = order.OrderSn, ShopId = order.ShopId, TaskType = Enums.TimeLimitTaskType.合格证拟定任务, - ExpirationTime = DateTime.Now.AddDays(1), + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.合格证拟定任务, DateTime.Now) //DateTime.Now.AddDays(1), }; insertTimeLimitTaskList.Add(t); } @@ -256,12 +261,13 @@ namespace BBWYB.Server.Business SkuId = orderSku.SkuId, OrderSn = order.OrderSn, ShopId = order.ShopId, - TaskType = Enums.TimeLimitTaskType.合格证补充任务 + TaskType = Enums.TimeLimitTaskType.合格证补充任务, + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.合格证补充任务, DateTime.Now) //DateTime.Now.AddHours(2) }; - if (DateTime.Now.Hour < 16) - t.ExpirationTime = DateTime.Now.AddHours(2); - else - t.ExpirationTime = DateTime.Now.Date.AddDays(1).AddHours(13); + //if (DateTime.Now.Hour < 16) + // t.ExpirationTime = DateTime.Now.AddHours(2); + //else + // t.ExpirationTime = DateTime.Now.Date.AddDays(1).AddHours(13); insertTimeLimitTask = fsql.Insert(t); #region 发送钉钉通知 diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index f85dd4d..fd16504 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -18,8 +18,9 @@ namespace BBWYB.Server.Business.Sync private VenderBusiness venderBusiness; private TaskSchedulerManager taskSchedulerManager; private List timeLimitTaskTypes; + private TimeLimitRules timeLimitRules; - public OrderSyncBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, VenderBusiness venderBusiness, TaskSchedulerManager taskSchedulerManager) : base(fsql, nLogManager, idGenerator) + public OrderSyncBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, VenderBusiness venderBusiness, TaskSchedulerManager taskSchedulerManager, TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator) { this.opPlatformClientFactory = opPlatformClientFactory; this.venderBusiness = venderBusiness; @@ -29,6 +30,7 @@ namespace BBWYB.Server.Business.Sync Enums.TimeLimitTaskType.采购任务, Enums.TimeLimitTaskType.待议价任务 }; + this.timeLimitRules = timeLimitRules; } public void AutoOrderSync() @@ -430,12 +432,13 @@ namespace BBWYB.Server.Business.Sync { Id = idGenerator.NewLong(), CreateTme = DateTime.Now, - ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), + //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), OrderId = o.OrderId, OrderSn = o.OrderSn, ShopId = shopId, SkuId = osku.SkuId, - TaskType = Enums.TimeLimitTaskType.待议价任务 + //TaskType = Enums.TimeLimitTaskType.待议价任务 }); } #endregion @@ -544,7 +547,7 @@ namespace BBWYB.Server.Business.Sync SkuId = osku.SkuId, TaskType = Enums.TimeLimitTaskType.采购任务, ShopId = shopId, - ExpirationTime = CalculationPurcashTimeLimitTaskExpirationTime(order.PayTime.Value), + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.采购任务, order.PayTime.Value), PayTime = order.PayTime }).ToList(); if (waitInserTimeLimitTasks != null && waitInserTimeLimitTasks.Count() > 0) diff --git a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs new file mode 100644 index 0000000..5518d36 --- /dev/null +++ b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs @@ -0,0 +1,168 @@ +using BBWYB.Common.Models; +using BBWYB.Server.Model; + +namespace BBWYB.Server.Business +{ + public class TimeLimitRules : IDenpendency + { + /// + /// 计算到期时间算法字典 + /// + private IDictionary> calculateExpirationTimeAlgorithmDictionary; + + public TimeLimitRules() + { + calculateExpirationTimeAlgorithmDictionary = new Dictionary>() + { + { Enums.TimeLimitTaskType.采购任务, CalculateExpirationTimeFor8WorkHour }, + { Enums.TimeLimitTaskType.合格证拟定任务, CalculateExpirationTimeFor8WorkHour }, + { Enums.TimeLimitTaskType.合格证补充任务, CalculateExpirationTimeFor2WorkHour } + }; + } + + /// + /// 计算到期时间 + /// + /// 任务类型 + /// 起点计算时间 + /// + public DateTime CalculateExpirationTime(Enums.TimeLimitTaskType timeLimitTaskType, DateTime startTime) + { + return calculateExpirationTimeAlgorithmDictionary[timeLimitTaskType](startTime); + } + + /// + /// 计算需要追加的天数,周六追加2天,周日追加1天 + /// + /// + /// + private int CalculateAddDay(DayOfWeek dayOfWeek) + { + if (dayOfWeek == DayOfWeek.Saturday) + return 2; + return 1; + } + + /// + /// 8小时工作时计算到期时间 + /// + /// 起点时间 + /// + private DateTime CalculateExpirationTimeFor8WorkHour(DateTime startTime) + { + int addDay = 0, addHour = 0, addSeconds = 0; + //先确定是否为周日 + if (startTime.DayOfWeek == DayOfWeek.Sunday) + { + addDay = 1; + addHour = 18; + } + else + { + if (startTime.Hour < 9) + addHour = 18; + else if (startTime.Hour >= 9 && startTime.Hour < 12) + { + //计算从起点时间的9点开始到当前时间的时差 + var timeSpan = DateTime.Now - startTime.Date.AddHours(9); + if (timeSpan.TotalMinutes <= 5) + { + //从9点开始小于5分钟以内,以当天18点结束 + addHour = 18; + } + else + { + addDay = CalculateAddDay(startTime.DayOfWeek); + addHour = 9; + addSeconds = (int)timeSpan.TotalSeconds; + } + } + else if (startTime.Hour >= 12 && startTime.Hour < 13) + { + //下一个工作日的12点结束 + addDay = CalculateAddDay(startTime.DayOfWeek); + addHour = 12; + } + else if (startTime.Hour >= 13 && startTime.Hour < 18) + { + var timeSpan = DateTime.Now - startTime.Date.AddHours(13); + //到下一个工作日的当前时间结束 + addDay = CalculateAddDay(startTime.DayOfWeek); + addHour = 13; + addSeconds = (int)timeSpan.TotalSeconds; + + } + else if (startTime.Hour >= 18) + { + //下一个工作日的18点结束 + addDay = CalculateAddDay(startTime.DayOfWeek); + addHour = 18; + } + } + return startTime.Date.AddDays(addDay).AddHours(addHour).AddSeconds(addSeconds); + } + + /// + /// 2小时工作时计算到期时间 + /// + /// 起点时间 + /// + private DateTime CalculateExpirationTimeFor2WorkHour(DateTime startTime) + { + int addDay = 0, addHour = 0, addSeconds = 0; + //先确定是否为周日 + if (startTime.DayOfWeek == DayOfWeek.Sunday) + { + addDay = 1; + addHour = 11; + } + else + { + if (startTime.Hour < 9) + addHour = 11; + else if (startTime.Hour >= 9 && startTime.Hour < 12) + { + //计算从起点时间的9点开始到当前时间的时差 + var timeSpan = DateTime.Now - startTime.Date.AddHours(9); + if (timeSpan.TotalHours <= 1) + { + addHour = 11; + addSeconds = (int)timeSpan.TotalSeconds; + } + else + { + addHour = 13; + addSeconds = 7200 - (int)timeSpan.TotalSeconds; + } + } + else if (startTime.Hour >= 12 && startTime.Hour < 13) + { + addHour = 15; + } + else if (startTime.Hour >= 13 && startTime.Hour < 18) + { + var timeSpan = DateTime.Now - startTime.Date.AddHours(13); + + if (timeSpan.TotalHours <= 3) + { + addHour = startTime.Hour + 2; + addSeconds = startTime.Minute * 60 + startTime.Second; + } + else + { + addDay = CalculateAddDay(startTime.DayOfWeek); + addHour = 9; + addSeconds = Convert.ToInt32(7200 - (startTime - startTime.Date.AddHours(15)).TotalSeconds); + } + } + else if (startTime.Hour >= 18) + { + //下一个工作日的18点结束 + addDay = CalculateAddDay(startTime.DayOfWeek); + addHour = 11; + } + } + return startTime.Date.AddDays(addDay).AddHours(addHour).AddSeconds(addSeconds); + } + } +} diff --git a/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs b/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs index 78225b4..9f16e05 100644 --- a/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs +++ b/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs @@ -11,7 +11,9 @@ namespace BBWYB.Server.Business { private VenderBusiness venderBusiness; private List hgzTaskTypeList; - public TimeLimitTaskBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, VenderBusiness venderBusiness) : base(fsql, nLogManager, idGenerator) + private TimeLimitRules timeLimitRules; + + public TimeLimitTaskBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, VenderBusiness venderBusiness, TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator) { this.venderBusiness = venderBusiness; hgzTaskTypeList = new List() @@ -19,6 +21,7 @@ namespace BBWYB.Server.Business Enums.TimeLimitTaskType.合格证拟定任务, Enums.TimeLimitTaskType.合格证补充任务 }; + this.timeLimitRules = timeLimitRules; } public void CheckTask() { @@ -50,7 +53,8 @@ namespace BBWYB.Server.Business OrderSn = o.OrderSn, ShopId = o.ShopId, TaskType = Enums.TimeLimitTaskType.待核算任务, - ExpirationTime = DateTime.Now.AddDays(1), + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待核算任务, DateTime.Now) + //ExpirationTime = DateTime.Now.AddDays(1), Remark = "RepairOrderComputationTask" }).ToList(); From b6c666d1079c10a6ce18d5f66b1badb27576b5f1 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sat, 16 Dec 2023 13:00:11 +0800 Subject: [PATCH 061/222] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=AE=A1=E6=97=B6?= =?UTF-8?q?=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs index 5518d36..333142d 100644 --- a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs +++ b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs @@ -16,6 +16,8 @@ namespace BBWYB.Server.Business { { Enums.TimeLimitTaskType.采购任务, CalculateExpirationTimeFor8WorkHour }, { Enums.TimeLimitTaskType.合格证拟定任务, CalculateExpirationTimeFor8WorkHour }, + { Enums.TimeLimitTaskType.待核算任务, CalculateExpirationTimeFor8WorkHour }, + { Enums.TimeLimitTaskType.待议价任务, CalculateExpirationTimeFor8WorkHour }, { Enums.TimeLimitTaskType.合格证补充任务, CalculateExpirationTimeFor2WorkHour } }; } @@ -123,7 +125,7 @@ namespace BBWYB.Server.Business else if (startTime.Hour >= 9 && startTime.Hour < 12) { //计算从起点时间的9点开始到当前时间的时差 - var timeSpan = DateTime.Now - startTime.Date.AddHours(9); + var timeSpan = startTime - startTime.Date.AddHours(9); if (timeSpan.TotalHours <= 1) { addHour = 11; @@ -141,7 +143,7 @@ namespace BBWYB.Server.Business } else if (startTime.Hour >= 13 && startTime.Hour < 18) { - var timeSpan = DateTime.Now - startTime.Date.AddHours(13); + var timeSpan = startTime - startTime.Date.AddHours(13); if (timeSpan.TotalHours <= 3) { @@ -152,7 +154,7 @@ namespace BBWYB.Server.Business { addDay = CalculateAddDay(startTime.DayOfWeek); addHour = 9; - addSeconds = Convert.ToInt32(7200 - (startTime - startTime.Date.AddHours(15)).TotalSeconds); + addSeconds = Convert.ToInt32(7200 - (startTime - startTime.Date.AddHours(16)).TotalSeconds); } } else if (startTime.Hour >= 18) From baa2771e2e0464e3ecbbca5fd0a2103707b62f99 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sat, 16 Dec 2023 23:39:12 +0800 Subject: [PATCH 062/222] =?UTF-8?q?=E8=AE=A1=E7=AE=97=E5=89=A9=E4=BD=99?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/TimeLimitTaskController.cs | 27 +++++- BBWYB.Server.Business/Order/OrderBusiness.cs | 11 ++- .../TimeLimitTask/TimeLimitRules.cs | 97 ++++++++++++++++--- .../TimeLimitTask/TimeLimitTaskBusiness.cs | 16 ++- 4 files changed, 137 insertions(+), 14 deletions(-) diff --git a/BBWYB.Server.API/Controllers/TimeLimitTaskController.cs b/BBWYB.Server.API/Controllers/TimeLimitTaskController.cs index 6d82ec4..aaa741e 100644 --- a/BBWYB.Server.API/Controllers/TimeLimitTaskController.cs +++ b/BBWYB.Server.API/Controllers/TimeLimitTaskController.cs @@ -1,4 +1,5 @@ using BBWYB.Server.Business; +using BBWYB.Server.Model; using BBWYB.Server.Model.Dto; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authorization; @@ -55,7 +56,7 @@ namespace BBWYB.Server.API.Controllers /// /// [HttpPost] - public IList TimeOutStatistics([FromBody]QueryTimeOutRequest request) + public IList TimeOutStatistics([FromBody] QueryTimeOutRequest request) { return timeLimitTaskBusiness.TimeOutStatistics(request); } @@ -69,5 +70,29 @@ namespace BBWYB.Server.API.Controllers { timeLimitTaskBusiness.EditTimeLimitTaskRemark(request); } + + /// + /// 测试计算过期时间 + /// + /// + /// 起点时间 + [HttpGet] + [AllowAnonymous] + public DateTime TestExpireTime([FromQuery] Enums.TimeLimitTaskType timeLimitTaskType, [FromQuery] DateTime startTime) + { + return timeLimitTaskBusiness.TestExpireTime(timeLimitTaskType, startTime); + } + + /// + /// 测试计算剩余时间 + /// + /// + /// + [HttpGet] + [AllowAnonymous] + public (long, TimeSpan) TextLessTime([FromQuery] DateTime expireTime) + { + return timeLimitTaskBusiness.TextLessTime(expireTime); + } } } diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index e24e469..1f08dec 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -25,11 +25,14 @@ namespace BBWYB.Server.Business private Lazy qikuManagerLazy; private Lazy opPlatformClientFactoryLazy; private Lazy restApiServiceLazy; + private Lazy timeLimitRulesLazy; private OP_PlatformClientFactory opPlatformClientFactory => opPlatformClientFactoryLazy.Value; private RestApiService restApiService => restApiServiceLazy.Value; private QiKuManager qikuManager => qikuManagerLazy.Value; + private TimeLimitRules timeLimitRules => timeLimitRulesLazy.Value; + private List hgzTaskTypeList; public OrderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, IServiceProvider serviceProvider) : base(fsql, nLogManager, idGenerator) @@ -37,7 +40,7 @@ namespace BBWYB.Server.Business qikuManagerLazy = new Lazy(() => serviceProvider.GetService()); opPlatformClientFactoryLazy = new Lazy(() => serviceProvider.GetService()); restApiServiceLazy = new Lazy(() => serviceProvider.GetService()); - + timeLimitRulesLazy = new Lazy(() => serviceProvider.GetService()); waitConfigStateList = new List() { Enums.PackConfigState.待配置, Enums.PackConfigState.需修改 }; hgzTaskTypeList = new List() @@ -372,6 +375,12 @@ namespace BBWYB.Server.Business var orderTimeLimitTaskList = fsql.Select().Where(t => orderIdList.Contains(t.OrderId)) .ToList(); + foreach (var task in orderTimeLimitTaskList) + { + if (task.CompletionTime == null) + task.RemainingTime = timeLimitRules.CalculateLessTimeForWorkHour(task.ExpirationTime.Value); + } + foreach (var order in orderList) { foreach (var orderSku in order.ItemList) diff --git a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs index 333142d..fd19236 100644 --- a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs +++ b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs @@ -66,7 +66,7 @@ namespace BBWYB.Server.Business else if (startTime.Hour >= 9 && startTime.Hour < 12) { //计算从起点时间的9点开始到当前时间的时差 - var timeSpan = DateTime.Now - startTime.Date.AddHours(9); + var timeSpan = startTime - startTime.Date.AddHours(9); if (timeSpan.TotalMinutes <= 5) { //从9点开始小于5分钟以内,以当天18点结束 @@ -87,7 +87,7 @@ namespace BBWYB.Server.Business } else if (startTime.Hour >= 13 && startTime.Hour < 18) { - var timeSpan = DateTime.Now - startTime.Date.AddHours(13); + var timeSpan = startTime - startTime.Date.AddHours(13); //到下一个工作日的当前时间结束 addDay = CalculateAddDay(startTime.DayOfWeek); addHour = 13; @@ -124,17 +124,17 @@ namespace BBWYB.Server.Business addHour = 11; else if (startTime.Hour >= 9 && startTime.Hour < 12) { - //计算从起点时间的9点开始到当前时间的时差 - var timeSpan = startTime - startTime.Date.AddHours(9); - if (timeSpan.TotalHours <= 1) + //如果在10点钟以前,则加两个小时 + if (startTime.Hour < 10) { addHour = 11; - addSeconds = (int)timeSpan.TotalSeconds; + addSeconds = Convert.ToInt32((startTime - startTime.Date.AddHours(9)).TotalSeconds); } else { addHour = 13; - addSeconds = 7200 - (int)timeSpan.TotalSeconds; + var to12senconds = Convert.ToInt32((startTime.Date.AddHours(12) - startTime).TotalSeconds); + addSeconds = 7200 - to12senconds; } } else if (startTime.Hour >= 12 && startTime.Hour < 13) @@ -143,18 +143,22 @@ namespace BBWYB.Server.Business } else if (startTime.Hour >= 13 && startTime.Hour < 18) { - var timeSpan = startTime - startTime.Date.AddHours(13); - - if (timeSpan.TotalHours <= 3) + if (startTime.Hour < 16) { addHour = startTime.Hour + 2; addSeconds = startTime.Minute * 60 + startTime.Second; } + else if (startTime.Hour == 16 && startTime.Minute <= 5) + { + //从16点开始小于5分钟以内,以当天18点结束 + addHour = 18; + } else { addDay = CalculateAddDay(startTime.DayOfWeek); addHour = 9; - addSeconds = Convert.ToInt32(7200 - (startTime - startTime.Date.AddHours(16)).TotalSeconds); + var to18senconds = Convert.ToInt32((startTime.Date.AddHours(18) - startTime).TotalSeconds); + addSeconds = 7200 - to18senconds; } } else if (startTime.Hour >= 18) @@ -166,5 +170,76 @@ namespace BBWYB.Server.Business } return startTime.Date.AddDays(addDay).AddHours(addHour).AddSeconds(addSeconds); } + + /// + /// 计算剩余任务时间(秒) + /// + /// + /// + public long CalculateLessTimeForWorkHour(DateTime expirationTime) + { + if (DateTime.Now >= expirationTime) + return 0; + + //强制过期时间在工作时间点内 + if (expirationTime.Hour < 9) + expirationTime = expirationTime.Date.AddHours(9); + else if (expirationTime.Hour >= 12 && expirationTime.Hour < 13) + expirationTime = expirationTime.Date.AddHours(12); + else if (expirationTime.Hour >= 18) + expirationTime = expirationTime.Date.AddDays(CalculateAddDay(expirationTime.DayOfWeek)).AddHours(9); + + var startTime = DateTime.Now; + long lessTime = 0; + while (true) + { + //把非工作时间段转换成工作时间段 + if (startTime.DayOfWeek == DayOfWeek.Sunday) + { + startTime = startTime.Date.AddDays(1).AddHours(9); + } + else + { + if (startTime.Hour < 9) + startTime = startTime.Date.AddHours(9); + else if (startTime.Hour >= 12 && startTime.Hour < 13) + startTime = startTime.Date.AddHours(13); + else if (startTime.Hour >= 18) + startTime = startTime.Date.AddDays(CalculateAddDay(startTime.DayOfWeek)).AddHours(9); + } + + //计算上午工作时间段 + if (startTime.Hour >= 9 && startTime.Hour < 12) + { + if (expirationTime <= startTime.Date.AddHours(12)) + { + lessTime += Convert.ToInt32((expirationTime - startTime).TotalSeconds); + break; + } + else + { + lessTime += 10800; + startTime = startTime.Date.AddHours(13); + } + } + + //计算下午工作时间段 + if (startTime.Hour >= 13 && startTime.Hour < 18) + { + if (expirationTime <= startTime.Date.AddHours(18)) + { + lessTime += Convert.ToInt32((expirationTime - startTime).TotalSeconds); + break; + } + else + { + lessTime += 18000; + startTime = startTime.Date.AddDays(CalculateAddDay(startTime.DayOfWeek)).AddHours(9); + } + } + + } + return lessTime; + } } } diff --git a/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs b/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs index 9f16e05..783ee79 100644 --- a/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs +++ b/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs @@ -53,7 +53,7 @@ namespace BBWYB.Server.Business OrderSn = o.OrderSn, ShopId = o.ShopId, TaskType = Enums.TimeLimitTaskType.待核算任务, - ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待核算任务, DateTime.Now) + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待核算任务, DateTime.Now), //ExpirationTime = DateTime.Now.AddDays(1), Remark = "RepairOrderComputationTask" }).ToList(); @@ -92,6 +92,8 @@ namespace BBWYB.Server.Business { var shopId = task.ShopId.ToString(); task.ShopName = shopList.FirstOrDefault(s => s.ShopId == shopId)?.ShopName; + if (task.CompletionTime == null) + task.RemainingTime = timeLimitRules.CalculateLessTimeForWorkHour(task.ExpirationTime.Value); } return new TimeLimitTaskListResponse() { @@ -174,5 +176,17 @@ namespace BBWYB.Server.Business { fsql.Update(request.TaskId).Set(t => t.Remark, request.Remark).ExecuteAffrows(); } + + public DateTime TestExpireTime(Enums.TimeLimitTaskType timeLimitTaskType, DateTime startTime) + { + return timeLimitRules.CalculateExpirationTime(timeLimitTaskType, startTime); + } + + public (long, TimeSpan) TextLessTime(DateTime expireTime) + { + var time = timeLimitRules.CalculateLessTimeForWorkHour(expireTime); + return (time, new TimeSpan(0, 0, (int)time)); + } + } } From eb005347c2de05228b665462007d5d71121e0d24 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Mon, 18 Dec 2023 10:26:34 +0800 Subject: [PATCH 063/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E9=99=90=E6=97=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=9B=B4=E6=96=B0=E4=B8=BA5=E5=B0=8F?= =?UTF-8?q?=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TimeLimitTask/TimeLimitRules.cs | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs index fd19236..3fc4d9f 100644 --- a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs +++ b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs @@ -14,7 +14,7 @@ namespace BBWYB.Server.Business { calculateExpirationTimeAlgorithmDictionary = new Dictionary>() { - { Enums.TimeLimitTaskType.采购任务, CalculateExpirationTimeFor8WorkHour }, + { Enums.TimeLimitTaskType.采购任务, CalculateExpirationTimeFor5WorkHour }, { Enums.TimeLimitTaskType.合格证拟定任务, CalculateExpirationTimeFor8WorkHour }, { Enums.TimeLimitTaskType.待核算任务, CalculateExpirationTimeFor8WorkHour }, { Enums.TimeLimitTaskType.待议价任务, CalculateExpirationTimeFor8WorkHour }, @@ -171,6 +171,54 @@ namespace BBWYB.Server.Business return startTime.Date.AddDays(addDay).AddHours(addHour).AddSeconds(addSeconds); } + private DateTime CalculateExpirationTimeFor5WorkHour(DateTime startTime) + { + int addDay = 0, addHour = 0, addSeconds = 0; + //先确定是否为周日 + if (startTime.DayOfWeek == DayOfWeek.Sunday) + { + addDay = 1; + addHour = 14; + } + else + { + if (startTime.Hour < 9) + addHour = 14; + else if (startTime.Hour >= 9 && startTime.Hour < 12) + { + addHour = 13; + var to12senconds = Convert.ToInt32((startTime.Date.AddHours(12) - startTime).TotalSeconds); + addSeconds = 18000 - to12senconds; + } + else if (startTime.Hour >= 12 && startTime.Hour < 13) + { + addHour = 18; + } + else if (startTime.Hour >= 13 && startTime.Hour < 18) + { + if (startTime.Hour == 13 && startTime.Minute <= 5) + { + //从16点开始小于5分钟以内,以当天18点结束 + addHour = 18; + } + else + { + addDay = CalculateAddDay(startTime.DayOfWeek); + addHour = 9; + var to18senconds = Convert.ToInt32((startTime.Date.AddHours(18) - startTime).TotalSeconds); + addSeconds = 18000 - to18senconds; + } + } + else if (startTime.Hour >= 18) + { + //下一个工作日的18点结束 + addDay = CalculateAddDay(startTime.DayOfWeek); + addHour = 14; + } + } + return startTime.Date.AddDays(addDay).AddHours(addHour).AddSeconds(addSeconds); + } + /// /// 计算剩余任务时间(秒) /// From 6160ac496c7eac6fb9103660b820f7a564aef7aa Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 18 Dec 2023 17:59:20 +0800 Subject: [PATCH 064/222] 1 --- BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs index 3fc4d9f..7ca33c2 100644 --- a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs +++ b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs @@ -234,7 +234,7 @@ namespace BBWYB.Server.Business expirationTime = expirationTime.Date.AddHours(9); else if (expirationTime.Hour >= 12 && expirationTime.Hour < 13) expirationTime = expirationTime.Date.AddHours(12); - else if (expirationTime.Hour >= 18) + else if (expirationTime.Hour >= 18 && expirationTime.Minute > 0) expirationTime = expirationTime.Date.AddDays(CalculateAddDay(expirationTime.DayOfWeek)).AddHours(9); var startTime = DateTime.Now; @@ -252,7 +252,7 @@ namespace BBWYB.Server.Business startTime = startTime.Date.AddHours(9); else if (startTime.Hour >= 12 && startTime.Hour < 13) startTime = startTime.Date.AddHours(13); - else if (startTime.Hour >= 18) + else if (startTime.Hour >= 18 && startTime.Minute > 1) startTime = startTime.Date.AddDays(CalculateAddDay(startTime.DayOfWeek)).AddHours(9); } From d692002bc920d0dda329e6e66181a331fa044c1b Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Mon, 18 Dec 2023 19:08:13 +0800 Subject: [PATCH 065/222] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=89=A9=E4=BD=99?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=8D=B3=E4=BD=BF=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs index 7ca33c2..cb96d12 100644 --- a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs +++ b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs @@ -232,9 +232,9 @@ namespace BBWYB.Server.Business //强制过期时间在工作时间点内 if (expirationTime.Hour < 9) expirationTime = expirationTime.Date.AddHours(9); - else if (expirationTime.Hour >= 12 && expirationTime.Hour < 13) + else if (expirationTime.Hour >= 12 && expirationTime.Minute > 0 && expirationTime.Hour < 13) //排除整点结束的到期时间 expirationTime = expirationTime.Date.AddHours(12); - else if (expirationTime.Hour >= 18 && expirationTime.Minute > 0) + else if (expirationTime.Hour >= 18 && expirationTime.Minute > 0) //排除整点结束的到期时间 expirationTime = expirationTime.Date.AddDays(CalculateAddDay(expirationTime.DayOfWeek)).AddHours(9); var startTime = DateTime.Now; @@ -252,7 +252,7 @@ namespace BBWYB.Server.Business startTime = startTime.Date.AddHours(9); else if (startTime.Hour >= 12 && startTime.Hour < 13) startTime = startTime.Date.AddHours(13); - else if (startTime.Hour >= 18 && startTime.Minute > 1) + else if (startTime.Hour >= 18 && startTime.Minute > 0) startTime = startTime.Date.AddDays(CalculateAddDay(startTime.DayOfWeek)).AddHours(9); } From d4490772ce65d4256065198115123fe4f34760b7 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 20 Dec 2023 14:24:57 +0800 Subject: [PATCH 066/222] =?UTF-8?q?EMS=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDKAdapter/ExpressCompanyNameConverter.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/SDKAdapter/ExpressCompanyNameConverter.cs b/SDKAdapter/ExpressCompanyNameConverter.cs index 9ae4333..0800251 100644 --- a/SDKAdapter/ExpressCompanyNameConverter.cs +++ b/SDKAdapter/ExpressCompanyNameConverter.cs @@ -107,6 +107,7 @@ namespace SDKAdapter new LogisticsCompanyRelationship(){SourceName="德邦",TargetName="德邦物流",TargetCode="debangwuliu"}, new LogisticsCompanyRelationship(){SourceName="德邦快递",TargetName="德邦快递",TargetCode="debangkuaidi"}, new LogisticsCompanyRelationship(){SourceName="EMS",TargetName="EMS",TargetCode="ems"}, + new LogisticsCompanyRelationship(){SourceName="EMS经济快递",TargetName="EMS",TargetCode="ems"}, new LogisticsCompanyRelationship(){SourceName="极兔速递",TargetName="极兔速递",TargetCode="jtexpress"}, new LogisticsCompanyRelationship(){SourceName="极兔快递(原百世快递)",TargetName="极兔速递",TargetCode="jtexpress"}, new LogisticsCompanyRelationship(){SourceName="极兔速递-原百世快递",TargetName="极兔速递",TargetCode="jtexpress"}, From a2f9cf8d8765228bdb2a5cc18b6db8f09b50b418 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Wed, 20 Dec 2023 23:54:25 +0800 Subject: [PATCH 067/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=95=86=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaserController.cs | 27 ++++++++ .../Purchaser/PurchaserBusiness.cs | 20 ++++++ .../Purchaser.cs | 33 ++++++---- .../PurchaserCategoryTagsBasicInfo.cs | 27 ++++++++ ...urchaser_CategoryTagsBasicInfo_Relation.cs | 27 ++++++++ .../Purchaser/QueryPurchaserRequest.cs | 31 +++++++++ .../Dto/Response/ListResponse.cs | 9 +++ .../Response/Product/ProductSkuResponse.cs | 8 +++ .../PurchaserCategoryTagsBasicInfoResponse.cs | 8 +++ .../Response/Purchaser/PurchaserResponse.cs | 64 +++++++++++++++++++ BBWYB.Server.Model/Enums.cs | 16 +++++ 11 files changed, 257 insertions(+), 13 deletions(-) create mode 100644 BBWYB.Server.API/Controllers/PurchaserController.cs create mode 100644 BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs rename BBWYB.Server.Model/Db/{PurchaseScheme => Purchaser}/Purchaser.cs (78%) create mode 100644 BBWYB.Server.Model/Db/Purchaser/PurchaserCategoryTagsBasicInfo.cs create mode 100644 BBWYB.Server.Model/Db/Purchaser/Purchaser_CategoryTagsBasicInfo_Relation.cs create mode 100644 BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs create mode 100644 BBWYB.Server.Model/Dto/Response/ListResponse.cs create mode 100644 BBWYB.Server.Model/Dto/Response/Product/ProductSkuResponse.cs create mode 100644 BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserCategoryTagsBasicInfoResponse.cs create mode 100644 BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs diff --git a/BBWYB.Server.API/Controllers/PurchaserController.cs b/BBWYB.Server.API/Controllers/PurchaserController.cs new file mode 100644 index 0000000..1c12c61 --- /dev/null +++ b/BBWYB.Server.API/Controllers/PurchaserController.cs @@ -0,0 +1,27 @@ +using BBWYB.Server.Business; +using BBWYB.Server.Model.Dto; +using Microsoft.AspNetCore.Mvc; + +namespace BBWYB.Server.API.Controllers +{ + public class PurchaserController : BaseApiController + { + private PurchaserBusiness purchaserBusiness; + + public PurchaserController(IHttpContextAccessor httpContextAccessor, PurchaserBusiness purchaserBusiness) : base(httpContextAccessor) + { + this.purchaserBusiness = purchaserBusiness; + } + + /// + /// 查询采购商列表 + /// + /// + /// + [HttpPost] + public ListResponse QueryPurchaserList([FromBody] QueryPurchaserRequest request) + { + return purchaserBusiness.QueryPurchaserList(request); + } + } +} diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs new file mode 100644 index 0000000..62b6d0e --- /dev/null +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -0,0 +1,20 @@ +using BBWYB.Common.Log; +using BBWYB.Common.Models; +using BBWYB.Server.Model.Dto; +using Yitter.IdGenerator; + +namespace BBWYB.Server.Business +{ + public class PurchaserBusiness : BaseBusiness, IDenpendency + { + public PurchaserBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) : base(fsql, nLogManager, idGenerator) + { + + } + + public ListResponse QueryPurchaserList(QueryPurchaserRequest request) + { + return new ListResponse(); + } + } +} diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/Purchaser.cs b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs similarity index 78% rename from BBWYB.Server.Model/Db/PurchaseScheme/Purchaser.cs rename to BBWYB.Server.Model/Db/Purchaser/Purchaser.cs index e4292ac..cbaf0a3 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/Purchaser.cs +++ b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; namespace BBWYB.Server.Model.Db { @@ -23,16 +23,25 @@ namespace BBWYB.Server.Model.Db public string Id2 { get; set; } /// - /// 采购商名称 + /// 发货地(产地) /// [Column(StringLength = 50)] - public string Name { get; set; } + public string Location { get; set; } /// - /// 发货地 + /// 经营模式 0贸易 1厂家 /// + [Column(DbType = "int", MapType = typeof(int))] + public Enums.ManagmentMode? ManagmentMode { get; set; } + [Column(StringLength = 50)] - public string Location { get; set; } + public string MemberId { get; set; } + + /// + /// 采购商名称 + /// + [Column(StringLength = 50)] + public string Name { get; set; } /// /// 采购平台 @@ -40,19 +49,17 @@ namespace BBWYB.Server.Model.Db [Column(MapType = typeof(int?))] public Enums.Platform? Platform { get; set; } - - [Column(StringLength = 50, IsNullable = true)] - public string MemberId { get; set; } - /// - /// 采购过的Sku数 + /// 采购次数 /// - public int? PurchasedSkuCount { get; set; } = 0; + [Column(DbType = "int")] + public int? PurchasedCount { get; set; } = 0; /// - /// 采购次数 + /// 采购过的Sku数 /// - public int? PurchasedCount { get; set; } = 0; + [Column(DbType = "int")] + public int? PurchasedSkuCount { get; set; } = 0; } diff --git a/BBWYB.Server.Model/Db/Purchaser/PurchaserCategoryTagsBasicInfo.cs b/BBWYB.Server.Model/Db/Purchaser/PurchaserCategoryTagsBasicInfo.cs new file mode 100644 index 0000000..341440a --- /dev/null +++ b/BBWYB.Server.Model/Db/Purchaser/PurchaserCategoryTagsBasicInfo.cs @@ -0,0 +1,27 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + [Table(Name = "purchasercategorytagsbasicinfo", DisableSyncStructure = true)] + public partial class PurchaserCategoryTagsBasicInfo + { + + [Column(DbType = "bigint", IsPrimary = true)] + public long Id { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + [Column(StringLength = 50)] + public string Name { get; set; } + + /// + /// 类型 主营类目=0 标签=1 + /// + [Column(MapType = typeof(int?))] + public Enums.PurchaserBasicInfoType? Type { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Db/Purchaser/Purchaser_CategoryTagsBasicInfo_Relation.cs b/BBWYB.Server.Model/Db/Purchaser/Purchaser_CategoryTagsBasicInfo_Relation.cs new file mode 100644 index 0000000..f7728b3 --- /dev/null +++ b/BBWYB.Server.Model/Db/Purchaser/Purchaser_CategoryTagsBasicInfo_Relation.cs @@ -0,0 +1,27 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + [Table(Name = "purchaser_categorytagsbasicinfo_relation", DisableSyncStructure = true)] + public partial class Purchaser_CategoryTagsBasicInfo_Relation + { + + [Column(DbType = "bigint", IsPrimary = true)] + public long Id { get; set; } + + [Column(DbType = "bigint")] + public long? BasicExtendedInfoId { get; set; } + + /// + /// 关系类型 主营类目=0 标签=1 + /// + [Column(DbType = "int")] + public Enums.PurchaserBasicInfoType? BasicType { get; set; } + + [Column(StringLength = 50)] + public string PurchaserId { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs new file mode 100644 index 0000000..b8f6361 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs @@ -0,0 +1,31 @@ +namespace BBWYB.Server.Model.Dto +{ + public class QueryPurchaserRequest + { + public string Spu { get; set; } + + public string Sku { get; set; } + + /// + /// 采购商Id集合 + /// + public List PurchaserIdList { get; set; } + + /// + /// 主营类目Id集合 + /// + public List CategoryIdList { get; set; } + + /// + /// 供应商产地 + /// + public string Location { get; set; } + + /// + /// 页码 从1开始 + /// + public int PageIndex { get; set; } + + public int PageSize { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/ListResponse.cs b/BBWYB.Server.Model/Dto/Response/ListResponse.cs new file mode 100644 index 0000000..87b3d34 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/ListResponse.cs @@ -0,0 +1,9 @@ +namespace BBWYB.Server.Model.Dto +{ + public class ListResponse where T : class + { + public List Items { get; set; } + + public long TotalCount { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Product/ProductSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Product/ProductSkuResponse.cs new file mode 100644 index 0000000..7705489 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Product/ProductSkuResponse.cs @@ -0,0 +1,8 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Model.Dto +{ + public class ProductSkuResponse : ProductSku + { + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserCategoryTagsBasicInfoResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserCategoryTagsBasicInfoResponse.cs new file mode 100644 index 0000000..bcdce27 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserCategoryTagsBasicInfoResponse.cs @@ -0,0 +1,8 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Model.Dto +{ + public class PurchaserCategoryTagsBasicInfoResponse: PurchaserCategoryTagsBasicInfo + { + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs new file mode 100644 index 0000000..33386fd --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs @@ -0,0 +1,64 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Model.Dto +{ + public class PurchaserResponse : Purchaser + { + /// + /// 类目集合 + /// + public IList CategoryList { get; set; } + + /// + /// 标签集合 + /// + public IList TagList { get; set; } + + /// + /// 绑定SPU数 + /// + public long? BindingSpuCount { get; set; } + + /// + /// 采购SPU数 + /// + public long? PurchasedSpuCount { get; set; } + + /// + /// 绑定SKU数 + /// + public long? BindingSkuCount { get; set; } + + /// + /// 采购SKU数 + /// + public long? PurchasedSkuCount { get; set; } + + /// + /// 采购订单数 + /// + public long? PurchaseOrderCount { get; set; } + + /// + /// 采购金额 + /// + public decimal? PurchaseAmount { get; set; } + + /// + /// 上次采购时间 + /// + public DateTime? LastPurchaseTime { get; set; } + + /// + /// 最近30天具有采购行为的店铺SKU + /// + public IList Recent30dProductSku { get; set; } + + public PurchaserResponse() + { + CategoryList = new List(); + TagList = new List(); + Recent30dProductSku = new List(); + } + } +} diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index dc80d1e..62132e6 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -330,5 +330,21 @@ { 首次采购 = 0, 首次优化 = 1, 再次优化 = 2 } + + /// + /// 厂家经营模式 + /// + public enum ManagmentMode + { + 贸易 = 0, 厂家 = 1 + } + + /// + /// 厂家扩展信息类型 + /// + public enum PurchaserBasicInfoType + { + 主营类目 = 0, 标签 = 1 + } } } From f8c4170bbb2af3c888e1da626d4826eb21851b64 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 21 Dec 2023 13:00:41 +0800 Subject: [PATCH 068/222] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BE=9B=E5=BA=94?= =?UTF-8?q?=E5=95=86=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaserController.cs | 22 ++++++++++ .../Purchaser/PurchaserBusiness.cs | 42 +++++++++++++++++++ ...sBasicInfo.cs => PurchaserExtendedInfo.cs} | 4 +- ....cs => Purchaser_ExtendedInfo_Relation.cs} | 10 ++--- .../EditPurchaserExtendedInfoRequest.cs | 13 ++++++ .../QueryPurchaserExtendedRequest.cs | 12 ++++++ .../PurchaserCategoryTagsBasicInfoResponse.cs | 8 ---- .../PurchaserExtendedInfoResponse.cs | 8 ++++ .../Response/Purchaser/PurchaserResponse.cs | 8 ++-- BBWYB.Server.Model/Enums.cs | 2 +- 10 files changed, 109 insertions(+), 20 deletions(-) rename BBWYB.Server.Model/Db/Purchaser/{PurchaserCategoryTagsBasicInfo.cs => PurchaserExtendedInfo.cs} (78%) rename BBWYB.Server.Model/Db/Purchaser/{Purchaser_CategoryTagsBasicInfo_Relation.cs => Purchaser_ExtendedInfo_Relation.cs} (55%) create mode 100644 BBWYB.Server.Model/Dto/Request/Purchaser/EditPurchaserExtendedInfoRequest.cs create mode 100644 BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserExtendedRequest.cs delete mode 100644 BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserCategoryTagsBasicInfoResponse.cs create mode 100644 BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserExtendedInfoResponse.cs diff --git a/BBWYB.Server.API/Controllers/PurchaserController.cs b/BBWYB.Server.API/Controllers/PurchaserController.cs index 1c12c61..e24c5dd 100644 --- a/BBWYB.Server.API/Controllers/PurchaserController.cs +++ b/BBWYB.Server.API/Controllers/PurchaserController.cs @@ -1,4 +1,5 @@ using BBWYB.Server.Business; +using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; using Microsoft.AspNetCore.Mvc; @@ -23,5 +24,26 @@ namespace BBWYB.Server.API.Controllers { return purchaserBusiness.QueryPurchaserList(request); } + + /// + /// 查询供应商主营类目或标签列表 + /// + /// + /// + [HttpPost] + public ListResponse QueryPurchaserCategoryList([FromBody] QueryPurchaserExtendedRequest request) + { + return purchaserBusiness.QueryPurchaserCategoryList(request); + } + + /// + /// 修改供应商扩展信息 + /// + /// + [HttpPost] + public void EditPurchaserExtendedInfo([FromBody] EditPurchaserExtendedInfoRequest request) + { + purchaserBusiness.EditPurchaserExtendedInfo(request); + } } } diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index 62b6d0e..36b4ec9 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -1,5 +1,7 @@ using BBWYB.Common.Log; using BBWYB.Common.Models; +using BBWYB.Server.Model; +using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; using Yitter.IdGenerator; @@ -16,5 +18,45 @@ namespace BBWYB.Server.Business { return new ListResponse(); } + + public ListResponse QueryPurchaserCategoryList(QueryPurchaserExtendedRequest request) + { + var list = fsql.Select() + .Where(x => x.Type == request.Type) + .WhereIf(!string.IsNullOrEmpty(request.Keywords), x => x.Name.Contains(request.Keywords)) + .Count(out var count) + .ToList(); + return new ListResponse { Items = list, TotalCount = count }; + } + + public void EditPurchaserExtendedInfo(EditPurchaserExtendedInfoRequest request) + { + var insertRelationList = new List(); + insertRelationList.AddRange(request.CategoryIdList.Select(x => new Purchaser_ExtendedInfo_Relation() + { + Id = idGenerator.NewLong(), + PurchaserId = request.PurchaserId, + ExtendedType = Enums.PurchaserBasicInfoType.主营类目, + ExtendedInfoId = x + })); + + insertRelationList.AddRange(request.TagIdList.Select(x => new Purchaser_ExtendedInfo_Relation() + { + Id = idGenerator.NewLong(), + PurchaserId = request.PurchaserId, + ExtendedType = Enums.PurchaserBasicInfoType.标签, + ExtendedInfoId = x + })); + + fsql.Transaction(() => + { + fsql.Delete().Where(r => r.PurchaserId == request.PurchaserId).ExecuteAffrows(); + fsql.Update(request.PurchaserId).Set(p => p.ManagmentMode, request.ManagmentMode).ExecuteAffrows(); + if (insertRelationList.Count() > 0) + fsql.Insert(insertRelationList).ExecuteAffrows(); + + }); + + } } } diff --git a/BBWYB.Server.Model/Db/Purchaser/PurchaserCategoryTagsBasicInfo.cs b/BBWYB.Server.Model/Db/Purchaser/PurchaserExtendedInfo.cs similarity index 78% rename from BBWYB.Server.Model/Db/Purchaser/PurchaserCategoryTagsBasicInfo.cs rename to BBWYB.Server.Model/Db/Purchaser/PurchaserExtendedInfo.cs index 341440a..73bd4ad 100644 --- a/BBWYB.Server.Model/Db/Purchaser/PurchaserCategoryTagsBasicInfo.cs +++ b/BBWYB.Server.Model/Db/Purchaser/PurchaserExtendedInfo.cs @@ -3,8 +3,8 @@ namespace BBWYB.Server.Model.Db { - [Table(Name = "purchasercategorytagsbasicinfo", DisableSyncStructure = true)] - public partial class PurchaserCategoryTagsBasicInfo + [Table(Name = "purchaserextendedinfo", DisableSyncStructure = true)] + public partial class PurchaserExtendedInfo { [Column(DbType = "bigint", IsPrimary = true)] diff --git a/BBWYB.Server.Model/Db/Purchaser/Purchaser_CategoryTagsBasicInfo_Relation.cs b/BBWYB.Server.Model/Db/Purchaser/Purchaser_ExtendedInfo_Relation.cs similarity index 55% rename from BBWYB.Server.Model/Db/Purchaser/Purchaser_CategoryTagsBasicInfo_Relation.cs rename to BBWYB.Server.Model/Db/Purchaser/Purchaser_ExtendedInfo_Relation.cs index f7728b3..a27c1df 100644 --- a/BBWYB.Server.Model/Db/Purchaser/Purchaser_CategoryTagsBasicInfo_Relation.cs +++ b/BBWYB.Server.Model/Db/Purchaser/Purchaser_ExtendedInfo_Relation.cs @@ -3,21 +3,21 @@ namespace BBWYB.Server.Model.Db { - [Table(Name = "purchaser_categorytagsbasicinfo_relation", DisableSyncStructure = true)] - public partial class Purchaser_CategoryTagsBasicInfo_Relation + [Table(Name = "purchaser_extendedInfo_relation", DisableSyncStructure = true)] + public partial class Purchaser_ExtendedInfo_Relation { [Column(DbType = "bigint", IsPrimary = true)] public long Id { get; set; } [Column(DbType = "bigint")] - public long? BasicExtendedInfoId { get; set; } + public long? ExtendedInfoId { get; set; } /// /// 关系类型 主营类目=0 标签=1 /// - [Column(DbType = "int")] - public Enums.PurchaserBasicInfoType? BasicType { get; set; } + [Column(DbType = "int",MapType = typeof(int?))] + public Enums.PurchaserBasicInfoType? ExtendedType { get; set; } [Column(StringLength = 50)] public string PurchaserId { get; set; } diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/EditPurchaserExtendedInfoRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/EditPurchaserExtendedInfoRequest.cs new file mode 100644 index 0000000..8747b10 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/Purchaser/EditPurchaserExtendedInfoRequest.cs @@ -0,0 +1,13 @@ +namespace BBWYB.Server.Model.Dto +{ + public class EditPurchaserExtendedInfoRequest + { + public string PurchaserId { get; set; } + + public Enums.ManagmentMode ManagmentMode { get; set; } + + public List CategoryIdList { get; set; } + + public List TagIdList { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserExtendedRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserExtendedRequest.cs new file mode 100644 index 0000000..7481987 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserExtendedRequest.cs @@ -0,0 +1,12 @@ +namespace BBWYB.Server.Model.Dto +{ + public class QueryPurchaserExtendedRequest + { + public Enums.PurchaserBasicInfoType Type { get; set; } + + /// + /// 不传关键字默认查所有 + /// + public string Keywords { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserCategoryTagsBasicInfoResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserCategoryTagsBasicInfoResponse.cs deleted file mode 100644 index bcdce27..0000000 --- a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserCategoryTagsBasicInfoResponse.cs +++ /dev/null @@ -1,8 +0,0 @@ -using BBWYB.Server.Model.Db; - -namespace BBWYB.Server.Model.Dto -{ - public class PurchaserCategoryTagsBasicInfoResponse: PurchaserCategoryTagsBasicInfo - { - } -} diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserExtendedInfoResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserExtendedInfoResponse.cs new file mode 100644 index 0000000..6ba1571 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserExtendedInfoResponse.cs @@ -0,0 +1,8 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Model.Dto +{ + public class PurchaserExtendedInfoResponse: PurchaserExtendedInfo + { + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs index 33386fd..6d3f3d9 100644 --- a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs @@ -7,12 +7,12 @@ namespace BBWYB.Server.Model.Dto /// /// 类目集合 /// - public IList CategoryList { get; set; } + public IList CategoryList { get; set; } /// /// 标签集合 /// - public IList TagList { get; set; } + public IList TagList { get; set; } /// /// 绑定SPU数 @@ -56,8 +56,8 @@ namespace BBWYB.Server.Model.Dto public PurchaserResponse() { - CategoryList = new List(); - TagList = new List(); + CategoryList = new List(); + TagList = new List(); Recent30dProductSku = new List(); } } diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index 62132e6..f55d25a 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -340,7 +340,7 @@ } /// - /// 厂家扩展信息类型 + /// 厂家扩展信息类型 主营类目 = 0, 标签 = 1 /// public enum PurchaserBasicInfoType { From d3e64c6e0721e938e7f4e71118c909e854c6b074 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 21 Dec 2023 16:51:03 +0800 Subject: [PATCH 069/222] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=8B=B3=E6=8E=A2?= =?UTF-8?q?=E7=B1=BB=E7=9B=AE=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DataRepairController.cs | 4 ++ .../DataRepair/DataRepairBusiness.cs | 44 +++++++++++++++++++ .../Purchaser/PurchaserBusiness.cs | 2 +- .../QueryPurchaserExtendedRequest.cs | 2 +- BBWYB.Server.Model/Enums.cs | 2 +- .../QuanTan_Supplier_ProductClient.cs | 6 +++ ...n_Supplier_SearchProductCategoryRequest.cs | 13 ++++++ ...uanTan_Supplier_ProductCategoryResponse.cs | 9 ++++ .../Client/Base/OP_PlatformClient.cs | 5 +++ .../Client/Impl/OP_QuanTanClient.cs | 18 ++++++++ .../Product/OP_QueryProductCategoryRequest.cs | 9 ++++ .../Models/Response/OP_ListResponse.cs | 9 ++++ .../Product/OP_ProductCategoryResponse.cs | 9 ++++ 13 files changed, 129 insertions(+), 3 deletions(-) create mode 100644 QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchProductCategoryRequest.cs create mode 100644 QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductCategoryResponse.cs create mode 100644 SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductCategoryRequest.cs create mode 100644 SDKAdapter/OperationPlatform/Models/Response/OP_ListResponse.cs create mode 100644 SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductCategoryResponse.cs diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index 71178f4..f51502a 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -96,5 +96,9 @@ namespace BBWYB.Server.API.Controllers { dataRepairBusiness.RepairPurchaseSchemeLastPurchasePrice(); } + + [HttpPost] + public void SyncProductCategory() + { dataRepairBusiness.SyncProductCategory(); } } } diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 590054a..b511af3 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -958,5 +958,49 @@ namespace BBWYB.Server.Business } Console.WriteLine(schemeGroups.Count()); } + + public void SyncProductCategory() + { + List insertList = new List(); + List deletePurchaserExtendedIdList = new List(); + + var dbCategoryList = fsql.Select() + .Where(x => x.Type == Enums.PurchaserBasicInfoType.主营类目) + .ToList(); + + var client = opPlatformClientFactory.GetClient(AdapterEnums.PlatformType.拳探); + var request = new OP_QueryProductCategoryRequest() + { + PageIndex = 1, + PageSize = 50, + AppKey = "BBWYB2023022501", + AppSecret = "3a1521deccc6819d61788a0d6baae49e9", + AppToken = "9" + }; + + var qtCategoryList = new List(); + var response = client.GetProductCategoryList(request); + if (response.Items != null) + qtCategoryList.AddRange(response.Items); + + + //找出新增的类目 + var newCategoryList = qtCategoryList.Where(c => !dbCategoryList.Any(dc => dc.Id == long.Parse(c.CategoryId))).ToList(); + if (newCategoryList.Count() > 0) + { + insertList.AddRange(newCategoryList.Select(c => new PurchaserExtendedInfo() + { + Id = long.Parse(c.CategoryId), + Name = c.CategoryName, + CreateTime = DateTime.Now, + Type = Enums.PurchaserBasicInfoType.主营类目 + }).ToList()); + } + + fsql.Insert(insertList).ExecuteAffrows(); + + //找出接口丢失的类目 + + } } } diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index 36b4ec9..568ea12 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -22,7 +22,7 @@ namespace BBWYB.Server.Business public ListResponse QueryPurchaserCategoryList(QueryPurchaserExtendedRequest request) { var list = fsql.Select() - .Where(x => x.Type == request.Type) + .WhereIf(request.Type != null, x => x.Type == request.Type) .WhereIf(!string.IsNullOrEmpty(request.Keywords), x => x.Name.Contains(request.Keywords)) .Count(out var count) .ToList(); diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserExtendedRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserExtendedRequest.cs index 7481987..27d0d5a 100644 --- a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserExtendedRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserExtendedRequest.cs @@ -2,7 +2,7 @@ { public class QueryPurchaserExtendedRequest { - public Enums.PurchaserBasicInfoType Type { get; set; } + public Enums.PurchaserBasicInfoType? Type { get; set; } /// /// 不传关键字默认查所有 diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index f55d25a..af472dc 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -332,7 +332,7 @@ } /// - /// 厂家经营模式 + /// 厂家经营模式 贸易 = 0, 厂家 = 1 /// public enum ManagmentMode { diff --git a/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_ProductClient.cs b/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_ProductClient.cs index 01770d1..23e0553 100644 --- a/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_ProductClient.cs +++ b/QuanTan.SDK/Client/Supplier/QuanTan_Supplier_ProductClient.cs @@ -1,5 +1,6 @@ using BBWYB.Common.Http; using QuanTan.SDK.Model; +using QuanTan.SDK.Models; using QuanTan.SDK.Models.Supplier; namespace QuanTan.SDK.Client.Supplier @@ -24,5 +25,10 @@ namespace QuanTan.SDK.Client.Supplier { return SendRequest("api/platform/supply/product/price/change", request, appId, appSecret); } + + public QuanTanResponse> GetProductCategoryList(QuanTan_Supplier_SearchProductCategoryRequest request, string appId, string appSecret) + { + return SendRequest>("api/platform/supply/category/list", request, appId, appSecret); + } } } diff --git a/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchProductCategoryRequest.cs b/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchProductCategoryRequest.cs new file mode 100644 index 0000000..11ea8fb --- /dev/null +++ b/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchProductCategoryRequest.cs @@ -0,0 +1,13 @@ +namespace QuanTan.SDK.Models.Supplier +{ + public class QuanTan_Supplier_SearchProductCategoryRequest + { + public string storeId { get; set; } + + public string categoryIds { get; set; } + + public int pageSize { get; set; } = 20; + + public int page { get; set; } = 1; + } +} diff --git a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductCategoryResponse.cs b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductCategoryResponse.cs new file mode 100644 index 0000000..06a0caa --- /dev/null +++ b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductCategoryResponse.cs @@ -0,0 +1,9 @@ +namespace QuanTan.SDK.Models.Supplier +{ + public class QuanTan_Supplier_ProductCategoryResponse + { + public string CategoryId { get; set; } + + public string CategoryName { get; set; } + } +} diff --git a/SDKAdapter/OperationPlatform/Client/Base/OP_PlatformClient.cs b/SDKAdapter/OperationPlatform/Client/Base/OP_PlatformClient.cs index 066e416..5e477ab 100644 --- a/SDKAdapter/OperationPlatform/Client/Base/OP_PlatformClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Base/OP_PlatformClient.cs @@ -56,5 +56,10 @@ namespace SDKAdapter.OperationPlatform.Client { throw new NotImplementedException(); } + + public virtual OP_ListResponse GetProductCategoryList(OP_QueryProductCategoryRequest request) + { + throw new NotImplementedException(); + } } } diff --git a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs index e0cfb85..df103e0 100644 --- a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs @@ -242,5 +242,23 @@ namespace SDKAdapter.OperationPlatform.Client if (qtResponse.Status != 200) throw new BusinessException(qtResponse.Message); } + + public override OP_ListResponse GetProductCategoryList(OP_QueryProductCategoryRequest request) + { + var qtResponse = supplier_ProductClient.GetProductCategoryList(new QuanTan_Supplier_SearchProductCategoryRequest() + { + page = request.PageIndex, + pageSize = request.PageSize + }, request.AppKey, request.AppSecret); + return new OP_ListResponse() + { + Count = qtResponse.Data.Count, + Items = qtResponse.Data.List != null && qtResponse.Data.List.Count() > 0 ? qtResponse.Data.List.Select(x => new OP_ProductCategoryResponse() + { + CategoryId = x.CategoryId, + CategoryName = x.CategoryName, + }).ToList() : null + }; + } } } diff --git a/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductCategoryRequest.cs b/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductCategoryRequest.cs new file mode 100644 index 0000000..ebed883 --- /dev/null +++ b/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductCategoryRequest.cs @@ -0,0 +1,9 @@ +namespace SDKAdapter.OperationPlatform.Models +{ + public class OP_QueryProductCategoryRequest: BasePlatformRequest + { + public int PageIndex { get; set; } + + public int PageSize { get; set; } + } +} diff --git a/SDKAdapter/OperationPlatform/Models/Response/OP_ListResponse.cs b/SDKAdapter/OperationPlatform/Models/Response/OP_ListResponse.cs new file mode 100644 index 0000000..3a1870f --- /dev/null +++ b/SDKAdapter/OperationPlatform/Models/Response/OP_ListResponse.cs @@ -0,0 +1,9 @@ +namespace SDKAdapter.OperationPlatform.Models +{ + public class OP_ListResponse where T:class + { + public long Count { get; set; } + + public List Items { get; set; } + } +} diff --git a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductCategoryResponse.cs b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductCategoryResponse.cs new file mode 100644 index 0000000..999fa21 --- /dev/null +++ b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductCategoryResponse.cs @@ -0,0 +1,9 @@ +namespace SDKAdapter.OperationPlatform.Models +{ + public class OP_ProductCategoryResponse + { + public string CategoryId { get; set; } + + public string CategoryName { get; set; } + } +} From d33382460f532baaa46591d7773ec699152d9cb5 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 21 Dec 2023 19:20:58 +0800 Subject: [PATCH 070/222] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BE=85=E8=AE=AE?= =?UTF-8?q?=E4=BB=B7=E4=BB=BB=E5=8A=A1=E7=BC=BA=E5=B0=91tasktype=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Sync/OrderSyncBusiness.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index fd16504..d63ccd0 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -438,7 +438,7 @@ namespace BBWYB.Server.Business.Sync OrderSn = o.OrderSn, ShopId = shopId, SkuId = osku.SkuId, - //TaskType = Enums.TimeLimitTaskType.待议价任务 + TaskType = Enums.TimeLimitTaskType.待议价任务 }); } #endregion From 65eeaef937b1649929560493508abd8885e7ef31 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 21 Dec 2023 19:34:44 +0800 Subject: [PATCH 071/222] =?UTF-8?q?=E4=BF=AE=E5=A4=8D5=E5=B0=8F=E6=97=B6?= =?UTF-8?q?=E5=89=A9=E4=BD=99=E6=97=B6=E9=97=B4Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TimeLimitTask/TimeLimitRules.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs index cb96d12..6193de3 100644 --- a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs +++ b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs @@ -178,12 +178,12 @@ namespace BBWYB.Server.Business if (startTime.DayOfWeek == DayOfWeek.Sunday) { addDay = 1; - addHour = 14; + addHour = 15; } else { if (startTime.Hour < 9) - addHour = 14; + addHour = 15; else if (startTime.Hour >= 9 && startTime.Hour < 12) { addHour = 13; @@ -207,13 +207,19 @@ namespace BBWYB.Server.Business addHour = 9; var to18senconds = Convert.ToInt32((startTime.Date.AddHours(18) - startTime).TotalSeconds); addSeconds = 18000 - to18senconds; + if (addSeconds > 10800) + { + //到第二天9点开始也超过3个小时,就从下午13点开始计算 + addHour = 13; + addSeconds -= 10800; + } } } else if (startTime.Hour >= 18) { //下一个工作日的18点结束 addDay = CalculateAddDay(startTime.DayOfWeek); - addHour = 14; + addHour = 15; } } return startTime.Date.AddDays(addDay).AddHours(addHour).AddSeconds(addSeconds); From c19929d99cd1f4fd53dd64040f0d378bbcfc7780 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Fri, 22 Dec 2023 00:28:50 +0800 Subject: [PATCH 072/222] 1 --- BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs index 6193de3..75b501e 100644 --- a/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs +++ b/BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs @@ -291,7 +291,6 @@ namespace BBWYB.Server.Business startTime = startTime.Date.AddDays(CalculateAddDay(startTime.DayOfWeek)).AddHours(9); } } - } return lessTime; } From ec2fe4443eb54aef69976ba9f3996e73ded99b14 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Fri, 22 Dec 2023 02:36:02 +0800 Subject: [PATCH 073/222] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=95=86=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E5=92=8C=E4=BA=A7=E5=9C=B0=E6=90=9C=E7=B4=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaserController.cs | 22 ++++++++++ .../Purchaser/PurchaserBusiness.cs | 41 ++++++++++++++++++- .../Purchaser/QueryPurchaserRequest.cs | 10 +++-- 3 files changed, 69 insertions(+), 4 deletions(-) diff --git a/BBWYB.Server.API/Controllers/PurchaserController.cs b/BBWYB.Server.API/Controllers/PurchaserController.cs index e24c5dd..0bc88a4 100644 --- a/BBWYB.Server.API/Controllers/PurchaserController.cs +++ b/BBWYB.Server.API/Controllers/PurchaserController.cs @@ -14,6 +14,28 @@ namespace BBWYB.Server.API.Controllers this.purchaserBusiness = purchaserBusiness; } + /// + /// 根据关键词搜索采购商名称列表 + /// + /// + /// + [HttpGet("{keywords}")] + public ListResponse QueryPurchaserNameList([FromRoute] string keywords) + { + return purchaserBusiness.QueryPurchaserNameList(keywords); + } + + /// + /// 根据关键词搜索采购商产地列表 + /// + /// + /// + [HttpGet("{keywords}")] + public ListResponse QueryPurchaserLocationList([FromRoute] string keywords) + { + return purchaserBusiness.QueryPurchaserLocationList(keywords); + } + /// /// 查询采购商列表 /// diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index 568ea12..21d9853 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -14,9 +14,48 @@ namespace BBWYB.Server.Business } + public ListResponse QueryPurchaserNameList(string keywords) + { + if (string.IsNullOrEmpty(keywords)) + throw new BusinessException("关键字不能为空"); + var list = fsql.Select().Where(p => p.Name.Contains(keywords)).Distinct().ToList(x => x.Name); + return new ListResponse { Items = list, TotalCount = list.Count() }; + } + + public ListResponse QueryPurchaserLocationList(string keywords) + { + if (string.IsNullOrEmpty(keywords)) + throw new BusinessException("关键字不能为空"); + var list = fsql.Select().Where(p => p.Location.Contains(keywords)).Distinct().ToList(x => x.Location); + return new ListResponse { Items = list, TotalCount = list.Count() }; + } + public ListResponse QueryPurchaserList(QueryPurchaserRequest request) { - return new ListResponse(); + if (request.PageSize > 20) + request.PageSize = 20; + var purchaserList = fsql.Select() + .WhereIf(!string.IsNullOrEmpty(request.Spu), p => fsql.Select() + .Where(psp1 => psp1.PurchaserId == p.Id && + psp1.ProductId == request.Spu) + .Any()) + .WhereIf(!string.IsNullOrEmpty(request.Sku), p => fsql.Select() + .Where(psp2 => psp2.PurchaserId == p.Id && + psp2.SkuId == request.Sku) + .Any()) + .WhereIf(request.PurchaserNameList != null && request.PurchaserNameList.Count() > 0, p => request.PurchaserNameList.Contains(p.Name)) + .WhereIf(request.CategoryIdList != null && request.CategoryIdList.Count() > 0, p => fsql.Select() + .Where(per => per.PurchaserId == p.Id && + request.CategoryIdList.Contains(per.ExtendedInfoId.Value)).Any()) + .WhereIf(request.LocationList != null && request.LocationList.Count() > 0, p => request.LocationList.Contains(p.Location)) + .Page(request.PageIndex, request.PageSize) + .Count(out var count) + .ToList(); + return new ListResponse() + { + Items = purchaserList, + TotalCount = count + }; } public ListResponse QueryPurchaserCategoryList(QueryPurchaserExtendedRequest request) diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs index b8f6361..080d820 100644 --- a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs @@ -9,7 +9,7 @@ /// /// 采购商Id集合 /// - public List PurchaserIdList { get; set; } + public List PurchaserNameList { get; set; } /// /// 主营类目Id集合 @@ -17,15 +17,19 @@ public List CategoryIdList { get; set; } /// - /// 供应商产地 + /// 供应商产地集合 /// - public string Location { get; set; } + public List LocationList { get; set; } + /// /// 页码 从1开始 /// public int PageIndex { get; set; } + /// + /// 页记录数 最大20 + /// public int PageSize { get; set; } } } From 3a424c316881147a82525a1df191f4fb34cfb4e8 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 22 Dec 2023 16:22:22 +0800 Subject: [PATCH 074/222] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=95=86=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Purchaser/PurchaserBusiness.cs | 143 ++++++++++++++++++ .../Purchaser/QueryPurchaserRequest.cs | 2 + 2 files changed, 145 insertions(+) diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index 21d9853..d8392a9 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -51,6 +51,149 @@ namespace BBWYB.Server.Business .Page(request.PageIndex, request.PageSize) .Count(out var count) .ToList(); + + var purchaserIdList = purchaserList.Select(p => p.Id).ToList(); + + #region 查询SPU绑定数/SKU绑定数 + var bindList = fsql.Select() + .InnerJoin((psp, psc) => psp.SkuPurchaseSchemeId == psc.Id) + .Where((psp, psc) => psc.ShopId == request.ShopId && purchaserIdList.Contains(psp.PurchaserId)) + .GroupBy((psp, psc) => new { psp.PurchaserId, psp.ProductId, psp.SkuId }) + .ToList(g => new + { + g.Key.PurchaserId, + g.Key.ProductId, + g.Key.SkuId + }); + #endregion + + #region 查询SPU采购数/SKU采购数 + var purchasedList = fsql.Select() + .InnerJoin((spr, ps) => spr.SkuId == ps.Id) + .Where((spr, ps) => ps.ShopId == request.ShopId && purchaserIdList.Contains(spr.PurchaserId)) + .GroupBy((spr, ps) => new { spr.PurchaserId, spr.SkuId, ps.ProductId }) + .ToList(g => new + { + g.Key.PurchaserId, + g.Key.ProductId, + g.Key.SkuId + }); + + #endregion + + #region 查询订单数 + var poList = fsql.Select() + .InnerJoin((opi, o) => opi.OrderId == o.Id) + .Where((opi, o) => opi.ShopId == request.ShopId && + opi.IsEnabled == true && + o.OrderState != Enums.OrderState.已取消 && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((opi, o) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + Count = g.Count() + }); + + #endregion + + #region 查询采购金额 + var purchaseAmountList = fsql.Select() + .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == o.Id) + .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == ori.OrderId && ocd.SkuId == ori.BelongSkuId) + .InnerJoin((ocd, o, ori, opi) => ori.OrderId == opi.OrderId) + .Where((ocd, o, ori, opi) => o.ShopId == request.ShopId && + o.OrderState != Enums.OrderState.已取消 && + ocd.IsEnabled == true && + opi.IsEnabled == true && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((ocd, o, ori, opi) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + PurchaseAmount = g.Sum(g.Value.Item1.SkuAmount) + g.Sum(g.Value.Item1.PurchaseFreight) + }); + #endregion + + #region 查询最近采购时间 + var recentPurchaseTimeList = fsql.Select() + .InnerJoin((opi1, o) => o.OrderState != Enums.OrderState.已取消) + .Where((opi1, o) => opi1.ShopId == request.ShopId && + purchaserIdList.Contains(opi1.PurchaserId) && + opi1.IsEnabled == true) + .GroupBy((opi1, o) => opi1.PurchaserId) + .WithTempQuery(g => new { MaxId = g.Max(g.Value.Item1.Id) }) + .From() + .InnerJoin((opi1, opi2) => opi1.MaxId == opi2.Id) + .ToList((opi1, opi2) => new + { + opi2.PurchaserId, + opi2.CreateTime + }); + #endregion + + #region 查询标签/主营类目 + var purchaserExtendInfoList = fsql.Select() + .InnerJoin((pei, per) => pei.Id == per.ExtendedInfoId) + .Where((pei, per) => purchaserIdList.Contains(per.PurchaserId)) + .ToList((pei, per) => new + { + pei.Id, + pei.Name, + pei.Type, + per.PurchaserId + }); + #endregion + + foreach (var purchaser in purchaserList) + { + #region SPU绑定数/SKU绑定数 + var currentBindList = bindList.Where(x => x.PurchaserId == purchaser.Id).ToList(); + purchaser.BindingSpuCount = currentBindList.Select(x => x.ProductId).Distinct().Count(); + purchaser.BindingSkuCount = currentBindList.Select(x => x.SkuId).Count(); + #endregion + + #region SPU采购数/SKU采购数 + var currentPurchasedList = purchasedList.Where(x => x.PurchaserId == purchaser.Id).ToList(); + purchaser.PurchasedSpuCount = currentPurchasedList.Select(x => x.ProductId).Distinct().Count(); + purchaser.PurchasedSkuCount = currentPurchasedList.Select(x => x.SkuId).Count(); + #endregion + + #region 订单数 + var currentOpiList = poList.Where(x => x.PurchaserId == purchaser.Id).ToList(); + purchaser.PurchaseOrderCount = currentOpiList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.Count ?? 0; + #endregion + + #region 采购金额 + var currentOpiAmountList = purchaseAmountList.Where(x => x.PurchaserId == purchaser.Id).ToList(); + purchaser.PurchaseAmount = currentOpiAmountList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.PurchaseAmount ?? 0; + #endregion + + #region 最近采购时间 + var currentRecentPurchaseTimeList = recentPurchaseTimeList.Where(x => x.PurchaserId == purchaser.Id).ToList(); + purchaser.LastPurchaseTime = currentRecentPurchaseTimeList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.CreateTime; + #endregion + + #region 主营类目/标签 + var currentExtendInfoList = purchaserExtendInfoList.Where(x => x.PurchaserId == purchaser.Id).ToList(); + purchaser.CategoryList = currentExtendInfoList.Where(x => x.Type == Enums.PurchaserBasicInfoType.主营类目) + .Select(x => new PurchaserExtendedInfoResponse() + { + Id = x.Id, + Name = x.Name, + Type = x.Type + }).ToList(); + + purchaser.TagList = currentExtendInfoList.Where(x => x.Type == Enums.PurchaserBasicInfoType.标签) + .Select(x => new PurchaserExtendedInfoResponse() + { + Id = x.Id, + Name = x.Name, + Type = x.Type + }).ToList(); + #endregion + } + return new ListResponse() { Items = purchaserList, diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs index 080d820..7c17296 100644 --- a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs @@ -2,6 +2,8 @@ { public class QueryPurchaserRequest { + public long ShopId { get; set; } + public string Spu { get; set; } public string Sku { get; set; } From d81fcd14a6aac34d49d68843d3d24e552ade01ec Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 22 Dec 2023 17:26:46 +0800 Subject: [PATCH 075/222] 1 --- .../Controllers/PurchaseSchemeController.cs | 1 + .../PurchaseOrder/PurchaseOrderBusiness.cs | 18 +-- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 113 +++++++++++++----- .../Purchaser/PurchaserBusiness.cs | 9 +- BBWYB.Server.Model/Db/Purchaser/Purchaser.cs | 10 -- .../PurchaseScheme/QuerySchemeRequest.cs | 5 + .../PurchaseScheme/PurchaseSchemeResponse.cs | 4 +- .../Response/Purchaser/PurchaserResponse.cs | 12 +- 8 files changed, 107 insertions(+), 65 deletions(-) diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index 13470ce..0e4b68f 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -44,6 +44,7 @@ namespace BBWYB.Server.API.Controllers [HttpPost] public IList GetPurchaseSchemeList([FromBody] QuerySchemeRequest querySchemeRequest) { + querySchemeRequest.IncludePurchaserStatisticsInfo = 1; return purchaseSchemeBusiness.GetPurchaseSchemeList(querySchemeRequest); } diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 47f8727..9a0ba76 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -600,10 +600,10 @@ namespace BBWYB.Server.Business SkuId = x })); } - var update = fsql.Update(purchaserId) - .Set(p => p.PurchasedCount + 1) - .SetIf(newSkuRelationCount > 0, p => p.PurchasedSkuCount + newSkuRelationCount); - updatePurchaserList.Add(update); + //var update = fsql.Update(purchaserId) + // .Set(p => p.PurchasedCount + 1) + // .SetIf(newSkuRelationCount > 0, p => p.PurchasedSkuCount + newSkuRelationCount); + //updatePurchaserList.Add(update); } } @@ -777,11 +777,11 @@ namespace BBWYB.Server.Business foreach (var update in updateOrderSkuCostList) update.ExecuteAffrows(); } - if (updatePurchaserList.Count() > 0) - { - foreach (var update in updatePurchaserList) - update.ExecuteAffrows(); - } + //if (updatePurchaserList.Count() > 0) + //{ + // foreach (var update in updatePurchaserList) + // update.ExecuteAffrows(); + //} }); //#region 更新采购方案最新价格 diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 5283752..64699c6 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -678,27 +678,30 @@ namespace BBWYB.Server.Business var skuIdList = purchaseSchemeList.Select(ps => ps.SkuId).Distinct().ToList(); var recentDate = DateTime.Now.Date.AddDays(-30); - var purchaseSchemeProductList = fsql.Select() - .InnerJoin((psp, p) => psp.PurchaserId == p.Id) - .Where((psp, p) => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)) - .ToList((psp, p) => new PurchaseSchemeProductResponse - { - CreateTime = psp.CreateTime, - Id = psp.Id, - ProductId = psp.ProductId, - PurchaseProductId = psp.PurchaseProductId, - PurchaseUrl = psp.PurchaseUrl, - SkuId = psp.SkuId, - SkuPurchaseSchemeId = psp.SkuPurchaseSchemeId, - PurchaserId = p.Id, - PurchaserId2 = p.Id2, - PurchaserLocation = p.Location, - PurchaserName = p.Name, - PurchasePlatform = p.Platform, - PurchaserMemberId = p.MemberId, - PurchaserPurchasedCount = p.PurchasedCount, - PurchaserPurchasedSkuCount = p.PurchasedSkuCount, - }); + //var purchaseSchemeProductList = fsql.Select() + // .InnerJoin((psp, p) => psp.PurchaserId == p.Id) + // .Where((psp, p) => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)) + // .ToList((psp, p) => new PurchaseSchemeProductResponse + // { + // CreateTime = psp.CreateTime, + // Id = psp.Id, + // ProductId = psp.ProductId, + // PurchaseProductId = psp.PurchaseProductId, + // PurchaseUrl = psp.PurchaseUrl, + // SkuId = psp.SkuId, + // SkuPurchaseSchemeId = psp.SkuPurchaseSchemeId, + // PurchaserId = p.Id, + // PurchaserId2 = p.Id2, + // PurchaserLocation = p.Location, + // PurchaserName = p.Name, + // PurchasePlatform = p.Platform, + // PurchaserMemberId = p.MemberId + // //PurchaserPurchasedCount = p.PurchasedCount, + // //PurchaserPurchasedSkuCount = p.PurchasedSkuCount, + // }); + var purchaseSchemeProductList = fsql.Select() + .Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)) + .ToList(); var purchaseSchemeProductSkuList = fsql.Select().Where(p => purchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)) .ToList().Map>(); @@ -758,6 +761,48 @@ namespace BBWYB.Server.Business } } + List purchaserIdList = purchaseSchemeProductList.Select(x => x.PurchaserId).Distinct().ToList(); + var dbPurchaserList = fsql.Select(purchaserIdList).ToList(); + if (request.IncludePurchaserStatisticsInfo == 1) + { + #region 查询SKU采购数 + var purchasedSkuList = fsql.Select() + .InnerJoin((spr, ps) => spr.SkuId == ps.Id) + .Where((spr, ps) => ps.ShopId == request.ShopId && purchaserIdList.Contains(spr.PurchaserId)) + .GroupBy((spr, ps) => new { spr.PurchaserId, spr.SkuId }) + .ToList(g => new + { + g.Key.PurchaserId, + g.Key.SkuId + }); + + #endregion + + #region 查询订单数 + var poList = fsql.Select() + .InnerJoin((opi, o) => opi.OrderId == o.Id) + .Where((opi, o) => opi.ShopId == request.ShopId && + opi.IsEnabled == true && + o.OrderState != Enums.OrderState.已取消 && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((opi, o) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + Count = g.Count() + }); + + #endregion + + foreach (var purchaser in dbPurchaserList) + { + purchaser.PurchasedSkuCount = purchasedSkuList.Where(x => x.PurchaserId == purchaser.Id) + .Select(x => x.SkuId) + .Distinct() + .Count(); + purchaser.PurchasedCount = poList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.Count ?? 0; + } + } foreach (var scheme in purchaseSchemeList) { @@ -771,6 +816,18 @@ namespace BBWYB.Server.Business psk.PurchaseProductId == schemeProduct.PurchaseProductId); if (schemeProductSkuList.Count() > 0) schemeProduct.PurchaseSchemeProductSkuList.AddRange(schemeProductSkuList); + + var purchaser = dbPurchaserList.FirstOrDefault(p => p.Id == schemeProduct.PurchaserId); + if (purchaser != null) + { + schemeProduct.PurchaserId = purchaser.Id; + schemeProduct.PurchaserId2 = purchaser.Id2; + schemeProduct.PurchaserLocation = purchaser.Location; + schemeProduct.PurchaserMemberId = purchaser.MemberId; + schemeProduct.PurchaserName = purchaser.Name; + schemeProduct.PurchaserPurchasedCount = purchaser.PurchasedCount; + schemeProduct.PurchaserPurchasedSkuCount = purchaser.PurchasedSkuCount; + } } } @@ -779,17 +836,9 @@ namespace BBWYB.Server.Business { if (!scheme.PurchaserList.Any(p => p.Id == schemeProduct.PurchaserId)) { - scheme.PurchaserList.Add(new Purchaser() - { - Id = schemeProduct.PurchaserId, - Id2 = schemeProduct.PurchaserId2, - Location = schemeProduct.PurchaserLocation, - Name = schemeProduct.PurchaserName, - Platform = schemeProduct.PurchasePlatform, - MemberId = schemeProduct.PurchaserMemberId, - PurchasedCount = schemeProduct.PurchaserPurchasedCount, - PurchasedSkuCount = schemeProduct.PurchaserPurchasedSkuCount - }); + var purchaser = dbPurchaserList.FirstOrDefault(p => p.Id == schemeProduct.PurchaserId); + if (purchaser != null) + scheme.PurchaserList.Add(purchaser); } } #endregion diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index d8392a9..96bd32a 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -160,18 +160,15 @@ namespace BBWYB.Server.Business #endregion #region 订单数 - var currentOpiList = poList.Where(x => x.PurchaserId == purchaser.Id).ToList(); - purchaser.PurchaseOrderCount = currentOpiList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.Count ?? 0; + purchaser.PurchasedCount = poList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.Count ?? 0; #endregion #region 采购金额 - var currentOpiAmountList = purchaseAmountList.Where(x => x.PurchaserId == purchaser.Id).ToList(); - purchaser.PurchaseAmount = currentOpiAmountList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.PurchaseAmount ?? 0; + purchaser.PurchaseAmount = purchaseAmountList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.PurchaseAmount ?? 0; #endregion #region 最近采购时间 - var currentRecentPurchaseTimeList = recentPurchaseTimeList.Where(x => x.PurchaserId == purchaser.Id).ToList(); - purchaser.LastPurchaseTime = currentRecentPurchaseTimeList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.CreateTime; + purchaser.LastPurchaseTime = recentPurchaseTimeList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.CreateTime; #endregion #region 主营类目/标签 diff --git a/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs index cbaf0a3..1024c17 100644 --- a/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs +++ b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs @@ -49,17 +49,7 @@ namespace BBWYB.Server.Model.Db [Column(MapType = typeof(int?))] public Enums.Platform? Platform { get; set; } - /// - /// 采购次数 - /// - [Column(DbType = "int")] - public int? PurchasedCount { get; set; } = 0; - /// - /// 采购过的Sku数 - /// - [Column(DbType = "int")] - public int? PurchasedSkuCount { get; set; } = 0; } diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs index 94e748f..8e3047b 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs @@ -52,5 +52,10 @@ namespace BBWYB.Server.Model.Dto /// public int? IncludeSkuStatisticsInfo { get; set; } + /// + /// 是否包含采购商统计信息 (采购次数/采购SKU数) + /// + public int? IncludePurchaserStatisticsInfo { get; set; }; + } } diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs index d7dc078..719a598 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs @@ -34,12 +34,12 @@ namespace BBWYB.Server.Model.Dto public new List PurchaseSchemeProductList { get; set; } - public List PurchaserList { get; set; } + public List PurchaserList { get; set; } public PurchaseSchemeResponse() { PurchaseSchemeProductList = new List(); - PurchaserList = new List(); + PurchaserList = new List(); } } } diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs index 6d3f3d9..9dd1a24 100644 --- a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs @@ -17,27 +17,27 @@ namespace BBWYB.Server.Model.Dto /// /// 绑定SPU数 /// - public long? BindingSpuCount { get; set; } + public int? BindingSpuCount { get; set; } /// /// 采购SPU数 /// - public long? PurchasedSpuCount { get; set; } + public int? PurchasedSpuCount { get; set; } /// /// 绑定SKU数 /// - public long? BindingSkuCount { get; set; } + public int? BindingSkuCount { get; set; } /// /// 采购SKU数 /// - public long? PurchasedSkuCount { get; set; } + public int? PurchasedSkuCount { get; set; } = 0; /// - /// 采购订单数 + /// 采购次数/采购订单数 /// - public long? PurchaseOrderCount { get; set; } + public int? PurchasedCount { get; set; } = 0; /// /// 采购金额 From f68e4f37fb3838db13d2e1a7e77d28cb0c9d0003 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 22 Dec 2023 17:32:34 +0800 Subject: [PATCH 076/222] 1 --- .../Dto/Request/PurchaseScheme/QuerySchemeRequest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs index 8e3047b..31482a4 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs @@ -55,7 +55,7 @@ namespace BBWYB.Server.Model.Dto /// /// 是否包含采购商统计信息 (采购次数/采购SKU数) /// - public int? IncludePurchaserStatisticsInfo { get; set; }; + public int? IncludePurchaserStatisticsInfo { get; set; } } } From d684fd7c00c614b9ea7026a593ba4d0a31adec33 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 22 Dec 2023 17:34:28 +0800 Subject: [PATCH 077/222] fixbug --- .../DataRepair/DataRepairBusiness.cs | 190 +++++++++--------- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 2 +- 2 files changed, 96 insertions(+), 96 deletions(-) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index b511af3..6a005f5 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -667,95 +667,95 @@ namespace BBWYB.Server.Business #endregion - #region 采购商累计信息 - { - #region 采购SKU数 - var purchaserPurchasedList = fsql.Select() - .InnerJoin((opri, o, opi) => opri.OrderId == o.Id) - .InnerJoin((opri, o, opi) => opi.OrderId == opri.OrderId && opi.IsEnabled == true) - .Where((opri, o, opi) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11 && !string.IsNullOrEmpty(opi.PurchaserId)) - .GroupBy((opri, o, opi) => new { o.ShopId, opi.PurchaserId, opri.BelongSkuId }) - .ToList(g => new - { - g.Key.ShopId, - g.Key.PurchaserId, - g.Key.BelongSkuId - }); - - var purchaserPurchasedGroups = purchaserPurchasedList.GroupBy(x => x.PurchaserId); - foreach (var g in purchaserPurchasedGroups) - { - updatePurchaserList.Add(new Purchaser() - { - Id = g.Key, - PurchasedSkuCount = g.Count(), - PurchasedCount = 0 - }); - insertSkuHistoryPurchaserRelationList.AddRange(g.Select(x => new SkuHistoryPurchaserRelation() - { - CreateTime = DateTime.Now, - Id = idGenerator.NewLong(), - PurchaserId = x.PurchaserId, - ShopId = x.ShopId, - SkuId = x.BelongSkuId - })); - } - #endregion - - #region 采购次数 - /* - select opi.PurchaserId,count(DISTINCT(opi.OrderId)) from orderpurchaserelationinfo opri - inner join `order` o on opri.OrderId=o.Id - inner join orderpurchaseinfo opi on opi.OrderId=opri.OrderId and opi.IsEnabled=1 - where o.OrderState not in (0,6) and o.ShopId !=11 and opi.PurchaserId is not null - group by opi.PurchaserId; - */ - var purchaserPurchasedCountList = fsql.Select() - .InnerJoin((opri, o, opi) => opri.OrderId == o.Id) - .InnerJoin((opri, o, opi) => opi.OrderId == opri.OrderId && opi.IsEnabled == true) - .Where((opri, o, opi) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11 && !string.IsNullOrEmpty(opi.PurchaserId)) - .GroupBy((opri, o, opi) => opi.PurchaserId) - .ToList(g => new - { - PurchaserId = g.Key, - //Count = g.Count(g.Value.Item3.OrderId.Distinct()) - Count = SqlExt.DistinctCount(g.Value.Item3.OrderId) - }); - - foreach (var pcount in purchaserPurchasedCountList) - { - var p = updatePurchaserList.FirstOrDefault(x => x.Id == pcount.PurchaserId); - if (p == null) - { - p = new Purchaser() { Id = pcount.PurchaserId, PurchasedSkuCount = 0 }; - updatePurchaserList.Add(p); - } - p.PurchasedCount = Convert.ToInt32(pcount.Count); - } - - //var purchaserPurchasedCountDataTable = fsql.Ado.ExecuteDataTable(@"select opi.PurchaserId,count(DISTINCT(opi.OrderId)) from orderpurchaserelationinfo opri - // inner join `order` o on opri.OrderId = o.Id - // inner join orderpurchaseinfo opi on opi.OrderId = opri.OrderId and opi.IsEnabled = 1 - // where o.OrderState not in (0, 6) and o.ShopId != 11 and opi.PurchaserId is not null - // group by opi.PurchaserId;"); - - //foreach (DataRow dataRow in purchaserPurchasedCountDataTable.Rows) - //{ - // var purchaserId = dataRow[0].ToString(); - // var count = dataRow[1].ToInt32() ?? 0; - - // var p = updatePurchaserList.FirstOrDefault(x => x.Id == purchaserId); - // if (p == null) - // { - // p = new Purchaser() { Id = purchaserId, PurchasedSkuCount = 0 }; - // updatePurchaserList.Add(p); - // } - // p.PurchasedCount = count; - - //} - #endregion - } - #endregion + //#region 采购商累计信息 + //{ + // #region 采购SKU数 + // var purchaserPurchasedList = fsql.Select() + // .InnerJoin((opri, o, opi) => opri.OrderId == o.Id) + // .InnerJoin((opri, o, opi) => opi.OrderId == opri.OrderId && opi.IsEnabled == true) + // .Where((opri, o, opi) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11 && !string.IsNullOrEmpty(opi.PurchaserId)) + // .GroupBy((opri, o, opi) => new { o.ShopId, opi.PurchaserId, opri.BelongSkuId }) + // .ToList(g => new + // { + // g.Key.ShopId, + // g.Key.PurchaserId, + // g.Key.BelongSkuId + // }); + + // var purchaserPurchasedGroups = purchaserPurchasedList.GroupBy(x => x.PurchaserId); + // foreach (var g in purchaserPurchasedGroups) + // { + // updatePurchaserList.Add(new Purchaser() + // { + // Id = g.Key, + // PurchasedSkuCount = g.Count(), + // PurchasedCount = 0 + // }); + // insertSkuHistoryPurchaserRelationList.AddRange(g.Select(x => new SkuHistoryPurchaserRelation() + // { + // CreateTime = DateTime.Now, + // Id = idGenerator.NewLong(), + // PurchaserId = x.PurchaserId, + // ShopId = x.ShopId, + // SkuId = x.BelongSkuId + // })); + // } + // #endregion + + // #region 采购次数 + // /* + // select opi.PurchaserId,count(DISTINCT(opi.OrderId)) from orderpurchaserelationinfo opri + // inner join `order` o on opri.OrderId=o.Id + // inner join orderpurchaseinfo opi on opi.OrderId=opri.OrderId and opi.IsEnabled=1 + // where o.OrderState not in (0,6) and o.ShopId !=11 and opi.PurchaserId is not null + // group by opi.PurchaserId; + // */ + // var purchaserPurchasedCountList = fsql.Select() + // .InnerJoin((opri, o, opi) => opri.OrderId == o.Id) + // .InnerJoin((opri, o, opi) => opi.OrderId == opri.OrderId && opi.IsEnabled == true) + // .Where((opri, o, opi) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11 && !string.IsNullOrEmpty(opi.PurchaserId)) + // .GroupBy((opri, o, opi) => opi.PurchaserId) + // .ToList(g => new + // { + // PurchaserId = g.Key, + // //Count = g.Count(g.Value.Item3.OrderId.Distinct()) + // Count = SqlExt.DistinctCount(g.Value.Item3.OrderId) + // }); + + // foreach (var pcount in purchaserPurchasedCountList) + // { + // var p = updatePurchaserList.FirstOrDefault(x => x.Id == pcount.PurchaserId); + // if (p == null) + // { + // p = new Purchaser() { Id = pcount.PurchaserId, PurchasedSkuCount = 0 }; + // updatePurchaserList.Add(p); + // } + // p.PurchasedCount = Convert.ToInt32(pcount.Count); + // } + + // //var purchaserPurchasedCountDataTable = fsql.Ado.ExecuteDataTable(@"select opi.PurchaserId,count(DISTINCT(opi.OrderId)) from orderpurchaserelationinfo opri + // // inner join `order` o on opri.OrderId = o.Id + // // inner join orderpurchaseinfo opi on opi.OrderId = opri.OrderId and opi.IsEnabled = 1 + // // where o.OrderState not in (0, 6) and o.ShopId != 11 and opi.PurchaserId is not null + // // group by opi.PurchaserId;"); + + // //foreach (DataRow dataRow in purchaserPurchasedCountDataTable.Rows) + // //{ + // // var purchaserId = dataRow[0].ToString(); + // // var count = dataRow[1].ToInt32() ?? 0; + + // // var p = updatePurchaserList.FirstOrDefault(x => x.Id == purchaserId); + // // if (p == null) + // // { + // // p = new Purchaser() { Id = purchaserId, PurchasedSkuCount = 0 }; + // // updatePurchaserList.Add(p); + // // } + // // p.PurchasedCount = count; + + // //} + // #endregion + //} + //#endregion fsql.Transaction(() => { @@ -774,12 +774,12 @@ namespace BBWYB.Server.Business .Set(ps => ps.PurchasedAmount, updatePs.PurchasedAmount) .ExecuteAffrows(); } - foreach (var updatePurchaser in updatePurchaserList) - { - fsql.Update(updatePurchaser.Id).Set(p => p.PurchasedSkuCount, updatePurchaser.PurchasedSkuCount) - .Set(p => p.PurchasedCount, updatePurchaser.PurchasedCount) - .ExecuteAffrows(); - } + //foreach (var updatePurchaser in updatePurchaserList) + //{ + // fsql.Update(updatePurchaser.Id).Set(p => p.PurchasedSkuCount, updatePurchaser.PurchasedSkuCount) + // .Set(p => p.PurchasedCount, updatePurchaser.PurchasedCount) + // .ExecuteAffrows(); + //} fsql.Insert(insertSpuSaleInfoList).ExecuteAffrows(); fsql.Insert(insertSkuSaleInfoList).ExecuteAffrows(); fsql.Insert(insertSkuHistoryPurchaserRelationList).ExecuteAffrows(); diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 64699c6..c80ae8c 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1183,7 +1183,7 @@ namespace BBWYB.Server.Business if (!hySchemeResponse.PurchaserList.Any(p => p.Id == hySchemeProductResponse.PurchaserId)) { - hySchemeResponse.PurchaserList.Add(new Purchaser() + hySchemeResponse.PurchaserList.Add(new PurchaserResponse() { Id = hySchemeProductResponse.PurchaserId, Id2 = hySchemeProductResponse.PurchaserId2, From e5ba1fbacdd65d480180a93addb664d2cea6f96b Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 22 Dec 2023 19:41:59 +0800 Subject: [PATCH 078/222] 1 --- BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index c80ae8c..f9cac77 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -827,6 +827,7 @@ namespace BBWYB.Server.Business schemeProduct.PurchaserName = purchaser.Name; schemeProduct.PurchaserPurchasedCount = purchaser.PurchasedCount; schemeProduct.PurchaserPurchasedSkuCount = purchaser.PurchasedSkuCount; + schemeProduct.PurchasePlatform = purchaser.Platform; } } } From e974f858b44d1a98d29335d15a096859c1e32ad5 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sat, 23 Dec 2023 16:15:38 +0800 Subject: [PATCH 079/222] =?UTF-8?q?=E6=89=A9=E5=B1=95=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Purchaser/QueryPurchaserRequest.cs | 36 +++++++++++++++++++ BBWYB.Server.Model/Enums.cs | 8 +++++ 2 files changed, 44 insertions(+) diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs index 7c17296..8848871 100644 --- a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs @@ -23,6 +23,10 @@ /// public List LocationList { get; set; } + /// + /// 最近天数查询条件,可空 + /// + public QueryPurchaserConditionByDayRequest RecentDayCondition { get; set; } /// /// 页码 从1开始 @@ -34,4 +38,36 @@ /// public int PageSize { get; set; } } + + public class QueryPurchaserConditionByDayRequest + { + /// + /// 最近天数 + /// + public int? RecentDay { get; set; } + + public Enums.ComparisonOperator PurchasedCountComparisonOperator { get; set; } + + /// + /// 采购量,大于/小于/等于/介于时传该值,可空 + /// + public int? PurchasedCount { get; set; } + + /// + /// 采购量,介于时传该值同时PurchasedCount也需要有值,可空 + /// + public int? PurchasedCount2 { get; set; } + + public Enums.ComparisonOperator PurchasedAmountComparisonOperator { get; set; } + + /// + /// 采购额,大于/小于/等于/介于时传该值,可空 + /// + public int? PurchasedAmount { get; set; } + + /// + /// 采购额,介于时传该值同时PurchasedAmount也需要有值,可空 + /// + public int? PurchasedAmount2 { get; set; } + } } diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index af472dc..f1e2f01 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -346,5 +346,13 @@ { 主营类目 = 0, 标签 = 1 } + + /// + /// 比较运算符 大于 = 0, 小于 = 1, 等于 = 2, 介于 = 3 + /// + public enum ComparisonOperator + { + 大于 = 0, 小于 = 1, 等于 = 2, 介于 = 3 + } } } From 8153e7389b7dd58ed0065fc910818ac064418d26 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sat, 23 Dec 2023 20:18:46 +0800 Subject: [PATCH 080/222] =?UTF-8?q?=E6=8B=86=E5=AF=BB=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=95=86=E6=8E=A5=E5=8F=A3=E5=AE=9E=E4=BD=93=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=89=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/Request/Purchaser/QueryPurchaserRequest.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs index 8848871..317ce24 100644 --- a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs @@ -1,7 +1,10 @@ -namespace BBWYB.Server.Model.Dto +using System.ComponentModel.DataAnnotations; + +namespace BBWYB.Server.Model.Dto { public class QueryPurchaserRequest { + [Required] public long ShopId { get; set; } public string Spu { get; set; } @@ -31,11 +34,13 @@ /// /// 页码 从1开始 /// + [Required] public int PageIndex { get; set; } /// /// 页记录数 最大20 /// + [Required] public int PageSize { get; set; } } From f0a45608f5a60bb7d3bf0b9de4008bb141f7db84 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 24 Dec 2023 02:02:49 +0800 Subject: [PATCH 081/222] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=95=86=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Purchaser/PurchaserBusiness.cs | 331 +++++++++++------- .../Purchaser/QueryPurchaserRequest.cs | 6 +- 2 files changed, 204 insertions(+), 133 deletions(-) diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index 96bd32a..dba87c5 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -3,6 +3,7 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; +using FreeSql; using Yitter.IdGenerator; namespace BBWYB.Server.Business @@ -32,73 +33,68 @@ namespace BBWYB.Server.Business public ListResponse QueryPurchaserList(QueryPurchaserRequest request) { - if (request.PageSize > 20) - request.PageSize = 20; - var purchaserList = fsql.Select() - .WhereIf(!string.IsNullOrEmpty(request.Spu), p => fsql.Select() - .Where(psp1 => psp1.PurchaserId == p.Id && - psp1.ProductId == request.Spu) - .Any()) - .WhereIf(!string.IsNullOrEmpty(request.Sku), p => fsql.Select() - .Where(psp2 => psp2.PurchaserId == p.Id && - psp2.SkuId == request.Sku) - .Any()) - .WhereIf(request.PurchaserNameList != null && request.PurchaserNameList.Count() > 0, p => request.PurchaserNameList.Contains(p.Name)) - .WhereIf(request.CategoryIdList != null && request.CategoryIdList.Count() > 0, p => fsql.Select() - .Where(per => per.PurchaserId == p.Id && - request.CategoryIdList.Contains(per.ExtendedInfoId.Value)).Any()) - .WhereIf(request.LocationList != null && request.LocationList.Count() > 0, p => request.LocationList.Contains(p.Location)) - .Page(request.PageIndex, request.PageSize) - .Count(out var count) - .ToList(); - - var purchaserIdList = purchaserList.Select(p => p.Id).ToList(); - - #region 查询SPU绑定数/SKU绑定数 - var bindList = fsql.Select() - .InnerJoin((psp, psc) => psp.SkuPurchaseSchemeId == psc.Id) - .Where((psp, psc) => psc.ShopId == request.ShopId && purchaserIdList.Contains(psp.PurchaserId)) - .GroupBy((psp, psc) => new { psp.PurchaserId, psp.ProductId, psp.SkuId }) - .ToList(g => new - { - g.Key.PurchaserId, - g.Key.ProductId, - g.Key.SkuId - }); - #endregion - - #region 查询SPU采购数/SKU采购数 - var purchasedList = fsql.Select() - .InnerJoin((spr, ps) => spr.SkuId == ps.Id) - .Where((spr, ps) => ps.ShopId == request.ShopId && purchaserIdList.Contains(spr.PurchaserId)) - .GroupBy((spr, ps) => new { spr.PurchaserId, spr.SkuId, ps.ProductId }) - .ToList(g => new - { - g.Key.PurchaserId, - g.Key.ProductId, - g.Key.SkuId - }); + #region 数据验证 + if (request.RecentDayCondition != null && request.RecentDayCondition.RecentDay > 0) + { + if (request.RecentDayCondition.PurchasedCountComparisonOperator != null) + { + if (request.RecentDayCondition.PurchasedCount == null || (request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.介于 && + request.RecentDayCondition.PurchasedCount2 == null)) + throw new BusinessException("采购量条件不完整"); + } + if (request.RecentDayCondition.PurchasedAmountComparisonOperator != null) + { + if (request.RecentDayCondition.PurchasedAmount == null || (request.RecentDayCondition.PurchasedAmountComparisonOperator == Enums.ComparisonOperator.介于 && + request.RecentDayCondition.PurchasedAmount2 == null)) + throw new BusinessException("采购金额条件不完整"); + } + } #endregion - #region 查询订单数 - var poList = fsql.Select() - .InnerJoin((opi, o) => opi.OrderId == o.Id) - .Where((opi, o) => opi.ShopId == request.ShopId && - opi.IsEnabled == true && - o.OrderState != Enums.OrderState.已取消 && - purchaserIdList.Contains(opi.PurchaserId)) - .GroupBy((opi, o) => opi.PurchaserId) - .ToList(g => new - { - PurchaserId = g.Key, - Count = g.Count() - }); + if (request.PageSize > 20) + request.PageSize = 20; - #endregion + var select = fsql.Select() + .WhereIf(!string.IsNullOrEmpty(request.Spu), p => fsql.Select() + .Where(psp1 => psp1.PurchaserId == p.Id && + psp1.ProductId == request.Spu) + .Any()) + .WhereIf(!string.IsNullOrEmpty(request.Sku), p => fsql.Select() + .Where(psp2 => psp2.PurchaserId == p.Id && + psp2.SkuId == request.Sku) + .Any()) + .WhereIf(request.PurchaserNameList != null && + request.PurchaserNameList.Count() > 0, p => request.PurchaserNameList.Contains(p.Name)) + .WhereIf(request.CategoryIdList != null && + request.CategoryIdList.Count() > 0, p => fsql.Select() + .Where(per => per.PurchaserId == p.Id && + request.CategoryIdList.Contains(per.ExtendedInfoId.Value)).Any()) + .WhereIf(request.LocationList != null && request.LocationList.Count() > 0, p => request.LocationList.Contains(p.Location)) + .WhereIf(request.ManagmentMode != null, p => p.ManagmentMode == request.ManagmentMode); - #region 查询采购金额 - var purchaseAmountList = fsql.Select() + if (request.RecentDayCondition != null && request.RecentDayCondition.RecentDay > 0) + { + var recentStartDay = DateTime.Now.Date.AddDays(request.RecentDayCondition.RecentDay.Value * -1); + if (request.RecentDayCondition.PurchasedCountComparisonOperator != null) + { + var childSelect = fsql.Select() + .InnerJoin((opi, o) => opi.OrderId == o.Id) + .Where((opi, o) => opi.ShopId == request.ShopId && + opi.IsEnabled == true && + o.OrderState != Enums.OrderState.已取消 && + opi.CreateTime >= recentStartDay) + .GroupBy((opi, o) => opi.PurchaserId) + .HavingIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.等于, g => g.Count() == request.RecentDayCondition.PurchasedCount) + .HavingIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.小于, g => g.Count() <= request.RecentDayCondition.PurchasedCount) + .HavingIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.大于, g => g.Count() >= request.RecentDayCondition.PurchasedCount) + .HavingIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.介于, g => g.Count() >= request.RecentDayCondition.PurchasedCount && g.Count() <= request.RecentDayCondition.PurchasedCount2) + .WithTempQuery(g => new { g.Value.Item1.PurchaserId, Count = g.Count() }).As("pcc"); + select = select.Where(p => childSelect.Where(pcc => pcc.PurchaserId == p.Id).Any()); + } + if (request.RecentDayCondition.PurchasedAmountComparisonOperator != null) + { + var childSelect = fsql.Select() .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == o.Id) .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == ori.OrderId && ocd.SkuId == ori.BelongSkuId) .InnerJoin((ocd, o, ori, opi) => ori.OrderId == opi.OrderId) @@ -106,89 +102,162 @@ namespace BBWYB.Server.Business o.OrderState != Enums.OrderState.已取消 && ocd.IsEnabled == true && opi.IsEnabled == true && - purchaserIdList.Contains(opi.PurchaserId)) + opi.CreateTime >= recentStartDay) .GroupBy((ocd, o, ori, opi) => opi.PurchaserId) - .ToList(g => new - { - PurchaserId = g.Key, - PurchaseAmount = g.Sum(g.Value.Item1.SkuAmount) + g.Sum(g.Value.Item1.PurchaseFreight) - }); - #endregion - - #region 查询最近采购时间 - var recentPurchaseTimeList = fsql.Select() - .InnerJoin((opi1, o) => o.OrderState != Enums.OrderState.已取消) - .Where((opi1, o) => opi1.ShopId == request.ShopId && - purchaserIdList.Contains(opi1.PurchaserId) && - opi1.IsEnabled == true) - .GroupBy((opi1, o) => opi1.PurchaserId) - .WithTempQuery(g => new { MaxId = g.Max(g.Value.Item1.Id) }) - .From() - .InnerJoin((opi1, opi2) => opi1.MaxId == opi2.Id) - .ToList((opi1, opi2) => new - { - opi2.PurchaserId, - opi2.CreateTime - }); - #endregion - - #region 查询标签/主营类目 - var purchaserExtendInfoList = fsql.Select() - .InnerJoin((pei, per) => pei.Id == per.ExtendedInfoId) - .Where((pei, per) => purchaserIdList.Contains(per.PurchaserId)) - .ToList((pei, per) => new - { - pei.Id, - pei.Name, - pei.Type, - per.PurchaserId - }); - #endregion + .HavingIf(request.RecentDayCondition.PurchasedAmountComparisonOperator == Enums.ComparisonOperator.等于, g => g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) == request.RecentDayCondition.PurchasedAmount) + .HavingIf(request.RecentDayCondition.PurchasedAmountComparisonOperator == Enums.ComparisonOperator.小于, g => g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) <= request.RecentDayCondition.PurchasedAmount) + .HavingIf(request.RecentDayCondition.PurchasedAmountComparisonOperator == Enums.ComparisonOperator.大于, g => g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) >= request.RecentDayCondition.PurchasedAmount) + .HavingIf(request.RecentDayCondition.PurchasedAmountComparisonOperator == Enums.ComparisonOperator.介于, g => g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) >= request.RecentDayCondition.PurchasedAmount && g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) <= request.RecentDayCondition.PurchasedAmount2) + .WithTempQuery(g => new { g.Value.Item4.PurchaserId, PurchasedAmount = g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) }).As("pca"); + select = select.Where(p => childSelect.Where(pca => pca.PurchaserId == p.Id).Any()); + } + } - foreach (var purchaser in purchaserList) + var pageSelect = select.Page(request.PageIndex, request.PageSize); + var sql = pageSelect.ToSql(); + var purchaserList = select.Page(request.PageIndex, request.PageSize) + .Count(out var count) + .ToList(); + if (purchaserList.Count() > 0) { - #region SPU绑定数/SKU绑定数 - var currentBindList = bindList.Where(x => x.PurchaserId == purchaser.Id).ToList(); - purchaser.BindingSpuCount = currentBindList.Select(x => x.ProductId).Distinct().Count(); - purchaser.BindingSkuCount = currentBindList.Select(x => x.SkuId).Count(); + var purchaserIdList = purchaserList.Select(p => p.Id).ToList(); + + #region 查询SPU绑定数/SKU绑定数 + var bindList = fsql.Select() + .InnerJoin((psp, psc) => psp.SkuPurchaseSchemeId == psc.Id) + .Where((psp, psc) => psc.ShopId == request.ShopId && purchaserIdList.Contains(psp.PurchaserId)) + .GroupBy((psp, psc) => new { psp.PurchaserId, psp.ProductId, psp.SkuId }) + .ToList(g => new + { + g.Key.PurchaserId, + g.Key.ProductId, + g.Key.SkuId + }); #endregion - #region SPU采购数/SKU采购数 - var currentPurchasedList = purchasedList.Where(x => x.PurchaserId == purchaser.Id).ToList(); - purchaser.PurchasedSpuCount = currentPurchasedList.Select(x => x.ProductId).Distinct().Count(); - purchaser.PurchasedSkuCount = currentPurchasedList.Select(x => x.SkuId).Count(); + #region 查询SPU采购数/SKU采购数 + var purchasedList = fsql.Select() + .InnerJoin((spr, ps) => spr.SkuId == ps.Id) + .Where((spr, ps) => ps.ShopId == request.ShopId && purchaserIdList.Contains(spr.PurchaserId)) + .GroupBy((spr, ps) => new { spr.PurchaserId, spr.SkuId, ps.ProductId }) + .ToList(g => new + { + g.Key.PurchaserId, + g.Key.ProductId, + g.Key.SkuId + }); + #endregion - #region 订单数 - purchaser.PurchasedCount = poList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.Count ?? 0; + #region 查询订单数 + var poList = fsql.Select() + .InnerJoin((opi, o) => opi.OrderId == o.Id) + .Where((opi, o) => opi.ShopId == request.ShopId && + opi.IsEnabled == true && + o.OrderState != Enums.OrderState.已取消 && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((opi, o) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + Count = g.Count() + }); + #endregion - #region 采购金额 - purchaser.PurchaseAmount = purchaseAmountList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.PurchaseAmount ?? 0; + #region 查询采购金额 + var purchaseAmountList = fsql.Select() + .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == o.Id) + .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == ori.OrderId && ocd.SkuId == ori.BelongSkuId) + .InnerJoin((ocd, o, ori, opi) => ori.OrderId == opi.OrderId) + .Where((ocd, o, ori, opi) => o.ShopId == request.ShopId && + o.OrderState != Enums.OrderState.已取消 && + ocd.IsEnabled == true && + opi.IsEnabled == true && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((ocd, o, ori, opi) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + PurchaseAmount = g.Sum(g.Value.Item1.SkuAmount) + g.Sum(g.Value.Item1.PurchaseFreight) + }); #endregion - #region 最近采购时间 - purchaser.LastPurchaseTime = recentPurchaseTimeList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.CreateTime; + #region 查询最近采购时间 + var recentPurchaseTimeList = fsql.Select() + .InnerJoin((opi1, o) => o.OrderState != Enums.OrderState.已取消) + .Where((opi1, o) => opi1.ShopId == request.ShopId && + purchaserIdList.Contains(opi1.PurchaserId) && + opi1.IsEnabled == true) + .GroupBy((opi1, o) => opi1.PurchaserId) + .WithTempQuery(g => new { MaxId = g.Max(g.Value.Item1.Id) }) + .From() + .InnerJoin((opi1, opi2) => opi1.MaxId == opi2.Id) + .ToList((opi1, opi2) => new + { + opi2.PurchaserId, + opi2.CreateTime + }); #endregion - #region 主营类目/标签 - var currentExtendInfoList = purchaserExtendInfoList.Where(x => x.PurchaserId == purchaser.Id).ToList(); - purchaser.CategoryList = currentExtendInfoList.Where(x => x.Type == Enums.PurchaserBasicInfoType.主营类目) - .Select(x => new PurchaserExtendedInfoResponse() - { - Id = x.Id, - Name = x.Name, - Type = x.Type - }).ToList(); - - purchaser.TagList = currentExtendInfoList.Where(x => x.Type == Enums.PurchaserBasicInfoType.标签) - .Select(x => new PurchaserExtendedInfoResponse() - { - Id = x.Id, - Name = x.Name, - Type = x.Type - }).ToList(); + #region 查询标签/主营类目 + var purchaserExtendInfoList = fsql.Select() + .InnerJoin((pei, per) => pei.Id == per.ExtendedInfoId) + .Where((pei, per) => purchaserIdList.Contains(per.PurchaserId)) + .ToList((pei, per) => new + { + pei.Id, + pei.Name, + pei.Type, + per.PurchaserId + }); #endregion + + foreach (var purchaser in purchaserList) + { + #region SPU绑定数/SKU绑定数 + var currentBindList = bindList.Where(x => x.PurchaserId == purchaser.Id).ToList(); + purchaser.BindingSpuCount = currentBindList.Select(x => x.ProductId).Distinct().Count(); + purchaser.BindingSkuCount = currentBindList.Select(x => x.SkuId).Count(); + #endregion + + #region SPU采购数/SKU采购数 + var currentPurchasedList = purchasedList.Where(x => x.PurchaserId == purchaser.Id).ToList(); + purchaser.PurchasedSpuCount = currentPurchasedList.Select(x => x.ProductId).Distinct().Count(); + purchaser.PurchasedSkuCount = currentPurchasedList.Select(x => x.SkuId).Count(); + #endregion + + #region 订单数 + purchaser.PurchasedCount = poList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.Count ?? 0; + #endregion + + #region 采购金额 + purchaser.PurchaseAmount = purchaseAmountList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.PurchaseAmount ?? 0; + #endregion + + #region 最近采购时间 + purchaser.LastPurchaseTime = recentPurchaseTimeList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.CreateTime; + #endregion + + #region 主营类目/标签 + var currentExtendInfoList = purchaserExtendInfoList.Where(x => x.PurchaserId == purchaser.Id).ToList(); + purchaser.CategoryList = currentExtendInfoList.Where(x => x.Type == Enums.PurchaserBasicInfoType.主营类目) + .Select(x => new PurchaserExtendedInfoResponse() + { + Id = x.Id, + Name = x.Name, + Type = x.Type + }).ToList(); + + purchaser.TagList = currentExtendInfoList.Where(x => x.Type == Enums.PurchaserBasicInfoType.标签) + .Select(x => new PurchaserExtendedInfoResponse() + { + Id = x.Id, + Name = x.Name, + Type = x.Type + }).ToList(); + #endregion + } } return new ListResponse() diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs index 317ce24..b0e277f 100644 --- a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs @@ -31,6 +31,8 @@ namespace BBWYB.Server.Model.Dto /// public QueryPurchaserConditionByDayRequest RecentDayCondition { get; set; } + public Enums.ManagmentMode? ManagmentMode { get; set; } + /// /// 页码 从1开始 /// @@ -51,7 +53,7 @@ namespace BBWYB.Server.Model.Dto /// public int? RecentDay { get; set; } - public Enums.ComparisonOperator PurchasedCountComparisonOperator { get; set; } + public Enums.ComparisonOperator? PurchasedCountComparisonOperator { get; set; } /// /// 采购量,大于/小于/等于/介于时传该值,可空 @@ -63,7 +65,7 @@ namespace BBWYB.Server.Model.Dto /// public int? PurchasedCount2 { get; set; } - public Enums.ComparisonOperator PurchasedAmountComparisonOperator { get; set; } + public Enums.ComparisonOperator? PurchasedAmountComparisonOperator { get; set; } /// /// 采购额,大于/小于/等于/介于时传该值,可空 From 6f78df27c17f2ff8bc177d3d5747f523cccc9bd2 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 24 Dec 2023 02:06:43 +0800 Subject: [PATCH 082/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=95=86=E6=8F=90?= =?UTF-8?q?=E5=8F=96=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/Response/Purchaser/PurchaserResponse.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs index 9dd1a24..c431235 100644 --- a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs @@ -54,6 +54,20 @@ namespace BBWYB.Server.Model.Dto /// public IList Recent30dProductSku { get; set; } + public string Tag + { + get + { + if (Name.EndsWith("超级工厂")) + return "超级工厂"; + if (Name.EndsWith("实力工厂")) + return "实力工厂"; + if (Name.EndsWith("实力供应商")) + return "实力供应商"; + return string.Empty; + } + } + public PurchaserResponse() { CategoryList = new List(); From 1d75f8e5399180220edf616ea23170925401d1ed Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 24 Dec 2023 02:09:13 +0800 Subject: [PATCH 083/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E7=9A=84=E9=87=87=E8=B4=AD=E5=95=86=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseSchemeProductResponse.cs | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs index 60f1bf9..f1199b4 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs @@ -1,4 +1,6 @@ -namespace BBWYB.Server.Model.Dto +using System.Xml.Linq; + +namespace BBWYB.Server.Model.Dto { public class PurchaseSchemeProductResponse : Model.Db.PurchaseSchemeProduct { @@ -22,6 +24,22 @@ /// 采购商的采购SKU数 /// public int? PurchaserPurchasedSkuCount { get; set; } + + public string PurchaserTag + { + get + { + if (string.IsNullOrEmpty(PurchaserName)) + return string.Empty; + if (PurchaserName.EndsWith("超级工厂")) + return "超级工厂"; + if (PurchaserName.EndsWith("实力工厂")) + return "实力工厂"; + if (PurchaserName.EndsWith("实力供应商")) + return "实力供应商"; + return string.Empty; + } + } #endregion /// From 22cea8c6cc9579740b961ff764870184a6609528 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 24 Dec 2023 02:24:34 +0800 Subject: [PATCH 084/222] 1 --- .../Response/PurchaseScheme/PurchaseSchemeProductResponse.cs | 3 +++ BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs | 3 +++ 2 files changed, 6 insertions(+) diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs index f1199b4..7b96951 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs @@ -25,6 +25,9 @@ namespace BBWYB.Server.Model.Dto /// public int? PurchaserPurchasedSkuCount { get; set; } + /// + /// 采购商标签 + /// public string PurchaserTag { get diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs index c431235..f86a11c 100644 --- a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs @@ -54,6 +54,9 @@ namespace BBWYB.Server.Model.Dto /// public IList Recent30dProductSku { get; set; } + /// + /// 采购商标签 + /// public string Tag { get From c90e26e4277fbc89b22a287b97f618cfc4ea9c77 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Mon, 25 Dec 2023 02:09:50 +0800 Subject: [PATCH 085/222] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=95=86=E5=90=8D=E7=A7=B0=E8=8E=B7=E5=8F=96=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseProductAPIService.cs | 55 ++++++++++++++++--- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs index 927269e..3d4ad13 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs @@ -26,10 +26,12 @@ namespace BBWYB.Server.Business //private ConcurrentDictionary purchaseSchemeProductSkus)> productChaches; private IDictionary _1688ProductDetailRequestHeader; + private IDictionary _1688FactoryCardRequestHeader; private List _1688ColorPropertyFieldIdList; private List locationIdList; private List priceIdList; + private List purchaserNameIdList; private IList invalidPurchaserNameList; @@ -46,6 +48,14 @@ namespace BBWYB.Server.Business { "Accept-Encoding","gzip, deflate, br"}, { "Accept-Language","zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"} }; + _1688FactoryCardRequestHeader = new Dictionary() + { + { "Host","sale.1688.com"}, + { "User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70"}, + { "Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"}, + { "Accept-Encoding","gzip, deflate, br"}, + { "Accept-Language","zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"} + }; purchaseProductCacheTimeSpan = TimeSpan.FromDays(1); _1688ColorPropertyFieldIdList = new List() { 3216, 1627207, 1234, 3151, 7853, 446, 374, 404, 100019516, 3114, 2068 }; //jobject["data"]["1081181309101"] != null ? @@ -57,6 +67,8 @@ namespace BBWYB.Server.Business // jobject["data"]["1081181309582"]["data"]["priceModel"]["currentPrices"][0].Value("price") : // jobject["data"]["16347413030316"]["data"]["priceModel"]["currentPrices"][0].Value("price"); priceIdList = new List() { "1081181309582", "1081181309582", "16347413030316", "13772573013151" }; + + purchaserNameIdList = new List() { "38229149", "38229148", "38229150" }; } public PurchaseSkuBasicInfoResponse GetProductInfo(PurchaseSkuBasicInfoRequest request) @@ -241,9 +253,11 @@ namespace BBWYB.Server.Business var jsonStr = match.Groups[2].Value; var jobject = JObject.Parse(jsonStr); + var memberId = jobject["globalData"]?["tempModel"]?["sellerMemberId"]?.ToString(); + #region 验证purchaserName var purchaserName = jobject["globalData"]["tempModel"]["companyName"].ToString(); - if (invalidPurchaserNameList.Contains(purchaserName)) + if (invalidPurchaserNameList.Any(x => purchaserName.Contains(x))) { var storeDataMatch = Regex.Match(_1688pageResult.Content, @"(window\.__STORE_DATA=)(.*)(\r*\n*\s*)"); if (storeDataMatch.Success) @@ -252,16 +266,37 @@ namespace BBWYB.Server.Business { 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; + foreach (var purchaserNodeId in purchaserNameIdList) + { + var purchaserTempName = jobject_storeData["components"]?[purchaserNodeId]?["moduleData"]?["companyName"].ToString(); + if (!string.IsNullOrEmpty(purchaserTempName)) + { + purchaserName = purchaserTempName; + break; + } + } } catch { } } + + if (invalidPurchaserNameList.Any(x => purchaserName.Contains(x)) && !string.IsNullOrEmpty(memberId)) + { + //https://sale.1688.com/factory/card.html?memberId=b2b-4204371240a61bf + var _1688FactoryCardResult = restApiService.SendRequest("https://sale.1688.com", + "factory/card.html", + $"memberId={memberId}", + _1688FactoryCardRequestHeader, + HttpMethod.Get, + httpClientName: "gzip"); + if (_1688FactoryCardResult.StatusCode == System.Net.HttpStatusCode.OK) + { + var titleMatch = Regex.Match(_1688FactoryCardResult.Content, @"(.*)-(.*)-(.*)"); + if (titleMatch.Success) + { + purchaserName = titleMatch.Groups[1].Value; + } + } + } } #endregion @@ -280,10 +315,12 @@ namespace BBWYB.Server.Business Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(), Id2 = jobject["globalData"]["tempModel"]["sellerLoginId"]?.ToString(), Name = purchaserName, - MemberId = jobject["globalData"]?["tempModel"]?["sellerMemberId"]?.ToString(), + MemberId = memberId, Location = location, Platform = Enums.Platform.阿里巴巴 }; + + var fidJToken = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => _1688ColorPropertyFieldIdList.Contains(j.Value("fid"))); if (fidJToken == null) fidJToken = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => j.Value("prop").Contains("颜色")); From b5088bbffed768aa71e6c16257ab2ade96c80d73 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Mon, 25 Dec 2023 02:35:57 +0800 Subject: [PATCH 086/222] =?UTF-8?q?1)1688=20=E7=88=AC=E8=99=AB=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=95=86=E5=AE=B6=E6=A0=87=E7=AD=BE=202)=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E6=96=B9=E6=A1=88=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=95=86=E5=AE=B6=E6=A0=87=E7=AD=BE=203)=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88=E5=88=97=E8=A1=A8=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E5=8F=82=E6=95=B0=E5=A2=9E=E5=8A=A0=E5=95=86=E5=AE=B6?= =?UTF-8?q?=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataRepair/DataRepairBusiness.cs | 5 +++++ .../PurchaseProductAPIService.cs | 10 +++++++--- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 4 +++- BBWYB.Server.Model/Db/Purchaser/Purchaser.cs | 7 +++++-- .../InputPurchaseSchemeProductRequest.cs | 5 +++++ .../PurchaseSchemeProductResponse.cs | 16 +--------------- .../Response/Purchaser/PurchaserResponse.cs | 19 +------------------ 7 files changed, 27 insertions(+), 39 deletions(-) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 6a005f5..fdc82f2 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -1002,5 +1002,10 @@ namespace BBWYB.Server.Business //找出接口丢失的类目 } + + public void SuncPurchaserName() + { + + } } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs index 3d4ad13..411cdfc 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs @@ -257,8 +257,11 @@ namespace BBWYB.Server.Business #region 验证purchaserName var purchaserName = jobject["globalData"]["tempModel"]["companyName"].ToString(); + var tag = string.Empty; if (invalidPurchaserNameList.Any(x => purchaserName.Contains(x))) { + tag = invalidPurchaserNameList.FirstOrDefault(x => purchaserName.Contains(x)); + var storeDataMatch = Regex.Match(_1688pageResult.Content, @"(window\.__STORE_DATA=)(.*)(\r*\n*\s*)"); if (storeDataMatch.Success) { @@ -268,12 +271,12 @@ namespace BBWYB.Server.Business var jobject_storeData = JObject.Parse(jsonStr_storeData); foreach (var purchaserNodeId in purchaserNameIdList) { - var purchaserTempName = jobject_storeData["components"]?[purchaserNodeId]?["moduleData"]?["companyName"].ToString(); + var purchaserTempName = jobject_storeData["components"]?[purchaserNodeId]?["moduleData"]?["companyName"].ToString(); if (!string.IsNullOrEmpty(purchaserTempName)) { purchaserName = purchaserTempName; break; - } + } } } catch { } @@ -317,7 +320,8 @@ namespace BBWYB.Server.Business Name = purchaserName, MemberId = memberId, Location = location, - Platform = Enums.Platform.阿里巴巴 + Platform = Enums.Platform.阿里巴巴, + Tag = tag }; diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index f9cac77..a1f1e99 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -58,7 +58,8 @@ namespace BBWYB.Server.Business Name = ps.PurchaserName, Location = ps.PurchaserLocation, Platform = ps.PurchasePlatform ?? Enums.Platform.阿里巴巴, - MemberId = ps.PurchaserMemberId + MemberId = ps.PurchaserMemberId, + Tag = ps.PurchaserTag }); } } @@ -828,6 +829,7 @@ namespace BBWYB.Server.Business schemeProduct.PurchaserPurchasedCount = purchaser.PurchasedCount; schemeProduct.PurchaserPurchasedSkuCount = purchaser.PurchasedSkuCount; schemeProduct.PurchasePlatform = purchaser.Platform; + schemeProduct.PurchaserTag = purchaser.Tag; } } } diff --git a/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs index 1024c17..a37fc77 100644 --- a/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs +++ b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs @@ -49,8 +49,11 @@ namespace BBWYB.Server.Model.Db [Column(MapType = typeof(int?))] public Enums.Platform? Platform { get; set; } - - + /// + /// 商家标签 (超级工厂/实力工厂/实力供应商),可空 + /// + [Column(StringLength = 20)] + public string Tag { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs index cd9caec..d140dde 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs @@ -35,6 +35,11 @@ public string PurchaserMemberId { get; set; } + /// + /// 商家标签(超级工厂/实力工厂/实力供应商),可空 + /// + public string PurchaserTag { get; set; } + public Enums.Platform? PurchasePlatform { get; set; } diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs index 7b96951..ec9a041 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs @@ -28,21 +28,7 @@ namespace BBWYB.Server.Model.Dto /// /// 采购商标签 /// - public string PurchaserTag - { - get - { - if (string.IsNullOrEmpty(PurchaserName)) - return string.Empty; - if (PurchaserName.EndsWith("超级工厂")) - return "超级工厂"; - if (PurchaserName.EndsWith("实力工厂")) - return "实力工厂"; - if (PurchaserName.EndsWith("实力供应商")) - return "实力供应商"; - return string.Empty; - } - } + public string PurchaserTag { get; set; } #endregion /// diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs index f86a11c..f0df51f 100644 --- a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs @@ -10,7 +10,7 @@ namespace BBWYB.Server.Model.Dto public IList CategoryList { get; set; } /// - /// 标签集合 + /// 自定义标签集合 /// public IList TagList { get; set; } @@ -54,23 +54,6 @@ namespace BBWYB.Server.Model.Dto /// public IList Recent30dProductSku { get; set; } - /// - /// 采购商标签 - /// - public string Tag - { - get - { - if (Name.EndsWith("超级工厂")) - return "超级工厂"; - if (Name.EndsWith("实力工厂")) - return "实力工厂"; - if (Name.EndsWith("实力供应商")) - return "实力供应商"; - return string.Empty; - } - } - public PurchaserResponse() { CategoryList = new List(); From 6bafafd0971de4e86a2bf6b94152dcd3e5c580c3 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 25 Dec 2023 14:44:33 +0800 Subject: [PATCH 087/222] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=95=86=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataRepair/DataRepairBusiness.cs | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index fdc82f2..a1f7f68 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -12,7 +12,6 @@ using SDKAdapter.OperationPlatform.Models; using SDKAdapter.PurchasePlatform.Client; using SDKAdapter.PurchasePlatform.Models; using System.Data; -using System.Net.Http.Headers; using Yitter.IdGenerator; namespace BBWYB.Server.Business @@ -1004,8 +1003,38 @@ namespace BBWYB.Server.Business } public void SuncPurchaserName() - { - + { + List> updatePurchaserList = new List>(); + var dbPurchaserList = fsql.Select().ToList(); + + var pspList = fsql.Select() + .GroupBy(psp2 => psp2.PurchaserId) + .WithTempQuery(g => new { MaxId = g.Max(g.Value.Id), PurchaserId = g.Key }) + .From() + .InnerJoin((psp2, psp1) => psp2.MaxId == psp1.Id) + .ToList((psp2, psp1) => psp1); + foreach (var psp in pspList) + { + var data = purchaseSchemeBusiness.GetPurchaseSkuBasicInfo(new PurchaseSkuBasicInfoRequest() + { + FirstApiMode = Enums.PurchaseProductAPIMode.Spider, + PriceMode = Enums.PurchaseOrderMode.批发, + Platform = Enums.Platform.阿里巴巴, + PurchaseProductId = psp.PurchaseProductId, + }); + if (data == null) + continue; + var dbPurchaser = dbPurchaserList.FirstOrDefault(p => p.Id == data.Purchaser.Id); + if (dbPurchaser == null) + continue; + if (dbPurchaser.Name != data.Purchaser.Name || + dbPurchaser.Id2 != data.Purchaser.Id2 || + dbPurchaser.MemberId != data.Purchaser.MemberId || + dbPurchaser.Tag != data.Purchaser.Tag) + { + + } + } } } } From 8170e10e7c219ff0dc7b16a31014d8f2d631853e Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 25 Dec 2023 16:55:38 +0800 Subject: [PATCH 088/222] 1 --- .../Controllers/DataRepairController.cs | 6 +++ .../DataRepair/DataRepairBusiness.cs | 45 +++++++++++++++++-- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index f51502a..4e3d431 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -100,5 +100,11 @@ namespace BBWYB.Server.API.Controllers [HttpPost] public void SyncProductCategory() { dataRepairBusiness.SyncProductCategory(); } + + [HttpPost] + public void SyncPurchaserName() + { + dataRepairBusiness.SyncPurchaserName(); + } } } diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index a1f7f68..e0f353c 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -1002,7 +1002,7 @@ namespace BBWYB.Server.Business } - public void SuncPurchaserName() + public void SyncPurchaserName() { List> updatePurchaserList = new List>(); var dbPurchaserList = fsql.Select().ToList(); @@ -1013,8 +1013,12 @@ namespace BBWYB.Server.Business .From() .InnerJoin((psp2, psp1) => psp2.MaxId == psp1.Id) .ToList((psp2, psp1) => psp1); + var index = 0; foreach (var psp in pspList) { + index++; + Console.WriteLine($"Scaning PurchaserProduct {psp.PurchaseProductId},PurchaserId {psp.PurchaserId},{index}/{pspList.Count()}"); + Thread.Sleep(1000); var data = purchaseSchemeBusiness.GetPurchaseSkuBasicInfo(new PurchaseSkuBasicInfoRequest() { FirstApiMode = Enums.PurchaseProductAPIMode.Spider, @@ -1022,7 +1026,7 @@ namespace BBWYB.Server.Business Platform = Enums.Platform.阿里巴巴, PurchaseProductId = psp.PurchaseProductId, }); - if (data == null) + if (data == null || data.IsInvalid == true || data.Purchaser == null) continue; var dbPurchaser = dbPurchaserList.FirstOrDefault(p => p.Id == data.Purchaser.Id); if (dbPurchaser == null) @@ -1030,11 +1034,44 @@ namespace BBWYB.Server.Business if (dbPurchaser.Name != data.Purchaser.Name || dbPurchaser.Id2 != data.Purchaser.Id2 || dbPurchaser.MemberId != data.Purchaser.MemberId || + dbPurchaser.Location != data.Purchaser.Location || dbPurchaser.Tag != data.Purchaser.Tag) - { - + { + var update = fsql.Update(dbPurchaser.Id) + .SetIf(dbPurchaser.Name != data.Purchaser.Name, p => p.Name, data.Purchaser.Name) + .SetIf(dbPurchaser.Id2 != data.Purchaser.Id2, p => p.Id2, data.Purchaser.Id2) + .SetIf(dbPurchaser.MemberId != data.Purchaser.MemberId, p => p.MemberId, data.Purchaser.MemberId) + .SetIf(dbPurchaser.Location != data.Purchaser.Location, p => p.Location, data.Purchaser.Location) + .SetIf(dbPurchaser.Tag != data.Purchaser.Tag, p => p.Tag, data.Purchaser.Tag); + updatePurchaserList.Add(update); + } + } + + List> tempUpdateList = new List>(); + for (var i = 0; i < updatePurchaserList.Count(); i++) + { + tempUpdateList.Add(updatePurchaserList[i]); + if (tempUpdateList.Count() == 10) + { + Console.WriteLine($"{DateTime.Now},{i}/{updatePurchaserList.Count()},执行数据库更新"); + fsql.Transaction(() => + { + foreach (var update in tempUpdateList) + update.ExecuteAffrows(); + }); + tempUpdateList.Clear(); } } + + if (tempUpdateList.Count() > 0) + { + Console.WriteLine($"{DateTime.Now},最后执行数据库更新"); + fsql.Transaction(() => + { + foreach (var update in tempUpdateList) + update.ExecuteAffrows(); + }); + } } } } From 403e41b745a7f5740bd842c05d221d3562e4ad45 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 26 Dec 2023 14:22:35 +0800 Subject: [PATCH 089/222] 1 --- BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index e0f353c..e180933 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -43,6 +43,7 @@ namespace BBWYB.Server.Business public void SubscribeKD100(string waybillNo, string targetCompanyCode) { + //订阅快递100 kuaiDi100Manager.SubscribeKuaiDi100(waybillNo, targetCompanyCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish"); } @@ -1002,6 +1003,9 @@ namespace BBWYB.Server.Business } + /// + /// 同步采购商名字 + /// public void SyncPurchaserName() { List> updatePurchaserList = new List>(); From e719ba2027bcc9a37d09de3c554a271feb1eb3f7 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 26 Dec 2023 17:02:50 +0800 Subject: [PATCH 090/222] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sync/ProductSyncBusiness.cs | 87 ++++++++++++++++--- BBWYB.Server.Model/Db/Product/Product.cs | 11 +++ BBWYB.Server.Model/Db/Product/ProductSku.cs | 14 ++- .../QuanTan_Supplier_ProductListResponse.cs | 6 ++ ...QuanTan_Supplier_ProductSkuListResponse.cs | 5 +- .../Client/Impl/OP_QuanTanClient.cs | 8 +- .../Response/Product/OP_ProductResponse.cs | 10 +++ .../Response/Product/OP_ProductSkuResponse.cs | 10 +++ 8 files changed, 136 insertions(+), 15 deletions(-) diff --git a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs index feeee0d..b9a9e04 100644 --- a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs @@ -111,19 +111,26 @@ namespace BBWYB.Server.Business.Sync State = p.State, SyncTime = DateTime.Now, UpdateTime = DateTime.Now, - UpperTime = p.CreateTime + UpperTime = p.CreateTime, + CategoryId = p.CategoryId, + CategoryName = p.CategoryName })); } #endregion #region 找出变化的产品 (状态,标题) - var stateChangeProductList = productList.Where(p => dbProductList.Any(dp => dp.Id == p.Id && (dp.State != p.State || dp.ProductName != p.Title))).ToList(); + var stateChangeProductList = productList.Where(p => dbProductList.Any(dp => dp.Id == p.Id && + (dp.State != p.State || + dp.ProductName != p.Title || + dp.CategoryId != p.CategoryId))).ToList(); if (stateChangeProductList.Count() > 0) { foreach (var product in stateChangeProductList) { var update = fsql.Update(product.Id).Set(p => p.State, product.State) - .Set(p => p.ProductName, product.Title); + .Set(p => p.ProductName, product.Title) + .Set(p => p.CategoryId, product.CategoryId) + .Set(p => p.CategoryName, product.CategoryName); updateProductList.Add(update); } } @@ -154,13 +161,20 @@ namespace BBWYB.Server.Business.Sync State = ps.State, SyncTime = DateTime.Now, UpdateTime = DateTime.Now, - UpperTime = ps.CreateTime + UpperTime = ps.CreateTime, + CategoryId = ps.CategoryId, + CategoryName = ps.CategoryName })); } #endregion #region 找出状态变化的SKU - var stateChangeProductSkuList = productSkuList.Where(ps => dbProductSkuList.Any(dps => dps.Id == ps.Id && (dps.State != ps.State || dps.SkuName != ps.Title || dps.Price != ps.Price || dps.Logo != ps.Logo))).ToList(); + var stateChangeProductSkuList = productSkuList.Where(ps => dbProductSkuList.Any(dps => dps.Id == ps.Id && + (dps.State != ps.State || + dps.SkuName != ps.Title || + dps.Price != ps.Price || + dps.Logo != ps.Logo || + dps.CategoryId != ps.CategoryId))).ToList(); if (stateChangeProductSkuList.Count() > 0) { foreach (var productSku in stateChangeProductSkuList) @@ -168,7 +182,9 @@ namespace BBWYB.Server.Business.Sync var update = fsql.Update(productSku.Id).Set(p => p.State, productSku.State) .Set(p => p.SkuName, productSku.Title) .Set(p => p.Price, productSku.Price) - .Set(p => p.Logo, productSku.Logo); + .Set(p => p.Logo, productSku.Logo) + .Set(p => p.CategoryId, productSku.CategoryId) + .Set(p => p.CategoryName, productSku.CategoryName); updateProductSkuList.Add(update); } } @@ -191,19 +207,68 @@ namespace BBWYB.Server.Business.Sync fsql.Insert(insertProductList).ExecuteAffrows(); if (insertProductSkuList.Count() > 0) fsql.Insert(insertProductSkuList).ExecuteAffrows(); + }); + { + var tempUpdateList = new List>(); if (updateProductList.Count() > 0) { - foreach (var update in updateProductList) - update.ExecuteAffrows(); + for (var i = 0; i < updateProductList.Count(); i++) + { + tempUpdateList.Add(updateProductList[i]); + if (tempUpdateList.Count() == 20) + { + fsql.Transaction(() => + { + foreach (var update in tempUpdateList) + update.ExecuteAffrows(); + }); + tempUpdateList.Clear(); + } + } + if (tempUpdateList.Count() > 0) + { + fsql.Transaction(() => + { + foreach (var update in tempUpdateList) + update.ExecuteAffrows(); + }); + tempUpdateList.Clear(); + updateProductList.Clear(); + } } + } + { + var tempUpdateList = new List>(); if (updateProductSkuList.Count() > 0) { - foreach (var update in updateProductSkuList) - update.ExecuteAffrows(); + for (var i = 0; i < updateProductSkuList.Count(); i++) + { + tempUpdateList.Add(updateProductSkuList[i]); + if (tempUpdateList.Count() == 20) + { + fsql.Transaction(() => + { + foreach (var update in tempUpdateList) + update.ExecuteAffrows(); + }); + tempUpdateList.Clear(); + } + } + if (tempUpdateList.Count() > 0) + { + fsql.Transaction(() => + { + foreach (var update in tempUpdateList) + update.ExecuteAffrows(); + }); + tempUpdateList.Clear(); + updateProductSkuList.Clear(); + } } - }); + } + Console.WriteLine($"{shop.ShopName}同步完毕,新增spu{insertProductList.Count()}个,新增sku{insertProductSkuList.Count()}个,更新spu{updateProductList.Count()}个,更新sku{updateProductSkuList.Count()}个"); } diff --git a/BBWYB.Server.Model/Db/Product/Product.cs b/BBWYB.Server.Model/Db/Product/Product.cs index ee4f128..942d593 100644 --- a/BBWYB.Server.Model/Db/Product/Product.cs +++ b/BBWYB.Server.Model/Db/Product/Product.cs @@ -49,6 +49,17 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "datetime")] public DateTime? UpperTime { get; set; } + /// + /// 分类Id + /// + [Column(DbType = "bigint")] + public long? CategoryId { get; set; } + + /// + /// 分类名称 + /// + [Column(StringLength = 50)] + public string CategoryName { get; set; } } } diff --git a/BBWYB.Server.Model/Db/Product/ProductSku.cs b/BBWYB.Server.Model/Db/Product/ProductSku.cs index 0a385ba..5a943c1 100644 --- a/BBWYB.Server.Model/Db/Product/ProductSku.cs +++ b/BBWYB.Server.Model/Db/Product/ProductSku.cs @@ -54,6 +54,18 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "datetime")] public DateTime? UpperTime { get; set; } - } + /// + /// 分类Id + /// + [Column(DbType = "bigint")] + public long? CategoryId { get; set; } + + /// + /// 分类名称 + /// + [Column(StringLength = 50)] + public string CategoryName { get; set; } + + } } diff --git a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductListResponse.cs b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductListResponse.cs index 49f68d0..a0c9e7c 100644 --- a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductListResponse.cs +++ b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductListResponse.cs @@ -15,6 +15,12 @@ public int? Status { get; set; } public DateTime? UpperTime { get; set; } + + public long? CategoryId { get; set; } + + public string CategoryName { get; set; } + + public string CategoryPath { get; set; } } public class QuanTan_Supplier_ProductListResponse : QuanTanListResponse diff --git a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductSkuListResponse.cs b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductSkuListResponse.cs index ec89b75..d3adf89 100644 --- a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductSkuListResponse.cs +++ b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductSkuListResponse.cs @@ -13,8 +13,11 @@ public string SkuImage { get; set; } public decimal SkuPrice { get; set; } + public long? CategoryId { get; set; } - public string CategoryId { get; set; } + public string CategoryName { get; set; } + + public string CategoryPath { get; set; } public string StoreId { get; set; } diff --git a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs index df103e0..b513adc 100644 --- a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs @@ -46,7 +46,9 @@ namespace SDKAdapter.OperationPlatform.Client Logo = qtp.Image, ProductItemNum = string.Empty, State = qtp.IsShow == 1 && qtp.Status == 1 ? 1 : 0, - Title = qtp.ProductName + Title = qtp.ProductName, + CategoryId = qtp.CategoryId, + CategoryName = qtp.CategoryName }).ToList() }; } @@ -76,7 +78,9 @@ namespace SDKAdapter.OperationPlatform.Client Price = qtps.SkuPrice, ProductId = qtps.ProductId, State = qtps.IsShow == 1 && qtps.Status == 1 ? 1 : 0, - Title = qtps.SkuName + Title = qtps.SkuName, + CategoryId = qtps.CategoryId, + CategoryName = qtps.CategoryName }).ToList() }; } diff --git a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductResponse.cs b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductResponse.cs index 4f6b3b9..5dc1a8a 100644 --- a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductResponse.cs +++ b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductResponse.cs @@ -32,6 +32,16 @@ /// 商品品牌名称 /// public string BrandName { get; set; } + + /// + /// 分类Id + /// + public long? CategoryId { get; set; } + + /// + /// 分类名称 + /// + public string CategoryName { get; set; } } } diff --git a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductSkuResponse.cs b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductSkuResponse.cs index 3d39a54..bf72943 100644 --- a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductSkuResponse.cs +++ b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductSkuResponse.cs @@ -29,5 +29,15 @@ public DateTime? CreateTime { get; set; } //public JToken Source { get; set; } + + /// + /// 分类Id + /// + public long? CategoryId { get; set; } + + /// + /// 分类名称 + /// + public string CategoryName { get; set; } } } From fa0a10bc830ffb25dcaf2bcf3f88be7b82da036e Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Tue, 26 Dec 2023 21:25:06 +0800 Subject: [PATCH 091/222] =?UTF-8?q?=E6=89=B9=E9=87=8F=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=95=86=E4=B8=BB=E8=90=A5=E7=B1=BB=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DataRepairController.cs | 9 ++++ .../DataRepair/DataRepairBusiness.cs | 51 +++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index 4e3d431..dc85ffe 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -106,5 +106,14 @@ namespace BBWYB.Server.API.Controllers { dataRepairBusiness.SyncPurchaserName(); } + + /// + /// 定时补齐采购商主营类目 + /// + [HttpPost] + public void SyncPurchaserCategory() + { + dataRepairBusiness.SyncPurchaserCategory(); + } } } diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index e180933..ea8c16e 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -1077,5 +1077,56 @@ namespace BBWYB.Server.Business }); } } + + public void SyncPurchaserCategory() + { + var purchaserIdList = fsql.Select() + .Where(p => !fsql.Select().Where(per => per.ExtendedType == Enums.PurchaserBasicInfoType.主营类目 && + per.PurchaserId == p.Id).Any()) + .ToList(p => p.Id); + if (purchaserIdList.Count() == 0) + return; + + var pspList = fsql.Select() + .InnerJoin((psp, p) => psp.ProductId == p.Id) + .Where((psp, p) => p.CategoryId != null && purchaserIdList.Contains(psp.PurchaserId)) + .ToList((psp, p) => new + { + psp.PurchaserId, + psp.ProductId, + p.CategoryId + }); + + if (pspList.Count() == 0) + return; + + List insertList = new List(); + + foreach (var purchaserId in purchaserIdList) + { + var currentPspList = pspList.Where(x => x.PurchaserId == purchaserId).ToList(); + if (currentPspList.Count() > 0) + { + var categoryList = currentPspList.GroupBy(x => x.CategoryId).Select(g => new Purchaser_ExtendedInfo_Relation() + { + Id = idGenerator.NewLong(), + ExtendedInfoId = g.Key, + ExtendedType = Enums.PurchaserBasicInfoType.主营类目, + PurchaserId = purchaserId + }).ToList(); + insertList.AddRange(categoryList); + Console.WriteLine($"insert count {insertList.Count()}"); + } + } + + if (insertList.Count() > 0) + { + fsql.Transaction(() => + { + fsql.Insert(insertList).ExecuteAffrows(); + }); + } + + } } } From b9ccd56c8920c13469941c0183675214e4f0faaa Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Tue, 26 Dec 2023 23:17:37 +0800 Subject: [PATCH 092/222] SyncPurchaserName --- BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs | 2 +- .../PurchaseScheme/PurchaseProductAPIService.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index ea8c16e..2d47976 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -1009,7 +1009,7 @@ namespace BBWYB.Server.Business public void SyncPurchaserName() { List> updatePurchaserList = new List>(); - var dbPurchaserList = fsql.Select().ToList(); + var dbPurchaserList = fsql.Select().Where(p => string.IsNullOrEmpty(p.Tag)).ToList(); var pspList = fsql.Select() .GroupBy(psp2 => psp2.PurchaserId) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs index 411cdfc..f5fada7 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs @@ -57,7 +57,7 @@ namespace BBWYB.Server.Business { "Accept-Language","zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"} }; purchaseProductCacheTimeSpan = TimeSpan.FromDays(1); - _1688ColorPropertyFieldIdList = new List() { 3216, 1627207, 1234, 3151, 7853, 446, 374, 404, 100019516, 3114, 2068 }; + _1688ColorPropertyFieldIdList = new List() { 3216, 1627207, 1234, 3151, 7853, 446, 374, 404, 100019516, 3114, 2068, 100018474 }; //jobject["data"]["1081181309101"] != null ? // jobject["data"]["1081181309101"]["data"]["location"].ToString() : // jobject["data"]["16347413030323"]["data"]["location"].ToString(), @@ -324,7 +324,7 @@ namespace BBWYB.Server.Business Tag = tag }; - + //_1688ColorPropertyFieldIdList.Add(100018474); var fidJToken = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => _1688ColorPropertyFieldIdList.Contains(j.Value("fid"))); if (fidJToken == null) fidJToken = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => j.Value("prop").Contains("颜色")); From 792afed18806450262f4ee699e1e5400ce811b82 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 28 Dec 2023 11:33:02 +0800 Subject: [PATCH 093/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=95=86=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E8=BF=94=E5=9B=9E=E6=9C=80=E8=BF=91=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=95=86=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Purchaser/PurchaserBusiness.cs | 70 +++++++++++++++---- .../Purchaser/QueryPurchaserRequest.cs | 2 +- 2 files changed, 59 insertions(+), 13 deletions(-) diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index dba87c5..434ccd9 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -76,12 +76,15 @@ namespace BBWYB.Server.Business if (request.RecentDayCondition != null && request.RecentDayCondition.RecentDay > 0) { var recentStartDay = DateTime.Now.Date.AddDays(request.RecentDayCondition.RecentDay.Value * -1); - if (request.RecentDayCondition.PurchasedCountComparisonOperator != null) + if (request.RecentDayCondition.PurchasedCountComparisonOperator != null && + request.RecentDayCondition.PurchasedCountComparisonOperator != 0 && + request.RecentDayCondition.PurchasedCount != null && + request.RecentDayCondition.PurchasedCount != 0) { var childSelect = fsql.Select() .InnerJoin((opi, o) => opi.OrderId == o.Id) - .Where((opi, o) => opi.ShopId == request.ShopId && - opi.IsEnabled == true && + .WhereIf(request.ShopId != null && request.ShopId > 0, (opi, o) => opi.ShopId == request.ShopId) + .Where((opi, o) => opi.IsEnabled == true && o.OrderState != Enums.OrderState.已取消 && opi.CreateTime >= recentStartDay) .GroupBy((opi, o) => opi.PurchaserId) @@ -92,14 +95,17 @@ namespace BBWYB.Server.Business .WithTempQuery(g => new { g.Value.Item1.PurchaserId, Count = g.Count() }).As("pcc"); select = select.Where(p => childSelect.Where(pcc => pcc.PurchaserId == p.Id).Any()); } - if (request.RecentDayCondition.PurchasedAmountComparisonOperator != null) + if (request.RecentDayCondition.PurchasedAmountComparisonOperator != null && + request.RecentDayCondition.PurchasedAmountComparisonOperator != 0 && + request.RecentDayCondition.PurchasedAmount != null && + request.RecentDayCondition.PurchasedAmount != 0) { var childSelect = fsql.Select() .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == o.Id) .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == ori.OrderId && ocd.SkuId == ori.BelongSkuId) .InnerJoin((ocd, o, ori, opi) => ori.OrderId == opi.OrderId) - .Where((ocd, o, ori, opi) => o.ShopId == request.ShopId && - o.OrderState != Enums.OrderState.已取消 && + .WhereIf(request.ShopId != null && request.ShopId > 0, (ocd, o, ori, opi) => o.ShopId == request.ShopId) + .Where((ocd, o, ori, opi) => o.OrderState != Enums.OrderState.已取消 && ocd.IsEnabled == true && opi.IsEnabled == true && opi.CreateTime >= recentStartDay) @@ -125,7 +131,8 @@ namespace BBWYB.Server.Business #region 查询SPU绑定数/SKU绑定数 var bindList = fsql.Select() .InnerJoin((psp, psc) => psp.SkuPurchaseSchemeId == psc.Id) - .Where((psp, psc) => psc.ShopId == request.ShopId && purchaserIdList.Contains(psp.PurchaserId)) + .WhereIf(request.ShopId != null && request.ShopId > 0, (psp, psc) => psc.ShopId == request.ShopId) + .Where((psp, psc) => purchaserIdList.Contains(psp.PurchaserId)) .GroupBy((psp, psc) => new { psp.PurchaserId, psp.ProductId, psp.SkuId }) .ToList(g => new { @@ -138,7 +145,8 @@ namespace BBWYB.Server.Business #region 查询SPU采购数/SKU采购数 var purchasedList = fsql.Select() .InnerJoin((spr, ps) => spr.SkuId == ps.Id) - .Where((spr, ps) => ps.ShopId == request.ShopId && purchaserIdList.Contains(spr.PurchaserId)) + .WhereIf(request.ShopId != null && request.ShopId > 0, (spr, ps) => spr.ShopId == request.ShopId) + .Where((spr, ps) => purchaserIdList.Contains(spr.PurchaserId)) .GroupBy((spr, ps) => new { spr.PurchaserId, spr.SkuId, ps.ProductId }) .ToList(g => new { @@ -152,6 +160,7 @@ namespace BBWYB.Server.Business #region 查询订单数 var poList = fsql.Select() .InnerJoin((opi, o) => opi.OrderId == o.Id) + .WhereIf(request.ShopId != null && request.ShopId > 0, (opi, o) => opi.ShopId == request.ShopId) .Where((opi, o) => opi.ShopId == request.ShopId && opi.IsEnabled == true && o.OrderState != Enums.OrderState.已取消 && @@ -170,8 +179,8 @@ namespace BBWYB.Server.Business .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == o.Id) .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == ori.OrderId && ocd.SkuId == ori.BelongSkuId) .InnerJoin((ocd, o, ori, opi) => ori.OrderId == opi.OrderId) - .Where((ocd, o, ori, opi) => o.ShopId == request.ShopId && - o.OrderState != Enums.OrderState.已取消 && + .WhereIf(request.ShopId != null && request.ShopId > 0, (ocd, o, ori, opi) => o.ShopId == request.ShopId) + .Where((ocd, o, ori, opi) => o.OrderState != Enums.OrderState.已取消 && ocd.IsEnabled == true && opi.IsEnabled == true && purchaserIdList.Contains(opi.PurchaserId)) @@ -185,8 +194,9 @@ namespace BBWYB.Server.Business #region 查询最近采购时间 var recentPurchaseTimeList = fsql.Select() - .InnerJoin((opi1, o) => o.OrderState != Enums.OrderState.已取消) - .Where((opi1, o) => opi1.ShopId == request.ShopId && + .InnerJoin((opi1, o) => opi1.OrderId == o.Id) + .WhereIf(request.ShopId != null && request.ShopId > 0, (opi1, o) => o.ShopId == request.ShopId) + .Where((opi1, o) => o.OrderState != Enums.OrderState.已取消 && purchaserIdList.Contains(opi1.PurchaserId) && opi1.IsEnabled == true) .GroupBy((opi1, o) => opi1.PurchaserId) @@ -213,6 +223,31 @@ namespace BBWYB.Server.Business }); #endregion + #region 最近采购的店铺商品 + var recent30d = DateTime.Now.AddDays(-30); + var bePurchasedProductSkuList = fsql.Select() + .InnerJoin((opi, opri, o, ps) => opi.OrderId == o.Id) + .InnerJoin((opi, opri, o, ps) => opri.PurchaseOrderId == opi.PurchaseOrderId) + .InnerJoin((opi, opri, o, ps) => opri.BelongSkuId == ps.Id) + .WhereIf(request.ShopId != null && request.ShopId > 0, (opi, opri, o, ps) => o.ShopId == request.ShopId) + .Where((opi, opri, o, ps) => o.OrderState != Enums.OrderState.已取消 && + opi.IsEnabled == true && + opi.CreateTime >= recent30d && + purchaserIdList.Contains(opi.PurchaserId)) + .OrderByDescending((opi, opri, o, ps) => opi.CreateTime) + .ToList((opi, opri, o, ps) => new + { + opi.PurchaserId, + ps.Id, + ps.Logo, + ps.SkuName, + ps.Price, + opi.CreateTime + }); + + + #endregion + foreach (var purchaser in purchaserList) { #region SPU绑定数/SKU绑定数 @@ -257,6 +292,17 @@ namespace BBWYB.Server.Business Type = x.Type }).ToList(); #endregion + + #region 最近采购店铺商品 + purchaser.Recent30dProductSku = bePurchasedProductSkuList.Where(x => x.PurchaserId == purchaser.Id).Take(10).Select(x => new ProductSkuResponse() + { + Id = x.Id, + Logo = x.Logo, + SkuName = x.SkuName, + Price = x.Price + }).ToList(); + #endregion + } } diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs index b0e277f..2975a21 100644 --- a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs @@ -5,7 +5,7 @@ namespace BBWYB.Server.Model.Dto public class QueryPurchaserRequest { [Required] - public long ShopId { get; set; } + public long? ShopId { get; set; } public string Spu { get; set; } From 20661c09cfd6bf432bb1c3404fc90ea46944a702 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 28 Dec 2023 15:18:14 +0800 Subject: [PATCH 094/222] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=95=86=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E8=BF=94=E5=9B=9EJDSKU?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Purchaser/PurchaserBusiness.cs | 13 ++++++--- .../Product/RecentPurchasedSkuResponse.cs | 29 +++++++++++++++++++ .../Response/Purchaser/PurchaserResponse.cs | 4 +-- 3 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 BBWYB.Server.Model/Dto/Response/Product/RecentPurchasedSkuResponse.cs diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index 434ccd9..93122bb 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -241,8 +241,11 @@ namespace BBWYB.Server.Business ps.Id, ps.Logo, ps.SkuName, - ps.Price, - opi.CreateTime + //ps.Price, + opi.PurchaseOrderId, + opi.OrderId, + opi.CreateTime, + opri.SourceSkuId }); @@ -294,12 +297,14 @@ namespace BBWYB.Server.Business #endregion #region 最近采购店铺商品 - purchaser.Recent30dProductSku = bePurchasedProductSkuList.Where(x => x.PurchaserId == purchaser.Id).Take(10).Select(x => new ProductSkuResponse() + purchaser.Recent30dProductSku = bePurchasedProductSkuList.Where(x => x.PurchaserId == purchaser.Id).Take(10).Select(x => new RecentPurchasedSkuResponse() { Id = x.Id, Logo = x.Logo, SkuName = x.SkuName, - Price = x.Price + BelongSku = x.SourceSkuId, + OrderId = x.OrderId, + PurchaserOrderId = x.PurchaseOrderId }).ToList(); #endregion diff --git a/BBWYB.Server.Model/Dto/Response/Product/RecentPurchasedSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Product/RecentPurchasedSkuResponse.cs new file mode 100644 index 0000000..dd29ac5 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Product/RecentPurchasedSkuResponse.cs @@ -0,0 +1,29 @@ +namespace BBWYB.Server.Model.Dto +{ + public class RecentPurchasedSkuResponse + { + /// + /// SkuId + /// + public string Id { get; set; } + + public string SkuName { get; set; } + + public string Logo { get; set; } + + /// + /// 归属SkuId(JD) + /// + public string BelongSku { get; set; } + + /// + /// 采购单号 + /// + public string PurchaserOrderId { get; set; } + + /// + /// 订单Id + /// + public string OrderId { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs index f0df51f..1a573f9 100644 --- a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs @@ -52,13 +52,13 @@ namespace BBWYB.Server.Model.Dto /// /// 最近30天具有采购行为的店铺SKU /// - public IList Recent30dProductSku { get; set; } + public IList Recent30dProductSku { get; set; } public PurchaserResponse() { CategoryList = new List(); TagList = new List(); - Recent30dProductSku = new List(); + Recent30dProductSku = new List(); } } } From f6710e41e8dd6e594b71b7da531f0125763c7c51 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Fri, 29 Dec 2023 01:17:34 +0800 Subject: [PATCH 095/222] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=A7=E5=9C=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataRepair/DataRepairBusiness.cs | 14 ++++++--- .../PurchaseProductAPIService.cs | 29 +++++++++++++++++++ .../Purchaser/PurchaserBusiness.cs | 3 ++ 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 2d47976..12b90a7 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -1009,14 +1009,20 @@ namespace BBWYB.Server.Business public void SyncPurchaserName() { List> updatePurchaserList = new List>(); - var dbPurchaserList = fsql.Select().Where(p => string.IsNullOrEmpty(p.Tag)).ToList(); - var pspList = fsql.Select() - .GroupBy(psp2 => psp2.PurchaserId) - .WithTempQuery(g => new { MaxId = g.Max(g.Value.Id), PurchaserId = g.Key }) + var pspList = fsql.Select() + .InnerJoin((psp2, p) => psp2.PurchaserId == p.Id) + .Where((psp2, p) => string.IsNullOrEmpty(p.Location)) + .GroupBy((psp2, p) => psp2.PurchaserId) + .WithTempQuery(g => new { MaxId = g.Max(g.Value.Item1.Id), PurchaserId = g.Key }) .From() .InnerJoin((psp2, psp1) => psp2.MaxId == psp1.Id) .ToList((psp2, psp1) => psp1); + + //var pspList = fsql.Select(432883091529819).ToList(); + var purchaserIdList = pspList.Select(x => x.PurchaserId).Distinct().ToList(); + var dbPurchaserList = fsql.Select(purchaserIdList).ToList(); + var index = 0; foreach (var psp in pspList) { diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs index f5fada7..181b34a 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs @@ -6,6 +6,7 @@ using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; using Microsoft.Extensions.Caching.Memory; using Newtonsoft.Json.Linq; +using System.Net.Http.Headers; using System.Text.RegularExpressions; namespace BBWYB.Server.Business @@ -309,10 +310,38 @@ namespace BBWYB.Server.Business if (jobject["data"][locationIdList[i]] != null) { location = jobject["data"][locationIdList[i]]["data"]["location"].ToString(); + if (string.IsNullOrEmpty(location)) + continue; break; } } + if (string.IsNullOrEmpty(location)) + { + var jobjectdata = jobject["data"] as JObject; + foreach (var jproperty in jobjectdata.Properties()) + { + if (jobjectdata[jproperty.Name].Value("componentType") == "@ali/tdmod-od-pc-attribute-new") + { + location = jobjectdata[jproperty.Name]["data"].FirstOrDefault(x => x.Value("name") == "产地")?.Value("value"); + if (!string.IsNullOrEmpty(location)) + break; + } + } + + if (string.IsNullOrEmpty(location)) + { + if (purchaserName.Contains("市") && purchaserName.Contains("区")) + { + location = purchaserName.Substring(0, purchaserName.IndexOf("区") + 1); + } + else if (purchaserName.Contains("市")) + { + location = purchaserName.Substring(0, purchaserName.IndexOf("市") + 1); + } + } + } + var purchaser = new Purchaser() { Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(), diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index 93122bb..5fccbf2 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -33,6 +33,9 @@ namespace BBWYB.Server.Business public ListResponse QueryPurchaserList(QueryPurchaserRequest request) { + //默认ShopId为空 + request.ShopId = null; + #region 数据验证 if (request.RecentDayCondition != null && request.RecentDayCondition.RecentDay > 0) { From 7048eea6829a9c0ed536b06cb4f451de559d21d0 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Fri, 29 Dec 2023 02:03:18 +0800 Subject: [PATCH 096/222] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=95=86=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Purchaser/PurchaserBusiness.cs | 23 ++++++++++--------- .../Product/RecentPurchasedSkuResponse.cs | 10 -------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index 5fccbf2..673dfb4 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -227,7 +227,7 @@ namespace BBWYB.Server.Business #endregion #region 最近采购的店铺商品 - var recent30d = DateTime.Now.AddDays(-30); + var recent30d = DateTime.Now.AddDays(-00); var bePurchasedProductSkuList = fsql.Select() .InnerJoin((opi, opri, o, ps) => opi.OrderId == o.Id) .InnerJoin((opi, opri, o, ps) => opri.PurchaseOrderId == opi.PurchaseOrderId) @@ -237,18 +237,21 @@ namespace BBWYB.Server.Business opi.IsEnabled == true && opi.CreateTime >= recent30d && purchaserIdList.Contains(opi.PurchaserId)) - .OrderByDescending((opi, opri, o, ps) => opi.CreateTime) - .ToList((opi, opri, o, ps) => new + .GroupBy((opi, opri, o, ps) => new { - opi.PurchaserId, ps.Id, + opi.PurchaserId, ps.Logo, ps.SkuName, - //ps.Price, - opi.PurchaseOrderId, - opi.OrderId, - opi.CreateTime, opri.SourceSkuId + }) + .ToList(g => new + { + g.Key.Id, + g.Key.PurchaserId, + g.Key.Logo, + g.Key.SkuName, + g.Key.SourceSkuId }); @@ -305,9 +308,7 @@ namespace BBWYB.Server.Business Id = x.Id, Logo = x.Logo, SkuName = x.SkuName, - BelongSku = x.SourceSkuId, - OrderId = x.OrderId, - PurchaserOrderId = x.PurchaseOrderId + BelongSku = x.SourceSkuId }).ToList(); #endregion diff --git a/BBWYB.Server.Model/Dto/Response/Product/RecentPurchasedSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Product/RecentPurchasedSkuResponse.cs index dd29ac5..0d4d2f0 100644 --- a/BBWYB.Server.Model/Dto/Response/Product/RecentPurchasedSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Product/RecentPurchasedSkuResponse.cs @@ -15,15 +15,5 @@ /// 归属SkuId(JD) /// public string BelongSku { get; set; } - - /// - /// 采购单号 - /// - public string PurchaserOrderId { get; set; } - - /// - /// 订单Id - /// - public string OrderId { get; set; } } } From 50ec08b313ca31fd3242294da4bec4ae86232b94 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 31 Dec 2023 16:49:34 +0800 Subject: [PATCH 097/222] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=95=86=E6=9F=A5=E8=AF=A2bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.PurchaserCapture/App.xaml | 9 +++ BBWYB.PurchaserCapture/App.xaml.cs | 22 +++++++ BBWYB.PurchaserCapture/AssemblyInfo.cs | 10 ++++ .../BBWYB.PurchaserCapture.csproj | 17 ++++++ BBWYB.PurchaserCapture/MainWindow.xaml | 12 ++++ BBWYB.PurchaserCapture/MainWindow.xaml.cs | 24 ++++++++ .../Purchaser/PurchaserBusiness.cs | 29 ++++++---- BBWYB.Server.Model/Db/BBWY/ProductSku.cs | 57 +++++++++++++++++++ .../Purchaser/QueryPurchaserRequest.cs | 1 - bbwyb.sln | 9 ++- 10 files changed, 177 insertions(+), 13 deletions(-) create mode 100644 BBWYB.PurchaserCapture/App.xaml create mode 100644 BBWYB.PurchaserCapture/App.xaml.cs create mode 100644 BBWYB.PurchaserCapture/AssemblyInfo.cs create mode 100644 BBWYB.PurchaserCapture/BBWYB.PurchaserCapture.csproj create mode 100644 BBWYB.PurchaserCapture/MainWindow.xaml create mode 100644 BBWYB.PurchaserCapture/MainWindow.xaml.cs create mode 100644 BBWYB.Server.Model/Db/BBWY/ProductSku.cs diff --git a/BBWYB.PurchaserCapture/App.xaml b/BBWYB.PurchaserCapture/App.xaml new file mode 100644 index 0000000..796be7b --- /dev/null +++ b/BBWYB.PurchaserCapture/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/BBWYB.PurchaserCapture/App.xaml.cs b/BBWYB.PurchaserCapture/App.xaml.cs new file mode 100644 index 0000000..03ed6cd --- /dev/null +++ b/BBWYB.PurchaserCapture/App.xaml.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Configuration; +using System.Configuration; +using System.Data; +using System.Windows; + +namespace BBWYB.PurchaserCapture +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + public IServiceProvider ServiceProvider { get; private set; } + public IConfiguration Configuration { get; private set; } + + protected override void OnStartup(StartupEventArgs e) + { + base.OnStartup(e); + } + } + +} diff --git a/BBWYB.PurchaserCapture/AssemblyInfo.cs b/BBWYB.PurchaserCapture/AssemblyInfo.cs new file mode 100644 index 0000000..b0ec827 --- /dev/null +++ b/BBWYB.PurchaserCapture/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Windows; + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] diff --git a/BBWYB.PurchaserCapture/BBWYB.PurchaserCapture.csproj b/BBWYB.PurchaserCapture/BBWYB.PurchaserCapture.csproj new file mode 100644 index 0000000..a668083 --- /dev/null +++ b/BBWYB.PurchaserCapture/BBWYB.PurchaserCapture.csproj @@ -0,0 +1,17 @@ + + + + WinExe + net6.0-windows + enable + enable + true + + + + + + + + + diff --git a/BBWYB.PurchaserCapture/MainWindow.xaml b/BBWYB.PurchaserCapture/MainWindow.xaml new file mode 100644 index 0000000..a08f3b2 --- /dev/null +++ b/BBWYB.PurchaserCapture/MainWindow.xaml @@ -0,0 +1,12 @@ + + + + + diff --git a/BBWYB.PurchaserCapture/MainWindow.xaml.cs b/BBWYB.PurchaserCapture/MainWindow.xaml.cs new file mode 100644 index 0000000..4e2b178 --- /dev/null +++ b/BBWYB.PurchaserCapture/MainWindow.xaml.cs @@ -0,0 +1,24 @@ +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace BBWYB.PurchaserCapture +{ + /// + /// Interaction logic for MainWindow.xaml + /// + public partial class MainWindow : Window + { + public MainWindow() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index 673dfb4..f846559 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -10,9 +10,11 @@ namespace BBWYB.Server.Business { public class PurchaserBusiness : BaseBusiness, IDenpendency { - public PurchaserBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) : base(fsql, nLogManager, idGenerator) - { + private FreeSqlMultiDBManager _freeSqlMultiDBManager; + public PurchaserBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager freeSqlMultiDBManager) : base(fsql, nLogManager, idGenerator) + { + this._freeSqlMultiDBManager = freeSqlMultiDBManager; } public ListResponse QueryPurchaserNameList(string keywords) @@ -164,8 +166,7 @@ namespace BBWYB.Server.Business var poList = fsql.Select() .InnerJoin((opi, o) => opi.OrderId == o.Id) .WhereIf(request.ShopId != null && request.ShopId > 0, (opi, o) => opi.ShopId == request.ShopId) - .Where((opi, o) => opi.ShopId == request.ShopId && - opi.IsEnabled == true && + .Where((opi, o) => opi.IsEnabled == true && o.OrderState != Enums.OrderState.已取消 && purchaserIdList.Contains(opi.PurchaserId)) .GroupBy((opi, o) => opi.PurchaserId) @@ -191,7 +192,7 @@ namespace BBWYB.Server.Business .ToList(g => new { PurchaserId = g.Key, - PurchaseAmount = g.Sum(g.Value.Item1.SkuAmount) + g.Sum(g.Value.Item1.PurchaseFreight) + PurchaseAmount = g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) }); #endregion @@ -227,7 +228,7 @@ namespace BBWYB.Server.Business #endregion #region 最近采购的店铺商品 - var recent30d = DateTime.Now.AddDays(-00); + var recent30d = DateTime.Now.AddDays(-90); var bePurchasedProductSkuList = fsql.Select() .InnerJoin((opi, opri, o, ps) => opi.OrderId == o.Id) .InnerJoin((opi, opri, o, ps) => opri.PurchaseOrderId == opi.PurchaseOrderId) @@ -253,6 +254,8 @@ namespace BBWYB.Server.Business g.Key.SkuName, g.Key.SourceSkuId }); + var belongSkuIdList = bePurchasedProductSkuList.Select(x => x.SourceSkuId).Distinct().ToList(); + var belongSkuList = _freeSqlMultiDBManager.BBWYCfsql.Select(belongSkuIdList).ToList(ps => new { ps.Id, ps.Logo }); #endregion @@ -303,12 +306,16 @@ namespace BBWYB.Server.Business #endregion #region 最近采购店铺商品 - purchaser.Recent30dProductSku = bePurchasedProductSkuList.Where(x => x.PurchaserId == purchaser.Id).Take(10).Select(x => new RecentPurchasedSkuResponse() + purchaser.Recent30dProductSku = bePurchasedProductSkuList.Where(x => x.PurchaserId == purchaser.Id).Take(10).Select(x => { - Id = x.Id, - Logo = x.Logo, - SkuName = x.SkuName, - BelongSku = x.SourceSkuId + var belongSku = belongSkuList.FirstOrDefault(b => b.Id == x.SourceSkuId); + return new RecentPurchasedSkuResponse() + { + Id = x.Id, + Logo = belongSku?.Logo ?? x.Logo, + SkuName = x.SkuName, + BelongSku = x.SourceSkuId + }; }).ToList(); #endregion diff --git a/BBWYB.Server.Model/Db/BBWY/ProductSku.cs b/BBWYB.Server.Model/Db/BBWY/ProductSku.cs new file mode 100644 index 0000000..ad67223 --- /dev/null +++ b/BBWYB.Server.Model/Db/BBWY/ProductSku.cs @@ -0,0 +1,57 @@ +using FreeSql.DataAnnotations; +using System; + +namespace BBWYB.Server.Model.Db.BBWY +{ + + [Table(Name = "productsku", DisableSyncStructure = true)] + public partial class ProductSku + { + + /// + /// SKU + /// + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string Id { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + + public string Logo { get; set; } + + [Column(DbType = "int(1)", MapType = typeof(int))] + public Enums.Platform Platform { get; set; } + + /// + /// 售价 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? Price { get; set; } + + /// + /// SPU + /// + [Column(StringLength = 50)] + public string ProductId { get; set; } + + + public long? ShopId { get; set; } + + + public string Title { get; set; } + + /// + /// 京东Sku状态【1:上架 2:下架 4:删除】 + /// + public int? State { get; set; } + + /// + /// 三级类目Id + /// + public int? CategoryId { get; set; } + + public string CategoryName { get; set; } + } + +} diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs index 2975a21..038c03e 100644 --- a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs @@ -4,7 +4,6 @@ namespace BBWYB.Server.Model.Dto { public class QueryPurchaserRequest { - [Required] public long? ShopId { get; set; } public string Spu { get; set; } diff --git a/bbwyb.sln b/bbwyb.sln index a8c631b..22ce2b7 100644 --- a/bbwyb.sln +++ b/bbwyb.sln @@ -46,10 +46,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "U", "U", "{D34B0974-D525-4B EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "U", "U\U.csproj", "{FE3D9812-2D75-4850-8AEA-CE88BAF2F17A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebTest", "WebTest\WebTest.csproj", "{EFCA7129-3069-4F92-A0BD-663D014B82AD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebTest", "WebTest\WebTest.csproj", "{EFCA7129-3069-4F92-A0BD-663D014B82AD}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{97653DB2-605C-4582-AC6E-2A09D2E8EB44}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BBWYB.PurchaserCapture", "BBWYB.PurchaserCapture\BBWYB.PurchaserCapture.csproj", "{736D1C5D-4B7A-45C4-863A-6EFF6DCAE1E1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -104,6 +106,10 @@ Global {EFCA7129-3069-4F92-A0BD-663D014B82AD}.Debug|Any CPU.Build.0 = Debug|Any CPU {EFCA7129-3069-4F92-A0BD-663D014B82AD}.Release|Any CPU.ActiveCfg = Release|Any CPU {EFCA7129-3069-4F92-A0BD-663D014B82AD}.Release|Any CPU.Build.0 = Release|Any CPU + {736D1C5D-4B7A-45C4-863A-6EFF6DCAE1E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {736D1C5D-4B7A-45C4-863A-6EFF6DCAE1E1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {736D1C5D-4B7A-45C4-863A-6EFF6DCAE1E1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {736D1C5D-4B7A-45C4-863A-6EFF6DCAE1E1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -125,6 +131,7 @@ Global {FE3D9812-2D75-4850-8AEA-CE88BAF2F17A} = {D34B0974-D525-4BD1-90DE-B2CF5FE47AA4} {EFCA7129-3069-4F92-A0BD-663D014B82AD} = {97653DB2-605C-4582-AC6E-2A09D2E8EB44} {97653DB2-605C-4582-AC6E-2A09D2E8EB44} = {878D0106-F55F-4813-9158-F2729D460F9C} + {736D1C5D-4B7A-45C4-863A-6EFF6DCAE1E1} = {1E7D36DB-A817-4208-8FC6-36A66FAB17E5} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {0D069898-04B7-4D24-A6A4-D7C703B8BFFC} From 1b9a5fe08f28bcf801bf3341b19eaf075fc367db Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 31 Dec 2023 17:11:05 +0800 Subject: [PATCH 098/222] 1 --- .../Purchaser/PurchaserBusiness.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index f846559..4deb6ae 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -148,16 +148,21 @@ namespace BBWYB.Server.Business #endregion #region 查询SPU采购数/SKU采购数 - var purchasedList = fsql.Select() - .InnerJoin((spr, ps) => spr.SkuId == ps.Id) - .WhereIf(request.ShopId != null && request.ShopId > 0, (spr, ps) => spr.ShopId == request.ShopId) - .Where((spr, ps) => purchaserIdList.Contains(spr.PurchaserId)) - .GroupBy((spr, ps) => new { spr.PurchaserId, spr.SkuId, ps.ProductId }) + var purchasedList = fsql.Select() + .InnerJoin((ps, ori, opi, o) => ps.Id == ori.BelongSkuId) + .InnerJoin((ps, ori, opi, o) => ori.PurchaseOrderId == opi.PurchaseOrderId && + ori.OrderId == opi.OrderId) + .InnerJoin((ps, ori, opi, o) => opi.OrderId == o.Id) + .WhereIf(request.ShopId != null && request.ShopId > 0, (ps, ori, opi, o) => o.ShopId == request.ShopId) + .Where((ps, ori, opi, o) => o.OrderState != Enums.OrderState.已取消 && + opi.IsEnabled == true && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((ps, ori, opi, o) => new { opi.PurchaserId, ps.Id, ps.ProductId }) .ToList(g => new { g.Key.PurchaserId, g.Key.ProductId, - g.Key.SkuId + SkuId = g.Key.Id }); #endregion From 392501b5e15c88ef8070bea9dab5f45e88b5053a Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Tue, 2 Jan 2024 02:41:25 +0800 Subject: [PATCH 099/222] =?UTF-8?q?=E4=BA=A7=E4=B8=9A=E5=B8=A6=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E5=87=86=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DataRepairController.cs | 6 ++ .../DataRepair/DataRepairBusiness.cs | 72 +++++++++++++++---- .../Db/Purchaser/PurchaserExtendedInfo.cs | 11 +-- ...uanTan_Supplier_ProductCategoryResponse.cs | 2 + .../Client/Impl/OP_QuanTanClient.cs | 1 + .../Product/OP_ProductCategoryResponse.cs | 2 + 6 files changed, 78 insertions(+), 16 deletions(-) diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index dc85ffe..9d0640b 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -115,5 +115,11 @@ namespace BBWYB.Server.API.Controllers { dataRepairBusiness.SyncPurchaserCategory(); } + + [HttpGet] + public void Test() + { + dataRepairBusiness.Test(); + } } } diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 12b90a7..991f37c 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -12,6 +12,7 @@ using SDKAdapter.OperationPlatform.Models; using SDKAdapter.PurchasePlatform.Client; using SDKAdapter.PurchasePlatform.Models; using System.Data; +using System.Text.RegularExpressions; using Yitter.IdGenerator; namespace BBWYB.Server.Business @@ -972,7 +973,7 @@ namespace BBWYB.Server.Business var request = new OP_QueryProductCategoryRequest() { PageIndex = 1, - PageSize = 50, + PageSize = 500, AppKey = "BBWYB2023022501", AppSecret = "3a1521deccc6819d61788a0d6baae49e9", AppToken = "9" @@ -985,19 +986,26 @@ namespace BBWYB.Server.Business //找出新增的类目 - var newCategoryList = qtCategoryList.Where(c => !dbCategoryList.Any(dc => dc.Id == long.Parse(c.CategoryId))).ToList(); - if (newCategoryList.Count() > 0) + //var newCategoryList = qtCategoryList.Where(c => !dbCategoryList.Any(dc => dc.Id == long.Parse(c.CategoryId))).ToList(); + //if (newCategoryList.Count() > 0) + //{ + insertList.AddRange(qtCategoryList.Select(c => new PurchaserExtendedInfo() { - insertList.AddRange(newCategoryList.Select(c => new PurchaserExtendedInfo() - { - Id = long.Parse(c.CategoryId), - Name = c.CategoryName, - CreateTime = DateTime.Now, - Type = Enums.PurchaserBasicInfoType.主营类目 - }).ToList()); - } + Id = long.Parse(c.CategoryId), + Name = c.CategoryName, + CreateTime = DateTime.Now, + Type = Enums.PurchaserBasicInfoType.主营类目, + ExtendInfo = c.CategoryPath + }).ToList()); + //} + + + fsql.Transaction(() => + { + fsql.Delete().Where(x => x.Type == Enums.PurchaserBasicInfoType.主营类目).ExecuteAffrows(); + fsql.Insert(insertList).ExecuteAffrows(); + }); - fsql.Insert(insertList).ExecuteAffrows(); //找出接口丢失的类目 @@ -1134,5 +1142,45 @@ namespace BBWYB.Server.Business } } + + public void Test(string location) + { + IDictionary> provinceDictionary = new Dictionary>() + { + { "省", new List() + { + "黑龙江","吉林","辽宁","河北","山西","陕西","甘肃","青海","河南","湖北","湖南","山东","江苏","安徽","浙江","江西","福建","台湾","贵州","四川","云南","广东","海南" + } + }, + { "自治区", new List(){ "内蒙古","西藏"}}, + { "回族自治区", new List(){"宁夏"}}, + { "维吾尔自治区", new List(){"新疆"}}, + { "壮族自治区", new List(){"广西"}}, + { "特别行政区",new List(){ "香港","澳门"}}, + { "市",new List(){ "重庆","北京","天津","上海"}} + }; + + foreach (var provincekey in provinceDictionary.Keys) + { + var province = provinceDictionary[provincekey].FirstOrDefault(p => location.StartsWith(p)); + } + + Console.WriteLine(); + } + + private string NormalizeLocationString(string input) + { + // 使用正则表达式移除多余的空格和省市之间的空格 + string normalizedString = Regex.Replace(input, @"\s+", ""); + + // 如果字符串中没有省市的分隔符,则添加一个 + if (!normalizedString.Contains("省") && !normalizedString.Contains("市")) + { + int index = normalizedString.Length / 2; + normalizedString = normalizedString.Insert(index, "省"); + } + + return normalizedString; + } } } diff --git a/BBWYB.Server.Model/Db/Purchaser/PurchaserExtendedInfo.cs b/BBWYB.Server.Model/Db/Purchaser/PurchaserExtendedInfo.cs index 73bd4ad..981499a 100644 --- a/BBWYB.Server.Model/Db/Purchaser/PurchaserExtendedInfo.cs +++ b/BBWYB.Server.Model/Db/Purchaser/PurchaserExtendedInfo.cs @@ -8,19 +8,22 @@ namespace BBWYB.Server.Model.Db { [Column(DbType = "bigint", IsPrimary = true)] - public long Id { get; set; } + public long Id { get; set; } [Column(DbType = "datetime")] - public DateTime? CreateTime { get; set; } + public DateTime? CreateTime { get; set; } [Column(StringLength = 50)] - public string Name { get; set; } + public string Name { get; set; } /// /// 类型 主营类目=0 标签=1 /// [Column(MapType = typeof(int?))] - public Enums.PurchaserBasicInfoType? Type { get; set; } + public Enums.PurchaserBasicInfoType? Type { get; set; } + + [Column(StringLength = 50)] + public string ExtendInfo { get; set; } } diff --git a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductCategoryResponse.cs b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductCategoryResponse.cs index 06a0caa..dc91e09 100644 --- a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductCategoryResponse.cs +++ b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductCategoryResponse.cs @@ -5,5 +5,7 @@ public string CategoryId { get; set; } public string CategoryName { get; set; } + + public string CategoryPath { get; set; } } } diff --git a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs index b513adc..cb3cd6d 100644 --- a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs @@ -261,6 +261,7 @@ namespace SDKAdapter.OperationPlatform.Client { CategoryId = x.CategoryId, CategoryName = x.CategoryName, + CategoryPath = x.CategoryPath }).ToList() : null }; } diff --git a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductCategoryResponse.cs b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductCategoryResponse.cs index 999fa21..1363c36 100644 --- a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductCategoryResponse.cs +++ b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductCategoryResponse.cs @@ -5,5 +5,7 @@ public string CategoryId { get; set; } public string CategoryName { get; set; } + + public string CategoryPath { get; set; } } } From 2a8560760484922e153ae6f567715b8e118b0f9d Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Tue, 2 Jan 2024 11:06:48 +0800 Subject: [PATCH 100/222] =?UTF-8?q?=E6=8B=B3=E6=8E=A2=E5=95=86=E5=93=81?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E5=A2=9E=E5=8A=A0=E7=88=B6=E7=BA=A7=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DataRepairController.cs | 2 +- ...n_Supplier_SearchProductCategoryRequest.cs | 5 +++ .../Client/Impl/OP_QuanTanClient.cs | 34 +++++++++++++------ 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index 9d0640b..bd03010 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -119,7 +119,7 @@ namespace BBWYB.Server.API.Controllers [HttpGet] public void Test() { - dataRepairBusiness.Test(); + dataRepairBusiness.Test("广东省"); } } } diff --git a/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchProductCategoryRequest.cs b/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchProductCategoryRequest.cs index 11ea8fb..a66b13c 100644 --- a/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchProductCategoryRequest.cs +++ b/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchProductCategoryRequest.cs @@ -9,5 +9,10 @@ public int pageSize { get; set; } = 20; public int page { get; set; } = 1; + + /// + /// 分类层级 0/1/2 默认2 + /// + public int? categoryLevel { get; set; } = 2; } } diff --git a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs index cb3cd6d..de41b19 100644 --- a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs @@ -1,5 +1,6 @@ using BBWYB.Common.Http; using BBWYB.Common.Models; +using com.alibaba.openapi.client; using QuanTan.SDK.Client.Supplier; using QuanTan.SDK.Models.Supplier; using SDKAdapter.OperationPlatform.Models; @@ -249,20 +250,31 @@ namespace SDKAdapter.OperationPlatform.Client public override OP_ListResponse GetProductCategoryList(OP_QueryProductCategoryRequest request) { - var qtResponse = supplier_ProductClient.GetProductCategoryList(new QuanTan_Supplier_SearchProductCategoryRequest() + var levels = new List() { 0, 1, 2 }; + var items = new List(); + foreach (var level in levels) { - page = request.PageIndex, - pageSize = request.PageSize - }, request.AppKey, request.AppSecret); + var qtResponse = supplier_ProductClient.GetProductCategoryList(new QuanTan_Supplier_SearchProductCategoryRequest() + { + page = request.PageIndex, + pageSize = request.PageSize, + categoryLevel = level + }, request.AppKey, request.AppSecret); + if (qtResponse.Data.List != null && qtResponse.Data.List.Count() > 0) + { + items.AddRange(qtResponse.Data.List.Select(x => new OP_ProductCategoryResponse() + { + CategoryId = x.CategoryId, + CategoryName = x.CategoryName, + CategoryPath = x.CategoryPath + }).ToList()); + } + } + return new OP_ListResponse() { - Count = qtResponse.Data.Count, - Items = qtResponse.Data.List != null && qtResponse.Data.List.Count() > 0 ? qtResponse.Data.List.Select(x => new OP_ProductCategoryResponse() - { - CategoryId = x.CategoryId, - CategoryName = x.CategoryName, - CategoryPath = x.CategoryPath - }).ToList() : null + Count = items.Count, + Items = items }; } } From 5b6851e7cafa78d29b83995668eeff774bcc14c1 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 2 Jan 2024 19:03:37 +0800 Subject: [PATCH 101/222] =?UTF-8?q?=E4=BA=A7=E4=B8=9A=E5=B8=A6=E5=90=88?= =?UTF-8?q?=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DataRepairController.cs | 6 +- .../DataRepair/DataRepairBusiness.cs | 74 ++++++++++++++----- .../PurchaseProductAPIService.cs | 70 ++++++++++-------- 3 files changed, 100 insertions(+), 50 deletions(-) diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index bd03010..cbf964c 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -116,10 +116,10 @@ namespace BBWYB.Server.API.Controllers dataRepairBusiness.SyncPurchaserCategory(); } - [HttpGet] - public void Test() + [HttpPost] + public void RepairPurchaserLocation() { - dataRepairBusiness.Test("广东省"); + dataRepairBusiness.RepairPurchaserLocation(); } } } diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 991f37c..770fec1 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -1143,8 +1143,51 @@ namespace BBWYB.Server.Business } - public void Test(string location) + public void RepairPurchaserLocation() { + var purchaserList = fsql.Select().ToList(); + List> updateList = new List>(); + + foreach (var purchaser in purchaserList) + { + var location = FormatteLocation(purchaser.Location); + if (location != purchaser.Location) + { + updateList.Add(fsql.Update(purchaser.Id).Set(p => p.Location, location)); + } + } + List> tempUpdateList = new List>(); + for (var i = 0; i < updateList.Count(); i++) + { + tempUpdateList.Add(updateList[i]); + if (i != 0 && i % 10 == 0) + { + fsql.Transaction(() => + { + foreach (var update in tempUpdateList) + update.ExecuteAffrows(); + }); + tempUpdateList.Clear(); + } + } + + if (tempUpdateList.Count() > 0) + { + fsql.Transaction(() => + { + foreach (var update in tempUpdateList) + update.ExecuteAffrows(); + }); + tempUpdateList.Clear(); + } + } + + private string FormatteLocation(string location) + { + if (string.IsNullOrEmpty(location)) + return location; + location = location.Trim().Replace(" ", string.Empty); + IDictionary> provinceDictionary = new Dictionary>() { { "省", new List() @@ -1163,24 +1206,19 @@ namespace BBWYB.Server.Business foreach (var provincekey in provinceDictionary.Keys) { var province = provinceDictionary[provincekey].FirstOrDefault(p => location.StartsWith(p)); + if (string.IsNullOrEmpty(province)) + continue; + if (location.Contains(provincekey)) + return location; + location = location.Replace(province, $"{province}{provincekey}"); + if (location.EndsWith(provincekey)) + return location; + if (!location.EndsWith("市")) + location = $"{location}市"; } - - Console.WriteLine(); - } - - private string NormalizeLocationString(string input) - { - // 使用正则表达式移除多余的空格和省市之间的空格 - string normalizedString = Regex.Replace(input, @"\s+", ""); - - // 如果字符串中没有省市的分隔符,则添加一个 - if (!normalizedString.Contains("省") && !normalizedString.Contains("市")) - { - int index = normalizedString.Length / 2; - normalizedString = normalizedString.Insert(index, "省"); - } - - return normalizedString; + //Console.WriteLine(location); + return location; } } } + diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs index 181b34a..1c096f6 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs @@ -8,6 +8,7 @@ using Microsoft.Extensions.Caching.Memory; using Newtonsoft.Json.Linq; using System.Net.Http.Headers; using System.Text.RegularExpressions; +using static Google.Protobuf.Reflection.SourceCodeInfo.Types; namespace BBWYB.Server.Business { @@ -35,6 +36,7 @@ namespace BBWYB.Server.Business private List purchaserNameIdList; private IList invalidPurchaserNameList; + private IDictionary> provinceDictionary; public PurchaseProductAPIService(RestApiService restApiService, IMemoryCache memoryCache) { @@ -70,6 +72,21 @@ namespace BBWYB.Server.Business priceIdList = new List() { "1081181309582", "1081181309582", "16347413030316", "13772573013151" }; purchaserNameIdList = new List() { "38229149", "38229148", "38229150" }; + + provinceDictionary = new Dictionary>() + { + { "省", new List() + { + "黑龙江","吉林","辽宁","河北","山西","陕西","甘肃","青海","河南","湖北","湖南","山东","江苏","安徽","浙江","江西","福建","台湾","贵州","四川","云南","广东","海南" + } + }, + { "自治区", new List(){ "内蒙古","西藏"}}, + { "回族自治区", new List(){"宁夏"}}, + { "维吾尔自治区", new List(){"新疆"}}, + { "壮族自治区", new List(){"广西"}}, + { "特别行政区",new List(){ "香港","澳门"}}, + { "市",new List(){ "重庆","北京","天津","上海"}} + }; } public PurchaseSkuBasicInfoResponse GetProductInfo(PurchaseSkuBasicInfoRequest request) @@ -342,6 +359,8 @@ namespace BBWYB.Server.Business } } + location = FormatteLocation(location); + var purchaser = new Purchaser() { Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(), @@ -415,34 +434,27 @@ namespace BBWYB.Server.Business } } - //private (Purchaser purchaser, IList purchaseSchemeProductSkus)? LoadFromQTSpider(Platform platform, string productId, string skuId, string purchaseProductId, PurchaseOrderMode priceMode) - //{ - // try - // { - // var response = quanTanProductClient.GetProductInfo(purchaseProductId, qtAppId, qtAppSecret); - // if (response.Status != 200) - // return null; - // return (new Purchaser() - // { - // Id = response.Data.Supplier.VenderId, - // Name = response.Data.Supplier.VerdenName, - // Location = response.Data.Supplier.Location - // }, response.Data.ProductSku.Select(qtsku => new PurchaseSchemeProductSku() - // { - // ProductId = productId, - // SkuId = skuId, - // PurchaseProductId = purchaseProductId, - // Price = qtsku.Price, - // Title = qtsku.Title, - // PurchaseSkuId = qtsku.SkuId, - // PurchaseSkuSpecId = string.Empty, - // Logo = qtsku.Logo - // }).ToList()); - // } - // catch - // { - // return null; - // } - //} + private string FormatteLocation(string location) + { + if (string.IsNullOrEmpty(location)) + return location; + location = location.Trim().Replace(" ", string.Empty); + + foreach (var provincekey in provinceDictionary.Keys) + { + var province = provinceDictionary[provincekey].FirstOrDefault(p => location.StartsWith(p)); + if (string.IsNullOrEmpty(province)) + continue; + if (location.Contains(provincekey)) + return location; + location = location.Replace(province, $"{province}{provincekey}"); + if (location.EndsWith(provincekey)) + return location; + if (!location.EndsWith("市")) + location = $"{location}市"; + } + //Console.WriteLine(location); + return location; + } } } From 79589809da486130792a3bf7c976be2b6001c747 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Mon, 8 Jan 2024 01:35:33 +0800 Subject: [PATCH 102/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=95=86=E4=B8=BB?= =?UTF-8?q?=E8=90=A5=E7=B1=BB=E7=9B=AE=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataRepair/DataRepairBusiness.cs | 40 ++++++++++++++++--- .../Purchaser/PurchaserBusiness.cs | 11 +++-- .../Client/Impl/OP_QuanTanClient.cs | 37 ++++++++--------- .../Product/OP_QueryProductCategoryRequest.cs | 5 +++ 4 files changed, 62 insertions(+), 31 deletions(-) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 770fec1..12ffe46 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -976,20 +976,48 @@ namespace BBWYB.Server.Business PageSize = 500, AppKey = "BBWYB2023022501", AppSecret = "3a1521deccc6819d61788a0d6baae49e9", - AppToken = "9" + AppToken = "9", + Level = 0 }; - var qtCategoryList = new List(); - var response = client.GetProductCategoryList(request); - if (response.Items != null) - qtCategoryList.AddRange(response.Items); + var L1_qtCategoryList = new List(); + var L1_response = client.GetProductCategoryList(request); + if (L1_response.Items != null) + L1_qtCategoryList.AddRange(L1_response.Items); + + request.Level = 1; + var L2_qtCategoryList = new List(); + var L2_response = client.GetProductCategoryList(request); + if (L2_response.Items != null) + L2_qtCategoryList.AddRange(L2_response.Items); + + request.Level = 2; + var L3_qtCategoryList = new List(); + var L3_response = client.GetProductCategoryList(request); + if (L3_response.Items != null) + L3_qtCategoryList.AddRange(L3_response.Items); + + foreach (var l3Category in L3_qtCategoryList) + { + var parentPathIdArray = l3Category.CategoryPath.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + if (parentPathIdArray.Length != 3) + continue; + var l2Category = L2_qtCategoryList.FirstOrDefault(x => x.CategoryId == parentPathIdArray[1]); + if (l2Category == null) + continue; + var l1Category = L1_qtCategoryList.FirstOrDefault(x => x.CategoryId == parentPathIdArray[0]); + if (l1Category == null) + continue; + + l3Category.CategoryPath = $"{l1Category.CategoryName},{l2Category.CategoryName}"; + } //找出新增的类目 //var newCategoryList = qtCategoryList.Where(c => !dbCategoryList.Any(dc => dc.Id == long.Parse(c.CategoryId))).ToList(); //if (newCategoryList.Count() > 0) //{ - insertList.AddRange(qtCategoryList.Select(c => new PurchaserExtendedInfo() + insertList.AddRange(L3_qtCategoryList.Select(c => new PurchaserExtendedInfo() { Id = long.Parse(c.CategoryId), Name = c.CategoryName, diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index 4deb6ae..6958777 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -150,7 +150,7 @@ namespace BBWYB.Server.Business #region 查询SPU采购数/SKU采购数 var purchasedList = fsql.Select() .InnerJoin((ps, ori, opi, o) => ps.Id == ori.BelongSkuId) - .InnerJoin((ps, ori, opi, o) => ori.PurchaseOrderId == opi.PurchaseOrderId && + .InnerJoin((ps, ori, opi, o) => ori.PurchaseOrderId == opi.PurchaseOrderId && ori.OrderId == opi.OrderId) .InnerJoin((ps, ori, opi, o) => opi.OrderId == o.Id) .WhereIf(request.ShopId != null && request.ShopId > 0, (ps, ori, opi, o) => o.ShopId == request.ShopId) @@ -228,7 +228,8 @@ namespace BBWYB.Server.Business pei.Id, pei.Name, pei.Type, - per.PurchaserId + per.PurchaserId, + pei.ExtendInfo }); #endregion @@ -298,7 +299,8 @@ namespace BBWYB.Server.Business { Id = x.Id, Name = x.Name, - Type = x.Type + Type = x.Type, + ExtendInfo = x.ExtendInfo }).ToList(); purchaser.TagList = currentExtendInfoList.Where(x => x.Type == Enums.PurchaserBasicInfoType.标签) @@ -306,7 +308,8 @@ namespace BBWYB.Server.Business { Id = x.Id, Name = x.Name, - Type = x.Type + Type = x.Type, + ExtendInfo = x.ExtendInfo }).ToList(); #endregion diff --git a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs index de41b19..5eba23d 100644 --- a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs @@ -4,6 +4,7 @@ using com.alibaba.openapi.client; using QuanTan.SDK.Client.Supplier; using QuanTan.SDK.Models.Supplier; using SDKAdapter.OperationPlatform.Models; +using System.Reflection.Emit; using static System.Net.WebRequestMethods; namespace SDKAdapter.OperationPlatform.Client @@ -250,31 +251,25 @@ namespace SDKAdapter.OperationPlatform.Client public override OP_ListResponse GetProductCategoryList(OP_QueryProductCategoryRequest request) { - var levels = new List() { 0, 1, 2 }; - var items = new List(); - foreach (var level in levels) + var qtResponse = supplier_ProductClient.GetProductCategoryList(new QuanTan_Supplier_SearchProductCategoryRequest() { - var qtResponse = supplier_ProductClient.GetProductCategoryList(new QuanTan_Supplier_SearchProductCategoryRequest() - { - page = request.PageIndex, - pageSize = request.PageSize, - categoryLevel = level - }, request.AppKey, request.AppSecret); - if (qtResponse.Data.List != null && qtResponse.Data.List.Count() > 0) - { - items.AddRange(qtResponse.Data.List.Select(x => new OP_ProductCategoryResponse() - { - CategoryId = x.CategoryId, - CategoryName = x.CategoryName, - CategoryPath = x.CategoryPath - }).ToList()); - } - } + page = request.PageIndex, + pageSize = request.PageSize, + categoryLevel = request.Level + }, request.AppKey, request.AppSecret); + + if (qtResponse.Status != 200) + throw new BusinessException(qtResponse.Message); return new OP_ListResponse() { - Count = items.Count, - Items = items + Count = qtResponse.Data?.Count ?? 0, + Items = qtResponse.Data?.List?.Select(x => new OP_ProductCategoryResponse() + { + CategoryId = x.CategoryId, + CategoryName = x.CategoryName, + CategoryPath = x.CategoryPath + }).ToList() }; } } diff --git a/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductCategoryRequest.cs b/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductCategoryRequest.cs index ebed883..f2edc56 100644 --- a/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductCategoryRequest.cs +++ b/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductCategoryRequest.cs @@ -5,5 +5,10 @@ public int PageIndex { get; set; } public int PageSize { get; set; } + + /// + /// 分类层级 0/1/2 + /// + public int Level { get; set; } = 2; } } From 1583ef14affb55a2eba43d89beccf9b5fd86d45f Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 9 Jan 2024 15:57:06 +0800 Subject: [PATCH 103/222] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.API/Controllers/VenderController.cs | 13 +++++++++++++ BBWYB.Server.Business/Vender/VenderBusiness.cs | 10 ++++++++++ .../Dto/Request/Vender/ShopSettingRequest.cs | 3 +++ 3 files changed, 26 insertions(+) diff --git a/BBWYB.Server.API/Controllers/VenderController.cs b/BBWYB.Server.API/Controllers/VenderController.cs index 9a75a5c..d2d296c 100644 --- a/BBWYB.Server.API/Controllers/VenderController.cs +++ b/BBWYB.Server.API/Controllers/VenderController.cs @@ -1,4 +1,5 @@ using BBWYB.Server.Business; +using BBWYB.Server.Model.Db.MDS; using BBWYB.Server.Model.Dto; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authorization; @@ -27,6 +28,18 @@ namespace BBWYB.Server.API.Controllers return venderBusiness.SaveShopSetting(shopSettingRequest); } + /// + /// 获取店铺下的采购账号 + /// + /// + /// + [HttpGet] + public IList GetPurchaserListByShopId([FromBody]long shopId) + { + return venderBusiness.GetPurchaserListByShopId(shopId); + } + + /// /// 查询店铺关联的物流公司列表 /// diff --git a/BBWYB.Server.Business/Vender/VenderBusiness.cs b/BBWYB.Server.Business/Vender/VenderBusiness.cs index a07ca3e..f8b5822 100644 --- a/BBWYB.Server.Business/Vender/VenderBusiness.cs +++ b/BBWYB.Server.Business/Vender/VenderBusiness.cs @@ -81,6 +81,16 @@ namespace BBWYB.Server.Business return shopSettingRequest.PurchaseAccountId; } + public IList GetPurchaserListByShopId(long shopId) + { + var shopIdStr = shopId.ToString(); + var mdsShop = fsqlManager.MDSfsql.Select().Where(s => s.ShopId == shopIdStr).ToOne(); + var plist = fsqlManager.MDSfsql.Select().Where(pa => pa.ShopId == mdsShop.Id).ToList(); + foreach (var pa in plist) + pa.ShopId = shopIdStr; + return plist; + } + public IList GetExpressCompanyList(PlatformRequest request) { return opPlatformClientFactory.GetClient((SDKAdapter.AdapterEnums.PlatformType)request.Platform) diff --git a/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs b/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs index 63faf9c..96bf413 100644 --- a/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs @@ -4,6 +4,9 @@ { public long ShopId { get; set; } + /// + /// 采购账号Id=0 将视为新增操作 + /// public long PurchaseAccountId { get; set; } From 4c609ca0223de45e6dccb196c8b0b68f31a2f0b9 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Wed, 10 Jan 2024 01:32:10 +0800 Subject: [PATCH 104/222] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=95=86=E8=81=9A?= =?UTF-8?q?=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AggregationPurchaserController.cs | 25 +++ .../Aggregion/AggregionPurchaserBusiness.cs | 209 ++++++++++++++++++ .../PurchaseScheme/PurchaseSchemeBusiness.cs | 4 +- .../Purchaser/PurchaserBusiness.cs | 166 ++------------ BBWYB.Server.Business/TaskSchedulerManager.cs | 2 + BBWYB.Server.Model/Db/Purchaser/Purchaser.cs | 54 +++++ .../Purchaser/QueryPurchaserRequest.cs | 24 +- .../PurchaseSchemeProductResponse.cs | 18 +- .../Response/Purchaser/PurchaserResponse.cs | 37 +--- 9 files changed, 348 insertions(+), 191 deletions(-) create mode 100644 BBWYB.Server.API/Controllers/AggregationPurchaserController.cs create mode 100644 BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs diff --git a/BBWYB.Server.API/Controllers/AggregationPurchaserController.cs b/BBWYB.Server.API/Controllers/AggregationPurchaserController.cs new file mode 100644 index 0000000..711cafb --- /dev/null +++ b/BBWYB.Server.API/Controllers/AggregationPurchaserController.cs @@ -0,0 +1,25 @@ +using BBWYB.Server.Business; +using Microsoft.AspNetCore.Mvc; + +namespace BBWYB.Server.API.Controllers +{ + + public class AggregationPurchaserController : BaseApiController + { + private AggregionPurchaserBusiness aggregionPurchaserBusiness; + + public AggregationPurchaserController(IHttpContextAccessor httpContextAccessor, AggregionPurchaserBusiness aggregionPurchaserBusiness) : base(httpContextAccessor) + { + this.aggregionPurchaserBusiness = aggregionPurchaserBusiness; + } + + /// + /// 采购商聚合 + /// + [HttpPost] + public void AutoAggregion() + { + aggregionPurchaserBusiness.AutoAggregion(); + } + } +} diff --git a/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs b/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs new file mode 100644 index 0000000..07cbdcf --- /dev/null +++ b/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs @@ -0,0 +1,209 @@ +using BBWYB.Common.Log; +using BBWYB.Common.Models; +using BBWYB.Server.Model; +using BBWYB.Server.Model.Db; +using FreeSql; +using Yitter.IdGenerator; + +namespace BBWYB.Server.Business +{ + public class AggregionPurchaserBusiness : BaseBusiness, IDenpendency + { + private TaskSchedulerManager taskSchedulerManager; + public AggregionPurchaserBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, TaskSchedulerManager taskSchedulerManager) : base(fsql, nLogManager, idGenerator) + { + this.taskSchedulerManager = taskSchedulerManager; + } + + public void AutoAggregion() + { + var startTime = DateTime.Now.Date.AddDays(-90); + //查询最近有采购的采购商列表 + var purchaserIdList = fsql.Select() + .InnerJoin((opi, o) => opi.OrderId == o.Id) + .Where((opi, o) => opi.IsEnabled == true && + o.OrderState != Enums.OrderState.已取消 && + o.StartTime >= startTime && + !string.IsNullOrEmpty(opi.PurchaserId)) + .Distinct() + .ToList((opi, o) => opi.PurchaserId); + Task.Factory.StartNew(() => AggregionByGroup(purchaserIdList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.AggregationPurchaserTaskScheduler); + } + + + private void AggregionByGroup(IList purchaserIdList) + { + var tempPurchaserIdList = new List(); + for (var i = 0; i < purchaserIdList.Count(); i++) + { + tempPurchaserIdList.Add(purchaserIdList[i]); + if (i != 0 && i % 30 == 0) + { + Console.WriteLine($"聚合{i + 1}/{purchaserIdList.Count()}"); + Aggregion(tempPurchaserIdList); + tempPurchaserIdList.Clear(); + } + } + if (tempPurchaserIdList.Count() > 0) + { + Console.WriteLine($"最后聚合"); + Aggregion(tempPurchaserIdList); + tempPurchaserIdList.Clear(); + } + } + + private void Aggregion(IList purchaserIdList) + { + Thread.Sleep(2000); + + List> updatePurchaserList = new List>(); + + #region 查询SPU绑定数/SKU绑定数 + var bindList = fsql.Select() + .InnerJoin((psp, psc) => psp.SkuPurchaseSchemeId == psc.Id) + .Where((psp, psc) => purchaserIdList.Contains(psp.PurchaserId)) + .GroupBy((psp, psc) => new { psp.PurchaserId, psp.ProductId, psp.SkuId }) + .ToList(g => new + { + g.Key.PurchaserId, + g.Key.ProductId, + g.Key.SkuId + }); + #endregion + + #region 查询SPU采购数/SKU采购数 + var purchasedList = fsql.Select() + .InnerJoin((ps, ori, opi, o) => ps.Id == ori.BelongSkuId) + .InnerJoin((ps, ori, opi, o) => ori.PurchaseOrderId == opi.PurchaseOrderId && + ori.OrderId == opi.OrderId) + .InnerJoin((ps, ori, opi, o) => opi.OrderId == o.Id) + .Where((ps, ori, opi, o) => o.OrderState != Enums.OrderState.已取消 && + opi.IsEnabled == true && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((ps, ori, opi, o) => new { opi.PurchaserId, ps.Id, ps.ProductId }) + .ToList(g => new + { + g.Key.PurchaserId, + g.Key.ProductId, + SkuId = g.Key.Id + }); + + #endregion + + #region 查询订单数/最近采购时间 + var poList = fsql.Select() + .InnerJoin((opi, o) => opi.OrderId == o.Id) + .Where((opi, o) => opi.IsEnabled == true && + o.OrderState != Enums.OrderState.已取消 && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((opi, o) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + Count = g.Count(), + MaxPurchaseTime = g.Max(g.Value.Item1.CreateTime) + }); + + #endregion + + #region 查询最近90天采购数量 + var recent90d = DateTime.Now.Date.AddDays(-90); + var recent90dPurchasedCountList = fsql.Select() + .InnerJoin((opi, o) => opi.OrderId == o.Id) + .Where((opi, o) => o.OrderState != Enums.OrderState.已取消 && + opi.IsEnabled == true && + opi.CreateTime >= recent90d && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((opi, o) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + Count = g.Count(), + }); + #endregion + + #region 查询采购金额 + var purchasedAmountList = fsql.Select() + .InnerJoin((ocd, o, opi) => ocd.OrderId == o.Id) + .InnerJoin((ocd, o, opi) => o.Id == opi.OrderId) + .Where((ocd, o, opi) => o.OrderState != Enums.OrderState.已取消 && + ocd.IsEnabled == true && + opi.IsEnabled == true && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((ocd, o, opi) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + PurchasedAmount = g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) + }); + #endregion + + #region 查询最近90天采购金额 + var recent90dPurchasedAmountList = fsql.Select() + .InnerJoin((ocd, o, opi) => ocd.OrderId == o.Id) + .InnerJoin((ocd, o, opi) => o.Id == opi.OrderId) + .Where((ocd, o, opi) => o.OrderState != Enums.OrderState.已取消 && + ocd.IsEnabled == true && + opi.IsEnabled == true && + opi.CreateTime >= recent90d && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((ocd, o, opi) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + PurchasedAmount = g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) + }); + #endregion + + foreach (var purchaserId in purchaserIdList) + { + #region SPU绑定数/SKU绑定数 + var currentBindList = bindList.Where(x => x.PurchaserId == purchaserId).ToList(); + var bindingSpuCount = currentBindList.Select(x => x.ProductId).Distinct().Count(); + var bindingSkuCount = currentBindList.Select(x => x.SkuId).Count(); + #endregion + + #region SPU采购数/SKU采购数 + var currentPurchasedList = purchasedList.Where(x => x.PurchaserId == purchaserId).ToList(); + var purchasedSpuCount = currentPurchasedList.Select(x => x.ProductId).Distinct().Count(); + var purchasedSkuCount = currentPurchasedList.Select(x => x.SkuId).Count(); + #endregion + + #region 订单数/最近采购时间 + var purchasedCountAndTime = poList.FirstOrDefault(x => x.PurchaserId == purchaserId); + var purchasedCount = purchasedCountAndTime?.Count ?? 0; + var lastPurchaseTime = purchasedCountAndTime?.MaxPurchaseTime; + #endregion + + #region 采购金额 + var purchasedAmount = purchasedAmountList.FirstOrDefault(x => x.PurchaserId == purchaserId)?.PurchasedAmount ?? 0; + #endregion + + #region 最近90天采购金额 + var recent90dPurchasedAmount = recent90dPurchasedAmountList.FirstOrDefault(x => x.PurchaserId == purchaserId)?.PurchasedAmount ?? 0; + #endregion + + #region 最近90天采购数量 + var recent90dPurchasedCount = recent90dPurchasedCountList.FirstOrDefault(x => x.PurchaserId == purchaserId)?.Count ?? 0; + #endregion + + var update = fsql.Update(purchaserId) + .Set(p => p.BindingSpuCount, bindingSpuCount) + .Set(p => p.BindingSkuCount, bindingSkuCount) + .Set(p => p.PurchasedSpuCount, purchasedSpuCount) + .Set(p => p.PurchasedSkuCount, purchasedSkuCount) + .Set(p => p.PurchasedCount, purchasedCount) + .Set(p => p.PurchasedAmount, purchasedAmount) + .Set(p => p.Recent90dPurchasedAmount, recent90dPurchasedAmount) + .Set(p => p.Recent90dPurchasedCount, recent90dPurchasedCount); + updatePurchaserList.Add(update); + } + + fsql.Transaction(() => + { + foreach (var update in updatePurchaserList) + update.ExecuteAffrows(); + }); + } + } +} diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index a1f1e99..e8f0bc3 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -826,8 +826,8 @@ namespace BBWYB.Server.Business schemeProduct.PurchaserLocation = purchaser.Location; schemeProduct.PurchaserMemberId = purchaser.MemberId; schemeProduct.PurchaserName = purchaser.Name; - schemeProduct.PurchaserPurchasedCount = purchaser.PurchasedCount; - schemeProduct.PurchaserPurchasedSkuCount = purchaser.PurchasedSkuCount; + //schemeProduct.PurchaserPurchasedCount = purchaser.PurchasedCount; + //schemeProduct.PurchaserPurchasedSkuCount = purchaser.PurchasedSkuCount; schemeProduct.PurchasePlatform = purchaser.Platform; schemeProduct.PurchaserTag = purchaser.Tag; } diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index 6958777..5d720e2 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -86,139 +86,41 @@ namespace BBWYB.Server.Business request.RecentDayCondition.PurchasedCount != null && request.RecentDayCondition.PurchasedCount != 0) { - var childSelect = fsql.Select() - .InnerJoin((opi, o) => opi.OrderId == o.Id) - .WhereIf(request.ShopId != null && request.ShopId > 0, (opi, o) => opi.ShopId == request.ShopId) - .Where((opi, o) => opi.IsEnabled == true && - o.OrderState != Enums.OrderState.已取消 && - opi.CreateTime >= recentStartDay) - .GroupBy((opi, o) => opi.PurchaserId) - .HavingIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.等于, g => g.Count() == request.RecentDayCondition.PurchasedCount) - .HavingIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.小于, g => g.Count() <= request.RecentDayCondition.PurchasedCount) - .HavingIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.大于, g => g.Count() >= request.RecentDayCondition.PurchasedCount) - .HavingIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.介于, g => g.Count() >= request.RecentDayCondition.PurchasedCount && g.Count() <= request.RecentDayCondition.PurchasedCount2) - .WithTempQuery(g => new { g.Value.Item1.PurchaserId, Count = g.Count() }).As("pcc"); - select = select.Where(p => childSelect.Where(pcc => pcc.PurchaserId == p.Id).Any()); + select = select.WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.等于, + p => p.Recent90dPurchasedCount == request.RecentDayCondition.PurchasedCount) + .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.小于, + p => p.Recent90dPurchasedCount <= request.RecentDayCondition.PurchasedCount) + .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.大于, + p => p.Recent90dPurchasedCount >= request.RecentDayCondition.PurchasedCount) + .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.介于, + p => p.Recent90dPurchasedCount >= request.RecentDayCondition.PurchasedCount && + p.Recent90dPurchasedCount <= request.RecentDayCondition.PurchasedCount2); } if (request.RecentDayCondition.PurchasedAmountComparisonOperator != null && request.RecentDayCondition.PurchasedAmountComparisonOperator != 0 && request.RecentDayCondition.PurchasedAmount != null && request.RecentDayCondition.PurchasedAmount != 0) { - var childSelect = fsql.Select() - .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == o.Id) - .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == ori.OrderId && ocd.SkuId == ori.BelongSkuId) - .InnerJoin((ocd, o, ori, opi) => ori.OrderId == opi.OrderId) - .WhereIf(request.ShopId != null && request.ShopId > 0, (ocd, o, ori, opi) => o.ShopId == request.ShopId) - .Where((ocd, o, ori, opi) => o.OrderState != Enums.OrderState.已取消 && - ocd.IsEnabled == true && - opi.IsEnabled == true && - opi.CreateTime >= recentStartDay) - .GroupBy((ocd, o, ori, opi) => opi.PurchaserId) - .HavingIf(request.RecentDayCondition.PurchasedAmountComparisonOperator == Enums.ComparisonOperator.等于, g => g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) == request.RecentDayCondition.PurchasedAmount) - .HavingIf(request.RecentDayCondition.PurchasedAmountComparisonOperator == Enums.ComparisonOperator.小于, g => g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) <= request.RecentDayCondition.PurchasedAmount) - .HavingIf(request.RecentDayCondition.PurchasedAmountComparisonOperator == Enums.ComparisonOperator.大于, g => g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) >= request.RecentDayCondition.PurchasedAmount) - .HavingIf(request.RecentDayCondition.PurchasedAmountComparisonOperator == Enums.ComparisonOperator.介于, g => g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) >= request.RecentDayCondition.PurchasedAmount && g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) <= request.RecentDayCondition.PurchasedAmount2) - .WithTempQuery(g => new { g.Value.Item4.PurchaserId, PurchasedAmount = g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) }).As("pca"); - select = select.Where(p => childSelect.Where(pca => pca.PurchaserId == p.Id).Any()); + select = select.WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.等于, + p => p.Recent90dPurchasedAmount == request.RecentDayCondition.PurchasedAmount) + .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.小于, + p => p.Recent90dPurchasedAmount <= request.RecentDayCondition.PurchasedAmount) + .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.大于, + p => p.Recent90dPurchasedAmount >= request.RecentDayCondition.PurchasedAmount) + .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.介于, + p => p.Recent90dPurchasedAmount >= request.RecentDayCondition.PurchasedAmount && + p.Recent90dPurchasedAmount <= request.RecentDayCondition.PurchasedAmount2); } } - var pageSelect = select.Page(request.PageIndex, request.PageSize); - var sql = pageSelect.ToSql(); - var purchaserList = select.Page(request.PageIndex, request.PageSize) - .Count(out var count) - .ToList(); + select = select.Page(request.PageIndex, request.PageSize) + .OrderByPropertyNameIf(!string.IsNullOrEmpty(request.SortColumn), request.SortColumn, request.SortType == 0); + //var sql = pageSelect.ToSql(); + var purchaserList = select.Count(out var count).ToList(); if (purchaserList.Count() > 0) { var purchaserIdList = purchaserList.Select(p => p.Id).ToList(); - #region 查询SPU绑定数/SKU绑定数 - var bindList = fsql.Select() - .InnerJoin((psp, psc) => psp.SkuPurchaseSchemeId == psc.Id) - .WhereIf(request.ShopId != null && request.ShopId > 0, (psp, psc) => psc.ShopId == request.ShopId) - .Where((psp, psc) => purchaserIdList.Contains(psp.PurchaserId)) - .GroupBy((psp, psc) => new { psp.PurchaserId, psp.ProductId, psp.SkuId }) - .ToList(g => new - { - g.Key.PurchaserId, - g.Key.ProductId, - g.Key.SkuId - }); - #endregion - - #region 查询SPU采购数/SKU采购数 - var purchasedList = fsql.Select() - .InnerJoin((ps, ori, opi, o) => ps.Id == ori.BelongSkuId) - .InnerJoin((ps, ori, opi, o) => ori.PurchaseOrderId == opi.PurchaseOrderId && - ori.OrderId == opi.OrderId) - .InnerJoin((ps, ori, opi, o) => opi.OrderId == o.Id) - .WhereIf(request.ShopId != null && request.ShopId > 0, (ps, ori, opi, o) => o.ShopId == request.ShopId) - .Where((ps, ori, opi, o) => o.OrderState != Enums.OrderState.已取消 && - opi.IsEnabled == true && - purchaserIdList.Contains(opi.PurchaserId)) - .GroupBy((ps, ori, opi, o) => new { opi.PurchaserId, ps.Id, ps.ProductId }) - .ToList(g => new - { - g.Key.PurchaserId, - g.Key.ProductId, - SkuId = g.Key.Id - }); - - #endregion - - #region 查询订单数 - var poList = fsql.Select() - .InnerJoin((opi, o) => opi.OrderId == o.Id) - .WhereIf(request.ShopId != null && request.ShopId > 0, (opi, o) => opi.ShopId == request.ShopId) - .Where((opi, o) => opi.IsEnabled == true && - o.OrderState != Enums.OrderState.已取消 && - purchaserIdList.Contains(opi.PurchaserId)) - .GroupBy((opi, o) => opi.PurchaserId) - .ToList(g => new - { - PurchaserId = g.Key, - Count = g.Count() - }); - - #endregion - - #region 查询采购金额 - var purchaseAmountList = fsql.Select() - .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == o.Id) - .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == ori.OrderId && ocd.SkuId == ori.BelongSkuId) - .InnerJoin((ocd, o, ori, opi) => ori.OrderId == opi.OrderId) - .WhereIf(request.ShopId != null && request.ShopId > 0, (ocd, o, ori, opi) => o.ShopId == request.ShopId) - .Where((ocd, o, ori, opi) => o.OrderState != Enums.OrderState.已取消 && - ocd.IsEnabled == true && - opi.IsEnabled == true && - purchaserIdList.Contains(opi.PurchaserId)) - .GroupBy((ocd, o, ori, opi) => opi.PurchaserId) - .ToList(g => new - { - PurchaserId = g.Key, - PurchaseAmount = g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) - }); - #endregion - - #region 查询最近采购时间 - var recentPurchaseTimeList = fsql.Select() - .InnerJoin((opi1, o) => opi1.OrderId == o.Id) - .WhereIf(request.ShopId != null && request.ShopId > 0, (opi1, o) => o.ShopId == request.ShopId) - .Where((opi1, o) => o.OrderState != Enums.OrderState.已取消 && - purchaserIdList.Contains(opi1.PurchaserId) && - opi1.IsEnabled == true) - .GroupBy((opi1, o) => opi1.PurchaserId) - .WithTempQuery(g => new { MaxId = g.Max(g.Value.Item1.Id) }) - .From() - .InnerJoin((opi1, opi2) => opi1.MaxId == opi2.Id) - .ToList((opi1, opi2) => new - { - opi2.PurchaserId, - opi2.CreateTime - }); - #endregion - #region 查询标签/主营类目 var purchaserExtendInfoList = fsql.Select() .InnerJoin((pei, per) => pei.Id == per.ExtendedInfoId) @@ -268,30 +170,6 @@ namespace BBWYB.Server.Business foreach (var purchaser in purchaserList) { - #region SPU绑定数/SKU绑定数 - var currentBindList = bindList.Where(x => x.PurchaserId == purchaser.Id).ToList(); - purchaser.BindingSpuCount = currentBindList.Select(x => x.ProductId).Distinct().Count(); - purchaser.BindingSkuCount = currentBindList.Select(x => x.SkuId).Count(); - #endregion - - #region SPU采购数/SKU采购数 - var currentPurchasedList = purchasedList.Where(x => x.PurchaserId == purchaser.Id).ToList(); - purchaser.PurchasedSpuCount = currentPurchasedList.Select(x => x.ProductId).Distinct().Count(); - purchaser.PurchasedSkuCount = currentPurchasedList.Select(x => x.SkuId).Count(); - #endregion - - #region 订单数 - purchaser.PurchasedCount = poList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.Count ?? 0; - #endregion - - #region 采购金额 - purchaser.PurchaseAmount = purchaseAmountList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.PurchaseAmount ?? 0; - #endregion - - #region 最近采购时间 - purchaser.LastPurchaseTime = recentPurchaseTimeList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.CreateTime; - #endregion - #region 主营类目/标签 var currentExtendInfoList = purchaserExtendInfoList.Where(x => x.PurchaserId == purchaser.Id).ToList(); purchaser.CategoryList = currentExtendInfoList.Where(x => x.Type == Enums.PurchaserBasicInfoType.主营类目) diff --git a/BBWYB.Server.Business/TaskSchedulerManager.cs b/BBWYB.Server.Business/TaskSchedulerManager.cs index 6bab173..fa58a83 100644 --- a/BBWYB.Server.Business/TaskSchedulerManager.cs +++ b/BBWYB.Server.Business/TaskSchedulerManager.cs @@ -9,12 +9,14 @@ namespace BBWYB.Server.Business public LimitedConcurrencyLevelTaskScheduler PurchaseOrderCallbackTaskScheduler { get; private set; } + public LimitedConcurrencyLevelTaskScheduler AggregationPurchaserTaskScheduler { get; private set; } public TaskSchedulerManager() { SyncOrderTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); PurchaseOrderCallbackTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); SyncProductTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); + AggregationPurchaserTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(1); } } } diff --git a/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs index a37fc77..f3c94bc 100644 --- a/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs +++ b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs @@ -54,6 +54,60 @@ namespace BBWYB.Server.Model.Db /// [Column(StringLength = 20)] public string Tag { get; set; } + + /// + /// 绑定SPU数 + /// + [Column(DbType = "bigint")] + public long? BindingSpuCount { get; set; } = 0; + + /// + /// 采购SPU数 + /// + [Column(DbType = "bigint")] + public long? PurchasedSpuCount { get; set; } = 0; + + /// + /// 绑定SKU数 + /// + [Column(DbType = "bigint")] + public long? BindingSkuCount { get; set; } = 0; + + /// + /// 采购SKU数 + /// + [Column(DbType = "bigint")] + public long? PurchasedSkuCount { get; set; } = 0; + + /// + /// 采购次数/采购订单数 + /// + [Column(DbType = "bigint")] + public long? PurchasedCount { get; set; } = 0; + + /// + /// 采购金额 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? PurchasedAmount { get; set; } = 0.00M; + + /// + /// 上次采购时间 + /// + [Column(DbType = "datetime")] + public DateTime? LastPurchaseTime { get; set; } + + /// + /// 最近90天采购金额 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? Recent90dPurchasedAmount { get; set; } = 0.00M; + + /// + /// 最近90天采购次数 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? Recent90dPurchasedCount { get; set; } = 0.00M; } } diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs index 038c03e..5bf75bf 100644 --- a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs @@ -43,13 +43,31 @@ namespace BBWYB.Server.Model.Dto /// [Required] public int PageSize { get; set; } + + /// + /// 排序字段 + /// 取值范围 + /// BindingSpuCount 绑定SPU数 + /// PurchasedSpuCount 采购SPU数 + /// BindingSkuCount 绑定SKU数 + /// PurchasedSkuCount 采购SKU数 + /// PurchasedCount 采购次数/订单数 + /// PurchasedAmount 采购金额 + /// LastPurchaseTime 最近采购时间 + /// + public string SortColumn { get; set; } + + /// + /// 排序类型 0升序 1降序 + /// + public int SortType { get; set; } } public class QueryPurchaserConditionByDayRequest { - /// - /// 最近天数 - /// + ///// + ///// 最近天数 暂时只有支持90 + ///// public int? RecentDay { get; set; } public Enums.ComparisonOperator? PurchasedCountComparisonOperator { get; set; } diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs index ec9a041..44761a3 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs @@ -15,15 +15,15 @@ namespace BBWYB.Server.Model.Dto public string PurchaserMemberId { get; set; } - /// - /// 采购商的采购次数 - /// - public int? PurchaserPurchasedCount { get; set; } - - /// - /// 采购商的采购SKU数 - /// - public int? PurchaserPurchasedSkuCount { get; set; } + ///// + ///// 采购商的采购次数 + ///// + //public long? PurchaserPurchasedCount { get; set; } + + ///// + ///// 采购商的采购SKU数 + ///// + //public long? PurchaserPurchasedSkuCount { get; set; } /// /// 采购商标签 diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs index 1a573f9..3435497 100644 --- a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs @@ -14,45 +14,16 @@ namespace BBWYB.Server.Model.Dto /// public IList TagList { get; set; } - /// - /// 绑定SPU数 - /// - public int? BindingSpuCount { get; set; } - - /// - /// 采购SPU数 - /// - public int? PurchasedSpuCount { get; set; } - - /// - /// 绑定SKU数 - /// - public int? BindingSkuCount { get; set; } - - /// - /// 采购SKU数 - /// - public int? PurchasedSkuCount { get; set; } = 0; /// - /// 采购次数/采购订单数 - /// - public int? PurchasedCount { get; set; } = 0; - - /// - /// 采购金额 - /// - public decimal? PurchaseAmount { get; set; } - - /// - /// 上次采购时间 + /// 最近30天具有采购行为的店铺SKU /// - public DateTime? LastPurchaseTime { get; set; } + public IList Recent30dProductSku { get; set; } /// - /// 最近30天具有采购行为的店铺SKU + /// 采购金额容错字段 /// - public IList Recent30dProductSku { get; set; } + public decimal? PurchaseAmount { get { return PurchasedAmount; } } public PurchaserResponse() { From 07941b3b094f31a047e46d9d22876dff78c00991 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 10 Jan 2024 16:43:38 +0800 Subject: [PATCH 105/222] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/VenderController.cs | 10 +++++----- BBWYB.Server.Business/Vender/VenderBusiness.cs | 11 ++++++++--- .../Vender/QueryPurchaseAccountRequest.cs | 14 ++++++++++++++ .../Dto/Request/Vender/ShopSettingRequest.cs | 18 +++++++++++++++--- 4 files changed, 42 insertions(+), 11 deletions(-) create mode 100644 BBWYB.Server.Model/Dto/Request/Vender/QueryPurchaseAccountRequest.cs diff --git a/BBWYB.Server.API/Controllers/VenderController.cs b/BBWYB.Server.API/Controllers/VenderController.cs index d2d296c..df3a8e3 100644 --- a/BBWYB.Server.API/Controllers/VenderController.cs +++ b/BBWYB.Server.API/Controllers/VenderController.cs @@ -29,14 +29,14 @@ namespace BBWYB.Server.API.Controllers } /// - /// 获取店铺下的采购账号 + /// 查询采购账号列表 /// - /// + /// /// - [HttpGet] - public IList GetPurchaserListByShopId([FromBody]long shopId) + [HttpPost] + public IList GetPurchaserListByShopId([FromBody] QueryPurchaseAccountRequest request) { - return venderBusiness.GetPurchaserListByShopId(shopId); + return venderBusiness.GetPurchaserListByShopId(request); } diff --git a/BBWYB.Server.Business/Vender/VenderBusiness.cs b/BBWYB.Server.Business/Vender/VenderBusiness.cs index f8b5822..13c71d3 100644 --- a/BBWYB.Server.Business/Vender/VenderBusiness.cs +++ b/BBWYB.Server.Business/Vender/VenderBusiness.cs @@ -81,11 +81,16 @@ namespace BBWYB.Server.Business return shopSettingRequest.PurchaseAccountId; } - public IList GetPurchaserListByShopId(long shopId) + public IList GetPurchaserListByShopId(QueryPurchaseAccountRequest request) { - var shopIdStr = shopId.ToString(); + var purchasePlatofrmId = request.PurchasePlatofrmId != null ? ((int)request.PurchasePlatofrmId).ToString() : string.Empty; + var shopIdStr = request.ShopId.ToString(); var mdsShop = fsqlManager.MDSfsql.Select().Where(s => s.ShopId == shopIdStr).ToOne(); - var plist = fsqlManager.MDSfsql.Select().Where(pa => pa.ShopId == mdsShop.Id).ToList(); + var plist = fsqlManager.MDSfsql.Select() + .Where(pa => pa.ShopId == mdsShop.Id) + .WhereIf(!string.IsNullOrEmpty(purchasePlatofrmId), pa => pa.PurchasePlatformId == purchasePlatofrmId) + .WhereIf(!string.IsNullOrEmpty(request.AccountName), pa => pa.AccountName == request.AccountName) + .ToList(); foreach (var pa in plist) pa.ShopId = shopIdStr; return plist; diff --git a/BBWYB.Server.Model/Dto/Request/Vender/QueryPurchaseAccountRequest.cs b/BBWYB.Server.Model/Dto/Request/Vender/QueryPurchaseAccountRequest.cs new file mode 100644 index 0000000..72fb4c6 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/Vender/QueryPurchaseAccountRequest.cs @@ -0,0 +1,14 @@ +using System.ComponentModel.DataAnnotations; + +namespace BBWYB.Server.Model.Dto +{ + public class QueryPurchaseAccountRequest + { + [Required] + public long ShopId { get; set; } + + public Enums.Platform? PurchasePlatofrmId { get; set; } + + public string AccountName { get; set;} + } +} diff --git a/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs b/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs index 96bf413..71a6f1e 100644 --- a/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs @@ -10,17 +10,29 @@ public long PurchaseAccountId { get; set; } + /// + /// 采购账号AccountName + /// public string AccountName { get; set; } - + /// + /// 采购账号AppKey + /// public string AppKey { get; set; } - + /// + /// 采购账号AppSecret + /// public string AppSecret { get; set; } - + /// + /// 采购账号Token + /// public string AppToken { get; set; } + /// + /// 采购平台 + /// public Enums.Platform PurchasePlatformId { get; set; } } } From ed2575077070edcea8bb1db1c6cea0a55ffb1d44 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 10 Jan 2024 16:43:55 +0800 Subject: [PATCH 106/222] 1 --- BBWYB.Server.API/Controllers/VenderController.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.API/Controllers/VenderController.cs b/BBWYB.Server.API/Controllers/VenderController.cs index df3a8e3..3ee348e 100644 --- a/BBWYB.Server.API/Controllers/VenderController.cs +++ b/BBWYB.Server.API/Controllers/VenderController.cs @@ -34,9 +34,9 @@ namespace BBWYB.Server.API.Controllers /// /// [HttpPost] - public IList GetPurchaserListByShopId([FromBody] QueryPurchaseAccountRequest request) + public IList GetPurchaserList([FromBody] QueryPurchaseAccountRequest request) { - return venderBusiness.GetPurchaserListByShopId(request); + return venderBusiness.GetPurchaserList(request); } From 3ba39e41d1f993d288798b62e84771fe39482fbf Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 10 Jan 2024 16:44:12 +0800 Subject: [PATCH 107/222] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E6=8E=A5=E5=8F=A3=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Vender/VenderBusiness.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/Vender/VenderBusiness.cs b/BBWYB.Server.Business/Vender/VenderBusiness.cs index 13c71d3..73b632c 100644 --- a/BBWYB.Server.Business/Vender/VenderBusiness.cs +++ b/BBWYB.Server.Business/Vender/VenderBusiness.cs @@ -81,7 +81,7 @@ namespace BBWYB.Server.Business return shopSettingRequest.PurchaseAccountId; } - public IList GetPurchaserListByShopId(QueryPurchaseAccountRequest request) + public IList GetPurchaserList(QueryPurchaseAccountRequest request) { var purchasePlatofrmId = request.PurchasePlatofrmId != null ? ((int)request.PurchasePlatofrmId).ToString() : string.Empty; var shopIdStr = request.ShopId.ToString(); From b45019043f8189a2235bdf7243af45a0da7014d0 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 10 Jan 2024 18:13:26 +0800 Subject: [PATCH 108/222] 1 --- BBWYB.Client/ViewModels/WebVM.cs | 1 + BBWYB.Server.API/Controllers/VenderController.cs | 11 ++++++++++- BBWYB.Server.Business/Vender/VenderBusiness.cs | 8 +++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/BBWYB.Client/ViewModels/WebVM.cs b/BBWYB.Client/ViewModels/WebVM.cs index 9e5b38c..9f3b3d5 100644 --- a/BBWYB.Client/ViewModels/WebVM.cs +++ b/BBWYB.Client/ViewModels/WebVM.cs @@ -78,6 +78,7 @@ namespace BBWYB.Client.ViewModels } } + GlobalContext.User.DepartmentList = departmentList; WeakReferenceMessenger.Default.Send(new Message_WebB_LoginCompleted(null)); IsLoading = false; diff --git a/BBWYB.Server.API/Controllers/VenderController.cs b/BBWYB.Server.API/Controllers/VenderController.cs index 3ee348e..3d3ee2b 100644 --- a/BBWYB.Server.API/Controllers/VenderController.cs +++ b/BBWYB.Server.API/Controllers/VenderController.cs @@ -39,6 +39,15 @@ namespace BBWYB.Server.API.Controllers return venderBusiness.GetPurchaserList(request); } + /// + /// 删除采购账号 + /// + /// + [HttpDelete("{purchaseAccountId}")] + public void DeletePurchaseAccount([FromRoute] long purchaseAccountId) + { + venderBusiness.DeletePurchaseAccount(purchaseAccountId); + } /// /// 查询店铺关联的物流公司列表 @@ -56,7 +65,7 @@ namespace BBWYB.Server.API.Controllers /// /// [HttpPost] - public IList GetKuaiDi100ExpressCompanyList([FromBody]KuaiDi100ExpressSearchRequest request) + public IList GetKuaiDi100ExpressCompanyList([FromBody] KuaiDi100ExpressSearchRequest request) { return venderBusiness.GetKuaiDi100ExpressCompanyList(request); } diff --git a/BBWYB.Server.Business/Vender/VenderBusiness.cs b/BBWYB.Server.Business/Vender/VenderBusiness.cs index 73b632c..c98317d 100644 --- a/BBWYB.Server.Business/Vender/VenderBusiness.cs +++ b/BBWYB.Server.Business/Vender/VenderBusiness.cs @@ -87,7 +87,7 @@ namespace BBWYB.Server.Business var shopIdStr = request.ShopId.ToString(); var mdsShop = fsqlManager.MDSfsql.Select().Where(s => s.ShopId == shopIdStr).ToOne(); var plist = fsqlManager.MDSfsql.Select() - .Where(pa => pa.ShopId == mdsShop.Id) + .Where(pa => pa.ShopId == mdsShop.Id && pa.Deleted == 0) .WhereIf(!string.IsNullOrEmpty(purchasePlatofrmId), pa => pa.PurchasePlatformId == purchasePlatofrmId) .WhereIf(!string.IsNullOrEmpty(request.AccountName), pa => pa.AccountName == request.AccountName) .ToList(); @@ -96,6 +96,12 @@ namespace BBWYB.Server.Business return plist; } + public void DeletePurchaseAccount(long purchaseAccountId) + { + var pk = purchaseAccountId.ToString(); + fsqlManager.MDSfsql.Update(pk).Set(pa => pa.Deleted, 1).ExecuteAffrows(); + } + public IList GetExpressCompanyList(PlatformRequest request) { return opPlatformClientFactory.GetClient((SDKAdapter.AdapterEnums.PlatformType)request.Platform) From 8475ec10adf003da8e11d1581da5aaf0919543bd Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Wed, 10 Jan 2024 22:23:02 +0800 Subject: [PATCH 109/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=95=86=E8=81=9A?= =?UTF-8?q?=E5=90=88=E5=A2=9E=E5=8A=A0=E6=9C=80=E5=90=8E=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Aggregion/AggregionPurchaserBusiness.cs | 29 ++++++++++--------- BBWYB.Server.Model/Db/Purchaser/Purchaser.cs | 2 +- .../Response/Purchaser/PurchaserResponse.cs | 5 ++++ 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs b/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs index 07cbdcf..1094bed 100644 --- a/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs +++ b/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs @@ -140,19 +140,19 @@ namespace BBWYB.Server.Business #region 查询最近90天采购金额 var recent90dPurchasedAmountList = fsql.Select() - .InnerJoin((ocd, o, opi) => ocd.OrderId == o.Id) - .InnerJoin((ocd, o, opi) => o.Id == opi.OrderId) - .Where((ocd, o, opi) => o.OrderState != Enums.OrderState.已取消 && - ocd.IsEnabled == true && - opi.IsEnabled == true && - opi.CreateTime >= recent90d && - purchaserIdList.Contains(opi.PurchaserId)) - .GroupBy((ocd, o, opi) => opi.PurchaserId) - .ToList(g => new - { - PurchaserId = g.Key, - PurchasedAmount = g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) - }); + .InnerJoin((ocd, o, opi) => ocd.OrderId == o.Id) + .InnerJoin((ocd, o, opi) => o.Id == opi.OrderId) + .Where((ocd, o, opi) => o.OrderState != Enums.OrderState.已取消 && + ocd.IsEnabled == true && + opi.IsEnabled == true && + opi.CreateTime >= recent90d && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((ocd, o, opi) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + PurchasedAmount = g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) + }); #endregion foreach (var purchaserId in purchaserIdList) @@ -172,7 +172,7 @@ namespace BBWYB.Server.Business #region 订单数/最近采购时间 var purchasedCountAndTime = poList.FirstOrDefault(x => x.PurchaserId == purchaserId); var purchasedCount = purchasedCountAndTime?.Count ?? 0; - var lastPurchaseTime = purchasedCountAndTime?.MaxPurchaseTime; + var lastPurchasedTime = purchasedCountAndTime?.MaxPurchaseTime; #endregion #region 采购金额 @@ -194,6 +194,7 @@ namespace BBWYB.Server.Business .Set(p => p.PurchasedSkuCount, purchasedSkuCount) .Set(p => p.PurchasedCount, purchasedCount) .Set(p => p.PurchasedAmount, purchasedAmount) + .Set(p => p.LastPurchasedTime, lastPurchasedTime) .Set(p => p.Recent90dPurchasedAmount, recent90dPurchasedAmount) .Set(p => p.Recent90dPurchasedCount, recent90dPurchasedCount); updatePurchaserList.Add(update); diff --git a/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs index f3c94bc..85a8c5b 100644 --- a/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs +++ b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs @@ -95,7 +95,7 @@ namespace BBWYB.Server.Model.Db /// 上次采购时间 /// [Column(DbType = "datetime")] - public DateTime? LastPurchaseTime { get; set; } + public DateTime? LastPurchasedTime { get; set; } /// /// 最近90天采购金额 diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs index 3435497..f043573 100644 --- a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs @@ -25,6 +25,11 @@ namespace BBWYB.Server.Model.Dto /// public decimal? PurchaseAmount { get { return PurchasedAmount; } } + /// + /// 最近采购时间容错字段 + /// + public DateTime? LastPurchaseTime { get { return LastPurchasedTime; } } + public PurchaserResponse() { CategoryList = new List(); From 5ea0bd6a52c48dd7dda1110dc814badf215c0898 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Wed, 10 Jan 2024 23:29:39 +0800 Subject: [PATCH 110/222] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=95=86=E5=88=97=E8=A1=A8=E5=8F=96=E6=B6=88=E5=A4=A9=E6=95=B0?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=EF=BC=8C=E6=9C=80=E8=BF=91=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=95=86=E5=93=81=E6=8C=89=E9=87=87=E8=B4=AD=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=8E=92=E5=80=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AggregationPurchaserController.cs | 10 +++++ .../Aggregion/AggregionPurchaserBusiness.cs | 5 +++ .../Purchaser/PurchaserBusiness.cs | 37 ++++++++++--------- .../Product/RecentPurchasedSkuResponse.cs | 2 + 4 files changed, 37 insertions(+), 17 deletions(-) diff --git a/BBWYB.Server.API/Controllers/AggregationPurchaserController.cs b/BBWYB.Server.API/Controllers/AggregationPurchaserController.cs index 711cafb..9eb8adf 100644 --- a/BBWYB.Server.API/Controllers/AggregationPurchaserController.cs +++ b/BBWYB.Server.API/Controllers/AggregationPurchaserController.cs @@ -21,5 +21,15 @@ namespace BBWYB.Server.API.Controllers { aggregionPurchaserBusiness.AutoAggregion(); } + + /// + /// 根据指定采购商Id聚合 + /// + /// + [HttpPost] + public void AggregionByPurchaserIdList([FromBody] IList purchaserIdList) + { + aggregionPurchaserBusiness.AggregionByPurchaserIdList(purchaserIdList); + } } } diff --git a/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs b/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs index 1094bed..2b3b456 100644 --- a/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs +++ b/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs @@ -30,6 +30,11 @@ namespace BBWYB.Server.Business Task.Factory.StartNew(() => AggregionByGroup(purchaserIdList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.AggregationPurchaserTaskScheduler); } + public void AggregionByPurchaserIdList(IList purchaserIdList) + { + Task.Factory.StartNew(() => AggregionByGroup(purchaserIdList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.AggregationPurchaserTaskScheduler); + } + private void AggregionByGroup(IList purchaserIdList) { diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index 5d720e2..f661147 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -39,7 +39,7 @@ namespace BBWYB.Server.Business request.ShopId = null; #region 数据验证 - if (request.RecentDayCondition != null && request.RecentDayCondition.RecentDay > 0) + if (request.RecentDayCondition != null) // && request.RecentDayCondition.RecentDay > 0 { if (request.RecentDayCondition.PurchasedCountComparisonOperator != null) { @@ -78,44 +78,42 @@ namespace BBWYB.Server.Business .WhereIf(request.LocationList != null && request.LocationList.Count() > 0, p => request.LocationList.Contains(p.Location)) .WhereIf(request.ManagmentMode != null, p => p.ManagmentMode == request.ManagmentMode); - if (request.RecentDayCondition != null && request.RecentDayCondition.RecentDay > 0) + if (request.RecentDayCondition != null) // && request.RecentDayCondition.RecentDay > 0 { - var recentStartDay = DateTime.Now.Date.AddDays(request.RecentDayCondition.RecentDay.Value * -1); + //var recentStartDay = DateTime.Now.Date.AddDays(request.RecentDayCondition.RecentDay.Value * -1); if (request.RecentDayCondition.PurchasedCountComparisonOperator != null && - request.RecentDayCondition.PurchasedCountComparisonOperator != 0 && request.RecentDayCondition.PurchasedCount != null && request.RecentDayCondition.PurchasedCount != 0) { select = select.WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.等于, - p => p.Recent90dPurchasedCount == request.RecentDayCondition.PurchasedCount) + p => p.Recent90dPurchasedCount != null && p.Recent90dPurchasedCount == request.RecentDayCondition.PurchasedCount) .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.小于, - p => p.Recent90dPurchasedCount <= request.RecentDayCondition.PurchasedCount) + p => p.Recent90dPurchasedCount != null && p.Recent90dPurchasedCount <= request.RecentDayCondition.PurchasedCount) .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.大于, - p => p.Recent90dPurchasedCount >= request.RecentDayCondition.PurchasedCount) + p => p.Recent90dPurchasedCount != null && p.Recent90dPurchasedCount >= request.RecentDayCondition.PurchasedCount) .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.介于, - p => p.Recent90dPurchasedCount >= request.RecentDayCondition.PurchasedCount && + p => p.Recent90dPurchasedCount != null && p.Recent90dPurchasedCount >= request.RecentDayCondition.PurchasedCount && p.Recent90dPurchasedCount <= request.RecentDayCondition.PurchasedCount2); } if (request.RecentDayCondition.PurchasedAmountComparisonOperator != null && - request.RecentDayCondition.PurchasedAmountComparisonOperator != 0 && request.RecentDayCondition.PurchasedAmount != null && request.RecentDayCondition.PurchasedAmount != 0) { select = select.WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.等于, - p => p.Recent90dPurchasedAmount == request.RecentDayCondition.PurchasedAmount) + p => p.Recent90dPurchasedAmount != null && p.Recent90dPurchasedAmount == request.RecentDayCondition.PurchasedAmount) .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.小于, - p => p.Recent90dPurchasedAmount <= request.RecentDayCondition.PurchasedAmount) + p => p.Recent90dPurchasedAmount != null && p.Recent90dPurchasedAmount <= request.RecentDayCondition.PurchasedAmount) .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.大于, - p => p.Recent90dPurchasedAmount >= request.RecentDayCondition.PurchasedAmount) + p => p.Recent90dPurchasedAmount != null && p.Recent90dPurchasedAmount >= request.RecentDayCondition.PurchasedAmount) .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.介于, - p => p.Recent90dPurchasedAmount >= request.RecentDayCondition.PurchasedAmount && + p => p.Recent90dPurchasedAmount != null && p.Recent90dPurchasedAmount >= request.RecentDayCondition.PurchasedAmount && p.Recent90dPurchasedAmount <= request.RecentDayCondition.PurchasedAmount2); } } select = select.Page(request.PageIndex, request.PageSize) .OrderByPropertyNameIf(!string.IsNullOrEmpty(request.SortColumn), request.SortColumn, request.SortType == 0); - //var sql = pageSelect.ToSql(); + var sql = select.ToSql(); var purchaserList = select.Count(out var count).ToList(); if (purchaserList.Count() > 0) { @@ -160,7 +158,8 @@ namespace BBWYB.Server.Business g.Key.PurchaserId, g.Key.Logo, g.Key.SkuName, - g.Key.SourceSkuId + g.Key.SourceSkuId, + MaxPurchasedTime = g.Max(g.Value.Item1.CreateTime) }); var belongSkuIdList = bePurchasedProductSkuList.Select(x => x.SourceSkuId).Distinct().ToList(); var belongSkuList = _freeSqlMultiDBManager.BBWYCfsql.Select(belongSkuIdList).ToList(ps => new { ps.Id, ps.Logo }); @@ -192,7 +191,10 @@ namespace BBWYB.Server.Business #endregion #region 最近采购店铺商品 - purchaser.Recent30dProductSku = bePurchasedProductSkuList.Where(x => x.PurchaserId == purchaser.Id).Take(10).Select(x => + purchaser.Recent30dProductSku = bePurchasedProductSkuList.Where(x => x.PurchaserId == purchaser.Id) + .OrderByDescending(x => x.MaxPurchasedTime) + .Take(10) + .Select(x => { var belongSku = belongSkuList.FirstOrDefault(b => b.Id == x.SourceSkuId); return new RecentPurchasedSkuResponse() @@ -200,7 +202,8 @@ namespace BBWYB.Server.Business Id = x.Id, Logo = belongSku?.Logo ?? x.Logo, SkuName = x.SkuName, - BelongSku = x.SourceSkuId + BelongSku = x.SourceSkuId, + MaxPurchasedTime = x.MaxPurchasedTime }; }).ToList(); #endregion diff --git a/BBWYB.Server.Model/Dto/Response/Product/RecentPurchasedSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Product/RecentPurchasedSkuResponse.cs index 0d4d2f0..60f455f 100644 --- a/BBWYB.Server.Model/Dto/Response/Product/RecentPurchasedSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Product/RecentPurchasedSkuResponse.cs @@ -15,5 +15,7 @@ /// 归属SkuId(JD) /// public string BelongSku { get; set; } + + public DateTime? MaxPurchasedTime { get; set; } } } From 3c981e6a14aed48b24a4b7fa512151935f5cb08a Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Thu, 11 Jan 2024 01:06:26 +0800 Subject: [PATCH 111/222] =?UTF-8?q?90=E5=A4=A9=E9=87=87=E8=B4=AD=E5=95=86?= =?UTF-8?q?=E5=93=81=E6=8E=92=E9=99=A4=E5=BD=93=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs | 6 ++++-- .../Dto/Request/Purchaser/QueryPurchaserRequest.cs | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index f661147..560d948 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -134,7 +134,8 @@ namespace BBWYB.Server.Business #endregion #region 最近采购的店铺商品 - var recent30d = DateTime.Now.AddDays(-90); + var recentStartDay = DateTime.Now.Date.AddDays(-90); + var recentEndDay = DateTime.Now.Date; var bePurchasedProductSkuList = fsql.Select() .InnerJoin((opi, opri, o, ps) => opi.OrderId == o.Id) .InnerJoin((opi, opri, o, ps) => opri.PurchaseOrderId == opi.PurchaseOrderId) @@ -142,7 +143,8 @@ namespace BBWYB.Server.Business .WhereIf(request.ShopId != null && request.ShopId > 0, (opi, opri, o, ps) => o.ShopId == request.ShopId) .Where((opi, opri, o, ps) => o.OrderState != Enums.OrderState.已取消 && opi.IsEnabled == true && - opi.CreateTime >= recent30d && + opi.CreateTime >= recentStartDay && + opi.CreateTime < recentEndDay && purchaserIdList.Contains(opi.PurchaserId)) .GroupBy((opi, opri, o, ps) => new { diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs index 5bf75bf..969bdfb 100644 --- a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs @@ -11,7 +11,7 @@ namespace BBWYB.Server.Model.Dto public string Sku { get; set; } /// - /// 采购商Id集合 + /// 采购商Name集合 /// public List PurchaserNameList { get; set; } From b4176dc7c044fc18052c57a28c08fd69acdea6dc Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 12 Jan 2024 12:20:11 +0800 Subject: [PATCH 112/222] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=8F=82=E6=95=B0=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.API/Controllers/VenderController.cs | 2 +- BBWYB.Server.Business/Vender/VenderBusiness.cs | 10 +++++----- .../Dto/Request/Vender/ShopSettingRequest.cs | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/BBWYB.Server.API/Controllers/VenderController.cs b/BBWYB.Server.API/Controllers/VenderController.cs index 3d3ee2b..87825cf 100644 --- a/BBWYB.Server.API/Controllers/VenderController.cs +++ b/BBWYB.Server.API/Controllers/VenderController.cs @@ -23,7 +23,7 @@ namespace BBWYB.Server.API.Controllers /// /// [HttpPost] - public long SaveShopSetting([FromBody] ShopSettingRequest shopSettingRequest) + public string SaveShopSetting([FromBody] ShopSettingRequest shopSettingRequest) { return venderBusiness.SaveShopSetting(shopSettingRequest); } diff --git a/BBWYB.Server.Business/Vender/VenderBusiness.cs b/BBWYB.Server.Business/Vender/VenderBusiness.cs index c98317d..fe396a3 100644 --- a/BBWYB.Server.Business/Vender/VenderBusiness.cs +++ b/BBWYB.Server.Business/Vender/VenderBusiness.cs @@ -40,7 +40,7 @@ namespace BBWYB.Server.Business } - public long SaveShopSetting(ShopSettingRequest shopSettingRequest) + public string SaveShopSetting(ShopSettingRequest shopSettingRequest) { //根据shopId查询mds shop的主键Id var shopId = shopSettingRequest.ShopId.ToString(); @@ -48,13 +48,13 @@ namespace BBWYB.Server.Business if (mdsShop == null) throw new BusinessException($"mds未找到shopId {shopSettingRequest.ShopId}"); - if (shopSettingRequest.PurchaseAccountId == 0) + if (string.IsNullOrEmpty(shopSettingRequest.PurchaseAccountId) || shopSettingRequest.PurchaseAccountId == "0") { - shopSettingRequest.PurchaseAccountId = idGenerator.NewLong(); + shopSettingRequest.PurchaseAccountId = idGenerator.NewLong().ToString(); var mdspa = new Purchaseaccount() { - Id = shopSettingRequest.PurchaseAccountId.ToString(), + Id = shopSettingRequest.PurchaseAccountId, AccountName = shopSettingRequest.AccountName, AppKey = shopSettingRequest.AppKey, AppSecret = shopSettingRequest.AppSecret, @@ -70,7 +70,7 @@ namespace BBWYB.Server.Business } else { - fsqlManager.MDSfsql.Update(shopSettingRequest.PurchaseAccountId.ToString()) + fsqlManager.MDSfsql.Update(shopSettingRequest.PurchaseAccountId) .Set(pa => pa.AppKey, shopSettingRequest.AppKey) .Set(pa => pa.AppSecret, shopSettingRequest.AppSecret) .Set(pa => pa.AppToken, shopSettingRequest.AppToken) diff --git a/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs b/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs index 71a6f1e..6b93f0d 100644 --- a/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs @@ -5,9 +5,9 @@ public long ShopId { get; set; } /// - /// 采购账号Id=0 将视为新增操作 + /// 采购账号Id=0或者空 将视为新增操作 /// - public long PurchaseAccountId { get; set; } + public string PurchaseAccountId { get; set; } /// From efaf097f988c98ac4bc7b784f7eec1aa8ed27c66 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 12 Jan 2024 13:00:28 +0800 Subject: [PATCH 113/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E9=87=91=E9=A2=9D?= =?UTF-8?q?=E5=A4=84=E7=90=86=E4=B8=A4=E4=BD=8D=E5=B0=8F=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs index f043573..ac2135d 100644 --- a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs @@ -23,7 +23,7 @@ namespace BBWYB.Server.Model.Dto /// /// 采购金额容错字段 /// - public decimal? PurchaseAmount { get { return PurchasedAmount; } } + public string? PurchaseAmount { get { return PurchasedAmount?.ToString("f2") ?? "0.00"; } } /// /// 最近采购时间容错字段 From 7d74eb0e88eb2a3d2ca8ade9084d5eb7d9feace8 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 12 Jan 2024 13:05:10 +0800 Subject: [PATCH 114/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=95=86=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E9=87=91=E9=A2=9D=E5=AD=97=E6=AE=B5=E6=9B=B4=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs index ac2135d..b61d887 100644 --- a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs @@ -23,7 +23,7 @@ namespace BBWYB.Server.Model.Dto /// /// 采购金额容错字段 /// - public string? PurchaseAmount { get { return PurchasedAmount?.ToString("f2") ?? "0.00"; } } + public string? PurchasedAmountFormat { get { return PurchasedAmount?.ToString("f2") ?? "0.00"; } } /// /// 最近采购时间容错字段 From 261a8d9b6724a74aab29e7457946f95114566d58 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 14 Jan 2024 23:07:53 +0800 Subject: [PATCH 115/222] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=95=86=E8=81=9A=E5=90=88=E9=80=BB=E8=BE=91=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=B8=BB=E8=90=A5=E7=B1=BB=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Aggregion/AggregionPurchaserBusiness.cs | 50 ++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs b/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs index 2b3b456..58f12c0 100644 --- a/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs +++ b/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs @@ -47,6 +47,7 @@ namespace BBWYB.Server.Business Console.WriteLine($"聚合{i + 1}/{purchaserIdList.Count()}"); Aggregion(tempPurchaserIdList); tempPurchaserIdList.Clear(); + Thread.Sleep(2000); } } if (tempPurchaserIdList.Count() > 0) @@ -59,9 +60,24 @@ namespace BBWYB.Server.Business private void Aggregion(IList purchaserIdList) { - Thread.Sleep(2000); - List> updatePurchaserList = new List>(); + List deletePeiList = new List(); + List insertPeiList = new List(); + + List dbPeiList = fsql.Select() + .Where(pei => pei.ExtendedType == Enums.PurchaserBasicInfoType.主营类目 && + purchaserIdList.Contains(pei.PurchaserId)) + .ToList(); + + var pspList = fsql.Select() + .InnerJoin((psp, p) => psp.ProductId == p.Id) + .Where((psp, p) => p.CategoryId != null && purchaserIdList.Contains(psp.PurchaserId)) + .ToList((psp, p) => new + { + psp.PurchaserId, + psp.ProductId, + p.CategoryId + }); #region 查询SPU绑定数/SKU绑定数 var bindList = fsql.Select() @@ -192,6 +208,32 @@ namespace BBWYB.Server.Business var recent90dPurchasedCount = recent90dPurchasedCountList.FirstOrDefault(x => x.PurchaserId == purchaserId)?.Count ?? 0; #endregion + #region 主营类目 + { + var currentDbPeiList = dbPeiList.Where(pei => pei.PurchaserId == purchaserId).ToList(); + var currentDbPspList = pspList.Where(psp => psp.PurchaserId == purchaserId).ToList(); + + var currentDeletePeiList = currentDbPeiList.Where(pei => !currentDbPspList.Any(psp => psp.PurchaserId == pei.PurchaserId && + psp.CategoryId == pei.ExtendedInfoId)) + .Select(pei => pei.Id).ToList(); + if (currentDeletePeiList.Count() > 0) + deletePeiList.AddRange(currentDeletePeiList); + + var currentInsertPeiList = currentDbPspList.Where(psp => !currentDbPeiList.Any(pei => pei.PurchaserId == psp.PurchaserId && + pei.ExtendedInfoId == psp.CategoryId)) + .GroupBy(psp => psp.CategoryId) + .Select(g => new Purchaser_ExtendedInfo_Relation() + { + Id = idGenerator.NewLong(), + ExtendedInfoId = g.Key, + ExtendedType = Enums.PurchaserBasicInfoType.主营类目, + PurchaserId = purchaserId + }).ToList(); + if (currentInsertPeiList.Count() > 0) + insertPeiList.AddRange(currentInsertPeiList); + } + #endregion + var update = fsql.Update(purchaserId) .Set(p => p.BindingSpuCount, bindingSpuCount) .Set(p => p.BindingSkuCount, bindingSkuCount) @@ -209,6 +251,10 @@ namespace BBWYB.Server.Business { foreach (var update in updatePurchaserList) update.ExecuteAffrows(); + if (deletePeiList.Count() > 0) + fsql.Delete(deletePeiList).ExecuteAffrows(); + if (insertPeiList.Count() > 0) + fsql.Insert(insertPeiList).ExecuteAffrows(); }); } } From b9f104fe369e29e0512c6a7282477732de4b7427 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Mon, 15 Jan 2024 18:51:20 +0800 Subject: [PATCH 116/222] =?UTF-8?q?=E5=9C=A8=E6=9B=B4=E6=96=B0=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E6=96=B9=E6=A1=88=E6=97=B6=E6=9B=B4=E6=96=B0=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E5=95=86=E8=81=9A=E5=90=88=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 47 ++++++++++--------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index e8f0bc3..915a401 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -15,14 +15,15 @@ namespace BBWYB.Server.Business { private PurchaseProductAPIService purchaseProductAPIService; private RestApiService restApiService; - + private AggregionPurchaserBusiness aggregionPurchaserBusiness; private IList invalidOrderStateList; public PurchaseSchemeBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, PurchaseProductAPIService purchaseProductAPIService, - RestApiService restApiService) : base(fsql, nLogManager, idGenerator) + RestApiService restApiService, + AggregionPurchaserBusiness aggregionPurchaserBusiness) : base(fsql, nLogManager, idGenerator) { this.purchaseProductAPIService = purchaseProductAPIService; this.restApiService = restApiService; @@ -33,6 +34,7 @@ namespace BBWYB.Server.Business Enums.OrderState.等待采购, Enums.OrderState.部分采购 }; + this.aggregionPurchaserBusiness = aggregionPurchaserBusiness; } private void ExtractNewPurchaser(IList purchaserSchemeList, IList addPurchaserList) where T : InputPurchaseSchemeRequest @@ -216,6 +218,7 @@ namespace BBWYB.Server.Business List dbSchemeGroupList = null; List dbPurchaseSchemeList = null; List deleteSchemeIdList = new List(); + List aggregationPurchaserIdList = new List(); #region 数据验证 if ((batchCURDSchemeRequest.EditPurchaseSchemeList == null || batchCURDSchemeRequest.EditPurchaseSchemeList.Count == 0) && @@ -356,6 +359,8 @@ namespace BBWYB.Server.Business if (batchCURDSchemeRequest.AddPurchaseSchemeList != null && batchCURDSchemeRequest.AddPurchaseSchemeList.Count > 0) { + aggregationPurchaserIdList.AddRange(batchCURDSchemeRequest.AddPurchaseSchemeList.SelectMany(s => s.PurchaseSchemeProductList.Select(psp => psp.PurchaserId)).ToList()); + var firstScheme = batchCURDSchemeRequest.AddPurchaseSchemeList.First(); ExtractNewPurchaser(batchCURDSchemeRequest.AddPurchaseSchemeList, newPurchaserList); @@ -475,6 +480,8 @@ namespace BBWYB.Server.Business #region 更新采购方案 if (batchCURDSchemeRequest.EditPurchaseSchemeList != null && batchCURDSchemeRequest.EditPurchaseSchemeList.Count > 0) { + aggregationPurchaserIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.SelectMany(s => s.PurchaseSchemeProductList.Select(psp => psp.PurchaserId)).ToList()); + ExtractNewPurchaser(batchCURDSchemeRequest.EditPurchaseSchemeList, newPurchaserList); var editSchemeIdList = batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id).ToList(); var dbPurchaseSchemes = GetPurchaseSchemeList(new QuerySchemeRequest() @@ -618,6 +625,9 @@ namespace BBWYB.Server.Business //删除信息残缺的采购方案 if (deleteSchemeIdList.Count() > 0) DeletePurchaseScheme(deleteSchemeIdList); + + aggregationPurchaserIdList = aggregationPurchaserIdList.Distinct().ToList(); + aggregionPurchaserBusiness.AggregionByPurchaserIdList(aggregationPurchaserIdList); } /// @@ -1007,33 +1017,19 @@ namespace BBWYB.Server.Business public void DeletePurchaseScheme(long schemeId) { - //IDelete? deletePsg = null; - //var purchaseScheme = fsql.Select(schemeId).ToOne(); - //if (purchaseScheme == null) - // throw new BusinessException("采购方案不存在"); - //if (purchaseScheme.SchemeGroupId != 0) - //{ - // var sameGroupSchemeCount = fsql.Select().Where(ps => ps.SchemeGroupId == purchaseScheme.SchemeGroupId && - // ps.Id != purchaseScheme.Id).Count(); - // if (sameGroupSchemeCount == 0) - // deletePsg = fsql.Delete(purchaseScheme.SchemeGroupId); - //} - //fsql.Transaction(() => - //{ - // deletePsg?.ExecuteAffrows(); - // fsql.Delete(schemeId).ExecuteAffrows(); - // fsql.Delete().Where(p => p.SkuPurchaseSchemeId == schemeId).ExecuteAffrows(); - // fsql.Delete().Where(p => p.SkuPurchaseSchemeId == schemeId).ExecuteAffrows(); - //}); - DeletePurchaseScheme(new List() { schemeId }); + DeletePurchaseScheme(new List() { schemeId }, true); } - public void DeletePurchaseScheme(List schemeIdList) + public void DeletePurchaseScheme(List schemeIdList, bool isAggregationPurchaser = false) { IList deleteSchemeGroupIdList = new List(); var purchaseSchemeList = fsql.Select(schemeIdList).ToList(); if (purchaseSchemeList.Count() == 0) return; + var purchaserIdList = isAggregationPurchaser ? + fsql.Select().Where(psp => schemeIdList.Contains(psp.SkuPurchaseSchemeId)) + .Distinct() + .ToList(psp => psp.PurchaserId) : null; var schemeGroupIdList = purchaseSchemeList.Where(ps => ps.SchemeGroupId != 0).Select(ps => ps.SchemeGroupId).ToList(); var sameSchemeGroupCountGroups = fsql.Select().Where(ps => ps.SchemeGroupId != 0 && schemeGroupIdList.Contains(ps.SchemeGroupId) && @@ -1055,6 +1051,8 @@ namespace BBWYB.Server.Business } } + + fsql.Transaction(() => { if (deleteSchemeGroupIdList.Count() > 0) @@ -1063,6 +1061,11 @@ namespace BBWYB.Server.Business fsql.Delete().Where(p => schemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows(); fsql.Delete().Where(p => schemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows(); }); + + if (purchaserIdList != null && purchaserIdList.Count() > 0 && isAggregationPurchaser) + { + aggregionPurchaserBusiness.AggregionByPurchaserIdList(purchaserIdList); + } } /// From 0449ad15dc0559acc38af887e01037dece860d53 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Mon, 15 Jan 2024 20:40:42 +0800 Subject: [PATCH 117/222] 1 --- BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 915a401..0a9db9d 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1051,8 +1051,6 @@ namespace BBWYB.Server.Business } } - - fsql.Transaction(() => { if (deleteSchemeGroupIdList.Count() > 0) From 19697f42d03fbc7cd4207cbbec1136d9bbcd1c16 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Mon, 15 Jan 2024 23:53:38 +0800 Subject: [PATCH 118/222] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8A=96=E9=9F=B3?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Model/Enums.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index f1e2f01..04e9a1e 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -3,7 +3,7 @@ public class Enums { /// - /// 电商平台 淘宝 = 0,京东 = 1,阿里巴巴 = 2,拼多多 = 3,微信 = 4,拳探 = 10 + /// 电商平台 淘宝 = 0,京东 = 1,阿里巴巴 = 2,拼多多 = 3,微信 = 4,拳探 = 10,抖音 = 11 /// public enum Platform { @@ -12,7 +12,8 @@ 阿里巴巴 = 2, 拼多多 = 3, 微信 = 4, - 拳探 = 10 + 拳探 = 10, + 抖音 = 11 } /// From 327e54e81cae0adb2a5930ca631268a5f1c76dc7 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 16 Jan 2024 13:55:57 +0800 Subject: [PATCH 119/222] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E9=99=90=E5=88=B6=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Vender/VenderBusiness.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/BBWYB.Server.Business/Vender/VenderBusiness.cs b/BBWYB.Server.Business/Vender/VenderBusiness.cs index fe396a3..d84ad5d 100644 --- a/BBWYB.Server.Business/Vender/VenderBusiness.cs +++ b/BBWYB.Server.Business/Vender/VenderBusiness.cs @@ -4,6 +4,7 @@ using BBWYB.Server.Model; using BBWYB.Server.Model.Db.Mds; using BBWYB.Server.Model.Db.MDS; using BBWYB.Server.Model.Dto; +using Org.BouncyCastle.Ocsp; using SDKAdapter.OperationPlatform.Client; using SDKAdapter.OperationPlatform.Models; using Yitter.IdGenerator; @@ -50,6 +51,10 @@ namespace BBWYB.Server.Business if (string.IsNullOrEmpty(shopSettingRequest.PurchaseAccountId) || shopSettingRequest.PurchaseAccountId == "0") { + var isRepeat = fsqlManager.MDSfsql.Select().Where(pa => pa.AppKey == shopSettingRequest.AppKey && + pa.AppToken == shopSettingRequest.AppToken).Any(); + if (isRepeat) + throw new BusinessException($"采购账号重复"); shopSettingRequest.PurchaseAccountId = idGenerator.NewLong().ToString(); var mdspa = new Purchaseaccount() From d3732bc0992050c201d2af8f951c326e89dc761d Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 16 Jan 2024 13:56:29 +0800 Subject: [PATCH 120/222] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E9=99=90=E5=88=B6=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Vender/VenderBusiness.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/Vender/VenderBusiness.cs b/BBWYB.Server.Business/Vender/VenderBusiness.cs index d84ad5d..409fd45 100644 --- a/BBWYB.Server.Business/Vender/VenderBusiness.cs +++ b/BBWYB.Server.Business/Vender/VenderBusiness.cs @@ -52,7 +52,8 @@ namespace BBWYB.Server.Business if (string.IsNullOrEmpty(shopSettingRequest.PurchaseAccountId) || shopSettingRequest.PurchaseAccountId == "0") { var isRepeat = fsqlManager.MDSfsql.Select().Where(pa => pa.AppKey == shopSettingRequest.AppKey && - pa.AppToken == shopSettingRequest.AppToken).Any(); + pa.AppToken == shopSettingRequest.AppToken && + pa.ShopId == mdsShop.ShopId).Any(); if (isRepeat) throw new BusinessException($"采购账号重复"); shopSettingRequest.PurchaseAccountId = idGenerator.NewLong().ToString(); From e4ce3c532762634b3f74ee79a7fee1a62906c9a4 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 16 Jan 2024 13:56:50 +0800 Subject: [PATCH 121/222] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E9=99=90=E5=88=B6=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Vender/VenderBusiness.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/Vender/VenderBusiness.cs b/BBWYB.Server.Business/Vender/VenderBusiness.cs index 409fd45..942d3bb 100644 --- a/BBWYB.Server.Business/Vender/VenderBusiness.cs +++ b/BBWYB.Server.Business/Vender/VenderBusiness.cs @@ -53,7 +53,7 @@ namespace BBWYB.Server.Business { var isRepeat = fsqlManager.MDSfsql.Select().Where(pa => pa.AppKey == shopSettingRequest.AppKey && pa.AppToken == shopSettingRequest.AppToken && - pa.ShopId == mdsShop.ShopId).Any(); + pa.ShopId == mdsShop.Id).Any(); if (isRepeat) throw new BusinessException($"采购账号重复"); shopSettingRequest.PurchaseAccountId = idGenerator.NewLong().ToString(); From f349f10980e81deb42c98fdfb86bdcbc42aea537 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 24 Jan 2024 14:16:13 +0800 Subject: [PATCH 122/222] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=BF=90=E9=80=9A?= =?UTF-8?q?=E8=B4=A7=E8=BF=90=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Vender/VenderBusiness.cs | 6 +++--- SDKAdapter/ExpressCompanyNameConverter.cs | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/BBWYB.Server.Business/Vender/VenderBusiness.cs b/BBWYB.Server.Business/Vender/VenderBusiness.cs index 942d3bb..e2ff359 100644 --- a/BBWYB.Server.Business/Vender/VenderBusiness.cs +++ b/BBWYB.Server.Business/Vender/VenderBusiness.cs @@ -51,9 +51,9 @@ namespace BBWYB.Server.Business if (string.IsNullOrEmpty(shopSettingRequest.PurchaseAccountId) || shopSettingRequest.PurchaseAccountId == "0") { - var isRepeat = fsqlManager.MDSfsql.Select().Where(pa => pa.AppKey == shopSettingRequest.AppKey && - pa.AppToken == shopSettingRequest.AppToken && - pa.ShopId == mdsShop.Id).Any(); + var isRepeat = fsqlManager.MDSfsql.Select().Where(pa => pa.ShopId == mdsShop.Id && + pa.AppKey == shopSettingRequest.AppKey && + pa.AppToken == shopSettingRequest.AppToken).Any(); if (isRepeat) throw new BusinessException($"采购账号重复"); shopSettingRequest.PurchaseAccountId = idGenerator.NewLong().ToString(); diff --git a/SDKAdapter/ExpressCompanyNameConverter.cs b/SDKAdapter/ExpressCompanyNameConverter.cs index 0800251..45d5567 100644 --- a/SDKAdapter/ExpressCompanyNameConverter.cs +++ b/SDKAdapter/ExpressCompanyNameConverter.cs @@ -128,6 +128,7 @@ namespace SDKAdapter new LogisticsCompanyRelationship(){SourceName="京东物流",TargetName="京东物流",TargetCode="jd"}, 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="danniao"}, new LogisticsCompanyRelationship(){SourceName="丹鸟",TargetName="丹鸟物流",TargetCode="danniao"} From 883085d2dd673f59889d72558c09235c510d1f11 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Fri, 26 Jan 2024 19:07:04 +0800 Subject: [PATCH 123/222] =?UTF-8?q?=E8=BF=90=E9=80=9A=E8=B4=A7=E8=BF=90?= =?UTF-8?q?=E4=B8=8D=E8=AE=A2=E9=98=85=E5=BF=AB=E9=80=92100?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 8 ++++++-- BBWYB.Server.Business/Sync/OrderSyncBusiness.cs | 1 - SDKAdapter/ExpressCompanyNameConverter.cs | 4 +++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 9a0ba76..1d21692 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -2493,8 +2493,12 @@ namespace BBWYB.Server.Business kuaidi100Company = expressCompanyNameConverter.ConverterToKuaiDi100Company(logisticsInfo.ExpressName); if (kuaidi100Company == null) throw new Exception($"无翻译结果"); - kuaiDi100Manager.SubscribeKuaiDi100(logisticsInfo.WayBillNo, kuaidi100Company.TargetCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish"); - isSubscribeKD100 = true; + + if (!kuaidi100Company.IsNoSubscribeKD100) + { + kuaiDi100Manager.SubscribeKuaiDi100(logisticsInfo.WayBillNo, kuaidi100Company.TargetCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish"); + isSubscribeKD100 = true; + } } catch (Exception ex) { diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index d63ccd0..58d3abe 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -419,7 +419,6 @@ namespace BBWYB.Server.Business.Sync } updateOSkuOptimizationFlagByReasonList.Add(oskuId); } - #endregion #region 创建待议价任务 diff --git a/SDKAdapter/ExpressCompanyNameConverter.cs b/SDKAdapter/ExpressCompanyNameConverter.cs index 45d5567..08dfb4c 100644 --- a/SDKAdapter/ExpressCompanyNameConverter.cs +++ b/SDKAdapter/ExpressCompanyNameConverter.cs @@ -128,7 +128,7 @@ namespace SDKAdapter new LogisticsCompanyRelationship(){SourceName="京东物流",TargetName="京东物流",TargetCode="jd"}, new LogisticsCompanyRelationship(){SourceName="速腾快递",TargetName="速腾快递",TargetCode="suteng"}, new LogisticsCompanyRelationship(){SourceName="运通快运",TargetName="运通快运",TargetCode="ytky168"}, - new LogisticsCompanyRelationship(){SourceName="运通货运",TargetName="运通快运",TargetCode="ytky168"}, + new LogisticsCompanyRelationship(){SourceName="运通货运",TargetName="zhuanxianwuliu",TargetCode="专线物流",IsNoSubscribeKD100=true}, new LogisticsCompanyRelationship(){SourceName="汇森速运",TargetName="汇森速运",TargetCode="huisenky"}, new LogisticsCompanyRelationship(){SourceName="丹鸟物流",TargetName="丹鸟物流",TargetCode="danniao"}, new LogisticsCompanyRelationship(){SourceName="丹鸟",TargetName="丹鸟物流",TargetCode="danniao"} @@ -195,5 +195,7 @@ namespace SDKAdapter public string SecondTargetName { get; set; } public string SecondTargetCode { get; set; } + + public bool IsNoSubscribeKD100 { get; set; } } } From 88be143fbae7e4470482275b91e51a3a17bc3398 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sat, 27 Jan 2024 14:52:24 +0800 Subject: [PATCH 124/222] =?UTF-8?q?=E6=89=80=E6=9C=89=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=95=86=E8=81=9A=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/AggregationPurchaserController.cs | 9 +++++++++ .../Aggregion/AggregionPurchaserBusiness.cs | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/BBWYB.Server.API/Controllers/AggregationPurchaserController.cs b/BBWYB.Server.API/Controllers/AggregationPurchaserController.cs index 9eb8adf..d8fe1ad 100644 --- a/BBWYB.Server.API/Controllers/AggregationPurchaserController.cs +++ b/BBWYB.Server.API/Controllers/AggregationPurchaserController.cs @@ -31,5 +31,14 @@ namespace BBWYB.Server.API.Controllers { aggregionPurchaserBusiness.AggregionByPurchaserIdList(purchaserIdList); } + + /// + /// 聚合所有采购商 + /// + [HttpPost] + public void AggregionAllPurchaser() + { + aggregionPurchaserBusiness.AggregionAllPurchaser(); + } } } diff --git a/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs b/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs index 58f12c0..718b9ec 100644 --- a/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs +++ b/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs @@ -35,6 +35,11 @@ namespace BBWYB.Server.Business Task.Factory.StartNew(() => AggregionByGroup(purchaserIdList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.AggregationPurchaserTaskScheduler); } + public void AggregionAllPurchaser() + { + var purchaserIdList = fsql.Select().ToList(p => p.Id); + Task.Factory.StartNew(() => AggregionByGroup(purchaserIdList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.AggregationPurchaserTaskScheduler); + } private void AggregionByGroup(IList purchaserIdList) { From 59ed3cccdb459d5a48798c1fe8bcb94e1f788425 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sat, 27 Jan 2024 21:43:25 +0800 Subject: [PATCH 125/222] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=89=A9=E6=B5=81?= =?UTF-8?q?=E7=BF=BB=E8=AF=91=E8=A7=84=E5=88=99=20=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E9=BB=98=E8=AE=A4=E4=BD=BF=E7=94=A8=E4=B8=93?= =?UTF-8?q?=E7=BA=BF=E7=89=A9=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 20 ++++++++++++------- SDKAdapter/ExpressCompanyNameConverter.cs | 3 --- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 1d21692..2c6e095 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -2492,13 +2492,9 @@ namespace BBWYB.Server.Business { kuaidi100Company = expressCompanyNameConverter.ConverterToKuaiDi100Company(logisticsInfo.ExpressName); if (kuaidi100Company == null) - throw new Exception($"无翻译结果"); - - if (!kuaidi100Company.IsNoSubscribeKD100) - { - kuaiDi100Manager.SubscribeKuaiDi100(logisticsInfo.WayBillNo, kuaidi100Company.TargetCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish"); - isSubscribeKD100 = true; - } + throw new Exception($"无翻译结果,默认使用专线物流发货,如发现非专线物流请联系技术员,进行调整"); + kuaiDi100Manager.SubscribeKuaiDi100(logisticsInfo.WayBillNo, kuaidi100Company.TargetCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish"); + isSubscribeKD100 = true; } catch (Exception ex) { @@ -2521,6 +2517,16 @@ namespace BBWYB.Server.Business #endregion if (ex.Message.Contains("无翻译结果")) + { + kuaidi100Company = new LogisticsCompanyRelationship() + { + SecondTargetCode = logisticsInfo.ExpressId, + SourceName = logisticsInfo.ExpressName, + TargetCode = "zhuanxianwuliu", + TargetName = "专线物流" + }; + } + else throw; } } diff --git a/SDKAdapter/ExpressCompanyNameConverter.cs b/SDKAdapter/ExpressCompanyNameConverter.cs index 08dfb4c..0800251 100644 --- a/SDKAdapter/ExpressCompanyNameConverter.cs +++ b/SDKAdapter/ExpressCompanyNameConverter.cs @@ -128,7 +128,6 @@ namespace SDKAdapter new LogisticsCompanyRelationship(){SourceName="京东物流",TargetName="京东物流",TargetCode="jd"}, new LogisticsCompanyRelationship(){SourceName="速腾快递",TargetName="速腾快递",TargetCode="suteng"}, new LogisticsCompanyRelationship(){SourceName="运通快运",TargetName="运通快运",TargetCode="ytky168"}, - new LogisticsCompanyRelationship(){SourceName="运通货运",TargetName="zhuanxianwuliu",TargetCode="专线物流",IsNoSubscribeKD100=true}, new LogisticsCompanyRelationship(){SourceName="汇森速运",TargetName="汇森速运",TargetCode="huisenky"}, new LogisticsCompanyRelationship(){SourceName="丹鸟物流",TargetName="丹鸟物流",TargetCode="danniao"}, new LogisticsCompanyRelationship(){SourceName="丹鸟",TargetName="丹鸟物流",TargetCode="danniao"} @@ -195,7 +194,5 @@ namespace SDKAdapter public string SecondTargetName { get; set; } public string SecondTargetCode { get; set; } - - public bool IsNoSubscribeKD100 { get; set; } } } From 71d26b971f7d2a7b765d42a31d5db33bc48d7c7c Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 28 Jan 2024 21:15:11 +0800 Subject: [PATCH 126/222] =?UTF-8?q?=E6=96=B0=E5=A2=9Ehy=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=BA=90=EF=BC=8C=E6=96=B0=E5=A2=9Eqt/jd/=E7=B1=BB=E7=9B=AE?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DataRepairController.cs | 6 ++ BBWYB.Server.API/Program.cs | 3 + BBWYB.Server.API/appsettings.json | 3 +- .../DataRepair/DataRepairBusiness.cs | 41 ++++++++++++ .../FreeSqlMultiDBManager.cs | 2 + BBWYB.Server.Model/Db/HY/HY重新生成.bat | 2 + BBWYB.Server.Model/Db/HY/Hycats.cs | 47 +++++++++++++ BBWYB.Server.Model/Db/HY/__razor.cshtml.txt | 67 +++++++++++++++++++ BBWYB.Server.Model/Db/HY/__重新生成.bat | 2 + 9 files changed, 172 insertions(+), 1 deletion(-) create mode 100644 BBWYB.Server.Model/Db/HY/HY重新生成.bat create mode 100644 BBWYB.Server.Model/Db/HY/Hycats.cs create mode 100644 BBWYB.Server.Model/Db/HY/__razor.cshtml.txt create mode 100644 BBWYB.Server.Model/Db/HY/__重新生成.bat diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index cbf964c..2d1562b 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -121,5 +121,11 @@ namespace BBWYB.Server.API.Controllers { dataRepairBusiness.RepairPurchaserLocation(); } + + [HttpPost] + public void ExportQTSpuAndJDSku() + { + dataRepairBusiness.ExportQTSpuAndJDSku(); + } } } diff --git a/BBWYB.Server.API/Program.cs b/BBWYB.Server.API/Program.cs index 4174b6a..545ed68 100644 --- a/BBWYB.Server.API/Program.cs +++ b/BBWYB.Server.API/Program.cs @@ -34,11 +34,14 @@ var fsql2 = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.My var fsql_bbwyc = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, configuration.GetConnectionString("BBWYCDB")).Build(); +var fsql_hy = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, configuration.GetConnectionString("HYDB")).Build(); + services.AddSingleton(new FreeSqlMultiDBManager() { BBWYBfsql = fsql, MDSfsql = fsql2, BBWYCfsql = fsql_bbwyc, + HYfsql = fsql_hy }); services.AddSingleton(); diff --git a/BBWYB.Server.API/appsettings.json b/BBWYB.Server.API/appsettings.json index d071f85..355fa76 100644 --- a/BBWYB.Server.API/appsettings.json +++ b/BBWYB.Server.API/appsettings.json @@ -11,7 +11,8 @@ //"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;", "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;", + "HYDB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=jdhy;charset=utf8;sslmode=none;" }, "AllowedSwagger": true, "Secret": "D96BFA5B-F2AF-45BC-9342-5A55C3F9BBB0", diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 12ffe46..e409944 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -4,6 +4,7 @@ using BBWYB.Common.Log; using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Db.HY; using BBWYB.Server.Model.Dto; using FreeSql; using SDKAdapter; @@ -12,6 +13,7 @@ using SDKAdapter.OperationPlatform.Models; using SDKAdapter.PurchasePlatform.Client; using SDKAdapter.PurchasePlatform.Models; using System.Data; +using System.Reflection; using System.Text.RegularExpressions; using Yitter.IdGenerator; @@ -1247,6 +1249,45 @@ namespace BBWYB.Server.Business //Console.WriteLine(location); return location; } + + public void ExportQTSpuAndJDSku() + { + var qtlist = fsql.Select() + .Where(s1 => !string.IsNullOrEmpty(s1.BelongSkuId)) + .GroupBy(s1 => s1.ProductId) + .WithTempQuery(g => new { MaxId = g.Max(g.Value.Id) }) + .From() + .InnerJoin((s1, s2) => s1.MaxId == s2.Id) + .ToList((s1, s2) => new { s2.ProductId, s2.BelongSkuId, s2.CreateTime }); + + var jdSkuIdList = qtlist.Select(x => x.BelongSkuId).Distinct().ToList(); + var jdSkuList = freeSqlMultiDBManager.BBWYCfsql.Select(jdSkuIdList).ToList(); + var hycatsList = freeSqlMultiDBManager.HYfsql.Select().ToList(); + + var result = new List(); + foreach (var qt in qtlist) + { + HyCats l1category = null; + HyCats l2category = null; + HyCats l3category = null; + var ps = jdSkuList.FirstOrDefault(x => x.Id == qt.BelongSkuId); + + if (ps != null && ps.CategoryId != null) + { + l3category = hycatsList.FirstOrDefault(x => x.Id == ps.CategoryId.ToString()); + if (l3category != null && !string.IsNullOrEmpty(l3category.ParentId)) + { + l2category = hycatsList.FirstOrDefault(x => x.Id == l3category.ParentId); + if (l2category != null && !string.IsNullOrEmpty(l2category.ParentId)) + l1category = hycatsList.FirstOrDefault(x => x.Id == l2category.ParentId); + } + } + result.Add($"{qt.ProductId},{qt.BelongSkuId},{l1category?.Id},{l1category?.Name},{l2category?.Id},{l2category?.Name},{l3category?.Id},{l3category?.Name}"); + } + result.Insert(0, "拳探spu,京东sku,京东1级类目Id,京东1级类目名称,京东2级类目Id,京东2级类目名称,京东3级类目Id,京东3级类目名称"); + var path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "ExportQTSpuAndJDSku.csv"); + System.IO.File.WriteAllLines(path, result, System.Text.Encoding.UTF8); + } } } diff --git a/BBWYB.Server.Business/FreeSqlMultiDBManager.cs b/BBWYB.Server.Business/FreeSqlMultiDBManager.cs index a9f54b6..12a7b7a 100644 --- a/BBWYB.Server.Business/FreeSqlMultiDBManager.cs +++ b/BBWYB.Server.Business/FreeSqlMultiDBManager.cs @@ -6,5 +6,7 @@ public IFreeSql MDSfsql { get; set; } public IFreeSql BBWYCfsql { get; set; } + + public IFreeSql HYfsql { get; set; } } } diff --git a/BBWYB.Server.Model/Db/HY/HY重新生成.bat b/BBWYB.Server.Model/Db/HY/HY重新生成.bat new file mode 100644 index 0000000..b3cb0be --- /dev/null +++ b/BBWYB.Server.Model/Db/HY/HY重新生成.bat @@ -0,0 +1,2 @@ + +FreeSql.Generator -Razor 1 -NameOptions 1,0,0,0 -NameSpace BBWYB.Server.Model.Db -DB "MySql,data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=jdhy;charset=utf8;sslmode=none;" -FileName "{name}.cs" diff --git a/BBWYB.Server.Model/Db/HY/Hycats.cs b/BBWYB.Server.Model/Db/HY/Hycats.cs new file mode 100644 index 0000000..50d88ef --- /dev/null +++ b/BBWYB.Server.Model/Db/HY/Hycats.cs @@ -0,0 +1,47 @@ +using FreeSql.DatabaseModel; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using Newtonsoft.Json; +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db.HY +{ + + [Table(Name = "hycats", DisableSyncStructure = true)] + public partial class HyCats + { + + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string Id { get; set; } + + /// + /// 是否最子级 + /// + [Column(DbType = "tinyint")] + public sbyte IsLeaf { get; set; } + + /// + /// 级别 + /// + [Column(DbType = "int")] + public int Level { get; set; } + + /// + /// 名称 + /// + [Column(IsNullable = false)] + public string Name { get; set; } + + /// + /// 父级ID + /// + [Column(StringLength = 50)] + public string ParentId { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Db/HY/__razor.cshtml.txt b/BBWYB.Server.Model/Db/HY/__razor.cshtml.txt new file mode 100644 index 0000000..8997b3b --- /dev/null +++ b/BBWYB.Server.Model/Db/HY/__razor.cshtml.txt @@ -0,0 +1,67 @@ +using FreeSql.DatabaseModel;@{ +var gen = Model as RazorModel; + +Func GetAttributeString = attr => { + if (string.IsNullOrEmpty(attr)) return ""; + return string.Concat(", ", attr.Trim('[', ']')); +}; +Func GetDefaultValue = defval => { + if (string.IsNullOrEmpty(defval)) return ""; + return " = " + defval + ";"; +}; +}@{ +switch (gen.fsql.Ado.DataType) { + case FreeSql.DataType.PostgreSQL: +@:using System; +@:using System.Collections; +@:using System.Collections.Generic; +@:using System.Linq; +@:using System.Reflection; +@:using System.Threading.Tasks; +@:using Newtonsoft.Json; +@:using FreeSql.DataAnnotations; +@:using System.Net; +@:using Newtonsoft.Json.Linq; +@:using System.Net.NetworkInformation; +@:using NpgsqlTypes; +@:using Npgsql.LegacyPostgis; + break; + case FreeSql.DataType.SqlServer: + case FreeSql.DataType.MySql: + default: +@:using System; +@:using System.Collections; +@:using System.Collections.Generic; +@:using System.Linq; +@:using System.Reflection; +@:using System.Threading.Tasks; +@:using Newtonsoft.Json; +@:using FreeSql.DataAnnotations; + break; +} +} + +namespace @gen.NameSpace { + +@if (string.IsNullOrEmpty(gen.table.Comment) == false) { + @:/// + @:/// @gen.table.Comment.Replace("\r\n", "\n").Replace("\n", "\r\n /// ") + @:/// +} + [JsonObject(MemberSerialization.OptIn)@GetAttributeString(gen.GetTableAttribute())] + public partial class @gen.GetCsName(gen.FullTableName) { + + @foreach (var col in gen.columns) { + + if (string.IsNullOrEmpty(col.Comment) == false) { + @:/// + @:/// @col.Comment.Replace("\r\n", "\n").Replace("\n", "\r\n /// ") + @:/// + } + @:@("[JsonProperty" + GetAttributeString(gen.GetColumnAttribute(col, true)) + "]") + @:public @gen.GetCsType(col) @gen.GetCsName(col.Name) { get; set; }@GetDefaultValue(gen.GetColumnDefaultValue(col, false)) +@: + } + } +@gen.GetMySqlEnumSetDefine() +} \ No newline at end of file diff --git a/BBWYB.Server.Model/Db/HY/__重新生成.bat b/BBWYB.Server.Model/Db/HY/__重新生成.bat new file mode 100644 index 0000000..23f751f --- /dev/null +++ b/BBWYB.Server.Model/Db/HY/__重新生成.bat @@ -0,0 +1,2 @@ + +FreeSql.Generator -Razor "__razor.cshtml.txt" -NameOptions 1,0,0,0 -NameSpace BBWYB.Server.Model.Db -DB "MySql,data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=jdhy;charset=utf8;sslmode=none;" -FileName "{name}.cs" From 628c55b9b92b3fc371fa834818e80a783561754c Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 29 Jan 2024 18:41:54 +0800 Subject: [PATCH 127/222] =?UTF-8?q?qt=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataRepair/DataRepairBusiness.cs | 61 +++++++++++++++++-- 1 file changed, 56 insertions(+), 5 deletions(-) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index e409944..249e537 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -1260,21 +1260,72 @@ namespace BBWYB.Server.Business .InnerJoin((s1, s2) => s1.MaxId == s2.Id) .ToList((s1, s2) => new { s2.ProductId, s2.BelongSkuId, s2.CreateTime }); + var qtSpuList = fsql.Select().ToList(); + var jdSkuIdList = qtlist.Select(x => x.BelongSkuId).Distinct().ToList(); var jdSkuList = freeSqlMultiDBManager.BBWYCfsql.Select(jdSkuIdList).ToList(); var hycatsList = freeSqlMultiDBManager.HYfsql.Select().ToList(); + #region 拳探商品类目 + var client = opPlatformClientFactory.GetClient(AdapterEnums.PlatformType.拳探); + var request = new OP_QueryProductCategoryRequest() + { + PageIndex = 1, + PageSize = 500, + AppKey = "BBWYB2023022501", + AppSecret = "3a1521deccc6819d61788a0d6baae49e9", + AppToken = "9", + Level = 0 + }; + + var L1_qtCategoryList = new List(); + var L1_response = client.GetProductCategoryList(request); + if (L1_response.Items != null) + L1_qtCategoryList.AddRange(L1_response.Items); + + request.Level = 1; + var L2_qtCategoryList = new List(); + var L2_response = client.GetProductCategoryList(request); + if (L2_response.Items != null) + L2_qtCategoryList.AddRange(L2_response.Items); + + request.Level = 2; + var L3_qtCategoryList = new List(); + var L3_response = client.GetProductCategoryList(request); + if (L3_response.Items != null) + L3_qtCategoryList.AddRange(L3_response.Items); + #endregion + var result = new List(); foreach (var qt in qtlist) { HyCats l1category = null; HyCats l2category = null; HyCats l3category = null; - var ps = jdSkuList.FirstOrDefault(x => x.Id == qt.BelongSkuId); - if (ps != null && ps.CategoryId != null) + OP_ProductCategoryResponse qt_l1category = null; + OP_ProductCategoryResponse qt_l2category = null; + OP_ProductCategoryResponse qt_l3category = null; + + var qtspu = qtSpuList.FirstOrDefault(x => x.Id == qt.ProductId); + if (qtspu != null) + { + qt_l3category = L3_qtCategoryList.FirstOrDefault(x => x.CategoryId == qtspu.CategoryId?.ToString()); + if (qt_l3category != null) + { + var parentPathIdArray = qt_l3category.CategoryPath.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + if (parentPathIdArray.Length != 3) + continue; + qt_l2category = L2_qtCategoryList.FirstOrDefault(x => x.CategoryId == parentPathIdArray[1]); + qt_l1category = L1_qtCategoryList.FirstOrDefault(x => x.CategoryId == parentPathIdArray[0]); + } + } + + var jdps = jdSkuList.FirstOrDefault(x => x.Id == qt.BelongSkuId); + + if (jdps != null && jdps.CategoryId != null) { - l3category = hycatsList.FirstOrDefault(x => x.Id == ps.CategoryId.ToString()); + l3category = hycatsList.FirstOrDefault(x => x.Id == jdps.CategoryId.ToString()); if (l3category != null && !string.IsNullOrEmpty(l3category.ParentId)) { l2category = hycatsList.FirstOrDefault(x => x.Id == l3category.ParentId); @@ -1282,9 +1333,9 @@ namespace BBWYB.Server.Business l1category = hycatsList.FirstOrDefault(x => x.Id == l2category.ParentId); } } - result.Add($"{qt.ProductId},{qt.BelongSkuId},{l1category?.Id},{l1category?.Name},{l2category?.Id},{l2category?.Name},{l3category?.Id},{l3category?.Name}"); + result.Add($"{qt.ProductId},{qt_l1category?.CategoryName},{qt_l2category?.CategoryName},{qt_l3category?.CategoryName},{qt.BelongSkuId},{l1category?.Name},{l2category?.Name},{l3category?.Name}"); } - result.Insert(0, "拳探spu,京东sku,京东1级类目Id,京东1级类目名称,京东2级类目Id,京东2级类目名称,京东3级类目Id,京东3级类目名称"); + result.Insert(0, "拳探spu,拳探1级类目,拳探2级类目,拳探3级类目,京东sku,京东1级类目,京东2级类目,京东3级类目"); var path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "ExportQTSpuAndJDSku.csv"); System.IO.File.WriteAllLines(path, result, System.Text.Encoding.UTF8); } From 89b9d5306b6c14231ba3e8d4997fa643c399bf68 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Tue, 30 Jan 2024 12:24:15 +0800 Subject: [PATCH 128/222] =?UTF-8?q?=E7=BD=91=E9=A1=B5=E6=8A=93=E7=BB=8F?= =?UTF-8?q?=E8=90=A5=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BBWYB.PurchaserCapture.csproj | 6 +- BBWYB.PurchaserCapture/EncryptionExtension.cs | 83 ++++ BBWYB.PurchaserCapture/MainWindow.xaml | 9 +- BBWYB.PurchaserCapture/MainWindow.xaml.cs | 110 +++++- BBWYB.PurchaserCapture/Model/Db/Purchaser.cs | 113 ++++++ .../Model/Db/Purchaseschemeproduct.cs | 53 +++ BBWYB.PurchaserCapture/Model/Enums.cs | 359 ++++++++++++++++++ 7 files changed, 721 insertions(+), 12 deletions(-) create mode 100644 BBWYB.PurchaserCapture/EncryptionExtension.cs create mode 100644 BBWYB.PurchaserCapture/Model/Db/Purchaser.cs create mode 100644 BBWYB.PurchaserCapture/Model/Db/Purchaseschemeproduct.cs create mode 100644 BBWYB.PurchaserCapture/Model/Enums.cs diff --git a/BBWYB.PurchaserCapture/BBWYB.PurchaserCapture.csproj b/BBWYB.PurchaserCapture/BBWYB.PurchaserCapture.csproj index a668083..fc64378 100644 --- a/BBWYB.PurchaserCapture/BBWYB.PurchaserCapture.csproj +++ b/BBWYB.PurchaserCapture/BBWYB.PurchaserCapture.csproj @@ -1,7 +1,7 @@  - WinExe + Exe net6.0-windows enable enable @@ -9,9 +9,13 @@ + + + + diff --git a/BBWYB.PurchaserCapture/EncryptionExtension.cs b/BBWYB.PurchaserCapture/EncryptionExtension.cs new file mode 100644 index 0000000..517892e --- /dev/null +++ b/BBWYB.PurchaserCapture/EncryptionExtension.cs @@ -0,0 +1,83 @@ +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace BBWYB.Common.Extensions +{ + public static class EncryptionExtension + { + + public static string Md5Encrypt(this string originStr) + { + using (var md5 = MD5.Create()) + { + return string.Join(string.Empty, md5.ComputeHash(Encoding.UTF8.GetBytes(originStr)).Select(x => x.ToString("x2"))); + } + } + + //AES加密 传入,要加密的串和, 解密key + public static string AESEncrypt(this string input) + { + var key = "dataplatform2019"; + var ivStr = "1012132405963708"; + + var encryptKey = Encoding.UTF8.GetBytes(key); + var iv = Encoding.UTF8.GetBytes(ivStr); //偏移量,最小为16 + using (var aesAlg = Aes.Create()) + { + using (var encryptor = aesAlg.CreateEncryptor(encryptKey, iv)) + { + using (var msEncrypt = new MemoryStream()) + { + using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, + CryptoStreamMode.Write)) + + using (var swEncrypt = new StreamWriter(csEncrypt)) + { + swEncrypt.Write(input); + } + var decryptedContent = msEncrypt.ToArray(); + + return Convert.ToBase64String(decryptedContent); + } + } + } + } + + public static string AESDecrypt(this string cipherText) + { + var fullCipher = Convert.FromBase64String(cipherText); + + var ivStr = "1012132405963708"; + var key = "dataplatform2019"; + + var iv = Encoding.UTF8.GetBytes(ivStr); + var decryptKey = Encoding.UTF8.GetBytes(key); + + using (var aesAlg = Aes.Create()) + { + using (var decryptor = aesAlg.CreateDecryptor(decryptKey, iv)) + { + string result; + using (var msDecrypt = new MemoryStream(fullCipher)) + { + using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) + { + using (var srDecrypt = new StreamReader(csDecrypt)) + { + result = srDecrypt.ReadToEnd(); + } + } + } + + return result; + } + } + } + + public static string Base64Encrypt(this string originStr) + { + return Convert.ToBase64String(Encoding.UTF8.GetBytes(originStr)); + } + } +} diff --git a/BBWYB.PurchaserCapture/MainWindow.xaml b/BBWYB.PurchaserCapture/MainWindow.xaml index a08f3b2..afee5af 100644 --- a/BBWYB.PurchaserCapture/MainWindow.xaml +++ b/BBWYB.PurchaserCapture/MainWindow.xaml @@ -6,7 +6,12 @@ xmlns:local="clr-namespace:BBWYB.PurchaserCapture" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> - - + + + + + + + public partial class MainWindow : Window { + private IFreeSql fsql; + private WebView2 wb2; + public MainWindow() { InitializeComponent(); + + fsql = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwyb;charset=utf8;sslmode=none;").Build(); + this.Loaded += MainWindow_Loaded; + } + + private async void MainWindow_Loaded(object sender, RoutedEventArgs e) + { + wb2 = new WebView2(); + grid.Children.Add(wb2); + var wb2Setting = CoreWebView2Environment.CreateAsync(userDataFolder: io.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "AdvUnion.Capturer")).Result; + wb2.CoreWebView2InitializationCompleted += Wb2_CoreWebView2InitializationCompleted; + await wb2.EnsureCoreWebView2Async(wb2Setting); + wb2.CoreWebView2.AddWebResourceRequestedFilter("*", CoreWebView2WebResourceContext.All); + wb2.CoreWebView2.WebResourceResponseReceived += CoreWebView2_WebResourceResponseReceived; + wb2.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested; + } + + private async void CoreWebView2_WebResourceResponseReceived(object? sender, CoreWebView2WebResourceResponseReceivedEventArgs e) + { + if (e.Request.Method.ToUpper() != "GET" || + !e.Request.Uri.StartsWith("https://h5api.m.1688.com/h5/mtop.alibaba.alisite.cbu.server.moduleasyncservice") || + !e.Request.Uri.Contains("wp_pc_common_header")) + { + Console.WriteLine($"不满足URL规则,已忽略 {e.Request.Uri}"); + return; + } + if (e.Response.StatusCode != 200) + { + Console.WriteLine($"HttpCode {e.Response.StatusCode},已忽略 {e.Request.Uri}"); + return; + } + var stream = await e.Response.GetContentAsync(); + var sr = new StreamReader(stream); + var content = sr.ReadToEnd(); + sr.Dispose(); + var match = Regex.Match(content, "\"bizTypeName\":\\s?\"(.+)\","); + if (!match.Success) + { + Console.WriteLine($"bizTypeName解析失败,已忽略 {e.Request.Uri}"); + return; + } + var bizTypeName = match.Groups[1].Value; + Console.WriteLine(bizTypeName); + } + + private void CoreWebView2_WebResourceRequested(object? sender, CoreWebView2WebResourceRequestedEventArgs e) + { + + + } + + private void Wb2_CoreWebView2InitializationCompleted(object? sender, CoreWebView2InitializationCompletedEventArgs e) + { + + } + + private void SetInfo(string msg) + { + this.Dispatcher.Invoke(() => txtInfo.Text = msg); + } + + private void Navigate(string url) + { + this.Dispatcher.Invoke(() => wb2.CoreWebView2.Navigate(url)); + } + + private void btn_start_Click(object sender, RoutedEventArgs e) + { + Task.Factory.StartNew(() => + { + var sk = "order"; + //var sk = "consign"; + var pspList = fsql.Select() + .InnerJoin((psp2, p) => psp2.PurchaserId == p.Id) + .Where((psp2, p) => string.IsNullOrEmpty(p.ManagmentMode)) + .GroupBy((psp2, p) => psp2.PurchaserId) + .WithTempQuery(g => new { MaxId = g.Max(g.Value.Item1.Id), PurchaserId = g.Key }) + .From() + .InnerJoin((psp2, psp1) => psp2.MaxId == psp1.Id) + .OrderByDescending((psp2, psp1) => psp1.Id) + .ToList((psp2, psp1) => psp1); + + for (var i = 0; i < pspList.Count; i++) + { + SetInfo($"{i + 1}/{pspList.Count}"); + + var url = $"https://detail.1688.com/offer/{pspList[i].PurchaseProductId}.html?clickid={Guid.NewGuid().ToString().Md5Encrypt()}&sessionid={Guid.NewGuid().ToString().Md5Encrypt()}&sk={sk}"; + Navigate(url); + Thread.Sleep(60000); + } + }); } } } \ No newline at end of file diff --git a/BBWYB.PurchaserCapture/Model/Db/Purchaser.cs b/BBWYB.PurchaserCapture/Model/Db/Purchaser.cs new file mode 100644 index 0000000..fe65daa --- /dev/null +++ b/BBWYB.PurchaserCapture/Model/Db/Purchaser.cs @@ -0,0 +1,113 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// 采购商表 + /// + [Table(Name = "purchaser", DisableSyncStructure = true)] + public partial class Purchaser + { + + /// + /// 采购商Id (1688 SellerUserId) + /// + [Column(StringLength = 20, IsPrimary = true, IsNullable = false)] + public string Id { get; set; } + + /// + /// 采购商Id2 (1688 SellerLoginId) + /// + [Column(StringLength = 50)] + public string Id2 { get; set; } + + /// + /// 发货地(产地) + /// + [Column(StringLength = 50)] + public string Location { get; set; } + + /// + /// 经营模式 + /// + [Column(StringLength = 50)] + public string ManagmentMode { get; set; } + + [Column(StringLength = 50)] + public string MemberId { get; set; } + + /// + /// 采购商名称 + /// + [Column(StringLength = 50)] + public string Name { get; set; } + + /// + /// 采购平台 + /// + [Column(MapType = typeof(int?))] + public Enums.Platform? Platform { get; set; } + + /// + /// 商家标签 (超级工厂/实力工厂/实力供应商),可空 + /// + [Column(StringLength = 20)] + public string Tag { get; set; } + + /// + /// 绑定SPU数 + /// + [Column(DbType = "bigint")] + public long? BindingSpuCount { get; set; } = 0; + + /// + /// 采购SPU数 + /// + [Column(DbType = "bigint")] + public long? PurchasedSpuCount { get; set; } = 0; + + /// + /// 绑定SKU数 + /// + [Column(DbType = "bigint")] + public long? BindingSkuCount { get; set; } = 0; + + /// + /// 采购SKU数 + /// + [Column(DbType = "bigint")] + public long? PurchasedSkuCount { get; set; } = 0; + + /// + /// 采购次数/采购订单数 + /// + [Column(DbType = "bigint")] + public long? PurchasedCount { get; set; } = 0; + + /// + /// 采购金额 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? PurchasedAmount { get; set; } = 0.00M; + + /// + /// 上次采购时间 + /// + [Column(DbType = "datetime")] + public DateTime? LastPurchasedTime { get; set; } + + /// + /// 最近90天采购金额 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? Recent90dPurchasedAmount { get; set; } = 0.00M; + + /// + /// 最近90天采购次数 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? Recent90dPurchasedCount { get; set; } = 0.00M; + } + +} diff --git a/BBWYB.PurchaserCapture/Model/Db/Purchaseschemeproduct.cs b/BBWYB.PurchaserCapture/Model/Db/Purchaseschemeproduct.cs new file mode 100644 index 0000000..0aa4ca8 --- /dev/null +++ b/BBWYB.PurchaserCapture/Model/Db/Purchaseschemeproduct.cs @@ -0,0 +1,53 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// 采购方案商品表 + /// + [Table(Name = "purchaseschemeproduct", DisableSyncStructure = true)] + public partial class PurchaseSchemeProduct + { + + /// + /// 采购商品和采购方案的关系Id + /// + [Column(IsPrimary = true)] + public long Id { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + [Column(StringLength = 50, IsNullable = false)] + public string ProductId { get; set; } + + /// + /// 采购商品Id + /// + [Column(StringLength = 50, IsNullable = false)] + public string PurchaseProductId { get; set; } + + /// + /// 采购商品链接 + /// + [Column(StringLength = 100)] + public string PurchaseUrl { get; set; } + + [Column(StringLength = 50, IsNullable = false)] + public string SkuId { get; set; } + + /// + /// Sku采购方案Id + /// + public long SkuPurchaseSchemeId { get; set; } + + /// + /// 采购商Id + /// + [Column(StringLength = 20)] + public string PurchaserId { get; set; } + + } + +} diff --git a/BBWYB.PurchaserCapture/Model/Enums.cs b/BBWYB.PurchaserCapture/Model/Enums.cs new file mode 100644 index 0000000..04e9a1e --- /dev/null +++ b/BBWYB.PurchaserCapture/Model/Enums.cs @@ -0,0 +1,359 @@ +namespace BBWYB.Server.Model +{ + public class Enums + { + /// + /// 电商平台 淘宝 = 0,京东 = 1,阿里巴巴 = 2,拼多多 = 3,微信 = 4,拳探 = 10,抖音 = 11 + /// + public enum Platform + { + 淘宝 = 0, + 京东 = 1, + 阿里巴巴 = 2, + 拼多多 = 3, + 微信 = 4, + 拳探 = 10, + 抖音 = 11 + } + + /// + /// 采购方式 线上采购 = 0,关联外部单 = 1,手动下单 = 2 + /// + public enum PurchaseMethod + { + 线上采购 = 0, + 关联外部单 = 1, + 手动下单 = 2 + } + + /// + /// 采购单模式 批发 = 0,代发 = 1 + /// + public enum PurchaseOrderMode + { + 批发 = 0, + 代发 = 1 + } + + /// + /// 仓储类型 + /// + public enum StorageType + { + 京仓 = 0, + 云仓 = 1, + 本地自发 = 2, + 代发 = 3, + SD = 4 + } + + /// + /// 订单类型 + /// + public enum OrderType + { + #region JD订单类型 + SOP = 22, + LOC = 75, + FBP = 21 + #endregion + } + + /// + /// 支付方式 + /// + public enum PayType + { + 货到付款 = 1, + 邮局汇款 = 2, + 自提 = 3, + 在线支付 = 4, + 公司转账 = 5, + 银行卡转账 = 6 + } + + /// + /// 订单状态 + /// 待付款 = 0 + /// 等待采购 = 1, 部分采购 = 110 + /// 待发货 = 2, 部分发货 = 120 + /// 待收货 = 3, 部分收货 = 130 + /// 已完成 = 4 + /// 已取消 = 6 + /// 待验收 = 140 + /// 待核算 = 150 + /// + public enum OrderState + { + 待付款 = 0, + 等待采购 = 1, + 部分采购 = 110, + 待发货 = 2, + 部分发货 = 120, + 待收货 = 3, + 部分收货 = 130, + 已完成 = 4, + 已取消 = 6, + 待验收 = 140, + 待核算 = 150 + } + + /// + /// 采购单状态 待发货 = 0, 部分发货=1, 待收货 = 10, 部分收货=11, 已签收 = 20, 已取消 = 100 + /// + public enum PurchaseOrderState + { + 待发货 = 0, + 部分发货 = 1, + 待收货 = 10, + 部分收货 = 11, + 已签收 = 20, + 已取消 = 100 + } + + /// + /// 刷单类型 + /// + public enum SDType + { + 自刷 = 0, + 其他 = 1, + 京礼金 = 2, + 刷单组 = 3 + } + + /// + /// 订单同步任务状态 + /// + public enum OrderSyncState + { + Running = 0, + End = 1 + } + + public enum PayChannelType + { + 支付宝 = 0, + 微信 = 1, + 银行卡 = 2 + } + + /// + /// 服务单处理结果 + /// + public enum ServiceResult + { + 退货 = 0, + 换新 = 1, + 原返 = 2, + 线下换新 = 3, + 维修 = 4, + 商品补发 = 5, + 仅退款 = 6, + SD退货 = 7 + } + + /// + /// 商品处理方式 + /// + public enum ProductResult + { + 一件代发_退回厂家 = 0, + 退回齐越仓 = 1, + 退回京仓 = 2, + 退回云仓 = 3, + 客户无退货 = 4 + } + + /// + /// 商品情况 + /// + public enum ProductHealth + { + 可二次销售 = 0, + 残次品_无法二次销售 = 1, + 厂家退货退款 = 2, + 客户无退货 = 3, + 破损 = 4 + } + + /// + /// 排序时间类型 ModifyTime = 0, StartTime = 1 + /// + public enum SortTimeType + { + ModifyTime = 0, StartTime = 1 + } + + /// + /// 支付账单类型 + /// + public enum PayBillType + { + 支付宝 = 0, + 微信 = 1, + 银行卡 = 2 + } + + + /// + /// 资金类型 + /// + public enum AuditCapitalType + { + 当月商品采购 = 0, + 当月商品退款 = 1, + 上月商品采购 = 2, + 上月商品退款 = 3, + 批量采购商品 = 4, + 采购运费 = 5, + 入仓运费 = 6, + 售后成本 = 7, + 发票点数 = 8, + 快递单号 = 9, + 诚e赊还款 = 10, + 空单号 = 11, + 购买刷单号 = 12, + 手机费 = 13, + 质检报告 = 14, + 备用金转入 = 15, + 平台补贴 = 16, + 快递赔付 = 17, + 自定义 = 18, + 备用金充值 = 19 + } + + /// + /// 京东仓库类型 1商家仓 2京东仓 + /// + public enum StockType + { + 商家仓 = 1, 京仓 = 2 + } + + /// + /// 仓库状态 0暂停,1使用 + /// + public enum StockStatus + { + 暂停 = 0, 使用 = 1 + } + + /// + /// SKU库存周期 暂无周期=0,增长期=1,稳定期=2,衰退期=3 + /// + public enum SkuStockNumCycleType + { + 暂无周期 = 0, + 增长期 = 1, + 稳定期 = 2, + 衰退期 = 3 + } + + /// + /// 司南周期 暂无周期 = -1,成长加速期 = 0,成熟利润期 = 1,稳定日销期 = 2,策马奔腾期 = 3 + /// + public enum SiNanCycleType + { + 暂无周期 = -1, + 成长加速期 = 0, + 成熟利润期 = 1, + 稳定日销期 = 2, + 策马奔腾期 = 3 + } + + /// + /// 促销任务状态 等待 = 0,进行中 = 1,已完成 = 2, 已停止 = 3 + /// + public enum PromitionTaskStatus + { + 等待 = 0, + 进行中 = 1, + 已完成 = 2, + 已停止 = 3 + } + + /// + /// AppKey类型 全类型 = 0, 订单管理 = 1, 商品管理 = 2 + /// + public enum AppKeyType + { + 全类型 = 0, 订单管理 = 1, 商品管理 = 2 + } + + /// + /// 采购商品API模式 Spider = 0,OneBound = 1 + /// + public enum PurchaseProductAPIMode + { + Spider = 0, + OneBound = 1 + } + + /// + /// 打包配置状态 待配置 = 0,已配置 = 1,需修改 = 2 + /// + public enum PackConfigState + { + 待配置 = 0, + 已配置 = 1, + 需修改 = 2 + } + + /// + /// 入仓类型 (发回齐越 = 0, 厂商代发入仓 = 1,其他仓不包装 = 2) + /// + public enum IntoStoreType + { + 发回齐越 = 0, 厂商代发入仓 = 1, 其他仓不包装 = 2 + } + + /// + /// 限时任务类型 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11, 待核算任务 = 20, 待议价任务 = 30 + /// + public enum TimeLimitTaskType + { + 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11, 待核算任务 = 20, 待议价任务 = 30 + } + + /// + /// 平价状态 未平价=0 已平价=1 部分平价=2 + /// + public enum AutoEditOrderPriceType + { + 未平价 = 0, 已平价 = 1, 部分平价 = 2 + } + + /// + /// 触发优化原因 首次采购 = 0, 首次优化 = 1, 再次优化 = 2 + /// + public enum TriggerOptimizationReason + { + 首次采购 = 0, 首次优化 = 1, 再次优化 = 2 + } + + /// + /// 厂家经营模式 贸易 = 0, 厂家 = 1 + /// + public enum ManagmentMode + { + 贸易 = 0, 厂家 = 1 + } + + /// + /// 厂家扩展信息类型 主营类目 = 0, 标签 = 1 + /// + public enum PurchaserBasicInfoType + { + 主营类目 = 0, 标签 = 1 + } + + /// + /// 比较运算符 大于 = 0, 小于 = 1, 等于 = 2, 介于 = 3 + /// + public enum ComparisonOperator + { + 大于 = 0, 小于 = 1, 等于 = 2, 介于 = 3 + } + } +} From ba381ca07272b3f44a2e657b5400909969bffa66 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 30 Jan 2024 23:17:01 +0800 Subject: [PATCH 129/222] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=BB=8F=E8=90=A5?= =?UTF-8?q?=E9=BB=98=E5=93=80hi=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.PurchaserCapture/MainWindow.xaml | 6 ++- BBWYB.PurchaserCapture/MainWindow.xaml.cs | 56 ++++++++++++++++---- BBWYB.PurchaserCapture/Model/Db/Purchaser.cs | 12 +++-- BBWYB.Server.Model/Db/Purchaser/Purchaser.cs | 5 ++ 4 files changed, 65 insertions(+), 14 deletions(-) diff --git a/BBWYB.PurchaserCapture/MainWindow.xaml b/BBWYB.PurchaserCapture/MainWindow.xaml index afee5af..9ea773e 100644 --- a/BBWYB.PurchaserCapture/MainWindow.xaml +++ b/BBWYB.PurchaserCapture/MainWindow.xaml @@ -10,8 +10,10 @@ + - - /// [HttpPost] - public void LKInventoryAlertNotification([FromBody]LKInventoryAlertRequest request) + public void LKInventoryAlertNotification([FromBody] BatchLKInventoryAlertRequest request) { skuOptimizationBusiness.LKInventoryAlertNotification(request); } diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 277fa77..f476c5b 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -11,7 +11,7 @@ namespace BBWYB.Server.Business { } - public void LKInventoryAlertNotification(LKInventoryAlertRequest request) + public void LKInventoryAlertNotification(BatchLKInventoryAlertRequest request) { } diff --git a/BBWYB.Server.Model/Dto/Request/LiangKu/LKInventoryAlertRequest.cs b/BBWYB.Server.Model/Dto/Request/LiangKu/BatchLKInventoryAlertRequest.cs similarity index 77% rename from BBWYB.Server.Model/Dto/Request/LiangKu/LKInventoryAlertRequest.cs rename to BBWYB.Server.Model/Dto/Request/LiangKu/BatchLKInventoryAlertRequest.cs index a34cc54..8d57b95 100644 --- a/BBWYB.Server.Model/Dto/Request/LiangKu/LKInventoryAlertRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/LiangKu/BatchLKInventoryAlertRequest.cs @@ -1,5 +1,15 @@ namespace BBWYB.Server.Model.Dto { + public class BatchLKInventoryAlertRequest + { + /// + /// 需求方店铺 + /// + public long ShopId { get; set; } + + public IList Items { get; set; } + } + public class LKInventoryAlertRequest { /// @@ -11,10 +21,5 @@ /// 预估需求量 /// public int PreItemCount { get; set; } - - /// - /// 需求方店铺 - /// - public long ShopId { get; set; } } } From ea9bd3b6e22f5a46edebc983d8f5b17b2e208bab Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 2 Feb 2024 18:18:00 +0800 Subject: [PATCH 134/222] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=B7=A8=E8=B6=8A?= =?UTF-8?q?=E9=80=9F=E8=BF=90=E5=BF=AB=E7=9A=84=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDKAdapter/ExpressCompanyNameConverter.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SDKAdapter/ExpressCompanyNameConverter.cs b/SDKAdapter/ExpressCompanyNameConverter.cs index 0800251..60150c6 100644 --- a/SDKAdapter/ExpressCompanyNameConverter.cs +++ b/SDKAdapter/ExpressCompanyNameConverter.cs @@ -130,7 +130,8 @@ namespace SDKAdapter new LogisticsCompanyRelationship(){SourceName="运通快运",TargetName="运通快运",TargetCode="ytky168"}, new LogisticsCompanyRelationship(){SourceName="汇森速运",TargetName="汇森速运",TargetCode="huisenky"}, new LogisticsCompanyRelationship(){SourceName="丹鸟物流",TargetName="丹鸟物流",TargetCode="danniao"}, - new LogisticsCompanyRelationship(){SourceName="丹鸟",TargetName="丹鸟物流",TargetCode="danniao"} + new LogisticsCompanyRelationship(){SourceName="丹鸟",TargetName="丹鸟物流",TargetCode="danniao"}, + new LogisticsCompanyRelationship(){SourceName="跨越速运",TargetName="跨越速运",TargetCode="kuayue"} }); } From 0000828ed990835c3c036c74d18df27f2d6d6bed Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sat, 3 Feb 2024 00:22:36 +0800 Subject: [PATCH 135/222] =?UTF-8?q?=E8=B7=9D=E7=A6=BB=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E9=A2=84=E8=AD=A6=E5=A4=A9=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/Request/LiangKu/BatchLKInventoryAlertRequest.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/BBWYB.Server.Model/Dto/Request/LiangKu/BatchLKInventoryAlertRequest.cs b/BBWYB.Server.Model/Dto/Request/LiangKu/BatchLKInventoryAlertRequest.cs index 8d57b95..7990a39 100644 --- a/BBWYB.Server.Model/Dto/Request/LiangKu/BatchLKInventoryAlertRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/LiangKu/BatchLKInventoryAlertRequest.cs @@ -21,5 +21,10 @@ /// 预估需求量 /// public int PreItemCount { get; set; } + + /// + /// 距离安全预警天数 + /// + public int SafeWarningRemainingDay { get; set; } } } From c21961b8fa4e989ea67372b3a3488f1c591934ac Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Thu, 15 Feb 2024 22:10:25 +0800 Subject: [PATCH 136/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=95=86=E7=BB=8F?= =?UTF-8?q?=E8=90=A5=E6=A8=A1=E5=BC=8F=E7=88=AC=E8=99=AB=E7=BB=86=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.PurchaserCapture/MainWindow.xaml.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/BBWYB.PurchaserCapture/MainWindow.xaml.cs b/BBWYB.PurchaserCapture/MainWindow.xaml.cs index b3fea3d..17752e2 100644 --- a/BBWYB.PurchaserCapture/MainWindow.xaml.cs +++ b/BBWYB.PurchaserCapture/MainWindow.xaml.cs @@ -134,7 +134,7 @@ namespace BBWYB.PurchaserCapture var sk = "order"; //var sk = "consign"; - var pspList = fsql.Select() + var select = fsql.Select() .InnerJoin((opi, p) => opi.PurchaserId == p.Id) .Where((opi, p) => string.IsNullOrEmpty(p.ManagmentModeText)) .GroupBy((opi, p) => new { p.Id, p.MemberId }) @@ -146,8 +146,9 @@ namespace BBWYB.PurchaserCapture }) .From() .InnerJoin((opi1, ops) => opi1.MaxPoId == ops.PurchaseOrderId) - .GroupBy((opi1, ops) => new { opi1.PurchaserId, opi1.MemberId, opi1.MaxPoId, ops.PurchaseProductId }) - .ToList(g => new { g.Key.PurchaserId, g.Key.MemberId, g.Key.MaxPoId, g.Key.PurchaseProductId }); + .GroupBy((opi1, ops) => new { opi1.PurchaserId, opi1.MemberId, opi1.MaxPoId, ops.PurchaseProductId }); + var sql = select.ToSql(g => new { g.Key.PurchaserId, g.Key.MemberId, g.Key.MaxPoId, g.Key.PurchaseProductId }); + var pspList = select.ToList(g => new { g.Key.PurchaserId, g.Key.MemberId, g.Key.MaxPoId, g.Key.PurchaseProductId }); From e9a2b30d4d8a9e2de59ed72caba23747645bfbe7 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 18 Feb 2024 01:40:05 +0800 Subject: [PATCH 137/222] =?UTF-8?q?=E5=88=9B=E5=BB=BASKU=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Db/Product/Skuoptimizationtask.cs | 70 +++++++++++++++++++ .../LiangKu/BatchLKInventoryAlertRequest.cs | 2 +- 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs new file mode 100644 index 0000000..24f5c93 --- /dev/null +++ b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs @@ -0,0 +1,70 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + [Table(Name = "skuoptimizationtask", DisableSyncStructure = true)] + public partial class SkuOptimizationTask + { + [Column(DbType = "bigint", IsPrimary = true)] + public long Id { get; set; } + + /// + /// 完成优化时间 + /// + [Column(DbType = "datetime")] + public DateTime? CompletionTime { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + public bool? IsOptimizationCompleted { get; set; } = false; + + [Column(StringLength = 50)] + public string JDSkuId { get; set; } + + /// + /// 预估需求量 + /// + [Column(DbType = "int")] + public int? PreItemCount { get; set; } = 0; + + /// + /// 预估采购金额 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? PrePurchasedAmount { get; set; } = 0.00M; + + [Column(StringLength = 50)] + public string ProductId { get; set; } + + /// + /// 距离安全预警天数 + /// + [Column(DbType = "int")] + public int? SafeWarningRemainingDay { get; set; } = 0; + + [Column(DbType = "bigint")] + public long? ShopId { get; set; } + + [Column(StringLength = 50)] + public string ShopName { get; set; } + + [Column(StringLength = 50)] + public string SkuId { get; set; } + + /// + /// 触发优化原因 首次采购 = 0, 首次优化 = 1, 再次优化 = 2 + /// + [Column(DbType = "int", MapType = typeof(int))] + public Enums.TriggerOptimizationReason? TriggerOptimizationReason { get; set; } = 0; + + /// + /// 进行预估的采购成本 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? UsePrePurchasedPrice { get; set; } = 0.00M; + + } + +} diff --git a/BBWYB.Server.Model/Dto/Request/LiangKu/BatchLKInventoryAlertRequest.cs b/BBWYB.Server.Model/Dto/Request/LiangKu/BatchLKInventoryAlertRequest.cs index 7990a39..faa9ad0 100644 --- a/BBWYB.Server.Model/Dto/Request/LiangKu/BatchLKInventoryAlertRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/LiangKu/BatchLKInventoryAlertRequest.cs @@ -1,6 +1,6 @@ namespace BBWYB.Server.Model.Dto { - public class BatchLKInventoryAlertRequest + public class BatchLKInventoryAlertRequest { /// /// 需求方店铺 From 921aacaca486b46228af4a34307965b3bd1a9d62 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 18 Feb 2024 12:39:45 +0800 Subject: [PATCH 138/222] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E9=87=87=E8=B4=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimizationBusiness.cs | 65 ++++++++ .../Sync/OrderSyncBusiness.cs | 153 +++++++++++------- .../Db/Product/Skuoptimizationtask.cs | 8 +- 3 files changed, 165 insertions(+), 61 deletions(-) diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index f476c5b..86fb724 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -15,5 +15,70 @@ namespace BBWYB.Server.Business { } + + /* + var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s => + { + return GetOptimizationReason(s) != null; + }); + if (optimizationSpuSaleList.Count() > 0) + { + foreach (var spuSale in optimizationSpuSaleList) + { + var orderList = waitToCheckSkuSaleOrderList.Where(o => o.OrderSkuList.Any(osku => osku.ProductId == spuSale.ProductId)).ToList(); + foreach (var o in orderList) + { + foreach (var osku in o.OrderSkuList) + { + if (osku.ProductId != spuSale.ProductId) + continue; + + var triggerOptimizationReason = GetOptimizationReason(spuSale); + + #region 更新sku优化标记 + var oskuId = long.Parse(osku.Id); + var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); + if (insertOrderSku != null) + { + insertOrderSku.IsNeedOptimization = 1; + insertOrderSku.TriggerOptimizationReason = triggerOptimizationReason; + } + else + { + //updateOrderSkuIdList_OptimizationFlag.Add(oskuId); + if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(triggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList)) + { + updateOSkuOptimizationFlagByReasonList = new List(); + updateOSkuOptimizationFlagByReasonGroups.Add(triggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList); + } + updateOSkuOptimizationFlagByReasonList.Add(oskuId); + } + #endregion + + #region 创建待议价任务 + if (!dbOptimizationLimitTaskList.Any(t => t.OrderId == o.OrderId && t.SkuId == osku.SkuId)) + { + //判断sku是否首次采购 + var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == osku.SkuId); + + insertTimeLimitTaskList.Add(new TimeLimitTask() + { + Id = idGenerator.NewLong(), + CreateTme = DateTime.Now, + //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), + OrderId = o.OrderId, + OrderSn = o.OrderSn, + ShopId = shopId, + SkuId = osku.SkuId, + TaskType = Enums.TimeLimitTaskType.待议价任务 + }); + } + #endregion + } + } + } + } + */ } } diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 58d3abe..8bb43bd 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -136,6 +136,8 @@ namespace BBWYB.Server.Business.Sync List insertSpuTotalSaleInfoList = new List(); IList updateSpuTotalSaleInfoList = new List(); + + List insertSkuOptimizationTaskList = new List(); #endregion //等待检查sku销量的订单集合 @@ -376,75 +378,106 @@ namespace BBWYB.Server.Business.Sync { if (waitToCheckSkuSaleOrderList.Count() > 0) { - var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s => - { - //if (insertSpuTotalSaleInfoList.Any(x => x.ProductId == s.ProductId)) - // return true; //首次触发 - //if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20) - // return true; //销量大于20 - //if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) - // return true; - //return false; - return GetOptimizationReason(s) != null; - }); - if (optimizationSpuSaleList.Count() > 0) + //没有完成首次采购的spu + var noFisrstPurchasedSpuList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList) + .Where(s => s.IsFirstPurchaseCompleted == false) + .Select(s => s.ProductId) + .ToList(); + if (noFisrstPurchasedSpuList.Count() > 0) { - foreach (var spuSale in optimizationSpuSaleList) + //查询已存在未结束的优化任务 + var dbSkuOptimizationTaskList = fsql.Select() + .Where(t => t.ShopId == shopId && + t.IsOptimizationCompleted == false && + t.TriggerOptimizationReason == Enums.TriggerOptimizationReason.首次采购 && + noFisrstPurchasedSpuList.Contains(t.ProductId)) + .ToList(); + + foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) { - var orderList = waitToCheckSkuSaleOrderList.Where(o => o.OrderSkuList.Any(osku => osku.ProductId == spuSale.ProductId)).ToList(); - foreach (var o in orderList) + foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) { - foreach (var osku in o.OrderSkuList) + if (noFisrstPurchasedSpuList.Contains(waitCheckOrderSku.ProductId) && + !dbSkuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId) && + !insertSkuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId)) { - if (osku.ProductId != spuSale.ProductId) - continue; - - var triggerOptimizationReason = GetOptimizationReason(spuSale); - - #region 更新sku优化标记 - var oskuId = long.Parse(osku.Id); - var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); - if (insertOrderSku != null) - { - insertOrderSku.IsNeedOptimization = 1; - insertOrderSku.TriggerOptimizationReason = triggerOptimizationReason; - } - else + var skuOptimizationTask = new SkuOptimizationTask() { - //updateOrderSkuIdList_OptimizationFlag.Add(oskuId); - if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(triggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList)) - { - updateOSkuOptimizationFlagByReasonList = new List(); - updateOSkuOptimizationFlagByReasonGroups.Add(triggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList); - } - updateOSkuOptimizationFlagByReasonList.Add(oskuId); - } - #endregion - - #region 创建待议价任务 - if (!dbOptimizationLimitTaskList.Any(t => t.OrderId == o.OrderId && t.SkuId == osku.SkuId)) - { - //判断sku是否首次采购 - var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == osku.SkuId); - - insertTimeLimitTaskList.Add(new TimeLimitTask() - { - Id = idGenerator.NewLong(), - CreateTme = DateTime.Now, - //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), - ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), - OrderId = o.OrderId, - OrderSn = o.OrderSn, - ShopId = shopId, - SkuId = osku.SkuId, - TaskType = Enums.TimeLimitTaskType.待议价任务 - }); - } - #endregion + Id = idGenerator.NewLong(), + PreItemCount = 0, + PrePurchasedAmount = 0, + }; + + insertSkuOptimizationTaskList.Add(skuOptimizationTask); } } } } + + + + //var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s => + //{ + // return GetOptimizationReason(s) != null; + //}); + //if (optimizationSpuSaleList.Count() > 0) + //{ + // foreach (var spuSale in optimizationSpuSaleList) + // { + // var orderList = waitToCheckSkuSaleOrderList.Where(o => o.OrderSkuList.Any(osku => osku.ProductId == spuSale.ProductId)).ToList(); + // foreach (var o in orderList) + // { + // foreach (var osku in o.OrderSkuList) + // { + // if (osku.ProductId != spuSale.ProductId) + // continue; + + // var triggerOptimizationReason = GetOptimizationReason(spuSale); + + // #region 更新sku优化标记 + // var oskuId = long.Parse(osku.Id); + // var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); + // if (insertOrderSku != null) + // { + // insertOrderSku.IsNeedOptimization = 1; + // insertOrderSku.TriggerOptimizationReason = triggerOptimizationReason; + // } + // else + // { + // //updateOrderSkuIdList_OptimizationFlag.Add(oskuId); + // if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(triggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList)) + // { + // updateOSkuOptimizationFlagByReasonList = new List(); + // updateOSkuOptimizationFlagByReasonGroups.Add(triggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList); + // } + // updateOSkuOptimizationFlagByReasonList.Add(oskuId); + // } + // #endregion + + // #region 创建待议价任务 + // if (!dbOptimizationLimitTaskList.Any(t => t.OrderId == o.OrderId && t.SkuId == osku.SkuId)) + // { + // //判断sku是否首次采购 + // var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == osku.SkuId); + + // insertTimeLimitTaskList.Add(new TimeLimitTask() + // { + // Id = idGenerator.NewLong(), + // CreateTme = DateTime.Now, + // //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), + // ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), + // OrderId = o.OrderId, + // OrderSn = o.OrderSn, + // ShopId = shopId, + // SkuId = osku.SkuId, + // TaskType = Enums.TimeLimitTaskType.待议价任务 + // }); + // } + // #endregion + // } + // } + // } + //} } } #endregion diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs index 24f5c93..80ab6ca 100644 --- a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs +++ b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs @@ -47,8 +47,14 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "bigint")] public long? ShopId { get; set; } + [Column(DbType = "bigint")] + public long? BelongShopId { get; set; } + + /// + /// 来源店铺名 + /// [Column(StringLength = 50)] - public string ShopName { get; set; } + public string BelongShopName { get; set; } [Column(StringLength = 50)] public string SkuId { get; set; } From 6930eda29ae3d55ae3ad5cda55dc0b869aa310f5 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 18 Feb 2024 23:22:01 +0800 Subject: [PATCH 139/222] =?UTF-8?q?=E5=90=8C=E6=AD=A5hycats?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DataRepairController.cs | 6 + .../DataRepair/DataRepairBusiness.cs | 102 ++++++++++++++ .../Sync/OrderSyncBusiness.cs | 124 +++++++++--------- .../Db/Product/Skuoptimizationtask.cs | 3 - .../Db/TimeLimitTask/TimeLimitTask.cs | 4 + 5 files changed, 171 insertions(+), 68 deletions(-) diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index 2d1562b..01df8b4 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -122,6 +122,12 @@ namespace BBWYB.Server.API.Controllers dataRepairBusiness.RepairPurchaserLocation(); } + [HttpPost] + public void SyncHyCats() + { + dataRepairBusiness.SyncHyCats(); + } + [HttpPost] public void ExportQTSpuAndJDSku() { diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 249e537..3960818 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -7,6 +7,7 @@ using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.HY; using BBWYB.Server.Model.Dto; using FreeSql; +using Newtonsoft.Json.Linq; using SDKAdapter; using SDKAdapter.OperationPlatform.Client; using SDKAdapter.OperationPlatform.Models; @@ -1250,6 +1251,107 @@ namespace BBWYB.Server.Business return location; } + private IDictionary categoryCache = new Dictionary(); + + public (string Id, string parentId, string name, int lev)? GetCategoryById(string categoryId) + { + if (categoryCache.ContainsKey(categoryId)) + return categoryCache[categoryId]; + + var httpResult = restApiService.SendRequest("http://yunding.qiyue666.com", "api/platformsdk/GetCategoryInfoById", new + { + AppKey = "120EA9EC65AB017567D78CC1139EEEA5", + AppSecret = "8a42bc2301e8439b896e99f5475e0a9b", + AppToken = "523ad68443184436965ca4304daff409tizy", + Platform = Enums.Platform.京东, + CategoryId = categoryId + }, null, HttpMethod.Post); + if (httpResult.StatusCode == System.Net.HttpStatusCode.OK) + { + var jtoken = JToken.Parse(httpResult.Content); + string fid = null; + if (jtoken["Data"].Value("fid") != "0") + fid = jtoken["Data"].Value("fid"); + + (string Id, string parentId, string name, int lev)? c = (jtoken["Data"].Value("id"), + fid, + jtoken["Data"].Value("name"), + jtoken["Data"].Value("lev")); + + if (!categoryCache.ContainsKey(c.Value.Id)) + categoryCache.TryAdd(c.Value.Id, c); + return c; + } + return null; + } + + public void SyncHyCats() + { + var l3CategoryIdList = freeSqlMultiDBManager.BBWYCfsql.Select().Where(s => s.CategoryId != null).Distinct().ToList(s => s.CategoryId); + var hycatsList = freeSqlMultiDBManager.HYfsql.Select().ToList(); + + List insertHyCatsList = new List(); + + var count = l3CategoryIdList.Count(); + var index = 1; + foreach (var l3CategoryId in l3CategoryIdList) + { + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"{index}/{count} {l3CategoryId}"); + Console.ResetColor(); + index++; + var l3Info = GetCategoryById(l3CategoryId.Value.ToString()); + if (l3Info != null) + { + if (!hycatsList.Any(x => x.Id == l3Info.Value.Id) && !insertHyCatsList.Any(x => x.Id == l3Info.Value.Id)) + { + insertHyCatsList.Add(new HyCats() + { + Id = l3Info.Value.Id, + IsLeaf = 1, + Level = 3, + Name = l3Info.Value.name, + ParentId = l3Info.Value.parentId + }); + } + + var l2Info = GetCategoryById(l3Info.Value.parentId); + if (l2Info != null) + { + if (!hycatsList.Any(x => x.Id == l2Info.Value.Id) && !insertHyCatsList.Any(x => x.Id == l2Info.Value.Id)) + { + insertHyCatsList.Add(new HyCats() + { + Id = l2Info.Value.Id, + IsLeaf = 0, + Level = 2, + Name = l2Info.Value.name, + ParentId = l2Info.Value.parentId + }); + } + var l1Info = GetCategoryById(l2Info.Value.parentId); + if (l1Info != null) + { + if (!hycatsList.Any(x => x.Id == l1Info.Value.Id) && !insertHyCatsList.Any(x => x.Id == l1Info.Value.Id)) + { + insertHyCatsList.Add(new HyCats() + { + Id = l1Info.Value.Id, + IsLeaf = 0, + Level = 1, + Name = l1Info.Value.name, + ParentId = l1Info.Value.parentId + }); + } + } + } + } + } + + if (insertHyCatsList.Count() > 0) + freeSqlMultiDBManager.HYfsql.Insert(insertHyCatsList).ExecuteAffrows(); + } + public void ExportQTSpuAndJDSku() { var qtlist = fsql.Select() diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 8bb43bd..ec0e545 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -401,83 +401,74 @@ namespace BBWYB.Server.Business.Sync !dbSkuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId) && !insertSkuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId)) { + #region 解析来源店铺数据 + JArray belongSkus = null; + string sourceShopName = string.Empty; + if (!string.IsNullOrEmpty(waitCheckOrder.Extended)) + { + try + { + var jobject = JObject.Parse(waitCheckOrder.Extended); + //dbOrder.SourceSku = jobject.Value("SourceSku"); + sourceShopName = jobject.Value("SourceShopName"); + + if (jobject.ContainsKey("BelongSkus")) + belongSkus = jobject["BelongSkus"] as JArray; + + } + catch (Exception ex) + { + + } + } + #endregion + + #region 创建待优化任务 var skuOptimizationTask = new SkuOptimizationTask() { Id = idGenerator.NewLong(), PreItemCount = 0, PrePurchasedAmount = 0, + IsOptimizationCompleted = false, + CreateTime = DateTime.Now, + SafeWarningRemainingDay = 0, + UsePrePurchasedPrice = 0, + TriggerOptimizationReason = Enums.TriggerOptimizationReason.首次采购, + SkuId = waitCheckOrderSku.SkuId, + ShopId = shopId, + ProductId = waitCheckOrderSku.ProductId, + BelongShopName = sourceShopName, + CompletionTime = null, + JDSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == waitCheckOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty }; insertSkuOptimizationTaskList.Add(skuOptimizationTask); + #endregion + + #region 创建待优化限时任务 + + //判断sku是否首次采购 + var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == waitCheckOrderSku.SkuId); + + insertTimeLimitTaskList.Add(new TimeLimitTask() + { + Id = idGenerator.NewLong(), + CreateTme = DateTime.Now, + //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), + //OrderId = o.OrderId, + //OrderSn = o.OrderSn, + ShopId = shopId, + SkuId = waitCheckOrderSku.SkuId, + TaskType = Enums.TimeLimitTaskType.待议价任务, + TaskId = skuOptimizationTask.Id, + Remark = "首次采购限时任务" + }); + #endregion } } } } - - - - //var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s => - //{ - // return GetOptimizationReason(s) != null; - //}); - //if (optimizationSpuSaleList.Count() > 0) - //{ - // foreach (var spuSale in optimizationSpuSaleList) - // { - // var orderList = waitToCheckSkuSaleOrderList.Where(o => o.OrderSkuList.Any(osku => osku.ProductId == spuSale.ProductId)).ToList(); - // foreach (var o in orderList) - // { - // foreach (var osku in o.OrderSkuList) - // { - // if (osku.ProductId != spuSale.ProductId) - // continue; - - // var triggerOptimizationReason = GetOptimizationReason(spuSale); - - // #region 更新sku优化标记 - // var oskuId = long.Parse(osku.Id); - // var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); - // if (insertOrderSku != null) - // { - // insertOrderSku.IsNeedOptimization = 1; - // insertOrderSku.TriggerOptimizationReason = triggerOptimizationReason; - // } - // else - // { - // //updateOrderSkuIdList_OptimizationFlag.Add(oskuId); - // if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(triggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList)) - // { - // updateOSkuOptimizationFlagByReasonList = new List(); - // updateOSkuOptimizationFlagByReasonGroups.Add(triggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList); - // } - // updateOSkuOptimizationFlagByReasonList.Add(oskuId); - // } - // #endregion - - // #region 创建待议价任务 - // if (!dbOptimizationLimitTaskList.Any(t => t.OrderId == o.OrderId && t.SkuId == osku.SkuId)) - // { - // //判断sku是否首次采购 - // var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == osku.SkuId); - - // insertTimeLimitTaskList.Add(new TimeLimitTask() - // { - // Id = idGenerator.NewLong(), - // CreateTme = DateTime.Now, - // //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), - // ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), - // OrderId = o.OrderId, - // OrderSn = o.OrderSn, - // ShopId = shopId, - // SkuId = osku.SkuId, - // TaskType = Enums.TimeLimitTaskType.待议价任务 - // }); - // } - // #endregion - // } - // } - // } - //} } } #endregion @@ -500,6 +491,9 @@ namespace BBWYB.Server.Business.Sync if (insertTimeLimitTaskList.Count() > 0) fsql.Insert(insertTimeLimitTaskList).ExecuteAffrows(); + if (insertSkuOptimizationTaskList.Count() > 0) + fsql.Insert(insertSkuOptimizationTaskList).ExecuteAffrows(); + if (updateOrderList.Count() > 0) foreach (var update in updateOrderList) update.ExecuteAffrows(); diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs index 80ab6ca..fa32c28 100644 --- a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs +++ b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs @@ -47,9 +47,6 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "bigint")] public long? ShopId { get; set; } - [Column(DbType = "bigint")] - public long? BelongShopId { get; set; } - /// /// 来源店铺名 /// diff --git a/BBWYB.Server.Model/Db/TimeLimitTask/TimeLimitTask.cs b/BBWYB.Server.Model/Db/TimeLimitTask/TimeLimitTask.cs index d325eaf..2cd3874 100644 --- a/BBWYB.Server.Model/Db/TimeLimitTask/TimeLimitTask.cs +++ b/BBWYB.Server.Model/Db/TimeLimitTask/TimeLimitTask.cs @@ -79,6 +79,10 @@ namespace BBWYB.Server.Model.Db [Column(StringLength = 500)] public string Remark { get; set; } + /// + /// 任务Id(待优化任务有效) + /// + public long TaskId { get; set; } } } From e6c27cb1b7ebff70421ae037b13848a61d7c6f66 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Mon, 19 Feb 2024 16:04:24 +0800 Subject: [PATCH 140/222] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=AE=A2=E5=8D=95sku?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/SkuOptimizationController.cs | 10 ++++ .../PurchaseOrder/PurchaseOrderBusiness.cs | 2 +- .../SkuOptimizationBusiness.cs | 53 +++++++++++++++++++ .../Sync/OrderSyncBusiness.cs | 52 +++++++++++++++--- 4 files changed, 108 insertions(+), 9 deletions(-) diff --git a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs index 74757b8..8c0b93e 100644 --- a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs +++ b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs @@ -23,5 +23,15 @@ namespace BBWYB.Server.API.Controllers { skuOptimizationBusiness.LKInventoryAlertNotification(request); } + + /// + /// 完成待优化任务 (相同spu的优化任务会一起完成) + /// + /// 待优化任务Id + [HttpPost("{taskId}")] + public void CompleteOptimization([FromRoute]long taskId) + { + skuOptimizationBusiness.CompleteOptimization(taskId); + } } } diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 2c6e095..1554790 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -682,7 +682,7 @@ namespace BBWYB.Server.Business } #endregion - #region 创建优化历史 + #region 创建优化历史 { //本批次在线采购的订单sku集合 var allBelongSkuIdList = request.CargoParamGroupList.SelectMany(cg => cg.CargoParamList.Select(c => c.BelongSkuId)).Distinct().ToList(); diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 86fb724..160fabf 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -1,5 +1,7 @@ using BBWYB.Common.Log; using BBWYB.Common.Models; +using BBWYB.Server.Model; +using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; using Yitter.IdGenerator; @@ -16,6 +18,57 @@ namespace BBWYB.Server.Business } + /// + /// 完成优化 + /// + /// + public void CompleteOptimization(long taskId) + { + var optimazaionTask = fsql.Select(taskId).ToOne(); + if (optimazaionTask == null) + throw new BusinessException("优化任务不存在"); + if (optimazaionTask.IsOptimizationCompleted == true) + throw new BusinessException("优化任务已完成"); + + var optimazationTaskIdList = fsql.Select() + .Where(t => t.ProductId == optimazaionTask.ProductId && t.IsOptimizationCompleted == false) + .ToList(t => t.Id); + + + var spuSaleInfo = fsql.Select(optimazaionTask.ProductId).ToOne(); + if (spuSaleInfo == null) + + throw new BusinessException($"未找到spu{optimazaionTask.ProductId}销量"); + + var updateSpuSaleInfo = fsql.Update(optimazaionTask.ProductId) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == false, s => s.IsFirstPurchaseCompleted, true) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == false, s => s.FirstPurchaseCompletedItemCount == s.ItemCount) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == true && + spuSaleInfo.IsFirstOptimizationCompleted == false, s => s.IsFirstOptimizationCompleted, true) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == true && + spuSaleInfo.IsFirstOptimizationCompleted == false, s => s.FirstOptimizationCompletedItemCount == s.ItemCount) + .Set(s => s.LastOptimizationItemCount == s.ItemCount) + .Set(s => s.LastOptimizationTime, DateTime.Now) + .Set(s => s.UpdateTime, DateTime.Now); + + fsql.Transaction(() => + { + fsql.Update().Set(t => t.IsOptimizationCompleted, true) + .Set(t => t.CompletionTime, DateTime.Now) + .Where(t => optimazationTaskIdList.Contains(t.Id) && t.IsOptimizationCompleted == false) + .ExecuteAffrows(); + + fsql.Update().Set(t => t.CompletionTime, DateTime.Now) + .Set(t => t.IsTimely == (DateTime.Now < t.ExpirationTime ? true : false)) + .Where(t => optimazationTaskIdList.Contains(t.TaskId) && + t.CompletionTime == null && + t.TaskType == Enums.TimeLimitTaskType.待议价任务) + .ExecuteAffrows(); + + updateSpuSaleInfo.ExecuteAffrows(); + }); + } + /* var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s => { diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index ec0e545..3640fb7 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -378,21 +378,24 @@ namespace BBWYB.Server.Business.Sync { if (waitToCheckSkuSaleOrderList.Count() > 0) { + var skuIdList = waitToCheckSkuSaleOrderList.SelectMany(o => o.OrderSkuList.Select(osku => osku.SkuId)).Distinct().ToList(); + //没有完成首次采购的spu var noFisrstPurchasedSpuList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList) .Where(s => s.IsFirstPurchaseCompleted == false) .Select(s => s.ProductId) .ToList(); + + //查询已存在未结束的优化任务 + var dbSkuOptimizationTaskList = fsql.Select() + .Where(t => t.ShopId == shopId && + t.IsOptimizationCompleted == false && + skuIdList.Contains(t.SkuId)) + .ToList(); + + if (noFisrstPurchasedSpuList.Count() > 0) { - //查询已存在未结束的优化任务 - var dbSkuOptimizationTaskList = fsql.Select() - .Where(t => t.ShopId == shopId && - t.IsOptimizationCompleted == false && - t.TriggerOptimizationReason == Enums.TriggerOptimizationReason.首次采购 && - noFisrstPurchasedSpuList.Contains(t.ProductId)) - .ToList(); - foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) { foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) @@ -469,6 +472,39 @@ namespace BBWYB.Server.Business.Sync } } } + + #region 更新订单sku优化标记 + var allSkuOptimizationTaskList = dbSkuOptimizationTaskList.Union(insertSkuOptimizationTaskList); + foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) + { + foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) + { + var task = allSkuOptimizationTaskList.FirstOrDefault(t => t.SkuId == waitCheckOrderSku.SkuId); + if (task != null) + { + #region 更新sku优化标记 + var oskuId = long.Parse(waitCheckOrderSku.SkuId); + var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); + if (insertOrderSku != null) + { + insertOrderSku.IsNeedOptimization = 1; + insertOrderSku.TriggerOptimizationReason = task.TriggerOptimizationReason; + } + else + { + //updateOrderSkuIdList_OptimizationFlag.Add(oskuId); + if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(task.TriggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList)) + { + updateOSkuOptimizationFlagByReasonList = new List(); + updateOSkuOptimizationFlagByReasonGroups.Add(task.TriggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList); + } + updateOSkuOptimizationFlagByReasonList.Add(oskuId); + } + #endregion + } + } + } + #endregion } } #endregion From a08268ffd76458553ae0f44991e8b30c7a497bc7 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Wed, 28 Feb 2024 03:33:03 +0800 Subject: [PATCH 141/222] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/SkuOptimizationController.cs | 12 +- .../SkuOptimizationBusiness.cs | 165 ++++++++---------- .../Sync/OrderSyncBusiness.cs | 31 +++- .../Vender/VenderBusiness.cs | 6 + BBWYB.Server.Model/Db/MDS/User.cs | 132 ++++++++++++++ BBWYB.Server.Model/Db/MDS/Userdepartment.cs | 56 ++++++ .../Db/Product/Skuoptimizationchildtask.cs | 44 +++++ .../Response/MDS/UserDepartmentResponse.cs | 8 + 8 files changed, 360 insertions(+), 94 deletions(-) create mode 100644 BBWYB.Server.Model/Db/MDS/User.cs create mode 100644 BBWYB.Server.Model/Db/MDS/Userdepartment.cs create mode 100644 BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs create mode 100644 BBWYB.Server.Model/Dto/Response/MDS/UserDepartmentResponse.cs diff --git a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs index 8c0b93e..61d2086 100644 --- a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs +++ b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs @@ -1,4 +1,5 @@ -using BBWYB.Server.Business; +using BBWYB.Common.Models; +using BBWYB.Server.Business; using BBWYB.Server.Model.Dto; using Microsoft.AspNetCore.Mvc; @@ -25,13 +26,16 @@ namespace BBWYB.Server.API.Controllers } /// - /// 完成待优化任务 (相同spu的优化任务会一起完成) + /// 完成待优化任务(当所有议价组的子任务优化完成, 所属待优化任务才会完成) /// /// 待优化任务Id [HttpPost("{taskId}")] - public void CompleteOptimization([FromRoute]long taskId) + public void CompleteOptimization([FromRoute] long taskId) { - skuOptimizationBusiness.CompleteOptimization(taskId); + var userId = GetUserId(); + if (string.IsNullOrEmpty(userId)) + throw new BusinessException("未从token中获取到userId"); + skuOptimizationBusiness.CompleteOptimization(taskId, userId); } } } diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 160fabf..9e34ac6 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -3,14 +3,17 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; +using FreeSql; using Yitter.IdGenerator; namespace BBWYB.Server.Business { public class SkuOptimizationBusiness : BaseBusiness, IDenpendency { - public SkuOptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) : base(fsql, nLogManager, idGenerator) + private FreeSqlMultiDBManager fsqlManager; + public SkuOptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager) : base(fsql, nLogManager, idGenerator) { + this.fsqlManager = fsqlManager; } public void LKInventoryAlertNotification(BatchLKInventoryAlertRequest request) @@ -22,25 +25,61 @@ namespace BBWYB.Server.Business /// 完成优化 /// /// - public void CompleteOptimization(long taskId) + /// + /// + public void CompleteOptimization(long taskId, string userId) { + #region 验证待议价任务 var optimazaionTask = fsql.Select(taskId).ToOne(); if (optimazaionTask == null) throw new BusinessException("优化任务不存在"); if (optimazaionTask.IsOptimizationCompleted == true) throw new BusinessException("优化任务已完成"); - var optimazationTaskIdList = fsql.Select() - .Where(t => t.ProductId == optimazaionTask.ProductId && t.IsOptimizationCompleted == false) - .ToList(t => t.Id); - + #endregion + + #region 获取用户和部门信息 + var user = fsqlManager.MDSfsql.Select(userId).ToOne(); + if (user == null) + throw new BusinessException("用户不存在"); + if (string.IsNullOrEmpty(user.DepartmentId)) + throw new BusinessException("该用户没有归属部门"); + var department = fsqlManager.MDSfsql.Select(user.DepartmentId).ToOne(); + if (department == null) + throw new BusinessException("部门不存在"); + if (department.ParentDepartmentId != "1760971468360912896") + throw new BusinessException("该用户所在部门不属于议价组"); + #endregion + + #region 验证待议价子任务 + var optimazaionChildTaskList = fsql.Select() + .Where(sc => sc.OptimizationTaskId == optimazaionTask.Id) + .ToList(); + var currentOptimazaionChildTaskList = optimazaionChildTaskList.FirstOrDefault(sc => sc.BelongTeamId == department.Id); + if (currentOptimazaionChildTaskList == null) + throw new BusinessException($"未找到议价组{department.DepartmentName}的议价子任务"); + if (currentOptimazaionChildTaskList.IsOptimizationCompleted == true) + throw new BusinessException($"{department.DepartmentName}的议价子任务已完成"); + + currentOptimazaionChildTaskList.IsOptimizationCompleted = true; + #endregion + + IUpdate updateChildTask = null; + IUpdate updateTask = null; + IUpdate updateSpuSaleInfo = null; + IUpdate updateTimeLimitTask = null; + + if (!optimazaionChildTaskList.Any(sc => sc.IsOptimizationCompleted == false)) + { + //全部完成 - var spuSaleInfo = fsql.Select(optimazaionTask.ProductId).ToOne(); - if (spuSaleInfo == null) + #region 更新spu销量表 + var spuSaleInfo = fsql.Select(optimazaionTask.ProductId).ToOne(); + if (spuSaleInfo == null) - throw new BusinessException($"未找到spu{optimazaionTask.ProductId}销量"); + throw new BusinessException($"未找到spu{optimazaionTask.ProductId}销量"); - var updateSpuSaleInfo = fsql.Update(optimazaionTask.ProductId) + updateSpuSaleInfo = fsql.Update(optimazaionTask.ProductId) .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == false, s => s.IsFirstPurchaseCompleted, true) .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == false, s => s.FirstPurchaseCompletedItemCount == s.ItemCount) .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == true && @@ -50,88 +89,36 @@ namespace BBWYB.Server.Business .Set(s => s.LastOptimizationItemCount == s.ItemCount) .Set(s => s.LastOptimizationTime, DateTime.Now) .Set(s => s.UpdateTime, DateTime.Now); - + #endregion + + #region 更新待议价任务 + updateTask = fsql.Update(optimazaionTask.Id) + .Set(t => t.IsOptimizationCompleted, true) + .Set(t => t.CompletionTime, DateTime.Now); + #endregion + + #region 更新待议价限时任务 + updateTimeLimitTask = fsql.Update().Set(t => t.CompletionTime, DateTime.Now) + .Set(t => t.IsTimely == (DateTime.Now < t.ExpirationTime ? true : false)) + .Where(t => t.TaskId == optimazaionTask.Id && + t.CompletionTime == null && + t.TaskType == Enums.TimeLimitTaskType.待议价任务); + #endregion + } + + #region 更新待议价子任务 + updateChildTask = fsql.Update(currentOptimazaionChildTaskList.Id) + .Set(sc => sc.IsOptimizationCompleted, true) + .Set(sc => sc.CompletionTime, DateTime.Now); + #endregion + fsql.Transaction(() => { - fsql.Update().Set(t => t.IsOptimizationCompleted, true) - .Set(t => t.CompletionTime, DateTime.Now) - .Where(t => optimazationTaskIdList.Contains(t.Id) && t.IsOptimizationCompleted == false) - .ExecuteAffrows(); - - fsql.Update().Set(t => t.CompletionTime, DateTime.Now) - .Set(t => t.IsTimely == (DateTime.Now < t.ExpirationTime ? true : false)) - .Where(t => optimazationTaskIdList.Contains(t.TaskId) && - t.CompletionTime == null && - t.TaskType == Enums.TimeLimitTaskType.待议价任务) - .ExecuteAffrows(); - - updateSpuSaleInfo.ExecuteAffrows(); + updateChildTask?.ExecuteAffrows(); + updateTask?.ExecuteAffrows(); + updateSpuSaleInfo?.ExecuteAffrows(); + updateTimeLimitTask?.ExecuteAffrows(); }); } - - /* - var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s => - { - return GetOptimizationReason(s) != null; - }); - if (optimizationSpuSaleList.Count() > 0) - { - foreach (var spuSale in optimizationSpuSaleList) - { - var orderList = waitToCheckSkuSaleOrderList.Where(o => o.OrderSkuList.Any(osku => osku.ProductId == spuSale.ProductId)).ToList(); - foreach (var o in orderList) - { - foreach (var osku in o.OrderSkuList) - { - if (osku.ProductId != spuSale.ProductId) - continue; - - var triggerOptimizationReason = GetOptimizationReason(spuSale); - - #region 更新sku优化标记 - var oskuId = long.Parse(osku.Id); - var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); - if (insertOrderSku != null) - { - insertOrderSku.IsNeedOptimization = 1; - insertOrderSku.TriggerOptimizationReason = triggerOptimizationReason; - } - else - { - //updateOrderSkuIdList_OptimizationFlag.Add(oskuId); - if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(triggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList)) - { - updateOSkuOptimizationFlagByReasonList = new List(); - updateOSkuOptimizationFlagByReasonGroups.Add(triggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList); - } - updateOSkuOptimizationFlagByReasonList.Add(oskuId); - } - #endregion - - #region 创建待议价任务 - if (!dbOptimizationLimitTaskList.Any(t => t.OrderId == o.OrderId && t.SkuId == osku.SkuId)) - { - //判断sku是否首次采购 - var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == osku.SkuId); - - insertTimeLimitTaskList.Add(new TimeLimitTask() - { - Id = idGenerator.NewLong(), - CreateTme = DateTime.Now, - //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), - ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), - OrderId = o.OrderId, - OrderSn = o.OrderSn, - ShopId = shopId, - SkuId = osku.SkuId, - TaskType = Enums.TimeLimitTaskType.待议价任务 - }); - } - #endregion - } - } - } - } - */ } } diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 3640fb7..4a86044 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -20,7 +20,13 @@ namespace BBWYB.Server.Business.Sync private List timeLimitTaskTypes; private TimeLimitRules timeLimitRules; - public OrderSyncBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, VenderBusiness venderBusiness, TaskSchedulerManager taskSchedulerManager, TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator) + public OrderSyncBusiness(IFreeSql fsql, + NLogManager nLogManager, + IIdGenerator idGenerator, + OP_PlatformClientFactory opPlatformClientFactory, + VenderBusiness venderBusiness, + TaskSchedulerManager taskSchedulerManager, + TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator) { this.opPlatformClientFactory = opPlatformClientFactory; this.venderBusiness = venderBusiness; @@ -138,6 +144,7 @@ namespace BBWYB.Server.Business.Sync IList updateSpuTotalSaleInfoList = new List(); List insertSkuOptimizationTaskList = new List(); + List insertSkuOptimizationChildTaskList = new List(); #endregion //等待检查sku销量的订单集合 @@ -448,6 +455,25 @@ namespace BBWYB.Server.Business.Sync insertSkuOptimizationTaskList.Add(skuOptimizationTask); #endregion + #region 创建待优化子任务 + { + var yijiagroups = venderBusiness.GetYiJiaGroup(); + foreach (var department in yijiagroups) + { + var skuOptimizationChildTask = new SkuOptimizationChildTask() + { + Id = idGenerator.NewLong(), + BelongTeamId = department.Id, + BelongTeamName = department.DepartmentName, + CompletionTime = null, + IsOptimizationCompleted = false, + OptimizationTaskId = skuOptimizationTask.Id + }; + insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask); + } + } + #endregion + #region 创建待优化限时任务 //判断sku是否首次采购 @@ -530,6 +556,9 @@ namespace BBWYB.Server.Business.Sync if (insertSkuOptimizationTaskList.Count() > 0) fsql.Insert(insertSkuOptimizationTaskList).ExecuteAffrows(); + if (insertSkuOptimizationChildTaskList.Count() > 0) + fsql.Insert(insertSkuOptimizationChildTaskList).ExecuteAffrows(); + if (updateOrderList.Count() > 0) foreach (var update in updateOrderList) update.ExecuteAffrows(); diff --git a/BBWYB.Server.Business/Vender/VenderBusiness.cs b/BBWYB.Server.Business/Vender/VenderBusiness.cs index e2ff359..9c54440 100644 --- a/BBWYB.Server.Business/Vender/VenderBusiness.cs +++ b/BBWYB.Server.Business/Vender/VenderBusiness.cs @@ -1,6 +1,7 @@ using BBWYB.Common.Log; using BBWYB.Common.Models; using BBWYB.Server.Model; +using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.Mds; using BBWYB.Server.Model.Db.MDS; using BBWYB.Server.Model.Dto; @@ -40,6 +41,11 @@ namespace BBWYB.Server.Business .ToList(); } + public IList GetYiJiaGroup() + { + return fsqlManager.MDSfsql.Select().Where(d => d.ParentDepartmentId == "1760971468360912896").ToList(); + } + public string SaveShopSetting(ShopSettingRequest shopSettingRequest) { diff --git a/BBWYB.Server.Model/Db/MDS/User.cs b/BBWYB.Server.Model/Db/MDS/User.cs new file mode 100644 index 0000000..5de246a --- /dev/null +++ b/BBWYB.Server.Model/Db/MDS/User.cs @@ -0,0 +1,132 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + [Table(Name = "user", DisableSyncStructure = true)] + public partial class User + { + + /// + /// 主键 + /// + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string Id { get; set; } + + /// + /// 业务ID列表 + /// + [Column(StringLength = -2)] + public string BusinessIds { get; set; } + + /// + /// 创建时间 + /// + [Column(DbType = "datetime")] + public DateTime CreateTime { get; set; } + + /// + /// 创建人Id + /// + [Column(StringLength = 50)] + public string CreatorId { get; set; } + + /// + /// 否已删除 + /// + [Column(DbType = "tinyint(4)")] + public sbyte Deleted { get; set; } + + /// + /// 主部门ID + /// + [Column(StringLength = 50)] + public string DepartmentId { get; set; } + + /// + /// 即将过期积分 + /// + + public int? FailureIntegral { get; set; } + + /// + /// 当日冻结积分 + /// + + public int? FreezeIntegral { get; set; } + + /// + /// 是否冻结 + /// + [Column(DbType = "tinyint(4)")] + public sbyte? IsFreeze { get; set; } + + /// + /// 最后积分检测日期 + /// + [Column(DbType = "datetime")] + public DateTime? LastIntegralDate { get; set; } + + /// + /// 登录IP + /// + + public string LoginIp { get; set; } + + /// + /// 最大任务数量 + /// + + public int? MaxPriceTaskCount { get; set; } + + /// + /// 角色ID + /// + [Column(StringLength = 50)] + public string RoleId { get; set; } + + /// + /// 子部门列表 + /// + [Column(StringLength = -1)] + public string SonDepartmentIds { get; set; } + + /// + /// 任务重复检测更新 + /// + [Column(DbType = "datetime")] + public DateTime? UpdateRepeatDate { get; set; } + + /// + /// 用户经验值 + /// + + public int? UserExp { get; set; } + + /// + /// 用户积分 + /// + + public int? UserIntegral { get; set; } + + /// + /// 用户名 + /// + + public string UserName { get; set; } + + /// + /// 花名 + /// + + public string UserNick { get; set; } + + /// + /// 用户密码 + /// + + public string UserPwd { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Db/MDS/Userdepartment.cs b/BBWYB.Server.Model/Db/MDS/Userdepartment.cs new file mode 100644 index 0000000..6f5ad8d --- /dev/null +++ b/BBWYB.Server.Model/Db/MDS/Userdepartment.cs @@ -0,0 +1,56 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// 团队 + /// + [Table(Name = "userdepartment", DisableSyncStructure = true)] + public partial class Userdepartment + { + + /// + /// 主键 + /// + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string Id { get; set; } + + /// + /// 管理ID集合 + /// + [Column(StringLength = -1)] + public string AdminUserIds { get; set; } + + /// + /// 创建时间 + /// + [Column(DbType = "datetime")] + public DateTime CreateTime { get; set; } + + /// + /// 创建人Id + /// + [Column(StringLength = 50)] + public string CreatorId { get; set; } + + /// + /// 否已删除 + /// + [Column(DbType = "tinyint(4)")] + public sbyte Deleted { get; set; } + + /// + /// 部门名称 + /// + public string DepartmentName { get; set; } + + /// + /// 上级部门 + /// + [Column(StringLength = 50)] + public string ParentDepartmentId { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs new file mode 100644 index 0000000..f596f33 --- /dev/null +++ b/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs @@ -0,0 +1,44 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + [Table(Name = "skuoptimizationchildtask", DisableSyncStructure = true)] + public partial class SkuOptimizationChildTask + { + + [Column(DbType = "bigint", IsPrimary = true)] + public long Id { get; set; } + + /// + /// 团队Id (议价组Id) + /// + [Column(StringLength = 50)] + public string BelongTeamId { get; set; } + + /// + /// 团队Name (议价组Name) + /// + [Column(StringLength = 50)] + public string BelongTeamName { get; set; } + + /// + /// 完成时间 + /// + [Column(DbType = "datetime")] + public DateTime? CompletionTime { get; set; } + + /// + /// 是否优化完成 + /// + public bool? IsOptimizationCompleted { get; set; } = false; + + /// + /// 优化任务Id + /// + [Column(DbType = "bigint")] + public long? OptimizationTaskId { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Dto/Response/MDS/UserDepartmentResponse.cs b/BBWYB.Server.Model/Dto/Response/MDS/UserDepartmentResponse.cs new file mode 100644 index 0000000..1f4c667 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/MDS/UserDepartmentResponse.cs @@ -0,0 +1,8 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Model.Dto +{ + public class UserDepartmentResponse : Userdepartment + { + } +} From d5d1dc9ab9680152e9d670ef4424fc8c45e83205 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 28 Feb 2024 17:39:50 +0800 Subject: [PATCH 142/222] =?UTF-8?q?=E8=89=AF=E5=BA=93=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimizationBusiness.cs | 68 ++++++++- .../Db/BBWY/PurchaseOrderSku.cs | 130 ++++++++++++++++++ 2 files changed, 197 insertions(+), 1 deletion(-) create mode 100644 BBWYB.Server.Model/Db/BBWY/PurchaseOrderSku.cs diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 9e34ac6..3308f91 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -2,6 +2,7 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Db.BBWY; using BBWYB.Server.Model.Dto; using FreeSql; using Yitter.IdGenerator; @@ -16,11 +17,76 @@ namespace BBWYB.Server.Business this.fsqlManager = fsqlManager; } + public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s) + { + if (s.IsFirstPurchaseCompleted == false) + return Enums.TriggerOptimizationReason.首次采购; + if (s.IsFirstPurchaseCompleted == true && + s.IsFirstOptimizationCompleted == false && + s.ItemCount - s.FirstPurchaseCompletedItemCount >= 20) + return Enums.TriggerOptimizationReason.首次优化; + if (s.IsFirstOptimizationCompleted == true && s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) + return Enums.TriggerOptimizationReason.再次优化; + return null; + } + public void LKInventoryAlertNotification(BatchLKInventoryAlertRequest request) { + #region 确定JDSKU对应的拳探SKU和拳探SPU + var jdSkuIdList = request.Items.Select(x => x.Sku).Distinct().ToList(); + + var jdqtskuList = fsqlManager.BBWYCfsql.Select() + .Where(ps1 => ps1.ShopId == request.ShopId && jdSkuIdList.Contains(ps1.SkuId)) + .GroupBy(ps1 => ps1.SkuId) + .WithTempQuery(g => new { MaxId = g.Max(g.Value.Id) }) + .From() + .InnerJoin((ps1, ps2) => ps1.MaxId == ps2.Id) + .ToList((ps1, ps2) => ps2); + + var qtSkuIdList = jdqtskuList.Select(x => x.PurchaseSkuIds).Distinct().ToList(); + + var productSkuList = fsql.Select(qtSkuIdList).ToList(); + var productIdList = productSkuList.Select(ps => ps.ProductId).Distinct().ToList(); + var spuTotalInfoList = fsql.Select().Where(spi => productIdList.Contains(spi.ProductId)).ToList(); + #endregion + + + //查询已存在未结束的优化任务 + var dbSkuOptimizationTaskList = fsql.Select() + .Where(t => t.ShopId == request.ShopId && + t.IsOptimizationCompleted == false && + qtSkuIdList.Contains(t.SkuId)) + .ToList(); + + foreach (var reqItem in request.Items) + { + var qtsku = jdqtskuList.FirstOrDefault(x => x.SkuId == reqItem.Sku); + if (qtsku == null) + continue; + var qtskuId = qtsku.PurchaseSkuIds; //拳探skuId + + if (dbSkuOptimizationTaskList.Any(s => s.SkuId == qtskuId)) //过滤未结束的sku + continue; + + var productSku = productSkuList.FirstOrDefault(ps => ps.Id == qtskuId); + if (productSku == null) + continue; + + var spuTotalInfo = spuTotalInfoList.FirstOrDefault(psi=>psi.ProductId == productSku.ProductId); //spu销量 + if (spuTotalInfo == null) + continue; + + var reason = GetOptimizationReason(spuTotalInfo); //过滤不需要优化的spu + if (reason == null) + continue; + + + } } + + /// /// 完成优化 /// @@ -111,7 +177,7 @@ namespace BBWYB.Server.Business .Set(sc => sc.IsOptimizationCompleted, true) .Set(sc => sc.CompletionTime, DateTime.Now); #endregion - + fsql.Transaction(() => { updateChildTask?.ExecuteAffrows(); diff --git a/BBWYB.Server.Model/Db/BBWY/PurchaseOrderSku.cs b/BBWYB.Server.Model/Db/BBWY/PurchaseOrderSku.cs new file mode 100644 index 0000000..4dd7ad3 --- /dev/null +++ b/BBWYB.Server.Model/Db/BBWY/PurchaseOrderSku.cs @@ -0,0 +1,130 @@ +using FreeSql.DataAnnotations; +using Newtonsoft.Json; +using System; + +namespace BBWYB.Server.Model.Db.BBWY +{ + + /// + /// 采购商品表 + /// + [Table(Name = "purchaseordersku", DisableSyncStructure = true)] + public partial class PurchaseOrderSku + { + [Column(IsPrimary = true)] + public long Id { get; set; } + + /// + /// 打包耗材费 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? ConsumableAmount { get; set; } = 0.00M; + + /// + /// 创建时间 + /// + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 头程运费 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? FirstFreight { get; set; } = 0.00M; + + + /// + /// 入仓费 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? InStorageAmount { get; set; } = 0.00M; + + /// + /// Sku Logo + /// + + public string Logo { get; set; } + + /// + /// 单价 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? Price { get; set; } = 0.00M; + + /// + /// 采购货款 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? ProductAmount { get; set; } + + [Column(StringLength = 100)] + public string ProductId { get; set; } + + /// + /// 采购金额(采购货款+采购运费) + /// + [Column(DbType = "decimal(18,2)")] + public decimal? PurchaseAmount { get; set; } + + /// + /// 采购运费 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? PurchaseFreight { get; set; } + + /// + /// 采购单Id + /// + [Column(StringLength = 100)] + public string PurchaseOrderId { get; set; } + + /// + /// 采购方案Id + /// + + public long? PurchaseSchemeId { get; set; } + + /// + /// 采购SkuId串 + /// + [Column(StringLength = 500)] + public string PurchaseSkuIds { get; set; } + + /// + /// 质检费 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? QualityInspectionAmount { get; set; } = 0.00M; + + /// + /// 采购数量 + /// + + public int? Quantity { get; set; } + + /// + /// 店铺Id + /// + + public long? ShopId { get; set; } + + [Column(StringLength = 100)] + public string SkuId { get; set; } + + /// + /// Sku标题 + /// + + public string SkuTitle { get; set; } + + [Column(MapType = typeof(int?))] + public Enums.StockType? StockType { get; set; } + + /// + /// 齐库任务Id + /// + public long? QiKuTaskId { get; set; } + + } + +} From f31ae8e6ec890e291277b69cc279ca58d08ceba8 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Thu, 29 Feb 2024 01:09:49 +0800 Subject: [PATCH 143/222] =?UTF-8?q?=E8=89=AF=E5=BA=93=E9=A2=84=E8=AD=A6?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 22 +++- .../SkuOptimizationBusiness.cs | 101 +++++++++++++++++- .../Sync/OrderSyncBusiness.cs | 96 +++++++++-------- .../Db/Product/Skuoptimizationtask.cs | 18 +++- 4 files changed, 183 insertions(+), 54 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 1554790..7c8cd19 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -332,6 +332,7 @@ namespace BBWYB.Server.Business List> updatePurchaserList = new List>(); List insertSkuHistoryPurchaserRelationList = new List(); List insertSkuOptimizationHistoryList = new List(); + List updateSkuOptimizationPurhcasementByIdList = new List(); List notifyQikuPackSchemeParamList = null; if (dbOrder.IntoStoreType == Enums.IntoStoreType.发回齐越) @@ -686,9 +687,17 @@ namespace BBWYB.Server.Business { //本批次在线采购的订单sku集合 var allBelongSkuIdList = request.CargoParamGroupList.SelectMany(cg => cg.CargoParamList.Select(c => c.BelongSkuId)).Distinct().ToList(); - var optimizationSkuIdList = orderSkus.Where(osku => osku.IsOptimizationCompleted == 1 && allBelongSkuIdList.Contains(osku.SkuId)) - .Select(osku => osku.SkuId) - .ToList(); + //var optimizationSkuIdList = orderSkus.Where(osku => osku.IsOptimizationCompleted == 1 && allBelongSkuIdList.Contains(osku.SkuId)) + // .Select(osku => osku.SkuId) + // .ToList(); + + var optimizationTaskList = fsql.Select() + .Where(s => allBelongSkuIdList.Contains(s.SkuId) && + s.IsOptimizationCompleted == true && + s.IsPurchasementCompleted == false) + .ToList(); + + var optimizationSkuIdList = optimizationTaskList.Select(s => s.SkuId).Distinct().ToList(); if (optimizationSkuIdList.Count() > 0) { //优化历史 @@ -725,6 +734,10 @@ namespace BBWYB.Server.Business TriggerOptimizationReason = orderSku.TriggerOptimizationReason }; insertSkuOptimizationHistoryList.Add(newOptimizationHistory); + + var skuOptimizationTask = optimizationTaskList.FirstOrDefault(x => x.SkuId == optimizationSkuId); + if (skuOptimizationTask != null) + updateSkuOptimizationPurhcasementByIdList.Add(skuOptimizationTask.Id); } } } @@ -777,6 +790,9 @@ namespace BBWYB.Server.Business foreach (var update in updateOrderSkuCostList) update.ExecuteAffrows(); } + if (updateSkuOptimizationPurhcasementByIdList.Count() > 0) + fsql.Update(updateSkuOptimizationPurhcasementByIdList).Set(s => s.IsPurchasementCompleted, true).ExecuteAffrows(); + //if (updatePurchaserList.Count() > 0) //{ // foreach (var update in updatePurchaserList) diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 3308f91..7a953d0 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -5,6 +5,7 @@ using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.BBWY; using BBWYB.Server.Model.Dto; using FreeSql; +using Newtonsoft.Json; using Yitter.IdGenerator; namespace BBWYB.Server.Business @@ -12,9 +13,14 @@ namespace BBWYB.Server.Business public class SkuOptimizationBusiness : BaseBusiness, IDenpendency { private FreeSqlMultiDBManager fsqlManager; - public SkuOptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager) : base(fsql, nLogManager, idGenerator) + private VenderBusiness venderBusiness; + private TimeLimitRules timeLimitRules; + + public SkuOptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager, VenderBusiness venderBusiness, TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator) { this.fsqlManager = fsqlManager; + this.venderBusiness = venderBusiness; + this.timeLimitRules = timeLimitRules; } public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s) @@ -32,6 +38,8 @@ namespace BBWYB.Server.Business public void LKInventoryAlertNotification(BatchLKInventoryAlertRequest request) { + nLogManager.Default().Info($"LKInventoryAlertNotification {JsonConvert.SerializeObject(request)}"); + #region 确定JDSKU对应的拳探SKU和拳探SPU var jdSkuIdList = request.Items.Select(x => x.Sku).Distinct().ToList(); @@ -59,6 +67,27 @@ namespace BBWYB.Server.Business qtSkuIdList.Contains(t.SkuId)) .ToList(); + + //优化历史 + var dbSkuOptimizationHistoryList = fsql.Select() + .Where(s1 => s1.ShopId == request.ShopId && qtSkuIdList.Contains(s1.SkuId)) + .GroupBy(s1 => s1.SkuId) + .WithTempQuery(g => new { MaxId = g.Max(g.Value.Id) }) + .From() + .InnerJoin((s1, s2) => s1.MaxId == s2.Id) + .ToList((s1, s2) => s2); + + + #region DB Operation + var insertSkuOptimizationTaskList = new List(); + var insertSkuOptimizationChildTaskList = new List(); + var insertTimeLimitTaskList = new List(); + #endregion + + var belongShop = venderBusiness.GetShopList(request.ShopId).FirstOrDefault(); + if (belongShop == null) + throw new BusinessException("店铺不存在"); + foreach (var reqItem in request.Items) { var qtsku = jdqtskuList.FirstOrDefault(x => x.SkuId == reqItem.Sku); @@ -73,7 +102,7 @@ namespace BBWYB.Server.Business if (productSku == null) continue; - var spuTotalInfo = spuTotalInfoList.FirstOrDefault(psi=>psi.ProductId == productSku.ProductId); //spu销量 + var spuTotalInfo = spuTotalInfoList.FirstOrDefault(psi => psi.ProductId == productSku.ProductId); //spu销量 if (spuTotalInfo == null) continue; @@ -81,8 +110,76 @@ namespace BBWYB.Server.Business if (reason == null) continue; + var skuOptimizationHistory = dbSkuOptimizationHistoryList.FirstOrDefault(h => h.SkuId == qtskuId); + + #region 创建待议价任务 + var skuOptimizationTask = new SkuOptimizationTask() + { + Id = idGenerator.NewLong(), + BelongShopName = belongShop.ShopName, + ShopId = productSku.ShopId, + CompletionTime = null, + CreateTime = DateTime.Now, + IsOptimizationCompleted = false, + IsPurchasementCompleted = false, + JDSkuId = reqItem.Sku, + PreItemCount = reqItem.PreItemCount, + ProductId = productSku.ProductId, + SafeWarningRemainingDay = reqItem.SafeWarningRemainingDay, + SkuId = qtskuId, + TriggerOptimizationReason = reason, + LastOptimizationRatio = skuOptimizationHistory?.OptimizationRatio ?? 0M, + LastPurchasePrice = skuOptimizationHistory?.CurrentPurchasePrice, + PrePurchasedAmount = (skuOptimizationHistory?.CurrentPurchasePrice ?? 0M) * reqItem.PreItemCount + }; + #endregion + + #region 创建待优化子任务 + { + var yijiagroups = venderBusiness.GetYiJiaGroup(); + foreach (var department in yijiagroups) + { + var skuOptimizationChildTask = new SkuOptimizationChildTask() + { + Id = idGenerator.NewLong(), + BelongTeamId = department.Id, + BelongTeamName = department.DepartmentName, + CompletionTime = null, + IsOptimizationCompleted = false, + OptimizationTaskId = skuOptimizationTask.Id + }; + insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask); + } + } + #endregion + #region 创建待优化限时任务 + insertTimeLimitTaskList.Add(new TimeLimitTask() + { + Id = idGenerator.NewLong(), + CreateTme = DateTime.Now, + //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(reason == Enums.TriggerOptimizationReason.首次采购 ? 1 : 0)), + //OrderId = o.OrderId, + //OrderSn = o.OrderSn, + ShopId = productSku.ShopId, + SkuId = qtskuId, + TaskType = Enums.TimeLimitTaskType.待议价任务, + TaskId = skuOptimizationTask.Id, + Remark = reason.ToString() + }); + #endregion } + + fsql.Transaction(() => + { + if (insertSkuOptimizationTaskList.Count() > 0) + fsql.Insert(insertSkuOptimizationTaskList).ExecuteAffrows(); + if (insertSkuOptimizationChildTaskList.Count() > 0) + fsql.Insert(insertSkuOptimizationChildTaskList).ExecuteAffrows(); + if (insertTimeLimitTaskList.Count() > 0) + fsql.Insert(insertTimeLimitTaskList).ExecuteAffrows(); + }); } diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 4a86044..6801477 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -440,16 +440,18 @@ namespace BBWYB.Server.Business.Sync PreItemCount = 0, PrePurchasedAmount = 0, IsOptimizationCompleted = false, + IsPurchasementCompleted = false, CreateTime = DateTime.Now, SafeWarningRemainingDay = 0, - UsePrePurchasedPrice = 0, TriggerOptimizationReason = Enums.TriggerOptimizationReason.首次采购, SkuId = waitCheckOrderSku.SkuId, ShopId = shopId, ProductId = waitCheckOrderSku.ProductId, BelongShopName = sourceShopName, CompletionTime = null, - JDSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == waitCheckOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty + JDSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == waitCheckOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty, + LastOptimizationRatio = 0, + LastPurchasePrice = 0 }; insertSkuOptimizationTaskList.Add(skuOptimizationTask); @@ -499,38 +501,38 @@ namespace BBWYB.Server.Business.Sync } } - #region 更新订单sku优化标记 - var allSkuOptimizationTaskList = dbSkuOptimizationTaskList.Union(insertSkuOptimizationTaskList); - foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) - { - foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) - { - var task = allSkuOptimizationTaskList.FirstOrDefault(t => t.SkuId == waitCheckOrderSku.SkuId); - if (task != null) - { - #region 更新sku优化标记 - var oskuId = long.Parse(waitCheckOrderSku.SkuId); - var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); - if (insertOrderSku != null) - { - insertOrderSku.IsNeedOptimization = 1; - insertOrderSku.TriggerOptimizationReason = task.TriggerOptimizationReason; - } - else - { - //updateOrderSkuIdList_OptimizationFlag.Add(oskuId); - if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(task.TriggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList)) - { - updateOSkuOptimizationFlagByReasonList = new List(); - updateOSkuOptimizationFlagByReasonGroups.Add(task.TriggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList); - } - updateOSkuOptimizationFlagByReasonList.Add(oskuId); - } - #endregion - } - } - } - #endregion + //#region 更新订单sku优化标记 + //var allSkuOptimizationTaskList = dbSkuOptimizationTaskList.Union(insertSkuOptimizationTaskList); + //foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) + //{ + // foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) + // { + // var task = allSkuOptimizationTaskList.FirstOrDefault(t => t.SkuId == waitCheckOrderSku.SkuId); + // if (task != null) + // { + // #region 更新sku优化标记 + // var oskuId = long.Parse(waitCheckOrderSku.SkuId); + // var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); + // if (insertOrderSku != null) + // { + // insertOrderSku.IsNeedOptimization = 1; + // insertOrderSku.TriggerOptimizationReason = task.TriggerOptimizationReason; + // } + // else + // { + // //updateOrderSkuIdList_OptimizationFlag.Add(oskuId); + // if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(task.TriggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList)) + // { + // updateOSkuOptimizationFlagByReasonList = new List(); + // updateOSkuOptimizationFlagByReasonGroups.Add(task.TriggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList); + // } + // updateOSkuOptimizationFlagByReasonList.Add(oskuId); + // } + // #endregion + // } + // } + //} + //#endregion } } #endregion @@ -588,19 +590,19 @@ namespace BBWYB.Server.Business.Sync //if (updateOrderSkuIdList_OptimizationFlag.Count() > 0) // fsql.Update(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows(); - if (updateOSkuOptimizationFlagByReasonGroups.Keys.Count() > 0) - { - foreach (var triggerOptimizationReason in updateOSkuOptimizationFlagByReasonGroups.Keys) - { - var updateOSkuListOptimizationFlagList = updateOSkuOptimizationFlagByReasonGroups[triggerOptimizationReason]; - if (updateOSkuListOptimizationFlagList != null && updateOSkuListOptimizationFlagList.Count > 0) - { - fsql.Update(updateOSkuListOptimizationFlagList).Set(osku => osku.IsNeedOptimization, 1) - .Set(osku => osku.TriggerOptimizationReason, triggerOptimizationReason) - .ExecuteAffrows(); - } - } - } + //if (updateOSkuOptimizationFlagByReasonGroups.Keys.Count() > 0) + //{ + // foreach (var triggerOptimizationReason in updateOSkuOptimizationFlagByReasonGroups.Keys) + // { + // var updateOSkuListOptimizationFlagList = updateOSkuOptimizationFlagByReasonGroups[triggerOptimizationReason]; + // if (updateOSkuListOptimizationFlagList != null && updateOSkuListOptimizationFlagList.Count > 0) + // { + // fsql.Update(updateOSkuListOptimizationFlagList).Set(osku => osku.IsNeedOptimization, 1) + // .Set(osku => osku.TriggerOptimizationReason, triggerOptimizationReason) + // .ExecuteAffrows(); + // } + // } + //} foreach (var key in deductionSkuCountDictionary.Keys) fsql.Update(key).Set(s => s.ItemCount - deductionSkuCountDictionary[key]).ExecuteAffrows(); diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs index fa32c28..5c413c1 100644 --- a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs +++ b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs @@ -18,8 +18,16 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "datetime")] public DateTime? CreateTime { get; set; } + /// + /// 是否完成优化 + /// public bool? IsOptimizationCompleted { get; set; } = false; + /// + /// 是否完成采购 + /// + public bool? IsPurchasementCompleted { get; set; } = false; + [Column(StringLength = 50)] public string JDSkuId { get; set; } @@ -62,12 +70,18 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "int", MapType = typeof(int))] public Enums.TriggerOptimizationReason? TriggerOptimizationReason { get; set; } = 0; + /// - /// 进行预估的采购成本 + /// 上次优化率 /// [Column(DbType = "decimal(18,2)")] - public decimal? UsePrePurchasedPrice { get; set; } = 0.00M; + public decimal? LastOptimizationRatio { get; set; } = 0.00M; + /// + /// 上次采购单价 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? LastPurchasePrice { get; set; } = 0.00M; } } From ace6985e0295606b259c91f7b5a2df9512e3c39c Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Thu, 29 Feb 2024 02:36:11 +0800 Subject: [PATCH 144/222] =?UTF-8?q?=E8=89=AF=E5=BA=93=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimization/SkuOptimizationBusiness.cs | 3 ++- BBWYB.Server.Business/Sync/OrderSyncBusiness.cs | 3 ++- BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs | 6 ++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 7a953d0..545e42a 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -130,7 +130,8 @@ namespace BBWYB.Server.Business TriggerOptimizationReason = reason, LastOptimizationRatio = skuOptimizationHistory?.OptimizationRatio ?? 0M, LastPurchasePrice = skuOptimizationHistory?.CurrentPurchasePrice, - PrePurchasedAmount = (skuOptimizationHistory?.CurrentPurchasePrice ?? 0M) * reqItem.PreItemCount + PrePurchasedAmount = (skuOptimizationHistory?.CurrentPurchasePrice ?? 0M) * reqItem.PreItemCount, + LastOptimizationTime = skuOptimizationHistory?.CreateTime }; #endregion diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 6801477..0928d64 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -451,7 +451,8 @@ namespace BBWYB.Server.Business.Sync CompletionTime = null, JDSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == waitCheckOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty, LastOptimizationRatio = 0, - LastPurchasePrice = 0 + LastPurchasePrice = 0, + LastOptimizationTime = null }; insertSkuOptimizationTaskList.Add(skuOptimizationTask); diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs index 5c413c1..9b5d94e 100644 --- a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs +++ b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs @@ -18,6 +18,12 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "datetime")] public DateTime? CreateTime { get; set; } + /// + /// 上次优化时间(优化完成后首次采购的时间) + /// + [Column(DbType = "datetime")] + public DateTime? LastOptimizationTime { get; set; } + /// /// 是否完成优化 /// From ea36d8d2f97972e369fd5f9a3bf26c4ad8052669 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Thu, 29 Feb 2024 12:43:51 +0800 Subject: [PATCH 145/222] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=BE=85=E8=AE=AE?= =?UTF-8?q?=E4=BB=B7=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/BaseApiController.cs | 8 +- .../Controllers/SkuOptimizationController.cs | 14 ++- .../SkuOptimizationBusiness.cs | 101 +++++++++++++++--- .../Db/Product/Skuoptimizationchildtask.cs | 2 +- .../Db/Product/Skuoptimizationtask.cs | 47 ++++++++ BBWYB.Server.Model/Dto/Request/PageRequest.cs | 9 ++ .../SkuOptimizationChildTaskResponse.cs | 8 ++ .../SkuOptimizationTaskResponse.cs | 20 ++++ BBWYB.Server.Model/MappingProfiles.cs | 14 +++ 9 files changed, 204 insertions(+), 19 deletions(-) create mode 100644 BBWYB.Server.Model/Dto/Request/PageRequest.cs create mode 100644 BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs create mode 100644 BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs diff --git a/BBWYB.Server.API/Controllers/BaseApiController.cs b/BBWYB.Server.API/Controllers/BaseApiController.cs index 283c4fe..d851464 100644 --- a/BBWYB.Server.API/Controllers/BaseApiController.cs +++ b/BBWYB.Server.API/Controllers/BaseApiController.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Cors; +using BBWYB.Common.Models; +using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; @@ -18,7 +19,10 @@ namespace BBWYB.Server.API.Controllers protected string GetUserId() { - return httpContextAccessor?.HttpContext?.User.Claims.Where(x => x.Type == "userId")?.FirstOrDefault()?.Value; + var userId = httpContextAccessor?.HttpContext?.User.Claims.Where(x => x.Type == "userId")?.FirstOrDefault()?.Value; + if (string.IsNullOrEmpty(userId)) + throw new BusinessException("未从token中获取到userId"); + return userId; } protected string GetToken() diff --git a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs index 61d2086..a480db1 100644 --- a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs +++ b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs @@ -33,9 +33,19 @@ namespace BBWYB.Server.API.Controllers public void CompleteOptimization([FromRoute] long taskId) { var userId = GetUserId(); - if (string.IsNullOrEmpty(userId)) - throw new BusinessException("未从token中获取到userId"); skuOptimizationBusiness.CompleteOptimization(taskId, userId); } + + /// + /// 查询待议价任务列表 + /// + /// + /// + [HttpPost] + public ListResponse GetNoCompletionSkuOptimizationTask([FromBody] PageRequest request) + { + var userId = GetUserId(); + return skuOptimizationBusiness.GetNoCompletionSkuOptimizationTask(request, userId); + } } } diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 545e42a..7f242ad 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -1,4 +1,5 @@ -using BBWYB.Common.Log; +using BBWYB.Common.Extensions; +using BBWYB.Common.Log; using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; @@ -23,6 +24,21 @@ namespace BBWYB.Server.Business this.timeLimitRules = timeLimitRules; } + private (User user, Userdepartment department) GetYiJiaDepartmentByUserId(string userId) + { + var user = fsqlManager.MDSfsql.Select(userId).ToOne(); + if (user == null) + throw new BusinessException("用户不存在"); + if (string.IsNullOrEmpty(user.DepartmentId)) + throw new BusinessException("该用户没有归属部门"); + var department = fsqlManager.MDSfsql.Select(user.DepartmentId).ToOne(); + if (department == null) + throw new BusinessException("部门不存在"); + if (department.ParentDepartmentId != "1760971468360912896") + throw new BusinessException("该用户所在部门不属于议价组"); + return (user, department); + } + public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s) { if (s.IsFirstPurchaseCompleted == false) @@ -36,6 +52,11 @@ namespace BBWYB.Server.Business return null; } + /// + /// 良库预警 + /// + /// + /// public void LKInventoryAlertNotification(BatchLKInventoryAlertRequest request) { nLogManager.Default().Info($"LKInventoryAlertNotification {JsonConvert.SerializeObject(request)}"); @@ -203,27 +224,18 @@ namespace BBWYB.Server.Business #endregion #region 获取用户和部门信息 - var user = fsqlManager.MDSfsql.Select(userId).ToOne(); - if (user == null) - throw new BusinessException("用户不存在"); - if (string.IsNullOrEmpty(user.DepartmentId)) - throw new BusinessException("该用户没有归属部门"); - var department = fsqlManager.MDSfsql.Select(user.DepartmentId).ToOne(); - if (department == null) - throw new BusinessException("部门不存在"); - if (department.ParentDepartmentId != "1760971468360912896") - throw new BusinessException("该用户所在部门不属于议价组"); + var uInfo = GetYiJiaDepartmentByUserId(userId); #endregion #region 验证待议价子任务 var optimazaionChildTaskList = fsql.Select() .Where(sc => sc.OptimizationTaskId == optimazaionTask.Id) .ToList(); - var currentOptimazaionChildTaskList = optimazaionChildTaskList.FirstOrDefault(sc => sc.BelongTeamId == department.Id); + var currentOptimazaionChildTaskList = optimazaionChildTaskList.FirstOrDefault(sc => sc.BelongTeamId == uInfo.department.Id); if (currentOptimazaionChildTaskList == null) - throw new BusinessException($"未找到议价组{department.DepartmentName}的议价子任务"); + throw new BusinessException($"未找到议价组{uInfo.department.DepartmentName}的议价子任务"); if (currentOptimazaionChildTaskList.IsOptimizationCompleted == true) - throw new BusinessException($"{department.DepartmentName}的议价子任务已完成"); + throw new BusinessException($"{uInfo.department.DepartmentName}的议价子任务已完成"); currentOptimazaionChildTaskList.IsOptimizationCompleted = true; #endregion @@ -284,5 +296,66 @@ namespace BBWYB.Server.Business updateTimeLimitTask?.ExecuteAffrows(); }); } + + public ListResponse GetNoCompletionSkuOptimizationTask(PageRequest request, string userId) + { + var uInfo = GetYiJiaDepartmentByUserId(userId); + var taskList = fsql.Select() + .InnerJoin((t, tt) => t.Id == tt.TaskId) + .Where((t, tt) => t.IsOptimizationCompleted == false) + .OrderByDescending((t, tt) => t.CreateTime) + .Count(out var total) + .Page(request.PageIndex, request.PageSize) + .ToList((t, tt) => new SkuOptimizationTask + { + Id = t.Id, + ShopId = t.ShopId, + BelongShopName = t.BelongShopName, + JDSkuId = t.JDSkuId, + ProductId = t.ProductId, + SkuId = t.SkuId, + PreItemCount = t.PreItemCount, + PrePurchasedAmount = t.PrePurchasedAmount, + SafeWarningRemainingDay = t.SafeWarningRemainingDay, + IsOptimizationCompleted = t.IsOptimizationCompleted, + IsPurchasementCompleted = t.IsPurchasementCompleted, + CreateTime = t.CreateTime, + CompletionTime = t.CompletionTime, + TriggerOptimizationReason = t.TriggerOptimizationReason, + LastOptimizationRatio = t.LastOptimizationRatio, + LastPurchasePrice = t.LastPurchasePrice, + LastOptimizationTime = t.LastOptimizationTime, + + TimeLimitTaskId = tt.Id, + TimeLimitTaskBelongTaskId = tt.TaskId, + TimeLimitTaskCompletionTime = tt.CompletionTime, + TimeLimitTaskCreateTme = tt.CreateTme, + TimeLimitTaskExpirationTime = tt.ExpirationTime, + TimeLimitTaskIsTimely = tt.IsTimely, + TimeLimitTaskOrderId = tt.OrderId, + TimeLimitTaskOrderSn = tt.OrderSn, + TimeLimitTaskPayTime = tt.PayTime, + TimeLimitTaskRemark = tt.Remark, + TimeLimitTaskShopId = tt.ShopId, + TimeLimitTaskSkuId = tt.SkuId, + TimeLimitTaskTaskType = tt.TaskType + }).Map>(); + + List taskIdList = taskList.Select(t => t.Id).ToList(); + var childTaskList = fsql.Select().Where(ct => taskIdList.Contains(ct.OptimizationTaskId)).ToList(); + + foreach (var task in taskList) + { + task.ChildTaskList = childTaskList.Where(ct => ct.OptimizationTaskId == task.Id).ToList(); + var currentChildTask = task.ChildTaskList.FirstOrDefault(ct => ct.BelongTeamId == uInfo.user.DepartmentId); + task.IsOptimizationCompletedByCurrentTeam = currentChildTask?.IsOptimizationCompleted ?? false; + } + + return new ListResponse() + { + Items = taskList, + TotalCount = total + }; + } } } diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs index f596f33..9e141c6 100644 --- a/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs +++ b/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs @@ -37,7 +37,7 @@ namespace BBWYB.Server.Model.Db /// 优化任务Id /// [Column(DbType = "bigint")] - public long? OptimizationTaskId { get; set; } + public long OptimizationTaskId { get; set; } } diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs index 9b5d94e..01259a1 100644 --- a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs +++ b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs @@ -88,6 +88,53 @@ namespace BBWYB.Server.Model.Db /// [Column(DbType = "decimal(18,2)")] public decimal? LastPurchasePrice { get; set; } = 0.00M; + + + + #region Extension + + #region TimeLimitTask + [Column(IsIgnore = true)] + public long TimeLimitTaskId { get; set; } + + [Column(IsIgnore = true)] + public DateTime? TimeLimitTaskCompletionTime { get; set; } + + [Column(IsIgnore = true)] + public DateTime? TimeLimitTaskCreateTme { get; set; } + + [Column(IsIgnore = true)] + public DateTime? TimeLimitTaskPayTime { get; set; } + + [Column(IsIgnore = true)] + public DateTime? TimeLimitTaskExpirationTime { get; set; } + + [Column(IsIgnore = true)] + public bool? TimeLimitTaskIsTimely { get; set; } + + [Column(IsIgnore = true)] + public string TimeLimitTaskOrderId { get; set; } + + [Column(IsIgnore = true)] + public string TimeLimitTaskOrderSn { get; set; } + + [Column(IsIgnore = true)] + public long? TimeLimitTaskShopId { get; set; } + + [Column(IsIgnore = true)] + public string TimeLimitTaskSkuId { get; set; } + + [Column(IsIgnore = true)] + public Enums.TimeLimitTaskType? TimeLimitTaskTaskType { get; set; } + + [Column(IsIgnore = true)] + public string TimeLimitTaskRemark { get; set; } + + [Column(IsIgnore = true)] + public long TimeLimitTaskBelongTaskId { get; set; } + #endregion + + #endregion } } diff --git a/BBWYB.Server.Model/Dto/Request/PageRequest.cs b/BBWYB.Server.Model/Dto/Request/PageRequest.cs new file mode 100644 index 0000000..669c0d6 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PageRequest.cs @@ -0,0 +1,9 @@ +namespace BBWYB.Server.Model.Dto +{ + public class PageRequest + { + public int PageIndex { get; set; } + + public int PageSize { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs new file mode 100644 index 0000000..fb19868 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs @@ -0,0 +1,8 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Model.Dto +{ + public class SkuOptimizationChildTaskResponse: SkuOptimizationChildTask + { + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs new file mode 100644 index 0000000..7241c03 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs @@ -0,0 +1,20 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Model.Dto +{ + public class SkuOptimizationTaskResponse : SkuOptimizationTask + { + public IList ChildTaskList { get; set; } + + /// + /// 当前用户所属团队是否完成议价子任务 + /// + public bool IsOptimizationCompletedByCurrentTeam { get; set; } + + /// + /// 限时任务 + /// + public TimeLimitTask TimeLimitTask { get; set;; } + + } +} diff --git a/BBWYB.Server.Model/MappingProfiles.cs b/BBWYB.Server.Model/MappingProfiles.cs index f3a6555..94fd5a2 100644 --- a/BBWYB.Server.Model/MappingProfiles.cs +++ b/BBWYB.Server.Model/MappingProfiles.cs @@ -59,6 +59,20 @@ namespace BBWYB.Server.Model CreateMap(); CreateMap(); CreateMap(); + + CreateMap().ForPath(t => t.TimeLimitTask.Id, opt => opt.MapFrom(f => f.TimeLimitTaskId)) + .ForPath(t => t.TimeLimitTask.CompletionTime, opt => opt.MapFrom(f => f.TimeLimitTaskCompletionTime)) + .ForPath(t => t.TimeLimitTask.ExpirationTime, opt => opt.MapFrom(f => f.TimeLimitTaskExpirationTime)) + .ForPath(t => t.TimeLimitTask.PayTime, opt => opt.MapFrom(f => f.TimeLimitTaskPayTime)) + .ForPath(t => t.TimeLimitTask.IsTimely, opt => opt.MapFrom(f => f.TimeLimitTaskIsTimely)) + .ForPath(t => t.TimeLimitTask.CreateTme, opt => opt.MapFrom(f => f.TimeLimitTaskCreateTme)) + .ForPath(t => t.TimeLimitTask.OrderId, opt => opt.MapFrom(f => f.TimeLimitTaskOrderId)) + .ForPath(t => t.TimeLimitTask.OrderSn, opt => opt.MapFrom(f => f.TimeLimitTaskOrderSn)) + .ForPath(t => t.TimeLimitTask.Remark, opt => opt.MapFrom(f => f.TimeLimitTaskRemark)) + .ForPath(t => t.TimeLimitTask.ShopId, opt => opt.MapFrom(f => f.TimeLimitTaskShopId)) + .ForPath(t => t.TimeLimitTask.SkuId, opt => opt.MapFrom(f => f.TimeLimitTaskSkuId)) + .ForPath(t => t.TimeLimitTask.TaskId, opt => opt.MapFrom(f => f.TimeLimitTaskBelongTaskId)); + } } } From 366c92a760f802b6d6809beaeb14a0958c427a8f Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Thu, 29 Feb 2024 16:19:39 +0800 Subject: [PATCH 146/222] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AF=AD=E6=B3=95?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/Response/Optimization/SkuOptimizationTaskResponse.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs index 7241c03..830fdd9 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs @@ -14,7 +14,7 @@ namespace BBWYB.Server.Model.Dto /// /// 限时任务 /// - public TimeLimitTask TimeLimitTask { get; set;; } + public TimeLimitTask TimeLimitTask { get; set; } } } From cbdb7bcd9912777835b0cc819e5339bdec14197a Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 3 Mar 2024 02:00:48 +0800 Subject: [PATCH 147/222] =?UTF-8?q?=E5=BE=85=E8=AE=AE=E4=BB=B7=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E8=A7=A6=E5=8F=91=E6=9D=A1=E4=BB=B6=E8=80=83=E8=99=91?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimizationBusiness.cs | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 7f242ad..fb27cd6 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -44,11 +44,23 @@ namespace BBWYB.Server.Business if (s.IsFirstPurchaseCompleted == false) return Enums.TriggerOptimizationReason.首次采购; if (s.IsFirstPurchaseCompleted == true && - s.IsFirstOptimizationCompleted == false && - s.ItemCount - s.FirstPurchaseCompletedItemCount >= 20) - return Enums.TriggerOptimizationReason.首次优化; - if (s.IsFirstOptimizationCompleted == true && s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) - return Enums.TriggerOptimizationReason.再次优化; + s.IsFirstOptimizationCompleted == false) + { + if (s.ItemCount - s.FirstPurchaseCompletedItemCount >= 20) + return Enums.TriggerOptimizationReason.首次优化; + if (s.LastOptimizationTime != null && + (DateTime.Now.Date - s.LastOptimizationTime.Value.Date).TotalDays > 30) + return Enums.TriggerOptimizationReason.首次优化; + } + if (s.IsFirstOptimizationCompleted == true) + { + if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) + return Enums.TriggerOptimizationReason.再次优化; + + if (s.LastOptimizationTime != null && + (DateTime.Now.Date - s.LastOptimizationTime.Value.Date).TotalDays > 30) + return Enums.TriggerOptimizationReason.再次优化; + } return null; } From 6cf702e02f4c3d47b65dbbba7be376d5473e8e4c Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Mon, 4 Mar 2024 03:04:49 +0800 Subject: [PATCH 148/222] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaseSchemeController.cs | 4 +- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 68 +++++++++++++++++-- .../SkuOptimizationBusiness.cs | 22 ++---- BBWYB.Server.Business/Users/userBusiness.cs | 37 ++++++++++ .../Db/PurchaseScheme/PurchaseScheme.cs | 30 ++++++++ BBWYB.Server.Model/Db/Purchaser/Purchaser.cs | 18 +++++ BBWYB.Server.Model/Enums.cs | 8 +++ 7 files changed, 163 insertions(+), 24 deletions(-) create mode 100644 BBWYB.Server.Business/Users/userBusiness.cs diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index 0e4b68f..58a3631 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -33,7 +33,7 @@ namespace BBWYB.Server.API.Controllers [HttpPost] public void EditPurchaseSchemeV2([FromBody] BatchCURDSchemeRequest batchCURDSchemeRequest) { - purchaseSchemeBusiness.EditPurchaseSchemeV2(batchCURDSchemeRequest); + purchaseSchemeBusiness.EditPurchaseSchemeV2(batchCURDSchemeRequest, GetUserId()); } /// @@ -206,7 +206,7 @@ namespace BBWYB.Server.API.Controllers [HttpPost] public void BatchEditPurchaseSkuActualPrice([FromBody] BatchEditPurchaseSkuActualPriceRequest request) { - purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request); + purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request, GetUserId()); } } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 0a9db9d..1bb343b 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -7,6 +7,7 @@ using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json; +using System.Linq; using Yitter.IdGenerator; namespace BBWYB.Server.Business @@ -16,6 +17,9 @@ namespace BBWYB.Server.Business private PurchaseProductAPIService purchaseProductAPIService; private RestApiService restApiService; private AggregionPurchaserBusiness aggregionPurchaserBusiness; + private UserBusiness userBusiness; + + private IList invalidOrderStateList; public PurchaseSchemeBusiness(IFreeSql fsql, @@ -23,7 +27,8 @@ namespace BBWYB.Server.Business IIdGenerator idGenerator, PurchaseProductAPIService purchaseProductAPIService, RestApiService restApiService, - AggregionPurchaserBusiness aggregionPurchaserBusiness) : base(fsql, nLogManager, idGenerator) + AggregionPurchaserBusiness aggregionPurchaserBusiness, + UserBusiness userBusiness) : base(fsql, nLogManager, idGenerator) { this.purchaseProductAPIService = purchaseProductAPIService; this.restApiService = restApiService; @@ -35,6 +40,7 @@ namespace BBWYB.Server.Business Enums.OrderState.部分采购 }; this.aggregionPurchaserBusiness = aggregionPurchaserBusiness; + this.userBusiness = userBusiness; } private void ExtractNewPurchaser(IList purchaserSchemeList, IList addPurchaserList) where T : InputPurchaseSchemeRequest @@ -211,9 +217,9 @@ namespace BBWYB.Server.Business }); } - public void EditPurchaseSchemeV2(BatchCURDSchemeRequest batchCURDSchemeRequest) + public void EditPurchaseSchemeV2(BatchCURDSchemeRequest batchCURDSchemeRequest, string userId) { - nLogManager.Default().Info($"EditPurchaseSchemeV2 {JsonConvert.SerializeObject(batchCURDSchemeRequest)}"); + //nLogManager.Default().Info($"EditPurchaseSchemeV2 {JsonConvert.SerializeObject(batchCURDSchemeRequest)}"); List dbSchemeGroupList = null; List dbPurchaseSchemeList = null; @@ -339,6 +345,56 @@ namespace BBWYB.Server.Business } } + var uInfo = userBusiness.GetisBargainTeamByUserId(userId); + if (uInfo.isBargainTeam) + { + #region 检测是否存在被其他议价组分配的采购商 + { + var tempPurchaseScmemeList = (batchCURDSchemeRequest.AddPurchaseSchemeList ?? new List()).Union(batchCURDSchemeRequest.EditPurchaseSchemeList ?? new List()).ToList(); + var allPurchaserList = tempPurchaseScmemeList.SelectMany(ps => ps.PurchaseSchemeProductList.Select(psp => new { psp.PurchaserId, psp.PurchaserName })).ToList(); + + var allPurchaserIdList = allPurchaserList.Select(p => p.PurchaserId).Distinct().ToList(); + var dbPurchaserList = fsql.Select(allPurchaserIdList).ToList(p => new Purchaser() + { + Id = p.Id, + Name = p.Name, + BelongBargainTeamId = p.BelongBargainTeamId, + BelongType = p.BelongType + }); + var noCurrentBargainTeamList = dbPurchaserList.Where(dp => !string.IsNullOrEmpty(dp.BelongBargainTeamId) && + dp.BelongBargainTeamId != uInfo.user.DepartmentId).ToList(); + if (noCurrentBargainTeamList.Count() > 0) + throw new BusinessException($"不能包含被其他议价组使用的采购商 [{string.Join(",", noCurrentBargainTeamList.Select(x => x.Name))}]"); + } + #endregion + + #region 检测同sku在该议价组下的数量是否超过3个 + { + if (batchCURDSchemeRequest.AddPurchaseSchemeList != null && batchCURDSchemeRequest.AddPurchaseSchemeList.Count() > 0) + { + var addSchemeSkuList = batchCURDSchemeRequest.AddPurchaseSchemeList.Select(ps => ps.SkuId).Distinct().ToList(); + var dbSkuSchemeCountList = fsql.Select().Where(ps => ps.BelongBargainTeamId == uInfo.user.DepartmentId && + addSchemeSkuList.Contains(ps.SkuId)) + .GroupBy(ps => ps.SkuId) + .ToList(g => new + { + SkuId = g.Key, + Count = g.Count() + }); + var skuCountList = dbSkuSchemeCountList.Select(x => new + { + x.SkuId, + Count = x.Count + batchCURDSchemeRequest.AddPurchaseSchemeList.Count(ps => ps.SkuId == x.SkuId) + }).ToList(); + + var over3CountList = skuCountList.Where(x => x.Count > 3).ToList(); + if (over3CountList.Count() > 0) + throw new BusinessException($"sku在同一个议价组内不能超过3个采购方案 [{string.Join(",", over3CountList.Select(x => x.SkuId))}]"); + } + } + #endregion + } + #endregion List addPurchaseSchemeList = new List(); @@ -1445,7 +1501,9 @@ namespace BBWYB.Server.Business /// 批量修改采购配件实际单价 /// /// - public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request) + /// + /// + public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request, string userId) { if (request.ItemList == null || request.ItemList.Count() == 0) throw new BusinessException("缺少参数"); @@ -1520,7 +1578,7 @@ namespace BBWYB.Server.Business }).ToList() }).ToList() }).ToList() - }); + }, userId); } } diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index fb27cd6..ccbf601 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -16,28 +16,16 @@ namespace BBWYB.Server.Business private FreeSqlMultiDBManager fsqlManager; private VenderBusiness venderBusiness; private TimeLimitRules timeLimitRules; + private UserBusiness userBusiness; - public SkuOptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager, VenderBusiness venderBusiness, TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator) + public SkuOptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager, VenderBusiness venderBusiness, TimeLimitRules timeLimitRules, UserBusiness userBusiness) : base(fsql, nLogManager, idGenerator) { this.fsqlManager = fsqlManager; this.venderBusiness = venderBusiness; this.timeLimitRules = timeLimitRules; + this.userBusiness = userBusiness; } - private (User user, Userdepartment department) GetYiJiaDepartmentByUserId(string userId) - { - var user = fsqlManager.MDSfsql.Select(userId).ToOne(); - if (user == null) - throw new BusinessException("用户不存在"); - if (string.IsNullOrEmpty(user.DepartmentId)) - throw new BusinessException("该用户没有归属部门"); - var department = fsqlManager.MDSfsql.Select(user.DepartmentId).ToOne(); - if (department == null) - throw new BusinessException("部门不存在"); - if (department.ParentDepartmentId != "1760971468360912896") - throw new BusinessException("该用户所在部门不属于议价组"); - return (user, department); - } public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s) { @@ -236,7 +224,7 @@ namespace BBWYB.Server.Business #endregion #region 获取用户和部门信息 - var uInfo = GetYiJiaDepartmentByUserId(userId); + var uInfo = userBusiness.GetisBargainTeamByUserId(userId, true); #endregion #region 验证待议价子任务 @@ -311,7 +299,7 @@ namespace BBWYB.Server.Business public ListResponse GetNoCompletionSkuOptimizationTask(PageRequest request, string userId) { - var uInfo = GetYiJiaDepartmentByUserId(userId); + var uInfo = userBusiness.GetisBargainTeamByUserId(userId, true); var taskList = fsql.Select() .InnerJoin((t, tt) => t.Id == tt.TaskId) .Where((t, tt) => t.IsOptimizationCompleted == false) diff --git a/BBWYB.Server.Business/Users/userBusiness.cs b/BBWYB.Server.Business/Users/userBusiness.cs new file mode 100644 index 0000000..2c2ff64 --- /dev/null +++ b/BBWYB.Server.Business/Users/userBusiness.cs @@ -0,0 +1,37 @@ +using BBWYB.Common.Models; +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Business +{ + public class UserBusiness : IDenpendency + { + private FreeSqlMultiDBManager fsqlManager; + + public UserBusiness(FreeSqlMultiDBManager fsqlManager) + { + this.fsqlManager = fsqlManager; + } + + /// + /// 获取指定用户的议价组信息 + /// + /// + /// 当用户不属于议价组团队是否抛出错误 + /// + /// + public (User user, Userdepartment department, bool isBargainTeam) GetisBargainTeamByUserId(string userId, bool throwExWhenUserNotBelongYJ = false) + { + var user = fsqlManager.MDSfsql.Select(userId).ToOne(); + if (user == null) + throw new BusinessException("用户不存在"); + if (string.IsNullOrEmpty(user.DepartmentId)) + throw new BusinessException("该用户没有归属部门"); + var department = fsqlManager.MDSfsql.Select(user.DepartmentId).ToOne(); + if (department == null) + throw new BusinessException("部门不存在"); + if (throwExWhenUserNotBelongYJ && department.ParentDepartmentId != "1760971468360912896") + throw new BusinessException("该用户所在部门不属于议价组"); + return (user, department, department.ParentDepartmentId == "1760971468360912896"); + } + } +} diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs index a655694..7fc66b4 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs @@ -110,6 +110,36 @@ namespace BBWYB.Server.Model /// 采购件数 /// public int? PurchasedItemCount { get; set; } = 0; + + /// + /// 归属议价组Id + /// + [Column(StringLength = 50)] + public string BelongBargainTeamId { get; set; } + + /// + /// 归属议价组名称 + /// + [Column(StringLength = 50)] + public string BelongBargainTeamName { get; set; } + + /// + /// 更新人Id + /// + [Column(StringLength = 50)] + public string UpdateUserId { get; set; } + + /// + /// 更新人团队Id + /// + [Column(StringLength = 50)] + public string UpdateTeamId { get; set; } + + /// + /// 是否为议价组更新 + /// + [Column(DbType = "bit")] + public bool? IsBargainTeamUpdate { get; set; } = false; } } diff --git a/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs index 07509c7..7d14bf6 100644 --- a/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs +++ b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs @@ -113,6 +113,24 @@ namespace BBWYB.Server.Model.Db /// [Column(DbType = "decimal(18,2)")] public decimal? Recent90dPurchasedCount { get; set; } = 0.00M; + + /// + /// 归属议价组Id + /// + [Column(StringLength = 50)] + public string BelongBargainTeamId { get; set; } + + /// + /// 归属议价组名称 + /// + [Column(StringLength = 50)] + public string BelongBargainTeamName { get; set; } + + /// + /// 临时=0, 永久=1 + /// + [Column(MapType = typeof(int?))] + public Enums.PurchaserBelongType? BelongType { get; set; } } } diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index 04e9a1e..736bbb9 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -355,5 +355,13 @@ { 大于 = 0, 小于 = 1, 等于 = 2, 介于 = 3 } + + /// + /// 采购商归属类型 临时 = 0, 永久 = 1 + /// + public enum PurchaserBelongType + { + 临时 = 0, 永久 = 1 + } } } From 0f15f825cdd36540630e38e4f6343d636594af59 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 4 Mar 2024 18:17:25 +0800 Subject: [PATCH 149/222] =?UTF-8?q?=E7=BC=96=E8=BE=91=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=96=B9=E6=A1=88-=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E5=88=86=E9=85=8D=E8=AE=AE=E4=BB=B7=E7=BB=84=20=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88-=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E5=95=86=E4=B8=B4=E6=97=B6=E5=BD=92=E5=B1=9E=E8=AE=AE?= =?UTF-8?q?=E4=BB=B7=E7=BB=84=20=E7=BC=96=E8=BE=91=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=96=B9=E6=A1=88-=E9=99=90=E5=88=B6=E5=90=8Csku=E5=90=8C?= =?UTF-8?q?=E8=AE=AE=E4=BB=B7=E7=BB=84=E7=9A=84=E6=96=B9=E6=A1=88=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E4=B8=8D=E8=B6=85=E8=BF=873=E4=B8=AA=20=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88-=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E9=80=89=E6=8B=A9=E8=A2=AB=E5=85=B6=E4=BB=96=E7=BB=84?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E7=9A=84=E9=87=87=E8=B4=AD=E5=95=86=20?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=87=87=E8=B4=AD,=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=95=86=E6=B0=B8=E4=B9=85=E5=BD=92=E5=B1=9E=E4=BB=A5=E5=AE=B6?= =?UTF-8?q?=E6=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 25 +++++++++------ .../PurchaseScheme/PurchaseSchemeBusiness.cs | 31 +++++++++++++++++-- 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 7c8cd19..d4cdf38 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -580,7 +580,7 @@ namespace BBWYB.Server.Business var dbSkuAndPurchaserRelationList = fsql.Select() .Where(spr => purchaserIdList.Contains(spr.PurchaserId) && spr.ShopId == request.ShopId) .ToList(); - + var dbPurchaserList = fsql.Select(purchaserIdList).ToList(); foreach (var purchaserId in purchaserIdList) { purchaserSkuDictionary.TryGetValue(purchaserId, out var fromRequestSkuList); @@ -601,10 +601,15 @@ namespace BBWYB.Server.Business SkuId = x })); } - //var update = fsql.Update(purchaserId) - // .Set(p => p.PurchasedCount + 1) - // .SetIf(newSkuRelationCount > 0, p => p.PurchasedSkuCount + newSkuRelationCount); - //updatePurchaserList.Add(update); + + #region 更新采购商归属 + var purchaser = dbPurchaserList.FirstOrDefault(p => p.Id == purchaserId); + if (purchaser != null && !string.IsNullOrEmpty(purchaser.BelongBargainTeamId) && purchaser.BelongType == Enums.PurchaserBelongType.临时) + { + var updatePurchaser = fsql.Update(purchaserId).Set(p => p.BelongType, Enums.PurchaserBelongType.永久); + updatePurchaserList.Add(updatePurchaser); + } + #endregion } } @@ -793,11 +798,11 @@ namespace BBWYB.Server.Business if (updateSkuOptimizationPurhcasementByIdList.Count() > 0) fsql.Update(updateSkuOptimizationPurhcasementByIdList).Set(s => s.IsPurchasementCompleted, true).ExecuteAffrows(); - //if (updatePurchaserList.Count() > 0) - //{ - // foreach (var update in updatePurchaserList) - // update.ExecuteAffrows(); - //} + if (updatePurchaserList.Count() > 0) + { + foreach (var update in updatePurchaserList) + update.ExecuteAffrows(); + } }); //#region 更新采购方案最新价格 diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 1bb343b..1a88368 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -474,7 +474,12 @@ namespace BBWYB.Server.Business HYBDId = psReq.HYBDId, HYSchemeId = psReq.HYSchemeId, SchemeGroupId = psReq.SchemeGroupId ?? 0, - Version = 1 + Version = 1, + BelongBargainTeamId = uInfo.isBargainTeam ? uInfo.department.Id : string.Empty, + BelongBargainTeamName = uInfo.isBargainTeam ? uInfo.department.DepartmentName : string.Empty, + UpdateTeamId = uInfo.department.Id, + UpdateUserId = userId, + IsBargainTeamUpdate = uInfo.isBargainTeam }; addPurchaseSchemeList.Add(ps); foreach (var pspReq in psReq.PurchaseSchemeProductList) @@ -609,13 +614,21 @@ namespace BBWYB.Server.Business insertHistoryPSPList.Add(historyPsp); #endregion } + var belongBargainTeamId = uInfo.isBargainTeam ? uInfo.department.Id : string.Empty; + var belongBargainTeamName = uInfo.isBargainTeam ? uInfo.department.DepartmentName : string.Empty; + var psupdate = fsql.Update(schemeId) .Set(ps => ps.DefaultCost, defaultCost) .Set(ps => ps.BargainingCost, bargainingCost) .SetIf(bargainingCost != null && bargainingCost != dbps.BargainingCost, ps => ps.LastBargainingTime, DateTime.Now) .Set(ps => ps.HYSchemeId, psReq.HYSchemeId) .Set(ps => ps.HYBDId, psReq.HYBDId) - .Set(ps => ps.Version, newVersion); + .Set(ps => ps.Version, newVersion) + .Set(ps => ps.BelongBargainTeamId, belongBargainTeamId) + .Set(ps => ps.BelongBargainTeamName, belongBargainTeamName) + .Set(ps => ps.UpdateUserId, userId) + .Set(ps => ps.UpdateTeamId, uInfo.department.Id) + .Set(ps => ps.IsBargainTeamUpdate, uInfo.isBargainTeam); updatePurchaseSchemeList.Add(psupdate); #region 处理历史版本 @@ -641,6 +654,20 @@ namespace BBWYB.Server.Business purchaseProductSku.PurchaseRatio = 1; } + if (uInfo.isBargainTeam) + { + if (newPurchaserList.Count() > 0) + { + foreach (var p in newPurchaserList) + { + p.BelongBargainTeamId = uInfo.department.Id; + p.BelongBargainTeamName = uInfo.department.DepartmentName; + p.BelongType = Enums.PurchaserBelongType.临时; + } + } + } + + fsql.Transaction(() => { if (newPurchaserList.Count > 0) From 9dad1ce8067a60200756a4d7c9d617d1eeac8630 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Tue, 5 Mar 2024 05:37:26 +0800 Subject: [PATCH 150/222] =?UTF-8?q?=E5=A4=A7=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataRepair/DataRepairBusiness.cs | 1 + BBWYB.Server.Business/Order/OrderBusiness.cs | 1 + .../PurchaseOrder/PurchaseOrderBusiness.cs | 26 ++++---- .../SkuOptimizationBusiness.cs | 1 + .../Sync/OrderSyncBusiness.cs | 55 ++++++---------- .../SkuOptimizationCompetitiveTenderTask.cs | 66 +++++++++++++++++++ .../Skuoptimizationchildtask.cs | 0 .../Skuoptimizationhistory.cs | 0 .../Skuoptimizationtask.cs | 0 .../SkuOptimizationChildTaskResponse.cs | 2 +- .../SkuOptimizationTaskResponse.cs | 1 + .../Product/SkuOptimizationHistoryResponse.cs | 2 +- BBWYB.Server.Model/MappingProfiles.cs | 1 + 13 files changed, 104 insertions(+), 52 deletions(-) create mode 100644 BBWYB.Server.Model/Db/SkuOptimization/SkuOptimizationCompetitiveTenderTask.cs rename BBWYB.Server.Model/Db/{Product => SkuOptimization}/Skuoptimizationchildtask.cs (100%) rename BBWYB.Server.Model/Db/{Product => SkuOptimization}/Skuoptimizationhistory.cs (100%) rename BBWYB.Server.Model/Db/{Product => SkuOptimization}/Skuoptimizationtask.cs (100%) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 3960818..ed88de9 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -5,6 +5,7 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.HY; +using BBWYB.Server.Model.Db.SkuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json.Linq; diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 1f08dec..1ebb773 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -5,6 +5,7 @@ using BBWYB.Common.Models; using BBWYB.Server.Business.Extensions; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Db.SkuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Microsoft.Extensions.DependencyInjection; diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index d4cdf38..1e0a784 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -8,6 +8,7 @@ using BBWYB.Server.Model.Core; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.Mds; using BBWYB.Server.Model.Db.MDS; +using BBWYB.Server.Model.Db.SkuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Microsoft.Extensions.DependencyInjection; @@ -580,7 +581,7 @@ namespace BBWYB.Server.Business var dbSkuAndPurchaserRelationList = fsql.Select() .Where(spr => purchaserIdList.Contains(spr.PurchaserId) && spr.ShopId == request.ShopId) .ToList(); - var dbPurchaserList = fsql.Select(purchaserIdList).ToList(); + foreach (var purchaserId in purchaserIdList) { purchaserSkuDictionary.TryGetValue(purchaserId, out var fromRequestSkuList); @@ -601,15 +602,10 @@ namespace BBWYB.Server.Business SkuId = x })); } - - #region 更新采购商归属 - var purchaser = dbPurchaserList.FirstOrDefault(p => p.Id == purchaserId); - if (purchaser != null && !string.IsNullOrEmpty(purchaser.BelongBargainTeamId) && purchaser.BelongType == Enums.PurchaserBelongType.临时) - { - var updatePurchaser = fsql.Update(purchaserId).Set(p => p.BelongType, Enums.PurchaserBelongType.永久); - updatePurchaserList.Add(updatePurchaser); - } - #endregion + //var update = fsql.Update(purchaserId) + // .Set(p => p.PurchasedCount + 1) + // .SetIf(newSkuRelationCount > 0, p => p.PurchasedSkuCount + newSkuRelationCount); + //updatePurchaserList.Add(update); } } @@ -798,11 +794,11 @@ namespace BBWYB.Server.Business if (updateSkuOptimizationPurhcasementByIdList.Count() > 0) fsql.Update(updateSkuOptimizationPurhcasementByIdList).Set(s => s.IsPurchasementCompleted, true).ExecuteAffrows(); - if (updatePurchaserList.Count() > 0) - { - foreach (var update in updatePurchaserList) - update.ExecuteAffrows(); - } + //if (updatePurchaserList.Count() > 0) + //{ + // foreach (var update in updatePurchaserList) + // update.ExecuteAffrows(); + //} }); //#region 更新采购方案最新价格 diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index ccbf601..60b0119 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -4,6 +4,7 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.BBWY; +using BBWYB.Server.Model.Db.SkuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json; diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 0928d64..d8cb736 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -2,6 +2,7 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Db.SkuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json.Linq; @@ -145,6 +146,7 @@ namespace BBWYB.Server.Business.Sync List insertSkuOptimizationTaskList = new List(); List insertSkuOptimizationChildTaskList = new List(); + List insertCompetitiveTenderList = new List(); #endregion //等待检查sku销量的订单集合 @@ -403,6 +405,13 @@ namespace BBWYB.Server.Business.Sync if (noFisrstPurchasedSpuList.Count() > 0) { + var bargainTeamList = venderBusiness.GetYiJiaGroup(); //获取议价组 + var bargainTeamIdList = bargainTeamList.Select(t => t.Id).ToList(); + var waitToCompetitiveTenderSchemeList = fsql.Select() + .Where(ps => bargainTeamIdList.Contains(ps.BelongBargainTeamId) && + skuIdList.Contains(ps.SkuId)) + .ToList(); //需要参与竞标采购方案 + foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) { foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) @@ -460,8 +469,7 @@ namespace BBWYB.Server.Business.Sync #region 创建待优化子任务 { - var yijiagroups = venderBusiness.GetYiJiaGroup(); - foreach (var department in yijiagroups) + foreach (var department in bargainTeamList) { var skuOptimizationChildTask = new SkuOptimizationChildTask() { @@ -473,6 +481,13 @@ namespace BBWYB.Server.Business.Sync OptimizationTaskId = skuOptimizationTask.Id }; insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask); + + #region 创建竞标任务 + var schemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.SkuId == waitCheckOrderSku.SkuId && + ps.BelongBargainTeamId == department.Id) + .ToList(); + + #endregion } } #endregion @@ -501,39 +516,6 @@ namespace BBWYB.Server.Business.Sync } } } - - //#region 更新订单sku优化标记 - //var allSkuOptimizationTaskList = dbSkuOptimizationTaskList.Union(insertSkuOptimizationTaskList); - //foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) - //{ - // foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) - // { - // var task = allSkuOptimizationTaskList.FirstOrDefault(t => t.SkuId == waitCheckOrderSku.SkuId); - // if (task != null) - // { - // #region 更新sku优化标记 - // var oskuId = long.Parse(waitCheckOrderSku.SkuId); - // var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); - // if (insertOrderSku != null) - // { - // insertOrderSku.IsNeedOptimization = 1; - // insertOrderSku.TriggerOptimizationReason = task.TriggerOptimizationReason; - // } - // else - // { - // //updateOrderSkuIdList_OptimizationFlag.Add(oskuId); - // if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(task.TriggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList)) - // { - // updateOSkuOptimizationFlagByReasonList = new List(); - // updateOSkuOptimizationFlagByReasonGroups.Add(task.TriggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList); - // } - // updateOSkuOptimizationFlagByReasonList.Add(oskuId); - // } - // #endregion - // } - // } - //} - //#endregion } } #endregion @@ -562,6 +544,9 @@ namespace BBWYB.Server.Business.Sync if (insertSkuOptimizationChildTaskList.Count() > 0) fsql.Insert(insertSkuOptimizationChildTaskList).ExecuteAffrows(); + if (insertCompetitiveTenderList.Count() > 0) + fsql.Insert(insertCompetitiveTenderList).ExecuteAffrows(); + if (updateOrderList.Count() > 0) foreach (var update in updateOrderList) update.ExecuteAffrows(); diff --git a/BBWYB.Server.Model/Db/SkuOptimization/SkuOptimizationCompetitiveTenderTask.cs b/BBWYB.Server.Model/Db/SkuOptimization/SkuOptimizationCompetitiveTenderTask.cs new file mode 100644 index 0000000..ca9b2fe --- /dev/null +++ b/BBWYB.Server.Model/Db/SkuOptimization/SkuOptimizationCompetitiveTenderTask.cs @@ -0,0 +1,66 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// 采购方案竞标表 + /// + [Table(Name = "skuoptimizationcompetitivetendertask", DisableSyncStructure = true)] + public partial class SkuOptimizationCompetitiveTenderTask + { + [Column(DbType = "bigint", IsPrimary = true)] + public long Id { get; set; } + + [Column(DbType = "bigint")] + public long? ChildTaskId { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 是否更新报价 + /// + public bool? IsUpdateQuotedPrice { get; set; } + + /// + /// 更新后的运费 + /// + public decimal? NewFreight { get; set; } + + /// + /// 更新后的报价 + /// + public decimal? NewQuotedPrice { get; set; } + + /// + /// 未更新的运费 + /// + public decimal? OldFreight { get; set; } + + /// + /// 未更新的报价 + /// + public decimal? OldQuotedPrice { get; set; } + + [Column(DbType = "bigint")] + public long? SchemeId { get; set; } + + [Column(DbType = "bigint")] + public long? TaskId { get; set; } + + [Column(StringLength = 50)] + public string SkuId { get; set; } + + [Column(DbType = "bigint")] + public long? TeamId { get; set; } + + /// + /// 更新时间 + /// + [Column(DbType = "datetime")] + public DateTime? UpdateTime { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs b/BBWYB.Server.Model/Db/SkuOptimization/Skuoptimizationchildtask.cs similarity index 100% rename from BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs rename to BBWYB.Server.Model/Db/SkuOptimization/Skuoptimizationchildtask.cs diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs b/BBWYB.Server.Model/Db/SkuOptimization/Skuoptimizationhistory.cs similarity index 100% rename from BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs rename to BBWYB.Server.Model/Db/SkuOptimization/Skuoptimizationhistory.cs diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/SkuOptimization/Skuoptimizationtask.cs similarity index 100% rename from BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs rename to BBWYB.Server.Model/Db/SkuOptimization/Skuoptimizationtask.cs diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs index fb19868..70997a5 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs @@ -1,4 +1,4 @@ -using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Db.SkuOptimization; namespace BBWYB.Server.Model.Dto { diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs index 830fdd9..00ee0b7 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs @@ -1,4 +1,5 @@ using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Db.SkuOptimization; namespace BBWYB.Server.Model.Dto { diff --git a/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs b/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs index b32d4bc..95a15c0 100644 --- a/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs @@ -1,4 +1,4 @@ -using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Db.SkuOptimization; namespace BBWYB.Server.Model.Dto { diff --git a/BBWYB.Server.Model/MappingProfiles.cs b/BBWYB.Server.Model/MappingProfiles.cs index 94fd5a2..8f323a9 100644 --- a/BBWYB.Server.Model/MappingProfiles.cs +++ b/BBWYB.Server.Model/MappingProfiles.cs @@ -1,5 +1,6 @@ using AutoMapper; using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Db.SkuOptimization; using BBWYB.Server.Model.Dto; namespace BBWYB.Server.Model From b063f86688a2982e1ce4f9f4ead52206e018f571 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 5 Mar 2024 15:22:04 +0800 Subject: [PATCH 151/222] =?UTF-8?q?=E5=B1=8F=E8=94=BDSKU=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=92=8C=E4=BC=98=E5=8C=96=E5=8E=86=E5=8F=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 114 +++---- .../Sync/OrderSyncBusiness.cs | 300 +++++++++--------- 2 files changed, 199 insertions(+), 215 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 1e0a784..bbeacb0 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -684,65 +684,65 @@ namespace BBWYB.Server.Business } #endregion - #region 创建优化历史 - { - //本批次在线采购的订单sku集合 - var allBelongSkuIdList = request.CargoParamGroupList.SelectMany(cg => cg.CargoParamList.Select(c => c.BelongSkuId)).Distinct().ToList(); - //var optimizationSkuIdList = orderSkus.Where(osku => osku.IsOptimizationCompleted == 1 && allBelongSkuIdList.Contains(osku.SkuId)) - // .Select(osku => osku.SkuId) - // .ToList(); - - var optimizationTaskList = fsql.Select() - .Where(s => allBelongSkuIdList.Contains(s.SkuId) && - s.IsOptimizationCompleted == true && - s.IsPurchasementCompleted == false) - .ToList(); - - var optimizationSkuIdList = optimizationTaskList.Select(s => s.SkuId).Distinct().ToList(); - if (optimizationSkuIdList.Count() > 0) - { - //优化历史 - var optimizationHistoryList = fsql.Select() - .Where(s1 => s1.ShopId == request.ShopId && optimizationSkuIdList.Contains(s1.SkuId)) - .GroupBy(s1 => s1.SkuId) - .WithTempQuery(g => new { MaxId = g.Max(g.Value.Id) }) - .From() - .InnerJoin((s1, s2) => s1.MaxId == s2.Id) - .ToList((s1, s2) => s2); - - - foreach (var optimizationSkuId in optimizationSkuIdList) - { - var orderSkuCost = allOrderSkuCostList.FirstOrDefault(x => x.SkuId == optimizationSkuId); - if (orderSkuCost == null) - continue; - var orderSku = orderSkus.FirstOrDefault(x => x.SkuId == optimizationSkuId); - var lastHistory = optimizationHistoryList.FirstOrDefault(x => x.SkuId == optimizationSkuId); + //#region 创建优化历史 + //{ + // //本批次在线采购的订单sku集合 + // var allBelongSkuIdList = request.CargoParamGroupList.SelectMany(cg => cg.CargoParamList.Select(c => c.BelongSkuId)).Distinct().ToList(); + // //var optimizationSkuIdList = orderSkus.Where(osku => osku.IsOptimizationCompleted == 1 && allBelongSkuIdList.Contains(osku.SkuId)) + // // .Select(osku => osku.SkuId) + // // .ToList(); + + // var optimizationTaskList = fsql.Select() + // .Where(s => allBelongSkuIdList.Contains(s.SkuId) && + // s.IsOptimizationCompleted == true && + // s.IsPurchasementCompleted == false) + // .ToList(); + + // var optimizationSkuIdList = optimizationTaskList.Select(s => s.SkuId).Distinct().ToList(); + // if (optimizationSkuIdList.Count() > 0) + // { + // //优化历史 + // var optimizationHistoryList = fsql.Select() + // .Where(s1 => s1.ShopId == request.ShopId && optimizationSkuIdList.Contains(s1.SkuId)) + // .GroupBy(s1 => s1.SkuId) + // .WithTempQuery(g => new { MaxId = g.Max(g.Value.Id) }) + // .From() + // .InnerJoin((s1, s2) => s1.MaxId == s2.Id) + // .ToList((s1, s2) => s2); - var currentPurchasePrice = orderSkuCost.SkuAmount / orderSku.ItemTotal; - var ratio = (lastHistory?.LastPurchasePrice ?? 0) == 0 ? 0 : 1 - currentPurchasePrice / lastHistory.LastPurchasePrice; - var newOptimizationHistory = new SkuOptimizationHistory() - { - Id = idGenerator.NewLong(), - CreateTime = DateTime.Now, - CurrentPurchasePrice = orderSkuCost.SkuAmount / orderSku.ItemTotal, - ProductId = orderSku.ProductId, - ShopId = request.ShopId, - SkuId = optimizationSkuId, - LastPurchasePrice = lastHistory?.LastPurchasePrice ?? 0, - OptimizationRatio = ratio, - TriggerOptimizationReason = orderSku.TriggerOptimizationReason - }; - insertSkuOptimizationHistoryList.Add(newOptimizationHistory); - - var skuOptimizationTask = optimizationTaskList.FirstOrDefault(x => x.SkuId == optimizationSkuId); - if (skuOptimizationTask != null) - updateSkuOptimizationPurhcasementByIdList.Add(skuOptimizationTask.Id); - } - } - } - #endregion + // foreach (var optimizationSkuId in optimizationSkuIdList) + // { + // var orderSkuCost = allOrderSkuCostList.FirstOrDefault(x => x.SkuId == optimizationSkuId); + // if (orderSkuCost == null) + // continue; + // var orderSku = orderSkus.FirstOrDefault(x => x.SkuId == optimizationSkuId); + // var lastHistory = optimizationHistoryList.FirstOrDefault(x => x.SkuId == optimizationSkuId); + + // var currentPurchasePrice = orderSkuCost.SkuAmount / orderSku.ItemTotal; + // var ratio = (lastHistory?.LastPurchasePrice ?? 0) == 0 ? 0 : 1 - currentPurchasePrice / lastHistory.LastPurchasePrice; + + // var newOptimizationHistory = new SkuOptimizationHistory() + // { + // Id = idGenerator.NewLong(), + // CreateTime = DateTime.Now, + // CurrentPurchasePrice = orderSkuCost.SkuAmount / orderSku.ItemTotal, + // ProductId = orderSku.ProductId, + // ShopId = request.ShopId, + // SkuId = optimizationSkuId, + // LastPurchasePrice = lastHistory?.LastPurchasePrice ?? 0, + // OptimizationRatio = ratio, + // TriggerOptimizationReason = orderSku.TriggerOptimizationReason + // }; + // insertSkuOptimizationHistoryList.Add(newOptimizationHistory); + + // var skuOptimizationTask = optimizationTaskList.FirstOrDefault(x => x.SkuId == optimizationSkuId); + // if (skuOptimizationTask != null) + // updateSkuOptimizationPurhcasementByIdList.Add(skuOptimizationTask.Id); + // } + // } + //} + //#endregion fsql.Transaction(() => { diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index d8cb736..fb6521f 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -383,142 +383,142 @@ namespace BBWYB.Server.Business.Sync } #endregion - #region 检查待议价任务 - { - if (waitToCheckSkuSaleOrderList.Count() > 0) - { - var skuIdList = waitToCheckSkuSaleOrderList.SelectMany(o => o.OrderSkuList.Select(osku => osku.SkuId)).Distinct().ToList(); - - //没有完成首次采购的spu - var noFisrstPurchasedSpuList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList) - .Where(s => s.IsFirstPurchaseCompleted == false) - .Select(s => s.ProductId) - .ToList(); - - //查询已存在未结束的优化任务 - var dbSkuOptimizationTaskList = fsql.Select() - .Where(t => t.ShopId == shopId && - t.IsOptimizationCompleted == false && - skuIdList.Contains(t.SkuId)) - .ToList(); - - - if (noFisrstPurchasedSpuList.Count() > 0) - { - var bargainTeamList = venderBusiness.GetYiJiaGroup(); //获取议价组 - var bargainTeamIdList = bargainTeamList.Select(t => t.Id).ToList(); - var waitToCompetitiveTenderSchemeList = fsql.Select() - .Where(ps => bargainTeamIdList.Contains(ps.BelongBargainTeamId) && - skuIdList.Contains(ps.SkuId)) - .ToList(); //需要参与竞标采购方案 - - foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) - { - foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) - { - if (noFisrstPurchasedSpuList.Contains(waitCheckOrderSku.ProductId) && - !dbSkuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId) && - !insertSkuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId)) - { - #region 解析来源店铺数据 - JArray belongSkus = null; - string sourceShopName = string.Empty; - if (!string.IsNullOrEmpty(waitCheckOrder.Extended)) - { - try - { - var jobject = JObject.Parse(waitCheckOrder.Extended); - //dbOrder.SourceSku = jobject.Value("SourceSku"); - sourceShopName = jobject.Value("SourceShopName"); - - if (jobject.ContainsKey("BelongSkus")) - belongSkus = jobject["BelongSkus"] as JArray; - - } - catch (Exception ex) - { - - } - } - #endregion - - #region 创建待优化任务 - var skuOptimizationTask = new SkuOptimizationTask() - { - Id = idGenerator.NewLong(), - PreItemCount = 0, - PrePurchasedAmount = 0, - IsOptimizationCompleted = false, - IsPurchasementCompleted = false, - CreateTime = DateTime.Now, - SafeWarningRemainingDay = 0, - TriggerOptimizationReason = Enums.TriggerOptimizationReason.首次采购, - SkuId = waitCheckOrderSku.SkuId, - ShopId = shopId, - ProductId = waitCheckOrderSku.ProductId, - BelongShopName = sourceShopName, - CompletionTime = null, - JDSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == waitCheckOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty, - LastOptimizationRatio = 0, - LastPurchasePrice = 0, - LastOptimizationTime = null - }; - - insertSkuOptimizationTaskList.Add(skuOptimizationTask); - #endregion - - #region 创建待优化子任务 - { - foreach (var department in bargainTeamList) - { - var skuOptimizationChildTask = new SkuOptimizationChildTask() - { - Id = idGenerator.NewLong(), - BelongTeamId = department.Id, - BelongTeamName = department.DepartmentName, - CompletionTime = null, - IsOptimizationCompleted = false, - OptimizationTaskId = skuOptimizationTask.Id - }; - insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask); - - #region 创建竞标任务 - var schemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.SkuId == waitCheckOrderSku.SkuId && - ps.BelongBargainTeamId == department.Id) - .ToList(); - - #endregion - } - } - #endregion - - #region 创建待优化限时任务 - - //判断sku是否首次采购 - var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == waitCheckOrderSku.SkuId); - - insertTimeLimitTaskList.Add(new TimeLimitTask() - { - Id = idGenerator.NewLong(), - CreateTme = DateTime.Now, - //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), - ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), - //OrderId = o.OrderId, - //OrderSn = o.OrderSn, - ShopId = shopId, - SkuId = waitCheckOrderSku.SkuId, - TaskType = Enums.TimeLimitTaskType.待议价任务, - TaskId = skuOptimizationTask.Id, - Remark = "首次采购限时任务" - }); - #endregion - } - } - } - } - } - } - #endregion + //#region 检查待议价任务 + //{ + // if (waitToCheckSkuSaleOrderList.Count() > 0) + // { + // var skuIdList = waitToCheckSkuSaleOrderList.SelectMany(o => o.OrderSkuList.Select(osku => osku.SkuId)).Distinct().ToList(); + + // //没有完成首次采购的spu + // var noFisrstPurchasedSpuList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList) + // .Where(s => s.IsFirstPurchaseCompleted == false) + // .Select(s => s.ProductId) + // .ToList(); + + // //查询已存在未结束的优化任务 + // var dbSkuOptimizationTaskList = fsql.Select() + // .Where(t => t.ShopId == shopId && + // t.IsOptimizationCompleted == false && + // skuIdList.Contains(t.SkuId)) + // .ToList(); + + + // if (noFisrstPurchasedSpuList.Count() > 0) + // { + // var bargainTeamList = venderBusiness.GetYiJiaGroup(); //获取议价组 + // var bargainTeamIdList = bargainTeamList.Select(t => t.Id).ToList(); + // var waitToCompetitiveTenderSchemeList = fsql.Select() + // .Where(ps => bargainTeamIdList.Contains(ps.BelongBargainTeamId) && + // skuIdList.Contains(ps.SkuId)) + // .ToList(); //需要参与竞标采购方案 + + // foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) + // { + // foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) + // { + // if (noFisrstPurchasedSpuList.Contains(waitCheckOrderSku.ProductId) && + // !dbSkuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId) && + // !insertSkuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId)) + // { + // #region 解析来源店铺数据 + // JArray belongSkus = null; + // string sourceShopName = string.Empty; + // if (!string.IsNullOrEmpty(waitCheckOrder.Extended)) + // { + // try + // { + // var jobject = JObject.Parse(waitCheckOrder.Extended); + // //dbOrder.SourceSku = jobject.Value("SourceSku"); + // sourceShopName = jobject.Value("SourceShopName"); + + // if (jobject.ContainsKey("BelongSkus")) + // belongSkus = jobject["BelongSkus"] as JArray; + + // } + // catch (Exception ex) + // { + + // } + // } + // #endregion + + // #region 创建待优化任务 + // var skuOptimizationTask = new SkuOptimizationTask() + // { + // Id = idGenerator.NewLong(), + // PreItemCount = 0, + // PrePurchasedAmount = 0, + // IsOptimizationCompleted = false, + // IsPurchasementCompleted = false, + // CreateTime = DateTime.Now, + // SafeWarningRemainingDay = 0, + // TriggerOptimizationReason = Enums.TriggerOptimizationReason.首次采购, + // SkuId = waitCheckOrderSku.SkuId, + // ShopId = shopId, + // ProductId = waitCheckOrderSku.ProductId, + // BelongShopName = sourceShopName, + // CompletionTime = null, + // JDSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == waitCheckOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty, + // LastOptimizationRatio = 0, + // LastPurchasePrice = 0, + // LastOptimizationTime = null + // }; + + // insertSkuOptimizationTaskList.Add(skuOptimizationTask); + // #endregion + + // #region 创建待优化子任务 + // { + // foreach (var department in bargainTeamList) + // { + // var skuOptimizationChildTask = new SkuOptimizationChildTask() + // { + // Id = idGenerator.NewLong(), + // BelongTeamId = department.Id, + // BelongTeamName = department.DepartmentName, + // CompletionTime = null, + // IsOptimizationCompleted = false, + // OptimizationTaskId = skuOptimizationTask.Id + // }; + // insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask); + + // #region 创建竞标任务 + // var schemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.SkuId == waitCheckOrderSku.SkuId && + // ps.BelongBargainTeamId == department.Id) + // .ToList(); + + // #endregion + // } + // } + // #endregion + + // #region 创建待优化限时任务 + + // //判断sku是否首次采购 + // var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == waitCheckOrderSku.SkuId); + + // insertTimeLimitTaskList.Add(new TimeLimitTask() + // { + // Id = idGenerator.NewLong(), + // CreateTme = DateTime.Now, + // //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), + // ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), + // //OrderId = o.OrderId, + // //OrderSn = o.OrderSn, + // ShopId = shopId, + // SkuId = waitCheckOrderSku.SkuId, + // TaskType = Enums.TimeLimitTaskType.待议价任务, + // TaskId = skuOptimizationTask.Id, + // Remark = "首次采购限时任务" + // }); + // #endregion + // } + // } + // } + // } + // } + //} + //#endregion #region 检查限时采购任务 CheckPurchaseTimeLimitTask(shopId, qtOrderList.Items, dbPurchaseTimeLimitTaskList, insertTimeLimitTaskList); @@ -538,14 +538,14 @@ namespace BBWYB.Server.Business.Sync if (insertTimeLimitTaskList.Count() > 0) fsql.Insert(insertTimeLimitTaskList).ExecuteAffrows(); - if (insertSkuOptimizationTaskList.Count() > 0) - fsql.Insert(insertSkuOptimizationTaskList).ExecuteAffrows(); + //if (insertSkuOptimizationTaskList.Count() > 0) + // fsql.Insert(insertSkuOptimizationTaskList).ExecuteAffrows(); - if (insertSkuOptimizationChildTaskList.Count() > 0) - fsql.Insert(insertSkuOptimizationChildTaskList).ExecuteAffrows(); + //if (insertSkuOptimizationChildTaskList.Count() > 0) + // fsql.Insert(insertSkuOptimizationChildTaskList).ExecuteAffrows(); - if (insertCompetitiveTenderList.Count() > 0) - fsql.Insert(insertCompetitiveTenderList).ExecuteAffrows(); + //if (insertCompetitiveTenderList.Count() > 0) + // fsql.Insert(insertCompetitiveTenderList).ExecuteAffrows(); if (updateOrderList.Count() > 0) foreach (var update in updateOrderList) @@ -574,22 +574,6 @@ namespace BBWYB.Server.Business.Sync .ExecuteAffrows(); } - //if (updateOrderSkuIdList_OptimizationFlag.Count() > 0) - // fsql.Update(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows(); - //if (updateOSkuOptimizationFlagByReasonGroups.Keys.Count() > 0) - //{ - // foreach (var triggerOptimizationReason in updateOSkuOptimizationFlagByReasonGroups.Keys) - // { - // var updateOSkuListOptimizationFlagList = updateOSkuOptimizationFlagByReasonGroups[triggerOptimizationReason]; - // if (updateOSkuListOptimizationFlagList != null && updateOSkuListOptimizationFlagList.Count > 0) - // { - // fsql.Update(updateOSkuListOptimizationFlagList).Set(osku => osku.IsNeedOptimization, 1) - // .Set(osku => osku.TriggerOptimizationReason, triggerOptimizationReason) - // .ExecuteAffrows(); - // } - // } - //} - foreach (var key in deductionSkuCountDictionary.Keys) fsql.Update(key).Set(s => s.ItemCount - deductionSkuCountDictionary[key]).ExecuteAffrows(); foreach (var key in deductionSpuCountDictionary.Keys) From dd6246bd33bebb05046fd37138b2c91dc9f1109d Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 5 Mar 2024 15:37:30 +0800 Subject: [PATCH 152/222] =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataRepair/DataRepairBusiness.cs | 1 - BBWYB.Server.Business/Order/OrderBusiness.cs | 1 - .../PurchaseOrder/PurchaseOrderBusiness.cs | 26 ++--- .../SkuOptimizationBusiness.cs | 1 - .../Sync/OrderSyncBusiness.cs | 98 +++++++++---------- .../Skuoptimizationchildtask.cs | 0 .../Skuoptimizationhistory.cs | 0 .../Skuoptimizationtask.cs | 0 .../SkuOptimizationCompetitiveTenderTask.cs | 66 ------------- .../SkuOptimizationChildTaskResponse.cs | 2 +- .../SkuOptimizationTaskResponse.cs | 1 - .../Product/SkuOptimizationHistoryResponse.cs | 2 +- BBWYB.Server.Model/MappingProfiles.cs | 1 - 13 files changed, 65 insertions(+), 134 deletions(-) rename BBWYB.Server.Model/Db/{SkuOptimization => Product}/Skuoptimizationchildtask.cs (100%) rename BBWYB.Server.Model/Db/{SkuOptimization => Product}/Skuoptimizationhistory.cs (100%) rename BBWYB.Server.Model/Db/{SkuOptimization => Product}/Skuoptimizationtask.cs (100%) delete mode 100644 BBWYB.Server.Model/Db/SkuOptimization/SkuOptimizationCompetitiveTenderTask.cs diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index ed88de9..3960818 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -5,7 +5,6 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.HY; -using BBWYB.Server.Model.Db.SkuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json.Linq; diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 1ebb773..1f08dec 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -5,7 +5,6 @@ using BBWYB.Common.Models; using BBWYB.Server.Business.Extensions; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; -using BBWYB.Server.Model.Db.SkuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Microsoft.Extensions.DependencyInjection; diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index bbeacb0..8b0e730 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -8,7 +8,6 @@ using BBWYB.Server.Model.Core; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.Mds; using BBWYB.Server.Model.Db.MDS; -using BBWYB.Server.Model.Db.SkuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Microsoft.Extensions.DependencyInjection; @@ -581,7 +580,7 @@ namespace BBWYB.Server.Business var dbSkuAndPurchaserRelationList = fsql.Select() .Where(spr => purchaserIdList.Contains(spr.PurchaserId) && spr.ShopId == request.ShopId) .ToList(); - + var dbPurchaserList = fsql.Select(purchaserIdList).ToList(); foreach (var purchaserId in purchaserIdList) { purchaserSkuDictionary.TryGetValue(purchaserId, out var fromRequestSkuList); @@ -602,10 +601,15 @@ namespace BBWYB.Server.Business SkuId = x })); } - //var update = fsql.Update(purchaserId) - // .Set(p => p.PurchasedCount + 1) - // .SetIf(newSkuRelationCount > 0, p => p.PurchasedSkuCount + newSkuRelationCount); - //updatePurchaserList.Add(update); + + #region 更新采购商归属 + var purchaser = dbPurchaserList.FirstOrDefault(p => p.Id == purchaserId); + if (purchaser != null && !string.IsNullOrEmpty(purchaser.BelongBargainTeamId) && purchaser.BelongType == Enums.PurchaserBelongType.临时) + { + var updatePurchaser = fsql.Update(purchaserId).Set(p => p.BelongType, Enums.PurchaserBelongType.永久); + updatePurchaserList.Add(updatePurchaser); + } + #endregion } } @@ -794,11 +798,11 @@ namespace BBWYB.Server.Business if (updateSkuOptimizationPurhcasementByIdList.Count() > 0) fsql.Update(updateSkuOptimizationPurhcasementByIdList).Set(s => s.IsPurchasementCompleted, true).ExecuteAffrows(); - //if (updatePurchaserList.Count() > 0) - //{ - // foreach (var update in updatePurchaserList) - // update.ExecuteAffrows(); - //} + if (updatePurchaserList.Count() > 0) + { + foreach (var update in updatePurchaserList) + update.ExecuteAffrows(); + } }); //#region 更新采购方案最新价格 diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 60b0119..ccbf601 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -4,7 +4,6 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.BBWY; -using BBWYB.Server.Model.Db.SkuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json; diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index fb6521f..7035c9d 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -2,7 +2,6 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; -using BBWYB.Server.Model.Db.SkuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json.Linq; @@ -146,7 +145,6 @@ namespace BBWYB.Server.Business.Sync List insertSkuOptimizationTaskList = new List(); List insertSkuOptimizationChildTaskList = new List(); - List insertCompetitiveTenderList = new List(); #endregion //等待检查sku销量的订单集合 @@ -467,58 +465,58 @@ namespace BBWYB.Server.Business.Sync // insertSkuOptimizationTaskList.Add(skuOptimizationTask); // #endregion - // #region 创建待优化子任务 - // { - // foreach (var department in bargainTeamList) - // { - // var skuOptimizationChildTask = new SkuOptimizationChildTask() - // { - // Id = idGenerator.NewLong(), - // BelongTeamId = department.Id, - // BelongTeamName = department.DepartmentName, - // CompletionTime = null, - // IsOptimizationCompleted = false, - // OptimizationTaskId = skuOptimizationTask.Id - // }; - // insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask); - - // #region 创建竞标任务 - // var schemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.SkuId == waitCheckOrderSku.SkuId && - // ps.BelongBargainTeamId == department.Id) - // .ToList(); - - // #endregion - // } - // } - // #endregion + #region 创建待优化子任务 + { + foreach (var department in bargainTeamList) + { + var skuOptimizationChildTask = new SkuOptimizationChildTask() + { + Id = idGenerator.NewLong(), + BelongTeamId = department.Id, + BelongTeamName = department.DepartmentName, + CompletionTime = null, + IsOptimizationCompleted = false, + OptimizationTaskId = skuOptimizationTask.Id + }; + insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask); + + #region 创建竞标任务 + var schemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.SkuId == waitCheckOrderSku.SkuId && + ps.BelongBargainTeamId == department.Id) + .ToList(); + + #endregion + } + } + #endregion // #region 创建待优化限时任务 // //判断sku是否首次采购 // var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == waitCheckOrderSku.SkuId); - // insertTimeLimitTaskList.Add(new TimeLimitTask() - // { - // Id = idGenerator.NewLong(), - // CreateTme = DateTime.Now, - // //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), - // ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), - // //OrderId = o.OrderId, - // //OrderSn = o.OrderSn, - // ShopId = shopId, - // SkuId = waitCheckOrderSku.SkuId, - // TaskType = Enums.TimeLimitTaskType.待议价任务, - // TaskId = skuOptimizationTask.Id, - // Remark = "首次采购限时任务" - // }); - // #endregion - // } - // } - // } - // } - // } - //} - //#endregion + insertTimeLimitTaskList.Add(new TimeLimitTask() + { + Id = idGenerator.NewLong(), + CreateTme = DateTime.Now, + //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), + //OrderId = o.OrderId, + //OrderSn = o.OrderSn, + ShopId = shopId, + SkuId = waitCheckOrderSku.SkuId, + TaskType = Enums.TimeLimitTaskType.待议价任务, + TaskId = skuOptimizationTask.Id, + Remark = "首次采购限时任务" + }); + #endregion + } + } + } + } + } + } + #endregion #region 检查限时采购任务 CheckPurchaseTimeLimitTask(shopId, qtOrderList.Items, dbPurchaseTimeLimitTaskList, insertTimeLimitTaskList); @@ -544,8 +542,8 @@ namespace BBWYB.Server.Business.Sync //if (insertSkuOptimizationChildTaskList.Count() > 0) // fsql.Insert(insertSkuOptimizationChildTaskList).ExecuteAffrows(); - //if (insertCompetitiveTenderList.Count() > 0) - // fsql.Insert(insertCompetitiveTenderList).ExecuteAffrows(); + if (insertCompetitiveTenderList.Count() > 0) + fsql.Insert(insertCompetitiveTenderList).ExecuteAffrows(); if (updateOrderList.Count() > 0) foreach (var update in updateOrderList) diff --git a/BBWYB.Server.Model/Db/SkuOptimization/Skuoptimizationchildtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs similarity index 100% rename from BBWYB.Server.Model/Db/SkuOptimization/Skuoptimizationchildtask.cs rename to BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs diff --git a/BBWYB.Server.Model/Db/SkuOptimization/Skuoptimizationhistory.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs similarity index 100% rename from BBWYB.Server.Model/Db/SkuOptimization/Skuoptimizationhistory.cs rename to BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs diff --git a/BBWYB.Server.Model/Db/SkuOptimization/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs similarity index 100% rename from BBWYB.Server.Model/Db/SkuOptimization/Skuoptimizationtask.cs rename to BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs diff --git a/BBWYB.Server.Model/Db/SkuOptimization/SkuOptimizationCompetitiveTenderTask.cs b/BBWYB.Server.Model/Db/SkuOptimization/SkuOptimizationCompetitiveTenderTask.cs deleted file mode 100644 index ca9b2fe..0000000 --- a/BBWYB.Server.Model/Db/SkuOptimization/SkuOptimizationCompetitiveTenderTask.cs +++ /dev/null @@ -1,66 +0,0 @@ -using FreeSql.DataAnnotations; - -namespace BBWYB.Server.Model.Db -{ - - /// - /// 采购方案竞标表 - /// - [Table(Name = "skuoptimizationcompetitivetendertask", DisableSyncStructure = true)] - public partial class SkuOptimizationCompetitiveTenderTask - { - [Column(DbType = "bigint", IsPrimary = true)] - public long Id { get; set; } - - [Column(DbType = "bigint")] - public long? ChildTaskId { get; set; } - - [Column(DbType = "datetime")] - public DateTime? CreateTime { get; set; } - - /// - /// 是否更新报价 - /// - public bool? IsUpdateQuotedPrice { get; set; } - - /// - /// 更新后的运费 - /// - public decimal? NewFreight { get; set; } - - /// - /// 更新后的报价 - /// - public decimal? NewQuotedPrice { get; set; } - - /// - /// 未更新的运费 - /// - public decimal? OldFreight { get; set; } - - /// - /// 未更新的报价 - /// - public decimal? OldQuotedPrice { get; set; } - - [Column(DbType = "bigint")] - public long? SchemeId { get; set; } - - [Column(DbType = "bigint")] - public long? TaskId { get; set; } - - [Column(StringLength = 50)] - public string SkuId { get; set; } - - [Column(DbType = "bigint")] - public long? TeamId { get; set; } - - /// - /// 更新时间 - /// - [Column(DbType = "datetime")] - public DateTime? UpdateTime { get; set; } - - } - -} diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs index 70997a5..fb19868 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs @@ -1,4 +1,4 @@ -using BBWYB.Server.Model.Db.SkuOptimization; +using BBWYB.Server.Model.Db; namespace BBWYB.Server.Model.Dto { diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs index 00ee0b7..830fdd9 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs @@ -1,5 +1,4 @@ using BBWYB.Server.Model.Db; -using BBWYB.Server.Model.Db.SkuOptimization; namespace BBWYB.Server.Model.Dto { diff --git a/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs b/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs index 95a15c0..b32d4bc 100644 --- a/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs @@ -1,4 +1,4 @@ -using BBWYB.Server.Model.Db.SkuOptimization; +using BBWYB.Server.Model.Db; namespace BBWYB.Server.Model.Dto { diff --git a/BBWYB.Server.Model/MappingProfiles.cs b/BBWYB.Server.Model/MappingProfiles.cs index 8f323a9..94fd5a2 100644 --- a/BBWYB.Server.Model/MappingProfiles.cs +++ b/BBWYB.Server.Model/MappingProfiles.cs @@ -1,6 +1,5 @@ using AutoMapper; using BBWYB.Server.Model.Db; -using BBWYB.Server.Model.Db.SkuOptimization; using BBWYB.Server.Model.Dto; namespace BBWYB.Server.Model From 080d907970e9086e4ea699b1f5a34f4233224739 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 5 Mar 2024 15:37:43 +0800 Subject: [PATCH 153/222] =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sync/OrderSyncBusiness.cs | 96 +++++++++---------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 7035c9d..c4856f4 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -465,58 +465,58 @@ namespace BBWYB.Server.Business.Sync // insertSkuOptimizationTaskList.Add(skuOptimizationTask); // #endregion - #region 创建待优化子任务 - { - foreach (var department in bargainTeamList) - { - var skuOptimizationChildTask = new SkuOptimizationChildTask() - { - Id = idGenerator.NewLong(), - BelongTeamId = department.Id, - BelongTeamName = department.DepartmentName, - CompletionTime = null, - IsOptimizationCompleted = false, - OptimizationTaskId = skuOptimizationTask.Id - }; - insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask); - - #region 创建竞标任务 - var schemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.SkuId == waitCheckOrderSku.SkuId && - ps.BelongBargainTeamId == department.Id) - .ToList(); - - #endregion - } - } - #endregion + // #region 创建待优化子任务 + // { + // foreach (var department in bargainTeamList) + // { + // var skuOptimizationChildTask = new SkuOptimizationChildTask() + // { + // Id = idGenerator.NewLong(), + // BelongTeamId = department.Id, + // BelongTeamName = department.DepartmentName, + // CompletionTime = null, + // IsOptimizationCompleted = false, + // OptimizationTaskId = skuOptimizationTask.Id + // }; + // insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask); + + // #region 创建竞标任务 + // var schemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.SkuId == waitCheckOrderSku.SkuId && + // ps.BelongBargainTeamId == department.Id) + // .ToList(); + + // #endregion + // } + // } + // #endregion // #region 创建待优化限时任务 // //判断sku是否首次采购 // var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == waitCheckOrderSku.SkuId); - insertTimeLimitTaskList.Add(new TimeLimitTask() - { - Id = idGenerator.NewLong(), - CreateTme = DateTime.Now, - //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), - ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), - //OrderId = o.OrderId, - //OrderSn = o.OrderSn, - ShopId = shopId, - SkuId = waitCheckOrderSku.SkuId, - TaskType = Enums.TimeLimitTaskType.待议价任务, - TaskId = skuOptimizationTask.Id, - Remark = "首次采购限时任务" - }); - #endregion - } - } - } - } - } - } - #endregion + // insertTimeLimitTaskList.Add(new TimeLimitTask() + // { + // Id = idGenerator.NewLong(), + // CreateTme = DateTime.Now, + // //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), + // ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), + // //OrderId = o.OrderId, + // //OrderSn = o.OrderSn, + // ShopId = shopId, + // SkuId = waitCheckOrderSku.SkuId, + // TaskType = Enums.TimeLimitTaskType.待议价任务, + // TaskId = skuOptimizationTask.Id, + // Remark = "首次采购限时任务" + // }); + // #endregion + // } + // } + // } + // } + // } + //} + //#endregion #region 检查限时采购任务 CheckPurchaseTimeLimitTask(shopId, qtOrderList.Items, dbPurchaseTimeLimitTaskList, insertTimeLimitTaskList); @@ -542,8 +542,8 @@ namespace BBWYB.Server.Business.Sync //if (insertSkuOptimizationChildTaskList.Count() > 0) // fsql.Insert(insertSkuOptimizationChildTaskList).ExecuteAffrows(); - if (insertCompetitiveTenderList.Count() > 0) - fsql.Insert(insertCompetitiveTenderList).ExecuteAffrows(); + //if (insertCompetitiveTenderList.Count() > 0) + // fsql.Insert(insertCompetitiveTenderList).ExecuteAffrows(); if (updateOrderList.Count() > 0) foreach (var update in updateOrderList) From 99fda22339d14d90db1401c63b9128eda36dd7b1 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 5 Mar 2024 22:20:40 +0800 Subject: [PATCH 154/222] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataRepair/DataRepairBusiness.cs | 1 + BBWYB.Server.Business/Order/OrderBusiness.cs | 1 + .../PurchaseOrder/PurchaseOrderBusiness.cs | 1 + .../SkuOptimizationBusiness.cs | 4 +- .../Sync/OrderSyncBusiness.cs | 1 + .../Db/Product/Skuoptimizationtask.cs | 140 ------------------ .../Skuoptimizationhistory.cs | 0 .../Db/SpuOptimization/Skuoptimizationtask.cs | 51 +++++++ .../Spuoptimizationbargainteamtask.cs} | 21 +-- .../Spuoptimizationcompetitivetendertask.cs | 59 ++++++++ .../Db/SpuOptimization/Spuoptimizationtask.cs | 89 +++++++++++ .../Product/SkuOptimizationHistoryResponse.cs | 2 +- 12 files changed, 218 insertions(+), 152 deletions(-) delete mode 100644 BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs rename BBWYB.Server.Model/Db/{Product => SpuOptimization}/Skuoptimizationhistory.cs (100%) create mode 100644 BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs rename BBWYB.Server.Model/Db/{Product/Skuoptimizationchildtask.cs => SpuOptimization/Spuoptimizationbargainteamtask.cs} (56%) create mode 100644 BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs create mode 100644 BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 3960818..b496ecf 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -5,6 +5,7 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.HY; +using BBWYB.Server.Model.Db.SpuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json.Linq; diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 1f08dec..7e0e998 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -5,6 +5,7 @@ using BBWYB.Common.Models; using BBWYB.Server.Business.Extensions; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Db.SpuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Microsoft.Extensions.DependencyInjection; diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 8b0e730..71b1f90 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -8,6 +8,7 @@ using BBWYB.Server.Model.Core; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.Mds; using BBWYB.Server.Model.Db.MDS; +using BBWYB.Server.Model.Db.SpuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Microsoft.Extensions.DependencyInjection; diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index ccbf601..c48cf22 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -11,14 +11,14 @@ using Yitter.IdGenerator; namespace BBWYB.Server.Business { - public class SkuOptimizationBusiness : BaseBusiness, IDenpendency + public class OptimizationBusiness : BaseBusiness, IDenpendency { private FreeSqlMultiDBManager fsqlManager; private VenderBusiness venderBusiness; private TimeLimitRules timeLimitRules; private UserBusiness userBusiness; - public SkuOptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager, VenderBusiness venderBusiness, TimeLimitRules timeLimitRules, UserBusiness userBusiness) : base(fsql, nLogManager, idGenerator) + public OptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager, VenderBusiness venderBusiness, TimeLimitRules timeLimitRules, UserBusiness userBusiness) : base(fsql, nLogManager, idGenerator) { this.fsqlManager = fsqlManager; this.venderBusiness = venderBusiness; diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index c4856f4..c4eea87 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -143,6 +143,7 @@ namespace BBWYB.Server.Business.Sync List insertSpuTotalSaleInfoList = new List(); IList updateSpuTotalSaleInfoList = new List(); + List<> List insertSkuOptimizationTaskList = new List(); List insertSkuOptimizationChildTaskList = new List(); #endregion diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs deleted file mode 100644 index 01259a1..0000000 --- a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs +++ /dev/null @@ -1,140 +0,0 @@ -using FreeSql.DataAnnotations; - -namespace BBWYB.Server.Model.Db -{ - - [Table(Name = "skuoptimizationtask", DisableSyncStructure = true)] - public partial class SkuOptimizationTask - { - [Column(DbType = "bigint", IsPrimary = true)] - public long Id { get; set; } - - /// - /// 完成优化时间 - /// - [Column(DbType = "datetime")] - public DateTime? CompletionTime { get; set; } - - [Column(DbType = "datetime")] - public DateTime? CreateTime { get; set; } - - /// - /// 上次优化时间(优化完成后首次采购的时间) - /// - [Column(DbType = "datetime")] - public DateTime? LastOptimizationTime { get; set; } - - /// - /// 是否完成优化 - /// - public bool? IsOptimizationCompleted { get; set; } = false; - - /// - /// 是否完成采购 - /// - public bool? IsPurchasementCompleted { get; set; } = false; - - [Column(StringLength = 50)] - public string JDSkuId { get; set; } - - /// - /// 预估需求量 - /// - [Column(DbType = "int")] - public int? PreItemCount { get; set; } = 0; - - /// - /// 预估采购金额 - /// - [Column(DbType = "decimal(18,2)")] - public decimal? PrePurchasedAmount { get; set; } = 0.00M; - - [Column(StringLength = 50)] - public string ProductId { get; set; } - - /// - /// 距离安全预警天数 - /// - [Column(DbType = "int")] - public int? SafeWarningRemainingDay { get; set; } = 0; - - [Column(DbType = "bigint")] - public long? ShopId { get; set; } - - /// - /// 来源店铺名 - /// - [Column(StringLength = 50)] - public string BelongShopName { get; set; } - - [Column(StringLength = 50)] - public string SkuId { get; set; } - - /// - /// 触发优化原因 首次采购 = 0, 首次优化 = 1, 再次优化 = 2 - /// - [Column(DbType = "int", MapType = typeof(int))] - public Enums.TriggerOptimizationReason? TriggerOptimizationReason { get; set; } = 0; - - - /// - /// 上次优化率 - /// - [Column(DbType = "decimal(18,2)")] - public decimal? LastOptimizationRatio { get; set; } = 0.00M; - - /// - /// 上次采购单价 - /// - [Column(DbType = "decimal(18,2)")] - public decimal? LastPurchasePrice { get; set; } = 0.00M; - - - - #region Extension - - #region TimeLimitTask - [Column(IsIgnore = true)] - public long TimeLimitTaskId { get; set; } - - [Column(IsIgnore = true)] - public DateTime? TimeLimitTaskCompletionTime { get; set; } - - [Column(IsIgnore = true)] - public DateTime? TimeLimitTaskCreateTme { get; set; } - - [Column(IsIgnore = true)] - public DateTime? TimeLimitTaskPayTime { get; set; } - - [Column(IsIgnore = true)] - public DateTime? TimeLimitTaskExpirationTime { get; set; } - - [Column(IsIgnore = true)] - public bool? TimeLimitTaskIsTimely { get; set; } - - [Column(IsIgnore = true)] - public string TimeLimitTaskOrderId { get; set; } - - [Column(IsIgnore = true)] - public string TimeLimitTaskOrderSn { get; set; } - - [Column(IsIgnore = true)] - public long? TimeLimitTaskShopId { get; set; } - - [Column(IsIgnore = true)] - public string TimeLimitTaskSkuId { get; set; } - - [Column(IsIgnore = true)] - public Enums.TimeLimitTaskType? TimeLimitTaskTaskType { get; set; } - - [Column(IsIgnore = true)] - public string TimeLimitTaskRemark { get; set; } - - [Column(IsIgnore = true)] - public long TimeLimitTaskBelongTaskId { get; set; } - #endregion - - #endregion - } - -} diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs b/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationhistory.cs similarity index 100% rename from BBWYB.Server.Model/Db/Product/Skuoptimizationhistory.cs rename to BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationhistory.cs diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs new file mode 100644 index 0000000..dc53051 --- /dev/null +++ b/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs @@ -0,0 +1,51 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// Sku优化任务表 + /// + [Table(Name = "skuoptimizationtask", DisableSyncStructure = true)] + public partial class SkuOptimizationTask + { + + [Column(DbType = "bigint", IsPrimary = true)] + public long Id { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + [Column(StringLength = 50)] + public string JDSkuId { get; set; } + + /// + /// 预估件数;预估件数 + /// + [Column(DbType = "int")] + public int? PreItemCount { get; set; } + + /// + /// 预估采购金额;预估采购金额 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? PrePurchaseAmount { get; set; } + + /// + /// 预估Sku数;预估Sku数 + /// + [Column(DbType = "int")] + public int? PreSkuCount { get; set; } + + [Column(StringLength = 50)] + public string QTSkuId { get; set; } + + /// + /// Spu优化任务Id;Spu优化任务Id + /// + [Column(DbType = "bigint")] + public long? SpuOptimizationTaskId { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs similarity index 56% rename from BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs rename to BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs index 9e141c6..810e234 100644 --- a/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs @@ -3,41 +3,44 @@ namespace BBWYB.Server.Model.Db { - [Table(Name = "skuoptimizationchildtask", DisableSyncStructure = true)] - public partial class SkuOptimizationChildTask + /// + /// SPU优化议价组任务表 + /// + [Table(Name = "spuoptimizationbargainteamtask", DisableSyncStructure = true)] + public partial class SpuOptimizationBargainTeamTask { [Column(DbType = "bigint", IsPrimary = true)] public long Id { get; set; } /// - /// 团队Id (议价组Id) + /// 团队Id (议价组Id);团队Id (议价组Id) /// [Column(StringLength = 50)] public string BelongTeamId { get; set; } /// - /// 团队Name (议价组Name) + /// 议价组名称;议价组名称 /// [Column(StringLength = 50)] public string BelongTeamName { get; set; } /// - /// 完成时间 + /// 完成时间;完成时间 /// [Column(DbType = "datetime")] public DateTime? CompletionTime { get; set; } /// - /// 是否优化完成 + /// 是否优化完成;是否优化完成 /// - public bool? IsOptimizationCompleted { get; set; } = false; + public bool? IsOptimizationCompleted { get; set; } /// - /// 优化任务Id + /// Spu优化任务Id /// [Column(DbType = "bigint")] - public long OptimizationTaskId { get; set; } + public long? SpuOptimizationTaskId { get; set; } } diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs new file mode 100644 index 0000000..6c0c73a --- /dev/null +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs @@ -0,0 +1,59 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// SPU优化竞标任务表 + /// + [Table(Name = "spuoptimizationcompetitivetendertask", DisableSyncStructure = true)] + public partial class SpuOptimizationCompetitiveTenderTask + { + + [Column(IsPrimary = true, IsNullable = false)] + public string Id { get; set; } + + /// + /// 议价组Id;议价组Id + /// + [Column(StringLength = 50)] + public string BargainTeamId { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 是否更新报价;是否更新报价 + /// + public bool? IsUpdateQuotedPrice { get; set; } = false; + + /// + /// 采购方案分组Id;采购方案分组Id + /// + [Column(DbType = "bigint")] + public long? SchemeGroupId { get; set; } + + /// + /// 采购方案Id;采购方案Id + /// + [Column(DbType = "bigint")] + public long? SchemeId { get; set; } + + [Column(StringLength = 50)] + public string SkuId { get; set; } + + /// + /// Spu优化议价组任务Id;Spu优化议价组任务Id + /// + [Column(DbType = "bigint")] + public long? SpuOptimizationBargainTeamTaskId { get; set; } + + /// + /// Spu优化任务Id;Spu优化任务Id + /// + [Column(DbType = "bigint")] + public long? SpuOptimizationTaskId { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs new file mode 100644 index 0000000..41f971a --- /dev/null +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs @@ -0,0 +1,89 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// SPU优化任务表 + /// + [Table(Name = "spuoptimizationtask", DisableSyncStructure = true)] + public partial class SpuOptimizationTask + { + + /// + /// 待优化任务Id;待优化任务Id + /// + [Column(DbType = "bigint", IsPrimary = true)] + public long Id { get; set; } + + /// + /// 需求方店铺Id;需求方店铺Id + /// + [Column(DbType = "bigint")] + public long? BelongShopId { get; set; } + + /// + /// 需求方店铺名称;需求方店铺名称 + /// + [Column(StringLength = 50)] + public string BelongShopName { get; set; } + + /// + /// 完成优化时间;完成优化时间 + /// + [Column(DbType = "datetime")] + public DateTime? CompletionTime { get; set; } + + /// + /// 创建时间;创建时间 + /// + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 是否优化完成;是否优化完成 + /// + public bool? IsOptimizationCompleted { get; set; } + + [Column(StringLength = 50)] + public string JDSpuId { get; set; } + + /// + /// 上次优化时间;上次优化时间 + /// + [Column(DbType = "datetime")] + public DateTime? LastOptimizationTime { get; set; } + + /// + /// 预估件数;预估件数 + /// + [Column(DbType = "int")] + public int? PreItemCount { get; set; } + + /// + /// 预估采购金额;预估采购金额 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? PrePurchaseAmount { get; set; } + + /// + /// 预估Sku数;预估Sku数 + /// + [Column(DbType = "int")] + public int? PreSkuCount { get; set; } + + /// + /// 店铺Id;店铺Id + /// + [Column(DbType = "bigint")] + public long? ShopId { get; set; } + + /// + /// 触发优化原因 首次采购 = 0, 首次优化 = 1, 再次优化 = 2;触发优化原因 首次采购 = 0, 首次优化 = 1, 再次优化 = 2 + /// + [Column(DbType = "int")] + public int? TriggerOptimizationReason { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs b/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs index b32d4bc..f08893f 100644 --- a/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs @@ -1,4 +1,4 @@ -using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Db.SpuOptimization; namespace BBWYB.Server.Model.Dto { From b6ac303148b693d5208a5df1f65962422b16a014 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 6 Mar 2024 00:07:41 +0800 Subject: [PATCH 155/222] =?UTF-8?q?=E5=BE=85=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Sync/OrderSyncBusiness.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index c4eea87..a38e8ff 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -143,9 +143,11 @@ namespace BBWYB.Server.Business.Sync List insertSpuTotalSaleInfoList = new List(); IList updateSpuTotalSaleInfoList = new List(); - List<> + List insertSpuOptimizationTaskList = new List(); List insertSkuOptimizationTaskList = new List(); - List insertSkuOptimizationChildTaskList = new List(); + List insertSkuOptimizationBargainTeamTaskList = new List(); + List insertSkuOptimizationCompetitiveTenderTaskList = new List(); + #endregion //等待检查sku销量的订单集合 From 58035bb015b80b12394a212c5ce106a6d976cf30 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 6 Mar 2024 17:43:15 +0800 Subject: [PATCH 156/222] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E8=B0=83=E6=95=B4=20=E6=9C=AA=E5=AE=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sync/OrderSyncBusiness.cs | 297 ++++++++++-------- .../Db/SpuOptimization/Skuoptimizationtask.cs | 2 +- .../Db/SpuOptimization/Spuoptimizationtask.cs | 5 +- 3 files changed, 166 insertions(+), 138 deletions(-) diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index a38e8ff..35f0749 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -384,142 +384,167 @@ namespace BBWYB.Server.Business.Sync } #endregion - //#region 检查待议价任务 - //{ - // if (waitToCheckSkuSaleOrderList.Count() > 0) - // { - // var skuIdList = waitToCheckSkuSaleOrderList.SelectMany(o => o.OrderSkuList.Select(osku => osku.SkuId)).Distinct().ToList(); - - // //没有完成首次采购的spu - // var noFisrstPurchasedSpuList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList) - // .Where(s => s.IsFirstPurchaseCompleted == false) - // .Select(s => s.ProductId) - // .ToList(); - - // //查询已存在未结束的优化任务 - // var dbSkuOptimizationTaskList = fsql.Select() - // .Where(t => t.ShopId == shopId && - // t.IsOptimizationCompleted == false && - // skuIdList.Contains(t.SkuId)) - // .ToList(); - - - // if (noFisrstPurchasedSpuList.Count() > 0) - // { - // var bargainTeamList = venderBusiness.GetYiJiaGroup(); //获取议价组 - // var bargainTeamIdList = bargainTeamList.Select(t => t.Id).ToList(); - // var waitToCompetitiveTenderSchemeList = fsql.Select() - // .Where(ps => bargainTeamIdList.Contains(ps.BelongBargainTeamId) && - // skuIdList.Contains(ps.SkuId)) - // .ToList(); //需要参与竞标采购方案 - - // foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) - // { - // foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) - // { - // if (noFisrstPurchasedSpuList.Contains(waitCheckOrderSku.ProductId) && - // !dbSkuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId) && - // !insertSkuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId)) - // { - // #region 解析来源店铺数据 - // JArray belongSkus = null; - // string sourceShopName = string.Empty; - // if (!string.IsNullOrEmpty(waitCheckOrder.Extended)) - // { - // try - // { - // var jobject = JObject.Parse(waitCheckOrder.Extended); - // //dbOrder.SourceSku = jobject.Value("SourceSku"); - // sourceShopName = jobject.Value("SourceShopName"); - - // if (jobject.ContainsKey("BelongSkus")) - // belongSkus = jobject["BelongSkus"] as JArray; - - // } - // catch (Exception ex) - // { - - // } - // } - // #endregion - - // #region 创建待优化任务 - // var skuOptimizationTask = new SkuOptimizationTask() - // { - // Id = idGenerator.NewLong(), - // PreItemCount = 0, - // PrePurchasedAmount = 0, - // IsOptimizationCompleted = false, - // IsPurchasementCompleted = false, - // CreateTime = DateTime.Now, - // SafeWarningRemainingDay = 0, - // TriggerOptimizationReason = Enums.TriggerOptimizationReason.首次采购, - // SkuId = waitCheckOrderSku.SkuId, - // ShopId = shopId, - // ProductId = waitCheckOrderSku.ProductId, - // BelongShopName = sourceShopName, - // CompletionTime = null, - // JDSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == waitCheckOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty, - // LastOptimizationRatio = 0, - // LastPurchasePrice = 0, - // LastOptimizationTime = null - // }; - - // insertSkuOptimizationTaskList.Add(skuOptimizationTask); - // #endregion - - // #region 创建待优化子任务 - // { - // foreach (var department in bargainTeamList) - // { - // var skuOptimizationChildTask = new SkuOptimizationChildTask() - // { - // Id = idGenerator.NewLong(), - // BelongTeamId = department.Id, - // BelongTeamName = department.DepartmentName, - // CompletionTime = null, - // IsOptimizationCompleted = false, - // OptimizationTaskId = skuOptimizationTask.Id - // }; - // insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask); - - // #region 创建竞标任务 - // var schemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.SkuId == waitCheckOrderSku.SkuId && - // ps.BelongBargainTeamId == department.Id) - // .ToList(); - - // #endregion - // } - // } - // #endregion - - // #region 创建待优化限时任务 - - // //判断sku是否首次采购 - // var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == waitCheckOrderSku.SkuId); - - // insertTimeLimitTaskList.Add(new TimeLimitTask() - // { - // Id = idGenerator.NewLong(), - // CreateTme = DateTime.Now, - // //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), - // ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), - // //OrderId = o.OrderId, - // //OrderSn = o.OrderSn, - // ShopId = shopId, - // SkuId = waitCheckOrderSku.SkuId, - // TaskType = Enums.TimeLimitTaskType.待议价任务, - // TaskId = skuOptimizationTask.Id, - // Remark = "首次采购限时任务" - // }); - // #endregion - // } - // } - // } - // } - // } - //} - //#endregion + #region 检查待议价任务 + { + if (waitToCheckSkuSaleOrderList.Count() > 0) + { + var spuIdList = waitToCheckSkuSaleOrderList.SelectMany(o => o.OrderSkuList.Select(osku => osku.ProductId)).Distinct().ToList(); + + //没有完成首次采购的spu + var noFisrstPurchasedSpuList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList) + .Where(s => s.IsFirstPurchaseCompleted == false) + .Select(s => s.ProductId) + .ToList(); + + //查询已存在未结束的优化任务 + var dbSpuOptimizationTaskList = fsql.Select() + .Where(t => t.ShopId == shopId && + t.IsOptimizationCompleted == false && + spuIdList.Contains(t.ProductId)) + .ToList(); + + + if (noFisrstPurchasedSpuList.Count() > 0) + { + var bargainTeamList = venderBusiness.GetYiJiaGroup(); //获取议价组 + var bargainTeamIdList = bargainTeamList.Select(t => t.Id).ToList(); + var waitToCompetitiveTenderSchemeList = fsql.Select() + .Where(ps => bargainTeamIdList.Contains(ps.BelongBargainTeamId) && + spuIdList.Contains(ps.ProductId)) + .ToList(); //需要参与竞标采购方案 + + + var waitToCheckOrderSpuGroups = waitToCheckSkuSaleOrderList.SelectMany(o => o.OrderSkuList).GroupBy(osku => osku.ProductId); + foreach (var spuGroup in waitToCheckOrderSpuGroups) + { + if (noFisrstPurchasedSpuList.Contains(spuGroup.Key) && + !dbSpuOptimizationTaskList.Any(t => t.ProductId == spuGroup.Key) && + !insertSpuOptimizationTaskList.Any(t => t.ProductId == spuGroup.Key)) + { + var includeSpuOrderList = waitToCheckSkuSaleOrderList.Where(o => o.OrderSkuList.Any(osku => osku.ProductId == spuGroup.Key)); + + var sourceShopName = string.Empty; + //京东sku-拳探sku下单关系映射表 + var mappingQT_JDSKUDictionary = new Dictionary(); + + #region 解析来源店铺数据 + foreach (var waitCheckOrder in includeSpuOrderList) + { + if (!string.IsNullOrEmpty(waitCheckOrder.Extended)) + { + try + { + var jobject = JObject.Parse(waitCheckOrder.Extended); + sourceShopName = jobject.Value("SourceShopName"); + + if (jobject.ContainsKey("BelongSkus")) + { + var jbelongSkus = jobject["BelongSkus"] as JArray; + foreach (var j in jbelongSkus) + { + var skuId = j.Value("SkuId"); + var belongSkuId = j.Value("BelongSkuId"); + if (!mappingQT_JDSKUDictionary.ContainsKey(skuId)) + mappingQT_JDSKUDictionary.TryAdd(skuId, belongSkuId); + } + } + } + catch (Exception ex) + { + + } + } + } + #endregion + } + } + + foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) + { + + foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) + { + if (noFisrstPurchasedSpuList.Contains(waitCheckOrderSku.ProductId) && + !dbSpuOptimizationTaskList.Any(t => t.ProductId == waitCheckOrderSku.ProductId) && + !insertSpuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId)) + { + #region 创建待优化任务 + var skuOptimizationTask = new SkuOptimizationTask() + { + Id = idGenerator.NewLong(), + PreItemCount = 0, + PrePurchasedAmount = 0, + IsOptimizationCompleted = false, + IsPurchasementCompleted = false, + CreateTime = DateTime.Now, + SafeWarningRemainingDay = 0, + TriggerOptimizationReason = Enums.TriggerOptimizationReason.首次采购, + SkuId = waitCheckOrderSku.SkuId, + ShopId = shopId, + ProductId = waitCheckOrderSku.ProductId, + BelongShopName = sourceShopName, + CompletionTime = null, + JDSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == waitCheckOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty, + LastOptimizationRatio = 0, + LastPurchasePrice = 0, + LastOptimizationTime = null + }; + + insertSkuOptimizationTaskList.Add(skuOptimizationTask); + #endregion + + #region 创建待优化子任务 + { + foreach (var department in bargainTeamList) + { + var skuOptimizationChildTask = new SkuOptimizationChildTask() + { + Id = idGenerator.NewLong(), + BelongTeamId = department.Id, + BelongTeamName = department.DepartmentName, + CompletionTime = null, + IsOptimizationCompleted = false, + OptimizationTaskId = skuOptimizationTask.Id + }; + insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask); + + #region 创建竞标任务 + var schemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.SkuId == waitCheckOrderSku.SkuId && + ps.BelongBargainTeamId == department.Id) + .ToList(); + + #endregion + } + } + #endregion + + #region 创建待优化限时任务 + + //判断sku是否首次采购 + var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == waitCheckOrderSku.SkuId); + + insertTimeLimitTaskList.Add(new TimeLimitTask() + { + Id = idGenerator.NewLong(), + CreateTme = DateTime.Now, + //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), + //OrderId = o.OrderId, + //OrderSn = o.OrderSn, + ShopId = shopId, + SkuId = waitCheckOrderSku.SkuId, + TaskType = Enums.TimeLimitTaskType.待议价任务, + TaskId = skuOptimizationTask.Id, + Remark = "首次采购限时任务" + }); + #endregion + } + } + } + } + } + } + #endregion #region 检查限时采购任务 CheckPurchaseTimeLimitTask(shopId, qtOrderList.Items, dbPurchaseTimeLimitTaskList, insertTimeLimitTaskList); diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs index dc53051..cd940c4 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs @@ -38,7 +38,7 @@ namespace BBWYB.Server.Model.Db public int? PreSkuCount { get; set; } [Column(StringLength = 50)] - public string QTSkuId { get; set; } + public string SkuId { get; set; } /// /// Spu优化任务Id;Spu优化任务Id diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs index 41f971a..162a0b3 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs @@ -46,7 +46,10 @@ namespace BBWYB.Server.Model.Db public bool? IsOptimizationCompleted { get; set; } [Column(StringLength = 50)] - public string JDSpuId { get; set; } + public string ProductId { get; set; } + + [Column(StringLength = 255)] + public string ProductTitle { get; set; } /// /// 上次优化时间;上次优化时间 From 34e781770768e8880316432c646806faf5fb4e4a Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Thu, 7 Mar 2024 03:38:03 +0800 Subject: [PATCH 157/222] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5SPU=E7=BA=A7=E5=88=AB=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sync/OrderSyncBusiness.cs | 178 +++++++++++------- BBWYB.Server.Model/Db/BBWY/SkuRecentCost.cs | 99 ++++++++++ .../Db/SpuOptimization/Skuoptimizationtask.cs | 12 +- .../Spuoptimizationbargainteamtask.cs | 8 +- .../Spuoptimizationcompetitivetendertask.cs | 14 +- .../Db/SpuOptimization/Spuoptimizationtask.cs | 26 +-- 6 files changed, 240 insertions(+), 97 deletions(-) create mode 100644 BBWYB.Server.Model/Db/BBWY/SkuRecentCost.cs diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 35f0749..3725276 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -2,6 +2,7 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Db.BBWY; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json.Linq; @@ -19,6 +20,7 @@ namespace BBWYB.Server.Business.Sync private TaskSchedulerManager taskSchedulerManager; private List timeLimitTaskTypes; private TimeLimitRules timeLimitRules; + private FreeSqlMultiDBManager fsqlManager; public OrderSyncBusiness(IFreeSql fsql, NLogManager nLogManager, @@ -26,7 +28,8 @@ namespace BBWYB.Server.Business.Sync OP_PlatformClientFactory opPlatformClientFactory, VenderBusiness venderBusiness, TaskSchedulerManager taskSchedulerManager, - TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator) + TimeLimitRules timeLimitRules, + FreeSqlMultiDBManager fsqlManager) : base(fsql, nLogManager, idGenerator) { this.opPlatformClientFactory = opPlatformClientFactory; this.venderBusiness = venderBusiness; @@ -37,6 +40,7 @@ namespace BBWYB.Server.Business.Sync Enums.TimeLimitTaskType.待议价任务 }; this.timeLimitRules = timeLimitRules; + this.fsqlManager = fsqlManager; } public void AutoOrderSync() @@ -145,8 +149,8 @@ namespace BBWYB.Server.Business.Sync List insertSpuOptimizationTaskList = new List(); List insertSkuOptimizationTaskList = new List(); - List insertSkuOptimizationBargainTeamTaskList = new List(); - List insertSkuOptimizationCompetitiveTenderTaskList = new List(); + List insertSpuOptimizationBargainTeamTaskList = new List(); + List insertSpuOptimizationCompetitiveTenderTaskList = new List(); #endregion @@ -424,7 +428,7 @@ namespace BBWYB.Server.Business.Sync var includeSpuOrderList = waitToCheckSkuSaleOrderList.Where(o => o.OrderSkuList.Any(osku => osku.ProductId == spuGroup.Key)); var sourceShopName = string.Empty; - //京东sku-拳探sku下单关系映射表 + //拳探sku-京东sku下单关系映射表 var mappingQT_JDSKUDictionary = new Dictionary(); #region 解析来源店铺数据 @@ -456,72 +460,118 @@ namespace BBWYB.Server.Business.Sync } } #endregion - } - } - foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) - { + #region 读取JDSKU预估金额 + var jdskus = mappingQT_JDSKUDictionary.Values.ToList(); + var jdskuRecentCostList = fsqlManager.BBWYCfsql.Select(jdskus).ToList(); + #endregion - foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) - { - if (noFisrstPurchasedSpuList.Contains(waitCheckOrderSku.ProductId) && - !dbSpuOptimizationTaskList.Any(t => t.ProductId == waitCheckOrderSku.ProductId) && - !insertSpuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId)) + #region 处理SKU分组 + var skuGroups = spuGroup.GroupBy(osku => osku.SkuId).ToList(); + var skuIdList = skuGroups.Select(g => g.Key).ToList(); + #endregion + + #region 创建SPU优化任务 + var spuOptimizationTask = new SpuOptimizationTask() + { + Id = idGenerator.NewLong(), + BelongShopName = sourceShopName, + CompletionTime = null, + CreateTime = DateTime.Now, + IsOptimizationCompleted = false, + LastOptimizationTime = null, + ProductId = spuGroup.Key, + ShopId = shopId, + ProductTitle = spuGroup.FirstOrDefault()?.ProductTitle, + TriggerOptimizationReason = Enums.TriggerOptimizationReason.首次采购, + PreSkuCount = skuGroups.Count(), + PreItemCount = 0, + PrePurchaseAmount = 0M + }; + #endregion + + #region 创建SKU优化任务 + foreach (var skuGroup in skuGroups) { - #region 创建待优化任务 + mappingQT_JDSKUDictionary.TryGetValue(skuGroup.Key, out string jdSkuId); + var preItemCount = skuGroup.Sum(osku => osku.Quantity); + var prePurchaseAmount = 0M; + if (!string.IsNullOrEmpty(jdSkuId)) + { + var jdSkuRecentCost = jdskuRecentCostList.FirstOrDefault(x => x.SkuId == jdSkuId); + if (jdSkuRecentCost != null) + { + prePurchaseAmount = (jdSkuRecentCost.SingleSkuAmount ?? 0M + + jdSkuRecentCost.SingleFirstFreight ?? 0M + + jdSkuRecentCost.SingleFreight ?? 0M + + jdSkuRecentCost.SingleDeliveryFreight ?? 0M + + jdSkuRecentCost.SingleConsumableAmount ?? 0M + + jdSkuRecentCost.SingleInStorageAmount ?? 0M + + jdSkuRecentCost.SingleOutStorageAmount ?? 0M + + jdSkuRecentCost.SinglePackagingLaborAmount ?? 0M + + jdSkuRecentCost.SingleOperationAmount ?? 0M) * preItemCount; + } + } var skuOptimizationTask = new SkuOptimizationTask() { Id = idGenerator.NewLong(), - PreItemCount = 0, - PrePurchasedAmount = 0, - IsOptimizationCompleted = false, - IsPurchasementCompleted = false, CreateTime = DateTime.Now, - SafeWarningRemainingDay = 0, - TriggerOptimizationReason = Enums.TriggerOptimizationReason.首次采购, - SkuId = waitCheckOrderSku.SkuId, - ShopId = shopId, - ProductId = waitCheckOrderSku.ProductId, - BelongShopName = sourceShopName, - CompletionTime = null, - JDSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == waitCheckOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty, - LastOptimizationRatio = 0, - LastPurchasePrice = 0, - LastOptimizationTime = null + JDSkuId = jdSkuId, + PreItemCount = preItemCount, + SkuId = skuGroup.Key, + SpuOptimizationTaskId = spuOptimizationTask.Id, + PrePurchaseAmount = prePurchaseAmount }; - insertSkuOptimizationTaskList.Add(skuOptimizationTask); - #endregion - #region 创建待优化子任务 + //累计spu优化任务信息 + spuOptimizationTask.PreItemCount += preItemCount; + spuOptimizationTask.PrePurchaseAmount += prePurchaseAmount; + } + #endregion + + #region 创建SPU优化议价组任务 + foreach (var department in bargainTeamList) + { + var spuOptimizationBargainTeamTask = new SpuOptimizationBargainTeamTask() { - foreach (var department in bargainTeamList) - { - var skuOptimizationChildTask = new SkuOptimizationChildTask() - { - Id = idGenerator.NewLong(), - BelongTeamId = department.Id, - BelongTeamName = department.DepartmentName, - CompletionTime = null, - IsOptimizationCompleted = false, - OptimizationTaskId = skuOptimizationTask.Id - }; - insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask); - - #region 创建竞标任务 - var schemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.SkuId == waitCheckOrderSku.SkuId && - ps.BelongBargainTeamId == department.Id) - .ToList(); + Id = idGenerator.NewLong(), + BelongTeamId = department.Id, + BelongTeamName = department.DepartmentName, + CompletionTime = null, + IsOptimizationCompleted = false, + SpuOptimizationTaskId = spuOptimizationTask.Id + }; + insertSpuOptimizationBargainTeamTaskList.Add(spuOptimizationBargainTeamTask); - #endregion - } + #region 创建采购方案竞标任务 + var waitJoinSchemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.BelongBargainTeamId == department.Id && + skuIdList.Contains(ps.SkuId)) + .ToList(); + if (waitJoinSchemeList.Count() > 0) + { + insertSpuOptimizationCompetitiveTenderTaskList.AddRange(waitJoinSchemeList.Select(ps => new SpuOptimizationCompetitiveTenderTask() + { + Id = idGenerator.NewLong(), + BargainTeamId = ps.BelongBargainTeamId, + CreateTime = DateTime.Now, + IsUpdateQuotedPrice = false, + SchemeGroupId = ps.SchemeGroupId, + SchemeId = ps.Id, + SkuId = ps.SkuId, + SpuOptimizationBargainTeamTaskId = spuOptimizationBargainTeamTask.Id, + SpuOptimizationTaskId = spuOptimizationTask.Id + })); } #endregion + } + #endregion - #region 创建待优化限时任务 + #region 创建优化限时任务 + { //判断sku是否首次采购 - var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == waitCheckOrderSku.SkuId); + var isFirst = !dbSpuTotalSaleInfoList.Any(s => s.ProductId == spuGroup.Key); insertTimeLimitTaskList.Add(new TimeLimitTask() { @@ -532,13 +582,13 @@ namespace BBWYB.Server.Business.Sync //OrderId = o.OrderId, //OrderSn = o.OrderSn, ShopId = shopId, - SkuId = waitCheckOrderSku.SkuId, + //SkuId = waitCheckOrderSku.SkuId, TaskType = Enums.TimeLimitTaskType.待议价任务, - TaskId = skuOptimizationTask.Id, + TaskId = spuOptimizationTask.Id, Remark = "首次采购限时任务" }); - #endregion } + #endregion } } } @@ -564,14 +614,14 @@ namespace BBWYB.Server.Business.Sync if (insertTimeLimitTaskList.Count() > 0) fsql.Insert(insertTimeLimitTaskList).ExecuteAffrows(); - //if (insertSkuOptimizationTaskList.Count() > 0) - // fsql.Insert(insertSkuOptimizationTaskList).ExecuteAffrows(); - - //if (insertSkuOptimizationChildTaskList.Count() > 0) - // fsql.Insert(insertSkuOptimizationChildTaskList).ExecuteAffrows(); - - //if (insertCompetitiveTenderList.Count() > 0) - // fsql.Insert(insertCompetitiveTenderList).ExecuteAffrows(); + if (insertSpuOptimizationTaskList.Count() > 0) + fsql.Insert(insertSpuOptimizationTaskList).ExecuteAffrows(); + if (insertSkuOptimizationTaskList.Count() > 0) + fsql.Insert(insertSkuOptimizationTaskList).ExecuteAffrows(); + if (insertSpuOptimizationBargainTeamTaskList.Count() > 0) + fsql.Insert(insertSpuOptimizationBargainTeamTaskList).ExecuteAffrows(); + if (insertSpuOptimizationCompetitiveTenderTaskList.Count() > 0) + fsql.Insert(insertSpuOptimizationCompetitiveTenderTaskList).ExecuteAffrows(); if (updateOrderList.Count() > 0) foreach (var update in updateOrderList) diff --git a/BBWYB.Server.Model/Db/BBWY/SkuRecentCost.cs b/BBWYB.Server.Model/Db/BBWY/SkuRecentCost.cs new file mode 100644 index 0000000..8ffcaa6 --- /dev/null +++ b/BBWYB.Server.Model/Db/BBWY/SkuRecentCost.cs @@ -0,0 +1,99 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db.BBWY +{ + + [Table(Name = "skurecentcost", DisableSyncStructure = true)] + public partial class SkuRecentCost + { + + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string SkuId { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + [Column(StringLength = 50)] + public string ProductId { get; set; } + + /// + /// 最近一笔订单来源 + /// + [Column(StringLength = 50)] + public string RecentOrderId { get; set; } + + [Column(DbType = "bigint")] + public long? ShopId { get; set; } + + /// + /// 耗材费(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleConsumableAmount { get; set; } = 0.00M; + + /// + /// 发货运费(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleDeliveryFreight { get; set; } = 0.00M; + + /// + /// 头程运费(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleFirstFreight { get; set; } + + /// + /// 采购运费(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleFreight { get; set; } = 0.00M; + + /// + /// 入仓操作费(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleInStorageAmount { get; set; } = 0.00M; + + /// + /// 操作费(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleOperationAmount { get; set; } = 0.00M; + + /// + /// 出仓操作费(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleOutStorageAmount { get; set; } = 0.00M; + + ///// + ///// 退货入仓操作费(单件) + ///// + //[Column(DbType = "decimal(20,2)")] + //public decimal? SingleRefundInStorageAmount { get; set; } = 0.00M; + + /// + /// SKU成本(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleSkuAmount { get; set; } + + ///// + ///// 仓储费(单件) + ///// + //[Column(DbType = "decimal(20,2)")] + //public decimal? SingleStorageAmount { get; set; } = 0.00M; + + [Column(DbType = "datetime")] + public DateTime? UpdateTime { get; set; } + + /// + /// 包装人工单价 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SinglePackagingLaborAmount { get; set; } = 0.00M; + + } + +} diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs index cd940c4..2c5c53e 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs @@ -20,28 +20,22 @@ namespace BBWYB.Server.Model.Db public string JDSkuId { get; set; } /// - /// 预估件数;预估件数 + /// 预估件数 /// [Column(DbType = "int")] public int? PreItemCount { get; set; } /// - /// 预估采购金额;预估采购金额 + /// 预估采购金额 /// [Column(DbType = "decimal(18,2)")] public decimal? PrePurchaseAmount { get; set; } - /// - /// 预估Sku数;预估Sku数 - /// - [Column(DbType = "int")] - public int? PreSkuCount { get; set; } - [Column(StringLength = 50)] public string SkuId { get; set; } /// - /// Spu优化任务Id;Spu优化任务Id + /// Spu优化任务Id /// [Column(DbType = "bigint")] public long? SpuOptimizationTaskId { get; set; } diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs index 810e234..19825bd 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs @@ -14,25 +14,25 @@ namespace BBWYB.Server.Model.Db public long Id { get; set; } /// - /// 团队Id (议价组Id);团队Id (议价组Id) + /// 团队Id (议价组Id) /// [Column(StringLength = 50)] public string BelongTeamId { get; set; } /// - /// 议价组名称;议价组名称 + /// 议价组名称 /// [Column(StringLength = 50)] public string BelongTeamName { get; set; } /// - /// 完成时间;完成时间 + /// 完成时间 /// [Column(DbType = "datetime")] public DateTime? CompletionTime { get; set; } /// - /// 是否优化完成;是否优化完成 + /// 是否优化完成 /// public bool? IsOptimizationCompleted { get; set; } diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs index 6c0c73a..17148f8 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs @@ -11,10 +11,10 @@ namespace BBWYB.Server.Model.Db { [Column(IsPrimary = true, IsNullable = false)] - public string Id { get; set; } + public long Id { get; set; } /// - /// 议价组Id;议价组Id + /// 议价组Id /// [Column(StringLength = 50)] public string BargainTeamId { get; set; } @@ -23,18 +23,18 @@ namespace BBWYB.Server.Model.Db public DateTime? CreateTime { get; set; } /// - /// 是否更新报价;是否更新报价 + /// 是否更新报价 /// public bool? IsUpdateQuotedPrice { get; set; } = false; /// - /// 采购方案分组Id;采购方案分组Id + /// 采购方案分组Id /// [Column(DbType = "bigint")] public long? SchemeGroupId { get; set; } /// - /// 采购方案Id;采购方案Id + /// 采购方案Id /// [Column(DbType = "bigint")] public long? SchemeId { get; set; } @@ -43,13 +43,13 @@ namespace BBWYB.Server.Model.Db public string SkuId { get; set; } /// - /// Spu优化议价组任务Id;Spu优化议价组任务Id + /// Spu优化议价组任务Id /// [Column(DbType = "bigint")] public long? SpuOptimizationBargainTeamTaskId { get; set; } /// - /// Spu优化任务Id;Spu优化任务Id + /// Spu优化任务Id /// [Column(DbType = "bigint")] public long? SpuOptimizationTaskId { get; set; } diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs index 162a0b3..97c0020 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs @@ -11,37 +11,37 @@ namespace BBWYB.Server.Model.Db { /// - /// 待优化任务Id;待优化任务Id + /// 待优化任务Id /// [Column(DbType = "bigint", IsPrimary = true)] public long Id { get; set; } /// - /// 需求方店铺Id;需求方店铺Id + /// 需求方店铺Id /// [Column(DbType = "bigint")] public long? BelongShopId { get; set; } /// - /// 需求方店铺名称;需求方店铺名称 + /// 需求方店铺名称 /// [Column(StringLength = 50)] public string BelongShopName { get; set; } /// - /// 完成优化时间;完成优化时间 + /// 完成优化时间 /// [Column(DbType = "datetime")] public DateTime? CompletionTime { get; set; } /// - /// 创建时间;创建时间 + /// 创建时间 /// [Column(DbType = "datetime")] public DateTime? CreateTime { get; set; } /// - /// 是否优化完成;是否优化完成 + /// 是否优化完成 /// public bool? IsOptimizationCompleted { get; set; } @@ -52,31 +52,31 @@ namespace BBWYB.Server.Model.Db public string ProductTitle { get; set; } /// - /// 上次优化时间;上次优化时间 + /// 上次优化时间 /// [Column(DbType = "datetime")] public DateTime? LastOptimizationTime { get; set; } /// - /// 预估件数;预估件数 + /// 预估件数 /// [Column(DbType = "int")] public int? PreItemCount { get; set; } /// - /// 预估采购金额;预估采购金额 + /// 预估采购金额 /// [Column(DbType = "decimal(18,2)")] public decimal? PrePurchaseAmount { get; set; } /// - /// 预估Sku数;预估Sku数 + /// 预估Sku数 /// [Column(DbType = "int")] public int? PreSkuCount { get; set; } /// - /// 店铺Id;店铺Id + /// 店铺Id /// [Column(DbType = "bigint")] public long? ShopId { get; set; } @@ -84,8 +84,8 @@ namespace BBWYB.Server.Model.Db /// /// 触发优化原因 首次采购 = 0, 首次优化 = 1, 再次优化 = 2;触发优化原因 首次采购 = 0, 首次优化 = 1, 再次优化 = 2 /// - [Column(DbType = "int")] - public int? TriggerOptimizationReason { get; set; } + [Column(DbType = "int", MapType = typeof(int?))] + public Enums.TriggerOptimizationReason? TriggerOptimizationReason { get; set; } } From 811d2714a993837ae166f20140166a55ac20dbbb Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Thu, 7 Mar 2024 10:32:27 +0800 Subject: [PATCH 158/222] =?UTF-8?q?=E8=89=AF=E5=BA=93=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5=2070%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimizationBusiness.cs | 191 +++++++++++++++++- 1 file changed, 180 insertions(+), 11 deletions(-) diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index c48cf22..d82d899 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -7,6 +7,7 @@ using BBWYB.Server.Model.Db.BBWY; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json; +using Org.BouncyCastle.Tls.Crypto; using Yitter.IdGenerator; namespace BBWYB.Server.Business @@ -75,40 +76,208 @@ namespace BBWYB.Server.Business var qtSkuIdList = jdqtskuList.Select(x => x.PurchaseSkuIds).Distinct().ToList(); var productSkuList = fsql.Select(qtSkuIdList).ToList(); - var productIdList = productSkuList.Select(ps => ps.ProductId).Distinct().ToList(); + if (productSkuList.Count() == 0) + return; + var shopId = productSkuList.FirstOrDefault()?.ShopId; + var productIdList = productSkuList.Select(ps => ps.ProductId).Distinct().ToList(); + var productList = fsql.Select(productIdList).ToList(); var spuTotalInfoList = fsql.Select().Where(spi => productIdList.Contains(spi.ProductId)).ToList(); #endregion //查询已存在未结束的优化任务 - var dbSkuOptimizationTaskList = fsql.Select() - .Where(t => t.ShopId == request.ShopId && + var dbSpuOptimizationTaskList = fsql.Select() + .Where(t => t.ShopId == shopId && t.IsOptimizationCompleted == false && - qtSkuIdList.Contains(t.SkuId)) + productIdList.Contains(t.ProductId)) .ToList(); //优化历史 - var dbSkuOptimizationHistoryList = fsql.Select() - .Where(s1 => s1.ShopId == request.ShopId && qtSkuIdList.Contains(s1.SkuId)) - .GroupBy(s1 => s1.SkuId) + var dbSpuOptimizationHistoryList = fsql.Select() + .Where(s1 => productIdList.Contains(s1.ProductId) && s1.IsOptimizationCompleted == true) + .GroupBy(s1 => s1.ProductId) .WithTempQuery(g => new { MaxId = g.Max(g.Value.Id) }) - .From() + .From() .InnerJoin((s1, s2) => s1.MaxId == s2.Id) .ToList((s1, s2) => s2); #region DB Operation - var insertSkuOptimizationTaskList = new List(); - var insertSkuOptimizationChildTaskList = new List(); - var insertTimeLimitTaskList = new List(); + List insertSpuOptimizationTaskList = new List(); + List insertSkuOptimizationTaskList = new List(); + List insertSpuOptimizationBargainTeamTaskList = new List(); + List insertSpuOptimizationCompetitiveTenderTaskList = new List(); #endregion var belongShop = venderBusiness.GetShopList(request.ShopId).FirstOrDefault(); if (belongShop == null) throw new BusinessException("店铺不存在"); + foreach (var productId in productIdList) + { + #region 验证 + if (dbSpuOptimizationTaskList.Any(s => s.ProductId == productId)) //过滤未结束的spu任务 + continue; + + var spuTotalInfo = spuTotalInfoList.FirstOrDefault(psi => psi.ProductId == productId); //spu销量 + if (spuTotalInfo == null) + continue; + + var reason = GetOptimizationReason(spuTotalInfo); //过滤不需要优化的spu + if (reason == null) + continue; + #endregion + + var skuOptimizationHistory = dbSpuOptimizationHistoryList.FirstOrDefault(h => h.ProductId == productId); //优化历史 + + #region qtsku - jdsku 关系匹配 + var currentProductSkuList = productSkuList.Where(ps => ps.ProductId == productId && + jdqtskuList.Any(x => x.PurchaseSkuIds == ps.Id)).ToList(); + + //拳探sku-京东sku下单关系映射表 + var mappingQT_JDSKUDictionary = new Dictionary(); + foreach (var ps in currentProductSkuList) + { + var jdsku = jdqtskuList.FirstOrDefault(x => x.PurchaseSkuIds == ps.Id)?.SkuId; + if (string.IsNullOrEmpty(jdsku)) + continue; + if (!mappingQT_JDSKUDictionary.ContainsKey(ps.Id)) + mappingQT_JDSKUDictionary.TryAdd(ps.Id, jdsku); + } + #endregion + + #region 读取JDSKU预估金额 + var jdskus = mappingQT_JDSKUDictionary.Values.ToList(); + var jdskuRecentCostList = fsqlManager.BBWYCfsql.Select(jdskus).ToList(); + #endregion + + #region 创建SPU优化任务 + var spuOptimizationTask = new SpuOptimizationTask() + { + Id = idGenerator.NewLong(), + BelongShopName = belongShop.ShopName, + CompletionTime = null, + CreateTime = DateTime.Now, + IsOptimizationCompleted = false, + LastOptimizationTime = null, + ProductId = productId, + ShopId = shopId, + ProductTitle = productList.FirstOrDefault(p => p.Id == productId)?.ProductName, + TriggerOptimizationReason = reason, + PreSkuCount = jdskus.Count(), + PreItemCount = 0, + PrePurchaseAmount = 0M + }; + #endregion + + #region 创建SKU优化任务 + foreach (var sku in mappingQT_JDSKUDictionary.Keys) + { + mappingQT_JDSKUDictionary.TryGetValue(sku, out string jdSkuId); + var requestSkuItem = request.Items.FirstOrDefault(x => x.Sku == jdSkuId); + if (requestSkuItem == null) + continue; + + var preItemCount = requestSkuItem.PreItemCount; + var prePurchaseAmount = 0M; + if (!string.IsNullOrEmpty(jdSkuId)) + { + var jdSkuRecentCost = jdskuRecentCostList.FirstOrDefault(x => x.SkuId == jdSkuId); + if (jdSkuRecentCost != null) + { + prePurchaseAmount = (jdSkuRecentCost.SingleSkuAmount ?? 0M + + jdSkuRecentCost.SingleFirstFreight ?? 0M + + jdSkuRecentCost.SingleFreight ?? 0M + + jdSkuRecentCost.SingleDeliveryFreight ?? 0M + + jdSkuRecentCost.SingleConsumableAmount ?? 0M + + jdSkuRecentCost.SingleInStorageAmount ?? 0M + + jdSkuRecentCost.SingleOutStorageAmount ?? 0M + + jdSkuRecentCost.SinglePackagingLaborAmount ?? 0M + + jdSkuRecentCost.SingleOperationAmount ?? 0M) * preItemCount; + } + } + var skuOptimizationTask = new SkuOptimizationTask() + { + Id = idGenerator.NewLong(), + CreateTime = DateTime.Now, + JDSkuId = jdSkuId, + PreItemCount = preItemCount, + SkuId = sku, + SpuOptimizationTaskId = spuOptimizationTask.Id, + PrePurchaseAmount = prePurchaseAmount + }; + insertSkuOptimizationTaskList.Add(skuOptimizationTask); + + //累计spu优化任务信息 + spuOptimizationTask.PreItemCount += preItemCount; + spuOptimizationTask.PrePurchaseAmount += prePurchaseAmount; + } + #endregion + + #region 创建SPU优化议价组任务 + foreach (var department in bargainTeamList) + { + var spuOptimizationBargainTeamTask = new SpuOptimizationBargainTeamTask() + { + Id = idGenerator.NewLong(), + BelongTeamId = department.Id, + BelongTeamName = department.DepartmentName, + CompletionTime = null, + IsOptimizationCompleted = false, + SpuOptimizationTaskId = spuOptimizationTask.Id + }; + insertSpuOptimizationBargainTeamTaskList.Add(spuOptimizationBargainTeamTask); + + #region 创建采购方案竞标任务 + var waitJoinSchemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.BelongBargainTeamId == department.Id && + skuIdList.Contains(ps.SkuId)) + .ToList(); + if (waitJoinSchemeList.Count() > 0) + { + insertSpuOptimizationCompetitiveTenderTaskList.AddRange(waitJoinSchemeList.Select(ps => new SpuOptimizationCompetitiveTenderTask() + { + Id = idGenerator.NewLong(), + BargainTeamId = ps.BelongBargainTeamId, + CreateTime = DateTime.Now, + IsUpdateQuotedPrice = false, + SchemeGroupId = ps.SchemeGroupId, + SchemeId = ps.Id, + SkuId = ps.SkuId, + SpuOptimizationBargainTeamTaskId = spuOptimizationBargainTeamTask.Id, + SpuOptimizationTaskId = spuOptimizationTask.Id + })); + } + #endregion + } + #endregion + + #region 创建优化限时任务 + + { + //判断sku是否首次采购 + var isFirst = !dbSpuTotalSaleInfoList.Any(s => s.ProductId == spuGroup.Key); + + insertTimeLimitTaskList.Add(new TimeLimitTask() + { + Id = idGenerator.NewLong(), + CreateTme = DateTime.Now, + //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), + //OrderId = o.OrderId, + //OrderSn = o.OrderSn, + ShopId = shopId, + //SkuId = waitCheckOrderSku.SkuId, + TaskType = Enums.TimeLimitTaskType.待议价任务, + TaskId = spuOptimizationTask.Id, + Remark = "首次采购限时任务" + }); + } + #endregion + + } + foreach (var reqItem in request.Items) { var qtsku = jdqtskuList.FirstOrDefault(x => x.SkuId == reqItem.Sku); From 4c6aacd8751611ae28ec4637974de2f9f9de190d Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 7 Mar 2024 19:02:55 +0800 Subject: [PATCH 159/222] =?UTF-8?q?=E8=89=AF=E5=BA=93=E9=A2=84=E8=AD=A6?= =?UTF-8?q?=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimizationBusiness.cs | 108 +++--------------- 1 file changed, 19 insertions(+), 89 deletions(-) diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index d82d899..25b2c62 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -82,7 +82,7 @@ namespace BBWYB.Server.Business var shopId = productSkuList.FirstOrDefault()?.ShopId; var productIdList = productSkuList.Select(ps => ps.ProductId).Distinct().ToList(); var productList = fsql.Select(productIdList).ToList(); - var spuTotalInfoList = fsql.Select().Where(spi => productIdList.Contains(spi.ProductId)).ToList(); + var dbSpuTotalInfoList = fsql.Select().Where(spi => productIdList.Contains(spi.ProductId)).ToList(); #endregion @@ -109,12 +109,20 @@ namespace BBWYB.Server.Business List insertSkuOptimizationTaskList = new List(); List insertSpuOptimizationBargainTeamTaskList = new List(); List insertSpuOptimizationCompetitiveTenderTaskList = new List(); + List insertTimeLimitTaskList = new List(); #endregion var belongShop = venderBusiness.GetShopList(request.ShopId).FirstOrDefault(); if (belongShop == null) throw new BusinessException("店铺不存在"); + var bargainTeamList = venderBusiness.GetYiJiaGroup(); //获取议价组 + var bargainTeamIdList = bargainTeamList.Select(t => t.Id).ToList(); + var waitToCompetitiveTenderSchemeList = fsql.Select() + .Where(ps => bargainTeamIdList.Contains(ps.BelongBargainTeamId) && + productIdList.Contains(ps.ProductId)) + .ToList(); //需要参与竞标采购方案 + foreach (var productId in productIdList) { #region 验证 @@ -146,10 +154,11 @@ namespace BBWYB.Server.Business if (!mappingQT_JDSKUDictionary.ContainsKey(ps.Id)) mappingQT_JDSKUDictionary.TryAdd(ps.Id, jdsku); } + var jdskus = mappingQT_JDSKUDictionary.Values.ToList(); + var qtskus = mappingQT_JDSKUDictionary.Keys.ToList(); #endregion #region 读取JDSKU预估金额 - var jdskus = mappingQT_JDSKUDictionary.Values.ToList(); var jdskuRecentCostList = fsqlManager.BBWYCfsql.Select(jdskus).ToList(); #endregion @@ -232,7 +241,7 @@ namespace BBWYB.Server.Business #region 创建采购方案竞标任务 var waitJoinSchemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.BelongBargainTeamId == department.Id && - skuIdList.Contains(ps.SkuId)) + qtskus.Contains(ps.SkuId)) .ToList(); if (waitJoinSchemeList.Count() > 0) { @@ -257,7 +266,7 @@ namespace BBWYB.Server.Business { //判断sku是否首次采购 - var isFirst = !dbSpuTotalSaleInfoList.Any(s => s.ProductId == spuGroup.Key); + var isFirst = !dbSpuTotalInfoList.Any(s => s.ProductId == productId); insertTimeLimitTaskList.Add(new TimeLimitTask() { @@ -278,96 +287,17 @@ namespace BBWYB.Server.Business } - foreach (var reqItem in request.Items) - { - var qtsku = jdqtskuList.FirstOrDefault(x => x.SkuId == reqItem.Sku); - if (qtsku == null) - continue; - var qtskuId = qtsku.PurchaseSkuIds; //拳探skuId - - if (dbSkuOptimizationTaskList.Any(s => s.SkuId == qtskuId)) //过滤未结束的sku - continue; - - var productSku = productSkuList.FirstOrDefault(ps => ps.Id == qtskuId); - if (productSku == null) - continue; - - var spuTotalInfo = spuTotalInfoList.FirstOrDefault(psi => psi.ProductId == productSku.ProductId); //spu销量 - if (spuTotalInfo == null) - continue; - - var reason = GetOptimizationReason(spuTotalInfo); //过滤不需要优化的spu - if (reason == null) - continue; - - var skuOptimizationHistory = dbSkuOptimizationHistoryList.FirstOrDefault(h => h.SkuId == qtskuId); - - #region 创建待议价任务 - var skuOptimizationTask = new SkuOptimizationTask() - { - Id = idGenerator.NewLong(), - BelongShopName = belongShop.ShopName, - ShopId = productSku.ShopId, - CompletionTime = null, - CreateTime = DateTime.Now, - IsOptimizationCompleted = false, - IsPurchasementCompleted = false, - JDSkuId = reqItem.Sku, - PreItemCount = reqItem.PreItemCount, - ProductId = productSku.ProductId, - SafeWarningRemainingDay = reqItem.SafeWarningRemainingDay, - SkuId = qtskuId, - TriggerOptimizationReason = reason, - LastOptimizationRatio = skuOptimizationHistory?.OptimizationRatio ?? 0M, - LastPurchasePrice = skuOptimizationHistory?.CurrentPurchasePrice, - PrePurchasedAmount = (skuOptimizationHistory?.CurrentPurchasePrice ?? 0M) * reqItem.PreItemCount, - LastOptimizationTime = skuOptimizationHistory?.CreateTime - }; - #endregion - - #region 创建待优化子任务 - { - var yijiagroups = venderBusiness.GetYiJiaGroup(); - foreach (var department in yijiagroups) - { - var skuOptimizationChildTask = new SkuOptimizationChildTask() - { - Id = idGenerator.NewLong(), - BelongTeamId = department.Id, - BelongTeamName = department.DepartmentName, - CompletionTime = null, - IsOptimizationCompleted = false, - OptimizationTaskId = skuOptimizationTask.Id - }; - insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask); - } - } - #endregion - - #region 创建待优化限时任务 - insertTimeLimitTaskList.Add(new TimeLimitTask() - { - Id = idGenerator.NewLong(), - CreateTme = DateTime.Now, - //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), - ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(reason == Enums.TriggerOptimizationReason.首次采购 ? 1 : 0)), - //OrderId = o.OrderId, - //OrderSn = o.OrderSn, - ShopId = productSku.ShopId, - SkuId = qtskuId, - TaskType = Enums.TimeLimitTaskType.待议价任务, - TaskId = skuOptimizationTask.Id, - Remark = reason.ToString() - }); - #endregion - } fsql.Transaction(() => { + if (insertSpuOptimizationTaskList.Count() > 0) + fsql.Insert(insertSpuOptimizationTaskList).ExecuteAffrows(); if (insertSkuOptimizationTaskList.Count() > 0) fsql.Insert(insertSkuOptimizationTaskList).ExecuteAffrows(); - if (insertSkuOptimizationChildTaskList.Count() > 0) - fsql.Insert(insertSkuOptimizationChildTaskList).ExecuteAffrows(); + if (insertSpuOptimizationBargainTeamTaskList.Count() > 0) + fsql.Insert(insertSpuOptimizationBargainTeamTaskList).ExecuteAffrows(); + if (insertSpuOptimizationCompetitiveTenderTaskList.Count() > 0) + fsql.Insert(insertSpuOptimizationCompetitiveTenderTaskList).ExecuteAffrows(); if (insertTimeLimitTaskList.Count() > 0) fsql.Insert(insertTimeLimitTaskList).ExecuteAffrows(); }); From c3e72eb9ab91d351ca720cd4dd9f64fdf4c7e564 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 7 Mar 2024 20:03:48 +0800 Subject: [PATCH 160/222] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8A=A5=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...chUpdateCompetitiveTenderQuotationRequest.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs diff --git a/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs b/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs new file mode 100644 index 0000000..7a78f93 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs @@ -0,0 +1,17 @@ +namespace BBWYB.Server.Model.Dto +{ + public class BatchUpdateCompetitiveTenderQuotationRequest + { + public string SkuId { get; set; } + + /// + /// 采购SkuId + /// + public string PurchaseSkuId { get; set; } + + /// + /// 实际单价 + /// + public decimal? ActualPrice { get; set; } + } +} From cec8f2f437b38d212614d2ba6e9456d562942862 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 8 Mar 2024 12:03:48 +0800 Subject: [PATCH 161/222] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaseSchemeController.cs | 2 +- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 8 +- .../SkuOptimizationBusiness.cs | 181 ++++++++++++++---- .../Sync/OrderSyncBusiness.cs | 3 +- BBWYB.Server.Model/BBWYB.Server.Model.csproj | 1 + .../Spuoptimizationcompetitivetendertask.cs | 3 + ...UpdateCompetitiveTenderQuotationRequest.cs | 20 +- .../BatchEditPurchaseSkuActualPriceRequest.cs | 8 +- .../SkuOptimizationChildTaskResponse.cs | 8 - .../SkuOptimizationTaskResponse.cs | 20 -- BBWYB.Server.Model/MappingProfiles.cs | 27 +-- 11 files changed, 195 insertions(+), 86 deletions(-) delete mode 100644 BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs delete mode 100644 BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index 58a3631..466f15e 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -206,7 +206,7 @@ namespace BBWYB.Server.API.Controllers [HttpPost] public void BatchEditPurchaseSkuActualPrice([FromBody] BatchEditPurchaseSkuActualPriceRequest request) { - purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request, GetUserId()); + purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request, null, GetUserId()); } } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 1a88368..39be653 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1528,9 +1528,10 @@ namespace BBWYB.Server.Business /// 批量修改采购配件实际单价 /// /// + /// /// /// - public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request, string userId) + public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request, List? schemeIdList, string userId) { if (request.ItemList == null || request.ItemList.Count() == 0) throw new BusinessException("缺少参数"); @@ -1538,7 +1539,8 @@ namespace BBWYB.Server.Business var purchseSkuIdList = request.ItemList.Select(x => x.PurchaseSkuId).Distinct().ToList(); - var schemeIdList = fsql.Select() + if (schemeIdList == null || schemeIdList.Count() == 0) + schemeIdList = fsql.Select() .Where(pss => purchseSkuIdList.Contains(pss.PurchaseSkuId)) .Distinct() .ToList(pss => pss.SkuPurchaseSchemeId); @@ -1562,7 +1564,7 @@ namespace BBWYB.Server.Business { if (pss.IsInvalid == 1) throw new BusinessException($"采购配件{pss.PurchaseSkuId}已失效"); - var requestSku = request.ItemList.FirstOrDefault(x => x.SkuId == pss.SkuId && x.PurchaseSkuId == pss.PurchaseSkuId); + var requestSku = request.ItemList.FirstOrDefault(x => x.PurchaseSkuId == pss.PurchaseSkuId); //x.SkuId == pss.SkuId if (requestSku != null) pss.ActualPrice = requestSku.ActualPrice; } diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 25b2c62..464bd26 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -8,6 +8,7 @@ using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json; using Org.BouncyCastle.Tls.Crypto; +using System.Linq; using Yitter.IdGenerator; namespace BBWYB.Server.Business @@ -18,13 +19,15 @@ namespace BBWYB.Server.Business private VenderBusiness venderBusiness; private TimeLimitRules timeLimitRules; private UserBusiness userBusiness; + private PurchaseSchemeBusiness purchaseSchemeBusiness; - public OptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager, VenderBusiness venderBusiness, TimeLimitRules timeLimitRules, UserBusiness userBusiness) : base(fsql, nLogManager, idGenerator) + public OptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager, VenderBusiness venderBusiness, TimeLimitRules timeLimitRules, UserBusiness userBusiness, PurchaseSchemeBusiness purchaseSchemeBusiness) : base(fsql, nLogManager, idGenerator) { this.fsqlManager = fsqlManager; this.venderBusiness = venderBusiness; this.timeLimitRules = timeLimitRules; this.userBusiness = userBusiness; + this.purchaseSchemeBusiness = purchaseSchemeBusiness; } @@ -129,7 +132,7 @@ namespace BBWYB.Server.Business if (dbSpuOptimizationTaskList.Any(s => s.ProductId == productId)) //过滤未结束的spu任务 continue; - var spuTotalInfo = spuTotalInfoList.FirstOrDefault(psi => psi.ProductId == productId); //spu销量 + var spuTotalInfo = dbSpuTotalInfoList.FirstOrDefault(psi => psi.ProductId == productId); //spu销量 if (spuTotalInfo == null) continue; @@ -143,6 +146,8 @@ namespace BBWYB.Server.Business #region qtsku - jdsku 关系匹配 var currentProductSkuList = productSkuList.Where(ps => ps.ProductId == productId && jdqtskuList.Any(x => x.PurchaseSkuIds == ps.Id)).ToList(); + if (currentProductSkuList.Count() == 0) + continue; //拳探sku-京东sku下单关系映射表 var mappingQT_JDSKUDictionary = new Dictionary(); @@ -255,7 +260,8 @@ namespace BBWYB.Server.Business SchemeId = ps.Id, SkuId = ps.SkuId, SpuOptimizationBargainTeamTaskId = spuOptimizationBargainTeamTask.Id, - SpuOptimizationTaskId = spuOptimizationTask.Id + SpuOptimizationTaskId = spuOptimizationTask.Id, + UpdateTime = DateTime.Now })); } #endregion @@ -303,7 +309,89 @@ namespace BBWYB.Server.Business }); } + /// + /// 更新报价 + /// + /// + /// + public void BatchUpdateCompetitiveTenderQuotation(BatchUpdateCompetitiveTenderQuotationRequest request, string userId) + { + #region 获取用户和部门信息 + var uInfo = userBusiness.GetisBargainTeamByUserId(userId, true); + #endregion + #region 业务验证 + var spuOptimizationTask = fsql.Select(request.SpuOptimizationTaskId).ToOne(); + if (spuOptimizationTask == null) + throw new BusinessException($"待优化任务{request.SpuOptimizationTaskId}不存在"); + var spuOptimizationBargainTeamTask = fsql.Select().Where(sbt => sbt.SpuOptimizationTaskId == request.SpuOptimizationTaskId && sbt.BelongTeamId == uInfo.department.Id).ToOne(); + if (spuOptimizationBargainTeamTask == null) + throw new BusinessException($"待优化任务{request.SpuOptimizationTaskId}中不存在议价组{uInfo.department.Id}/{uInfo.department.DepartmentName}的子任务"); + var skuIdList = fsql.Select().Where(s => s.SpuOptimizationTaskId == request.SpuOptimizationTaskId).ToList(s => s.SkuId); + #endregion + + #region DBOperation + List insertSpuOptimizationCompetitiveTenderTaskList = new List(); + List updateCompetitiveTenderTaskIdList = new List(); + #endregion + + //var skuList = request.ItemList.Select(x => x.SkuId).Distinct().ToList(); + var purchaseSkuIdList = request.ItemList.Select(x => x.PurchaseSkuId).Distinct().ToList(); + + //查询竞标任务 + var competitiveTenderTaskList = fsql.Select() + .Where(ct => ct.BargainTeamId == uInfo.user.DepartmentId && + ct.SpuOptimizationTaskId == request.SpuOptimizationTaskId && + ct.SchemeGroupId == request.SchemeGroupId) + .ToList(); + + //查询配件关联的采购方案 + var relationPurchaseSchemeList = fsql.Select() + .Where(ps => ps.SchemeGroupId == request.SchemeGroupId && + ps.BelongBargainTeamId == uInfo.user.DepartmentId && + fsql.Select() + .Where(pss => skuIdList.Contains(pss.SkuId) && + purchaseSkuIdList.Contains(pss.PurchaseSkuId) && + pss.SkuPurchaseSchemeId == ps.Id).Any()) + .ToList(); + + + //筛选出不在竞标任务中的采购方案 + var noJoinCompetitiveTenderPurchaseSchemeList = relationPurchaseSchemeList.Where(ps => !competitiveTenderTaskList.Any(ct => ct.SchemeId == ps.Id)).ToList(); + var noJoinCompetitiveTenderPurchaseSchemeIdList = noJoinCompetitiveTenderPurchaseSchemeList.Select(x => x.Id).ToList(); + //批量更新配件 + purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request.Map(), noJoinCompetitiveTenderPurchaseSchemeIdList, userId); + + if (noJoinCompetitiveTenderPurchaseSchemeList.Count() > 0) + { + insertSpuOptimizationCompetitiveTenderTaskList.AddRange(noJoinCompetitiveTenderPurchaseSchemeList.Select(ps => new SpuOptimizationCompetitiveTenderTask() + { + Id = idGenerator.NewLong(), + CreateTime = DateTime.Now, + BargainTeamId = uInfo.department.Id, + IsUpdateQuotedPrice = true, + SchemeGroupId = ps.SchemeGroupId, + SchemeId = ps.Id, + SkuId = ps.SkuId, + SpuOptimizationBargainTeamTaskId = spuOptimizationBargainTeamTask.Id, + SpuOptimizationTaskId = request.SpuOptimizationTaskId, + UpdateTime = DateTime.Now + })); + } + if (competitiveTenderTaskList.Count() > 0) + updateCompetitiveTenderTaskIdList.AddRange(competitiveTenderTaskList.Select(ct => ct.Id).ToList()); + + fsql.Transaction(() => + { + if (insertSpuOptimizationCompetitiveTenderTaskList.Count() > 0) + fsql.Insert(insertSpuOptimizationCompetitiveTenderTaskList).ExecuteAffrows(); + if (updateCompetitiveTenderTaskIdList.Count() > 0) + fsql.Update(updateCompetitiveTenderTaskIdList) + .Set(ct => ct.IsUpdateQuotedPrice, true) + .Set(ct => ct.UpdateTime, DateTime.Now) + .ExecuteAffrows(); + }); + } /// /// 完成优化 @@ -313,48 +401,69 @@ namespace BBWYB.Server.Business /// public void CompleteOptimization(long taskId, string userId) { - #region 验证待议价任务 - var optimazaionTask = fsql.Select(taskId).ToOne(); - if (optimazaionTask == null) - throw new BusinessException("优化任务不存在"); - if (optimazaionTask.IsOptimizationCompleted == true) - throw new BusinessException("优化任务已完成"); - - #endregion - #region 获取用户和部门信息 var uInfo = userBusiness.GetisBargainTeamByUserId(userId, true); #endregion - #region 验证待议价子任务 - var optimazaionChildTaskList = fsql.Select() - .Where(sc => sc.OptimizationTaskId == optimazaionTask.Id) - .ToList(); - var currentOptimazaionChildTaskList = optimazaionChildTaskList.FirstOrDefault(sc => sc.BelongTeamId == uInfo.department.Id); - if (currentOptimazaionChildTaskList == null) + #region 业务验证 + var spuOptimizationTask = fsql.Select(taskId).ToOne(); + if (spuOptimizationTask == null) + throw new BusinessException($"待优化任务{taskId}不存在"); + if (spuOptimizationTask.IsOptimizationCompleted == true) + throw new BusinessException("待优化任务已完成"); + + var spuOptimizationBargainTeamTaskList = fsql.Select() + .Where(sbt => sbt.SpuOptimizationTaskId == taskId && sbt.BelongTeamId == uInfo.department.Id) + .ToList(); + var currentspuOptimizationBargainTeamTask = spuOptimizationBargainTeamTaskList.FirstOrDefault(sc => sc.BelongTeamId == uInfo.department.Id); + if (currentspuOptimizationBargainTeamTask == null) throw new BusinessException($"未找到议价组{uInfo.department.DepartmentName}的议价子任务"); - if (currentOptimazaionChildTaskList.IsOptimizationCompleted == true) + if (currentspuOptimizationBargainTeamTask.IsOptimizationCompleted == true) throw new BusinessException($"{uInfo.department.DepartmentName}的议价子任务已完成"); - currentOptimazaionChildTaskList.IsOptimizationCompleted = true; + var skuIdList = fsql.Select() + .Where(s => s.SpuOptimizationTaskId == taskId) + .ToList(s => s.SkuId); + + //查询该议价组的竞标任务 + var competitiveTenderTaskList = fsql.Select() + .Where(ct => ct.BargainTeamId == uInfo.user.DepartmentId && + ct.SpuOptimizationTaskId == taskId) + .ToList(); + var competitiveTenderSchemeIdList = competitiveTenderTaskList.Select(ct => ct.SchemeId.Value).ToList(); + + //验证该议价组的符合sku条件的采购方案是否都参与投标 + var purchaseSchemeIdList = fsql.Select().Where(ps => ps.BelongBargainTeamId == uInfo.user.DepartmentId && + skuIdList.Contains(ps.SkuId)) + .ToList(ps => ps.Id); + var noJoinCompetitiveTenderSchemeIdList = purchaseSchemeIdList.Except(competitiveTenderSchemeIdList); + if (noJoinCompetitiveTenderSchemeIdList.Count() > 0) + throw new BusinessException($"议价组{uInfo.department.DepartmentName}存在{noJoinCompetitiveTenderSchemeIdList.Count()}个符合条件但未参与竞标的采购方案"); + + //验证该议价组参与投标的采购方案是否都完成报价 + if (competitiveTenderTaskList.Any(ct => ct.IsUpdateQuotedPrice == false)) + throw new BusinessException($"议价组{uInfo.department.DepartmentName}存在未更新报价的投标"); + + currentspuOptimizationBargainTeamTask.IsOptimizationCompleted = true; #endregion - IUpdate updateChildTask = null; - IUpdate updateTask = null; + + IUpdate updateBargainTask = null; + IUpdate updateSpuTask = null; IUpdate updateSpuSaleInfo = null; IUpdate updateTimeLimitTask = null; - if (!optimazaionChildTaskList.Any(sc => sc.IsOptimizationCompleted == false)) + if (!spuOptimizationBargainTeamTaskList.Any(sc => sc.IsOptimizationCompleted == false)) { //全部完成 #region 更新spu销量表 - var spuSaleInfo = fsql.Select(optimazaionTask.ProductId).ToOne(); + var spuSaleInfo = fsql.Select(spuOptimizationTask.ProductId).ToOne(); if (spuSaleInfo == null) - throw new BusinessException($"未找到spu{optimazaionTask.ProductId}销量"); + throw new BusinessException($"未找到spu{spuOptimizationTask.ProductId}销量"); - updateSpuSaleInfo = fsql.Update(optimazaionTask.ProductId) + updateSpuSaleInfo = fsql.Update(spuOptimizationTask.ProductId) .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == false, s => s.IsFirstPurchaseCompleted, true) .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == false, s => s.FirstPurchaseCompletedItemCount == s.ItemCount) .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == true && @@ -366,31 +475,31 @@ namespace BBWYB.Server.Business .Set(s => s.UpdateTime, DateTime.Now); #endregion - #region 更新待议价任务 - updateTask = fsql.Update(optimazaionTask.Id) - .Set(t => t.IsOptimizationCompleted, true) - .Set(t => t.CompletionTime, DateTime.Now); + #region 更新待优化任务 + updateSpuTask = fsql.Update(spuOptimizationTask.Id) + .Set(t => t.IsOptimizationCompleted, true) + .Set(t => t.CompletionTime, DateTime.Now); #endregion - #region 更新待议价限时任务 + #region 更新待优化限时任务 updateTimeLimitTask = fsql.Update().Set(t => t.CompletionTime, DateTime.Now) .Set(t => t.IsTimely == (DateTime.Now < t.ExpirationTime ? true : false)) - .Where(t => t.TaskId == optimazaionTask.Id && + .Where(t => t.TaskId == spuOptimizationTask.Id && t.CompletionTime == null && t.TaskType == Enums.TimeLimitTaskType.待议价任务); #endregion } - #region 更新待议价子任务 - updateChildTask = fsql.Update(currentOptimazaionChildTaskList.Id) + #region 更新待优化议价组任务 + updateBargainTask = fsql.Update(currentspuOptimizationBargainTeamTask.Id) .Set(sc => sc.IsOptimizationCompleted, true) .Set(sc => sc.CompletionTime, DateTime.Now); #endregion fsql.Transaction(() => { - updateChildTask?.ExecuteAffrows(); - updateTask?.ExecuteAffrows(); + updateSpuTask?.ExecuteAffrows(); + updateBargainTask?.ExecuteAffrows(); updateSpuSaleInfo?.ExecuteAffrows(); updateTimeLimitTask?.ExecuteAffrows(); }); diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 3725276..08a9636 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -560,7 +560,8 @@ namespace BBWYB.Server.Business.Sync SchemeId = ps.Id, SkuId = ps.SkuId, SpuOptimizationBargainTeamTaskId = spuOptimizationBargainTeamTask.Id, - SpuOptimizationTaskId = spuOptimizationTask.Id + SpuOptimizationTaskId = spuOptimizationTask.Id, + UpdateTime = DateTime.Now })); } #endregion diff --git a/BBWYB.Server.Model/BBWYB.Server.Model.csproj b/BBWYB.Server.Model/BBWYB.Server.Model.csproj index bcfb11f..e426986 100644 --- a/BBWYB.Server.Model/BBWYB.Server.Model.csproj +++ b/BBWYB.Server.Model/BBWYB.Server.Model.csproj @@ -14,6 +14,7 @@ + diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs index 17148f8..c6d2249 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs @@ -22,6 +22,9 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "datetime")] public DateTime? CreateTime { get; set; } + [Column(DbType = "datetime")] + public DateTime? UpdateTime { get; set; } + /// /// 是否更新报价 /// diff --git a/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs b/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs index 7a78f93..60a0a3a 100644 --- a/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs @@ -2,7 +2,25 @@ { public class BatchUpdateCompetitiveTenderQuotationRequest { - public string SkuId { get; set; } + /// + /// 优化任务Id + /// + public long SpuOptimizationTaskId { get; set; } + + /// + /// 采购方案分组Id + /// + public long SchemeGroupId { get; set; } + + /// + /// 配件列表 + /// + public IList ItemList { get; set; } + } + + public class BatchUpdateCompetitiveTenderQuotationItemRequest + { + //public string SkuId { get; set; } /// /// 采购SkuId diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs index 349e8b0..fbd233a 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs @@ -12,10 +12,10 @@ ///// ////public long SchemeId { get; set; } - /// - /// SkuId - /// - public string SkuId { get; set; } + ///// + ///// SkuId + ///// + //public string SkuId { get; set; } /// /// 采购SkuId diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs deleted file mode 100644 index fb19868..0000000 --- a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs +++ /dev/null @@ -1,8 +0,0 @@ -using BBWYB.Server.Model.Db; - -namespace BBWYB.Server.Model.Dto -{ - public class SkuOptimizationChildTaskResponse: SkuOptimizationChildTask - { - } -} diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs deleted file mode 100644 index 830fdd9..0000000 --- a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs +++ /dev/null @@ -1,20 +0,0 @@ -using BBWYB.Server.Model.Db; - -namespace BBWYB.Server.Model.Dto -{ - public class SkuOptimizationTaskResponse : SkuOptimizationTask - { - public IList ChildTaskList { get; set; } - - /// - /// 当前用户所属团队是否完成议价子任务 - /// - public bool IsOptimizationCompletedByCurrentTeam { get; set; } - - /// - /// 限时任务 - /// - public TimeLimitTask TimeLimitTask { get; set; } - - } -} diff --git a/BBWYB.Server.Model/MappingProfiles.cs b/BBWYB.Server.Model/MappingProfiles.cs index 94fd5a2..2abed1c 100644 --- a/BBWYB.Server.Model/MappingProfiles.cs +++ b/BBWYB.Server.Model/MappingProfiles.cs @@ -60,18 +60,21 @@ namespace BBWYB.Server.Model CreateMap(); CreateMap(); - CreateMap().ForPath(t => t.TimeLimitTask.Id, opt => opt.MapFrom(f => f.TimeLimitTaskId)) - .ForPath(t => t.TimeLimitTask.CompletionTime, opt => opt.MapFrom(f => f.TimeLimitTaskCompletionTime)) - .ForPath(t => t.TimeLimitTask.ExpirationTime, opt => opt.MapFrom(f => f.TimeLimitTaskExpirationTime)) - .ForPath(t => t.TimeLimitTask.PayTime, opt => opt.MapFrom(f => f.TimeLimitTaskPayTime)) - .ForPath(t => t.TimeLimitTask.IsTimely, opt => opt.MapFrom(f => f.TimeLimitTaskIsTimely)) - .ForPath(t => t.TimeLimitTask.CreateTme, opt => opt.MapFrom(f => f.TimeLimitTaskCreateTme)) - .ForPath(t => t.TimeLimitTask.OrderId, opt => opt.MapFrom(f => f.TimeLimitTaskOrderId)) - .ForPath(t => t.TimeLimitTask.OrderSn, opt => opt.MapFrom(f => f.TimeLimitTaskOrderSn)) - .ForPath(t => t.TimeLimitTask.Remark, opt => opt.MapFrom(f => f.TimeLimitTaskRemark)) - .ForPath(t => t.TimeLimitTask.ShopId, opt => opt.MapFrom(f => f.TimeLimitTaskShopId)) - .ForPath(t => t.TimeLimitTask.SkuId, opt => opt.MapFrom(f => f.TimeLimitTaskSkuId)) - .ForPath(t => t.TimeLimitTask.TaskId, opt => opt.MapFrom(f => f.TimeLimitTaskBelongTaskId)); + CreateMap(); + + + //CreateMap().ForPath(t => t.TimeLimitTask.Id, opt => opt.MapFrom(f => f.TimeLimitTaskId)) + // .ForPath(t => t.TimeLimitTask.CompletionTime, opt => opt.MapFrom(f => f.TimeLimitTaskCompletionTime)) + // .ForPath(t => t.TimeLimitTask.ExpirationTime, opt => opt.MapFrom(f => f.TimeLimitTaskExpirationTime)) + // .ForPath(t => t.TimeLimitTask.PayTime, opt => opt.MapFrom(f => f.TimeLimitTaskPayTime)) + // .ForPath(t => t.TimeLimitTask.IsTimely, opt => opt.MapFrom(f => f.TimeLimitTaskIsTimely)) + // .ForPath(t => t.TimeLimitTask.CreateTme, opt => opt.MapFrom(f => f.TimeLimitTaskCreateTme)) + // .ForPath(t => t.TimeLimitTask.OrderId, opt => opt.MapFrom(f => f.TimeLimitTaskOrderId)) + // .ForPath(t => t.TimeLimitTask.OrderSn, opt => opt.MapFrom(f => f.TimeLimitTaskOrderSn)) + // .ForPath(t => t.TimeLimitTask.Remark, opt => opt.MapFrom(f => f.TimeLimitTaskRemark)) + // .ForPath(t => t.TimeLimitTask.ShopId, opt => opt.MapFrom(f => f.TimeLimitTaskShopId)) + // .ForPath(t => t.TimeLimitTask.SkuId, opt => opt.MapFrom(f => f.TimeLimitTaskSkuId)) + // .ForPath(t => t.TimeLimitTask.TaskId, opt => opt.MapFrom(f => f.TimeLimitTaskBelongTaskId)); } } From c98af67bb4f868350a0df41d42d9935e203ae02d Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 8 Mar 2024 15:08:03 +0800 Subject: [PATCH 162/222] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimization/SkuOptimizationBusiness.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 464bd26..10054bd 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -434,8 +434,10 @@ namespace BBWYB.Server.Business //验证该议价组的符合sku条件的采购方案是否都参与投标 var purchaseSchemeIdList = fsql.Select().Where(ps => ps.BelongBargainTeamId == uInfo.user.DepartmentId && - skuIdList.Contains(ps.SkuId)) + skuIdList.Contains(ps.SkuId)) .ToList(ps => ps.Id); + if (purchaseSchemeIdList.Count() == 0) + throw new BusinessException($"议价组{uInfo.department.DepartmentName}没有参与竞标的采购方案,不能完成优化任务"); var noJoinCompetitiveTenderSchemeIdList = purchaseSchemeIdList.Except(competitiveTenderSchemeIdList); if (noJoinCompetitiveTenderSchemeIdList.Count() > 0) throw new BusinessException($"议价组{uInfo.department.DepartmentName}存在{noJoinCompetitiveTenderSchemeIdList.Count()}个符合条件但未参与竞标的采购方案"); From ef7f0142545163e4584731b559c4674e941fe0db Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 8 Mar 2024 22:19:46 +0800 Subject: [PATCH 163/222] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimizationBusiness.cs | 2 +- ...ueryNoCompletionOptimizationTaskRequest.cs | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 10054bd..7b27f57 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -507,7 +507,7 @@ namespace BBWYB.Server.Business }); } - public ListResponse GetNoCompletionSkuOptimizationTask(PageRequest request, string userId) + public ListResponse GetNoCompletionSkuOptimizationTask(QueryNoCompletionOptimizationTaskRequest request, string userId) { var uInfo = userBusiness.GetisBargainTeamByUserId(userId, true); var taskList = fsql.Select() diff --git a/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs b/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs new file mode 100644 index 0000000..45ef5e6 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs @@ -0,0 +1,25 @@ +namespace BBWYB.Server.Model.Dto +{ + public class QueryNoCompletionOptimizationTaskRequest : PageRequest + { + /// + /// 京东SKU + /// + public string JDSku { get; set; } + + /// + /// 需求方店铺 + /// + public long? BelongShopId { get; set; } + + /// + /// 开始时间 + /// + public DateTime? StartTime { get; set; } + + /// + /// 结束时间 + /// + public DateTime? EndTime { get; set;; } + } +} From 3d4313981da722979f6d2d45c864c6260ad73ee1 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sat, 9 Mar 2024 02:04:02 +0800 Subject: [PATCH 164/222] =?UTF-8?q?=E5=BE=85=E4=BC=98=E5=8C=96=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=9D=A1=E4=BB=B6=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataRepair/DataRepairBusiness.cs | 2 - BBWYB.Server.Business/Order/OrderBusiness.cs | 1 - .../PurchaseOrder/PurchaseOrderBusiness.cs | 7 +- .../SkuOptimizationBusiness.cs | 78 ++++++++----------- .../Sync/OrderSyncBusiness.cs | 10 +++ BBWYB.Server.Model/BBWYB.Server.Model.csproj | 1 - .../Spuoptimizationbargainteamtask.cs | 2 +- ...ueryNoCompletionOptimizationTaskRequest.cs | 10 ++- .../SpuOptimizationBargainTeamTaskResponse.cs | 8 ++ .../SpuOptimizationTaskResponse.cs | 24 ++++++ .../Product/SkuOptimizationHistoryResponse.cs | 2 +- BBWYB.Server.Model/MappingProfiles.cs | 13 +--- 12 files changed, 87 insertions(+), 71 deletions(-) create mode 100644 BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationBargainTeamTaskResponse.cs create mode 100644 BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationTaskResponse.cs diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index b496ecf..b9c9b8b 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -5,7 +5,6 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.HY; -using BBWYB.Server.Model.Db.SpuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json.Linq; @@ -16,7 +15,6 @@ using SDKAdapter.PurchasePlatform.Client; using SDKAdapter.PurchasePlatform.Models; using System.Data; using System.Reflection; -using System.Text.RegularExpressions; using Yitter.IdGenerator; namespace BBWYB.Server.Business diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 7e0e998..1f08dec 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -5,7 +5,6 @@ using BBWYB.Common.Models; using BBWYB.Server.Business.Extensions; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; -using BBWYB.Server.Model.Db.SpuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Microsoft.Extensions.DependencyInjection; diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 71b1f90..a896ded 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -8,7 +8,6 @@ using BBWYB.Server.Model.Core; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.Mds; using BBWYB.Server.Model.Db.MDS; -using BBWYB.Server.Model.Db.SpuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Microsoft.Extensions.DependencyInjection; @@ -333,7 +332,7 @@ namespace BBWYB.Server.Business List> updatePurchaserList = new List>(); List insertSkuHistoryPurchaserRelationList = new List(); List insertSkuOptimizationHistoryList = new List(); - List updateSkuOptimizationPurhcasementByIdList = new List(); + //List updateSkuOptimizationPurhcasementByIdList = new List(); List notifyQikuPackSchemeParamList = null; if (dbOrder.IntoStoreType == Enums.IntoStoreType.发回齐越) @@ -796,8 +795,8 @@ namespace BBWYB.Server.Business foreach (var update in updateOrderSkuCostList) update.ExecuteAffrows(); } - if (updateSkuOptimizationPurhcasementByIdList.Count() > 0) - fsql.Update(updateSkuOptimizationPurhcasementByIdList).Set(s => s.IsPurchasementCompleted, true).ExecuteAffrows(); + //if (updateSkuOptimizationPurhcasementByIdList.Count() > 0) + // fsql.Update(updateSkuOptimizationPurhcasementByIdList).Set(s => s.IsPurchasementCompleted, true).ExecuteAffrows(); if (updatePurchaserList.Count() > 0) { diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 7b27f57..eda74e2 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -171,6 +171,7 @@ namespace BBWYB.Server.Business var spuOptimizationTask = new SpuOptimizationTask() { Id = idGenerator.NewLong(), + BelongShopId = long.Parse(belongShop.ShopId), BelongShopName = belongShop.ShopName, CompletionTime = null, CreateTime = DateTime.Now, @@ -507,61 +508,46 @@ namespace BBWYB.Server.Business }); } - public ListResponse GetNoCompletionSkuOptimizationTask(QueryNoCompletionOptimizationTaskRequest request, string userId) + public ListResponse GetNoCompletionSkuOptimizationTask(QueryNoCompletionOptimizationTaskRequest request, string userId) { + request.EndTime = request.EndTime.Date; var uInfo = userBusiness.GetisBargainTeamByUserId(userId, true); - var taskList = fsql.Select() - .InnerJoin((t, tt) => t.Id == tt.TaskId) - .Where((t, tt) => t.IsOptimizationCompleted == false) - .OrderByDescending((t, tt) => t.CreateTime) + var taskList = fsql.Select() + .Where(t => t.IsOptimizationCompleted == false && + t.CreateTime >= request.StartTime && + t.CreateTime <= request.EndTime) + .WhereIf(request.BelongShopId != null && request.BelongShopId != 0, t => t.BelongShopId == request.BelongShopId) + .WhereIf(!string.IsNullOrEmpty(request.JDSku), t => fsql.Select() + .Where(st => st.SpuOptimizationTaskId == t.Id && + st.JDSkuId == request.JDSku) + .Any()) + .OrderByDescending(t => t.CreateTime) .Count(out var total) .Page(request.PageIndex, request.PageSize) - .ToList((t, tt) => new SkuOptimizationTask - { - Id = t.Id, - ShopId = t.ShopId, - BelongShopName = t.BelongShopName, - JDSkuId = t.JDSkuId, - ProductId = t.ProductId, - SkuId = t.SkuId, - PreItemCount = t.PreItemCount, - PrePurchasedAmount = t.PrePurchasedAmount, - SafeWarningRemainingDay = t.SafeWarningRemainingDay, - IsOptimizationCompleted = t.IsOptimizationCompleted, - IsPurchasementCompleted = t.IsPurchasementCompleted, - CreateTime = t.CreateTime, - CompletionTime = t.CompletionTime, - TriggerOptimizationReason = t.TriggerOptimizationReason, - LastOptimizationRatio = t.LastOptimizationRatio, - LastPurchasePrice = t.LastPurchasePrice, - LastOptimizationTime = t.LastOptimizationTime, - - TimeLimitTaskId = tt.Id, - TimeLimitTaskBelongTaskId = tt.TaskId, - TimeLimitTaskCompletionTime = tt.CompletionTime, - TimeLimitTaskCreateTme = tt.CreateTme, - TimeLimitTaskExpirationTime = tt.ExpirationTime, - TimeLimitTaskIsTimely = tt.IsTimely, - TimeLimitTaskOrderId = tt.OrderId, - TimeLimitTaskOrderSn = tt.OrderSn, - TimeLimitTaskPayTime = tt.PayTime, - TimeLimitTaskRemark = tt.Remark, - TimeLimitTaskShopId = tt.ShopId, - TimeLimitTaskSkuId = tt.SkuId, - TimeLimitTaskTaskType = tt.TaskType - }).Map>(); - - List taskIdList = taskList.Select(t => t.Id).ToList(); - var childTaskList = fsql.Select().Where(ct => taskIdList.Contains(ct.OptimizationTaskId)).ToList(); + .ToList(); + + var spuTaskIdList = taskList.Select(t => t.Id).ToList(); + + #region 获取议价组任务 + var bargainTeamTaskList = fsql.Select() + .Where(sbt => spuTaskIdList.Contains(sbt.SpuOptimizationTaskId)) + .ToList(); + #endregion + + #region 限时任务 + var timelimitTaskList = fsql.Select() + .Where(t => t.TaskType == Enums.TimeLimitTaskType.待议价任务 && spuTaskIdList.Contains(t.TaskId)) + .ToList(); + #endregion foreach (var task in taskList) { - task.ChildTaskList = childTaskList.Where(ct => ct.OptimizationTaskId == task.Id).ToList(); - var currentChildTask = task.ChildTaskList.FirstOrDefault(ct => ct.BelongTeamId == uInfo.user.DepartmentId); - task.IsOptimizationCompletedByCurrentTeam = currentChildTask?.IsOptimizationCompleted ?? false; + task.BargainTeamTaskList = bargainTeamTaskList.Where(sbt => sbt.SpuOptimizationTaskId == task.Id).ToList(); + task.TimeLimitTask = timelimitTaskList.FirstOrDefault(t => t.TaskId == task.Id); + task.IsCompletedByCurrentTeam = task.BargainTeamTaskList.FirstOrDefault(sbt => sbt.BelongTeamId == uInfo.department.Id)?.IsOptimizationCompleted == true; } - return new ListResponse() + return new ListResponse() { Items = taskList, TotalCount = total diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 08a9636..1409143 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -411,6 +411,7 @@ namespace BBWYB.Server.Business.Sync if (noFisrstPurchasedSpuList.Count() > 0) { var bargainTeamList = venderBusiness.GetYiJiaGroup(); //获取议价组 + var shopList = venderBusiness.GetShopList(platform: Enums.Platform.京东); var bargainTeamIdList = bargainTeamList.Select(t => t.Id).ToList(); var waitToCompetitiveTenderSchemeList = fsql.Select() .Where(ps => bargainTeamIdList.Contains(ps.BelongBargainTeamId) && @@ -419,6 +420,7 @@ namespace BBWYB.Server.Business.Sync var waitToCheckOrderSpuGroups = waitToCheckSkuSaleOrderList.SelectMany(o => o.OrderSkuList).GroupBy(osku => osku.ProductId); + foreach (var spuGroup in waitToCheckOrderSpuGroups) { if (noFisrstPurchasedSpuList.Contains(spuGroup.Key) && @@ -428,6 +430,7 @@ namespace BBWYB.Server.Business.Sync var includeSpuOrderList = waitToCheckSkuSaleOrderList.Where(o => o.OrderSkuList.Any(osku => osku.ProductId == spuGroup.Key)); var sourceShopName = string.Empty; + long sourceShopId = 0; //拳探sku-京东sku下单关系映射表 var mappingQT_JDSKUDictionary = new Dictionary(); @@ -459,6 +462,12 @@ namespace BBWYB.Server.Business.Sync } } } + if (!string.IsNullOrEmpty(sourceShopName)) + { + var belongShop = shopList.FirstOrDefault(s => s.ShopName == sourceShopName); + if (belongShop != null) + sourceShopId = long.Parse(belongShop.ShopId); + } #endregion #region 读取JDSKU预估金额 @@ -475,6 +484,7 @@ namespace BBWYB.Server.Business.Sync var spuOptimizationTask = new SpuOptimizationTask() { Id = idGenerator.NewLong(), + BelongShopId = sourceShopId, BelongShopName = sourceShopName, CompletionTime = null, CreateTime = DateTime.Now, diff --git a/BBWYB.Server.Model/BBWYB.Server.Model.csproj b/BBWYB.Server.Model/BBWYB.Server.Model.csproj index e426986..bcfb11f 100644 --- a/BBWYB.Server.Model/BBWYB.Server.Model.csproj +++ b/BBWYB.Server.Model/BBWYB.Server.Model.csproj @@ -14,7 +14,6 @@ - diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs index 19825bd..a26e278 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs @@ -40,7 +40,7 @@ namespace BBWYB.Server.Model.Db /// Spu优化任务Id /// [Column(DbType = "bigint")] - public long? SpuOptimizationTaskId { get; set; } + public long SpuOptimizationTaskId { get; set; } } diff --git a/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs b/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs index 45ef5e6..0386fe3 100644 --- a/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs @@ -1,4 +1,6 @@ -namespace BBWYB.Server.Model.Dto +using System.ComponentModel.DataAnnotations; + +namespace BBWYB.Server.Model.Dto { public class QueryNoCompletionOptimizationTaskRequest : PageRequest { @@ -15,11 +17,13 @@ /// /// 开始时间 /// - public DateTime? StartTime { get; set; } + [Required] + public DateTime StartTime { get; set; } /// /// 结束时间 /// - public DateTime? EndTime { get; set;; } + [Required] + public DateTime EndTime { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationBargainTeamTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationBargainTeamTaskResponse.cs new file mode 100644 index 0000000..5ec20a4 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationBargainTeamTaskResponse.cs @@ -0,0 +1,8 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Model.Dto +{ + public class SpuOptimizationBargainTeamTaskResponse : SpuOptimizationBargainTeamTask + { + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationTaskResponse.cs new file mode 100644 index 0000000..a0aacc0 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationTaskResponse.cs @@ -0,0 +1,24 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Model.Dto +{ + public class SpuOptimizationTaskResponse : SpuOptimizationTask + { + /// + /// 当前团队是否完成 + /// + public bool IsCompletedByCurrentTeam { get; set; } + + /// + /// 限时任务 + /// + public TimeLimitTaskResponse TimeLimitTask { get; set; } + + /// + /// 议价组子任务列表 + /// + public List BargainTeamTaskList { get; set; } + + + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs b/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs index f08893f..b32d4bc 100644 --- a/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Product/SkuOptimizationHistoryResponse.cs @@ -1,4 +1,4 @@ -using BBWYB.Server.Model.Db.SpuOptimization; +using BBWYB.Server.Model.Db; namespace BBWYB.Server.Model.Dto { diff --git a/BBWYB.Server.Model/MappingProfiles.cs b/BBWYB.Server.Model/MappingProfiles.cs index 2abed1c..2a35bf9 100644 --- a/BBWYB.Server.Model/MappingProfiles.cs +++ b/BBWYB.Server.Model/MappingProfiles.cs @@ -63,18 +63,7 @@ namespace BBWYB.Server.Model CreateMap(); - //CreateMap().ForPath(t => t.TimeLimitTask.Id, opt => opt.MapFrom(f => f.TimeLimitTaskId)) - // .ForPath(t => t.TimeLimitTask.CompletionTime, opt => opt.MapFrom(f => f.TimeLimitTaskCompletionTime)) - // .ForPath(t => t.TimeLimitTask.ExpirationTime, opt => opt.MapFrom(f => f.TimeLimitTaskExpirationTime)) - // .ForPath(t => t.TimeLimitTask.PayTime, opt => opt.MapFrom(f => f.TimeLimitTaskPayTime)) - // .ForPath(t => t.TimeLimitTask.IsTimely, opt => opt.MapFrom(f => f.TimeLimitTaskIsTimely)) - // .ForPath(t => t.TimeLimitTask.CreateTme, opt => opt.MapFrom(f => f.TimeLimitTaskCreateTme)) - // .ForPath(t => t.TimeLimitTask.OrderId, opt => opt.MapFrom(f => f.TimeLimitTaskOrderId)) - // .ForPath(t => t.TimeLimitTask.OrderSn, opt => opt.MapFrom(f => f.TimeLimitTaskOrderSn)) - // .ForPath(t => t.TimeLimitTask.Remark, opt => opt.MapFrom(f => f.TimeLimitTaskRemark)) - // .ForPath(t => t.TimeLimitTask.ShopId, opt => opt.MapFrom(f => f.TimeLimitTaskShopId)) - // .ForPath(t => t.TimeLimitTask.SkuId, opt => opt.MapFrom(f => f.TimeLimitTaskSkuId)) - // .ForPath(t => t.TimeLimitTask.TaskId, opt => opt.MapFrom(f => f.TimeLimitTaskBelongTaskId)); + } } From 93ec372779a88fbba88086ba36560cae732d4bff Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sat, 9 Mar 2024 14:50:34 +0800 Subject: [PATCH 165/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 80 +++++++++---------- .../SkuOptimizationBusiness.cs | 20 ++++- .../Spuoptimizationcompetitivetendertask.cs | 2 +- .../MergePurchaseSchemeProductSkuResponse.cs | 13 +++ 4 files changed, 73 insertions(+), 42 deletions(-) create mode 100644 BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 39be653..816e116 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -857,46 +857,46 @@ namespace BBWYB.Server.Business List purchaserIdList = purchaseSchemeProductList.Select(x => x.PurchaserId).Distinct().ToList(); var dbPurchaserList = fsql.Select(purchaserIdList).ToList(); - if (request.IncludePurchaserStatisticsInfo == 1) - { - #region 查询SKU采购数 - var purchasedSkuList = fsql.Select() - .InnerJoin((spr, ps) => spr.SkuId == ps.Id) - .Where((spr, ps) => ps.ShopId == request.ShopId && purchaserIdList.Contains(spr.PurchaserId)) - .GroupBy((spr, ps) => new { spr.PurchaserId, spr.SkuId }) - .ToList(g => new - { - g.Key.PurchaserId, - g.Key.SkuId - }); - - #endregion - - #region 查询订单数 - var poList = fsql.Select() - .InnerJoin((opi, o) => opi.OrderId == o.Id) - .Where((opi, o) => opi.ShopId == request.ShopId && - opi.IsEnabled == true && - o.OrderState != Enums.OrderState.已取消 && - purchaserIdList.Contains(opi.PurchaserId)) - .GroupBy((opi, o) => opi.PurchaserId) - .ToList(g => new - { - PurchaserId = g.Key, - Count = g.Count() - }); - - #endregion - - foreach (var purchaser in dbPurchaserList) - { - purchaser.PurchasedSkuCount = purchasedSkuList.Where(x => x.PurchaserId == purchaser.Id) - .Select(x => x.SkuId) - .Distinct() - .Count(); - purchaser.PurchasedCount = poList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.Count ?? 0; - } - } + //if (request.IncludePurchaserStatisticsInfo == 1) + //{ + // #region 查询SKU采购数 + // var purchasedSkuList = fsql.Select() + // .InnerJoin((spr, ps) => spr.SkuId == ps.Id) + // .Where((spr, ps) => ps.ShopId == request.ShopId && purchaserIdList.Contains(spr.PurchaserId)) + // .GroupBy((spr, ps) => new { spr.PurchaserId, spr.SkuId }) + // .ToList(g => new + // { + // g.Key.PurchaserId, + // g.Key.SkuId + // }); + + // #endregion + + // #region 查询订单数 + // var poList = fsql.Select() + // .InnerJoin((opi, o) => opi.OrderId == o.Id) + // .Where((opi, o) => opi.ShopId == request.ShopId && + // opi.IsEnabled == true && + // o.OrderState != Enums.OrderState.已取消 && + // purchaserIdList.Contains(opi.PurchaserId)) + // .GroupBy((opi, o) => opi.PurchaserId) + // .ToList(g => new + // { + // PurchaserId = g.Key, + // Count = g.Count() + // }); + + // #endregion + + // foreach (var purchaser in dbPurchaserList) + // { + // purchaser.PurchasedSkuCount = purchasedSkuList.Where(x => x.PurchaserId == purchaser.Id) + // .Select(x => x.SkuId) + // .Distinct() + // .Count(); + // purchaser.PurchasedCount = poList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.Count ?? 0; + // } + //} foreach (var scheme in purchaseSchemeList) { diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index eda74e2..d7db2ff 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -518,7 +518,7 @@ namespace BBWYB.Server.Business t.CreateTime <= request.EndTime) .WhereIf(request.BelongShopId != null && request.BelongShopId != 0, t => t.BelongShopId == request.BelongShopId) .WhereIf(!string.IsNullOrEmpty(request.JDSku), t => fsql.Select() - .Where(st => st.SpuOptimizationTaskId == t.Id && + .Where(st => st.SpuOptimizationTaskId == t.Id && st.JDSkuId == request.JDSku) .Any()) .OrderByDescending(t => t.CreateTime) @@ -540,11 +540,29 @@ namespace BBWYB.Server.Business .ToList(); #endregion + #region 获取竞标任务 + var competitiveTenderTaskList = fsql.Select() + .Where(ct => spuTaskIdList.Contains(ct.SpuOptimizationTaskId)) + .ToList(); + #endregion + + #region 获取采购方案 + var competitiveTenderTaskSchemeIdList = competitiveTenderTaskList.Select(ct => ct.SchemeId.Value).ToList(); + var purchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest() + { + SchemeIdList = competitiveTenderTaskSchemeIdList, + IncludePurchaseSkuBasicInfo = 1 + }); + #endregion + foreach (var task in taskList) { task.BargainTeamTaskList = bargainTeamTaskList.Where(sbt => sbt.SpuOptimizationTaskId == task.Id).ToList(); task.TimeLimitTask = timelimitTaskList.FirstOrDefault(t => t.TaskId == task.Id); + if (task.TimeLimitTask != null) + timeLimitRules.CalculateLessTimeForWorkHour(task.TimeLimitTask.ExpirationTime.Value); task.IsCompletedByCurrentTeam = task.BargainTeamTaskList.FirstOrDefault(sbt => sbt.BelongTeamId == uInfo.department.Id)?.IsOptimizationCompleted == true; + } return new ListResponse() diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs index c6d2249..30188a5 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs @@ -55,7 +55,7 @@ namespace BBWYB.Server.Model.Db /// Spu优化任务Id /// [Column(DbType = "bigint")] - public long? SpuOptimizationTaskId { get; set; } + public long SpuOptimizationTaskId { get; set; } } diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs new file mode 100644 index 0000000..b9f8780 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs @@ -0,0 +1,13 @@ +namespace BBWYB.Server.Model.Dto +{ + /// + /// 合并配件信息 + /// + public class MergePurchaseSchemeProductSkuResponse : PurchaseSchemeProductSkuResponse + { + /// + /// 采购商Id + /// + public string PurchaserId { get; set; } + } +} From 70d0948e0a70400540744be9299cc3fa2b1e7a1b Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 9 Mar 2024 21:38:14 +0800 Subject: [PATCH 166/222] 1 --- .../Optimization/MergePurchaseSchemeGroupResponse.cs | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeGroupResponse.cs diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeGroupResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeGroupResponse.cs new file mode 100644 index 0000000..df14a0b --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeGroupResponse.cs @@ -0,0 +1,6 @@ +namespace BBWYB.Server.Model.Dto +{ + public class MergePurchaseSchemeGroupResponse + { + } +} From be51e4caa90767b04f0c17934ee821e7b19d5a38 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 10 Mar 2024 14:00:51 +0800 Subject: [PATCH 167/222] =?UTF-8?q?=E5=90=88=E5=B9=B6=E9=85=8D=E4=BB=B6?= =?UTF-8?q?=E5=AE=9E=E4=BD=93=E5=BB=BA=E6=A8=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MergePurchaseSchemeGroupResponse.cs | 14 +++++ .../MergePurchaseSchemeProductSkuResponse.cs | 54 +++++++++++++++++++ .../Optimization/MergePurchaserResponse.cs | 9 ++++ 3 files changed, 77 insertions(+) create mode 100644 BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeGroupResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeGroupResponse.cs index df14a0b..1000dd1 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeGroupResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeGroupResponse.cs @@ -2,5 +2,19 @@ { public class MergePurchaseSchemeGroupResponse { + /// + /// 分组Id + /// + public long Id { get; set; } + + /// + /// 组名 + /// + public string GroupName { get; set; } + + /// + /// 采购商集合 + /// + public List PurchaserList { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs index b9f8780..0d7b295 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs @@ -9,5 +9,59 @@ /// 采购商Id /// public string PurchaserId { get; set; } + + + public string PurchaseSkuTitle { get; set; } + + + public string PurchaseSkuLogo { get; set; } + + + public decimal? PurchaseSkuPrice { get; set; } + + /// + /// 是否失效 失效=1 其余情况默认为有效 + /// + public int? IsInvalid { get; set; } + + /// + /// 采购商品Id + /// + public string PurchaseProductId { get; set; } + + /// + /// 采购商品的SkuId + /// + public string PurchaseSkuId { get; set; } + + /// + /// 采购商品Sku的SpecId + /// + public string PurchaseSkuSpecId { get; set; } + + /// + /// Sku采购方案Id + /// + public long SkuPurchaseSchemeId { get; set; } + + /// + /// 采购比例 + /// + public int? PurchaseRatio { get; set; } = 1; + + /// + /// 实际单价 + /// + public decimal? ActualPrice { get; set; } + + /// + /// 最近议价日期 + /// + public DateTime? LastBargainingTime { get; set; } + + /// + /// 配件的最近采购价(配件单价) + /// + public decimal? LastPurchasePriceCost { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs new file mode 100644 index 0000000..bc4eefc --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs @@ -0,0 +1,9 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Model.Dto +{ + public class MergePurchaserResponse : Purchaser + { + public List PurchaseSchemeProductSkuList { get; set; } + } +} From 685a4c7678ce6631f550565d962ea5c7a33066bb Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 10 Mar 2024 15:52:34 +0800 Subject: [PATCH 168/222] =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=88=86=E7=BB=84/?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=95=86/=E9=85=8D=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 3 +- .../SkuOptimizationBusiness.cs | 34 ++++++++++++++----- .../Db/SpuOptimization/Skuoptimizationtask.cs | 2 +- .../PurchaseScheme/QuerySchemeRequest.cs | 4 +++ .../MergePurchaseSchemeProductSkuResponse.cs | 5 --- .../SkuOptimizationTaskResponse.cs | 12 +++++++ .../SpuOptimizationTaskResponse.cs | 8 +++++ 7 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 816e116..68730b6 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -751,7 +751,8 @@ namespace BBWYB.Server.Business .WhereIf(request.SchemeIdList != null && request.SchemeIdList.Count() > 0, ps => request.SchemeIdList.Contains(ps.Id)) .WhereIf(request.SchemeGroupIdList != null && request.SchemeGroupIdList.Count() > 0, ps => request.SchemeGroupIdList.Contains(ps.SchemeGroupId)) .WhereIf(request.SkuIdList != null && request.SkuIdList.Count() > 0, ps => request.SkuIdList.Contains(ps.SkuId)) - .WhereIf(request.ProductIdList != null && request.ProductIdList.Count() > 0, ps => request.ProductIdList.Contains(ps.ProductId)); + .WhereIf(request.ProductIdList != null && request.ProductIdList.Count() > 0, ps => request.ProductIdList.Contains(ps.ProductId)) + .WhereIf(request.BargainTeamIdList != null && request.BargainTeamIdList.Count() > 0, ps => request.BargainTeamIdList.Contains(ps.BelongBargainTeamId)); if (request.PurchasePlatform != null || !string.IsNullOrEmpty(request.PurchaserId)) { diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index d7db2ff..d0259a5 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -532,6 +532,25 @@ namespace BBWYB.Server.Business var bargainTeamTaskList = fsql.Select() .Where(sbt => spuTaskIdList.Contains(sbt.SpuOptimizationTaskId)) .ToList(); + var bargainTeamIdList = bargainTeamTaskList.Select(x => x.BelongTeamId).Distinct().ToList(); + #endregion + + #region 获取SKU优化任务 + var skuTaskList = fsql.Select() + .LeftJoin((st, ps) => st.SkuId == ps.Id) + .Where((st, ps) => spuTaskIdList.Contains(st.SpuOptimizationTaskId)) + .ToList((st, ps) => new SkuOptimizationTaskResponse + { + CreateTime = st.CreateTime, + Id = st.Id, + JDSkuId = st.JDSkuId, + Logo = ps.Logo, + PreItemCount = st.PreItemCount, + PrePurchaseAmount = st.PrePurchaseAmount, + SkuId = st.SkuId, + SpuOptimizationTaskId = st.SpuOptimizationTaskId + }); + var skuIdList = skuTaskList.Select(st => st.SkuId).ToList(); #endregion #region 限时任务 @@ -540,17 +559,11 @@ namespace BBWYB.Server.Business .ToList(); #endregion - #region 获取竞标任务 - var competitiveTenderTaskList = fsql.Select() - .Where(ct => spuTaskIdList.Contains(ct.SpuOptimizationTaskId)) - .ToList(); - #endregion - #region 获取采购方案 - var competitiveTenderTaskSchemeIdList = competitiveTenderTaskList.Select(ct => ct.SchemeId.Value).ToList(); var purchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest() { - SchemeIdList = competitiveTenderTaskSchemeIdList, + SkuIdList = skuIdList, + BargainTeamIdList = bargainTeamIdList, IncludePurchaseSkuBasicInfo = 1 }); #endregion @@ -562,7 +575,12 @@ namespace BBWYB.Server.Business if (task.TimeLimitTask != null) timeLimitRules.CalculateLessTimeForWorkHour(task.TimeLimitTask.ExpirationTime.Value); task.IsCompletedByCurrentTeam = task.BargainTeamTaskList.FirstOrDefault(sbt => sbt.BelongTeamId == uInfo.department.Id)?.IsOptimizationCompleted == true; + task.SkuOptimizationTaskList = skuTaskList.Where(st => st.SpuOptimizationTaskId == task.Id).ToList(); + #region 合并分组/采购商/配件 + var currentTaskSkuIdList = task.SkuOptimizationTaskList.Select(st => st.SkuId).ToList(); + var currentPurchaseSchemeList = purchaseSchemeList.Where(p => currentTaskSkuIdList.Contains(p.SkuId)).ToList(); + #endregion } return new ListResponse() diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs index 2c5c53e..b1c10ab 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs @@ -38,7 +38,7 @@ namespace BBWYB.Server.Model.Db /// Spu优化任务Id /// [Column(DbType = "bigint")] - public long? SpuOptimizationTaskId { get; set; } + public long SpuOptimizationTaskId { get; set; } } diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs index 31482a4..7715bfd 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs @@ -31,6 +31,10 @@ namespace BBWYB.Server.Model.Dto public long? ShopId { get; set; } + /// + /// 议价组Id集合 + /// + public List BargainTeamIdList { get; set; } /// /// 采购商Id, 只要其中一个采购商品满足采购商条件则命中查询 diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs index 0d7b295..0b53696 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs @@ -39,11 +39,6 @@ /// public string PurchaseSkuSpecId { get; set; } - /// - /// Sku采购方案Id - /// - public long SkuPurchaseSchemeId { get; set; } - /// /// 采购比例 /// diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs new file mode 100644 index 0000000..c836741 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs @@ -0,0 +1,12 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Model.Dto +{ + public class SkuOptimizationTaskResponse : SkuOptimizationTask + { + public string SkuId { get; set; } + + + public string Logo { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationTaskResponse.cs index a0aacc0..d6aa4e3 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationTaskResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationTaskResponse.cs @@ -19,6 +19,14 @@ namespace BBWYB.Server.Model.Dto /// public List BargainTeamTaskList { get; set; } + /// + /// SKU优化任务列表 + /// + public List SkuOptimizationTaskList { get; set; } + /// + /// 合并后的采购分组列表 + /// + public List MergePurchaseScemeGroupList { get; set; } } } From e7cad627f5408024b221271961d5db648be3b9fb Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 10 Mar 2024 15:54:07 +0800 Subject: [PATCH 169/222] =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=88=86=E7=BB=84/?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=95=86/=E9=85=8D=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimization/SkuOptimizationBusiness.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index d0259a5..46e7086 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -579,7 +579,8 @@ namespace BBWYB.Server.Business #region 合并分组/采购商/配件 var currentTaskSkuIdList = task.SkuOptimizationTaskList.Select(st => st.SkuId).ToList(); - var currentPurchaseSchemeList = purchaseSchemeList.Where(p => currentTaskSkuIdList.Contains(p.SkuId)).ToList(); + var currentPurchaseSchemeList = purchaseSchemeList.Where(p => currentTaskSkuIdList.Contains(p.SkuId) && + p.BelongBargainTeamId == uInfo.department.Id).ToList(); #endregion } From d67339947dbb14cfd91d4c8d3784671e692360f7 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Mon, 11 Mar 2024 03:01:24 +0800 Subject: [PATCH 170/222] =?UTF-8?q?=E8=AF=84=E9=80=89=E4=B8=AD=E6=A0=87?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/SkuOptimizationController.cs | 17 +- ...ionBusiness.cs => OptimizationBusiness.cs} | 149 +++++++++++++++--- BBWYB.Server.Business/TaskSchedulerManager.cs | 3 + .../TimeLimitTask/TimeLimitTaskBusiness.cs | 44 +++++- .../Spuoptimizationcompetitivetendertask.cs | 13 +- ...UpdateCompetitiveTenderQuotationRequest.cs | 5 + .../MergePurchaseSchemeGroupResponse.cs | 5 + .../MergePurchaseSchemeProductSkuResponse.cs | 2 +- .../Optimization/MergePurchaserResponse.cs | 6 +- BBWYB.Server.Model/MappingProfiles.cs | 5 +- 10 files changed, 204 insertions(+), 45 deletions(-) rename BBWYB.Server.Business/SkuOptimization/{SkuOptimizationBusiness.cs => OptimizationBusiness.cs} (80%) diff --git a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs index a480db1..541e056 100644 --- a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs +++ b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs @@ -1,5 +1,4 @@ -using BBWYB.Common.Models; -using BBWYB.Server.Business; +using BBWYB.Server.Business; using BBWYB.Server.Model.Dto; using Microsoft.AspNetCore.Mvc; @@ -8,11 +7,11 @@ namespace BBWYB.Server.API.Controllers public class SkuOptimizationController : BaseApiController { - private SkuOptimizationBusiness skuOptimizationBusiness; + private OptimizationBusiness optimizationBusiness; - public SkuOptimizationController(IHttpContextAccessor httpContextAccessor, SkuOptimizationBusiness skuOptimizationBusiness) : base(httpContextAccessor) + public SkuOptimizationController(IHttpContextAccessor httpContextAccessor, OptimizationBusiness optimizationBusiness) : base(httpContextAccessor) { - this.skuOptimizationBusiness = skuOptimizationBusiness; + this.optimizationBusiness = optimizationBusiness; } /// @@ -22,7 +21,7 @@ namespace BBWYB.Server.API.Controllers [HttpPost] public void LKInventoryAlertNotification([FromBody] BatchLKInventoryAlertRequest request) { - skuOptimizationBusiness.LKInventoryAlertNotification(request); + optimizationBusiness.LKInventoryAlertNotification(request); } /// @@ -33,7 +32,7 @@ namespace BBWYB.Server.API.Controllers public void CompleteOptimization([FromRoute] long taskId) { var userId = GetUserId(); - skuOptimizationBusiness.CompleteOptimization(taskId, userId); + optimizationBusiness.CompleteOptimization(taskId, userId); } /// @@ -42,10 +41,10 @@ namespace BBWYB.Server.API.Controllers /// /// [HttpPost] - public ListResponse GetNoCompletionSkuOptimizationTask([FromBody] PageRequest request) + public ListResponse GetNoCompletionSkuOptimizationTask([FromBody] QueryNoCompletionOptimizationTaskRequest request) { var userId = GetUserId(); - return skuOptimizationBusiness.GetNoCompletionSkuOptimizationTask(request, userId); + return optimizationBusiness.GetNoCompletionSkuOptimizationTask(request, userId); } } } diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs similarity index 80% rename from BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs rename to BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 46e7086..5d3b92e 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -7,8 +7,7 @@ using BBWYB.Server.Model.Db.BBWY; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json; -using Org.BouncyCastle.Tls.Crypto; -using System.Linq; +using System.Numerics; using Yitter.IdGenerator; namespace BBWYB.Server.Business @@ -414,8 +413,8 @@ namespace BBWYB.Server.Business throw new BusinessException("待优化任务已完成"); var spuOptimizationBargainTeamTaskList = fsql.Select() - .Where(sbt => sbt.SpuOptimizationTaskId == taskId && sbt.BelongTeamId == uInfo.department.Id) - .ToList(); + .Where(sbt => sbt.SpuOptimizationTaskId == taskId) + .ToList(); var currentspuOptimizationBargainTeamTask = spuOptimizationBargainTeamTaskList.FirstOrDefault(sc => sc.BelongTeamId == uInfo.department.Id); if (currentspuOptimizationBargainTeamTask == null) throw new BusinessException($"未找到议价组{uInfo.department.DepartmentName}的议价子任务"); @@ -426,35 +425,43 @@ namespace BBWYB.Server.Business .Where(s => s.SpuOptimizationTaskId == taskId) .ToList(s => s.SkuId); - //查询该议价组的竞标任务 - var competitiveTenderTaskList = fsql.Select() - .Where(ct => ct.BargainTeamId == uInfo.user.DepartmentId && - ct.SpuOptimizationTaskId == taskId) - .ToList(); - var competitiveTenderSchemeIdList = competitiveTenderTaskList.Select(ct => ct.SchemeId.Value).ToList(); + //查询全部竞标任务 + var allBargainTeamCompetitiveTenderTaskList = fsql.Select() + .Where(ct => ct.SpuOptimizationTaskId == taskId) + .ToList(); + + //查询当前议价组的竞标任务 + var currentBargainTeamCompetitiveTenderTaskList = allBargainTeamCompetitiveTenderTaskList.Where(ct => ct.BargainTeamId == uInfo.department.Id).ToList(); + if (currentBargainTeamCompetitiveTenderTaskList.Count() == 0) + throw new BusinessException($"议价组{uInfo.department.DepartmentName}没有参与竞标的采购方案,不能完成优化任务"); + var currentBargainTeamCompetitiveTenderSchemeIdList = currentBargainTeamCompetitiveTenderTaskList.Select(ct => ct.SchemeId).ToList(); + + #region 验证该议价组的符合sku条件的采购方案是否都参与投标 + var waitCheckPurchaseSchemeIdList = fsql.Select() + .Where(ps => ps.BelongBargainTeamId == uInfo.user.DepartmentId && + skuIdList.Contains(ps.SkuId)) + .ToList(ps => ps.Id); - //验证该议价组的符合sku条件的采购方案是否都参与投标 - var purchaseSchemeIdList = fsql.Select().Where(ps => ps.BelongBargainTeamId == uInfo.user.DepartmentId && - skuIdList.Contains(ps.SkuId)) - .ToList(ps => ps.Id); - if (purchaseSchemeIdList.Count() == 0) + if (waitCheckPurchaseSchemeIdList.Count() == 0) throw new BusinessException($"议价组{uInfo.department.DepartmentName}没有参与竞标的采购方案,不能完成优化任务"); - var noJoinCompetitiveTenderSchemeIdList = purchaseSchemeIdList.Except(competitiveTenderSchemeIdList); + var noJoinCompetitiveTenderSchemeIdList = waitCheckPurchaseSchemeIdList.Except(currentBargainTeamCompetitiveTenderSchemeIdList); if (noJoinCompetitiveTenderSchemeIdList.Count() > 0) throw new BusinessException($"议价组{uInfo.department.DepartmentName}存在{noJoinCompetitiveTenderSchemeIdList.Count()}个符合条件但未参与竞标的采购方案"); + #endregion - //验证该议价组参与投标的采购方案是否都完成报价 - if (competitiveTenderTaskList.Any(ct => ct.IsUpdateQuotedPrice == false)) + #region 验证该议价组参与投标的采购方案是否都完成报价 + if (currentBargainTeamCompetitiveTenderTaskList.Any(ct => ct.IsUpdateQuotedPrice == false)) throw new BusinessException($"议价组{uInfo.department.DepartmentName}存在未更新报价的投标"); + #endregion currentspuOptimizationBargainTeamTask.IsOptimizationCompleted = true; #endregion - IUpdate updateBargainTask = null; IUpdate updateSpuTask = null; IUpdate updateSpuSaleInfo = null; IUpdate updateTimeLimitTask = null; + IUpdate updateCompetitiveTenderTask = null; if (!spuOptimizationBargainTeamTaskList.Any(sc => sc.IsOptimizationCompleted == false)) { @@ -491,12 +498,26 @@ namespace BBWYB.Server.Business t.CompletionTime == null && t.TaskType == Enums.TimeLimitTaskType.待议价任务); #endregion + + #region 评选中标结果 + var allBargainTeamCompetitiveTenderSchemeIdList = allBargainTeamCompetitiveTenderTaskList.Select(ct => ct.SchemeId).ToList(); + var allBargainTeamPurchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest() + { + BargainTeamIdList = new List() { uInfo.user.DepartmentId }, + SkuIdList = skuIdList, + IncludePurchaseSkuBasicInfo = 0 + }); + var victoryCompetitiveTenderTaskList = VictoryPlanSelection(allBargainTeamCompetitiveTenderTaskList, allBargainTeamPurchaseSchemeList); + var victoryCompetitiveTenderTaskIdList = victoryCompetitiveTenderTaskList.Select(ct => ct.Id).ToList(); + updateCompetitiveTenderTask = fsql.Update(victoryCompetitiveTenderTaskIdList) + .Set(ct => ct.IsWin, true); + #endregion } #region 更新待优化议价组任务 updateBargainTask = fsql.Update(currentspuOptimizationBargainTeamTask.Id) - .Set(sc => sc.IsOptimizationCompleted, true) - .Set(sc => sc.CompletionTime, DateTime.Now); + .Set(sc => sc.IsOptimizationCompleted, true) + .Set(sc => sc.CompletionTime, DateTime.Now); #endregion fsql.Transaction(() => @@ -505,9 +526,17 @@ namespace BBWYB.Server.Business updateBargainTask?.ExecuteAffrows(); updateSpuSaleInfo?.ExecuteAffrows(); updateTimeLimitTask?.ExecuteAffrows(); + updateCompetitiveTenderTask?.ExecuteAffrows(); }); } + /// + /// 查询待优化任务 + /// + /// + /// + /// + /// public ListResponse GetNoCompletionSkuOptimizationTask(QueryNoCompletionOptimizationTaskRequest request, string userId) { request.EndTime = request.EndTime.Date; @@ -568,6 +597,11 @@ namespace BBWYB.Server.Business }); #endregion + #region 获取采购方案分组 + var purchaseSchemeGroupIdList = purchaseSchemeList.Select(ps => ps.SchemeGroupId).Distinct().ToList(); + var purchaseSchemeGroupList = fsql.Select(purchaseSchemeGroupIdList).ToList(); + #endregion + foreach (var task in taskList) { task.BargainTeamTaskList = bargainTeamTaskList.Where(sbt => sbt.SpuOptimizationTaskId == task.Id).ToList(); @@ -579,8 +613,47 @@ namespace BBWYB.Server.Business #region 合并分组/采购商/配件 var currentTaskSkuIdList = task.SkuOptimizationTaskList.Select(st => st.SkuId).ToList(); - var currentPurchaseSchemeList = purchaseSchemeList.Where(p => currentTaskSkuIdList.Contains(p.SkuId) && - p.BelongBargainTeamId == uInfo.department.Id).ToList(); + var currentPurchaseSchemeGroups = purchaseSchemeList.Where(p => currentTaskSkuIdList.Contains(p.SkuId) && + p.BelongBargainTeamId == uInfo.department.Id) + .GroupBy(p => p.SchemeGroupId) + .ToList(); + task.MergePurchaseScemeGroupList = new List(); + foreach (var schemeGroup in currentPurchaseSchemeGroups) + { + var mergeSchemeGroup = new MergePurchaseSchemeGroupResponse() + { + Id = schemeGroup.Key, + GroupName = purchaseSchemeGroupList.FirstOrDefault(g => g.Id == schemeGroup.Key)?.GroupName + }; + task.MergePurchaseScemeGroupList.Add(mergeSchemeGroup); + + var schemeList = schemeGroup.ToList(); + + foreach (var scheme in schemeList) + { + foreach (var psp in scheme.PurchaseSchemeProductList) + { + var mergePurchaser = mergeSchemeGroup.PurchaserList.FirstOrDefault(p => p.Id == psp.PurchaserId); + if (mergePurchaser == null) + { + mergePurchaser = scheme.PurchaserList.FirstOrDefault(p => p.Id == psp.PurchaserId)?.Map(); + if (mergePurchaser == null) + throw new BusinessException($"匹配采购商异常 schemeId {scheme.Id} pspProductId {psp.ProductId}"); + mergeSchemeGroup.PurchaserList.Add(mergePurchaser); + } + foreach (var pss in psp.PurchaseSchemeProductSkuList) + { + var mergePss = mergePurchaser.MergePurchaseSchemeProductSkuList.FirstOrDefault(mpss => mpss.PurchaseSkuId == pss.PurchaseSkuId); + if (mergePss == null) + { + mergePss = pss.Map(); + mergePss.PurchaserId = mergePurchaser.Id; + mergePurchaser.MergePurchaseSchemeProductSkuList.Add(mergePss); + } + } + } + } + } #endregion } @@ -590,5 +663,35 @@ namespace BBWYB.Server.Business TotalCount = total }; } + + /// + /// 评选结果 + /// + /// + /// + /// + private IList VictoryPlanSelection(IList competitiveTenderTaskList, + IList purchaseSchemeList) + { + var victoryList = new List(); + var psGroups = purchaseSchemeList.GroupBy(ps => ps.SkuId); + foreach (var psGroup in psGroups) + { + var psListOrderByCostDescList = psGroup.OrderByDescending(ps => ps.BargainingCost ?? ps.DefaultCost).ToList(); + var minCostScheme = psListOrderByCostDescList.FirstOrDefault(); + var competitiveTenderTask = competitiveTenderTaskList.FirstOrDefault(ct => ct.SchemeId == minCostScheme.Id); + victoryList.Add(competitiveTenderTask); + } + return victoryList; + } + + /// + /// 限时任务超时回调 + /// + /// + public void TimeLimitTaskTimeOutCallBack(long taskId) + { + + } } } diff --git a/BBWYB.Server.Business/TaskSchedulerManager.cs b/BBWYB.Server.Business/TaskSchedulerManager.cs index fa58a83..5fb7f43 100644 --- a/BBWYB.Server.Business/TaskSchedulerManager.cs +++ b/BBWYB.Server.Business/TaskSchedulerManager.cs @@ -11,12 +11,15 @@ namespace BBWYB.Server.Business public LimitedConcurrencyLevelTaskScheduler AggregationPurchaserTaskScheduler { get; private set; } + public LimitedConcurrencyLevelTaskScheduler OptimizationTaskScheduler { get; private set; } + public TaskSchedulerManager() { SyncOrderTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); PurchaseOrderCallbackTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); SyncProductTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); AggregationPurchaserTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(1); + OptimizationTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(3); } } } diff --git a/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs b/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs index 783ee79..bf98724 100644 --- a/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs +++ b/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs @@ -3,19 +3,32 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; +using Microsoft.Extensions.DependencyInjection; using Yitter.IdGenerator; namespace BBWYB.Server.Business { public class TimeLimitTaskBusiness : BaseBusiness, IDenpendency { - private VenderBusiness venderBusiness; + private List hgzTaskTypeList; private TimeLimitRules timeLimitRules; + private IServiceProvider serviceProvider; + + private Lazy optimizationBusinessLazy; + private Lazy venderBusinessLazy; + private Lazy taskSchedulerManagerLazy; + private OptimizationBusiness optimizationBusiness => optimizationBusinessLazy.Value; + private VenderBusiness venderBusiness => venderBusinessLazy.Value; + private TaskSchedulerManager taskSchedulerManager => taskSchedulerManagerLazy.Value; - public TimeLimitTaskBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, VenderBusiness venderBusiness, TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator) + public TimeLimitTaskBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, VenderBusiness venderBusiness, TimeLimitRules timeLimitRules, IServiceProvider serviceProvider) : base(fsql, nLogManager, idGenerator) { - this.venderBusiness = venderBusiness; + this.serviceProvider = serviceProvider; + this.optimizationBusinessLazy = new Lazy(() => serviceProvider.GetRequiredService()); + this.venderBusinessLazy = new Lazy(() => serviceProvider.GetRequiredService()); + this.taskSchedulerManagerLazy = new Lazy(() => serviceProvider.GetRequiredService()); + hgzTaskTypeList = new List() { Enums.TimeLimitTaskType.合格证拟定任务, @@ -25,10 +38,27 @@ namespace BBWYB.Server.Business } public void CheckTask() { - fsql.Update().Set(t => t.IsTimely, false) - .Where(t => t.CompletionTime == null) - .Where(t => t.ExpirationTime < DateTime.Now) - .ExecuteAffrows(); + //fsql.Update().Set(t => t.IsTimely, false) + // .Where(t => t.CompletionTime == null) + // .Where(t => t.ExpirationTime < DateTime.Now) + // .ExecuteAffrows(); + + var timeoutTaskList = fsql.Select().Where(t => t.CompletionTime == null && t.ExpirationTime < DateTime.Now).ToList(); + if (timeoutTaskList.Count() > 0) + { + var timeoutTaskIdList = timeoutTaskList.Select(t => t.Id).ToList(); + fsql.Update(timeoutTaskIdList).Set(t => t.IsTimely, false).ExecuteAffrows(); + } + + var optimizationTaskList = timeoutTaskList.Where(t => t.TaskType == Enums.TimeLimitTaskType.待议价任务).ToList(); + if (optimizationTaskList.Count() > 0) + { + //待议价任务超时检查 + foreach (var task in optimizationTaskList) + { + Task.Factory.StartNew(() => optimizationBusiness.TimeLimitTaskTimeOutCallBack(task.TaskId), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.OptimizationTaskScheduler); + } + } } /// diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs index 30188a5..de47914 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs @@ -40,7 +40,7 @@ namespace BBWYB.Server.Model.Db /// 采购方案Id /// [Column(DbType = "bigint")] - public long? SchemeId { get; set; } + public long SchemeId { get; set; } [Column(StringLength = 50)] public string SkuId { get; set; } @@ -57,6 +57,17 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "bigint")] public long SpuOptimizationTaskId { get; set; } + /// + /// 是否中标 + /// + [Column(DbType = "bit")] + public bool IsWin { get; set; } = false; + + /// + /// 运费 + /// + public decimal? Freight { get; set; } = 0.00M; + } } diff --git a/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs b/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs index 60a0a3a..c0df1a2 100644 --- a/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs @@ -16,6 +16,11 @@ /// 配件列表 /// public IList ItemList { get; set; } + + /// + /// 运费 + /// + public decimal Freight { get; set; } } public class BatchUpdateCompetitiveTenderQuotationItemRequest diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeGroupResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeGroupResponse.cs index 1000dd1..88a6cd9 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeGroupResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeGroupResponse.cs @@ -2,6 +2,11 @@ { public class MergePurchaseSchemeGroupResponse { + public MergePurchaseSchemeGroupResponse() + { + PurchaserList = new List(); + } + /// /// 分组Id /// diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs index 0b53696..3b1cc28 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs @@ -3,7 +3,7 @@ /// /// 合并配件信息 /// - public class MergePurchaseSchemeProductSkuResponse : PurchaseSchemeProductSkuResponse + public class MergePurchaseSchemeProductSkuResponse { /// /// 采购商Id diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs index bc4eefc..6fc4310 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs @@ -4,6 +4,10 @@ namespace BBWYB.Server.Model.Dto { public class MergePurchaserResponse : Purchaser { - public List PurchaseSchemeProductSkuList { get; set; } + public MergePurchaserResponse() + { + MergePurchaseSchemeProductSkuList = new List(); + } + public List MergePurchaseSchemeProductSkuList { get; set; } } } diff --git a/BBWYB.Server.Model/MappingProfiles.cs b/BBWYB.Server.Model/MappingProfiles.cs index 2a35bf9..bacd4b0 100644 --- a/BBWYB.Server.Model/MappingProfiles.cs +++ b/BBWYB.Server.Model/MappingProfiles.cs @@ -62,9 +62,8 @@ namespace BBWYB.Server.Model CreateMap(); - - - + CreateMap(); + CreateMap(); } } } From 351bee6f8937acb62707bea9945b48958305437c Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 12 Mar 2024 00:47:43 +0800 Subject: [PATCH 171/222] =?UTF-8?q?=E9=99=90=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E8=B6=85=E6=97=B6=E5=9B=9E=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimization/OptimizationBusiness.cs | 82 ++++++++++++++++++- 1 file changed, 80 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 5d3b92e..e4778a2 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -503,8 +503,7 @@ namespace BBWYB.Server.Business var allBargainTeamCompetitiveTenderSchemeIdList = allBargainTeamCompetitiveTenderTaskList.Select(ct => ct.SchemeId).ToList(); var allBargainTeamPurchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest() { - BargainTeamIdList = new List() { uInfo.user.DepartmentId }, - SkuIdList = skuIdList, + SchemeIdList = allBargainTeamCompetitiveTenderSchemeIdList, IncludePurchaseSkuBasicInfo = 0 }); var victoryCompetitiveTenderTaskList = VictoryPlanSelection(allBargainTeamCompetitiveTenderTaskList, allBargainTeamPurchaseSchemeList); @@ -691,7 +690,86 @@ namespace BBWYB.Server.Business /// public void TimeLimitTaskTimeOutCallBack(long taskId) { + try + { + var spuOptimizationTask = fsql.Select(taskId).ToOne(); + if (spuOptimizationTask == null) + throw new BusinessException($"待优化任务{taskId}不存在"); + if (spuOptimizationTask.IsOptimizationCompleted == true) + throw new BusinessException("待优化任务已完成"); + + IUpdate updateSpuTask = null; + IUpdate updateSpuSaleInfo = null; + IUpdate updateCompetitiveTenderTask = null; + + var spuOptimizationBargainTeamTaskList = fsql.Select() + .Where(sbt => sbt.SpuOptimizationTaskId == taskId) + .ToList(); + + if (spuOptimizationBargainTeamTaskList.Any(sc => sc.IsOptimizationCompleted == true)) + { + //任意一个议价组完成任务,该优化任务视为完成 + + var compleptionBargainTeamIdList = spuOptimizationBargainTeamTaskList.Where(sbt => sbt.IsOptimizationCompleted == true) + .Select(sbt => sbt.BelongTeamId) + .Distinct() + .ToList(); + + //已完成议价任务的竞标任务 + var compleptionBargainTeamCompetitiveTenderTaskList = fsql.Select() + .Where(ct => ct.SpuOptimizationTaskId == taskId && + compleptionBargainTeamIdList.Contains(ct.BargainTeamId)) + .ToList(); + + #region 更新spu销量表 + var spuSaleInfo = fsql.Select(spuOptimizationTask.ProductId).ToOne(); + if (spuSaleInfo == null) + + throw new BusinessException($"未找到spu{spuOptimizationTask.ProductId}销量"); + + updateSpuSaleInfo = fsql.Update(spuOptimizationTask.ProductId) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == false, s => s.IsFirstPurchaseCompleted, true) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == false, s => s.FirstPurchaseCompletedItemCount == s.ItemCount) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == true && + spuSaleInfo.IsFirstOptimizationCompleted == false, s => s.IsFirstOptimizationCompleted, true) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == true && + spuSaleInfo.IsFirstOptimizationCompleted == false, s => s.FirstOptimizationCompletedItemCount == s.ItemCount) + .Set(s => s.LastOptimizationItemCount == s.ItemCount) + .Set(s => s.LastOptimizationTime, DateTime.Now) + .Set(s => s.UpdateTime, DateTime.Now); + #endregion + + #region 更新待优化任务 + updateSpuTask = fsql.Update(spuOptimizationTask.Id) + .Set(t => t.IsOptimizationCompleted, true) + .Set(t => t.CompletionTime, DateTime.Now); + #endregion + + #region 评选竞标结果 + var compleptionBargainTeamPurchaseSchemeIdList = compleptionBargainTeamCompetitiveTenderTaskList.Select(ct => ct.SchemeId).ToList(); + var compleptionBargainTeamPurchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest() + { + SchemeIdList = compleptionBargainTeamPurchaseSchemeIdList, + IncludePurchaseSkuBasicInfo = 0 + }); + var victoryCompetitiveTenderTaskList = VictoryPlanSelection(compleptionBargainTeamCompetitiveTenderTaskList, compleptionBargainTeamPurchaseSchemeList); + var victoryCompetitiveTenderTaskIdList = victoryCompetitiveTenderTaskList.Select(ct => ct.Id).ToList(); + updateCompetitiveTenderTask = fsql.Update(victoryCompetitiveTenderTaskIdList) + .Set(ct => ct.IsWin, true); + #endregion + } + fsql.Transaction(() => + { + updateSpuTask?.ExecuteAffrows(); + updateSpuSaleInfo?.ExecuteAffrows(); + updateCompetitiveTenderTask?.ExecuteAffrows(); + }); + } + catch (Exception ex) + { + nLogManager.Default().Error(ex, "限时任务超时回调失败"); + } } } } From d632285bba3c6602744e4bf6f04e84df1c42b185 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Tue, 12 Mar 2024 02:24:59 +0800 Subject: [PATCH 172/222] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E9=87=87=E8=B4=AD?= =?UTF-8?q?=EF=BC=8C=E6=94=B9=E4=BB=B7=E4=BF=9D=E5=AD=98=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=8D=95=E9=87=91=E9=A2=9D/=E4=BB=B6=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 107 +++++------------- .../Db/Order/OrderPurchaseInfo.cs | 3 + .../Db/Order/OrderPurchaseSkuInfo.cs | 17 +++ .../PurchaseSchemeProductSkuStatistic.cs | 45 ++++++++ 4 files changed, 96 insertions(+), 76 deletions(-) create mode 100644 BBWYB.Server.Model/Db/PurchaseScheme/PurchaseSchemeProductSkuStatistic.cs diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index a896ded..1c36622 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -457,7 +457,8 @@ namespace BBWYB.Server.Business ShopId = request.ShopId, BelongSkuIds = string.Join(",", belongSkuIdList), IsEnabled = true, - Remark = !string.IsNullOrEmpty(cargoParamGroup.Remark) ? cargoParamGroup.Remark : request.Remark + Remark = !string.IsNullOrEmpty(cargoParamGroup.Remark) ? cargoParamGroup.Remark : request.Remark, + UpadteTime = DateTime.Now }; insertOrderPurchaseInfos.Add(orderPurchaserInfo); #endregion @@ -473,7 +474,10 @@ namespace BBWYB.Server.Business PurchaseOrderId = purchaseOrderSimpleInfo.OrderId, PurchaseProductId = purchaseOrderSku.ProductId, PurchaseSkuId = purchaseOrderSku.SkuId, - ShopId = request.ShopId + ShopId = request.ShopId, + PurchasedPrice = purchaseOrderSku.Price, + PurchasedAmount = purchaseOrderSku.ProductAmount, + PurchasedItemCount = purchaseOrderSku.Quantity }; insertOrderPurchaseSkuInfos.Add(orderPurchaseSkuInfo); } @@ -1112,7 +1116,8 @@ namespace BBWYB.Server.Business PurchasePlatform = purchaseOrder.PurchasePlatform, PurchaserId = purchaseOrder.PurchaserId, PurchaserName = purchaseOrder.PurchaserName, - ShopId = request.ShopId + ShopId = request.ShopId, + UpadteTime = DateTime.Now }; insertOrderPurchaseInfoList.Add(dbPurchaserOrder); #endregion @@ -2995,7 +3000,8 @@ namespace BBWYB.Server.Business IList op_EditPriceSkuRequests = new List(); - IUpdate updatePurchaseOrder = null; + IUpdate updatePurchaseOrder = fsql.Update(orderPurchaseInfo.Id).Set(opi => opi.UpdateTime, DateTime.Now); + List> updatePurchaserOrderSkuList = new List>(); IDictionary oskuPriceEditParamDictionary = new Dictionary(); @@ -3007,7 +3013,6 @@ namespace BBWYB.Server.Business { if (opi.PurchasePlatform != Enums.Platform.阿里巴巴) continue; - var purchaseOrderSimpleInfo = ppclient.QueryOrderDetail(new PP_QueryOrderDetailRequest() { AppKey = purchaseAccount.AppKey, @@ -3016,6 +3021,21 @@ namespace BBWYB.Server.Business OrderId = opi.PurchaseOrderId }); + #region 更新配件下单信息 + if (opi.PurchaseOrderId == purchaseOrderId) + { + foreach (var item in purchaseOrderSimpleInfo.ItemList) + { + var update = fsql.Update().Set(opsi => opsi.PurchasedPrice, item.Price) + .Set(opsi => opsi.PurchasedAmount, item.ProductAmount) + .Set(opsi => opsi.PurchasedItemCount, item.Quantity) + .Where(opsi => opsi.PurchaseOrderId == purchaseOrderId && + opsi.PurchaseSkuId == item.SkuId); + updatePurchaserOrderSkuList.Add(update); + } + } + #endregion + totalPurchaseProductAmount += purchaseOrderSimpleInfo.ProductAmount; totalPurchaseFreight += purchaseOrderSimpleInfo.FreightAmount; var currentPurchaseOrderRelationInfos = dbOrderPurchaseRelationInfos.Where(x => x.PurchaseOrderId == opi.PurchaseOrderId).ToList(); @@ -3065,71 +3085,6 @@ namespace BBWYB.Server.Business } #endregion - - //var purchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Sum(x => x.Quantity); - //var belongSkuGroups = currentPurchaseOrderRelationInfos.GroupBy(p => p.BelongSkuId); - //foreach (var belongSkuGroup in belongSkuGroups) - //{ - // var belongSkuId = belongSkuGroup.Key; - - // var currentOrderSkuCargoParamList = belongSkuGroup.ToList(); //找当前skuId的采购skuId - // var currentOrderSkuProductAmount = 0M; //采购成本 - // var currentSkuTotalPurchaseQuantity = currentOrderSkuCargoParamList.Sum(x => x.Quantity); //当前skuId的采购数量总和 - // var currentPurchaseFreight = purchaseOrderSimpleInfo.FreightAmount * - // (1.0M * currentSkuTotalPurchaseQuantity / purchaseSkuTotalQuantity); //采购运费 - - // foreach (var currentOrderSkuCargo in currentOrderSkuCargoParamList) - // { - // var currentPurchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId) - // .Sum(p => p.ProductAmount); - // var currentPurchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId) - // .Sum(p => p.Quantity); - // currentOrderSkuProductAmount += currentPurchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity.Value / currentPurchaseSkuTotalQuantity); - // } - - // #region 订单sku平价 - // var orderSku = dbOrderSkus.FirstOrDefault(osku => osku.SkuId == belongSkuId); - // if (isEditOrderPrice) - // { - // if (!oskuPriceEditParamDictionary.TryGetValue(orderSku.SkuId, out OP_EditPriceSkuRequest editSkuPrice)) - // { - // editSkuPrice = new OP_EditPriceSkuRequest() - // { - // SkuId = orderSku.SkuId, - // OrderSkuId = orderSku.Id.ToString(), - // InPackAmountPrice = orderSku.InPackAmount ?? 0M - // }; - // oskuPriceEditParamDictionary.Add(orderSku.SkuId, editSkuPrice); - // } - // editSkuPrice.Price += currentOrderSkuProductAmount / (orderSku.ItemTotal ?? 1M); - // editSkuPrice.Freight += currentPurchaseFreight ?? 0M; - - // //orderSku.Price = - // //orderSku.BuyerPayFreight = currentPurchaseFreight; - // //if (!op_EditPriceSkuRequests.Any(x => x.SkuId == orderSku.SkuId)) - // //{ - // // op_EditPriceSkuRequests.Add(new OP_EditPriceSkuRequest() - // // { - // // Freight = currentPurchaseFreight ?? 0M, - // // InPackAmountPrice = orderSku.InPackAmount ?? 0M, - // // OrderSkuId = orderSku.Id.ToString(), - // // Price = orderSku.Price ?? 0M, - // // SkuId = orderSku.SkuId - // // }); - // // updateOrderSkuList.Add(fsql.Update(orderSku.Id).Set(osku => osku.Price, orderSku.Price) - // // .Set(osku => osku.BuyerPayFreight, orderSku.BuyerPayFreight)); - // //} - - // } - // #endregion - - // var dbOrderSkuDetail = dbOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == belongSkuId && ocd.PurchaseOrderId == opi.PurchaseOrderId); - // dbOrderSkuDetail.CalculationOrderCostDetailCostAndProfit(currentOrderSkuProductAmount, - // currentPurchaseFreight ?? 0M, - // dbOrderSkuDetail.OutPackAmount ?? 0M, - // dbOrderSkuDetail.DeliveryExpressFreight ?? 0M); - // updateOrderCostDetailList.Add(fsql.Update().SetSource(dbOrderSkuDetail)); - //} } if (isEditOrderPrice) @@ -3156,7 +3111,7 @@ namespace BBWYB.Server.Business .Set(o => o.OrderSellerPrice, dbOrder.OrderSellerPrice) .Set(o => o.FreightPrice, dbOrder.FreightPrice); - updatePurchaseOrder = fsql.Update(orderPurchaseInfo.Id).Set(opi => opi.IsAutoEditOrderPrice, Enums.AutoEditOrderPriceType.已平价); + updatePurchaseOrder = updatePurchaseOrder.Set(opi => opi.IsAutoEditOrderPrice, Enums.AutoEditOrderPriceType.已平价); #endregion } @@ -3187,17 +3142,17 @@ namespace BBWYB.Server.Business #region 订单成本 dbOrderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value, dbOrderSkuCostList.Union(insertOrderSkuCostList).ToList()); - //dbOrderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice ?? 0M, - // totalPurchaseProductAmount, - // totalPurchaseFreight, - // dbOrderCostDetails.Sum(ocd => ocd.OutPackAmount ?? 0M), - // dbOrderCostDetails.Sum(ocd => ocd.DeliveryExpressFreight ?? 0M)); updateOrderCost = fsql.Update().SetSource(dbOrderCost); #endregion fsql.Transaction(() => { updatePurchaseOrder?.ExecuteAffrows(); + if (updatePurchaserOrderSkuList.Count() > 0) + { + foreach (var update in updatePurchaserOrderSkuList) + update.ExecuteAffrows(); + } foreach (var update in updateOrderCostDetailList) update.ExecuteAffrows(); updateOrderCost?.ExecuteAffrows(); diff --git a/BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs b/BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs index 112db0e..06ea9d7 100644 --- a/BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs +++ b/BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs @@ -15,6 +15,9 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "datetime")] public DateTime? CreateTime { get; set; } + [Column(DbType = "datetime")] + public DateTime? UpdateTime { get; set; } + /// /// ɹ˺Id /// diff --git a/BBWYB.Server.Model/Db/Order/OrderPurchaseSkuInfo.cs b/BBWYB.Server.Model/Db/Order/OrderPurchaseSkuInfo.cs index f95cf3d..ba15473 100644 --- a/BBWYB.Server.Model/Db/Order/OrderPurchaseSkuInfo.cs +++ b/BBWYB.Server.Model/Db/Order/OrderPurchaseSkuInfo.cs @@ -62,6 +62,23 @@ namespace BBWYB.Server.Model.Db /// [Column(StringLength = 100)] public string WaybillNo { get; set; } + + /// + /// 采购数量 + /// + public int PurchasedItemCount { get; set; } = 1; + + /// + /// 采购金额 + /// + [Column(DbType = "decimal(18,2)")] + public decimal PurchasedAmount { get; set; } = 0.00M; + + /// + /// 采购单价 + /// + [Column(DbType = "decimal(18,2)")] + public decimal PurchasedPrice { get; set; } = 0.00M; } } diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseSchemeProductSkuStatistic.cs b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseSchemeProductSkuStatistic.cs new file mode 100644 index 0000000..95b1336 --- /dev/null +++ b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseSchemeProductSkuStatistic.cs @@ -0,0 +1,45 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + [Table(Name = "purchaseschemeproductskustatistic", DisableSyncStructure = true)] + public partial class PurchaseSchemeProductSkuStatistic + { + + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string PurchaseSkuId { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 最近采购单价 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? LastPurchasedPrice { get; set; } = 0.00M; + + /// + /// 最近采购时间 + /// + [Column(DbType = "datetime")] + public DateTime? LastPurchasedTime { get; set; } + + /// + /// 采购金额 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? PurchasedAmount { get; set; } + + /// + /// 采购件数 + /// + [Column(DbType = "int")] + public int? PurchasedItemCount { get; set; } = 0; + + [Column(StringLength = 50)] + public string PurchaseSkuSpecId { get; set; } + + } + +} From 8ef1bbe17d334ca747f4c412ca27b4974c1030be Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 12 Mar 2024 18:37:06 +0800 Subject: [PATCH 173/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E9=85=8D=E4=BB=B6?= =?UTF-8?q?=E8=81=9A=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AggregationPurchaseSchemeController.cs | 33 ++++ .../AggregionPurchaseSchemeBusiness.cs | 147 ++++++++++++++++++ .../PurchaseOrder/PurchaseOrderBusiness.cs | 4 +- .../PurchaseSchemeProductSkuStatistic.cs | 3 - 4 files changed, 182 insertions(+), 5 deletions(-) create mode 100644 BBWYB.Server.API/Controllers/AggregationPurchaseSchemeController.cs create mode 100644 BBWYB.Server.Business/Aggregion/AggregionPurchaseSchemeBusiness.cs diff --git a/BBWYB.Server.API/Controllers/AggregationPurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/AggregationPurchaseSchemeController.cs new file mode 100644 index 0000000..65f49e5 --- /dev/null +++ b/BBWYB.Server.API/Controllers/AggregationPurchaseSchemeController.cs @@ -0,0 +1,33 @@ +using BBWYB.Server.Business; +using Microsoft.AspNetCore.Mvc; + +namespace BBWYB.Server.API.Controllers +{ + + public class AggregationPurchaseSchemeController : BaseApiController + { + private AggregionPurchaseSchemeBusiness aggregionPurchaseSchemeBusiness; + public AggregationPurchaseSchemeController(IHttpContextAccessor httpContextAccessor, AggregionPurchaseSchemeBusiness aggregionPurchaseSchemeBusiness) : base(httpContextAccessor) + { + this.aggregionPurchaseSchemeBusiness = aggregionPurchaseSchemeBusiness; + } + + [HttpPost] + public void AutoAggregion() + { + aggregionPurchaseSchemeBusiness.AutoAggregion(); + } + + [HttpPost] + public void AggregionBySchemeIdList([FromBody]IList schemeIdList) + { + aggregionPurchaseSchemeBusiness.AggregionBySchemeIdList(schemeIdList); + } + + [HttpPost] + public void AggregionAllScheme() + { + aggregionPurchaseSchemeBusiness.AggregionAllScheme(); + } + } +} diff --git a/BBWYB.Server.Business/Aggregion/AggregionPurchaseSchemeBusiness.cs b/BBWYB.Server.Business/Aggregion/AggregionPurchaseSchemeBusiness.cs new file mode 100644 index 0000000..1ced1ad --- /dev/null +++ b/BBWYB.Server.Business/Aggregion/AggregionPurchaseSchemeBusiness.cs @@ -0,0 +1,147 @@ +using BBWYB.Common.Log; +using BBWYB.Common.Models; +using BBWYB.Server.Model; +using BBWYB.Server.Model.Db; +using FreeSql; +using Yitter.IdGenerator; + +namespace BBWYB.Server.Business +{ + public class AggregionPurchaseSchemeBusiness : BaseBusiness, IDenpendency + { + private TaskSchedulerManager taskSchedulerManager; + public AggregionPurchaseSchemeBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, TaskSchedulerManager taskSchedulerManager) : base(fsql, nLogManager, idGenerator) + { + this.taskSchedulerManager = taskSchedulerManager; + } + + public void AutoAggregion() + { + var startTime = DateTime.Now.Date.AddDays(-2); + //查询最近有采购的采购方案 + var schemeIdList = fsql.Select() + .InnerJoin((opi, opri) => opi.OrderId == opri.OrderId && + opi.PurchaseOrderId == opri.PurchaseOrderId) + .Where((opi, opri) => opi.IsEnabled == true && + opi.UpdateTime >= startTime && + opri.SchemeId != null) + .Distinct().ToList((opi, opri) => opri.SchemeId.Value); + Task.Factory.StartNew(() => AggregionByGroup(schemeIdList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.AggregationPurchaserTaskScheduler); + } + + public void AggregionBySchemeIdList(IList schemeIdList) + { + Task.Factory.StartNew(() => AggregionByGroup(schemeIdList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.AggregationPurchaserTaskScheduler); + } + + public void AggregionAllScheme() + { + var schemeIdList = fsql.Select().ToList(ps => ps.Id); + Task.Factory.StartNew(() => AggregionByGroup(schemeIdList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.AggregationPurchaserTaskScheduler); + } + + private void AggregionByGroup(IList schemeIdList) + { + var tempSchemeIdList = new List(); + for (var i = 0; i < schemeIdList.Count(); i++) + { + tempSchemeIdList.Add(schemeIdList[i]); + if (i != 0 && i % 30 == 0) + { + Console.WriteLine($"聚合{i + 1}/{schemeIdList.Count()}"); + Aggregion(tempSchemeIdList); + tempSchemeIdList.Clear(); + Thread.Sleep(2000); + } + } + if (tempSchemeIdList.Count() > 0) + { + Console.WriteLine($"最后聚合"); + Aggregion(tempSchemeIdList); + tempSchemeIdList.Clear(); + } + } + + private void Aggregion(IList schemeIdList) + { + var pssIdList = fsql.Select() + .Where(pss => schemeIdList.Contains(pss.SkuPurchaseSchemeId)) + .Distinct() + .ToList(pss => pss.PurchaseSkuId); + + var dbStatisticList = fsql.Select(pssIdList).ToList(); + + List insertStatisticList = new List(); + List> updateStatisticList = new List>(); + + #region 采购件数/采购金额 + var aggregationItemCountAndAmountList = fsql.Select() + .InnerJoin((opi, opsi) => opi.OrderId == opsi.OrderId && + opi.PurchaseOrderId == opsi.PurchaseOrderId) + .Where((opi, opsi) => opi.IsEnabled == true && pssIdList.Contains(opsi.PurchaseSkuId)) + .GroupBy((opi, opsi) => opsi.PurchaseSkuId) + .ToList(g => new + { + PurchaseSkuId = g.Key, + PurchasedItemCount = g.Sum(g.Value.Item2.PurchasedItemCount), + PurchasedAmount = g.Sum(g.Value.Item2.PurchasedAmount) + }); + #endregion + + #region 最近采购单价 + + var recentPurchaseSkuList = fsql.Select() + .InnerJoin((opi, opsi) => opi.OrderId == opsi.OrderId && + opi.PurchaseOrderId == opsi.PurchaseOrderId) + .Where((opi, opsi) => opi.IsEnabled == true && pssIdList.Contains(opsi.PurchaseSkuId)) + .GroupBy((opi, opsi) => opsi.PurchaseSkuId) + .WithTempQuery(g => new { MaxId = g.Max(g.Value.Item2.Id) }) + .From() + .InnerJoin((opsi, opsi2) => opsi.MaxId == opsi2.Id) + .ToList((opsi, opsi2) => opsi2); + #endregion + + foreach (var purchaseSkuId in pssIdList) + { + var statistic = dbStatisticList.FirstOrDefault(x => x.PurchaseSkuId == purchaseSkuId); + var aggregation = aggregationItemCountAndAmountList.FirstOrDefault(x => x.PurchaseSkuId == purchaseSkuId); + var recent = recentPurchaseSkuList.FirstOrDefault(x => x.PurchaseSkuId == purchaseSkuId); + if (statistic == null) + { + insertStatisticList.Add(new PurchaseSchemeProductSkuStatistic() + { + PurchaseSkuId = purchaseSkuId, + CreateTime = DateTime.Now, + PurchasedAmount = aggregation?.PurchasedAmount ?? 0M, + PurchasedItemCount = Convert.ToInt32(aggregation?.PurchasedItemCount ?? 0M), + LastPurchasedPrice = recent?.PurchasedPrice, + LastPurchasedTime = recent?.CreateTime + }); + } + else + { + if (aggregation != null || recent != null) + { + var update = fsql.Update(purchaseSkuId) + .SetIf(aggregation != null, x => x.PurchasedAmount, aggregation?.PurchasedAmount ?? 0M) + .SetIf(aggregation != null, x => x.PurchasedItemCount, Convert.ToInt32(aggregation?.PurchasedItemCount ?? 0)) + .SetIf(recent != null, x => x.LastPurchasedPrice, recent.PurchasedPrice) + .SetIf(recent != null, x => x.LastPurchasedTime, recent.CreateTime); + updateStatisticList.Add(update); + } + } + } + + fsql.Transaction(() => + { + if (insertStatisticList.Count() > 0) + fsql.Insert(insertStatisticList).ExecuteAffrows(); + if (updateStatisticList.Count() > 0) + { + foreach (var update in updateStatisticList) + update.ExecuteAffrows(); + } + }); + } + } +} diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 1c36622..f6aa39a 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -458,7 +458,7 @@ namespace BBWYB.Server.Business BelongSkuIds = string.Join(",", belongSkuIdList), IsEnabled = true, Remark = !string.IsNullOrEmpty(cargoParamGroup.Remark) ? cargoParamGroup.Remark : request.Remark, - UpadteTime = DateTime.Now + UpdateTime = DateTime.Now }; insertOrderPurchaseInfos.Add(orderPurchaserInfo); #endregion @@ -1117,7 +1117,7 @@ namespace BBWYB.Server.Business PurchaserId = purchaseOrder.PurchaserId, PurchaserName = purchaseOrder.PurchaserName, ShopId = request.ShopId, - UpadteTime = DateTime.Now + UpdateTime = DateTime.Now }; insertOrderPurchaseInfoList.Add(dbPurchaserOrder); #endregion diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseSchemeProductSkuStatistic.cs b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseSchemeProductSkuStatistic.cs index 95b1336..8f2a8eb 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseSchemeProductSkuStatistic.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseSchemeProductSkuStatistic.cs @@ -37,9 +37,6 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "int")] public int? PurchasedItemCount { get; set; } = 0; - [Column(StringLength = 50)] - public string PurchaseSkuSpecId { get; set; } - } } From aa70da92a70bda588f32e6c913b99c13b32429cf Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Tue, 12 Mar 2024 21:00:58 +0800 Subject: [PATCH 174/222] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E6=94=AF=E6=8C=81=E9=85=8D=E4=BB=B6=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaseSchemeController.cs | 2 +- .../PurchaseOrder/PurchaseOrderBusiness.cs | 42 ++++----- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 86 ++++++------------- .../SkuOptimization/OptimizationBusiness.cs | 3 +- .../PurchaseScheme/QuerySchemeRequest.cs | 4 +- .../MergePurchaseSchemeProductSkuResponse.cs | 25 +++++- .../PurchaseSchemeProductSkuResponse.cs | 20 +++++ 7 files changed, 94 insertions(+), 88 deletions(-) diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index 466f15e..cf13444 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -44,7 +44,7 @@ namespace BBWYB.Server.API.Controllers [HttpPost] public IList GetPurchaseSchemeList([FromBody] QuerySchemeRequest querySchemeRequest) { - querySchemeRequest.IncludePurchaserStatisticsInfo = 1; + //querySchemeRequest.IncludePurchaserStatisticsInfo = 1; return purchaseSchemeBusiness.GetPurchaseSchemeList(querySchemeRequest); } diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index f6aa39a..2667aa3 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -326,7 +326,7 @@ namespace BBWYB.Server.Business List insertOrderPurchaseInfos = new List(); List insertOrderPurchaseSkuInfos = new List(); List> updatePurchaseSchemeList = new List>(); - List> updatePssList = new List>(); + //List> updatePssList = new List>(); List insertOrderPurchaseRelationInfoList = new List(); List updatePurchaseTimeLimitTaskOrderSkuList = new List(); List> updatePurchaserList = new List>(); @@ -552,21 +552,21 @@ namespace BBWYB.Server.Business } #endregion - #region 更新采购配件 - { - foreach (var cargoParam in allCargoParamList) - { - var createOrderItem = createdPurchaseOrderItemList.FirstOrDefault(x => x.SkuId == cargoParam.SkuId); - if (createOrderItem != null) - { - var update = fsql.Update() - .Set(pss => pss.LastPurchasePriceCost, createOrderItem.Price) - .Where(pss => pss.PurchaseSkuId == cargoParam.SkuId && pss.SkuPurchaseSchemeId == cargoParam.SchemeId); - updatePssList.Add(update); - } - } - } - #endregion + //#region 更新采购配件 + //{ + // foreach (var cargoParam in allCargoParamList) + // { + // var createOrderItem = createdPurchaseOrderItemList.FirstOrDefault(x => x.SkuId == cargoParam.SkuId); + // if (createOrderItem != null) + // { + // var update = fsql.Update() + // .Set(pss => pss.LastPurchasePriceCost, createOrderItem.Price) + // .Where(pss => pss.PurchaseSkuId == cargoParam.SkuId && pss.SkuPurchaseSchemeId == cargoParam.SchemeId); + // updatePssList.Add(update); + // } + // } + //} + //#endregion } #endregion @@ -783,11 +783,11 @@ namespace BBWYB.Server.Business foreach (var update in updatePurchaseSchemeList) update.ExecuteAffrows(); } - if (updatePssList.Count() > 0) - { - foreach (var update in updatePssList) - update.ExecuteAffrows(); - } + //if (updatePssList.Count() > 0) + //{ + // foreach (var update in updatePssList) + // update.ExecuteAffrows(); + //} fsql.Update(request.OrderId).Set(o => o.OrderState, dbOrder.OrderState) .SetIf(!string.IsNullOrEmpty(request.Remark), o => o.PurchaseRemark, request.Remark) .Set(o => o.IsPurchased, true) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 68730b6..8b5660e 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -773,27 +773,6 @@ namespace BBWYB.Server.Business var skuIdList = purchaseSchemeList.Select(ps => ps.SkuId).Distinct().ToList(); var recentDate = DateTime.Now.Date.AddDays(-30); - //var purchaseSchemeProductList = fsql.Select() - // .InnerJoin((psp, p) => psp.PurchaserId == p.Id) - // .Where((psp, p) => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)) - // .ToList((psp, p) => new PurchaseSchemeProductResponse - // { - // CreateTime = psp.CreateTime, - // Id = psp.Id, - // ProductId = psp.ProductId, - // PurchaseProductId = psp.PurchaseProductId, - // PurchaseUrl = psp.PurchaseUrl, - // SkuId = psp.SkuId, - // SkuPurchaseSchemeId = psp.SkuPurchaseSchemeId, - // PurchaserId = p.Id, - // PurchaserId2 = p.Id2, - // PurchaserLocation = p.Location, - // PurchaserName = p.Name, - // PurchasePlatform = p.Platform, - // PurchaserMemberId = p.MemberId - // //PurchaserPurchasedCount = p.PurchasedCount, - // //PurchaserPurchasedSkuCount = p.PurchasedSkuCount, - // }); var purchaseSchemeProductList = fsql.Select() .Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)) .ToList(); @@ -856,48 +835,20 @@ namespace BBWYB.Server.Business } } + List purchaseSkuStatisticList = null; + if (request.IncludePurchaseSkuStatisticsInfo == 1) + { + var purchaseSkuIdList = purchaseSchemeList.SelectMany(ps => ps.PurchaseSchemeProductList.SelectMany(psp => psp.PurchaseSchemeProductSkuList)) + .Select(pss => pss.PurchaseSkuId) + .Distinct() + .ToList(); + purchaseSkuStatisticList = fsql.Select(purchaseSkuIdList) + .ToList(); + + } + List purchaserIdList = purchaseSchemeProductList.Select(x => x.PurchaserId).Distinct().ToList(); var dbPurchaserList = fsql.Select(purchaserIdList).ToList(); - //if (request.IncludePurchaserStatisticsInfo == 1) - //{ - // #region 查询SKU采购数 - // var purchasedSkuList = fsql.Select() - // .InnerJoin((spr, ps) => spr.SkuId == ps.Id) - // .Where((spr, ps) => ps.ShopId == request.ShopId && purchaserIdList.Contains(spr.PurchaserId)) - // .GroupBy((spr, ps) => new { spr.PurchaserId, spr.SkuId }) - // .ToList(g => new - // { - // g.Key.PurchaserId, - // g.Key.SkuId - // }); - - // #endregion - - // #region 查询订单数 - // var poList = fsql.Select() - // .InnerJoin((opi, o) => opi.OrderId == o.Id) - // .Where((opi, o) => opi.ShopId == request.ShopId && - // opi.IsEnabled == true && - // o.OrderState != Enums.OrderState.已取消 && - // purchaserIdList.Contains(opi.PurchaserId)) - // .GroupBy((opi, o) => opi.PurchaserId) - // .ToList(g => new - // { - // PurchaserId = g.Key, - // Count = g.Count() - // }); - - // #endregion - - // foreach (var purchaser in dbPurchaserList) - // { - // purchaser.PurchasedSkuCount = purchasedSkuList.Where(x => x.PurchaserId == purchaser.Id) - // .Select(x => x.SkuId) - // .Distinct() - // .Count(); - // purchaser.PurchasedCount = poList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.Count ?? 0; - // } - //} foreach (var scheme in purchaseSchemeList) { @@ -925,6 +876,18 @@ namespace BBWYB.Server.Business schemeProduct.PurchasePlatform = purchaser.Platform; schemeProduct.PurchaserTag = purchaser.Tag; } + + if (request.IncludePurchaseSkuStatisticsInfo == 1) + { + foreach (var schemeProductSku in schemeProduct.PurchaseSchemeProductSkuList) + { + var pssStatistic = purchaseSkuStatisticList.FirstOrDefault(x => x.PurchaseSkuId == schemeProductSku.PurchaseSkuId); + schemeProductSku.PurchasedAmount = pssStatistic?.PurchasedAmount ?? 0M; + schemeProductSku.PurchasedItemCount = pssStatistic?.PurchasedItemCount ?? 0; + schemeProductSku.LastPurchasedPrice = pssStatistic?.LastPurchasedPrice ?? 0; + schemeProductSku.LastPurchasedTime = pssStatistic?.LastPurchasedTime; + } + } } } @@ -984,6 +947,7 @@ namespace BBWYB.Server.Business } #endregion } + } return purchaseSchemeList; } diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index e4778a2..896e0bd 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -592,7 +592,8 @@ namespace BBWYB.Server.Business { SkuIdList = skuIdList, BargainTeamIdList = bargainTeamIdList, - IncludePurchaseSkuBasicInfo = 1 + IncludePurchaseSkuBasicInfo = 1, + IncludePurchaseSkuStatisticsInfo = 1 }); #endregion diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs index 7715bfd..80fbb22 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs @@ -57,9 +57,9 @@ namespace BBWYB.Server.Model.Dto public int? IncludeSkuStatisticsInfo { get; set; } /// - /// 是否包含采购商统计信息 (采购次数/采购SKU数) + /// 是否包含采购配件统计信息 /// - public int? IncludePurchaserStatisticsInfo { get; set; } + public int? IncludePurchaseSkuStatisticsInfo { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs index 3b1cc28..de1015e 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs @@ -54,9 +54,30 @@ /// public DateTime? LastBargainingTime { get; set; } + ///// + ///// 配件的最近采购价(配件单价) + ///// + //public decimal? LastPurchasePriceCost { get; set; } + + + /// + /// 最近采购单价 + /// + public decimal? LastPurchasedPrice { get; set; } = 0.00M; + + /// + /// 最近采购时间 + /// + public DateTime? LastPurchasedTime { get; set; } + + /// + /// 采购金额 + /// + public decimal? PurchasedAmount { get; set; } + /// - /// 配件的最近采购价(配件单价) + /// 采购件数 /// - public decimal? LastPurchasePriceCost { get; set; } + public int? PurchasedItemCount { get; set; } = 0; } } diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs index 95a7739..b07adc3 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs @@ -22,5 +22,25 @@ /// 是否失效 失效=1 其余情况默认为有效 仅在查询条件IncludePurchaseSkuBasicInfo=1时具备该值 /// public int? IsInvalid { get; set; } + + /// + /// 最近采购单价,仅在查询条件IncludePurchaseSkuStatisticsInfo=1时具备该值 + /// + public decimal? LastPurchasedPrice { get; set; } = 0.00M; + + /// + /// 最近采购时间,仅在查询条件IncludePurchaseSkuStatisticsInfo=1时具备该值 + /// + public DateTime? LastPurchasedTime { get; set; } + + /// + /// 采购金额,仅在查询条件IncludePurchaseSkuStatisticsInfo=1时具备该值 + /// + public decimal? PurchasedAmount { get; set; } + + /// + /// 采购件数,仅在查询条件IncludePurchaseSkuStatisticsInfo=1时具备该值 + /// + public int? PurchasedItemCount { get; set; } = 0; } } From 02c28848b57086f74ef7def0eef625d7c369f373 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Wed, 13 Mar 2024 03:04:51 +0800 Subject: [PATCH 175/222] =?UTF-8?q?=E8=B4=A7=E6=BA=90=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 49 +++++++++++++++++++ .../QueryGoodsSourceTagRequest.cs | 9 ++++ .../PurchaseScheme/GoodsSourceTagResponse.cs | 9 ++++ BBWYB.Server.Model/Enums.cs | 18 +++++++ 4 files changed, 85 insertions(+) create mode 100644 BBWYB.Server.Model/Dto/Request/PurchaseScheme/QueryGoodsSourceTagRequest.cs create mode 100644 BBWYB.Server.Model/Dto/Response/PurchaseScheme/GoodsSourceTagResponse.cs diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 8b5660e..ca7f558 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1575,5 +1575,54 @@ namespace BBWYB.Server.Business }, userId); } + + public IList GetGoodsSourceTagsInfo(List requestList, string userId) + { + var uInfo = userBusiness.GetisBargainTeamByUserId(userId); + var list = new List(); + var purchaseSkuIdList = requestList.Select(x => x.PurchaseSkuId).ToList(); + var purchaserIdList = requestList.Select(x => x.PurchaserId).ToList(); + + #region 查询淘汰供应商 + + #endregion + + #region 查询采购过的sku + var purchasedSkuList = fsql.Select() + .InnerJoin((opi, opri, ps) => opi.OrderId == opri.OrderId && opi.PurchaseOrderId == opri.PurchaseOrderId) + .InnerJoin((opi, opri, ps) => opri.SchemeId == ps.Id) + .Where((opi, opri, ps) => opi.IsEnabled == true && + purchaseSkuIdList.Contains(opri.PurchaseSkuId)) + .GroupBy((opi, opri, ps) => new { opri.PurchaseSkuId, opri.SchemeId, ps.BelongBargainTeamId }) + .ToList(g => new + { + g.Key.PurchaseSkuId, + g.Key.SchemeId, + g.Key.BelongBargainTeamId + }); + + foreach (var purchasedSku in purchasedSkuList) + { + var goodsSourceTag = new GoodsSourceTagResponse() + { + PurchaseSku = purchasedSku.PurchaseSkuId, + GoodsSourceTagType = purchasedSku.BelongBargainTeamId != uInfo.user.DepartmentId ? + Enums.GoodsSourceTagType.其他组采购过该商品 : + Enums.GoodsSourceTagType.本组采购过该商品 + }; + list.Add(goodsSourceTag); + purchaseSkuIdList.Remove(purchasedSku.PurchaseSkuId); //排除采购过的sku + } + #endregion + + #region 查询添加为采购方案的sku + if (purchaseSkuIdList.Count() > 0) + { + + } + #endregion + + return list; + } } } diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QueryGoodsSourceTagRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QueryGoodsSourceTagRequest.cs new file mode 100644 index 0000000..fc39f0a --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QueryGoodsSourceTagRequest.cs @@ -0,0 +1,9 @@ +namespace BBWYB.Server.Model.Dto +{ + public class QueryGoodsSourceTagRequest + { + public string PurchaseSkuId { get; set; } + + public string PurchaserId { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/GoodsSourceTagResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/GoodsSourceTagResponse.cs new file mode 100644 index 0000000..6d73a97 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/GoodsSourceTagResponse.cs @@ -0,0 +1,9 @@ +namespace BBWYB.Server.Model.Dto +{ + public class GoodsSourceTagResponse + { + public string PurchaseSku { get; set; } + + public Enums.GoodsSourceTagType GoodsSourceTagType { get; set; } + } +} diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index 736bbb9..3ef2064 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -363,5 +363,23 @@ { 临时 = 0, 永久 = 1 } + + /// + /// 货源标记类型 + /// + /// 未采购 = 0,被淘汰的供应商 = 1,其他组采购过该商品 = 2,其他组添加过采购方案 = 3,其他组历史采购过该供应商的商品 = 4,本组采购过该商品 = 10,本组添加过采购方案 = 11,本组历史采购过该供应商的商品 = 12 + /// + /// + public enum GoodsSourceTagType + { + 未采购 = 0, + 被淘汰的供应商 = 1, + 其他组采购过该商品 = 2, + 其他组添加过采购方案 = 3, + 其他组历史采购过该供应商的商品 = 4, + 本组采购过该商品 = 10, + 本组添加过采购方案 = 11, + 本组历史采购过该供应商的商品 = 12 + } } } From d671a1a104c73433c6df116770878fa502237290 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 13 Mar 2024 15:01:28 +0800 Subject: [PATCH 176/222] =?UTF-8?q?=E8=B4=A7=E6=BA=90=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaseSchemeController.cs | 11 +++ .../PurchaseScheme/PurchaseSchemeBusiness.cs | 70 ++++++++++++++++++- 2 files changed, 79 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index cf13444..bb7412f 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -208,5 +208,16 @@ namespace BBWYB.Server.API.Controllers { purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request, null, GetUserId()); } + + /// + /// 货源标记接口 + /// + /// + /// + [HttpPost] + public IList GetGoodsSourceTagsInfo([FromBody] List requestList) + { + return purchaseSchemeBusiness.GetGoodsSourceTagsInfo(requestList, GetUserId()); + } } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index ca7f558..85f0728 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1603,6 +1603,8 @@ namespace BBWYB.Server.Business foreach (var purchasedSku in purchasedSkuList) { + if (list.Any(x => x.PurchaseSku == purchasedSku.PurchaseSkuId)) + continue; var goodsSourceTag = new GoodsSourceTagResponse() { PurchaseSku = purchasedSku.PurchaseSkuId, @@ -1617,8 +1619,72 @@ namespace BBWYB.Server.Business #region 查询添加为采购方案的sku if (purchaseSkuIdList.Count() > 0) - { - + { + var schemeUsedSkuList = fsql.Select() + .InnerJoin((ps, pss) => ps.Id == pss.SkuPurchaseSchemeId) + .Where((ps, pss) => purchaseSkuIdList.Contains(pss.PurchaseSkuId)) + .GroupBy((ps, pss) => new { pss.SkuPurchaseSchemeId, pss.PurchaseSkuId, ps.BelongBargainTeamId }) + .ToList(g => new + { + g.Key.PurchaseSkuId, + g.Key.SkuPurchaseSchemeId, + g.Key.BelongBargainTeamId + }); + foreach (var usedSku in schemeUsedSkuList) + { + if (list.Any(x => x.PurchaseSku == usedSku.PurchaseSkuId)) + continue; + + var goodsSourceTag = new GoodsSourceTagResponse() + { + PurchaseSku = usedSku.PurchaseSkuId, + GoodsSourceTagType = usedSku.BelongBargainTeamId != uInfo.user.DepartmentId ? + Enums.GoodsSourceTagType.其他组添加过采购方案 : + Enums.GoodsSourceTagType.本组添加过采购方案 + }; + list.Add(goodsSourceTag); + purchaseSkuIdList.Remove(usedSku.PurchaseSkuId); //排除绑定过采购方案的sku + } + } + #endregion + + #region 历史采购过相同供应商的商品 + if (purchaseSkuIdList.Count() > 0) + { + purchaserIdList.Clear(); + var goodsSourceList = requestList.Where(x => purchaseSkuIdList.Contains(x.PurchaseSkuId)).ToList(); + purchaserIdList.AddRange(goodsSourceList.Select(x => x.PurchaserId).Distinct().ToList()); + + var purchasedBySamePurchaserList = fsql.Select() + .InnerJoin((opi, opri, ps) => opi.OrderId == opri.OrderId && + opi.PurchaseOrderId == opri.PurchaseOrderId) + .InnerJoin((opi, opri, ps) => opri.SchemeId == ps.Id) + .Where((opi, opri, ps) => opi.IsEnabled == true && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((opi, opri, ps) => new { opi.PurchaserId, opri.SchemeId, ps.BelongBargainTeamId }) + .ToList(g => new + { + g.Key.PurchaserId, + g.Key.SchemeId, + g.Key.BelongBargainTeamId + }); + + if (purchasedBySamePurchaserList.Count() > 0) + { + foreach (var purchaserBySame in purchasedBySamePurchaserList) + { + var item = goodsSourceList.FirstOrDefault(x => x.PurchaserId == purchaserBySame.PurchaserId); + if (item != null && list.Any(x => x.PurchaseSku == item.PurchaseSkuId)) + continue; + list.Add(new GoodsSourceTagResponse() + { + PurchaseSku = item.PurchaseSkuId, + GoodsSourceTagType = purchaserBySame.BelongBargainTeamId != uInfo.user.DepartmentId ? + Enums.GoodsSourceTagType.其他组历史采购过该供应商的商品 : + Enums.GoodsSourceTagType.本组历史采购过该供应商的商品 + }); + } + } } #endregion From 35ee9a5a076dcee8e06fb28dea8a696c95c5b58b Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 13 Mar 2024 21:40:14 +0800 Subject: [PATCH 177/222] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8A=A5=E4=BB=B7?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/SkuOptimizationController.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs index 541e056..8c53cbf 100644 --- a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs +++ b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs @@ -35,6 +35,15 @@ namespace BBWYB.Server.API.Controllers optimizationBusiness.CompleteOptimization(taskId, userId); } + /// + /// 更新报价 + /// + /// + public void BatchUpdateCompetitiveTenderQuotation([FromBody] BatchUpdateCompetitiveTenderQuotationRequest request) + { + optimizationBusiness.BatchUpdateCompetitiveTenderQuotation(request, GetUserId()); + } + /// /// 查询待议价任务列表 /// From 6f064e82f62d487342d0d504c4517c0603487e85 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 13 Mar 2024 21:53:06 +0800 Subject: [PATCH 178/222] 1 --- BBWYB.Server.API/Controllers/SkuOptimizationController.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs index 8c53cbf..e8919ce 100644 --- a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs +++ b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs @@ -39,6 +39,7 @@ namespace BBWYB.Server.API.Controllers /// 更新报价 /// /// + [HttpPost] public void BatchUpdateCompetitiveTenderQuotation([FromBody] BatchUpdateCompetitiveTenderQuotationRequest request) { optimizationBusiness.BatchUpdateCompetitiveTenderQuotation(request, GetUserId()); From ead75dc40c3b08ba02fd16cbd31e71111d56ec31 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 16 Mar 2024 01:53:49 +0800 Subject: [PATCH 179/222] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=9B=E5=BB=BAspu?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=BB=E5=8A=A1=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs | 1 + BBWYB.Server.Business/Sync/OrderSyncBusiness.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 896e0bd..80915c9 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -184,6 +184,7 @@ namespace BBWYB.Server.Business PreItemCount = 0, PrePurchaseAmount = 0M }; + insertSpuOptimizationTaskList.Add(spuOptimizationTask); #endregion #region 创建SKU优化任务 diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 1409143..fcd421d 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -498,6 +498,7 @@ namespace BBWYB.Server.Business.Sync PreItemCount = 0, PrePurchaseAmount = 0M }; + insertSpuOptimizationTaskList.Add(spuOptimizationTask); #endregion #region 创建SKU优化任务 From 999065350f2e21de18b87d3afa885c44e4cbd500 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 16 Mar 2024 02:50:47 +0800 Subject: [PATCH 180/222] =?UTF-8?q?=E8=BF=87=E6=BB=A4=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.API/Controllers/SkuOptimizationController.cs | 4 +++- .../SkuOptimization/OptimizationBusiness.cs | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs index e8919ce..884c651 100644 --- a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs +++ b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs @@ -1,10 +1,12 @@ using BBWYB.Server.Business; using BBWYB.Server.Model.Dto; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace BBWYB.Server.API.Controllers { - + [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] public class SkuOptimizationController : BaseApiController { private OptimizationBusiness optimizationBusiness; diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 80915c9..b49b4c7 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -554,6 +554,8 @@ namespace BBWYB.Server.Business .Count(out var total) .Page(request.PageIndex, request.PageSize) .ToList(); + if (taskList.Count() == 0) + return new ListResponse() { TotalCount = 0, Items = null }; var spuTaskIdList = taskList.Select(t => t.Id).ToList(); @@ -589,6 +591,12 @@ namespace BBWYB.Server.Business #endregion #region 获取采购方案 + if (skuIdList.Count() == 0 && bargainTeamIdList.Count() == 0) + return new ListResponse() + { + Items = null, + TotalCount = 0 + }; var purchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest() { SkuIdList = skuIdList, From d85e2db0df4cfc55f111b2623f3911e9141e3bca Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 16 Mar 2024 02:53:21 +0800 Subject: [PATCH 181/222] =?UTF-8?q?=E5=A2=9E=E5=8A=A0Authorize?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.API/Controllers/PurchaserController.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/BBWYB.Server.API/Controllers/PurchaserController.cs b/BBWYB.Server.API/Controllers/PurchaserController.cs index 0bc88a4..5ebec9d 100644 --- a/BBWYB.Server.API/Controllers/PurchaserController.cs +++ b/BBWYB.Server.API/Controllers/PurchaserController.cs @@ -1,10 +1,13 @@ using BBWYB.Server.Business; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace BBWYB.Server.API.Controllers { + [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] public class PurchaserController : BaseApiController { private PurchaserBusiness purchaserBusiness; From bd913f5a6c757423ce44b9d823878e68a209de5e Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 16 Mar 2024 03:02:14 +0800 Subject: [PATCH 182/222] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index b49b4c7..74ce309 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -539,7 +539,7 @@ namespace BBWYB.Server.Business /// public ListResponse GetNoCompletionSkuOptimizationTask(QueryNoCompletionOptimizationTaskRequest request, string userId) { - request.EndTime = request.EndTime.Date; + request.EndTime = request.EndTime.Date.AddDays(1).AddSeconds(-1); var uInfo = userBusiness.GetisBargainTeamByUserId(userId, true); var taskList = fsql.Select() .Where(t => t.IsOptimizationCompleted == false && From ede3ffa02fd2793720c8e6d4d426500432d58722 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 16 Mar 2024 20:39:41 +0800 Subject: [PATCH 183/222] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=BA=97=E9=93=BA?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.API/Controllers/VenderController.cs | 12 ++++++++++++ .../Dto/Request/Vender/QueryShopRequest.cs | 9 +++++++++ 2 files changed, 21 insertions(+) create mode 100644 BBWYB.Server.Model/Dto/Request/Vender/QueryShopRequest.cs diff --git a/BBWYB.Server.API/Controllers/VenderController.cs b/BBWYB.Server.API/Controllers/VenderController.cs index 87825cf..2e74620 100644 --- a/BBWYB.Server.API/Controllers/VenderController.cs +++ b/BBWYB.Server.API/Controllers/VenderController.cs @@ -1,4 +1,5 @@ using BBWYB.Server.Business; +using BBWYB.Server.Model; using BBWYB.Server.Model.Db.MDS; using BBWYB.Server.Model.Dto; using Microsoft.AspNetCore.Authentication.JwtBearer; @@ -69,5 +70,16 @@ namespace BBWYB.Server.API.Controllers { return venderBusiness.GetKuaiDi100ExpressCompanyList(request); } + + /// + /// 获取店铺列表 + /// + /// + /// + [HttpPost] + public IList GetShopList([FromBody] QueryShopRequest request) + { + return venderBusiness.GetShopList(request.ShopId, request.Platform); + } } } diff --git a/BBWYB.Server.Model/Dto/Request/Vender/QueryShopRequest.cs b/BBWYB.Server.Model/Dto/Request/Vender/QueryShopRequest.cs new file mode 100644 index 0000000..a432cd3 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/Vender/QueryShopRequest.cs @@ -0,0 +1,9 @@ +namespace BBWYB.Server.Model.Dto +{ + public class QueryShopRequest + { + public long? ShopId { get; set; } + + public Enums.Platform? Platform { get; set; } + } +} From 41c5fb2a8b6fb171d7b2e01622e74f748c3ef86c Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 17 Mar 2024 00:43:47 +0800 Subject: [PATCH 184/222] =?UTF-8?q?=E5=A2=9E=E5=8A=A0taskId=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimization/OptimizationBusiness.cs | 36 ++++++++++++------- ...ueryNoCompletionOptimizationTaskRequest.cs | 5 +++ 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 896e0bd..04d7c84 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -540,19 +540,29 @@ namespace BBWYB.Server.Business { request.EndTime = request.EndTime.Date; var uInfo = userBusiness.GetisBargainTeamByUserId(userId, true); - var taskList = fsql.Select() - .Where(t => t.IsOptimizationCompleted == false && - t.CreateTime >= request.StartTime && - t.CreateTime <= request.EndTime) - .WhereIf(request.BelongShopId != null && request.BelongShopId != 0, t => t.BelongShopId == request.BelongShopId) - .WhereIf(!string.IsNullOrEmpty(request.JDSku), t => fsql.Select() - .Where(st => st.SpuOptimizationTaskId == t.Id && - st.JDSkuId == request.JDSku) - .Any()) - .OrderByDescending(t => t.CreateTime) - .Count(out var total) - .Page(request.PageIndex, request.PageSize) - .ToList(); + + ISelect select = null; + if (request.SpuOptimizationTaskId != null && request.SpuOptimizationTaskId != 0) + { + select = fsql.Select(request.SpuOptimizationTaskId); + } + else + { + select = fsql.Select() + .Where(t => t.IsOptimizationCompleted == false && + t.CreateTime >= request.StartTime && + t.CreateTime <= request.EndTime) + .WhereIf(request.BelongShopId != null && request.BelongShopId != 0, t => t.BelongShopId == request.BelongShopId) + .WhereIf(!string.IsNullOrEmpty(request.JDSku), t => fsql.Select() + .Where(st => st.SpuOptimizationTaskId == t.Id && + st.JDSkuId == request.JDSku) + .Any()); + } + + var taskList = select.OrderByDescending(t => t.CreateTime) + .Count(out var total) + .Page(request.PageIndex, request.PageSize) + .ToList(); var spuTaskIdList = taskList.Select(t => t.Id).ToList(); diff --git a/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs b/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs index 0386fe3..5d38bc3 100644 --- a/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs @@ -25,5 +25,10 @@ namespace BBWYB.Server.Model.Dto /// [Required] public DateTime EndTime { get; set; } + + /// + /// SPU优化任务Id + /// + public long? SpuOptimizationTaskId { get; set; } } } From 9055bdc8fc1f25dceb9599bb9d7475ae67b4fc24 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 17 Mar 2024 00:46:47 +0800 Subject: [PATCH 185/222] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 907116e..74e5ae8 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -564,6 +564,8 @@ namespace BBWYB.Server.Business .Count(out var total) .Page(request.PageIndex, request.PageSize) .ToList(); + if (taskList.Count() == 0) + return new ListResponse() { TotalCount = 0, Items = null }; var spuTaskIdList = taskList.Select(t => t.Id).ToList(); From ce6bbbd6d27a5bb405ede6eff64ef652557ad48a Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 17 Mar 2024 15:24:45 +0800 Subject: [PATCH 186/222] =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=BC=96=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Client/App.xaml.cs | 5 ++++- BBWYB.Client/Views/Web.xaml.cs | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/BBWYB.Client/App.xaml.cs b/BBWYB.Client/App.xaml.cs index 669ad01..0548741 100644 --- a/BBWYB.Client/App.xaml.cs +++ b/BBWYB.Client/App.xaml.cs @@ -32,7 +32,10 @@ namespace BBWYB.Client #if DEBUG //齐越山鸡 - userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTM1MzMwMzI4ODkyMTQ5NzYwIiwidGVhbUlkIjoiMTUxNjk3NDI1MDU0MjUwMTg4OCIsInNvblRlYW1JZHMiOiIxNDM2Mjg4NTAwMjM1MjQzNTIwIiwiZXhwIjoxNzI2MzAwNjY0fQ.hPSbgJEuTt0MLy_7YkSJX4rRG3drJAfso-5IS8ZlOkY"; + //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTM1MzMwMzI4ODkyMTQ5NzYwIiwidGVhbUlkIjoiMTUxNjk3NDI1MDU0MjUwMTg4OCIsInNvblRlYW1JZHMiOiIxNDM2Mjg4NTAwMjM1MjQzNTIwIiwiZXhwIjoxNzI2MzAwNjY0fQ.hPSbgJEuTt0MLy_7YkSJX4rRG3drJAfso-5IS8ZlOkY"; + + //议价2组 + userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMzk1NzA4MjA4NjU1MzcyMjg4IiwidGVhbUlkIjoiMTc2MDk3MTY4ODk2NDUyNjA4MCIsInNvblRlYW1JZHMiOiIiLCJleHAiOjE3NDIxOTYxMDF9.pt1onwf4f4QKyuT1kFWtcRw8LZo9s64CmHqrdI4fD5k"; //拳探店铺 陈默 //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNjI0OTUxNjgzNTc2NTAwMjI0IiwidGVhbUlkIjoiMTYyMDM0MjAxNDcwNjk3ODgxNiIsInNvblRlYW1JZHMiOiIxNjIwMzQyMDE0NzA2OTc4ODE2LDE2MjAzNDM4Mjc0NzI1ODQ3MDQsMTYyMDM0NDAzMzczNTg3MjUxMiwxNjIwMzQ0MDkyODI5NDIxNTY4LDE2MjAzNDQxNDA4NTAwMDgwNjQiLCJleHAiOjE3MjA3NjQzMjV9.Q8fiKXCHgvzbm7NDEre-MeoSju_AmC6Ae6eDY22rUAw"; diff --git a/BBWYB.Client/Views/Web.xaml.cs b/BBWYB.Client/Views/Web.xaml.cs index 6a31dde..62e6121 100644 --- a/BBWYB.Client/Views/Web.xaml.cs +++ b/BBWYB.Client/Views/Web.xaml.cs @@ -43,9 +43,9 @@ namespace BBWYB.Client.Views private void initWebView() { #if DEBUG - //var url = "http://qtbbwy.qiyue666.com"; + var url = "http://qtbbwy.qiyue666.com"; //var registerName = "webContext"; - var url = "http://192.168.1.2:8080"; + //var url = "http://192.168.1.2:8080"; var registerName = "webTestContext"; //var url = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "s.html"); #else From 059dbe2e545a4fed19bf61b23004b7b5e9e812d7 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 17 Mar 2024 15:32:26 +0800 Subject: [PATCH 187/222] 10039 --- BBWYB.Client/GlobalContext.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BBWYB.Client/GlobalContext.cs b/BBWYB.Client/GlobalContext.cs index c3db6ad..43e0ea3 100644 --- a/BBWYB.Client/GlobalContext.cs +++ b/BBWYB.Client/GlobalContext.cs @@ -20,7 +20,7 @@ namespace BBWYB.Client { public GlobalContext() { - BBWYBApiVersion = "10038"; + BBWYBApiVersion = "10039"; } private User user; From 1a0212cb0a6baed0d4ac76c359548347aa8af153 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 18 Mar 2024 19:39:11 +0800 Subject: [PATCH 188/222] =?UTF-8?q?=E6=94=B9=E4=BB=B7=E5=8A=A0=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Client/GlobalContext.cs | 2 +- BBWYB.Server.Business/Order/OrderBusiness.cs | 17 ++++++++++------- .../PurchaseOrder/PurchaseOrderBusiness.cs | 17 ++++++++++------- WebTest/App.xaml.cs | 2 +- 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/BBWYB.Client/GlobalContext.cs b/BBWYB.Client/GlobalContext.cs index 43e0ea3..a883c5d 100644 --- a/BBWYB.Client/GlobalContext.cs +++ b/BBWYB.Client/GlobalContext.cs @@ -20,7 +20,7 @@ namespace BBWYB.Client { public GlobalContext() { - BBWYBApiVersion = "10039"; + BBWYBApiVersion = "10040"; } private User user; diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 1f08dec..57e5a72 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -662,14 +662,17 @@ namespace BBWYB.Server.Business public void EditPrice(OP_EditPriceRequest request) { var client = opPlatformClientFactory.GetClient(request.Platform); - client.EditPrice(new OP_EditPriceRequest() + lock ($"editprice_{request.OrderId}") { - AppKey = request.AppKey, - AppSecret = request.AppSecret, - AppToken = request.AppToken, - OrderId = request.OrderId, - EditItems = request.EditItems - }); + client.EditPrice(new OP_EditPriceRequest() + { + AppKey = request.AppKey, + AppSecret = request.AppSecret, + AppToken = request.AppToken, + OrderId = request.OrderId, + EditItems = request.EditItems + }); + } var orderListResponse = client.GetOrderList(new OP_QueryOrderRequest() { diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 2667aa3..c0ea9bb 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -3172,14 +3172,17 @@ namespace BBWYB.Server.Business { #region 通知拳探改价 var opclient = opPlatformClientFactory.GetClient(AdapterEnums.PlatformType.拳探); - opclient.EditPrice(new OP_EditPriceRequest() + lock ($"editprice_{dbOrder.Id}") { - AppKey = shop.AppKey, - AppSecret = shop.AppSecret, - AppToken = shop.AppToken, - OrderId = dbOrder.Id, - EditItems = op_EditPriceSkuRequests - }); + opclient.EditPrice(new OP_EditPriceRequest() + { + AppKey = shop.AppKey, + AppSecret = shop.AppSecret, + AppToken = shop.AppToken, + OrderId = dbOrder.Id, + EditItems = op_EditPriceSkuRequests + }); + } #endregion #region 通知C端改价 diff --git a/WebTest/App.xaml.cs b/WebTest/App.xaml.cs index d75d7a9..5d1f7b7 100644 --- a/WebTest/App.xaml.cs +++ b/WebTest/App.xaml.cs @@ -25,7 +25,7 @@ namespace WebTest string userToken = string.Empty; //齐越山鸡 - userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTM1MzMwMzI4ODkyMTQ5NzYwIiwidGVhbUlkIjoiMTUxNjk3NDI1MDU0MjUwMTg4OCIsInNvblRlYW1JZHMiOiIxNDM2Mjg4NTAwMjM1MjQzNTIwIiwiZXhwIjoxNzI2MzAwNjY0fQ.hPSbgJEuTt0MLy_7YkSJX4rRG3drJAfso-5IS8ZlOkY"; + userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMzk1NzA4MjA4NjU1MzcyMjg4IiwidGVhbUlkIjoiMTc2MDk3MTY4ODk2NDUyNjA4MCIsInNvblRlYW1JZHMiOiIiLCJleHAiOjE3NDIxOTYxMDF9.pt1onwf4f4QKyuT1kFWtcRw8LZo9s64CmHqrdI4fD5k"; gl.UserToken = userToken; From f2666a0eb416ccf75a2551d3433005a65c1f930c Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 19 Mar 2024 02:47:24 +0800 Subject: [PATCH 189/222] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=8A=A5=E4=BB=B7=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimization/OptimizationBusiness.cs | 26 +++++++++++++++---- ...ueryNoCompletionOptimizationTaskRequest.cs | 10 +++++++ .../SkuOptimizationTaskResponse.cs | 4 +++ BBWYB.Server.Model/MappingProfiles.cs | 2 +- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 74e5ae8..a76acbe 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -8,6 +8,7 @@ using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json; using System.Numerics; +using System.Text.RegularExpressions; using Yitter.IdGenerator; namespace BBWYB.Server.Business @@ -549,15 +550,28 @@ namespace BBWYB.Server.Business } else { + string spuKeyWords = string.Empty, skuKeyWords = string.Empty; + if (!string.IsNullOrEmpty(request.SpuOrSku)) + { + if (Regex.IsMatch(request.SpuOrSku, @"^\d{2,10}$")) + spuKeyWords = request.SpuOrSku; + else if (Regex.IsMatch(request.SpuOrSku, @"^\w{2,20}$")) + skuKeyWords = request.SpuOrSku; + } + select = fsql.Select() .Where(t => t.IsOptimizationCompleted == false && t.CreateTime >= request.StartTime && t.CreateTime <= request.EndTime) .WhereIf(request.BelongShopId != null && request.BelongShopId != 0, t => t.BelongShopId == request.BelongShopId) - .WhereIf(!string.IsNullOrEmpty(request.JDSku), t => fsql.Select() - .Where(st => st.SpuOptimizationTaskId == t.Id && - st.JDSkuId == request.JDSku) - .Any()); + .WhereIf(!string.IsNullOrEmpty(request.JDSku) || + !string.IsNullOrEmpty(skuKeyWords), t => fsql.Select() + .Where(st => st.SpuOptimizationTaskId == t.Id) + .WhereIf(!string.IsNullOrEmpty(request.JDSku), st => st.JDSkuId == request.JDSku) + .WhereIf(!string.IsNullOrEmpty(skuKeyWords), st => st.SkuId == skuKeyWords) + .Any()) + .WhereIf(!string.IsNullOrEmpty(request.TitleKeywords), t => t.ProductTitle.Contains(request.TitleKeywords)) + .WhereIf(!string.IsNullOrEmpty(spuKeyWords), t => t.ProductId == spuKeyWords); } var taskList = select.OrderByDescending(t => t.CreateTime) @@ -589,7 +603,9 @@ namespace BBWYB.Server.Business PreItemCount = st.PreItemCount, PrePurchaseAmount = st.PrePurchaseAmount, SkuId = st.SkuId, - SpuOptimizationTaskId = st.SpuOptimizationTaskId + SpuOptimizationTaskId = st.SpuOptimizationTaskId, + SkuName = ps.SkuName, + Price = ps.Price }); var skuIdList = skuTaskList.Select(st => st.SkuId).ToList(); #endregion diff --git a/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs b/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs index 5d38bc3..bca729f 100644 --- a/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs @@ -30,5 +30,15 @@ namespace BBWYB.Server.Model.Dto /// SPU优化任务Id /// public long? SpuOptimizationTaskId { get; set; } + + /// + /// Spu或Sku + /// + public string SpuOrSku { get; set; } + + /// + /// 标题关键字 + /// + public string TitleKeywords { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs index c836741..c87d5d7 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs @@ -8,5 +8,9 @@ namespace BBWYB.Server.Model.Dto public string Logo { get; set; } + + public string SkuName { get; set; } + + public decimal? Price { get; set; } } } diff --git a/BBWYB.Server.Model/MappingProfiles.cs b/BBWYB.Server.Model/MappingProfiles.cs index bacd4b0..8071c68 100644 --- a/BBWYB.Server.Model/MappingProfiles.cs +++ b/BBWYB.Server.Model/MappingProfiles.cs @@ -61,7 +61,7 @@ namespace BBWYB.Server.Model CreateMap(); CreateMap(); - + CreateMap(); CreateMap(); CreateMap(); } From 8b1c257bec4a576204d304e5567c878814c88d99 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 20 Mar 2024 01:51:19 +0800 Subject: [PATCH 190/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E5=88=86=E7=BB=84=E5=88=A0=E9=99=A4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/SkuOptimizationController.cs | 11 ++++++++ .../SkuOptimization/OptimizationBusiness.cs | 23 ++++++++++++++++ .../DeleteSchemeGroupRequest.cs | 9 +++++++ .../MergePurchaseSchemeProductSkuResponse.cs | 26 ++++++++++++------- 4 files changed, 60 insertions(+), 9 deletions(-) create mode 100644 BBWYB.Server.Model/Dto/Request/PurchaseScheme/DeleteSchemeGroupRequest.cs diff --git a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs index 884c651..f698fd3 100644 --- a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs +++ b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs @@ -58,5 +58,16 @@ namespace BBWYB.Server.API.Controllers var userId = GetUserId(); return optimizationBusiness.GetNoCompletionSkuOptimizationTask(request, userId); } + + /// + /// 删除采购方案分组(包括采购方案和竞标关系) + /// + /// + [HttpPost] + public void DeleteSchemeGroup(DeleteSchemeGroupFromSpuOptimizationTaskRequest request) + { + var userId = GetUserId(); + optimizationBusiness.DeleteSchemeGroup(request, userId); + } } } diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index a76acbe..2feb4c3 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -683,8 +683,12 @@ namespace BBWYB.Server.Business { mergePss = pss.Map(); mergePss.PurchaserId = mergePurchaser.Id; + mergePss.BelongSkuIdList.Add(pss.SkuId); + mergePss.PurchaseUrl = psp.PurchaseUrl; mergePurchaser.MergePurchaseSchemeProductSkuList.Add(mergePss); } + else if (!mergePss.BelongSkuIdList.Contains(pss.SkuId)) + mergePss.BelongSkuIdList.Add(pss.SkuId); } } } @@ -807,5 +811,24 @@ namespace BBWYB.Server.Business nLogManager.Default().Error(ex, "限时任务超时回调失败"); } } + + /// + /// 从优化任务模块删除采购方案分组(级联删除采购分组下的其他) + /// + /// + public void DeleteSchemeGroup(DeleteSchemeGroupFromSpuOptimizationTaskRequest request, string userId) + { + _ = userBusiness.GetisBargainTeamByUserId(userId, true); + var competitiveTenderTaskList = fsql.Select() + .Where(ct => ct.SpuOptimizationTaskId == request.SpuOptimizationId && + ct.SchemeGroupId == request.SchemeGroupId) + .ToList(); + + var schemeIdList = competitiveTenderTaskList.Select(ct => ct.SchemeId).ToList(); + purchaseSchemeBusiness.DeletePurchaseScheme(schemeIdList); + + var ctTaskIdList = competitiveTenderTaskList.Select(ct => ct.Id); + fsql.Delete(ctTaskIdList).ExecuteAffrows(); + } } } diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/DeleteSchemeGroupRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/DeleteSchemeGroupRequest.cs new file mode 100644 index 0000000..7f505ea --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/DeleteSchemeGroupRequest.cs @@ -0,0 +1,9 @@ +namespace BBWYB.Server.Model.Dto +{ + public class DeleteSchemeGroupFromSpuOptimizationTaskRequest + { + public long SchemeGroupId { get; set; } + + public long SpuOptimizationId { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs index de1015e..f291ef0 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs @@ -5,18 +5,22 @@ /// public class MergePurchaseSchemeProductSkuResponse { + public MergePurchaseSchemeProductSkuResponse() + { + BelongSkuIdList = new List(); + } /// /// 采购商Id /// public string PurchaserId { get; set; } - + public string PurchaseSkuTitle { get; set; } - + public string PurchaseSkuLogo { get; set; } - + public decimal? PurchaseSkuPrice { get; set; } /// @@ -54,12 +58,6 @@ /// public DateTime? LastBargainingTime { get; set; } - ///// - ///// 配件的最近采购价(配件单价) - ///// - //public decimal? LastPurchasePriceCost { get; set; } - - /// /// 最近采购单价 /// @@ -79,5 +77,15 @@ /// 采购件数 /// public int? PurchasedItemCount { get; set; } = 0; + + /// + /// 归属SKU列表 + /// + public List BelongSkuIdList { get; set; } + + /// + /// 采购商品链接 + /// + public string PurchaseUrl { get; set; } } } From c8938650ba939c1241a034ae190f8aee5ae64239 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 20 Mar 2024 15:23:24 +0800 Subject: [PATCH 191/222] =?UTF-8?q?=E5=85=81=E8=AE=B8=E9=9D=9E=E8=AE=AE?= =?UTF-8?q?=E4=BB=B7=E7=BB=84=E6=9F=A5=E8=AF=A2spu=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E4=BD=86=E4=B8=8D=E5=85=81=E8=AE=B8=E5=AE=8C=E6=88=90=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=92=8C=E6=9B=B4=E6=96=B0=E6=8A=A5=E4=BB=B7=20?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88=E5=88=86?= =?UTF-8?q?=E7=BB=84=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=A6=82=E6=9E=9C=E6=98=AF?= =?UTF-8?q?=E8=AE=AE=E4=BB=B7=E7=BB=84=E6=9F=A5=E8=AF=A2=E5=8F=AA=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E8=B7=9F=E5=BD=93=E5=89=8D=E8=AE=AE=E4=BB=B7=E7=BB=84?= =?UTF-8?q?=E6=9C=89=E5=85=B3=E7=9A=84=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaseSchemeController.cs | 2 +- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 4 +- .../SkuOptimization/OptimizationBusiness.cs | 2 +- .../Db/PurchaseScheme/PurchaseSchemeGroup.cs | 69 ++++++++++--------- 4 files changed, 42 insertions(+), 35 deletions(-) diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index bb7412f..fcc59ff 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -56,7 +56,7 @@ namespace BBWYB.Server.API.Controllers [HttpPost] public IList GetPurchaseSchemeAndGroupList(QuerySchemeAndGroupRequest request) { - return purchaseSchemeBusiness.GetPurchaseSchemeAndGroupList(request); + return purchaseSchemeBusiness.GetPurchaseSchemeAndGroupList(request, GetUserId()); } /// diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 85f0728..20f72fb 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -952,11 +952,13 @@ namespace BBWYB.Server.Business return purchaseSchemeList; } - public IList GetPurchaseSchemeAndGroupList(QuerySchemeAndGroupRequest request) + public IList GetPurchaseSchemeAndGroupList(QuerySchemeAndGroupRequest request, string userId) { + var user = userBusiness.GetisBargainTeamByUserId(userId); var purchaseSchemeGroupsList = fsql.Select() .Where(psg => psg.ShopId == request.ShopId && request.ProductIdList.Contains(psg.ProductId)) + .WhereIf(user.isBargainTeam, psg => psg.BelongBargainTeamId == user.department.Id) .ToList(); if (purchaseSchemeGroupsList.Count() > 0) { diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 2feb4c3..29ee702 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -541,7 +541,7 @@ namespace BBWYB.Server.Business public ListResponse GetNoCompletionSkuOptimizationTask(QueryNoCompletionOptimizationTaskRequest request, string userId) { request.EndTime = request.EndTime.Date.AddDays(1).AddSeconds(-1); - var uInfo = userBusiness.GetisBargainTeamByUserId(userId, true); + var uInfo = userBusiness.GetisBargainTeamByUserId(userId); ISelect select = null; if (request.SpuOptimizationTaskId != null && request.SpuOptimizationTaskId != 0) diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseSchemeGroup.cs b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseSchemeGroup.cs index 035efd9..17229eb 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseSchemeGroup.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseSchemeGroup.cs @@ -7,39 +7,44 @@ namespace BBWYB.Server.Model.Db /// 采购方案分组表 /// [Table(Name = "purchaseschemegroup", DisableSyncStructure = true)] - public partial class PurchaseSchemeGroup + public partial class PurchaseSchemeGroup { - /// - /// 分组Id - /// - [Column(DbType = "bigint", IsPrimary = true)] - public long Id { get; set; } - - /// - /// 创建时间 - /// - [Column(DbType = "datetime")] - public DateTime? CreateTime { get; set; } - - /// - /// 组名 - /// - [Column(StringLength = 100)] - public string GroupName { get; set; } - - /// - /// 店铺spu,店铺商品Id - /// - [Column(StringLength = 50)] - public string ProductId { get; set; } - - /// - /// 店铺Id - /// - [Column(DbType = "bigint")] - public long? ShopId { get; set; } - - } + /// + /// 分组Id + /// + [Column(DbType = "bigint", IsPrimary = true)] + public long Id { get; set; } + + /// + /// 创建时间 + /// + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 组名 + /// + [Column(StringLength = 100)] + public string GroupName { get; set; } + + /// + /// 店铺spu,店铺商品Id + /// + [Column(StringLength = 50)] + public string ProductId { get; set; } + + /// + /// 店铺Id + /// + [Column(DbType = "bigint")] + public long? ShopId { get; set; } + + /// + /// 归属议价组 + /// + [Column(StringLength = 50)] + public string BelongBargainTeamId { get; set; } + } } From 88e757cf8ba777593b1791e6d253dc4584356f98 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 21 Mar 2024 00:25:10 +0800 Subject: [PATCH 192/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E5=88=86=E7=BB=84=E6=94=AF=E6=8C=81=E8=AE=AE=E4=BB=B7=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 20f72fb..539a232 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -448,9 +448,10 @@ namespace BBWYB.Server.Business { Id = idGenerator.NewLong(), CreateTime = DateTime.Now, - GroupName = $"{firstScheme.ProductId}-{dbPurchaseSchemeGroupIndex.Index}", + GroupName = $"{firstScheme.ProductId}-{dbPurchaseSchemeGroupIndex.Index}{(uInfo.isBargainTeam ? $"-{uInfo.department.DepartmentName}" : string.Empty)}", ProductId = firstScheme.ProductId, - ShopId = firstScheme.ShopId + ShopId = firstScheme.ShopId, + BelongBargainTeamId = uInfo.department.Id }; insertPurchaseSchemeGroupsList.Add(insertSchemeGroup); newPurchaseGroupId = insertSchemeGroup.Id; From 2bb86a4ad82e9873ac3c3ec07d56b0f0c8c86674 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 21 Mar 2024 15:51:34 +0800 Subject: [PATCH 193/222] =?UTF-8?q?=E6=8C=89spu=E6=9F=A5=E8=AF=A2=E6=89=80?= =?UTF-8?q?=E6=9C=89=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88=E7=9A=84=E6=89=80?= =?UTF-8?q?=E6=9C=89=E9=87=87=E8=B4=AD=E9=85=8D=E4=BB=B6=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaseSchemeController.cs | 11 +++++++++ .../PurchaseScheme/PurchaseSchemeBusiness.cs | 23 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index fcc59ff..0665270 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -59,6 +59,17 @@ namespace BBWYB.Server.API.Controllers return purchaseSchemeBusiness.GetPurchaseSchemeAndGroupList(request, GetUserId()); } + /// + /// 按spu查询所有采购方案的所有采购配件列表 (议价组只查询和自己有关的采购方案) + /// + /// + /// + [HttpGet("{productId}")] + public IList GetMergePurchaseSchemeProductSkuByProductId([FromRoute]string productId) + { + return purchaseSchemeBusiness.GetMergePurchaseSchemeProductSkuByProductId(productId, GetUserId()); + } + /// /// 获取Sku采购方案数量 /// diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 539a232..4b458de 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1024,6 +1024,29 @@ namespace BBWYB.Server.Business return purchaseSchemeList; } + public IList GetMergePurchaseSchemeProductSkuByProductId(string productId, string userId) + { + var user = userBusiness.GetisBargainTeamByUserId(userId); + var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest() + { + ProductIdList = new List() { productId }, + BargainTeamIdList = user.isBargainTeam ? new List() { user.user.DepartmentId } : null + }); + var mergePssList = new List(); + foreach (var scheme in purchaseSchemeList) + { + foreach (var psp in scheme.PurchaseSchemeProductList) + { + foreach (var pss in psp.PurchaseSchemeProductSkuList) + { + if (!mergePssList.Any(x => x.PurchaseSkuId == pss.PurchaseSkuId)) + mergePssList.Add(pss); + } + } + } + return mergePssList; + } + ///// ///// 获取共同拥有的采购商 ///// From dd1ef3854980de55a9297d4cd8a47d596c2407fc Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 21 Mar 2024 22:49:57 +0800 Subject: [PATCH 194/222] =?UTF-8?q?spu=E4=BB=BB=E5=8A=A1=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=89=A9=E4=BD=99=E6=97=B6=E9=97=B4=EF=BC=8Cspu=E6=89=80?= =?UTF-8?q?=E6=9C=89=E9=85=8D=E4=BB=B6=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=BD=92=E5=B1=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 13 +++++++++---- .../SkuOptimization/OptimizationBusiness.cs | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 4b458de..c5f2213 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1024,7 +1024,7 @@ namespace BBWYB.Server.Business return purchaseSchemeList; } - public IList GetMergePurchaseSchemeProductSkuByProductId(string productId, string userId) + public IList GetMergePurchaseSchemeProductSkuByProductId(string productId, string userId) { var user = userBusiness.GetisBargainTeamByUserId(userId); var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest() @@ -1032,15 +1032,20 @@ namespace BBWYB.Server.Business ProductIdList = new List() { productId }, BargainTeamIdList = user.isBargainTeam ? new List() { user.user.DepartmentId } : null }); - var mergePssList = new List(); + var mergePssList = new List(); foreach (var scheme in purchaseSchemeList) { foreach (var psp in scheme.PurchaseSchemeProductList) { foreach (var pss in psp.PurchaseSchemeProductSkuList) { - if (!mergePssList.Any(x => x.PurchaseSkuId == pss.PurchaseSkuId)) - mergePssList.Add(pss); + var mergePss = mergePssList.FirstOrDefault(x => x.PurchaseSkuId == pss.PurchaseSkuId); + if (mergePss == null) + { + mergePss = pss.Map(); + mergePssList.Add(mergePss); + } + mergePss.BelongSkuIdList.Add(pss.SkuId); } } } diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 29ee702..03718f8 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -642,7 +642,7 @@ namespace BBWYB.Server.Business task.BargainTeamTaskList = bargainTeamTaskList.Where(sbt => sbt.SpuOptimizationTaskId == task.Id).ToList(); task.TimeLimitTask = timelimitTaskList.FirstOrDefault(t => t.TaskId == task.Id); if (task.TimeLimitTask != null) - timeLimitRules.CalculateLessTimeForWorkHour(task.TimeLimitTask.ExpirationTime.Value); + task.TimeLimitTask.RemainingTime = timeLimitRules.CalculateLessTimeForWorkHour(task.TimeLimitTask.ExpirationTime.Value); task.IsCompletedByCurrentTeam = task.BargainTeamTaskList.FirstOrDefault(sbt => sbt.BelongTeamId == uInfo.department.Id)?.IsOptimizationCompleted == true; task.SkuOptimizationTaskList = skuTaskList.Where(st => st.SpuOptimizationTaskId == task.Id).ToList(); From aaf2239bd8dc5909882e92a0141dff3b751cab0c Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 21 Mar 2024 23:14:21 +0800 Subject: [PATCH 195/222] =?UTF-8?q?=E6=8C=89spu=E6=9F=A5=E8=AF=A2=E6=89=80?= =?UTF-8?q?=E6=9C=89=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88=E7=9A=84=E6=89=80?= =?UTF-8?q?=E6=9C=89=E9=87=87=E8=B4=AD=E9=85=8D=E4=BB=B6=E5=88=97=E8=A1=A8?= =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0=E9=87=87=E8=B4=AD=E9=85=8D=E4=BB=B6?= =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.API/Controllers/PurchaseSchemeController.cs | 2 +- BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index 0665270..f2ebabb 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -65,7 +65,7 @@ namespace BBWYB.Server.API.Controllers /// /// [HttpGet("{productId}")] - public IList GetMergePurchaseSchemeProductSkuByProductId([FromRoute]string productId) + public IList GetMergePurchaseSchemeProductSkuByProductId([FromRoute]string productId) { return purchaseSchemeBusiness.GetMergePurchaseSchemeProductSkuByProductId(productId, GetUserId()); } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index c5f2213..7e1861a 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1030,7 +1030,8 @@ namespace BBWYB.Server.Business var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest() { ProductIdList = new List() { productId }, - BargainTeamIdList = user.isBargainTeam ? new List() { user.user.DepartmentId } : null + BargainTeamIdList = user.isBargainTeam ? new List() { user.user.DepartmentId } : null, + IncludePurchaseSkuBasicInfo = 1 }); var mergePssList = new List(); foreach (var scheme in purchaseSchemeList) From 28e1850879701aaf47453e06585266d6d04ba792 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 21 Mar 2024 23:52:15 +0800 Subject: [PATCH 196/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=95=86=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=B8=BB=E8=90=A5=E7=B1=BB=E7=9B=AE=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 7e1861a..be6966c 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -848,9 +848,44 @@ namespace BBWYB.Server.Business } + #region 采购商/标签/主营类目 List purchaserIdList = purchaseSchemeProductList.Select(x => x.PurchaserId).Distinct().ToList(); var dbPurchaserList = fsql.Select(purchaserIdList).ToList(); + var purchaserExtendInfoList = fsql.Select() + .InnerJoin((pei, per) => pei.Id == per.ExtendedInfoId) + .Where((pei, per) => purchaserIdList.Contains(per.PurchaserId)) + .ToList((pei, per) => new + { + pei.Id, + pei.Name, + pei.Type, + per.PurchaserId, + pei.ExtendInfo + }); + foreach (var purchaser in dbPurchaserList) + { + purchaser.TagList = purchaserExtendInfoList.Where(pei => pei.PurchaserId == purchaser.Id && + pei.Type == Enums.PurchaserBasicInfoType.标签).Select(pei => new PurchaserExtendedInfoResponse() + { + Id = pei.Id, + ExtendInfo = pei.ExtendInfo, + Name = pei.Name, + Type = pei.Type + }).ToList(); + + purchaser.CategoryList = purchaserExtendInfoList.Where(pei => pei.PurchaserId == purchaser.Id && + pei.Type == Enums.PurchaserBasicInfoType.主营类目) + .Select(pei => new PurchaserExtendedInfoResponse() + { + Id = pei.Id, + ExtendInfo = pei.ExtendInfo, + Name = pei.Name, + Type = pei.Type + }).ToList(); + } + #endregion + foreach (var scheme in purchaseSchemeList) { var schemeProductList = purchaseSchemeProductList.Where(ps => ps.SkuPurchaseSchemeId == scheme.Id); From 61859aef68c442ece814a21d6e51c7296981b527 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 22 Mar 2024 01:44:13 +0800 Subject: [PATCH 197/222] =?UTF-8?q?=E6=98=AF=E5=90=A6baoyou?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 84 ++++++++++++------- .../SkuOptimization/OptimizationBusiness.cs | 4 +- .../Db/PurchaseScheme/PurchaseScheme.cs | 6 ++ ...UpdateCompetitiveTenderQuotationRequest.cs | 5 ++ .../BatchEditPurchaseSkuActualPriceRequest.cs | 5 ++ .../InputPurchaseSchemeRequest.cs | 5 ++ .../MergePurchaseSchemeProductSkuResponse.cs | 5 ++ .../PurchaseSchemeProductSkuResponse.cs | 5 ++ 8 files changed, 88 insertions(+), 31 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index be6966c..ec8354b 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -219,7 +219,12 @@ namespace BBWYB.Server.Business public void EditPurchaseSchemeV2(BatchCURDSchemeRequest batchCURDSchemeRequest, string userId) { - //nLogManager.Default().Info($"EditPurchaseSchemeV2 {JsonConvert.SerializeObject(batchCURDSchemeRequest)}"); + var uInfo = userBusiness.GetisBargainTeamByUserId(userId); + EditPurchaseSchemeV2(batchCURDSchemeRequest, uInfo); + } + + public void EditPurchaseSchemeV2(BatchCURDSchemeRequest batchCURDSchemeRequest, (User user, Userdepartment department, bool isBargainTeam) uInfo) + { List dbSchemeGroupList = null; List dbPurchaseSchemeList = null; @@ -345,7 +350,7 @@ namespace BBWYB.Server.Business } } - var uInfo = userBusiness.GetisBargainTeamByUserId(userId); + //var uInfo = userBusiness.GetisBargainTeamByUserId(userId); if (uInfo.isBargainTeam) { #region 检测是否存在被其他议价组分配的采购商 @@ -479,7 +484,7 @@ namespace BBWYB.Server.Business BelongBargainTeamId = uInfo.isBargainTeam ? uInfo.department.Id : string.Empty, BelongBargainTeamName = uInfo.isBargainTeam ? uInfo.department.DepartmentName : string.Empty, UpdateTeamId = uInfo.department.Id, - UpdateUserId = userId, + UpdateUserId = uInfo.user.Id, IsBargainTeamUpdate = uInfo.isBargainTeam }; addPurchaseSchemeList.Add(ps); @@ -627,9 +632,10 @@ namespace BBWYB.Server.Business .Set(ps => ps.Version, newVersion) .Set(ps => ps.BelongBargainTeamId, belongBargainTeamId) .Set(ps => ps.BelongBargainTeamName, belongBargainTeamName) - .Set(ps => ps.UpdateUserId, userId) + .Set(ps => ps.UpdateUserId, uInfo.user.Id) .Set(ps => ps.UpdateTeamId, uInfo.department.Id) - .Set(ps => ps.IsBargainTeamUpdate, uInfo.isBargainTeam); + .Set(ps => ps.IsBargainTeamUpdate, uInfo.isBargainTeam) + .Set(ps => ps.IsFreeFreight, psReq.IsFreeFreight); updatePurchaseSchemeList.Add(psupdate); #region 处理历史版本 @@ -865,24 +871,24 @@ namespace BBWYB.Server.Business }); foreach (var purchaser in dbPurchaserList) { - purchaser.TagList = purchaserExtendInfoList.Where(pei => pei.PurchaserId == purchaser.Id && + purchaser.TagList = purchaserExtendInfoList.Where(pei => pei.PurchaserId == purchaser.Id && pei.Type == Enums.PurchaserBasicInfoType.标签).Select(pei => new PurchaserExtendedInfoResponse() - { - Id = pei.Id, - ExtendInfo = pei.ExtendInfo, - Name = pei.Name, - Type = pei.Type - }).ToList(); - - purchaser.CategoryList = purchaserExtendInfoList.Where(pei => pei.PurchaserId == purchaser.Id && - pei.Type == Enums.PurchaserBasicInfoType.主营类目) - .Select(pei => new PurchaserExtendedInfoResponse() { Id = pei.Id, ExtendInfo = pei.ExtendInfo, Name = pei.Name, Type = pei.Type }).ToList(); + + purchaser.CategoryList = purchaserExtendInfoList.Where(pei => pei.PurchaserId == purchaser.Id && + pei.Type == Enums.PurchaserBasicInfoType.主营类目) + .Select(pei => new PurchaserExtendedInfoResponse() + { + Id = pei.Id, + ExtendInfo = pei.ExtendInfo, + Name = pei.Name, + Type = pei.Type + }).ToList(); } #endregion @@ -913,9 +919,10 @@ namespace BBWYB.Server.Business schemeProduct.PurchaserTag = purchaser.Tag; } - if (request.IncludePurchaseSkuStatisticsInfo == 1) + foreach (var schemeProductSku in schemeProduct.PurchaseSchemeProductSkuList) { - foreach (var schemeProductSku in schemeProduct.PurchaseSchemeProductSkuList) + schemeProductSku.IsFreeFreight = scheme.IsFreeFreight; + if (request.IncludePurchaseSkuStatisticsInfo == 1) { var pssStatistic = purchaseSkuStatisticList.FirstOrDefault(x => x.PurchaseSkuId == schemeProductSku.PurchaseSkuId); schemeProductSku.PurchasedAmount = pssStatistic?.PurchasedAmount ?? 0M; @@ -1002,7 +1009,8 @@ namespace BBWYB.Server.Business var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest() { IncludePurchaseSkuBasicInfo = request.IncludePurchaseSkuBasicInfo, - SchemeGroupIdList = groupIds + SchemeGroupIdList = groupIds, + BargainTeamIdList = user.isBargainTeam ? new List() { user.user.DepartmentId } : null, }); foreach (var psg in purchaseSchemeGroupsList) psg.PurchaseSchemeList = purchaseSchemeList.Where(ps => ps.SchemeGroupId == psg.Id).ToList(); @@ -1560,10 +1568,21 @@ namespace BBWYB.Server.Business /// 批量修改采购配件实际单价 /// /// - /// /// /// - public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request, List? schemeIdList, string userId) + public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request, string userId) + { + var user = userBusiness.GetisBargainTeamByUserId(userId); + BatchEditPurchaseSkuActualPrice(request, user); + } + + /// + /// 批量修改采购配件实际单价 + /// + /// + /// + /// + public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request, (User user, Userdepartment department, bool isBargainTeam) uInfo) { if (request.ItemList == null || request.ItemList.Count() == 0) throw new BusinessException("缺少参数"); @@ -1571,17 +1590,19 @@ namespace BBWYB.Server.Business var purchseSkuIdList = request.ItemList.Select(x => x.PurchaseSkuId).Distinct().ToList(); - if (schemeIdList == null || schemeIdList.Count() == 0) - schemeIdList = fsql.Select() - .Where(pss => purchseSkuIdList.Contains(pss.PurchaseSkuId)) - .Distinct() - .ToList(pss => pss.SkuPurchaseSchemeId); + + var schemeRelationList = fsql.Select() + .Where(pss => purchseSkuIdList.Contains(pss.PurchaseSkuId)) + .Distinct() + .ToList(pss => new { pss.SkuPurchaseSchemeId, pss.PurchaseSkuId }); + var schemeIdList = schemeRelationList.Select(x => x.SkuPurchaseSchemeId).Distinct().ToList(); var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest() { IncludePurchaseSkuBasicInfo = 1, IncludeSkuStatisticsInfo = 0, - SchemeIdList = schemeIdList + SchemeIdList = schemeIdList, + BargainTeamIdList = uInfo.isBargainTeam ? new List() { uInfo.user.DepartmentId } : null, }); if (purchaseSchemeList.Count() == 0) @@ -1598,7 +1619,11 @@ namespace BBWYB.Server.Business throw new BusinessException($"采购配件{pss.PurchaseSkuId}已失效"); var requestSku = request.ItemList.FirstOrDefault(x => x.PurchaseSkuId == pss.PurchaseSkuId); //x.SkuId == pss.SkuId if (requestSku != null) + { pss.ActualPrice = requestSku.ActualPrice; + if (requestSku.IsFreeFreight != null) + ps.IsFreeFreight = requestSku.IsFreeFreight; + } } } } @@ -1637,9 +1662,10 @@ namespace BBWYB.Server.Business PurchaseSkuId = pss.PurchaseSkuId, PurchaseSkuSpecId = pss.PurchaseSkuSpecId }).ToList() - }).ToList() + }).ToList(), + IsFreeFreight = ps.IsFreeFreight }).ToList() - }, userId); + }, uInfo); } diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 03718f8..d8d8941 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -360,9 +360,9 @@ namespace BBWYB.Server.Business //筛选出不在竞标任务中的采购方案 var noJoinCompetitiveTenderPurchaseSchemeList = relationPurchaseSchemeList.Where(ps => !competitiveTenderTaskList.Any(ct => ct.SchemeId == ps.Id)).ToList(); - var noJoinCompetitiveTenderPurchaseSchemeIdList = noJoinCompetitiveTenderPurchaseSchemeList.Select(x => x.Id).ToList(); + //var noJoinCompetitiveTenderPurchaseSchemeIdList = noJoinCompetitiveTenderPurchaseSchemeList.Select(x => x.Id).ToList(); //批量更新配件 - purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request.Map(), noJoinCompetitiveTenderPurchaseSchemeIdList, userId); + purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request.Map(), uInfo); if (noJoinCompetitiveTenderPurchaseSchemeList.Count() > 0) { diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs index 7fc66b4..f3d62f2 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs @@ -140,6 +140,12 @@ namespace BBWYB.Server.Model /// [Column(DbType = "bit")] public bool? IsBargainTeamUpdate { get; set; } = false; + + /// + /// 是否包邮 + /// + [Column(DbType = "bit")] + public bool? IsFreeFreight { get; set; } = false; } } diff --git a/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs b/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs index c0df1a2..0e41e79 100644 --- a/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Optimization/BatchUpdateCompetitiveTenderQuotationRequest.cs @@ -36,5 +36,10 @@ /// 实际单价 /// public decimal? ActualPrice { get; set; } + + /// + /// 是否包邮 + /// + public bool IsFreeFreight { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs index fbd233a..61e9185 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs @@ -26,5 +26,10 @@ /// 实际单价 /// public decimal? ActualPrice { get; set; } + + /// + /// 是否包邮 + /// + public bool? IsFreeFreight { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs index 25595ba..298bd48 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs @@ -23,6 +23,11 @@ namespace BBWYB.Server.Model.Dto public string ProductId { get; set; } public string SkuId { get; set; } + /// + /// 是否包邮 + /// + public bool? IsFreeFreight { get; set; } = false; + public List PurchaseSchemeProductList { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs index f291ef0..609441b 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs @@ -87,5 +87,10 @@ /// 采购商品链接 /// public string PurchaseUrl { get; set; } + + /// + /// 是否包邮 + /// + public bool? IsFreeFreight { get; set; } = false; } } diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs index b07adc3..ef8acd0 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs @@ -42,5 +42,10 @@ /// 采购件数,仅在查询条件IncludePurchaseSkuStatisticsInfo=1时具备该值 /// public int? PurchasedItemCount { get; set; } = 0; + + /// + /// 是否包邮,继承自采购方案 + /// + public bool? IsFreeFreight { get; set; } = false; } } From 6c6297313233fa901c1d56f674b75f7b3cc5060d Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 22 Mar 2024 02:04:29 +0800 Subject: [PATCH 198/222] =?UTF-8?q?=E6=8C=89spu=E6=9F=A5=E8=AF=A2=E6=89=80?= =?UTF-8?q?=E6=9C=89=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88=E7=9A=84=E6=89=80?= =?UTF-8?q?=E6=9C=89=E9=87=87=E8=B4=AD=E9=85=8D=E4=BB=B6=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.API/Controllers/PurchaseSchemeController.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index f2ebabb..a5c40f1 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -65,7 +65,7 @@ namespace BBWYB.Server.API.Controllers /// /// [HttpGet("{productId}")] - public IList GetMergePurchaseSchemeProductSkuByProductId([FromRoute]string productId) + public IList GetMergePurchaseSchemeProductSkuByProductId([FromRoute] string productId) { return purchaseSchemeBusiness.GetMergePurchaseSchemeProductSkuByProductId(productId, GetUserId()); } @@ -217,7 +217,7 @@ namespace BBWYB.Server.API.Controllers [HttpPost] public void BatchEditPurchaseSkuActualPrice([FromBody] BatchEditPurchaseSkuActualPriceRequest request) { - purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request, null, GetUserId()); + purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request, GetUserId()); } /// From 8b7ef19a4adfdb157b8ea4b32ffcc7b46b314abd Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 22 Mar 2024 11:48:40 +0800 Subject: [PATCH 199/222] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8A=A5=E4=BB=B7?= =?UTF-8?q?=E9=99=90=E5=AE=9Aspu=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 7 ++++++- .../SkuOptimization/OptimizationBusiness.cs | 8 +++++++- .../BatchEditPurchaseSkuActualPriceRequest.cs | 5 +++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index ec8354b..6ad788f 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1592,9 +1592,14 @@ namespace BBWYB.Server.Business var schemeRelationList = fsql.Select() + .WhereIf(!string.IsNullOrEmpty(request.ProductId), pss => pss.ProductId == request.ProductId) .Where(pss => purchseSkuIdList.Contains(pss.PurchaseSkuId)) .Distinct() - .ToList(pss => new { pss.SkuPurchaseSchemeId, pss.PurchaseSkuId }); + .ToList(pss => new + { + pss.SkuPurchaseSchemeId, + pss.PurchaseSkuId + }); var schemeIdList = schemeRelationList.Select(x => x.SkuPurchaseSchemeId).Distinct().ToList(); var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest() diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index d8d8941..cb0a146 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -362,7 +362,13 @@ namespace BBWYB.Server.Business var noJoinCompetitiveTenderPurchaseSchemeList = relationPurchaseSchemeList.Where(ps => !competitiveTenderTaskList.Any(ct => ct.SchemeId == ps.Id)).ToList(); //var noJoinCompetitiveTenderPurchaseSchemeIdList = noJoinCompetitiveTenderPurchaseSchemeList.Select(x => x.Id).ToList(); //批量更新配件 - purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request.Map(), uInfo); + + { + var batchEditPurchaseSkuActualPriceRequest = request.Map(); + batchEditPurchaseSkuActualPriceRequest.ProductId = spuOptimizationTask.ProductId; + purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(batchEditPurchaseSkuActualPriceRequest, uInfo); + } + if (noJoinCompetitiveTenderPurchaseSchemeList.Count() > 0) { diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs index 61e9185..a43d86d 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchEditPurchaseSkuActualPriceRequest.cs @@ -2,6 +2,11 @@ { public class BatchEditPurchaseSkuActualPriceRequest { + /// + /// 可选条件 + /// + public string ProductId { get; set; } + public IList ItemList { get; set; } } From 8f77742ce9bef8612e9553be08da7b9611e98b31 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 22 Mar 2024 11:55:37 +0800 Subject: [PATCH 200/222] =?UTF-8?q?=E5=90=88=E5=B9=B6=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E5=95=86=E5=A2=9E=E5=8A=A0=E4=B8=BB=E8=90=A5=E7=B1=BB=E7=9B=AE?= =?UTF-8?q?=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/Response/Optimization/MergePurchaserResponse.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs index 6fc4310..87fb250 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs @@ -7,7 +7,16 @@ namespace BBWYB.Server.Model.Dto public MergePurchaserResponse() { MergePurchaseSchemeProductSkuList = new List(); + CategoryList = new List(); + TagList = new List(); } public List MergePurchaseSchemeProductSkuList { get; set; } + + public IList CategoryList { get; set; } + + /// + /// 自定义标签集合 + /// + public IList TagList { get; set; } } } From f2406319269569a02aae40ba613267a70a979b79 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 22 Mar 2024 11:59:42 +0800 Subject: [PATCH 201/222] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/Response/Optimization/MergePurchaserResponse.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs index 87fb250..9839f08 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaserResponse.cs @@ -12,10 +12,13 @@ namespace BBWYB.Server.Model.Dto } public List MergePurchaseSchemeProductSkuList { get; set; } + /// + /// 主营类目列表 + /// public IList CategoryList { get; set; } /// - /// 自定义标签集合 + /// 标签列表 /// public IList TagList { get; set; } } From a1f4fc8880c75ed101e8b46bd4ccb6d89ece7a0c Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 22 Mar 2024 17:40:09 +0800 Subject: [PATCH 202/222] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=AD=90=E9=83=A8=E9=97=A8=E9=AA=8C=E8=AF=81=E8=AE=AE=E4=BB=B7?= =?UTF-8?q?=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Client/App.xaml.cs | 2 +- BBWYB.Client/GlobalContext.cs | 2 +- BBWYB.Client/ViewModels/WebVM.cs | 59 ++++++++++++------- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 45 +++++++------- .../SkuOptimization/OptimizationBusiness.cs | 34 +++++------ BBWYB.Server.Business/Users/userBusiness.cs | 22 ++++--- 6 files changed, 94 insertions(+), 70 deletions(-) diff --git a/BBWYB.Client/App.xaml.cs b/BBWYB.Client/App.xaml.cs index 0548741..826b4a8 100644 --- a/BBWYB.Client/App.xaml.cs +++ b/BBWYB.Client/App.xaml.cs @@ -35,7 +35,7 @@ namespace BBWYB.Client //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTM1MzMwMzI4ODkyMTQ5NzYwIiwidGVhbUlkIjoiMTUxNjk3NDI1MDU0MjUwMTg4OCIsInNvblRlYW1JZHMiOiIxNDM2Mjg4NTAwMjM1MjQzNTIwIiwiZXhwIjoxNzI2MzAwNjY0fQ.hPSbgJEuTt0MLy_7YkSJX4rRG3drJAfso-5IS8ZlOkY"; //议价2组 - userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMzk1NzA4MjA4NjU1MzcyMjg4IiwidGVhbUlkIjoiMTc2MDk3MTY4ODk2NDUyNjA4MCIsInNvblRlYW1JZHMiOiIiLCJleHAiOjE3NDIxOTYxMDF9.pt1onwf4f4QKyuT1kFWtcRw8LZo9s64CmHqrdI4fD5k"; + userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMzk1NzA4MjA4NjU1MzcyMjg4IiwidGVhbUlkIjoiMTYyMDM0MjAxNDcwNjk3ODgxNiIsInNvblRlYW1JZHMiOiIxNzYwOTcxNjg4OTY0NTI2MDgwIiwiZXhwIjoxNzQyNjMwODk0fQ.Vtq2MU1Qd9Oo192udkA01ZAwiQgQxj2m-pkayGZ1d3I"; //拳探店铺 陈默 //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNjI0OTUxNjgzNTc2NTAwMjI0IiwidGVhbUlkIjoiMTYyMDM0MjAxNDcwNjk3ODgxNiIsInNvblRlYW1JZHMiOiIxNjIwMzQyMDE0NzA2OTc4ODE2LDE2MjAzNDM4Mjc0NzI1ODQ3MDQsMTYyMDM0NDAzMzczNTg3MjUxMiwxNjIwMzQ0MDkyODI5NDIxNTY4LDE2MjAzNDQxNDA4NTAwMDgwNjQiLCJleHAiOjE3MjA3NjQzMjV9.Q8fiKXCHgvzbm7NDEre-MeoSju_AmC6Ae6eDY22rUAw"; diff --git a/BBWYB.Client/GlobalContext.cs b/BBWYB.Client/GlobalContext.cs index a883c5d..e35f704 100644 --- a/BBWYB.Client/GlobalContext.cs +++ b/BBWYB.Client/GlobalContext.cs @@ -20,7 +20,7 @@ namespace BBWYB.Client { public GlobalContext() { - BBWYBApiVersion = "10040"; + BBWYBApiVersion = "10041"; } private User user; diff --git a/BBWYB.Client/ViewModels/WebVM.cs b/BBWYB.Client/ViewModels/WebVM.cs index 9f3b3d5..a6eeee8 100644 --- a/BBWYB.Client/ViewModels/WebVM.cs +++ b/BBWYB.Client/ViewModels/WebVM.cs @@ -17,6 +17,7 @@ namespace BBWYB.Client.ViewModels private MdsApiService mdsApiService; private MenuModel selectedMenuModel; private bool isLoading; + private IList managerDepartment; ShopService shopService; public GlobalContext GlobalContext { get; set; } public bool IsLoading { get => isLoading; set { SetProperty(ref isLoading, value); } } @@ -28,6 +29,7 @@ namespace BBWYB.Client.ViewModels this.mdsApiService = mdsApiService; this.GlobalContext = globalContext; this.shopService = shopService; + this.managerDepartment = new List() { "董事办", "财务部", "技术部", "总经办" }; Task.Factory.StartNew(Login); } @@ -47,36 +49,49 @@ namespace BBWYB.Client.ViewModels 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 departmentList = null; - var shopList = new List(); - foreach (var d in allDepartmentList) - shopList.AddRange(d.ShopList); - GlobalContext.User.ShopList = shopList; + if (managerDepartment.Contains(GlobalContext.User.TeamName) || + managerDepartment.Any(m => GlobalContext.User.SonDepartmentNames.Contains(m))) + { + var res = shopService.GetDepartmentList(); + if (!res.Success) + throw new Exception(res.Msg); + var allDepartmentList = res.Data.Map>(); - IList departmentList = null; + var shopList = new List(); + foreach (var d in allDepartmentList) + shopList.AddRange(d.ShopList); + GlobalContext.User.ShopList = shopList; + departmentList = allDepartmentList.Where(d => d.Name.Contains("供应链")).ToList(); + } + else + { + var response = mdsApiService.GetShopDetailList(); + if (!response.Success) + throw new Exception(response.Msg); + departmentList = response.Data.Where(d => d.Name.Contains("供应链")).ToList(); + } - //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(); - foreach (var d in departmentList) - { - if (d.ShopList != null && d.ShopList.Count > 0) - { - foreach (var s in d.ShopList) - shopIds.Add(s.ShopId.ToString()); - } - } + + //departmentList = allDepartmentList.Where(d => d.Name.Contains("供应链")).ToList(); + //if (departmentList.Count == 0) + // throw new Exception("缺少有效的部门数据"); + + //var shopIds = new List(); + //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; diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 6ad788f..f43805f 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -223,7 +223,7 @@ namespace BBWYB.Server.Business EditPurchaseSchemeV2(batchCURDSchemeRequest, uInfo); } - public void EditPurchaseSchemeV2(BatchCURDSchemeRequest batchCURDSchemeRequest, (User user, Userdepartment department, bool isBargainTeam) uInfo) + public void EditPurchaseSchemeV2(BatchCURDSchemeRequest batchCURDSchemeRequest, (User user, Userdepartment mainTeam, bool isBargainTeam, Userdepartment? bargainTeam) uInfo) { List dbSchemeGroupList = null; @@ -367,7 +367,7 @@ namespace BBWYB.Server.Business BelongType = p.BelongType }); var noCurrentBargainTeamList = dbPurchaserList.Where(dp => !string.IsNullOrEmpty(dp.BelongBargainTeamId) && - dp.BelongBargainTeamId != uInfo.user.DepartmentId).ToList(); + dp.BelongBargainTeamId != uInfo.bargainTeam.Id).ToList(); if (noCurrentBargainTeamList.Count() > 0) throw new BusinessException($"不能包含被其他议价组使用的采购商 [{string.Join(",", noCurrentBargainTeamList.Select(x => x.Name))}]"); } @@ -378,7 +378,7 @@ namespace BBWYB.Server.Business if (batchCURDSchemeRequest.AddPurchaseSchemeList != null && batchCURDSchemeRequest.AddPurchaseSchemeList.Count() > 0) { var addSchemeSkuList = batchCURDSchemeRequest.AddPurchaseSchemeList.Select(ps => ps.SkuId).Distinct().ToList(); - var dbSkuSchemeCountList = fsql.Select().Where(ps => ps.BelongBargainTeamId == uInfo.user.DepartmentId && + var dbSkuSchemeCountList = fsql.Select().Where(ps => ps.BelongBargainTeamId == uInfo.bargainTeam.Id && addSchemeSkuList.Contains(ps.SkuId)) .GroupBy(ps => ps.SkuId) .ToList(g => new @@ -453,10 +453,10 @@ namespace BBWYB.Server.Business { Id = idGenerator.NewLong(), CreateTime = DateTime.Now, - GroupName = $"{firstScheme.ProductId}-{dbPurchaseSchemeGroupIndex.Index}{(uInfo.isBargainTeam ? $"-{uInfo.department.DepartmentName}" : string.Empty)}", + GroupName = $"{firstScheme.ProductId}-{dbPurchaseSchemeGroupIndex.Index}", ProductId = firstScheme.ProductId, ShopId = firstScheme.ShopId, - BelongBargainTeamId = uInfo.department.Id + BelongBargainTeamId = uInfo.bargainTeam?.Id }; insertPurchaseSchemeGroupsList.Add(insertSchemeGroup); newPurchaseGroupId = insertSchemeGroup.Id; @@ -481,9 +481,9 @@ namespace BBWYB.Server.Business HYSchemeId = psReq.HYSchemeId, SchemeGroupId = psReq.SchemeGroupId ?? 0, Version = 1, - BelongBargainTeamId = uInfo.isBargainTeam ? uInfo.department.Id : string.Empty, - BelongBargainTeamName = uInfo.isBargainTeam ? uInfo.department.DepartmentName : string.Empty, - UpdateTeamId = uInfo.department.Id, + BelongBargainTeamId = uInfo.isBargainTeam ? uInfo.bargainTeam?.Id : string.Empty, + BelongBargainTeamName = uInfo.isBargainTeam ? uInfo.bargainTeam?.DepartmentName : string.Empty, + UpdateTeamId = uInfo.isBargainTeam ? uInfo.bargainTeam?.Id : uInfo.mainTeam.Id, UpdateUserId = uInfo.user.Id, IsBargainTeamUpdate = uInfo.isBargainTeam }; @@ -620,8 +620,8 @@ namespace BBWYB.Server.Business insertHistoryPSPList.Add(historyPsp); #endregion } - var belongBargainTeamId = uInfo.isBargainTeam ? uInfo.department.Id : string.Empty; - var belongBargainTeamName = uInfo.isBargainTeam ? uInfo.department.DepartmentName : string.Empty; + var belongBargainTeamId = uInfo.isBargainTeam ? uInfo.bargainTeam?.Id : string.Empty; + var belongBargainTeamName = uInfo.isBargainTeam ? uInfo.bargainTeam?.DepartmentName : string.Empty; var psupdate = fsql.Update(schemeId) .Set(ps => ps.DefaultCost, defaultCost) @@ -633,7 +633,7 @@ namespace BBWYB.Server.Business .Set(ps => ps.BelongBargainTeamId, belongBargainTeamId) .Set(ps => ps.BelongBargainTeamName, belongBargainTeamName) .Set(ps => ps.UpdateUserId, uInfo.user.Id) - .Set(ps => ps.UpdateTeamId, uInfo.department.Id) + .Set(ps => ps.UpdateTeamId, uInfo.isBargainTeam ? uInfo.bargainTeam?.Id : uInfo.mainTeam.Id) .Set(ps => ps.IsBargainTeamUpdate, uInfo.isBargainTeam) .Set(ps => ps.IsFreeFreight, psReq.IsFreeFreight); updatePurchaseSchemeList.Add(psupdate); @@ -667,8 +667,8 @@ namespace BBWYB.Server.Business { foreach (var p in newPurchaserList) { - p.BelongBargainTeamId = uInfo.department.Id; - p.BelongBargainTeamName = uInfo.department.DepartmentName; + p.BelongBargainTeamId = uInfo.bargainTeam?.Id; + p.BelongBargainTeamName = uInfo.bargainTeam?.DepartmentName; p.BelongType = Enums.PurchaserBelongType.临时; } } @@ -998,10 +998,11 @@ namespace BBWYB.Server.Business public IList GetPurchaseSchemeAndGroupList(QuerySchemeAndGroupRequest request, string userId) { var user = userBusiness.GetisBargainTeamByUserId(userId); + var bargainTeamId = user.bargainTeam?.Id; var purchaseSchemeGroupsList = fsql.Select() .Where(psg => psg.ShopId == request.ShopId && request.ProductIdList.Contains(psg.ProductId)) - .WhereIf(user.isBargainTeam, psg => psg.BelongBargainTeamId == user.department.Id) + .WhereIf(user.isBargainTeam, psg => psg.BelongBargainTeamId == bargainTeamId) .ToList(); if (purchaseSchemeGroupsList.Count() > 0) { @@ -1010,7 +1011,7 @@ namespace BBWYB.Server.Business { IncludePurchaseSkuBasicInfo = request.IncludePurchaseSkuBasicInfo, SchemeGroupIdList = groupIds, - BargainTeamIdList = user.isBargainTeam ? new List() { user.user.DepartmentId } : null, + BargainTeamIdList = user.isBargainTeam ? new List() { user.bargainTeam.Id } : null, }); foreach (var psg in purchaseSchemeGroupsList) psg.PurchaseSchemeList = purchaseSchemeList.Where(ps => ps.SchemeGroupId == psg.Id).ToList(); @@ -1073,7 +1074,7 @@ namespace BBWYB.Server.Business var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest() { ProductIdList = new List() { productId }, - BargainTeamIdList = user.isBargainTeam ? new List() { user.user.DepartmentId } : null, + BargainTeamIdList = user.isBargainTeam ? new List() { user.bargainTeam.Id } : null, IncludePurchaseSkuBasicInfo = 1 }); var mergePssList = new List(); @@ -1582,7 +1583,7 @@ namespace BBWYB.Server.Business /// /// /// - public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request, (User user, Userdepartment department, bool isBargainTeam) uInfo) + public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request, (User user, Userdepartment mainTeam, bool isBargainTeam, Userdepartment? bargainTeam) uInfo) { if (request.ItemList == null || request.ItemList.Count() == 0) throw new BusinessException("缺少参数"); @@ -1607,7 +1608,7 @@ namespace BBWYB.Server.Business IncludePurchaseSkuBasicInfo = 1, IncludeSkuStatisticsInfo = 0, SchemeIdList = schemeIdList, - BargainTeamIdList = uInfo.isBargainTeam ? new List() { uInfo.user.DepartmentId } : null, + BargainTeamIdList = uInfo.isBargainTeam ? new List() { uInfo.bargainTeam.Id } : null, }); if (purchaseSchemeList.Count() == 0) @@ -1676,7 +1677,7 @@ namespace BBWYB.Server.Business public IList GetGoodsSourceTagsInfo(List requestList, string userId) { - var uInfo = userBusiness.GetisBargainTeamByUserId(userId); + var uInfo = userBusiness.GetisBargainTeamByUserId(userId, true); var list = new List(); var purchaseSkuIdList = requestList.Select(x => x.PurchaseSkuId).ToList(); var purchaserIdList = requestList.Select(x => x.PurchaserId).ToList(); @@ -1706,7 +1707,7 @@ namespace BBWYB.Server.Business var goodsSourceTag = new GoodsSourceTagResponse() { PurchaseSku = purchasedSku.PurchaseSkuId, - GoodsSourceTagType = purchasedSku.BelongBargainTeamId != uInfo.user.DepartmentId ? + GoodsSourceTagType = purchasedSku.BelongBargainTeamId != uInfo.bargainTeam.Id ? Enums.GoodsSourceTagType.其他组采购过该商品 : Enums.GoodsSourceTagType.本组采购过该商品 }; @@ -1736,7 +1737,7 @@ namespace BBWYB.Server.Business var goodsSourceTag = new GoodsSourceTagResponse() { PurchaseSku = usedSku.PurchaseSkuId, - GoodsSourceTagType = usedSku.BelongBargainTeamId != uInfo.user.DepartmentId ? + GoodsSourceTagType = usedSku.BelongBargainTeamId != uInfo.bargainTeam.Id ? Enums.GoodsSourceTagType.其他组添加过采购方案 : Enums.GoodsSourceTagType.本组添加过采购方案 }; @@ -1777,7 +1778,7 @@ namespace BBWYB.Server.Business list.Add(new GoodsSourceTagResponse() { PurchaseSku = item.PurchaseSkuId, - GoodsSourceTagType = purchaserBySame.BelongBargainTeamId != uInfo.user.DepartmentId ? + GoodsSourceTagType = purchaserBySame.BelongBargainTeamId != uInfo.bargainTeam.Id ? Enums.GoodsSourceTagType.其他组历史采购过该供应商的商品 : Enums.GoodsSourceTagType.本组历史采购过该供应商的商品 }); diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index cb0a146..58b7cc9 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -326,9 +326,9 @@ namespace BBWYB.Server.Business var spuOptimizationTask = fsql.Select(request.SpuOptimizationTaskId).ToOne(); if (spuOptimizationTask == null) throw new BusinessException($"待优化任务{request.SpuOptimizationTaskId}不存在"); - var spuOptimizationBargainTeamTask = fsql.Select().Where(sbt => sbt.SpuOptimizationTaskId == request.SpuOptimizationTaskId && sbt.BelongTeamId == uInfo.department.Id).ToOne(); + var spuOptimizationBargainTeamTask = fsql.Select().Where(sbt => sbt.SpuOptimizationTaskId == request.SpuOptimizationTaskId && sbt.BelongTeamId == uInfo.bargainTeam.Id).ToOne(); if (spuOptimizationBargainTeamTask == null) - throw new BusinessException($"待优化任务{request.SpuOptimizationTaskId}中不存在议价组{uInfo.department.Id}/{uInfo.department.DepartmentName}的子任务"); + throw new BusinessException($"待优化任务{request.SpuOptimizationTaskId}中不存在议价组{uInfo.bargainTeam.Id}/{uInfo.bargainTeam.DepartmentName}的子任务"); var skuIdList = fsql.Select().Where(s => s.SpuOptimizationTaskId == request.SpuOptimizationTaskId).ToList(s => s.SkuId); #endregion @@ -342,7 +342,7 @@ namespace BBWYB.Server.Business //查询竞标任务 var competitiveTenderTaskList = fsql.Select() - .Where(ct => ct.BargainTeamId == uInfo.user.DepartmentId && + .Where(ct => ct.BargainTeamId == uInfo.bargainTeam.Id && ct.SpuOptimizationTaskId == request.SpuOptimizationTaskId && ct.SchemeGroupId == request.SchemeGroupId) .ToList(); @@ -350,7 +350,7 @@ namespace BBWYB.Server.Business //查询配件关联的采购方案 var relationPurchaseSchemeList = fsql.Select() .Where(ps => ps.SchemeGroupId == request.SchemeGroupId && - ps.BelongBargainTeamId == uInfo.user.DepartmentId && + ps.BelongBargainTeamId == uInfo.bargainTeam.Id && fsql.Select() .Where(pss => skuIdList.Contains(pss.SkuId) && purchaseSkuIdList.Contains(pss.PurchaseSkuId) && @@ -368,7 +368,7 @@ namespace BBWYB.Server.Business batchEditPurchaseSkuActualPriceRequest.ProductId = spuOptimizationTask.ProductId; purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(batchEditPurchaseSkuActualPriceRequest, uInfo); } - + if (noJoinCompetitiveTenderPurchaseSchemeList.Count() > 0) { @@ -376,7 +376,7 @@ namespace BBWYB.Server.Business { Id = idGenerator.NewLong(), CreateTime = DateTime.Now, - BargainTeamId = uInfo.department.Id, + BargainTeamId = uInfo.bargainTeam.Id, IsUpdateQuotedPrice = true, SchemeGroupId = ps.SchemeGroupId, SchemeId = ps.Id, @@ -423,11 +423,11 @@ namespace BBWYB.Server.Business var spuOptimizationBargainTeamTaskList = fsql.Select() .Where(sbt => sbt.SpuOptimizationTaskId == taskId) .ToList(); - var currentspuOptimizationBargainTeamTask = spuOptimizationBargainTeamTaskList.FirstOrDefault(sc => sc.BelongTeamId == uInfo.department.Id); + var currentspuOptimizationBargainTeamTask = spuOptimizationBargainTeamTaskList.FirstOrDefault(sc => sc.BelongTeamId == uInfo.bargainTeam.Id); if (currentspuOptimizationBargainTeamTask == null) - throw new BusinessException($"未找到议价组{uInfo.department.DepartmentName}的议价子任务"); + throw new BusinessException($"未找到议价组{uInfo.bargainTeam.DepartmentName}的议价子任务"); if (currentspuOptimizationBargainTeamTask.IsOptimizationCompleted == true) - throw new BusinessException($"{uInfo.department.DepartmentName}的议价子任务已完成"); + throw new BusinessException($"{uInfo.bargainTeam.DepartmentName}的议价子任务已完成"); var skuIdList = fsql.Select() .Where(s => s.SpuOptimizationTaskId == taskId) @@ -439,27 +439,27 @@ namespace BBWYB.Server.Business .ToList(); //查询当前议价组的竞标任务 - var currentBargainTeamCompetitiveTenderTaskList = allBargainTeamCompetitiveTenderTaskList.Where(ct => ct.BargainTeamId == uInfo.department.Id).ToList(); + var currentBargainTeamCompetitiveTenderTaskList = allBargainTeamCompetitiveTenderTaskList.Where(ct => ct.BargainTeamId == uInfo.bargainTeam.Id).ToList(); if (currentBargainTeamCompetitiveTenderTaskList.Count() == 0) - throw new BusinessException($"议价组{uInfo.department.DepartmentName}没有参与竞标的采购方案,不能完成优化任务"); + throw new BusinessException($"议价组{uInfo.bargainTeam.DepartmentName}没有参与竞标的采购方案,不能完成优化任务"); var currentBargainTeamCompetitiveTenderSchemeIdList = currentBargainTeamCompetitiveTenderTaskList.Select(ct => ct.SchemeId).ToList(); #region 验证该议价组的符合sku条件的采购方案是否都参与投标 var waitCheckPurchaseSchemeIdList = fsql.Select() - .Where(ps => ps.BelongBargainTeamId == uInfo.user.DepartmentId && + .Where(ps => ps.BelongBargainTeamId == uInfo.bargainTeam.Id && skuIdList.Contains(ps.SkuId)) .ToList(ps => ps.Id); if (waitCheckPurchaseSchemeIdList.Count() == 0) - throw new BusinessException($"议价组{uInfo.department.DepartmentName}没有参与竞标的采购方案,不能完成优化任务"); + throw new BusinessException($"议价组{uInfo.bargainTeam.DepartmentName}没有参与竞标的采购方案,不能完成优化任务"); var noJoinCompetitiveTenderSchemeIdList = waitCheckPurchaseSchemeIdList.Except(currentBargainTeamCompetitiveTenderSchemeIdList); if (noJoinCompetitiveTenderSchemeIdList.Count() > 0) - throw new BusinessException($"议价组{uInfo.department.DepartmentName}存在{noJoinCompetitiveTenderSchemeIdList.Count()}个符合条件但未参与竞标的采购方案"); + throw new BusinessException($"议价组{uInfo.bargainTeam.DepartmentName}存在{noJoinCompetitiveTenderSchemeIdList.Count()}个符合条件但未参与竞标的采购方案"); #endregion #region 验证该议价组参与投标的采购方案是否都完成报价 if (currentBargainTeamCompetitiveTenderTaskList.Any(ct => ct.IsUpdateQuotedPrice == false)) - throw new BusinessException($"议价组{uInfo.department.DepartmentName}存在未更新报价的投标"); + throw new BusinessException($"议价组{uInfo.bargainTeam.DepartmentName}存在未更新报价的投标"); #endregion currentspuOptimizationBargainTeamTask.IsOptimizationCompleted = true; @@ -649,13 +649,13 @@ namespace BBWYB.Server.Business task.TimeLimitTask = timelimitTaskList.FirstOrDefault(t => t.TaskId == task.Id); if (task.TimeLimitTask != null) task.TimeLimitTask.RemainingTime = timeLimitRules.CalculateLessTimeForWorkHour(task.TimeLimitTask.ExpirationTime.Value); - task.IsCompletedByCurrentTeam = task.BargainTeamTaskList.FirstOrDefault(sbt => sbt.BelongTeamId == uInfo.department.Id)?.IsOptimizationCompleted == true; + task.IsCompletedByCurrentTeam = task.BargainTeamTaskList.FirstOrDefault(sbt => sbt.BelongTeamId == uInfo.bargainTeam?.Id)?.IsOptimizationCompleted == true; task.SkuOptimizationTaskList = skuTaskList.Where(st => st.SpuOptimizationTaskId == task.Id).ToList(); #region 合并分组/采购商/配件 var currentTaskSkuIdList = task.SkuOptimizationTaskList.Select(st => st.SkuId).ToList(); var currentPurchaseSchemeGroups = purchaseSchemeList.Where(p => currentTaskSkuIdList.Contains(p.SkuId) && - p.BelongBargainTeamId == uInfo.department.Id) + p.BelongBargainTeamId == uInfo.bargainTeam?.Id) .GroupBy(p => p.SchemeGroupId) .ToList(); task.MergePurchaseScemeGroupList = new List(); diff --git a/BBWYB.Server.Business/Users/userBusiness.cs b/BBWYB.Server.Business/Users/userBusiness.cs index 2c2ff64..c3439ab 100644 --- a/BBWYB.Server.Business/Users/userBusiness.cs +++ b/BBWYB.Server.Business/Users/userBusiness.cs @@ -19,19 +19,27 @@ namespace BBWYB.Server.Business /// 当用户不属于议价组团队是否抛出错误 /// /// - public (User user, Userdepartment department, bool isBargainTeam) GetisBargainTeamByUserId(string userId, bool throwExWhenUserNotBelongYJ = false) + public (User user, Userdepartment mainTeam, bool isBargainTeam, Userdepartment? bargainTeam) GetisBargainTeamByUserId(string userId, bool throwExWhenUserNotBelongYJ = false) { var user = fsqlManager.MDSfsql.Select(userId).ToOne(); if (user == null) throw new BusinessException("用户不存在"); if (string.IsNullOrEmpty(user.DepartmentId)) throw new BusinessException("该用户没有归属部门"); - var department = fsqlManager.MDSfsql.Select(user.DepartmentId).ToOne(); - if (department == null) - throw new BusinessException("部门不存在"); - if (throwExWhenUserNotBelongYJ && department.ParentDepartmentId != "1760971468360912896") - throw new BusinessException("该用户所在部门不属于议价组"); - return (user, department, department.ParentDepartmentId == "1760971468360912896"); + var queryDeparmentIdList = new List() { user.DepartmentId }; + if (!string.IsNullOrEmpty(user.SonDepartmentIds)) + queryDeparmentIdList.AddRange(user.SonDepartmentIds.Split(",", StringSplitOptions.RemoveEmptyEntries)); + + var departmentList = fsqlManager.MDSfsql.Select(queryDeparmentIdList).ToList(); + if (departmentList.Count() == 0) + throw new BusinessException("未获取部门"); + var mainTeam = departmentList.FirstOrDefault(d => d.Id == user.DepartmentId); + if (mainTeam == null) + throw new BusinessException("主部门不存在"); + var bargainTeam = departmentList.FirstOrDefault(d => d.ParentDepartmentId == "1760971468360912896"); + if (throwExWhenUserNotBelongYJ && bargainTeam == null) + throw new BusinessException("子部门不属于议价组"); + return (user, mainTeam, bargainTeam != null, bargainTeam); } } } From ce00b60c42b3385d26b3e2c36d5620216fbf84ef Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 22 Mar 2024 20:48:14 +0800 Subject: [PATCH 203/222] =?UTF-8?q?spu=E4=BB=BB=E5=8A=A1=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88=E7=BB=9F=E8=AE=A1=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimization/OptimizationBusiness.cs | 15 ++++++++ .../SkuOptimizationTaskResponse.cs | 35 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 58b7cc9..51c4867 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -652,6 +652,21 @@ namespace BBWYB.Server.Business task.IsCompletedByCurrentTeam = task.BargainTeamTaskList.FirstOrDefault(sbt => sbt.BelongTeamId == uInfo.bargainTeam?.Id)?.IsOptimizationCompleted == true; task.SkuOptimizationTaskList = skuTaskList.Where(st => st.SpuOptimizationTaskId == task.Id).ToList(); + #region 组装sku优化任务的采购方案信息 + foreach (var skuTask in task.SkuOptimizationTaskList) + { + skuTask.RelationSchemeList = purchaseSchemeList.Where(ps => ps.SkuId == skuTask.SkuId) + .Select(ps => new SkuOptimizationTaskPurchaseSchemeResponse() + { + SchemeId = ps.Id, + SchemeGroupId = ps.SchemeGroupId, + IsFreeFreight = ps.IsFreeFreight, + LastPurchasePriceCost = ps.LastPurchasePriceCost, + PurchaseSchemeCost = ps.BargainingCost ?? ps.DefaultCost + }).ToList(); + } + #endregion + #region 合并分组/采购商/配件 var currentTaskSkuIdList = task.SkuOptimizationTaskList.Select(st => st.SkuId).ToList(); var currentPurchaseSchemeGroups = purchaseSchemeList.Where(p => currentTaskSkuIdList.Contains(p.SkuId) && diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs index c87d5d7..0b5c60a 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs @@ -12,5 +12,40 @@ namespace BBWYB.Server.Model.Dto public string SkuName { get; set; } public decimal? Price { get; set; } + + /// + /// 关联采购方案信息 + /// + public IList RelationSchemeList { get; set; } + + } + + public class SkuOptimizationTaskPurchaseSchemeResponse + { + /// + /// 采购方案Id + /// + public long SchemeId { get; set; } + + /// + /// 采购方案分组Id + /// + public long SchemeGroupId { get; set; } + + /// + /// 采购方案最近采购成本(配件单价之和) + /// + public decimal? LastPurchasePriceCost { get; set; } = 0.0M; + + /// + /// 采购方案成本 + /// + + public decimal? PurchaseSchemeCost { get; set; } = 0.0M; + + /// + /// 采购方案是否包邮 + /// + public bool? IsFreeFreight { get; set; } = false; } } From 08a668e0c48e2d51f828a8832ad38eab81280fce Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 24 Mar 2024 17:58:05 +0800 Subject: [PATCH 204/222] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9C=AA=E5=AE=8C?= =?UTF-8?q?=E6=88=90spu=E4=BC=98=E5=8C=96=E4=BB=BB=E5=8A=A1=E6=95=B0?= =?UTF-8?q?=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/SkuOptimizationController.cs | 10 ++++++++++ .../SkuOptimization/OptimizationBusiness.cs | 5 +++++ bbwyb.sln | 5 ++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs index f698fd3..f16436c 100644 --- a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs +++ b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs @@ -69,5 +69,15 @@ namespace BBWYB.Server.API.Controllers var userId = GetUserId(); optimizationBusiness.DeleteSchemeGroup(request, userId); } + + /// + /// 获取未完成spu优化任务数量 + /// + /// + [HttpGet] + public long GetNoCompletedSpuOptimizationTaskCount() + { + return optimizationBusiness.GetNoCompletedSpuOptimizationTaskCount(); + } } } diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 51c4867..c8481b8 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -851,5 +851,10 @@ namespace BBWYB.Server.Business var ctTaskIdList = competitiveTenderTaskList.Select(ct => ct.Id); fsql.Delete(ctTaskIdList).ExecuteAffrows(); } + + public long GetNoCompletedSpuOptimizationTaskCount() + { + return fsql.Select().Where(t => t.IsOptimizationCompleted == false).Count(); + } } } diff --git a/bbwyb.sln b/bbwyb.sln index 22ce2b7..37db06b 100644 --- a/bbwyb.sln +++ b/bbwyb.sln @@ -22,6 +22,9 @@ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SJ.Controls", "SJ.Controls\SJ.Controls.csproj", "{0415B31B-5A4E-4F7C-9F3B-69CB6284E4F1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SDK", "SDK", "{B4ED118A-2CFF-4E8F-B395-608E90C6D0C2}" + ProjectSection(SolutionItems) = preProject + BBWYB.Server.Model\Dto\Response\ListResponse.cs = BBWYB.Server.Model\Dto\Response\ListResponse.cs + EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SDKAdapter", "SDKAdapter\SDKAdapter.csproj", "{442CC858-3A90-48EE-932D-756169EAC2A4}" EndProject @@ -50,7 +53,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebTest", "WebTest\WebTest. EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{97653DB2-605C-4582-AC6E-2A09D2E8EB44}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BBWYB.PurchaserCapture", "BBWYB.PurchaserCapture\BBWYB.PurchaserCapture.csproj", "{736D1C5D-4B7A-45C4-863A-6EFF6DCAE1E1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BBWYB.PurchaserCapture", "BBWYB.PurchaserCapture\BBWYB.PurchaserCapture.csproj", "{736D1C5D-4B7A-45C4-863A-6EFF6DCAE1E1}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution From 0da32ba7336dd30b78f76d5f5101a8ced8a858fe Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 24 Mar 2024 20:32:07 +0800 Subject: [PATCH 205/222] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=BB=E5=8A=A1=E5=95=86=E5=93=81=E6=A0=87?= =?UTF-8?q?=E9=A2=98=E5=8E=BB=E6=8E=89sku=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Sync/OrderSyncBusiness.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index fcd421d..0e2bd76 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -492,7 +492,7 @@ namespace BBWYB.Server.Business.Sync LastOptimizationTime = null, ProductId = spuGroup.Key, ShopId = shopId, - ProductTitle = spuGroup.FirstOrDefault()?.ProductTitle, + ProductTitle = SubstringProductTitleFromSku(spuGroup.FirstOrDefault()?.ProductTitle), TriggerOptimizationReason = Enums.TriggerOptimizationReason.首次采购, PreSkuCount = skuGroups.Count(), PreItemCount = 0, @@ -774,5 +774,12 @@ namespace BBWYB.Server.Business.Sync return Enums.TriggerOptimizationReason.再次优化; return null; } + + private string SubstringProductTitleFromSku(string productTitle) + { + if (!string.IsNullOrEmpty(productTitle) && productTitle.Contains(" ")) + productTitle = productTitle.Substring(0, productTitle.LastIndexOf(" ")); + return productTitle; + } } } From ed0b6b7b426e0c4f1b0922b6c037124edd3aae59 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 24 Mar 2024 20:52:54 +0800 Subject: [PATCH 206/222] =?UTF-8?q?=E8=B0=83=E6=95=B4spu=E5=92=8C=E4=BE=9B?= =?UTF-8?q?=E5=BA=94=E5=95=86=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaseSchemeController.cs | 8 ++++---- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 5 +++-- ...chemeProductSkuBySameSpuAndPurchaserRequest.cs | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 BBWYB.Server.Model/Dto/Request/PurchaseScheme/GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaserRequest.cs diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index a5c40f1..28b3904 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -60,14 +60,14 @@ namespace BBWYB.Server.API.Controllers } /// - /// 按spu查询所有采购方案的所有采购配件列表 (议价组只查询和自己有关的采购方案) + /// 按spu和采购商查询采购方案的采购配件列表并合并返回列表结果 (议价组只查询和自己有关的采购方案) /// - /// + /// /// [HttpGet("{productId}")] - public IList GetMergePurchaseSchemeProductSkuByProductId([FromRoute] string productId) + public IList GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaser([FromBody] GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaserRequest request) { - return purchaseSchemeBusiness.GetMergePurchaseSchemeProductSkuByProductId(productId, GetUserId()); + return purchaseSchemeBusiness.GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaser(request, GetUserId()); } /// diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index f43805f..dd00651 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1068,12 +1068,13 @@ namespace BBWYB.Server.Business return purchaseSchemeList; } - public IList GetMergePurchaseSchemeProductSkuByProductId(string productId, string userId) + public IList GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaser(GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaserRequest request, string userId) { var user = userBusiness.GetisBargainTeamByUserId(userId); var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest() { - ProductIdList = new List() { productId }, + ProductIdList = new List() { request.ProductId }, + PurchaserId = request.PurchaserId, BargainTeamIdList = user.isBargainTeam ? new List() { user.bargainTeam.Id } : null, IncludePurchaseSkuBasicInfo = 1 }); diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaserRequest.cs new file mode 100644 index 0000000..208bcd1 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaserRequest.cs @@ -0,0 +1,15 @@ +namespace BBWYB.Server.Model.Dto +{ + public class GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaserRequest + { + /// + /// SPU + /// + public string ProductId { get; set; } + + /// + /// 采购商Id + /// + public string PurchaserId { get; set; } + } +} From 5a43015245611acda9a2ecd9a7ca6df7d13a33a9 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Sun, 24 Mar 2024 20:55:28 +0800 Subject: [PATCH 207/222] =?UTF-8?q?=E6=94=B9post?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.API/Controllers/PurchaseSchemeController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index 28b3904..090222c 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -64,7 +64,7 @@ namespace BBWYB.Server.API.Controllers /// /// /// - [HttpGet("{productId}")] + [HttpPost] public IList GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaser([FromBody] GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaserRequest request) { return purchaseSchemeBusiness.GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaser(request, GetUserId()); From 94f5f0b3ca2518e28ce7136fd441e9848978f7f2 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 25 Mar 2024 11:56:22 +0800 Subject: [PATCH 208/222] =?UTF-8?q?=E8=89=AF=E5=BA=93=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=A2=84=E8=AD=A6=E5=BC=80=E6=94=BE=E5=8C=BF=E5=90=8D=E8=AE=BF?= =?UTF-8?q?=E9=97=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.API/Controllers/SkuOptimizationController.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs index f16436c..9d9b66b 100644 --- a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs +++ b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs @@ -21,6 +21,7 @@ namespace BBWYB.Server.API.Controllers /// /// [HttpPost] + [AllowAnonymous] public void LKInventoryAlertNotification([FromBody] BatchLKInventoryAlertRequest request) { optimizationBusiness.LKInventoryAlertNotification(request); From 89da877d5c07032a5c4729ad5050d93bcca9f9c9 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 25 Mar 2024 22:19:38 +0800 Subject: [PATCH 209/222] =?UTF-8?q?=E6=8C=89=E9=87=87=E8=B4=AD=E5=95=86?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8A=A5=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimization/OptimizationBusiness.cs | 62 +++++++++++++++++-- .../Sync/OrderSyncBusiness.cs | 32 +++++++++- ...timizationpurchasercompetitvetendertask.cs | 60 ++++++++++++++++++ 3 files changed, 148 insertions(+), 6 deletions(-) create mode 100644 BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationpurchasercompetitvetendertask.cs diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index c8481b8..16bfb0a 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -4,6 +4,7 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.BBWY; +using BBWYB.Server.Model.Db.SpuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json; @@ -112,6 +113,7 @@ namespace BBWYB.Server.Business List insertSkuOptimizationTaskList = new List(); List insertSpuOptimizationBargainTeamTaskList = new List(); List insertSpuOptimizationCompetitiveTenderTaskList = new List(); + //List insertSpuOptimizationPurchaserCompetitiveTenderTaskList = new List(); List insertTimeLimitTaskList = new List(); #endregion @@ -126,6 +128,12 @@ namespace BBWYB.Server.Business productIdList.Contains(ps.ProductId)) .ToList(); //需要参与竞标采购方案 + var waitToCompetitiveTenderSchemeIdList = waitToCompetitiveTenderSchemeList.Select(ps => ps.Id).ToList(); + var waitToCompetitiveTenderSchemePurchaserList = fsql.Select() + .Where(psp => waitToCompetitiveTenderSchemeIdList.Contains(psp.SkuPurchaseSchemeId)) + .GroupBy(psp => new { psp.SkuPurchaseSchemeId, psp.PurchaserId }) + .ToList(g => new { g.Key.SkuPurchaseSchemeId, g.Key.PurchaserId }); //需要参与竞标的采购商 + foreach (var productId in productIdList) { #region 验证 @@ -250,6 +258,9 @@ namespace BBWYB.Server.Business var waitJoinSchemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.BelongBargainTeamId == department.Id && qtskus.Contains(ps.SkuId)) .ToList(); + + //var waitJoinSchemeIdList = waitJoinSchemeList.Select(ps => ps.Id).ToList(); + //var waitJonPurchaserList = waitToCompetitiveTenderSchemePurchaserList.Where(x => waitJoinSchemeIdList.Contains(x.SkuPurchaseSchemeId)); if (waitJoinSchemeList.Count() > 0) { insertSpuOptimizationCompetitiveTenderTaskList.AddRange(waitJoinSchemeList.Select(ps => new SpuOptimizationCompetitiveTenderTask() @@ -265,6 +276,24 @@ namespace BBWYB.Server.Business SpuOptimizationTaskId = spuOptimizationTask.Id, UpdateTime = DateTime.Now })); + + //insertSpuOptimizationPurchaserCompetitiveTenderTaskList.AddRange(waitJonPurchaserList.Select(x => + //{ + // var ps = waitJoinSchemeList.FirstOrDefault(ps => ps.Id == x.SkuPurchaseSchemeId); + // return new SpuOptimizationPurchaserCompetitiveTenderTask() + // { + // Id = idGenerator.NewLong(), + // BargainTeamId = ps.BelongBargainTeamId, + // CreateTime = DateTime.Now, + // UpdateTime = DateTime.Now, + // IsUpdateQuotedPrice = false, + // PurchaserId = x.PurchaserId, + // SchemeGroupId = ps.SchemeGroupId, + // SchemeId = ps.Id, + // SkuId = ps.SkuId, + // SpuOptimizationTaskId = spuOptimizationTask.Id + // }; + //})); } #endregion } @@ -306,6 +335,8 @@ namespace BBWYB.Server.Business fsql.Insert(insertSpuOptimizationBargainTeamTaskList).ExecuteAffrows(); if (insertSpuOptimizationCompetitiveTenderTaskList.Count() > 0) fsql.Insert(insertSpuOptimizationCompetitiveTenderTaskList).ExecuteAffrows(); + //if (insertSpuOptimizationPurchaserCompetitiveTenderTaskList.Count() > 0) + // fsql.Insert(insertSpuOptimizationPurchaserCompetitiveTenderTaskList).ExecuteAffrows(); if (insertTimeLimitTaskList.Count() > 0) fsql.Insert(insertTimeLimitTaskList).ExecuteAffrows(); }); @@ -348,20 +379,24 @@ namespace BBWYB.Server.Business .ToList(); //查询配件关联的采购方案 - var relationPurchaseSchemeList = fsql.Select() + var relationPurchaseSchemeIdList = fsql.Select() .Where(ps => ps.SchemeGroupId == request.SchemeGroupId && ps.BelongBargainTeamId == uInfo.bargainTeam.Id && fsql.Select() .Where(pss => skuIdList.Contains(pss.SkuId) && purchaseSkuIdList.Contains(pss.PurchaseSkuId) && pss.SkuPurchaseSchemeId == ps.Id).Any()) - .ToList(); + .ToList(ps => ps.Id); + var relationPurchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest() + { + SchemeIdList = relationPurchaseSchemeIdList, + IncludePurchaseSkuBasicInfo = 0 + }); //筛选出不在竞标任务中的采购方案 var noJoinCompetitiveTenderPurchaseSchemeList = relationPurchaseSchemeList.Where(ps => !competitiveTenderTaskList.Any(ct => ct.SchemeId == ps.Id)).ToList(); - //var noJoinCompetitiveTenderPurchaseSchemeIdList = noJoinCompetitiveTenderPurchaseSchemeList.Select(x => x.Id).ToList(); - //批量更新配件 + { var batchEditPurchaseSkuActualPriceRequest = request.Map(); @@ -387,7 +422,24 @@ namespace BBWYB.Server.Business })); } if (competitiveTenderTaskList.Count() > 0) - updateCompetitiveTenderTaskIdList.AddRange(competitiveTenderTaskList.Select(ct => ct.Id).ToList()); + { + //updateCompetitiveTenderTaskIdList.AddRange(competitiveTenderTaskList.Select(ct => ct.Id).ToList()); + foreach (var ctTask in competitiveTenderTaskList) + { + if (ctTask.IsUpdateQuotedPrice == true) + continue; + var scheme = relationPurchaseSchemeList.FirstOrDefault(ps => ps.Id == ctTask.SchemeId); + if (scheme == null) + continue; + var pssList = scheme.PurchaseSchemeProductList.SelectMany(psp => psp.PurchaseSchemeProductSkuList); + if (pssList.Any(pss => request.ItemList.Any(item => item.PurchaseSkuId == pss.PurchaseSkuId))) + { + //ctTask.IsUpdateQuotedPrice = true; + updateCompetitiveTenderTaskIdList.Add(ctTask.Id); + } + } + } + fsql.Transaction(() => { diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 0e2bd76..6df1905 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -3,6 +3,7 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.BBWY; +using BBWYB.Server.Model.Db.SpuOptimization; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json.Linq; @@ -151,7 +152,7 @@ namespace BBWYB.Server.Business.Sync List insertSkuOptimizationTaskList = new List(); List insertSpuOptimizationBargainTeamTaskList = new List(); List insertSpuOptimizationCompetitiveTenderTaskList = new List(); - + //List insertSpuOptimizationPurchaserCompetitiveTenderTaskList = new List(); #endregion //等待检查sku销量的订单集合 @@ -418,6 +419,12 @@ namespace BBWYB.Server.Business.Sync spuIdList.Contains(ps.ProductId)) .ToList(); //需要参与竞标采购方案 + var waitToCompetitiveTenderSchemeIdList = waitToCompetitiveTenderSchemeList.Select(ps => ps.Id).ToList(); + var waitToCompetitiveTenderSchemePurchaserList = fsql.Select() + .Where(psp => waitToCompetitiveTenderSchemeIdList.Contains(psp.SkuPurchaseSchemeId)) + .GroupBy(psp => new { psp.SkuPurchaseSchemeId, psp.PurchaserId }) + .ToList(g => new { g.Key.SkuPurchaseSchemeId, g.Key.PurchaserId }); //需要参与竞标的采购商 + var waitToCheckOrderSpuGroups = waitToCheckSkuSaleOrderList.SelectMany(o => o.OrderSkuList).GroupBy(osku => osku.ProductId); @@ -559,6 +566,9 @@ namespace BBWYB.Server.Business.Sync var waitJoinSchemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.BelongBargainTeamId == department.Id && skuIdList.Contains(ps.SkuId)) .ToList(); + //var waitJoinSchemeIdList = waitJoinSchemeList.Select(ps => ps.Id).ToList(); + //var waitJonPurchaserList = waitToCompetitiveTenderSchemePurchaserList.Where(x => waitJoinSchemeIdList.Contains(x.SkuPurchaseSchemeId)); + if (waitJoinSchemeList.Count() > 0) { insertSpuOptimizationCompetitiveTenderTaskList.AddRange(waitJoinSchemeList.Select(ps => new SpuOptimizationCompetitiveTenderTask() @@ -574,6 +584,24 @@ namespace BBWYB.Server.Business.Sync SpuOptimizationTaskId = spuOptimizationTask.Id, UpdateTime = DateTime.Now })); + + //insertSpuOptimizationPurchaserCompetitiveTenderTaskList.AddRange(waitJonPurchaserList.Select(x => + //{ + // var ps = waitJoinSchemeList.FirstOrDefault(ps => ps.Id == x.SkuPurchaseSchemeId); + // return new SpuOptimizationPurchaserCompetitiveTenderTask() + // { + // Id = idGenerator.NewLong(), + // BargainTeamId = ps.BelongBargainTeamId, + // CreateTime = DateTime.Now, + // UpdateTime = DateTime.Now, + // IsUpdateQuotedPrice = false, + // PurchaserId = x.PurchaserId, + // SchemeGroupId = ps.SchemeGroupId, + // SchemeId = ps.Id, + // SkuId = ps.SkuId, + // SpuOptimizationTaskId = spuOptimizationTask.Id + // }; + //})); } #endregion } @@ -634,6 +662,8 @@ namespace BBWYB.Server.Business.Sync fsql.Insert(insertSpuOptimizationBargainTeamTaskList).ExecuteAffrows(); if (insertSpuOptimizationCompetitiveTenderTaskList.Count() > 0) fsql.Insert(insertSpuOptimizationCompetitiveTenderTaskList).ExecuteAffrows(); + //if (insertSpuOptimizationPurchaserCompetitiveTenderTaskList.Count() > 0) + // fsql.Insert(insertSpuOptimizationPurchaserCompetitiveTenderTaskList).ExecuteAffrows(); if (updateOrderList.Count() > 0) foreach (var update in updateOrderList) diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationpurchasercompetitvetendertask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationpurchasercompetitvetendertask.cs new file mode 100644 index 0000000..bb89885 --- /dev/null +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationpurchasercompetitvetendertask.cs @@ -0,0 +1,60 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db.SpuOptimization +{ + + [Table(Name = "spuoptimizationpurchasercompetitivetendertask", DisableSyncStructure = true)] + public partial class SpuOptimizationPurchaserCompetitiveTenderTask + { + + [Column(IsPrimary = true)] + public long Id { get; set; } + + /// + /// 议价组Id + /// + [Column(StringLength = 50)] + public string BargainTeamId { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + [Column(DbType = "datetime")] + public DateTime? UpdateTime { get; set; } + + /// + /// 是否更新报价 + /// + + public bool? IsUpdateQuotedPrice { get; set; } = false; + + /// + /// 采购商Id + /// + [Column(StringLength = 50)] + public string PurchaserId { get; set; } + + /// + /// 采购方案分组Id + /// + [Column(DbType = "bigint")] + public long? SchemeGroupId { get; set; } + + /// + /// 采购方案Id + /// + [Column(DbType = "bigint")] + public long? SchemeId { get; set; } + + [Column(StringLength = 50)] + public string SkuId { get; set; } + + /// + /// Spu优化任务Id + /// + [Column(DbType = "bigint")] + public long? SpuOptimizationTaskId { get; set; } + + } + +} From c56cc4544dd7791d21733089ac60487ba76cb6c1 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 25 Mar 2024 23:13:16 +0800 Subject: [PATCH 210/222] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimization/OptimizationBusiness.cs | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 16bfb0a..fcdab2f 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -892,16 +892,35 @@ namespace BBWYB.Server.Business public void DeleteSchemeGroup(DeleteSchemeGroupFromSpuOptimizationTaskRequest request, string userId) { _ = userBusiness.GetisBargainTeamByUserId(userId, true); - var competitiveTenderTaskList = fsql.Select() - .Where(ct => ct.SpuOptimizationTaskId == request.SpuOptimizationId && - ct.SchemeGroupId == request.SchemeGroupId) - .ToList(); - var schemeIdList = competitiveTenderTaskList.Select(ct => ct.SchemeId).ToList(); - purchaseSchemeBusiness.DeletePurchaseScheme(schemeIdList); + var schemeIdList = fsql.Select().Where(ps => ps.SchemeGroupId == request.SchemeGroupId).ToList(ps => ps.Id); + + fsql.Transaction(() => + { + fsql.Delete(request.SchemeGroupId).ExecuteAffrows(); + if (schemeIdList.Count() > 0) + { + fsql.Delete(schemeIdList).ExecuteAffrows(); + fsql.Delete().Where(psp => schemeIdList.Contains(psp.SkuPurchaseSchemeId)).ExecuteAffrows(); + fsql.Delete().Where(pss => schemeIdList.Contains(pss.SkuPurchaseSchemeId)).ExecuteAffrows(); + } + fsql.Delete() + .Where(ct => ct.SchemeGroupId == request.SchemeGroupId && + ct.SpuOptimizationTaskId == request.SpuOptimizationId) + .ExecuteAffrows(); + }); + + + //var competitiveTenderTaskList = fsql.Select() + // .Where(ct => ct.SpuOptimizationTaskId == request.SpuOptimizationId && + // ct.SchemeGroupId == request.SchemeGroupId) + // .ToList(); + + //var schemeIdList = competitiveTenderTaskList.Select(ct => ct.SchemeId).ToList(); + //purchaseSchemeBusiness.DeletePurchaseScheme(schemeIdList); - var ctTaskIdList = competitiveTenderTaskList.Select(ct => ct.Id); - fsql.Delete(ctTaskIdList).ExecuteAffrows(); + //var ctTaskIdList = competitiveTenderTaskList.Select(ct => ct.Id); + //fsql.Delete(ctTaskIdList).ExecuteAffrows(); } public long GetNoCompletedSpuOptimizationTaskCount() From 20df7769554fc439ac6e7042ef008f63c96370e9 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 25 Mar 2024 23:19:36 +0800 Subject: [PATCH 211/222] paiban --- BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index fcdab2f..83e55ae 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -905,9 +905,9 @@ namespace BBWYB.Server.Business fsql.Delete().Where(pss => schemeIdList.Contains(pss.SkuPurchaseSchemeId)).ExecuteAffrows(); } fsql.Delete() - .Where(ct => ct.SchemeGroupId == request.SchemeGroupId && + .Where(ct => ct.SchemeGroupId == request.SchemeGroupId && ct.SpuOptimizationTaskId == request.SpuOptimizationId) - .ExecuteAffrows(); + .ExecuteAffrows(); }); From ee927c9da7845e0c913de1cfb4355197ba55a09f Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 26 Mar 2024 00:33:44 +0800 Subject: [PATCH 212/222] =?UTF-8?q?webtest=E6=94=AF=E6=8C=81=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebTest/App.xaml.cs | 8 ++++---- WebTest/MainWindow.xaml | 3 ++- WebTest/MainWindow.xaml.cs | 1 + WebTest/appSettings.json | 3 ++- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/WebTest/App.xaml.cs b/WebTest/App.xaml.cs index 5d1f7b7..35624d0 100644 --- a/WebTest/App.xaml.cs +++ b/WebTest/App.xaml.cs @@ -22,18 +22,18 @@ namespace WebTest protected override void OnStartup(StartupEventArgs e) { var gl = new GlobalContext(); - string userToken = string.Empty; + //string userToken = string.Empty; //齐越山鸡 - userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMzk1NzA4MjA4NjU1MzcyMjg4IiwidGVhbUlkIjoiMTc2MDk3MTY4ODk2NDUyNjA4MCIsInNvblRlYW1JZHMiOiIiLCJleHAiOjE3NDIxOTYxMDF9.pt1onwf4f4QKyuT1kFWtcRw8LZo9s64CmHqrdI4fD5k"; + //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMzk1NzA4MjA4NjU1MzcyMjg4IiwidGVhbUlkIjoiMTc2MDk3MTY4ODk2NDUyNjA4MCIsInNvblRlYW1JZHMiOiIiLCJleHAiOjE3NDIxOTYxMDF9.pt1onwf4f4QKyuT1kFWtcRw8LZo9s64CmHqrdI4fD5k"; - gl.UserToken = userToken; + var applicationPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var builder = new ConfigurationBuilder().SetBasePath(applicationPath).AddJsonFile("appSettings.json", false, true); Configuration = builder.Build(); - + gl.UserToken = Configuration.GetSection("UserToken").Value; gl.BBYWApiHost = Configuration.GetSection("BBWYApiHost").Value; gl.MDSApiHost = Configuration.GetSection("MDSApiHost").Value; IServiceCollection serviceCollection = new ServiceCollection(); diff --git a/WebTest/MainWindow.xaml b/WebTest/MainWindow.xaml index b7269aa..31a7782 100644 --- a/WebTest/MainWindow.xaml +++ b/WebTest/MainWindow.xaml @@ -10,13 +10,14 @@ CloseButtonColor="Black" MinButtonColor="Black" MaxButtonColor="Black" - Title="WebTest" Height="768" Width="1024"> + Title="AAA" Height="768" Width="1024" x:Name="w"> + diff --git a/WebTest/MainWindow.xaml.cs b/WebTest/MainWindow.xaml.cs index 1bfb19b..1bf1100 100644 --- a/WebTest/MainWindow.xaml.cs +++ b/WebTest/MainWindow.xaml.cs @@ -121,6 +121,7 @@ private string registerName = "webContext"; throw new Exception($"获取磨刀石用户信息失败 {mdsUserResponse.Msg}"); globalContext.User = mdsUserResponse.Data.Map(); + this.Title = globalContext.User.Name; globalContext.User.Token = globalContext.UserToken; globalContext.User.SonDepartmentNames = string.Empty; if (mdsUserResponse.Data.SonDepartmentList != null && mdsUserResponse.Data.SonDepartmentList.Count > 0) diff --git a/WebTest/appSettings.json b/WebTest/appSettings.json index a0d1691..0144e78 100644 --- a/WebTest/appSettings.json +++ b/WebTest/appSettings.json @@ -1,4 +1,5 @@ { "BBWYApiHost": "http://bbwytest.qiyue666.com", - "MDSApiHost": "http://mdsapi.qiyue666.com" + "MDSApiHost": "http://mdsapi.qiyue666.com", + "UserToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMzk1NzA4MjA4NjU1MzcyMjg4IiwidGVhbUlkIjoiMTc2MDk3MTY4ODk2NDUyNjA4MCIsInNvblRlYW1JZHMiOiIiLCJleHAiOjE3NDIxOTYxMDF9.pt1onwf4f4QKyuT1kFWtcRw8LZo9s64CmHqrdI4fD5k" } \ No newline at end of file From 8f5c39a457998ef6d950ca446ba818f97c0cbac7 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 26 Mar 2024 15:17:45 +0800 Subject: [PATCH 213/222] =?UTF-8?q?GetMergePurchaseSchemeProductSkuBySameS?= =?UTF-8?q?puAndPurchaser=20=E6=8E=92=E9=99=A4=E5=88=AB=E7=9A=84=E4=BE=9B?= =?UTF-8?q?=E5=BA=94=E5=95=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index dd00651..c67a3b8 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1083,6 +1083,8 @@ namespace BBWYB.Server.Business { foreach (var psp in scheme.PurchaseSchemeProductList) { + if (psp.PurchaserId != request.PurchaserId) + continue; foreach (var pss in psp.PurchaseSchemeProductSkuList) { var mergePss = mergePssList.FirstOrDefault(x => x.PurchaseSkuId == pss.PurchaseSkuId); From 208129aae3137815b23f1895e4a3644d45180b41 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 27 Mar 2024 12:23:46 +0800 Subject: [PATCH 214/222] =?UTF-8?q?=E9=87=87=E8=B4=AD=E7=AB=9E=E6=A0=87?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E6=8C=89=E5=88=86=E7=BB=84=E8=AF=84=E9=80=89?= =?UTF-8?q?=20=E8=AE=AE=E4=BB=B7=E9=99=90=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=8C=898h=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimization/OptimizationBusiness.cs | 25 +++++++++++-------- .../Sync/OrderSyncBusiness.cs | 4 +-- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 83e55ae..3d59249 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -303,14 +303,14 @@ namespace BBWYB.Server.Business { //判断sku是否首次采购 - var isFirst = !dbSpuTotalInfoList.Any(s => s.ProductId == productId); + //var isFirst = !dbSpuTotalInfoList.Any(s => s.ProductId == productId); insertTimeLimitTaskList.Add(new TimeLimitTask() { Id = idGenerator.NewLong(), CreateTme = DateTime.Now, //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), - ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now), //OrderId = o.OrderId, //OrderSn = o.OrderSn, ShopId = shopId, @@ -786,14 +786,19 @@ namespace BBWYB.Server.Business IList purchaseSchemeList) { var victoryList = new List(); - var psGroups = purchaseSchemeList.GroupBy(ps => ps.SkuId); - foreach (var psGroup in psGroups) - { - var psListOrderByCostDescList = psGroup.OrderByDescending(ps => ps.BargainingCost ?? ps.DefaultCost).ToList(); - var minCostScheme = psListOrderByCostDescList.FirstOrDefault(); - var competitiveTenderTask = competitiveTenderTaskList.FirstOrDefault(ct => ct.SchemeId == minCostScheme.Id); - victoryList.Add(competitiveTenderTask); - } + var psGroups = purchaseSchemeList.GroupBy(ps => ps.SchemeGroupId); + var winGroupKey = psGroups.Select(g => new { SchemeGroupId = g.Key, Cost = g.Sum(ps => ps.BargainingCost ?? ps.DefaultCost) }) + .OrderByDescending(x => x.Cost) + .FirstOrDefault(); + victoryList.AddRange(competitiveTenderTaskList.Where(ct=>ct.SchemeGroupId == winGroupKey.SchemeGroupId)); + + //foreach (var psGroup in psGroups) + //{ + // var psListOrderByCostDescList = psGroup.OrderByDescending(ps => ps.BargainingCost ?? ps.DefaultCost).ToList(); + // var minCostScheme = psListOrderByCostDescList.FirstOrDefault(); + // var competitiveTenderTask = competitiveTenderTaskList.FirstOrDefault(ct => ct.SchemeId == minCostScheme.Id); + // victoryList.Add(competitiveTenderTask); + //} return victoryList; } diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 6df1905..3ba7300 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -611,14 +611,14 @@ namespace BBWYB.Server.Business.Sync { //判断sku是否首次采购 - var isFirst = !dbSpuTotalSaleInfoList.Any(s => s.ProductId == spuGroup.Key); + //var isFirst = !dbSpuTotalSaleInfoList.Any(s => s.ProductId == spuGroup.Key); insertTimeLimitTaskList.Add(new TimeLimitTask() { Id = idGenerator.NewLong(), CreateTme = DateTime.Now, //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), - ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), + ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now), //OrderId = o.OrderId, //OrderSn = o.OrderSn, ShopId = shopId, From 6548511ddd37305465e27a9e4625742cba6cb657 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 27 Mar 2024 13:00:02 +0800 Subject: [PATCH 215/222] =?UTF-8?q?=E5=8F=82=E4=B8=8E=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=8A=A5=E4=BB=B7=E7=9A=84=E9=85=8D=E4=BB=B6=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 17 +++++++++++++++++ ...emeProductSkuBySameSpuAndPurchaserRequest.cs | 5 +++++ .../MergePurchaseSchemeProductSkuResponse.cs | 5 +++++ 3 files changed, 27 insertions(+) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index c67a3b8..0d26122 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1078,6 +1078,17 @@ namespace BBWYB.Server.Business BargainTeamIdList = user.isBargainTeam ? new List() { user.bargainTeam.Id } : null, IncludePurchaseSkuBasicInfo = 1 }); + + List competitiveTenderTaskList = null; + + if (user.isBargainTeam && request.SpuOptimizationTaskId != null && request.SpuOptimizationTaskId != 0) + { + competitiveTenderTaskList = fsql.Select() + .Where(ct => ct.SpuOptimizationTaskId == request.SpuOptimizationTaskId && + ct.BargainTeamId == user.bargainTeam.Id) + .ToList(); + } + var mergePssList = new List(); foreach (var scheme in purchaseSchemeList) { @@ -1092,6 +1103,12 @@ namespace BBWYB.Server.Business { mergePss = pss.Map(); mergePssList.Add(mergePss); + if (competitiveTenderTaskList != null) + { + var belongCompetitiveTenderTask = competitiveTenderTaskList.FirstOrDefault(ct => ct.SchemeId == scheme.Id); + if (belongCompetitiveTenderTask != null) + mergePss.IsUpdateQuotedPrice = belongCompetitiveTenderTask.IsUpdateQuotedPrice; + } } mergePss.BelongSkuIdList.Add(pss.SkuId); } diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaserRequest.cs index 208bcd1..9a6266f 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaserRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaserRequest.cs @@ -11,5 +11,10 @@ /// 采购商Id /// public string PurchaserId { get; set; } + + /// + /// 优化任务Id + /// + public long? SpuOptimizationTaskId { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs index 609441b..46c7139 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs @@ -92,5 +92,10 @@ /// 是否包邮 /// public bool? IsFreeFreight { get; set; } = false; + + /// + /// 是否跟新报价 + /// + public bool? IsUpdateQuotedPrice { get; set; } } } From a69f6cda1ab3f3ae09ae9d8edf60b7be5bc4004e Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 27 Mar 2024 15:39:18 +0800 Subject: [PATCH 216/222] =?UTF-8?q?=E8=B4=A7=E6=BA=90=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=8B=A6=E6=88=AAShopId=3D0=E7=9A=84=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 0d26122..9428cff 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -302,14 +302,15 @@ namespace BBWYB.Server.Business if (groupCount > 1) throw new BusinessException("只能对同一个spu的方案进行编辑"); - if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(ps => string.IsNullOrEmpty(ps.ProductId) || + if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(ps => ps.ShopId == 0 || + string.IsNullOrEmpty(ps.ProductId) || string.IsNullOrEmpty(ps.SkuId) || ps.PurchaseSchemeProductList.Any(psp => string.IsNullOrEmpty(psp.ProductId) || string.IsNullOrEmpty(psp.SkuId) || psp.PurchaseSchemeProductSkuList.Any(pss => string.IsNullOrEmpty(pss.ProductId) || string.IsNullOrEmpty(pss.SkuId))))) { - throw new BusinessException("新增方案缺少ProductId/SkuId"); + throw new BusinessException("新增方案缺少ShopId/ProductId/SkuId"); } if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList == null || From 633089dedd6ad0a5b43466086701940d0352b151 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 27 Mar 2024 23:41:44 +0800 Subject: [PATCH 217/222] 1 --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 12 ++++++------ BBWYB.Server.Business/Sync/ProductSyncBusiness.cs | 10 ++++++++++ .../MergePurchaseSchemeProductSkuResponse.cs | 2 +- .../Models/Request/Product/OP_QueryProductRequest.cs | 10 ++++++++++ 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 9428cff..ab8d029 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1104,12 +1104,12 @@ namespace BBWYB.Server.Business { mergePss = pss.Map(); mergePssList.Add(mergePss); - if (competitiveTenderTaskList != null) - { - var belongCompetitiveTenderTask = competitiveTenderTaskList.FirstOrDefault(ct => ct.SchemeId == scheme.Id); - if (belongCompetitiveTenderTask != null) - mergePss.IsUpdateQuotedPrice = belongCompetitiveTenderTask.IsUpdateQuotedPrice; - } + } + if (competitiveTenderTaskList != null) + { + var belongCompetitiveTenderTask = competitiveTenderTaskList.FirstOrDefault(ct => ct.SchemeId == scheme.Id); + if (belongCompetitiveTenderTask != null && belongCompetitiveTenderTask.IsUpdateQuotedPrice == true) + mergePss.IsUpdateQuotedPrice = true; } mergePss.BelongSkuIdList.Add(pss.SkuId); } diff --git a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs index b9a9e04..04b1440 100644 --- a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs @@ -35,6 +35,11 @@ namespace BBWYB.Server.Business.Sync } } + public void SyncAllShopUpdateProduct() + { + + } + private void SyncProduct(ShopResponse shop, bool IsSyncAllProduct = false) { @@ -277,5 +282,10 @@ namespace BBWYB.Server.Business.Sync nLogManager.Default().Error(ex, $"SyncProduct ShopId:{shop.ShopName}"); } } + + private void SyncUpdateProduct(ShopResponse shop) + { + + } } } diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs index 46c7139..3c4cbc5 100644 --- a/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Optimization/MergePurchaseSchemeProductSkuResponse.cs @@ -96,6 +96,6 @@ /// /// 是否跟新报价 /// - public bool? IsUpdateQuotedPrice { get; set; } + public bool? IsUpdateQuotedPrice { get; set; } = false; } } diff --git a/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductRequest.cs b/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductRequest.cs index c26df80..fc3a288 100644 --- a/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductRequest.cs +++ b/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductRequest.cs @@ -23,5 +23,15 @@ /// 每页记录数 /// public int PageSize { get; set; } + + /// + /// 最后修改开始时间 + /// + public DateTime? UpdateStartTime { get; set; } + + /// + /// 最后修改结束时间 + /// + public DateTime? UpdateEndTime { get; set; } } } From a7e0bedec7110887000a0ece2a506cd8a250323a Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 28 Mar 2024 01:47:05 +0800 Subject: [PATCH 218/222] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=9C=80=E8=BF=91?= =?UTF-8?q?=E5=8F=98=E5=8C=96=E7=9A=84=E4=BA=A7=E5=93=81=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ProductSyncController.cs | 23 +- .../Sync/ProductSyncBusiness.cs | 201 ++++++++++++++++++ .../QuanTan_Supplier_SearchSkuRequest.cs | 4 + .../QuanTan_Supplier_SearchSpuRequest.cs | 4 + .../QuanTan_Supplier_ProductListResponse.cs | 2 + ...QuanTan_Supplier_ProductSkuListResponse.cs | 2 + .../Client/Impl/OP_QuanTanClient.cs | 14 +- .../Product/OP_QueryProductSkuRequest.cs | 10 + .../Response/Product/OP_ProductResponse.cs | 5 + .../Response/Product/OP_ProductSkuResponse.cs | 5 + 10 files changed, 265 insertions(+), 5 deletions(-) diff --git a/BBWYB.Server.API/Controllers/ProductSyncController.cs b/BBWYB.Server.API/Controllers/ProductSyncController.cs index b196c48..1fa2ace 100644 --- a/BBWYB.Server.API/Controllers/ProductSyncController.cs +++ b/BBWYB.Server.API/Controllers/ProductSyncController.cs @@ -1,4 +1,6 @@ -using BBWYB.Server.Business.Sync; +using BBWYB.Server.Business; +using BBWYB.Server.Business.Sync; +using BBWYB.Server.Model; using Microsoft.AspNetCore.Mvc; namespace BBWYB.Server.API.Controllers @@ -19,5 +21,24 @@ namespace BBWYB.Server.API.Controllers { productSyncBusiness.SyncAllShopAllProduct(); } + + /// + /// 同步所有店铺最近变化产品 + /// + [HttpPost] + public void SyncAllShopUpdateProduct() + { + productSyncBusiness.SyncAllShopUpdateProduct(); + } + + /// + /// 同步指定店铺最近变化产品 + /// + /// + [HttpPost("{shopId}")] + public void SyncOneShopUpdateProduct([FromRoute] long shopId) + { + productSyncBusiness.SyncOneShopUpdateProduct(shopId); + } } } diff --git a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs index 04b1440..c466336 100644 --- a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs @@ -37,7 +37,21 @@ namespace BBWYB.Server.Business.Sync public void SyncAllShopUpdateProduct() { + var shopList = venderBusiness.GetShopList(platform: Enums.Platform.拳探); + //var shopList = venderBusiness.GetShopList(shopId: 9); + foreach (var shop in shopList) + { + Task.Factory.StartNew(() => SyncUpdateProduct(shop), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncProductTaskScheduler); + } + } + public void SyncOneShopUpdateProduct(long shopId) + { + var shopList = venderBusiness.GetShopList(shopId, platform: Enums.Platform.拳探); + foreach (var shop in shopList) + { + Task.Factory.StartNew(() => SyncUpdateProduct(shop), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncProductTaskScheduler); + } } @@ -285,7 +299,194 @@ namespace BBWYB.Server.Business.Sync private void SyncUpdateProduct(ShopResponse shop) { + try + { + List dbProductList; + List dbProductSkuList; + List opProductList = new List(); + List opProductSkuList = new List(); + + List insertProductList = new List(); + List insertProductSkuList = new List(); + List> updateProductList = new List>(); + List> updateProductSkuList = new List>(); + + #region 查询变化的spu + var spuRequest = new OP_QueryProductRequest() + { + PageSize = 50, + PageIndex = 1, + AppKey = shop.AppKey, + AppSecret = shop.AppSecret, + AppToken = shop.AppToken, + Platform = SDKAdapter.AdapterEnums.PlatformType.拳探, + UpdateStartTime = DateTime.Now.AddHours(-1), + UpdateEndTime = DateTime.Now + }; + while (true) + { + var response = productBusiness.GetProductList(spuRequest); + if (response == null || response.Items == null || response.Items.Count == 0) + break; + + opProductList.AddRange(response.Items); + if (response.Items.Count < 50) + break; + + spuRequest.PageIndex++; + } + #endregion + + #region 对比spu + + var spuIdList = opProductList.Select(x => x.Id); + dbProductList = fsql.Select(spuIdList).ToList(); + + #region 找出新增的产品 + var newProductList = opProductList.Where(p => !dbProductList.Any(dp => dp.Id == p.Id)).ToList(); + if (newProductList.Count() > 0) + { + insertProductList.AddRange(newProductList.Select(p => new Product() + { + Id = p.Id, + Logo = p.Logo, + ProductName = p.Title, + ShopId = int.Parse(shop.ShopId), + State = p.State, + SyncTime = DateTime.Now, + UpdateTime = p.UpdateTime, + UpperTime = p.CreateTime, + CategoryId = p.CategoryId, + CategoryName = p.CategoryName + })); + } + #endregion + + #region 找出变化的产品 (状态,标题,类目) + var stateChangeProductList = opProductList.Where(p => dbProductList.Any(dp => dp.Id == p.Id && + (dp.State != p.State || + dp.ProductName != p.Title || + dp.CategoryId != p.CategoryId))).ToList(); + if (stateChangeProductList.Count() > 0) + { + foreach (var product in stateChangeProductList) + { + var update = fsql.Update(product.Id).Set(p => p.State, product.State) + .Set(p => p.ProductName, product.Title) + .Set(p => p.CategoryId, product.CategoryId) + .Set(p => p.CategoryName, product.CategoryName) + .Set(p => p.UpdateTime, product.UpdateTime); + updateProductList.Add(update); + } + } + #endregion + + #endregion + + #region 查询变化的sku + + var skuRequest = new OP_QueryProductSkuRequest() + { + AppKey = shop.AppKey, + AppSecret = shop.AppSecret, + AppToken = shop.AppToken, + Platform = SDKAdapter.AdapterEnums.PlatformType.拳探, + //Spu = product.Id, + PageSize = 50, + PageIndex = 1, + UpdateStartTime = DateTime.Now.AddHours(-1), + UpdateEndTime = DateTime.Now + }; + while (true) + { + var response = productBusiness.GetProductSkuList(skuRequest); + if (response == null || response.Items == null || response.Items.Count == 0) + break; + + opProductSkuList.AddRange(response.Items); + if (response.Items.Count < 50) + break; + + skuRequest.PageIndex++; + } + #endregion + + #region 对比sku + + var skuIdList = opProductSkuList.Select(x => x.Id); + dbProductSkuList = fsql.Select(skuIdList).ToList(); + + #region 找出新增的SKU + var newProductSkuList = opProductSkuList.Where(ps => !dbProductSkuList.Any(dps => dps.Id == ps.Id)).ToList(); + if (newProductSkuList.Count() > 0) + { + insertProductSkuList.AddRange(newProductSkuList.Select(ps => new ProductSku() + { + Id = ps.Id, + Logo = ps.Logo, + Price = ps.Price, + ProductId = ps.ProductId, + ShopId = int.Parse(shop.ShopId), + SkuName = ps.Title, + State = ps.State, + SyncTime = DateTime.Now, + UpdateTime = ps.UpdateTime, + UpperTime = ps.CreateTime, + CategoryId = ps.CategoryId, + CategoryName = ps.CategoryName + })); + } + #endregion + #region 找出状态变化的SKU + var stateChangeProductSkuList = opProductSkuList.Where(ps => dbProductSkuList.Any(dps => dps.Id == ps.Id && + (dps.State != ps.State || + dps.SkuName != ps.Title || + dps.Price != ps.Price || + dps.Logo != ps.Logo || + dps.CategoryId != ps.CategoryId))).ToList(); + if (stateChangeProductSkuList.Count() > 0) + { + foreach (var productSku in stateChangeProductSkuList) + { + var update = fsql.Update(productSku.Id).Set(ps => ps.State, productSku.State) + .Set(ps => ps.SkuName, productSku.Title) + .Set(ps => ps.Price, productSku.Price) + .Set(ps => ps.Logo, productSku.Logo) + .Set(ps => ps.CategoryId, productSku.CategoryId) + .Set(ps => ps.CategoryName, productSku.CategoryName) + .Set(ps => ps.UpdateTime, productSku.UpdateTime); + updateProductSkuList.Add(update); + } + } + #endregion + + #endregion + + #region 数据库操作 + fsql.Transaction(() => + { + if (insertProductList.Count() > 0) + fsql.Insert(insertProductList).ExecuteAffrows(); + if (insertProductSkuList.Count() > 0) + fsql.Insert(insertProductSkuList).ExecuteAffrows(); + if (updateProductList.Count() > 0) + { + foreach (var update in updateProductList) + update.ExecuteAffrows(); + } + if (updateProductSkuList.Count() > 0) + { + foreach (var update in updateProductSkuList) + update.ExecuteAffrows(); + } + }); + #endregion + } + catch (Exception ex) + { + nLogManager.Default().Error(ex, $"SyncProduct ShopId:{shop.ShopName}"); + } } } } diff --git a/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchSkuRequest.cs b/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchSkuRequest.cs index 186f08d..28ea707 100644 --- a/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchSkuRequest.cs +++ b/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchSkuRequest.cs @@ -15,5 +15,9 @@ public int page { get; set; } = 1; public int pageSize { get; set; } = 20; + + public DateTime? updateStart { get; set; } + + public DateTime? updateEnd { get; set; } } } diff --git a/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchSpuRequest.cs b/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchSpuRequest.cs index 758f780..d95d6fe 100644 --- a/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchSpuRequest.cs +++ b/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchSpuRequest.cs @@ -9,5 +9,9 @@ public int page { get; set; } = 1; public int pageSize { get; set; } = 20; + + public DateTime? updateStart { get; set; } + + public DateTime? updateEnd { get; set; } } } diff --git a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductListResponse.cs b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductListResponse.cs index a0c9e7c..f130742 100644 --- a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductListResponse.cs +++ b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductListResponse.cs @@ -21,6 +21,8 @@ public string CategoryName { get; set; } public string CategoryPath { get; set; } + + public DateTime? UpdateTime { get; set; } } public class QuanTan_Supplier_ProductListResponse : QuanTanListResponse diff --git a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductSkuListResponse.cs b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductSkuListResponse.cs index d3adf89..b0baad3 100644 --- a/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductSkuListResponse.cs +++ b/QuanTan.SDK/Models/Supplier/Response/Product/QuanTan_Supplier_ProductSkuListResponse.cs @@ -26,6 +26,8 @@ public int? Status { get; set; } public DateTime? UpperTime { get; set; } + + public DateTime? UpdateTime { get; set;} } public class QuanTan_Supplier_ProductSkuListResponse : QuanTanListResponse diff --git a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs index 5eba23d..f8e7a9e 100644 --- a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs @@ -31,7 +31,9 @@ namespace SDKAdapter.OperationPlatform.Client page = request.PageIndex, pageSize = request.PageSize, productId = request.Spu, - storeId = request.AppToken + storeId = request.AppToken, + updateStart = request.UpdateStartTime, + updateEnd = request.UpdateEndTime }, request.AppKey, request.AppSecret); if (qtResponse.Status != 200) @@ -50,7 +52,8 @@ namespace SDKAdapter.OperationPlatform.Client State = qtp.IsShow == 1 && qtp.Status == 1 ? 1 : 0, Title = qtp.ProductName, CategoryId = qtp.CategoryId, - CategoryName = qtp.CategoryName + CategoryName = qtp.CategoryName, + UpdateTime = qtp.UpdateTime }).ToList() }; } @@ -63,7 +66,9 @@ namespace SDKAdapter.OperationPlatform.Client pageSize = request.PageSize, storeId = request.AppToken, productId = request.Spu, - productSku = request.Sku + productSku = request.Sku, + updateStart = request.UpdateStartTime, + updateEnd = request.UpdateEndTime }, request.AppKey, request.AppSecret); if (qtResponse.Status != 200) @@ -82,7 +87,8 @@ namespace SDKAdapter.OperationPlatform.Client State = qtps.IsShow == 1 && qtps.Status == 1 ? 1 : 0, Title = qtps.SkuName, CategoryId = qtps.CategoryId, - CategoryName = qtps.CategoryName + CategoryName = qtps.CategoryName, + UpdateTime = qtps.UpdateTime }).ToList() }; } diff --git a/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductSkuRequest.cs b/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductSkuRequest.cs index d0b7b6b..6e437c5 100644 --- a/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductSkuRequest.cs +++ b/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductSkuRequest.cs @@ -21,5 +21,15 @@ /// 每页记录数 /// public int PageSize { get; set; } + + /// + /// 最后修改开始时间 + /// + public DateTime? UpdateStartTime { get; set; } + + /// + /// 最后修改结束时间 + /// + public DateTime? UpdateEndTime { get; set; } } } diff --git a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductResponse.cs b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductResponse.cs index 5dc1a8a..9bc8032 100644 --- a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductResponse.cs +++ b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductResponse.cs @@ -42,6 +42,11 @@ /// 分类名称 /// public string CategoryName { get; set; } + + /// + /// 更新时间 + /// + public DateTime? UpdateTime { get; set; } } } diff --git a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductSkuResponse.cs b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductSkuResponse.cs index bf72943..0e6eb94 100644 --- a/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductSkuResponse.cs +++ b/SDKAdapter/OperationPlatform/Models/Response/Product/OP_ProductSkuResponse.cs @@ -39,5 +39,10 @@ /// 分类名称 /// public string CategoryName { get; set; } + + /// + /// 更新时间 + /// + public DateTime? UpdateTime { get; set; } } } From 34909f08f2ee74e6661cf67872e771c56114993e Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 1 Apr 2024 23:24:14 +0800 Subject: [PATCH 219/222] 1 --- .../Controllers/DataRepairController.cs | 6 + .../DataRepair/DataRepairBusiness.cs | 252 ++++++++++++++++++ 2 files changed, 258 insertions(+) diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index 01df8b4..d758794 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -133,5 +133,11 @@ namespace BBWYB.Server.API.Controllers { dataRepairBusiness.ExportQTSpuAndJDSku(); } + + [HttpPost] + public void BelongBarginTeam() + { + dataRepairBusiness.BelongBarginTeam(); + } } } diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index b9c9b8b..c9335a2 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -7,6 +7,8 @@ using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Db.HY; using BBWYB.Server.Model.Dto; using FreeSql; +using MySqlX.XDevAPI; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SDKAdapter; using SDKAdapter.OperationPlatform.Client; @@ -15,6 +17,7 @@ using SDKAdapter.PurchasePlatform.Client; using SDKAdapter.PurchasePlatform.Models; using System.Data; using System.Reflection; +using System.Text; using Yitter.IdGenerator; namespace BBWYB.Server.Business @@ -1440,6 +1443,255 @@ namespace BBWYB.Server.Business var path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "ExportQTSpuAndJDSku.csv"); System.IO.File.WriteAllLines(path, result, System.Text.Encoding.UTF8); } + + public void BelongBarginTeam() + { + var lines = System.IO.File.ReadAllLines("C:\\Users\\pengcong\\Desktop\\供应商.csv", Encoding.UTF8).ToList(); + lines.RemoveAt(0); + + var purchaseRelations = lines.Select(x => + { + var array = x.Split(",", StringSplitOptions.RemoveEmptyEntries); + var teamId = string.Empty; + var teamName = string.Empty; + if (array[3] == "陈默") + { + teamId = "1760971589383360512"; + teamName = "1组"; + } + else + { + teamId = "1760971688964526080"; + teamName = "2组"; + } + return new + { + PurchaserName = array[0], + TeamId = teamId, + TeamName = teamName + }; + }); + + var errorPurchaserList = new List(); + var errorSchemeList = new List(); + var errorSchemeGroupList = new List(); + + var dbPurchaserList = fsql.Select().ToList(); + var dbPurchaseGroupList = fsql.Select().ToList(); + var dbSchemeList = fsql.Select().ToList(); + var dbSchemeProductList = fsql.Select().ToList(); + + var updatePurchaserList = new List(); + var updateSchemeList = new List(); + var updateSchemeGroupList = new List(); + var deletePsgIdList = new List(); + + foreach (var purchaseRelation in purchaseRelations) + { + var dbPurchaser = dbPurchaserList.FirstOrDefault(p => p.Name == purchaseRelation.PurchaserName); + if (dbPurchaser == null) + { + errorPurchaserList.Add($"未从数据表中找到供应商 {purchaseRelation}"); + continue; + } + + if (dbPurchaser.BelongBargainTeamId != purchaseRelation.TeamId) + { + dbPurchaser.BelongBargainTeamId = purchaseRelation.TeamId; + dbPurchaser.BelongBargainTeamName = purchaseRelation.TeamName; + dbPurchaser.BelongType = Enums.PurchaserBelongType.临时; + updatePurchaserList.Add(dbPurchaser); + } + } + + foreach (var purchaseRelation in purchaseRelations) + { + var dbPurchaser = dbPurchaserList.FirstOrDefault(p => p.Name == purchaseRelation.PurchaserName); + if (dbPurchaser == null) + continue; + + //查询使用了该采购商的采购方案 + var usePurchaserSchemeIdList = dbSchemeProductList.Where(psp => psp.PurchaserId == dbPurchaser.Id) + .Select(psp => psp.SkuPurchaseSchemeId) + .Distinct() + .ToList(); + var usePurchaserSchemeList = dbSchemeList.Where(ps => usePurchaserSchemeIdList.Contains(ps.Id)).ToList(); + + foreach (var scheme in usePurchaserSchemeList) + { + var pspList = dbSchemeProductList.Where(psp => psp.SkuPurchaseSchemeId == scheme.Id).ToList(); + if (pspList.Count() == 0) + continue; + var usePurchaserIdList = pspList.Select(psp => psp.PurchaserId).Distinct().ToList(); + var currentSchemePurchaserList = dbPurchaserList.Where(p => usePurchaserIdList.Contains(p.Id)).ToList(); + var currentSchemePurchaserBelongGroups = currentSchemePurchaserList.GroupBy(p => p.BelongBargainTeamId); + if (currentSchemePurchaserBelongGroups.Count() > 1) + { + var sb = new StringBuilder($"采购方案{scheme.Id}使用了{currentSchemePurchaserBelongGroups.Count()}个不同归属的采购商 "); + foreach (var belongGroup in currentSchemePurchaserBelongGroups) + { + var teamName = belongGroup.FirstOrDefault()?.BelongBargainTeamName; + sb.Append($"{teamName}:{string.Join(",", belongGroup.Select(x => x.Name))},"); + } + + errorSchemeList.Add(sb.ToString()); + } + else if (currentSchemePurchaserBelongGroups.Count() == 1) + { + var firstPurchaser = currentSchemePurchaserBelongGroups.FirstOrDefault()?.FirstOrDefault(); + if (scheme.BelongBargainTeamId != firstPurchaser.BelongBargainTeamId) + { + scheme.BelongBargainTeamId = firstPurchaser?.BelongBargainTeamId; + scheme.BelongBargainTeamName = firstPurchaser?.BelongBargainTeamName; + updateSchemeList.Add(scheme); + } + } + } + } + + foreach (var psg in dbPurchaseGroupList) + { + var schemeList = dbSchemeList.Where(ps => ps.SchemeGroupId == psg.Id).ToList(); + if (schemeList.Count() == 0) + { + deletePsgIdList.Add(psg.Id); + continue; + } + + var currentPsgPurchaserBelongGroups = schemeList.GroupBy(ps => ps.BelongBargainTeamId); + if (currentPsgPurchaserBelongGroups.Count() > 1) + { + var sb = new StringBuilder($"采购分组{psg.GroupName}使用了{currentPsgPurchaserBelongGroups.Count()}个不同归属的采购方案 "); + foreach (var belongGroup in currentPsgPurchaserBelongGroups) + { + var teamName = belongGroup.FirstOrDefault()?.BelongBargainTeamName; + sb.Append($"{teamName}:{string.Join(",", belongGroup.Select(x => x.Id))},"); + } + errorSchemeGroupList.Add(sb.ToString()); + } + else if (currentPsgPurchaserBelongGroups.Count() == 1) + { + var firstScheme = schemeList[0]; + if (psg.BelongBargainTeamId != firstScheme.BelongBargainTeamId) + { + psg.BelongBargainTeamId = firstScheme.BelongBargainTeamId; + updateSchemeGroupList.Add(psg); + } + } + } + + if (errorPurchaserList.Count() > 0 || + errorSchemeList.Count() > 0 || + errorSchemeGroupList.Count() > 0) + { + var msg = JsonConvert.SerializeObject(errorPurchaserList.Union(errorSchemeList).Union(errorSchemeGroupList)); + throw new BusinessException(msg); + } + + #region 更新采购商 + { + var updateList = new List>(); + for (var i = 0; i < updatePurchaserList.Count(); i++) + { + var purchaser = updatePurchaserList[i]; + var update = fsql.Update(purchaser.Id) + .Set(p => p.BelongBargainTeamId, purchaser.BelongBargainTeamId) + .Set(p => p.BelongBargainTeamName, purchaser.BelongBargainTeamName); + updateList.Add(update); + if (updateList.Count() == 10) + { + fsql.Transaction(() => + { + foreach (var _u in updateList) + _u.ExecuteAffrows(); + }); + updateList.Clear(); + Console.WriteLine($"UpdatePurchaser {i + 1}/{updatePurchaserList.Count()}"); + } + } + + if (updateList.Count() > 0) + { + fsql.Transaction(() => + { + foreach (var _u in updateList) + _u.ExecuteAffrows(); + }); + updateList.Clear(); + Console.WriteLine($"LastUpdatePurchaser"); + } + } + #endregion + + #region 更新采购方案 + { + var updateList = new List>(); + for (var i = 0; i < updateSchemeList.Count(); i++) + { + var scheme = updateSchemeList[i]; + var update = fsql.Update(scheme.Id) + .Set(ps => ps.BelongBargainTeamId, scheme.BelongBargainTeamId) + .Set(ps => ps.BelongBargainTeamName, scheme.BelongBargainTeamName); + updateList.Add(update); + if (updateList.Count() == 10) + { + fsql.Transaction(() => + { + foreach (var _u in updateList) + _u.ExecuteAffrows(); + }); + updateList.Clear(); + Console.WriteLine($"UpdateScheme {i + 1}/{updateSchemeList.Count()}"); + } + } + + if (updateList.Count() > 0) + { + fsql.Transaction(() => + { + foreach (var _u in updateList) + _u.ExecuteAffrows(); + }); + updateList.Clear(); + Console.WriteLine($"LastUpdateScheme"); + } + } + #endregion + + #region 更新采购分组 + { + var updateList = new List>(); + for (var i = 0; i < updateSchemeGroupList.Count(); i++) + { + var psg = updateSchemeGroupList[i]; + var update = fsql.Update(psg.Id) + .Set(g => g.BelongBargainTeamId, psg.BelongBargainTeamId); + updateList.Add(update); + if (updateList.Count() == 10) + { + fsql.Transaction(() => + { + foreach (var _u in updateList) + _u.ExecuteAffrows(); + }); + updateList.Clear(); + Console.WriteLine($"UpdateSchemeGroup {i + 1}/{updateSchemeGroupList.Count()}"); + } + } + + if (updateList.Count() > 0) + { + fsql.Transaction(() => + { + foreach (var _u in updateList) + _u.ExecuteAffrows(); + }); + updateList.Clear(); + Console.WriteLine($"LastUpdateSchemeGroup"); + } + } + #endregion + } } } From ef8b1f12337de948d4f8f572240d39d7b676afd1 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 2 Apr 2024 15:09:15 +0800 Subject: [PATCH 220/222] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sync/ProductSyncBusiness.cs | 132 ++++++++++-------- .../QuanTan_Supplier_SearchSpuRequest.cs | 5 + SDKAdapter/AdapterEnums.cs | 8 ++ .../Client/Impl/OP_QuanTanClient.cs | 3 +- .../Request/Product/OP_QueryProductRequest.cs | 5 + 5 files changed, 97 insertions(+), 56 deletions(-) diff --git a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs index c466336..266a664 100644 --- a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs @@ -312,28 +312,49 @@ namespace BBWYB.Server.Business.Sync List> updateProductSkuList = new List>(); #region 查询变化的spu - var spuRequest = new OP_QueryProductRequest() { - PageSize = 50, - PageIndex = 1, - AppKey = shop.AppKey, - AppSecret = shop.AppSecret, - AppToken = shop.AppToken, - Platform = SDKAdapter.AdapterEnums.PlatformType.拳探, - UpdateStartTime = DateTime.Now.AddHours(-1), - UpdateEndTime = DateTime.Now - }; - while (true) - { - var response = productBusiness.GetProductList(spuRequest); - if (response == null || response.Items == null || response.Items.Count == 0) - break; + #region 上架的spu + var spuRequest = new OP_QueryProductRequest() + { + PageSize = 50, + PageIndex = 1, + AppKey = shop.AppKey, + AppSecret = shop.AppSecret, + AppToken = shop.AppToken, + Platform = SDKAdapter.AdapterEnums.PlatformType.拳探, + UpdateStartTime = DateTime.Now.AddHours(-1), + UpdateEndTime = DateTime.Now + }; + while (true) + { + var response = productBusiness.GetProductList(spuRequest); + if (response == null || response.Items == null || response.Items.Count == 0) + break; - opProductList.AddRange(response.Items); - if (response.Items.Count < 50) - break; + opProductList.AddRange(response.Items); + if (response.Items.Count < spuRequest.PageSize) + break; + + spuRequest.PageIndex++; + } + #endregion - spuRequest.PageIndex++; + #region 下架的spu + spuRequest.PageIndex = 1; + spuRequest.ProductState = SDKAdapter.AdapterEnums.ProuctState.下架; + while (true) + { + var response = productBusiness.GetProductList(spuRequest); + if (response == null || response.Items == null || response.Items.Count == 0) + break; + + opProductList.AddRange(response.Items); + if (response.Items.Count < spuRequest.PageSize) + break; + + spuRequest.PageIndex++; + } + #endregion } #endregion @@ -379,39 +400,31 @@ namespace BBWYB.Server.Business.Sync updateProductList.Add(update); } } + #endregion #endregion - #region 查询变化的sku + #region 对比sku - var skuRequest = new OP_QueryProductSkuRequest() - { - AppKey = shop.AppKey, - AppSecret = shop.AppSecret, - AppToken = shop.AppToken, - Platform = SDKAdapter.AdapterEnums.PlatformType.拳探, - //Spu = product.Id, - PageSize = 50, - PageIndex = 1, - UpdateStartTime = DateTime.Now.AddHours(-1), - UpdateEndTime = DateTime.Now - }; - while (true) + foreach (var product in opProductList) { + var skuRequest = new OP_QueryProductSkuRequest() + { + AppKey = shop.AppKey, + AppSecret = shop.AppSecret, + AppToken = shop.AppToken, + Platform = SDKAdapter.AdapterEnums.PlatformType.拳探, + Spu = product.Id, + PageSize = 50, + PageIndex = 1, + }; + var response = productBusiness.GetProductSkuList(skuRequest); if (response == null || response.Items == null || response.Items.Count == 0) - break; - + continue; opProductSkuList.AddRange(response.Items); - if (response.Items.Count < 50) - break; - - skuRequest.PageIndex++; } - #endregion - - #region 对比sku var skuIdList = opProductSkuList.Select(x => x.Id); dbProductSkuList = fsql.Select(skuIdList).ToList(); @@ -430,7 +443,7 @@ namespace BBWYB.Server.Business.Sync SkuName = ps.Title, State = ps.State, SyncTime = DateTime.Now, - UpdateTime = ps.UpdateTime, + UpdateTime = DateTime.Now, UpperTime = ps.CreateTime, CategoryId = ps.CategoryId, CategoryName = ps.CategoryName @@ -440,27 +453,36 @@ namespace BBWYB.Server.Business.Sync #region 找出状态变化的SKU var stateChangeProductSkuList = opProductSkuList.Where(ps => dbProductSkuList.Any(dps => dps.Id == ps.Id && - (dps.State != ps.State || - dps.SkuName != ps.Title || - dps.Price != ps.Price || - dps.Logo != ps.Logo || - dps.CategoryId != ps.CategoryId))).ToList(); + (dps.State != ps.State || + dps.SkuName != ps.Title || + dps.Price != ps.Price || + dps.Logo != ps.Logo || + dps.CategoryId != ps.CategoryId))).ToList(); if (stateChangeProductSkuList.Count() > 0) { foreach (var productSku in stateChangeProductSkuList) { - var update = fsql.Update(productSku.Id).Set(ps => ps.State, productSku.State) - .Set(ps => ps.SkuName, productSku.Title) - .Set(ps => ps.Price, productSku.Price) - .Set(ps => ps.Logo, productSku.Logo) - .Set(ps => ps.CategoryId, productSku.CategoryId) - .Set(ps => ps.CategoryName, productSku.CategoryName) - .Set(ps => ps.UpdateTime, productSku.UpdateTime); + var update = fsql.Update(productSku.Id).Set(p => p.State, productSku.State) + .Set(p => p.SkuName, productSku.Title) + .Set(p => p.Price, productSku.Price) + .Set(p => p.Logo, productSku.Logo) + .Set(p => p.CategoryId, productSku.CategoryId) + .Set(p => p.CategoryName, productSku.CategoryName); updateProductSkuList.Add(update); } } #endregion + #region 找出接口查不出的SKU + var goneProductSkuList = dbProductSkuList.Where(dps => !opProductSkuList.Any(ps => ps.Id == dps.Id)).ToList(); + if (goneProductSkuList.Count() > 0) + { + var goneProductSkuIdList = goneProductSkuList.Select(ps => ps.Id).ToList(); + var update = fsql.Update().Set(ps => ps.State, 0).Where(ps => goneProductSkuIdList.Contains(ps.Id)); + updateProductSkuList.Add(update); + } + #endregion + #endregion #region 数据库操作 diff --git a/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchSpuRequest.cs b/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchSpuRequest.cs index d95d6fe..8e4739c 100644 --- a/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchSpuRequest.cs +++ b/QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_SearchSpuRequest.cs @@ -13,5 +13,10 @@ public DateTime? updateStart { get; set; } public DateTime? updateEnd { get; set; } + + /// + /// 上架状态 1上架 0下架 + /// + public string isShow { get; set; } = "1"; } } diff --git a/SDKAdapter/AdapterEnums.cs b/SDKAdapter/AdapterEnums.cs index 83d34cf..7976650 100644 --- a/SDKAdapter/AdapterEnums.cs +++ b/SDKAdapter/AdapterEnums.cs @@ -39,5 +39,13 @@ 批发 = 0, 代发 = 1 } + + /// + /// 商品状态 + /// + public enum ProuctState + { + 上架 = 1, 下架 = 0 + } } } diff --git a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs index f8e7a9e..8e51489 100644 --- a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs @@ -33,7 +33,8 @@ namespace SDKAdapter.OperationPlatform.Client productId = request.Spu, storeId = request.AppToken, updateStart = request.UpdateStartTime, - updateEnd = request.UpdateEndTime + updateEnd = request.UpdateEndTime, + isShow = request.ProductState == AdapterEnums.ProuctState.下架 ? "0" : "1" }, request.AppKey, request.AppSecret); if (qtResponse.Status != 200) diff --git a/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductRequest.cs b/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductRequest.cs index fc3a288..e179135 100644 --- a/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductRequest.cs +++ b/SDKAdapter/OperationPlatform/Models/Request/Product/OP_QueryProductRequest.cs @@ -33,5 +33,10 @@ /// 最后修改结束时间 /// public DateTime? UpdateEndTime { get; set; } + + /// + /// 上架状态 + /// + public AdapterEnums.ProuctState? ProductState { get; set; } } } From b14b9db5c62cea80832d310633bb6a4f004ef46b Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 3 Apr 2024 08:24:48 +0800 Subject: [PATCH 221/222] =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Sync/ProductSyncBusiness.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs index 266a664..8c6fd7f 100644 --- a/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/ProductSyncBusiness.cs @@ -322,8 +322,9 @@ namespace BBWYB.Server.Business.Sync AppSecret = shop.AppSecret, AppToken = shop.AppToken, Platform = SDKAdapter.AdapterEnums.PlatformType.拳探, - UpdateStartTime = DateTime.Now.AddHours(-1), - UpdateEndTime = DateTime.Now + //Spu = "9985", + UpdateStartTime = DateTime.Now.AddHours(-1), //DateTime.Parse("2024-04-02 12:00:00") DateTime.Now.AddHours(-1), + UpdateEndTime = DateTime.Now //DateTime.Parse("2024-04-02 12:02:00") DateTime.Now }; while (true) { From 65f4b2080ee1d8b4c5a35bacbe6ef244b3a3f484 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 3 Apr 2024 08:51:53 +0800 Subject: [PATCH 222/222] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=85=8D=E4=BB=B6?= =?UTF-8?q?=E7=BA=A7=E6=8A=A5=E4=BB=B7=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 26 ++++++++++------- .../SkuOptimization/OptimizationBusiness.cs | 20 ++++++++++++- ...zationproductskuupdatequotedpricerecord.cs | 29 +++++++++++++++++++ 3 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationproductskuupdatequotedpricerecord.cs diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index ab8d029..76daa53 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1080,14 +1080,20 @@ namespace BBWYB.Server.Business IncludePurchaseSkuBasicInfo = 1 }); - List competitiveTenderTaskList = null; + //List competitiveTenderTaskList = null; + List updatePriceList = null; if (user.isBargainTeam && request.SpuOptimizationTaskId != null && request.SpuOptimizationTaskId != 0) { - competitiveTenderTaskList = fsql.Select() - .Where(ct => ct.SpuOptimizationTaskId == request.SpuOptimizationTaskId && - ct.BargainTeamId == user.bargainTeam.Id) - .ToList(); + //competitiveTenderTaskList = fsql.Select() + // .Where(ct => ct.SpuOptimizationTaskId == request.SpuOptimizationTaskId && + // ct.BargainTeamId == user.bargainTeam.Id) + // .ToList(); + + updatePriceList = fsql.Select() + .Where(x => x.SpuOptimizationTaskId == request.SpuOptimizationTaskId && + x.BargainTeamId == user.bargainTeam.Id) + .ToList(); } var mergePssList = new List(); @@ -1105,12 +1111,10 @@ namespace BBWYB.Server.Business mergePss = pss.Map(); mergePssList.Add(mergePss); } - if (competitiveTenderTaskList != null) - { - var belongCompetitiveTenderTask = competitiveTenderTaskList.FirstOrDefault(ct => ct.SchemeId == scheme.Id); - if (belongCompetitiveTenderTask != null && belongCompetitiveTenderTask.IsUpdateQuotedPrice == true) - mergePss.IsUpdateQuotedPrice = true; - } + + if (updatePriceList != null && updatePriceList.Any(x => x.PurchaseSkuId == mergePss.PurchaseSkuId)) + mergePss.IsUpdateQuotedPrice = true; + mergePss.BelongSkuIdList.Add(pss.SkuId); } } diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs index 3d59249..52e80a4 100644 --- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs @@ -366,6 +366,7 @@ namespace BBWYB.Server.Business #region DBOperation List insertSpuOptimizationCompetitiveTenderTaskList = new List(); List updateCompetitiveTenderTaskIdList = new List(); + List insertUpdatePriceList = new List(); #endregion //var skuList = request.ItemList.Select(x => x.SkuId).Distinct().ToList(); @@ -393,6 +394,11 @@ namespace BBWYB.Server.Business IncludePurchaseSkuBasicInfo = 0 }); + //查询配件级报价任务 + var updatePriceRecordList = fsql.Select() + .Where(x => x.SpuOptimizationTaskId == request.SpuOptimizationTaskId && + x.BargainTeamId == uInfo.bargainTeam.Id) + .ToList(); //筛选出不在竞标任务中的采购方案 var noJoinCompetitiveTenderPurchaseSchemeList = relationPurchaseSchemeList.Where(ps => !competitiveTenderTaskList.Any(ct => ct.SchemeId == ps.Id)).ToList(); @@ -404,6 +410,15 @@ namespace BBWYB.Server.Business purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(batchEditPurchaseSkuActualPriceRequest, uInfo); } + insertUpdatePriceList.AddRange(request.ItemList.Where(x => !updatePriceRecordList.Any(r => r.PurchaseSkuId == x.PurchaseSkuId)).Select(x => new SpuOptimizationProductSkuUpdateQuotedPriceRecord() + { + Id = idGenerator.NewLong(), + BargainTeamId = uInfo.bargainTeam.Id, + CreateTime = DateTime.Now, + PurchaseSkuId = x.PurchaseSkuId, + SpuOptimizationTaskId = request.SpuOptimizationTaskId, + UserId = uInfo.user.Id + })); if (noJoinCompetitiveTenderPurchaseSchemeList.Count() > 0) { @@ -421,6 +436,7 @@ namespace BBWYB.Server.Business UpdateTime = DateTime.Now })); } + if (competitiveTenderTaskList.Count() > 0) { //updateCompetitiveTenderTaskIdList.AddRange(competitiveTenderTaskList.Select(ct => ct.Id).ToList()); @@ -450,6 +466,8 @@ namespace BBWYB.Server.Business .Set(ct => ct.IsUpdateQuotedPrice, true) .Set(ct => ct.UpdateTime, DateTime.Now) .ExecuteAffrows(); + if (insertUpdatePriceList.Count() > 0) + fsql.Insert(insertUpdatePriceList).ExecuteAffrows(); }); } @@ -790,7 +808,7 @@ namespace BBWYB.Server.Business var winGroupKey = psGroups.Select(g => new { SchemeGroupId = g.Key, Cost = g.Sum(ps => ps.BargainingCost ?? ps.DefaultCost) }) .OrderByDescending(x => x.Cost) .FirstOrDefault(); - victoryList.AddRange(competitiveTenderTaskList.Where(ct=>ct.SchemeGroupId == winGroupKey.SchemeGroupId)); + victoryList.AddRange(competitiveTenderTaskList.Where(ct => ct.SchemeGroupId == winGroupKey.SchemeGroupId)); //foreach (var psGroup in psGroups) //{ diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationproductskuupdatequotedpricerecord.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationproductskuupdatequotedpricerecord.cs new file mode 100644 index 0000000..d1208d3 --- /dev/null +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationproductskuupdatequotedpricerecord.cs @@ -0,0 +1,29 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + [Table(Name = "spuoptimizationproductskuupdatequotedpricerecord", DisableSyncStructure = true)] + public partial class SpuOptimizationProductSkuUpdateQuotedPriceRecord + { + + [Column(DbType = "bigint", IsPrimary = true)] + public long Id { get; set; } + + [Column(StringLength = 50)] + public string BargainTeamId { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + [Column(StringLength = 50)] + public string PurchaseSkuId { get; set; } + + [Column(DbType = "bigint")] + public long? SpuOptimizationTaskId { get; set; } + + [Column(StringLength = 50)] + public string UserId { get; set; } + + } + +}