From b3087b8f6401d329bd05cccc7ba2611c054f1a97 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 4 Aug 2023 09:04:11 +0800 Subject: [PATCH 01/18] 1 --- WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs index 3f3b38f1..67bf6a95 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs @@ -60,9 +60,7 @@ namespace Tnb.WarehouseMgr { await action(cts).Catch(ex => { - //MessageSendModel messageSendModel = new(); - //_sendService?.SendMessage(); - //messageService.SentMessage(toUserIds!, ex.Message, ex.ToString()); + //notify operator }); await Task.Delay(1000); } From 04fe68fd1cf88e403a851fca3787e0e598db3ed6 Mon Sep 17 00:00:00 2001 From: FanLian Date: Fri, 4 Aug 2023 10:08:24 +0800 Subject: [PATCH 02/18] =?UTF-8?q?=E7=94=9F=E6=88=90=E9=BD=90=E5=A5=97?= =?UTF-8?q?=E5=85=A5=E5=BA=93=E7=9A=84=E5=8F=82=E6=95=B0=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs index 53a612da..eb14d720 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs @@ -99,8 +99,8 @@ namespace Tnb.WarehouseMgr visualDevModelCrInput.data[nameof(WmsKittingInstock.create_time)] = DateTime.Now; visualDevModelCrInput.data[nameof(WmsKittingInstock.location_id)] = carry!.location_id!; visualDevModelCrInput.data[nameof(WmsKittingInstock.bill_code)] = _billRullService.GetBillNumber("WmsKittingInStk").GetAwaiter().GetResult(); - visualDevModelCrInput.data[nameof(WmsKittingInstock.source_id)] = kittingout.source_id; - visualDevModelCrInput.data[nameof(WmsKittingInstock.source_code)] = kittingout.source_code; + visualDevModelCrInput.data[nameof(WmsKittingInstock.source_id)] = kittingout.id; + visualDevModelCrInput.data[nameof(WmsKittingInstock.source_code)] = kittingout.bill_code; var location = await _db.Queryable().SingleAsync(it => it.id == kittingout.location_id); From b5916b4c0e0be11b83a29c05400d77ba4142eb76 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 4 Aug 2023 10:10:23 +0800 Subject: [PATCH 03/18] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E3=80=81=E7=99=BB=E5=87=BA=E9=80=9A=E7=9F=A5Wms=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E6=9C=8D=E5=8A=A1=E7=9A=84=E5=90=AF=E5=8A=A8=E9=A2=84?= =?UTF-8?q?=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ConditionalBackgroundService.cs | 30 +++++++++++++++++++ .../Tnb.WarehouseMgr/WareHouseService.cs | 1 - apihost/Tnb.API.Entry/Startup.cs | 2 +- system/Tnb.OAuth/OAuthService.cs | 9 ++++++ system/Tnb.OAuth/Tnb.OAuth.csproj | 1 + 5 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/ConditionalBackgroundService.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ConditionalBackgroundService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ConditionalBackgroundService.cs new file mode 100644 index 00000000..745a3cf2 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/ConditionalBackgroundService.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.Hosting; + +namespace Tnb.WarehouseMgr +{ + public class ConditionalBackgroundService : IHostedService + { + private readonly IHostedService _backgroundService; + //private readonly Func _condition; + + public ConditionalBackgroundService(IHostedService backgroundService) + { + _backgroundService = backgroundService; + } + + public async Task StartAsync(CancellationToken cancellationToken) + { + await _backgroundService.StartAsync(cancellationToken); + } + public async Task StopAsync(CancellationToken cancellationToken) + { + await _backgroundService.StopAsync(cancellationToken); + } + + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 78fabc26..5aacae45 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -283,7 +283,6 @@ namespace Tnb.WarehouseMgr start = end; end = Math.Min((end + moveNum), arrary.Length); } - foreach (var arr in arrList) { for (int j = 1, len = arr.Length; j <= len; j++) diff --git a/apihost/Tnb.API.Entry/Startup.cs b/apihost/Tnb.API.Entry/Startup.cs index dd5e6ed7..6b72c8c3 100644 --- a/apihost/Tnb.API.Entry/Startup.cs +++ b/apihost/Tnb.API.Entry/Startup.cs @@ -64,7 +64,7 @@ public class Startup : AppStartup services.AddOverideVisualDev(); //定时任务 - services.AddHostedService(); + services.AddHostedService(sp => new ConditionalBackgroundService(sp.GetRequiredService())); } diff --git a/system/Tnb.OAuth/OAuthService.cs b/system/Tnb.OAuth/OAuthService.cs index afebf9dd..ea5d3651 100644 --- a/system/Tnb.OAuth/OAuthService.cs +++ b/system/Tnb.OAuth/OAuthService.cs @@ -41,6 +41,7 @@ using JNPF.Common.Core.Handlers; using JNPF.Message.Interfaces.Message; using JNPF.Extras.DatabaseAccessor.SqlSugar.Models; using Aop.Api.Domain; +using Tnb.WarehouseMgr; namespace JNPF.OAuth; @@ -382,6 +383,10 @@ public class OAuthService : IDynamicApiController, ITransient [HttpGet("Logout")] public async Task Logout([FromQuery] string ticket) { + //用户退出时停止Wms定时任务 modify by ly on 20230804 + var conditionalBackgroundService = App.GetRequiredService(); + await conditionalBackgroundService.StopAsync(CancellationToken.None); + var tenantId = _userManager.TenantId ?? "default"; var userId = _userManager.UserId ?? "admim"; var httpContext = _httpContextAccessor.HttpContext; @@ -672,6 +677,10 @@ public class OAuthService : IDynamicApiController, ITransient } } + //启动Wms定时服务 modify by ly on 20230804 + var conditionalBackgroundService = App.GetRequiredService(); + await conditionalBackgroundService.StartAsync(CancellationToken.None); + return new { theme = user.Theme == null ? "classic" : user.Theme, diff --git a/system/Tnb.OAuth/Tnb.OAuth.csproj b/system/Tnb.OAuth/Tnb.OAuth.csproj index af2ae6c7..418136aa 100644 --- a/system/Tnb.OAuth/Tnb.OAuth.csproj +++ b/system/Tnb.OAuth/Tnb.OAuth.csproj @@ -12,6 +12,7 @@ + From f0e859a2037915fa2f0fa8b46ac96a358f55a088 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 4 Aug 2023 10:38:53 +0800 Subject: [PATCH 04/18] 1 --- .../TimedTaskBackgroundService.cs | 58 +++++++++++-------- apihost/Tnb.API.Entry/Startup.cs | 4 +- system/Tnb.OAuth/OAuthService.cs | 18 ++++-- 3 files changed, 50 insertions(+), 30 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs index 67bf6a95..449f99a1 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs @@ -22,35 +22,47 @@ namespace Tnb.WarehouseMgr /// 定时任务 /// added by ly on 20230802 /// - public class TimedTaskBackgroundService : BackgroundService + public class TimedTaskBackgroundService : IHostedService { private ISendMessageService? _sendService; - protected override async Task ExecuteAsync(CancellationToken stoppingToken) + + public Task StartAsync(CancellationToken cancellationToken) { - - await Task.Run(() => - { - _sendService = App.GetRequiredService(); - var userManager = App.GetRequiredService(); - List toUserIds = new List() { "25398501929509" }; - //生成任务执行 - CancellationTokenSource genTaskCTS = new(); - CancellationTokenSource kittingOutAddCts = new(); - CancellationTokenSource kittingOutShippedCts = new(); - CancellationTokenSource setSortingCts = new(); + return Task.Run(() => + { + //_sendService = App.GetRequiredService(); - var wareHouseService = App.GetRequiredService(); - TimedTask(cts => wareHouseService.GenTaskExecute(cts), genTaskCTS, toUserIds); - //齐套出库 - var kittingOutService = App.GetRequiredService(); - TimedTask(cts => kittingOutService.KittingOutByAdd(cts), kittingOutAddCts, toUserIds); - TimedTask(cts => kittingOutService.KittingOutByIsToBeShipped(cts), kittingOutShippedCts, toUserIds); - //齐套分拣 - var setSortingService = App.GetRequiredService(); - TimedTask(cts => setSortingService.PackSortingByAdd(cts), setSortingCts, toUserIds); - }); + List toUserIds = new List() { "25398501929509" }; + //生成任务执行 + CancellationTokenSource genTaskCTS = new(); + CancellationTokenSource kittingOutAddCts = new(); + CancellationTokenSource kittingOutShippedCts = new(); + CancellationTokenSource setSortingCts = new(); + + var wareHouseService = App.GetRequiredService(); + TimedTask(cts => wareHouseService.GenTaskExecute(cts), genTaskCTS, toUserIds); + //齐套出库 + + var kittingOutService = App.GetRequiredService(); + TimedTask(cts => kittingOutService.KittingOutByAdd(cts), kittingOutAddCts, toUserIds); + TimedTask(cts => kittingOutService.KittingOutByIsToBeShipped(cts), kittingOutShippedCts, toUserIds); + //齐套分拣 + var setSortingService = App.GetRequiredService(); + TimedTask(cts => setSortingService.PackSortingByAdd(cts), setSortingCts, toUserIds); + }); } + + public Task StopAsync(CancellationToken cancellationToken) + { + return Task.CompletedTask; + } + + //protected override Task ExecuteAsync(CancellationToken stoppingToken) + //{ + // throw new NotImplementedException(); + //} + private Task TimedTask(Func action, CancellationTokenSource cts, List? toUserIds = default) { var token = cts.Token; diff --git a/apihost/Tnb.API.Entry/Startup.cs b/apihost/Tnb.API.Entry/Startup.cs index 6b72c8c3..148569d4 100644 --- a/apihost/Tnb.API.Entry/Startup.cs +++ b/apihost/Tnb.API.Entry/Startup.cs @@ -64,7 +64,9 @@ public class Startup : AppStartup services.AddOverideVisualDev(); //定时任务 - services.AddHostedService(sp => new ConditionalBackgroundService(sp.GetRequiredService())); + //services.AddHostedService(); + //services.AddSingleton(); + //services.AddHostedService(sp => new ConditionalBackgroundService(sp.GetRequiredService())); } diff --git a/system/Tnb.OAuth/OAuthService.cs b/system/Tnb.OAuth/OAuthService.cs index ea5d3651..37e1e397 100644 --- a/system/Tnb.OAuth/OAuthService.cs +++ b/system/Tnb.OAuth/OAuthService.cs @@ -42,6 +42,8 @@ using JNPF.Message.Interfaces.Message; using JNPF.Extras.DatabaseAccessor.SqlSugar.Models; using Aop.Api.Domain; using Tnb.WarehouseMgr; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; namespace JNPF.OAuth; @@ -141,6 +143,8 @@ public class OAuthService : IDynamicApiController, ITransient private readonly IMHandler _imHandler; + + /// /// 初始化一个类型的新实例. /// @@ -383,14 +387,14 @@ public class OAuthService : IDynamicApiController, ITransient [HttpGet("Logout")] public async Task Logout([FromQuery] string ticket) { - //用户退出时停止Wms定时任务 modify by ly on 20230804 - var conditionalBackgroundService = App.GetRequiredService(); - await conditionalBackgroundService.StopAsync(CancellationToken.None); var tenantId = _userManager.TenantId ?? "default"; var userId = _userManager.UserId ?? "admim"; var httpContext = _httpContextAccessor.HttpContext; httpContext.SignoutToSwagger(); + //用户退出时停止Wms定时任务 modify by ly on 20230804 + var timedTaskService = ActivatorUtilities.CreateInstance(httpContext.RequestServices); + await timedTaskService.StopAsync(CancellationToken.None); // 清除IM中的webSocket var list = await GetOnlineUserList(tenantId); @@ -678,9 +682,11 @@ public class OAuthService : IDynamicApiController, ITransient } //启动Wms定时服务 modify by ly on 20230804 - var conditionalBackgroundService = App.GetRequiredService(); - await conditionalBackgroundService.StartAsync(CancellationToken.None); - + //var conditionalBackgroundService = App.GetRequiredService(); + //await conditionalBackgroundService.StartAsync(CancellationToken.None); + var httpContext = _httpContextAccessor.HttpContext; + var timedTaskService = ActivatorUtilities.CreateInstance(httpContext.RequestServices); + await timedTaskService.StartAsync(default); return new { theme = user.Theme == null ? "classic" : user.Theme, From e892c087344a03298f53222c6dd7b019bf857a8e Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 4 Aug 2023 11:26:08 +0800 Subject: [PATCH 05/18] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=B3=BB=E7=BB=9F=E5=B4=A9=E6=BA=83=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ConditionalBackgroundService.cs | 30 ++++++++++++ .../TimedTaskBackgroundService.cs | 49 +++++++++---------- .../Tnb.WarehouseMgr/WareHouseService.cs | 1 - .../WmsRobotCallbackService.cs | 4 +- .../Tnb.WarehouseMgr/WmskittingOutService.cs | 2 + .../Tnb.TaskScheduler/TimeTaskService.cs | 2 +- 6 files changed, 59 insertions(+), 29 deletions(-) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/ConditionalBackgroundService.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ConditionalBackgroundService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ConditionalBackgroundService.cs new file mode 100644 index 00000000..745a3cf2 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/ConditionalBackgroundService.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.Hosting; + +namespace Tnb.WarehouseMgr +{ + public class ConditionalBackgroundService : IHostedService + { + private readonly IHostedService _backgroundService; + //private readonly Func _condition; + + public ConditionalBackgroundService(IHostedService backgroundService) + { + _backgroundService = backgroundService; + } + + public async Task StartAsync(CancellationToken cancellationToken) + { + await _backgroundService.StartAsync(cancellationToken); + } + public async Task StopAsync(CancellationToken cancellationToken) + { + await _backgroundService.StopAsync(cancellationToken); + } + + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs index 3f3b38f1..53391ee2 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs @@ -25,32 +25,33 @@ namespace Tnb.WarehouseMgr public class TimedTaskBackgroundService : BackgroundService { private ISendMessageService? _sendService; - protected override async Task ExecuteAsync(CancellationToken stoppingToken) + + protected override Task ExecuteAsync(CancellationToken stoppingToken) { - - await Task.Run(() => - { - _sendService = App.GetRequiredService(); - var userManager = App.GetRequiredService(); - List toUserIds = new List() { "25398501929509" }; - //生成任务执行 - CancellationTokenSource genTaskCTS = new(); - CancellationTokenSource kittingOutAddCts = new(); - CancellationTokenSource kittingOutShippedCts = new(); - CancellationTokenSource setSortingCts = new(); + return Task.Run(() => + { + //_sendService = App.GetRequiredService(); + List toUserIds = new List() { "25398501929509" }; + //生成任务执行 + CancellationTokenSource genTaskCTS = new(); + CancellationTokenSource kittingOutAddCts = new(); + CancellationTokenSource kittingOutShippedCts = new(); + CancellationTokenSource setSortingCts = new(); - var wareHouseService = App.GetRequiredService(); - TimedTask(cts => wareHouseService.GenTaskExecute(cts), genTaskCTS, toUserIds); - //齐套出库 + var wareHouseService = App.GetRequiredService(); + TimedTask(cts => wareHouseService.GenTaskExecute(cts), genTaskCTS, toUserIds); + //齐套出库 - var kittingOutService = App.GetRequiredService(); - TimedTask(cts => kittingOutService.KittingOutByAdd(cts), kittingOutAddCts, toUserIds); - TimedTask(cts => kittingOutService.KittingOutByIsToBeShipped(cts), kittingOutShippedCts, toUserIds); - //齐套分拣 - var setSortingService = App.GetRequiredService(); - TimedTask(cts => setSortingService.PackSortingByAdd(cts), setSortingCts, toUserIds); - }); + var kittingOutService = App.GetRequiredService(); + TimedTask(cts => kittingOutService.KittingOutByAdd(cts), kittingOutAddCts, toUserIds); + TimedTask(cts => kittingOutService.KittingOutByIsToBeShipped(cts), kittingOutShippedCts, toUserIds); + //齐套分拣 + var setSortingService = App.GetRequiredService(); + TimedTask(cts => setSortingService.PackSortingByAdd(cts), setSortingCts, toUserIds); + }); } + + private Task TimedTask(Func action, CancellationTokenSource cts, List? toUserIds = default) { var token = cts.Token; @@ -60,9 +61,7 @@ namespace Tnb.WarehouseMgr { await action(cts).Catch(ex => { - //MessageSendModel messageSendModel = new(); - //_sendService?.SendMessage(); - //messageService.SentMessage(toUserIds!, ex.Message, ex.ToString()); + //notify operator }); await Task.Delay(1000); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 78fabc26..5aacae45 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -283,7 +283,6 @@ namespace Tnb.WarehouseMgr start = end; end = Math.Min((end + moveNum), arrary.Length); } - foreach (var arr in arrList) { for (int j = 1, len = arr.Length; j <= len; j++) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs index 53a612da..eb14d720 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs @@ -99,8 +99,8 @@ namespace Tnb.WarehouseMgr visualDevModelCrInput.data[nameof(WmsKittingInstock.create_time)] = DateTime.Now; visualDevModelCrInput.data[nameof(WmsKittingInstock.location_id)] = carry!.location_id!; visualDevModelCrInput.data[nameof(WmsKittingInstock.bill_code)] = _billRullService.GetBillNumber("WmsKittingInStk").GetAwaiter().GetResult(); - visualDevModelCrInput.data[nameof(WmsKittingInstock.source_id)] = kittingout.source_id; - visualDevModelCrInput.data[nameof(WmsKittingInstock.source_code)] = kittingout.source_code; + visualDevModelCrInput.data[nameof(WmsKittingInstock.source_id)] = kittingout.id; + visualDevModelCrInput.data[nameof(WmsKittingInstock.source_code)] = kittingout.bill_code; var location = await _db.Queryable().SingleAsync(it => it.id == kittingout.location_id); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs index adbee72a..c6141429 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs @@ -155,6 +155,8 @@ namespace Tnb.WarehouseMgr [HttpPost] public async Task KittingOutByIsToBeShipped(CancellationTokenSource? cts = default) { + if (_userManager.User == null) return; + var curDb = _db.CopyNew(); try { diff --git a/taskschedule/Tnb.TaskScheduler/TimeTaskService.cs b/taskschedule/Tnb.TaskScheduler/TimeTaskService.cs index 41e779a2..9b62e4c1 100644 --- a/taskschedule/Tnb.TaskScheduler/TimeTaskService.cs +++ b/taskschedule/Tnb.TaskScheduler/TimeTaskService.cs @@ -302,7 +302,7 @@ public class TimeTaskService : ITimeTaskService, IDynamicApiController, ITransie // 非多租户模式启动自启任务 if (!KeyVariable.MultiTenancy) { - _repository.AsQueryable().Where(x => x.DeleteMark == null && x.EnabledMark == 1).ToList().ForEach(x=>AddTimerJob(x,false));//modifyby zhoukeda 20230607 + _repository.AsSugarClient().CopyNew().Queryable().Where(x => x.DeleteMark == null && x.EnabledMark == 1).ToList().ForEach(x=>AddTimerJob(x,false));//modifyby zhoukeda 20230607 } } From 6ad92877b9f174ad3a118c1d10110bbb0af6daa4 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 4 Aug 2023 11:27:37 +0800 Subject: [PATCH 06/18] 1 --- WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs | 2 +- WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs | 2 +- apihost/Tnb.API.Entry/Startup.cs | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs index 5db6aab0..ca071cb4 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs @@ -22,7 +22,7 @@ namespace Tnb.WarehouseMgr /// 定时任务 /// added by ly on 20230802 /// - public class TimedTaskBackgroundService : IHostedService + public class TimedTaskBackgroundService : BackgroundService { private ISendMessageService? _sendService; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 5aacae45..e3a1ca22 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -217,7 +217,7 @@ namespace Tnb.WarehouseMgr [HttpPost] public async Task GenTaskExecute(CancellationTokenSource? cts = default) { - + Stopwatch sw = Stopwatch.StartNew(); var db = _db.CopyNew(); try diff --git a/apihost/Tnb.API.Entry/Startup.cs b/apihost/Tnb.API.Entry/Startup.cs index 148569d4..dd5e6ed7 100644 --- a/apihost/Tnb.API.Entry/Startup.cs +++ b/apihost/Tnb.API.Entry/Startup.cs @@ -64,9 +64,7 @@ public class Startup : AppStartup services.AddOverideVisualDev(); //定时任务 - //services.AddHostedService(); - //services.AddSingleton(); - //services.AddHostedService(sp => new ConditionalBackgroundService(sp.GetRequiredService())); + services.AddHostedService(); } From 987d4ac65296c26e0e5c2e10f73a73c4a07a22a4 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 4 Aug 2023 11:39:54 +0800 Subject: [PATCH 07/18] 1 --- system/Tnb.OAuth/OAuthService.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/system/Tnb.OAuth/OAuthService.cs b/system/Tnb.OAuth/OAuthService.cs index 37e1e397..5ea3a5dc 100644 --- a/system/Tnb.OAuth/OAuthService.cs +++ b/system/Tnb.OAuth/OAuthService.cs @@ -392,9 +392,6 @@ public class OAuthService : IDynamicApiController, ITransient var userId = _userManager.UserId ?? "admim"; var httpContext = _httpContextAccessor.HttpContext; httpContext.SignoutToSwagger(); - //用户退出时停止Wms定时任务 modify by ly on 20230804 - var timedTaskService = ActivatorUtilities.CreateInstance(httpContext.RequestServices); - await timedTaskService.StopAsync(CancellationToken.None); // 清除IM中的webSocket var list = await GetOnlineUserList(tenantId); @@ -680,13 +677,6 @@ public class OAuthService : IDynamicApiController, ITransient } } } - - //启动Wms定时服务 modify by ly on 20230804 - //var conditionalBackgroundService = App.GetRequiredService(); - //await conditionalBackgroundService.StartAsync(CancellationToken.None); - var httpContext = _httpContextAccessor.HttpContext; - var timedTaskService = ActivatorUtilities.CreateInstance(httpContext.RequestServices); - await timedTaskService.StartAsync(default); return new { theme = user.Theme == null ? "classic" : user.Theme, From 772ca35dc1897081be8595f2ba9b9d062d44553f Mon Sep 17 00:00:00 2001 From: FanLian Date: Fri, 4 Aug 2023 11:40:20 +0800 Subject: [PATCH 08/18] =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs index c6141429..698998be 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs @@ -114,8 +114,8 @@ namespace Tnb.WarehouseMgr setSortingH.id = SnowflakeIdHelper.NextId(); setSortingH.kittingout_id = ko.id; setSortingH.seq = ko.seq; - setSortingH.org_id = _userManager.User.OrganizeId; - setSortingH.create_id = _userManager.UserId; + setSortingH.org_id = ko.org_id; + setSortingH.create_id = ko.create_id; setSortingH.create_time = DateTime.Now; await curDb.Insertable(setSortingH).ExecuteCommandAsync(); @@ -155,8 +155,6 @@ namespace Tnb.WarehouseMgr [HttpPost] public async Task KittingOutByIsToBeShipped(CancellationTokenSource? cts = default) { - if (_userManager.User == null) return; - var curDb = _db.CopyNew(); try { @@ -195,7 +193,7 @@ namespace Tnb.WarehouseMgr WmsPretaskH preTask = new() { - org_id = _userManager.User.OrganizeId, + org_id = ko.org_id, startlocation_id = sPoint?.location_id!, startlocation_code = sPoint?.location_code!, endlocation_id = ePoint?.location_id!, @@ -216,7 +214,7 @@ namespace Tnb.WarehouseMgr area_code = it.Key, require_id = ko.id, require_code = ko.bill_code, - create_id = _userManager.UserId, + create_id = ko.create_id, create_time = DateTime.Now, source_id = ko.source_id, source_code = ko.source_code From a6ad99a5bc073c774882aebe609a45e58d31b356 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 4 Aug 2023 12:59:31 +0800 Subject: [PATCH 09/18] =?UTF-8?q?UserManager=E6=96=B0=E5=A2=9E=E5=88=86?= =?UTF-8?q?=E9=83=A8=E7=B1=BB=EF=BC=8C=E5=AE=9A=E4=B9=89=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E4=BB=A4=E7=89=8C=EF=BC=8C=E7=94=A8=E4=BA=8E=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E8=A7=A3=E6=9E=90=E5=BD=93=E5=89=8D=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.WarehouseMgr/BaseWareHouseService.cs | 16 +++++++++++ .../Tnb.WarehouseMgr/WmskittingOutService.cs | 13 +++++++-- .../Manager/User/UserManager.cs | 3 +-- .../Manager/User/UserManager.part.cs | 27 +++++++++++++++++++ system/Tnb.OAuth/OAuthService.cs | 3 ++- system/Tnb.OAuth/Tnb.OAuth.csproj | 1 - 6 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 common/Tnb.Common.Core/Manager/User/UserManager.part.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index 9fdd5303..fa0744ae 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs @@ -3,13 +3,16 @@ using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; +using System.Security.Claims; using System.Text; using System.Threading.Tasks; using Aspose.Cells.Drawing; using JNPF; using JNPF.Common.Contracts; +using JNPF.Common.Core.Manager; using JNPF.Common.Enums; using JNPF.Common.Extension; +using JNPF.DataEncryption; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.Systems.Interfaces.System; @@ -49,6 +52,19 @@ namespace Tnb.WarehouseMgr } } } + + protected Task GetUserIdentity() + { + var claims = JWTEncryption.ReadJwtToken(UserManager.AsscessToken)?.Claims; + ClaimsIdentity toKen = new ClaimsIdentity(); + foreach (Claim item in claims) + { + toKen.AddClaim(item); + } + var curUser = new ClaimsPrincipal(toKen); + return Task.FromResult(curUser); + } + /// /// 判断最终目标库位是否可以放置当前载具 /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs index c6141429..4247c6bd 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs @@ -4,18 +4,24 @@ using System.Data; using System.Data.Common; using System.Linq; using System.Linq.Expressions; +using System.Net.Http; +using System.Security.Claims; using System.Text; using System.Threading.Tasks; using System.Transactions; using Aop.Api.Domain; +using JNPF; +using JNPF.Common.Const; using JNPF.Common.Core.Manager; using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.DataEncryption; using JNPF.FriendlyException; using JNPF.LinqBuilder; using JNPF.Logging; +using JNPF.Systems.Entitys.Permission; using JNPF.Systems.Interfaces.System; using Mapster; using Microsoft.AspNetCore.Http; @@ -61,6 +67,9 @@ namespace Tnb.WarehouseMgr [HttpPost] public async Task KittingOutByAdd(CancellationTokenSource? cts = default) { + if (UserManager.AsscessToken.IsNullOrWhiteSpace()) return; + var curUser = await GetUserIdentity(); + var curDb = _db.CopyNew(); try { @@ -114,8 +123,8 @@ namespace Tnb.WarehouseMgr setSortingH.id = SnowflakeIdHelper.NextId(); setSortingH.kittingout_id = ko.id; setSortingH.seq = ko.seq; - setSortingH.org_id = _userManager.User.OrganizeId; - setSortingH.create_id = _userManager.UserId; + setSortingH.org_id = curUser.FindFirst(ClaimConst.CLAINMORGID)?.Value; + setSortingH.create_id = curUser.FindFirst(ClaimConst.CLAINMUSERID)?.Value; setSortingH.create_time = DateTime.Now; await curDb.Insertable(setSortingH).ExecuteCommandAsync(); diff --git a/common/Tnb.Common.Core/Manager/User/UserManager.cs b/common/Tnb.Common.Core/Manager/User/UserManager.cs index d71c492f..bc1e0a60 100644 --- a/common/Tnb.Common.Core/Manager/User/UserManager.cs +++ b/common/Tnb.Common.Core/Manager/User/UserManager.cs @@ -21,7 +21,7 @@ namespace JNPF.Common.Core.Manager; /// /// 用户管理 . /// -public class UserManager : IUserManager, IScoped +public partial class UserManager : IUserManager, IScoped { /// /// 用户表仓储. @@ -76,7 +76,6 @@ public class UserManager : IUserManager, IScoped public UserEntity User { get => _repository.GetSingle(u => u.Id == UserId); - } /// diff --git a/common/Tnb.Common.Core/Manager/User/UserManager.part.cs b/common/Tnb.Common.Core/Manager/User/UserManager.part.cs new file mode 100644 index 00000000..75597582 --- /dev/null +++ b/common/Tnb.Common.Core/Manager/User/UserManager.part.cs @@ -0,0 +1,27 @@ +using JNPF.Common.Const; +using JNPF.Common.Enums; +using JNPF.Common.Extension; +using JNPF.Common.Manager; +using JNPF.Common.Models.Authorize; +using JNPF.Common.Models.User; +using JNPF.Common.Net; +using JNPF.Common.Security; +using JNPF.DataEncryption; +using JNPF.DependencyInjection; +using JNPF.Systems.Entitys.Entity.Permission; +using JNPF.Systems.Entitys.Permission; +using JNPF.Systems.Entitys.System; +using Mapster; +using Microsoft.AspNetCore.Http; +using SqlSugar; +using System.Security.Claims; + +namespace JNPF.Common.Core.Manager; + +/// +/// 用户管理 . +/// +public partial class UserManager +{ + public static string AsscessToken { get; set; } +} \ No newline at end of file diff --git a/system/Tnb.OAuth/OAuthService.cs b/system/Tnb.OAuth/OAuthService.cs index 5ea3a5dc..018cdee3 100644 --- a/system/Tnb.OAuth/OAuthService.cs +++ b/system/Tnb.OAuth/OAuthService.cs @@ -41,7 +41,6 @@ using JNPF.Common.Core.Handlers; using JNPF.Message.Interfaces.Message; using JNPF.Extras.DatabaseAccessor.SqlSugar.Models; using Aop.Api.Domain; -using Tnb.WarehouseMgr; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -606,6 +605,8 @@ public class OAuthService : IDynamicApiController, ITransient { ClaimConst.LOGINTYPE,input.login_type} }, tokenTimeout); + //modify by ly on 20230804 + UserManager.AsscessToken = accessToken; // 单点登录标识缓存 if (_oauthOptions.Enabled) _cacheManager.Set("OnlineTicket_" + input.online_ticket, options.ConfigId); diff --git a/system/Tnb.OAuth/Tnb.OAuth.csproj b/system/Tnb.OAuth/Tnb.OAuth.csproj index 418136aa..af2ae6c7 100644 --- a/system/Tnb.OAuth/Tnb.OAuth.csproj +++ b/system/Tnb.OAuth/Tnb.OAuth.csproj @@ -12,7 +12,6 @@ - From 32ccb2d54e1b801617fad13dc33ed9e8a57f6b8c Mon Sep 17 00:00:00 2001 From: FanLian Date: Fri, 4 Aug 2023 14:21:55 +0800 Subject: [PATCH 10/18] =?UTF-8?q?=E4=BB=A4=E7=89=8C=E6=94=BE=E5=85=A5?= =?UTF-8?q?=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.WarehouseMgr/BaseWareHouseService.cs | 4 +- .../Tnb.WarehouseMgr/WmskittingOutService.cs | 37 +++++++++++-------- system/Tnb.OAuth/OAuthService.cs | 3 ++ 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index fa0744ae..f51c99cb 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs @@ -53,9 +53,9 @@ namespace Tnb.WarehouseMgr } } - protected Task GetUserIdentity() + protected Task GetUserIdentity(string aToken) { - var claims = JWTEncryption.ReadJwtToken(UserManager.AsscessToken)?.Claims; + var claims = JWTEncryption.ReadJwtToken(aToken)?.Claims; ClaimsIdentity toKen = new ClaimsIdentity(); foreach (Claim item in claims) { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs index 8f22834c..e178b03b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs @@ -16,6 +16,7 @@ using JNPF.Common.Core.Manager; using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; +using JNPF.Common.Manager; using JNPF.Common.Security; using JNPF.DataEncryption; using JNPF.FriendlyException; @@ -51,14 +52,23 @@ namespace Tnb.WarehouseMgr private readonly IUserManager _userManager; private readonly IBillRullService _billRullService; private readonly IWmsCarryService _carryService; + private readonly ICacheManager _cacheManager; private const string BizTypeId = "26169472620837"; - public WmskittingOutService(ISqlSugarRepository repository, IWareHouseService warehouseService, IUserManager userManager, IBillRullService billRullService, IWmsCarryService carryService) + public WmskittingOutService( + ISqlSugarRepository repository, + IWareHouseService warehouseService, + IUserManager userManager, + IBillRullService billRullService, + IWmsCarryService carryService, + ICacheManager cacheManager + ) { _db = repository.AsSugarClient(); _warehouseService = warehouseService; _userManager = userManager; _billRullService = billRullService; _carryService = carryService; + _cacheManager = cacheManager; } /// /// 齐套出库(新增状态) @@ -67,8 +77,9 @@ namespace Tnb.WarehouseMgr [HttpPost] public async Task KittingOutByAdd(CancellationTokenSource? cts = default) { - if (UserManager.AsscessToken.IsNullOrWhiteSpace()) return; - var curUser = await GetUserIdentity(); + var aToken = await _cacheManager.GetAsync("AsscessToken"); + if (aToken.IsNullOrWhiteSpace()) return; + var curUser = await GetUserIdentity(aToken); var curDb = _db.CopyNew(); try @@ -123,8 +134,8 @@ namespace Tnb.WarehouseMgr setSortingH.id = SnowflakeIdHelper.NextId(); setSortingH.kittingout_id = ko.id; setSortingH.seq = ko.seq; - setSortingH.org_id = ko.org_id; - setSortingH.create_id = ko.create_id; + setSortingH.org_id = curUser.FindFirst(ClaimConst.CLAINMORGID)?.Value; + setSortingH.create_id = curUser.FindFirst(ClaimConst.CLAINMUSERID)?.Value; setSortingH.create_time = DateTime.Now; await curDb.Insertable(setSortingH).ExecuteCommandAsync(); @@ -164,6 +175,10 @@ namespace Tnb.WarehouseMgr [HttpPost] public async Task KittingOutByIsToBeShipped(CancellationTokenSource? cts = default) { + var aToken = await _cacheManager.GetAsync("AsscessToken"); + if (aToken.IsNullOrWhiteSpace()) return; + var curUser = await GetUserIdentity(aToken); + var curDb = _db.CopyNew(); try { @@ -202,7 +217,7 @@ namespace Tnb.WarehouseMgr WmsPretaskH preTask = new() { - org_id = ko.org_id, + org_id = curUser.FindFirst(ClaimConst.CLAINMORGID)?.Value, startlocation_id = sPoint?.location_id!, startlocation_code = sPoint?.location_code!, endlocation_id = ePoint?.location_id!, @@ -223,7 +238,7 @@ namespace Tnb.WarehouseMgr area_code = it.Key, require_id = ko.id, require_code = ko.bill_code, - create_id = ko.create_id, + create_id = curUser.FindFirst(ClaimConst.CLAINMUSERID)?.Value, create_time = DateTime.Now, source_id = ko.source_id, source_code = ko.source_code @@ -243,14 +258,6 @@ namespace Tnb.WarehouseMgr } } } - else - { - throw new AppFriendlyException("无可用的载具", 500); - } - } - else - { - throw new AppFriendlyException("无可用的库位", 500); } } } diff --git a/system/Tnb.OAuth/OAuthService.cs b/system/Tnb.OAuth/OAuthService.cs index 018cdee3..9c389e8f 100644 --- a/system/Tnb.OAuth/OAuthService.cs +++ b/system/Tnb.OAuth/OAuthService.cs @@ -386,6 +386,7 @@ public class OAuthService : IDynamicApiController, ITransient [HttpGet("Logout")] public async Task Logout([FromQuery] string ticket) { + await _cacheManager.DelAsync("AsscessToken"); var tenantId = _userManager.TenantId ?? "default"; var userId = _userManager.UserId ?? "admim"; @@ -607,6 +608,8 @@ public class OAuthService : IDynamicApiController, ITransient //modify by ly on 20230804 UserManager.AsscessToken = accessToken; + await _cacheManager.SetAsync("AsscessToken", accessToken,TimeSpan.FromMinutes(30)); + // 单点登录标识缓存 if (_oauthOptions.Enabled) _cacheManager.Set("OnlineTicket_" + input.online_ticket, options.ConfigId); From 0756b27bea9e04428d88b6143d86a921f17e6802 Mon Sep 17 00:00:00 2001 From: FanLian Date: Fri, 4 Aug 2023 14:28:36 +0800 Subject: [PATCH 11/18] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=9D=9E=E8=B0=83=E8=AF=95=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apihost/Tnb.API.Entry/Startup.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apihost/Tnb.API.Entry/Startup.cs b/apihost/Tnb.API.Entry/Startup.cs index dd5e6ed7..d7748aae 100644 --- a/apihost/Tnb.API.Entry/Startup.cs +++ b/apihost/Tnb.API.Entry/Startup.cs @@ -63,9 +63,10 @@ public class Startup : AppStartup services.AddOverideVisualDev(); + #if !DEBUG //定时任务 services.AddHostedService(); - + #endif } public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider, IOptions senparcSetting, IOptions senparcWeixinSetting) From 4381e77b7fe58802948ceecff49733f94e3a0f17 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 4 Aug 2023 15:05:00 +0800 Subject: [PATCH 12/18] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=8C=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E6=8A=A5=E8=A1=A8=E4=B8=9A=E5=8A=A1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Consts/ModuleConsts.cs | 4 + .../Entity/WmsStockReportCode.cs | 87 +++++++++++++++++++ .../Tnb.WarehouseMgr/WmsStockReportService.cs | 17 ++++ .../Tnb.WarehouseMgr/WmskittingOutService.cs | 2 +- 4 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportCode.cs create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs index 82c65e85..921904e4 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs @@ -156,5 +156,9 @@ public class ModuleConsts /// 模块标识-盘点任务 /// public const string MODULE_WMSCHECKTASK_ID = "27582377555221"; + /// + /// 模块标识-库存报表 + /// + public const string MODULE_WMSSTOCKREPORT_ID = "27895417124373"; } \ No newline at end of file diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportCode.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportCode.cs new file mode 100644 index 00000000..28376aa5 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportCode.cs @@ -0,0 +1,87 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities; + +/// +/// 库存报表条码表 +/// +[SugarTable("wms_stock_report_code")] +public partial class WmsStockReportCode : BaseEntity +{ + public WmsStockReportCode() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 主表ID + /// + public string? report_id { get; set; } + + /// + /// 载具ID + /// + public string? carry_id { get; set; } + + /// + /// 载具编号 + /// + public string? carry_code { get; set; } + + /// + /// 物料ID + /// + public string? material_id { get; set; } + + /// + /// 物料编号 + /// + public string? material_code { get; set; } + + /// + /// 条码编号 + /// + public string? barcode { get; set; } + + /// + /// 批次 + /// + public string? code_batch { get; set; } + + /// + /// 条码数量 + /// + public decimal? codeqty { get; set; } + + /// + /// 单位ID + /// + public string? unit_id { get; set; } + + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// 时间戳 + /// + public DateTime? time_stamp { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs new file mode 100644 index 00000000..76940e85 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JNPF.VisualDev; + +namespace Tnb.WarehouseMgr +{ + /// + /// 库存报表服务类 + /// + [OverideVisualDev(ModuleConsts.MODULE_WMSSTOCKREPORT_ID)] + public class WmsStockReportService:BaseWareHouseService + { + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs index e178b03b..f282134a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs @@ -135,7 +135,7 @@ namespace Tnb.WarehouseMgr setSortingH.kittingout_id = ko.id; setSortingH.seq = ko.seq; setSortingH.org_id = curUser.FindFirst(ClaimConst.CLAINMORGID)?.Value; - setSortingH.create_id = curUser.FindFirst(ClaimConst.CLAINMUSERID)?.Value; + setSortingH.create_id = curUser.FindFirst(ClaimConst.CLAINMUSERID)?.Value!; setSortingH.create_time = DateTime.Now; await curDb.Insertable(setSortingH).ExecuteCommandAsync(); From 77b4c2b7b8eb95fd663c33e5da5c78885c8cbc31 Mon Sep 17 00:00:00 2001 From: FanLian Date: Fri, 4 Aug 2023 15:05:05 +0800 Subject: [PATCH 13/18] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E4=B8=BB=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entity/WmsStockReportH.cs | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.cs new file mode 100644 index 00000000..683f1780 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.cs @@ -0,0 +1,113 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities; + +/// +/// 库存报表 +/// +[SugarTable("wms_stock_report_h")] +public partial class WmsStockReportH : BaseEntity +{ + public WmsStockReportH() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 所属组织 + /// + public string? org_id { get; set; } + + /// + /// 物料ID + /// + public string? material_id { get; set; } + + /// + /// 物料编号 + /// + public string? material_code { get; set; } + + /// + /// 仓库ID + /// + public string? warehouse_id { get; set; } + + /// + /// 现有库存 + /// + public decimal? existing_stock_qty { get; set; } + + /// + /// 最大库存 + /// + public int? max_stock { get; set; } + + /// + /// 安全库存 + /// + public int? safe_stock { get; set; } + + /// + /// 最小库存 + /// + public int? min_stock { get; set; } + + /// + /// 库存有效期(天) + /// + public int? storage_valid_day { get; set; } + + /// + /// 预警提前期(天) + /// + public int? early_warn_day { get; set; } + + /// + /// 过期预警数量 + /// + public decimal? expired_warning_qty { get; set; } + + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// 扩展 + /// + public string? extras { get; set; } + + /// + /// 时间戳 + /// + public DateTime? timestamp { get; set; } + + /// + /// 流程任务Id + /// + public string? f_flowtaskid { get; set; } + + /// + /// 流程引擎Id + /// + public string? f_flowid { get; set; } + +} + From 64f50721d443ad941ecd2ed53373be6f418bb961 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 4 Aug 2023 15:05:45 +0800 Subject: [PATCH 14/18] =?UTF-8?q?=E6=B6=88=E9=99=A4=E9=BD=90=E5=A5=97?= =?UTF-8?q?=E5=87=BA=E5=BA=93=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.WarehouseMgr/WmsStockReportService.cs | 13 +++++++++++++ .../Tnb.WarehouseMgr/WmskittingOutService.cs | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs index 76940e85..b4205ab5 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs @@ -4,6 +4,9 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using JNPF.VisualDev; +using JNPF.VisualDev.Entitys.Dto.VisualDevModelData; +using MimeKit.Cryptography; +using SqlSugar; namespace Tnb.WarehouseMgr { @@ -13,5 +16,15 @@ namespace Tnb.WarehouseMgr [OverideVisualDev(ModuleConsts.MODULE_WMSSTOCKREPORT_ID)] public class WmsStockReportService:BaseWareHouseService { + public WmsStockReportService() + { + OverideFuncs.GetListAsync = GetListAsync; + } + + private async Task GetListAsync(VisualDevModelListQueryInput input) + { + + return null; + } } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs index f282134a..0f6c0518 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs @@ -238,7 +238,7 @@ namespace Tnb.WarehouseMgr area_code = it.Key, require_id = ko.id, require_code = ko.bill_code, - create_id = curUser.FindFirst(ClaimConst.CLAINMUSERID)?.Value, + create_id = curUser.FindFirst(ClaimConst.CLAINMUSERID)?.Value!, create_time = DateTime.Now, source_id = ko.source_id, source_code = ko.source_code From 9559165536397332a28d9ba096d10716617ff402 Mon Sep 17 00:00:00 2001 From: qianjiawei <1184704771@qq.com> Date: Fri, 4 Aug 2023 15:10:14 +0800 Subject: [PATCH 15/18] 1 --- QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs | 16 ++++ QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs | 83 +++++++++++++++++++++ QcMgr/Tnb.QcMgr/QcCheckTaskService.cs | 59 ++++++++++++++- 3 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs diff --git a/QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs b/QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs index a451bb01..cbe7eed4 100644 --- a/QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs +++ b/QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs @@ -6,6 +6,22 @@ using System.Threading.Tasks; namespace Tnb.QcMgr.Entities.Dto { + public class QcCheckExecHOut + { + public string? id { get; set; } + public string? materialid { get; set; } + public string? checktype { get; set; } + public string? workid { get; set; } + public string? processid { get; set; } + public string? wareid { get; set; } + public string? checknum { get; set; } + public string? status { get; set; } + public string? result { get; set; } + public string? tasktime { get; set; } + public string? exectime { get; set; } + public string? execuser { get; set; } + + } public class CheckTaskOut { public string? mainid { get; set; } diff --git a/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs b/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs new file mode 100644 index 00000000..21c4a099 --- /dev/null +++ b/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Aspose.Cells.Drawing; +using JNPF.Common.Core.Manager; +using JNPF.Common.Filter; +using JNPF.DependencyInjection; +using JNPF.DynamicApiController; +using JNPF.Systems.Entitys.Permission; +using JNPF.Systems.Entitys.System; +using JNPF.VisualDev; +using JNPF.VisualDev.Entitys.Dto.VisualDevModelData; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; +using SqlSugar; +using Tnb.BasicData.Entities; +using Tnb.QcMgr.Entities; +using Tnb.QcMgr.Entities.Dto; + +namespace Tnb.QcMgr +{ /// + /// 质检任务模块 + /// + [ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 800)] + [Route("api/[area]/[controller]/[action]")] + [OverideVisualDev(ModuleId)] + public class QcCheckTaskResultServic:IDynamicApiController, ITransient, IOverideVisualDevService + { + private const string ModuleId = "26873741070613"; + private readonly ISqlSugarRepository _repository; + private readonly IUserManager _userManager; + public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); + public QcCheckTaskResultServic(ISqlSugarRepository repository, IUserManager userManager) + { + _repository = repository; + _userManager = userManager; + OverideFuncs.GetListAsync = GetListAsync; + } + private async Task GetListAsync(VisualDevModelListQueryInput input) + { + var db = _repository.AsSugarClient(); + Dictionary queryJson = !string.IsNullOrEmpty(input.queryJson) ? JsonConvert.DeserializeObject>(input.queryJson) : new Dictionary(); + string materialid = queryJson.ContainsKey("materialid") ? queryJson["materialid"].ToString() : ""; + string checktype = queryJson.ContainsKey("checktype") ? queryJson["checktype"].ToString() : ""; + string status = queryJson.ContainsKey("status") ? queryJson["status"].ToString() : ""; + var list = await db.Queryable() + .LeftJoin((a, b) => a.DictionaryTypeId == b.Id) + .Where((a, b) => b.FullName == "质检状态" || b.FullName == "质检类型选择").ToListAsync(); + var result = await db.Queryable() + .LeftJoin((a, b) => a.materialid == b.id) + .LeftJoin((a, b, c) => a.processid == c.id) + .LeftJoin((a, b, c, d) => a.workid == d.Id) + .LeftJoin((a, b, c, d, e) => a.execuser == e.Id) + .WhereIF(!string.IsNullOrEmpty(materialid), (a, b, c, d, e) => a.materialid == materialid) + .WhereIF(!string.IsNullOrEmpty(checktype), (a, b, c, d, e) => a.checktype == checktype) + .WhereIF(!string.IsNullOrEmpty(status), (a, b, c, d, e) => a.status == status) + .Where((a, b, c, d, e) => a.status == list.Where(p => p.FullName == "已完成").First().Id) + .Select((a, b, c, d, e) => new QcCheckExecHOut + { + id = a.id, + materialid = b.name, + checktype = a.checktype, + workid = d.FullName, + processid = c.process_name, + wareid = a.wareid, + checknum = a.checknum, + status = a.status, + result = a.result, + tasktime = a.tasktime == null ? "" : a.tasktime, + exectime = a.exectime == null ? "" : a.exectime, + execuser = e.RealName == null ? "" : e.RealName, + }).OrderByDescending(a => a.tasktime).ToPagedListAsync(input.currentPage, input.pageSize); + foreach (var item in result.list) + { + item.checktype = list.Select(p => p.Id).Contains(item.checktype) ? list.Where(p => p.Id == item.checktype).First().FullName : ""; + item.status = list.Select(p => p.Id).Contains(item.status) ? list.Where(p => p.Id == item.status).First().FullName : ""; + } + return PageResult.SqlSugarPageResult(result); + } + } +} diff --git a/QcMgr/Tnb.QcMgr/QcCheckTaskService.cs b/QcMgr/Tnb.QcMgr/QcCheckTaskService.cs index d18ec401..7d57caca 100644 --- a/QcMgr/Tnb.QcMgr/QcCheckTaskService.cs +++ b/QcMgr/Tnb.QcMgr/QcCheckTaskService.cs @@ -1,11 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using System.Text; using System.Threading.Tasks; using Aspose.Cells.Drawing; using JNPF.Common.Core.Manager; using JNPF.Common.Enums; +using JNPF.Common.Filter; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; @@ -13,13 +15,22 @@ using JNPF.FriendlyException; using JNPF.JsonSerialization; using JNPF.Systems.Entitys.Permission; using JNPF.Systems.Entitys.System; +using JNPF.VisualDev; +using JNPF.VisualDev.Entitys.Dto.VisualDevModelData; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; using SqlSugar; +using Tnb.BasicData.Entities; +using Tnb.BasicData; +using Tnb.EquipMgr.Entities; +using Tnb.ProductionMgr.Entities.Dto; +using Tnb.ProductionMgr.Entities; using Tnb.QcMgr.Entities; using Tnb.QcMgr.Entities.Dto; using Tnb.QcMgr.Entities.Entity; using Tnb.QcMgr.Interfaces; +using JNPF.Common.Extension; namespace Tnb.QcMgr { @@ -28,14 +39,60 @@ namespace Tnb.QcMgr /// [ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 800)] [Route("api/[area]/[controller]/[action]")] - public class QcCheckTaskService : IQcCheckTaskService, IDynamicApiController, ITransient + [OverideVisualDev(ModuleId)] + public class QcCheckTaskService : IQcCheckTaskService, IDynamicApiController, ITransient, IOverideVisualDevService { + private const string ModuleId = "26745613138709"; private readonly ISqlSugarRepository _repository; private readonly IUserManager _userManager; + public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); public QcCheckTaskService(ISqlSugarRepository repository, IUserManager userManager) { _repository = repository; _userManager = userManager; + OverideFuncs.GetListAsync = GetListAsync; + } + + private async Task GetListAsync(VisualDevModelListQueryInput input) + { + var db = _repository.AsSugarClient(); + Dictionary queryJson = !string.IsNullOrEmpty(input.queryJson) ? JsonConvert.DeserializeObject>(input.queryJson) : new Dictionary(); + string materialid = queryJson.ContainsKey("materialid") ? queryJson["materialid"].ToString() : ""; + string checktype = queryJson.ContainsKey("checktype") ? queryJson["checktype"].ToString() : ""; + string status = queryJson.ContainsKey("status") ? queryJson["status"].ToString() : ""; + var list = await db.Queryable() + .LeftJoin((a, b) => a.DictionaryTypeId == b.Id) + .Where((a, b) => b.FullName == "质检状态" || b.FullName == "质检类型选择").ToListAsync(); + var result = await db.Queryable() + .LeftJoin((a, b) => a.materialid == b.id) + .LeftJoin((a, b, c) => a.processid == c.id) + .LeftJoin((a, b, c, d) => a.workid == d.Id) + .LeftJoin((a, b, c, d, e) => a.execuser == e.Id) + .WhereIF(!string.IsNullOrEmpty(materialid), (a, b, c, d, e) => a.materialid == materialid) + .WhereIF(!string.IsNullOrEmpty(checktype), (a, b, c, d, e) => a.checktype == checktype) + .WhereIF(!string.IsNullOrEmpty(status), (a, b, c, d, e) => a.status == status) + .Where((a,b,c,d,e)=>a.status== list.Where(p=>p.FullName=="待执行").First().Id) + .Select((a, b, c, d, e) => new QcCheckExecHOut + { + id = a.id, + materialid = b.name, + checktype = a.checktype, + workid = d.FullName, + processid = c.process_name, + wareid = a.wareid, + checknum = a.checknum, + status = a.status, + result = a.result, + tasktime = a.tasktime == null ? "" : a.tasktime, + exectime = a.exectime == null ? "" : a.exectime, + execuser = e.RealName == null ? "" : e.RealName, + }).OrderByDescending(a => a.tasktime).ToPagedListAsync(input.currentPage, input.pageSize); + foreach (var item in result.list) + { + item.checktype = list.Select(p => p.Id).Contains(item.checktype) ? list.Where(p => p.Id == item.checktype).First().FullName : ""; + item.status = list.Select(p => p.Id).Contains(item.status) ? list.Where(p => p.Id == item.status).First().FullName : ""; + } + return PageResult.SqlSugarPageResult(result); } /// /// 获取任务执行明细 From 67dc22f9b9d78fc6ee517b8651144f1233cfcc43 Mon Sep 17 00:00:00 2001 From: FanLian Date: Fri, 4 Aug 2023 15:31:28 +0800 Subject: [PATCH 16/18] =?UTF-8?q?=E8=BD=BD=E5=85=B7=E6=9D=A1=E7=A0=81?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=93=E5=BA=93ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs | 1 + WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs | 1 + WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs | 1 + 3 files changed, 3 insertions(+) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs index c171d8a9..dc23aa1b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs @@ -449,6 +449,7 @@ namespace Tnb.WarehouseMgr x.id = SnowflakeIdHelper.NextId(); x.is_out = 0; x.carry_id = instock!.carry_id!; + x.warehouse_id = instock!.warehouse_id!; }); await _db.Insertable(carryCodes).ExecuteCommandAsync(); await _wareHouseService.GenInStockTaskHandleAfter(preTaskUpInput, diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs index e513798d..ef3d8398 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs @@ -187,6 +187,7 @@ namespace Tnb.WarehouseMgr x.carry_id = input.data[nameof(WmsHandleH.carry_id)].ToString()!; x.create_id = _userManager.UserId; x.create_time = DateTime.Now; + x.warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString()!; }); await _db.Insertable(carryCodes).ExecuteCommandAsync(); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs index 3b594c4d..f56a4a8f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs @@ -219,6 +219,7 @@ namespace Tnb.WarehouseMgr x.id = SnowflakeIdHelper.NextId(); x.is_out = 0; x.carry_id = input.data[nameof(WmsCarryCode.carry_id)]?.ToString()!; + x.warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString(); }); //生成入库申请条码 var instockDetails = await _db.Queryable() From 31a1f8a14941ef1e235bfd634ba05b3787bcbc72 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 4 Aug 2023 17:17:31 +0800 Subject: [PATCH 17/18] 1 --- .../Entity/BasMaterialInboundWh.cs | 42 ++++++++++++ .../Entity/BasMaterialSendWarehouse.cs | 42 ++++++++++++ .../Entity/WmsStockReportH.part.cs | 26 +++++++ .../Tnb.WarehouseMgr/WmsStockReportService.cs | 68 +++++++++++++++++-- 4 files changed, 174 insertions(+), 4 deletions(-) create mode 100644 BasicData/Tnb.BasicData.Entities/Entity/BasMaterialInboundWh.cs create mode 100644 BasicData/Tnb.BasicData.Entities/Entity/BasMaterialSendWarehouse.cs create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.part.cs diff --git a/BasicData/Tnb.BasicData.Entities/Entity/BasMaterialInboundWh.cs b/BasicData/Tnb.BasicData.Entities/Entity/BasMaterialInboundWh.cs new file mode 100644 index 00000000..5e447404 --- /dev/null +++ b/BasicData/Tnb.BasicData.Entities/Entity/BasMaterialInboundWh.cs @@ -0,0 +1,42 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.BasicData.Entities; + +/// +/// 物料入库仓库 +/// +[SugarTable("bas_material_inbound_wh")] +public partial class BasMaterialInboundWh : BaseEntity +{ + public BasMaterialInboundWh() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 物料id + /// + public string? material_id { get; set; } + + /// + /// 仓库id + /// + public string? wh_id { get; set; } + + /// + /// 最大库存 + /// + public int? max_stock { get; set; } + + /// + /// 最小库存 + /// + public int? min_stock { get; set; } + + /// + /// 安全库存 + /// + public int? safe_stock { get; set; } + +} diff --git a/BasicData/Tnb.BasicData.Entities/Entity/BasMaterialSendWarehouse.cs b/BasicData/Tnb.BasicData.Entities/Entity/BasMaterialSendWarehouse.cs new file mode 100644 index 00000000..ac2eaca3 --- /dev/null +++ b/BasicData/Tnb.BasicData.Entities/Entity/BasMaterialSendWarehouse.cs @@ -0,0 +1,42 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.BasicData.Entities; + +/// +/// 物料发料仓库 +/// +[SugarTable("bas_material_send_warehouse")] +public partial class BasMaterialSendWarehouse : BaseEntity +{ + public BasMaterialSendWarehouse() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 物料id + /// + public string? material_id { get; set; } + + /// + /// 仓库id + /// + public string? wh_id { get; set; } + + /// + /// 最大库存 + /// + public int? max_stock { get; set; } + + /// + /// 最小库存 + /// + public int? min_stock { get; set; } + + /// + /// 安全库存 + /// + public int? safe_stock { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.part.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.part.cs new file mode 100644 index 00000000..fef9ccbb --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.part.cs @@ -0,0 +1,26 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities; + +/// +/// 库存报表 +/// +public partial class WmsStockReportH +{ + /// + /// 物料名称 + /// + [SugarColumn(IsIgnore = true)] + public string mater_name { get; set; } + /// + /// 明细列表 + /// + [SugarColumn(IsIgnore =true)] + public List Details { get; set; } + [SugarColumn(IsIgnore = true)] + public decimal codeqty { get; set; } + +} + diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs index b4205ab5..bf83ccf9 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs @@ -1,12 +1,19 @@ using System; using System.Collections.Generic; +using System.Dynamic; using System.Linq; using System.Text; using System.Threading.Tasks; +using JNPF.Common.Core.Manager; +using JNPF.Common.Security; using JNPF.VisualDev; using JNPF.VisualDev.Entitys.Dto.VisualDevModelData; +using Mapster; using MimeKit.Cryptography; using SqlSugar; +using Tnb.BasicData.Entities; +using Tnb.WarehouseMgr.Entities; +using Tnb.WarehouseMgr.Entities.Enums; namespace Tnb.WarehouseMgr { @@ -14,17 +21,70 @@ namespace Tnb.WarehouseMgr /// 库存报表服务类 /// [OverideVisualDev(ModuleConsts.MODULE_WMSSTOCKREPORT_ID)] - public class WmsStockReportService:BaseWareHouseService + public class WmsStockReportService : BaseWareHouseService { - public WmsStockReportService() + private readonly ISqlSugarClient _db; + private readonly IUserManager _userManager; + + public WmsStockReportService(ISqlSugarRepository repository, IUserManager userManager) { + _db = repository.AsSugarClient(); + _userManager = userManager; OverideFuncs.GetListAsync = GetListAsync; } private async Task GetListAsync(VisualDevModelListQueryInput input) { - - return null; + var items = await _db.Queryable().InnerJoin((a, b) => a.material_id == b.id) + .InnerJoin((a, b, c) => b.id == c.material_id) + .InnerJoin((a, b, c, d) => a.carry_id == d.id) + .InnerJoin((a, b, c, d, e) => d.location_id == e.id) + .Where((a, b, c, d, e) => e.is_type == ((int)EnumLocationType.存储库位).ToString()) + .Select((a, b, c, d, e) => new WmsStockReportH + { + warehouse_id = a.warehouse_id, + mater_name = b.name, + create_time = a.create_time, + create_id = a.create_id, + }, true) + .ToListAsync(); + var carryCodes = await _db.Queryable().ToListAsync(); + var result = items.GroupBy(g => new { g.warehouse_id, g.material_id }).Select(itGroup => + { + WmsStockReportH stockReport = new(); + stockReport.material_code = items.Find(x => x.warehouse_id == itGroup.Key.warehouse_id && x.material_id == itGroup.Key.material_id)?.material_code; + stockReport.mater_name = items.Find(x => x.warehouse_id == itGroup.Key.warehouse_id && x.material_id == itGroup.Key.material_id)?.mater_name ?? string.Empty; + stockReport.existing_stock_qty = itGroup.Sum(d => d.codeqty); + stockReport.max_stock = items.Find(t => t.warehouse_id == itGroup.Key.warehouse_id && t.material_id == itGroup.Key.material_id)?.max_stock; + stockReport.safe_stock = items.Find(t => t.warehouse_id == itGroup.Key.warehouse_id && t.material_id == itGroup.Key.material_id)?.safe_stock; + stockReport.min_stock = items.Find(t => t.warehouse_id == itGroup.Key.warehouse_id && t.material_id == itGroup.Key.material_id)?.min_stock; + stockReport.min_stock = items.Find(t => t.warehouse_id == itGroup.Key.warehouse_id && t.material_id == itGroup.Key.material_id)?.min_stock; + stockReport.storage_valid_day = items.Find(t => t.material_id == itGroup.Key.material_id)?.storage_valid_day; + stockReport.early_warn_day = items.Find(t => t.material_id == itGroup.Key.material_id)?.early_warn_day; + stockReport.create_id = _userManager.UserId; + stockReport.create_time = DateTime.Now; + if (stockReport.storage_valid_day.HasValue) + { + decimal expired_warning_qty = 0; + foreach (var item in itGroup) + { + if (DateTime.Now.Subtract(item.create_time.Value).TotalDays >= (item.storage_valid_day - item.early_warn_day)) + { + expired_warning_qty += item.codeqty; + } + } + stockReport.expired_warning_qty = expired_warning_qty; + } + var curCarryCodes = carryCodes.FindAll(x => x.warehouse_id == itGroup.Key.warehouse_id && x.material_id == itGroup.Key.material_id); + stockReport.Details = curCarryCodes.Adapt>(); + stockReport.Details.ForEach(x => + { + x.id = SnowflakeIdHelper.NextId(); + x.report_id = stockReport.id; + }); + return stockReport; + }); + return result; } } } From 5dd64cef9ef59126892683659389a32f33603cd9 Mon Sep 17 00:00:00 2001 From: FanLian Date: Fri, 4 Aug 2023 17:17:54 +0800 Subject: [PATCH 18/18] 1 --- .../Tnb.WarehouseMgr.Entities/Entity/WmsInstockD.part.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsInstockD.part.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsInstockD.part.cs index 296b48e7..57477412 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsInstockD.part.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsInstockD.part.cs @@ -8,7 +8,7 @@ namespace Tnb.WarehouseMgr.Entities; /// 入库申请明细表 /// -public partial class WmsInstockD : BaseEntity +public partial class WmsInstockD { ///