This commit is contained in:
Mikhail Kuznetsov
2024-04-17 17:18:03 +10:00
10 changed files with 2705 additions and 29 deletions

View File

@@ -175,12 +175,6 @@ namespace PARR.AIHITSyncer.Services
{ {
if (string.IsNullOrEmpty(appName) || string.IsNullOrWhiteSpace(appName)) return null; if (string.IsNullOrEmpty(appName) || string.IsNullOrWhiteSpace(appName)) return null;
var existApp = await appService.GetByNameAsync(appName);
if (existApp != null)
return existApp;
//Создаем
var appType = GetAppTypeByName(type); var appType = GetAppTypeByName(type);
if (appType == null) if (appType == null)
{ {
@@ -188,6 +182,11 @@ namespace PARR.AIHITSyncer.Services
return null; return null;
} }
var existApp = await appService.GetByNameAsync(appName, appType.Id);
if (existApp != null)
return existApp;
//Создаем
var app = new Application var app = new Application
{ {
Id = Guid.NewGuid(), Id = Guid.NewGuid(),
@@ -201,7 +200,6 @@ namespace PARR.AIHITSyncer.Services
logger.LogInformation($"Создана запись а таблице Application: {appName}, {app.ToJson()}"); logger.LogInformation($"Создана запись а таблице Application: {appName}, {app.ToJson()}");
return await appService.GetAsync(app.Id); return await appService.GetAsync(app.Id);
} }

View File

@@ -109,6 +109,11 @@ namespace PARR.API.Controllers.V1
if (!resultValidate.IsValid) if (!resultValidate.IsValid)
return BadRequest(new Response(resultValidate.Errors)); return BadRequest(new Response(resultValidate.Errors));
//уникальная запись по полям ApplicationId, WorkId
var existSameAiW = await applicationsInWorkService.GetAsync(request.ApplicationId, request.WorkId);
if (existSameAiW != null)
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Задание на выполнение работ с такими ПО и работой уже существует" } }));
var applicationInWork = new ApplicationsInWork var applicationInWork = new ApplicationsInWork
{ {
Id = Guid.NewGuid(), Id = Guid.NewGuid(),
@@ -167,6 +172,11 @@ namespace PARR.API.Controllers.V1
if (!resultValidate.IsValid) if (!resultValidate.IsValid)
return BadRequest(new Response(resultValidate.Errors)); return BadRequest(new Response(resultValidate.Errors));
//уникальная запись по полям ApplicationId, WorkId у которой id!=[FromRoute]id
var existSameAiW = await applicationsInWorkService.Get().FirstOrDefaultAsync(t => t.Id != id && t.ApplicationId == request.ApplicationId && t.WorkId == request.WorkId);
if (existSameAiW != null)
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Задание на выполнение работ с такими ПО и работой уже существует" } }));
var orig = await applicationsInWorkService.GetAsync(id); var orig = await applicationsInWorkService.GetAsync(id);
if (orig == null) if (orig == null)

View File

@@ -44,9 +44,9 @@ namespace PARR.API.Validators
RuleFor(t => t.ApplicationId) RuleFor(t => t.ApplicationId)
.MustAsync(async (entity, value, c) => await IsApplicationExist(entity)) .MustAsync(async (entity, value, c) => await IsApplicationExist(entity))
.WithMessage("Указан несуществующий Id программного обеспечения") .WithMessage("Указан несуществующий Id программного обеспечения");
.MustAsync(async (entity, value, c) => await AppInWorkIsUnique(entity)) //.MustAsync(async (entity, value, c) => await AppInWorkIsUnique(entity))
.WithMessage("Задание на выполнение работ с такими ПО и Работой уже существует"); // .WithMessage("Задание на выполнение работ с такими ПО и работой уже существует");
//.WithMessage("У данного задания на выполнение работ указан несуществующий Id программного обеспечения"); //.WithMessage("У данного задания на выполнение работ указан несуществующий Id программного обеспечения");
@@ -123,21 +123,21 @@ namespace PARR.API.Validators
return true; return true;
} }
private async Task<bool> AppInWorkIsUnique(ApplicationInWorkRequest request) //private async Task<bool> AppInWorkIsUnique(ApplicationInWorkRequest request)
{ //{
//уникальная запись по полям ApplicationId, WorkId // //уникальная запись по полям ApplicationId, WorkId
var existSameAiW = await applicationsInWorkService.GetAsync(request.ApplicationId, request.WorkId); // var existSameAiW = await applicationsInWorkService.GetAsync(request.ApplicationId, request.WorkId);
//TODO: тут спорно, нужна ли эта проверка? Мы же можем создать несколько РР на одно и тоже ПО но с разным расписанием? // //TODO: тут спорно, нужна ли эта проверка? Мы же можем создать несколько РР на одно и тоже ПО но с разным расписанием?
//к тому же, в методе update, такой проверки нет! // //к тому же, в методе update, такой проверки нет!
//if (existSameAiW != null) // //if (existSameAiW != null)
// return BadRequest(new Response(false, new List<ErrorModel> { // // return BadRequest(new Response(false, new List<ErrorModel> {
// new ErrorModel { Message = $"Уже существует задание на выполнение работ для программного обеспечения id({request.ApplicationId}) и работой id({request.WorkId})." } } // // new ErrorModel { Message = $"Уже существует задание на выполнение работ для программного обеспечения id({request.ApplicationId}) и работой id({request.WorkId})." } }
// )); // // ));
return existSameAiW == null; // return existSameAiW == null;
} //}
private async Task<bool> IsWorkExist(ApplicationInWorkRequest request) private async Task<bool> IsWorkExist(ApplicationInWorkRequest request)
{ {

View File

@@ -86,7 +86,7 @@ namespace PARR.DAL.Context
{ {
// При добавлении записей, добавлять тоже в PARR.DAL.Contracts.SettingsFromDb // При добавлении записей, добавлять тоже в PARR.DAL.Contracts.SettingsFromDb
f.HasData( f.HasData(
new { Name = nameof(SettingsFromDb.Initiator), Description = "Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.", Value = "КУЗНЕЦОВ МИХАИЛ ВАЛЕРЬЕВИЧ (IVC_KUZNETSOVMV@DVGD.OAO.RZD)" }, new { Name = nameof(SettingsFromDb.Initiator), Description = "Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.", Value = "НАГИМОВ ПАВЕЛ БОРИСОВИЧ (5000966)" },
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 = "%PREFIX%-ЭИТИ-ПТК-ПАРР" }, new { Name = nameof(SettingsFromDb.TemplatePrefixName), Description = "Префикс имени шаблона в ЕСПП", Value = "%PREFIX%-ЭИТИ-ПТК-ПАРР" },

View File

@@ -0,0 +1,52 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PARR.DAL.Migrations
{
/// <inheritdoc />
public partial class tblSettingsInitiatorUpdNagimovAndApplicationsUniqueTypeAndName : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "IX_Applications_Name",
table: "Applications");
migrationBuilder.UpdateData(
table: "Settings",
keyColumn: "Name",
keyValue: "Initiator",
column: "Value",
value: "НАГИМОВ ПАВЕЛ БОРИСОВИЧ (5000966)");
migrationBuilder.CreateIndex(
name: "IX_Applications_Name_ApplicationTypeId",
table: "Applications",
columns: new[] { "Name", "ApplicationTypeId" },
unique: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "IX_Applications_Name_ApplicationTypeId",
table: "Applications");
migrationBuilder.UpdateData(
table: "Settings",
keyColumn: "Name",
keyValue: "Initiator",
column: "Value",
value: "КУЗНЕЦОВ МИХАИЛ ВАЛЕРЬЕВИЧ (IVC_KUZNETSOVMV@DVGD.OAO.RZD)");
migrationBuilder.CreateIndex(
name: "IX_Applications_Name",
table: "Applications",
column: "Name",
unique: true);
}
}
}

View File

@@ -112,7 +112,7 @@ namespace PARR.DAL.Migrations
b.HasIndex("ApplicationTypeId"); b.HasIndex("ApplicationTypeId");
b.HasIndex("Name") b.HasIndex("Name", "ApplicationTypeId")
.IsUnique(); .IsUnique();
b.ToTable("Applications"); b.ToTable("Applications");
@@ -1886,7 +1886,7 @@ namespace PARR.DAL.Migrations
{ {
Name = "Initiator", Name = "Initiator",
Description = "Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.", Description = "Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.",
Value = "КУЗНЕЦОВ МИХАИЛ ВАЛЕРЬЕВИЧ (IVC_KUZNETSOVMV@DVGD.OAO.RZD)" Value = "НАГИМОВ ПАВЕЛ БОРИСОВИЧ (5000966)"
}, },
new new
{ {

View File

@@ -6,7 +6,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models namespace PARR.DAL.Models
{ {
[Table("Applications")] [Table("Applications")]
[Index(nameof(Name), IsUnique = true)] [Index(nameof(Name), nameof(ApplicationTypeId), IsUnique = true)]
public class Application : IBase public class Application : IBase
{ {
[Key] [Key]

View File

@@ -22,9 +22,9 @@ namespace PARR.DAL.Services.Implementations
protected override DataContext EntitiContext => dataContext; protected override DataContext EntitiContext => dataContext;
public async Task<Application?> GetByNameAsync(string appName) public async Task<Application?> GetByNameAsync(string appName, Guid typeId)
{ {
return await EntitySet.FirstOrDefaultAsync(t => t.Name.ToLower() == appName.Trim().ToLower()); return await EntitySet.FirstOrDefaultAsync(t => t.Name.ToLower() == appName.Trim().ToLower() && t.ApplicationTypeId == typeId);
} }
} }
} }

View File

@@ -5,6 +5,6 @@ namespace PARR.DAL.Services.Interfaces
{ {
public interface IApplicationService : IBaseService<Application> public interface IApplicationService : IBaseService<Application>
{ {
Task<Application?> GetByNameAsync(string appName); Task<Application?> GetByNameAsync(string appName, Guid typeId);
} }
} }