feat(dal,api,esppSync): в таблицу unitFields добавлено поле Code

This commit is contained in:
Mikhail Trubnikov
2025-11-28 09:12:26 +10:00
parent 5f84ccf4b8
commit c8345e3678
9 changed files with 4071 additions and 64 deletions

View File

@@ -6,6 +6,8 @@
public required string Name { get; set; } public required string Name { get; set; }
public string? Code { get; set; }
public bool? IsMultipleValue { get; set; } public bool? IsMultipleValue { get; set; }
} }

View File

@@ -126,13 +126,15 @@ namespace PARR.API.MappingProfiles
{ {
Id = fieldGroup.Key!.Id, Id = fieldGroup.Key!.Id,
Name = string.IsNullOrEmpty(fieldGroup.Key.DisplayName) ? fieldGroup.Key.AihitName : fieldGroup.Key.DisplayName, Name = string.IsNullOrEmpty(fieldGroup.Key.DisplayName) ? fieldGroup.Key.AihitName : fieldGroup.Key.DisplayName,
IsMultipleValue = fieldGroup.Key.IsMultipleValue IsMultipleValue = fieldGroup.Key.IsMultipleValue,
Code = fieldGroup.Key.Code
}, },
Values = fieldGroup.Select(s => new UnitFieldValueResponse { Id = s.ValueId, Value = s.Value!.Value }).ToList() Values = fieldGroup.Select(s => new UnitFieldValueResponse { Id = s.ValueId, Value = s.Value!.Value }).ToList()
} }
).OrderBy(o => o.Field.Name) ).OrderBy(o => o.Field.Name)
)); ));
CreateMap<Unit, UnitRelationshipsAndAttributesResponse>() CreateMap<Unit, UnitRelationshipsAndAttributesResponse>()
.ForMember(d => d.Childrens, o => o.MapFrom(s => s.ChildUnits.Select(t => t.ChildUnit).OrderBy(t => t.Name))) .ForMember(d => d.Childrens, o => o.MapFrom(s => s.ChildUnits.Select(t => t.ChildUnit).OrderBy(t => t.Name)))
.ForMember(d => d.Parents, o => o.MapFrom(s => s.ParentUnits.Select(t => t.ParentUnit).OrderBy(t => t.Name))); .ForMember(d => d.Parents, o => o.MapFrom(s => s.ParentUnits.Select(t => t.ParentUnit).OrderBy(t => t.Name)));

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,30 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PARR.DAL.Migrations
{
/// <inheritdoc />
public partial class tblUnitFieldsAddCode : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "Code",
schema: "unit",
table: "Fields",
type: "text",
nullable: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "Code",
schema: "unit",
table: "Fields");
}
}
}

View File

@@ -2845,6 +2845,9 @@ namespace PARR.DAL.Migrations
.IsRequired() .IsRequired()
.HasColumnType("text"); .HasColumnType("text");
b.Property<string>("Code")
.HasColumnType("text");
b.Property<DateTimeOffset>("DateCreated") b.Property<DateTimeOffset>("DateCreated")
.HasColumnType("timestamp with time zone"); .HasColumnType("timestamp with time zone");

View File

@@ -41,6 +41,11 @@ namespace PARR.DAL.Models.Unit
/// </summary> /// </summary>
public string? DisplayName { get; set; } public string? DisplayName { get; set; }
/// <summary>
/// Код поля, используется в GUI
/// </summary>
public string? Code { get; set; }
/// <summary> /// <summary>
/// Могут ли принимать несколько значений. Из АИХ ИТ приходят значения разделённые запятой /// Могут ли принимать несколько значений. Из АИХ ИТ приходят значения разделённые запятой
/// </summary> /// </summary>

View File

