[後端] 修改排成 增加獲取水表資料
This commit is contained in:
		
							parent
							
								
									df02d1593b
								
							
						
					
					
						commit
						0538348866
					
				@ -59,29 +59,47 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
 | 
			
		||||
                    var variableArchive = await backgroundServiceRepository.GetAllAsync<KeyValue>(sqlArchive);
 | 
			
		||||
                    var electricMeterGuid = variableArchive.Where(x => x.Name == "ElectricMeterGuid").Select(x => x.Value).FirstOrDefault();
 | 
			
		||||
                    var waterMeterGuid = variableArchive.Where(x => x.Name == "WaterMeterGuid").Select(x => x.Value).FirstOrDefault();
 | 
			
		||||
 | 
			
		||||
                    #region 找出所有電錶設備
 | 
			
		||||
                    var sWhere = "deleted = 0 AND device_name_tag = @sub_system_guid";
 | 
			
		||||
                    var electricMeters = await backgroundServiceRepository.GetAllAsync<Device>("device", sWhere, new { sub_system_guid = electricMeterGuid });
 | 
			
		||||
                    var waterMeters = await backgroundServiceRepository.GetAllAsync<Device>("device", sWhere, new { sub_system_guid = waterMeterGuid });
 | 
			
		||||
                    #endregion 找出所有電錶設備
 | 
			
		||||
 | 
			
		||||
                    #region 找出所有電錶系統的點位
 | 
			
		||||
                    var sPointWhere = "deleted = 0 AND device_name_tag = @sub_system_guid";
 | 
			
		||||
                    var points = await backgroundServiceRepository.GetAllAsync<Device_item>("device_item", sPointWhere, new { sub_system_guid = electricMeterGuid });
 | 
			
		||||
                    var electricPoints = await backgroundServiceRepository.GetAllAsync<Device_item>("device_item", sPointWhere, new { sub_system_guid = electricMeterGuid });
 | 
			
		||||
                    var waterPoints = await backgroundServiceRepository.GetAllAsync<Device_item>("device_item", sPointWhere, new { sub_system_guid = waterMeterGuid });
 | 
			
		||||
                    #endregion 找出所有電錶系統的點位
 | 
			
		||||
 | 
			
		||||
                    #region 組合出所有電錶設備點位
 | 
			
		||||
                    List<DeviceNumberPoint> deviceNumberPoints = new List<DeviceNumberPoint>();
 | 
			
		||||
                    List<DeviceNumberPoint> electricDeviceNumberPoints = new List<DeviceNumberPoint>();
 | 
			
		||||
                    foreach (var electricMeter in electricMeters)
 | 
			
		||||
                    {
 | 
			
		||||
                        foreach (var point in points)
 | 
			
		||||
                        foreach (var point in electricPoints)
 | 
			
		||||
                        {
 | 
			
		||||
                            DeviceNumberPoint deviceNumberPoint = new DeviceNumberPoint();
 | 
			
		||||
                            deviceNumberPoint.DeviceNumber = electricMeter.Device_number;
 | 
			
		||||
                            deviceNumberPoint.Point = point.points;
 | 
			
		||||
                            deviceNumberPoint.FullDeviceNumberPoint = string.Format("{0}_{1}", electricMeter.Device_number, point.points);
 | 
			
		||||
 | 
			
		||||
                            deviceNumberPoints.Add(deviceNumberPoint);
 | 
			
		||||
                            electricDeviceNumberPoints.Add(deviceNumberPoint);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    #endregion 組合出所有電錶設備點位
 | 
			
		||||
                    #region 組合出所有水錶設備點位
 | 
			
		||||
                    List<DeviceNumberPoint> waterDeviceNumberPoints = new List<DeviceNumberPoint>();
 | 
			
		||||
                    foreach (var waterMeter in waterMeters)
 | 
			
		||||
                    {
 | 
			
		||||
                        foreach (var point in waterPoints)
 | 
			
		||||
                        {
 | 
			
		||||
                            DeviceNumberPoint deviceNumberPoint = new DeviceNumberPoint();
 | 
			
		||||
                            deviceNumberPoint.DeviceNumber = waterMeter.Device_number;
 | 
			
		||||
                            deviceNumberPoint.Point = point.points;
 | 
			
		||||
                            deviceNumberPoint.FullDeviceNumberPoint = string.Format("{0}_{1}", waterMeter.Device_number, point.points);
 | 
			
		||||
 | 
			
		||||
                            waterDeviceNumberPoints.Add(deviceNumberPoint);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    #endregion 組合出所有電錶設備點位
 | 
			
		||||
@ -122,8 +140,9 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                            //stopWatch.Start();
 | 
			
		||||
 | 
			
		||||
                            //抓取每個設備的資料
 | 
			
		||||
                            List<Dictionary<string, object>> archiveDayRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                            foreach (var deviceNumberPoint in deviceNumberPoints)
 | 
			
		||||
                            List<Dictionary<string, object>> electericArchiveDayRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                            List<Dictionary<string, object>> waterArchiveDayRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                            foreach (var deviceNumberPoint in electricDeviceNumberPoints)
 | 
			
		||||
                            {
 | 
			
		||||
 | 
			
		||||
                                HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
			
		||||
@ -166,7 +185,7 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                                    archiveDayRawData.Add("@sum_rawdata", 0);
 | 
			
		||||
                                    archiveDayRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
 | 
			
		||||
 | 
			
		||||
                                    archiveDayRawDatas.Add(archiveDayRawData);
 | 
			
		||||
                                    electericArchiveDayRawDatas.Add(archiveDayRawData);
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                if (archiveDayJsonResult.ContainsKey("obj")) //表示可以讀取到內容
 | 
			
		||||
@ -174,7 +193,62 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                                    var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveDayJsonResult);
 | 
			
		||||
                                    if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        archiveDayRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                                        electericArchiveDayRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            foreach (var deviceNumberPoint in waterDeviceNumberPoints)
 | 
			
		||||
                            {
 | 
			
		||||
 | 
			
		||||
                                HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
			
		||||
                                //HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
			
		||||
                                archiveDayRequest.Method = "POST";
 | 
			
		||||
                                archiveDayRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
			
		||||
                                archiveDayRequest.PreAuthenticate = true;
 | 
			
		||||
 | 
			
		||||
                                byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter);
 | 
			
		||||
                                using (Stream reqStream = archiveDayRequest.GetRequestStream())
 | 
			
		||||
                                {
 | 
			
		||||
                                    reqStream.Write(byteArray, 0, byteArray.Length);
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                HttpWebResponse archiveDayResponse = (HttpWebResponse)archiveDayRequest.GetResponse();
 | 
			
		||||
                                var archiveDayResponseContent = new StreamReader(archiveDayResponse.GetResponseStream()).ReadToEnd();
 | 
			
		||||
 | 
			
		||||
                                xmlDocument.LoadXml(archiveDayResponseContent);
 | 
			
		||||
                                string archiveDayJson = JsonConvert.SerializeXmlNode(xmlDocument);
 | 
			
		||||
                                JObject archiveDayJsonResult = (JObject)JsonConvert.DeserializeObject(archiveDayJson);
 | 
			
		||||
 | 
			
		||||
                                if (archiveDayJsonResult.ContainsKey("err")) //抓取錯誤
 | 
			
		||||
                                {
 | 
			
		||||
                                    //logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【取得資料失敗】");
 | 
			
		||||
                                    //logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【取得資料失敗】[錯誤內容]:{0}", archiveDayJsonResult);
 | 
			
		||||
 | 
			
		||||
                                    Dictionary<string, object> archiveDayRawData = new Dictionary<string, object>();
 | 
			
		||||
                                    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", archiveDayJson);
 | 
			
		||||
 | 
			
		||||
                                    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"));
 | 
			
		||||
 | 
			
		||||
                                    waterArchiveDayRawDatas.Add(archiveDayRawData);
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                if (archiveDayJsonResult.ContainsKey("obj")) //表示可以讀取到內容
 | 
			
		||||
                                {
 | 
			
		||||
                                    var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveDayJsonResult);
 | 
			
		||||
                                    if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        waterArchiveDayRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
@ -182,7 +256,7 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                            //stopWatch.Stop();
 | 
			
		||||
                            //logger.LogInformation("【ArchiveElectricMeterDayJob】【天歸檔】【效能檢驗】[取得資料花費時間]{0} 毫秒", stopWatch.ElapsedMilliseconds);
 | 
			
		||||
 | 
			
		||||
                            if (archiveDayRawDatas.Count() > 0)
 | 
			
		||||
                            if (electericArchiveDayRawDatas.Count() > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                var sql = $@"
 | 
			
		||||
                                            UPDATE archive_electric_meter_day SET 
 | 
			
		||||
@ -275,8 +349,104 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                                            END
 | 
			
		||||
 | 
			
		||||
                                        COMMIT TRANSACTION;";
 | 
			
		||||
                                await backgroundServiceRepository.ExecuteSql(sql, archiveDayRawDatas);
 | 
			
		||||
                                await backgroundServiceMsSqlRepository.ExecuteSql(mySql, archiveDayRawDatas);
 | 
			
		||||
                                await backgroundServiceRepository.ExecuteSql(sql, electericArchiveDayRawDatas);
 | 
			
		||||
                                await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electericArchiveDayRawDatas);
 | 
			
		||||
                            }
 | 
			
		||||
                            if (waterArchiveDayRawDatas.Count() > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                var sql = $@"
 | 
			
		||||
                                            UPDATE archive_water_meter_day SET 
 | 
			
		||||
                                                    count_rawdata = @count_rawdata,
 | 
			
		||||
                                                    min_rawdata = @min_rawdata,
 | 
			
		||||
                                                    max_rawdata = @max_rawdata,
 | 
			
		||||
                                                    avg_rawdata = @avg_rawdata,
 | 
			
		||||
                                                    sum_rawdata = @sum_rawdata,
 | 
			
		||||
                                                    is_complete = @is_complete,
 | 
			
		||||
                                                    repeat_times = @repeat_times,
 | 
			
		||||
                                                    fail_reason = @fail_reason,
 | 
			
		||||
                                                    updated_at = @updated_at
 | 
			
		||||
                                                 WHERE device_number = @device_number
 | 
			
		||||
                                                    AND point = @point
 | 
			
		||||
                                                    AND start_timestamp = @start_timestamp;
 | 
			
		||||
 | 
			
		||||
                                            
 | 
			
		||||
                                            INSERT INTO archive_water_meter_day (
 | 
			
		||||
                                                device_number,
 | 
			
		||||
                                                point,
 | 
			
		||||
                                                start_timestamp,
 | 
			
		||||
                                                end_timestamp,
 | 
			
		||||
                                                count_rawdata,
 | 
			
		||||
                                                min_rawdata,
 | 
			
		||||
                                                max_rawdata,
 | 
			
		||||
                                                avg_rawdata,
 | 
			
		||||
                                                sum_rawdata,
 | 
			
		||||
                                                is_complete,
 | 
			
		||||
                                                repeat_times,
 | 
			
		||||
                                                fail_reason)
 | 
			
		||||
                                            SELECT 
 | 
			
		||||
                                                @device_number,
 | 
			
		||||
                                                @point,
 | 
			
		||||
                                                @start_timestamp,
 | 
			
		||||
                                                @end_timestamp,
 | 
			
		||||
                                                @count_rawdata,
 | 
			
		||||
                                                @min_rawdata,
 | 
			
		||||
                                                @max_rawdata,
 | 
			
		||||
                                                @avg_rawdata,
 | 
			
		||||
                                                @sum_rawdata,
 | 
			
		||||
                                                @is_complete,
 | 
			
		||||
                                                @repeat_times,
 | 
			
		||||
                                                @fail_reason
 | 
			
		||||
                                            WHERE ROW_COUNT() = 0;";
 | 
			
		||||
 | 
			
		||||
                                var mySql = $@"BEGIN TRANSACTION;
 | 
			
		||||
 | 
			
		||||
                                            UPDATE archive_water_meter_day SET 
 | 
			
		||||
                                                    count_rawdata = @count_rawdata,
 | 
			
		||||
                                                    min_rawdata = @min_rawdata,
 | 
			
		||||
                                                    max_rawdata = @max_rawdata,
 | 
			
		||||
                                                    avg_rawdata = @avg_rawdata,
 | 
			
		||||
                                                    sum_rawdata = @sum_rawdata,
 | 
			
		||||
                                                    is_complete = @is_complete,
 | 
			
		||||
                                                    repeat_times = @repeat_times,
 | 
			
		||||
                                                    fail_reason = @fail_reason,
 | 
			
		||||
                                                    updated_at = @updated_at
 | 
			
		||||
                                                 WHERE device_number = @device_number
 | 
			
		||||
                                                    AND point = @point
 | 
			
		||||
                                                    AND start_timestamp = @start_timestamp;
 | 
			
		||||
 | 
			
		||||
                                            IF @@ROWCOUNT = 0
 | 
			
		||||
                                            BEGIN
 | 
			
		||||
                                                INSERT INTO archive_water_meter_day (
 | 
			
		||||
                                                    device_number,
 | 
			
		||||
                                                    point,
 | 
			
		||||
                                                    start_timestamp,
 | 
			
		||||
                                                    end_timestamp,
 | 
			
		||||
                                                    count_rawdata,
 | 
			
		||||
                                                    min_rawdata,
 | 
			
		||||
                                                    max_rawdata,
 | 
			
		||||
                                                    avg_rawdata,
 | 
			
		||||
                                                    sum_rawdata,
 | 
			
		||||
                                                    is_complete,
 | 
			
		||||
                                                    repeat_times,
 | 
			
		||||
                                                    fail_reason)
 | 
			
		||||
                                                VALUES (
 | 
			
		||||
                                                    @device_number,
 | 
			
		||||
                                                    @point,
 | 
			
		||||
                                                    @start_timestamp,
 | 
			
		||||
                                                    @end_timestamp,
 | 
			
		||||
                                                    @count_rawdata,
 | 
			
		||||
                                                    @min_rawdata,
 | 
			
		||||
                                                    @max_rawdata,
 | 
			
		||||
                                                    @avg_rawdata,
 | 
			
		||||
                                                    @sum_rawdata,
 | 
			
		||||
                                                    @is_complete,
 | 
			
		||||
                                                    @repeat_times,
 | 
			
		||||
                                                    @fail_reason)
 | 
			
		||||
                                            END
 | 
			
		||||
 | 
			
		||||
                                        COMMIT TRANSACTION;";
 | 
			
		||||
                                await backgroundServiceRepository.ExecuteSql(sql, waterArchiveDayRawDatas);
 | 
			
		||||
                                await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveDayRawDatas);
 | 
			
		||||
                            }
 | 
			
		||||
                            await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Day", "任務完成");
 | 
			
		||||
                        }
 | 
			
		||||
@ -311,8 +481,9 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                            //stopWatch.Start();
 | 
			
		||||
 | 
			
		||||
                            //抓取每個設備的資料
 | 
			
		||||
                            List<Dictionary<string, object>> archiveWeekRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                            foreach (var deviceNumberPoint in deviceNumberPoints)
 | 
			
		||||
                            List<Dictionary<string, object>> electricArchiveWeekRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                            List<Dictionary<string, object>> waterArchiveWeekRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                            foreach (var deviceNumberPoint in electricDeviceNumberPoints)
 | 
			
		||||
                            {
 | 
			
		||||
                                HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
			
		||||
                                //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
			
		||||
@ -354,7 +525,7 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                                    archiveWeekRawData.Add("@sum_rawdata", 0);
 | 
			
		||||
                                    archiveWeekRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
 | 
			
		||||
 | 
			
		||||
                                    archiveWeekRawDatas.Add(archiveWeekRawData);
 | 
			
		||||
                                    electricArchiveWeekRawDatas.Add(archiveWeekRawData);
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                if (archiveWeekJsonResult.ContainsKey("obj")) //表示可以讀取到內容
 | 
			
		||||
@ -362,7 +533,61 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                                    var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveWeekJsonResult);
 | 
			
		||||
                                    if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        archiveWeekRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                                        electricArchiveWeekRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            foreach (var deviceNumberPoint in waterDeviceNumberPoints)
 | 
			
		||||
                            {
 | 
			
		||||
                                HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
			
		||||
                                //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
			
		||||
                                archiveWeekRequest.Method = "POST";
 | 
			
		||||
                                archiveWeekRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
			
		||||
                                archiveWeekRequest.PreAuthenticate = true;
 | 
			
		||||
 | 
			
		||||
                                byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter);
 | 
			
		||||
                                using (Stream reqStream = archiveWeekRequest.GetRequestStream())
 | 
			
		||||
                                {
 | 
			
		||||
                                    reqStream.Write(byteArray, 0, byteArray.Length);
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                HttpWebResponse archiveWeekResponse = (HttpWebResponse)archiveWeekRequest.GetResponse();
 | 
			
		||||
                                var archiveWeekResponseContent = new StreamReader(archiveWeekResponse.GetResponseStream()).ReadToEnd();
 | 
			
		||||
 | 
			
		||||
                                xmlDocument.LoadXml(archiveWeekResponseContent);
 | 
			
		||||
                                string archiveWeekJson = JsonConvert.SerializeXmlNode(xmlDocument);
 | 
			
		||||
                                JObject archiveWeekJsonResult = (JObject)JsonConvert.DeserializeObject(archiveWeekJson);
 | 
			
		||||
 | 
			
		||||
                                if (archiveWeekJsonResult.ContainsKey("err")) //抓取錯誤
 | 
			
		||||
                                {
 | 
			
		||||
                                    //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】");
 | 
			
		||||
                                    //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】[錯誤內容]:{0}", archiveWeekJsonResult);
 | 
			
		||||
 | 
			
		||||
                                    Dictionary<string, object> archiveWeekRawData = new Dictionary<string, object>();
 | 
			
		||||
                                    archiveWeekRawData.Add("@device_number", deviceNumberPoint.DeviceNumber);
 | 
			
		||||
                                    archiveWeekRawData.Add("@point", deviceNumberPoint.Point);
 | 
			
		||||
                                    archiveWeekRawData.Add("@start_timestamp", startTimestamp.Replace("T", " ").Substring(0, 19));
 | 
			
		||||
                                    archiveWeekRawData.Add("@end_timestamp", endTimestamp.Replace("T", " ").Substring(0, 19));
 | 
			
		||||
                                    archiveWeekRawData.Add("@is_complete", 0);
 | 
			
		||||
                                    archiveWeekRawData.Add("@repeat_times", 0);
 | 
			
		||||
                                    archiveWeekRawData.Add("@fail_reason", archiveWeekJson);
 | 
			
		||||
 | 
			
		||||
                                    archiveWeekRawData.Add("@count_rawdata", 0);
 | 
			
		||||
                                    archiveWeekRawData.Add("@min_rawdata", 0);
 | 
			
		||||
                                    archiveWeekRawData.Add("@max_rawdata", 0);
 | 
			
		||||
                                    archiveWeekRawData.Add("@avg_rawdata", 0);
 | 
			
		||||
                                    archiveWeekRawData.Add("@sum_rawdata", 0);
 | 
			
		||||
                                    archiveWeekRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
 | 
			
		||||
 | 
			
		||||
                                    waterArchiveWeekRawDatas.Add(archiveWeekRawData);
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                if (archiveWeekJsonResult.ContainsKey("obj")) //表示可以讀取到內容
 | 
			
		||||
                                {
 | 
			
		||||
                                    var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveWeekJsonResult);
 | 
			
		||||
                                    if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        waterArchiveWeekRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
@ -370,7 +595,7 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                            //stopWatch.Stop();
 | 
			
		||||
                            //logger.LogInformation("【ArchiveElectricMeterDayJob】【週歸檔】【效能檢驗】[取得資料花費時間]{0} 毫秒", stopWatch.ElapsedMilliseconds);
 | 
			
		||||
 | 
			
		||||
                            if (archiveWeekRawDatas.Count() > 0)
 | 
			
		||||
                            if (electricArchiveWeekRawDatas.Count() > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                var sql = $@"
 | 
			
		||||
 | 
			
		||||
@ -465,8 +690,107 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                                            END
 | 
			
		||||
 | 
			
		||||
                                        COMMIT TRANSACTION;";
 | 
			
		||||
                                await backgroundServiceRepository.ExecuteSql(sql, archiveWeekRawDatas);
 | 
			
		||||
                                await backgroundServiceMsSqlRepository.ExecuteSql(mySql, archiveWeekRawDatas);
 | 
			
		||||
                                await backgroundServiceRepository.ExecuteSql(sql, electricArchiveWeekRawDatas);
 | 
			
		||||
                                await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electricArchiveWeekRawDatas);
 | 
			
		||||
 | 
			
		||||
                            }
 | 
			
		||||
                            if (waterArchiveWeekRawDatas.Count() > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                var sql = $@"
 | 
			
		||||
 | 
			
		||||
                                            UPDATE archive_water_meter_week SET 
 | 
			
		||||
                                                    count_rawdata = @count_rawdata,
 | 
			
		||||
                                                    min_rawdata = @min_rawdata,
 | 
			
		||||
                                                    max_rawdata = @max_rawdata,
 | 
			
		||||
                                                    avg_rawdata = @avg_rawdata,
 | 
			
		||||
                                                    sum_rawdata = @sum_rawdata,
 | 
			
		||||
                                                    is_complete = @is_complete,
 | 
			
		||||
                                                    repeat_times = @repeat_times,
 | 
			
		||||
                                                    fail_reason = @fail_reason,
 | 
			
		||||
                                                    updated_at = @updated_at
 | 
			
		||||
                                                 WHERE device_number = @device_number
 | 
			
		||||
                                                    AND point = @point
 | 
			
		||||
                                                    AND start_timestamp = @start_timestamp;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                                                INSERT INTO archive_water_meter_week (
 | 
			
		||||
                                                    device_number,
 | 
			
		||||
                                                    point,
 | 
			
		||||
                                                    start_timestamp,
 | 
			
		||||
                                                    end_timestamp,
 | 
			
		||||
                                                    count_rawdata,
 | 
			
		||||
                                                    min_rawdata,
 | 
			
		||||
                                                    max_rawdata,
 | 
			
		||||
                                                    avg_rawdata,
 | 
			
		||||
                                                    sum_rawdata,
 | 
			
		||||
                                                    is_complete,
 | 
			
		||||
                                                    repeat_times,
 | 
			
		||||
                                                    fail_reason)
 | 
			
		||||
                                                SELECT 
 | 
			
		||||
                                                    @device_number,
 | 
			
		||||
                                                    @point,
 | 
			
		||||
                                                    @start_timestamp,
 | 
			
		||||
                                                    @end_timestamp,
 | 
			
		||||
                                                    @count_rawdata,
 | 
			
		||||
                                                    @min_rawdata,
 | 
			
		||||
                                                    @max_rawdata,
 | 
			
		||||
                                                    @avg_rawdata,
 | 
			
		||||
                                                    @sum_rawdata,
 | 
			
		||||
                                                    @is_complete,
 | 
			
		||||
                                                    @repeat_times,
 | 
			
		||||
                                                    @fail_reason
 | 
			
		||||
                                                WHERE ROW_COUNT() = 0;
 | 
			
		||||
                                                ";
 | 
			
		||||
 | 
			
		||||
                                var mySql = $@"BEGIN TRANSACTION;
 | 
			
		||||
 | 
			
		||||
                                            UPDATE archive_water_meter_week SET 
 | 
			
		||||
                                                    count_rawdata = @count_rawdata,
 | 
			
		||||
                                                    min_rawdata = @min_rawdata,
 | 
			
		||||
                                                    max_rawdata = @max_rawdata,
 | 
			
		||||
                                                    avg_rawdata = @avg_rawdata,
 | 
			
		||||
                                                    sum_rawdata = @sum_rawdata,
 | 
			
		||||
                                                    is_complete = @is_complete,
 | 
			
		||||
                                                    repeat_times = @repeat_times,
 | 
			
		||||
                                                    fail_reason = @fail_reason,
 | 
			
		||||
                                                    updated_at = @updated_at
 | 
			
		||||
                                                 WHERE device_number = @device_number
 | 
			
		||||
                                                    AND point = @point
 | 
			
		||||
                                                    AND start_timestamp = @start_timestamp;
 | 
			
		||||
 | 
			
		||||
                                            IF @@ROWCOUNT = 0
 | 
			
		||||
                                            BEGIN
 | 
			
		||||
                                                INSERT INTO archive_water_meter_week (
 | 
			
		||||
                                                    device_number,
 | 
			
		||||
                                                    point,
 | 
			
		||||
                                                    start_timestamp,
 | 
			
		||||
                                                    end_timestamp,
 | 
			
		||||
                                                    count_rawdata,
 | 
			
		||||
                                                    min_rawdata,
 | 
			
		||||
                                                    max_rawdata,
 | 
			
		||||
                                                    avg_rawdata,
 | 
			
		||||
                                                    sum_rawdata,
 | 
			
		||||
                                                    is_complete,
 | 
			
		||||
                                                    repeat_times,
 | 
			
		||||
                                                    fail_reason)
 | 
			
		||||
                                                VALUES (
 | 
			
		||||
                                                    @device_number,
 | 
			
		||||
                                                    @point,
 | 
			
		||||
                                                    @start_timestamp,
 | 
			
		||||
                                                    @end_timestamp,
 | 
			
		||||
                                                    @count_rawdata,
 | 
			
		||||
                                                    @min_rawdata,
 | 
			
		||||
                                                    @max_rawdata,
 | 
			
		||||
                                                    @avg_rawdata,
 | 
			
		||||
                                                    @sum_rawdata,
 | 
			
		||||
                                                    @is_complete,
 | 
			
		||||
                                                    @repeat_times,
 | 
			
		||||
                                                    @fail_reason)
 | 
			
		||||
                                            END
 | 
			
		||||
 | 
			
		||||
                                        COMMIT TRANSACTION;";
 | 
			
		||||
                                await backgroundServiceRepository.ExecuteSql(sql, waterArchiveWeekRawDatas);
 | 
			
		||||
                                await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveWeekRawDatas);
 | 
			
		||||
 | 
			
		||||
                            }
 | 
			
		||||
                            await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Week", "任務完成");
 | 
			
		||||
@ -504,8 +828,9 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                            //stopWatch.Start();
 | 
			
		||||
 | 
			
		||||
                            //抓取每個設備的資料
 | 
			
		||||
                            List<Dictionary<string, object>> archiveMonthRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                            foreach (var deviceNumberPoint in deviceNumberPoints)
 | 
			
		||||
                            List<Dictionary<string, object>> electricArchiveMonthRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                            List<Dictionary<string, object>> waterArchiveMonthRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                            foreach (var deviceNumberPoint in electricDeviceNumberPoints)
 | 
			
		||||
                            {
 | 
			
		||||
                                HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
			
		||||
                                //HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
			
		||||
@ -547,7 +872,7 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                                    archiveMonthRawData.Add("@sum_rawdata", 0);
 | 
			
		||||
                                    archiveMonthRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
 | 
			
		||||
 | 
			
		||||
                                    archiveMonthRawDatas.Add(archiveMonthRawData);
 | 
			
		||||
                                    electricArchiveMonthRawDatas.Add(archiveMonthRawData);
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                if (archiveMonthJsonResult.ContainsKey("obj")) //表示可以讀取到內容
 | 
			
		||||
@ -555,7 +880,61 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                                    var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveMonthJsonResult);
 | 
			
		||||
                                    if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        archiveMonthRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                                        electricArchiveMonthRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            foreach (var deviceNumberPoint in waterDeviceNumberPoints)
 | 
			
		||||
                            {
 | 
			
		||||
                                HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
			
		||||
                                //HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
			
		||||
                                archiveMonthRequest.Method = "POST";
 | 
			
		||||
                                archiveMonthRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
			
		||||
                                archiveMonthRequest.PreAuthenticate = true;
 | 
			
		||||
 | 
			
		||||
                                byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter);
 | 
			
		||||
                                using (Stream reqStream = archiveMonthRequest.GetRequestStream())
 | 
			
		||||
                                {
 | 
			
		||||
                                    reqStream.Write(byteArray, 0, byteArray.Length);
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                HttpWebResponse archiveMonthResponse = (HttpWebResponse)archiveMonthRequest.GetResponse();
 | 
			
		||||
                                var archiveMonthResponseContent = new StreamReader(archiveMonthResponse.GetResponseStream()).ReadToEnd();
 | 
			
		||||
 | 
			
		||||
                                xmlDocument.LoadXml(archiveMonthResponseContent);
 | 
			
		||||
                                string archiveMonthJson = JsonConvert.SerializeXmlNode(xmlDocument);
 | 
			
		||||
                                JObject archiveMonthJsonResult = (JObject)JsonConvert.DeserializeObject(archiveMonthJson);
 | 
			
		||||
 | 
			
		||||
                                if (archiveMonthJsonResult.ContainsKey("err")) //抓取錯誤
 | 
			
		||||
                                {
 | 
			
		||||
                                    //logger.LogError("【ArchiveElectricMeterDayJob】【月歸檔】【取得資料失敗】");
 | 
			
		||||
                                    //logger.LogError("【ArchiveElectricMeterDayJob】【月歸檔】【取得資料失敗】[錯誤內容]:{0}", archiveMonthJsonResult);
 | 
			
		||||
 | 
			
		||||
                                    Dictionary<string, object> archiveMonthRawData = new Dictionary<string, object>();
 | 
			
		||||
                                    archiveMonthRawData.Add("@device_number", deviceNumberPoint.DeviceNumber);
 | 
			
		||||
                                    archiveMonthRawData.Add("@point", deviceNumberPoint.Point);
 | 
			
		||||
                                    archiveMonthRawData.Add("@start_timestamp", startTimestamp.Replace("T", " ").Substring(0, 19));
 | 
			
		||||
                                    archiveMonthRawData.Add("@end_timestamp", endTimestamp.Replace("T", " ").Substring(0, 19));
 | 
			
		||||
                                    archiveMonthRawData.Add("@is_complete", 0);
 | 
			
		||||
                                    archiveMonthRawData.Add("@repeat_times", 0);
 | 
			
		||||
                                    archiveMonthRawData.Add("@fail_reason", archiveMonthJson);
 | 
			
		||||
 | 
			
		||||
                                    archiveMonthRawData.Add("@count_rawdata", 0);
 | 
			
		||||
                                    archiveMonthRawData.Add("@min_rawdata", 0);
 | 
			
		||||
                                    archiveMonthRawData.Add("@max_rawdata", 0);
 | 
			
		||||
                                    archiveMonthRawData.Add("@avg_rawdata", 0);
 | 
			
		||||
                                    archiveMonthRawData.Add("@sum_rawdata", 0);
 | 
			
		||||
                                    archiveMonthRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
 | 
			
		||||
 | 
			
		||||
                                    waterArchiveMonthRawDatas.Add(archiveMonthRawData);
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                if (archiveMonthJsonResult.ContainsKey("obj")) //表示可以讀取到內容
 | 
			
		||||
                                {
 | 
			
		||||
                                    var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveMonthJsonResult);
 | 
			
		||||
                                    if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        waterArchiveMonthRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
@ -563,7 +942,7 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                            //stopWatch.Stop();
 | 
			
		||||
                            //logger.LogInformation("【ArchiveElectricMeterDayJob】【月歸檔效能檢驗】[取得資料花費時間]{0} 毫秒", stopWatch.ElapsedMilliseconds);
 | 
			
		||||
 | 
			
		||||
                            if (archiveMonthRawDatas.Count() > 0)
 | 
			
		||||
                            if (electricArchiveMonthRawDatas.Count() > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                var sql = $@"
 | 
			
		||||
                                            UPDATE archive_electric_meter_month SET 
 | 
			
		||||
@ -655,8 +1034,103 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                                            END
 | 
			
		||||
 | 
			
		||||
                                        COMMIT TRANSACTION;";
 | 
			
		||||
                                await backgroundServiceRepository.ExecuteSql(sql, archiveMonthRawDatas);
 | 
			
		||||
                                await backgroundServiceMsSqlRepository.ExecuteSql(mySql, archiveMonthRawDatas);
 | 
			
		||||
                                await backgroundServiceRepository.ExecuteSql(sql, electricArchiveMonthRawDatas);
 | 
			
		||||
                                await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electricArchiveMonthRawDatas);
 | 
			
		||||
                            }
 | 
			
		||||
                            if (waterArchiveMonthRawDatas.Count() > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                var sql = $@"
 | 
			
		||||
                                            UPDATE archive_water_meter_month SET 
 | 
			
		||||
                                                    count_rawdata = @count_rawdata,
 | 
			
		||||
                                                    min_rawdata = @min_rawdata,
 | 
			
		||||
                                                    max_rawdata = @max_rawdata,
 | 
			
		||||
                                                    avg_rawdata = @avg_rawdata,
 | 
			
		||||
                                                    sum_rawdata = @sum_rawdata,
 | 
			
		||||
                                                    is_complete = @is_complete,
 | 
			
		||||
                                                    repeat_times = @repeat_times,
 | 
			
		||||
                                                    fail_reason = @fail_reason,
 | 
			
		||||
                                                    updated_at = @updated_at
 | 
			
		||||
                                                 WHERE device_number = @device_number
 | 
			
		||||
                                                    AND point = @point
 | 
			
		||||
                                                    AND start_timestamp = @start_timestamp;
 | 
			
		||||
 | 
			
		||||
                                                INSERT INTO archive_water_meter_month (
 | 
			
		||||
                                                    device_number,
 | 
			
		||||
                                                    point,
 | 
			
		||||
                                                    start_timestamp,
 | 
			
		||||
                                                    end_timestamp,
 | 
			
		||||
                                                    count_rawdata,
 | 
			
		||||
                                                    min_rawdata,
 | 
			
		||||
                                                    max_rawdata,
 | 
			
		||||
                                                    avg_rawdata,
 | 
			
		||||
                                                    sum_rawdata,
 | 
			
		||||
                                                    is_complete,
 | 
			
		||||
                                                    repeat_times,
 | 
			
		||||
                                                    fail_reason)
 | 
			
		||||
                                                SELECT
 | 
			
		||||
                                                    @device_number,
 | 
			
		||||
                                                    @point,
 | 
			
		||||
                                                    @start_timestamp,
 | 
			
		||||
                                                    @end_timestamp,
 | 
			
		||||
                                                    @count_rawdata,
 | 
			
		||||
                                                    @min_rawdata,
 | 
			
		||||
                                                    @max_rawdata,
 | 
			
		||||
                                                    @avg_rawdata,
 | 
			
		||||
                                                    @sum_rawdata,
 | 
			
		||||
                                                    @is_complete,
 | 
			
		||||
                                                    @repeat_times,
 | 
			
		||||
                                                    @fail_reason
 | 
			
		||||
                                                WHERE ROW_COUNT() = 0;";
 | 
			
		||||
 | 
			
		||||
                                var mySql = $@"BEGIN TRANSACTION;
 | 
			
		||||
 | 
			
		||||
                                            UPDATE archive_water_meter_month SET 
 | 
			
		||||
                                                    count_rawdata = @count_rawdata,
 | 
			
		||||
                                                    min_rawdata = @min_rawdata,
 | 
			
		||||
                                                    max_rawdata = @max_rawdata,
 | 
			
		||||
                                                    avg_rawdata = @avg_rawdata,
 | 
			
		||||
                                                    sum_rawdata = @sum_rawdata,
 | 
			
		||||
                                                    is_complete = @is_complete,
 | 
			
		||||
                                                    repeat_times = @repeat_times,
 | 
			
		||||
                                                    fail_reason = @fail_reason,
 | 
			
		||||
                                                    updated_at = @updated_at
 | 
			
		||||
                                                 WHERE device_number = @device_number
 | 
			
		||||
                                                    AND point = @point
 | 
			
		||||
                                                    AND start_timestamp = @start_timestamp;
 | 
			
		||||
 | 
			
		||||
                                            IF @@ROWCOUNT = 0
 | 
			
		||||
                                            BEGIN
 | 
			
		||||
                                                INSERT INTO archive_water_meter_month (
 | 
			
		||||
                                                    device_number,
 | 
			
		||||
                                                    point,
 | 
			
		||||
                                                    start_timestamp,
 | 
			
		||||
                                                    end_timestamp,
 | 
			
		||||
                                                    count_rawdata,
 | 
			
		||||
                                                    min_rawdata,
 | 
			
		||||
                                                    max_rawdata,
 | 
			
		||||
                                                    avg_rawdata,
 | 
			
		||||
                                                    sum_rawdata,
 | 
			
		||||
                                                    is_complete,
 | 
			
		||||
                                                    repeat_times,
 | 
			
		||||
                                                    fail_reason)
 | 
			
		||||
                                                VALUES (
 | 
			
		||||
                                                    @device_number,
 | 
			
		||||
                                                    @point,
 | 
			
		||||
                                                    @start_timestamp,
 | 
			
		||||
                                                    @end_timestamp,
 | 
			
		||||
                                                    @count_rawdata,
 | 
			
		||||
                                                    @min_rawdata,
 | 
			
		||||
                                                    @max_rawdata,
 | 
			
		||||
                                                    @avg_rawdata,
 | 
			
		||||
                                                    @sum_rawdata,
 | 
			
		||||
                                                    @is_complete,
 | 
			
		||||
                                                    @repeat_times,
 | 
			
		||||
                                                    @fail_reason)
 | 
			
		||||
                                            END
 | 
			
		||||
 | 
			
		||||
                                        COMMIT TRANSACTION;";
 | 
			
		||||
                                await backgroundServiceRepository.ExecuteSql(sql, waterArchiveMonthRawDatas);
 | 
			
		||||
                                await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveMonthRawDatas);
 | 
			
		||||
                            }
 | 
			
		||||
                            await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Month", "任務完成");
 | 
			
		||||
                        }
 | 
			
		||||
@ -686,13 +1160,7 @@ namespace BackendWorkerService.Quartz.Jobs
 | 
			
		||||
                            logger.LogError("【ArchiveElectricMeterDayJob】【補償機制】【任務失敗】");
 | 
			
		||||
                            logger.LogError("【ArchiveElectricMeterDayJob】【補償機制】【任務失敗】[Exception]:{0}", ex.ToString());
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                        
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    
 | 
			
		||||
                    #endregion 補償機制
 | 
			
		||||
 | 
			
		||||
                    await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "All","任務完成");
 | 
			
		||||
 | 
			
		||||
@ -250,12 +250,11 @@ namespace BackendWorkerService.Services.Implement
 | 
			
		||||
                //取得所有須補償的設備資訊
 | 
			
		||||
                targetTable = "archive_electric_meter_day";
 | 
			
		||||
                var sql_error_day = string.Format(sql_error_format, targetTable);
 | 
			
		||||
                var error_days = await backgroundServiceRepository.GetAllAsync<ArchiveElectricMeter>(sql_error_day, new { RepeatTimes = repeatTimes });
 | 
			
		||||
 | 
			
		||||
                List<Dictionary<string, object>> archiveDayRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                if (error_days.Count() > 0)
 | 
			
		||||
                var electric_error_days = await backgroundServiceRepository.GetAllAsync<ArchiveElectricMeter>(sql_error_day, new { RepeatTimes = repeatTimes });
 | 
			
		||||
                List<Dictionary<string, object>> electricArchiveDayRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                if (electric_error_days.Count() > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (var error_day in error_days)
 | 
			
		||||
                    foreach (var error_day in electric_error_days)
 | 
			
		||||
                    {
 | 
			
		||||
                        DeviceNumberPoint deviceNumberPoint = new DeviceNumberPoint();
 | 
			
		||||
                        deviceNumberPoint.DeviceNumber = error_day.Device_number;
 | 
			
		||||
@ -308,7 +307,7 @@ namespace BackendWorkerService.Services.Implement
 | 
			
		||||
                            archiveDayRawData.Add("@sum_rawdata", 0);
 | 
			
		||||
                            archiveDayRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
 | 
			
		||||
 | 
			
		||||
                            archiveDayRawDatas.Add(archiveDayRawData);
 | 
			
		||||
                            electricArchiveDayRawDatas.Add(archiveDayRawData);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (archiveDayJsonResult.ContainsKey("obj")) //表示可以讀取到內容
 | 
			
		||||
@ -316,17 +315,98 @@ namespace BackendWorkerService.Services.Implement
 | 
			
		||||
                            var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveDayJsonResult);
 | 
			
		||||
                            if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                archiveDayRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                                electricArchiveDayRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (archiveDayRawDatas.Count() > 0)
 | 
			
		||||
                    if (electricArchiveDayRawDatas.Count() > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        var Mysql_error_update = string.Format(MYsql_update_format, targetTable);
 | 
			
		||||
                        var sql_error_update = string.Format(sql_update_format, targetTable);
 | 
			
		||||
                        await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, archiveDayRawDatas);
 | 
			
		||||
                        await backgroundServiceRepository.ExecuteSql(Mysql_error_update, archiveDayRawDatas);
 | 
			
		||||
                        await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, electricArchiveDayRawDatas);
 | 
			
		||||
                        await backgroundServiceRepository.ExecuteSql(Mysql_error_update, electricArchiveDayRawDatas);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                targetTable = "archive_water_meter_day";
 | 
			
		||||
                sql_error_day = string.Format(sql_error_format, targetTable);
 | 
			
		||||
                var water_error_days = await backgroundServiceRepository.GetAllAsync<ArchiveElectricMeter>(sql_error_day, new { RepeatTimes = repeatTimes });
 | 
			
		||||
                List<Dictionary<string, object>> waterArchiveDayRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                if (water_error_days.Count() > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (var error_day in water_error_days)
 | 
			
		||||
                    {
 | 
			
		||||
                        DeviceNumberPoint deviceNumberPoint = new DeviceNumberPoint();
 | 
			
		||||
                        deviceNumberPoint.DeviceNumber = error_day.Device_number;
 | 
			
		||||
                        deviceNumberPoint.Point = error_day.Point;
 | 
			
		||||
                        deviceNumberPoint.FullDeviceNumberPoint = string.Format("{0}_{1}", error_day.Device_number, error_day.Point);
 | 
			
		||||
 | 
			
		||||
                        var startTimestamp = string.Format("{0}+08:00", error_day.Start_timestamp.Replace(" ", "T"));
 | 
			
		||||
                        var endTimestamp = string.Format("{0}+08:00", error_day.End_timestamp.Replace(" ", "T"));
 | 
			
		||||
 | 
			
		||||
                        var historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
 | 
			
		||||
                                                <abstime name='start' val='{startTimestamp}' />
 | 
			
		||||
                                                <abstime name='end' val='{endTimestamp}' />
 | 
			
		||||
                                                <reltime name='interval' val = 'PT1D' />
 | 
			
		||||
                                            </obj>";
 | 
			
		||||
 | 
			
		||||
                        HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
			
		||||
                        //HttpWebRequest archiveDayRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
			
		||||
                        archiveDayRequest.Method = "POST";
 | 
			
		||||
                        archiveDayRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
			
		||||
                        archiveDayRequest.PreAuthenticate = true;
 | 
			
		||||
 | 
			
		||||
                        byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter);
 | 
			
		||||
                        using (Stream reqStream = archiveDayRequest.GetRequestStream())
 | 
			
		||||
                        {
 | 
			
		||||
                            reqStream.Write(byteArray, 0, byteArray.Length);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        HttpWebResponse archiveDayResponse = (HttpWebResponse)archiveDayRequest.GetResponse();
 | 
			
		||||
                        var archiveDayResponseContent = new StreamReader(archiveDayResponse.GetResponseStream()).ReadToEnd();
 | 
			
		||||
 | 
			
		||||
                        xmlDocument.LoadXml(archiveDayResponseContent);
 | 
			
		||||
                        string archiveDayJson = JsonConvert.SerializeXmlNode(xmlDocument);
 | 
			
		||||
                        JObject archiveDayJsonResult = (JObject)JsonConvert.DeserializeObject(archiveDayJson);
 | 
			
		||||
 | 
			
		||||
                        if (archiveDayJsonResult.ContainsKey("err")) //抓取錯誤
 | 
			
		||||
                        {
 | 
			
		||||
                            Dictionary<string, object> archiveDayRawData = new Dictionary<string, object>();
 | 
			
		||||
                            archiveDayRawData.Add("@device_number", error_day.Device_number);
 | 
			
		||||
                            archiveDayRawData.Add("@point", error_day.Point);
 | 
			
		||||
                            archiveDayRawData.Add("@start_timestamp", DateTime.Parse(error_day.Start_timestamp, System.Globalization.CultureInfo.CurrentCulture));
 | 
			
		||||
                            archiveDayRawData.Add("@end_timestamp", DateTime.Parse(error_day.End_timestamp, System.Globalization.CultureInfo.CurrentCulture));
 | 
			
		||||
                            archiveDayRawData.Add("@is_complete", 0);
 | 
			
		||||
                            archiveDayRawData.Add("@repeat_times", ++error_day.Repeat_times);
 | 
			
		||||
                            archiveDayRawData.Add("@fail_reason", archiveDayJson);
 | 
			
		||||
 | 
			
		||||
                            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"));
 | 
			
		||||
 | 
			
		||||
                            waterArchiveDayRawDatas.Add(archiveDayRawData);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (archiveDayJsonResult.ContainsKey("obj")) //表示可以讀取到內容
 | 
			
		||||
                        {
 | 
			
		||||
                            var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveDayJsonResult);
 | 
			
		||||
                            if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                waterArchiveDayRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (waterArchiveDayRawDatas.Count() > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        var Mysql_error_update = string.Format(MYsql_update_format, targetTable);
 | 
			
		||||
                        var sql_error_update = string.Format(sql_update_format, targetTable);
 | 
			
		||||
                        await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, waterArchiveDayRawDatas);
 | 
			
		||||
                        await backgroundServiceRepository.ExecuteSql(Mysql_error_update, waterArchiveDayRawDatas);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                #endregion 天歸檔補償
 | 
			
		||||
@ -335,12 +415,11 @@ namespace BackendWorkerService.Services.Implement
 | 
			
		||||
                //取得所有須補償的設備資訊
 | 
			
		||||
                targetTable = "archive_electric_meter_week";
 | 
			
		||||
                var sql_error_week = string.Format(sql_error_format, targetTable);
 | 
			
		||||
                var error_weeks = await backgroundServiceRepository.GetAllAsync<ArchiveElectricMeter>(sql_error_week, new { RepeatTimes = repeatTimes });
 | 
			
		||||
 | 
			
		||||
                List<Dictionary<string, object>> archiveWeekRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                if (error_weeks.Count() > 0)
 | 
			
		||||
                var eletric_error_weeks = await backgroundServiceRepository.GetAllAsync<ArchiveElectricMeter>(sql_error_week, new { RepeatTimes = repeatTimes });
 | 
			
		||||
                List<Dictionary<string, object>> electricArchiveWeekRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                if (eletric_error_weeks.Count() > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (var error_week in error_weeks)
 | 
			
		||||
                    foreach (var error_week in eletric_error_weeks)
 | 
			
		||||
                    {
 | 
			
		||||
                        DeviceNumberPoint deviceNumberPoint = new DeviceNumberPoint();
 | 
			
		||||
                        deviceNumberPoint.DeviceNumber = error_week.Device_number;
 | 
			
		||||
@ -393,7 +472,7 @@ namespace BackendWorkerService.Services.Implement
 | 
			
		||||
                            archiveWeekRawData.Add("@sum_rawdata", 0);
 | 
			
		||||
                            archiveWeekRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
 | 
			
		||||
 | 
			
		||||
                            archiveWeekRawDatas.Add(archiveWeekRawData);
 | 
			
		||||
                            electricArchiveWeekRawDatas.Add(archiveWeekRawData);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (archiveWeekJsonResult.ContainsKey("obj")) //表示可以讀取到內容
 | 
			
		||||
@ -401,17 +480,98 @@ namespace BackendWorkerService.Services.Implement
 | 
			
		||||
                            var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveWeekJsonResult);
 | 
			
		||||
                            if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                archiveWeekRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                                electricArchiveWeekRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (archiveWeekRawDatas.Count() > 0)
 | 
			
		||||
                    if (electricArchiveWeekRawDatas.Count() > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        var Mysql_error_update = string.Format(MYsql_update_format, targetTable);
 | 
			
		||||
                        var sql_error_update = string.Format(sql_update_format, targetTable);
 | 
			
		||||
                        await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, archiveWeekRawDatas);
 | 
			
		||||
                        await backgroundServiceRepository.ExecuteSql(Mysql_error_update, archiveWeekRawDatas);
 | 
			
		||||
                        await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, electricArchiveWeekRawDatas);
 | 
			
		||||
                        await backgroundServiceRepository.ExecuteSql(Mysql_error_update, electricArchiveWeekRawDatas);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                targetTable = "archive_water_meter_week";
 | 
			
		||||
                sql_error_week = string.Format(sql_error_format, targetTable);
 | 
			
		||||
                var water_error_weeks = await backgroundServiceRepository.GetAllAsync<ArchiveElectricMeter>(sql_error_week, new { RepeatTimes = repeatTimes });
 | 
			
		||||
                List<Dictionary<string, object>> waterArchiveWeekRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                if (water_error_weeks.Count() > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (var error_week in water_error_weeks)
 | 
			
		||||
                    {
 | 
			
		||||
                        DeviceNumberPoint deviceNumberPoint = new DeviceNumberPoint();
 | 
			
		||||
                        deviceNumberPoint.DeviceNumber = error_week.Device_number;
 | 
			
		||||
                        deviceNumberPoint.Point = error_week.Point;
 | 
			
		||||
                        deviceNumberPoint.FullDeviceNumberPoint = string.Format("{0}_{1}", error_week.Device_number, error_week.Point);
 | 
			
		||||
 | 
			
		||||
                        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 historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
 | 
			
		||||
                                                <abstime name='start' val='{startTimestamp}' />
 | 
			
		||||
                                                <abstime name='end' val='{endTimestamp}' />
 | 
			
		||||
                                                <reltime name='interval' val = 'PT7D' />
 | 
			
		||||
                                            </obj>";
 | 
			
		||||
 | 
			
		||||
                        HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
			
		||||
                        //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
			
		||||
                        archiveWeekRequest.Method = "POST";
 | 
			
		||||
                        archiveWeekRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
			
		||||
                        archiveWeekRequest.PreAuthenticate = true;
 | 
			
		||||
 | 
			
		||||
                        byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter);
 | 
			
		||||
                        using (Stream reqStream = archiveWeekRequest.GetRequestStream())
 | 
			
		||||
                        {
 | 
			
		||||
                            reqStream.Write(byteArray, 0, byteArray.Length);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        HttpWebResponse archiveWeekResponse = (HttpWebResponse)archiveWeekRequest.GetResponse();
 | 
			
		||||
                        var archiveWeekResponseContent = new StreamReader(archiveWeekResponse.GetResponseStream()).ReadToEnd();
 | 
			
		||||
 | 
			
		||||
                        xmlDocument.LoadXml(archiveWeekResponseContent);
 | 
			
		||||
                        string archiveWeekJson = JsonConvert.SerializeXmlNode(xmlDocument);
 | 
			
		||||
                        JObject archiveWeekJsonResult = (JObject)JsonConvert.DeserializeObject(archiveWeekJson);
 | 
			
		||||
 | 
			
		||||
                        if (archiveWeekJsonResult.ContainsKey("err")) //抓取錯誤
 | 
			
		||||
                        {
 | 
			
		||||
                            Dictionary<string, object> archiveWeekRawData = new Dictionary<string, object>();
 | 
			
		||||
                            archiveWeekRawData.Add("@device_number", error_week.Device_number);
 | 
			
		||||
                            archiveWeekRawData.Add("@point", error_week.Point);
 | 
			
		||||
                            archiveWeekRawData.Add("@start_timestamp", DateTime.Parse(error_week.Start_timestamp, System.Globalization.CultureInfo.CurrentCulture));
 | 
			
		||||
                            archiveWeekRawData.Add("@end_timestamp", DateTime.Parse(error_week.End_timestamp, System.Globalization.CultureInfo.CurrentCulture));
 | 
			
		||||
                            archiveWeekRawData.Add("@is_complete", 0);
 | 
			
		||||
                            archiveWeekRawData.Add("@repeat_times", ++error_week.Repeat_times);
 | 
			
		||||
                            archiveWeekRawData.Add("@fail_reason", archiveWeekJson);
 | 
			
		||||
 | 
			
		||||
                            archiveWeekRawData.Add("@count_rawdata", 0);
 | 
			
		||||
                            archiveWeekRawData.Add("@min_rawdata", 0);
 | 
			
		||||
                            archiveWeekRawData.Add("@max_rawdata", 0);
 | 
			
		||||
                            archiveWeekRawData.Add("@avg_rawdata", 0);
 | 
			
		||||
                            archiveWeekRawData.Add("@sum_rawdata", 0);
 | 
			
		||||
                            archiveWeekRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
 | 
			
		||||
 | 
			
		||||
                            waterArchiveWeekRawDatas.Add(archiveWeekRawData);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (archiveWeekJsonResult.ContainsKey("obj")) //表示可以讀取到內容
 | 
			
		||||
                        {
 | 
			
		||||
                            var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveWeekJsonResult);
 | 
			
		||||
                            if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                waterArchiveWeekRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (waterArchiveWeekRawDatas.Count() > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        var Mysql_error_update = string.Format(MYsql_update_format, targetTable);
 | 
			
		||||
                        var sql_error_update = string.Format(sql_update_format, targetTable);
 | 
			
		||||
                        await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, waterArchiveWeekRawDatas);
 | 
			
		||||
                        await backgroundServiceRepository.ExecuteSql(Mysql_error_update, waterArchiveWeekRawDatas);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                #endregion 週歸檔補償
 | 
			
		||||
@ -420,12 +580,11 @@ namespace BackendWorkerService.Services.Implement
 | 
			
		||||
                //取得所有須補償的設備資訊
 | 
			
		||||
                targetTable = "archive_electric_meter_month";
 | 
			
		||||
                var sql_error_month = string.Format(sql_error_format, targetTable);
 | 
			
		||||
                var error_months = await backgroundServiceRepository.GetAllAsync<ArchiveElectricMeter>(sql_error_month, new { RepeatTimes = repeatTimes });
 | 
			
		||||
 | 
			
		||||
                List<Dictionary<string, object>> archiveMonthRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                if (error_months.Count() > 0)
 | 
			
		||||
                var electric_error_months = await backgroundServiceRepository.GetAllAsync<ArchiveElectricMeter>(sql_error_month, new { RepeatTimes = repeatTimes });
 | 
			
		||||
                List<Dictionary<string, object>> electricArchiveMonthRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                if (electric_error_months.Count() > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (var error_month in error_months)
 | 
			
		||||
                    foreach (var error_month in electric_error_months)
 | 
			
		||||
                    {
 | 
			
		||||
                        DeviceNumberPoint deviceNumberPoint = new DeviceNumberPoint();
 | 
			
		||||
                        deviceNumberPoint.DeviceNumber = error_month.Device_number;
 | 
			
		||||
@ -481,7 +640,7 @@ namespace BackendWorkerService.Services.Implement
 | 
			
		||||
                            archiveMonthRawData.Add("@sum_rawdata", 0);
 | 
			
		||||
                            archiveMonthRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
 | 
			
		||||
 | 
			
		||||
                            archiveMonthRawDatas.Add(archiveMonthRawData);
 | 
			
		||||
                            electricArchiveMonthRawDatas.Add(archiveMonthRawData);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (archiveMonthJsonResult.ContainsKey("obj")) //表示可以讀取到內容
 | 
			
		||||
@ -489,17 +648,101 @@ namespace BackendWorkerService.Services.Implement
 | 
			
		||||
                            var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveMonthJsonResult);
 | 
			
		||||
                            if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                archiveMonthRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                                electricArchiveMonthRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (archiveMonthRawDatas.Count() > 0)
 | 
			
		||||
                    if (electricArchiveMonthRawDatas.Count() > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        var Mysql_error_update = string.Format(MYsql_update_format, targetTable);
 | 
			
		||||
                        var sql_error_update = string.Format(sql_update_format, targetTable);
 | 
			
		||||
                        await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, archiveMonthRawDatas);
 | 
			
		||||
                        await backgroundServiceRepository.ExecuteSql(MYsql_update_format, archiveMonthRawDatas);
 | 
			
		||||
                        await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, electricArchiveMonthRawDatas);
 | 
			
		||||
                        await backgroundServiceRepository.ExecuteSql(MYsql_update_format, electricArchiveMonthRawDatas);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                targetTable = "archive_electric_meter_month";
 | 
			
		||||
                sql_error_month = string.Format(sql_error_format, targetTable);
 | 
			
		||||
                var water_error_months = await backgroundServiceRepository.GetAllAsync<ArchiveElectricMeter>(sql_error_month, new { RepeatTimes = repeatTimes });
 | 
			
		||||
                List<Dictionary<string, object>> waterArchiveMonthRawDatas = new List<Dictionary<string, object>>();
 | 
			
		||||
                if (water_error_months.Count() > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (var error_month in water_error_months)
 | 
			
		||||
                    {
 | 
			
		||||
                        DeviceNumberPoint deviceNumberPoint = new DeviceNumberPoint();
 | 
			
		||||
                        deviceNumberPoint.DeviceNumber = error_month.Device_number;
 | 
			
		||||
                        deviceNumberPoint.Point = error_month.Point;
 | 
			
		||||
                        deviceNumberPoint.FullDeviceNumberPoint = string.Format("{0}_{1}", error_month.Device_number, error_month.Point);
 | 
			
		||||
 | 
			
		||||
                        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 startDateTime = Convert.ToDateTime(error_month.Start_timestamp);
 | 
			
		||||
                        var dayInMonth = DateTime.DaysInMonth(startDateTime.Year, startDateTime.Month);
 | 
			
		||||
 | 
			
		||||
                        var historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
 | 
			
		||||
                                                <abstime name='start' val='{startTimestamp}' />
 | 
			
		||||
                                                <abstime name='end' val='{endTimestamp}' />
 | 
			
		||||
                                                <reltime name='interval' val = 'PT{dayInMonth}D' />
 | 
			
		||||
                                            </obj>";
 | 
			
		||||
 | 
			
		||||
                        HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/{deviceNumberPoint.FullDeviceNumberPoint}/~historyRollup/");
 | 
			
		||||
                        //HttpWebRequest archiveMonthRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/FIC_Center/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
 | 
			
		||||
                        archiveMonthRequest.Method = "POST";
 | 
			
		||||
                        archiveMonthRequest.Headers.Add("Authorization", "Basic " + encoded);
 | 
			
		||||
                        archiveMonthRequest.PreAuthenticate = true;
 | 
			
		||||
 | 
			
		||||
                        byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter);
 | 
			
		||||
                        using (Stream reqStream = archiveMonthRequest.GetRequestStream())
 | 
			
		||||
                        {
 | 
			
		||||
                            reqStream.Write(byteArray, 0, byteArray.Length);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        HttpWebResponse archiveMonthResponse = (HttpWebResponse)archiveMonthRequest.GetResponse();
 | 
			
		||||
                        var archiveMonthResponseContent = new StreamReader(archiveMonthResponse.GetResponseStream()).ReadToEnd();
 | 
			
		||||
 | 
			
		||||
                        xmlDocument.LoadXml(archiveMonthResponseContent);
 | 
			
		||||
                        string archiveMonthJson = JsonConvert.SerializeXmlNode(xmlDocument);
 | 
			
		||||
                        JObject archiveMonthJsonResult = (JObject)JsonConvert.DeserializeObject(archiveMonthJson);
 | 
			
		||||
 | 
			
		||||
                        if (archiveMonthJsonResult.ContainsKey("err")) //抓取錯誤
 | 
			
		||||
                        {
 | 
			
		||||
                            Dictionary<string, object> archiveMonthRawData = new Dictionary<string, object>();
 | 
			
		||||
                            archiveMonthRawData.Add("@device_number", error_month.Device_number);
 | 
			
		||||
                            archiveMonthRawData.Add("@point", error_month.Point);
 | 
			
		||||
                            archiveMonthRawData.Add("@start_timestamp", DateTime.Parse(error_month.Start_timestamp, System.Globalization.CultureInfo.CurrentCulture));
 | 
			
		||||
                            archiveMonthRawData.Add("@end_timestamp", DateTime.Parse(error_month.End_timestamp, System.Globalization.CultureInfo.CurrentCulture));
 | 
			
		||||
                            archiveMonthRawData.Add("@is_complete", 0);
 | 
			
		||||
                            archiveMonthRawData.Add("@repeat_times", ++error_month.Repeat_times);
 | 
			
		||||
                            archiveMonthRawData.Add("@fail_reason", archiveMonthJson);
 | 
			
		||||
 | 
			
		||||
                            archiveMonthRawData.Add("@count_rawdata", 0);
 | 
			
		||||
                            archiveMonthRawData.Add("@min_rawdata", 0);
 | 
			
		||||
                            archiveMonthRawData.Add("@max_rawdata", 0);
 | 
			
		||||
                            archiveMonthRawData.Add("@avg_rawdata", 0);
 | 
			
		||||
                            archiveMonthRawData.Add("@sum_rawdata", 0);
 | 
			
		||||
                            archiveMonthRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
 | 
			
		||||
 | 
			
		||||
                            waterArchiveMonthRawDatas.Add(archiveMonthRawData);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (archiveMonthJsonResult.ContainsKey("obj")) //表示可以讀取到內容
 | 
			
		||||
                        {
 | 
			
		||||
                            var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveMonthJsonResult);
 | 
			
		||||
                            if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                waterArchiveMonthRawDatas.AddRange(ArrangeRawDatas);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (waterArchiveMonthRawDatas.Count() > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        var Mysql_error_update = string.Format(MYsql_update_format, targetTable);
 | 
			
		||||
                        var sql_error_update = string.Format(sql_update_format, targetTable);
 | 
			
		||||
                        await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, waterArchiveMonthRawDatas);
 | 
			
		||||
                        await backgroundServiceRepository.ExecuteSql(MYsql_update_format, waterArchiveMonthRawDatas);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                #endregion 月歸檔補償
 | 
			
		||||
 | 
			
		||||
@ -1,13 +1,13 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<alert xmlns="urn:oasis:names:tc:emergency:cap:1.2">
 | 
			
		||||
    
 | 
			
		||||
    <identifier>CWB-Weather_extremely-rain_202304300430001</identifier>
 | 
			
		||||
    <identifier>CWB-Weather_extremely-rain_202305081515001</identifier>
 | 
			
		||||
    <sender>weather@cwb.gov.tw</sender>
 | 
			
		||||
    <sent>2023-04-30T04:34:49+08:00</sent>
 | 
			
		||||
    <sent>2023-05-08T15:21:31+08:00</sent>
 | 
			
		||||
    <status>Actual</status>
 | 
			
		||||
    <msgType>Cancel</msgType>
 | 
			
		||||
    <scope>Public</scope>
 | 
			
		||||
    <references>weather@cwb.gov.tw,CWB-Weather_extremely-rain_202304292135001,2023-04-29T21:44:03+08:00</references>
 | 
			
		||||
    <references>weather@cwb.gov.tw,CWB-Weather_extremely-rain_202305081030001,2023-05-08T10:37:48+08:00 weather@cwb.gov.tw,CWB-Weather_extremely-rain_202305080840001,2023-05-08T08:51:11+08:00</references>
 | 
			
		||||
    <info>
 | 
			
		||||
        <language>zh-TW</language>
 | 
			
		||||
        <category>Met</category>
 | 
			
		||||
@ -19,13 +19,13 @@
 | 
			
		||||
            <valueName>profile:CAP-TWP:Event:1.0</valueName>
 | 
			
		||||
            <value>rainfall</value>
 | 
			
		||||
        </eventCode>
 | 
			
		||||
        <effective>2023-04-30T04:30:00+08:00</effective>
 | 
			
		||||
        <onset>2023-04-30T04:30:00+08:00</onset>
 | 
			
		||||
        <expires>2023-04-30T04:44:49+08:00</expires>
 | 
			
		||||
        <effective>2023-05-08T15:15:00+08:00</effective>
 | 
			
		||||
        <onset>2023-05-08T15:17:00+08:00</onset>
 | 
			
		||||
        <expires>2023-05-08T15:31:31+08:00</expires>
 | 
			
		||||
        <senderName>中央氣象局</senderName>
 | 
			
		||||
        <headline>解除大雨特報</headline>
 | 
			
		||||
        <description>
 | 
			
		||||
由於降雨趨於緩和,發生大雨的機率降低,故解除大雨特報;今日綠島及蘭嶼仍有局部較大雨勢發生的機率,請注意。
 | 
			
		||||
由於降雨趨於緩和,發生大雨的機率降低,故解除大雨特報;今(8)日屏東及臺東山區仍有局部較大雨勢發生,請注意。
 | 
			
		||||
        </description>
 | 
			
		||||
        <instruction></instruction>
 | 
			
		||||
        <web>https://www.cwb.gov.tw/V8/C/P/Warning/FIFOWS.html</web>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user