feat(api,dal): в настройки добавлено поле ScheduleExcludeCalendar. Обновлен response для robot task

This commit is contained in:
Mikhail Trubnikov
2025-12-04 12:10:10 +10:00
parent 78f2ad37be
commit 0de2c4762e
12 changed files with 4147 additions and 9 deletions

View File

@@ -23,6 +23,9 @@
public required string Exclude { get; set; }
// сделал возможный null, так как может в будущем это поле может не заполняться
public string? ExcludeCalendar { get; set; }
public required string Timezone { get; set; }
public required string RepeatRange { get; set; }

View File

@@ -224,6 +224,7 @@ namespace PARR.API.MappingProfiles
.ForMember(d => d.TemplateId, o => o.MapFrom(s => s.Template!.Id))
.ForMember(d => d.WorkGroup, o => o.MapFrom(s => s.Template!.Job!.WorkGroupMask))
.ForMember(d => d.Exclude, o => o.MapFrom<RobotTaskScheduleExcludeResolver>())
.ForMember(d => d.ExcludeCalendar, o => o.MapFrom<RobotTaskScheduleExcludeCalendarResolver>())
.ForMember(d => d.Timezone, o => o.MapFrom<RobotTaskScheduleTimezoneResolver>())
.ForMember(d => d.RepeatRange, o => o.MapFrom<RobotTaskScheduleRepeatRangeResolver>())
//todo: GenerationTime

View File

@@ -0,0 +1,22 @@
using AutoMapper;
using PARR.API.Contracts.V1.Responses;
using PARR.DAL.Contracts;
using PARR.DAL.Models;
namespace PARR.API.MappingProfiles.Resolvers
{
public class RobotTaskScheduleExcludeCalendarResolver : IValueResolver<RobotConfiguration, RobotTaskScheduleResponse, string?>
{
private readonly SettingsFromDb settingsFromDb;
public RobotTaskScheduleExcludeCalendarResolver(SettingsFromDb settingsFromDb)
{
this.settingsFromDb = settingsFromDb;
}
public string? Resolve(RobotConfiguration source, RobotTaskScheduleResponse destination, string? destMember, ResolutionContext context)
{
return settingsFromDb.ScheduleExcludeCalendar;
}
}
}

View File

@@ -16,7 +16,7 @@ namespace PARR.API.MappingProfiles.Resolvers
public string Resolve(RobotConfiguration source, RobotTaskScheduleResponse destination, string destMember, ResolutionContext context)
{
return settingsFromDb.ScheduleExclude;
return settingsFromDb.ScheduleExcludeType;
}
}
}

View File

@@ -172,14 +172,15 @@ namespace PARR.DAL.Context
{
// При добавлении записей, добавлять тоже в PARR.DAL.Contracts.SettingsFromDb
f.HasData(
new { Name = nameof(SettingsFromDb.Initiator), Description = "Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.", Value = "СТАРОСТИНА СВЕТЛАНА БОРИСОВНА (STAROSTINASB@GVC.OAO.RZD)" },
new { Name = nameof(SettingsFromDb.Initiator), Description = "Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.", Value = "АКСЕНОВ АЛЕКСАНДР ЕВГЕНЬЕВИЧ (AKSENOVAE@GVC.OAO.RZD)" },
new { Name = nameof(SettingsFromDb.ClosingCode), Description = "Код закрытия регламентной работы, указывается при создании шаблона в ЕСПП.", Value = "выполнен" },
new { Name = nameof(SettingsFromDb.Category), Description = "Категория создаваемого объекта в ЕСПП", Value = "регламентная работа" },
new { Name = nameof(SettingsFromDb.TemplatePrefixName), Description = "Префикс имени шаблона в ЕСПП", Value = "%PREFIX%-ЭИТИ-ПТК-ПАРР" },
new { Name = nameof(SettingsFromDb.RobotAttemptsNumber), Description = "Количество попыток выполнения задания роботом", Value = "3" },
new { Name = nameof(SettingsFromDb.RobotWaitTime), Description = "Время ожидания выполнения роботом задания", Value = "00:15:00" },
new { Name = nameof(SettingsFromDb.ScheduleTimezone), Description = "Расписание регламентной работы - В каком часовом поясе", Value = "MSK" },
new { Name = nameof(SettingsFromDb.ScheduleExclude), Description = "Расписание регламентной работы - Тип исключения", Value = "Нет исключений" },
new { Name = nameof(SettingsFromDb.ScheduleExcludeType), Description = "Расписание регламентной работы - Тип исключения", Value = "Выполнить ТОЛЬКО В указанном календаре" },
new { Name = nameof(SettingsFromDb.ScheduleExcludeCalendar), Description = "Расписание регламентной работы - Календарь", Value = "8x5 (8.00-17.00)" },
new { Name = nameof(SettingsFromDb.ScheduleRepeatRange), Description = "Расписание регламентной работы - Диапазн повторов", Value = "Отсутствует дата завершения" },
new { Name = nameof(SettingsFromDb.OrderSearchDeltaDate), Description = "Промежуток времени для поиска нарядов в ЕСПП", Value = new TimeSpan(1, 30, 0).ToString() },
new { Name = nameof(SettingsFromDb.EsppRobotAccountTimeZoneHour), Description = "Таймзона УЗ роботов в ЕСПП, в часах (может быть положительная и отрицательная)", Value = "3" },

View File

@@ -85,7 +85,12 @@ namespace PARR.DAL.Contracts
/// <summary>
/// Расписание регламентной работы - Тип исключения
/// </summary>
public string ScheduleExclude { get; set; } = string.Empty;
public string ScheduleExcludeType { get; set; } = string.Empty;
/// <summary>
/// Расписание регламентной работы - Календарь
/// </summary>
public string ScheduleExcludeCalendar { get; set; } = string.Empty;
/// <summary>
/// Расписание регламентной работы - Диапазн повторов

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,63 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
namespace PARR.DAL.Migrations
{
/// <inheritdoc />
public partial class updateSettings : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DeleteData(
table: "Settings",
keyColumn: "Name",
keyValue: "ScheduleExclude");
migrationBuilder.UpdateData(
table: "Settings",
keyColumn: "Name",
keyValue: "Initiator",
column: "Value",
value: "АКСЕНОВ АЛЕКСАНДР ЕВГЕНЬЕВИЧ (AKSENOVAE@GVC.OAO.RZD)");
migrationBuilder.InsertData(
table: "Settings",
columns: new[] { "Name", "Description", "Value" },
values: new object[,]
{
{ "ScheduleExcludeCalendar", "Расписание регламентной работы - Календарь", "8x5 (8.00-17.00)" },
{ "ScheduleExcludeType", "Расписание регламентной работы - Тип исключения", "Выполнить ТОЛЬКО В указанном календаре" }
});
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DeleteData(
table: "Settings",
keyColumn: "Name",
keyValue: "ScheduleExcludeCalendar");
migrationBuilder.DeleteData(
table: "Settings",
keyColumn: "Name",
keyValue: "ScheduleExcludeType");
migrationBuilder.UpdateData(
table: "Settings",
keyColumn: "Name",
keyValue: "Initiator",
column: "Value",
value: "СТАРОСТИНА СВЕТЛАНА БОРИСОВНА (STAROSTINASB@GVC.OAO.RZD)");
migrationBuilder.InsertData(
table: "Settings",
columns: new[] { "Name", "Description", "Value" },
values: new object[] { "ScheduleExclude", "Расписание регламентной работы - Тип исключения", "Нет исключений" });
}
}
}

