forked from ddrilling/AsbCloudServer
164 lines
7.3 KiB
C#
164 lines
7.3 KiB
C#
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using AsbCloudDb.Model;
|
|||
|
|
|||
|
namespace AsbCloudInfrastructure.Services
|
|||
|
{
|
|||
|
public class OperationDetectorsContainer
|
|||
|
{
|
|||
|
public IEnumerable<OperationDetector> Detectors;
|
|||
|
|
|||
|
public OperationDetectorsContainer(IEnumerable<Operation> operations)
|
|||
|
{
|
|||
|
Detectors = new List<OperationDetector>()
|
|||
|
{
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 1,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("На поверхности")),
|
|||
|
Detect = (data) =>
|
|||
|
{
|
|||
|
return data.IsDepthNotChanges && data.IsBitDepthLess20 && data.IsHookWeightLess3;
|
|||
|
}
|
|||
|
},
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 2,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("Удержание в клиньях")),
|
|||
|
Detect = (data) =>
|
|||
|
{
|
|||
|
return data.IsDepthNotChanges && data.IsBitStandsStill &&
|
|||
|
data.IsBlockStandsStill && data.IsHookWeightLess3;
|
|||
|
}
|
|||
|
},
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 3,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("Подъем с проработкой")),
|
|||
|
Detect = (data) =>
|
|||
|
{
|
|||
|
return data.IsDepthNotChanges && data.IsBitRising &&
|
|||
|
data.IsBlockRising && data.IsRotorSpeedMore3 && data.IsPressureMore20;
|
|||
|
}
|
|||
|
},
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 4,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("Спуск с проработкой")),
|
|||
|
Detect = (data) =>
|
|||
|
{
|
|||
|
return data.IsDepthNotChanges && data.IsBitGoesDown &&
|
|||
|
data.IsBlockGoesDown && data.IsRotorSpeedMore3 && data.IsPressureMore20;
|
|||
|
}
|
|||
|
},
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 5,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("Подъем с промывкой")),
|
|||
|
Detect = (data) =>
|
|||
|
{
|
|||
|
return data.IsDepthNotChanges && data.IsBitRising &&
|
|||
|
data.IsBlockRising && data.IsRotorSpeedLess3 && data.IsPressureMore20;
|
|||
|
}
|
|||
|
},
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 6,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("Спуск с промывкой")),
|
|||
|
Detect = (data) =>
|
|||
|
{
|
|||
|
return data.IsDepthNotChanges && data.IsBitGoesDown &&
|
|||
|
data.IsBlockGoesDown && data.IsRotorSpeedLess3 && data.IsPressureMore20;
|
|||
|
}
|
|||
|
},
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 7,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("Спуск в скважину")),
|
|||
|
Detect = (data) =>
|
|||
|
{
|
|||
|
return data.IsDepthNotChanges && data.IsBitGoesDown &&
|
|||
|
data.IsBlockGoesDown && data.IsRotorSpeedLess3 && data.IsPressureLess20;
|
|||
|
}
|
|||
|
},
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 8,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("Спуск с вращением")),
|
|||
|
Detect = (data) =>
|
|||
|
{
|
|||
|
return data.IsDepthNotChanges && data.IsBitGoesDown &&
|
|||
|
data.IsBlockGoesDown && data.IsRotorSpeedMore3 && data.IsPressureLess20;
|
|||
|
}
|
|||
|
},
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 9,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("Подъем из скважины")),
|
|||
|
Detect = (data) =>
|
|||
|
{
|
|||
|
return data.IsDepthNotChanges && data.IsBitRising &&
|
|||
|
data.IsBlockRising && data.IsRotorSpeedLess3 && data.IsPressureLess20;
|
|||
|
}
|
|||
|
},
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 10,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("Подъем с вращением")),
|
|||
|
Detect = (data) =>
|
|||
|
{
|
|||
|
return data.IsDepthNotChanges && data.IsBitRising &&
|
|||
|
data.IsBlockRising && data.IsRotorSpeedMore3 && data.IsPressureLess20;
|
|||
|
}
|
|||
|
},
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 11,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("Промывка в покое")),
|
|||
|
Detect = (data) =>
|
|||
|
{
|
|||
|
return data.IsDepthNotChanges && data.IsBitStandsStill &&
|
|||
|
data.IsBlockStandsStill && data.IsRotorSpeedLess3 && data.IsPressureMore20;
|
|||
|
}
|
|||
|
},
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 12,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("Промывка с вращением")),
|
|||
|
Detect = (data) =>
|
|||
|
{
|
|||
|
return data.IsDepthNotChanges && data.IsBitStandsStill &&
|
|||
|
data.IsBlockStandsStill && data.IsRotorSpeedMore3 && data.IsPressureMore20;
|
|||
|
}
|
|||
|
},
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 13,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("Неподвижное состояние")),
|
|||
|
Detect = (data) =>
|
|||
|
{
|
|||
|
return data.IsDepthNotChanges && data.IsBitStandsStill && data.IsBlockStandsStill
|
|||
|
&& data.IsRotorSpeedLess3 && data.IsPressureLess20 && data.IsHookWeightNotChanges;
|
|||
|
}
|
|||
|
},
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 14,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("Вращение без циркуляции")),
|
|||
|
Detect = (data) =>
|
|||
|
{
|
|||
|
return data.IsDepthNotChanges && data.IsBitStandsStill &&
|
|||
|
data.IsBlockStandsStill && data.IsRotorSpeedMore3 && data.IsPressureLess20;
|
|||
|
}
|
|||
|
},
|
|||
|
new OperationDetector
|
|||
|
{
|
|||
|
Order = 15,
|
|||
|
Operation = operations.FirstOrDefault(o => o.Name.Equals("Невозможно определить операцию")),
|
|||
|
Detect = (data) => true
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
}
|
|||
|
}
|