임의의 데이터 클래스 및 샘플자료 생성함수 추가

hhsung_work
hhsung 10 months ago
parent d10b77d5a7
commit c52758fc50

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SmartAquaViewer.DataAnalisys
{
internal class AquarDataControl
{
}
}

@ -0,0 +1,172 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SmartAquaViewer.DataAnalisys
{
using System;
public class WaterQualityVO
{
/// <summary>
/// 저수조 번호
/// </summary>
public int WaterTankNum { get; set; }
/// <summary>
/// Dissolved Oxygen (mg/L)
/// </summary>
public double DO { get; set; }
/// <summary>
/// pH (산도)
/// </summary>
public double PH { get; set; }
/// <summary>
/// 수온 (°C)
/// </summary>
public double Temperature { get; set; }
/// <summary>
/// 수위 (m)
/// </summary>
public double WaterLevel { get; set; }
/// <summary>
/// 유량 (m³/s)
/// </summary>
public double FlowRate { get; set; }
/// <summary>
/// 전기전도도 (µS/cm)
/// </summary>
public double ElectricalConductivity { get; set; }
/// <summary>
/// 탁도 (NTU)
/// </summary>
public double Turbidity { get; set; }
/// <summary>
/// 염도 (ppt)
/// </summary>
public double Salinity { get; set; }
/// <summary>
/// 산화환원전위 (mV)
/// </summary>
public double ORP { get; set; }
/// <summary>
/// 총부유물질 (mg/L)
/// </summary>
public double TSS { get; set; }
/// <summary>
/// 총질소 (mg/L)
/// </summary>
public double TotalNitrogen { get; set; }
/// <summary>
/// 총인 (mg/L)
/// </summary>
public double TotalPhosphorus { get; set; }
/// <summary>
/// 측정 시각
/// </summary>
public DateTime Timestamp { get; set; }
public WaterQualityVO() { }
public WaterQualityVO(int waterTankNum, double doValue, double ph, double temperature, double waterLevel, double flowRate,
double electricalConductivity, double turbidity, double salinity, double orp,
double tss, double totalNitrogen, double totalPhosphorus, DateTime timestamp)
{
WaterTankNum = waterTankNum;
DO = doValue;
PH = ph;
Temperature = temperature;
WaterLevel = waterLevel;
FlowRate = flowRate;
ElectricalConductivity = electricalConductivity;
Turbidity = turbidity;
Salinity = salinity;
ORP = orp;
TSS = tss;
TotalNitrogen = totalNitrogen;
TotalPhosphorus = totalPhosphorus;
Timestamp = timestamp;
}
public override string ToString()
{
return $"Tank#{WaterTankNum} [{Timestamp}] DO: {DO} mg/L, pH: {PH}, Temp: {Temperature}°C, " +
$"Level: {WaterLevel} m, Flow: {FlowRate} m³/s, EC: {ElectricalConductivity} µS/cm, " +
$"Turbidity: {Turbidity} NTU, Salinity: {Salinity} ppt, ORP: {ORP} mV, " +
$"TSS: {TSS} mg/L, TN: {TotalNitrogen} mg/L, TP: {TotalPhosphorus} mg/L";
}
/// <summary>
/// 지정 기간 동안 임의의 수질 데이터를 생성합니다.
/// </summary>
public static List<WaterQualityVO> GetSampleData(DateTime start, DateTime end, int totalRowsCount)
{
var list = new List<WaterQualityVO>();
var rand = new Random();
if (totalRowsCount <= 0) return list;
double totalSeconds;
if (start == end)
{
// 같은 날짜면 하루(24시간) 기준으로 균등 분할
totalSeconds = 24 * 60 * 60; // 86,400초
}
else
{
totalSeconds = (end - start).TotalSeconds;
if (totalSeconds < 0) throw new ArgumentException("end 날짜는 start 날짜보다 같거나 커야 합니다.");
}
double stepSeconds = totalSeconds / totalRowsCount;
for (int i = 0; i < totalRowsCount; i++)
{
DateTime ts = start.AddSeconds(stepSeconds * i);
var vo = new WaterQualityVO
{
WaterTankNum = rand.Next(1, 6), // 1~5번 탱크
DO = Math.Round(rand.NextDouble() * 5 + 5, 2), // 5~10 mg/L
PH = Math.Round(rand.NextDouble() * 2 + 6, 2), // 6~8
Temperature = Math.Round(rand.NextDouble() * 10 + 15, 2), // 15~25°C
WaterLevel = Math.Round(rand.NextDouble() * 2 + 1, 2), // 1~3 m
FlowRate = Math.Round(rand.NextDouble() * 5 + 1, 2), // 1~6 m³/s
ElectricalConductivity = Math.Round(rand.NextDouble() * 500 + 200, 2), // 200~700 µS/cm
Turbidity = Math.Round(rand.NextDouble() * 5 + 1, 2), // 1~6 NTU
Salinity = Math.Round(rand.NextDouble() * 5, 2), // 0~5 ppt
ORP = Math.Round(rand.NextDouble() * 200 + 100, 2), // 100~300 mV
TSS = Math.Round(rand.NextDouble() * 20 + 5, 2), // 5~25 mg/L
TotalNitrogen = Math.Round(rand.NextDouble() * 2 + 0.5, 2), // 0.5~2.5 mg/L
TotalPhosphorus = Math.Round(rand.NextDouble() * 0.5 + 0.05, 3), // 0.05~0.55 mg/L
Timestamp = ts
};
list.Add(vo);
}
return list;
}
}
}
Loading…
Cancel
Save