From 35118e811547c40e404d61c20423776d98a32cbc Mon Sep 17 00:00:00 2001 From: jiahao Date: Tue, 12 Dec 2023 14:15:21 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=98=8E=E5=BF=97=20-=20=E6=9C=88=E6=AD=B8?= =?UTF-8?q?=E6=AA=94=20debug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Quartz/Jobs/ArchiveElectricMeterDayJob.cs | 2 +- .../Implement/ProcEletricMeterService.cs | 32 +++++++++++-------- .../ApiControllers/HydroMeterController.cs | 16 +++++++--- FrontendWebApi/appsettings.Development.json | 11 +++---- 4 files changed, 35 insertions(+), 26 deletions(-) diff --git a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs index e76d204..b0fe780 100644 --- a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs +++ b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs @@ -1231,7 +1231,7 @@ namespace BackendWorkerService.Quartz.Jobs update device set archive_lastDate = @start_timestamp, archive_lastActionDate = @updated_at where device_number = @device_number;"; //archive_lastDate 前次完成時間 ,archive_lastActionDate 本次作業時間 - await backgroundServiceRepository.ExecuteSql(mySql, electericArchiveDayRawDatas); + await backgroundServiceRepository.ExecuteSql(mySql, row); } #region 明志 沒有mssql //if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") diff --git a/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs b/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs index 9971416..4063f05 100644 --- a/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs +++ b/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs @@ -965,9 +965,9 @@ namespace BackendWorkerService.Services.Implement logger.LogInformation($@"s0 DeviceNumberPoints.Count() = {DeviceNumberPoints.Count().ToString()}"); foreach (var deviceNumberPoint in DeviceNumberPoints) { - if (deviceNumberPoint.DeviceNumber == "NTPC_G6_EE_E4_B1F_CB3_WHT_N1") + if (deviceNumberPoint.DeviceNumber == "NTPC_G6_EE_E4_B1F_CB1_WHT_N1") //NTPC_G6_EE_E4_B1F_CB2_WHT_N1 NTPC_G6_EE_E4_B1F_MVCB_WHT_N1 { - logger.LogInformation($@"s1 devie_number = NTPC_G6_EE_E4_B1F_CB3_WHT_N1 archive_lastDate={deviceNumberPoint.archive_lastDate}"); + logger.LogInformation($@"s1 devie_number = NTPC_G6_EE_E4_B1F_CB1_WHT_N1 archive_lastDate={deviceNumberPoint.archive_lastDate}"); } if (deviceNumberPoint.archive_lastDate.ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd")) { @@ -975,9 +975,13 @@ namespace BackendWorkerService.Services.Implement continue; //如果是今天 就不要用歸檔了 } - var startDay = string.Format("{0}T00:00:00.000+08:00", deviceNumberPoint.archive_lastDate.ToString("yyyy-MM-dd").Replace(" ", "T")); + //var startDay = string.Format("{0}T00:00:00.000+08:00", deviceNumberPoint.archive_lastDate.ToString("yyyy-MM-dd").Replace(" ", "T")); + var startDay = deviceNumberPoint.archive_lastDate.ToString("yyyy-MM-dd"); var endDay = System.DateTime.Now.ToString("yyyy-MM-dd"); - + + //var startDay = string.Format("{0}T00:00:00.000+08:00", deviceNumberPoint.archive_lastDate.ToString("yyyy-MM-dd").Replace(" ", "T")); + //var endDay = System.DateTime.Now.AddDays(-29).ToString(); + //logger.LogInformation($@"before startDay = {startDay} endDay={endDay}"); // ----------- log #region @@ -986,9 +990,8 @@ namespace BackendWorkerService.Services.Implement if (day.ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd")) { //logger.LogInformation($@"s2 foreach (DateTime day in EachDay(startDay, endDay)) 判斷為今天 不用跑 day = {day} "); // ----------- log - continue; //如果是今天 就不要用歸檔了 + break; //如果是今天 就不要用歸檔了 } - //logger.LogInformation(@$"obix query for {deviceNumberPoint.DeviceNumber} day = {day.ToString("yyyy-MM-dd")}"); var sDay = string.Format("{0}T00:00:00.000+08:00", day.ToString("yyyy-MM-dd").Replace(" ", "T")); @@ -1120,19 +1123,20 @@ namespace BackendWorkerService.Services.Implement //} var startDay = deviceNumberPoint.archive_lastDate.ToString("yyyy-MM-dd"); - var endDay = DateTime.Now.ToString("yyyy-MM-dd"); + var endDay = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"); logger.LogInformation($@"before startDay = {startDay} endDay={endDay}"); // ----------- log #region - foreach (DateTime day in EachMonth(startDay , endDay)) - { + //foreach (DateTime day in EachMonth(startDay , endDay)) + //{ // 需要比原定日期增加 1天:因 Niagara 內部判斷為 < lastData, 並未包含結束當天 add by jiahao @2023-09-16 //var dayInMonth = DateTime.DaysInMonth(day.Year, day.Month) +1; 、、(DateTime.Now - DateTime.Parse(startDay)).Days - var dayInMonth = (DateTime.Now - DateTime.Parse(day.ToString("yyyy-MM-") + "01")).Days + 1; + DateTime today = DateTime.Now; + var dayInMonth = (DateTime.Now - DateTime.Parse(today.ToString("yyyy-MM-") + "01")).Days + 1; - var startTimestamp = string.Format("{0}T00:00:00.000+08:00", day.ToString("yyyy-MM-") + "01"); + var startTimestamp = string.Format("{0}T00:00:00.000+08:00", today.ToString("yyyy-MM-") + "01"); //var endTimestamp = string.Format("{0}T23:59:59.000+08:00", LastDay.ToString("yyyy-MM-dd")); //var endTimestamp = string.Format("{0}T00:00:10.000+08:00", day.AddMonths(1).ToString("yyyy-MM-") + "01"); // by jiahao @2023-09-26 var endTimestamp = string.Format("{0}T00:00:10.000+08:00", DateTime.Now.ToString("yyyy-MM-dd")); // by jiahao @2023-10-03 @@ -1168,7 +1172,7 @@ namespace BackendWorkerService.Services.Implement archiveResponse.Dispose(); archiveResponse.Close(); - logger.LogInformation(@$"【ArchiveElectricMeterMonth】{device_number} startTimestamp={startTimestamp} endTimestamp= {endTimestamp} interval = PT{dayInMonth.ToString()}D url = {$"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/"}"); + //logger.LogInformation(@$"【ArchiveElectricMeterMonth】{device_number} startTimestamp={startTimestamp} endTimestamp= {endTimestamp} interval = PT{dayInMonth.ToString()}D url = {$"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/"}"); xmlDocument.LoadXml(archiveResponseContent); @@ -1212,7 +1216,7 @@ namespace BackendWorkerService.Services.Implement resultArchiveDayRawDatas.AddRange(ArrangeRawDatas); } } - } + //} #endregion } @@ -1414,7 +1418,7 @@ namespace BackendWorkerService.Services.Implement { var strtday = DateTime.Parse(from); var endday = DateTime.Parse(thru); - for (var _month = strtday.Date; _month.Month <= endday.Month; _month = _month.AddMonths(1)) + for (var _month = strtday.Date; _month.Month <= endday.Month; _month = _month.AddDays(1)) yield return _month; } diff --git a/FrontendWebApi/ApiControllers/HydroMeterController.cs b/FrontendWebApi/ApiControllers/HydroMeterController.cs index e7e29d5..c9749ab 100644 --- a/FrontendWebApi/ApiControllers/HydroMeterController.cs +++ b/FrontendWebApi/ApiControllers/HydroMeterController.cs @@ -80,11 +80,17 @@ namespace FrontendWebApi.ApiControllers ? input.startTime + "-01" : input.tableType == "month" || input.tableType == "year" ? input.startTime + "-01-01" : null; - var endTime = input.tableType == "day" || input.tableType == "week" - ? input.startTime.Split("-")[0] + "-" + (Int32.Parse(input.startTime.Split("-")[1]) + 1).ToString().PadLeft(2, '0') + "-01" - : input.tableType == "month" ? (Int32.Parse(input.startTime.Split("-")[0]) + 1) + "-01-01" - : input.tableType == "year" ? (Int32.Parse(input.endTime) + 1).ToString() + "-01-01" - : null; + var yyyymmdd = System.DateTime.Parse(input.startTime + "-01").AddMonths(1); + //var endTime = input.tableType == "day" || input.tableType == "week" + // ? input.startTime.Split("-")[0] + "-" + (Int32.Parse(input.startTime.Split("-")[1]) + 1).ToString().PadLeft(2, '0') + "-01" + // : input.tableType == "month" ? (Int32.Parse(input.startTime.Split("-")[0]) + 1) + "-01-01" + // : input.tableType == "year" ? (Int32.Parse(input.endTime) + 1).ToString() + "-01-01" + // : null; + var endTime = input.tableType == "day" || input.tableType == "week" + ? yyyymmdd.ToString("yyyy-MM-dd") + : input.tableType == "month" ? (Int32.Parse(input.startTime.Split("-")[0]) + 1) + "-01-01" + : input.tableType == "year" ? (Int32.Parse(input.endTime) + 1).ToString() + "-01-01" + : null; string sqlWhere = ""; string sqlGroup = ""; string sqlAvgRawData = ""; diff --git a/FrontendWebApi/appsettings.Development.json b/FrontendWebApi/appsettings.Development.json index 2548a1a..9f72e64 100644 --- a/FrontendWebApi/appsettings.Development.json +++ b/FrontendWebApi/appsettings.Development.json @@ -14,15 +14,14 @@ }, "DBConfig": { "MySqlDBConfig": { - "Server": "FYlY+w0XDIz+jmF2rlZWJw==", //0.201 - "Port": "js2LutKe+rdjzdxMPQUrvQ==", - //"Database": "VJB2XC+lAtzuHObDGMVOAA==", //30 + "Server": "CYGthbCeGtAXT4s1NOSJHQ==", //0.132 + "Port": "mkF51jVbg40V5K5eTh2Ckw==", + //"Database": "VJB2XC+lAtzuHObDGMVOAA==", //30 //"Database": "IgYBsgG2VLKKxFb64j7LOA==", //wsp //"Database": "7gWfmZ28HGIJZbxEbK+0yg==", //tpe_dome_dome //"Database": "siTUcDaC/g2yGTMFWD72Kg==", //tpe_dome_hotel - //"Database": "iuaY0h0+TWkir44/eZLDqw==", //tpe_dome_office - //"Database": "Rq7Gn4x6LwBvVtl7GY8LbA==", //MCUT - "Database": "j9LOmjFh2/9PpuwnVB8ugqnKdBDJHx1AAT7aTWeh37E=", // ibms_mcut_online + //"Database": "Rq7Gn4x6LwBvVtl7GY8LbA==", //mcut + "Database": "XZ2fOBnta9kdVGEb7y92cg==", //ibms_mcut "Root": "SzdxEgaJJ7tcTCrUl2zKsA==", "Password": "FVAPxztxpY4gJJKQ/se4bQ==" } From 99fabe689e71c701c98c2e1099492d8d35f2149f Mon Sep 17 00:00:00 2001 From: dev02 Date: Tue, 2 Jan 2024 14:17:22 +0800 Subject: [PATCH 2/5] =?UTF-8?q?[=E5=89=8D=E7=AB=AF]=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=B9=B4=E6=9C=88=E4=BB=BD=E9=A1=AF=E7=A4=BA=20[=E5=BE=8C?= =?UTF-8?q?=E7=AB=AF]=20=E4=BF=AE=E6=94=B9=E6=90=9C=E5=B0=8B=E8=AE=8A?= =?UTF-8?q?=E6=95=B8=E9=8C=AF=E8=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/_reportManagement.html | 17 ++++++++++------- .../ApiControllers/HydroMeterController.cs | 5 +++-- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Frontend/_reportManagement.html b/Frontend/_reportManagement.html index 035bd8a..7b3c3c4 100644 --- a/Frontend/_reportManagement.html +++ b/Frontend/_reportManagement.html @@ -879,8 +879,12 @@ const ElecEachTotal = $("li.active [name=reportTypeRadio]").data("type") === "compare"; - if (ElecEachTotal) { - const [year, month] = $("#elecMonthDate").val().split("-"); + if (ElecEachTotal) { + let preDate = new Date($("#elecMonthDate").val().split("-") + "-01"); + preDate.setMonth(preDate.getMonth() - 1); + const [year, month] = $("#elecMonthDate").val().split("-"); + const preYear = preDate.getFullYear(); + const preMonth = (preDate.getMonth() + 1).toString().padStart(2, '0'); datesColumns = [ { label: "選擇月份
" + `${year}${month}` + "(A)", @@ -888,16 +892,15 @@ }, { label: - "前一月份
" + - `${year}${month - 1 > 10 ? month - 1 : `0${month - 1}`}` + + "前一月份
" + + `${preYear}${preMonth}` + "(B)", - value: `${year}-${month - 1 > 10 ? month - 1 : `0${month - 1}`}`, + value: `${preYear}-${preMonth}`, }, { label: "差異比較
" + - `${year}${month}(A)-${year}${month - 1 > 10 ? month - 1 : `0${month - 1}` - }(B)`, + `${year}${month}(A)-${preYear}${preMonth}(B)`, value: "last month different", }, { diff --git a/FrontendWebApi/ApiControllers/HydroMeterController.cs b/FrontendWebApi/ApiControllers/HydroMeterController.cs index c9749ab..d30325a 100644 --- a/FrontendWebApi/ApiControllers/HydroMeterController.cs +++ b/FrontendWebApi/ApiControllers/HydroMeterController.cs @@ -1299,6 +1299,7 @@ namespace FrontendWebApi.ApiControllers var start_month = date.ToString("MM"); // 查詢月 var last_year = previousYear.ToString("yyyy"); // 上個查詢年 var last_month = previousMonth.ToString("MM"); // 上個查詢月 + var pre_year = previousMonth.ToString("yyyy"); // 上個查詢月(年份) string sqlWhere = ""; string tag_quantity = await backendRepository.GetOneAsync("select system_value from variable where system_type = 'obixConfig' and system_key = 'tag_quantity' and deleted = 0"); @@ -1329,14 +1330,14 @@ namespace FrontendWebApi.ApiControllers } string header_now = start_year + "-" + start_month; - string header_lastM = start_year + "-" + last_month; + string header_lastM = pre_year + "-" + last_month; string header_lastY = last_year + "-" + start_month; var sql = $@" select e.full_name building_name, a.device_number, '{header_now}' searchMT, ifnull(b.kwh_sum, 0) searchM, '{header_lastM}' lastMT, ifnull(c.kwh_sum, 0) lastM, '{header_lastY}' lastYT, ifnull(d.kwh_sum, 0) lastY from device a left join (select device_number, sum(kwh_result) kwh_sum from archive_electric_meter_month where year(start_timestamp) = {start_year} and month(start_timestamp) = {start_month} group by device_number) b on a.device_number COLLATE utf8mb4_0900_ai_ci = b.device_number -- month1 -left join (select device_number, sum(kwh_result) kwh_sum from archive_electric_meter_month where year(start_timestamp) = {start_year} and month(start_timestamp) = {last_month} group by device_number) c on a.device_number COLLATE utf8mb4_0900_ai_ci = c.device_number -- month2 +left join (select device_number, sum(kwh_result) kwh_sum from archive_electric_meter_month where year(start_timestamp) = {pre_year} and month(start_timestamp) = {last_month} group by device_number) c on a.device_number COLLATE utf8mb4_0900_ai_ci = c.device_number -- month2 left join (select device_number, sum(kwh_result) kwh_sum from archive_electric_meter_month where year(start_timestamp) = {last_year} and month(start_timestamp) = {start_month} group by device_number) d on a.device_number COLLATE utf8mb4_0900_ai_ci = d.device_number -- last Month join building e on a.device_building_tag = e.building_tag where {sqlWhere} From 6c50bdb071fa4e0c239d8d02b07d951ed3d7d2eb Mon Sep 17 00:00:00 2001 From: jiahao Date: Wed, 10 Jan 2024 12:57:35 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=80=A3=E7=B7=9A?= =?UTF-8?q?=E8=B3=87=E8=A8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/appsettings.Development.json | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Backend/appsettings.Development.json b/Backend/appsettings.Development.json index c20498b..c50b267 100644 --- a/Backend/appsettings.Development.json +++ b/Backend/appsettings.Development.json @@ -14,15 +14,14 @@ }, "DBConfig": { "MySqlDBConfig": { - "Server": "FYlY+w0XDIz+jmF2rlZWJw==", //0.201 - "Port": "js2LutKe+rdjzdxMPQUrvQ==", + "Server": "CYGthbCeGtAXT4s1NOSJHQ==", //0.132 + "Port": "mkF51jVbg40V5K5eTh2Ckw==", //"Database": "VJB2XC+lAtzuHObDGMVOAA==", //30 //"Database": "IgYBsgG2VLKKxFb64j7LOA==", //wsp //"Database": "7gWfmZ28HGIJZbxEbK+0yg==", //tpe_dome_dome //"Database": "siTUcDaC/g2yGTMFWD72Kg==", //tpe_dome_hotel - //"Database": "iuaY0h0+TWkir44/eZLDqw==", //tpe_dome_office - "Database": "Rq7Gn4x6LwBvVtl7GY8LbA==", //mcut - //"Database": "2U+9jYGy0dCbMzLaguBXow==", //tpe_dome_mall + //"Database": "Rq7Gn4x6LwBvVtl7GY8LbA==", //mcut + "Database": "XZ2fOBnta9kdVGEb7y92cg==", //ibms_mcut "Root": "SzdxEgaJJ7tcTCrUl2zKsA==", "Password": "FVAPxztxpY4gJJKQ/se4bQ==" }, From 0929c6f21a60516926853af9ee1f16bd0763324d Mon Sep 17 00:00:00 2001 From: "jay.chang" Date: Mon, 5 Feb 2024 07:20:30 +0800 Subject: [PATCH 4/5] =?UTF-8?q?[BackendWorkerService]=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=B0=B4=E9=9B=BB=E6=9C=88=E6=AD=B8=E6=AA=94=E6=9C=80=E5=BE=8C?= =?UTF-8?q?=E4=B8=80=E5=A4=A9=E6=B2=92=E7=B4=80=E9=8C=84=E7=9A=84=E5=95=8F?= =?UTF-8?q?=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Quartz/Jobs/ArchiveElectricMeterDayJob.cs | 45 +++-- .../Implement/ProcEletricMeterService.cs | 186 +++++++++--------- 2 files changed, 127 insertions(+), 104 deletions(-) diff --git a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs index b0fe780..adc3f70 100644 --- a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs +++ b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs @@ -188,8 +188,8 @@ namespace BackendWorkerService.Quartz.Jobs // 每日資料製作 await day_proc(procEletricMeterService, saveToMSDB, archiveResponse, electricDeviceNumberPoints, waterDeviceNumberPoints, obixApiConfig, encoded, startDay, endDay, dbDateName); - - //} + + //} //} await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Day", "任務完成0927"); } @@ -207,8 +207,8 @@ namespace BackendWorkerService.Quartz.Jobs archiveResponse.Close(); } } - - #endregion + + #endregion } #endregion 天歸檔 @@ -646,7 +646,7 @@ namespace BackendWorkerService.Quartz.Jobs //抓取每個設備的資料 List> electricArchiveMonthRawDatas = new List>(); List> waterArchiveMonthRawDatas = new List>(); - + //收集 niagara 電錶 Data procEletricMeterService.obixData_collect_range(xmlDocument, electricDeviceNumberPoints, obixApiConfig, encoded, electricArchiveMonthRawDatas); @@ -799,6 +799,8 @@ namespace BackendWorkerService.Quartz.Jobs { var sql = $@" UPDATE archive_electric_meter_month SET + start_timestamp = @start_timestamp, + end_timestamp = @end_timestamp, count_rawdata = @count_rawdata, min_rawdata = round(@min_rawdata, 2), max_rawdata = round(@max_rawdata, 2), @@ -846,6 +848,8 @@ namespace BackendWorkerService.Quartz.Jobs var mySql = $@"BEGIN TRANSACTION; UPDATE archive_electric_meter_month SET + start_timestamp = @start_timestamp, + end_timestamp = @end_timestamp, count_rawdata = @count_rawdata, min_rawdata = round(@min_rawdata, 2), max_rawdata = round(@max_rawdata, 2), @@ -892,7 +896,7 @@ namespace BackendWorkerService.Quartz.Jobs @fail_reason) END - COMMIT TRANSACTION;"; + COMMIT TRANSACTION;"; await backgroundServiceRepository.ExecuteSql(sql, electricArchiveMonthRawDatas); @@ -906,6 +910,8 @@ namespace BackendWorkerService.Quartz.Jobs { var sql = $@" UPDATE archive_water_meter_month SET + start_timestamp = @start_timestamp, + end_timestamp = @end_timestamp, count_rawdata = @count_rawdata, min_rawdata = round(@min_rawdata, 2), max_rawdata = round(@max_rawdata, 2), @@ -952,6 +958,8 @@ namespace BackendWorkerService.Quartz.Jobs var mySql = $@"BEGIN TRANSACTION; UPDATE archive_water_meter_month SET + start_timestamp = @start_timestamp, + end_timestamp = @end_timestamp, count_rawdata = @count_rawdata, min_rawdata = round(@min_rawdata, 2), max_rawdata = round(@max_rawdata, 2), @@ -998,7 +1006,7 @@ namespace BackendWorkerService.Quartz.Jobs @fail_reason) END - COMMIT TRANSACTION;"; + COMMIT TRANSACTION;"; await backgroundServiceRepository.ExecuteSql(sql, waterArchiveMonthRawDatas); if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") @@ -1059,10 +1067,10 @@ namespace BackendWorkerService.Quartz.Jobs private async Task day_proc( ProcEletricMeterService procEletricMeterService, string saveToMSDB, HttpWebResponse archiveResponse, List electricDeviceNumberPoints, List waterDeviceNumberPoints, ObixApiConfig obixApiConfig, string encoded, DateTime startDay, DateTime endDay, string dbDateName) { - XmlDocument xmlDocument = new XmlDocument(); + XmlDocument xmlDocument = new XmlDocument(); // --------- 需要變成指定日期 ---------------- - + // PT2D 需要設定超過1天 Stopwatch stopWatch = new Stopwatch(); @@ -1178,7 +1186,7 @@ namespace BackendWorkerService.Quartz.Jobs //異常設備 update string sql2 = string.Empty; foreach (var kv in dicError) - { + { sql2 += $@"update device set archive_lastDate = '{kv.Value}', archive_lastActionDate = now() where device_number = '{kv.Key}' ;"; } if (!string.IsNullOrEmpty(sql2)) @@ -1188,7 +1196,7 @@ namespace BackendWorkerService.Quartz.Jobs logger.LogInformation("run sql electericArchiveDayRawDatas.Count() = " + electericArchiveDayRawDatas.Count()); - + foreach (var row in electericArchiveDayRawDatas) { row.TryGetValue("@start_timestamp", out var yyyymmData); @@ -1329,7 +1337,11 @@ namespace BackendWorkerService.Quartz.Jobs #endregion } if (waterArchiveDayRawDatas.Count() > 0) + { + foreach (var row in waterArchiveDayRawDatas) { + row.TryGetValue("@start_timestamp", out var yyyymmData); + dbDateName = System.DateTime.Parse(yyyymmData.ToString()).ToString("yyyyMM"); var sql = $@" UPDATE archive_water_meter_day_{dbDateName} SET count_rawdata = @count_rawdata, min_rawdata = round(@min_rawdata, 2), @@ -1470,7 +1482,8 @@ namespace BackendWorkerService.Quartz.Jobs await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveDayRawDatas); } } - + } + } @@ -1558,7 +1571,7 @@ namespace BackendWorkerService.Quartz.Jobs // #endregion 水電錶作業 save to DB end //} - private bool initWork(string dbDateName) + private bool initWork(string dbDateName) { try { @@ -1603,9 +1616,9 @@ namespace BackendWorkerService.Quartz.Jobs catch (Exception exception) { logger.LogError("【initWork】【任務失敗】"); - logger.LogError("【initWork】【任務失敗】[Exception]:{0}", exception.ToString()); - } - + logger.LogError("【initWork】【任務失敗】[Exception]:{0}", exception.ToString()); + } + return true; } diff --git a/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs b/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs index 4063f05..e0fd8e9 100644 --- a/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs +++ b/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs @@ -23,6 +23,7 @@ using BackendWorkerService.Quartz.Jobs; using Microsoft.Extensions.Logging; using Org.BouncyCastle.Asn1.Pkcs; using NPOI.SS.Formula.Functions; +using MySqlX.XDevAPI.Relational; namespace BackendWorkerService.Services.Implement { @@ -319,7 +320,7 @@ namespace BackendWorkerService.Services.Implement else { //不同天為新格式 採用 Start_timestamp endTimestamp = string.Format("{0}T00:00:10.000+08:00", DateTime.Parse(error_day.Start_timestamp).AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T")); - } + } var historyQueryFilter = $@" @@ -390,7 +391,7 @@ namespace BackendWorkerService.Services.Implement { logger.LogError("【ArchiveElectricMeterDayJob】【補償機制 - 天】【任務失敗】Device_number=" + error_day.Device_number + " point = " + error_day.Point + " date =" + error_day + " startTimestamp" + startTimestamp + " endTimestamp =" + endTimestamp); logger.LogError("【ArchiveElectricMeterDayJob】【補償機制 - 天】【任務失敗】[Exception]:{0}", ex.ToString() + Environment.NewLine ); - } + } } if (electricArchiveDayRawDatas.Count() > 0) @@ -410,7 +411,7 @@ namespace BackendWorkerService.Services.Implement //先清空 該月份的數據 string sql = @$"update archive_electric_meter_month set count_rawdata = 0, kwh_result = 0, max_rawdata = 0, min_rawdata = 0, repeat_times = 0, is_complete = 0, fail_reason = null, updated_at = null - where `point` = 'KWH' and date(start_timestamp) = CONCAT('{yyyy}-{mm}', '-01'); "; + where `point` = 'KWH' and date(start_timestamp) = CONCAT('{yyyy}-{mm}', '-01'); "; try { @@ -436,8 +437,8 @@ namespace BackendWorkerService.Services.Implement //await task_Detail.WorkFail("ArchiveElectricMeterDayJob", "Compensate", ex.ToString()); logger.LogError("【ArchiveElectricMeterDayJob】【補償機制 - 月總計】【任務失敗】"); logger.LogError("【ArchiveElectricMeterDayJob】【補償機制 - 月總計】【任務失敗】[Exception]:{0}", ex.ToString() + Environment.NewLine + sql); - } - #endregion + } + #endregion } } } @@ -567,7 +568,7 @@ namespace BackendWorkerService.Services.Implement //var startTimestamp = string.Format("{0}+08:00", error_week.Start_timestamp.Replace(" ", "T")); var startTimestamp = string.Format("{0}T00:00:00.000+08:00", DateTime.Parse(error_week.Start_timestamp).ToString("yyyy-MM-dd").Replace(" ", "T")); - + //var endTimestamp = string.Format("{0}+08:00", error_week.End_timestamp.Replace(" ", "T")); var endTimestamp = string.Format("{0}T00:00:01.000+08:00", DateTime.Parse(error_week.End_timestamp).ToString("yyyy-MM-dd").Replace(" ", "T")); //var endTimestamp = string.Format("{0}T00:00:01.000+08:00", DateTime.Parse(error_week.End_timestamp).ToString("dd/MM/yyyy").Replace(" ", "T")); @@ -661,7 +662,7 @@ namespace BackendWorkerService.Services.Implement //var startTimestamp = string.Format("{0}+08:00", error_week.Start_timestamp.Replace(" ", "T")); //var endTimestamp = string.Format("{0}+08:00", error_week.End_timestamp.Replace(" ", "T")); - var startTimestamp = string.Format("{0}T00:00:00.000+08:00", DateTime.Parse(error_week.Start_timestamp).ToString("yyyy-MM-dd").Replace(" ", "T")); + var startTimestamp = string.Format("{0}T00:00:00.000+08:00", DateTime.Parse(error_week.Start_timestamp).ToString("yyyy-MM-dd").Replace(" ", "T")); var endTimestamp = string.Format("{0}T00:00:01.000+08:00", DateTime.Parse(error_week.End_timestamp).ToString("yyyy-MM-dd").Replace(" ", "T")); var historyQueryFilter = $@" @@ -757,7 +758,7 @@ namespace BackendWorkerService.Services.Implement // //var startTimestamp = string.Format("{0}+08:00", error_month.Start_timestamp.Replace(" ", "T")); // //var endTimestamp = string.Format("{0}+08:00", error_month.End_timestamp.Replace(" ", "T")); // var startTimestamp = string.Format("{0}T00:00:00.000+08:00", DateTime.Parse(error_month.Start_timestamp).ToString("yyyy-MM-dd").Replace(" ", "T")); - + // var endTimestamp = string.Format("{0}T00:00:01.000+08:00", DateTime.Parse(error_month.End_timestamp).ToString("yyyy-MM-dd").Replace(" ", "T")); // var startDateTime = Convert.ToDateTime(error_month.Start_timestamp); @@ -995,8 +996,8 @@ namespace BackendWorkerService.Services.Implement //logger.LogInformation(@$"obix query for {deviceNumberPoint.DeviceNumber} day = {day.ToString("yyyy-MM-dd")}"); var sDay = string.Format("{0}T00:00:00.000+08:00", day.ToString("yyyy-MM-dd").Replace(" ", "T")); - var eDay = string.Format("{0}T00:00:10.000+08:00", day.AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T")); - + var eDay = string.Format("{0}T00:01:00.000+08:00", day.AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T")); + string historyQueryFilter = $@" @@ -1019,7 +1020,7 @@ namespace BackendWorkerService.Services.Implement archiveRequest.Headers.Add("Authorization", "Basic " + encoded); archiveRequest.PreAuthenticate = true; - // logger.LogInformation($@"url= {$"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/" + Environment.NewLine} {device_number} station = {station} task= {startDay} ~ {endDay} action ={sDay} ~ {eDay}"); // ----------- log + // logger.LogInformation($@"url= {$"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/" + Environment.NewLine} {device_number} station = {station} task= {startDay} ~ {endDay} action ={sDay} ~ {eDay}"); // ----------- log byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter); using (Stream reqStream = archiveRequest.GetRequestStream()) @@ -1043,7 +1044,7 @@ namespace BackendWorkerService.Services.Implement { //logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【取得資料失敗】"); //logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【取得資料失敗】[錯誤內容]:{0}", archiveDayJsonResult); archiveJsonResult - logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【取得資料失敗】[錯誤內容]:{0}", archiveJsonResult); + logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【取得資料失敗】[錯誤內容]:{0}", archiveJsonResult); Dictionary archiveDayRawData = new Dictionary(); archiveDayRawData.Add("@device_number", deviceNumberPoint.DeviceNumber); archiveDayRawData.Add("@point", deviceNumberPoint.Point); @@ -1085,9 +1086,9 @@ namespace BackendWorkerService.Services.Implement if (!dicError.ContainsKey(deviceNumberPoint.DeviceNumber)) { dicError.Add(deviceNumberPoint.DeviceNumber, day.ToString("yyyy-MM-dd")); //記錄異常設備與日期 - } + } } - } + } } #endregion } @@ -1126,96 +1127,105 @@ namespace BackendWorkerService.Services.Implement var endDay = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"); logger.LogInformation($@"before startDay = {startDay} endDay={endDay}"); // ----------- log - + #region //foreach (DateTime day in EachMonth(startDay , endDay)) //{ - // 需要比原定日期增加 1天:因 Niagara 內部判斷為 < lastData, 並未包含結束當天 add by jiahao @2023-09-16 - //var dayInMonth = DateTime.DaysInMonth(day.Year, day.Month) +1; 、、(DateTime.Now - DateTime.Parse(startDay)).Days - DateTime today = DateTime.Now; - var dayInMonth = (DateTime.Now - DateTime.Parse(today.ToString("yyyy-MM-") + "01")).Days + 1; + // 需要比原定日期增加 1天:因 Niagara 內部判斷為 < lastData, 並未包含結束當天 add by jiahao @2023-09-16 + //var dayInMonth = DateTime.DaysInMonth(day.Year, day.Month) +1; 、、(DateTime.Now - DateTime.Parse(startDay)).Days + DateTime today = DateTime.Now; + + var preDay = today.AddDays(-1); //取得前一天 + + var dayInMonth = DateTime.DaysInMonth(preDay.Year, preDay.Month); + var FirstDay = new DateTime(preDay.Year, preDay.Month, 1); + var LastDay = today; + var startTimestamp = string.Format("{0}T00:00:00.000+08:00", FirstDay.ToString("yyyy-MM-dd")); + var endTimestamp = string.Format("{0}T00:01:00.000+08:00", LastDay.ToString("yyyy-MM-dd")); + + //var dayInMonth = (DateTime.Now - DateTime.Parse(today.ToString("yyyy-MM-") + "01")).Days + 1; - var startTimestamp = string.Format("{0}T00:00:00.000+08:00", today.ToString("yyyy-MM-") + "01"); - //var endTimestamp = string.Format("{0}T23:59:59.000+08:00", LastDay.ToString("yyyy-MM-dd")); - //var endTimestamp = string.Format("{0}T00:00:10.000+08:00", day.AddMonths(1).ToString("yyyy-MM-") + "01"); // by jiahao @2023-09-26 - var endTimestamp = string.Format("{0}T00:00:10.000+08:00", DateTime.Now.ToString("yyyy-MM-dd")); // by jiahao @2023-10-03 + //var startTimestamp = string.Format("{0}T00:00:00.000+08:00", today.ToString("yyyy-MM-") + "01"); + ////var endTimestamp = string.Format("{0}T23:59:59.000+08:00", LastDay.ToString("yyyy-MM-dd")); + ////var endTimestamp = string.Format("{0}T00:00:10.000+08:00", day.AddMonths(1).ToString("yyyy-MM-") + "01"); // by jiahao @2023-09-26 + //var endTimestamp = string.Format("{0}T00:00:10.000+08:00", DateTime.Now.ToString("yyyy-MM-dd")); // by jiahao @2023-10-03 - var historyQueryFilter = $@" + var historyQueryFilter = $@" - + "; - - string device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", ""); - var station = backgroundServiceRepository.GetOneAsync($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and + + string device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", ""); + var station = backgroundServiceRepository.GetOneAsync($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}' and device_point_name = '{device_number.Split("_")[8]}'").Result; - HttpWebRequest archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/"); - //HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/"); - archiveRequest.Method = "POST"; - archiveRequest.Headers.Add("Authorization", "Basic " + encoded); - archiveRequest.PreAuthenticate = true; + HttpWebRequest archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/"); + //HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/"); + archiveRequest.Method = "POST"; + archiveRequest.Headers.Add("Authorization", "Basic " + encoded); + archiveRequest.PreAuthenticate = true; - byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter); - using (Stream reqStream = archiveRequest.GetRequestStream()) + byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter); + using (Stream reqStream = archiveRequest.GetRequestStream()) + { + reqStream.Write(byteArray, 0, byteArray.Length); + } + + var archiveResponse = (HttpWebResponse)archiveRequest.GetResponse(); + var archiveResponseContent = new StreamReader(archiveResponse.GetResponseStream()).ReadToEnd(); + archiveResponse.Dispose(); + archiveResponse.Close(); + + //logger.LogInformation(@$"【ArchiveElectricMeterMonth】{device_number} startTimestamp={startTimestamp} endTimestamp= {endTimestamp} interval = PT{dayInMonth.ToString()}D url = {$"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/"}"); + + + xmlDocument.LoadXml(archiveResponseContent); + var archiveJson = JsonConvert.SerializeXmlNode(xmlDocument); + var archiveJsonResult = (JObject)JsonConvert.DeserializeObject(archiveJson); + + + //if (device_number == "NTPC_D8_EE_E4_RF_Total_WHT_N1" || device_number == "NTPC_D8_EE_E4_RF_H2_WHT_N1") + //{ + logger.LogError(@$"{device_number} json = {archiveJsonResult}"); + //} + if (archiveJsonResult.ContainsKey("err")) //抓取錯誤 + { + //logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【取得資料失敗】"); + //logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【取得資料失敗】[錯誤內容]:{0}", archiveDayJsonResult); + + Dictionary archiveDayRawData = new Dictionary(); + archiveDayRawData.Add("@device_number", deviceNumberPoint.DeviceNumber); + archiveDayRawData.Add("@point", deviceNumberPoint.Point); + archiveDayRawData.Add("@start_timestamp", startTimestamp.Replace("T", " ").Substring(0, 19)); + archiveDayRawData.Add("@end_timestamp", endTimestamp.Replace("T", " ").Substring(0, 19)); + archiveDayRawData.Add("@is_complete", 0); + archiveDayRawData.Add("@repeat_times", 0); + archiveDayRawData.Add("@fail_reason", archiveJson); + + archiveDayRawData.Add("@count_rawdata", 0); + archiveDayRawData.Add("@min_rawdata", 0); + archiveDayRawData.Add("@max_rawdata", 0); + archiveDayRawData.Add("@avg_rawdata", 0); + archiveDayRawData.Add("@sum_rawdata", 0); + archiveDayRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); + + resultArchiveDayRawDatas.Add(archiveDayRawData); + } + + if (archiveJsonResult.ContainsKey("obj")) //表示可以讀取到內容 + { + var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveJsonResult, ref dicError); + if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0) { - reqStream.Write(byteArray, 0, byteArray.Length); - } - - var archiveResponse = (HttpWebResponse)archiveRequest.GetResponse(); - var archiveResponseContent = new StreamReader(archiveResponse.GetResponseStream()).ReadToEnd(); - archiveResponse.Dispose(); - archiveResponse.Close(); - - //logger.LogInformation(@$"【ArchiveElectricMeterMonth】{device_number} startTimestamp={startTimestamp} endTimestamp= {endTimestamp} interval = PT{dayInMonth.ToString()}D url = {$"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/"}"); - - - xmlDocument.LoadXml(archiveResponseContent); - var archiveJson = JsonConvert.SerializeXmlNode(xmlDocument); - var archiveJsonResult = (JObject)JsonConvert.DeserializeObject(archiveJson); - - - //if (device_number == "NTPC_D8_EE_E4_RF_Total_WHT_N1" || device_number == "NTPC_D8_EE_E4_RF_H2_WHT_N1") - //{ - logger.LogError(@$"{device_number} json = {archiveJsonResult}"); - //} - if (archiveJsonResult.ContainsKey("err")) //抓取錯誤 - { - //logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【取得資料失敗】"); - //logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【取得資料失敗】[錯誤內容]:{0}", archiveDayJsonResult); - - Dictionary archiveDayRawData = new Dictionary(); - archiveDayRawData.Add("@device_number", deviceNumberPoint.DeviceNumber); - archiveDayRawData.Add("@point", deviceNumberPoint.Point); - archiveDayRawData.Add("@start_timestamp", startTimestamp.Replace("T", " ").Substring(0, 19)); - archiveDayRawData.Add("@end_timestamp", endTimestamp.Replace("T", " ").Substring(0, 19)); - archiveDayRawData.Add("@is_complete", 0); - archiveDayRawData.Add("@repeat_times", 0); - archiveDayRawData.Add("@fail_reason", archiveJson); - - archiveDayRawData.Add("@count_rawdata", 0); - archiveDayRawData.Add("@min_rawdata", 0); - archiveDayRawData.Add("@max_rawdata", 0); - archiveDayRawData.Add("@avg_rawdata", 0); - archiveDayRawData.Add("@sum_rawdata", 0); - archiveDayRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); - - resultArchiveDayRawDatas.Add(archiveDayRawData); - } - - if (archiveJsonResult.ContainsKey("obj")) //表示可以讀取到內容 - { - var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveJsonResult, ref dicError); - if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0) - { - resultArchiveDayRawDatas.AddRange(ArrangeRawDatas); - } + resultArchiveDayRawDatas.AddRange(ArrangeRawDatas); } + } //} #endregion } @@ -1307,7 +1317,7 @@ namespace BackendWorkerService.Services.Implement break; } } - } + } arrangeRawData.Add("@is_complete", 1); arrangeRawData.Add("@repeat_times", 0); arrangeRawData.Add("@fail_reason", null); @@ -1407,7 +1417,7 @@ namespace BackendWorkerService.Services.Implement /// /// public IEnumerable EachDay(string from, string thru) - { + { var strtday = DateTime.Parse(from).AddDays(-1); //每次重做 2天 var endday = DateTime.Parse(thru); for (var day = strtday.Date; day.Date <= endday.Date; day = day.AddDays(1)) From 6905d1f3425955c8ee8f0bb361f167dc8602ba4a Mon Sep 17 00:00:00 2001 From: "jay.chang" Date: Mon, 5 Feb 2024 09:14:39 +0800 Subject: [PATCH 5/5] =?UTF-8?q?[BackendWorkerService]=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=B0=B4=E9=8C=B6=E5=AF=AB=E9=80=B2DB=E7=9A=84=E9=82=8F?= =?UTF-8?q?=E8=BC=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Quartz/Jobs/ArchiveElectricMeterDayJob.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs index adc3f70..e3363e5 100644 --- a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs +++ b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs @@ -1476,10 +1476,10 @@ namespace BackendWorkerService.Quartz.Jobs END COMMIT TRANSACTION;"; - await backgroundServiceRepository.ExecuteSql(sql, waterArchiveDayRawDatas); + await backgroundServiceRepository.ExecuteSql(sql, row); if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") { - await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveDayRawDatas); + await backgroundServiceMsSqlRepository.ExecuteSql(mySql, row); } } }