feat(api): RobotTaskController - добавлен параметр SetInProgressStatus, при выдаче задания роботу, сразу устанавливать статус "В работе"
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user