From 65230a579c5d918b210d057d58589da3e8138d45 Mon Sep 17 00:00:00 2001 From: dev02 Date: Thu, 20 Jul 2023 10:08:50 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=BE=8C=E7=AB=AF]=20=E4=BF=AE=E6=94=B9niagar?= =?UTF-8?q?a=E5=90=8C=E6=AD=A5=20json=20=E8=BD=89=E6=8F=9B=E5=95=8F?= =?UTF-8?q?=E9=A1=8C,=20=E6=9B=B4=E6=94=B9=E8=B3=87=E6=96=99=E9=A1=AF?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Quartz/Jobs/ArchiveElectricMeterDayJob.cs | 26 ++++++++++--------- .../Implement/ProcEletricMeterService.cs | 12 ++++----- .../ApiControllers/HistoryController.cs | 20 +++++++------- .../ApiControllers/HydroMeterController.cs | 12 ++++----- FrontendWebApi/Models/HistoryClass.cs | 2 +- FrontendWebApi/Models/HydroMeter.cs | 2 +- 6 files changed, 38 insertions(+), 36 deletions(-) diff --git a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs index 8a96c56..4d762c1 100644 --- a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs +++ b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs @@ -592,7 +592,7 @@ namespace BackendWorkerService.Quartz.Jobs { await task_Detail.WorkFail("ArchiveElectricMeterDayJob", "Day", exception.ToString()); logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【任務失敗】"); - logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【任務失敗】[Exception]:{0} {1}", exception.ToString(), "device_number : " + device_number); + logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【任務失敗】[Exception]:{0}", exception.ToString()); } finally { @@ -959,7 +959,7 @@ namespace BackendWorkerService.Quartz.Jobs { await task_Detail.WorkFail("ArchiveElectricMeterDayJob", "Week", exception.ToString()); logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【任務失敗】"); - logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【任務失敗】[Exception]:{0} {1}", exception.ToString(), "device_number : " + device_number); + logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【任務失敗】[Exception]:{0}", exception.ToString()); } finally { @@ -1321,7 +1321,7 @@ namespace BackendWorkerService.Quartz.Jobs { await task_Detail.WorkFail("ArchiveElectricMeterDayJob", "Month", exception.ToString()); logger.LogError("【ArchiveElectricMeterDayJob】【月歸檔】【任務失敗】"); - logger.LogError("【ArchiveElectricMeterDayJob】【月歸檔】【任務失敗】[Exception]:{0} {1}", exception.ToString(), "device_number : " + device_number); + logger.LogError("【ArchiveElectricMeterDayJob】【月歸檔】【任務失敗】[Exception]:{0}", exception.ToString()); } finally { @@ -1424,19 +1424,19 @@ namespace BackendWorkerService.Quartz.Jobs switch (name) { case "min": - var min = Convert.ToDecimal(real["@val"].ToString()); + var min = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@min_rawdata", min); break; case "max": - var max = Convert.ToDecimal(real["@val"].ToString()); + var max = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@max_rawdata", max); break; case "avg": - var avg = Convert.ToDecimal(real["@val"].ToString()); + var avg = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@avg_rawdata", avg); break; case "sum": - var sum = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); + var sum = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@sum_rawdata", sum); break; } @@ -1492,19 +1492,19 @@ namespace BackendWorkerService.Quartz.Jobs switch (name) { case "min": - var min = Convert.ToDecimal(real["@val"].ToString()); + var min = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@min_rawdata", min); break; case "max": - var max = Convert.ToDecimal(real["@val"].ToString()); + var max = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@max_rawdata", max); break; case "avg": - var avg = Convert.ToDecimal(real["@val"].ToString()); + var avg = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@avg_rawdata", avg); break; case "sum": - var sum = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); + var sum = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@sum_rawdata", sum); break; } @@ -1524,7 +1524,9 @@ namespace BackendWorkerService.Quartz.Jobs catch (Exception exception) { logger.LogError("【ArchiveElectricMeterDayJob】【任務失敗】"); - logger.LogError("【ArchiveElectricMeterDayJob】【任務失敗】[Exception]:{0} {1}", exception.ToString(), "device_number : " + deviceNumberPoint.FullDeviceNumberPoint); + logger.LogError("【ArchiveElectricMeterDayJob】【任務失敗】[Exception]:{0}", exception.ToString()); + logger.LogError("【ArchiveElectricMeterDayJob】【任務失敗】[device_number]:{0}", deviceNumberPoint.FullDeviceNumberPoint); + logger.LogError("【ArchiveElectricMeterDayJob】【任務失敗】[JsonString]:{0}", jsonResult.ToString()); return arrangeRawDatas; } } diff --git a/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs b/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs index a4dea3c..79fb1b5 100644 --- a/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs +++ b/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs @@ -855,15 +855,15 @@ namespace BackendWorkerService.Services.Implement switch (name) { case "min": - var min = Convert.ToDecimal(real["@val"].ToString()); + var min = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@min_rawdata", min); break; case "max": - var max = Convert.ToDecimal(real["@val"].ToString()); + var max = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@max_rawdata", max); break; case "avg": - var avg = Convert.ToDecimal(real["@val"].ToString()); + var avg = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@avg_rawdata", avg); break; case "sum": @@ -923,15 +923,15 @@ namespace BackendWorkerService.Services.Implement switch (name) { case "min": - var min = Convert.ToDecimal(real["@val"].ToString()); + var min = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@min_rawdata", min); break; case "max": - var max = Convert.ToDecimal(real["@val"].ToString()); + var max = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@max_rawdata", max); break; case "avg": - var avg = Convert.ToDecimal(real["@val"].ToString()); + var avg = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@avg_rawdata", avg); break; case "sum": diff --git a/FrontendWebApi/ApiControllers/HistoryController.cs b/FrontendWebApi/ApiControllers/HistoryController.cs index 22b6c40..f94008b 100644 --- a/FrontendWebApi/ApiControllers/HistoryController.cs +++ b/FrontendWebApi/ApiControllers/HistoryController.cs @@ -162,7 +162,7 @@ namespace FrontendWebApi.ApiControllers HistoryExport hed = new HistoryExport(); hed.type = devicePoint.Where(x => x.device_building_tag == d.building_tag && x.points == ard["@point"].ToString()).Select(x => x.full_name).FirstOrDefault(); hed.deviceName = device.Where(x => x.device_number == ard["@device_number"].ToString()).Select(x => x.full_name).FirstOrDefault(); - hed.value = (double)((decimal)ard["@avg_rawdata"]); + hed.value = ard["@avg_rawdata"].ToString() == "-1" ? "NaN" : Math.Round((decimal.Parse(ard["@avg_rawdata"].ToString(), System.Globalization.NumberStyles.Float)), 2).ToString(); hed.timestamp = Convert.ToDateTime(ard["@start_timestamp"].ToString()); hed.building_tag = d.building_tag; he.Add(hed); @@ -451,7 +451,7 @@ namespace FrontendWebApi.ApiControllers List deviceItems = new List(); var main_system_value = hf.device_number.Split('_')[2]; var sub_system_value = hf.device_number.Split('_')[3]; - var building_tag = hf.device_number.Split('_')[1]; + var building_tag = char.IsDigit(hf.device_number.Split('_')[1][0]) ? "$3" + hf.device_number.Split('_')[1] : hf.device_number.Split('_')[1]; var sqlString = $@"select * from device_item where deleted = 0 and device_system_tag = @main_system_value and device_name_tag = @sub_system_value and is_show_history = 1 and device_building_tag = @building_tag"; deviceItems = await frontendRepository.GetAllAsync(sqlString, new { @main_system_value = main_system_value, @sub_system_value = sub_system_value, building_tag = building_tag }); @@ -1391,19 +1391,19 @@ namespace FrontendWebApi.ApiControllers switch (name) { case "min": - var min = Convert.ToDecimal(real["@val"].ToString()); + var min = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@min_rawdata", min); break; case "max": - var max = Convert.ToDecimal(real["@val"].ToString()); + var max = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@max_rawdata", max); break; case "avg": - var avg = Convert.ToDecimal(real["@val"].ToString()); + var avg = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@avg_rawdata", avg); break; case "sum": - var sum = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); + var sum = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@sum_rawdata", sum); break; } @@ -1459,19 +1459,19 @@ namespace FrontendWebApi.ApiControllers switch (name) { case "min": - var min = Convert.ToDecimal(real["@val"].ToString()); + var min = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@min_rawdata", min); break; case "max": - var max = Convert.ToDecimal(real["@val"].ToString()); + var max = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@max_rawdata", max); break; case "avg": - var avg = Convert.ToDecimal(real["@val"].ToString()); + var avg = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@avg_rawdata", avg); break; case "sum": - var sum = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); + var sum = real["@val"].ToString() == "NaN" ? -1 : Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float); arrangeRawData.Add("@sum_rawdata", sum); break; } diff --git a/FrontendWebApi/ApiControllers/HydroMeterController.cs b/FrontendWebApi/ApiControllers/HydroMeterController.cs index 93f4e02..34b4c2c 100644 --- a/FrontendWebApi/ApiControllers/HydroMeterController.cs +++ b/FrontendWebApi/ApiControllers/HydroMeterController.cs @@ -117,7 +117,7 @@ namespace FrontendWebApi.ApiControllers var aemmEndDate = input.tableType == "year" ? $"year(DATE_ADD(fd.date, INTERVAL +1 {input.tableType}))" : $"DATE_ADD(fd.date, INTERVAL +1 {input.tableType})"; var aemmStaDate = input.tableType == "year" ? "year(fd.date)" : "fd.date"; var sql = $@"set @i = -1; - select fd.device_number, aemm.avg_rawdata, DATE_FORMAT(fd.date, @dateFormat) as timestamp + select fd.device_number, case when aemm.avg_rawdata = -1 then 'NaN' when aemm.avg_rawdata is null then 0.00 else aemm.avg_rawdata end as avg_rawdata, DATE_FORMAT(fd.date, @dateFormat) as timestamp from ( select * from ( @@ -164,7 +164,7 @@ namespace FrontendWebApi.ApiControllers foreach (var l in list) { l.rawData = new List(); - l.device_full_name = await backendRepository.GetOneAsync($"select full_name from device where device_number = '{l.device_number}' and deleted = 0"); + l.device_full_name = await backendRepository.GetOneAsync($"select full_name from device where device_number = '{l.device_number}'"); if (tag_quantity == "5") { l.rawData.AddRange( @@ -179,7 +179,7 @@ namespace FrontendWebApi.ApiControllers } l.building_name = await backendRepository.GetOneAsync("select full_name from building where building_tag = @building_tag and deleted = 0", new { building_tag = l.building_tag }); - l.total = l.rawData.Sum(x => x.avg_rawdata).ToString(); + l.total = l.rawData.Where(x => x.avg_rawdata != "NaN").Sum(x => decimal.Parse(x.avg_rawdata ?? "0", System.Globalization.NumberStyles.Float)).ToString(); l.price = input.price.HasValue ? (Math.Round(input.price.Value, 2)).ToString() : Math.Round((await backendRepository.GetOneAsync("select system_value from variable where system_type = 'ElectricPrice' and deleted = 0")), 2).ToString(); @@ -289,7 +289,7 @@ namespace FrontendWebApi.ApiControllers var aemmEndDate = input.tableType == "year" ? $"year(DATE_ADD(fd.date, INTERVAL +1 {input.tableType}))" : $"DATE_ADD(fd.date, INTERVAL +1 {input.tableType})"; var aemmStaDate = input.tableType == "year" ? "year(fd.date)" : "fd.date"; var sql = $@"set @i = -1; - select fd.device_number, aemm.avg_rawdata, DATE_FORMAT(fd.date, @dateFormat) as timestamp + select fd.device_number, case when aemm.avg_rawdata = -1 then 'NaN' when aemm.avg_rawdata is null then 0.00 else aemm.avg_rawdata end as avg_rawdata, DATE_FORMAT(fd.date, @dateFormat) as timestamp from ( select * from ( @@ -337,7 +337,7 @@ namespace FrontendWebApi.ApiControllers foreach (var l in list) { l.rawData = new List(); - l.device_full_name = await backendRepository.GetOneAsync($"select full_name from device where device_number = '{l.device_number}' and deleted = 0"); + l.device_full_name = await backendRepository.GetOneAsync($"select full_name from device where device_number = '{l.device_number}'"); if (tag_quantity == "5") { l.rawData.AddRange( @@ -352,7 +352,7 @@ namespace FrontendWebApi.ApiControllers } l.building_name = await backendRepository.GetOneAsync("select full_name from building where building_tag = @building_tag and deleted = 0", new { building_tag = l.building_tag }); - l.total = l.rawData.Sum(x => x.avg_rawdata).ToString(); + l.total = l.rawData.Where(x => x.avg_rawdata != "NaN").Sum(x => decimal.Parse(x.avg_rawdata, System.Globalization.NumberStyles.Float)).ToString(); l.price = input.price.HasValue ? (Math.Round(input.price.Value, 2)).ToString() : Math.Round((await backendRepository.GetOneAsync("select system_value from variable where system_type = 'WaterPrice' and deleted = 0")), 2).ToString(); diff --git a/FrontendWebApi/Models/HistoryClass.cs b/FrontendWebApi/Models/HistoryClass.cs index 326bc7a..81f3c52 100644 --- a/FrontendWebApi/Models/HistoryClass.cs +++ b/FrontendWebApi/Models/HistoryClass.cs @@ -292,7 +292,7 @@ namespace FrontendWebApi.Models public class HistoryExport { public string deviceName { get; set; } - public double value { get; set; } + public string value { get; set; } public DateTime timestamp { get; set; } public DateTime starttime { get; set; } public DateTime? endtime { get; set; } diff --git a/FrontendWebApi/Models/HydroMeter.cs b/FrontendWebApi/Models/HydroMeter.cs index 6b1ce2f..c65051a 100644 --- a/FrontendWebApi/Models/HydroMeter.cs +++ b/FrontendWebApi/Models/HydroMeter.cs @@ -37,7 +37,7 @@ namespace FrontendWebApi.Models { public string timeStamp { get; set; } public string device_number { get; set; } - public decimal avg_rawdata { get; set; } + public string avg_rawdata { get; set; } } public class HydroMeterPriceInput