feat(api): управление job auto control из api
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user