From 1673f1fd90c0a93db5ff2be3d6de134ad65d8131 Mon Sep 17 00:00:00 2001 From: Loretta Date: Mon, 24 Nov 2025 08:27:02 +0100 Subject: [PATCH] improvements, fixes, etc... --- .../Controllers/CustomOrderSignalREndpoint.cs | 29 ++++++++--- .../Controllers/FruitBankDataController.cs | 51 +++++++++++++++---- .../Domains/DataLayer/OrderItemDtoDbTable.cs | 5 +- .../Domains/DataLayer/ShippingDbTable.cs | 4 +- .../Domains/DataLayer/ShippingItemDbTable.cs | 3 ++ .../DataLayer/ShippingItemPalletDbTable.cs | 1 + .../Infrastructure/PluginNopStartup.cs | 2 +- 7 files changed, 74 insertions(+), 21 deletions(-) diff --git a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderSignalREndpoint.cs b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderSignalREndpoint.cs index 37f0537..316a908 100644 --- a/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderSignalREndpoint.cs +++ b/Nop.Plugin.Misc.AIPlugin/Areas/Admin/Controllers/CustomOrderSignalREndpoint.cs @@ -1,5 +1,6 @@ using AyCode.Core.Loggers; using AyCode.Services.SignalRs; +using DocumentFormat.OpenXml.Drawing; using FruitBank.Common.Dtos; using FruitBank.Common.Entities; using FruitBank.Common.Interfaces; @@ -20,14 +21,16 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers; public class CustomOrderSignalREndpoint(FruitBankDbContext ctx, SignalRSendToClientService sendToClient, IPriceCalculationService customPriceCalculationService,IEventPublisher eventPublisher, IWorkContext workContext, IEnumerable logWriters) : ICustomOrderSignalREndpointServer { - private const int FromOrderDays = -14; + private const int LastOrderDays = 15; private readonly ILogger _logger = new Logger(logWriters.ToArray()); [SignalR(SignalRTags.GetAllOrderDtos)] public async Task> GetAllOrderDtos() { - var fromDateUtc = DateTime.UtcNow.Date.AddDays(FromOrderDays); - return await ctx.OrderDtos.GetAll(true).Where(o => o.CreatedOnUtc > fromDateUtc).ToListAsync(); + _logger.Detail($"GetAllOrderDtos invoked; lastDaysCount: {LastOrderDays}"); + + var fromDateUtc = DateTime.UtcNow.Date.AddDays(-LastOrderDays); + return await ctx.OrderDtos.GetAll(true).Where(o => o.CreatedOnUtc >= fromDateUtc).ToListAsync(); } [SignalR(SignalRTags.GetOrderDtoById)] @@ -45,8 +48,15 @@ public class CustomOrderSignalREndpoint(FruitBankDbContext ctx, SignalRSendToCli [SignalR(SignalRTags.GetPendingOrderDtosForMeasuring)] public async Task> GetPendingOrderDtosForMeasuring(int lastDaysCount) { + _logger.Detail($"GetPendingOrderDtosForMeasuring invoked; lastDaysCount: {lastDaysCount}"); + + var startTime = DateTime.Now; var fromDate = DateTime.Now.AddDays(-lastDaysCount); - return await ctx.OrderDtos.GetAllForMeasuring(fromDate).ToListAsync(); + + var orders = await ctx.OrderDtos.GetAllForMeasuring(fromDate).ToListAsync(); + _logger.Detail($"GetPendingOrderDtosForMeasuring; ordersCount: {orders.Count}; dbResponse: {(DateTime.Now - startTime).TotalSeconds} sec."); + + return orders; } [SignalR(SignalRTags.GetOrderDatesForMeasuring)] @@ -78,8 +88,10 @@ public class CustomOrderSignalREndpoint(FruitBankDbContext ctx, SignalRSendToCli [SignalR(SignalRTags.GetAllOrderItemDtos)] public async Task> GetAllOrderItemDtos() { - var fromDateUtc = DateTime.UtcNow.Date.AddDays(FromOrderDays); - return await ctx.OrderItemDtos.GetAll(true).Where(oi => oi.OrderDto.CreatedOnUtc > fromDateUtc).ToListAsync(); + _logger.Detail($"GetAllOrderItemDtos invoked; lastDaysCount: {LastOrderDays}"); + + var fromDateUtc = DateTime.UtcNow.Date.AddDays(-LastOrderDays); + return await ctx.OrderItemDtos.GetAll(true).Where(oi => oi.OrderDto == null || oi.OrderDto.CreatedOnUtc >= fromDateUtc).ToListAsync(); } [SignalR(SignalRTags.GetAllOrderItemDtoByOrderId)] @@ -103,7 +115,10 @@ public class CustomOrderSignalREndpoint(FruitBankDbContext ctx, SignalRSendToCli [SignalR(SignalRTags.GetAllOrderItemPallets)] public async Task> GetAllOrderItemPallets() { - return await ctx.OrderItemPallets.GetAll(true).ToListAsync(); + _logger.Detail($"GetAllOrderItemPallets invoked; lastDaysCount: {LastOrderDays}"); + + var fromDateUtc = DateTime.UtcNow.Date.AddDays(-LastOrderDays); + return await ctx.OrderItemPallets.GetAll(true).Where(oip => oip.OrderItemDto.OrderDto == null || oip.OrderItemDto.OrderDto.CreatedOnUtc >= fromDateUtc).ToListAsync(); } [SignalR(SignalRTags.GetAllOrderItemPalletByOrderItemId)] public async Task> GetAllOrderItemPalletByOrderItemId(int orderItemId) diff --git a/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs b/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs index 4b03e32..6658b84 100644 --- a/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs +++ b/Nop.Plugin.Misc.AIPlugin/Controllers/FruitBankDataController.cs @@ -1,4 +1,8 @@ -using AyCode.Core.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AyCode.Core.Extensions; using AyCode.Core.Loggers; using AyCode.Services.SignalRs; using DocumentFormat.OpenXml.Office2010.Excel; @@ -37,6 +41,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers IEnumerable logWriters) : BasePluginController, IFruitBankDataControllerServer { + private const int LastShippingDays = 15; private readonly ILogger _logger = new Logger(logWriters.ToArray()); [SignalR(SignalRTags.ProcessAndSaveFullShippingJson)] @@ -93,18 +98,24 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers [SignalR(SignalRTags.GetShippings)] public async Task> GetShippings() { - _logger.Detail($"GetShippings invoked"); + _logger.Detail($"GetShippings invoked; lastDaysCount: {LastShippingDays}"); - return await ctx.Shippings.GetAll(true).ToListAsync(); + var fromDateUtc = DateTime.UtcNow.Date.AddDays(-LastShippingDays); + return await ctx.Shippings.GetAll(true).Where(s => s.ShippingDate >= fromDateUtc).ToListAsync(); //return await ctx.Shippings.Table.LoadWith(sd => sd.ShippingDocuments).ThenLoad(si => si.ShippingItems).ToListAsync(); } [SignalR(SignalRTags.GetNotMeasuredShippings)] public async Task> GetNotMeasuredShippings() { - _logger.Detail($"GetNotMeasuredShippings invoked"); + _logger.Detail($"GetNotMeasuredShippings invoked; lastDaysCount: {LastShippingDays}"); + + var startTime = DateTime.Now; + var shippings = await ctx.Shippings.GetAllNotMeasured(true, LastShippingDays).ToListAsync(); + + _logger.Detail($"GetNotMeasuredShippings; shippingsCount: {shippings.Count}; dbResponse: {(DateTime.Now - startTime).TotalSeconds} sec."); + return shippings; - return await ctx.Shippings.GetAllNotMeasured(true).ToListAsync(); } [SignalR(SignalRTags.GetShippingById)] @@ -140,9 +151,11 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers [SignalR(SignalRTags.GetShippingItems)] public async Task> GetShippingItems() { - _logger.Detail($"GetShippingItems invoked"); + _logger.Detail($"GetShippingItems invoked; lastDaysCount: {LastShippingDays}"); - return await ctx.ShippingItems.GetAll(true).ToListAsync(); + var fromDateUtc = DateTime.UtcNow.Date.AddDays(-LastShippingDays); + return await ctx.ShippingItems.GetAll(true).Where(si => si.ShippingDocument.Shipping == null || + si.ShippingDocument.Shipping.ShippingDate >= fromDateUtc).ToListAsync(); } [SignalR(SignalRTags.GetShippingItemsByDocumentId)] @@ -161,6 +174,14 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers return await ctx.ShippingItems.GetAllByShippingIdAsync(shippingId, true).ToListAsync(); } + [SignalR(SignalRTags.GetShippingItemsByPartnerId)] + public async Task> GetShippingItemsByPartnerId(int partnerId) + { + _logger.Detail($"GetShippingItemsByPartnerId invoked"); + + return await ctx.ShippingItems.GetAllByPartnerIdAsync(partnerId, true).ToListAsync(); + } + [SignalR(SignalRTags.GetShippingItemById)] public async Task GetShippingItemById(int id) { @@ -203,6 +224,17 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers return await ctx.ShippingItems.GetByIdAsync(shippingItem.Id, shippingItem.ShippingDocument != null); } + [SignalR(SignalRTags.GetShippingItemPallets)] + public async Task> GetShippingItemPallets() + { + _logger.Detail($"GetShippingItemPallets invoked; lastDaysCount: {LastShippingDays}"); + + var fromDateUtc = DateTime.UtcNow.Date.AddDays(-LastShippingDays); + + return await ctx.ShippingItemPallets.GetAll(true).Where(sip => sip.ShippingItem.ShippingDocument.Shipping == null || + sip.ShippingItem.ShippingDocument.Shipping.ShippingDate >= fromDateUtc).ToListAsync(); + } + [SignalR(SignalRTags.AddShippingItemPallet)] public async Task AddShippingItemPallet(ShippingItemPallet shippingItemPallet) { @@ -259,9 +291,10 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers [SignalR(SignalRTags.GetShippingDocuments)] public async Task> GetShippingDocuments() { - _logger.Detail($"GetShippingDocuments invoked"); + _logger.Detail($"GetShippingDocuments invoked; lastDaysCount: {LastShippingDays}"); - return await ctx.ShippingDocuments.GetAll(true).ToListAsync(); + var fromDateUtc = DateTime.UtcNow.Date.AddDays(-LastShippingDays); + return await ctx.ShippingDocuments.GetAll(true).Where(sd => sd.Shipping == null || sd.Shipping.ShippingDate >= fromDateUtc).ToListAsync(); } [SignalR(SignalRTags.GetShippingDocumentById)] diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderItemDtoDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderItemDtoDbTable.cs index 626cecb..55d8eb9 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderItemDtoDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/OrderItemDtoDbTable.cs @@ -21,6 +21,7 @@ public class OrderItemDtoDbTable : MgDtoDbTableBase { return GetAll() .LoadWith(oi => oi.GenericAttributes) + .LoadWith(oi => oi.OrderDto).ThenLoad(o => o.Customer) .LoadWith(oi => oi.OrderDto).ThenLoad(o => o.OrderNotes) .LoadWith(oi => oi.OrderDto).ThenLoad(o => o.GenericAttributes) .LoadWith(oi => oi.OrderItemPallets).ThenLoad(oip => oip.OrderItemDto).ThenLoad(oi => oi.GenericAttributes) @@ -29,8 +30,8 @@ public class OrderItemDtoDbTable : MgDtoDbTableBase public Task GetByIdAsync(int orderItemId, bool loadRelations) => GetAll(loadRelations).Where(oi => oi.Id == orderItemId).FirstOrDefaultAsync(null); - public IQueryable GetAllByOrderId(int orderId, bool loadRelations = true)=> GetAll(loadRelations).Where(oi => oi.OrderId == orderId); - public IQueryable GetAllByProductId(int productId, bool loadRelations = true)=> GetAll(loadRelations).Where(oi => oi.ProductId == productId); + public IQueryable GetAllByOrderId(int orderId, bool loadRelations = true) => GetAll(loadRelations).Where(oi => oi.OrderId == orderId); + public IQueryable GetAllByProductId(int productId, bool loadRelations = true) => GetAll(loadRelations).Where(oi => oi.ProductId == productId); public IQueryable GetAllByIds(IEnumerable orderItemIds, bool loadRelations = true) => GetAll(loadRelations).Where(oi => orderItemIds.Contains(oi.Id)); public IQueryable GetAllByOrderIds(IEnumerable orderIds, bool loadRelations = true) => GetAll(loadRelations).Where(oi => orderIds.Contains(oi.OrderId)); diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs index 960a3c3..17f55e9 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingDbTable.cs @@ -31,8 +31,8 @@ public class ShippingDbTable : MgDbTableBase : GetAll(); } - public IQueryable GetAllNotMeasured(bool loadRelations) - => GetAll(loadRelations).Where(s => !s.IsAllMeasured || s.MeasuredDate == null || s.MeasuredDate < DateTime.Now.AddDays(1000)); + public IQueryable GetAllNotMeasured(bool loadRelations, int lastDaysCount) + => GetAll(loadRelations).Where(s => !s.IsAllMeasured || s.MeasuredDate == null || s.MeasuredDate >= DateTime.Now.AddDays(-lastDaysCount)); public Task GetByIdAsync(int id, bool loadRelations) diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs index 14a187f..cabef4d 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemDbTable.cs @@ -62,6 +62,9 @@ public class ShippingItemDbTable : MgDbTableBase public IQueryable GetAllByShippingIdAsync(int shippingId, bool loadRelations) => GetAll(loadRelations).Where(si => si.ShippingDocument.ShippingId == shippingId); + public IQueryable GetAllByPartnerIdAsync(int partnerId, bool loadRelations) + => GetAll(loadRelations).Where(si => si.ShippingDocument.PartnerId == partnerId); + private static void PrepareValues(ShippingItem shippingItem) { if (shippingItem.MeasuringCount < 1) shippingItem.MeasuringCount = 1; diff --git a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs index d76b362..b838690 100644 --- a/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs +++ b/Nop.Plugin.Misc.AIPlugin/Domains/DataLayer/ShippingItemPalletDbTable.cs @@ -23,6 +23,7 @@ public class ShippingItemPalletDbTable : MeasuringItemPalletBaseDbTable sip.ShippingItem).ThenLoad(si => si.ProductDto).ThenLoad(prod => prod.GenericAttributes) + .LoadWith(sip => sip.ShippingItem).ThenLoad(si => si.ShippingDocument).ThenLoad(sd => sd.Shipping) //.LoadWith(sip => sip.ShippingItem).ThenLoad(si => si.ShippingDocument).ThenLoad(sd => sd.Shipping) //.LoadWith(sip => sip.ShippingItem).ThenLoad(si => si.ShippingDocument).ThenLoad(p => p.Partner) //.LoadWith(sip => sip.ShippingItem).ThenLoad(si => si.ShippingDocument).ThenLoad(sd => sd.ShippingDocumentToFiles).ThenLoad(sdtof => sdtof.ShippingDocumentFile) diff --git a/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs b/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs index ccc2565..6a2f500 100644 --- a/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs +++ b/Nop.Plugin.Misc.AIPlugin/Infrastructure/PluginNopStartup.cs @@ -119,7 +119,7 @@ public class PluginNopStartup : INopStartup services.AddSignalR(hubOptions => { - //hubOptions.EnableDetailedErrors = true; + hubOptions.EnableDetailedErrors = true; hubOptions.MaximumReceiveMessageSize = null; // 256 * 1024; hubOptions.KeepAliveInterval = TimeSpan.FromSeconds(FruitBankConstClient.SignalRKeepAliveIntervalSecond); hubOptions.ClientTimeoutInterval = TimeSpan.FromSeconds(FruitBankConstClient.SignarlRTimeoutIntervalSecond);