private bool AlreadyHaveItemWithSignature(AnalyticStatisticsItem item) { using (VTSDatabase database = new VTSDatabase()) { return(database.AnalyticStatisticsItem.Any( i => i.Type == (int)item.Type && i.TargetEngineFamilyType == (int)item.TargetEngineFamilyType && i.TargetEngineType == (int)item.TargetEngineType)); } }
private void PersistNewAnalyticStatisticsItem(AnalyticStatisticsItem item) { AnalyticStatisticsItemEntity entity = AnalyticStatisticsItemAssembler.FromDomainObjectToEntity(item); using (VTSDatabase database = new VTSDatabase()) { database.AnalyticStatisticsItem.Add(entity); database.SaveChanges(); RememberUpdatedItem(entity); } }
private bool AlreadyHaveThisValueForThisItem( AnalyticStatisticsItem item, AnalyticStatisticsValue value) { using (VTSDatabase database = new VTSDatabase()) { AnalyticStatisticsItemEntity ourItem = database.AnalyticStatisticsItem.First( i => i.Type == (int)item.Type && i.TargetEngineFamilyType == (int)item.TargetEngineFamilyType && i.TargetEngineType == (int)item.TargetEngineType); return(ourItem.AnalyticStatisticsValue.Any(v => v.SourcePsaParametersSetId == value.SourcePsaParametersSetId)); } }
private void AddNewValueToExistingItem(AnalyticStatisticsItem item, AnalyticStatisticsValue value) { AnalyticStatisticsValueEntity entityToAdd = AnalyticStatisticsValueAssembler.FromDomainObjectToEntity(value); using (VTSDatabase database = new VTSDatabase()) { AnalyticStatisticsItemEntity existingItem = database.AnalyticStatisticsItem.First( i => i.Type == (int)item.Type && i.TargetEngineFamilyType == (int)item.TargetEngineFamilyType && i.TargetEngineType == (int)item.TargetEngineType); existingItem.AnalyticStatisticsValue.Add(entityToAdd); database.SaveChanges(); RememberUpdatedItem(existingItem); } }
private void UpdateValue(AnalyticStatisticsItem item, AnalyticStatisticsValue value) { using (VTSDatabase database = new VTSDatabase()) { AnalyticStatisticsItemEntity existingItem = database.AnalyticStatisticsItem.First( i => i.Type == (int)item.Type && i.TargetEngineFamilyType == (int)item.TargetEngineFamilyType && i.TargetEngineType == (int)item.TargetEngineType); AnalyticStatisticsValueEntity entityToUpdate = existingItem.AnalyticStatisticsValue.First( v => v.SourcePsaParametersSetId == value.SourcePsaParametersSetId); if (!entityToUpdate.Value.Equals(value.Value)) { entityToUpdate.Value = value.Value; database.SaveChanges(); RememberUpdatedItem(existingItem); } } }
private void UpdateDatabaseWithItem(AnalyticStatisticsItem item) { if (AlreadyHaveItemWithSignature(item)) { foreach (AnalyticStatisticsValue value in item.Values) { if (AlreadyHaveThisValueForThisItem(item, value)) { UpdateValue(item, value); } else { AddNewValueToExistingItem(item, value); } } } else { PersistNewAnalyticStatisticsItem(item); } }
private void AggregateAnalyticStatisticsItemEntity( AnalyticStatisticsItemEntity item, VTSDatabase database) { VTS.Shared.DomainObjects.AnalyticStatisticsItem asi = AnalyticStatisticsItemAssembler.FromEntityToDomainObject(item); VTS.AnalysisCore.Common.AnalyticRuleSettings settings = AggregatorFactory.Create(asi).Aggregate(); AnalyticRuleSettingsEntity entityToUpdate = database.AnalyticRuleSettings. FirstOrDefault(s => s.RuleType == (int)settings.RuleType && s.EngineType == (int)settings.EngineType); if (entityToUpdate == null) { database.AnalyticRuleSettings.Add( AnalyticRuleSettingsAssembler.FromDomainObjectToEntity(settings)); } else { AnalyticRuleSettingsEntity sourceEntity = AnalyticRuleSettingsAssembler.FromDomainObjectToEntity(settings); UpdateAnalyticRuleStatisticalAtomEntity(sourceEntity, entityToUpdate); ReliabilitySummarizer summarizer = new ReliabilitySummarizer(); summarizer.SummarizeFor(entityToUpdate); } }
public static IAggregator Create(AnalyticStatisticsItem source) { switch (source.Type) { case AnalyticRuleType.Injector1CorrectionAt1000Rpm: case AnalyticRuleType.Injector1CorrectionAt2000Rpm: case AnalyticRuleType.Injector1CorrectionAt3000Rpm: case AnalyticRuleType.Injector2CorrectionAt1000Rpm: case AnalyticRuleType.Injector2CorrectionAt2000Rpm: case AnalyticRuleType.Injector2CorrectionAt3000Rpm: case AnalyticRuleType.Injector3CorrectionAt1000Rpm: case AnalyticRuleType.Injector3CorrectionAt2000Rpm: case AnalyticRuleType.Injector3CorrectionAt3000Rpm: case AnalyticRuleType.Injector4CorrectionAt1000Rpm: case AnalyticRuleType.Injector4CorrectionAt2000Rpm: case AnalyticRuleType.Injector4CorrectionAt3000Rpm: return(new InjectorCorrectionForRpmAggregator(source)); // Common Rail - fuel pressure difference case AnalyticRuleType.FuelPressureDelta1000Rpm: case AnalyticRuleType.FuelPressureDelta2000Rpm: case AnalyticRuleType.FuelPressureDelta3000Rpm: // Petrol engine purification case AnalyticRuleType.LambdaUpperVoltageAt1000Rpm: case AnalyticRuleType.LambdaUpperVoltageAt2000Rpm: case AnalyticRuleType.LambdaUpperVoltageAt3000Rpm: case AnalyticRuleType.LambdaLowerVoltageAt1000Rpm: case AnalyticRuleType.LambdaLowerVoltageAt2000Rpm: case AnalyticRuleType.LambdaLowerVoltageAt3000Rpm: // engine startup undervoltage case AnalyticRuleType.EngineStartUndervoltage: // cylinder coils charge time for different rpms case AnalyticRuleType.Cylinder1CoilChargeTime1000Rpm: case AnalyticRuleType.Cylinder1CoilChargeTime2000Rpm: case AnalyticRuleType.Cylinder1CoilChargeTime3000Rpm: case AnalyticRuleType.Cylinder2CoilChargeTime1000Rpm: case AnalyticRuleType.Cylinder2CoilChargeTime2000Rpm: case AnalyticRuleType.Cylinder2CoilChargeTime3000Rpm: case AnalyticRuleType.Cylinder3CoilChargeTime1000Rpm: case AnalyticRuleType.Cylinder3CoilChargeTime2000Rpm: case AnalyticRuleType.Cylinder3CoilChargeTime3000Rpm: case AnalyticRuleType.Cylinder4CoilChargeTime1000Rpm: case AnalyticRuleType.Cylinder4CoilChargeTime2000Rpm: case AnalyticRuleType.Cylinder4CoilChargeTime3000Rpm: // cylinder coils peak timing on startup case AnalyticRuleType.Cylinder1CoilStartupChargeTimePeak: case AnalyticRuleType.Cylinder2CoilStartupChargeTimePeak: case AnalyticRuleType.Cylinder3CoilStartupChargeTimePeak: case AnalyticRuleType.Cylinder4CoilStartupChargeTimePeak: // injection time for petrol engines case AnalyticRuleType.InjectionTimeAt1000Rpm: case AnalyticRuleType.InjectionTimeAt2000Rpm: case AnalyticRuleType.InjectionTimeAt3000Rpm: // injection time peak for petrol engines case AnalyticRuleType.InjectionTimeStartupPeak: // fuel regulator current for common rail engines case AnalyticRuleType.FuelPressureRegulatorCurrent1000Rpm: case AnalyticRuleType.FuelPressureRegulatorCurrent2000Rpm: case AnalyticRuleType.FuelPressureRegulatorCurrent3000Rpm: return(new StandardAggregator(source)); default: throw new NotImplementedException(); } }