Создана таблица StatusTemplates

This commit is contained in:
Mikhail Trubnikov
2023-09-14 17:00:56 +10:00
parent 09996a5c18
commit e634ba0143
9 changed files with 1312 additions and 21 deletions

View File

@@ -3,6 +3,7 @@ using PARR.DAL.Contracts;
using PARR.DAL.Models;
using PARR.DAL.Models.AIHIT;
using PARR.DAL.Models.V1;
using System.ComponentModel;
namespace PARR.DAL.Context
{
@@ -27,6 +28,7 @@ namespace PARR.DAL.Context
public DbSet<Setting> Settings { get; set; }
public DbSet<RawDataEK> RawDataEKs { get; set; }
public DbSet<Template> Templates { get; set; }
public DbSet<StatusTemplate> StatusTemplates { get; set; }
//public DbSet<Scheduler> Schedulers { get; set; }
//todo init application type+check migrations
@@ -72,6 +74,18 @@ namespace PARR.DAL.Context
new() { Id = new Guid("77C73C0A-8E4D-4676-B6E2-6A112F20E346"), DateCreated = dateCreated, DateModified = null, Group = AIHTITSettings.StatusGroupName, Name = "Exploitation", Value = "3-В эксплуатации", Description = "Статус актуальных ЭК" }
);
});
modelBuilder.Entity<StatusTemplate>(f =>
{
f.HasData(
new() { Code = (int)StatusTemplateEnum.Creating, Name = StatusTemplateEnum.Creating.ToString(), Description = "Создали шаблон в ПАРР" },
new() { Code = (int)StatusTemplateEnum.Updating, Name = StatusTemplateEnum.Updating.ToString(), Description = "Выявлено несоответствие. Требуется привлечение робота" },
new() { Code = (int)StatusTemplateEnum.Ok, Name = StatusTemplateEnum.Ok.ToString(), Description = "Нормальное состояние шаблона в ЕСПП и ПАРР. Шаблон в ПАРР соответствует шаблону в ЕСПП" }
);
});
}

View File

@@ -0,0 +1,9 @@
namespace PARR.DAL.Contracts
{
public enum StatusTemplateEnum
{
Creating = 10,
Updating = 20,
Ok = 30
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,101 @@
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 TblStatusTemplate : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "Status",
table: "Templates");
migrationBuilder.RenameColumn(
name: "isActive",
table: "Templates",
newName: "IsActive");
migrationBuilder.AddColumn<int>(
name: "StatusCode",
table: "Templates",
type: "integer",
nullable: false,
defaultValue: 0);
migrationBuilder.CreateTable(
name: "StatusTemplates",
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_StatusTemplates", x => x.Code);
});
migrationBuilder.InsertData(
table: "StatusTemplates",
columns: new[] { "Code", "Description", "Name" },
values: new object[,]
{
{ 10, "Создали шаблон в ПАРР", "Creating" },
{ 20, "Выявлено несоответствие. Требуется привлечение робота", "Updating" },
{ 30, "Нормальное состояние шаблона в ЕСПП и ПАРР. Шаблон в ПАРР соответствует шаблону в ЕСПП", "Ok" }
});
migrationBuilder.CreateIndex(
name: "IX_Templates_StatusCode",
table: "Templates",
column: "StatusCode");
migrationBuilder.AddForeignKey(
name: "FK_Templates_StatusTemplates_StatusCode",
table: "Templates",
column: "StatusCode",
principalTable: "StatusTemplates",
principalColumn: "Code",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Templates_StatusTemplates_StatusCode",
table: "Templates");
migrationBuilder.DropTable(
name: "StatusTemplates");
migrationBuilder.DropIndex(
name: "IX_Templates_StatusCode",
table: "Templates");
migrationBuilder.DropColumn(
name: "StatusCode",
table: "Templates");
migrationBuilder.RenameColumn(
name: "IsActive",
table: "Templates",
newName: "isActive");
migrationBuilder.AddColumn<string>(
name: "Status",
table: "Templates",
type: "text",
nullable: false,
defaultValue: "");
}
}
}

View File

