每天歸檔的資料需要先做 四捨五入

This commit is contained in:
jiahao 2023-09-19 18:41:55 +08:00
parent 48a90ece43
commit 4f762c4201
5 changed files with 431 additions and 404 deletions

View File

@ -266,9 +266,9 @@ namespace BackendWorkerService.Quartz.Jobs
var sql = $@" SET FOREIGN_KEY_CHECKS = 1; var sql = $@" SET FOREIGN_KEY_CHECKS = 1;
UPDATE archive_electric_meter_day_{dbDateName} SET UPDATE archive_electric_meter_day_{dbDateName} SET
count_rawdata = @count_rawdata, count_rawdata = @count_rawdata,
min_rawdata = @min_rawdata, min_rawdata = round(@min_rawdata, 2),
max_rawdata = @max_rawdata, max_rawdata = round(@max_rawdata, 2),
kwh_result = @max_rawdata - @min_rawdata, kwh_result = round(@max_rawdata, 2) - round(@min_rawdata, 2),
avg_rawdata = @avg_rawdata, avg_rawdata = @avg_rawdata,
sum_rawdata = @sum_rawdata, sum_rawdata = @sum_rawdata,
is_complete = @is_complete, is_complete = @is_complete,
@ -299,9 +299,9 @@ namespace BackendWorkerService.Quartz.Jobs
@start_timestamp, @start_timestamp,
@end_timestamp, @end_timestamp,
@count_rawdata, @count_rawdata,
@min_rawdata, round(@min_rawdata, 2),
@max_rawdata, round(@max_rawdata, 2) ,
@max_rawdata - @min_rawdata, round(@max_rawdata, 2) - round(@min_rawdata, 2),
@avg_rawdata, @avg_rawdata,
@sum_rawdata, @sum_rawdata,
@is_complete, @is_complete,
@ -351,9 +351,9 @@ namespace BackendWorkerService.Quartz.Jobs
UPDATE archive_electric_meter_day_{dbDateName} SET UPDATE archive_electric_meter_day_{dbDateName} SET
count_rawdata = @count_rawdata, count_rawdata = @count_rawdata,
min_rawdata = @min_rawdata, min_rawdata = round(@min_rawdata, 2),
max_rawdata = @max_rawdata, max_rawdata = round(@max_rawdata, 2) ,
kwh_result = @max_rawdata - @min_rawdata, kwh_result = round(@max_rawdata, 2) - round(@min_rawdata, 2),
avg_rawdata = @avg_rawdata, avg_rawdata = @avg_rawdata,
sum_rawdata = @sum_rawdata, sum_rawdata = @sum_rawdata,
is_complete = @is_complete, is_complete = @is_complete,
@ -386,9 +386,9 @@ namespace BackendWorkerService.Quartz.Jobs
@start_timestamp, @start_timestamp,
@end_timestamp, @end_timestamp,
@count_rawdata, @count_rawdata,
@min_rawdata, round(@min_rawdata, 2),
@max_rawdata, round(@max_rawdata, 2) ,
@max_rawdata - @min_rawdata round(@max_rawdata, 2) - round(@min_rawdata, 2),
@avg_rawdata, @avg_rawdata,
@sum_rawdata, @sum_rawdata,
@is_complete, @is_complete,
@ -602,400 +602,400 @@ namespace BackendWorkerService.Quartz.Jobs
#endregion #endregion
#region #region
if (await task_Detail.GetNeedWorkTask("ArchiveElectricMeterDayJob", "Week")) //if (await task_Detail.GetNeedWorkTask("ArchiveElectricMeterDayJob", "Week"))
{ //{
try // try
{ // {
await task_Detail.InsertWorkTime("ArchiveElectricMeterDayJob", "Week", "水電表周任務開始"); // await task_Detail.InsertWorkTime("ArchiveElectricMeterDayJob", "Week", "水電表周任務開始");
int week = Convert.ToInt32(actionDay.DayOfWeek); // int week = Convert.ToInt32(actionDay.DayOfWeek);
week = week == 0 ? 7 : week; // week = week == 0 ? 7 : week;
var startTimestamp = string.Format("{0}T00:00:00.000+08:00", actionDay.AddDays(1 - week).ToString("yyyy-MM-dd")); // var startTimestamp = string.Format("{0}T00:00:00.000+08:00", actionDay.AddDays(1 - week).ToString("yyyy-MM-dd"));
//var endTimestamp = string.Format("{0}T23:59:59.000+08:00", actionDay.AddDays(7 - week).ToString("yyyy-MM-dd")); // //var endTimestamp = string.Format("{0}T23:59:59.000+08:00", actionDay.AddDays(7 - week).ToString("yyyy-MM-dd"));
var endTimestamp = string.Format("{0}T00:00:01.000+08:00", actionDay.AddDays(7 - week).ToString("yyyy-MM-dd")); // var endTimestamp = string.Format("{0}T00:00:01.000+08:00", actionDay.AddDays(7 - week).ToString("yyyy-MM-dd"));
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 = 'PT8D' /> // <reltime name='interval' val = 'PT8D' />
</obj>"; // </obj>";
//Stopwatch stopWatch = new Stopwatch(); // //Stopwatch stopWatch = new Stopwatch();
//stopWatch.Start(); // //stopWatch.Start();
//抓取每個設備的資料 // //抓取每個設備的資料
List<Dictionary<string, object>> electricArchiveWeekRawDatas = new List<Dictionary<string, object>>(); // List<Dictionary<string, object>> electricArchiveWeekRawDatas = new List<Dictionary<string, object>>();
List<Dictionary<string, object>> waterArchiveWeekRawDatas = new List<Dictionary<string, object>>(); // List<Dictionary<string, object>> waterArchiveWeekRawDatas = new List<Dictionary<string, object>>();
//電錶結果收集 // //電錶結果收集
procEletricMeterService.obixData_collect(xmlDocument, electricDeviceNumberPoints, obixApiConfig, encoded, startTimestamp, endTimestamp, historyQueryFilter, electricArchiveWeekRawDatas); // procEletricMeterService.obixData_collect(xmlDocument, electricDeviceNumberPoints, obixApiConfig, encoded, startTimestamp, endTimestamp, historyQueryFilter, electricArchiveWeekRawDatas);
//水錶結果收集 // //水錶結果收集
procEletricMeterService.obixData_collect(xmlDocument, waterDeviceNumberPoints, obixApiConfig, encoded, startTimestamp, endTimestamp, historyQueryFilter, waterArchiveWeekRawDatas); // procEletricMeterService.obixData_collect(xmlDocument, waterDeviceNumberPoints, obixApiConfig, encoded, startTimestamp, endTimestamp, historyQueryFilter, waterArchiveWeekRawDatas);
#region old request niagara obix data // #region old request niagara obix data
//foreach (var deviceNumberPoint in electricDeviceNumberPoints) // //foreach (var deviceNumberPoint in electricDeviceNumberPoints)
//{ // //{
// device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", ""); // // 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
// device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' // // device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}'
// and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' // // and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}'
// and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}' // // and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}'
// and device_point_name = '{device_number.Split("_")[8]}'").Result; // // and device_point_name = '{device_number.Split("_")[8]}'").Result;
// if (string.IsNullOrEmpty(station)) // // if (string.IsNullOrEmpty(station))
// { // // {
// continue; // // continue;
// } // // }
// archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/"); // // archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
// //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/"); // // //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
// archiveRequest.Method = "POST"; // // archiveRequest.Method = "POST";
// archiveRequest.Headers.Add("Authorization", "Basic " + encoded); // // archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
// archiveRequest.PreAuthenticate = true; // // archiveRequest.PreAuthenticate = true;
// byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter); // // byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter);
// using (Stream reqStream = archiveRequest.GetRequestStream()) // // using (Stream reqStream = archiveRequest.GetRequestStream())
// { // // {
// reqStream.Write(byteArray, 0, byteArray.Length); // // reqStream.Write(byteArray, 0, byteArray.Length);
// } // // }
// archiveResponse = (HttpWebResponse)archiveRequest.GetResponse(); // // archiveResponse = (HttpWebResponse)archiveRequest.GetResponse();
// archiveResponseContent = new StreamReader(archiveResponse.GetResponseStream()).ReadToEnd(); // // archiveResponseContent = new StreamReader(archiveResponse.GetResponseStream()).ReadToEnd();
// archiveResponse.Dispose(); // // archiveResponse.Dispose();
// archiveResponse.Close(); // // archiveResponse.Close();
// xmlDocument.LoadXml(archiveResponseContent); // // xmlDocument.LoadXml(archiveResponseContent);
// archiveJson = JsonConvert.SerializeXmlNode(xmlDocument); // // archiveJson = JsonConvert.SerializeXmlNode(xmlDocument);
// archiveJsonResult = (JObject)JsonConvert.DeserializeObject(archiveJson); // // archiveJsonResult = (JObject)JsonConvert.DeserializeObject(archiveJson);
// if (archiveJsonResult.ContainsKey("err")) //抓取錯誤 // // if (archiveJsonResult.ContainsKey("err")) //抓取錯誤
// { // // {
// //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】"); // // //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】");
// //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】[錯誤內容]{0}", archiveWeekJsonResult); // // //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】[錯誤內容]{0}", archiveWeekJsonResult);
// Dictionary<string, object> archiveWeekRawData = new Dictionary<string, object>(); // // Dictionary<string, object> archiveWeekRawData = new Dictionary<string, object>();
// archiveWeekRawData.Add("@device_number", deviceNumberPoint.DeviceNumber); // // archiveWeekRawData.Add("@device_number", deviceNumberPoint.DeviceNumber);
// archiveWeekRawData.Add("@point", deviceNumberPoint.Point); // // archiveWeekRawData.Add("@point", deviceNumberPoint.Point);
// archiveWeekRawData.Add("@start_timestamp", startTimestamp.Replace("T", " ").Substring(0, 19)); // // archiveWeekRawData.Add("@start_timestamp", startTimestamp.Replace("T", " ").Substring(0, 19));
// archiveWeekRawData.Add("@end_timestamp", endTimestamp.Replace("T", " ").Substring(0, 19)); // // archiveWeekRawData.Add("@end_timestamp", endTimestamp.Replace("T", " ").Substring(0, 19));
// archiveWeekRawData.Add("@is_complete", 0); // // archiveWeekRawData.Add("@is_complete", 0);
// archiveWeekRawData.Add("@repeat_times", 0); // // archiveWeekRawData.Add("@repeat_times", 0);
// archiveWeekRawData.Add("@fail_reason", archiveJson); // // archiveWeekRawData.Add("@fail_reason", archiveJson);
// archiveWeekRawData.Add("@count_rawdata", 0); // // archiveWeekRawData.Add("@count_rawdata", 0);
// archiveWeekRawData.Add("@min_rawdata", 0); // // archiveWeekRawData.Add("@min_rawdata", 0);
// archiveWeekRawData.Add("@max_rawdata", 0); // // archiveWeekRawData.Add("@max_rawdata", 0);
// archiveWeekRawData.Add("@avg_rawdata", 0); // // archiveWeekRawData.Add("@avg_rawdata", 0);
// archiveWeekRawData.Add("@sum_rawdata", 0); // // archiveWeekRawData.Add("@sum_rawdata", 0);
// archiveWeekRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); // // archiveWeekRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
// electricArchiveWeekRawDatas.Add(archiveWeekRawData); // // electricArchiveWeekRawDatas.Add(archiveWeekRawData);
// } // // }
// if (archiveJsonResult.ContainsKey("obj")) //表示可以讀取到內容 // // if (archiveJsonResult.ContainsKey("obj")) //表示可以讀取到內容
// { // // {
// var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveJsonResult); // // var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveJsonResult);
// if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0) // // if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
// { // // {
// electricArchiveWeekRawDatas.AddRange(ArrangeRawDatas); // // electricArchiveWeekRawDatas.AddRange(ArrangeRawDatas);
// } // // }
// } // // }
//} // //}
//foreach (var deviceNumberPoint in waterDeviceNumberPoints) // //foreach (var deviceNumberPoint in waterDeviceNumberPoints)
//{ // //{
// device_number = deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", ""); // // 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
// device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}' // // device_system_tag = '{device_number.Split("_")[2]}' and device_name_tag = '{device_number.Split("_")[3]}'
// and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}' // // and device_floor_tag = '{device_number.Split("_")[4]}' and device_master_tag = '{device_number.Split("_")[5]}'
// and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}' // // and device_last_name_tag = '{device_number.Split("_")[6]}' and device_serial_tag = '{device_number.Split("_")[7]}'
// and device_point_name = '{device_number.Split("_")[8]}'").Result; // // and device_point_name = '{device_number.Split("_")[8]}'").Result;
// archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/"); // // archiveRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/{deviceNumberPoint.FullDeviceNumberPoint.Replace("$3", "")}/~historyRollup/");
// //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/"); // // //HttpWebRequest archiveWeekRequest = (HttpWebRequest)WebRequest.Create($"{obixApiConfig.ApiBase}obix/histories/{station}/H_E1_B1F_MVCB_MVCBH_V1/~historyRollup/");
// archiveRequest.Method = "POST"; // // archiveRequest.Method = "POST";
// archiveRequest.Headers.Add("Authorization", "Basic " + encoded); // // archiveRequest.Headers.Add("Authorization", "Basic " + encoded);
// archiveRequest.PreAuthenticate = true; // // archiveRequest.PreAuthenticate = true;
// byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter); // // byte[] byteArray = Encoding.UTF8.GetBytes(historyQueryFilter);
// using (Stream reqStream = archiveRequest.GetRequestStream()) // // using (Stream reqStream = archiveRequest.GetRequestStream())
// { // // {
// reqStream.Write(byteArray, 0, byteArray.Length); // // reqStream.Write(byteArray, 0, byteArray.Length);
// } // // }
// archiveResponse = (HttpWebResponse)archiveRequest.GetResponse(); // // archiveResponse = (HttpWebResponse)archiveRequest.GetResponse();
// archiveResponseContent = new StreamReader(archiveResponse.GetResponseStream()).ReadToEnd(); // // archiveResponseContent = new StreamReader(archiveResponse.GetResponseStream()).ReadToEnd();
// archiveResponse.Dispose(); // // archiveResponse.Dispose();
// archiveResponse.Close(); // // archiveResponse.Close();
// xmlDocument.LoadXml(archiveResponseContent); // // xmlDocument.LoadXml(archiveResponseContent);
// archiveJson = JsonConvert.SerializeXmlNode(xmlDocument); // // archiveJson = JsonConvert.SerializeXmlNode(xmlDocument);
// archiveJsonResult = (JObject)JsonConvert.DeserializeObject(archiveJson); // // archiveJsonResult = (JObject)JsonConvert.DeserializeObject(archiveJson);
// if (archiveJsonResult.ContainsKey("err")) //抓取錯誤 // // if (archiveJsonResult.ContainsKey("err")) //抓取錯誤
// { // // {
// //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】"); // // //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】");
// //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】[錯誤內容]{0}", archiveWeekJsonResult); // // //logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【取得資料失敗】[錯誤內容]{0}", archiveWeekJsonResult);
// Dictionary<string, object> archiveWeekRawData = new Dictionary<string, object>(); // // Dictionary<string, object> archiveWeekRawData = new Dictionary<string, object>();
// archiveWeekRawData.Add("@device_number", deviceNumberPoint.DeviceNumber); // // archiveWeekRawData.Add("@device_number", deviceNumberPoint.DeviceNumber);
// archiveWeekRawData.Add("@point", deviceNumberPoint.Point); // // archiveWeekRawData.Add("@point", deviceNumberPoint.Point);
// archiveWeekRawData.Add("@start_timestamp", startTimestamp.Replace("T", " ").Substring(0, 19)); // // archiveWeekRawData.Add("@start_timestamp", startTimestamp.Replace("T", " ").Substring(0, 19));
// archiveWeekRawData.Add("@end_timestamp", endTimestamp.Replace("T", " ").Substring(0, 19)); // // archiveWeekRawData.Add("@end_timestamp", endTimestamp.Replace("T", " ").Substring(0, 19));
// archiveWeekRawData.Add("@is_complete", 0); // // archiveWeekRawData.Add("@is_complete", 0);
// archiveWeekRawData.Add("@repeat_times", 0); // // archiveWeekRawData.Add("@repeat_times", 0);
// archiveWeekRawData.Add("@fail_reason", archiveJson); // // archiveWeekRawData.Add("@fail_reason", archiveJson);
// archiveWeekRawData.Add("@count_rawdata", 0); // // archiveWeekRawData.Add("@count_rawdata", 0);
// archiveWeekRawData.Add("@min_rawdata", 0); // // archiveWeekRawData.Add("@min_rawdata", 0);
// archiveWeekRawData.Add("@max_rawdata", 0); // // archiveWeekRawData.Add("@max_rawdata", 0);
// archiveWeekRawData.Add("@avg_rawdata", 0); // // archiveWeekRawData.Add("@avg_rawdata", 0);
// archiveWeekRawData.Add("@sum_rawdata", 0); // // archiveWeekRawData.Add("@sum_rawdata", 0);
// archiveWeekRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); // // archiveWeekRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
// waterArchiveWeekRawDatas.Add(archiveWeekRawData); // // waterArchiveWeekRawDatas.Add(archiveWeekRawData);
// } // // }
// if (archiveJsonResult.ContainsKey("obj")) //表示可以讀取到內容 // // if (archiveJsonResult.ContainsKey("obj")) //表示可以讀取到內容
// { // // {
// var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveJsonResult); // // var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveJsonResult);
// if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0) // // if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
// { // // {
// waterArchiveWeekRawDatas.AddRange(ArrangeRawDatas); // // waterArchiveWeekRawDatas.AddRange(ArrangeRawDatas);
// } // // }
// } // // }
//} // //}
#endregion // #endregion
//stopWatch.Stop(); // //stopWatch.Stop();
//logger.LogInformation("【ArchiveElectricMeterDayJob】【週歸檔】【效能檢驗】[取得資料花費時間]{0} 毫秒", stopWatch.ElapsedMilliseconds); // //logger.LogInformation("【ArchiveElectricMeterDayJob】【週歸檔】【效能檢驗】[取得資料花費時間]{0} 毫秒", stopWatch.ElapsedMilliseconds);
if (electricArchiveWeekRawDatas.Count() > 0) // if (electricArchiveWeekRawDatas.Count() > 0)
{ // {
var sql = $@" // var sql = $@"
UPDATE archive_electric_meter_week SET // UPDATE archive_electric_meter_week SET
count_rawdata = @count_rawdata, // count_rawdata = @count_rawdata,
min_rawdata = round(@min_rawdata, 2) // min_rawdata = round(@min_rawdata, 2)
max_rawdata = round(@max_rawdata, 2) // max_rawdata = round(@max_rawdata, 2)
kwh_result = round(@max_rawdata, 2) - round(@min_rawdata, 2), // kwh_result = round(@max_rawdata, 2) - round(@min_rawdata, 2),
avg_rawdata = @avg_rawdata, // avg_rawdata = @avg_rawdata,
sum_rawdata = @sum_rawdata, // sum_rawdata = @sum_rawdata,
is_complete = @is_complete, // is_complete = @is_complete,
repeat_times = @repeat_times, // repeat_times = @repeat_times,
fail_reason = @fail_reason, // fail_reason = @fail_reason,
updated_at = @updated_at // updated_at = @updated_at
WHERE device_number = @device_number // WHERE device_number = @device_number
AND point = @point // AND point = @point
AND start_timestamp = @start_timestamp; // AND start_timestamp = @start_timestamp;
INSERT INTO archive_electric_meter_week ( // INSERT INTO archive_electric_meter_week (
device_number, // device_number,
point, // point,
start_timestamp, // start_timestamp,
end_timestamp, // end_timestamp,
count_rawdata, // count_rawdata,
min_rawdata, // min_rawdata,
max_rawdata, // max_rawdata,
kwh_result, // kwh_result,
avg_rawdata, // avg_rawdata,
sum_rawdata, // sum_rawdata,
is_complete, // is_complete,
repeat_times, // repeat_times,
fail_reason) // fail_reason)
SELECT // SELECT
@device_number, // @device_number,
@point, // @point,
@start_timestamp, // @start_timestamp,
@end_timestamp, // @end_timestamp,
@count_rawdata, // @count_rawdata,
round(@min_rawdata, 2), // round(@min_rawdata, 2),
round(@max_rawdata, 2), // round(@max_rawdata, 2),
round(@max_rawdata, 2) - round(@min_rawdata, 2), // round(@max_rawdata, 2) - round(@min_rawdata, 2),
@avg_rawdata, // @avg_rawdata,
@sum_rawdata, // @sum_rawdata,
@is_complete, // @is_complete,
@repeat_times, // @repeat_times,
@fail_reason // @fail_reason
WHERE ROW_COUNT() = 0; // WHERE ROW_COUNT() = 0;
"; // ";
var mySql = $@"BEGIN TRANSACTION; // var mySql = $@"BEGIN TRANSACTION;
UPDATE archive_electric_meter_week SET // UPDATE archive_electric_meter_week SET
count_rawdata = @count_rawdata, // count_rawdata = @count_rawdata,
min_rawdata = round(@min_rawdata, 2), // min_rawdata = round(@min_rawdata, 2),
max_rawdata = round(@max_rawdata, 2), // max_rawdata = round(@max_rawdata, 2),
kwh_result = round(@min_rawdata, 2) - round(@max_rawdata, 2), // kwh_result = round(@min_rawdata, 2) - round(@max_rawdata, 2),
avg_rawdata = @avg_rawdata, // avg_rawdata = @avg_rawdata,
sum_rawdata = @sum_rawdata, // sum_rawdata = @sum_rawdata,
is_complete = @is_complete, // is_complete = @is_complete,
repeat_times = @repeat_times, // repeat_times = @repeat_times,
fail_reason = @fail_reason, // fail_reason = @fail_reason,
updated_at = @updated_at // updated_at = @updated_at
WHERE device_number = @device_number // WHERE device_number = @device_number
AND point = @point // AND point = @point
AND start_timestamp = @start_timestamp; // AND start_timestamp = @start_timestamp;
IF @@ROWCOUNT = 0 // IF @@ROWCOUNT = 0
BEGIN // BEGIN
INSERT INTO archive_electric_meter_week ( // INSERT INTO archive_electric_meter_week (
device_number, // device_number,
point, // point,
start_timestamp, // start_timestamp,
end_timestamp, // end_timestamp,
count_rawdata, // count_rawdata,
min_rawdata, // min_rawdata,
max_rawdata, // max_rawdata,
kwh_result, // kwh_result,
avg_rawdata, // avg_rawdata,
sum_rawdata, // sum_rawdata,
is_complete, // is_complete,
repeat_times, // repeat_times,
fail_reason) // fail_reason)
VALUES ( // VALUES (
@device_number, // @device_number,
@point, // @point,
@start_timestamp, // @start_timestamp,
@end_timestamp, // @end_timestamp,
@count_rawdata, // @count_rawdata,
round(@min_rawdata, 2), // round(@min_rawdata, 2),
round(@max_rawdata, 2), // round(@max_rawdata, 2),
round(@max_rawdata, 2) - round(@min_rawdata, 2), // round(@max_rawdata, 2) - round(@min_rawdata, 2),
@avg_rawdata, // @avg_rawdata,
@sum_rawdata, // @sum_rawdata,
@is_complete, // @is_complete,
@repeat_times, // @repeat_times,
@fail_reason) // @fail_reason)
END // END
COMMIT TRANSACTION;"; // COMMIT TRANSACTION;";
await backgroundServiceRepository.ExecuteSql(sql, electricArchiveWeekRawDatas); // await backgroundServiceRepository.ExecuteSql(sql, electricArchiveWeekRawDatas);
if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") // if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1")
{ // {
await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electricArchiveWeekRawDatas); // await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electricArchiveWeekRawDatas);
} // }
} // }
if (waterArchiveWeekRawDatas.Count() > 0) // if (waterArchiveWeekRawDatas.Count() > 0)
{ // {
var sql = $@" UPDATE archive_water_meter_week SET // var sql = $@" UPDATE archive_water_meter_week SET
count_rawdata = @count_rawdata, // count_rawdata = @count_rawdata,
min_rawdata = round(@min_rawdata, 2), // min_rawdata = round(@min_rawdata, 2),
max_rawdata = round(@max_rawdata, 2), // max_rawdata = round(@max_rawdata, 2),
kwh_result = round(@min_rawdata, 2) - round(@max_rawdata, 2), // kwh_result = round(@min_rawdata, 2) - round(@max_rawdata, 2),
avg_rawdata = @avg_rawdata, // avg_rawdata = @avg_rawdata,
sum_rawdata = @sum_rawdata, // sum_rawdata = @sum_rawdata,
is_complete = @is_complete, // is_complete = @is_complete,
repeat_times = @repeat_times, // repeat_times = @repeat_times,
fail_reason = @fail_reason, // fail_reason = @fail_reason,
updated_at = @updated_at // updated_at = @updated_at
WHERE device_number = @device_number // WHERE device_number = @device_number
AND point = @point // AND point = @point
AND start_timestamp = @start_timestamp; // AND start_timestamp = @start_timestamp;
INSERT INTO archive_water_meter_week ( // INSERT INTO archive_water_meter_week (
device_number, // device_number,
point, // point,
start_timestamp, // start_timestamp,
end_timestamp, // end_timestamp,
count_rawdata, // count_rawdata,
min_rawdata, // min_rawdata,
max_rawdata, // max_rawdata,
kwh_result, // kwh_result,
avg_rawdata, // avg_rawdata,
sum_rawdata, // sum_rawdata,
is_complete, // is_complete,
repeat_times, // repeat_times,
fail_reason) // fail_reason)
SELECT // SELECT
@device_number, // @device_number,
@point, // @point,
@start_timestamp, // @start_timestamp,
@end_timestamp, // @end_timestamp,
@count_rawdata, // @count_rawdata,
round(@min_rawdata, 2), // round(@min_rawdata, 2),
round(@max_rawdata, 2), // round(@max_rawdata, 2),
round(@max_rawdata, 2) - round(@min_rawdata, 2), // round(@max_rawdata, 2) - round(@min_rawdata, 2),
@avg_rawdata, // @avg_rawdata,
@sum_rawdata, // @sum_rawdata,
@is_complete, // @is_complete,
@repeat_times, // @repeat_times,
@fail_reason // @fail_reason
WHERE ROW_COUNT() = 0; // WHERE ROW_COUNT() = 0;
"; // ";
var mySql = $@"BEGIN TRANSACTION; // var mySql = $@"BEGIN TRANSACTION;
UPDATE archive_water_meter_week SET // UPDATE archive_water_meter_week SET
count_rawdata = @count_rawdata, // count_rawdata = @count_rawdata,
min_rawdata = round(@min_rawdata, 2), // min_rawdata = round(@min_rawdata, 2),
max_rawdata = round(@max_rawdata, 2), // max_rawdata = round(@max_rawdata, 2),
kwh_result = round(@max_rawdata, 2) - round(@min_rawdata, 2), // kwh_result = round(@max_rawdata, 2) - round(@min_rawdata, 2),
avg_rawdata = @avg_rawdata, // avg_rawdata = @avg_rawdata,
sum_rawdata = @sum_rawdata, // sum_rawdata = @sum_rawdata,
is_complete = @is_complete, // is_complete = @is_complete,
repeat_times = @repeat_times, // repeat_times = @repeat_times,
fail_reason = @fail_reason, // fail_reason = @fail_reason,
updated_at = @updated_at // updated_at = @updated_at
WHERE device_number = @device_number // WHERE device_number = @device_number
AND point = @point // AND point = @point
AND start_timestamp = @start_timestamp; // AND start_timestamp = @start_timestamp;
IF @@ROWCOUNT = 0 // IF @@ROWCOUNT = 0
BEGIN // BEGIN
INSERT INTO archive_water_meter_week ( // INSERT INTO archive_water_meter_week (
device_number, // device_number,
point, // point,
start_timestamp, // start_timestamp,
end_timestamp, // end_timestamp,
count_rawdata, // count_rawdata,
min_rawdata, // min_rawdata,
max_rawdata, // max_rawdata,
kwh_result, // kwh_result,
avg_rawdata, // avg_rawdata,
sum_rawdata, // sum_rawdata,
is_complete, // is_complete,
repeat_times, // repeat_times,
fail_reason) // fail_reason)
VALUES ( // VALUES (
@device_number, // @device_number,
@point, // @point,
@start_timestamp, // @start_timestamp,
@end_timestamp, // @end_timestamp,
@count_rawdata, // @count_rawdata,
round(@min_rawdata,2) , // round(@min_rawdata,2) ,
round(@max_rawdata,2) , // round(@max_rawdata,2) ,
round(@max_rawdata, 2) - round(@min_rawdata, 2), // round(@max_rawdata, 2) - round(@min_rawdata, 2),
@avg_rawdata, // @avg_rawdata,
@sum_rawdata, // @sum_rawdata,
@is_complete, // @is_complete,
@repeat_times, // @repeat_times,
@fail_reason) // @fail_reason)
END // END
COMMIT TRANSACTION;"; // COMMIT TRANSACTION;";
await backgroundServiceRepository.ExecuteSql(sql, waterArchiveWeekRawDatas); // await backgroundServiceRepository.ExecuteSql(sql, waterArchiveWeekRawDatas);
if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") // if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1")
{ // {
await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveWeekRawDatas); // await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveWeekRawDatas);
} // }
} // }
await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Week", "任務完成"); // await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Week", "任務完成");
} // }
catch (Exception exception) // catch (Exception exception)
{ // {
await task_Detail.WorkFail("ArchiveElectricMeterDayJob", "Week", exception.ToString()); // await task_Detail.WorkFail("ArchiveElectricMeterDayJob", "Week", exception.ToString());
logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【任務失敗】"); // logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【任務失敗】");
logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【任務失敗】[Exception]{0}", exception.ToString()); // logger.LogError("【ArchiveElectricMeterDayJob】【週歸檔】【任務失敗】[Exception]{0}", exception.ToString());
} // }
finally // finally
{ // {
if (archiveResponse != null) // if (archiveResponse != null)
{ // {
archiveResponse.Dispose(); // archiveResponse.Dispose();
archiveResponse.Close(); // archiveResponse.Close();
} // }
} // }
} //}
#endregion #endregion
#region #region