@@ -113,7 +113,7 @@ namespace PARR.EsppSync
{ {
logger.LogInformation($"Есть изменения, требуется обновление. {esppObject.TemplateName}"); logger.LogInformation($"Есть изменения, требуется обновление. {esppObject.TemplateName}");
var config = robotConfigurationService.GetFromTemplateByRobotCode(esppObject.Robot, ref template); var config = robotConfigurationService.GetFromTemplateByRobotCode(esppObject.Robot, template);
// Если предыдущий статус был Create или Ок, то ставим ему Update // Если предыдущий статус был Create или Ок, то ставим ему Update
// пусть даже Create завершился с ошибками, но раз он уже есть в ЕСПП, то изменим на Update, сбросим все счетчики и пусть попробует обновить и исправить все // пусть даже Create завершился с ошибками, но раз он уже есть в ЕСПП, то изменим на Update, сбросим все счетчики и пусть попробует обновить и исправить все
@@ -148,10 +148,10 @@ namespace PARR.EsppSync
//если все поля совпали //если все поля совпали
//проверяем, какой был статус предыдущий статус в БД, если он был не Ок, то ставим ему ОК //проверяем, какой был статус предыдущий статус в БД, если он был не Ок, то ставим ему ОК
var robotConfig = robotConfigurationService.GetFromTemplateByRobotCode(esppObject.Robot, ref template); var robotConfig = robotConfigurationService.GetFromTemplateByRobotCode(esppObject.Robot, template);
if (robotConfig.TaskStatusCode != (int)TaskStatusEnum.Ok) if (robotConfig.TaskStatusCode != (int)TaskStatusEnum.Ok)
{ {
robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Ok, ref robotConfig); robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Ok, robotConfig);
if (!await templateService.CommitAsync()) if (!await templateService.CommitAsync())
logger.LogError($"Не удалось изменить запись Template {template.Name}, Robot: {esppObject.Robot}"); logger.LogError($"Не удалось изменить запись Template {template.Name}, Robot: {esppObject.Robot}");
else else
@@ -170,8 +170,8 @@ namespace PARR.EsppSync
private void SetUpdateStatus(ref Template template, IRobotConfigurationService robotConfigurationService, RobotsEnum robot) private void SetUpdateStatus(ref Template template, IRobotConfigurationService robotConfigurationService, RobotsEnum robot)
{ {
var robotConfig = robotConfigurationService.GetFromTemplateByRobotCode(robot, ref template); var robotConfig = robotConfigurationService.GetFromTemplateByRobotCode(robot, template);
robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, ref robotConfig); robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, robotConfig);
} }
@@ -213,8 +213,8 @@ namespace PARR.EsppSync
return false; return false;
} }
/// <summary> /// <summary>
/// Удаляет ненужные символы из строки /// Удаляет ненужные символы из строки
/// </summary> /// </summary>

View File

@@ -4,11 +4,9 @@ using PARR.BLL.Domain.Mq;
using PARR.BLL.Helpers; using PARR.BLL.Helpers;
using PARR.Constants; using PARR.Constants;
using PARR.DAL.Contracts; using PARR.DAL.Contracts;
using PARR.DAL.Extensions;
using PARR.DAL.Models; using PARR.DAL.Models;
using PARR.DAL.Services.Interfaces; using PARR.DAL.Services.Interfaces;
using PARR.TemplateDistributor; using PARR.TemplateDistributor;
using System.Text.Json;
namespace PARR.GeneratorTemplates.Services namespace PARR.GeneratorTemplates.Services
{ {
@@ -306,16 +304,16 @@ namespace PARR.GeneratorTemplates.Services
{ {
item.IsActiveTemplate = false; item.IsActiveTemplate = false;
//необходимо обновить шаблон //необходимо обновить шаблон
var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, ref item); var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, item);
robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, ref config); robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config);
} }
if (item.IsActiveSchedule) if (item.IsActiveSchedule)
{ {
item.IsActiveSchedule = false; item.IsActiveSchedule = false;
//необходимо обновить расписание //необходимо обновить расписание
var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.ScheduleOrder, ref item); var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.ScheduleOrder, item);
robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, ref config); robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config);
} }
}); });

View File

