diff --git a/PARR.API/Controllers/V1/AgentTaskController.cs b/PARR.API/Controllers/V1/AgentTaskController.cs index 361fe992..6d08caef 100644 --- a/PARR.API/Controllers/V1/AgentTaskController.cs +++ b/PARR.API/Controllers/V1/AgentTaskController.cs @@ -71,7 +71,8 @@ namespace PARR.API.Controllers.V1 && t.ApplicationsInWork!.IsAgent == true && t.IsActiveTemplate == true && t.IsActiveSchedule == true - && t.ApplicationsInWork!.NextRun.DateTime.Date == date.Date.Date + //&& t.ApplicationsInWork!.NextRun.DateTime.Date == date.Date.Date + && t.NextRun.DateTime.Date == date.Date.Date && t.RobotConfigurations.All(c => c.TaskStatusCode == (int)TaskStatusEnum.Ok) && t.ApplicationsInWork.EsppSchValues.Any() ).ToListAsync(); @@ -87,12 +88,12 @@ namespace PARR.API.Controllers.V1 foreach (var template in templates) { //var templateSchedule = await esppScheduleTransformService.GetNextScheduleAsync(template.ApplicationInWorkId, template.ApplicationsInWork!.LastRun ?? template.ApplicationsInWork!.NextRun); - var templateSchedule = await esppScheduleTransformService.GetNextScheduleAsync(template.ApplicationInWorkId, template.ApplicationsInWork!.NextRun); + var templateSchedule = await esppScheduleTransformService.GetNextScheduleAsync(template.ApplicationInWorkId, template.NextRun); if (!templateSchedule.Any()) { logger.LogWarning($"Запросили раписание для агента по NextRun и вернулся пустой список! Такого не должно быть! " + - $"ApplicationInWorkId: {template.ApplicationInWorkId}, latRun: {template.ApplicationsInWork!.LastRun}, NextRun: {template.ApplicationsInWork!.NextRun}, ip: {ip}, date: {date}"); + $"ApplicationInWorkId: {template.ApplicationInWorkId}, latRun: {template.LastRun}, NextRun: {template.NextRun}, ip: {ip}, date: {date}"); continue; } diff --git a/PARR.API/Controllers/V1/ApplicationInWorkController.cs b/PARR.API/Controllers/V1/ApplicationInWorkController.cs index 96d19cac..e1d5d4be 100644 --- a/PARR.API/Controllers/V1/ApplicationInWorkController.cs +++ b/PARR.API/Controllers/V1/ApplicationInWorkController.cs @@ -190,7 +190,7 @@ namespace PARR.API.Controllers.V1 if (!await applicationsInWorkService.CreateAsync(applicationInWork) || !await applicationsInWorkService.CommitAsync()) return BadRequest(new Response(false, new List { new ErrorModel { Message = "Ошибка при созании задания на выполнение работ" } })); - logger.LogInformation($"Пользователь {User.Identity?.Name} добавил задание на выполнение работ: {applicationInWork.Id}, {applicationInWork.ShortDescription}, {applicationInWork.Solution}, {applicationInWork.NextRun}"); + logger.LogInformation($"Пользователь {User.Identity?.Name} добавил задание на выполнение работ: {applicationInWork.Id}, {applicationInWork.ShortDescription}, {applicationInWork.Solution}"); var createdApplicationInWork = await applicationsInWorkService.Get() @@ -284,7 +284,7 @@ namespace PARR.API.Controllers.V1 logger.LogInformation($"Пользователь {User.Identity?.Name} обновил задание на выполнение работ: {orig.Id}," + $" {orig.WorkId}, {orig.ApplicationId}, {orig.TemplateDuration}, {orig.ShortDescription}," + - $" {orig.FullDescription}, {orig.Solution}, {orig.NextRun}, {orig.IsAgent}, {orig.AgentName}, {orig.AgentTimeOutSec}, {orig.AgentScript}"); + $" {orig.FullDescription}, {orig.Solution}, {nameof(orig.IsAutoDistributionEnabled)}: {orig.IsAutoDistributionEnabled}, {orig.IsAgent}, {orig.AgentName}, {orig.AgentTimeOutSec}, {orig.AgentScript}"); if (isScheduleChanged) @@ -354,7 +354,7 @@ namespace PARR.API.Controllers.V1 logger.LogInformation($"Пользователь {User.Identity?.Name} удалил задание на выполнение работ: {applicationsInWork.Id},{applicationsInWork.WorkId}," + $" {applicationsInWork.ApplicationId}, {applicationsInWork.TemplateDuration}, {applicationsInWork.ShortDescription}," + - $" {applicationsInWork.FullDescription}, {applicationsInWork.Solution}, {applicationsInWork.NextRun}, {applicationsInWork.IsAgent}," + + $" {applicationsInWork.FullDescription}, {applicationsInWork.Solution}, {nameof(applicationsInWork.IsAutoDistributionEnabled)}: {applicationsInWork.IsAutoDistributionEnabled}, {applicationsInWork.IsAgent}," + $" {applicationsInWork.AgentName}, {applicationsInWork.AgentTimeOutSec}, {applicationsInWork.AgentScript}"); return NoContent(); diff --git a/PARR.API/Controllers/V1/RobotTaskController.cs b/PARR.API/Controllers/V1/RobotTaskController.cs index 2f1b9b36..147acdf9 100644 --- a/PARR.API/Controllers/V1/RobotTaskController.cs +++ b/PARR.API/Controllers/V1/RobotTaskController.cs @@ -143,35 +143,52 @@ namespace PARR.API.Controllers.V1 private async Task UpdateLastNextRunDate(RobotConfiguration task) { - var appInWorks = task.Template!.ApplicationsInWork!; + var template = task.Template!; // передаем LastRun, если его нет, то NextRun //var nextRun = await esppScheduleTransformService.GetNextDateAsync(task.Template!.ApplicationInWorkId, task.Template.ApplicationsInWork!.LastRun ?? task.Template.ApplicationsInWork.NextRun); // всегда считаем по nextRun - var nextRun = await esppScheduleTransformService.GetNextDateAsync(task.Template!.ApplicationInWorkId, task.Template.ApplicationsInWork!.NextRun); + var nextRun = await esppScheduleTransformService.GetNextDateAsync(template.ApplicationInWorkId, template.NextRun); - if (nextRun != appInWorks.NextRun) + if (nextRun != template.NextRun) { - logger.LogDebug($"Для appilcationInWork id {task.Template.ApplicationInWorkId}, шаблона id {task.TemplateId} обновляю nextRun, новое значение {nextRun}, старое значение {appInWorks.NextRun}"); + logger.LogDebug($"Для шаблона id {template.Id} обновляю nextRun, новое значение {nextRun}, старое значение {template.NextRun}"); - if (appInWorks.NextRun < DateTimeOffset.UtcNow) + if (template.NextRun < DateTimeOffset.UtcNow) { - logger.LogDebug($"Для appilcationInWork id {task.Template.ApplicationInWorkId}, шаблона id {task.TemplateId} обновляю lastRun, новое значение {appInWorks.NextRun}, старое значение {appInWorks.LastRun}"); - appInWorks.LastRun = appInWorks.NextRun; + logger.LogDebug($"Для шаблона id {template.Id} обновляю lastRun, новое значение {template.NextRun}, старое значение {template.LastRun}"); + template.LastRun = template.NextRun; } - appInWorks.NextRun = nextRun; + template.NextRun = nextRun; await robotConfigurationService.CommitAsync(); } - //if (appInWorks.LastRun != null) // if - ерунда какая-то. ошибка видимо. - //if (nextRun > DateTimeOffset.UtcNow) - // appInWorks.LastRun = appInWorks.NextRun; + #region Old, до выноса lastRun, nextRun в templates + //var appInWorks = task.Template!.ApplicationsInWork!; - //appInWorks.NextRun = nextRun; + //// передаем LastRun, если его нет, то NextRun + ////var nextRun = await esppScheduleTransformService.GetNextDateAsync(task.Template!.ApplicationInWorkId, task.Template.ApplicationsInWork!.LastRun ?? task.Template.ApplicationsInWork.NextRun); + //// всегда считаем по nextRun + //var nextRun = await esppScheduleTransformService.GetNextDateAsync(task.Template!.ApplicationInWorkId, task.Template.ApplicationsInWork!.NextRun); + + //if (nextRun != appInWorks.NextRun) + //{ + // logger.LogDebug($"Для appilcationInWork id {task.Template.ApplicationInWorkId}, шаблона id {task.TemplateId} обновляю nextRun, новое значение {nextRun}, старое значение {appInWorks.NextRun}"); + + // if (appInWorks.NextRun < DateTimeOffset.UtcNow) + // { + // logger.LogDebug($"Для appilcationInWork id {task.Template.ApplicationInWorkId}, шаблона id {task.TemplateId} обновляю lastRun, новое значение {appInWorks.NextRun}, старое значение {appInWorks.LastRun}"); + // appInWorks.LastRun = appInWorks.NextRun; + // } + + // appInWorks.NextRun = nextRun; + + // await robotConfigurationService.CommitAsync(); + //} + #endregion - //await robotConfigurationService.CommitAsync(); } } } diff --git a/PARR.API/MappingProfiles/DomainToResponseProfile.cs b/PARR.API/MappingProfiles/DomainToResponseProfile.cs index 29c5d108..937a912c 100644 --- a/PARR.API/MappingProfiles/DomainToResponseProfile.cs +++ b/PARR.API/MappingProfiles/DomainToResponseProfile.cs @@ -33,8 +33,10 @@ namespace PARR.API.MappingProfiles .ForMember(d => d.SyncStatus, o => o.MapFrom(s => s.RobotConfigurations.OrderBy(t => t.RobotCode))) .ForMember(d => d.Schedule, o => o.MapFrom()) .ForMember(d => d.Agent, o => o.MapFrom(s => s.ApplicationsInWork)) - .ForMember(d => d.NextRun, o => o.MapFrom(s => s.ApplicationsInWork!.NextRun)) - .ForMember(d => d.LastRun, o => o.MapFrom(s => s.ApplicationsInWork!.LastRun)) + //.ForMember(d => d.NextRun, o => o.MapFrom(s => s.ApplicationsInWork!.NextRun)) + //.ForMember(d => d.LastRun, o => o.MapFrom(s => s.ApplicationsInWork!.LastRun)) + .ForMember(d => d.NextRun, o => o.MapFrom(s => s.NextRun)) + .ForMember(d => d.LastRun, o => o.MapFrom(s => s.LastRun)) .ForMember(d => d.OrderCount, o => o.MapFrom(s => s.Orders.Count())); // === Template === @@ -166,8 +168,12 @@ namespace PARR.API.MappingProfiles .ForMember(d => d.Timezone, o => o.MapFrom()) .ForMember(d => d.RepeatRange, o => o.MapFrom()) //.ForMember(d => d.GenerationTime, o => o.MapFrom(s => s.Template!.ApplicationsInWork!.ScheduleGenerationTime)) - .ForMember(d => d.GenerationTime, o => o.MapFrom(s => EsppScheduleHelpers.GetGenerationTime(s.Template!.ApplicationsInWork!.NextRun))) - .ForMember(d => d.NextStart, o => o.MapFrom(s => EsppScheduleHelpers.GetNextRun(s.Template!.ApplicationsInWork!.NextRun))) + //~~~~~~~~~ + //.ForMember(d => d.GenerationTime, o => o.MapFrom(s => EsppScheduleHelpers.GetGenerationTime(s.Template!.ApplicationsInWork!.NextRun))) + //.ForMember(d => d.NextStart, o => o.MapFrom(s => EsppScheduleHelpers.GetNextRun(s.Template!.ApplicationsInWork!.NextRun))) + //~~~~~~~~~ + .ForMember(d => d.GenerationTime, o => o.MapFrom(s => EsppScheduleHelpers.GetGenerationTime(s.Template!.NextRun))) + .ForMember(d => d.NextStart, o => o.MapFrom(s => EsppScheduleHelpers.GetNextRun(s.Template!.NextRun))) //.ForMember(d => d.NextStart, o => o.MapFrom(s => EsppScheduleHelpers.GetFirstStart(s.Template!.ApplicationsInWork!.ScheduleStartDate, s.Template!.ApplicationsInWork!.ScheduleGenerationTime))) //.ForMember(d => d.NextStart, o => o.MapFrom(s => EsppScheduleHelpers.GetNextScheduleStart(s.Template!.NextScheduleStart))) .ForMember(d => d.ScheduleType, o => o.MapFrom(s => diff --git a/PARR.API/MappingProfiles/Resolvers/TemplateScheduleResolver.cs b/PARR.API/MappingProfiles/Resolvers/TemplateScheduleResolver.cs index 9b4f1458..4480014e 100644 --- a/PARR.API/MappingProfiles/Resolvers/TemplateScheduleResolver.cs +++ b/PARR.API/MappingProfiles/Resolvers/TemplateScheduleResolver.cs @@ -38,8 +38,10 @@ namespace PARR.API.MappingProfiles.Resolvers var response = new EsppScheduleResponse { - NextRun = source.ApplicationsInWork!.NextRun, - LastRun = source.ApplicationsInWork.LastRun, + //NextRun = source.ApplicationsInWork!.NextRun, + //LastRun = source.ApplicationsInWork.LastRun, + NextRun = source.NextRun, + LastRun = source.LastRun, Timezone = settingsFromDb.ScheduleTimezone, TypeSchedule = mapper.Map(schedule.TypeSchedule), Values = mapper.Map>(schedule.Values).OrderBy(t => t.Order).ToList() diff --git a/PARR.DAL/Models/ApplicationsInWork.cs b/PARR.DAL/Models/ApplicationsInWork.cs index 3e76cdeb..9de4cd00 100644 --- a/PARR.DAL/Models/ApplicationsInWork.cs +++ b/PARR.DAL/Models/ApplicationsInWork.cs @@ -69,15 +69,15 @@ namespace PARR.DAL.Models public required string Solution { get; set; } - /// - /// Время последнего запуска скрипта/генерации наряда - /// - public DateTimeOffset? LastRun { get; set; } + ///// + ///// Время последнего запуска скрипта/генерации наряда + ///// + //public DateTimeOffset? LastRun { get; set; } - /// - /// Время следующего запуска скрипта/генерации наряда - /// - public DateTimeOffset NextRun { get; set; } + ///// + ///// Время следующего запуска скрипта/генерации наряда + ///// + //public DateTimeOffset NextRun { get; set; } /// /// Включить автораспределение diff --git a/PARR.EsppOrderLoader/Services/OrderItemService.cs b/PARR.EsppOrderLoader/Services/OrderItemService.cs index 1559081a..f31a9429 100644 --- a/PARR.EsppOrderLoader/Services/OrderItemService.cs +++ b/PARR.EsppOrderLoader/Services/OrderItemService.cs @@ -53,7 +53,8 @@ namespace PARR.EsppOrderLoader.Services StatusCode = (int)orderStatusService.GetOrderStatusByName(esppOrder.Status), GenerateDate = template == null ? null - : CalcGenerationDate(template.ApplicationsInWork!.NextRun, template.ApplicationsInWork!.LastRun), + //: CalcGenerationDate(template.ApplicationsInWork!.NextRun, template.ApplicationsInWork!.LastRun), + : CalcGenerationDate(template.NextRun, template.LastRun), //CalcGenerationDate(esppOrder.ExpirationDateUTC, template.ApplicationsInWork!.TemplateDurationTimeSpan), ExpirationDate = esppOrder.ExpirationDateUTC }; diff --git a/PARR.EsppScheduleSync/ScheduleSyncher.cs b/PARR.EsppScheduleSync/ScheduleSyncher.cs index 9c7390a1..9c3513c0 100644 --- a/PARR.EsppScheduleSync/ScheduleSyncher.cs +++ b/PARR.EsppScheduleSync/ScheduleSyncher.cs @@ -88,7 +88,8 @@ namespace PARR.EsppScheduleSync WorkGroup = template.Host!.WorkGroup!.Name, //Мы решили, что для всех расписаний "Нет исключений", если что-то поменяется, тут нужно переделать TypeV60calendar = settingsFromDb.ScheduleExclude == "Нет исключений" ? "NONE" : "", - Scheduled = EsppScheduleHelpers.GetNextRun(template.ApplicationsInWork!.NextRun), + //Scheduled = EsppScheduleHelpers.GetNextRun(template.ApplicationsInWork!.NextRun), + Scheduled = EsppScheduleHelpers.GetNextRun(template.NextRun), Timezone = settingsFromDb.ScheduleTimezone, //Мы решили, что для всех расписаний "Отсутствует дата завершения", если что-то поменяется, тут нужно переделать TerminationType = settingsFromDb.ScheduleRepeatRange == "Отсутствует дата завершения" ? "forever" : "", diff --git a/PARR.GeneratorTemplates/PARR.GeneratorTemplates.csproj b/PARR.GeneratorTemplates/PARR.GeneratorTemplates.csproj index 21190861..766e58d3 100644 --- a/PARR.GeneratorTemplates/PARR.GeneratorTemplates.csproj +++ b/PARR.GeneratorTemplates/PARR.GeneratorTemplates.csproj @@ -9,6 +9,7 @@ + diff --git a/PARR.NextRun/NextRunManager.cs b/PARR.NextRun/NextRunManager.cs index 97df9fec..6c7193c7 100644 --- a/PARR.NextRun/NextRunManager.cs +++ b/PARR.NextRun/NextRunManager.cs @@ -36,13 +36,14 @@ namespace PARR.NextRun { using (var scope = serviceProvider.CreateScope()) { - var appInWorkService = scope.ServiceProvider.GetService(); + //var appInWorkService = scope.ServiceProvider.GetService(); var esppSchService = scope.ServiceProvider.GetService(); + var templateService = scope.ServiceProvider.GetService(); - if (appInWorkService == null || esppSchService == null) - throw new Exception("Не смог получить серивс IApplicationsInWorkService или IEsppScheduleTransformService"); + if (templateService == null || esppSchService == null) + throw new Exception("Не смог получить серивс ITemplateService или IEsppScheduleTransformService"); - await HandlerAsync(appInWorkService, esppSchService); + await HandlerAsync(templateService, esppSchService); } }, workerSettings.RepeatEvery); } @@ -52,30 +53,30 @@ namespace PARR.NextRun /// Рассчет следующей даты срабатываения /// /// - private async Task HandlerAsync(IApplicationsInWorkService applicationsInWorkService, IEsppScheduleTransformService esppScheduleTransformService) + private async Task HandlerAsync(ITemplateService templateService, IEsppScheduleTransformService esppScheduleTransformService) { - var objs = await applicationsInWorkService.Get().Where(t => t.NextRun < DateTimeOffset.UtcNow).ToListAsync(); + var templates = await templateService.Get().Where(t => t.NextRun < DateTimeOffset.UtcNow).ToListAsync(); - logger.LogDebug($"Объектов для обновления: {objs.Count()} шт."); + logger.LogDebug($"Шаблонов для обновления: {templates.Count()} шт."); int errorsCount = 0; - foreach (var obj in objs) + foreach (var template in templates) { - var nextRun = await esppScheduleTransformService.GetNextDateAsync(obj.Id, obj.NextRun); - obj.LastRun = obj.NextRun; - obj.NextRun = nextRun; + var nextRun = await esppScheduleTransformService.GetNextDateAsync(template.ApplicationInWorkId, template.NextRun); + template.LastRun = template.NextRun; + template.NextRun = nextRun; - if (await applicationsInWorkService.CommitAsync()) - logger.LogDebug($"Обновлено значение полей NextRun: {obj.NextRun}, LastRun: {obj.LastRun} для строки {obj.Id}"); + if (await templateService.CommitAsync()) + logger.LogDebug($"Обновлены значения полей NextRun: {template.NextRun}, LastRun: {template.LastRun} для шаблона {template.Name}, {template.Id}"); else { - logger.LogError($"Ошибка при обновлении значения полей NextRun {obj.NextRun}, LastRun: {obj.LastRun} для строки {obj.Id}"); + logger.LogError($"Ошибка при обновлении значений полей NextRun: {template.NextRun}, LastRun: {template.LastRun} для шаблона {template.Name}, {template.Id}"); errorsCount++; } } - logger.LogInformation($"Завершено обновление полей NextRun. Полей в задании: {objs.Count()}, обновлено: {objs.Count() - errorsCount}, ошибок: {errorsCount}"); + logger.LogInformation($"Завершено обновление полей NextRun. Полей в задании: {templates.Count()}, обновлено: {templates.Count() - errorsCount}, ошибок: {errorsCount}"); } } }