Fulfill export executor

This commit is contained in:
2025-10-27 10:17:08 +09:00
parent 7c35c9a7df
commit 9e9845d446
6 changed files with 23 additions and 7 deletions

View File

@ -7,13 +7,13 @@ using Hcs.WebApp.Services;
namespace Hcs.WebApp.BackgroundServices namespace Hcs.WebApp.BackgroundServices
{ {
public class OperationExecutionService(OperationExecutionState state, IServiceScopeFactory scopeFactory) : BackgroundService public class OperationExecutionService(OperationExecutionState state, ExecutorFactory executorFactory, IServiceScopeFactory scopeFactory) : BackgroundService
{ {
private const int SLEEP_TIME = 30000; private const int SLEEP_TIME = 30000;
private readonly OperationExecutionState state = state; private readonly OperationExecutionState state = state;
private readonly ExecutorFactory executorFactory = executorFactory;
private readonly IServiceScopeFactory scopeFactory = scopeFactory; private readonly IServiceScopeFactory scopeFactory = scopeFactory;
private readonly ExecutorFactory executorFactory = new();
private Broker.Logger.ILogger logger; private Broker.Logger.ILogger logger;
private IMessageCapturer messageCapturer; private IMessageCapturer messageCapturer;

View File

@ -3,9 +3,10 @@ using Hcs.WebApp.Data.Hcs;
namespace Hcs.WebApp.BackgroundServices.OperationExecutors namespace Hcs.WebApp.BackgroundServices.OperationExecutors
{ {
public abstract class ExecutorBase(IClient client, Operation operation) : IExecutor public abstract class ExecutorBase(IClient client, IServiceScopeFactory scopeFactory, Operation operation) : IExecutor
{ {
protected readonly IClient client = client; protected readonly IClient client = client;
protected readonly IServiceScopeFactory scopeFactory = scopeFactory;
protected readonly Operation operation = operation; protected readonly Operation operation = operation;
public abstract Task<string> ExecuteAsync(CancellationToken cancellationToken); public abstract Task<string> ExecuteAsync(CancellationToken cancellationToken);

View File

@ -4,14 +4,16 @@ using Hcs.WebApp.Data.Hcs;
namespace Hcs.WebApp.BackgroundServices.OperationExecutors namespace Hcs.WebApp.BackgroundServices.OperationExecutors
{ {
public class ExecutorFactory public class ExecutorFactory(IServiceScopeFactory scopeFactory)
{ {
protected readonly IServiceScopeFactory scopeFactory = scopeFactory;
public IExecutor CreateExecutor(IClient client, Operation operation) public IExecutor CreateExecutor(IClient client, Operation operation)
{ {
switch (operation.Type) switch (operation.Type)
{ {
case Operation.OperationType.NsiCommon_ExportNsiItem_15_7_0_1: case Operation.OperationType.NsiCommon_ExportNsiItem_15_7_0_1:
return new ExportNsiItemExecutor_15_7_0_1(client, operation); return new ExportNsiItemExecutor_15_7_0_1(client, scopeFactory, operation);
} }
throw new NotImplementedException(); throw new NotImplementedException();

View File

@ -1,13 +1,18 @@
using Hcs.Broker; using Hcs.Broker;
using Hcs.Service.Async.NsiCommon;
using Hcs.WebApp.Data.Hcs; using Hcs.WebApp.Data.Hcs;
using Hcs.WebApp.Services;
namespace Hcs.WebApp.BackgroundServices.OperationExecutors.NsiCommon namespace Hcs.WebApp.BackgroundServices.OperationExecutors.NsiCommon
{ {
public class ExportNsiItemExecutor_15_7_0_1(IClient client, Operation operation) : ExecutorBase(client, operation) public class ExportNsiItemExecutor_15_7_0_1(IClient client, IServiceScopeFactory scopeFactory, Operation operation) : ExecutorBase(client, scopeFactory, operation)
{ {
public override async Task<string> ExecuteAsync(CancellationToken cancellationToken) public override async Task<string> ExecuteAsync(CancellationToken cancellationToken)
{ {
return await client.NsiCommon.RequestExportNsiItemAsync(1, Service.Async.NsiCommon.ListGroup.NSI, cancellationToken); using var scope = scopeFactory.CreateScope();
var registryService = scope.ServiceProvider.GetRequiredService<RegistryService>();
var registry = await registryService.GetRegistryByOperationId(operation.Id);
return await client.NsiCommon.RequestExportNsiItemAsync(registry.Number, ListGroup.NSI, cancellationToken);
} }
} }
} }

View File

@ -1,5 +1,6 @@
using Hcs.WebApp.BackgroundServices; using Hcs.WebApp.BackgroundServices;
using Hcs.WebApp.BackgroundServices.CampaignManagers; using Hcs.WebApp.BackgroundServices.CampaignManagers;
using Hcs.WebApp.BackgroundServices.OperationExecutors;
using Hcs.WebApp.Components; using Hcs.WebApp.Components;
using Hcs.WebApp.Components.Shared; using Hcs.WebApp.Components.Shared;
using Hcs.WebApp.Data.Hcs; using Hcs.WebApp.Data.Hcs;
@ -65,6 +66,7 @@ builder.Services.AddScoped<RegistryService>();
builder.Services.AddSingleton<CampaignManagementState>(); builder.Services.AddSingleton<CampaignManagementState>();
builder.Services.AddSingleton<OperationExecutionState>(); builder.Services.AddSingleton<OperationExecutionState>();
builder.Services.AddSingleton<ManagerFactory>(); builder.Services.AddSingleton<ManagerFactory>();
builder.Services.AddSingleton<ExecutorFactory>();
builder.Services.AddHostedService<CampaignManagementService>(); builder.Services.AddHostedService<CampaignManagementService>();
builder.Services.AddHostedService<OperationExecutionService>(); builder.Services.AddHostedService<OperationExecutionService>();

View File

@ -14,5 +14,11 @@ namespace Hcs.WebApp.Services
where registry.IsCommon == isCommon where registry.IsCommon == isCommon
select registry).ToListAsync(); select registry).ToListAsync();
} }
public async Task<Registry> GetRegistryByOperationId(int operationId)
{
using var context = factory.CreateDbContext();
return await context.Registries.SingleAsync(x => x.LastSyncOperationId == operationId);
}
} }
} }