public override void Execute(MeterDataSet meterDataSet) { FaultDataResource faultDataResource = meterDataSet.GetResource <FaultDataResource>(); CycleDataResource cycleDataResource = meterDataSet.GetResource <CycleDataResource>(); FaultGroup faultGroup; Log.Info("Executing operation to load fault location data into the database..."); m_faultSummarizer = new FaultSummarizer(m_systemFrequency); m_faultSummarizer.MeterDataSet = meterDataSet; foreach (DataGroup dataGroup in cycleDataResource.DataGroups) { if (!faultDataResource.FaultLookup.TryGetValue(dataGroup, out faultGroup)) { continue; } // Generate summary rows for the fault to be entered into the database m_faultSummarizer.DataGroup = dataGroup; m_faultSummarizer.FaultGroup = faultGroup; m_faultSummarizer.SummarizeFault(); } }
public override void Execute(MeterDataSet meterDataSet) { CycleDataResource cycleDataResource = meterDataSet.GetResource <CycleDataResource>(); FaultDataResource faultDataResource = meterDataSet.GetResource <FaultDataResource>(); using (AdoDataConnection connection = meterDataSet.CreateDbConnection()) { object ToDateTime2(DateTime dateTime) { using (IDbCommand command = connection.Connection.CreateCommand()) { IDbDataParameter parameter = command.CreateParameter(); parameter.DbType = DbType.DateTime2; parameter.Value = dateTime; return(parameter); } } TableOperations <Event> eventTable = new TableOperations <Event>(connection); TableOperations <EventStat> eventStatTable = new TableOperations <EventStat>(connection); for (int i = 0; i < cycleDataResource.DataGroups.Count; i++) { const string Filter = "FileGroupID = {0} AND " + "AssetID = {1} AND " + "StartTime = {2} AND " + "EndTime = {3}"; DataGroup dataGroup = cycleDataResource.DataGroups[i]; VIDataGroup viDataGroup = cycleDataResource.VIDataGroups[i]; VICycleDataGroup viCycleDataGroup = cycleDataResource.VICycleDataGroups[i]; int fileGroupID = meterDataSet.FileGroup.ID; int assetID = dataGroup.Asset.ID; object startTime = ToDateTime2(dataGroup.StartTime); object endTime = ToDateTime2(dataGroup.EndTime); Event evt = eventTable.QueryRecordWhere(Filter, fileGroupID, assetID, startTime, endTime); if (evt == null) { continue; } double?vPeak = CalcVoltagePeak(viDataGroup); double?vaMax = CalcMax(viCycleDataGroup.VA?.RMS); double?vbMax = CalcMax(viCycleDataGroup.VB?.RMS); double?vcMax = CalcMax(viCycleDataGroup.VC?.RMS); double?vabMax = CalcMax(viCycleDataGroup.VAB?.RMS); double?vbcMax = CalcMax(viCycleDataGroup.VBC?.RMS); double?vcaMax = CalcMax(viCycleDataGroup.VCA?.RMS); double?vaMin = CalcMin(viCycleDataGroup.VA?.RMS); double?vbMin = CalcMin(viCycleDataGroup.VB?.RMS); double?vcMin = CalcMin(viCycleDataGroup.VC?.RMS); double?vabMin = CalcMin(viCycleDataGroup.VAB?.RMS); double?vbcMin = CalcMin(viCycleDataGroup.VBC?.RMS); double?vcaMin = CalcMin(viCycleDataGroup.VCA?.RMS); double?iPeak = CalcPeak(new[] { viDataGroup.IA, viDataGroup.IB, viDataGroup.IC }); double?iaMax = CalcMax(viCycleDataGroup.IA?.RMS); double?ibMax = CalcMax(viCycleDataGroup.IB?.RMS); double?icMax = CalcMax(viCycleDataGroup.IC?.RMS); double?ia2t = null; double?ib2t = null; double?ic2t = null; double?initialMW = CalcMW(viCycleDataGroup, true); double?finalMW = CalcMW(viCycleDataGroup, false); if (faultDataResource.FaultLookup.TryGetValue(dataGroup, out DataAnalysis.FaultGroup faultGroup)) { ia2t = CalcI2t(faultGroup, viDataGroup.IA); ib2t = CalcI2t(faultGroup, viDataGroup.IB); ic2t = CalcI2t(faultGroup, viDataGroup.IC); } int?pqviewID = null; if (meterDataSet.FilePath.Contains("\\pqview4\\events\\")) { Regex pattern = new Regex(@"^\\pqview4\\events\\PQView4 \d+\\\d+T\d+-(?<PQViewID>\d+).pqd$"); Match match = pattern.Match(meterDataSet.FilePath); string str = match.Groups["PQViewID"].Value; if (str != null) { pqviewID = int.Parse(str); } } eventStatTable.AddNewRecord(new EventStat() { EventID = evt.ID, VPeak = vPeak, VAMax = vaMax, VBMax = vbMax, VCMax = vcMax, VABMax = vabMax, VBCMax = vbcMax, VCAMax = vcaMax, VAMin = vaMin, VBMin = vbMin, VCMin = vcMin, VABMin = vabMin, VBCMin = vbcMin, VCAMin = vcaMin, IPeak = iPeak, IAMax = iaMax, IBMax = ibMax, ICMax = icMax, IA2t = ia2t, IB2t = ib2t, IC2t = ic2t, InitialMW = initialMW, FinalMW = finalMW, PQViewID = pqviewID }); } } }
public override void Execute(MeterDataSet meterDataSet) { FaultDataResource faultDataResource = meterDataSet.GetResource <FaultDataResource>(); string stationKey = meterDataSet.Meter.MeterLocation.AssetKey; foreach (var kvp in faultDataResource.FaultLookup) { DataGroup dataGroup = kvp.Key; DataAnalysis.FaultGroup faultGroup = kvp.Value; string lineKey = dataGroup.Line.AssetKey; for (int i = 0; i < faultGroup.Faults.Count; i++) { int faultNumber = i + 1; DataAnalysis.Fault fault = faultGroup.Faults[i]; if (fault.IsSuppressed) { continue; } string distance = fault.Summaries .Where(summary => summary.IsValid) .Where(summary => summary.IsSelectedAlgorithm) .Select(summary => summary.Distance.ToString("0.###")) .FirstOrDefault(); if (distance == null) { return; } string url = string.Format(Settings.URLFormat, stationKey, lineKey, distance); string structureInfo = GetStructureInfo(url); DataTable structureData = ToDataTable(structureInfo); if (structureData.Rows.Count == 0) { return; } Func <string, string> fieldMappingLookup = FieldMappingLookup; string assetKeyField = fieldMappingLookup("AssetKey"); string latitudeKeyField = fieldMappingLookup("Latitude"); string longitudeKeyField = fieldMappingLookup("Longitude"); if (!structureData.Columns.Contains(assetKeyField)) { return; } using (AdoDataConnection connection = meterDataSet.CreateDbConnection()) { TableOperations <Event> eventTable = new TableOperations <Event>(connection); Event evt = eventTable.GetEvent(meterDataSet.FileGroup, dataGroup); int faultSummaryID = connection.ExecuteScalar <int>(FaultSummaryQuery, evt.ID, faultNumber); TableOperations <Structure> structureTable = new TableOperations <Structure>(connection); foreach (DataRow row in structureData.Rows) { string assetKey = row.Field <string>(assetKeyField); string latitude = null; string longitude = null; if (structureData.Columns.Contains(latitudeKeyField)) { latitude = row.Field <string>(latitudeKeyField); } if (structureData.Columns.Contains(longitudeKeyField)) { longitude = row.Field <string>(longitudeKeyField); } Structure structure = structureTable.QueryRecordWhere("AssetKey = {0}", assetKey) ?? new Structure() { AssetKey = assetKey }; structure.LineID = dataGroup.Line.ID; if (double.TryParse(latitude, out double lat)) { structure.Latitude = lat; } if (double.TryParse(longitude, out double lon)) { structure.Longitude = lon; } structureTable.AddNewOrUpdateRecord(structure); if (structure.ID == 0) { structure.ID = connection.ExecuteScalar <int>("SELECT @@IDENTITY"); } if (faultSummaryID != 0) { connection.ExecuteNonQuery("INSERT INTO NearestStructure(FaultSummaryID, StructureID) VALUES({0}, {1})", faultSummaryID, structure.ID); } } } } } }