From cef151886a077305a95172e1611ad4c2fc66d74f Mon Sep 17 00:00:00 2001 From: zhaoxinyu <89237069@qq.com> Date: Thu, 18 Apr 2024 15:48:16 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Incoming/InjectionMoldingRequestReader.cs | 59 +++++----- .../BasedataHttpApiHostModule.cs | 25 +++-- .../BasedataApplicationModule.cs | 7 ++ .../Boms/BomAppService.cs | 7 +- .../Caches/CacheAppService.cs | 106 ++++++++++++++++++ .../Boms/BomManager.cs | 11 +- .../Caches/Cache.cs | 47 ++------ 7 files changed, 182 insertions(+), 80 deletions(-) create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs index bc27da7ad..537f6ec81 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs @@ -19,16 +19,13 @@ using Win_in.Sfs.Wms.Store.Application.Contracts; using System.Text.Json.Serialization; using System.IdentityModel.Tokens.Jwt; using Volo.Abp; - namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.Incoming; - public class InjectionMoldingRequestReader : IReader { private readonly IInjectionIssueRequestAppService _injectionRequest; private readonly IItemBasicAppService _itemService; private readonly ILocationAppService _locService; - private readonly ILogger _logger; private readonly IOptions _options; private readonly IHttpClientFactory _httpClientFactory; @@ -53,15 +50,6 @@ public class InjectionMoldingRequestReader : IReader _locService = locService; } - - - - - - - - - /// /// 读取注塑叫料任务 /// @@ -127,7 +115,6 @@ public class InjectionMoldingRequestReader : IReader _logger.LogInformation(error); } return new List(); - } // 创建新的注塑请求并将数据写入数据库 await _injectionRequest.CreateAsync(input).ConfigureAwait(false); @@ -194,27 +181,37 @@ public class InjectionMoldingRequestReader : IReader /// public async Task ReaderCameraApi() { - // 从配置中获取远程摄像头的地址、用户名、密码和令牌 - var address = _options.Value.AutoRemote.IpAddress; - var username = _options.Value.AutoRemote.UserName; - var password = _options.Value.AutoRemote.Password; - var token = _options.Value.AutoRemote.Token; - - // 创建一个HttpClient实例 - var client = _httpClientFactory.CreateClient(); - - // 将用户名和密码转换为Base64编码的凭据,并设置请求的身份验证信息 - var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")); - client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentials); - - // 发送GET请求到远程摄像头地址并等待响应 - var response = await client.GetAsync(address).ConfigureAwait(false); + try + { + + // 从配置中获取远程摄像头的地址、用户名、密码和令牌 + var address = _options.Value.AutoRemote.IpAddress; + var username = _options.Value.AutoRemote.UserName; + var password = _options.Value.AutoRemote.Password; + var token = _options.Value.AutoRemote.Token; + + // 创建一个HttpClient实例 + var client = _httpClientFactory.CreateClient(); + + // 将用户名和密码转换为Base64编码的凭据,并设置请求的身份验证信息 + var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")); + client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentials); - // 如果请求成功,则返回响应内容,否则返回错误信息 - if (response.IsSuccessStatusCode) + + // 发送GET请求到远程摄像头地址并等待响应 + var response = await client.GetAsync(address).ConfigureAwait(false); + + // 如果请求成功,则返回响应内容,否则返回错误信息 + if (response.IsSuccessStatusCode) + { + return await response.Content.ReadAsStringAsync().ConfigureAwait(false); + } + } + catch (HttpRequestException ex) { - return await response.Content.ReadAsStringAsync().ConfigureAwait(false); + _logger.LogInformation("远程摄像头连接失败:" + ex.Message); + } return "Error occurred"; diff --git a/be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs b/be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs index 3f5af902b..5b973deba 100644 --- a/be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs +++ b/be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs @@ -20,6 +20,7 @@ using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.Swashbuckle; +using Volo.Abp.Threading; using Volo.Abp.Timing; using Volo.Abp.Users; using Win_in.Sfs.Basedata.Application; @@ -67,19 +68,14 @@ public class BasedataHttpApiHostModule : ModuleBase { public override void ConfigureServices(ServiceConfigurationContext context) { - //base.ConfigureServices(context); - //ConfigureAuditing(); - //// - //ConfigureBlobStoring(); - //Configure(options => - //{ - // options.Kind = DateTimeKind.Local; - //}); + base.ConfigureServices(context); ConfigureAuditing(); // ConfigureBlobStoring(); + + } public override void PostConfigureServices(ServiceConfigurationContext context) @@ -120,7 +116,20 @@ public class BasedataHttpApiHostModule : ModuleBase public override void OnApplicationInitialization(ApplicationInitializationContext context) { + + CreateDatabase(context); base.OnApplicationInitialization(context); + + AsyncHelper.RunSync(async () => + { + using (var scope = context.ServiceProvider.CreateScope()) + { + await scope.ServiceProvider + .GetRequiredService().StartAsync().ConfigureAwait(false); + + } + }); + } } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationModule.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationModule.cs index f41b7119e..769302ef0 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationModule.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationModule.cs @@ -3,6 +3,7 @@ using Volo.Abp.Application; using Volo.Abp.AutoMapper; using Volo.Abp.Modularity; using Win_in.Sfs.Basedata.Application.Contracts; + using Win_in.Sfs.Basedata.Domain; using Win_in.Sfs.Shared.Application; @@ -19,10 +20,16 @@ public class BasedataApplicationModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { + context.Services.AddAutoMapperObjectMapper(); Configure(options => { options.AddMaps(validate: true); }); + + + + + } } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs index 41e51c39a..cf42f2408 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs @@ -22,21 +22,26 @@ public class BomAppService : SfsBaseDataAppServiceBase, IBomAppService { + //private readonly CacheService _cacheService; + private new readonly IBomRepository _repository; private readonly IBomManager _bomManager; - List _bomList=new List(); + public BomAppService(IBomRepository repository , IBomManager bomManager , IDistributedCache cache + //, CacheService cacheService ) : base(repository, cache) { _repository = repository; _bomManager = bomManager; + //_cacheService = cacheService; base.CreatePolicyName = BomPermissions.Create; base.UpdatePolicyName = BomPermissions.Update; base.DeletePolicyName = BomPermissions.Delete; + //_cacheService.StartAsync().ConfigureAwait(false); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs new file mode 100644 index 000000000..c93b41744 --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs @@ -0,0 +1,106 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.Application.Services; +using Volo.Abp.Caching; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories; +using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Basedata.Domain; +using Win_in.Sfs.Basedata.Domain.Caches; +using Win_in.Sfs.Basedata.Domain.Shared; + +namespace Win_in.Sfs.Basedata.Application; + +public class CycleOptions +{ + /// + /// Boms缓存生命周期(秒) + /// + public int BomsCycle { get; set; } + +} +/// +/// 提供缓存服务的类 +/// +public class CacheService:ISingletonDependency +{ + private readonly IServiceProvider _serviceProvider; + private readonly IOptions _options; + public CacheService(IServiceProvider serviceProvider, IOptions options) + { + _serviceProvider = serviceProvider; + _options = options; + } + + /// + /// 生命周期操作 + /// + private async Task BomsCycle() + { + using var serviceScope = _serviceProvider.CreateScope(); + var repository = serviceScope.ServiceProvider.GetRequiredService(); + var reassigner = new Reassigner(DateTime.Now, new TimeSpan(0, 0, _options.Value.BomsCycle==0?600: _options.Value.BomsCycle)); + await reassigner.RunAsync(async () => + { + Cache.Boms.Clear(); + Cache.Boms = await repository.GetListAsync().ConfigureAwait(false); + + }).ConfigureAwait(false); + } + + /// + /// 异步开始生命周期操作 + /// + public async Task StartAsync() + { + await BomsCycle().ConfigureAwait(false); + } + + /// + /// 异步重置BOM(Bill of Materials)生命周期操作 + /// + public async Task ResetAsync() + { + await BomsCycle().ConfigureAwait(false); + } +} + + +public class Reassigner +{ + private readonly TimeSpan _interval; + private DateTime _lasttime; + public Reassigner(DateTime lasttime, TimeSpan interval) + { + _lasttime = lasttime; + _interval = interval; + } + + public async Task RunAsync(Action p_action) + { + while (true) + { + // 获取当前时间 + var currentTime = DateTime.Now; + // 计算上次重新赋值到现在的时间间隔 + var elapsed = currentTime - _lasttime; + // 检查时间间隔是否满足条件 + if (elapsed >= _interval) + { + p_action(); + // 重新赋值 + //_value = await GetValueAsync(); + // 更新最后更新时间 + _lasttime = currentTime; + } + + // 等待下一刻钟 + await Task.Delay(_interval).ConfigureAwait(false); + } + } + +} diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs index 692ce3ef0..bd83d5143 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs @@ -10,7 +10,8 @@ using Volo.Abp; using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Services; using Win_in.Sfs.Basedata.Boms; -using Win_in.Sfs.Basedata.Caches; + +using Win_in.Sfs.Basedata.Domain.Caches; using Win_in.Sfs.Basedata.Domain.Shared; using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Shared; @@ -22,6 +23,7 @@ public class BomManager : DomainService, IBomManager private readonly IBomRepository _repository; private readonly IItemBasicRepository _itemBasicRepository; + public BomManager(IBomRepository repository, IItemBasicRepository itemBasicRepository) { _repository = repository; @@ -143,6 +145,13 @@ public class BomManager : DomainService, IBomManager return await _repository.GetListAsync(p => p.Product == product).ConfigureAwait(false); } + public virtual async Task> GetListAsync() + { + return await _repository.GetListAsync().ConfigureAwait(false); + } + + + public virtual async Task> GetListWithPhantomItemAsync(string productItemCode, string mfgOp, DateTime validTime, bool onlyFromProductionPlan) { var where = BuildExpression(productItemCode, mfgOp, validTime, onlyFromProductionPlan); diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Caches/Cache.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Caches/Cache.cs index 4beb6e0d7..9a44f6986 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Caches/Cache.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Caches/Cache.cs @@ -1,59 +1,28 @@ using System; using System.Collections.Generic; +using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories; using Win_in.Sfs.Basedata.Domain; -namespace Win_in.Sfs.Basedata.Caches; +namespace Win_in.Sfs.Basedata.Domain.Caches; public static class Cache { + public static List Boms = new List(); - public static async void BomsLifeCycle(int lifetime) + public static void Clear() { - var reassigner = new Reassigner(DateTime.Now,new TimeSpan(0,5,0)); - await reassigner.RunAsync(() => { - Boms.Clear(); - }).ConfigureAwait(false); + Boms.Clear(); } } -public class Reassigner -{ - private readonly TimeSpan _interval; - private DateTime _lasttime; - public Reassigner(DateTime lasttime, TimeSpan interval) - { - _lasttime = lasttime; - _interval = interval; - } - public async Task RunAsync(Action p_action) - { - while (true) - { - // 获取当前时间 - var currentTime = DateTime.Now; - // 计算上次重新赋值到现在的时间间隔 - var elapsed = currentTime - _lasttime; - // 检查时间间隔是否满足条件 - if (elapsed >= _interval) - { - p_action(); - // 重新赋值 - //_value = await GetValueAsync(); - // 更新最后更新时间 - _lasttime = currentTime; - } - - // 等待下一刻钟 - await Task.Delay(_interval); - } - } - -} From f26bb4930e869db344159af894e2485ea3f9408d Mon Sep 17 00:00:00 2001 From: zhaoxinyu <89237069@qq.com> Date: Thu, 18 Apr 2024 15:57:33 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BasedataHttpApiHostModule.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs b/be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs index 5b973deba..95407fc63 100644 --- a/be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs +++ b/be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs @@ -121,15 +121,15 @@ public class BasedataHttpApiHostModule : ModuleBase CreateDatabase(context); base.OnApplicationInitialization(context); - AsyncHelper.RunSync(async () => - { - using (var scope = context.ServiceProvider.CreateScope()) - { - await scope.ServiceProvider - .GetRequiredService().StartAsync().ConfigureAwait(false); + //AsyncHelper.RunSync(async () => + //{ + // using (var scope = context.ServiceProvider.CreateScope()) + // { + // await scope.ServiceProvider + // .GetRequiredService().StartAsync().ConfigureAwait(false); - } - }); + // } + //}); } } From b7731a61715793329d4cb35d6a960ffc1e2a0c89 Mon Sep 17 00:00:00 2001 From: liuyunfeng Date: Thu, 18 Apr 2024 16:05:03 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=8A=A0PDA=20list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- .../Stores/TransferLibJobController.cs | 35 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index f83526d13..934d3d589 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -**/node_modules/ \ No newline at end of file +**/node_modules/ +/be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/Properties/PublishProfiles/FolderProfile3.pubxml diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferLibJobController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferLibJobController.cs index 0fcbb8ffa..c8084e7d7 100644 --- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferLibJobController.cs +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferLibJobController.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Text.Json; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.Application.Dtos; @@ -99,4 +100,38 @@ public class TransferLibJobController : AbpController { await _transferLibJobAppService.CancelAcceptAsync(id).ConfigureAwait(false); } + + /// + /// 获取列表 + /// + /// + /// + /// + [HttpGet("list")] + public virtual async Task> GetListAsync(int pageSize, int pageIndex) + { + //var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false); + //var jsonCodes = JsonSerializer.Serialize(wlgCodes); + + var status = new List() { (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing }; + var jsonStatus = JsonSerializer.Serialize(status); + + var request = new SfsJobRequestInputBase + { + MaxResultCount = pageSize, + SkipCount = (pageIndex - 1) * pageSize, + Sorting = $"{nameof(TransferLibJobDTO.Priority)} ASC", + Condition = new Condition + { + Filters = new List + { + //new(nameof(TransferLibJobDTO.WorkGroupCode),jsonCodes,"In"), + new(nameof(TransferLibJobDTO.JobStatus),jsonStatus,"In") + } + } + }; + + var list = await _transferLibJobAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false); + return list; + } } From d02f2aa8dd9f172d2575b701efbe952f86f695b6 Mon Sep 17 00:00:00 2001 From: zhaoxinyu <89237069@qq.com> Date: Thu, 18 Apr 2024 17:17:50 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BasedataHttpApiHostModule.cs | 2 +- .../Boms/BomAppService.cs | 18 +---- .../Caches/CacheAppService.cs | 71 ++++++++++++++----- 3 files changed, 57 insertions(+), 34 deletions(-) diff --git a/be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs b/be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs index 95407fc63..adb390a0c 100644 --- a/be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs +++ b/be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs @@ -127,7 +127,7 @@ public class BasedataHttpApiHostModule : ModuleBase // { // await scope.ServiceProvider // .GetRequiredService().StartAsync().ConfigureAwait(false); - + // } //}); diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs index cf42f2408..175c29344 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs @@ -22,7 +22,7 @@ public class BomAppService : SfsBaseDataAppServiceBase, IBomAppService { - //private readonly CacheService _cacheService; + private new readonly IBomRepository _repository; private readonly IBomManager _bomManager; @@ -32,29 +32,17 @@ public class BomAppService : public BomAppService(IBomRepository repository , IBomManager bomManager , IDistributedCache cache - //, CacheService cacheService + ) : base(repository, cache) { _repository = repository; _bomManager = bomManager; - //_cacheService = cacheService; base.CreatePolicyName = BomPermissions.Create; base.UpdatePolicyName = BomPermissions.Update; - base.DeletePolicyName = BomPermissions.Delete; - //_cacheService.StartAsync().ConfigureAwait(false); - + base.DeletePolicyName = BomPermissions.Delete; } - - - - - - - - - #region Get [HttpGet("get-by-productitemcode")] diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs index c93b41744..0ea409cf5 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs @@ -1,5 +1,7 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; +using DocumentFormat.OpenXml.Office2010.Drawing; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; @@ -15,6 +17,39 @@ using Win_in.Sfs.Basedata.Domain.Shared; namespace Win_in.Sfs.Basedata.Application; + +public class TaskQueue +{ + private readonly List _tasks = new List(); + + public void Enqueue(string name, Action action) + { + _tasks.Add(new TaskItem { Name = name, Action = action }); + } + + public async Task StartAsync() + { + foreach (var task in _tasks) + { + await Task.Run(task.Action).ConfigureAwait(false); + } + } +} +public class TaskItem +{ + public string Name { get; set; } + public Action Action { get; set; } +} + + + + + + + + + + public class CycleOptions { /// @@ -24,7 +59,7 @@ public class CycleOptions } /// -/// 提供缓存服务的类 +/// 提供缓存服务的类(堵塞以后修改再用) /// public class CacheService:ISingletonDependency { @@ -41,32 +76,32 @@ public class CacheService:ISingletonDependency /// private async Task BomsCycle() { - using var serviceScope = _serviceProvider.CreateScope(); - var repository = serviceScope.ServiceProvider.GetRequiredService(); - var reassigner = new Reassigner(DateTime.Now, new TimeSpan(0, 0, _options.Value.BomsCycle==0?600: _options.Value.BomsCycle)); - await reassigner.RunAsync(async () => - { - Cache.Boms.Clear(); - Cache.Boms = await repository.GetListAsync().ConfigureAwait(false); + + //Task.Run(async () => + //{ + var reassigner = new Reassigner(DateTime.Now, new TimeSpan(0, 0, _options.Value.BomsCycle == 0 ? 60 : _options.Value.BomsCycle)); + await reassigner.RunAsync(async () => + { + using var serviceScope = _serviceProvider.CreateScope(); + var repository = serviceScope.ServiceProvider.GetRequiredService(); + Cache.Boms.Clear(); + Cache.Boms = await repository.GetListAsync().ConfigureAwait(false); - }).ConfigureAwait(false); + }).ConfigureAwait(false); + //}); + ; } /// - /// 异步开始生命周期操作 + /// 异步开始生命周期操作不能堵塞 /// public async Task StartAsync() { - await BomsCycle().ConfigureAwait(false); - } + BomsCycle();//异步处理不能堵塞主任务 - /// - /// 异步重置BOM(Bill of Materials)生命周期操作 - /// - public async Task ResetAsync() - { - await BomsCycle().ConfigureAwait(false); } + + } From 8882688e3635705c53cd91cdc7adabd5619aee39 Mon Sep 17 00:00:00 2001 From: zhouhongjun <565221961@qq.com> Date: Fri, 19 Apr 2024 09:22:24 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=B3=A8=E5=A1=91=E5=8F=91=E6=96=99?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Stores/InjectionRequestController.cs | 15 +++++++++++++++ .../ItemBasics/IItemBasicAppService.cs | 1 + .../Items/ItemBasicAppService.cs | 8 ++++++++ .../IInjectionIssueRequestAppService.cs | 7 +++++++ .../InjectionIssueJobAppService.cs | 5 ++++- .../InjectionIssueNoteAppService.cs | 5 ++++- .../InjectionIssueRequestAppService.cs | 17 +++++++++++++++-- .../InjectionIssueRequestEventHandler.cs | 3 ++- 8 files changed, 56 insertions(+), 5 deletions(-) diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/InjectionRequestController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/InjectionRequestController.cs index bdcb4dd23..4a67b9616 100644 --- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/InjectionRequestController.cs +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/InjectionRequestController.cs @@ -1,6 +1,8 @@ +using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc; +using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Pda.Controllers.Stores; @@ -48,4 +50,17 @@ public class InjectionIssueRequestController : AbpController return Ok(result); } + /// + /// 获取物品类别列表 + /// + /// + /// + [HttpGet("list/item-category")] + public virtual async Task> GetItemCategoryListAsync() + { + var entities = await _injectionRequestAppService.GetItemCategoryListAsync().ConfigureAwait(false); + + return entities; + } + } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemBasics/IItemBasicAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemBasics/IItemBasicAppService.cs index e44da0e5f..da616e239 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemBasics/IItemBasicAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemBasics/IItemBasicAppService.cs @@ -17,6 +17,7 @@ public interface IItemBasicAppService void CheckItemIsAvailable(ItemBasicDTO itemBasicDTO); Task> GetListByNameAsync(string name); + Task> GetCategoryListAsync(); Task GetOrAddAsync(ItemBasicEditInput input); diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Items/ItemBasicAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Items/ItemBasicAppService.cs index 710271fd8..fc7d9b96d 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Items/ItemBasicAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Items/ItemBasicAppService.cs @@ -122,6 +122,14 @@ public class ItemBasicAppService return dtos; } + [HttpGet("list-item-category")] + public virtual async Task> GetCategoryListAsync() + { + var entities = await _repository.GetListAsync(c => !string.IsNullOrEmpty(c.Category)).ConfigureAwait(false); + var dtos = ObjectMapper.Map, List>(entities); + return dtos; + } + [HttpGet("get-manage-type")] public virtual async Task GetManageTypeAsync(string itemCode) { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs index 09159fa09..8eb902d1d 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; +using Win_in.Sfs.Basedata.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts; @@ -16,4 +17,10 @@ public interface IInjectionIssueRequestAppService /// /// Task GetCountAsync(); + + /// + /// 获取物品类别列表 + /// + /// + Task> GetItemCategoryListAsync(); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs index 7a599cb67..416005a4a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs @@ -21,8 +21,11 @@ using Win_in.Sfs.Wms.Store.Notes; namespace Win_in.Sfs.Wms.Store.Application; +/// +/// 注塑发料任务 +/// [Authorize] -[Route($"{StoreConsts.RootPath}injection-job")] +[Route($"{StoreConsts.RootPath}injection-issue-job")] public class InjectionIssueJobAppService : SfsJobAppServiceBase, diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteAppService.cs index e172732a7..5bddd6b32 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteAppService.cs @@ -17,8 +17,11 @@ using Win_in.Sfs.Wms.Store.Domain.Shared; namespace Win_in.Sfs.Wms.Store.Application; +/// +/// 注塑发料记录 +/// [Authorize] -[Route($"{StoreConsts.RootPath}injection-note")] +[Route($"{StoreConsts.RootPath}injection-issue-note")] public class InjectionIssueNoteAppService : SfsStoreWithDetailsAppServiceBase, diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs index 88a708606..8a87550c5 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs @@ -28,10 +28,10 @@ using Win_in.Sfs.Wms.Store.Domain.Shared; namespace Win_in.Sfs.Wms.Store.Application; /// -/// 注塑叫料 +/// 注塑发料申请 /// [Authorize] -[Route($"{StoreConsts.RootPath}injection-request")] +[Route($"{StoreConsts.RootPath}injection-issue-request")] public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase, @@ -150,6 +150,19 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase + /// 获取物品类别列表 + /// + /// + /// + [HttpGet("list/item-category")] + public virtual async Task> GetItemCategoryListAsync() + { + var entities = await _itemBasicAppService.GetCategoryListAsync().ConfigureAwait(false); + + return entities; + } + #endregion #region 导入 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/InjectionIssueRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/InjectionIssueRequestEventHandler.cs index faf8ef288..deb859cb5 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/InjectionIssueRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/InjectionIssueRequestEventHandler.cs @@ -388,7 +388,7 @@ public class InjectionIssueRequestEventHandler .RawLocationCodeListJson) }; var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); - usableList = usableList.Where(p => !useBalanceList.Contains(p.PackingCode)).ToList(); + usableList = usableList.Where(p => !useBalanceList.Contains(p.PackingCode) && p.Qty!=0).ToList(); if (usableList.Any()) { for (var i = 0; i < sumBoxQty; i++) @@ -462,6 +462,7 @@ public class InjectionIssueRequestEventHandler detail.ItemName=injectionRequestDetail.ItemName; detail.ItemDesc1=injectionRequestDetail.ItemDesc1; detail.ItemDesc2 = injectionRequestDetail.ItemDesc2; + detail.StdPackQty = injectionRequestDetail.StdPackQty; detail.Status = EnumInventoryStatus.OK; detail.Uom = balance.Uom;