feat: Добавлены таблицы и сервисы для логирования работы робота. Обновлена таблица templates.

This commit is contained in:
Mikhail Trubnikov
2023-10-03 14:30:54 +10:00
parent e2b1caefe3
commit c32bc74a2c
24 changed files with 4466 additions and 28 deletions

View File

@@ -5,7 +5,7 @@ using PARR.API.Contracts.V1;
using PARR.API.Contracts.V1.Responses; using PARR.API.Contracts.V1.Responses;
using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Contracts.V1.Responses.Base;
using PARR.API.Controllers.V1.Base; using PARR.API.Controllers.V1.Base;
using PARR.DAL.Services; using PARR.DAL.Services.Interfaces;
namespace PARR.API.Controllers.V1 namespace PARR.API.Controllers.V1
{ {

View File

@@ -34,6 +34,7 @@ namespace PARR.DAL.Context
public DbSet<RawDataEK> RawDataEKs { get; set; } public DbSet<RawDataEK> RawDataEKs { get; set; }
public DbSet<Template> Templates { get; set; } public DbSet<Template> Templates { get; set; }
public DbSet<StatusTemplate> StatusTemplates { get; set; } public DbSet<StatusTemplate> StatusTemplates { get; set; }
public DbSet<RobotStatus> RobotStatuses { get; set; }
public DbSet<Process> Processes { get; set; } public DbSet<Process> Processes { get; set; }
public DbSet<Subprocess> Subprocesses { get; set; } public DbSet<Subprocess> Subprocesses { get; set; }
@@ -44,6 +45,9 @@ namespace PARR.DAL.Context
public DbSet<Models.Setting> Setting { get; set; } public DbSet<Models.Setting> Setting { get; set; }
public DbSet<RobotHistoryLevel> RobotHistoryLevels { get; set; }
public DbSet<RobotTemplateHistory> RobotTemplateHistories { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
{ {
@@ -120,7 +124,9 @@ namespace PARR.DAL.Context
new { Name = nameof(SettingsFromDb.Initiator), Description = "Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.", Value = "КУЗНЕЦОВ МИХАИЛ ВАЛЕРЬЕВИЧ (IVC_KUZNETSOVMV@DVGD.OAO.RZD)" }, new { Name = nameof(SettingsFromDb.Initiator), Description = "Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.", Value = "КУЗНЕЦОВ МИХАИЛ ВАЛЕРЬЕВИЧ (IVC_KUZNETSOVMV@DVGD.OAO.RZD)" },
new { Name = nameof(SettingsFromDb.ClosingCode), Description = "Код закрытия регламентной работы, указывается при создании шаблона в ЕСПП.", Value = "выполнен" }, new { Name = nameof(SettingsFromDb.ClosingCode), Description = "Код закрытия регламентной работы, указывается при создании шаблона в ЕСПП.", Value = "выполнен" },
new { Name = nameof(SettingsFromDb.Category), Description = "Категория создаваемого объекта в ЕСПП", Value = "регламентная работа" }, new { Name = nameof(SettingsFromDb.Category), Description = "Категория создаваемого объекта в ЕСПП", Value = "регламентная работа" },
new { Name = nameof(SettingsFromDb.TemplatePrefixName), Description = "Префикс имени шаблона в ЕСПП", Value = "ПАРР-ДВС-ПТК" } new { Name = nameof(SettingsFromDb.TemplatePrefixName), Description = "Префикс имени шаблона в ЕСПП", Value = "ПАРР-ДВС-ПТК" },
new { Name = nameof(SettingsFromDb.RobotAttemptsNumber), Description = "Количество попыток выполнения задания роботом", Value = "3" },
new { Name = nameof(SettingsFromDb.RobotWaitTime), Description = "Время ожидания выполнения роботом задания", Value = "00:15:00" }
); );
}); });
@@ -161,6 +167,28 @@ namespace PARR.DAL.Context
); );
}); });
modelBuilder.Entity<RobotStatus>(f =>
{
f.HasData(
new { Code = (int)RobotStatusEnum.Wait, Name = RobotStatusEnum.Wait.ToString(), Description = "Ожидание, ждет пока робот возьмет в работу." },
new { Code = (int)RobotStatusEnum.InProgress, Name = RobotStatusEnum.InProgress.ToString(), Description = "Робот взял в работу." },
new { Code = (int)RobotStatusEnum.Error, Name = RobotStatusEnum.Error.ToString(), Description = "Ошибка отработки роботом. Требует ручного вмешательства." },
new { Code = (int)RobotStatusEnum.Complete, Name = RobotStatusEnum.Complete.ToString(), Description = "Робот успешно отработал." }
);
});
modelBuilder.Entity<RobotHistoryLevel>(f =>
{
f.HasData(
new { Level = (int)RobotHistoryLevelEnum.Start, Name = RobotHistoryLevelEnum.Start.ToString(), Description = "Робот начал работу " },
new { Level = (int)RobotHistoryLevelEnum.Inforamtion, Name = RobotHistoryLevelEnum.Inforamtion.ToString(), Description = "Информация" },
new { Level = (int)RobotHistoryLevelEnum.Error, Name = RobotHistoryLevelEnum.Error.ToString(), Description = "Ошибка" },
new { Level = (int)RobotHistoryLevelEnum.Complete, Name = RobotHistoryLevelEnum.Complete.ToString(), Description = "Успешно завершил работу" },
new { Level = (int)RobotHistoryLevelEnum.Breake, Name = RobotHistoryLevelEnum.Breake.ToString(), Description = "Завершил работу с ошибкой (не отработал до конца)" }
);
});
} }

