Esempio n. 1
0
        private void BindForecast()
        {
            //BindGrids();


            int predictCount = Convert.ToInt32(txtPredictCount.Text);
            int p            = Convert.ToInt32(txtp.Text);
            int q            = Convert.ToInt32(txtq.Text);
            int s            = Convert.ToInt32(txts.Text);
            int d            = Convert.ToInt32(txtd.Text);
            int forcastStep  = 4;

            var forecastType = ((Enums.ForecastsType)Convert.ToInt32(drpForecatsType.SelectedValue)).ToString();

            CultureInfo persianCultureInfo = new CultureInfo("en-US");
            var         values             = new Dictionary <string, List <string> >
            {
                { "Date", Categories },
                { "riders", ActualActivityTrend.Select(x => x.Value.ToString()).ToList() }
            };


            ForecastModel model = new ForecastModel
            {
                Data         = values,
                PredictCount = predictCount,
                ForcastStep  = forcastStep,
                p            = p,
                q            = q,
                d            = d,
                s            = s,
                type         = forecastType
            };


            var timeSeriseSrv = TimeSeriesService.Instance();

            var serviceResult = timeSeriseSrv.GetTimeSeriesForcastResult(model);

            if (!serviceResult.IsSuccessful)
            {
                lbMessage.Text = serviceResult.Message;
                return;
            }

            var prgressResult = (TimeSeriDto)serviceResult.Data;


            if (string.IsNullOrEmpty(prgressResult.Exception) == false)
            {
                lbMessage.Text =
                    "مقادیر لگهای انتخاب شده متناسب با اعداد دوره های عملکرد نمی باشد!" +
                    "<br />" +
                    prgressResult.Exception;
                return;
            }
            if (prgressResult.Forecast is null || prgressResult.Forecast.Count == 0)
            {
                lbMessage.Text = "با مقادیر ارسال شده ، سیستم قادر به انجام عملیات پیش بینی نمی باشد!";
                return;
            }


            var forecastResult = prgressResult.Forecast;

            var predictResult = prgressResult.PredictResult;

            //ChartModel cmActivity = new ChartModel() { ChartType = ChartTypes.Line, Data = chartData };

            List <ChartData> cmPrePredicat = predictResult.Select(x => new ChartData()
            {
                IntervalDate = x.Key.ToString(),
                Value        = x.Value
            }).ToList();


            List <ChartData> cdPredicate = new List <ChartData>();

            foreach (var item in Categories)
            {
                double?val = null;
                if (cmPrePredicat.Any(x => x.IntervalDate == item))
                {
                    val = cmPrePredicat.Single(x => x.IntervalDate == item).Value;
                }
                cdPredicate.Add(new ChartData(item, val));
            }

            //ChartModel cmPredicat = new ChartModel() { ChartType = ChartTypes.Line, Data = cdPredicate };

            List <ChartData> cdForcast = new List <ChartData>();



            var joinerPoint      = Categories.Last();
            var joinerTrendPoint = ActualActivityTrend.Last();

            cdForcast.AddRange(Categories.Select(x => new ChartData(x, null)).ToList());

            var checkExists = cdForcast.SingleOrDefault(x => x.IntervalDate == joinerPoint);

            if (checkExists != null)
            {
                cdForcast.Remove(checkExists);
            }

            cdForcast.Add(new ChartData(joinerPoint, joinerTrendPoint));


            for (int i = 0; i < forcastStep; i++)
            {
                int forcastIndex = Convert.ToInt32(joinerPoint) + i + 1;
                cdForcast.Add(new ChartData(forcastIndex.ToString(), forecastResult.ElementAt(i).Value));
            }
            //UcIndicatorView.Visible = true;
            //ChartModel cmForecast = new ChartModel() { ChartType = ChartTypes.Line, Data = cdForcast };


            var chartModelforcast = new HighChartViewModel(Categories);

            chartModelforcast.HighChartDataItems.Add(new HighChartDataItems("عملکرد", "#2962ff", ActualActivityTrend));
            chartModelforcast.HighChartDataItems.Add(new HighChartDataItems("تطبیق", "#d7ccc8", cdPredicate.Select(x => x.Value).ToList()));
            chartModelforcast.HighChartDataItems.Add(new HighChartDataItems("پیش بینی", "#ab47bc", cdForcast.Select(x => x.Value).ToList()));
            UCSplineForcast.ChartId          = "chartModelforcast";
            UCSplineForcast.vmHighChartModel = chartModelforcast;

            BindActivityCharts();



            //var forecastsData =
            //    (from x in cdForcast

            //     let activity = AiFChartData.SingleOrDefault(y => y.IntervalDate == x.IntervalDate)

            //     where
            //     x.IntervalDate != joinerPoint.IntervalDate && x.Value.HasValue

            //     orderby x.IntervalDate
            //     let percent = (activity?.Value.HasValue == true) ? ((x.Value - activity.Value.Value) / ((activity.Value.Value + x.Value) / 2)) * 100 : 0
            //     select new
            //     {
            //         IntervalDate = x.IntervalDate,
            //         Value = x.Value,
            //         ActivityValue = activity?.Value,
            //         Diff =
            //         activity?.Value.HasValue == true ?
            //         percent.Value.ToString("N2") : "",



            //         Increase = (activity?.Value.HasValue == true) &&

            //            ((x.Value < activity.Value.Value && Math.Abs(percent.Value) <= 5) || (x.Value >= activity.Value.Value))

            //            ? true : false,

            //         Decrease = (activity?.Value.HasValue == true) &&

            //                (x.Value < activity.Value.Value && (Math.Abs(percent.Value)) > 5) ? true : false

            //     }
            //     ).ToList();

            ////cdForcast.Where(x => x.IntervalDate != joinerPoint.IntervalDate && x.Value.HasValue).OrderBy(x => x.IntervalDate).ToList();

            //var statisticDataSource = new List<TimeSeriDto>();
            //statisticDataSource.Add(new TimeSeriDto
            //{
            //    aic = prgressResult.aic,
            //    hqic = prgressResult.hqic,
            //    Exception = string.Empty,
            //    Forecast = null,
            //    PredictResult = null
            //});
            //lvStatistics.DataSource = statisticDataSource;
            //lvStatistics.DataBind();
            //lvStatistics.Visible = true;

            //lvForecast.DataSource = forecastsData;
            //lvForecast.DataBind();
            //lvForecast.Visible = true;


            //UcChartBefore.SetChart(IndicatorTitle, chartModelFirst, new Dictionary<string, string>() { { "جزئیات", "$('.tables2').html($('#pnl3').html()); $('#mainContainer2').dialog('open');" } });
            //UcIndicatorView.SetChart(IndicatorTitle, chartModelSecond, new Dictionary<string, string>() { { "جزئیات", "$('.tables1').html($('#pnl2').html()); $('#mainContainer').dialog('open');" } });
        }
