feat(api): RobotTaskController - добавлен параметр SetInProgressStatus, при выдаче задания роботу, сразу устанавливать статус "В работе"
This commit is contained in:
10
PARR.API/Contracts/V1/Requests/Queries/RobotTaskQuery.cs
Normal file
10
PARR.API/Contracts/V1/Requests/Queries/RobotTaskQuery.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
namespace PARR.API.Contracts.V1.Requests.Queries
|
||||||
|
{
|
||||||
|
public class RobotTaskQuery
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Установить статус задания - InProgress (Робот взял в работу)
|
||||||
|
/// </summary>
|
||||||
|
public bool? SetInProgressStatus { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,9 +3,11 @@ using Microsoft.AspNetCore.Authorization;
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using PARR.API.Contracts.V1;
|
using PARR.API.Contracts.V1;
|
||||||
|
using PARR.API.Contracts.V1.Requests.Queries;
|
||||||
using PARR.API.Contracts.V1.Responses;
|
using PARR.API.Contracts.V1.Responses;
|
||||||
using PARR.API.Contracts.V1.Responses.Base;
|
using PARR.API.Contracts.V1.Responses.Base;
|
||||||
using PARR.API.Controllers.V1.Base;
|
using PARR.API.Controllers.V1.Base;
|
||||||
|
using PARR.API.Services.Interfaces;
|
||||||
using PARR.Constants;
|
using PARR.Constants;
|
||||||
using PARR.DAL.Contracts;
|
using PARR.DAL.Contracts;
|
||||||
using PARR.DAL.Models;
|
using PARR.DAL.Models;
|
||||||
@@ -22,13 +24,17 @@ namespace PARR.API.Controllers.V1
|
|||||||
private readonly IRobotConfigurationService robotConfigurationService;
|
private readonly IRobotConfigurationService robotConfigurationService;
|
||||||
private readonly IEsppScheduleTransformService esppScheduleTransformService;
|
private readonly IEsppScheduleTransformService esppScheduleTransformService;
|
||||||
private readonly ILogger<RobotTaskController> logger;
|
private readonly ILogger<RobotTaskController> logger;
|
||||||
|
private readonly IClientService clientService;
|
||||||
|
private readonly IRobotHistoryService robotHistoryService;
|
||||||
|
|
||||||
public RobotTaskController(
|
public RobotTaskController(
|
||||||
IMapper mapper,
|
IMapper mapper,
|
||||||
SettingsFromDb settingsFromDb,
|
SettingsFromDb settingsFromDb,
|
||||||
IRobotConfigurationService robotConfigurationService,
|
IRobotConfigurationService robotConfigurationService,
|
||||||
IEsppScheduleTransformService esppScheduleTransformService,
|
IEsppScheduleTransformService esppScheduleTransformService,
|
||||||
ILogger<RobotTaskController> logger
|
ILogger<RobotTaskController> logger,
|
||||||
|
IClientService clientService,
|
||||||
|
IRobotHistoryService robotHistoryService
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.mapper = mapper;
|
this.mapper = mapper;
|
||||||
@@ -36,6 +42,8 @@ namespace PARR.API.Controllers.V1
|
|||||||
this.robotConfigurationService = robotConfigurationService;
|
this.robotConfigurationService = robotConfigurationService;
|
||||||
this.esppScheduleTransformService = esppScheduleTransformService;
|
this.esppScheduleTransformService = esppScheduleTransformService;
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
|
this.clientService = clientService;
|
||||||
|
this.robotHistoryService = robotHistoryService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -46,7 +54,7 @@ namespace PARR.API.Controllers.V1
|
|||||||
/// <param name="taskStatusCode"></param>
|
/// <param name="taskStatusCode"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpGet(ApiRoutes.RobotTask.GetByRobotAndStatusTask)]
|
[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);
|
await robotConfigurationService.FindUnfulfilledTaskAndSetRobotErrorStatusAsync(settingsFromDb.RobotAttemptsNumber, settingsFromDb.RobotWaitTime);
|
||||||
@@ -70,7 +78,6 @@ namespace PARR.API.Controllers.V1
|
|||||||
.ThenInclude(t => t!.Tnk)
|
.ThenInclude(t => t!.Tnk)
|
||||||
.ThenInclude(s => s!.Subprocess)
|
.ThenInclude(s => s!.Subprocess)
|
||||||
.ThenInclude(p => p!.Process);
|
.ThenInclude(p => p!.Process);
|
||||||
//.AsSplitQuery();
|
|
||||||
break;
|
break;
|
||||||
case RobotsEnum.ScheduleOrder:
|
case RobotsEnum.ScheduleOrder:
|
||||||
//расписание
|
//расписание
|
||||||
@@ -120,6 +127,16 @@ namespace PARR.API.Controllers.V1
|
|||||||
if (task == null)
|
if (task == null)
|
||||||
return NotFound();
|
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)
|
switch (robotCode)
|
||||||
{
|
{
|
||||||
case RobotsEnum.TemplateOrder:
|
case RobotsEnum.TemplateOrder:
|
||||||
@@ -190,5 +207,39 @@ namespace PARR.API.Controllers.V1
|
|||||||
#endregion
|
#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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,13 +78,13 @@ namespace PARR.API.Controllers.V1
|
|||||||
await robotHistoryService.CommitAsync();
|
await robotHistoryService.CommitAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
var configToResonse = await robotConfigurationService.Get()
|
var configToResponse = await robotConfigurationService.Get()
|
||||||
.Include(t => t.Robot)
|
.Include(t => t.Robot)
|
||||||
.Include(t => t.TaskStatus)
|
.Include(t => t.TaskStatus)
|
||||||
.Include(t => t.RobotStatus)
|
.Include(t => t.RobotStatus)
|
||||||
.FirstOrDefaultAsync(t => t.Id == taskId);
|
.FirstOrDefaultAsync(t => t.Id == taskId);
|
||||||
|
|
||||||
var response = mapper.Map<RobotConfigurationResponse>(configToResonse);
|
var response = mapper.Map<RobotConfigurationResponse>(configToResponse);
|
||||||
|
|
||||||
return Ok(new Response<RobotConfigurationResponse>(response, true));
|
return Ok(new Response<RobotConfigurationResponse>(response, true));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user