Browse Source

基础数据缓存配置

dev_DY_CC
赵新宇 1 year ago
parent
commit
cef151886a
  1. 59
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs
  2. 25
      be/Hosts/Basedata.Host/Win_in.Sfs.Basedata.HttpApi.Host/BasedataHttpApiHostModule.cs
  3. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationModule.cs
  4. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs
  5. 106
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Caches/CacheAppService.cs
  6. 11
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs
  7. 47
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Caches/Cache.cs

59
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<InjectionMoldingRequestReader> _logger;
private readonly IOptions<InjectionMoldingTaskOptions> _options;
private readonly IHttpClientFactory _httpClientFactory;
@ -53,15 +50,6 @@ public class InjectionMoldingRequestReader : IReader
_locService = locService;
}
/// <summary>
/// 读取注塑叫料任务
/// </summary>
@ -127,7 +115,6 @@ public class InjectionMoldingRequestReader : IReader
_logger.LogInformation(error);
}
return new List<IncomingFromExternal>();
}
// 创建新的注塑请求并将数据写入数据库
await _injectionRequest.CreateAsync(input).ConfigureAwait(false);
@ -194,27 +181,37 @@ public class InjectionMoldingRequestReader : IReader
/// <returns></returns>
public async Task<string> 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";

25
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<BasedataHttpApiHostModule>
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
//base.ConfigureServices(context);
//ConfigureAuditing();
////
//ConfigureBlobStoring();
//Configure<AbpClockOptions>(options =>
//{
// options.Kind = DateTimeKind.Local;
//});
base.ConfigureServices(context);
ConfigureAuditing();
//
ConfigureBlobStoring();
}
public override void PostConfigureServices(ServiceConfigurationContext context)
@ -120,7 +116,20 @@ public class BasedataHttpApiHostModule : ModuleBase<BasedataHttpApiHostModule>
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
CreateDatabase<BasedataDbContext>(context);
base.OnApplicationInitialization(context);
AsyncHelper.RunSync(async () =>
{
using (var scope = context.ServiceProvider.CreateScope())
{
await scope.ServiceProvider
.GetRequiredService<CacheService>().StartAsync().ConfigureAwait(false);
}
});
}
}

7
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<BasedataApplicationModule>();
Configure<AbpAutoMapperOptions>(options =>
{
options.AddMaps<BasedataApplicationModule>(validate: true);
});
}
}

7
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Boms/BomAppService.cs

@ -22,21 +22,26 @@ public class BomAppService :
SfsBaseDataAppServiceBase<Bom, BomDTO, SfsBaseDataRequestInputBase, BomEditInput, BomImportInput>,
IBomAppService
{
//private readonly CacheService _cacheService;
private new readonly IBomRepository _repository;
private readonly IBomManager _bomManager;
List<BomComponent> _bomList=new List<BomComponent>();
public BomAppService(IBomRepository repository
, IBomManager bomManager
, IDistributedCache<BomDTO> 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);
}

106
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
{
/// <summary>
/// Boms缓存生命周期(秒)
/// </summary>
public int BomsCycle { get; set; }
}
/// <summary>
/// 提供缓存服务的类
/// </summary>
public class CacheService:ISingletonDependency
{
private readonly IServiceProvider _serviceProvider;
private readonly IOptions<CycleOptions> _options;
public CacheService(IServiceProvider serviceProvider, IOptions<CycleOptions> options)
{
_serviceProvider = serviceProvider;
_options = options;
}
/// <summary>
/// 生命周期操作
/// </summary>
private async Task BomsCycle()
{
using var serviceScope = _serviceProvider.CreateScope();
var repository = serviceScope.ServiceProvider.GetRequiredService<IBomRepository>();
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);
}
/// <summary>
/// 异步开始生命周期操作
/// </summary>
public async Task StartAsync()
{
await BomsCycle().ConfigureAwait(false);
}
/// <summary>
/// 异步重置BOM(Bill of Materials)生命周期操作
/// </summary>
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);
}
}
}

11
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<List<Bom>> GetListAsync()
{
return await _repository.GetListAsync().ConfigureAwait(false);
}
public virtual async Task<List<Bom>> GetListWithPhantomItemAsync(string productItemCode, string mfgOp, DateTime validTime, bool onlyFromProductionPlan)
{
var where = BuildExpression(productItemCode, mfgOp, validTime, onlyFromProductionPlan);

47
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<Bom> Boms = new List<Bom>();
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);
}
}
}

Loading…
Cancel
Save