Esempio n. 2
0
        public void GetTimeSeriseDate(List <string> categories, List <double?> actualActivityTrend)
        {
            CultureInfo persianCultureInfo = new CultureInfo("en-US");

            var values = new Dictionary <string, List <string> >
            {
                { "Date", categories },
                { "riders", actualActivityTrend.Select(x => x.Value.ToString()).ToList() }
            };


            ForecastModel model = new ForecastModel
            {
                Data         = values,
                PredictCount = 0,
                ForcastStep  = 0,
                p            = 0,
                q            = 0,
                d            = 0,
                s            = 0
            };


            var timeSeriesSrv = TimeSeriesService.Instance();



            var fs = timeSeriesSrv.GetChart <ForecastModel>(model);


            imgPacf.Visible = !string.IsNullOrEmpty(fs);

            imgPacf.ImageUrl = String.Format(@"data:image/jpeg;base64,{0}", fs);



            var serviceResult = timeSeriesSrv.GetTimeSeriesDecomposeResult(model);

            if (!serviceResult.IsSuccessful)
            {
                lbMessage.Text = serviceResult.Message;
                return;
            }

            var composedResult = (TimeSeriesDecomposeModel)serviceResult.Data;


            if (composedResult == null)
            {
                lbMessage.Text = "مقادیر لگهای انتخاب شده متناسب با اعداد دوره های عملکرد نمی باشد!";
                //UcChartBefore.Visible = UcIndicatorView.Visible = false;
                return;
            }

            if (string.IsNullOrEmpty(composedResult.Exception) == false)
            {
                lbMessage.Text =
                    "مقادیر لگهای انتخاب شده متناسب با اعداد دوره های عملکرد نمی باشد!" +
                    "<br />" +
                    composedResult.Exception;

                //UcChartBefore.Visible = UcIndicatorView.Visible = false;
                return;
            }



            ResidComposed = new List <ChartData>();

            ResidComposed.AddRange(categories.Select(x => new ChartData(x, null)).ToList());

            for (int i = 0; i < composedResult.Resid.Count; i++)
            {
                ResidComposed[i].Value = composedResult.Resid[i] == null ? new Nullable <double>() : composedResult.Resid[i].Value;
            }

            TrendComposed = new List <ChartData>();



            TrendComposed.AddRange(categories.Select(x => new ChartData(x, null)).ToList());

            for (int i = 0; i < composedResult.Trend.Count; i++)
            {
                TrendComposed[i].Value = composedResult.Trend[i] == null ? new Nullable <double>() : composedResult.Trend[i].Value;
            }



            SeasonalComposed = new List <ChartData>();

            SeasonalComposed.AddRange(categories.Select(x => new ChartData(x, null)).ToList());

            for (int i = 0; i < composedResult.Seasonal.Count; i++)
            {
                SeasonalComposed[i].Value = composedResult.Seasonal[i] == null ? new Nullable <double>() : composedResult.Seasonal[i].Value;
            }
        }