private Dictionary <BreakerOperationType, int> GetBreakerOperationTypeLookup(DbAdapterContainer dbAdapterContainer) { MeterData.BreakerOperationTypeDataTable breakerOperationTypeTable = new MeterData.BreakerOperationTypeDataTable(); BreakerOperationType breakerOperationType = default(BreakerOperationType); foreach (BreakerOperationType operationType in Enum.GetValues(typeof(BreakerOperationType))) { breakerOperationTypeTable.AddBreakerOperationTypeRow(operationType.ToString(), operationType.ToString()); } BulkLoader bulkLoader = new BulkLoader(); bulkLoader.Connection = dbAdapterContainer.Connection; bulkLoader.CommandTimeout = dbAdapterContainer.CommandTimeout; bulkLoader.MergeTableFormat = "MERGE INTO {0} AS Target " + "USING {1} AS Source " + "ON Source.Name = Target.Name " + "WHEN NOT MATCHED THEN " + " INSERT (Name, Description) " + " VALUES (Source.Name, Source.Description);"; bulkLoader.Load(breakerOperationTypeTable); dbAdapterContainer.GetAdapter <BreakerOperationTypeTableAdapter>().Fill(breakerOperationTypeTable); return(breakerOperationTypeTable .Where(row => Enum.TryParse(row.Name, out breakerOperationType)).Select(row => Tuple.Create(breakerOperationType, row.ID)) .ToDictionary(tuple => tuple.Item1, tuple => tuple.Item2)); }
private BreakerOperation GetBreakerOperation(AdoDataConnection connection, int eventID, string breakerNumber, BreakerTiming breakerTiming, PhaseTiming aPhaseTiming, PhaseTiming bPhaseTiming, PhaseTiming cPhaseTiming) { TableOperations <Phase> phaseTable = new TableOperations <Phase>(connection); TableOperations <openXDA.Model.BreakerOperationType> breakerOperationTypeTable = new TableOperations <openXDA.Model.BreakerOperationType>(connection); double maxTiming = GetMaxTiming(breakerTiming, aPhaseTiming, bPhaseTiming, cPhaseTiming); string phase = GetLatestPhase(aPhaseTiming, bPhaseTiming, cPhaseTiming); BreakerOperationType type = GetBreakerOperationType(maxTiming, breakerTiming.Speed); return(new BreakerOperation() { EventID = eventID, PhaseID = phaseTable.GetOrAdd(phase).ID, BreakerOperationTypeID = breakerOperationTypeTable.GetOrAdd(type.ToString()).ID, BreakerNumber = breakerNumber, TripCoilEnergized = breakerTiming.TimeEnergized.Time, StatusBitSet = breakerTiming.IsValid ? breakerTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time, StatusBitChatter = breakerTiming.StatusChatter, APhaseCleared = aPhaseTiming.IsValid ? aPhaseTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time, BPhaseCleared = bPhaseTiming.IsValid ? bPhaseTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time, CPhaseCleared = cPhaseTiming.IsValid ? cPhaseTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time, BreakerTiming = NotNaN(maxTiming), StatusTiming = NotNaN(breakerTiming.Timing), APhaseBreakerTiming = NotNaN(aPhaseTiming.Timing), BPhaseBreakerTiming = NotNaN(bPhaseTiming.Timing), CPhaseBreakerTiming = NotNaN(cPhaseTiming.Timing), DcOffsetDetected = (aPhaseTiming.DcOffsetDetected || bPhaseTiming.DcOffsetDetected || cPhaseTiming.DcOffsetDetected), BreakerSpeed = NotNaN(breakerTiming.Speed) }); }
private MeterData.BreakerOperationRow GetBreakerOperationRow(string breakerNumber, BreakerTiming breakerTiming, PhaseTiming aPhaseTiming, PhaseTiming bPhaseTiming, PhaseTiming cPhaseTiming) { double maxTiming = GetMaxTiming(aPhaseTiming, bPhaseTiming, cPhaseTiming); string phase = GetLatestPhase(aPhaseTiming, bPhaseTiming, cPhaseTiming); BreakerOperationType type = GetBreakerOperationType(maxTiming, breakerTiming.Speed); MeterData.BreakerOperationRow breakerOperationRow = m_breakerOperationTable.NewBreakerOperationRow(); breakerOperationRow.PhaseID = m_phaseLookup.GetOrAdd(phase, name => new Phase() { Name = name, Description = name }).ID; breakerOperationRow.BreakerOperationTypeID = s_breakerOperationTypeLookup[type]; breakerOperationRow.BreakerNumber = breakerNumber; breakerOperationRow.TripCoilEnergized = breakerTiming.TimeEnergized.Time; breakerOperationRow.StatusBitSet = breakerTiming.IsValid ? breakerTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time; breakerOperationRow.APhaseCleared = aPhaseTiming.IsValid ? aPhaseTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time; breakerOperationRow.BPhaseCleared = bPhaseTiming.IsValid ? bPhaseTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time; breakerOperationRow.CPhaseCleared = cPhaseTiming.IsValid ? cPhaseTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time; breakerOperationRow.BreakerTiming = NotNaN(maxTiming); breakerOperationRow.APhaseBreakerTiming = NotNaN(aPhaseTiming.Timing); breakerOperationRow.BPhaseBreakerTiming = NotNaN(bPhaseTiming.Timing); breakerOperationRow.CPhaseBreakerTiming = NotNaN(cPhaseTiming.Timing); breakerOperationRow.BreakerSpeed = NotNaN(breakerTiming.Speed); return(breakerOperationRow); }
private Dictionary <BreakerOperationType, int> GetBreakerOperationTypeLookup(DbAdapterContainer dbAdapterContainer) { BreakerOperationTypeDataTable breakerOperationTypeTable = new BreakerOperationTypeDataTable(); BreakerOperationType breakerOperationType = default(BreakerOperationType); foreach (BreakerOperationType operationType in Enum.GetValues(typeof(BreakerOperationType))) { breakerOperationTypeTable.AddBreakerOperationTypeRow(operationType.ToString(), operationType.ToString()); } BulkLoader bulkLoader = new BulkLoader(); bulkLoader.Connection = dbAdapterContainer.Connection; bulkLoader.CommandTimeout = dbAdapterContainer.CommandTimeout; bulkLoader.MergeTableFormat = "MERGE INTO {0} AS Target " + "USING {1} AS Source " + "ON Source.Name = Target.Name " + "WHEN NOT MATCHED THEN " + " INSERT (Name, Description) " + " VALUES (Source.Name, Source.Description);"; bulkLoader.Load(breakerOperationTypeTable); dbAdapterContainer.GetAdapter <BreakerOperationTypeTableAdapter>().Fill(breakerOperationTypeTable); foreach (IGrouping <string, BreakerOperationTypeRow> grouping in breakerOperationTypeTable.GroupBy(row => row.Name)) { if (grouping.Count() > 1) { Log.Warn($"Found duplicate breaker operation type: {grouping.Key}"); } } return(breakerOperationTypeTable .Where(row => Enum.TryParse(row.Name, out breakerOperationType)) .Select(row => new { BreakerOperationType = breakerOperationType, row.ID }) .ToList() .DistinctBy(obj => obj.BreakerOperationType) .ToDictionary(obj => obj.BreakerOperationType, obj => obj.ID)); }