View File

@@ -0,0 +1,33 @@
namespace PARR.DAL.Contracts
{
/// <summary>
/// Уровень логов работы робота
/// </summary>
public enum RobotHistoryLevelEnum
{
/// <summary>
/// Робот начал работу
/// </summary>
Start = 1,
/// <summary>
/// Информация
/// </summary>
Inforamtion = 5,
/// <summary>
/// Ошибка
/// </summary>
Error = 10,
/// <summary>
/// Успешно завершил работу
/// </summary>
Complete = 15,
/// <summary>
/// Завершил работу с ошибкой (не отработал до конца)
/// </summary>
Breake = 20
}
}

View File

@@ -0,0 +1,28 @@
namespace PARR.DAL.Contracts
{
/// <summary>
/// Статусы работы робота PARR.DAL.Models.RobotStatus
/// </summary>
public enum RobotStatusEnum
{
/// <summary>
/// Ожидание, ждет пока робот возьмет в работу
/// </summary>
Wait = 11,
/// <summary>
/// Робот взял в работу
/// </summary>
InProgress = 22,
/// <summary>
/// Ошибка отработки роботом. Требует ручного вмешательства.
/// </summary>
Error = 33,
/// <summary>
/// Робот успешно отработал
/// </summary>
Complete = 44
}
}

View File

