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);
            }
        }
Пример #8
0
        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();
            }
        }