[BGService]月歸檔加入跨月補檔機制
This commit is contained in:
		
							parent
							
								
									635a940d25
								
							
						
					
					
						commit
						5766931a1f
					
				@ -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;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user