@@ -104,7 +104,7 @@ namespace PARR.JobAutoControl
var msg = JsonSerializer.Serialize(request); var msg = JsonSerializer.Serialize(request);
var result =await mqService.SendAsync(mqSettings.Generator, new[] { msg }); var result = await mqService.SendAsync(mqSettings.Generator, new[] { msg });
if (result.IsSuccess) if (result.IsSuccess)
logger.LogInformation($"Отправлен запрос на генерацию: {msg}"); logger.LogInformation($"Отправлен запрос на генерацию: {msg}");
@@ -124,37 +124,37 @@ namespace PARR.JobAutoControl
/// <returns></returns> /// <returns></returns>
private async Task DeactivateAsync(IJobAutoControlService jobAutoControlService, IMqService mqService) private async Task DeactivateAsync(IJobAutoControlService jobAutoControlService, IMqService mqService)
{ {
var jobsToDeactivate = await jobAutoControlService.Get() //var jobsToDeactivate = await jobAutoControlService.Get()
.Include(t => t.JobEkMasks) // .Include(t => t.JobEkMasks)
.Include(t => t.JobAutoControlInEkStatuses) // .Include(t => t.JobAutoControlInEkStatuses)
.Where(t => t.Deactivate && t.JobEkMasks.Any() && t.JobAutoControlInEkStatuses.Any()) // .Where(t => t.Deactivate && t.JobEkMasks.Any() && t.JobAutoControlInEkStatuses.Any())
.Select(t => t.ApplicationInWorkId) // .Select(t => t.ApplicationInWorkId)
.ToListAsync(); // .ToListAsync();
logger.LogInformation($"Найдено РР с включенным авто-контролем для деактивации шаблонов и расписаний: {jobsToDeactivate.Count()} шт."); //logger.LogInformation($"Найдено РР с включенным авто-контролем для деактивации шаблонов и расписаний: {jobsToDeactivate.Count()} шт.");
if (!jobsToDeactivate.Any()) //if (!jobsToDeactivate.Any())
return; // return;
//todo: проверить, нормально ли отрабатывает async в foreach ////todo: проверить, нормально ли отрабатывает async в foreach
jobsToDeactivate.ForEach(async applicationInWorkId => //jobsToDeactivate.ForEach(async applicationInWorkId =>
{ //{
var request = new TemplateActivatorMq // var request = new TemplateActivatorMq
{ // {
Action = TemplateActivatorActionsEnum.DeactivateAllForAutoControl, // Action = TemplateActivatorActionsEnum.DeactivateAllForAutoControl,
JobId = applicationInWorkId, // JobId = applicationInWorkId,
HistoryInitiator = new HistoryInitiator { InitiatorComment = "Запрос на деактивацию с авто-контроля", InitiatorParrComponentId = ParrComponentsEnum.JobAutoControl } // HistoryInitiator = new HistoryInitiator { InitiatorComment = "Запрос на деактивацию с авто-контроля", InitiatorParrComponentId = ParrComponentsEnum.JobAutoControl }
}; // };
var msg = JsonSerializer.Serialize(request); // var msg = JsonSerializer.Serialize(request);
var result = await mqService.SendAsync(mqSettings.Activator, new[] { msg }); // var result = await mqService.SendAsync(mqSettings.Activator, new[] { msg });
if (result.IsSuccess) // if (result.IsSuccess)
logger.LogInformation($"Отправлен запрос на деактивацию: {msg}"); // logger.LogInformation($"Отправлен запрос на деактивацию: {msg}");
else // else
logger.LogError($"Ошибка при отправке запроса на деактивацию: {msg}"); // logger.LogError($"Ошибка при отправке запроса на деактивацию: {msg}");
}); //});
} }
@@ -166,35 +166,35 @@ namespace PARR.JobAutoControl
/// <returns></returns> /// <returns></returns>
private async Task ActivateAsync(IJobAutoControlService jobAutoControlService, IMqService mqService) private async Task ActivateAsync(IJobAutoControlService jobAutoControlService, IMqService mqService)
{ {
var jobsToActivate = await jobAutoControlService.Get() // var jobsToActivate = await jobAutoControlService.Get()
.Include(t => t.JobEkMasks) // .Include(t => t.JobEkMasks)
.Include(t => t.JobAutoControlInEkStatuses) // .Include(t => t.JobAutoControlInEkStatuses)
.Where(t => t.Activate && t.JobEkMasks.Any() && t.JobAutoControlInEkStatuses.Any()) // .Where(t => t.Activate && t.JobEkMasks.Any() && t.JobAutoControlInEkStatuses.Any())
.Select(t => t.ApplicationInWorkId) // .Select(t => t.ApplicationInWorkId)
.ToListAsync(); // .ToListAsync();
if (!jobsToActivate.Any()) // if (!jobsToActivate.Any())
return; // return;
//todo: проверить, нормально ли отрабатывает async в foreach // //todo: проверить, нормально ли отрабатывает async в foreach
jobsToActivate.ForEach(async applicationInWorkId => // jobsToActivate.ForEach(async applicationInWorkId =>
{ // {
var request = new TemplateActivatorMq // var request = new TemplateActivatorMq
{ // {
Action = TemplateActivatorActionsEnum.ActivateAllForAutoControl, // Action = TemplateActivatorActionsEnum.ActivateAllForAutoControl,
JobId = applicationInWorkId, // JobId = applicationInWorkId,
HistoryInitiator = new HistoryInitiator { InitiatorComment = "Запрос на активацию с авто-контроля", InitiatorParrComponentId = ParrComponentsEnum.JobAutoControl } // HistoryInitiator = new HistoryInitiator { InitiatorComment = "Запрос на активацию с авто-контроля", InitiatorParrComponentId = ParrComponentsEnum.JobAutoControl }
}; // };
var msg = JsonSerializer.Serialize(request); // var msg = JsonSerializer.Serialize(request);
var result = await mqService.SendAsync(mqSettings.Activator, new[] { msg }); // var result = await mqService.SendAsync(mqSettings.Activator, new[] { msg });
if (result.IsSuccess) // if (result.IsSuccess)
logger.LogInformation($"Отправлен запрос на активацию: {msg}"); // logger.LogInformation($"Отправлен запрос на активацию: {msg}");
else // else
logger.LogError($"Ошибка при отправке запроса на активацию: {msg}"); // logger.LogError($"Ошибка при отправке запроса на активацию: {msg}");
}); // });
} }
} }