View File

@ -306,9 +306,17 @@ namespace BackendWorkerService.Services.Implement
//var startTimestamp = string.Format("{0}+08:00", error_day.Start_timestamp.Replace(" ", "T")); //var startTimestamp = string.Format("{0}+08:00", error_day.Start_timestamp.Replace(" ", "T"));
//var startTimestamp = string.Format("{0}+08:00", DateTime.Parse(error_day.Start_timestamp).ToString("yyyy-MM-dd").Replace(" ", "T")); //var startTimestamp = string.Format("{0}+08:00", DateTime.Parse(error_day.Start_timestamp).ToString("yyyy-MM-dd").Replace(" ", "T"));
var startTimestamp = string.Format("{0}T00:00:00.000+08:00", DateTime.Parse(error_day.Start_timestamp).ToString("yyyy-MM-dd").Replace(" ", "T")); var startTimestamp = string.Format("{0}T00:00:00.000+08:00", DateTime.Parse(error_day.Start_timestamp).ToString("yyyy-MM-dd").Replace(" ", "T"));
var endTimestamp = "";
//var endTimestamp = string.Format("{0}+08:00", error_day.End_timestamp.Replace(" ", "T")); //var endTimestamp = string.Format("{0}+08:00", error_day.End_timestamp.Replace(" ", "T"));
var endTimestamp = string.Format("{0}T00:00:10.000+08:00", DateTime.Parse(error_day.End_timestamp).AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T")); if (DateTime.Parse(error_day.Start_timestamp).ToString("yyyy-MM-dd") == DateTime.Parse(error_day.End_timestamp).ToString("yyyy-MM-dd"))
{
//同一天為 舊有格式 採用 endtime
endTimestamp = string.Format("{0}T00:00:10.000+08:00", DateTime.Parse(error_day.End_timestamp).AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T"));
}
else
{ //不同天為新格式 採用 Start_timestamp
endTimestamp = string.Format("{0}T00:00:10.000+08:00", DateTime.Parse(error_day.Start_timestamp).AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T"));
}
var historyQueryFilter = $@"<obj is='obix: HistoryFilter'> var historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
<abstime name='start' val='{startTimestamp}' /> <abstime name='start' val='{startTimestamp}' />
@ -334,41 +342,51 @@ namespace BackendWorkerService.Services.Implement
reqStream.Write(byteArray, 0, byteArray.Length); reqStream.Write(byteArray, 0, byteArray.Length);
} }
HttpWebResponse archiveDayResponse = (HttpWebResponse)archiveDayRequest.GetResponse(); try
var archiveDayResponseContent = new StreamReader(archiveDayResponse.GetResponseStream()).ReadToEnd();
xmlDocument.LoadXml(archiveDayResponseContent);
string archiveDayJson = JsonConvert.SerializeXmlNode(xmlDocument);
JObject archiveDayJsonResult = (JObject)JsonConvert.DeserializeObject(archiveDayJson);
if (archiveDayJsonResult.ContainsKey("err")) //抓取錯誤
{ {
Dictionary<string, object> archiveDayRawData = new Dictionary<string, object>(); HttpWebResponse archiveDayResponse = (HttpWebResponse)archiveDayRequest.GetResponse();
archiveDayRawData.Add("@device_number", error_day.Device_number); var archiveDayResponseContent = new StreamReader(archiveDayResponse.GetResponseStream()).ReadToEnd();
archiveDayRawData.Add("@point", error_day.Point);
archiveDayRawData.Add("@start_timestamp", DateTime.Parse(error_day.Start_timestamp, System.Globalization.CultureInfo.CurrentCulture));
archiveDayRawData.Add("@end_timestamp", DateTime.Parse(error_day.End_timestamp, System.Globalization.CultureInfo.CurrentCulture));
archiveDayRawData.Add("@is_complete", 0);
archiveDayRawData.Add("@repeat_times", ++error_day.Repeat_times);
archiveDayRawData.Add("@fail_reason", archiveDayJson);
archiveDayRawData.Add("@count_rawdata", 0); xmlDocument.LoadXml(archiveDayResponseContent);
archiveDayRawData.Add("@min_rawdata", 0); string archiveDayJson = JsonConvert.SerializeXmlNode(xmlDocument);
archiveDayRawData.Add("@max_rawdata", 0);
archiveDayRawData.Add("@avg_rawdata", 0);
archiveDayRawData.Add("@sum_rawdata", 0);
archiveDayRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
electricArchiveDayRawDatas.Add(archiveDayRawData); // logger.LogInformation( Environment.NewLine + " json = " + archiveDayJson + Environment.NewLine);
}
if (archiveDayJsonResult.ContainsKey("obj")) //表示可以讀取到內容 JObject archiveDayJsonResult = (JObject)JsonConvert.DeserializeObject(archiveDayJson);
{ if (archiveDayJsonResult.ContainsKey("err")) //抓取錯誤
var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveDayJsonResult);
if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
{ {
electricArchiveDayRawDatas.AddRange(ArrangeRawDatas); Dictionary<string, object> archiveDayRawData = new Dictionary<string, object>();
archiveDayRawData.Add("@device_number", error_day.Device_number);
archiveDayRawData.Add("@point", error_day.Point);
archiveDayRawData.Add("@start_timestamp", DateTime.Parse(error_day.Start_timestamp, System.Globalization.CultureInfo.CurrentCulture));
archiveDayRawData.Add("@end_timestamp", DateTime.Parse(error_day.End_timestamp, System.Globalization.CultureInfo.CurrentCulture));
archiveDayRawData.Add("@is_complete", 0);
archiveDayRawData.Add("@repeat_times", ++error_day.Repeat_times);
archiveDayRawData.Add("@fail_reason", archiveDayJson);
archiveDayRawData.Add("@count_rawdata", 0);
archiveDayRawData.Add("@min_rawdata", 0);
archiveDayRawData.Add("@max_rawdata", 0);
archiveDayRawData.Add("@avg_rawdata", 0);
archiveDayRawData.Add("@sum_rawdata", 0);
archiveDayRawData.Add("@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
electricArchiveDayRawDatas.Add(archiveDayRawData);
} }
if (archiveDayJsonResult.ContainsKey("obj")) //表示可以讀取到內容
{
var ArrangeRawDatas = ArrangeRawData(deviceNumberPoint, archiveDayJsonResult);
if (ArrangeRawDatas != null && ArrangeRawDatas.Count() > 0)
{
electricArchiveDayRawDatas.AddRange(ArrangeRawDatas);
}
}
}
catch (Exception ex)
{
logger.LogError("【ArchiveElectricMeterDayJob】【補償機制 - 天】【任務失敗】Device_number=" + error_day.Device_number + " point = " + error_day.Point + " date =" + error_day + " startTimestamp" + startTimestamp + " endTimestamp =" + endTimestamp);
logger.LogError("【ArchiveElectricMeterDayJob】【補償機制 - 天】【任務失敗】[Exception]{0}", ex.ToString() + Environment.NewLine );
} }
} }
@ -917,7 +935,8 @@ namespace BackendWorkerService.Services.Implement
} }
catch (Exception exception) catch (Exception exception)
{ {
throw exception; logger.LogError("【ProcEletricMeterService】【補償機制 - 任務失敗】");
logger.LogError("【ProcEletricMeterService】【補償機制 - 任務失敗】[Exception]{0} {1}", exception.ToString());
} }
return result; return result;

