Пример #1
0
        private async Task <List <double> > ReadSiteStat(int siteId, int groupNo, string filter, string field)
        {
            List <double> result           = new List <double>();
            string        target_redis_key = CommonFactory.CreateRedisKey(siteId, groupNo, filter);
            var           redis_keys       = CommonFactory.SearchKeys(_redisConn, target_redis_key);

            foreach (RedisKey pv_key in redis_keys)
            {
                double TotalActivePower = (double)await _redisDb.HashGetAsync(pv_key, field);

                result.Add(TotalActivePower);
            }
            return(result);
        }
Пример #2
0
        public async Task <IActionResult> GetMonthlyAccumuActivePower()
        {
            try
            {
                IEnumerable <int> siteIds = GetAvaliableSiteIds();
                if (siteIds.Count() == 0)
                {
                    return(Ok());
                }
                List <MonthlyAccumchgdhg> datas = new List <MonthlyAccumchgdhg>();
                var keys = CommonFactory.SearchKeys(_redisConn, CommonFactory.PVRedisKeyPattern);

                double total_energy_power = 0;
                double total_chg          = 0;
                double total_dhg          = 0;
                using (var session = _peiuGridDataContext.SessionFactory.OpenSession())
                {
                    IList <MonthlyAccumchgdhg> results = await session.CreateCriteria <MonthlyAccumchgdhg>()
                                                         .Add(Restrictions.InG <int>("SiteId", siteIds))
                                                         .ListAsync <MonthlyAccumchgdhg>();

                    total_chg = results.Sum(x => x.Charging);
                    total_dhg = results.Sum(x => x.Discharging);


                    var pvresults = await session.CreateCriteria <MonthlyAccumPv>()
                                    .Add(Restrictions.InG <int>("SiteId", siteIds))
                                    .ListAsync <MonthlyAccumPv>();

                    total_energy_power += pvresults.Sum(x => x.Accumpvpower);
                    //    var sites = _accountContext.VwContractorsites.Where(x => x.UserId == userId).Select(x=>x.SiteId);
                    //    var result = await session.CreateCriteria<TodayAccumchgdhg>().Add(Restrictions.InG<int>("SiteId", sites)).ListAsync<TodayAccumchgdhg>();
                    //    string userId = _claimsManager.GetClaimsValue(HttpContext.User, ClaimTypes.NameIdentifier);
                    //    source = _accountContext.VwContractorusers.Where(x => x.UserId == userId);
                    //}
                    //else if (HttpContext.User.IsInRole(UserRoleTypes.Aggregator))
                    //{
                    //    string groupId = _claimsManager.GetClaimsValue(HttpContext.User, UserClaimTypes.AggregatorGroupIdentifier);
                    //    source = _accountContext.VwContractorusers.Where(x => x.AIEggGroupId == groupId);
                    //}

                    return(Ok(new { todayactivepowerresult = results, todaypvpowerresult = pvresults, toady_accum_charging = total_chg, today_accum_discharging = total_dhg, today_accum_pv_energy = total_energy_power }));
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(ex));
            }
        }
Пример #3
0
        public async Task <IActionResult> GetStatisticsCurrentValue(int lawcodelevel = 1)
        {
            JObject row_j = null;

            try
            {
                IEnumerable <VwContractorsite> sites = GetAvaliableSites();
                if (sites.Count() == 0)
                {
                    return(Ok());
                }

                var group_sites           = sites.GroupBy(MakeClusterKey(lawcodelevel), value => value);
                IEnumerable <int> siteIds = sites.Select(x => x.SiteId);

                JArray        result     = new JArray();
                List <double> total_socs = new List <double>();
                foreach (IGrouping <string, VwContractorsite> row in group_sites)
                {
                    double        total_energy_power       = 0;
                    double        total_actPwr_charging    = 0;
                    double        total_actPwr_discharging = 0;
                    List <double> socs         = new List <double>();
                    List <double> sohs         = new List <double>();
                    int           first_siteid = -1;
                    foreach (VwContractorsite site in row)
                    {
                        if (first_siteid == -1)
                        {
                            first_siteid = site.SiteId;
                        }
                        // PV
                        string target_redis_key = CommonFactory.CreateRedisKey(site.SiteId, 4, "PV*");
                        var    redis_keys       = CommonFactory.SearchKeys(_redisConn, target_redis_key);
                        foreach (RedisKey pv_key in redis_keys)
                        {
                            double TotalActivePower = (double)await _redisDb.HashGetAsync(pv_key, "TotalActivePower");

                            total_energy_power += TotalActivePower;
                        }

                        // PCS
                        target_redis_key = CommonFactory.CreateRedisKey(site.SiteId, 1, "PCS*");
                        redis_keys       = CommonFactory.SearchKeys(_redisConn, target_redis_key);
                        foreach (RedisKey key in redis_keys)
                        {
                            double TotalActivePower = (double)await _redisDb.HashGetAsync(key, "actPwrKw");

                            if (TotalActivePower > 0)
                            {
                                total_actPwr_discharging += TotalActivePower;
                            }
                            else
                            {
                                total_actPwr_charging += TotalActivePower;
                            }
                        }

                        // BMS
                        target_redis_key = CommonFactory.CreateRedisKey(site.SiteId, 2, "BMS*");
                        redis_keys       = CommonFactory.SearchKeys(_redisConn, target_redis_key);
                        foreach (RedisKey key in redis_keys)
                        {
                            double soc = (double)await _redisDb.HashGetAsync(key, "bms_soc");

                            socs.Add(soc);
                            total_socs.Add(soc);
                            double soh = (double)await _redisDb.HashGetAsync(key, "bms_soh");

                            sohs.Add(soh);
                        }
                    }

                    JObject weather_obj = new JObject();
                    if (row.Count() > 0)
                    {
                        // Weather
                        weather_obj = await CommonFactory.RetriveWeather(row.FirstOrDefault().SiteId, _redisDb);
                    }

                    row_j = new JObject();
                    row_j.Add("LawCode", row.Key);
                    row_j.Add("total_pvpower", total_energy_power);
                    row_j.Add("total_charging", Math.Abs(total_actPwr_charging));
                    row_j.Add("total_discharging", total_actPwr_discharging);
                    row_j.Add("average_soc", socs.Count() > 0 ? socs.Average() : 0);
                    row_j.Add("average_soh", sohs.Count() > 0 ? sohs.Average() : 0);
                    row_j.Add("total_count", row.Count());
                    row_j.Add("weather", weather_obj);
                    result.Add(row_j);
                }

                JObject center_weather = await CommonFactory.RetriveWeather(0, _redisDb);

                return(Ok(new { group = result, total_average_soc = total_socs.Average(), total_event_count = 0, total_sites_count = siteIds.Count(), controlcenter_weather = center_weather }));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex));
            }
        }
