public PlantAreaChartsPanelBuilder(List<MeasurableParameter> measurableParameters, IControlsRefresher controlsRefresher, StackPanel plantAreaChartsPanel, ChartDescriptor chartDescriptor) { controlsRefresher.RefreshControl += RefreshControls; _measurableParameters = measurableParameters; _plantAreaChartsPanel = plantAreaChartsPanel; _chartDescriptor = chartDescriptor; }
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; }
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; }