diff --git a/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs b/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs
index 322ab9f..4100228 100644
--- a/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs
+++ b/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs
@@ -390,7 +390,7 @@ namespace BackendWorkerService.Services.Implement
catch (Exception ex)
{
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 );
+ logger.LogError("【ArchiveElectricMeterDayJob】【補償機制 - 天】【任務失敗】[Exception]:{0}", ex.ToString() + Environment.NewLine);
}
}
@@ -405,7 +405,7 @@ namespace BackendWorkerService.Services.Implement
}
#region 月總計
- string yyyymm = targetTable.Split('_')[targetTable.Split('_').Length-1]; //取出 archive_electric_meter_day_202308 的最後一段 202308
+ string yyyymm = targetTable.Split('_')[targetTable.Split('_').Length - 1]; //取出 archive_electric_meter_day_202308 的最後一段 202308
string yyyy = yyyymm.Substring(0, 4);
string mm = yyyymm.Remove(0, 4);
//先清空 該月份的數據
@@ -959,7 +959,7 @@ namespace BackendWorkerService.Services.Implement
///
///
///
- public void obixData_collect(XmlDocument xmlDocument, List DeviceNumberPoints, ObixApiConfig obixApiConfig, string encoded, List> resultArchiveDayRawDatas, ref Dictionary dicError)
+ public void obixData_collect(XmlDocument xmlDocument, List DeviceNumberPoints, ObixApiConfig obixApiConfig, string encoded, List> resultArchiveDayRawDatas, ref Dictionary dicError)
{
#region 水電錶 save to DB start
@@ -1082,7 +1082,8 @@ namespace BackendWorkerService.Services.Implement
//logger.LogInformation(@$"obix result {deviceNumberPoint.DeviceNumber} day = {day.ToString("yyyy-MM-dd")} ArrangeRawDatas.count() = {ArrangeRawDatas.Count().ToString()}");
resultArchiveDayRawDatas.AddRange(ArrangeRawDatas);
}
- else {
+ else
+ {
if (!dicError.ContainsKey(deviceNumberPoint.DeviceNumber))
{
dicError.Add(deviceNumberPoint.DeviceNumber, day.ToString("yyyy-MM-dd")); //記錄異常設備與日期
@@ -1125,109 +1126,125 @@ namespace BackendWorkerService.Services.Implement
var startDay = deviceNumberPoint.archive_lastDate.ToString("yyyy-MM-dd");
var endDay = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
+ DateTime today = DateTime.Now;
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;
+ foreach (DateTime month 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 startTimestamp = "";
+ var endTimestamp = "";
+ var dayInMonth = 0;
+ // 區分當月與其他月份
+ if (month.ToString("yyyy-MM") == System.DateTime.Now.AddDays(-1).ToString("yyyy-MM"))
+ {
+ var preDay = today.AddDays(-1); //取得前一天
- var preDay = today.AddDays(-1); //取得前一天
+ dayInMonth = DateTime.DaysInMonth(preDay.Year, preDay.Month);
+ var FirstDay = new DateTime(preDay.Year, preDay.Month, 1);
+ var LastDay = today;
+ startTimestamp = string.Format("{0}T00:00:00.000+08:00", FirstDay.ToString("yyyy-MM-dd"));
+ endTimestamp = string.Format("{0}T00:01:00.000+08:00", LastDay.ToString("yyyy-MM-dd"));
+ }
+ else
+ {
+ dayInMonth = DateTime.DaysInMonth(month.Year, month.Month);
+ var FirstDay = new DateTime(month.Year, month.Month, 1);
+ var LastDay = new DateTime(month.Year, month.Month, dayInMonth).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"));
+ startTimestamp = string.Format("{0}T00:00:00.000+08:00", FirstDay.ToString("yyyy-MM-dd"));
- //var dayInMonth = (DateTime.Now - DateTime.Parse(today.ToString("yyyy-MM-") + "01")).Days + 1;
+ 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())
- {
- 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.LogInformation(@$"{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)
+ byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter);
+ using (Stream reqStream = archiveRequest.GetRequestStream())
{
- resultArchiveDayRawDatas.AddRange(ArrangeRawDatas);
+ 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.LogInformation(@$"{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);
+ }
}
}
- //}
- #endregion
+ #endregion
}
#endregion 水電錶作業 save to DB end
@@ -1423,14 +1440,15 @@ namespace BackendWorkerService.Services.Implement
for (var day = strtday.Date; day.Date <= endday.Date; day = day.AddDays(1))
yield return day;
}
-
public IEnumerable EachMonth(string from, string thru)
{
var strtday = DateTime.Parse(from);
var endday = DateTime.Parse(thru);
- for (var _month = strtday.Date; _month.Month <= endday.Month; _month = _month.AddDays(1))
- yield return _month;
+ for (var _month = strtday.Date; _month <= endday; _month = _month.AddMonths(1))
+ {
+ yield return _month;
+ }
}
}