1.bgService月報表歸檔調整
2.月報表 API SQL 語法調整
This commit is contained in:
parent
d4eec76beb
commit
22396c5736
@ -792,6 +792,8 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
//stopWatch.Stop();
|
//stopWatch.Stop();
|
||||||
//logger.LogInformation("【ArchiveElectricMeterDayJob】【月歸檔效能檢驗】[取得資料花費時間]{0} 毫秒", stopWatch.ElapsedMilliseconds);
|
//logger.LogInformation("【ArchiveElectricMeterDayJob】【月歸檔效能檢驗】[取得資料花費時間]{0} 毫秒", stopWatch.ElapsedMilliseconds);
|
||||||
|
|
||||||
|
logger.LogInformation($@"before 月報 electricArchiveMonthRawDatas.Count() ={electricArchiveMonthRawDatas.Count()} ");
|
||||||
|
|
||||||
if (electricArchiveMonthRawDatas.Count() > 0)
|
if (electricArchiveMonthRawDatas.Count() > 0)
|
||||||
{
|
{
|
||||||
var sql = $@"
|
var sql = $@"
|
||||||
@ -890,12 +892,15 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
END
|
END
|
||||||
|
|
||||||
COMMIT TRANSACTION;";
|
COMMIT TRANSACTION;";
|
||||||
|
|
||||||
await backgroundServiceRepository.ExecuteSql(sql, electricArchiveMonthRawDatas);
|
await backgroundServiceRepository.ExecuteSql(sql, electricArchiveMonthRawDatas);
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1")
|
if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1")
|
||||||
{
|
{
|
||||||
await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electricArchiveMonthRawDatas);
|
await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electricArchiveMonthRawDatas);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 水錶
|
||||||
if (waterArchiveMonthRawDatas.Count() > 0)
|
if (waterArchiveMonthRawDatas.Count() > 0)
|
||||||
{
|
{
|
||||||
var sql = $@"
|
var sql = $@"
|
||||||
@ -993,6 +998,7 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
END
|
END
|
||||||
|
|
||||||
COMMIT TRANSACTION;";
|
COMMIT TRANSACTION;";
|
||||||
|
|
||||||
await backgroundServiceRepository.ExecuteSql(sql, waterArchiveMonthRawDatas);
|
await backgroundServiceRepository.ExecuteSql(sql, waterArchiveMonthRawDatas);
|
||||||
if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1")
|
if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1")
|
||||||
{
|
{
|
||||||
@ -1314,10 +1320,11 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
|
|
||||||
logger.LogInformation("run sql electericArchiveDayRawDatas.Count() = " + electericArchiveDayRawDatas.Count());
|
logger.LogInformation("run sql electericArchiveDayRawDatas.Count() = " + electericArchiveDayRawDatas.Count());
|
||||||
await backgroundServiceRepository.ExecuteSql(sql, electericArchiveDayRawDatas);
|
await backgroundServiceRepository.ExecuteSql(sql, electericArchiveDayRawDatas);
|
||||||
if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1")
|
//明志 沒有mssql
|
||||||
{
|
//if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1")
|
||||||
await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electericArchiveDayRawDatas);
|
//{
|
||||||
}
|
// await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electericArchiveDayRawDatas);
|
||||||
|
//}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (waterArchiveDayRawDatas.Count() > 0)
|
if (waterArchiveDayRawDatas.Count() > 0)
|
||||||
@ -1556,7 +1563,7 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
{
|
{
|
||||||
string sql = $@"CREATE TABLE IF NOT EXISTS `archive_electric_meter_day_{dbDateName}` (
|
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,
|
`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,
|
`start_timestamp` datetime(6) NOT NULL,
|
||||||
`end_timestamp` datetime(6) NULL DEFAULT NULL,
|
`end_timestamp` datetime(6) NULL DEFAULT NULL,
|
||||||
`count_rawdata` int(11) NULL DEFAULT NULL,
|
`count_rawdata` int(11) NULL DEFAULT NULL,
|
||||||
|
@ -1016,7 +1016,7 @@ namespace BackendWorkerService.Services.Implement
|
|||||||
archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
|
archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
|
||||||
archiveRequest.PreAuthenticate = true;
|
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);
|
byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter);
|
||||||
using (Stream reqStream = archiveRequest.GetRequestStream())
|
using (Stream reqStream = archiveRequest.GetRequestStream())
|
||||||
@ -1124,19 +1124,21 @@ namespace BackendWorkerService.Services.Implement
|
|||||||
foreach (DateTime day in EachMonth(startDay , endDay))
|
foreach (DateTime day in EachMonth(startDay , endDay))
|
||||||
{
|
{
|
||||||
// 需要比原定日期增加 1天:因 Niagara 內部判斷為 < lastData, 並未包含結束當天 add by jiahao @2023-09-16
|
// 需要比原定日期增加 1天:因 Niagara 內部判斷為 < lastData, 並未包含結束當天 add by jiahao @2023-09-16
|
||||||
var dayInMonth = DateTime.DaysInMonth(day.Year, day.Month) +1;
|
//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}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'>
|
var historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
|
||||||
<abstime name='start' val='{startTimestamp}' />
|
<abstime name='start' val='{startTimestamp}' />
|
||||||
<abstime name='end' val='{endTimestamp}' />
|
<abstime name='end' val='{endTimestamp}' />
|
||||||
<reltime name='interval' val = 'PT{dayInMonth}D' />
|
<reltime name='interval' val = 'PT{dayInMonth.ToString()}D' />
|
||||||
</obj>";
|
</obj>";
|
||||||
|
|
||||||
logger.LogInformation("【ArchiveElectricMeterMonth】startTimestamp=", startTimestamp + " endTimestamp=" + endTimestamp);
|
|
||||||
|
|
||||||
string device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
|
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
|
var station = backgroundServiceRepository.GetOneAsync<string>($@"select parent_path from import_niagara_item_history where device_building_tag = '{device_number.Split("_")[1].Replace("$3", "")}' and
|
||||||
@ -1162,12 +1164,17 @@ namespace BackendWorkerService.Services.Implement
|
|||||||
archiveResponse.Dispose();
|
archiveResponse.Dispose();
|
||||||
archiveResponse.Close();
|
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);
|
xmlDocument.LoadXml(archiveResponseContent);
|
||||||
var archiveJson = JsonConvert.SerializeXmlNode(xmlDocument);
|
var archiveJson = JsonConvert.SerializeXmlNode(xmlDocument);
|
||||||
var archiveJsonResult = (JObject)JsonConvert.DeserializeObject(archiveJson);
|
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")) //抓取錯誤
|
if (archiveJsonResult.ContainsKey("err")) //抓取錯誤
|
||||||
{
|
{
|
||||||
|
@ -21,6 +21,8 @@ using Google.Protobuf.Collections;
|
|||||||
using Org.BouncyCastle.Asn1.Pkcs;
|
using Org.BouncyCastle.Asn1.Pkcs;
|
||||||
using NPOI.SS.Formula.Functions;
|
using NPOI.SS.Formula.Functions;
|
||||||
using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData;
|
using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData;
|
||||||
|
using static NPOI.HSSF.Record.PageBreakRecord;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
|
||||||
namespace FrontendWebApi.ApiControllers
|
namespace FrontendWebApi.ApiControllers
|
||||||
{
|
{
|
||||||
@ -136,7 +138,8 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
switch (input.tableType)
|
switch (input.tableType)
|
||||||
{
|
{
|
||||||
case "day": date_yyyymmdd = @$" date(aemm.start_timestamp) = {aemmStaDate}"; break;
|
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;
|
case "year": date_yyyymmdd = @$" aemm.start_timestamp >= {aemmStaDate} and aemm.end_timestamp < {aemmEndDate} "; break;
|
||||||
}
|
}
|
||||||
var sql = $@" set @i = -1;
|
var sql = $@" set @i = -1;
|
||||||
@ -445,11 +448,12 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
{
|
{
|
||||||
List<List<HydroMeterOutput>> result = new List<List<HydroMeterOutput>>();
|
List<List<HydroMeterOutput>> result = new List<List<HydroMeterOutput>>();
|
||||||
var building = backendRepository.GetAllAsync<HydroBuildList>("select * from building where deleted = 0").Result;
|
var building = backendRepository.GetAllAsync<HydroBuildList>("select * from building where deleted = 0").Result;
|
||||||
foreach(var b in building)
|
//foreach(var b in building)
|
||||||
{
|
//{
|
||||||
input.building_tag = b.building_tag;
|
// 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());
|
result.Add(this.ElectricList(input).Result.Value.Data.ToList());
|
||||||
}
|
|
||||||
List<Dictionary<string, byte[]>> docFile = new List<Dictionary<string, byte[]>>();
|
List<Dictionary<string, byte[]>> docFile = new List<Dictionary<string, byte[]>>();
|
||||||
|
|
||||||
var workbook = new XSSFWorkbook();
|
var workbook = new XSSFWorkbook();
|
||||||
@ -508,14 +512,25 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
stylein12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
|
stylein12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
stylein12.WrapText = true;
|
stylein12.WrapText = true;
|
||||||
#endregion
|
#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)
|
foreach (var r in result)
|
||||||
{
|
{
|
||||||
if (r.Count > 0)
|
if (r.Count > 0)
|
||||||
{
|
{
|
||||||
string buildingName = r.Select(x => x.building_name).FirstOrDefault();
|
string buildingName = r.Select(x => x.building_name).FirstOrDefault();
|
||||||
var sheet = workbook.CreateSheet($"{buildingName}");
|
Logger.LogInformation(@$"buildingName = {buildingName}" + Environment.NewLine);
|
||||||
int RowPosition = 0;
|
int RowPosition = 0;
|
||||||
#region set cell
|
#region set cell for columns
|
||||||
IRow row = sheet.CreateRow(RowPosition);
|
IRow row = sheet.CreateRow(RowPosition);
|
||||||
sheet.SetColumnWidth(0, 4 * 160 * 12);
|
sheet.SetColumnWidth(0, 4 * 160 * 12);
|
||||||
sheet.SetColumnWidth(1, 4 * 160 * 12);
|
sheet.SetColumnWidth(1, 4 * 160 * 12);
|
||||||
@ -616,7 +631,7 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
ms.Flush();
|
ms.Flush();
|
||||||
ms.Seek(0, SeekOrigin.Begin);
|
ms.Seek(0, SeekOrigin.Begin);
|
||||||
Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");
|
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]
|
[HttpPost]
|
||||||
@ -860,6 +875,12 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
return File(ms, "application/vnd.ms-excel", @$"電表報表{System.DateTime.Now.ToString("yyyyMMddHHmm")}.xlsx");
|
return File(ms, "application/vnd.ms-excel", @$"電表報表{System.DateTime.Now.ToString("yyyyMMddHHmm")}.xlsx");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 客製化報表 excel 匯出 - 總計不含分盤
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[Route("api/ExportElectricEachTotalCompareList")]
|
[Route("api/ExportElectricEachTotalCompareList")]
|
||||||
public FileResult OpeExportEachTotalCompareExcelElec([FromBody] HydroMeterInput input)
|
public FileResult OpeExportEachTotalCompareExcelElec([FromBody] HydroMeterInput input)
|
||||||
|
Loading…
Reference in New Issue
Block a user