feat(api, dal): в настройки в БД добавлено поле EsppRobotAccountTimeZoneHour со значением 3, обновлено ScheduleTimezone на MSK. В api в задании роботу по расписаниям, время выдается с учетом таймзоны робота.
This commit is contained in:
@@ -38,7 +38,7 @@ namespace PARR.API.MappingProfiles
|
|||||||
.ForMember(d => d.NextRun, o => o.MapFrom(s => s.NextRun))
|
.ForMember(d => d.NextRun, o => o.MapFrom(s => s.NextRun))
|
||||||
.ForMember(d => d.LastRun, o => o.MapFrom(s => s.LastRun))
|
.ForMember(d => d.LastRun, o => o.MapFrom(s => s.LastRun))
|
||||||
.ForMember(d => d.OrderCount, o => o.MapFrom(s => s.Orders.Count()))
|
.ForMember(d => d.OrderCount, o => o.MapFrom(s => s.Orders.Count()))
|
||||||
.ForMember(d=>d.IsAutoDistributionEnabled, o=>o.MapFrom(s=>s.ApplicationsInWork!.IsAutoDistributionEnabled));
|
.ForMember(d => d.IsAutoDistributionEnabled, o => o.MapFrom(s => s.ApplicationsInWork!.IsAutoDistributionEnabled));
|
||||||
// === Template ===
|
// === Template ===
|
||||||
|
|
||||||
|
|
||||||
@@ -168,15 +168,11 @@ namespace PARR.API.MappingProfiles
|
|||||||
.ForMember(d => d.Exclude, o => o.MapFrom<RobotTaskScheduleExcludeResolver>())
|
.ForMember(d => d.Exclude, o => o.MapFrom<RobotTaskScheduleExcludeResolver>())
|
||||||
.ForMember(d => d.Timezone, o => o.MapFrom<RobotTaskScheduleTimezoneResolver>())
|
.ForMember(d => d.Timezone, o => o.MapFrom<RobotTaskScheduleTimezoneResolver>())
|
||||||
.ForMember(d => d.RepeatRange, o => o.MapFrom<RobotTaskScheduleRepeatRangeResolver>())
|
.ForMember(d => d.RepeatRange, o => o.MapFrom<RobotTaskScheduleRepeatRangeResolver>())
|
||||||
//.ForMember(d => d.GenerationTime, o => o.MapFrom(s => s.Template!.ApplicationsInWork!.ScheduleGenerationTime))
|
//todo: GenerationTime
|
||||||
//~~~~~~~~~
|
//.ForMember(d => d.GenerationTime, o => o.MapFrom(s => EsppScheduleHelpers.GetGenerationTime(s.Template!.NextRun)))
|
||||||
//.ForMember(d => d.GenerationTime, o => o.MapFrom(s => EsppScheduleHelpers.GetGenerationTime(s.Template!.ApplicationsInWork!.NextRun)))
|
.ForMember(d => d.GenerationTime, o => o.MapFrom<RobotTaskScheduleGenerationTimeResolver>())
|
||||||
//.ForMember(d => d.NextStart, o => o.MapFrom(s => EsppScheduleHelpers.GetNextRun(s.Template!.ApplicationsInWork!.NextRun)))
|
//.ForMember(d => d.NextStart, o => o.MapFrom(s => EsppScheduleHelpers.GetNextRun(s.Template!.NextRun)))
|
||||||
//~~~~~~~~~
|
.ForMember(d => d.NextStart, o => o.MapFrom<RobotTaskScheduleNextStartResolver>())
|
||||||
.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 =>
|
.ForMember(d => d.ScheduleType, o => o.MapFrom(s =>
|
||||||
s.Template!.ApplicationsInWork!.EsppSchValues!.First()!.EsppSchTypeConfig!.EsppSchTypeSchedule!.Description))
|
s.Template!.ApplicationsInWork!.EsppSchValues!.First()!.EsppSchTypeConfig!.EsppSchTypeSchedule!.Description))
|
||||||
.ForMember(d => d.ScheduleTypeCode, o => o.MapFrom(s =>
|
.ForMember(d => d.ScheduleTypeCode, o => o.MapFrom(s =>
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using PARR.API.Contracts.V1.Responses;
|
||||||
|
using PARR.BLL.Helpers;
|
||||||
|
using PARR.DAL.Contracts;
|
||||||
|
using PARR.DAL.Models;
|
||||||
|
using PARR.DAL.TransformServices;
|
||||||
|
|
||||||
|
namespace PARR.API.MappingProfiles.Resolvers
|
||||||
|
{
|
||||||
|
public class RobotTaskScheduleGenerationTimeResolver : IValueResolver<RobotConfiguration, RobotTaskScheduleResponse, string>
|
||||||
|
{
|
||||||
|
private readonly SettingsFromDb settingsFromDb;
|
||||||
|
private readonly INextRunModifierService nextRunModifierService;
|
||||||
|
|
||||||
|
public RobotTaskScheduleGenerationTimeResolver(SettingsFromDb settingsFromDb, INextRunModifierService nextRunModifierService)
|
||||||
|
{
|
||||||
|
this.settingsFromDb = settingsFromDb;
|
||||||
|
this.nextRunModifierService = nextRunModifierService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Resolve(RobotConfiguration source, RobotTaskScheduleResponse destination, string destMember, ResolutionContext context)
|
||||||
|
{
|
||||||
|
var nextRunForRobot = nextRunModifierService.GetNextRunByAccountRobotTimeZone(source.Template!.NextRun);
|
||||||
|
|
||||||
|
return EsppScheduleHelpers.GetGenerationTime(nextRunForRobot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using PARR.API.Contracts.V1.Responses;
|
||||||
|
using PARR.BLL.Helpers;
|
||||||
|
using PARR.DAL.Contracts;
|
||||||
|
using PARR.DAL.Models;
|
||||||
|
using PARR.DAL.TransformServices;
|
||||||
|
|
||||||
|
namespace PARR.API.MappingProfiles.Resolvers
|
||||||
|
{
|
||||||
|
public class RobotTaskScheduleNextStartResolver : IValueResolver<RobotConfiguration, RobotTaskScheduleResponse, string>
|
||||||
|
{
|
||||||
|
private readonly SettingsFromDb settingsFromDb;
|
||||||
|
private readonly INextRunModifierService nextRunModifierService;
|
||||||
|
|
||||||
|
public RobotTaskScheduleNextStartResolver(SettingsFromDb settingsFromDb, INextRunModifierService nextRunModifierService)
|
||||||
|
{
|
||||||
|
this.settingsFromDb = settingsFromDb;
|
||||||
|
this.nextRunModifierService = nextRunModifierService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Resolve(RobotConfiguration source, RobotTaskScheduleResponse destination, string destMember, ResolutionContext context)
|
||||||
|
{
|
||||||
|
var nextRunForRobot = nextRunModifierService.GetNextRunByAccountRobotTimeZone(source.Template!.NextRun);
|
||||||
|
|
||||||
|
return EsppScheduleHelpers.GetNextRun(nextRunForRobot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,7 +3,7 @@ using PARR.API.Contracts.V1.Responses;
|
|||||||
using PARR.DAL.Contracts;
|
using PARR.DAL.Contracts;
|
||||||
using PARR.DAL.Models;
|
using PARR.DAL.Models;
|
||||||
using PARR.DAL.Services.Interfaces;
|
using PARR.DAL.Services.Interfaces;
|
||||||
using System.Threading.Tasks;
|
using PARR.DAL.TransformServices;
|
||||||
|
|
||||||
namespace PARR.API.MappingProfiles.Resolvers
|
namespace PARR.API.MappingProfiles.Resolvers
|
||||||
{
|
{
|
||||||
@@ -11,14 +11,17 @@ namespace PARR.API.MappingProfiles.Resolvers
|
|||||||
{
|
{
|
||||||
private readonly IEsppSchTypeConfigService esppConfigService;
|
private readonly IEsppSchTypeConfigService esppConfigService;
|
||||||
private readonly ILogger<RobotTaskScheduleSchResolver> logger;
|
private readonly ILogger<RobotTaskScheduleSchResolver> logger;
|
||||||
|
private readonly INextRunModifierService nextRunModifierService;
|
||||||
|
|
||||||
public RobotTaskScheduleSchResolver(
|
public RobotTaskScheduleSchResolver(
|
||||||
IEsppSchTypeConfigService esppConfigService,
|
IEsppSchTypeConfigService esppConfigService,
|
||||||
ILogger<RobotTaskScheduleSchResolver> logger
|
ILogger<RobotTaskScheduleSchResolver> logger,
|
||||||
|
INextRunModifierService nextRunModifierService
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.esppConfigService = esppConfigService;
|
this.esppConfigService = esppConfigService;
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
|
this.nextRunModifierService = nextRunModifierService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<RobotTaskScheduleSchResponse>? Resolve(RobotConfiguration source, RobotTaskScheduleResponse destination, List<RobotTaskScheduleSchResponse>? destMember, ResolutionContext context)
|
public List<RobotTaskScheduleSchResponse>? Resolve(RobotConfiguration source, RobotTaskScheduleResponse destination, List<RobotTaskScheduleSchResponse>? destMember, ResolutionContext context)
|
||||||
@@ -42,10 +45,13 @@ namespace PARR.API.MappingProfiles.Resolvers
|
|||||||
}).OrderBy(t => t.Order).ToList();
|
}).OrderBy(t => t.Order).ToList();
|
||||||
|
|
||||||
//Если задача относится к распределенной модели исполнения за период месяц устанавливаем день равный NextRun
|
//Если задача относится к распределенной модели исполнения за период месяц устанавливаем день равный NextRun
|
||||||
if (source.Template!.ApplicationsInWork!.IsAutoDistributionEnabled &&
|
if (source.Template!.ApplicationsInWork!.IsAutoDistributionEnabled && schedule.TypeSchedule.Id == (int)EsppSchTypeScheduleEnum.Monthly)
|
||||||
schedule.TypeSchedule.Id == (int)EsppSchTypeScheduleEnum.Monthly)
|
{
|
||||||
response.First().Value = source.Template.NextRun.Day.ToString();
|
var nextRunForRobot = nextRunModifierService.GetNextRunByAccountRobotTimeZone(source.Template.NextRun);
|
||||||
|
|
||||||
|
//response.First().Value = source.Template.NextRun.Day.ToString();
|
||||||
|
response.First().Value = nextRunForRobot.Day.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,10 +102,11 @@ namespace PARR.DAL.Context
|
|||||||
new { Name = nameof(SettingsFromDb.TemplatePrefixName), Description = "Префикс имени шаблона в ЕСПП", Value = "%PREFIX%-ЭИТИ-ПТК-ПАРР" },
|
new { Name = nameof(SettingsFromDb.TemplatePrefixName), Description = "Префикс имени шаблона в ЕСПП", Value = "%PREFIX%-ЭИТИ-ПТК-ПАРР" },
|
||||||
new { Name = nameof(SettingsFromDb.RobotAttemptsNumber), Description = "Количество попыток выполнения задания роботом", Value = "3" },
|
new { Name = nameof(SettingsFromDb.RobotAttemptsNumber), Description = "Количество попыток выполнения задания роботом", Value = "3" },
|
||||||
new { Name = nameof(SettingsFromDb.RobotWaitTime), Description = "Время ожидания выполнения роботом задания", Value = "00:15:00" },
|
new { Name = nameof(SettingsFromDb.RobotWaitTime), Description = "Время ожидания выполнения роботом задания", Value = "00:15:00" },
|
||||||
new { Name = nameof(SettingsFromDb.ScheduleTimezone), Description = "Расписание регламентной работы - В каком часовом поясе", Value = "Greenwich/Universal" },
|
new { Name = nameof(SettingsFromDb.ScheduleTimezone), Description = "Расписание регламентной работы - В каком часовом поясе", Value = "MSK" },
|
||||||
new { Name = nameof(SettingsFromDb.ScheduleExclude), Description = "Расписание регламентной работы - Тип исключения", Value = "Нет исключений" },
|
new { Name = nameof(SettingsFromDb.ScheduleExclude), Description = "Расписание регламентной работы - Тип исключения", Value = "Нет исключений" },
|
||||||
new { Name = nameof(SettingsFromDb.ScheduleRepeatRange), Description = "Расписание регламентной работы - Диапазн повторов", Value = "Отсутствует дата завершения" },
|
new { Name = nameof(SettingsFromDb.ScheduleRepeatRange), Description = "Расписание регламентной работы - Диапазн повторов", Value = "Отсутствует дата завершения" },
|
||||||
new { Name = nameof(SettingsFromDb.OrderSearchDeltaDate), Description = "Промежуток времени для поиска нарядов в ЕСПП", Value = new TimeSpan(1, 30, 0).ToString() }
|
new { Name = nameof(SettingsFromDb.OrderSearchDeltaDate), Description = "Промежуток времени для поиска нарядов в ЕСПП", Value = new TimeSpan(1, 30, 0).ToString() },
|
||||||
|
new { Name = nameof(SettingsFromDb.EsppRobotAccountTimeZoneHour), Description = "Таймзона УЗ роботов в ЕСПП, в часах (может быть положительная и отрицательная)", Value = "3" }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -63,6 +63,11 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public TimeSpan OrderSearchDeltaDate { get; set; }
|
public TimeSpan OrderSearchDeltaDate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Таймзона УЗ роботов в ЕСПП, в часах (может быть положительным и отрицательным)
|
||||||
|
/// </summary>
|
||||||
|
public int EsppRobotAccountTimeZoneHour { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,42 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace PARR.DAL.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class tblSettingsAddEsppRobotAccountTimeZoneHourAndUpdScheduleTimezone : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "Settings",
|
||||||
|
keyColumn: "Name",
|
||||||
|
keyValue: "ScheduleTimezone",
|
||||||
|
column: "Value",
|
||||||
|
value: "MSK");
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
table: "Settings",
|
||||||
|
columns: new[] { "Name", "Description", "Value" },
|
||||||
|
values: new object[] { "EsppRobotAccountTimeZoneHour", "Таймзона УЗ роботов в ЕСПП, в часах (может быть положительная и отрицательная)", "3" });
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DeleteData(
|
||||||
|
table: "Settings",
|
||||||
|
keyColumn: "Name",
|
||||||
|
keyValue: "EsppRobotAccountTimeZoneHour");
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "Settings",
|
||||||
|
keyColumn: "Name",
|
||||||
|
keyValue: "ScheduleTimezone",
|
||||||
|
column: "Value",
|
||||||
|
value: "Greenwich/Universal");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2100,7 +2100,7 @@ namespace PARR.DAL.Migrations
|
|||||||
{
|
{
|
||||||
Name = "ScheduleTimezone",
|
Name = "ScheduleTimezone",
|
||||||
Description = "Расписание регламентной работы - В каком часовом поясе",
|
Description = "Расписание регламентной работы - В каком часовом поясе",
|
||||||
Value = "Greenwich/Universal"
|
Value = "MSK"
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
@@ -2119,6 +2119,12 @@ namespace PARR.DAL.Migrations
|
|||||||
Name = "OrderSearchDeltaDate",
|
Name = "OrderSearchDeltaDate",
|
||||||
Description = "Промежуток времени для поиска нарядов в ЕСПП",
|
Description = "Промежуток времени для поиска нарядов в ЕСПП",
|
||||||
Value = "01:30:00"
|
Value = "01:30:00"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Name = "EsppRobotAccountTimeZoneHour",
|
||||||
|
Description = "Таймзона УЗ роботов в ЕСПП, в часах (может быть положительная и отрицательная)",
|
||||||
|
Value = "3"
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -84,8 +84,11 @@ namespace PARR.DAL
|
|||||||
services.AddTransient<IDistributionPeriodService, DistributionPeriodService>();
|
services.AddTransient<IDistributionPeriodService, DistributionPeriodService>();
|
||||||
services.AddTransient<IEsppSchTypeValueService, EsppSchTypeValueService>();
|
services.AddTransient<IEsppSchTypeValueService, EsppSchTypeValueService>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// TransformServices
|
// TransformServices
|
||||||
services.AddTransient<IEsppScheduleTransformService, EsppScheduleTransformService>();
|
services.AddTransient<IEsppScheduleTransformService, EsppScheduleTransformService>();
|
||||||
|
services.AddTransient<INextRunModifierService, NextRunModifierService>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
16
PARR.DAL/TransformServices/INextRunModifierService.cs
Normal file
16
PARR.DAL/TransformServices/INextRunModifierService.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
namespace PARR.DAL.TransformServices
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Сервис по изменению NextRun
|
||||||
|
/// </summary>
|
||||||
|
public interface INextRunModifierService
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Получить NextRun с учетом тайм зоны робота ЕСПП
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="nextRun"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
DateTimeOffset GetNextRunByAccountRobotTimeZone(DateTimeOffset nextRun);
|
||||||
|
}
|
||||||
|
}
|
||||||
20
PARR.DAL/TransformServices/NextRunModifierService.cs
Normal file
20
PARR.DAL/TransformServices/NextRunModifierService.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using PARR.DAL.Contracts;
|
||||||
|
|
||||||
|
namespace PARR.DAL.TransformServices
|
||||||
|
{
|
||||||
|
internal class NextRunModifierService : INextRunModifierService
|
||||||
|
{
|
||||||
|
private readonly SettingsFromDb settingsFromDb;
|
||||||
|
|
||||||
|
public NextRunModifierService(SettingsFromDb settingsFromDb)
|
||||||
|
{
|
||||||
|
this.settingsFromDb = settingsFromDb;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public DateTimeOffset GetNextRunByAccountRobotTimeZone(DateTimeOffset nextRun)
|
||||||
|
{
|
||||||
|
return nextRun.AddHours(settingsFromDb.EsppRobotAccountTimeZoneHour);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user