diff --git a/FrontendWebApi/ApiControllers/HistoryController.cs b/FrontendWebApi/ApiControllers/HistoryController.cs index a4d7476..4bd6377 100644 --- a/FrontendWebApi/ApiControllers/HistoryController.cs +++ b/FrontendWebApi/ApiControllers/HistoryController.cs @@ -14,6 +14,8 @@ using System.Net; using System.Text; using System.Threading.Tasks; using System.Xml; +using NPOI.XSSF.UserModel; +using NPOI.SS.UserModel; namespace FrontendWebApi.ApiControllers { @@ -32,6 +34,117 @@ namespace FrontendWebApi.ApiControllers this.frontendRepository = frontendRepository; } + /// + /// 匯出excel + /// + /// + /// + public FileResult OpeExportExcel([FromBody] List lhe) + { + var workbook = new XSSFWorkbook(); + #region excel設定 + IFont font12 = workbook.CreateFont(); + font12.FontName = "新細明體"; + font12.FontHeightInPoints = 12; + ICellStyle style12 = workbook.CreateCellStyle(); + style12.SetFont(font12); + style12.Alignment = HorizontalAlignment.Center; + style12.VerticalAlignment = VerticalAlignment.Center; + IFont font12Times = workbook.CreateFont(); + font12Times.FontName = "Times New Roman"; + font12Times.FontHeightInPoints = 12; + IFont font18 = workbook.CreateFont(); + font18.FontName = "新細明體"; + font18.FontHeightInPoints = 18; + font18.IsBold = true; + ICellStyle styleTitle18 = workbook.CreateCellStyle(); + styleTitle18.SetFont(font18); + styleTitle18.Alignment = HorizontalAlignment.Center; + styleTitle18.VerticalAlignment = VerticalAlignment.Center; + ICellStyle styleLeft12 = workbook.CreateCellStyle(); + styleLeft12.SetFont(font12); + styleLeft12.Alignment = HorizontalAlignment.Left; + styleLeft12.VerticalAlignment = VerticalAlignment.Center; + ICellStyle styleLine12 = workbook.CreateCellStyle(); + styleLine12.SetFont(font12); + styleLine12.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; + styleLine12.VerticalAlignment = VerticalAlignment.Center; + styleLine12.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; + styleLine12.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; + styleLine12.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; + styleLine12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; + ICellStyle stylein12 = workbook.CreateCellStyle(); + stylein12.SetFont(font12Times); + stylein12.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left; + stylein12.VerticalAlignment = VerticalAlignment.Center; + stylein12.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; + stylein12.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; + stylein12.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; + stylein12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; + stylein12.WrapText = true; + #endregion + + var sheet = workbook.CreateSheet("歷史資料"); + int RowPosition = 0; + #region set cell + IRow row = sheet.CreateRow(RowPosition); + sheet.SetColumnWidth(0, 4 * 160 * 12); + sheet.SetColumnWidth(1, 4 * 160 * 12); + sheet.SetColumnWidth(2, 4 * 160 * 12); + sheet.SetColumnWidth(3, 4 * 160 * 12); + sheet.SetColumnWidth(4, 4 * 160 * 12); + sheet.SetColumnWidth(5, 4 * 160 * 12); + sheet.SetColumnWidth(6, 4 * 160 * 12); + sheet.SetColumnWidth(7, 4 * 160 * 12); + ICell cell = row.CreateCell(0); + cell.SetCellValue("設備名稱"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(1); + cell.SetCellValue("數值"); + cell.CellStyle = styleLine12; + cell = row.CreateCell(2); + cell.SetCellValue("記錄時間"); + cell.CellStyle = styleLine12; + #endregion + + if (lhe.Count > 0) + { + foreach (var he in lhe) + { + RowPosition += 1; + row = sheet.CreateRow(RowPosition); + for (var i = 0; i < 3; i++) + { + cell = row.CreateCell(i); + if (i == 0) + { + cell.SetCellValue(he.device_name); + } + if (i == 1) + { + cell.SetCellValue(he.value); + } + if (i == 2) + { + cell.SetCellValue(he.record_time); + } + + cell.CellStyle = style12; + } + } + } + + var ms = new NpoiMemoryStream + { + AllowClose = false + }; + workbook.Write(ms); + ms.Flush(); + ms.Seek(0, SeekOrigin.Begin); + + return File(ms, "application/vnd.ms-excel", "廠商資料.xlsx"); + } + /// /// 即時趨勢條件過濾條件面板 /// @@ -39,7 +152,7 @@ namespace FrontendWebApi.ApiControllers /// [HttpPost] [Route("api/History/GetMainSub")] - public async Task>> GetMainSub(string account) + public async Task>> GetMainSub() { ApiResult apiResult = new ApiResult(jwt_str); if (!jwtlife) @@ -50,38 +163,37 @@ namespace FrontendWebApi.ApiControllers try { var dbsub = await frontendRepository.GetAllAsync( - @$"select distinct e.full_name main_name,e.main_system_guid main_system_guid,d.full_name sub_name,d.sub_system_guid sub_system_guid, e.priority, d.priority from role_auth a + @$"select distinct e.full_name main_name,e.device_system_tag main_system_tag,d.full_name sub_name,d.device_name_tag sub_system_tag, e.priority, d.priority from role_auth a join auth_page b on a.AuthCode = b.AuthCode join userinfo c on c.role_guid = a.role_guid - join sub_system d on d.sub_system_guid = b.ShowView - join main_system e on e.main_system_guid = d.main_system_guid - where c.account = '{account}' - order by e.priority, d.priority"); + join variable v2 on d.device_name_tag = v2.system_value and v2.system_type = @sub_system_type + join variable v1 on d.device_system_tag = v1.system_value and v1.system_type = @main_system_type + where c.account = @account + order by e.priority, d.priority", new { @account = myUser.account, @sub_system_type = sub_system_type, @main_system_type = main_system_type }); var dbbuilding = await frontendRepository.GetAllAsync( @$"select distinct d.building_guid,d.full_name,d.priority from role_auth a join auth_page b on a.AuthCode = b.AuthCode join userinfo c on c.role_guid = a.role_guid - join building d on d.building_guid = b.building_guid - where c.account = '{account}' + join building d on d.device_building_tag = b.building_tag + where c.account = '{myUser.account}' order by d.priority - " - ); - var mains = dbsub.GroupBy(a => a.main_system_guid).ToList(); + ", new { @account = myUser.account }); + var mains = dbsub.GroupBy(a => a.main_system_tag).ToList(); apiResult.Data = new History_MainSubBuildFloor(); apiResult.Data.history_Main_Systems = new List(); foreach (var main in mains) { History_Main_system history_Main_System = new History_Main_system(); - history_Main_System.main_system_guid = main.Select(a => a.main_system_guid).FirstOrDefault(); + history_Main_System.main_system_tag = main.Select(a => a.main_system_tag).FirstOrDefault(); history_Main_System.full_name = main.Select(a => a.main_name).FirstOrDefault(); history_Main_System.History_Sub_systems = new List(); - var subs = main.GroupBy(a => a.sub_system_guid).ToList(); + var subs = main.GroupBy(a => a.main_system_tag).ToList(); foreach (var sub in subs) { History_Sub_system history_Sub_System = new History_Sub_system(); history_Sub_System.full_name = sub.Select(a => a.sub_name).FirstOrDefault(); - history_Sub_System.sub_system_guid = sub.Select(a => a.sub_system_guid).FirstOrDefault(); + history_Sub_System.sub_system_tag = sub.Select(a => a.sub_system_tag).FirstOrDefault(); history_Main_System.History_Sub_systems.Add(history_Sub_System); } apiResult.Data.history_Main_Systems.Add(history_Main_System); @@ -662,7 +774,7 @@ namespace FrontendWebApi.ApiControllers var mainSubSystemRawDatas = await frontendRepository.GetAllAsync(sqlMainSubSystem, post); - var mainSubSystemRawDatas_GroupBy_main_system_guid = mainSubSystemRawDatas.GroupBy(x => x.main_system_guid).ToList(); + var mainSubSystemRawDatas_GroupBy_main_system_guid = mainSubSystemRawDatas.GroupBy(x => x.main_system_tag).ToList(); List history_Main_Systems = new List(); foreach (var mainSubSystemRawData in mainSubSystemRawDatas_GroupBy_main_system_guid) @@ -672,7 +784,7 @@ namespace FrontendWebApi.ApiControllers { History_Sub_system history_Sub_System = new History_Sub_system() { - sub_system_guid = SubSystemRawData.sub_system_guid, + sub_system_tag = SubSystemRawData.sub_system_tag, full_name = SubSystemRawData.sub_name, }; @@ -681,7 +793,7 @@ namespace FrontendWebApi.ApiControllers History_Main_system history_Main_System = new History_Main_system() { - main_system_guid = mainSubSystemRawData.Key, + main_system_tag = mainSubSystemRawData.Key, full_name = mainSubSystemRawData.First().main_name, History_Sub_systems = history_Sub_Systems }; diff --git a/FrontendWebApi/Models/HistoryClass.cs b/FrontendWebApi/Models/HistoryClass.cs index c583271..4da37de 100644 --- a/FrontendWebApi/Models/HistoryClass.cs +++ b/FrontendWebApi/Models/HistoryClass.cs @@ -55,9 +55,9 @@ namespace FrontendWebApi.Models // } public class HistoryDBMainSub { - public string main_system_guid { get; set; } + public string main_system_tag { get; set; } public string main_name { get; set; } - public string sub_system_guid { get; set; } + public string sub_system_tag { get; set; } public string sub_name { get; set; } } @@ -88,13 +88,13 @@ namespace FrontendWebApi.Models } public class History_Main_system { - public string main_system_guid { get; set; } + public string main_system_tag { get; set; } public string full_name { get; set; } public List History_Sub_systems { get; set; } } public class History_Sub_system { - public string sub_system_guid { get; set; } + public string sub_system_tag { get; set; } public string full_name { get; set; } } public class History_PostDevice @@ -233,4 +233,10 @@ namespace FrontendWebApi.Models public string Timestamp { get; set; } } + public class HistoryExport + { + public string device_name { get; set; } + public string value { get; set; } + public string record_time { get; set; } + } }