[BGService]月歸檔加入跨月補檔機制

This commit is contained in:
張家睿 2024-09-10 14:50:16 +08:00
parent 635a940d25
commit 5766931a1f

View File

@ -390,7 +390,7 @@ namespace BackendWorkerService.Services.Implement
catch (Exception ex) 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】【補償機制 - 天】【任務失敗】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 #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 yyyy = yyyymm.Substring(0, 4);
string mm = yyyymm.Remove(0, 4); string mm = yyyymm.Remove(0, 4);
//先清空 該月份的數據 //先清空 該月份的數據
@ -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()}"); //logger.LogInformation(@$"obix result {deviceNumberPoint.DeviceNumber} day = {day.ToString("yyyy-MM-dd")} ArrangeRawDatas.count() = {ArrangeRawDatas.Count().ToString()}");
resultArchiveDayRawDatas.AddRange(ArrangeRawDatas); resultArchiveDayRawDatas.AddRange(ArrangeRawDatas);
} }
else { else
{
if (!dicError.ContainsKey(deviceNumberPoint.DeviceNumber)) if (!dicError.ContainsKey(deviceNumberPoint.DeviceNumber))
{ {
dicError.Add(deviceNumberPoint.DeviceNumber, day.ToString("yyyy-MM-dd")); //記錄異常設備與日期 dicError.Add(deviceNumberPoint.DeviceNumber, day.ToString("yyyy-MM-dd")); //記錄異常設備與日期
@ -1125,24 +1126,40 @@ namespace BackendWorkerService.Services.Implement
var startDay = deviceNumberPoint.archive_lastDate.ToString("yyyy-MM-dd"); var startDay = deviceNumberPoint.archive_lastDate.ToString("yyyy-MM-dd");
var endDay = DateTime.Now.AddDays(-1).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 logger.LogInformation($@"before startDay = {startDay} endDay={endDay}"); // ----------- log
#region #region
//foreach (DateTime day in EachMonth(startDay , endDay)) foreach (DateTime month in EachMonth(startDay, endDay))
//{ {
// 需要比原定日期增加 1天因 Niagara 內部判斷為 < lastData, 並未包含結束當天 add by jiahao @2023-09-16 // 需要比原定日期增加 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.DaysInMonth(day.Year, day.Month) +1; 、、(DateTime.Now - DateTime.Parse(startDay)).Days
DateTime today = DateTime.Now; 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); //取得前一天
var dayInMonth = DateTime.DaysInMonth(preDay.Year, preDay.Month); dayInMonth = DateTime.DaysInMonth(preDay.Year, preDay.Month);
var FirstDay = new DateTime(preDay.Year, preDay.Month, 1); var FirstDay = new DateTime(preDay.Year, preDay.Month, 1);
var LastDay = today; var LastDay = today;
var startTimestamp = string.Format("{0}T00:00:00.000+08:00", FirstDay.ToString("yyyy-MM-dd")); 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")); 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);
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"));
}
//var dayInMonth = (DateTime.Now - DateTime.Parse(today.ToString("yyyy-MM-") + "01")).Days + 1; //var dayInMonth = (DateTime.Now - DateTime.Parse(today.ToString("yyyy-MM-") + "01")).Days + 1;
@ -1154,7 +1171,7 @@ namespace BackendWorkerService.Services.Implement
var historyQueryFilter = $@"<obj is='obix: HistoryFilter'> var historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
<abstime name='start' val='{startTimestamp}' /> <abstime name='start' val='{startTimestamp}' />
<abstime name='end' val='{endTimestamp}' /> <abstime name='end' val='{endTimestamp}' />
<reltime name='interval' val = 'PT{(dayInMonth+1).ToString()}D' /> <reltime name='interval' val = 'PT{(dayInMonth + 1)}D' />
</obj>"; </obj>";
@ -1226,7 +1243,7 @@ namespace BackendWorkerService.Services.Implement
resultArchiveDayRawDatas.AddRange(ArrangeRawDatas); resultArchiveDayRawDatas.AddRange(ArrangeRawDatas);
} }
} }
//} }
#endregion #endregion
} }
@ -1423,14 +1440,15 @@ namespace BackendWorkerService.Services.Implement
for (var day = strtday.Date; day.Date <= endday.Date; day = day.AddDays(1)) for (var day = strtday.Date; day.Date <= endday.Date; day = day.AddDays(1))
yield return day; yield return day;
} }
public IEnumerable<DateTime> EachMonth(string from, string thru) public IEnumerable<DateTime> EachMonth(string from, string thru)
{ {
var strtday = DateTime.Parse(from); var strtday = DateTime.Parse(from);
var endday = DateTime.Parse(thru); 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;
}
} }
} }