public List <long> GetAnalogValuesGidForGidAndPowerType(long gid, PowerType powerType) { List <long> resultIds = new List <long>(); List <SynchronousMachine> ders = new List <SynchronousMachine>(); int numberOfResources = 500; Association association = new Association(ModelCode.SYNCMACHINE_MEASVALUES, 0, false); if (((DMSType)ModelCodeHelper.ExtractTypeFromGlobalId(gid)).Equals(DMSType.SYNCMACHINE)) { ders.Add(new SynchronousMachine(gid)); } else { ders = GetDERs(gid); } try { List <ModelCode> properties = new List <ModelCode>(); properties.Add(ModelCode.IDOBJ_GID); properties.Add(ModelCode.MEASUREMENTVALUE_POWERTYPE); foreach (SynchronousMachine der in ders) { int iteratorId = GdaQueryProxy.GetRelatedValues(der.GlobalId, properties, association); int resourcesLeft = GdaQueryProxy.IteratorResourcesLeft(iteratorId); while (resourcesLeft > 0) { List <ResourceDescription> rds = GdaQueryProxy.IteratorNext(numberOfResources, iteratorId); foreach (ResourceDescription rd in rds) { PowerType type = (PowerType)rd.GetProperty(ModelCode.MEASUREMENTVALUE_POWERTYPE).AsEnum(); if (type.Equals(powerType)) { resultIds.Add(rd.Id); } } resourcesLeft = GdaQueryProxy.IteratorResourcesLeft(iteratorId); } GdaQueryProxy.IteratorClose(iteratorId); CommonTrace.WriteTrace(CommonTrace.TraceError, "Getting extent values method successfully finished."); } } catch (Exception e) { string message = string.Format("Getting related values method failed for sourceGlobalId = {0} and association (propertyId = {1}, type = {2}). Reason: {3}", gid, association.PropertyId, association.Type, e.Message); Console.WriteLine(message); CommonTrace.WriteTrace(CommonTrace.TraceError, message); } return(resultIds); }
/// <summary> /// Pomocna funkcija koja radi uzimanje forecast proracuna samo za interval koji je od interesa i vrsi grupisanje po vremenu /// </summary> /// <param name="duration"> Vreme koje nam je potrebno</param> /// <param name="type"> Power Type </param> /// <param name="forecastObjects"> List-a ForecastObject-a</param> /// <returns> Grupisana i filtrirana predvidjanja po vremenu </returns> private SortedDictionary <long, List <AnalogValue> > GroupAndFilterByTime(long duration, PowerType type, List <ForecastObject> forecastObjects) { // Trenutno vreme DateTime current = DateTime.Now; // Pocetak od kada nam treba forecast proracun DateTime startTime = new DateTime(current.Year, current.Month, current.Day, current.Hour, 0, 0); // Povratna vrednost SortedDictionary <long, List <AnalogValue> > retValue = new SortedDictionary <long, List <AnalogValue> >(); // Pomocna promenjiva koja se uvecava za jedan sat u svakoj iteraciji DateTime temp = startTime; for (int i = 0; i < duration; i++) { temp = temp.AddHours(1); List <AnalogValue> forecastMeasurement = new List <AnalogValue>(); // Prolazi se kroz forecast objekte i na osnovu power type uzima se vrednost za prvi Date time i tako dog se ne dodje do kraja duration-a foreach (ForecastObject forecastObject in forecastObjects) { if (type.Equals(PowerType.Active)) { forecastMeasurement.AddRange(forecastObject.HourlyP.Where(o => o.Timestamp.Equals(temp.Ticks)).ToList()); } else { forecastMeasurement.AddRange(forecastObject.HourlyQ.Where(o => o.Timestamp.Equals(temp.Ticks)).ToList()); } } retValue.Add(temp.Ticks, forecastMeasurement); } return(retValue); }