diff --git a/PARR.API/Contracts/V1/Responses/TemplateResponse.cs b/PARR.API/Contracts/V1/Responses/TemplateResponse.cs
index 3fd702f8..b218e746 100644
--- a/PARR.API/Contracts/V1/Responses/TemplateResponse.cs
+++ b/PARR.API/Contracts/V1/Responses/TemplateResponse.cs
@@ -55,7 +55,6 @@
}
-
public class TemplateResponse : TemplateBaseResponse
{
public required string Category { get; set; }
@@ -72,6 +71,42 @@
public required string TemplateDuration { get; set; }
+
+ #region Поля с примененнымм шорткодами
+
+ ///
+ /// Работа в ЕСПП (с примененными шорткодами)
+ ///
+ public string? WorkNameRendered { get; set; }
+
+ ///
+ /// Рабочая группа (с примененными шорткодами)
+ ///
+ public string? WorkGroupRendered { get; set; }
+
+ ///
+ /// ЗО (с примененными шорткодами)
+ ///
+ public string? ResponseAreaRendered { get; set; }
+
+ ///
+ /// Краткое описание (с примененными шорткодами)
+ ///
+ public string? ShortDescriptionRendered { get; set; }
+
+ ///
+ /// Подробное описание (с примененными шорткодами)
+ ///
+ public string? FullDescriptionRendered { get; set; }
+
+ ///
+ /// Решение (с примененными шорткодами)
+ ///
+ public string? SolutionRendered { get; set; }
+
+ #endregion
+
+
public JobResponse? Job { get; set; }
public ProcessResponse? Process { get; set; }
diff --git a/PARR.API/Controllers/V1/TemplateController.cs b/PARR.API/Controllers/V1/TemplateController.cs
index e12dc6f9..26fb26fc 100644
--- a/PARR.API/Controllers/V1/TemplateController.cs
+++ b/PARR.API/Controllers/V1/TemplateController.cs
@@ -10,7 +10,6 @@ using PARR.API.Contracts.V1.Responses.Base;
using PARR.API.Controllers.V1.Base;
using PARR.API.Extensions;
using PARR.API.Services.Interfaces;
-using PARR.BLL.Helpers;
using PARR.Core.Common.Helpers;
using PARR.Core.Repositories.Interfaces;
using PARR.Core.Repositories.Interfaces.Schedule;
@@ -30,37 +29,34 @@ namespace PARR.API.Controllers.V1
[Authorize(Roles = ParrRoles.Administrator.Role)]
public class TemplateController : BaseApiController
{
- private readonly IMapper mapper;
- private readonly ITemplateRepository templateService;
- private readonly IRobotConfigurationRepository robotConfigurationService;
- private readonly IClientService clientService;
- private readonly ILogger logger;
- private readonly IShortcodesService shortcodesService;
- private readonly IOrderRepository orderService;
- private readonly SettingsFromDb settingsFromDb;
- private readonly IScheduleResponseAreaTimeOffsetRepository scheduleResponseAreaTimeOffsetService;
+ private readonly IMapper _mapper;
+ private readonly ITemplateRepository _templateRepository;
+ private readonly IRobotConfigurationRepository _robotConfigurationRepository;
+ private readonly IClientService _clientService;
+ private readonly ILogger _logger;
+ private readonly IShortcodesService _shortcodesService;
+ private readonly IOrderRepository _orderRepository;
+ private readonly SettingsFromDb _settingsFromDb;
public TemplateController(
IMapper mapper,
- ITemplateRepository templateService,
- IRobotConfigurationRepository robotConfigurationService,
+ ITemplateRepository templateRepository,
+ IRobotConfigurationRepository robotConfigurationRepository,
IClientService clientService,
ILogger logger,
IShortcodesService shortcodesService,
- IOrderRepository orderService,
- SettingsFromDb settingsFromDb,
- IScheduleResponseAreaTimeOffsetRepository scheduleResponseAreaTimeOffsetService
+ IOrderRepository orderRepository,
+ SettingsFromDb settingsFromDb
)
{
- this.mapper = mapper;
- this.templateService = templateService;
- this.robotConfigurationService = robotConfigurationService;
- this.clientService = clientService;
- this.logger = logger;
- this.shortcodesService = shortcodesService;
- this.orderService = orderService;
- this.settingsFromDb = settingsFromDb;
- this.scheduleResponseAreaTimeOffsetService = scheduleResponseAreaTimeOffsetService;
+ _mapper = mapper;
+ _templateRepository = templateRepository;
+ _robotConfigurationRepository = robotConfigurationRepository;
+ _clientService = clientService;
+ _logger = logger;
+ _shortcodesService = shortcodesService;
+ _orderRepository = orderRepository;
+ _settingsFromDb = settingsFromDb;
}
@@ -72,9 +68,10 @@ namespace PARR.API.Controllers.V1
[HttpGet(ApiRoutes.Template.GetAll)]
public async Task GetAll([FromQuery] PaginationQuery paginationQuery, [FromQuery] TemplateQuery filter)
{
- var paginationFilter = mapper.Map(paginationQuery);
+ var paginationFilter = _mapper.Map(paginationQuery);
- IQueryable query = templateService.Get()
+ IQueryable query = _templateRepository.Get()
+ .AsNoTracking()
.Include(t => t.Unit).ThenInclude(t => t!.UnitValues).ThenInclude(t => t.Field)
.Include(t => t.Unit).ThenInclude(t => t!.UnitValues).ThenInclude(t => t.Value)
.Include(t => t.StatusType)
@@ -82,8 +79,7 @@ namespace PARR.API.Controllers.V1
.Include(t => t.RobotConfigurations).ThenInclude(t => t.Robot)
.Include(t => t.RobotConfigurations).ThenInclude(t => t.TaskStatus)
.Include(t => t.RobotConfigurations).ThenInclude(t => t.RobotStatus)
- .OrderBy(t => t.Name)
- .AsNoTracking();
+ .OrderBy(t => t.Name);
if (!string.IsNullOrEmpty(filter.Mask))
@@ -114,7 +110,7 @@ namespace PARR.API.Controllers.V1
#endregion
- var templates = await templateService.GetPage(query, paginationFilter).ToListAsync();
+ var templates = await _templateRepository.GetPage(query, paginationFilter).ToListAsync();
//logger.LogDebug("Загрузка шаблонов из БД: {ElapsedMs} мс", sw.ElapsedMilliseconds);
@@ -122,7 +118,7 @@ namespace PARR.API.Controllers.V1
if (!templates.Any())
return NoContent();
- var templateResponse = mapper.Map>(templates);
+ var templateResponse = _mapper.Map>(templates);
// словари для быстрого поиска
var templatesDict = templates.ToDictionary(t => t.Id);
@@ -135,7 +131,7 @@ namespace PARR.API.Controllers.V1
foreach (var responseItem in templateResponse)
{
//await ApplyTemplateShortcodesAsync(responseItem, templates.First(t => t.Id == responseItem.Id));
- await ApplyTemplateShortcodesAsync(responseItem, templatesDict[responseItem.Id]);
+ await ApplyBaseTemplateShortcodesAsync(responseItem, templatesDict[responseItem.Id]);
//FillResponseAreaOffset(responseItem);
}
//logger.LogDebug("Получение шорткодов: {ElapsedMs} мс", sw.ElapsedMilliseconds);
@@ -165,7 +161,8 @@ namespace PARR.API.Controllers.V1
[HttpGet(ApiRoutes.Template.Get)]
public async Task GetById([FromRoute] Guid id)
{
- var template = await templateService.GetWithIncludes().AsNoTracking()
+ var template = await _templateRepository.GetWithIncludes()
+ .AsNoTracking()
.Include(t => t.RobotConfigurations).ThenInclude(t => t.Robot)
.Include(t => t.RobotConfigurations).ThenInclude(t => t.TaskStatus)
.Include(t => t.RobotConfigurations).ThenInclude(t => t.RobotStatus)
@@ -179,9 +176,9 @@ namespace PARR.API.Controllers.V1
if (template == null)
return NotFound();
- var response = mapper.Map(template);
+ var response = _mapper.Map(template);
+ await ApplyBaseTemplateShortcodesAsync(response, template);
await ApplyTemplateShortcodesAsync(response, template);
- //FillResponseAreaOffset(response);
var ordersCountResult = await GetOrdersCountAsync(new List { response.Id });
response.OrderCount = ordersCountResult.Count > 0 ? ordersCountResult.First().Value : 0;
@@ -215,7 +212,7 @@ namespace PARR.API.Controllers.V1
// .FirstOrDefaultAsync(t => t.Id == id);
#endregion
- var template = await templateService.Get()
+ var template = await _templateRepository.Get()
.Include(t => t.RobotConfigurations)
.FirstOrDefaultAsync(t => t.Id == id);
@@ -226,21 +223,21 @@ namespace PARR.API.Controllers.V1
{
template.IsActiveTemplate = request.IsActiveTemplate;
//необходимо обновить шаблон
- var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, template);
+ var config = _robotConfigurationRepository.GetFromTemplateByRobotCode(RobotsEnum.TemplateOrder, template);
//robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config);
- robotConfigurationService.SetUpdateTaskStatusIfAllow(config);
+ _robotConfigurationRepository.SetUpdateTaskStatusIfAllow(config);
}
if (template.IsActiveSchedule != request.IsActiveSchedule)
{
template.IsActiveSchedule = request.IsActiveSchedule;
//необходимо обновить расписание
- var config = robotConfigurationService.GetFromTemplateByRobotCode(RobotsEnum.ScheduleOrder, template);
+ var config = _robotConfigurationRepository.GetFromTemplateByRobotCode(RobotsEnum.ScheduleOrder, template);
//robotConfigurationService.ChangeTaskStatus(TaskStatusEnum.Updating, config);
- robotConfigurationService.SetUpdateTaskStatusIfAllow(config);
+ _robotConfigurationRepository.SetUpdateTaskStatusIfAllow(config);
}
- if (!await templateService.CommitAsync(new HistoryInitiator { InitiatorComment = "Изменён статус шаблона/расписания", InitiatorIp = clientService.GetClientIp()?.ToString(), InitiatorParrComponentId = ParrComponentsEnum.Api }))
+ if (!await _templateRepository.CommitAsync(new HistoryInitiator { InitiatorComment = "Изменён статус шаблона/расписания", InitiatorIp = _clientService.GetClientIp()?.ToString(), InitiatorParrComponentId = ParrComponentsEnum.Api }))
return BadRequest(new Response(false, new List { new ErrorModel { Message = "Ошибка при изменении шаблона." } }));
#region old
@@ -263,7 +260,7 @@ namespace PARR.API.Controllers.V1
//return Ok(new Response(response, true));
#endregion
- var templateToResponse = await templateService.Get()
+ var templateToResponse = await _templateRepository.Get()
.AsNoTracking()
.Include(t => t.Unit).ThenInclude(t => t!.UnitValues).ThenInclude(t => t.Field)
.Include(t => t.Unit).ThenInclude(t => t!.UnitValues).ThenInclude(t => t.Value)
@@ -274,10 +271,9 @@ namespace PARR.API.Controllers.V1
.Include(t => t.RobotConfigurations).ThenInclude(t => t.RobotStatus)
.FirstAsync(t => t.Id == id);
- var response = mapper.Map(templateToResponse);
+ var response = _mapper.Map(templateToResponse);
- await ApplyTemplateShortcodesAsync(response, templateToResponse);
- //FillResponseAreaOffset(response);
+ await ApplyBaseTemplateShortcodesAsync(response, templateToResponse);
var ordersCountResult = await GetOrdersCountAsync(new List { response.Id });
response.OrderCount = ordersCountResult.Count > 0 ? ordersCountResult.First().Value : 0;
@@ -287,18 +283,34 @@ namespace PARR.API.Controllers.V1
///
- /// Применить шорткоды
+ /// Применить шорткоды. Для респонса TemplateBaseResponse
///
///
///
///
- private async Task ApplyTemplateShortcodesAsync(TemplateBaseResponse response, Template template)
+ private async Task ApplyBaseTemplateShortcodesAsync(TemplateBaseResponse response, Template template)
{
- response.WorkGroup = await shortcodesService.ApplyShortcodesAsync(template.Job.WorkGroupMask, template);
- response.ResponseArea = await shortcodesService.ApplyShortcodesAsync(template.Job.ResponseAreaMask, template);
+ response.WorkGroup = await _shortcodesService.ApplyShortcodesAsync(template.Job!.WorkGroupMask, template);
+ response.ResponseArea = await _shortcodesService.ApplyShortcodesAsync(template.Job!.ResponseAreaMask, template);
}
+ ///
+ /// Применить шорткоды. Для респонса TemplateResponse (добавлены дополнительные поля Rendered)
+ ///
+ ///
+ ///
+ ///
+ private async Task ApplyTemplateShortcodesAsync(TemplateResponse response, Template template)
+ {
+ response.WorkNameRendered = await _shortcodesService.ApplyShortcodesAsync(template.Job!.WorkName, template);
+ response.WorkGroupRendered = await _shortcodesService.ApplyShortcodesAsync(template.Job!.WorkGroupMask, template);
+ response.ResponseAreaRendered = await _shortcodesService.ApplyShortcodesAsync(template.Job!.ResponseAreaMask, template);
+ response.ShortDescriptionRendered = await _shortcodesService.ApplyShortcodesAsync(template.Job.Group!.ShortDescription, template);
+ response.FullDescriptionRendered = await _shortcodesService.ApplyShortcodesAsync(template.Job.Group!.FullDescription, template);
+ response.SolutionRendered = await _shortcodesService.ApplyShortcodesAsync(template.Job.Group!.Solution, template);
+ }
+
///
/// Получить кол-во нарядов для шаблонов
///
@@ -309,7 +321,7 @@ namespace PARR.API.Controllers.V1
if (!templateIdList.Any())
return new Dictionary();
- var templateWithOrders = await orderService.Get()
+ var templateWithOrders = await _orderRepository.Get()
.Where(t => t.TemplateId.HasValue && templateIdList.Contains(t.TemplateId.Value))
.GroupBy(t => t.TemplateId)
.Select(t => new { TemplateId = t.Key, OrderCount = t.Count() })
@@ -323,36 +335,7 @@ namespace PARR.API.Controllers.V1
}
- /////
- ///// Заполнить ResponseAreaOffset
- /////
- /////
- //private void FillResponseAreaOffset(TemplateBaseResponse response)
- //{
- // // если стоит галка IsResponseAreaTimezone и есть ЗО, то возвращаем оффсет
- // if (response.IsResponseAreaTimezone && !string.IsNullOrEmpty(response.ResponseArea))
- // {
- // var responseArea = response.ResponseArea;
- // response.ResponseAreaOffset = mapper.Map(scheduleResponseAreaTimeOffsetService.GetByResponseAreaOrDefault(responseArea));
- // }
- // else
- // {
- // response.ResponseAreaOffset = null;
- // }
- // //var responseArea = response.IsResponseAreaTimezone && !string.IsNullOrEmpty(response.ResponseArea)
- // // ? response.ResponseArea
- // // : settingsFromDb.DefaultResponseAreaToTimeOffset;
-
- // //response.NextRunResponseAreaInLocal = response.IsResponseAreaTimezone && !string.IsNullOrEmpty(response.ResponseArea)
- // // ? nextRunService.GetNextRunWithResponseAreaOffset(response.NextRun, response.ResponseArea)
- // // // возвращаем в дефолтной зоне
- // // : nextRunService.GetNextRunWithResponseAreaOffset(response.NextRun, settingsFromDb.DefaultResponseAreaToTimeOffset);
-
- // //response.NextRunResponseAreaInLocal = nextRunService.GetNextRunWithResponseAreaOffset(response.NextRun, responseArea);
-
- // //response.ResponseAreaOffset = mapper.Map(scheduleResponseAreaTimeOffsetService.GetByResponseAreaOrDefault(responseArea));
- //}
}
}