diff --git a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs index a13e4dc..06d9c26 100644 --- a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs +++ b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs @@ -266,9 +266,9 @@ namespace BackendWorkerService.Quartz.Jobs var sql = $@" SET FOREIGN_KEY_CHECKS = 1; UPDATE archive_electric_meter_day_{dbDateName} SET count_rawdata = @count_rawdata, - min_rawdata = @min_rawdata, - max_rawdata = @max_rawdata, - kwh_result = @max_rawdata - @min_rawdata, + min_rawdata = round(@min_rawdata, 2), + max_rawdata = round(@max_rawdata, 2), + kwh_result = round(@max_rawdata, 2) - round(@min_rawdata, 2), avg_rawdata = @avg_rawdata, sum_rawdata = @sum_rawdata, is_complete = @is_complete, @@ -299,9 +299,9 @@ namespace BackendWorkerService.Quartz.Jobs @start_timestamp, @end_timestamp, @count_rawdata, - @min_rawdata, - @max_rawdata, - @max_rawdata - @min_rawdata, + round(@min_rawdata, 2), + round(@max_rawdata, 2) , + round(@max_rawdata, 2) - round(@min_rawdata, 2), @avg_rawdata, @sum_rawdata, @is_complete, @@ -351,9 +351,9 @@ namespace BackendWorkerService.Quartz.Jobs UPDATE archive_electric_meter_day_{dbDateName} SET count_rawdata = @count_rawdata, - min_rawdata = @min_rawdata, - max_rawdata = @max_rawdata, - kwh_result = @max_rawdata - @min_rawdata, + min_rawdata = round(@min_rawdata, 2), + max_rawdata = round(@max_rawdata, 2) , + kwh_result = round(@max_rawdata, 2) - round(@min_rawdata, 2), avg_rawdata = @avg_rawdata, sum_rawdata = @sum_rawdata, is_complete = @is_complete, @@ -386,9 +386,9 @@ namespace BackendWorkerService.Quartz.Jobs @start_timestamp, @end_timestamp, @count_rawdata, - @min_rawdata, - @max_rawdata, - @max_rawdata - @min_rawdata + round(@min_rawdata, 2), + round(@max_rawdata, 2) , + round(@max_rawdata, 2) - round(@min_rawdata, 2), @avg_rawdata, @sum_rawdata, @is_complete, @@ -602,400 +602,400 @@ namespace BackendWorkerService.Quartz.Jobs #endregion 天歸檔 #region 週歸檔 - if (await task_Detail.GetNeedWorkTask("ArchiveElectricMeterDayJob", "Week")) - { - try - { - await task_Detail.InsertWorkTime("ArchiveElectricMeterDayJob", "Week", "水電表周任務開始"); - int week = Convert.ToInt32(actionDay.DayOfWeek); - week = week == 0 ? 7 : week; + //if (await task_Detail.GetNeedWorkTask("ArchiveElectricMeterDayJob", "Week")) + //{ + // try + // { + // await task_Detail.InsertWorkTime("ArchiveElectricMeterDayJob", "Week", "水電表周任務開始"); + // int week = Convert.ToInt32(actionDay.DayOfWeek); + // week = week == 0 ? 7 : week; - var startTimestamp = string.Format("{0}T00:00:00.000+08:00", actionDay.AddDays(1 - week).ToString("yyyy-MM-dd")); - //var endTimestamp = string.Format("{0}T23:59:59.000+08:00", actionDay.AddDays(7 - week).ToString("yyyy-MM-dd")); - var endTimestamp = string.Format("{0}T00:00:01.000+08:00", actionDay.AddDays(7 - week).ToString("yyyy-MM-dd")); + // var startTimestamp = string.Format("{0}T00:00:00.000+08:00", actionDay.AddDays(1 - week).ToString("yyyy-MM-dd")); + // //var endTimestamp = string.Format("{0}T23:59:59.000+08:00", actionDay.AddDays(7 - week).ToString("yyyy-MM-dd")); + // var endTimestamp = string.Format("{0}T00:00:01.000+08:00", actionDay.AddDays(7 - week).ToString("yyyy-MM-dd")); - var historyQueryFilter = $@" - - - - "; + // var historyQueryFilter = $@" + // + // + // + // "; - //Stopwatch stopWatch = new Stopwatch(); - //stopWatch.Start(); + // //Stopwatch stopWatch = new Stopwatch(); + // //stopWatch.Start(); - //抓取每個設備的資料 - List> electricArchiveWeekRawDatas = new List>(); - List> waterArchiveWeekRawDatas = new List>(); - //電錶結果收集 - procEletricMeterService.obixData_collect(xmlDocument, electricDeviceNumberPoints, obixApiConfig, encoded, startTimestamp, endTimestamp, historyQueryFilter, electricArchiveWeekRawDatas); + // //抓取每個設備的資料 + // List> electricArchiveWeekRawDatas = new List>(); + // List> waterArchiveWeekRawDatas = new List>(); + // //電錶結果收集 + // procEletricMeterService.obixData_collect(xmlDocument, electricDeviceNumberPoints, obixApiConfig, encoded, startTimestamp, endTimestamp, historyQueryFilter, electricArchiveWeekRawDatas); - //水錶結果收集 - procEletricMeterService.obixData_collect(xmlDocument, waterDeviceNumberPoints, obixApiConfig, encoded, startTimestamp, endTimestamp, historyQueryFilter, waterArchiveWeekRawDatas); - #region old request niagara obix data + // //水錶結果收集 + // procEletricMeterService.obixData_collect(xmlDocument, waterDeviceNumberPoints, obixApiConfig, encoded, startTimestamp, endTimestamp, historyQueryFilter, waterArchiveWeekRawDatas); + // #region old request niagara obix data - //foreach (var deviceNumberPoint in electricDeviceNumberPoints) - //{ - // device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", ""); - // var station = backgroundServiceRepository.GetOneAsync($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and - // device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' - // and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' - // and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}' - // and device_point_name = '{device_number.Split("_")[8]}'").Result; - // if (string.IsNullOrEmpty(station)) - // { - // continue; - // } - // archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/"); - // //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/"); - // archiveRequest.Method = "POST"; - // archiveRequest.Headers.Add("Authorization", "Basic " + encoded); - // archiveRequest.PreAuthenticate = true; + // //foreach (var deviceNumberPoint in electricDeviceNumberPoints) + // //{ + // // device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", ""); + // // var station = backgroundServiceRepository.GetOneAsync($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and + // // device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' + // // and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' + // // and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}' + // // and device_point_name = '{device_number.Split("_")[8]}'").Result; + // // if (string.IsNullOrEmpty(station)) + // // { + // // continue; + // // } + // // archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/"); + // // //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/"); + // // archiveRequest.Method = "POST"; + // // archiveRequest.Headers.Add("Authorization", "Basic " + encoded); + // // archiveRequest.PreAuthenticate = true; - // byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter); - // using (Stream reqStream = archiveRequest.GetRequestStream()) - // { - // reqStream.Write(byteArray, 0, byteArray.Length); - // } + // // byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter); + // // using (Stream reqStream = archiveRequest.GetRequestStream()) + // // { + // // reqStream.Write(byteArray, 0, byteArray.Length); + // // } - // archiveResponse = (HttpWebResponse)archiveRequest.GetResponse(); - // archiveResponseContent = new StreamReader(archiveResponse.GetResponseStream()).ReadToEnd(); - // archiveResponse.Dispose(); - // archiveResponse.Close(); + // // archiveResponse = (HttpWebResponse)archiveRequest.GetResponse(); + // // archiveResponseContent = new StreamReader(archiveResponse.GetResponseStream()).ReadToEnd(); + // // archiveResponse.Dispose(); + // // archiveResponse.Close(); - // xmlDocument.LoadXml(archiveResponseContent); - // archiveJson = JsonConvert.SerializeXmlNode(xmlDocument); - // archiveJsonResult = (JObject)JsonConvert.DeserializeObject(archiveJson); + // // xmlDocument.LoadXml(archiveResponseContent); + // // archiveJson = JsonConvert.SerializeXmlNode(xmlDocument); + // // archiveJsonResult = (JObject)JsonConvert.DeserializeObject(archiveJson); - // if (archiveJsonResult.ContainsKey("err")) //抓取錯誤 - // { - // //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】"); - // //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】[錯誤內容]:{0}", archiveWeekJsonResult); + // // if (archiveJsonResult.ContainsKey("err")) //抓取錯誤 + // // { + // // //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】"); + // // //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】[錯誤內容]:{0}", archiveWeekJsonResult); - // Dictionary archiveWeekRawData = new Dictionary(); - // 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", archiveJson); + // // Dictionary archiveWeekRawData = new Dictionary(); + // // 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", archiveJson); - // 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")); + // // 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")); - // electricArchiveWeekRawDatas.Add(archiveWeekRawData); - // } + // // electricArchiveWeekRawDatas.Add(archiveWeekRawData); + // // } - // if (archiveJsonResult.ContainsKey("obj")) //表示可以讀取到內容 - // { - // var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveJsonResult); - // if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0) - // { - // electricArchiveWeekRawDatas.AddRange(ArrangeRawDatas); - // } - // } - //} - //foreach (var deviceNumberPoint in waterDeviceNumberPoints) - //{ - // device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", ""); - // var station = backgroundServiceRepository.GetOneAsync($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and - // device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' - // and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' - // and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}' - // and device_point_name = '{device_number.Split("_")[8]}'").Result; - // archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/"); - // //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/"); - // archiveRequest.Method = "POST"; - // archiveRequest.Headers.Add("Authorization", "Basic " + encoded); - // archiveRequest.PreAuthenticate = true; + // // if (archiveJsonResult.ContainsKey("obj")) //表示可以讀取到內容 + // // { + // // var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveJsonResult); + // // if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0) + // // { + // // electricArchiveWeekRawDatas.AddRange(ArrangeRawDatas); + // // } + // // } + // //} + // //foreach (var deviceNumberPoint in waterDeviceNumberPoints) + // //{ + // // device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", ""); + // // var station = backgroundServiceRepository.GetOneAsync($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and + // // device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' + // // and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' + // // and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}' + // // and device_point_name = '{device_number.Split("_")[8]}'").Result; + // // archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/"); + // // //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/"); + // // archiveRequest.Method = "POST"; + // // archiveRequest.Headers.Add("Authorization", "Basic " + encoded); + // // archiveRequest.PreAuthenticate = true; - // byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter); - // using (Stream reqStream = archiveRequest.GetRequestStream()) - // { - // reqStream.Write(byteArray, 0, byteArray.Length); - // } + // // byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter); + // // using (Stream reqStream = archiveRequest.GetRequestStream()) + // // { + // // reqStream.Write(byteArray, 0, byteArray.Length); + // // } - // archiveResponse = (HttpWebResponse)archiveRequest.GetResponse(); - // archiveResponseContent = new StreamReader(archiveResponse.GetResponseStream()).ReadToEnd(); - // archiveResponse.Dispose(); - // archiveResponse.Close(); + // // archiveResponse = (HttpWebResponse)archiveRequest.GetResponse(); + // // archiveResponseContent = new StreamReader(archiveResponse.GetResponseStream()).ReadToEnd(); + // // archiveResponse.Dispose(); + // // archiveResponse.Close(); - // xmlDocument.LoadXml(archiveResponseContent); - // archiveJson = JsonConvert.SerializeXmlNode(xmlDocument); - // archiveJsonResult = (JObject)JsonConvert.DeserializeObject(archiveJson); + // // xmlDocument.LoadXml(archiveResponseContent); + // // archiveJson = JsonConvert.SerializeXmlNode(xmlDocument); + // // archiveJsonResult = (JObject)JsonConvert.DeserializeObject(archiveJson); - // if (archiveJsonResult.ContainsKey("err")) //抓取錯誤 - // { - // //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】"); - // //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】[錯誤內容]:{0}", archiveWeekJsonResult); + // // if (archiveJsonResult.ContainsKey("err")) //抓取錯誤 + // // { + // // //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】"); + // // //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】[錯誤內容]:{0}", archiveWeekJsonResult); - // Dictionary archiveWeekRawData = new Dictionary(); - // 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", archiveJson); + // // Dictionary archiveWeekRawData = new Dictionary(); + // // 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", archiveJson); - // 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")); + // // 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); - // } + // // waterArchiveWeekRawDatas.Add(archiveWeekRawData); + // // } - // if (archiveJsonResult.ContainsKey("obj")) //表示可以讀取到內容 - // { - // var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveJsonResult); - // if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0) - // { - // waterArchiveWeekRawDatas.AddRange(ArrangeRawDatas); - // } - // } - //} - #endregion + // // if (archiveJsonResult.ContainsKey("obj")) //表示可以讀取到內容 + // // { + // // var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveJsonResult); + // // if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0) + // // { + // // waterArchiveWeekRawDatas.AddRange(ArrangeRawDatas); + // // } + // // } + // //} + // #endregion - //stopWatch.Stop(); - //logger.LogInformation("【ArchiveElectricMeterDayJob】【週歸檔】【效能檢驗】[取得資料花費時間]{0} 毫秒", stopWatch.ElapsedMilliseconds); + // //stopWatch.Stop(); + // //logger.LogInformation("【ArchiveElectricMeterDayJob】【週歸檔】【效能檢驗】[取得資料花費時間]{0} 毫秒", stopWatch.ElapsedMilliseconds); - if (electricArchiveWeekRawDatas.Count() > 0) - { - var sql = $@" - UPDATE archive_electric_meter_week SET - count_rawdata = @count_rawdata, - min_rawdata = round(@min_rawdata, 2) - max_rawdata = round(@max_rawdata, 2) - kwh_result = round(@max_rawdata, 2) - round(@min_rawdata, 2), - 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 (electricArchiveWeekRawDatas.Count() > 0) + // { + // var sql = $@" + // UPDATE archive_electric_meter_week SET + // count_rawdata = @count_rawdata, + // min_rawdata = round(@min_rawdata, 2) + // max_rawdata = round(@max_rawdata, 2) + // kwh_result = round(@max_rawdata, 2) - round(@min_rawdata, 2), + // 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_electric_meter_week ( - device_number, - point, - start_timestamp, - end_timestamp, - count_rawdata, - min_rawdata, - max_rawdata, - kwh_result, - avg_rawdata, - sum_rawdata, - is_complete, - repeat_times, - fail_reason) - SELECT - @device_number, - @point, - @start_timestamp, - @end_timestamp, - @count_rawdata, - round(@min_rawdata, 2), - round(@max_rawdata, 2), - round(@max_rawdata, 2) - round(@min_rawdata, 2), - @avg_rawdata, - @sum_rawdata, - @is_complete, - @repeat_times, - @fail_reason - WHERE ROW_COUNT() = 0; - "; + // INSERT INTO archive_electric_meter_week ( + // device_number, + // point, + // start_timestamp, + // end_timestamp, + // count_rawdata, + // min_rawdata, + // max_rawdata, + // kwh_result, + // avg_rawdata, + // sum_rawdata, + // is_complete, + // repeat_times, + // fail_reason) + // SELECT + // @device_number, + // @point, + // @start_timestamp, + // @end_timestamp, + // @count_rawdata, + // round(@min_rawdata, 2), + // round(@max_rawdata, 2), + // round(@max_rawdata, 2) - round(@min_rawdata, 2), + // @avg_rawdata, + // @sum_rawdata, + // @is_complete, + // @repeat_times, + // @fail_reason + // WHERE ROW_COUNT() = 0; + // "; - var mySql = $@"BEGIN TRANSACTION; + // var mySql = $@"BEGIN TRANSACTION; - UPDATE archive_electric_meter_week SET - count_rawdata = @count_rawdata, - min_rawdata = round(@min_rawdata, 2), - max_rawdata = round(@max_rawdata, 2), - kwh_result = round(@min_rawdata, 2) - round(@max_rawdata, 2), - 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; + // UPDATE archive_electric_meter_week SET + // count_rawdata = @count_rawdata, + // min_rawdata = round(@min_rawdata, 2), + // max_rawdata = round(@max_rawdata, 2), + // kwh_result = round(@min_rawdata, 2) - round(@max_rawdata, 2), + // 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_electric_meter_week ( - device_number, - point, - start_timestamp, - end_timestamp, - count_rawdata, - min_rawdata, - max_rawdata, - kwh_result, - avg_rawdata, - sum_rawdata, - is_complete, - repeat_times, - fail_reason) - VALUES ( - @device_number, - @point, - @start_timestamp, - @end_timestamp, - @count_rawdata, - round(@min_rawdata, 2), - round(@max_rawdata, 2), - round(@max_rawdata, 2) - round(@min_rawdata, 2), - @avg_rawdata, - @sum_rawdata, - @is_complete, - @repeat_times, - @fail_reason) - END + // IF @@ROWCOUNT = 0 + // BEGIN + // INSERT INTO archive_electric_meter_week ( + // device_number, + // point, + // start_timestamp, + // end_timestamp, + // count_rawdata, + // min_rawdata, + // max_rawdata, + // kwh_result, + // avg_rawdata, + // sum_rawdata, + // is_complete, + // repeat_times, + // fail_reason) + // VALUES ( + // @device_number, + // @point, + // @start_timestamp, + // @end_timestamp, + // @count_rawdata, + // round(@min_rawdata, 2), + // round(@max_rawdata, 2), + // round(@max_rawdata, 2) - round(@min_rawdata, 2), + // @avg_rawdata, + // @sum_rawdata, + // @is_complete, + // @repeat_times, + // @fail_reason) + // END - COMMIT TRANSACTION;"; - await backgroundServiceRepository.ExecuteSql(sql, electricArchiveWeekRawDatas); - if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") - { - await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electricArchiveWeekRawDatas); - } + // COMMIT TRANSACTION;"; + // await backgroundServiceRepository.ExecuteSql(sql, electricArchiveWeekRawDatas); + // if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + // { + // await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electricArchiveWeekRawDatas); + // } - } - if (waterArchiveWeekRawDatas.Count() > 0) - { - var sql = $@" UPDATE archive_water_meter_week SET - count_rawdata = @count_rawdata, - min_rawdata = round(@min_rawdata, 2), - max_rawdata = round(@max_rawdata, 2), - kwh_result = round(@min_rawdata, 2) - round(@max_rawdata, 2), - 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 (waterArchiveWeekRawDatas.Count() > 0) + // { + // var sql = $@" UPDATE archive_water_meter_week SET + // count_rawdata = @count_rawdata, + // min_rawdata = round(@min_rawdata, 2), + // max_rawdata = round(@max_rawdata, 2), + // kwh_result = round(@min_rawdata, 2) - round(@max_rawdata, 2), + // 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, - kwh_result, - avg_rawdata, - sum_rawdata, - is_complete, - repeat_times, - fail_reason) - SELECT - @device_number, - @point, - @start_timestamp, - @end_timestamp, - @count_rawdata, - round(@min_rawdata, 2), - round(@max_rawdata, 2), - round(@max_rawdata, 2) - round(@min_rawdata, 2), - @avg_rawdata, - @sum_rawdata, - @is_complete, - @repeat_times, - @fail_reason - WHERE ROW_COUNT() = 0; - "; + // INSERT INTO archive_water_meter_week ( + // device_number, + // point, + // start_timestamp, + // end_timestamp, + // count_rawdata, + // min_rawdata, + // max_rawdata, + // kwh_result, + // avg_rawdata, + // sum_rawdata, + // is_complete, + // repeat_times, + // fail_reason) + // SELECT + // @device_number, + // @point, + // @start_timestamp, + // @end_timestamp, + // @count_rawdata, + // round(@min_rawdata, 2), + // round(@max_rawdata, 2), + // round(@max_rawdata, 2) - round(@min_rawdata, 2), + // @avg_rawdata, + // @sum_rawdata, + // @is_complete, + // @repeat_times, + // @fail_reason + // WHERE ROW_COUNT() = 0; + // "; - var mySql = $@"BEGIN TRANSACTION; + // var mySql = $@"BEGIN TRANSACTION; - UPDATE archive_water_meter_week SET - count_rawdata = @count_rawdata, - min_rawdata = round(@min_rawdata, 2), - max_rawdata = round(@max_rawdata, 2), - kwh_result = round(@max_rawdata, 2) - round(@min_rawdata, 2), - 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; + // UPDATE archive_water_meter_week SET + // count_rawdata = @count_rawdata, + // min_rawdata = round(@min_rawdata, 2), + // max_rawdata = round(@max_rawdata, 2), + // kwh_result = round(@max_rawdata, 2) - round(@min_rawdata, 2), + // 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, - kwh_result, - avg_rawdata, - sum_rawdata, - is_complete, - repeat_times, - fail_reason) - VALUES ( - @device_number, - @point, - @start_timestamp, - @end_timestamp, - @count_rawdata, - round(@min_rawdata,2) , - round(@max_rawdata,2) , - round(@max_rawdata, 2) - round(@min_rawdata, 2), - @avg_rawdata, - @sum_rawdata, - @is_complete, - @repeat_times, - @fail_reason) - END + // IF @@ROWCOUNT = 0 + // BEGIN + // INSERT INTO archive_water_meter_week ( + // device_number, + // point, + // start_timestamp, + // end_timestamp, + // count_rawdata, + // min_rawdata, + // max_rawdata, + // kwh_result, + // avg_rawdata, + // sum_rawdata, + // is_complete, + // repeat_times, + // fail_reason) + // VALUES ( + // @device_number, + // @point, + // @start_timestamp, + // @end_timestamp, + // @count_rawdata, + // round(@min_rawdata,2) , + // round(@max_rawdata,2) , + // round(@max_rawdata, 2) - round(@min_rawdata, 2), + // @avg_rawdata, + // @sum_rawdata, + // @is_complete, + // @repeat_times, + // @fail_reason) + // END - COMMIT TRANSACTION;"; - await backgroundServiceRepository.ExecuteSql(sql, waterArchiveWeekRawDatas); - if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") - { - await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveWeekRawDatas); - } - } - await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Week", "任務完成"); - } - catch (Exception exception) - { - await task_Detail.WorkFail("ArchiveElectricMeterDayJob", "Week", exception.ToString()); - logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【任務失敗】"); - logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【任務失敗】[Exception]:{0}", exception.ToString()); - } - finally - { - if (archiveResponse != null) - { - archiveResponse.Dispose(); - archiveResponse.Close(); - } - } - } + // COMMIT TRANSACTION;"; + // await backgroundServiceRepository.ExecuteSql(sql, waterArchiveWeekRawDatas); + // if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + // { + // await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveWeekRawDatas); + // } + // } + // await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Week", "任務完成"); + // } + // catch (Exception exception) + // { + // await task_Detail.WorkFail("ArchiveElectricMeterDayJob", "Week", exception.ToString()); + // logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【任務失敗】"); + // logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【任務失敗】[Exception]:{0}", exception.ToString()); + // } + // finally + // { + // if (archiveResponse != null) + // { + // archiveResponse.Dispose(); + // archiveResponse.Close(); + // } + // } + //} #endregion 週歸檔 #region 月歸檔 diff --git a/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs b/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs index bb1c8f3..bf704d1 100644 --- a/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs +++ b/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs @@ -306,9 +306,17 @@ namespace BackendWorkerService.Services.Implement //var startTimestamp = string.Format("{0}+08:00", error_day.Start_timestamp.Replace(" ", "T")); //var startTimestamp = string.Format("{0}+08:00", DateTime.Parse(error_day.Start_timestamp).ToString("yyyy-MM-dd").Replace(" ", "T")); var startTimestamp = string.Format("{0}T00:00:00.000+08:00", DateTime.Parse(error_day.Start_timestamp).ToString("yyyy-MM-dd").Replace(" ", "T")); - + var endTimestamp = ""; //var endTimestamp = string.Format("{0}+08:00", error_day.End_timestamp.Replace(" ", "T")); - var endTimestamp = string.Format("{0}T00:00:10.000+08:00", DateTime.Parse(error_day.End_timestamp).AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T")); + if (DateTime.Parse(error_day.Start_timestamp).ToString("yyyy-MM-dd") == DateTime.Parse(error_day.End_timestamp).ToString("yyyy-MM-dd")) + { + //同一天為 舊有格式 採用 endtime + endTimestamp = string.Format("{0}T00:00:10.000+08:00", DateTime.Parse(error_day.End_timestamp).AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T")); + } + else + { //不同天為新格式 採用 Start_timestamp + endTimestamp = string.Format("{0}T00:00:10.000+08:00", DateTime.Parse(error_day.Start_timestamp).AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T")); + } var historyQueryFilter = $@" @@ -334,42 +342,52 @@ namespace BackendWorkerService.Services.Implement 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")) //抓取錯誤 + try { - Dictionary archiveDayRawData = new Dictionary(); - 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); + HttpWebResponse archiveDayResponse = (HttpWebResponse)archiveDayRequest.GetResponse(); + var archiveDayResponseContent = new StreamReader(archiveDayResponse.GetResponseStream()).ReadToEnd(); - 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")); + xmlDocument.LoadXml(archiveDayResponseContent); + string archiveDayJson = JsonConvert.SerializeXmlNode(xmlDocument); - electricArchiveDayRawDatas.Add(archiveDayRawData); - } + // logger.LogInformation( Environment.NewLine + " json = " + archiveDayJson + Environment.NewLine); - if (archiveDayJsonResult.ContainsKey("obj")) //表示可以讀取到內容 - { - var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveDayJsonResult); - if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0) + JObject archiveDayJsonResult = (JObject)JsonConvert.DeserializeObject(archiveDayJson); + if (archiveDayJsonResult.ContainsKey("err")) //抓取錯誤 { - electricArchiveDayRawDatas.AddRange(ArrangeRawDatas); + Dictionary archiveDayRawData = new Dictionary(); + 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")); + + electricArchiveDayRawDatas.Add(archiveDayRawData); + } + + if (archiveDayJsonResult.ContainsKey("obj")) //表示可以讀取到內容 + { + var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveDayJsonResult); + if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0) + { + electricArchiveDayRawDatas.AddRange(ArrangeRawDatas); + } } } + catch (Exception ex) + { + logger.LogError("【ArchiveElectricMeterDayJob】【補償機制 - 天】【任務失敗】Device_number=" + error_day.Device_number + " point = " + error_day.Point + " date =" + error_day + " startTimestamp" + startTimestamp + " endTimestamp =" + endTimestamp); + logger.LogError("【ArchiveElectricMeterDayJob】【補償機制 - 天】【任務失敗】[Exception]:{0}", ex.ToString() + Environment.NewLine ); + } } if (electricArchiveDayRawDatas.Count() > 0) @@ -917,7 +935,8 @@ namespace BackendWorkerService.Services.Implement } catch (Exception exception) { - throw exception; + logger.LogError("【ProcEletricMeterService】【補償機制 - 任務失敗】"); + logger.LogError("【ProcEletricMeterService】【補償機制 - 任務失敗】[Exception]:{0} {1}", exception.ToString()); } return result; diff --git a/BackendWorkerService/appsettings.Development.json b/BackendWorkerService/appsettings.Development.json index 785f08c..4333ec0 100644 --- a/BackendWorkerService/appsettings.Development.json +++ b/BackendWorkerService/appsettings.Development.json @@ -16,7 +16,7 @@ "RegularUpdateDBTableJob": "0 0 2 * * ?", "ParkingJob": "0 0 2 * * ?", "ArchiveElectricMeterHourJob": "0 0 2 * * ?", - "ArchiveElectricMeterDayJob": "0/5 * * * * ?", //每 5分鐘 + "ArchiveElectricMeterDayJob": "0/2 * * * * ?", //每 5分鐘 "WeatherAPIJob": "0 0 2 * * ?" }, "DBConfig": { diff --git a/FrontendWebApi/ApiControllers/HistoryController.cs b/FrontendWebApi/ApiControllers/HistoryController.cs index 93d724d..bea7cee 100644 --- a/FrontendWebApi/ApiControllers/HistoryController.cs +++ b/FrontendWebApi/ApiControllers/HistoryController.cs @@ -269,6 +269,7 @@ namespace FrontendWebApi.ApiControllers RowPosition = 0; lastDeviceItem = d.type; sheet = workbook.CreateSheet($"{building.Where(x => x.building_tag == lhe.device_number.Split("_")[1]).Select(x => x.full_name).FirstOrDefault()}{"_" + d.type}"); + //sheet = workbook.CreateSheet($"{d.deviceName}{"_" + d.type}"); #region set cell row = sheet.CreateRow(RowPosition); sheet.SetColumnWidth(0, 4 * 160 * 12); diff --git a/FrontendWebApi/ApiControllers/HydroMeterController.cs b/FrontendWebApi/ApiControllers/HydroMeterController.cs index bf07ada..d8fd3d9 100644 --- a/FrontendWebApi/ApiControllers/HydroMeterController.cs +++ b/FrontendWebApi/ApiControllers/HydroMeterController.cs @@ -132,6 +132,13 @@ namespace FrontendWebApi.ApiControllers var dateFormat = input.tableType == "day" || input.tableType == "week" ? "%Y-%m-%d" : input.tableType == "month" ? "%Y-%m" : input.tableType == "year" ? "%Y" : null; var aemmEndDate = input.tableType == "year" ? $"year(DATE_ADD(fd.date, INTERVAL +1 {input.tableType}))" : $"DATE_ADD(fd.date, INTERVAL +1 {input.tableType})"; var aemmStaDate = input.tableType == "year" ? "year(fd.date)" : "fd.date"; + string date_yyyymmdd = ""; + switch (input.tableType) + { + case "day": date_yyyymmdd = @$" date(aemm.start_timestamp) = {aemmStaDate}"; break; + case "month": date_yyyymmdd = @$" aemm.start_timestamp >= {aemmStaDate} and aemm.end_timestamp < {aemmEndDate} "; break; + case "year": date_yyyymmdd = @$" aemm.start_timestamp >= {aemmStaDate} and aemm.end_timestamp < {aemmEndDate} "; break; + } var sql = $@"set @i = -1; select fd.device_number, case when aemm.avg_rawdata = -1.0 then 'NaN' when aemm.avg_rawdata is null then 0.00 else aemm.avg_rawdata end as avg_rawdata, DATE_FORMAT(fd.date, @dateFormat) as timestamp from ( @@ -156,7 +163,7 @@ namespace FrontendWebApi.ApiControllers from {table} where start_timestamp >= '{startTime}' and end_timestamp < '{endTime}' and point = 'KWH' {buildingSql} {sqlWhere} {sqlGroup} - ) aemm on aemm.start_timestamp >= {aemmStaDate} and aemm.end_timestamp < {aemmEndDate} and aemm.device_number = fd.device_number + ) aemm on {date_yyyymmdd} and aemm.device_number = fd.device_number join device dc on fd.device_number = dc.device_number where dc.deleted = 0 order by fd.device_number, fd.date"; @@ -500,7 +507,7 @@ namespace FrontendWebApi.ApiControllers if (r.Count > 0) { string buildingName = r.Select(x => x.building_name).FirstOrDefault(); - var sheet = workbook.CreateSheet($"{r.Select( x=> x.device_full_name).FirstOrDefault()} 電表報表"); + var sheet = workbook.CreateSheet($"{buildingName}"); int RowPosition = 0; #region set cell IRow row = sheet.CreateRow(RowPosition); @@ -603,7 +610,7 @@ namespace FrontendWebApi.ApiControllers ms.Flush(); ms.Seek(0, SeekOrigin.Begin); Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition"); - return File(ms, "application/vnd.ms", @$"{building}_電表報表{System.DateTime.Now.ToString("yyyyMMddHHmm")}.xlsx"); + return File(ms, "application/vnd.ms", @$"電表報表_{System.DateTime.Now.ToString("yyyyMMddHHmm")}.xlsx"); } [HttpPost]