From 951ccd59249a6b66f8b12a26c59450f61bcf857b Mon Sep 17 00:00:00 2001 From: "HOME-LAPTOP\\kshkulev" Date: Wed, 5 Nov 2025 15:46:02 +0900 Subject: [PATCH] Add progress to campaign entity --- ...xportCommonRegistryElementsManager_15_7_0_1.cs | 13 ++++++------- ...portPrivateRegistryElementsManager_15_7_0_1.cs | 11 +++++------ .../CampaignManagers/ManagerBase.cs | 15 +++++++++++++++ Hcs.WebApp/Components/Pages/Campaigns.razor | 5 +++++ Hcs.WebApp/Data/Hcs/Campaign.cs | 2 ++ Hcs.WebApp/Services/HeadquartersService.cs | 7 ++++--- 6 files changed, 37 insertions(+), 16 deletions(-) diff --git a/Hcs.WebApp/BackgroundServices/CampaignManagers/ExportCommonRegistryElementsManager_15_7_0_1.cs b/Hcs.WebApp/BackgroundServices/CampaignManagers/ExportCommonRegistryElementsManager_15_7_0_1.cs index bd25535..8977271 100644 --- a/Hcs.WebApp/BackgroundServices/CampaignManagers/ExportCommonRegistryElementsManager_15_7_0_1.cs +++ b/Hcs.WebApp/BackgroundServices/CampaignManagers/ExportCommonRegistryElementsManager_15_7_0_1.cs @@ -20,8 +20,10 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers private RegistryService? registryService; - protected RegistryService RegistryService => registryService ??= scope.ServiceProvider.GetRequiredService(); + protected override int StepCount => Enum.GetValues(typeof(Step)).Length; + protected RegistryService RegistryService => registryService ??= scope.ServiceProvider.GetRequiredService(); + public override async Task ProcessAsync() { switch ((Step)campaign.Step) @@ -53,8 +55,7 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers { await HeadquartersService.SetCampaignStartedAsync(context, campaign.Id); - campaign.Step = (int)Step.ExecutionWait; - await HeadquartersService.UpdateCampaignStepAsync(context, campaign); + await ProgressStepAsync(context, (int)Step.ExecutionWait); var registryCount = await RegistryService.GetRegistryCountAsync(context, true); operations = await HeadquartersService.InitiateOperationsAsync(context, registryCount, campaign.Id, Operation.OperationType.NsiCommon_ExportNsiItem_15_7_0_1); @@ -85,8 +86,7 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers { if (operationExecutionState.HasCampaignOperation(campaign.Id)) return; - campaign.Step = (int)Step.ResultWait; - await HeadquartersService.UpdateCampaignStepAsync(campaign); + await ProgressStepAsync((int)Step.ResultWait); var operations = await HeadquartersService.GetOperationsAsync(campaign.Id); foreach (var operation in operations) @@ -109,8 +109,7 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers using var transaction = await context.Database.BeginTransactionAsync(); try { - campaign.Step = (int)Step.End; - await HeadquartersService.UpdateCampaignStepAsync(context, campaign); + await ProgressStepAsync(context, (int)Step.End); await HeadquartersService.SetCampaignEndedAsync(context, campaign.Id); diff --git a/Hcs.WebApp/BackgroundServices/CampaignManagers/ExportPrivateRegistryElementsManager_15_7_0_1.cs b/Hcs.WebApp/BackgroundServices/CampaignManagers/ExportPrivateRegistryElementsManager_15_7_0_1.cs index 1c8bb26..5fab90d 100644 --- a/Hcs.WebApp/BackgroundServices/CampaignManagers/ExportPrivateRegistryElementsManager_15_7_0_1.cs +++ b/Hcs.WebApp/BackgroundServices/CampaignManagers/ExportPrivateRegistryElementsManager_15_7_0_1.cs @@ -20,6 +20,8 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers private RegistryService? registryService; + protected override int StepCount => Enum.GetValues(typeof(Step)).Length; + protected RegistryService RegistryService => registryService ??= scope.ServiceProvider.GetRequiredService(); public override async Task ProcessAsync() @@ -53,8 +55,7 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers { await HeadquartersService.SetCampaignStartedAsync(context, campaign.Id); - campaign.Step = (int)Step.ExecutionWait; - await HeadquartersService.UpdateCampaignStepAsync(context, campaign); + await ProgressStepAsync(context, (int)Step.ExecutionWait); var registryCount = await RegistryService.GetRegistryCountAsync(context, false); operations = await HeadquartersService.InitiateOperationsAsync(context, registryCount, campaign.Id, Operation.OperationType.Nsi_ExportNsiItem_15_7_0_1); @@ -85,8 +86,7 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers { if (operationExecutionState.HasCampaignOperation(campaign.Id)) return; - campaign.Step = (int)Step.ResultWait; - await HeadquartersService.UpdateCampaignStepAsync(campaign); + await ProgressStepAsync((int)Step.ResultWait); var operations = await HeadquartersService.GetOperationsAsync(campaign.Id); foreach (var operation in operations) @@ -109,8 +109,7 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers using var transaction = await context.Database.BeginTransactionAsync(); try { - campaign.Step = (int)Step.End; - await HeadquartersService.UpdateCampaignStepAsync(context, campaign); + await ProgressStepAsync(context, (int)Step.End); await HeadquartersService.SetCampaignEndedAsync(context, campaign.Id); diff --git a/Hcs.WebApp/BackgroundServices/CampaignManagers/ManagerBase.cs b/Hcs.WebApp/BackgroundServices/CampaignManagers/ManagerBase.cs index 0015b6d..dce470e 100644 --- a/Hcs.WebApp/BackgroundServices/CampaignManagers/ManagerBase.cs +++ b/Hcs.WebApp/BackgroundServices/CampaignManagers/ManagerBase.cs @@ -19,6 +19,8 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers protected HeadquartersService HeadquartersService => headquartersService ??= scope.ServiceProvider.GetRequiredService(); + protected abstract int StepCount { get; } + public Campaign Campaign => campaign; public IManager.ManagerState State { get; protected set; } = IManager.ManagerState.Created; @@ -31,5 +33,18 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers State = IManager.ManagerState.Ended; } + + protected async Task ProgressStepAsync(int step) + { + using var context = HeadquartersService.GetNewContext(); + await ProgressStepAsync(context, step); + } + + protected async Task ProgressStepAsync(HcsDbContext context, int step) + { + campaign.Step = step; + campaign.Progress = (step + 1) / StepCount; + await HeadquartersService.UpdateCampaignStepAndProgressAsync(context, campaign); + } } } diff --git a/Hcs.WebApp/Components/Pages/Campaigns.razor b/Hcs.WebApp/Components/Pages/Campaigns.razor index 8fed7de..a41ea4c 100644 --- a/Hcs.WebApp/Components/Pages/Campaigns.razor +++ b/Hcs.WebApp/Components/Pages/Campaigns.razor @@ -41,6 +41,11 @@ + + + diff --git a/Hcs.WebApp/Data/Hcs/Campaign.cs b/Hcs.WebApp/Data/Hcs/Campaign.cs index b1f7d6c..b2f3ae8 100644 --- a/Hcs.WebApp/Data/Hcs/Campaign.cs +++ b/Hcs.WebApp/Data/Hcs/Campaign.cs @@ -28,6 +28,8 @@ namespace Hcs.WebApp.Data.Hcs public int Step { get; set; } = 0; + public int Progress { get; set; } = 0; + public string? FailureReason { get; set; } public virtual ICollection? Operations { get; set; } = null; diff --git a/Hcs.WebApp/Services/HeadquartersService.cs b/Hcs.WebApp/Services/HeadquartersService.cs index cc04fed..7b1c685 100644 --- a/Hcs.WebApp/Services/HeadquartersService.cs +++ b/Hcs.WebApp/Services/HeadquartersService.cs @@ -169,18 +169,19 @@ namespace Hcs.WebApp.Services } } - public async Task UpdateCampaignStepAsync(Campaign campaign) + public async Task UpdateCampaignStepAndProgressAsync(Campaign campaign) { using var context = GetNewContext(); - await UpdateCampaignStepAsync(context, campaign); + await UpdateCampaignStepAndProgressAsync(context, campaign); } - public async Task UpdateCampaignStepAsync(HcsDbContext context, Campaign campaign) + public async Task UpdateCampaignStepAndProgressAsync(HcsDbContext context, Campaign campaign) { var targetCampaign = await context.Campaigns.FirstOrDefaultAsync(x => x.Id == campaign.Id); if (targetCampaign != null) { targetCampaign.Step = campaign.Step; + targetCampaign.Progress = campaign.Progress; await context.SaveChangesAsync(); }