1.歸檔回補機制 v1.0

2.前台 api:客製化報表 debug,設備名稱修改
This commit is contained in:
jiahao 2023-09-27 01:37:25 +08:00
parent 3751a21273
commit 174133fec7
5 changed files with 195 additions and 87 deletions

View File

@ -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)
//{
@ -1025,7 +1030,7 @@ namespace BackendWorkerService.Quartz.Jobs
await procEletricMeterService.ArchiveData();
await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Compensate", "任務完成");
}
catch(Exception ex)
catch (Exception ex)
{
await task_Detail.WorkFail("ArchiveElectricMeterDayJob", "Compensate", ex.ToString());
logger.LogError("【ArchiveElectricMeterDayJob】【補償機制】【任務失敗】");
@ -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() );
@ -1287,7 +1295,19 @@ namespace BackendWorkerService.Quartz.Jobs
COMMIT TRANSACTION;";
// logger.LogInformation($@"putint value NTPC_G6_EE_E4_B1F_CB3_WHT_N1 ={electricMeter.archive_lastDate} archive_lastActionDate={electricMeter.archive_lastActionDate}");
// 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);
@ -1295,6 +1315,7 @@ namespace BackendWorkerService.Quartz.Jobs
{
await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electericArchiveDayRawDatas);
}
}
if (waterArchiveDayRawDatas.Count() > 0)
{

View File

@ -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;
//}
}
}

View File

@ -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=="
},

View File

@ -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++);
cell.SetCellValue(last_build + "總計");
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)

View File

@ -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=="
}