Пример #4
0
        public async Task <IActionResult> GetStatisticsCurrentValueByRcc()
        {
            JObject row_j = null;

            try
            {
                IQueryable <IGrouping <int, int> > idsGroup = GetRccCodeGroup();
                JArray        result     = new JArray();
                List <double> total_socs = new List <double>();
                foreach (IGrouping <int, int> row in idsGroup)
                {
                    double        total_energy_power       = 0;
                    double        total_actPwr_charging    = 0;
                    double        total_actPwr_discharging = 0;
                    List <double> socs        = new List <double>();
                    List <double> sohs        = new List <double>();
                    JObject       weather_obj = null;
                    foreach (int SiteId in row)
                    {
                        if (weather_obj == null)
                        {
                            weather_obj = await CommonFactory.RetriveWeather(SiteId, _redisDb);
                        }
                        // PV
                        string target_redis_key = CommonFactory.CreateRedisKey(SiteId, 4, "PV*");
                        var    redis_keys       = CommonFactory.SearchKeys(_redisConn, target_redis_key);
                        foreach (RedisKey pv_key in redis_keys)
                        {
                            double TotalActivePower = (double)await _redisDb.HashGetAsync(pv_key, "TotalActivePower");

                            total_energy_power += TotalActivePower;
                        }

                        // PCS
                        target_redis_key = CommonFactory.CreateRedisKey(SiteId, 1, "PCS*");
                        redis_keys       = CommonFactory.SearchKeys(_redisConn, target_redis_key);
                        foreach (RedisKey key in redis_keys)
                        {
                            double TotalActivePower = (double)await _redisDb.HashGetAsync(key, "actPwrKw");

                            if (TotalActivePower > 0)
                            {
                                total_actPwr_discharging += TotalActivePower;
                            }
                            else
                            {
                                total_actPwr_charging += TotalActivePower;
                            }
                        }

                        // BMS
                        target_redis_key = CommonFactory.CreateRedisKey(SiteId, 2, "BMS*");
                        redis_keys       = CommonFactory.SearchKeys(_redisConn, target_redis_key);
                        foreach (RedisKey key in redis_keys)
                        {
                            double soc = (double)await _redisDb.HashGetAsync(key, "bms_soc");

                            socs.Add(soc);
                            total_socs.Add(soc);
                            double soh = (double)await _redisDb.HashGetAsync(key, "bms_soh");

                            sohs.Add(soh);
                        }
                    }

                    row_j = new JObject();
                    row_j.Add("rcc", row.Key);
                    row_j.Add("total_pvpower", total_energy_power);
                    row_j.Add("total_charging", Math.Abs(total_actPwr_charging));
                    row_j.Add("total_discharging", total_actPwr_discharging);
                    row_j.Add("average_soc", socs.Count() > 0 ? socs.Average() : 0);
                    row_j.Add("average_soh", sohs.Count() > 0 ? sohs.Average() : 0);
                    row_j.Add("total_count", row.Count());
                    row_j.Add("weather", weather_obj);
                    result.Add(row_j);
                }

                JObject center_weather = await CommonFactory.RetriveWeather(0, _redisDb);

                return(Ok(new { group = result, total_average_soc = total_socs.Average(), total_event_count = 0, controlcenter_weather = center_weather }));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex));
            }
        }