From c52758fc5071fdadeff792b6c78cc6f1a50c49e7 Mon Sep 17 00:00:00 2001 From: hhsung Date: Mon, 11 Aug 2025 11:18:37 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9E=84=EC=9D=98=EC=9D=98=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=B0=8F=20?= =?UTF-8?q?=EC=83=98=ED=94=8C=EC=9E=90=EB=A3=8C=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataAnalisys/AquarDataControl.cs | 16 ++ .../DataAnalisys/WaterQualityVO.cs | 172 ++++++++++++++++++ 2 files changed, 188 insertions(+) create mode 100644 SmartAquaViewer/DataAnalisys/AquarDataControl.cs create mode 100644 SmartAquaViewer/DataAnalisys/WaterQualityVO.cs diff --git a/SmartAquaViewer/DataAnalisys/AquarDataControl.cs b/SmartAquaViewer/DataAnalisys/AquarDataControl.cs new file mode 100644 index 0000000..52cfb36 --- /dev/null +++ b/SmartAquaViewer/DataAnalisys/AquarDataControl.cs @@ -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 + { + + + } + + +} diff --git a/SmartAquaViewer/DataAnalisys/WaterQualityVO.cs b/SmartAquaViewer/DataAnalisys/WaterQualityVO.cs new file mode 100644 index 0000000..1f88c8c --- /dev/null +++ b/SmartAquaViewer/DataAnalisys/WaterQualityVO.cs @@ -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 + { + /// + /// 저수조 번호 + /// + public int WaterTankNum { get; set; } + + /// + /// Dissolved Oxygen (mg/L) + /// + public double DO { get; set; } + + /// + /// pH (산도) + /// + public double PH { get; set; } + + /// + /// 수온 (°C) + /// + public double Temperature { get; set; } + + /// + /// 수위 (m) + /// + public double WaterLevel { get; set; } + + /// + /// 유량 (m³/s) + /// + public double FlowRate { get; set; } + + /// + /// 전기전도도 (µS/cm) + /// + public double ElectricalConductivity { get; set; } + + /// + /// 탁도 (NTU) + /// + public double Turbidity { get; set; } + + /// + /// 염도 (ppt) + /// + public double Salinity { get; set; } + + /// + /// 산화환원전위 (mV) + /// + public double ORP { get; set; } + + /// + /// 총부유물질 (mg/L) + /// + public double TSS { get; set; } + + /// + /// 총질소 (mg/L) + /// + public double TotalNitrogen { get; set; } + + /// + /// 총인 (mg/L) + /// + public double TotalPhosphorus { get; set; } + + /// + /// 측정 시각 + /// + 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"; + } + + /// + /// 지정 기간 동안 임의의 수질 데이터를 생성합니다. + /// + public static List GetSampleData(DateTime start, DateTime end, int totalRowsCount) + { + var list = new List(); + 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; + } + + } + + + +}