private async Task <MeasurementBySite> GetMeasurementsBySiteIdAsync(int SiteId) { IEnumerable <string> pcsKeys = await GetKeys(SiteId, 1); IEnumerable <string> bmsKeys = await GetKeys(SiteId, 2); IEnumerable <string> pvKeys = await GetKeys(SiteId, 4); var actPws = await GetValues(pcsKeys, "actPwrKw"); var socValues = await GetValues(bmsKeys, "bms_soc"); var pvValues = await GetValues(pvKeys, "TotalActivePower"); int cntOfPcs = actPws.Count(); int cntOfBms = socValues.Count(); int cntOfPv = pvValues.Count(); int cntOfEvent = await GetCountOfActiveEvents(new int[] { SiteId }); MeasurementBySite measurement = new MeasurementBySite() { siteid = SiteId, meanofsoc = cntOfBms > 0 ? socValues.Average() : 0, sumofpvgeneration = cntOfPv > 0 ? pvValues.Sum() : 0, countofpcs = cntOfPcs, countofevent = cntOfEvent, countofbms = cntOfBms, countofpv = cntOfPv, sumofactivepower = cntOfPcs > 0 ? actPws.Sum() : 0, sumofcharge = actPws.Where(x => x < 0).Sum(), sumofdischarge = actPws.Where(x => x > 0).Sum() }; return(measurement); }
public async Task <MeasurementByRcc> GetMeasurementByRccAsync(ResolveFieldContext context, int rcc) { if (context.ThrowIfInvalidAuthorization() == false) { return(null); } var rcckeys = context.GetSiteKeysByRcc(); if (rcckeys.ContainsKey(rcc) == false) { context.Errors.Add(new GraphQL.ExecutionError("대상 RCC의 지역 사이트는 소유하지 않았습니다")); return(null); } MeasurementByRcc measurementByRcc = new MeasurementByRcc(); List <double> socs = new List <double>(); foreach (int siteid in rcckeys[rcc]) { MeasurementBySite site = await GetMeasurementsBySiteIdAsync(siteid); socs.Add(site.meanofsoc); measurementByRcc.countofbms += site.countofbms; measurementByRcc.countofpcs += site.countofpcs; measurementByRcc.countofpv += site.countofpv; measurementByRcc.countofevent += site.countofevent; measurementByRcc.sumofactivepower += site.sumofactivepower; measurementByRcc.sumofpvgeneration += site.sumofpvgeneration; measurementByRcc.sumofcharge += site.sumofcharge; measurementByRcc.sumofdischarge += site.sumofdischarge; } measurementByRcc.meanofsoc = socs.Average(); measurementByRcc.countofsites = rcckeys[rcc].Count; measurementByRcc.rcc = rcc; return(measurementByRcc); }
public async Task <IEnumerable <MeasurementBySite> > GetMeasurementByAllSitesAsync(ResolveFieldContext context) { if (context.ThrowIfInvalidAuthorization() == false) { return(null); } var siteKeys = context.GetAllSiteIds(); List <MeasurementBySite> allsites = new List <MeasurementBySite>(); foreach (int sizteId in siteKeys) { MeasurementBySite site = await GetMeasurementsBySiteIdAsync(sizteId); allsites.Add(site); } return(allsites); }