@@ -377,6 +377,47 @@ namespace PARR.DAL.Migrations
b.ToTable("Hosts");
});
modelBuilder.Entity("PARR.DAL.Models.StatusTemplate", 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("StatusTemplates");
b.HasData(
new
{
Code = 10,
Description = "Создали шаблон в ПАРР",
Name = "Creating"
},
new
{
Code = 20,
Description = "Выявлено несоответствие. Требуется привлечение робота",
Name = "Updating"
},
new
{
Code = 30,
Description = "Нормальное состояние шаблона в ЕСПП и ПАРР. Шаблон в ПАРР соответствует шаблону в ЕСПП",
Name = "Ok"
});
});
modelBuilder.Entity("PARR.DAL.Models.Template", b =>
{
b.Property<Guid>("Id")
@@ -413,6 +454,9 @@ namespace PARR.DAL.Migrations
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsActive")
.HasColumnType("boolean");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
@@ -433,9 +477,8 @@ namespace PARR.DAL.Migrations
.IsRequired()
.HasColumnType("text");
b.Property<string>("Status")
.IsRequired()
.HasColumnType("text");
b.Property<int>("StatusCode")
.HasColumnType("integer");
b.Property<string>("SubProcess")
.IsRequired()
@@ -457,11 +500,10 @@ namespace PARR.DAL.Migrations
.IsRequired()
.HasColumnType("text");
b.Property<bool>("isActive")
.HasColumnType("boolean");
b.HasKey("Id");
b.HasIndex("StatusCode");
b.ToTable("Templates");
});
@@ -849,6 +891,17 @@ namespace PARR.DAL.Migrations
.HasForeignKey("ApplicationTypeId");
});
modelBuilder.Entity("PARR.DAL.Models.Template", b =>
{
b.HasOne("PARR.DAL.Models.StatusTemplate", "StatusTemplate")
.WithMany("Templates")
.HasForeignKey("StatusCode")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("StatusTemplate");
});
modelBuilder.Entity("PARR.DAL.Models.V1.V1_Application", b =>
{
b.HasOne("PARR.DAL.Models.V1.V1_ApplicationType", "ApplicationType")
@@ -963,6 +1016,11 @@ namespace PARR.DAL.Migrations
b.Navigation("ApplicationsInHosts");
});
modelBuilder.Entity("PARR.DAL.Models.StatusTemplate", b =>
{
b.Navigation("Templates");
});
modelBuilder.Entity("PARR.DAL.Models.V1.V1_Application", b =>
{
b.Navigation("V1_ApplicationsInHosts");

View File

@@ -0,0 +1,20 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models
{
[Table("StatusTemplates")]
public class StatusTemplate
{
[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

@@ -12,7 +12,7 @@ namespace PARR.DAL.Models
public DateTimeOffset DateCreated { get; set; }
public DateTimeOffset? DateModified { get; set; }
public required string Name { get; set; }
public bool isActive { get; set; }
public bool IsActive { get; set; }
public required string WorkGroup { get; set; }
public required string ShortDescription { get; set; }
public required string Category { get; set; }
@@ -28,6 +28,13 @@ namespace PARR.DAL.Models
public required string TNK { get; set; }
public required string Work { get; set; }
public required string Worker { get; set; }
public required string Status { get; set; }
public int StatusCode { get; set; }
[ForeignKey(nameof(StatusCode))]
public StatusTemplate StatusTemplate { get; set; } = new StatusTemplate();
//public required string Status { get; set; }
}
}

View File

@@ -1,5 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using PARR.DAL.Contracts;
using PARR.DAL.Models;
using PARR.DAL.Services.Interfaces;
@@ -37,16 +38,21 @@ namespace PARR.EsppTemplateSync.Services
var template = parserService.ParseString(str);
if (template == null) {
if (template == null)
{
isSuccess = false;
logger.LogError($"Не удалось распознать строку({str}) в Template");
}
else {
else
{
//если шаблон не аквтивен, пропускаем
if (!template.isActive)
if (!template.IsActive)
{
return isSuccess;
}
//TODO: !!! тут метод называет чек, но он же исохраняет. По идее надо чтобы чек че то вернул, а исходя из этого дургой метод сохранит или ченить изменит
// и опять же, saccess всегда true получается??? или это норм.
await CheckChangesAsync(template);
}
@@ -97,19 +103,19 @@ namespace PARR.EsppTemplateSync.Services
prop.Name == "Status" ||
prop.Name == "DateCreated" ||
prop.Name == "DateModified" ||
prop.Name == "Status"
prop.Name == "StatusCode"
) continue;
var parrValue = template.GetType().GetProperty(prop.Name)?.GetValue(template, null);
var esppValue = esppTemplate.GetType().GetProperty(prop.Name)?.GetValue(esppTemplate, null);
if (parrValue == null || esppValue == null) continue;
if (parrValue == null || esppValue == null) continue;
if (parrValue!.ToString()!.ToLower() !=
esppValue!.ToString()!.ToLower()
)
{
isChanged = true;
isChanged = true;
break;
}
}
@@ -117,20 +123,24 @@ namespace PARR.EsppTemplateSync.Services
if (isChanged)
{
logger.LogInformation($"----- Запись в ЕСПП отличается от Template {esppTemplate.Name}({esppTemplate.ShortDescription}) -----");
template.Status = "Updating";
if(!await templateService.CommitAsync())
//template.Status = "Updating";
template.StatusCode = (int)StatusTemplateEnum.Updating;
if (!await templateService.CommitAsync())
logger.LogError($"Не удалось обновить запись Template {esppTemplate.Name}({esppTemplate.ShortDescription})");
else
logger.LogInformation($"----- Требуется обновление шаблона в ЕСПП роботом {esppTemplate.Name}({esppTemplate.ShortDescription}) -----");
}
else
{
if (template.Status != "Ok")
//if (template.Status != "Ok")
if (template.StatusCode != (int)StatusTemplateEnum.Ok)
{
template.DateModified = DateTimeOffset.UtcNow;
template.Status = "Ok";
template.StatusCode = (int)StatusTemplateEnum.Ok;
if (!await templateService.CommitAsync())
logger.LogInformation($"Шаблон в ЕСПП соответствует шаблону в ПАРР {esppTemplate.Name}({esppTemplate.ShortDescription}). Установлен статус Ok");
logger.LogInformation($"Шаблон в ЕСПП соответствует шаблону в ПАРР {esppTemplate.Name}({esppTemplate.ShortDescription}). Установлен статус {StatusTemplateEnum.Ok}");
}
}
}

View File

@@ -59,7 +59,7 @@ namespace PARR.EsppTemplateSync.Services
Id = Guid.NewGuid(),
DateCreated = DateTime.UtcNow,
Name = name,
isActive = bool.Parse(isActive),
IsActive = bool.Parse(isActive),
WorkGroup = workGroup,
ShortDescription = shortDescription,
Category = category,
@@ -75,7 +75,8 @@ namespace PARR.EsppTemplateSync.Services
TNK = tnk,
Work = work,
Worker = worker,
Status = "Checking"
//Status = "Checking"
StatusCode = 0
};
//bool isSuccess = true;