View File

@ -16,7 +16,7 @@
"RegularUpdateDBTableJob": "0 0 2 * * ?", "RegularUpdateDBTableJob": "0 0 2 * * ?",
"ParkingJob": "0 0 2 * * ?", "ParkingJob": "0 0 2 * * ?",
"ArchiveElectricMeterHourJob": "0 0 2 * * ?", "ArchiveElectricMeterHourJob": "0 0 2 * * ?",
"ArchiveElectricMeterDayJob": "0/5 * * * * ?", // 5 "ArchiveElectricMeterDayJob": "0/2 * * * * ?", // 5
"WeatherAPIJob": "0 0 2 * * ?" "WeatherAPIJob": "0 0 2 * * ?"
}, },
"DBConfig": { "DBConfig": {

View File

@ -269,6 +269,7 @@ namespace FrontendWebApi.ApiControllers
RowPosition = 0; RowPosition = 0;
lastDeviceItem = d.type; lastDeviceItem = d.type;
sheet = workbook.CreateSheet($"{building.Where(x => x.building_tag == lhe.device_number.Split("_")[1]).Select(x => x.full_name).FirstOrDefault()}{"_" + d.type}"); sheet = workbook.CreateSheet($"{building.Where(x => x.building_tag == lhe.device_number.Split("_")[1]).Select(x => x.full_name).FirstOrDefault()}{"_" + d.type}");
//sheet = workbook.CreateSheet($"{d.deviceName}{"_" + d.type}");
#region set cell #region set cell
row = sheet.CreateRow(RowPosition); row = sheet.CreateRow(RowPosition);
sheet.SetColumnWidth(0, 4 * 160 * 12); sheet.SetColumnWidth(0, 4 * 160 * 12);

View File

@ -132,6 +132,13 @@ namespace FrontendWebApi.ApiControllers
var dateFormat = input.tableType == "day" || input.tableType == "week" ? "%Y-%m-%d" : input.tableType == "month" ? "%Y-%m" : input.tableType == "year" ? "%Y" : null; var dateFormat = input.tableType == "day" || input.tableType == "week" ? "%Y-%m-%d" : input.tableType == "month" ? "%Y-%m" : input.tableType == "year" ? "%Y" : null;
var aemmEndDate = input.tableType == "year" ? $"year(DATE_ADD(fd.date, INTERVAL +1 {input.tableType}))" : $"DATE_ADD(fd.date, INTERVAL +1 {input.tableType})"; var aemmEndDate = input.tableType == "year" ? $"year(DATE_ADD(fd.date, INTERVAL +1 {input.tableType}))" : $"DATE_ADD(fd.date, INTERVAL +1 {input.tableType})";
var aemmStaDate = input.tableType == "year" ? "year(fd.date)" : "fd.date"; var aemmStaDate = input.tableType == "year" ? "year(fd.date)" : "fd.date";
string date_yyyymmdd = "";
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 "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 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 ( from (
@ -156,7 +163,7 @@ namespace FrontendWebApi.ApiControllers
from {table} from {table}
where start_timestamp >= '{startTime}' and end_timestamp < '{endTime}' and point = 'KWH' {buildingSql} where start_timestamp >= '{startTime}' and end_timestamp < '{endTime}' and point = 'KWH' {buildingSql}
{sqlWhere} {sqlGroup} {sqlWhere} {sqlGroup}
) aemm on aemm.start_timestamp >= {aemmStaDate} and aemm.end_timestamp < {aemmEndDate} and aemm.device_number = fd.device_number ) aemm on {date_yyyymmdd} and aemm.device_number = fd.device_number
join device dc on fd.device_number = dc.device_number join device dc on fd.device_number = dc.device_number
where dc.deleted = 0 where dc.deleted = 0
order by fd.device_number, fd.date"; order by fd.device_number, fd.date";
@ -500,7 +507,7 @@ namespace FrontendWebApi.ApiControllers
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($"{r.Select( x=> x.device_full_name).FirstOrDefault()} 電表報表"); var sheet = workbook.CreateSheet($"{buildingName}");
int RowPosition = 0; int RowPosition = 0;
#region set cell #region set cell
IRow row = sheet.CreateRow(RowPosition); IRow row = sheet.CreateRow(RowPosition);
@ -603,7 +610,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", @$"{building}_電表報表{System.DateTime.Now.ToString("yyyyMMddHHmm")}.xlsx"); return File(ms, "application/vnd.ms", @$"電表報表_{System.DateTime.Now.ToString("yyyyMMddHHmm")}.xlsx");
} }
[HttpPost] [HttpPost]