@@ -27,5 +27,15 @@
/// Префикс имени шаблона в ЕСПП /// Префикс имени шаблона в ЕСПП
/// </summary> /// </summary>
public string TemplatePrefixName { get; set; } = string.Empty; public string TemplatePrefixName { get; set; } = string.Empty;
/// <summary>
/// Количество попыток выполнения задания роботом
/// </summary>
public int RobotAttemptsNumber { get; set; }
/// <summary>
/// Время ожидания выполнения роботом задания
/// </summary>
public TimeSpan RobotWaitTime { get; set; }
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,187 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
namespace PARR.DAL.Migrations
{
/// <inheritdoc />
public partial class TblsRobotHistoryAndTEmplates : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "RobotAttemptsNumber",
table: "Templates",
type: "integer",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<DateTimeOffset>(
name: "RobotLastStatusUpdated",
table: "Templates",
type: "timestamp with time zone",
nullable: false,
defaultValue: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
migrationBuilder.AddColumn<int>(
name: "RobotStatusCode",
table: "Templates",
type: "integer",
nullable: false,
defaultValue: 0);
migrationBuilder.CreateTable(
name: "RobotHistoryLevels",
columns: table => new
{
Level = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Name = table.Column<string>(type: "text", nullable: false),
Description = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_RobotHistoryLevels", x => x.Level);
});
migrationBuilder.CreateTable(
name: "RobotStatuses",
columns: table => new
{
Code = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Name = table.Column<string>(type: "text", nullable: false),
Description = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_RobotStatuses", x => x.Code);
});
migrationBuilder.CreateTable(
name: "RobotTemplateHistories",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
DateCreated = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: false),
HistoryLevel = table.Column<int>(type: "integer", nullable: false),
RobotMessage = table.Column<string>(type: "text", nullable: true),
EsppMessage = table.Column<string>(type: "text", nullable: true),
TemplateId = table.Column<Guid>(type: "uuid", nullable: false),
TemplateStatusCode = table.Column<int>(type: "integer", nullable: false),
IdSeries = table.Column<Guid>(type: "uuid", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_RobotTemplateHistories", x => x.Id);
table.ForeignKey(
name: "FK_RobotTemplateHistories_RobotHistoryLevels_HistoryLevel",
column: x => x.HistoryLevel,
principalTable: "RobotHistoryLevels",
principalColumn: "Level",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_RobotTemplateHistories_StatusTemplates_TemplateStatusCode",
column: x => x.TemplateStatusCode,
principalTable: "StatusTemplates",
principalColumn: "Code",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_RobotTemplateHistories_Templates_TemplateId",
column: x => x.TemplateId,
principalTable: "Templates",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.InsertData(
table: "RobotHistoryLevels",
columns: new[] { "Level", "Description", "Name" },
values: new object[,]
{
{ 1, "Робот начал работу ", "Start" },
{ 5, "Информация", "Inforamtion" },
{ 10, "Ошибка", "Error" },
{ 15, "Успешно завершил работу", "Complete" },
{ 20, "Завершил работу с ошибкой (не отработал до конца)", "Breake" }
});
migrationBuilder.InsertData(
table: "RobotStatuses",
columns: new[] { "Code", "Description", "Name" },
values: new object[,]
{
{ 11, "Ожидание, ждет пока робот возьмет в работу.", "Wait" },
{ 22, "Робот взял в работу.", "InProgress" },
{ 33, "Ошибка отработки роботом. Требует ручного вмешательства.", "Error" },
{ 44, "Робот успешно отработал.", "Complete" }
});
migrationBuilder.CreateIndex(
name: "IX_Templates_RobotStatusCode",
table: "Templates",
column: "RobotStatusCode");
migrationBuilder.CreateIndex(
name: "IX_RobotTemplateHistories_HistoryLevel",
table: "RobotTemplateHistories",
column: "HistoryLevel");
migrationBuilder.CreateIndex(
name: "IX_RobotTemplateHistories_TemplateId",
table: "RobotTemplateHistories",
column: "TemplateId");
migrationBuilder.CreateIndex(
name: "IX_RobotTemplateHistories_TemplateStatusCode",
table: "RobotTemplateHistories",
column: "TemplateStatusCode");
migrationBuilder.AddForeignKey(
name: "FK_Templates_RobotStatuses_RobotStatusCode",
table: "Templates",
column: "RobotStatusCode",
principalTable: "RobotStatuses",
principalColumn: "Code",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Templates_RobotStatuses_RobotStatusCode",
table: "Templates");
migrationBuilder.DropTable(
name: "RobotStatuses");
migrationBuilder.DropTable(
name: "RobotTemplateHistories");
migrationBuilder.DropTable(
name: "RobotHistoryLevels");
migrationBuilder.DropIndex(
name: "IX_Templates_RobotStatusCode",
table: "Templates");
migrationBuilder.DropColumn(
name: "RobotAttemptsNumber",
table: "Templates");
migrationBuilder.DropColumn(
name: "RobotLastStatusUpdated",
table: "Templates");
migrationBuilder.DropColumn(
name: "RobotStatusCode",
table: "Templates");
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,39 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
namespace PARR.DAL.Migrations
{
/// <inheritdoc />
public partial class TbslSettingsUpd : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.InsertData(
table: "Settings",
columns: new[] { "Name", "Description", "Value" },
values: new object[,]
{
{ "RobotAttemptsNumber", "Количество попыток выполнения задания роботом", "3" },
{ "RobotWaitTime", "Время ожидания выполнения роботом задания", "00:15:00" }
});
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DeleteData(
table: "Settings",
keyColumn: "Name",
keyValue: "RobotAttemptsNumber");
migrationBuilder.DeleteData(
table: "Settings",
keyColumn: "Name",
keyValue: "RobotWaitTime");
}
}
}

View File

@@ -392,7 +392,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("ApplicationTypeId"); b.HasIndex("ApplicationTypeId");
b.ToTable("Applications"); b.ToTable("Applications", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.ApplicationInHost", b => modelBuilder.Entity("PARR.DAL.Models.ApplicationInHost", b =>
@@ -419,7 +419,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("HostId"); b.HasIndex("HostId");
b.ToTable("ApplicationsInHost"); b.ToTable("ApplicationsInHost", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.ApplicationType", b => modelBuilder.Entity("PARR.DAL.Models.ApplicationType", b =>
@@ -443,7 +443,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id"); b.HasKey("Id");
b.ToTable("ApplicationTypes"); b.ToTable("ApplicationTypes", (string)null);
b.HasData( b.HasData(
new new
@@ -510,7 +510,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("WorkId", "ApplicationId") b.HasIndex("WorkId", "ApplicationId")
.IsUnique(); .IsUnique();
b.ToTable("ApplicationsInWorks"); b.ToTable("ApplicationsInWorks", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.EkStatus", b => modelBuilder.Entity("PARR.DAL.Models.EkStatus", b =>
@@ -527,7 +527,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Code"); b.HasKey("Code");
b.ToTable("EkStatuses"); b.ToTable("EkStatuses", (string)null);
b.HasData( b.HasData(
new new
@@ -607,7 +607,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("ResponseAreaCode"); b.HasIndex("ResponseAreaCode");
b.ToTable("Hosts"); b.ToTable("Hosts", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.Process", b => modelBuilder.Entity("PARR.DAL.Models.Process", b =>
@@ -631,7 +631,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id"); b.HasKey("Id");
b.ToTable("Processes"); b.ToTable("Processes", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.ResponseArea", b => modelBuilder.Entity("PARR.DAL.Models.ResponseArea", b =>
@@ -648,7 +648,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Code"); b.HasKey("Code");
b.ToTable("ResponseAreas"); b.ToTable("ResponseAreas", (string)null);
b.HasData( b.HasData(
new new
@@ -738,6 +738,144 @@ namespace PARR.DAL.Migrations
}); });
}); });
modelBuilder.Entity("PARR.DAL.Models.RobotHistoryLevel", b =>
{
b.Property<int>("Level")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Level"));
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Level");
b.ToTable("RobotHistoryLevels", (string)null);
b.HasData(
new
{
Level = 1,
Description = "Робот начал работу ",
Name = "Start"
},
new
{
Level = 5,
Description = "Информация",
Name = "Inforamtion"
},
new
{
Level = 10,
Description = "Ошибка",
Name = "Error"
},
new
{
Level = 15,
Description = "Успешно завершил работу",
Name = "Complete"
},
new
{
Level = 20,
Description = "Завершил работу с ошибкой (не отработал до конца)",
Name = "Breake"
});
});
modelBuilder.Entity("PARR.DAL.Models.RobotStatus", b =>
{
b.Property<int>("Code")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Code"));
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Code");
b.ToTable("RobotStatuses", (string)null);
b.HasData(
new
{
Code = 11,
Description = "Ожидание, ждет пока робот возьмет в работу.",
Name = "Wait"
},
new
{
Code = 22,
Description = "Робот взял в работу.",
Name = "InProgress"
},
new
{
Code = 33,
Description = "Ошибка отработки роботом. Требует ручного вмешательства.",
Name = "Error"
},
new
{
Code = 44,
Description = "Робот успешно отработал.",
Name = "Complete"
});
});
modelBuilder.Entity("PARR.DAL.Models.RobotTemplateHistory", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<DateTimeOffset>("DateCreated")
.HasColumnType("timestamp with time zone");
b.Property<string>("EsppMessage")
.HasColumnType("text");
b.Property<int>("HistoryLevel")
.HasColumnType("integer");
b.Property<Guid>("IdSeries")
.HasColumnType("uuid");
b.Property<string>("RobotMessage")
.HasColumnType("text");
b.Property<Guid>("TemplateId")
.HasColumnType("uuid");
b.Property<int>("TemplateStatusCode")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("HistoryLevel");
b.HasIndex("TemplateId");
b.HasIndex("TemplateStatusCode");
b.ToTable("RobotTemplateHistories", (string)null);
});
modelBuilder.Entity("PARR.DAL.Models.Setting", b => modelBuilder.Entity("PARR.DAL.Models.Setting", b =>
{ {
b.Property<string>("Name") b.Property<string>("Name")
@@ -753,7 +891,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Name"); b.HasKey("Name");
b.ToTable("Settings"); b.ToTable("Settings", (string)null);
b.HasData( b.HasData(
new new
@@ -779,6 +917,18 @@ namespace PARR.DAL.Migrations
Name = "TemplatePrefixName", Name = "TemplatePrefixName",
Description = "Префикс имени шаблона в ЕСПП", Description = "Префикс имени шаблона в ЕСПП",
Value = "ПАРР-ДВС-ПТК" Value = "ПАРР-ДВС-ПТК"
},
new
{
Name = "RobotAttemptsNumber",
Description = "Количество попыток выполнения задания роботом",
Value = "3"
},
new
{
Name = "RobotWaitTime",
Description = "Время ожидания выполнения роботом задания",
Value = "00:15:00"
}); });
}); });
@@ -800,7 +950,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Code"); b.HasKey("Code");
b.ToTable("StatusTemplates"); b.ToTable("StatusTemplates", (string)null);
b.HasData( b.HasData(
new new
@@ -849,7 +999,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("ProcessId"); b.HasIndex("ProcessId");
b.ToTable("Subprocesses"); b.ToTable("Subprocesses", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.Template", b => modelBuilder.Entity("PARR.DAL.Models.Template", b =>
@@ -877,6 +1027,15 @@ namespace PARR.DAL.Migrations
.IsRequired() .IsRequired()
.HasColumnType("text"); .HasColumnType("text");
b.Property<int>("RobotAttemptsNumber")
.HasColumnType("integer");
b.Property<DateTimeOffset>("RobotLastStatusUpdated")
.HasColumnType("timestamp with time zone");
b.Property<int>("RobotStatusCode")
.HasColumnType("integer");
b.Property<int>("StatusCode") b.Property<int>("StatusCode")
.HasColumnType("integer"); .HasColumnType("integer");
@@ -889,9 +1048,11 @@ namespace PARR.DAL.Migrations
b.HasIndex("Name") b.HasIndex("Name")
.IsUnique(); .IsUnique();
b.HasIndex("RobotStatusCode");
b.HasIndex("StatusCode"); b.HasIndex("StatusCode");
b.ToTable("Templates"); b.ToTable("Templates", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.Tnk", b => modelBuilder.Entity("PARR.DAL.Models.Tnk", b =>
@@ -920,7 +1081,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("SubprocessId"); b.HasIndex("SubprocessId");
b.ToTable("Tnks"); b.ToTable("Tnks", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.V1.V1_Application", b => modelBuilder.Entity("PARR.DAL.Models.V1.V1_Application", b =>
@@ -946,7 +1107,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("ApplicationTypeId"); b.HasIndex("ApplicationTypeId");
b.ToTable("V1_Applications"); b.ToTable("V1_Applications", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.V1.V1_ApplicationInHost", b => modelBuilder.Entity("PARR.DAL.Models.V1.V1_ApplicationInHost", b =>
@@ -978,7 +1139,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("V1_ApplicationId"); b.HasIndex("V1_ApplicationId");
b.ToTable("V1_ApplicationsInHost"); b.ToTable("V1_ApplicationsInHost", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.V1.V1_ApplicationType", b => modelBuilder.Entity("PARR.DAL.Models.V1.V1_ApplicationType", b =>
@@ -1007,7 +1168,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("V1_ApplicationTypeId"); b.HasIndex("V1_ApplicationTypeId");
b.ToTable("V1_ApplicationTypes"); b.ToTable("V1_ApplicationTypes", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.V1.V1_Host", b => modelBuilder.Entity("PARR.DAL.Models.V1.V1_Host", b =>
@@ -1046,7 +1207,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id"); b.HasKey("Id");
b.ToTable("V1_Hosts"); b.ToTable("V1_Hosts", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.V1.V1_Job", b => modelBuilder.Entity("PARR.DAL.Models.V1.V1_Job", b =>
@@ -1100,7 +1261,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("JobTypeId"); b.HasIndex("JobTypeId");
b.ToTable("V1_Jobs"); b.ToTable("V1_Jobs", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.V1.V1_JobCategory", b => modelBuilder.Entity("PARR.DAL.Models.V1.V1_JobCategory", b =>
@@ -1124,7 +1285,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id"); b.HasKey("Id");
b.ToTable("V1_JobCategorys"); b.ToTable("V1_JobCategorys", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.V1.V1_JobJournal", b => modelBuilder.Entity("PARR.DAL.Models.V1.V1_JobJournal", b =>
@@ -1168,7 +1329,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("JobStatusId"); b.HasIndex("JobStatusId");
b.ToTable("V1_JobJournals"); b.ToTable("V1_JobJournals", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.V1.V1_JobMode", b => modelBuilder.Entity("PARR.DAL.Models.V1.V1_JobMode", b =>
@@ -1189,7 +1350,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id"); b.HasKey("Id");
b.ToTable("V1_JobModes"); b.ToTable("V1_JobModes", (string)null);
b.HasData( b.HasData(
new new
@@ -1227,7 +1388,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id"); b.HasKey("Id");
b.ToTable("V1_JobStatuses"); b.ToTable("V1_JobStatuses", (string)null);
b.HasData( b.HasData(
new new
@@ -1267,7 +1428,7 @@ namespace PARR.DAL.Migrations
b.HasKey("Id"); b.HasKey("Id");
b.ToTable("V1_JobTypes"); b.ToTable("V1_JobTypes", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.Work", b => modelBuilder.Entity("PARR.DAL.Models.Work", b =>
@@ -1296,7 +1457,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("TnkId"); b.HasIndex("TnkId");
b.ToTable("Works"); b.ToTable("Works", (string)null);
}); });
modelBuilder.Entity("PARR.DAL.Models.Application", b => modelBuilder.Entity("PARR.DAL.Models.Application", b =>
@@ -1367,6 +1528,33 @@ namespace PARR.DAL.Migrations
b.Navigation("ResponseArea"); b.Navigation("ResponseArea");
}); });
modelBuilder.Entity("PARR.DAL.Models.RobotTemplateHistory", b =>
{
b.HasOne("PARR.DAL.Models.RobotHistoryLevel", "RobotHistoryLevel")
.WithMany("robotTemplateHistories")
.HasForeignKey("HistoryLevel")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PARR.DAL.Models.Template", "Template")
.WithMany("RobotTemplateHistories")
.HasForeignKey("TemplateId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PARR.DAL.Models.StatusTemplate", "StatusTemplate")
.WithMany("RobotTemplateHistories")
.HasForeignKey("TemplateStatusCode")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("RobotHistoryLevel");
b.Navigation("StatusTemplate");
b.Navigation("Template");
});
modelBuilder.Entity("PARR.DAL.Models.Subprocess", b => modelBuilder.Entity("PARR.DAL.Models.Subprocess", b =>
{ {
b.HasOne("PARR.DAL.Models.Process", "Process") b.HasOne("PARR.DAL.Models.Process", "Process")
@@ -1392,6 +1580,12 @@ namespace PARR.DAL.Migrations
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
.IsRequired(); .IsRequired();
b.HasOne("PARR.DAL.Models.RobotStatus", "RobotStatus")
.WithMany("Templates")
.HasForeignKey("RobotStatusCode")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("PARR.DAL.Models.StatusTemplate", "StatusTemplate") b.HasOne("PARR.DAL.Models.StatusTemplate", "StatusTemplate")
.WithMany("Templates") .WithMany("Templates")
.HasForeignKey("StatusCode") .HasForeignKey("StatusCode")
@@ -1402,6 +1596,8 @@ namespace PARR.DAL.Migrations
b.Navigation("Host"); b.Navigation("Host");
b.Navigation("RobotStatus");
b.Navigation("StatusTemplate"); b.Navigation("StatusTemplate");
}); });
@@ -1565,8 +1761,20 @@ namespace PARR.DAL.Migrations
b.Navigation("Hosts"); b.Navigation("Hosts");
}); });
modelBuilder.Entity("PARR.DAL.Models.RobotHistoryLevel", b =>
{
b.Navigation("robotTemplateHistories");
});
modelBuilder.Entity("PARR.DAL.Models.RobotStatus", b =>
{
b.Navigation("Templates");
});
modelBuilder.Entity("PARR.DAL.Models.StatusTemplate", b => modelBuilder.Entity("PARR.DAL.Models.StatusTemplate", b =>
{ {
b.Navigation("RobotTemplateHistories");
b.Navigation("Templates"); b.Navigation("Templates");
}); });
@@ -1575,6 +1783,11 @@ namespace PARR.DAL.Migrations
b.Navigation("Tnks"); b.Navigation("Tnks");
}); });
modelBuilder.Entity("PARR.DAL.Models.Template", b =>
{
b.Navigation("RobotTemplateHistories");
});
modelBuilder.Entity("PARR.DAL.Models.Tnk", b => modelBuilder.Entity("PARR.DAL.Models.Tnk", b =>
{ {
b.Navigation("Works"); b.Navigation("Works");

View File

@@ -0,0 +1,23 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models
{
/// <summary>
/// Уровень логов работы робота
/// </summary>
[Table("RobotHistoryLevels")]
public class RobotHistoryLevel
{
[Key]
public int Level { get; set; }
public required string Name { get; set; }
public required string Description { get; set; }
public ICollection<RobotTemplateHistory> robotTemplateHistories { get; set; } = new HashSet<RobotTemplateHistory>();
}
}

View File

@@ -0,0 +1,23 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models
{
/// <summary>
/// Статус работы робота
/// </summary>
[Table("RobotStatuses")]
public class RobotStatus
{
[Key]
public int Code { get; set; }
[Required]
public string Name { get; set; } = string.Empty;
[Required]
public string Description { get; set; } = string.Empty;
public ICollection<Template> Templates { get; set; } = new HashSet<Template>();
}
}

View File

@@ -0,0 +1,46 @@
using PARR.DAL.Models.Base;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models
{
/// <summary>
/// История работы робота по управлению шаблонами в ЕСПП
/// </summary>
[Table("RobotTemplateHistories")]
public class RobotTemplateHistory : IBase
{
[Key]
public Guid Id { get; set; }
public DateTimeOffset DateCreated { get; set; }
[NotMapped]
public DateTimeOffset? DateModified { get; set; }
public int HistoryLevel { get; set; }
public string? RobotMessage { get; set; }
public string? EsppMessage { get; set; }
public Guid TemplateId { get; set; }
public int TemplateStatusCode { get; set; }
/// <summary>
/// Уникальный идентификатор серии выполнения, нужен для сопоставления истории
/// </summary>
public Guid IdSeries { get; set; }
[ForeignKey(nameof(HistoryLevel))]
public RobotHistoryLevel? RobotHistoryLevel { get; set; }
[ForeignKey(nameof(TemplateId))]
public Template? Template { get; set; }
[ForeignKey(nameof(TemplateStatusCode))]
public StatusTemplate? StatusTemplate { get; set; }
}
}

View File

@@ -3,6 +3,9 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models namespace PARR.DAL.Models
{ {
/// <summary>
/// Статус шаблона. Что нужно сделать роботу в ЕСПП
/// </summary>
[Table("StatusTemplates")] [Table("StatusTemplates")]
public class StatusTemplate public class StatusTemplate
{ {
@@ -16,5 +19,7 @@ namespace PARR.DAL.Models
public string Description { get; set; } = string.Empty; public string Description { get; set; } = string.Empty;
public ICollection<Template> Templates { get; set; } = new HashSet<Template>(); public ICollection<Template> Templates { get; set; } = new HashSet<Template>();
public ICollection<RobotTemplateHistory> RobotTemplateHistories { get; set; } = new HashSet<RobotTemplateHistory>();
} }
} }

View File

@@ -20,8 +20,26 @@ namespace PARR.DAL.Models
public bool IsActive { get; set; } public bool IsActive { get; set; }
/// <summary>
/// Статус шаблона. Что нужно сделать роботу в ЕСПП
/// </summary>
public int StatusCode { get; set; } public int StatusCode { get; set; }
/// <summary>
/// Статус работы робота
/// </summary>
public int RobotStatusCode { get; set; }
/// <summary>
/// Количество попыток выполнения задания роботом
/// </summary>
public int RobotAttemptsNumber { get; set; }
/// <summary>
/// Последняя дата обновления статуса RobotStatusCode роботом
/// </summary>
public DateTimeOffset RobotLastStatusUpdated { get; set; }
[ForeignKey(nameof(StatusCode))] [ForeignKey(nameof(StatusCode))]
public StatusTemplate? StatusTemplate { get; set; } public StatusTemplate? StatusTemplate { get; set; }
@@ -38,5 +56,11 @@ namespace PARR.DAL.Models
[ForeignKey(nameof(HostId))] [ForeignKey(nameof(HostId))]
public Host? Host { get; set; } public Host? Host { get; set; }
[ForeignKey(nameof(RobotStatusCode))]
public RobotStatus? RobotStatus { get; set; }
public ICollection<RobotTemplateHistory> RobotTemplateHistories { get; set; } = new HashSet<RobotTemplateHistory>();
} }
} }

View File

@@ -4,7 +4,6 @@ using Microsoft.Extensions.DependencyInjection;
using PARR.DAL.Configurations.DbSettings; using PARR.DAL.Configurations.DbSettings;
using PARR.DAL.Context; using PARR.DAL.Context;
using PARR.DAL.Contracts; using PARR.DAL.Contracts;
using PARR.DAL.Services;
using PARR.DAL.Services.Implementation; using PARR.DAL.Services.Implementation;
using PARR.DAL.Services.Implementations; using PARR.DAL.Services.Implementations;
using PARR.DAL.Services.Implementations.AIHIT; using PARR.DAL.Services.Implementations.AIHIT;
@@ -48,6 +47,9 @@ namespace PARR.DAL
services.AddTransient<ISettingService, SettingService>(); services.AddTransient<ISettingService, SettingService>();
services.AddTransient<ITemplateService, TemplateService>(); services.AddTransient<ITemplateService, TemplateService>();
services.AddTransient<IStatusTemplateService, StatusTemplateService>(); services.AddTransient<IStatusTemplateService, StatusTemplateService>();
services.AddTransient<IRobotHistoryLevelService, RobotHistoryLevelService>();
services.AddTransient<IRobotStatusService, RobotStatusService>();
services.AddTransient<IRobotTemplateHistoryService, RobotTemplateHistoryService>();
} }
/// <summary> /// <summary>

View File

@@ -0,0 +1,21 @@
using PARR.DAL.Context;
using PARR.DAL.Models;
using PARR.DAL.Services.Interfaces;
namespace PARR.DAL.Services.Implementations
{
internal class RobotHistoryLevelService : IRobotHistoryLevelService
{
private readonly DataContext dataContext;
public RobotHistoryLevelService(DataContext dataContext)
{
this.dataContext = dataContext;
}
public IQueryable<RobotHistoryLevel> Get()
{
return dataContext.RobotHistoryLevels;
}
}
}

View File

@@ -0,0 +1,21 @@
using PARR.DAL.Context;
using PARR.DAL.Models;
using PARR.DAL.Services.Interfaces;
namespace PARR.DAL.Services.Implementations
{
internal class RobotStatusService : IRobotStatusService
{
private readonly DataContext dataContext;
public RobotStatusService(DataContext dataContext)
{
this.dataContext = dataContext;
}
public IQueryable<RobotStatus> Get()
{
return dataContext.RobotStatuses;
}
}
}

View File

@@ -0,0 +1,23 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using PARR.DAL.Context;
using PARR.DAL.Models;
using PARR.DAL.Services.Abstracts;
using PARR.DAL.Services.Interfaces;
namespace PARR.DAL.Services.Implementations
{
internal class RobotTemplateHistoryService : BaseService<RobotTemplateHistory>, IRobotTemplateHistoryService
{
private readonly DataContext dataContext;
public RobotTemplateHistoryService(DataContext dataContext, ILogger<RobotTemplateHistoryService> logger) : base(logger)
{
this.dataContext = dataContext;
}
protected override DbSet<RobotTemplateHistory> EntitySet => dataContext.RobotTemplateHistories;
protected override DataContext EntitiContext => dataContext;
}
}

View File

@@ -1,5 +1,6 @@
using PARR.DAL.Context; using PARR.DAL.Context;
using PARR.DAL.Models; using PARR.DAL.Models;
using PARR.DAL.Services.Interfaces;
namespace PARR.DAL.Services.Implementations namespace PARR.DAL.Services.Implementations
{ {

View File

@@ -0,0 +1,9 @@
using PARR.DAL.Models;
namespace PARR.DAL.Services.Interfaces
{
public interface IRobotHistoryLevelService
{
IQueryable<RobotHistoryLevel> Get();
}
}

View File

@@ -0,0 +1,9 @@
using PARR.DAL.Models;
namespace PARR.DAL.Services.Interfaces
{
public interface IRobotStatusService
{
IQueryable<RobotStatus> Get();
}
}

View File

@@ -0,0 +1,9 @@
using PARR.DAL.Models;
using PARR.DAL.Services.Interfaces.Base;
namespace PARR.DAL.Services.Interfaces
{
public interface IRobotTemplateHistoryService : IBaseService<RobotTemplateHistory>
{
}
}

View File

@@ -1,6 +1,6 @@
using PARR.DAL.Models; using PARR.DAL.Models;
namespace PARR.DAL.Services namespace PARR.DAL.Services.Interfaces
{ {
public interface IStatusTemplateService public interface IStatusTemplateService
{ {