public PlantAreaChartsPanelBuilder(List<MeasurableParameter> measurableParameters,
     IControlsRefresher controlsRefresher, StackPanel plantAreaChartsPanel, ChartDescriptor chartDescriptor)
 {
     controlsRefresher.RefreshControl += RefreshControls;
     _measurableParameters = measurableParameters;
     _plantAreaChartsPanel = plantAreaChartsPanel;
     _chartDescriptor = chartDescriptor;
 }
Example #2
0
 public PlantAreaMenuBuilder(StackPanel plantAreaSensorsPanel, StackPanel plantAreaChartsPanel,
     Menu menu, IControlsRefresher controlsRefresher, DbMeasuringMessagesRetriever dbMeasuringMessagesRetriever,
     ChartDescriptor chartDescriptor)
 {
     controlsRefresher.RefreshControl += RefreshControls;
     _plantAreaSensorsPanel = plantAreaSensorsPanel;
     _plantAreaChartsPanel = plantAreaChartsPanel;
     _menu = menu;
     _chartDescriptor = chartDescriptor;
     _dbMeasuringMessagesRetriever = dbMeasuringMessagesRetriever;
     _refreshLastMin = false;
     _autorefresh = false;
 }
Example #3
0
        private Border CreateFullPlantAreaPanel(PlantsArea area, int marginLeft, int marginTop)
        {
            DataGridsBuilder dataGridsBuilder = new DataGridsBuilder();
            FrameworkElementFactoriesBuilder frameworkElementFactoriesBuilder = new FrameworkElementFactoriesBuilder();

            StackPanel plantAreaSensorsPanel = new StackPanel
            {
                VerticalAlignment = VerticalAlignment.Top,
                HorizontalAlignment = HorizontalAlignment.Left,
                Orientation = Orientation.Horizontal,
                Width = 1330,
                Height = 300,
                CanVerticallyScroll = true,
                CanHorizontallyScroll = true,
            };

            plantAreaSensorsPanel.Children.Add(new Label
            {
                VerticalAlignment = VerticalAlignment.Top,
                HorizontalAlignment = HorizontalAlignment.Left,
                Content = area.ToString()
            });

            BindingList<DataGridSensorView> dataGridSensorViews = new BindingList<DataGridSensorView>(
                area.Sensors.OrderBy(s => s.IsCustom).ToList().ConvertAll(s => new DataGridSensorView(s)))
            {
                AllowNew = true,
                AllowEdit = true,
                AllowRemove = true
            };

            BindingList<DataGridServiceScheduleView> dataGridServiceScheduleViews =
                new BindingList<DataGridServiceScheduleView>(
                    area.ServicesSchedulesStates.ServicesSchedules.ToList()
                        .ConvertAll(s => new DataGridServiceScheduleView(s)))
                {
                    RaiseListChangedEvents = true,
                    AllowNew = true,
                    AllowRemove = true,
                    AllowEdit = true
                };

            FrameworkElementFactory removeSensorButtonTemplate =
                frameworkElementFactoriesBuilder.CreateRemoveSensorButtonTemplate(area,
                    dataGridSensorViews, dataGridServiceScheduleViews, RemoveSensor);

            FrameworkElementFactory sensorSaveButtonTemplate =
                frameworkElementFactoriesBuilder.CreateSensorSaveButtonTemplate(area,
                    dataGridSensorViews, dataGridServiceScheduleViews, SaveSensor);

            FrameworkElementFactory onOffSensorButtonTemplate =
                frameworkElementFactoriesBuilder.CreateOnOffSensorButtonTemplate();

            DataGrid sensorViewsDataGrid = dataGridsBuilder.CreateSensorsDataGrid(area, dataGridSensorViews,
                removeSensorButtonTemplate, sensorSaveButtonTemplate, onOffSensorButtonTemplate);

            DataGrid serviceStatesDataGrid = dataGridsBuilder.CreateServiceSystemsDataGrid(area);

            FrameworkElementFactory serviceScheduleSaveButtonTemplate =
                frameworkElementFactoriesBuilder.CreateServiceScheduleSaveButtonTemplate(area,
                    dataGridServiceScheduleViews, SaveServiceSchedule);

            FrameworkElementFactory onOffServiceScheduleButtonTemplate =
                frameworkElementFactoriesBuilder.CreateOnOffServiceScheduleButtonTemplate();

            DataGrid serviceSchedulesDataGrid = dataGridsBuilder.CreateServicesSchedulesDataGrid(area,
                dataGridServiceScheduleViews, serviceScheduleSaveButtonTemplate, onOffServiceScheduleButtonTemplate);

            Button removePlantsAreaButton =
                frameworkElementFactoriesBuilder.CreateRemovePlantsAreaButton(RemovePlantsArea, area);

            plantAreaSensorsPanel.Children.Add(sensorViewsDataGrid);
            plantAreaSensorsPanel.Children.Add(serviceStatesDataGrid);
            plantAreaSensorsPanel.Children.Add(serviceSchedulesDataGrid);

            StackPanel plantAreaChartsPanel = new StackPanel
            {
                Orientation = Orientation.Vertical,
                Visibility = Visibility.Collapsed
            };

            ChartDescriptor chartDescriptor = new ChartDescriptor(area.Id,
                area.Plant.MeasurableParameters.First().MeasurableType, 30,
                DateTime.Now.Subtract(new TimeSpan(0, 0, 30)), DateTime.Now);

            PlantAreaChartsPanelBuilder plantAreaChartsPanelBuilder =
                new PlantAreaChartsPanelBuilder(area.Plant.MeasurableParameters,
                    frameworkElementFactoriesBuilder, plantAreaChartsPanel, chartDescriptor);
            plantAreaChartsPanelBuilder.RebuildChartsPanel();

            Menu menu = new Menu();

            DbMeasuringMessagesRetriever dbMeasuringMessagesRetriever =
                new DbMeasuringMessagesRetriever(new MySqlMeasuringMessageMappingRepository(), _observer.MessagesDictionary);
            
            PlantAreaMenuBuilder plantAreaMenuBuilder = new PlantAreaMenuBuilder(plantAreaSensorsPanel,
                plantAreaChartsPanel, menu, frameworkElementFactoriesBuilder, dbMeasuringMessagesRetriever,
                chartDescriptor);

            plantAreaMenuBuilder.RebuildMenu();

            DockPanel plantAreaFullPanel = new DockPanel();

            plantAreaFullPanel.Children.Add(menu);
            plantAreaFullPanel.Children.Add(removePlantsAreaButton);
            plantAreaFullPanel.Children.Add(plantAreaSensorsPanel);
            plantAreaFullPanel.Children.Add(plantAreaChartsPanel);

            ScrollViewer scrollViewer = new ScrollViewer
            {
                Height = plantAreaSensorsPanel.Height,
                CanContentScroll = true,
                Content = plantAreaFullPanel,
                VerticalScrollBarVisibility = ScrollBarVisibility.Auto
            };

            Border border = new Border
            {
                VerticalAlignment = VerticalAlignment.Top,
                HorizontalAlignment = HorizontalAlignment.Left,
                BorderBrush = Brushes.Black,
                Background = (LinearGradientBrush)ResourceDictionary["PlantsAreaBackground"],
                BorderThickness = new Thickness(2),
                Width = plantAreaSensorsPanel.Width,
                Height = plantAreaSensorsPanel.Height,
                Margin = new Thickness(marginLeft, marginTop, 0, 0),
                Child = scrollViewer
            };
            return border;
        }
        public IEnumerable<KeyValuePair<DateTime, double>> RetrieveMessagesStatistics(ChartDescriptor chartDescriptor)
        {
            return ReturnRowsetMySql(chartDescriptor);

            lock (_messagesDictionary[chartDescriptor.PlantsAreaId])
            {
                List<MeasuringMessage> measuringMessages =
                    _messagesDictionary[chartDescriptor.PlantsAreaId].ToList().Where(
                        message => message.MeasurableType == chartDescriptor.MeasurableType).ToList();


                if (chartDescriptor.OnlyCritical)
                {
                    measuringMessages =
                        measuringMessages.Where(message => message.MessageType == MessageTypeEnum.CriticalInfo).ToList();
                }

                List<KeyValuePair<DateTime, double>> list = new List<KeyValuePair<DateTime, double>>();

                if (!chartDescriptor.RefreshAll && measuringMessages.Count >= chartDescriptor.Number)
                {
                    measuringMessages.Skip(measuringMessages.Count -
                                           Math.Min(measuringMessages.Count, chartDescriptor.Number)).ToList().ForEach(
                                               message =>
                                                   list.Add(new KeyValuePair<DateTime, double>(message.DateTime,
                                                       message.ParameterValue)));

                    return list;
                }

                Expression<Func<MeasuringMessageMapping, bool>> func;

                if (!chartDescriptor.OnlyCritical)
                {
                    func = mapping =>
                        mapping.MeasurableType.Equals(chartDescriptor.MeasurableType) &&
                        mapping.PlantsAreaId.Equals(chartDescriptor.PlantsAreaId) &&
                        mapping.DateTime > chartDescriptor.DateTimeFrom &&
                        mapping.DateTime < chartDescriptor.DateTimeTo;
                }
                else
                {
                    func = mapping =>
                        mapping.MeasurableType == chartDescriptor.MeasurableType &&
                        mapping.PlantsAreaId == chartDescriptor.PlantsAreaId &&
                        mapping.DateTime > chartDescriptor.DateTimeFrom &&
                        mapping.DateTime < chartDescriptor.DateTimeTo &&
                        mapping.MessageType == MessageTypeEnum.CriticalInfo.ToString();
                }

                //using (
                //    var sc =
                //        new SqlConnection(
                //            ConfigurationManager.ConnectionStrings["PlantingDb"].ConnectionString))
                //{
                //    if (sc.State == ConnectionState.Closed)
                //    {
                //        sc.Open();
                //    }

                //    using (var tr = sc.BeginTransaction(IsolationLevel.ReadCommitted))
                //    {
                //        try
                //        {
                List<MeasuringMessageMapping> measuringMessageMappings = _measuringMessageMappingRepository.GetAll(func);
                //    tr.Commit();
                //}
                //catch (Exception e)
                //{
                //    tr.Rollback();
                //}
                //    }
                //}

                if (measuringMessageMappings != null)
                {
                    measuringMessageMappings.ForEach(
                        mapping =>
                            list.Add(new KeyValuePair<DateTime, double>(mapping.DateTime, mapping.ParameterValue)));

                    return list.Take(Math.Min(list.Count, chartDescriptor.Number));
                }

                return list;
            }
        }
        private List<KeyValuePair<DateTime, double>> ReturnRowsetMySql(ChartDescriptor chartDescriptor)
        {
            MySQLDatabase mySqlDatabase = new MySQLDatabase();

            Dictionary<string, object> parameters = new Dictionary<string, object>
            {
                {"@dateTimeFrom", chartDescriptor.DateTimeFrom.ToString("yyyy-MM-dd HH:mm:ss")},
                {"@dateTimeTo", chartDescriptor.DateTimeTo.ToString("yyyy-MM-dd HH:mm:ss")},
                {"@measurableType", chartDescriptor.MeasurableType},
                {"@plantsAreaId", chartDescriptor.PlantsAreaId.ToString().ToUpper()},
                {"@criticalInfo", chartDescriptor.OnlyCritical ? 1 : 0},
                {"@number", chartDescriptor.Number}
            };

            //cmd.Parameters.Add("@dateTimeFrom", SqlDbType.DateTime).Value =   chartDescriptor.DateTimeFrom;
            //cmd.Parameters.Add("@dateTimeTo", SqlDbType.DateTime).Value =     chartDescriptor.DateTimeTo;
            //cmd.Parameters.Add("@measurableType", SqlDbType.NVarChar).Value = chartDescriptor.MeasurableType;
            //cmd.Parameters.Add("@plantsAreaId", SqlDbType.NVarChar).Value =   chartDescriptor.PlantsAreaId.ToString().ToUpper();
            //cmd.Parameters.Add("@criticalInfo", SqlDbType.Bit).Value =        chartDescriptor.OnlyCritical ? 1 : 0;
            //cmd.Parameters.Add("@number", SqlDbType.Int).Value =              chartDescriptor.Number;

            List<KeyValuePair<DateTime, double>> measuringMessageMappings = new List<KeyValuePair<DateTime, double>>();

            string commandText =
                "call statistics(@dateTimeFrom, @dateTimeTo, @measurableType, @plantsAreaId, @criticalInfo, @number)";
            
            List<Dictionary<string, string>> rows = mySqlDatabase.Query(commandText, parameters);
            foreach (Dictionary<string, string> row in rows)
            {
                measuringMessageMappings.Add(new KeyValuePair<DateTime, double>(DateTime.Parse(row["DateTime"]), Double.Parse(row["ParameterValue"])));
            }
            return measuringMessageMappings;
        }
        // Call the stored procedure.
        private List<KeyValuePair<DateTime, double>> ReturnRowset(ChartDescriptor chartDescriptor)
        {
            SqlConnection sqlConnection =
                new SqlConnection(ConfigurationManager.ConnectionStrings["PlantingDb"].ConnectionString);
            SqlCommand cmd = new SqlCommand
            {
                CommandText = "GetStatistics",
                CommandType = CommandType.StoredProcedure,
                Connection = sqlConnection
            };
            cmd.Parameters.Add("@dateTimeFrom", SqlDbType.DateTime).Value = chartDescriptor.DateTimeFrom;
            cmd.Parameters.Add("@dateTimeTo", SqlDbType.DateTime).Value = chartDescriptor.DateTimeTo;
            cmd.Parameters.Add("@measurableType", SqlDbType.NVarChar).Value = chartDescriptor.MeasurableType;
            cmd.Parameters.Add("@plantsAreaId", SqlDbType.NVarChar).Value = chartDescriptor.PlantsAreaId.ToString().ToUpper();
            cmd.Parameters.Add("@criticalInfo", SqlDbType.Bit).Value = chartDescriptor.OnlyCritical ? 1 : 0;
            cmd.Parameters.Add("@number", SqlDbType.Int).Value = chartDescriptor.Number;

            if (sqlConnection.State == ConnectionState.Closed)
            {
                sqlConnection.Open();
            }

            SqlDataReader reader = cmd.ExecuteReader();
            // Data is accessible through the DataReader object here.
            List<KeyValuePair<DateTime, double>> list = new List<KeyValuePair<DateTime, double>>();

            while (reader.HasRows)
            {
                while (reader.Read())
                {
                    list.Add(new KeyValuePair<DateTime, double>(reader.GetDateTime(0), reader.GetDouble(1)));
                }
                reader.NextResult();
            }
            sqlConnection.Close();

            return list;
        }