diff --git a/PARR.API/Contracts/V1/ApiRoutes.cs b/PARR.API/Contracts/V1/ApiRoutes.cs
index 902e57b3..7bf956f9 100644
--- a/PARR.API/Contracts/V1/ApiRoutes.cs
+++ b/PARR.API/Contracts/V1/ApiRoutes.cs
@@ -198,6 +198,14 @@ namespace PARR.API.Contracts.V1
public const string Get = BaseStat + "/applications/";
}
+ public static class StatOrder
+ {
+ public const string Get = BaseStat + "/orders/";
+ public const string TaskToEspp = BaseStat + "/orders/tasks";
+ public const string Statuses = BaseStat + "/orders/statuses";
+ public const string GetStatusesLastDay = BaseStat + "/orders/statuses/last-day/{statusCode}";
+ }
+
#endregion
}
diff --git a/PARR.API/Contracts/V1/Responses/OrderStatusResponse.cs b/PARR.API/Contracts/V1/Responses/OrderStatusResponse.cs
new file mode 100644
index 00000000..86b23ede
--- /dev/null
+++ b/PARR.API/Contracts/V1/Responses/OrderStatusResponse.cs
@@ -0,0 +1,9 @@
+namespace PARR.API.Contracts.V1.Responses
+{
+ public class OrderStatusResponse
+ {
+ public int Code { get; set; }
+ public required string Name { get; set; }
+ public required string Description { get; set; }
+ }
+}
diff --git a/PARR.API/Contracts/V1/Responses/Statistics/StatOrderResponse.cs b/PARR.API/Contracts/V1/Responses/Statistics/StatOrderResponse.cs
new file mode 100644
index 00000000..61163b31
--- /dev/null
+++ b/PARR.API/Contracts/V1/Responses/Statistics/StatOrderResponse.cs
@@ -0,0 +1,22 @@
+namespace PARR.API.Contracts.V1.Responses.Statistics
+{
+ public class StatOrderResponse
+ {
+ public int AllCount { get; set; }
+
+ public int DownloadedLastDayCount { get; set; }
+ }
+
+
+ public class StatOrderStatusesResponse
+ {
+ public int Count { get; set; }
+ public OrderStatusResponse? Status { get; set; }
+ }
+
+ public class GetStatusesLastDayResponse
+ {
+ public int Count { get; set; }
+ public OrderStatusResponse? Status { get; set; }
+ }
+}
diff --git a/PARR.API/Controllers/V1/Statistics/StatOrderController.cs b/PARR.API/Controllers/V1/Statistics/StatOrderController.cs
new file mode 100644
index 00000000..88d21ba3
--- /dev/null
+++ b/PARR.API/Controllers/V1/Statistics/StatOrderController.cs
@@ -0,0 +1,116 @@
+using AutoMapper;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using PARR.API.Contracts.V1;
+using PARR.API.Contracts.V1.Responses;
+using PARR.API.Contracts.V1.Responses.Base;
+using PARR.API.Contracts.V1.Responses.Statistics;
+using PARR.API.Controllers.V1.Base;
+using PARR.Constants;
+using PARR.DAL.Services.Interfaces;
+
+namespace PARR.API.Controllers.V1.Statistics
+{
+ ///
+ /// Статистика по нарядам
+ ///
+ [Authorize(Roles = ParrRoles.Administrator.Role)]
+ public class StatOrderController : BaseApiController
+ {
+ private readonly IOrderService orderService;
+ private readonly IOrderStatusService orderStatusService;
+ private readonly IMapper mapper;
+
+ public StatOrderController(
+ IOrderService orderService,
+ IOrderStatusService orderStatusService,
+ IMapper mapper
+ )
+ {
+ this.orderService = orderService;
+ this.orderStatusService = orderStatusService;
+ this.mapper = mapper;
+ }
+
+ ///
+ /// Статистика по нарядам - всего в ПАРР / загружено за последние сутки
+ ///
+ ///
+ [HttpGet(ApiRoutes.StatOrder.Get)]
+ public async Task Get()
+ {
+ var queryDate = DateTimeOffset.UtcNow.AddDays(-1);
+
+ var response = new StatOrderResponse
+ {
+ AllCount = await orderService.Get().CountAsync(),
+ DownloadedLastDayCount = await orderService.Get().CountAsync(t => t.DateCreated >= queryDate)
+ };
+
+ return Ok(new Response(response, true));
+ }
+
+
+ ///
+ /// Статистика по нарядам - кол-во заданий на изменение нарядов в ЕСПП
+ ///
+ ///
+ [HttpGet(ApiRoutes.StatOrder.TaskToEspp)]
+ public async Task TaskToEspp()
+ {
+ return Ok();
+ }
+
+
+ ///
+ /// Статистика по нарядам - по статусам в ПАРР
+ ///
+ ///
+ [HttpGet(ApiRoutes.StatOrder.Statuses)]
+ public async Task Statuses()
+ {
+ var statuses = await orderStatusService.Get().OrderBy(t => t.Code).ToListAsync();
+
+
+ var response = new List();
+ foreach (var stat in statuses)
+ {
+ response.Add(new StatOrderStatusesResponse
+ {
+ Status = mapper.Map(stat),
+ Count = await orderService.Get().CountAsync(t => t.StatusCode == stat.Code)
+ });
+ }
+
+ return Ok(new Response>(response, true));
+ }
+
+
+ ///
+ /// Статистика по нарядам - по статусу за последние сутки
+ ///
+ /// 1,2,3,4,5
+ ///
+ [HttpGet(ApiRoutes.StatOrder.GetStatusesLastDay)]
+ public async Task GetStatusesLastDay([FromRoute] int statusCode)
+ {
+ var status = await orderStatusService.Get().FirstOrDefaultAsync(t => t.Code == statusCode);
+
+ if (status == null)
+ return BadRequest(new Response(false, new List { new ErrorModel { Message = $"Не найден статус с кодом: {statusCode}" } }));
+
+ var queryDate = DateTimeOffset.UtcNow.AddDays(-1);
+
+ var response = new GetStatusesLastDayResponse
+ {
+ Count = await orderService.Get().CountAsync(t => t.DateModified >= queryDate && t.StatusCode == statusCode),
+ Status = mapper.Map(status)
+ };
+
+ return Ok(new Response(response, true));
+ }
+
+
+ }
+}
diff --git a/PARR.API/MappingProfiles/DomainToResponseProfile.cs b/PARR.API/MappingProfiles/DomainToResponseProfile.cs
index 14755c8f..da12a4d8 100644
--- a/PARR.API/MappingProfiles/DomainToResponseProfile.cs
+++ b/PARR.API/MappingProfiles/DomainToResponseProfile.cs
@@ -163,6 +163,7 @@ namespace PARR.API.MappingProfiles
.ForMember(t => t.Level, o => o.MapFrom(s => s.AgentHistoryLevel));
+
#region User
CreateMap()
@@ -174,6 +175,10 @@ namespace PARR.API.MappingProfiles
#endregion
+ #region Order
+ CreateMap();
+ #endregion
+
}
}
}