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 string? Code { get; set; }
public bool? IsMultipleValue { get; set; }
}

View File

@@ -126,13 +126,15 @@ namespace PARR.API.MappingProfiles
{
Id = fieldGroup.Key!.Id,
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()
}
).OrderBy(o => o.Field.Name)
));
CreateMap<Unit, UnitRelationshipsAndAttributesResponse>()
.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)));

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()
.HasColumnType("text");
b.Property<string>("Code")
.HasColumnType("text");
b.Property<DateTimeOffset>("DateCreated")
.HasColumnType("timestamp with time zone");

View File

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

View File

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

View File

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

View File

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