feat(dal): создана таблица ScheduleResponseAreaTimeOffsets. В таблицу JobGroup добавлено поле IsWorkGroupTimezone

This commit is contained in:
Mikhail Trubnikov
2026-01-30 10:40:55 +10:00
parent 5222d763f9
commit fddee13fff
12 changed files with 4283 additions and 0 deletions

View File

@@ -23,6 +23,11 @@
public DateTimeOffset ReferenceDate { get; set; }
/// <summary>
/// Использовать таймзону рабочей группы ответственного за ЭК шаблона
/// </summary>
public bool IsWorkGroupTimezone { get; set; }
public Guid ScheduleExcludeTypeId { get; set; }
public Guid? ScheduleExcludeTypeCalendarId { get; set; }

View File

@@ -18,6 +18,8 @@
public DateTimeOffset ReferenceDate { get; set; }
public bool IsWorkGroupTimezone { get; set; }
public required JobGroupTypeResponse GroupType { get; set; }
/// <summary>

View File

@@ -162,6 +162,7 @@ namespace PARR.API.Controllers.V1
ScheduleExcludeTypeId = request.ScheduleExcludeTypeId,
ScheduleExcludeTypeCalendarId = request.ScheduleExcludeTypeCalendarId,
IsAutoDistributionEnabled = request.IsAutoDistributionEnabled,
IsWorkGroupTimezone = request.IsWorkGroupTimezone
//IsAgent = request.IsAgent,
//AgentName = request.AgentName,
//AgentTimeOutSec = request.AgentTimeOutSec,
@@ -255,6 +256,7 @@ namespace PARR.API.Controllers.V1
orig.ScheduleExcludeTypeId = request.ScheduleExcludeTypeId;
orig.ScheduleExcludeTypeCalendarId = request.ScheduleExcludeTypeCalendarId;
orig.IsAutoDistributionEnabled = request.IsAutoDistributionEnabled;
orig.IsWorkGroupTimezone = request.IsWorkGroupTimezone;
//orig.IsAgent = request.IsAgent;
//orig.AgentName = request.AgentName;
//orig.AgentTimeOutSec = request.AgentTimeOutSec;

View File

@@ -53,6 +53,7 @@ namespace PARR.DAL.Context
public DbSet<ScheduleExcludeTypeCalendar> ScheduleExcludeTypeCalendars { get; set; }
public DbSet<ScheduleExcludeType> ScheduleExcludeTypes { get; set; }
public DbSet<ScheduleResponseAreaTimeOffset> ScheduleResponseAreaTimeOffsets { get; set; }
#endregion

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,49 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PARR.DAL.Migrations
{
/// <inheritdoc />
public partial class tblAddScheduleResponseAreaTimeOffset : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "IsWorkGroupTimezone",
schema: "job",
table: "Groups",
type: "boolean",
nullable: false,
defaultValue: false);
migrationBuilder.CreateTable(
name: "ResponseAreaTimeOffsets",
schema: "schedule",
columns: table => new
{
ResponseArea = table.Column<string>(type: "text", nullable: false),
TimeOffset = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ResponseAreaTimeOffsets", x => x.ResponseArea);
},
comment: "Расписание в ЕСПП. Смещение часового пояса относительно МСК для зоны ответственности рабочей группы");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "ResponseAreaTimeOffsets",
schema: "schedule");
migrationBuilder.DropColumn(
name: "IsWorkGroupTimezone",
schema: "job",
table: "Groups");
}
}
}

View File

@@ -1678,6 +1678,9 @@ namespace PARR.DAL.Migrations
b.Property<bool>("IsAutoDistributionEnabled")
.HasColumnType("boolean");
b.Property<bool>("IsWorkGroupTimezone")
.HasColumnType("boolean");
b.Property<DateTimeOffset>("ReferenceDate")
.HasColumnType("timestamp with time zone");
@@ -2569,6 +2572,23 @@ namespace PARR.DAL.Migrations
});
});
modelBuilder.Entity("PARR.DAL.Models.Schedule.ScheduleResponseAreaTimeOffset", b =>
{
b.Property<string>("ResponseArea")
.HasColumnType("text");
b.Property<string>("TimeOffset")
.IsRequired()
.HasColumnType("text");
b.HasKey("ResponseArea");
b.ToTable("ResponseAreaTimeOffsets", "schedule", t =>
{
t.HasComment("Расписание в ЕСПП. Смещение часового пояса относительно МСК для зоны ответственности рабочей группы");
});
});
modelBuilder.Entity("PARR.DAL.Models.Setting", b =>
{
b.Property<string>("Name")

View File

@@ -92,6 +92,12 @@ namespace PARR.DAL.Models.Job
public DateTimeOffset ReferenceDate { get; set; }
/// <summary>
/// Использовать таймзону рабочей группы ответственного за ЭК шаблона
/// </summary>
public bool IsWorkGroupTimezone { get; set; } = false;
/// <summary>
/// Включить автораспределение
/// </summary>

View File

@@ -0,0 +1,20 @@
using Microsoft.EntityFrameworkCore;
using PARR.DAL.Context;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models.Schedule
{
/// <summary>
/// Расписание в ЕСПП. Смещение часового пояса относительно МСК для зоны ответственности рабочей группы
/// </summary>
[Table("ResponseAreaTimeOffsets", Schema = DataContextSettings.Schedule)]
[Comment("Расписание в ЕСПП. Смещение часового пояса относительно МСК для зоны ответственности рабочей группы")]
public class ScheduleResponseAreaTimeOffset
{
[Key]
public required string ResponseArea { get; set; }
public required string TimeOffset { get; set; }
}
}

View File

@@ -107,6 +107,7 @@ namespace PARR.DAL
services.AddTransient<IScheduleExcludeTypeService, ScheduleExcludeTypeService>();
services.AddTransient<IScheduleExcludeTypeCalendarService, ScheduleExcludeTypeCalendarService>();
services.AddTransient<IScheduleResponseAreaTimeOffsetService, ScheduleResponseAreaTimeOffsetService>();
#endregion

View File

@@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore;
using PARR.DAL.Context;
using PARR.DAL.Models.Schedule;
using PARR.DAL.Services.Interfaces.Schedule;
namespace PARR.DAL.Services.Implementations.Schedule
{
internal class ScheduleResponseAreaTimeOffsetService : IScheduleResponseAreaTimeOffsetService
{
private readonly DataContext dataContext;
public ScheduleResponseAreaTimeOffsetService(DataContext dataContext)
{
this.dataContext = dataContext;
}
public IQueryable<ScheduleResponseAreaTimeOffset> Get()
{
return dataContext.ScheduleResponseAreaTimeOffsets;
}
public async Task<string?> GetTimeOffsetByResponseAreaAsync(string responseArea)
{
var result = await dataContext.ScheduleResponseAreaTimeOffsets.FirstOrDefaultAsync(t => t.ResponseArea == responseArea);
return result != null ? result.TimeOffset : null;
}
}
}

View File

@@ -0,0 +1,11 @@
using PARR.DAL.Models.Schedule;
namespace PARR.DAL.Services.Interfaces.Schedule
{
public interface IScheduleResponseAreaTimeOffsetService
{
IQueryable<ScheduleResponseAreaTimeOffset> Get();
Task<string?> GetTimeOffsetByResponseAreaAsync(string responseArea);
}
}