diff --git a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs index 1635c46..a49d9f2 100644 --- a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs +++ b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs @@ -792,6 +792,8 @@ namespace BackendWorkerService.Quartz.Jobs //stopWatch.Stop(); //logger.LogInformation("【ArchiveElectricMeterDayJob】【月歸檔效能檢驗】[取得資料花費時間]{0} 毫秒", stopWatch.ElapsedMilliseconds); + logger.LogInformation($@"before 月報 electricArchiveMonthRawDatas.Count() ={electricArchiveMonthRawDatas.Count()} "); + if (electricArchiveMonthRawDatas.Count() > 0) { var sql = $@" @@ -889,13 +891,16 @@ namespace BackendWorkerService.Quartz.Jobs @fail_reason) END - COMMIT TRANSACTION;"; + COMMIT TRANSACTION;"; + await backgroundServiceRepository.ExecuteSql(sql, electricArchiveMonthRawDatas); + if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") { await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electricArchiveMonthRawDatas); } } + // 水錶 if (waterArchiveMonthRawDatas.Count() > 0) { var sql = $@" @@ -992,7 +997,8 @@ namespace BackendWorkerService.Quartz.Jobs @fail_reason) END - COMMIT TRANSACTION;"; + COMMIT TRANSACTION;"; + await backgroundServiceRepository.ExecuteSql(sql, waterArchiveMonthRawDatas); if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") { @@ -1314,10 +1320,11 @@ namespace BackendWorkerService.Quartz.Jobs logger.LogInformation("run sql electericArchiveDayRawDatas.Count() = " + electericArchiveDayRawDatas.Count()); await backgroundServiceRepository.ExecuteSql(sql, electericArchiveDayRawDatas); - if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") - { - await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electericArchiveDayRawDatas); - } + //明志 沒有mssql + //if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + //{ + // await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electericArchiveDayRawDatas); + //} } if (waterArchiveDayRawDatas.Count() > 0) @@ -1556,7 +1563,7 @@ namespace BackendWorkerService.Quartz.Jobs { string sql = $@"CREATE TABLE IF NOT EXISTS `archive_electric_meter_day_{dbDateName}` ( `device_number` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `point` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `point` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `start_timestamp` datetime(6) NOT NULL, `end_timestamp` datetime(6) NULL DEFAULT NULL, `count_rawdata` int(11) NULL DEFAULT NULL, diff --git a/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs b/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs index 5abd190..aa43534 100644 --- a/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs +++ b/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs @@ -1016,7 +1016,7 @@ namespace BackendWorkerService.Services.Implement archiveRequest.Headers.Add("Authorization", "Basic " + encoded); archiveRequest.PreAuthenticate = true; - logger.LogInformation($@" {device_number} station = {station} task= {startDay} ~ {endDay} action ={sDay} ~ {eDay}"); // ----------- log + // logger.LogInformation($@"url= {$"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/" + Environment.NewLine} {device_number} station = {station} task= {startDay} ~ {endDay} action ={sDay} ~ {eDay}"); // ----------- log byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter); using (Stream reqStream = archiveRequest.GetRequestStream()) @@ -1124,20 +1124,22 @@ namespace BackendWorkerService.Services.Implement foreach (DateTime day in EachMonth(startDay , endDay)) { // 需要比原定日期增加 1天:因 Niagara 內部判斷為 < lastData, 並未包含結束當天 add by jiahao @2023-09-16 - var dayInMonth = DateTime.DaysInMonth(day.Year, day.Month) +1; + //var dayInMonth = DateTime.DaysInMonth(day.Year, day.Month) +1; 、、(DateTime.Now - DateTime.Parse(startDay)).Days + var dayInMonth = (DateTime.Now - DateTime.Parse(day.ToString("yyyy-MM-") + "01")).Days + 1; - var startTimestamp = string.Format("{0}T00:00:00.000+08:00", day.ToString("yyyy-MM-") + "01"); + + var startTimestamp = string.Format("{0}T00:00:00.000+08:00", day.ToString("yyyy-MM-") + "01"); //var endTimestamp = string.Format("{0}T23:59:59.000+08:00", LastDay.ToString("yyyy-MM-dd")); - var endTimestamp = string.Format("{0}T00:00:10.000+08:00", day.AddMonths(1).ToString("yyyy-MM-") + "01"); // by jiahao @2023-09-26 + //var endTimestamp = string.Format("{0}T00:00:10.000+08:00", day.AddMonths(1).ToString("yyyy-MM-") + "01"); // by jiahao @2023-09-26 + var endTimestamp = string.Format("{0}T00:00:10.000+08:00", DateTime.Now.ToString("yyyy-MM-dd")); // by jiahao @2023-10-03 var historyQueryFilter = $@" - + "; - logger.LogInformation("【ArchiveElectricMeterMonth】startTimestamp=", startTimestamp + " endTimestamp=" + endTimestamp); - + string device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", ""); var station = backgroundServiceRepository.GetOneAsync($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' @@ -1162,12 +1164,17 @@ namespace BackendWorkerService.Services.Implement archiveResponse.Dispose(); archiveResponse.Close(); + logger.LogInformation(@$"【ArchiveElectricMeterMonth】{device_number} startTimestamp={startTimestamp} endTimestamp= {endTimestamp} interval = PT{dayInMonth.ToString()}D url = {$"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/"}"); + + xmlDocument.LoadXml(archiveResponseContent); var archiveJson = JsonConvert.SerializeXmlNode(xmlDocument); var archiveJsonResult = (JObject)JsonConvert.DeserializeObject(archiveJson); - //if (device_number == "NTPC_D8_EE_E4_RF_Total_WHT_N1") + + + //if (device_number == "NTPC_D8_EE_E4_RF_Total_WHT_N1" || device_number == "NTPC_D8_EE_E4_RF_H2_WHT_N1") //{ - // logger.LogError("obixData_collect - NTPC_D8_EE_E4_RF_Total_WHT_N1 s=" + startTimestamp.Replace("T", " ").Substring(0, 19) + " e = " + endTimestamp.Replace("T", " ").Substring(0, 19) + " json = " + archiveJsonResult); + logger.LogError(@$"{device_number} json = {archiveJsonResult}"); //} if (archiveJsonResult.ContainsKey("err")) //抓取錯誤 { diff --git a/FrontendWebApi/ApiControllers/HydroMeterController.cs b/FrontendWebApi/ApiControllers/HydroMeterController.cs index 224925c..472a1a9 100644 --- a/FrontendWebApi/ApiControllers/HydroMeterController.cs +++ b/FrontendWebApi/ApiControllers/HydroMeterController.cs @@ -21,6 +21,8 @@ using Google.Protobuf.Collections; using Org.BouncyCastle.Asn1.Pkcs; using NPOI.SS.Formula.Functions; using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData; +using static NPOI.HSSF.Record.PageBreakRecord; +using System.Linq.Expressions; namespace FrontendWebApi.ApiControllers { @@ -136,10 +138,11 @@ namespace FrontendWebApi.ApiControllers 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 "month": date_yyyymmdd = @$" aemm.start_timestamp >= {aemmStaDate} and aemm.end_timestamp < {aemmEndDate} "; break; + case "month": date_yyyymmdd = @$" date(aemm.start_timestamp) = {aemmStaDate}"; break; case "year": date_yyyymmdd = @$" aemm.start_timestamp >= {aemmStaDate} and aemm.end_timestamp < {aemmEndDate} "; break; } - var sql = $@"set @i = -1; + 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 ( select * @@ -445,11 +448,12 @@ namespace FrontendWebApi.ApiControllers { List> result = new List>(); var building = backendRepository.GetAllAsync("select * from building where deleted = 0").Result; - foreach(var b in building) - { - input.building_tag = b.building_tag; - result.Add(this.ElectricList(input).Result.Value.Data.ToList()); - } + //foreach(var b in building) + //{ + // input.building_tag = b.building_tag; + // 0 result.Add(this.ElectricList(input).Result.Value.Data.ToList()); + //} + result.Add(this.ElectricList(input).Result.Value.Data.ToList()); List> docFile = new List>(); var workbook = new XSSFWorkbook(); @@ -508,14 +512,25 @@ namespace FrontendWebApi.ApiControllers stylein12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; stylein12.WrapText = true; #endregion + string reportType = string.Empty; + + switch (input.tableType.ToLower()) //day, week, month, year + { + case "day": reportType = "日報表"; break; + case "week": reportType = "周報表"; break; + case "month": reportType = "月報表"; break; + case "year": reportType = "年報表"; break; + } + //var sheet = workbook.CreateSheet($"{buildingName}"); + var sheet = workbook.CreateSheet($"{reportType}"); foreach (var r in result) { if (r.Count > 0) { string buildingName = r.Select(x => x.building_name).FirstOrDefault(); - var sheet = workbook.CreateSheet($"{buildingName}"); + Logger.LogInformation(@$"buildingName = {buildingName}" + Environment.NewLine); int RowPosition = 0; - #region set cell + #region set cell for columns IRow row = sheet.CreateRow(RowPosition); sheet.SetColumnWidth(0, 4 * 160 * 12); sheet.SetColumnWidth(1, 4 * 160 * 12); @@ -616,7 +631,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", @$"電表報表_{System.DateTime.Now.ToString("yyyyMMddHHmm")}.xlsx"); + return File(ms, "application/vnd.ms", @$"電表報表_{reportType}_{System.DateTime.Now.ToString("yyyyMMddHHmm")}.xlsx"); } [HttpPost] @@ -860,6 +875,12 @@ namespace FrontendWebApi.ApiControllers return File(ms, "application/vnd.ms-excel", @$"電表報表{System.DateTime.Now.ToString("yyyyMMddHHmm")}.xlsx"); } + + /// + /// 客製化報表 excel 匯出 - 總計不含分盤 + /// + /// + /// [HttpPost] [Route("api/ExportElectricEachTotalCompareList")] public FileResult OpeExportEachTotalCompareExcelElec([FromBody] HydroMeterInput input)