feat(api): RobotTaskController - добавлен параметр SetInProgressStatus, при выдаче задания роботу, сразу устанавливать статус "В работе"

This commit is contained in:
Mikhail Trubnikov
2024-08-01 14:21:28 +10:00
parent 0464aed769
commit cefbdcc8e6
3 changed files with 66 additions and 5 deletions

View File

@@ -0,0 +1,10 @@
namespace PARR.API.Contracts.V1.Requests.Queries
{
public class RobotTaskQuery
{
/// <summary>
/// Установить статус задания - InProgress (Робот взял в работу)
/// </summary>
public bool? SetInProgressStatus { get; set; }
}
}

View File

@@ -3,9 +3,11 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using PARR.API.Contracts.V1;
using PARR.API.Contracts.V1.Requests.Queries;
using PARR.API.Contracts.V1.Responses;
using PARR.API.Contracts.V1.Responses.Base;
using PARR.API.Controllers.V1.Base;
using PARR.API.Services.Interfaces;
using PARR.Constants;
using PARR.DAL.Contracts;
using PARR.DAL.Models;
@@ -22,13 +24,17 @@ namespace PARR.API.Controllers.V1
private readonly IRobotConfigurationService robotConfigurationService;
private readonly IEsppScheduleTransformService esppScheduleTransformService;
private readonly ILogger<RobotTaskController> logger;
private readonly IClientService clientService;
private readonly IRobotHistoryService robotHistoryService;
public RobotTaskController(
IMapper mapper,
SettingsFromDb settingsFromDb,
IRobotConfigurationService robotConfigurationService,
IEsppScheduleTransformService esppScheduleTransformService,
ILogger<RobotTaskController> logger
ILogger<RobotTaskController> logger,
IClientService clientService,
IRobotHistoryService robotHistoryService
)
{
this.mapper = mapper;
@@ -36,6 +42,8 @@ namespace PARR.API.Controllers.V1
this.robotConfigurationService = robotConfigurationService;
this.esppScheduleTransformService = esppScheduleTransformService;
this.logger = logger;
this.clientService = clientService;
this.robotHistoryService = robotHistoryService;
}
@@ -46,7 +54,7 @@ namespace PARR.API.Controllers.V1
/// <param name="taskStatusCode"></param>
/// <returns></returns>
[HttpGet(ApiRoutes.RobotTask.GetByRobotAndStatusTask)]
public async Task<IActionResult> GetByRobotAndStatusTask([FromRoute] RobotsEnum robotCode, [FromRoute] TaskStatusEnum taskStatusCode)
public async Task<IActionResult> GetByRobotAndStatusTask([FromRoute] RobotsEnum robotCode, [FromRoute] TaskStatusEnum taskStatusCode, [FromQuery] RobotTaskQuery requestQuery)
{
//Ищем все задания с превышенным кол-вом попыток и с просроченным временем и ставим им статус ошибки
await robotConfigurationService.FindUnfulfilledTaskAndSetRobotErrorStatusAsync(settingsFromDb.RobotAttemptsNumber, settingsFromDb.RobotWaitTime);
@@ -70,7 +78,6 @@ namespace PARR.API.Controllers.V1
.ThenInclude(t => t!.Tnk)
.ThenInclude(s => s!.Subprocess)
.ThenInclude(p => p!.Process);
//.AsSplitQuery();
break;
case RobotsEnum.ScheduleOrder:
//расписание
@@ -120,6 +127,16 @@ namespace PARR.API.Controllers.V1
if (task == null)
return NotFound();
if (requestQuery?.SetInProgressStatus == true)
{
var resultSetStatus = await SetInProgressStatusAsync(task.Id);
if (resultSetStatus == false)
{
logger.LogError($"Ошибка при установке статуса {RobotStatusEnum.InProgress.ToString()} для задания RobotConfigutationId {task.Id} (при выдаче задания роботу)");
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Ошибка при выдаче задания." } }));
}
}
switch (robotCode)
{
case RobotsEnum.TemplateOrder:
@@ -190,5 +207,39 @@ namespace PARR.API.Controllers.V1
#endregion
}
/// <summary>
/// Устанавливаем статус "Робот взял в работу", пишем в историю работы роботов инф о начале работ
/// </summary>
/// <param name="taskId"></param>
/// <returns></returns>
private async Task<bool> SetInProgressStatusAsync(Guid taskId)
{
var config = await robotConfigurationService.GetAsync(taskId);
//изменение статуса робота
robotConfigurationService.ChangeRobotStatus(RobotStatusEnum.InProgress, ref config!);
if (!await robotConfigurationService.CommitAsync())
return false;
//записываем в лог робота
var history = new RobotHistory
{
Id = Guid.NewGuid(),
HistoryLevel = (int)RobotHistoryLevelEnum.Start,
TaskStatusCode = config.TaskStatusCode,
RobotConfigurationId = config.Id,
RobotIp = clientService.GetClientIp()?.ToString()
};
if (!await robotHistoryService.CreateAsync(history) || !await robotHistoryService.CommitAsync())
return false;
return true;
}
}
}

View File

@@ -78,13 +78,13 @@ namespace PARR.API.Controllers.V1
await robotHistoryService.CommitAsync();
}
var configToResonse = await robotConfigurationService.Get()
var configToResponse = await robotConfigurationService.Get()
.Include(t => t.Robot)
.Include(t => t.TaskStatus)
.Include(t => t.RobotStatus)
.FirstOrDefaultAsync(t => t.Id == taskId);
var response = mapper.Map<RobotConfigurationResponse>(configToResonse);
var response = mapper.Map<RobotConfigurationResponse>(configToResponse);
return Ok(new Response<RobotConfigurationResponse>(response, true));
}