[WebApi]歷史資料新增CSV功能
This commit is contained in:
parent
812ee2ffc0
commit
85b5c468db
@ -311,6 +311,68 @@ namespace FrontendWebApi.ApiControllers
|
||||
return File(ms, "application/vnd.ms-excel", fileName);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[Route("api/ExportCSV")]
|
||||
public async Task<IActionResult> ExportCSV(PostHistoryRawDataFilter input)
|
||||
{
|
||||
ApiResult<string> apiResult = new ApiResult<string>();
|
||||
|
||||
try
|
||||
{
|
||||
var apiData = await GetHistoryRealTime(input);
|
||||
if (apiData.Value == null)
|
||||
{
|
||||
var msg = new { Code = "0003", Msg = "無資料可匯出。" };
|
||||
return StatusCode(400, msg);
|
||||
}
|
||||
var rawData = apiData.Value.Data;
|
||||
var FileName = $"歷史資料_{DateTime.Now}.csv";
|
||||
// 生成CSV文件
|
||||
string Csv = null;
|
||||
|
||||
if (rawData.Count > 0)
|
||||
{
|
||||
StringBuilder csv = new StringBuilder();
|
||||
|
||||
// 添加CSV標題行
|
||||
csv.AppendLine("區域,系統大類,系統小類,設備編號,設備名稱,設備項目,數值,紀錄時間");
|
||||
|
||||
// 添加數據行
|
||||
foreach (var item in rawData)
|
||||
{
|
||||
csv.AppendLine($"{item.Building_name},{item.Main_system_name},{item.Sub_system_name},{item.Device_number},{item.Item_name},{item.Points},{item.Value},{item.Timestamp}");
|
||||
}
|
||||
Csv = csv.ToString();
|
||||
}
|
||||
|
||||
// 返回CSV文件
|
||||
if (Csv != null)
|
||||
{
|
||||
using (var electricMemoryStream = new MemoryStream())
|
||||
{
|
||||
using (var streamWriter = new StreamWriter(electricMemoryStream, Encoding.UTF8))
|
||||
{
|
||||
streamWriter.Write(Csv);
|
||||
}
|
||||
return File(electricMemoryStream.ToArray(), "text/csv", FileName);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var msg = new { Code = "0003", Msg = "無資料可匯出。" };
|
||||
return StatusCode(400, msg);
|
||||
}
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
apiResult.Code = "9999";
|
||||
apiResult.Msg = "系統內部錯誤,請聯絡管理者。 Msg: " + exception.Message;
|
||||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||
return Json(apiResult);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 即時趨勢條件過濾條件面板
|
||||
/// </summary>
|
||||
@ -395,7 +457,7 @@ namespace FrontendWebApi.ApiControllers
|
||||
}
|
||||
}
|
||||
|
||||
var devices = dbsub.Where(x => x.main_system_tag == main.Select(m => m.main_system_tag).FirstOrDefault() && x.sub_system_tag == sub.Select(x => x.sub_system_tag).FirstOrDefault() && x.device_number != null).OrderBy(x=>x.device_full_name.Length).ThenBy(x=>x.device_full_name).ToList();
|
||||
var devices = dbsub.Where(x => x.main_system_tag == main.Select(m => m.main_system_tag).FirstOrDefault() && x.sub_system_tag == sub.Select(x => x.sub_system_tag).FirstOrDefault() && x.device_number != null).OrderBy(x => x.device_full_name.Length).ThenBy(x => x.device_full_name).ToList();
|
||||
history_Sub_System.device = devices.Count > 0 ? new List<Device>() : null;
|
||||
foreach (var d in devices)
|
||||
{
|
||||
@ -406,7 +468,7 @@ namespace FrontendWebApi.ApiControllers
|
||||
history_Sub_System.device.Add(device);
|
||||
}
|
||||
|
||||
if (history_Sub_System.is_show_history==1)
|
||||
if (history_Sub_System.is_show_history == 1)
|
||||
{
|
||||
history_Main_System.History_Sub_systems.Add(history_Sub_System);
|
||||
}
|
||||
@ -1091,7 +1153,7 @@ namespace FrontendWebApi.ApiControllers
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取得歷史資料
|
||||
/// 取得歷史資料(從Niagara拿資料)
|
||||
/// </summary>
|
||||
/// <param name="post"></param>
|
||||
/// <returns></returns>
|
||||
@ -1319,26 +1381,27 @@ namespace FrontendWebApi.ApiControllers
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 即使歷史資料(前7天)
|
||||
/// 即時歷史資料(從MSSQL拿資料)
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[Route("api/HistoryRealTime")]
|
||||
public async Task<ActionResult<ApiResult<List<HistoryRawData>>>> GetHistoryRealTime (PostHistoryRawDataFilter input)
|
||||
public async Task<ActionResult<ApiResult<List<HistoryRawData>>>> GetHistoryRealTime(PostHistoryRawDataFilter input)
|
||||
{
|
||||
ApiResult<List<HistoryRawData>> apiResult = new ApiResult<List<HistoryRawData>>(jwt_str);
|
||||
apiResult.Data = new List<HistoryRawData>();
|
||||
List<string> noDataDevice = new List<string>();
|
||||
if (!jwtlife)
|
||||
{
|
||||
apiResult.Code = "5000";
|
||||
return BadRequest(apiResult);
|
||||
return apiResult;
|
||||
}
|
||||
if (input.HistoryItems.Count == 0)
|
||||
if (input.HistoryItems == null)
|
||||
{
|
||||
apiResult.Code = "9998";
|
||||
apiResult.Msg = "沒有設備被選擇";
|
||||
return BadRequest(apiResult);
|
||||
return apiResult;
|
||||
}
|
||||
|
||||
try
|
||||
@ -1387,7 +1450,7 @@ namespace FrontendWebApi.ApiControllers
|
||||
var sql = $@"select '{device_item_info.Building_name}' as Building_name, '{device_item_info.Main_system_name}' as Main_system_name,
|
||||
'{device_item_info.Sub_system_name}' as Sub_system_name, '{device_item_info.Device_number}' as Device_number,
|
||||
'{device_item_info.Device_name}' as Device_name, '{device_item_info.Item_name}' as Item_name, '{device_item_info.Points}' as Points,
|
||||
'{device_item_info.Unit}' as Unit, timestamp as Timestamp,
|
||||
'{device_item_info.Unit}' as Unit, FORMAT(timestamp, 'yyyy-MM-dd HH:mm:ss') as Timestamp,
|
||||
{(valueType.Equals("bit") ? "Case when value = 1 then 'true' when value = 0 then 'false' else 'Unknow' End" : "round(value, 2)")} as Value
|
||||
from {tableName}
|
||||
where replace(convert(varchar, [timestamp], 111), '/', '-') >= @startTime
|
||||
@ -1396,21 +1459,23 @@ namespace FrontendWebApi.ApiControllers
|
||||
await backgroundServiceMsSqlRepository.GetAllAsync<HistoryRawData>(sql, new { startTime = input.Start_timestamp, endTime = input.End_timestamp })
|
||||
);
|
||||
}
|
||||
//foreach (var tn in tableName)
|
||||
//{
|
||||
//}
|
||||
else
|
||||
{
|
||||
noDataDevice.Add(hi.Device_number_point);
|
||||
}
|
||||
}
|
||||
apiResult.Code = "0000";
|
||||
apiResult.Data = apiResult.Data.OrderBy(x => x.Device_number).ThenBy(x => x.Timestamp).ToList();
|
||||
apiResult.Msg = @$"DB無資料的設備:{string.Join(".", noDataDevice)}";
|
||||
apiResult.Data = apiResult.Data.OrderBy(x => x.Device_number).ThenByDescending(x => x.Timestamp).ToList();
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
apiResult.Code = "9999";
|
||||
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||
return Ok(apiResult);
|
||||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message + exception.StackTrace);
|
||||
return apiResult;
|
||||
}
|
||||
return Ok(apiResult);
|
||||
return apiResult;
|
||||
}
|
||||
|
||||
private List<Dictionary<string, object>> ArrangeRawData(DeviceNumberPoint deviceNumberPoint, JObject jsonResult)
|
||||
|
Loading…
Reference in New Issue
Block a user