forked from ddrilling/AsbCloudServer
67 lines
2.3 KiB
C#
67 lines
2.3 KiB
C#
using AsbCloudDb.Model;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors
|
|
{
|
|
class OperationDetectorResult
|
|
{
|
|
public int TelemetryBegin { get; set; }
|
|
public int TelemetryEnd { get; set; }
|
|
public DetectedOperation Operation { get; set; }
|
|
}
|
|
|
|
internal class OperationDetector : IOperationDetector
|
|
{
|
|
private readonly int idOperation;
|
|
|
|
protected Func<DetectableTelemetry[], int, int, bool> isValid = (_,_,_) => true;
|
|
|
|
protected Func<DetectableTelemetry[], int, int, double> calcValue = (_, _, _) => 0d;
|
|
|
|
public OperationDetector(int idOperation)
|
|
{
|
|
this.idOperation = idOperation;
|
|
}
|
|
|
|
public bool TryDetect(int idTelemetry, DetectableTelemetry[] telemetryFragment, int begin, int end, out IEnumerable<OperationDetectorResult> operations)
|
|
{
|
|
if(!telemetryFragment.Any() || !isValid(telemetryFragment, begin, end))
|
|
{
|
|
operations = Enumerable.Empty<OperationDetectorResult>();
|
|
return false;
|
|
}
|
|
|
|
var operation = MakeOperation(idTelemetry, telemetryFragment, begin, end);
|
|
|
|
operations = new List<OperationDetectorResult> { operation };
|
|
|
|
return true;
|
|
}
|
|
|
|
private OperationDetectorResult MakeOperation(int idTelemetry, DetectableTelemetry[] telemetryFragment, int begin, int end)
|
|
{
|
|
var pBegin = telemetryFragment[begin];
|
|
var pEnd = telemetryFragment[end];
|
|
var result = new OperationDetectorResult
|
|
{
|
|
TelemetryBegin = begin,
|
|
TelemetryEnd = end,
|
|
Operation = new DetectedOperation
|
|
{
|
|
IdTelemetry = idTelemetry,
|
|
IdCategory = idOperation,
|
|
IdUsersAtStart = pBegin.IdUser ?? -1,
|
|
DateStart = pBegin.DateTime,
|
|
DateEnd = pEnd.DateTime,
|
|
DepthStart = (double)pBegin.WellDepth,
|
|
DepthEnd = (double)pEnd.WellDepth,
|
|
Value = calcValue(telemetryFragment, begin, end),
|
|
},
|
|
};
|
|
return result;
|
|
}
|
|
}
|
|
}
|