diff --git a/PARR.API/Contracts/V1/Requests/Queries/RobotTaskQuery.cs b/PARR.API/Contracts/V1/Requests/Queries/RobotTaskQuery.cs
new file mode 100644
index 00000000..c503ff61
--- /dev/null
+++ b/PARR.API/Contracts/V1/Requests/Queries/RobotTaskQuery.cs
@@ -0,0 +1,10 @@
+namespace PARR.API.Contracts.V1.Requests.Queries
+{
+ public class RobotTaskQuery
+ {
+ ///
+ /// Установить статус задания - InProgress (Робот взял в работу)
+ ///
+ public bool? SetInProgressStatus { get; set; }
+ }
+}
diff --git a/PARR.API/Controllers/V1/RobotTaskController.cs b/PARR.API/Controllers/V1/RobotTaskController.cs
index 147acdf9..861ba538 100644
--- a/PARR.API/Controllers/V1/RobotTaskController.cs
+++ b/PARR.API/Controllers/V1/RobotTaskController.cs
@@ -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 logger;
+ private readonly IClientService clientService;
+ private readonly IRobotHistoryService robotHistoryService;
public RobotTaskController(
IMapper mapper,
SettingsFromDb settingsFromDb,
IRobotConfigurationService robotConfigurationService,
IEsppScheduleTransformService esppScheduleTransformService,
- ILogger logger
+ ILogger 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
///
///
[HttpGet(ApiRoutes.RobotTask.GetByRobotAndStatusTask)]
- public async Task GetByRobotAndStatusTask([FromRoute] RobotsEnum robotCode, [FromRoute] TaskStatusEnum taskStatusCode)
+ public async Task 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 { new ErrorModel { Message = "Ошибка при выдаче задания." } }));
+ }
+ }
+
switch (robotCode)
{
case RobotsEnum.TemplateOrder:
@@ -190,5 +207,39 @@ namespace PARR.API.Controllers.V1
#endregion
}
+
+
+ ///
+ /// Устанавливаем статус "Робот взял в работу", пишем в историю работы роботов инф о начале работ
+ ///
+ ///
+ ///
+ private async Task 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;
+ }
+
}
}
diff --git a/PARR.API/Controllers/V1/RobotTaskRobotStatusController.cs b/PARR.API/Controllers/V1/RobotTaskRobotStatusController.cs
index b5d4926d..7876c19d 100644
--- a/PARR.API/Controllers/V1/RobotTaskRobotStatusController.cs
+++ b/PARR.API/Controllers/V1/RobotTaskRobotStatusController.cs
@@ -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(configToResonse);
+ var response = mapper.Map(configToResponse);
return Ok(new Response(response, true));
}