feat(dal): заготовка для хранения истории
This commit is contained in:
76
PARR.Constants/ParrComponentsEnum.cs
Normal file
76
PARR.Constants/ParrComponentsEnum.cs
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
namespace PARR.Constants
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Компоненты ПАРР
|
||||||
|
/// </summary>
|
||||||
|
public enum ParrComponentsEnum
|
||||||
|
{
|
||||||
|
// Тут указываем только Worker`ы
|
||||||
|
// !!! При добавлении новых, добавлять в DataContext !!!
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// API
|
||||||
|
/// </summary>
|
||||||
|
Api = 0,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Загрузчик из АИХИТ
|
||||||
|
/// </summary>
|
||||||
|
AihitLoader = 1,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Синхронизатор АИХИТ
|
||||||
|
/// </summary>
|
||||||
|
AihitSyncer = 2,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Загрузчик нарядов из ЕСПП
|
||||||
|
/// </summary>
|
||||||
|
EsppOrderLoader = 3,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Управление нарядами ЕСПП
|
||||||
|
/// </summary>
|
||||||
|
EsppOrderManager = 4,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Синхронизатор расписаний
|
||||||
|
/// </summary>
|
||||||
|
EsppScheduleSync = 5,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Синхронизатор шаблонов
|
||||||
|
/// </summary>
|
||||||
|
EsppTemplateSync = 6,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Генератор шаблонов
|
||||||
|
/// </summary>
|
||||||
|
GeneratorTemplates = 7,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Авто-контроль РР
|
||||||
|
/// </summary>
|
||||||
|
JobAutoControl = 8,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Связывание нарядов ЕСПП с ПАРР (шаблонами, агентами)
|
||||||
|
/// </summary>
|
||||||
|
Master = 9,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Рассчет даты следующего срабатывания
|
||||||
|
/// </summary>
|
||||||
|
NextRun = 10,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Активатор шаблонов / расписаний
|
||||||
|
/// </summary>
|
||||||
|
TemplateActivator = 11,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Автораспределение РР
|
||||||
|
/// </summary>
|
||||||
|
TemplateDistributor = 12
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -62,6 +62,8 @@ namespace PARR.DAL.Context
|
|||||||
|
|
||||||
public DbSet<DistributionPeriod> DistributionPeriods { get; set; }
|
public DbSet<DistributionPeriod> DistributionPeriods { get; set; }
|
||||||
|
|
||||||
|
public DbSet<ParrComponent> ParrComponents { get; set; }
|
||||||
|
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
{
|
{
|
||||||
@@ -386,6 +388,29 @@ namespace PARR.DAL.Context
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region ParrComponents
|
||||||
|
|
||||||
|
modelBuilder.Entity<ParrComponent>(f =>
|
||||||
|
{
|
||||||
|
f.HasData(
|
||||||
|
new() { Id = ParrComponentsEnum.Api, Name = ParrComponentsEnum.Api.ToString(), Description = "API" },
|
||||||
|
new() { Id = ParrComponentsEnum.AihitLoader, Name = ParrComponentsEnum.AihitLoader.ToString(), Description = "Загрузчик из АИХИТ" },
|
||||||
|
new() { Id = ParrComponentsEnum.AihitSyncer, Name = ParrComponentsEnum.AihitSyncer.ToString(), Description = "Синхронизатор АИХИТ" },
|
||||||
|
new() { Id = ParrComponentsEnum.EsppOrderLoader, Name = ParrComponentsEnum.EsppOrderLoader.ToString(), Description = "Загрузчик нарядов из ЕСПП" },
|
||||||
|
new() { Id = ParrComponentsEnum.EsppOrderManager, Name = ParrComponentsEnum.EsppOrderManager.ToString(), Description = "Управление нарядами ЕСПП" },
|
||||||
|
new() { Id = ParrComponentsEnum.EsppScheduleSync, Name = ParrComponentsEnum.EsppScheduleSync.ToString(), Description = "Синхронизатор расписаний" },
|
||||||
|
new() { Id = ParrComponentsEnum.EsppTemplateSync, Name = ParrComponentsEnum.EsppTemplateSync.ToString(), Description = "Синхронизатор шаблонов" },
|
||||||
|
new() { Id = ParrComponentsEnum.GeneratorTemplates, Name = ParrComponentsEnum.GeneratorTemplates.ToString(), Description = "Генератор шаблонов" },
|
||||||
|
new() { Id = ParrComponentsEnum.JobAutoControl, Name = ParrComponentsEnum.JobAutoControl.ToString(), Description = "Авто-контроль РР" },
|
||||||
|
new() { Id = ParrComponentsEnum.Master, Name = ParrComponentsEnum.Master.ToString(), Description = "Связывание нарядов ЕСПП с ПАРР (шаблонами, агентами)" },
|
||||||
|
new() { Id = ParrComponentsEnum.NextRun, Name = ParrComponentsEnum.NextRun.ToString(), Description = "Рассчет даты следующего срабатывания" },
|
||||||
|
new() { Id = ParrComponentsEnum.TemplateActivator, Name = ParrComponentsEnum.TemplateActivator.ToString(), Description = "Активатор шаблонов / расписаний" },
|
||||||
|
new() { Id = ParrComponentsEnum.TemplateDistributor, Name = ParrComponentsEnum.TemplateDistributor.ToString(), Description = "Автораспределение РР" }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
//protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
|
|||||||
3174
PARR.DAL/Migrations/20241004002102_tblParrComponents.Designer.cs
generated
Normal file
3174
PARR.DAL/Migrations/20241004002102_tblParrComponents.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
62
PARR.DAL/Migrations/20241004002102_tblParrComponents.cs
Normal file
62
PARR.DAL/Migrations/20241004002102_tblParrComponents.cs
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
|
||||||
|
|
||||||
|
namespace PARR.DAL.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class tblParrComponents : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "ParrComponents",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
Name = table.Column<string>(type: "text", nullable: false),
|
||||||
|
Description = table.Column<string>(type: "text", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_ParrComponents", x => x.Id);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
table: "ParrComponents",
|
||||||
|
columns: new[] { "Id", "Description", "Name" },
|
||||||
|
values: new object[,]
|
||||||
|
{
|
||||||
|
{ 0, "API", "Api" },
|
||||||
|
{ 1, "Загрузчик из АИХИТ", "AihitLoader" },
|
||||||
|
{ 2, "Синхронизатор АИХИТ", "AihitSyncer" },
|
||||||
|
{ 3, "Загрузчик нарядов из ЕСПП", "EsppOrderLoader" },
|
||||||
|
{ 4, "Управление нарядами ЕСПП", "EsppOrderManager" },
|
||||||
|
{ 5, "Синхронизатор расписаний", "EsppScheduleSync" },
|
||||||
|
{ 6, "Синхронизатор шаблонов", "EsppTemplateSync" },
|
||||||
|
{ 7, "Генератор шаблонов", "GeneratorTemplates" },
|
||||||
|
{ 8, "Авто-контроль РР", "JobAutoControl" },
|
||||||
|
{ 9, "Связывание нарядов ЕСПП с ПАРР (шаблонами, агентами)", "Master" },
|
||||||
|
{ 10, "Рассчет даты следующего срабатывания", "NextRun" },
|
||||||
|
{ 11, "Активатор шаблонов / расписаний", "TemplateActivator" },
|
||||||
|
{ 12, "Автораспределение РР", "TemplateDistributor" }
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_ParrComponents_Name",
|
||||||
|
table: "ParrComponents",
|
||||||
|
column: "Name",
|
||||||
|
unique: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "ParrComponents");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
3243
PARR.DAL/Migrations/20241004010312_tblTemplateHistory.Designer.cs
generated
Normal file
3243
PARR.DAL/Migrations/20241004010312_tblTemplateHistory.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
85
PARR.DAL/Migrations/20241004010312_tblTemplateHistory.cs
Normal file
85
PARR.DAL/Migrations/20241004010312_tblTemplateHistory.cs
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace PARR.DAL.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class tblTemplateHistory : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AddColumn<string>(
|
||||||
|
name: "InitiatorComment",
|
||||||
|
table: "Templates",
|
||||||
|
type: "text",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<string>(
|
||||||
|
name: "InitiatorIp",
|
||||||
|
table: "Templates",
|
||||||
|
type: "text",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<int>(
|
||||||
|
name: "InitiatorParrComponentId",
|
||||||
|
table: "Templates",
|
||||||
|
type: "integer",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "TemplateHistories",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||||
|
ParentId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||||
|
DateAddedToHistory = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: false),
|
||||||
|
InitiatorIp = table.Column<string>(type: "text", nullable: true),
|
||||||
|
InitiatorParrComponentId = table.Column<int>(type: "integer", nullable: true),
|
||||||
|
InitiatorComment = table.Column<string>(type: "text", nullable: true),
|
||||||
|
DateModified = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: true),
|
||||||
|
Name = table.Column<string>(type: "text", nullable: false),
|
||||||
|
IsActiveTemplate = table.Column<bool>(type: "boolean", nullable: false),
|
||||||
|
IsActiveSchedule = table.Column<bool>(type: "boolean", nullable: false),
|
||||||
|
LastRun = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: true),
|
||||||
|
NextRun = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_TemplateHistories", x => x.Id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_TemplateHistories_Templates_ParentId",
|
||||||
|
column: x => x.ParentId,
|
||||||
|
principalTable: "Templates",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_TemplateHistories_ParentId",
|
||||||
|
table: "TemplateHistories",
|
||||||
|
column: "ParentId");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "TemplateHistories");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "InitiatorComment",
|
||||||
|
table: "Templates");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "InitiatorIp",
|
||||||
|
table: "Templates");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "InitiatorParrComponentId",
|
||||||
|
table: "Templates");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -51,7 +51,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("TemplateId");
|
b.HasIndex("TemplateId");
|
||||||
|
|
||||||
b.ToTable("AgentHistories", (string)null);
|
b.ToTable("AgentHistories");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.AgentHistoryLevel", b =>
|
modelBuilder.Entity("PARR.DAL.Models.AgentHistoryLevel", b =>
|
||||||
@@ -72,7 +72,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.ToTable("AgentHistoryLevels", (string)null);
|
b.ToTable("AgentHistoryLevels");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -101,7 +101,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("WorkGroupId");
|
b.HasIndex("WorkGroupId");
|
||||||
|
|
||||||
b.ToTable("AppInWorkInWorkGroups", (string)null);
|
b.ToTable("AppInWorkInWorkGroups");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.Application", b =>
|
modelBuilder.Entity("PARR.DAL.Models.Application", b =>
|
||||||
@@ -130,7 +130,7 @@ namespace PARR.DAL.Migrations
|
|||||||
b.HasIndex("Name", "ApplicationTypeId")
|
b.HasIndex("Name", "ApplicationTypeId")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("Applications", (string)null);
|
b.ToTable("Applications");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.ApplicationInHost", b =>
|
modelBuilder.Entity("PARR.DAL.Models.ApplicationInHost", b =>
|
||||||
@@ -157,7 +157,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("HostId");
|
b.HasIndex("HostId");
|
||||||
|
|
||||||
b.ToTable("ApplicationsInHost", (string)null);
|
b.ToTable("ApplicationsInHost");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.ApplicationType", b =>
|
modelBuilder.Entity("PARR.DAL.Models.ApplicationType", b =>
|
||||||
@@ -181,7 +181,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.ToTable("ApplicationTypes", (string)null);
|
b.ToTable("ApplicationTypes");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -294,7 +294,7 @@ namespace PARR.DAL.Migrations
|
|||||||
b.HasIndex("WorkId", "ApplicationId")
|
b.HasIndex("WorkId", "ApplicationId")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("ApplicationsInWorks", (string)null);
|
b.ToTable("ApplicationsInWorks");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.DistributionPeriod", b =>
|
modelBuilder.Entity("PARR.DAL.Models.DistributionPeriod", b =>
|
||||||
@@ -319,7 +319,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("Type");
|
b.HasIndex("Type");
|
||||||
|
|
||||||
b.ToTable("DistributionPeriods", (string)null);
|
b.ToTable("DistributionPeriods");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -349,7 +349,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasKey("Type");
|
b.HasKey("Type");
|
||||||
|
|
||||||
b.ToTable("DistributionPeriodTypes", (string)null);
|
b.ToTable("DistributionPeriodTypes");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -383,7 +383,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasKey("Code");
|
b.HasKey("Code");
|
||||||
|
|
||||||
b.ToTable("EkStatuses", (string)null);
|
b.ToTable("EkStatuses");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -446,7 +446,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.ToTable("EsppSchTypes", (string)null);
|
b.ToTable("EsppSchTypes");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -515,7 +515,7 @@ namespace PARR.DAL.Migrations
|
|||||||
b.HasIndex("TypeScheduleId", "TypeId")
|
b.HasIndex("TypeScheduleId", "TypeId")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("EsppSchTypeConfigs", (string)null);
|
b.ToTable("EsppSchTypeConfigs");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -618,7 +618,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.ToTable("EsppSchTypeSchedules", (string)null);
|
b.ToTable("EsppSchTypeSchedules");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -691,7 +691,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("TypeId");
|
b.HasIndex("TypeId");
|
||||||
|
|
||||||
b.ToTable("EsppSchTypeValues", (string)null);
|
b.ToTable("EsppSchTypeValues");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -1492,7 +1492,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("TypeValueId");
|
b.HasIndex("TypeValueId");
|
||||||
|
|
||||||
b.ToTable("EsppSchValues", (string)null);
|
b.ToTable("EsppSchValues");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.Host", b =>
|
modelBuilder.Entity("PARR.DAL.Models.Host", b =>
|
||||||
@@ -1539,7 +1539,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("WorkGroupId");
|
b.HasIndex("WorkGroupId");
|
||||||
|
|
||||||
b.ToTable("Hosts", (string)null);
|
b.ToTable("Hosts");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.JobAutoControl", b =>
|
modelBuilder.Entity("PARR.DAL.Models.JobAutoControl", b =>
|
||||||
@@ -1583,7 +1583,7 @@ namespace PARR.DAL.Migrations
|
|||||||
b.HasIndex("ApplicationInWorkId")
|
b.HasIndex("ApplicationInWorkId")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("JobAutoControls", (string)null);
|
b.ToTable("JobAutoControls");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.JobAutoControlInEkStatus", b =>
|
modelBuilder.Entity("PARR.DAL.Models.JobAutoControlInEkStatus", b =>
|
||||||
@@ -1598,7 +1598,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("EkStatusCode");
|
b.HasIndex("EkStatusCode");
|
||||||
|
|
||||||
b.ToTable("JobAutoControlInEkStatus", (string)null);
|
b.ToTable("JobAutoControlInEkStatus");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.JobEkMask", b =>
|
modelBuilder.Entity("PARR.DAL.Models.JobEkMask", b =>
|
||||||
@@ -1622,7 +1622,7 @@ namespace PARR.DAL.Migrations
|
|||||||
b.HasIndex("JobAutoControlId", "Name")
|
b.HasIndex("JobAutoControlId", "Name")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("JobEkMasks", (string)null);
|
b.ToTable("JobEkMasks");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.Order", b =>
|
modelBuilder.Entity("PARR.DAL.Models.Order", b =>
|
||||||
@@ -1674,7 +1674,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("TemplateId");
|
b.HasIndex("TemplateId");
|
||||||
|
|
||||||
b.ToTable("Orders", (string)null);
|
b.ToTable("Orders");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.OrderStatus", b =>
|
modelBuilder.Entity("PARR.DAL.Models.OrderStatus", b =>
|
||||||
@@ -1695,7 +1695,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasKey("Code");
|
b.HasKey("Code");
|
||||||
|
|
||||||
b.ToTable("OrderStatuses", (string)null);
|
b.ToTable("OrderStatuses");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -1730,6 +1730,107 @@ namespace PARR.DAL.Migrations
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("PARR.DAL.Models.ParrComponent", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<string>("Description")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("Name")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("ParrComponents");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 0,
|
||||||
|
Description = "API",
|
||||||
|
Name = "Api"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
Description = "Загрузчик из АИХИТ",
|
||||||
|
Name = "AihitLoader"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
Description = "Синхронизатор АИХИТ",
|
||||||
|
Name = "AihitSyncer"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 3,
|
||||||
|
Description = "Загрузчик нарядов из ЕСПП",
|
||||||
|
Name = "EsppOrderLoader"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 4,
|
||||||
|
Description = "Управление нарядами ЕСПП",
|
||||||
|
Name = "EsppOrderManager"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 5,
|
||||||
|
Description = "Синхронизатор расписаний",
|
||||||
|
Name = "EsppScheduleSync"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 6,
|
||||||
|
Description = "Синхронизатор шаблонов",
|
||||||
|
Name = "EsppTemplateSync"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 7,
|
||||||
|
Description = "Генератор шаблонов",
|
||||||
|
Name = "GeneratorTemplates"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 8,
|
||||||
|
Description = "Авто-контроль РР",
|
||||||
|
Name = "JobAutoControl"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 9,
|
||||||
|
Description = "Связывание нарядов ЕСПП с ПАРР (шаблонами, агентами)",
|
||||||
|
Name = "Master"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 10,
|
||||||
|
Description = "Рассчет даты следующего срабатывания",
|
||||||
|
Name = "NextRun"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 11,
|
||||||
|
Description = "Активатор шаблонов / расписаний",
|
||||||
|
Name = "TemplateActivator"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 12,
|
||||||
|
Description = "Автораспределение РР",
|
||||||
|
Name = "TemplateDistributor"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.Process", b =>
|
modelBuilder.Entity("PARR.DAL.Models.Process", b =>
|
||||||
{
|
{
|
||||||
b.Property<Guid>("Id")
|
b.Property<Guid>("Id")
|
||||||
@@ -1754,7 +1855,7 @@ namespace PARR.DAL.Migrations
|
|||||||
b.HasIndex("EsppId")
|
b.HasIndex("EsppId")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("Processes", (string)null);
|
b.ToTable("Processes");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.ResponseArea", b =>
|
modelBuilder.Entity("PARR.DAL.Models.ResponseArea", b =>
|
||||||
@@ -1771,7 +1872,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasKey("Code");
|
b.HasKey("Code");
|
||||||
|
|
||||||
b.ToTable("ResponseAreas", (string)null);
|
b.ToTable("ResponseAreas");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -1897,7 +1998,7 @@ namespace PARR.DAL.Migrations
|
|||||||
b.HasIndex("Name")
|
b.HasIndex("Name")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("Robots", (string)null);
|
b.ToTable("Robots");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -1952,7 +2053,7 @@ namespace PARR.DAL.Migrations
|
|||||||
b.HasIndex("TemplateId", "RobotCode")
|
b.HasIndex("TemplateId", "RobotCode")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("RobotConfigurations", (string)null);
|
b.ToTable("RobotConfigurations");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.RobotHistory", b =>
|
modelBuilder.Entity("PARR.DAL.Models.RobotHistory", b =>
|
||||||
@@ -1990,7 +2091,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("TaskStatusCode");
|
b.HasIndex("TaskStatusCode");
|
||||||
|
|
||||||
b.ToTable("RobotHistories", (string)null);
|
b.ToTable("RobotHistories");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.RobotHistoryLevel", b =>
|
modelBuilder.Entity("PARR.DAL.Models.RobotHistoryLevel", b =>
|
||||||
@@ -2011,7 +2112,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasKey("Level");
|
b.HasKey("Level");
|
||||||
|
|
||||||
b.ToTable("RobotHistoryLevels", (string)null);
|
b.ToTable("RobotHistoryLevels");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -2058,7 +2159,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasKey("Code");
|
b.HasKey("Code");
|
||||||
|
|
||||||
b.ToTable("RobotStatuses", (string)null);
|
b.ToTable("RobotStatuses");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -2106,7 +2207,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.ToTable("Roles", (string)null);
|
b.ToTable("Roles");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -2140,7 +2241,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasKey("Name");
|
b.HasKey("Name");
|
||||||
|
|
||||||
b.ToTable("Settings", (string)null);
|
b.ToTable("Settings");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -2246,7 +2347,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("ProcessId");
|
b.HasIndex("ProcessId");
|
||||||
|
|
||||||
b.ToTable("Subprocesses", (string)null);
|
b.ToTable("Subprocesses");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.TaskStatus", b =>
|
modelBuilder.Entity("PARR.DAL.Models.TaskStatus", b =>
|
||||||
@@ -2267,7 +2368,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasKey("Code");
|
b.HasKey("Code");
|
||||||
|
|
||||||
b.ToTable("TaskStatuses", (string)null);
|
b.ToTable("TaskStatuses");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
@@ -2308,6 +2409,15 @@ namespace PARR.DAL.Migrations
|
|||||||
b.Property<Guid>("HostId")
|
b.Property<Guid>("HostId")
|
||||||
.HasColumnType("uuid");
|
.HasColumnType("uuid");
|
||||||
|
|
||||||
|
b.Property<string>("InitiatorComment")
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<string>("InitiatorIp")
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<int?>("InitiatorParrComponentId")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
b.Property<bool>("IsActiveSchedule")
|
b.Property<bool>("IsActiveSchedule")
|
||||||
.HasColumnType("boolean");
|
.HasColumnType("boolean");
|
||||||
|
|
||||||
@@ -2336,7 +2446,54 @@ namespace PARR.DAL.Migrations
|
|||||||
b.HasIndex("Name")
|
b.HasIndex("Name")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("Templates", (string)null);
|
b.ToTable("Templates");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("PARR.DAL.Models.TemplateHistory", b =>
|
||||||
|
{
|
||||||
|
b.Property<Guid>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("uuid");
|
||||||
|
|
||||||
|
b.Property<DateTimeOffset>("DateAddedToHistory")
|
||||||
|
.HasColumnType("timestamp with time zone");
|
||||||
|
|
||||||
|
b.Property<DateTimeOffset?>("DateModified")
|
||||||
|
.HasColumnType("timestamp with time zone");
|
||||||
|
|
||||||
|
b.Property<string>("InitiatorComment")
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<string>("InitiatorIp")
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<int?>("InitiatorParrComponentId")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<bool>("IsActiveSchedule")
|
||||||
|
.HasColumnType("boolean");
|
||||||
|
|
||||||
|
b.Property<bool>("IsActiveTemplate")
|
||||||
|
.HasColumnType("boolean");
|
||||||
|
|
||||||
|
b.Property<DateTimeOffset?>("LastRun")
|
||||||
|
.HasColumnType("timestamp with time zone");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<DateTimeOffset>("NextRun")
|
||||||
|
.HasColumnType("timestamp with time zone");
|
||||||
|
|
||||||
|
b.Property<Guid>("ParentId")
|
||||||
|
.HasColumnType("uuid");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("ParentId");
|
||||||
|
|
||||||
|
b.ToTable("TemplateHistories");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.Tnk", b =>
|
modelBuilder.Entity("PARR.DAL.Models.Tnk", b =>
|
||||||
@@ -2368,7 +2525,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("SubprocessId");
|
b.HasIndex("SubprocessId");
|
||||||
|
|
||||||
b.ToTable("Tnks", (string)null);
|
b.ToTable("Tnks");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.User", b =>
|
modelBuilder.Entity("PARR.DAL.Models.User", b =>
|
||||||
@@ -2399,7 +2556,7 @@ namespace PARR.DAL.Migrations
|
|||||||
b.HasIndex("Ip")
|
b.HasIndex("Ip")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("Users", (string)null);
|
b.ToTable("Users");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.UsersInRole", b =>
|
modelBuilder.Entity("PARR.DAL.Models.UsersInRole", b =>
|
||||||
@@ -2414,7 +2571,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("UserId");
|
b.HasIndex("UserId");
|
||||||
|
|
||||||
b.ToTable("UsersInRoles", (string)null);
|
b.ToTable("UsersInRoles");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.WeekendDay", b =>
|
modelBuilder.Entity("PARR.DAL.Models.WeekendDay", b =>
|
||||||
@@ -2431,7 +2588,7 @@ namespace PARR.DAL.Migrations
|
|||||||
b.HasIndex("Date")
|
b.HasIndex("Date")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("WeekendDays", (string)null);
|
b.ToTable("WeekendDays");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.Work", b =>
|
modelBuilder.Entity("PARR.DAL.Models.Work", b =>
|
||||||
@@ -2466,7 +2623,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("TnkId");
|
b.HasIndex("TnkId");
|
||||||
|
|
||||||
b.ToTable("Works", (string)null);
|
b.ToTable("Works");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.WorkGroup", b =>
|
modelBuilder.Entity("PARR.DAL.Models.WorkGroup", b =>
|
||||||
@@ -2489,7 +2646,7 @@ namespace PARR.DAL.Migrations
|
|||||||
|
|
||||||
b.HasIndex("ResponseAreaCode");
|
b.HasIndex("ResponseAreaCode");
|
||||||
|
|
||||||
b.ToTable("WorkGroups", (string)null);
|
b.ToTable("WorkGroups");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.AgentHistory", b =>
|
modelBuilder.Entity("PARR.DAL.Models.AgentHistory", b =>
|
||||||
@@ -2840,6 +2997,17 @@ namespace PARR.DAL.Migrations
|
|||||||
b.Navigation("Host");
|
b.Navigation("Host");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("PARR.DAL.Models.TemplateHistory", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("PARR.DAL.Models.Template", "Template")
|
||||||
|
.WithMany("TemplateHistories")
|
||||||
|
.HasForeignKey("ParentId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Template");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.Tnk", b =>
|
modelBuilder.Entity("PARR.DAL.Models.Tnk", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("PARR.DAL.Models.Subprocess", "Subprocess")
|
b.HasOne("PARR.DAL.Models.Subprocess", "Subprocess")
|
||||||
@@ -3041,6 +3209,8 @@ namespace PARR.DAL.Migrations
|
|||||||
b.Navigation("Orders");
|
b.Navigation("Orders");
|
||||||
|
|
||||||
b.Navigation("RobotConfigurations");
|
b.Navigation("RobotConfigurations");
|
||||||
|
|
||||||
|
b.Navigation("TemplateHistories");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("PARR.DAL.Models.Tnk", b =>
|
modelBuilder.Entity("PARR.DAL.Models.Tnk", b =>
|
||||||
|
|||||||
25
PARR.DAL/Models/Base/History/Base/IHistoryInitiator.cs
Normal file
25
PARR.DAL/Models/Base/History/Base/IHistoryInitiator.cs
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
using PARR.Constants;
|
||||||
|
|
||||||
|
namespace PARR.DAL.Models.Base.History.Base
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Инициатор изменений, ведение истории
|
||||||
|
/// </summary>
|
||||||
|
public interface IHistoryInitiator
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// IP инициатора изменений (пользователь)
|
||||||
|
/// </summary>
|
||||||
|
public string? InitiatorIp { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Id инициатора компонента ПАРР
|
||||||
|
/// </summary>
|
||||||
|
public ParrComponentsEnum? InitiatorParrComponentId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Комментарий от инициатора
|
||||||
|
/// </summary>
|
||||||
|
public string? InitiatorComment { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
18
PARR.DAL/Models/Base/History/Base/IHistoryTable.cs
Normal file
18
PARR.DAL/Models/Base/History/Base/IHistoryTable.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
namespace PARR.DAL.Models.Base.History.Base
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Таблица отслеживания изменений основной таблицы (таблица истории)
|
||||||
|
/// </summary>
|
||||||
|
public interface IHistoryTable : IBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Id записи в родительской таблице
|
||||||
|
/// </summary>
|
||||||
|
public Guid ParentId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Дата добавления в историю
|
||||||
|
/// </summary>
|
||||||
|
public DateTimeOffset DateAddedToHistory { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
9
PARR.DAL/Models/Base/History/Base/IMyHistory.cs
Normal file
9
PARR.DAL/Models/Base/History/Base/IMyHistory.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
namespace PARR.DAL.Models.Base.History.Base
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// По этому интерфейсу определям, что хотим вести историю.
|
||||||
|
/// В родительской таблице, по которой ведется история, указываются настройки истории.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="HistoryTable">Таблица истории</typeparam>
|
||||||
|
public interface IMyHistory<HistoryTable> where HistoryTable : class { }
|
||||||
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
namespace PARR.DAL.Models.Base
|
namespace PARR.DAL.Models.Base.History
|
||||||
{
|
{
|
||||||
public interface ITemplateBase
|
public interface ITemplateGeneralProps
|
||||||
{
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
public bool IsActiveTemplate { get; set; }
|
public bool IsActiveTemplate { get; set; }
|
||||||
|
|
||||||
public bool IsActiveSchedule { get; set; }
|
public bool IsActiveSchedule { get; set; }
|
||||||
19
PARR.DAL/Models/ParrComponent.cs
Normal file
19
PARR.DAL/Models/ParrComponent.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using PARR.Constants;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
|
namespace PARR.DAL.Models
|
||||||
|
{
|
||||||
|
[Table("ParrComponents")]
|
||||||
|
[Index(nameof(Name), IsUnique = true)]
|
||||||
|
public class ParrComponent
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
public ParrComponentsEnum Id { get; set; }
|
||||||
|
|
||||||
|
public required string Name { get; set; }
|
||||||
|
|
||||||
|
public required string Description { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using PARR.Constants;
|
||||||
using PARR.DAL.Models.Base;
|
using PARR.DAL.Models.Base;
|
||||||
|
using PARR.DAL.Models.Base.History;
|
||||||
|
using PARR.DAL.Models.Base.History.Base;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
@@ -7,7 +10,7 @@ namespace PARR.DAL.Models
|
|||||||
{
|
{
|
||||||
[Table("Templates")]
|
[Table("Templates")]
|
||||||
[Index(nameof(Name), IsUnique = true)]
|
[Index(nameof(Name), IsUnique = true)]
|
||||||
public class Template : IBase, ITemplateBase
|
public class Template : IBase, ITemplateGeneralProps, IHistoryInitiator, IMyHistory<TemplateHistory>
|
||||||
{
|
{
|
||||||
[Key]
|
[Key]
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
@@ -41,12 +44,19 @@ namespace PARR.DAL.Models
|
|||||||
|
|
||||||
public DateTimeOffset? LastRun { get; set; }
|
public DateTimeOffset? LastRun { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public DateTimeOffset NextRun { get; set; }
|
public DateTimeOffset NextRun { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public Guid ApplicationInWorkId { get; set; }
|
public Guid ApplicationInWorkId { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
#region Initiator
|
||||||
|
public string? InitiatorIp { get; set; }
|
||||||
|
|
||||||
|
public ParrComponentsEnum? InitiatorParrComponentId { get; set; }
|
||||||
|
|
||||||
|
public string? InitiatorComment { get; set; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
[ForeignKey(nameof(ApplicationInWorkId))]
|
[ForeignKey(nameof(ApplicationInWorkId))]
|
||||||
public ApplicationsInWork? ApplicationsInWork { get; set; }
|
public ApplicationsInWork? ApplicationsInWork { get; set; }
|
||||||
|
|
||||||
@@ -62,6 +72,8 @@ namespace PARR.DAL.Models
|
|||||||
|
|
||||||
public ICollection<Order> Orders { get; set; } = new HashSet<Order>();
|
public ICollection<Order> Orders { get; set; } = new HashSet<Order>();
|
||||||
|
|
||||||
//public ICollection<TemplateHistory> TemplateHistories { get; set; } = new HashSet<TemplateHistory>();
|
|
||||||
|
|
||||||
|
public ICollection<TemplateHistory> TemplateHistories { get; set; } = new HashSet<TemplateHistory>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +1,36 @@
|
|||||||
using PARR.DAL.Models.Base;
|
using PARR.Constants;
|
||||||
|
using PARR.DAL.Models.Base;
|
||||||
|
using PARR.DAL.Models.Base.History;
|
||||||
|
using PARR.DAL.Models.Base.History.Base;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
namespace PARR.DAL.Models
|
namespace PARR.DAL.Models
|
||||||
{
|
{
|
||||||
[Table("TemplateHistories")]
|
[Table("TemplateHistories")]
|
||||||
public class TemplateHistory : IBase, ITemplateBase
|
public class TemplateHistory : IBase, ITemplateGeneralProps, IHistoryInitiator, IHistoryTable
|
||||||
{
|
{
|
||||||
//!!! Не используется !!!
|
|
||||||
|
|
||||||
|
|
||||||
[Key]
|
[Key]
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public Guid ParentId { get; set; }
|
||||||
|
|
||||||
|
public DateTimeOffset DateAddedToHistory { get; set; }
|
||||||
|
|
||||||
|
public string? InitiatorIp { get; set; }
|
||||||
|
|
||||||
|
public ParrComponentsEnum? InitiatorParrComponentId { get; set; }
|
||||||
|
|
||||||
|
public string? InitiatorComment { get; set; }
|
||||||
|
|
||||||
|
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
public DateTimeOffset DateCreated { get; set; }
|
public DateTimeOffset DateCreated { get; set; }
|
||||||
|
|
||||||
public DateTimeOffset? DateModified { get; set; }
|
public DateTimeOffset? DateModified { get; set; }
|
||||||
|
|
||||||
public Guid TemplateId { get; set; }
|
public required string Name { get; set; }
|
||||||
|
|
||||||
public bool IsActiveTemplate { get; set; }
|
public bool IsActiveTemplate { get; set; }
|
||||||
|
|
||||||
@@ -28,8 +40,9 @@ namespace PARR.DAL.Models
|
|||||||
|
|
||||||
public DateTimeOffset NextRun { get; set; }
|
public DateTimeOffset NextRun { get; set; }
|
||||||
|
|
||||||
//[ForeignKey(nameof(TemplateId))]
|
|
||||||
//public Template? Template { get; set; }
|
[ForeignKey(nameof(ParentId))]
|
||||||
|
public Template? Template { get; set; }
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.ChangeTracking;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using PARR.DAL.Context;
|
using PARR.DAL.Context;
|
||||||
using PARR.DAL.DomainModels;
|
using PARR.DAL.DomainModels;
|
||||||
using PARR.DAL.Models;
|
using PARR.DAL.Models;
|
||||||
using PARR.DAL.Models.Base;
|
using PARR.DAL.Models.Base;
|
||||||
|
using PARR.DAL.Models.Base.History;
|
||||||
|
using PARR.DAL.Models.Base.History.Base;
|
||||||
using PARR.DAL.Services.Interfaces.Base;
|
using PARR.DAL.Services.Interfaces.Base;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
namespace PARR.DAL.Services.Abstracts
|
namespace PARR.DAL.Services.Abstracts
|
||||||
{
|
{
|
||||||
@@ -38,39 +42,17 @@ namespace PARR.DAL.Services.Abstracts
|
|||||||
|
|
||||||
public async Task<bool> CommitAsync()
|
public async Task<bool> CommitAsync()
|
||||||
{
|
{
|
||||||
#region test
|
var modifiedEntrities = EntitiContext.ChangeTracker.Entries()
|
||||||
////https://stackoverflow.com/questions/53064528/entityframework-core-get-changes-occured-in-entity-and-related-data
|
.Where(t => t.State == EntityState.Modified/* || t.State == EntityState.Deleted*/);
|
||||||
//var modifiedEntrities = EntitiContext.ChangeTracker.Entries()
|
|
||||||
// .Where(t => t.State == EntityState.Modified || t.State == EntityState.Deleted);
|
|
||||||
|
|
||||||
//foreach (var change in modifiedEntrities)
|
foreach (var obj in modifiedEntrities)
|
||||||
//{
|
{
|
||||||
// ////var type = change.Entity.GetType();
|
// Если нунжо, обновляем дату изменения
|
||||||
// ////var userType = typeof(User);
|
DateModifiedResolver(obj);
|
||||||
// if (change.Entity.GetType() == typeof(User))
|
|
||||||
// {
|
|
||||||
// // это пользователь
|
|
||||||
// var user = change.Entity as User;
|
|
||||||
// if (user!.Name == "string")
|
|
||||||
// {
|
|
||||||
// //user.LastLogon = DateTimeOffset.UtcNow;
|
|
||||||
// user.Description = "Новый description " + DateTime.Now.Microsecond;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
//Если нужно, пишем историю
|
||||||
|
TableHistoryResolver(obj);
|
||||||
// // интерфейс IBase?
|
}
|
||||||
// //if (change.Entity.GetType().IsAssignableFrom(typeof(IBase)))
|
|
||||||
|
|
||||||
// if (change.Entity.GetType().GetInterface(nameof(IBase)) != null)
|
|
||||||
// {
|
|
||||||
// (change.Entity as IBase)!.DateModified = DateTimeOffset.UtcNow;
|
|
||||||
// }
|
|
||||||
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -84,6 +66,151 @@ namespace PARR.DAL.Services.Abstracts
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Обновления DateModified у таблиц с IBase
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj"></param>
|
||||||
|
private void DateModifiedResolver(EntityEntry obj)
|
||||||
|
{
|
||||||
|
if (obj.Entity is IBase)
|
||||||
|
(obj.Entity as IBase)!.DateModified = DateTimeOffset.UtcNow;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// При необходимости, записывать историю таблиц
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj"></param>
|
||||||
|
private void TableHistoryResolver(EntityEntry obj)
|
||||||
|
{
|
||||||
|
var myHistoryInterface = obj.Entity.GetType().GetInterfaces()
|
||||||
|
.Where(t => t.IsGenericType)
|
||||||
|
.Where(t => t.GetGenericTypeDefinition() == typeof(IMyHistory<>))
|
||||||
|
.FirstOrDefault();
|
||||||
|
|
||||||
|
// у этого объекта нет интерфейса IMyHistory<>. Не ведем историю
|
||||||
|
if (myHistoryInterface == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// !!! Эта таблица хочет хранить историю !!!
|
||||||
|
|
||||||
|
// Получаем тип таблицы где хранится история
|
||||||
|
var historyType = myHistoryInterface.GetGenericArguments().First();
|
||||||
|
var historyProps = historyType.GetProperties(/*BindingFlags.DeclaredOnly | */ /*BindingFlags.Public*/).ToList();
|
||||||
|
|
||||||
|
var historyInstance = Activator.CreateInstance(historyType);
|
||||||
|
if (historyInstance == null)
|
||||||
|
{
|
||||||
|
logger.LogError($"Не смог создать инстанс для ведения истории {historyType.Name}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Заполняем поля истории, полями которые есть в исходной таблице
|
||||||
|
FillHistoryProps(obj, ref historyInstance, historyProps);
|
||||||
|
|
||||||
|
|
||||||
|
// Заполняем поля интерфейса IHistoryTable
|
||||||
|
|
||||||
|
// Заполняем Id
|
||||||
|
|
||||||
|
|
||||||
|
// EntitiContext.Add(historyInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Заполнить объект истории
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="originalObj"></param>
|
||||||
|
/// <param name="historyInstance"></param>
|
||||||
|
/// <param name="propsList"></param>
|
||||||
|
private void FillHistoryProps(EntityEntry originalObj, ref object historyInstance, List<PropertyInfo> propsList)
|
||||||
|
{
|
||||||
|
foreach (var prop in propsList)
|
||||||
|
{
|
||||||
|
if (originalObj.OriginalValues.Properties.FirstOrDefault(t => t.Name == prop.Name) == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var sourceObjProp = originalObj.Property(prop.Name);
|
||||||
|
if (sourceObjProp == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Смотрим, если это Id, записываем его в ParentId
|
||||||
|
var histPropName = prop.Name == nameof(IBase.Id) ? nameof(IHistoryTable.ParentId) : prop.Name;
|
||||||
|
|
||||||
|
var histProp = historyInstance.GetType().GetProperty(histPropName);
|
||||||
|
if (histProp == null) continue;
|
||||||
|
|
||||||
|
//сравним типы
|
||||||
|
if (sourceObjProp.Metadata.PropertyInfo?.PropertyType != histProp.PropertyType)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var origValues = originalObj.Property(prop.Name).OriginalValue;
|
||||||
|
histProp.SetValue(historyInstance, origValues);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//private void SaveHistory(EntityEntry obj)
|
||||||
|
//{
|
||||||
|
// // пока просто попробуем для шаблонов
|
||||||
|
// if (obj.Entity is Template == false)
|
||||||
|
// return;
|
||||||
|
|
||||||
|
// var template = (Template)obj.Entity;
|
||||||
|
// // https://stackoverflow.com/questions/15012621/how-to-get-original-entity-from-changetracker
|
||||||
|
// var history = new TemplateHistory();
|
||||||
|
// // {
|
||||||
|
// history.Id = Guid.NewGuid();
|
||||||
|
// history.ParentId = template.Id;
|
||||||
|
// history.DateAddedToHistory = DateTimeOffset.UtcNow;
|
||||||
|
// history.InitiatorIp = null;
|
||||||
|
// history.InitiatorParrComponentId = null;
|
||||||
|
// history.InitiatorComment = null;
|
||||||
|
// //---
|
||||||
|
// //DateModified="",
|
||||||
|
// //Name ="",
|
||||||
|
// //IsActiveTemplate = null,
|
||||||
|
// //IsActiveSchedule = null,
|
||||||
|
// //LastRun = null,
|
||||||
|
// //NextRun = null
|
||||||
|
|
||||||
|
// // DateModified = template.DateModified,
|
||||||
|
// // Name = template.Name,
|
||||||
|
// // IsActiveTemplate = template.IsActiveTemplate,
|
||||||
|
// // IsActiveSchedule = template.IsActiveSchedule,
|
||||||
|
// // LastRun = template.LastRun,
|
||||||
|
// // NextRun = template.NextRun
|
||||||
|
// //};
|
||||||
|
|
||||||
|
// // obj.OriginalValues.GetValue
|
||||||
|
|
||||||
|
// //ITemplateBase хочу получить все поля из интерфейса, потом заполнить по ним в хистори
|
||||||
|
// var interfaceType = typeof(ITemplateGeneralProps);
|
||||||
|
// foreach (var prop in interfaceType.GetProperties())
|
||||||
|
// {
|
||||||
|
// var propName = prop.Name;
|
||||||
|
// //var propType = prop.PropertyType;
|
||||||
|
|
||||||
|
// var originalPropValue = obj.OriginalValues.GetValue<object>(propName);
|
||||||
|
|
||||||
|
// var histProp = history.GetType().GetProperty(propName);
|
||||||
|
// histProp.SetValue(histProp, originalPropValue);
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// EntitiContext.Add(history);
|
||||||
|
|
||||||
|
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public virtual async Task<bool> CreateAsync(T obj)
|
public virtual async Task<bool> CreateAsync(T obj)
|
||||||
{
|
{
|
||||||
obj.DateCreated = DateTimeOffset.UtcNow;
|
obj.DateCreated = DateTimeOffset.UtcNow;
|
||||||
|
|||||||
Reference in New Issue
Block a user