feat(api): управление job auto control из api

This commit is contained in:
Mikhail Trubnikov
2025-12-08 14:23:08 +10:00
parent 4815840f64
commit 031ac7126c
10 changed files with 123 additions and 76 deletions

View File

@@ -19,6 +19,7 @@ using PARR.Constants;
using PARR.DAL.Contracts;
using PARR.DAL.DomainModels;
using PARR.DAL.DomainServices.Interfaces;
using PARR.DAL.Extensions;
using PARR.DAL.Models.Job;
using PARR.DAL.Services.Interfaces;
using PARR.DAL.Services.Interfaces.Job;
@@ -42,6 +43,7 @@ namespace PARR.API.Controllers.V1
private readonly IMqService mqService;
private readonly MqSettings mqSettings;
private readonly IClientService clientService;
private readonly IJobAutoControlService jobAutoControlService;
public JobController(
ILogger<JobController> logger,
@@ -55,7 +57,8 @@ namespace PARR.API.Controllers.V1
IUnitService unitService,
IMqService mqService,
MqSettings mqSettings,
IClientService clientService
IClientService clientService,
IJobAutoControlService jobAutoControlService
)
{
this.logger = logger;
@@ -67,6 +70,7 @@ namespace PARR.API.Controllers.V1
this.mqService = mqService;
this.mqSettings = mqSettings;
this.clientService = clientService;
this.jobAutoControlService = jobAutoControlService;
}
/// <summary>
@@ -78,7 +82,7 @@ namespace PARR.API.Controllers.V1
{
var paginationFilter = mapper.Map<PaginationFilter>(paginationQuery);
IQueryable<Job> query = jobService.Get();
IQueryable<Job> query = jobService.Get().Include(t => t.AutoControl);
query = query.OrderBy(t => t.Name);
@@ -138,6 +142,7 @@ namespace PARR.API.Controllers.V1
.Include(t => t.UnitFilters)
.ThenInclude(t => t.RelationshipFilters)
.ThenInclude(t => t.UnitField)
.Include(t => t.AutoControl)
.FirstOrDefaultAsync(t => t.Id == id);
if (job == null)
@@ -171,6 +176,7 @@ namespace PARR.API.Controllers.V1
#region Проверка существования работы с такими же параметрами
var isExistTheSameLinks = await jobService.Get()
.Include(t => t.Group).ThenInclude(t => t.GroupType)
.CountAsync(t =>
@@ -183,11 +189,20 @@ namespace PARR.API.Controllers.V1
if (isExistTheSameLinks > 0)
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { FieldName = nameof(request.Name), Message = $"Работа с указанным диапазоном связей пересекается с уже имеющейся в базе данных({request.MinValueRelationships}-{request.MaxValueRelationships})" } }));
#endregion
var job = mapper.Map<Job>(request);
job.AutoControl = new JobAutoControl
{
JobId = job.Id,
IsEnable = request.IsEnableAutoControl,
InitUsedScheduleState = request.InitUsedScheduleState,
InitUsedTemplateState = request.InitUsedTemplateState
};
if (!await jobService.CreateAsync(job) || !await jobService.CommitAsync())
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Ошибка при созании задания на выполнение работ" } }));
@@ -201,6 +216,7 @@ namespace PARR.API.Controllers.V1
.ThenInclude(t => t.UnitField)
.Include(t => t.UnitFilters)
.ThenInclude(t => t.RelationshipFilters)
.Include(t => t.AutoControl)
.FirstOrDefaultAsync(t => t.Id == job.Id);
var locationUri = uriService.GetUri(ApiRoutes.Job.Get, ApiRoutes.Job.getParam, createdJob!.Id);
@@ -233,6 +249,7 @@ namespace PARR.API.Controllers.V1
.ThenInclude(t => t.FieldFilters)
.Include(t => t.UnitFilters)
.ThenInclude(t => t.RelationshipFilters)
.Include(t => t.AutoControl)
.AsSingleQuery()
.FirstOrDefaultAsync(t => t.Id == id);
@@ -244,66 +261,47 @@ namespace PARR.API.Controllers.V1
#region обновление полей задания на работу
//TODO: ниже if-ы какая то странная история. зачем if-ы, просто приравниваем сразу и все...
orig.Name = request.Name.Trim();
orig.WorkName = request.WorkName.Trim();
orig.MinValueRelationships = request.MinValueRelationships;
orig.MaxValueRelationships = request.MaxValueRelationships;
orig.IsParentRelationships = request.IsParentRelationships;
orig.TemplateNameMask = request.TemplateNameMask.Trim();
orig.WorkGroupMask = request.WorkGroupMask.Trim();
orig.TnkId = request.TnkId;
orig.GroupId = request.GroupId;
var changed = false;
if (orig.Name != request.Name.Trim())
if (orig.AutoControl != null)
{
orig.Name = request.Name.Trim();
changed = true;
orig.AutoControl.IsEnable = request.IsEnableAutoControl;
orig.AutoControl.InitUsedScheduleState = request.InitUsedScheduleState;
orig.AutoControl.InitUsedTemplateState = request.InitUsedTemplateState;
}
else
{
// автоконтрол не загружен, проверяем есть ли он в бд, если нет, то создадим
var existAutoControl = await jobAutoControlService.Get().FirstOrDefaultAsync(t => t.JobId == id);
if (existAutoControl != null)
{
logger.LogError($"При обновлении job {id}, не загрузась связь с JobAutoControl, но она есть. Не стал обновлять Job, вернул ошибку.");
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = $"Ошибка при изменении задания на выполнение работ." } }));
}
else
{
var autoControl = new JobAutoControl
{
JobId = id,
InitUsedScheduleState = request.InitUsedScheduleState,
InitUsedTemplateState = request.InitUsedTemplateState,
IsEnable = request.IsEnableAutoControl
};
orig.AutoControl = autoControl;
logger.LogWarning($"При обновлении job {id}, отсутствовала запись в таблице JobAutoControl, создал ее. {autoControl.ToJson()}");
}
}
if (orig.WorkName != request.WorkName.Trim())
{
orig.WorkName = request.WorkName.Trim();
changed = true;
}
if (orig.MinValueRelationships != request.MinValueRelationships)
{
orig.MinValueRelationships = request.MinValueRelationships;
changed = true;
}
if (orig.MaxValueRelationships != request.MaxValueRelationships)
{
orig.MaxValueRelationships = request.MaxValueRelationships;
changed = true;
}
if (orig.IsParentRelationships != request.IsParentRelationships)
{
orig.IsParentRelationships = request.IsParentRelationships;
changed = true;
}
if (orig.TemplateNameMask != request.TemplateNameMask.Trim())
{
orig.TemplateNameMask = request.TemplateNameMask.Trim();
changed = true;
}
if (orig.WorkGroupMask != request.WorkGroupMask.Trim())
{
orig.WorkGroupMask = request.WorkGroupMask.Trim();
changed = true;
}
if (orig.TnkId != request.TnkId)
{
orig.TnkId = request.TnkId;
changed = true;
}
if (orig.GroupId != request.GroupId)
{
orig.GroupId = request.GroupId;
changed = true;
}
if (changed)
orig.DateModified = DateTimeOffset.UtcNow;
orig.DateModified = DateTimeOffset.UtcNow;
#endregion
var job = mapper.Map<Job>(request);
@@ -334,6 +332,7 @@ namespace PARR.API.Controllers.V1
.ThenInclude(t => t.UnitField)
.Include(t => t.UnitFilters)
.ThenInclude(t => t.RelationshipFilters)
.Include(t => t.AutoControl)
.FirstAsync(t => t.Id == orig.Id);
var response = mapper.Map<JobResponse>(updatedJob);