|
|
|
|
@ -1,7 +1,9 @@
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Collections.ObjectModel;
|
|
|
|
|
using System.Collections.Specialized;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Runtime.CompilerServices;
|
|
|
|
|
using System.Text;
|
|
|
|
|
@ -18,7 +20,133 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
|
public GraphControlViewModel GraphControlVM { get; } = new GraphControlViewModel();
|
|
|
|
|
public ObservableCollection<GraphType> GraphTypes { get; }
|
|
|
|
|
|
|
|
|
|
public List<WaterQualityVO> WaterQualityList { get; set; }
|
|
|
|
|
public ReadOnlyObservableCollection<WaterQualityVO> WaterQualityList { get; set; }
|
|
|
|
|
|
|
|
|
|
private double _totalGreenhouseGas;
|
|
|
|
|
public double TotalGreenhouseGas
|
|
|
|
|
{
|
|
|
|
|
get => _totalGreenhouseGas;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (_totalGreenhouseGas != value)
|
|
|
|
|
{
|
|
|
|
|
_totalGreenhouseGas = value;
|
|
|
|
|
OnPropertyChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private double _totalSandFilterGreenhouseGas;
|
|
|
|
|
public double TotalSandFilterGreenhouseGas
|
|
|
|
|
{
|
|
|
|
|
get => _totalSandFilterGreenhouseGas;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (_totalSandFilterGreenhouseGas != value)
|
|
|
|
|
{
|
|
|
|
|
_totalSandFilterGreenhouseGas = value;
|
|
|
|
|
OnPropertyChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private double _totalCirculationPumpGreenhouseGas;
|
|
|
|
|
public double TotalCirculationPumpGreenhouseGas
|
|
|
|
|
{
|
|
|
|
|
get => _totalCirculationPumpGreenhouseGas;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (_totalCirculationPumpGreenhouseGas != value)
|
|
|
|
|
{
|
|
|
|
|
_totalCirculationPumpGreenhouseGas = value;
|
|
|
|
|
OnPropertyChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private double _totalHeatPumpGreenhouseGas;
|
|
|
|
|
public double TotalHeatPumpGreenhouseGas
|
|
|
|
|
{
|
|
|
|
|
get => _totalHeatPumpGreenhouseGas;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (_totalHeatPumpGreenhouseGas != value)
|
|
|
|
|
{
|
|
|
|
|
_totalHeatPumpGreenhouseGas = value;
|
|
|
|
|
OnPropertyChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private double _totalAirBlowerGreenhouseGas;
|
|
|
|
|
public double TotalAirBlowerGreenhouseGas
|
|
|
|
|
{
|
|
|
|
|
get => _totalAirBlowerGreenhouseGas;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (_totalAirBlowerGreenhouseGas != value)
|
|
|
|
|
{
|
|
|
|
|
_totalAirBlowerGreenhouseGas = value;
|
|
|
|
|
OnPropertyChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private double _totalOzoneGeneratorGreenhouseGas;
|
|
|
|
|
public double TotalOzoneGeneratorGreenhouseGas
|
|
|
|
|
{
|
|
|
|
|
get => _totalOzoneGeneratorGreenhouseGas;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (_totalOzoneGeneratorGreenhouseGas != value)
|
|
|
|
|
{
|
|
|
|
|
_totalOzoneGeneratorGreenhouseGas = value;
|
|
|
|
|
OnPropertyChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private double _totalUVSterilizerGreenhouseGas;
|
|
|
|
|
public double TotalUVSterilizerGreenhouseGas
|
|
|
|
|
{
|
|
|
|
|
get => _totalUVSterilizerGreenhouseGas;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (_totalUVSterilizerGreenhouseGas != value)
|
|
|
|
|
{
|
|
|
|
|
_totalUVSterilizerGreenhouseGas = value;
|
|
|
|
|
OnPropertyChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private double _totalOzoneDissolverGreenhouseGas;
|
|
|
|
|
public double TotalOzoneDissolverGreenhouseGas
|
|
|
|
|
{
|
|
|
|
|
get => _totalOzoneDissolverGreenhouseGas;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (_totalOzoneDissolverGreenhouseGas != value)
|
|
|
|
|
{
|
|
|
|
|
_totalOzoneDissolverGreenhouseGas = value;
|
|
|
|
|
OnPropertyChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private double _totalExcessOzoneDestroyerGreenhouseGas;
|
|
|
|
|
public double TotalExcessOzoneDestroyerGreenhouseGas
|
|
|
|
|
{
|
|
|
|
|
get => _totalExcessOzoneDestroyerGreenhouseGas;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (_totalExcessOzoneDestroyerGreenhouseGas != value)
|
|
|
|
|
{
|
|
|
|
|
_totalExcessOzoneDestroyerGreenhouseGas = value;
|
|
|
|
|
OnPropertyChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private int _selectedGraphIndex = -1;
|
|
|
|
|
public int SelectedGraphIndex
|
|
|
|
|
@ -60,6 +188,20 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private StepFieldKind _selectedKind = StepFieldKind.GHG; // 기본값은 센서
|
|
|
|
|
public StepFieldKind SelectedKind
|
|
|
|
|
{
|
|
|
|
|
get => _selectedKind;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (_selectedKind != value)
|
|
|
|
|
{
|
|
|
|
|
_selectedKind = value;
|
|
|
|
|
OnPropertyChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool ShowXSelector => SelectedGraphType == GraphType.SCATTER;
|
|
|
|
|
|
|
|
|
|
// [필드 후보 목록] 탭/시스템에 따라 달라짐
|
|
|
|
|
@ -104,13 +246,27 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
|
|
|
|
|
|
public GreenHouseGasViewModel()
|
|
|
|
|
{
|
|
|
|
|
WaterQualityList = Datas.Instance.GetWaterQualityVO().ToList();
|
|
|
|
|
GraphTypes = new ObservableCollection<GraphType>
|
|
|
|
|
{
|
|
|
|
|
GraphType.LINE,
|
|
|
|
|
GraphType.STACKAREA,
|
|
|
|
|
GraphType.PIE
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
WaterQualityList = Datas.Instance.WaterQualityView;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TotalSandFilterGreenhouseGas = WaterQualityList.Sum(vo => vo.Filtering.SandFilterGreenhouseGas);
|
|
|
|
|
TotalCirculationPumpGreenhouseGas = WaterQualityList.Sum(vo => vo.Filtering.CirculationPumpGreenhouseGas);
|
|
|
|
|
TotalHeatPumpGreenhouseGas = WaterQualityList.Sum(vo => vo.Filtering.HeatPumpGreenhouseGas);
|
|
|
|
|
TotalAirBlowerGreenhouseGas = WaterQualityList.Sum(vo => vo.Filtering.AirBlowerGreenhouseGas);
|
|
|
|
|
TotalOzoneGeneratorGreenhouseGas = WaterQualityList.Sum(vo => vo.Sterilizing.OzoneGeneratorGreenhouseGas);
|
|
|
|
|
TotalUVSterilizerGreenhouseGas = WaterQualityList.Sum(vo => vo.Sterilizing.UVSterilizerGreenhouseGas);
|
|
|
|
|
TotalOzoneDissolverGreenhouseGas = WaterQualityList.Sum(vo => vo.Sterilizing.OzoneDissolverGreenhouseGas);
|
|
|
|
|
TotalExcessOzoneDestroyerGreenhouseGas = WaterQualityList.Sum(vo => vo.Sterilizing.ExcessOzoneDestroyerGreenhouseGas);
|
|
|
|
|
TotalGreenhouseGas = WaterQualityList.Sum(vo => vo.TotalGreenhouseGas);
|
|
|
|
|
|
|
|
|
|
SelectedKind = StepFieldKind.GHG;
|
|
|
|
|
|
|
|
|
|
DrawGraphCommand = new RelayCommand(DrawGraph);
|
|
|
|
|
|
|
|
|
|
@ -123,13 +279,13 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
|
switch (SelectedGraphType)
|
|
|
|
|
{
|
|
|
|
|
case GraphType.LINE:
|
|
|
|
|
GraphControlVM.SetMultiLineGraph(WaterQualityList, SelectedYFields, DataType.GreenhouseGas, ShowMarkers, ShowLegends);
|
|
|
|
|
GraphControlVM.SetMultiLineGraph(WaterQualityList.ToList(), SelectedYFields, DataType.GreenhouseGas, ShowMarkers, ShowLegends);
|
|
|
|
|
break;
|
|
|
|
|
case GraphType.STACKAREA:
|
|
|
|
|
GraphControlVM.SetStackAreaPlot(WaterQualityList, SelectedYFields, DataType.GreenhouseGas, ShowMarkers, ShowLegends);
|
|
|
|
|
GraphControlVM.SetStackAreaPlot(WaterQualityList.ToList(), SelectedYFields, DataType.GreenhouseGas, ShowMarkers, ShowLegends);
|
|
|
|
|
break;
|
|
|
|
|
case GraphType.PIE:
|
|
|
|
|
GraphControlVM.SetPieChart(WaterQualityList, SelectedYFields, DataType.GreenhouseGas, UseAverage, IsDonut);
|
|
|
|
|
GraphControlVM.SetPieChart(WaterQualityList.ToList(), SelectedYFields, DataType.GreenhouseGas, UseAverage, IsDonut);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
@ -143,15 +299,15 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
|
// 공통 시간
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "RecordedTime", Display = "시간", DataType = typeof(DateTime) });
|
|
|
|
|
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "TotalGreenhouseGas", Display = "총 배출량", DataType = typeof(double), Kind = StepFieldKind.Energy });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Filtering.SandFilterGreenhouseGas", Display = "모래여과기", DataType = typeof(double), Kind = StepFieldKind.Energy });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Filtering.CirculationPumpGreenhouseGas", Display = "순환펌프", DataType = typeof(double), Kind = StepFieldKind.Energy });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Filtering.HeatPumpGreenhouseGas", Display = "히트펌프", DataType = typeof(double), Kind = StepFieldKind.Energy });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Filtering.AirBlowerGreenhouseGas", Display = "에어브로와", DataType = typeof(double), Kind = StepFieldKind.Energy });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Sterilizing.OzoneGeneratorGreenhouseGas", Display = "오존발생기", DataType = typeof(double), Kind = StepFieldKind.Energy });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Sterilizing.UVSterilizerGreenhouseGas", Display = "자외선 살균기", DataType = typeof(double), Kind = StepFieldKind.Energy });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Sterilizing.OzoneDissolverGreenhouseGas", Display = "오존용해장치", DataType = typeof(double), Kind = StepFieldKind.Energy });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Sterilizing.ExcessOzoneDestroyerGreenhouseGas", Display = "배오존장치", DataType = typeof(double), Kind = StepFieldKind.Energy });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "TotalGreenhouseGas", Display = "총 배출량", DataType = typeof(double), Kind = StepFieldKind.GHG });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Filtering.SandFilterGreenhouseGas", Display = "모래여과기", DataType = typeof(double), Kind = StepFieldKind.GHG });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Filtering.CirculationPumpGreenhouseGas", Display = "순환펌프", DataType = typeof(double), Kind = StepFieldKind.GHG });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Filtering.HeatPumpGreenhouseGas", Display = "히트펌프", DataType = typeof(double), Kind = StepFieldKind.GHG });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Filtering.AirBlowerGreenhouseGas", Display = "에어브로와", DataType = typeof(double), Kind = StepFieldKind.GHG });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Sterilizing.OzoneGeneratorGreenhouseGas", Display = "오존발생기", DataType = typeof(double), Kind = StepFieldKind.GHG });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Sterilizing.UVSterilizerGreenhouseGas", Display = "자외선 살균기", DataType = typeof(double), Kind = StepFieldKind.GHG });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Sterilizing.OzoneDissolverGreenhouseGas", Display = "오존용해장치", DataType = typeof(double), Kind = StepFieldKind.GHG });
|
|
|
|
|
AvailableFields.Add(new FieldItem { Name = "Sterilizing.ExcessOzoneDestroyerGreenhouseGas", Display = "배오존장치", DataType = typeof(double), Kind = StepFieldKind.GHG });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RebuildFieldCandidates()
|
|
|
|
|
@ -180,7 +336,7 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
|
// Y축 후보: 수치형
|
|
|
|
|
foreach (var f in src)
|
|
|
|
|
{
|
|
|
|
|
if (SelectedGraphType is GraphType.STACKAREA or GraphType.PIE && f.Name.Equals("TotalEnergy")) continue;
|
|
|
|
|
if (SelectedGraphType is GraphType.STACKAREA or GraphType.PIE && f.Name!.Equals("TotalGreenhouseGas")) continue;
|
|
|
|
|
YFieldCandidates.Add(f);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|