View File

@@ -2514,7 +2514,7 @@ namespace PARR.DAL.Migrations
{
Name = "Initiator",
Description = "Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.",
Value = "СТАРОСТИНА СВЕТЛАНА БОРИСОВНА (STAROSTINASB@GVC.OAO.RZD)"
Value = "АКСЕНОВ АЛЕКСАНДР ЕВГЕНЬЕВИЧ (AKSENOVAE@GVC.OAO.RZD)"
},
new
{
@@ -2554,9 +2554,15 @@ namespace PARR.DAL.Migrations
},
new
{
Name = "ScheduleExclude",
Name = "ScheduleExcludeType",
Description = "Расписание регламентной работы - Тип исключения",
Value = "Нет исключений"
Value = "Выполнить ТОЛЬКО В указанном календаре"
},
new
{
Name = "ScheduleExcludeCalendar",
Description = "Расписание регламентной работы - Календарь",
Value = "8x5 (8.00-17.00)"
},
new
{

View File

@@ -103,7 +103,7 @@ namespace PARR.EsppScheduleSync
//WorkGroup = template.Host!.WorkGroup!,
//WorkGroup = template.Host!.WorkGroup!.Name,//TODO Migration to job
//Мы решили, что для всех расписаний "Нет исключений", если что-то поменяется, тут нужно переделать
TypeV60calendar = settingsFromDb.ScheduleExclude == "Нет исключений" ? "NONE" : "",
TypeV60calendar = settingsFromDb.ScheduleExcludeType == "Нет исключений" ? "NONE" : "",
//Scheduled = EsppScheduleHelpers.GetNextRun(template.NextRun),
//Scheduled = EsppScheduleHelpers.GetNextRun(nextRunModifierService.GetNextRunByAccountRobotTimeZone(template.NextRun)),
//BasisTime = EsppScheduleHelpers.GetGenerationTime(nextRunModifierService.GetNextRunByAccountRobotTimeZone(template.NextRun)),
@@ -147,6 +147,8 @@ namespace PARR.EsppScheduleSync
//тип повторения
esppObject.TypeSchedule = typeSchedule.Value;
//TODO: !!!!!!! Добавить поле "Расписание регламентной работы - Календарь" ScheduleExcludeCalendar !!!!!!!
//в зависимости от типа, присваиваем значения
switch (esppObject.TypeSchedule)
{
@@ -242,6 +244,8 @@ namespace PARR.EsppScheduleSync
CompleteAfter = splittedContent[20],
V60calendar = splittedContent[22],
BasisTime = splittedContent[23]
//TODO: !!!!!!! Добавить поле "Расписание регламентной работы - Календарь" ScheduleExcludeCalendar !!!!!!!
};
return ClearOptionalFields(esppObject);

View File

@@ -206,7 +206,7 @@ namespace PARR.EsppSync
if (dbValueStr != esppValueStr)
{
logger.LogInformation($"Не совпадают поля({prop.Name}). dbValueStr: {dbValueStr}, esppValueStr: {esppValueStr}. Имя шаблона: {templateName}");
logger.LogInformation($"Не совпадают поля ({prop.Name}). dbValueStr: {dbValueStr}, esppValueStr: {esppValueStr}. Имя шаблона: {templateName}");
return true;
}

View File

@@ -25,6 +25,7 @@
<None Include="docker-compose.next-run.yml" />
<None Include="docker-compose.template-activator.yml" />
<None Include="docker-compose.template-distributor.yml" />
<None Include="docker-compose.template-updater.yml" />
<None Include="docker-compose.yml" />
<None Include=".dockerignore" />
<None Include="stack.yml" />