feat(esppOrderLoader): изменено журналирвоание
This commit is contained in:
@@ -26,74 +26,92 @@ namespace PARR.EsppOrderLoader.Services
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
|
||||
public async Task WriteOrderAsync(EsppOrder esppOrder)
|
||||
{
|
||||
var existOrder = await orderService.Get().FirstOrDefaultAsync(t => t.Number.ToLower() == esppOrder.Number.ToLower());
|
||||
if (existOrder != null)
|
||||
try
|
||||
{
|
||||
logger.LogInformation($"Наряд {esppOrder.Number} уже есть в БД. Пропускаю.");
|
||||
return;
|
||||
logger.LogDebug("Начинаю обработку наряда {EsppOrderNumber}", esppOrder.Number);
|
||||
|
||||
var existOrder = await orderService.Get()
|
||||
.FirstOrDefaultAsync(t => t.Number.ToLower() == esppOrder.Number.ToLower());
|
||||
|
||||
if (existOrder != null)
|
||||
{
|
||||
logger.LogInformation("Наряд {EsppOrderNumber} уже существует в БД. Пропускаю.", esppOrder.Number);
|
||||
return;
|
||||
}
|
||||
|
||||
logger.LogDebug("Поиск шаблона для наряда {EsppOrderNumber}", esppOrder.Number);
|
||||
|
||||
var template = await templateService.Get()
|
||||
.Include(t => t.Job)
|
||||
.FirstOrDefaultAsync(t => t.Name.ToLower() == esppOrder.TemplateName.ToLower());
|
||||
|
||||
if (template == null)
|
||||
{
|
||||
logger.LogWarning(
|
||||
"Не найден шаблон для наряда {EsppOrderNumber} с именем шаблона {TemplateName}. " +
|
||||
"Краткое описание: {ShortName}, рабочая группа: {WorkGroup}",
|
||||
esppOrder.Number,
|
||||
esppOrder.TemplateName,
|
||||
esppOrder.ShortName,
|
||||
esppOrder.WorkGroup);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogDebug(
|
||||
"Найден шаблон {TemplateId} для наряда {EsppOrderNumber}",
|
||||
template.Id,
|
||||
esppOrder.Number);
|
||||
}
|
||||
|
||||
var statusCode = (int)orderStatusService.GetOrderStatusByName(esppOrder.Status);
|
||||
|
||||
var newOrder = new Order
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
Number = esppOrder.Number,
|
||||
WorkGroup = esppOrder.WorkGroup,
|
||||
ShortName = esppOrder.ShortName,
|
||||
TemplateId = template?.Id,
|
||||
StatusCode = statusCode,
|
||||
GenerateDate = template == null
|
||||
? null
|
||||
: CalcGenerationDate(template.NextRun, template.LastRun),
|
||||
ExpirationDate = esppOrder.ExpirationDateUTC,
|
||||
DateCreated = DateTimeOffset.UtcNow
|
||||
};
|
||||
|
||||
logger.LogDebug("Создание нового наряда {OrderNumber} в БД", esppOrder.Number);
|
||||
|
||||
var createResult = await orderService.CreateAsync(newOrder);
|
||||
var commitResult = await orderService.CommitAsync();
|
||||
|
||||
if (!createResult || !commitResult)
|
||||
{
|
||||
logger.LogError(
|
||||
"Ошибка при добавлении нового наряда в БД. " +
|
||||
"Номер наряда: {EsppOrderNumber}, рабочая группа: {WorkGroup}, " +
|
||||
"краткое описание: {ShortName}",
|
||||
esppOrder.Number,
|
||||
esppOrder.WorkGroup,
|
||||
esppOrder.ShortName);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogInformation(
|
||||
"Успешно добавлен наряд в БД: {EsppOrderNumber}, краткое описание: {ShortName}",
|
||||
esppOrder.Number,
|
||||
esppOrder.ShortName);
|
||||
}
|
||||
}
|
||||
|
||||
var template = await templateService.Get()
|
||||
.Include(t => t.Job)
|
||||
.FirstOrDefaultAsync(t => t.Name.ToLower() == esppOrder.TemplateName.ToLower());
|
||||
|
||||
if (template == null)
|
||||
logger.LogWarning($"Не найден шаблон для наряда {esppOrder.Number}, краткое описание наряда: {esppOrder.ShortName}. {esppOrder.WorkGroup}");
|
||||
|
||||
var newOrder = new Order
|
||||
catch (Exception ex)
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
Number = esppOrder.Number,
|
||||
WorkGroup = esppOrder.WorkGroup,
|
||||
ShortName = esppOrder.ShortName,
|
||||
TemplateId = template?.Id,
|
||||
StatusCode = (int)orderStatusService.GetOrderStatusByName(esppOrder.Status),
|
||||
GenerateDate = template == null ?
|
||||
null
|
||||
//: CalcGenerationDate(template.ApplicationsInWork!.NextRun, template.ApplicationsInWork!.LastRun),
|
||||
: CalcGenerationDate(template.NextRun, template.LastRun),
|
||||
//CalcGenerationDate(esppOrder.ExpirationDateUTC, template.ApplicationsInWork!.TemplateDurationTimeSpan),
|
||||
ExpirationDate = esppOrder.ExpirationDateUTC
|
||||
};
|
||||
|
||||
if (!await orderService.CreateAsync(newOrder) || !await orderService.CommitAsync())
|
||||
logger.LogError($"Ошибка при добавлении новой записи наряда в БД. {esppOrder.Number}, {esppOrder.WorkGroup}, {esppOrder.ShortName}");
|
||||
else
|
||||
logger.LogInformation($"Добавлен наряд в БД: {esppOrder.Number}, {esppOrder.ShortName}");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Рассчет GenerationDate относительно templateDuration
|
||||
/// </summary>
|
||||
/// <param name="expirationDateUTC"></param>
|
||||
/// <param name="templateDuration"></param>
|
||||
/// <returns></returns>
|
||||
private DateTimeOffset? CalcGenerationDate(DateTimeOffset expirationDateUTC, TimeSpan? templateDuration)
|
||||
{
|
||||
//TimeSpan duration;
|
||||
|
||||
//try
|
||||
//{
|
||||
// //ЕСПП кривоногие, они почему-то таймспан пишут так "7 00:00:00", а правильно так: "7:00:00:00"
|
||||
// var durationWithTimeSpanFormat = templateDuration.Replace(" ", ":");
|
||||
// duration = TimeSpan.Parse(durationWithTimeSpanFormat);
|
||||
//}
|
||||
//catch (Exception e)
|
||||
//{
|
||||
// logger.LogError(e, $"Ошибка при конвертации templateDuration в TimeSpan, исходное значение: {templateDuration}");
|
||||
// return null;
|
||||
//}
|
||||
|
||||
if (templateDuration.HasValue)
|
||||
return expirationDateUTC.Add(-templateDuration.Value);
|
||||
else
|
||||
{
|
||||
logger.LogError($"templateDuration = null.");
|
||||
return null;
|
||||
logger.LogError(
|
||||
ex,
|
||||
"Произошла ошибка при обработке наряда {EsppOrderNumber}",
|
||||
esppOrder?.Number ?? "неизвестно");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,17 +119,22 @@ namespace PARR.EsppOrderLoader.Services
|
||||
/// <summary>
|
||||
/// Рассчет GenerationDate относительно текущей даты и nextRun из ApplicationInWorks
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <param name="nextRun">Следующее время запуска</param>
|
||||
/// <param name="lastRun">Последнее время запуска</param>
|
||||
/// <returns>Рассчитанная дата генерации</returns>
|
||||
private DateTimeOffset? CalcGenerationDate(DateTimeOffset nextRun, DateTimeOffset? lastRun)
|
||||
{
|
||||
if (DateTimeOffset.UtcNow > nextRun)
|
||||
{
|
||||
return nextRun;
|
||||
}
|
||||
|
||||
if (lastRun.HasValue)
|
||||
{
|
||||
return lastRun.Value;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user