1.歸檔回補機制 v1.0
2.前台 api:客製化報表 debug,設備名稱修改
This commit is contained in:
parent
3751a21273
commit
174133fec7
@ -190,7 +190,7 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
|
||||
//}
|
||||
//}
|
||||
await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Day", "任務完成");
|
||||
await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Day", "任務完成0927");
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
@ -615,25 +615,30 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
try
|
||||
{
|
||||
await task_Detail.InsertWorkTime("ArchiveElectricMeterDayJob", "Month", "水電表月任務開始");
|
||||
//var FirstDay = actionDay.AddDays(-actionDay.Day + 1);
|
||||
//var FirstDay = now.AddDays(-now.Day + 1);
|
||||
//var LastDay = now.AddMonths(1).AddDays(-now.AddMonths(1).Day);
|
||||
//var dayInMonth = DateTime.DaysInMonth(now.Year, now.Month);
|
||||
|
||||
//var FirstDay = actionDay.AddDays(-actionDay.Day + 1); // 計算出當月 1日
|
||||
//var LastDay = actionDay.AddMonths(1).AddDays(-actionDay.AddMonths(1).Day);
|
||||
var FirstDay = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-") + "01");
|
||||
var LastDay = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
|
||||
|
||||
// 需要比原定日期增加 1天:因 Niagara 內部判斷為 < lastData, 並未包含結束當天 add by jiahao @2023-09-16
|
||||
var dayInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month) + 1;
|
||||
//var FirstDay = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-") + "01");
|
||||
//var LastDay = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
|
||||
|
||||
var startTimestamp = string.Format("{0}T00:00:00.000+08:00", FirstDay.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", LastDay.ToString("yyyy-MM-dd")); // by jiahao @2023-09-16
|
||||
//// 需要比原定日期增加 1天:因 Niagara 內部判斷為 < lastData, 並未包含結束當天 add by jiahao @2023-09-16
|
||||
//var dayInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month) + 1;
|
||||
|
||||
var historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
|
||||
<abstime name='start' val='{startTimestamp}' />
|
||||
<abstime name='end' val='{endTimestamp}' />
|
||||
<reltime name='interval' val = 'PT{dayInMonth}D' />
|
||||
</obj>";
|
||||
//var startTimestamp = string.Format("{0}T00:00:00.000+08:00", FirstDay.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", LastDay.ToString("yyyy-MM-dd")); // by jiahao @2023-09-16
|
||||
|
||||
logger.LogInformation("【ArchiveElectricMeterMonth】startTimestamp=", startTimestamp + " endTimestamp=" + endTimestamp);
|
||||
//var historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
|
||||
// <abstime name='start' val='{startTimestamp}' />
|
||||
// <abstime name='end' val='{endTimestamp}' />
|
||||
// <reltime name='interval' val = 'PT{dayInMonth}D' />
|
||||
// </obj>";
|
||||
|
||||
//logger.LogInformation("【ArchiveElectricMeterMonth】startTimestamp=", startTimestamp + " endTimestamp=" + endTimestamp);
|
||||
//Stopwatch stopWatch = new Stopwatch();
|
||||
//stopWatch.Start();
|
||||
|
||||
@ -643,10 +648,10 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
|
||||
|
||||
//收集 niagara 電錶 Data
|
||||
procEletricMeterService.obixData_collect_range(xmlDocument, electricDeviceNumberPoints, obixApiConfig, encoded, startTimestamp, endTimestamp, historyQueryFilter, electricArchiveMonthRawDatas);
|
||||
procEletricMeterService.obixData_collect_range(xmlDocument, electricDeviceNumberPoints, obixApiConfig, encoded, electricArchiveMonthRawDatas);
|
||||
|
||||
//水錶結果收集
|
||||
procEletricMeterService.obixData_collect_range(xmlDocument, waterDeviceNumberPoints, obixApiConfig, encoded, startTimestamp, endTimestamp, historyQueryFilter, waterArchiveMonthRawDatas);
|
||||
procEletricMeterService.obixData_collect_range(xmlDocument, waterDeviceNumberPoints, obixApiConfig, encoded, waterArchiveMonthRawDatas);
|
||||
|
||||
//if (electricMeters.Where(e => e.Device_number == "NTPC_D8_EE_E4_RF_Total_WHT_N1").Count() == 1)
|
||||
//{
|
||||
@ -1060,6 +1065,9 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
List<Dictionary<string, object>> electericArchiveDayRawDatas = new List<Dictionary<string, object>>();
|
||||
List<Dictionary<string, object>> waterArchiveDayRawDatas = new List<Dictionary<string, object>>();
|
||||
|
||||
//異常清單
|
||||
Dictionary<string, string> dicError = new Dictionary<string, string>();
|
||||
|
||||
#region old request niagara history by obix
|
||||
//foreach (var deviceNumberPoint in electricDeviceNumberPoints)
|
||||
//{
|
||||
@ -1140,11 +1148,11 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
//}
|
||||
//電錶結果收集
|
||||
// procEletricMeterService.obixData_collect(xmlDocument, electricDeviceNumberPoints, obixApiConfig, encoded, startTimestamp, endTimestamp, historyQueryFilter, electericArchiveDayRawDatas);
|
||||
procEletricMeterService.obixData_collect(xmlDocument, electricDeviceNumberPoints, obixApiConfig, encoded, electericArchiveDayRawDatas);
|
||||
procEletricMeterService.obixData_collect(xmlDocument, electricDeviceNumberPoints, obixApiConfig, encoded, electericArchiveDayRawDatas, ref dicError);
|
||||
|
||||
//水錶結果收集
|
||||
//procEletricMeterService.obixData_collect(xmlDocument, waterDeviceNumberPoints, obixApiConfig, encoded, startTimestamp, endTimestamp, historyQueryFilter, waterArchiveDayRawDatas);
|
||||
procEletricMeterService.obixData_collect(xmlDocument, waterDeviceNumberPoints, obixApiConfig, encoded, waterArchiveDayRawDatas);
|
||||
procEletricMeterService.obixData_collect(xmlDocument, waterDeviceNumberPoints, obixApiConfig, encoded, waterArchiveDayRawDatas, ref dicError);
|
||||
|
||||
stopWatch.Stop();
|
||||
logger.LogInformation(@$"【ArchiveElectricMeterDayJob】【天歸檔】【效能檢驗】[取得資料花費時間]{stopWatch.ElapsedMilliseconds } 毫秒 資料筆數=" + electericArchiveDayRawDatas.Count() );
|
||||
@ -1289,12 +1297,25 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
|
||||
// logger.LogInformation($@"putint value NTPC_G6_EE_E4_B1F_CB3_WHT_N1 ={electricMeter.archive_lastDate} archive_lastActionDate={electricMeter.archive_lastActionDate}");
|
||||
|
||||
|
||||
//異常設備 update
|
||||
string sql2 = string.Empty;
|
||||
foreach (var kv in dicError)
|
||||
{
|
||||
sql2 += $@"update device set archive_lastDate = '{kv.Value}' where device_number = '{kv.Key}' , archive_lastActionDate = now();";
|
||||
}
|
||||
if (!string.IsNullOrEmpty(sql2))
|
||||
{
|
||||
await backgroundServiceRepository.ExecuteSql(sql2);
|
||||
}
|
||||
|
||||
logger.LogInformation("run sql electericArchiveDayRawDatas.Count() = " + electericArchiveDayRawDatas.Count());
|
||||
await backgroundServiceRepository.ExecuteSql(sql, electericArchiveDayRawDatas);
|
||||
if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1")
|
||||
{
|
||||
await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electericArchiveDayRawDatas);
|
||||
}
|
||||
|
||||
}
|
||||
if (waterArchiveDayRawDatas.Count() > 0)
|
||||
{
|
||||
|
@ -22,6 +22,7 @@ using BackendWorkerService.Quartz;
|
||||
using BackendWorkerService.Quartz.Jobs;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Org.BouncyCastle.Asn1.Pkcs;
|
||||
using NPOI.SS.Formula.Functions;
|
||||
|
||||
namespace BackendWorkerService.Services.Implement
|
||||
{
|
||||
@ -55,7 +56,8 @@ namespace BackendWorkerService.Services.Implement
|
||||
XmlDocument xmlDocument = new XmlDocument();
|
||||
var obixApiConfig = new ObixApiConfig();
|
||||
string encoded = string.Empty;
|
||||
|
||||
//異常清單
|
||||
Dictionary<string, string> dicError = new Dictionary<string, string>();
|
||||
try
|
||||
{
|
||||
//取得可錯誤次數
|
||||
@ -377,7 +379,7 @@ namespace BackendWorkerService.Services.Implement
|
||||
|
||||
if (archiveDayJsonResult.ContainsKey("obj")) //表示可以讀取到內容
|
||||
{
|
||||
var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveDayJsonResult);
|
||||
var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveDayJsonResult, ref dicError);
|
||||
if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
|
||||
{
|
||||
electricArchiveDayRawDatas.AddRange(ArrangeRawDatas);
|
||||
@ -524,7 +526,7 @@ namespace BackendWorkerService.Services.Implement
|
||||
|
||||
if (archiveDayJsonResult.ContainsKey("obj")) //表示可以讀取到內容
|
||||
{
|
||||
var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveDayJsonResult);
|
||||
var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveDayJsonResult, ref dicError);
|
||||
if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
|
||||
{
|
||||
waterArchiveDayRawDatas.AddRange(ArrangeRawDatas);
|
||||
@ -624,7 +626,7 @@ namespace BackendWorkerService.Services.Implement
|
||||
|
||||
if (archiveWeekJsonResult.ContainsKey("obj")) //表示可以讀取到內容
|
||||
{
|
||||
var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveWeekJsonResult);
|
||||
var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveWeekJsonResult, ref dicError);
|
||||
if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
|
||||
{
|
||||
electricArchiveWeekRawDatas.AddRange(ArrangeRawDatas);
|
||||
@ -715,7 +717,7 @@ namespace BackendWorkerService.Services.Implement
|
||||
|
||||
if (archiveWeekJsonResult.ContainsKey("obj")) //表示可以讀取到內容
|
||||
{
|
||||
var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveWeekJsonResult);
|
||||
var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveWeekJsonResult, ref dicError);
|
||||
if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
|
||||
{
|
||||
waterArchiveWeekRawDatas.AddRange(ArrangeRawDatas);
|
||||
@ -956,7 +958,7 @@ namespace BackendWorkerService.Services.Implement
|
||||
/// <param name="endTimestamp"></param>
|
||||
/// <param name="historyQueryFilter"></param>
|
||||
/// <param name="waterArchiveDayRawDatas"></param>
|
||||
public void obixData_collect(XmlDocument xmlDocument, List<DeviceNumberPoint> DeviceNumberPoints, ObixApiConfig obixApiConfig, string encoded, List<Dictionary<string, object>> resultArchiveDayRawDatas)
|
||||
public void obixData_collect(XmlDocument xmlDocument, List<DeviceNumberPoint> DeviceNumberPoints, ObixApiConfig obixApiConfig, string encoded, List<Dictionary<string, object>> resultArchiveDayRawDatas, ref Dictionary<string, string> dicError)
|
||||
{
|
||||
|
||||
#region 水電錶 save to DB start
|
||||
@ -975,16 +977,7 @@ namespace BackendWorkerService.Services.Implement
|
||||
|
||||
var startDay = string.Format("{0}T00:00:00.000+08:00", deviceNumberPoint.archive_lastDate.ToString("yyyy-MM-dd").Replace(" ", "T"));
|
||||
var endDay = System.DateTime.Now.ToString("yyyy-MM-dd");
|
||||
//var endTimestamp = string.Format("{0}+08:00", error_day.End_timestamp.Replace(" ", "T"));
|
||||
//if (DateTime.Parse(startTimestamp).ToString("yyyy-MM-dd") == DateTime.Parse(endTimestamp).ToString("yyyy-MM-dd"))
|
||||
//{
|
||||
// //同一天為 舊有格式 採用 endtime
|
||||
// endDay = string.Format("{0}T00:00:10.000+08:00", DateTime.Parse(endTimestamp).AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T"));
|
||||
//}
|
||||
//else
|
||||
//{ //不同天為新格式 採用 Start_timestamp
|
||||
// endDay = string.Format("{0}T00:00:10.000+08:00", DateTime.Parse(endDay).AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T"));
|
||||
//}
|
||||
|
||||
logger.LogInformation($@"before startDay = {startDay} endDay={endDay}"); // ----------- log
|
||||
|
||||
#region
|
||||
@ -1003,8 +996,8 @@ namespace BackendWorkerService.Services.Implement
|
||||
|
||||
|
||||
string historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
|
||||
<abstime name='start' val='{startDay}' />
|
||||
<abstime name='end' val='{endDay}' />
|
||||
<abstime name='start' val='{sDay}' />
|
||||
<abstime name='end' val='{eDay}' />
|
||||
<reltime name='interval' val = 'PT2D' />
|
||||
</obj>";
|
||||
string device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "");
|
||||
@ -1039,10 +1032,10 @@ namespace BackendWorkerService.Services.Implement
|
||||
xmlDocument.LoadXml(archiveResponseContent);
|
||||
var archiveJson = JsonConvert.SerializeXmlNode(xmlDocument);
|
||||
var archiveJsonResult = (JObject)JsonConvert.DeserializeObject(archiveJson);
|
||||
if (device_number == "NTPC_G6_EE_E4_B1F_CB3_WHT_N1")
|
||||
{
|
||||
logger.LogError("obixData_collect - NTPC_G6_EE_E4_B1F_CB3_WHT_N1 json = " + archiveJsonResult);
|
||||
}
|
||||
//if (device_number == "NTPC_G6_EE_E4_B1F_CB3_WHT_N1_KWH")
|
||||
//{
|
||||
// logger.LogError("obixData_collect - NTPC_G6_EE_E4_B1F_CB3_WHT_N1_KWH json = " + archiveJsonResult);
|
||||
//}
|
||||
if (archiveJsonResult.ContainsKey("err")) //抓取錯誤
|
||||
{
|
||||
//logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【取得資料失敗】");
|
||||
@ -1065,41 +1058,86 @@ namespace BackendWorkerService.Services.Implement
|
||||
archiveDayRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
||||
|
||||
resultArchiveDayRawDatas.Add(archiveDayRawData);
|
||||
if (!dicError.ContainsKey(deviceNumberPoint.DeviceNumber))
|
||||
{
|
||||
dicError.Add(deviceNumberPoint.DeviceNumber, day.ToString("yyyy-MM-dd")); //記錄異常設備與日期
|
||||
}
|
||||
}
|
||||
|
||||
if (archiveJsonResult.ContainsKey("obj")) //表示可以讀取到內容
|
||||
{
|
||||
logger.LogError("【ArchiveElectricMeterDayJob】【天歸檔】【OK】{0}", archiveJsonResult);
|
||||
var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveJsonResult);
|
||||
//logger.LogInformation("【ArchiveElectricMeterDayJob】【天歸檔】【OK】{0}", archiveJsonResult);
|
||||
|
||||
var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveJsonResult, ref dicError); // <-- 解析內容中 也有判斷是否 max == 0 的收集
|
||||
if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
|
||||
{
|
||||
logger.LogInformation(@$"obix result {deviceNumberPoint.DeviceNumber} day = {day.ToString("yyyy-MM-dd")} ArrangeRawDatas.count() = {ArrangeRawDatas.Count().ToString()}");
|
||||
resultArchiveDayRawDatas.AddRange(ArrangeRawDatas);
|
||||
}
|
||||
else {
|
||||
if (!dicError.ContainsKey(deviceNumberPoint.DeviceNumber))
|
||||
{
|
||||
dicError.Add(deviceNumberPoint.DeviceNumber, day.ToString("yyyy-MM-dd")); //記錄異常設備與日期
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
#endregion 水電錶作業 save to DB end
|
||||
|
||||
// string funish = string.Empty;
|
||||
}
|
||||
|
||||
public void obixData_collect_range(XmlDocument xmlDocument, List<DeviceNumberPoint> DeviceNumberPoints, ObixApiConfig obixApiConfig, string encoded, string startTimestamp, string endTimestamp, string historyQueryFilter, List<Dictionary<string, object>> resultArchiveDayRawDatas)
|
||||
public void obixData_collect_range(XmlDocument xmlDocument, List<DeviceNumberPoint> DeviceNumberPoints, ObixApiConfig obixApiConfig, string encoded, List<Dictionary<string, object>> resultArchiveDayRawDatas)
|
||||
{
|
||||
|
||||
//異常清單
|
||||
Dictionary<string, string> dicError = new Dictionary<string, string>(); //僅需要記錄在 day 此處不需要
|
||||
#region 水電錶 save to DB start
|
||||
// 需要先 group by DeviceNumberPoints 因為已經展開日期
|
||||
var DevicePoints = DeviceNumberPoints
|
||||
.GroupBy(x => new { _FullDeviceNumberPoint = x.FullDeviceNumberPoint })
|
||||
.Select(x => new DeviceNumberPoint { FullDeviceNumberPoint = x.Key._FullDeviceNumberPoint }).ToList();
|
||||
//var DevicePoints = DeviceNumberPoints
|
||||
// .GroupBy(x => new { _FullDeviceNumberPoint = x.FullDeviceNumberPoint })
|
||||
// .Select(x => new DeviceNumberPoint { FullDeviceNumberPoint = x.Key._FullDeviceNumberPoint }).ToList();
|
||||
|
||||
logger.LogInformation($@"before groupby DeviceNumberPoints.Count() = {DeviceNumberPoints.Count().ToString()} after DevicePoints.Count() = {DevicePoints.Count().ToString()}"); // ----------- log
|
||||
|
||||
foreach (var deviceNumberPoint in DevicePoints)
|
||||
//logger.LogInformation($@"before groupby DeviceNumberPoints.Count() = {DeviceNumberPoints.Count().ToString()} after DevicePoints.Count() = {DevicePoints.Count().ToString()}"); // ----------- log
|
||||
// string last_deviceNumber = string.Empty;
|
||||
foreach (var deviceNumberPoint in DeviceNumberPoints)
|
||||
{
|
||||
#region
|
||||
// foreach (DateTime day in EachDay(startDay, endDay))
|
||||
//if (string.IsNullOrEmpty(last_deviceNumber)) last_deviceNumber = deviceNumberPoint.DeviceNumber;
|
||||
//if (deviceNumberPoint.DeviceNumber == "NTPC_G6_EE_E4_B1F_CB3_WHT_N1")
|
||||
//{
|
||||
// logger.LogInformation($@"s1 devie_number = NTPC_G6_EE_E4_B1F_CB3_WHT_N1 archive_lastDate={deviceNumberPoint.archive_lastDate}");
|
||||
//}
|
||||
//if (deviceNumberPoint.archive_lastDate.ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd"))
|
||||
//{
|
||||
// logger.LogInformation($@" foreach (var deviceNumberPoint in DeviceNumberPoints) 判斷為今天 不用跑 deviceNumberPoint.archive_lastDate = {deviceNumberPoint.archive_lastDate} "); // ----------- log
|
||||
// continue; //如果是今天 就不要用歸檔了
|
||||
//}
|
||||
|
||||
var startDay = deviceNumberPoint.archive_lastDate.ToString("yyyy-MM-dd");
|
||||
var endDay = DateTime.Now.ToString("yyyy-MM-dd");
|
||||
|
||||
logger.LogInformation($@"before startDay = {startDay} endDay={endDay}"); // ----------- log
|
||||
|
||||
#region
|
||||
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 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 historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
|
||||
<abstime name='start' val='{startTimestamp}' />
|
||||
<abstime name='end' val='{endTimestamp}' />
|
||||
<reltime name='interval' val = 'PT{dayInMonth}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]}'
|
||||
@ -1157,20 +1195,20 @@ namespace BackendWorkerService.Services.Implement
|
||||
|
||||
if (archiveJsonResult.ContainsKey("obj")) //表示可以讀取到內容
|
||||
{
|
||||
var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveJsonResult);
|
||||
var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveJsonResult, ref dicError);
|
||||
if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
|
||||
{
|
||||
resultArchiveDayRawDatas.AddRange(ArrangeRawDatas);
|
||||
}
|
||||
}
|
||||
//}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
#endregion 水電錶作業 save to DB end
|
||||
}
|
||||
|
||||
private List<Dictionary<string, object>> ArrangeRawData(DeviceNumberPoint deviceNumberPoint, JObject jsonResult)
|
||||
private List<Dictionary<string, object>> ArrangeRawData(DeviceNumberPoint deviceNumberPoint, JObject jsonResult, ref Dictionary<string, string> dicError)
|
||||
{
|
||||
List<Dictionary<string, object>> arrangeRawDatas = new List<Dictionary<string, object>>();
|
||||
var histories = jsonResult["obj"]["list"];
|
||||
@ -1233,6 +1271,16 @@ namespace BackendWorkerService.Services.Implement
|
||||
case "max":
|
||||
var max = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
|
||||
arrangeRawData.Add("@max_rawdata", max);
|
||||
|
||||
//add by jiahao 2023-09-26
|
||||
//if (max == 0)
|
||||
//{
|
||||
// if (!dicError.ContainsKey(deviceNumberPoint.DeviceNumber))
|
||||
// {
|
||||
// dicError.Add(deviceNumberPoint.DeviceNumber, arrangeRawData["@start_timestamp"].ToString()); //記錄異常設備與日期
|
||||
// }
|
||||
//}
|
||||
|
||||
break;
|
||||
case "avg":
|
||||
var avg = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
|
||||
@ -1301,6 +1349,16 @@ namespace BackendWorkerService.Services.Implement
|
||||
case "max":
|
||||
var max = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
|
||||
arrangeRawData.Add("@max_rawdata", max);
|
||||
|
||||
//add by jiahao 2023-09-26
|
||||
//if (max == 0)
|
||||
//{
|
||||
// if (!dicError.ContainsKey(deviceNumberPoint.DeviceNumber))
|
||||
// {
|
||||
// dicError.Add(deviceNumberPoint.DeviceNumber, arrangeRawData["@start_timestamp"].ToString()); //記錄異常設備與日期
|
||||
// }
|
||||
//}
|
||||
|
||||
break;
|
||||
case "avg":
|
||||
var avg = Decimal.Parse(real["@val"].ToString(), System.Globalization.NumberStyles.Float);
|
||||
@ -1335,16 +1393,19 @@ namespace BackendWorkerService.Services.Implement
|
||||
/// <returns></returns>
|
||||
public IEnumerable<DateTime> EachDay(string from, string thru)
|
||||
{
|
||||
var strtday = DateTime.Parse(from);
|
||||
var strtday = DateTime.Parse(from).AddDays(-1); //每次重做 2天
|
||||
var endday = DateTime.Parse(thru);
|
||||
for (var day = strtday.Date; day.Date <= endday.Date; day = day.AddDays(1))
|
||||
yield return day;
|
||||
}
|
||||
|
||||
/// 使用方式
|
||||
//foreach (DateTime day in EachDay(DateTime.Parse(date1), DateTime.Parse(date2)))
|
||||
//{
|
||||
public IEnumerable<DateTime> EachMonth(string from, string thru)
|
||||
{
|
||||
var strtday = DateTime.Parse(from);
|
||||
var endday = DateTime.Parse(thru);
|
||||
for (var _month = strtday.Date; _month.Month <= endday.Month; _month = _month.AddMonths(1))
|
||||
yield return _month;
|
||||
|
||||
//}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -27,7 +27,8 @@
|
||||
//"Database": "IgYBsgG2VLKKxFb64j7LOA==", //wsp
|
||||
//"Database": "7gWfmZ28HGIJZbxEbK+0yg==", //tpe_dome_dome
|
||||
//"Database": "siTUcDaC/g2yGTMFWD72Kg==", //tpe_dome_hotel
|
||||
"Database": "Rq7Gn4x6LwBvVtl7GY8LbA==", //mcut
|
||||
//"Database": "Rq7Gn4x6LwBvVtl7GY8LbA==", //mcut
|
||||
"Database": "j9LOmjFh2/9PpuwnVB8ugqnKdBDJHx1AAT7aTWeh37E=", //ibms_mcut_online
|
||||
"Root": "SzdxEgaJJ7tcTCrUl2zKsA==",
|
||||
"Password": "FVAPxztxpY4gJJKQ/se4bQ=="
|
||||
},
|
||||
|
@ -978,12 +978,12 @@ namespace FrontendWebApi.ApiControllers
|
||||
int columnIndex = 1; // 假設第一欄是要填入的位置
|
||||
List<string> need_cal_total = new List<string>
|
||||
{
|
||||
"綜合大樓",
|
||||
"體育舘",
|
||||
"化工電機",
|
||||
"創新大樓",
|
||||
"學人會館",
|
||||
"綠能中心"
|
||||
"綜合大樓", //G6
|
||||
"體育舘", //F5
|
||||
"化工電機", //D8
|
||||
"創新大樓", //G9
|
||||
"學人會館", //B9
|
||||
"綠能中心" //$340B9
|
||||
};
|
||||
List<string> no_cal_sum_device = new List<string>
|
||||
{
|
||||
@ -992,7 +992,7 @@ namespace FrontendWebApi.ApiControllers
|
||||
"第二校區總盤",
|
||||
"薄膜分盤"
|
||||
};
|
||||
List<string> need_green_device = new List<string>
|
||||
List<string> need_green_device = new List<string> //需要綠色底色
|
||||
{
|
||||
"第一校區總盤",
|
||||
"圖資大樓總盤",
|
||||
@ -1000,8 +1000,8 @@ namespace FrontendWebApi.ApiControllers
|
||||
"電子館分盤",
|
||||
"機械館分盤",
|
||||
"電機館分盤",
|
||||
"學1-4舍空調總盤",
|
||||
"學五舍五眷總盤",
|
||||
"學1-4舍餐廳總盤", //C7
|
||||
"學5舍5眷總盤", //B4
|
||||
"8眷舍分盤",
|
||||
"企教分盤",
|
||||
"7眷舍分盤",
|
||||
@ -1017,6 +1017,14 @@ namespace FrontendWebApi.ApiControllers
|
||||
#region 特定棟別總計處理
|
||||
foreach (var item in result)
|
||||
{
|
||||
if (item.device_full_name == "NTPC_B4_EE_E4_B1F_VCB3B_WHT_N1") //學5舍5眷總盤
|
||||
{
|
||||
Console.WriteLine("here 學5舍5眷總盤 " + item.building_name);
|
||||
if (item.building_name == "學5舍5眷總盤")
|
||||
{
|
||||
Console.WriteLine("here 學5舍5眷總盤 " + item.building_name);
|
||||
}
|
||||
}
|
||||
if (!need_cal_total.Contains(item.building_name))
|
||||
{
|
||||
continue;
|
||||
@ -1115,7 +1123,19 @@ namespace FrontendWebApi.ApiControllers
|
||||
columnIndex++;
|
||||
|
||||
cell = row.GetCell(columnIndex++) ?? row.CreateCell(columnIndex++);
|
||||
|
||||
if (last_build == "化工電機")
|
||||
{
|
||||
cell.SetCellValue("化工館總計");
|
||||
}
|
||||
else if (last_build == "學人會館")
|
||||
{
|
||||
cell.SetCellValue("學人國際總計");
|
||||
}
|
||||
else {
|
||||
cell.SetCellValue(last_build + "總計");
|
||||
}
|
||||
|
||||
cell.CellStyle = greenCellStyle;
|
||||
|
||||
foreach (var timeStampData in buildingSumData[last_build])
|
||||
@ -1287,8 +1307,8 @@ order by e.report_priority, a.priority";
|
||||
"電子館分盤",
|
||||
"機械館分盤",
|
||||
"電機館分盤",
|
||||
"學1-4舍空調總盤",
|
||||
"學五舍五眷總盤",
|
||||
"學1-4舍餐廳總盤",
|
||||
"學5舍5眷總盤",
|
||||
"8眷舍分盤",
|
||||
"企教分盤",
|
||||
"7眷舍分盤",
|
||||
@ -1307,6 +1327,11 @@ order by e.report_priority, a.priority";
|
||||
foreach (var l in ResultData)
|
||||
{
|
||||
var full_name = await backendRepository.GetOneAsync<string>($"select full_name from device where device_number = '{l.device_number}'");
|
||||
//if (l.device_number == "NTPC_B4_EE_E4_B1F_VCB3B_WHT_N1")//"學5舍5眷總盤"
|
||||
//{
|
||||
// Console.WriteLine("here " + l.device_full_name);
|
||||
//}
|
||||
|
||||
if (input.Mode == HydroMeterInputSearchMode.Custom && !need_green_device.Contains(full_name))
|
||||
{
|
||||
continue;
|
||||
@ -1386,11 +1411,11 @@ order by e.report_priority, a.priority";
|
||||
apiResult.Code = "0000";
|
||||
if (input.Mode == HydroMeterInputSearchMode.All)
|
||||
{
|
||||
apiResult.Data = ResultData;
|
||||
apiResult.Data = ResultData; //含分盤
|
||||
}
|
||||
else
|
||||
{
|
||||
apiResult.Data = ResultData_custom;
|
||||
apiResult.Data = ResultData_custom; //不含分盤
|
||||
}
|
||||
}
|
||||
catch (Exception exception)
|
||||
|
@ -22,7 +22,7 @@
|
||||
//"Database": "siTUcDaC/g2yGTMFWD72Kg==", //tpe_dome_hotel
|
||||
//"Database": "iuaY0h0+TWkir44/eZLDqw==", //tpe_dome_office
|
||||
//"Database": "Rq7Gn4x6LwBvVtl7GY8LbA==", //MCUT
|
||||
"Database": "j9LOmjFh2/9PpuwnVB8ugqnKdBDJHx1AAT7aTWeh37E=",
|
||||
"Database": "j9LOmjFh2/9PpuwnVB8ugqnKdBDJHx1AAT7aTWeh37E=", // ibms_mcut_online
|
||||
"Root": "SzdxEgaJJ7tcTCrUl2zKsA==",
|
||||
"Password": "FVAPxztxpY4gJJKQ/se4bQ=="
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user