2022-07-18 18:51:49 +05:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
2022-08-01 13:55:51 +05:00
|
|
|
|
using System.ComponentModel.DataAnnotations;
|
2023-09-28 16:25:29 +05:00
|
|
|
|
using System.Linq;
|
2022-07-18 18:51:49 +05:00
|
|
|
|
|
|
|
|
|
namespace AsbCloudApp.Requests
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// класс с фильтрами для запроса
|
|
|
|
|
/// </summary>
|
2023-09-28 16:25:29 +05:00
|
|
|
|
public class SubsystemOperationTimeRequest: RequestBase, IValidatableObject
|
2022-07-18 18:51:49 +05:00
|
|
|
|
{
|
2023-09-28 16:25:29 +05:00
|
|
|
|
private static readonly DateTime validationMinDate = new DateTime(2020,01,01,0,0,0,DateTimeKind.Utc);
|
|
|
|
|
|
2022-08-01 13:55:51 +05:00
|
|
|
|
/// <summary>
|
2022-10-25 09:42:08 +05:00
|
|
|
|
/// идентификатор скважины
|
2022-08-01 13:55:51 +05:00
|
|
|
|
/// </summary>
|
|
|
|
|
[Required]
|
|
|
|
|
public int IdWell { get; set; }
|
2023-09-28 16:25:29 +05:00
|
|
|
|
|
2022-08-01 13:55:51 +05:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// идентификатор подсистемы
|
|
|
|
|
/// </summary>
|
2023-09-28 16:25:29 +05:00
|
|
|
|
public IEnumerable<int> IdsSubsystems { get; set; } = Enumerable.Empty<int>();
|
2022-08-01 13:55:51 +05:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Больше или равно дате
|
|
|
|
|
/// </summary>
|
2023-10-04 16:41:19 +05:00
|
|
|
|
public DateTime? GtDate { get; set; }//TODO: its Ge*
|
2022-08-01 13:55:51 +05:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Меньше или равно дате
|
|
|
|
|
/// </summary>
|
|
|
|
|
public DateTime? LtDate { get; set; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Больше или равно глубины забоя
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double? GtDepth { get; set; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Меньше или равно глубины забоя
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double? LtDepth { get; set; }
|
|
|
|
|
|
2023-10-04 16:41:19 +05:00
|
|
|
|
//TODO: Replace modes by DateTimeOffset LeDateStart, LeDateEnd
|
2022-08-01 13:55:51 +05:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// информация попадает в выборку, если интервал выборки частично или полностью пересекается с запрашиваемым интервалом
|
|
|
|
|
/// </summary>
|
|
|
|
|
public const int SelectModeOuter = 0;
|
2022-09-07 18:01:39 +05:00
|
|
|
|
|
2022-08-01 13:55:51 +05:00
|
|
|
|
/// <summary>
|
2022-08-02 15:26:33 +05:00
|
|
|
|
/// информация попадает в выборку, если интервал выборки строго полностью пересекается с запрашиваемым интервалом.
|
2022-08-01 13:55:51 +05:00
|
|
|
|
/// </summary>
|
|
|
|
|
public const int SelectModeInner = 1;
|
2022-09-07 18:01:39 +05:00
|
|
|
|
|
2022-08-02 15:26:33 +05:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// аналогично outer, но интервалы в частично пересекающиеся укорачиваются по границам интервала выборки.
|
|
|
|
|
/// </summary>
|
2022-08-01 13:55:51 +05:00
|
|
|
|
public const int SelectModeTrim = 2;
|
2022-09-07 18:01:39 +05:00
|
|
|
|
|
2022-08-02 15:26:33 +05:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Режим выборки элементов
|
|
|
|
|
/// </summary>
|
2022-08-01 13:55:51 +05:00
|
|
|
|
public int SelectMode { get; set; } = SelectModeOuter;
|
2023-09-28 16:25:29 +05:00
|
|
|
|
|
|
|
|
|
/// <inheritdoc/>
|
|
|
|
|
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
|
|
|
|
|
{
|
|
|
|
|
if (GtDate.HasValue && GtDate < validationMinDate)
|
|
|
|
|
yield return new ValidationResult(
|
|
|
|
|
$"Должно быть больше {validationMinDate:O})",
|
|
|
|
|
new[] { nameof(GtDate) });
|
|
|
|
|
|
|
|
|
|
if (LtDate.HasValue && GtDate.HasValue)
|
|
|
|
|
{
|
|
|
|
|
if (LtDate < GtDate)
|
|
|
|
|
yield return new ValidationResult(
|
|
|
|
|
$"{nameof(LtDate)} должно быть больше {nameof(GtDate)}. ({LtDate:O} < {GtDate:O})",
|
|
|
|
|
new[] { nameof(LtDate), nameof(GtDate) });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (LtDepth.HasValue && GtDepth.HasValue)
|
|
|
|
|
{
|
|
|
|
|
if (LtDepth < GtDepth)
|
|
|
|
|
yield return new ValidationResult(
|
2023-11-02 11:01:07 +05:00
|
|
|
|
$"{nameof(LtDepth)} должно быть больше {nameof(GtDepth)}. ({LtDepth} < {GtDepth})",
|
2023-09-28 16:25:29 +05:00
|
|
|
|
new[] { nameof(LtDepth), nameof(GtDepth) });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
yield break;
|
|
|
|
|
}
|
2022-07-18 18:51:49 +05:00
|
|
|
|
}
|
|
|
|
|
}
|