1.bgService月報表歸檔調整

2.月報表 API SQL 語法調整
This commit is contained in:
jiahao 2023-10-03 21:07:04 +08:00
parent d4eec76beb
commit 22396c5736
3 changed files with 61 additions and 26 deletions

View File

@ -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,

View File

@ -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 = $@"<obj is='obix: HistoryFilter'>
<abstime name='start' val='{startTimestamp}' />
<abstime name='end' val='{endTimestamp}' />
<reltime name='interval' val = 'PT{dayInMonth}D' />
<reltime name='interval' val = 'PT{dayInMonth.ToString()}D' />
</obj>";
logger.LogInformation("【ArchiveElectricMeterMonth】startTimestamp=", startTimestamp + " endTimestamp=" + endTimestamp);
string device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
var station = backgroundServiceRepository.GetOneAsync<string>($@"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")) //抓取錯誤
{

View File

@ -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<List<HydroMeterOutput>> result = new List<List<HydroMeterOutput>>();
var building = backendRepository.GetAllAsync<HydroBuildList>("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<Dictionary<string, byte[]>> docFile = new List<Dictionary<string, byte[]>>();
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");
}
/// <summary>
/// 客製化報表 excel 匯出 - 總計不含分盤
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
[Route("api/ExportElectricEachTotalCompareList")]
public FileResult OpeExportEachTotalCompareExcelElec([FromBody] HydroMeterInput input)