feat(api, dal, esppOrderLoader, esppScheduleSync, generatorTemplates, nextRun):
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -190,7 +190,7 @@ namespace PARR.API.Controllers.V1
|
||||
if (!await applicationsInWorkService.CreateAsync(applicationInWork) || !await applicationsInWorkService.CommitAsync())
|
||||
return BadRequest(new Response(false, new List<ErrorModel> { 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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TemplateScheduleResolver>())
|
||||
.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<RobotTaskScheduleTimezoneResolver>())
|
||||
.ForMember(d => d.RepeatRange, o => o.MapFrom<RobotTaskScheduleRepeatRangeResolver>())
|
||||
//.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 =>
|
||||
|
||||
@@ -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<EsppScheduleTypeScheduleResponse>(schedule.TypeSchedule),
|
||||
Values = mapper.Map<List<EsppScheduleValResponse>>(schedule.Values).OrderBy(t => t.Order).ToList()
|
||||
|
||||
@@ -69,15 +69,15 @@ namespace PARR.DAL.Models
|
||||
|
||||
public required string Solution { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Время последнего запуска скрипта/генерации наряда
|
||||
/// </summary>
|
||||
public DateTimeOffset? LastRun { get; set; }
|
||||
///// <summary>
|
||||
///// Время последнего запуска скрипта/генерации наряда
|
||||
///// </summary>
|
||||
//public DateTimeOffset? LastRun { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Время следующего запуска скрипта/генерации наряда
|
||||
/// </summary>
|
||||
public DateTimeOffset NextRun { get; set; }
|
||||
///// <summary>
|
||||
///// Время следующего запуска скрипта/генерации наряда
|
||||
///// </summary>
|
||||
//public DateTimeOffset NextRun { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Включить автораспределение
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -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" : "",
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\PARR.BLL\PARR.BLL.csproj" />
|
||||
<ProjectReference Include="..\PARR.DAL\PARR.DAL.csproj" />
|
||||
<ProjectReference Include="..\PARR.TemplateDistributor\PARR.TemplateDistributor.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -36,13 +36,14 @@ namespace PARR.NextRun
|
||||
{
|
||||
using (var scope = serviceProvider.CreateScope())
|
||||
{
|
||||
var appInWorkService = scope.ServiceProvider.GetService<IApplicationsInWorkService>();
|
||||
//var appInWorkService = scope.ServiceProvider.GetService<IApplicationsInWorkService>();
|
||||
var esppSchService = scope.ServiceProvider.GetService<IEsppScheduleTransformService>();
|
||||
var templateService = scope.ServiceProvider.GetService<ITemplateService>();
|
||||
|
||||
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
|
||||
/// Рассчет следующей даты срабатываения
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user