From cca132a876101d00b0a0e46bc260d387ebdfa8ee Mon Sep 17 00:00:00 2001 From: dev01 Date: Mon, 12 Jun 2023 16:02:18 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=89=8D=E5=8F=B0][=E6=B0=B4=E9=9B=BB?= =?UTF-8?q?=E5=A0=B1=E8=A1=A8]=20=E6=AF=94=E8=BC=83=E6=97=A5=E6=9C=9F=20ap?= =?UTF-8?q?i=20=E7=A8=8B=E5=BA=8F=E5=BB=BA=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/Controllers/UserInfoController.cs | 2 +- .../ApiControllers/HydroMeterController.cs | 112 +++++++++++++++--- FrontendWebApi/Models/HydroMeter.cs | 10 ++ 3 files changed, 104 insertions(+), 20 deletions(-) diff --git a/Backend/Controllers/UserInfoController.cs b/Backend/Controllers/UserInfoController.cs index 70de7b2..08e0517 100644 --- a/Backend/Controllers/UserInfoController.cs +++ b/Backend/Controllers/UserInfoController.cs @@ -510,7 +510,7 @@ namespace Backend.Controllers var buildingGuid = ""; if (post.SelectedBuild != "0") { - buildingGuid = $" AND ap.building_guid = '{post.SelectedBuild}'"; + buildingGuid = $" AND ap.building_tag = '{post.SelectedBuild}'"; } var sqlString = @$" SELECT ap.AuthCode, ap.MainName, ap.SubName FROM auth_page ap WHERE ap.AuthType='{post.SelectedAuthType}' diff --git a/FrontendWebApi/ApiControllers/HydroMeterController.cs b/FrontendWebApi/ApiControllers/HydroMeterController.cs index 07d2ed2..74c01e8 100644 --- a/FrontendWebApi/ApiControllers/HydroMeterController.cs +++ b/FrontendWebApi/ApiControllers/HydroMeterController.cs @@ -440,7 +440,7 @@ namespace FrontendWebApi.ApiControllers int i = 0; ICell cell = row.CreateCell(i++); - cell.SetCellValue("東別"); + cell.SetCellValue("棟別"); cell.CellStyle = styleLine12; cell = row.CreateCell(i++); cell.SetCellValue("樓層"); @@ -529,12 +529,13 @@ namespace FrontendWebApi.ApiControllers } [HttpPost] - [Route("api/ExportWaterList")] - public FileResult OpeExportExcelWater([FromBody] HydroMeterInput input) + [Route("api/ExportElectricCompareList")] + public FileResult OpeExportCompareExcelElec([FromBody] List input) { - - var result = this.WaterList(input).Result.Value.Data.ToList(); - + var result = new List(); + var result1 = this.ElectricList(input[0]).Result.Value.Data.ToList(); + var result2 = this.ElectricList(input[1]).Result.Value.Data.ToList(); + Dictionary> compareDict = new Dictionary>(); var workbook = new XSSFWorkbook(); #region excel設定 IFont font12 = workbook.CreateFont(); @@ -577,11 +578,46 @@ namespace FrontendWebApi.ApiControllers stylein12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; stylein12.WrapText = true; #endregion + var rawDataTitle = new List(); + + if (input[0].tableType == "month") + { + for (var i = 1; i <= 12; i++) + { + rawDataTitle.Add(input[0].startTime + "-" + i.ToString().PadLeft(2, '0')); + rawDataTitle.Add(input[1].startTime + "-" + i.ToString().PadLeft(2, '0')); + } + } + else if (input[0].tableType == "day") + { + var days = GetDayInMonth(input[0].startTime); + for (var i = 1 ;i <= days ; i++) { + rawDataTitle.Add(input[0].startTime + "-" + i.ToString().PadLeft(2, '0')); + rawDataTitle.Add(input[1].startTime + "-" + i.ToString().PadLeft(2, '0')); + } + } var sheet = workbook.CreateSheet("電表報表"); int RowPosition = 0; - if (result.Count > 0) + if (result1.Count > 0 || result2.Count > 0) { + result = result1; + foreach (var r2 in result2) + { + var target = result.Where(r => r.building_tag == r2.building_tag && r.device_serial_tag == r2.device_serial_tag && r.floor_tag == r2.floor_tag).FirstOrDefault(); + compareDict[r2.building_tag + r2.floor_tag + r2.device_serial_tag] = new List() { r2.total, r2.price, r2.total_price }; + if (target != null) + { + target.rawData = target.rawData.Concat(r2.rawData).ToList(); + } + else { + r2.total = null; + r2.price = null; + r2.total_price= null; + result.Add(r2); + } + + } #region set cell IRow row = sheet.CreateRow(RowPosition); sheet.SetColumnWidth(0, 4 * 160 * 12); @@ -590,7 +626,7 @@ namespace FrontendWebApi.ApiControllers int i = 0; ICell cell = row.CreateCell(i++); - cell.SetCellValue("東別"); + cell.SetCellValue("棟別"); cell.CellStyle = styleLine12; cell = row.CreateCell(i++); cell.SetCellValue("樓層"); @@ -599,26 +635,43 @@ namespace FrontendWebApi.ApiControllers cell.SetCellValue("設備"); cell.CellStyle = styleLine12; - foreach (var rr in result.FirstOrDefault().rawData) + foreach (var rr in rawDataTitle) { + sheet.SetColumnWidth(i, 2 * 160 * 12); cell = row.CreateCell(i++); - cell.SetCellValue(rr.timeStamp); + cell.SetCellValue(rr); cell.CellStyle = styleLine12; } cell = row.CreateCell(i++); - cell.SetCellValue("小計"); + cell.SetCellValue(input[0].startTime + "小計"); + sheet.SetColumnWidth(i-1, 2 * 160 * 12); + cell.CellStyle = styleLine12; + cell = row.CreateCell(i++); + cell.SetCellValue(input[1].startTime + "小計"); + sheet.SetColumnWidth(i - 1, 2 * 160 * 12); cell.CellStyle = styleLine12; cell = row.CreateCell(i++); - cell.SetCellValue("單價"); + cell.SetCellValue(input[0].startTime + "單價"); + sheet.SetColumnWidth(i - 1, 2 * 160 * 12); cell.CellStyle = styleLine12; cell = row.CreateCell(i++); - cell.SetCellValue("金額總計"); + cell.SetCellValue(input[1].startTime + "單價"); + sheet.SetColumnWidth(i - 1, 2 * 160 * 12); + cell.CellStyle = styleLine12; + cell = row.CreateCell(i++); + cell.SetCellValue(input[0].startTime + "金額總計"); + sheet.SetColumnWidth(i - 1, 2 * 160 * 12); + cell.CellStyle = styleLine12; + cell = row.CreateCell(i++); + cell.SetCellValue(input[1].startTime + "金額總計"); + sheet.SetColumnWidth(i - 1, 2 * 160 * 12); cell.CellStyle = styleLine12; #endregion - + foreach (var r in result) { + string compareDictKey = r.building_tag + r.floor_tag + r.device_serial_tag; RowPosition += 1; int k = 3; row = sheet.CreateRow(RowPosition); @@ -640,9 +693,10 @@ namespace FrontendWebApi.ApiControllers if (j == 3) { - foreach (var rr in r.rawData) + foreach (var rr in rawDataTitle) { - cell.SetCellValue(rr.avg_rawdata.ToString()); + var targetRaw = r.rawData.Where(rd => rd.timeStamp == rr).FirstOrDefault(); + cell.SetCellValue(targetRaw?.avg_rawdata.ToString() ?? ""); j++; k++; cell = row.CreateCell(j); @@ -655,12 +709,24 @@ namespace FrontendWebApi.ApiControllers } if (j == k + 1) { - cell.SetCellValue(r.price); + cell.SetCellValue(compareDict.ContainsKey(compareDictKey) ? compareDict[compareDictKey][0] : ""); } if (j == k + 2) + { + cell.SetCellValue(r.price); + } + if (j == k + 3) + { + cell.SetCellValue(compareDict.ContainsKey(compareDictKey) ? compareDict[compareDictKey][1] : ""); + } + if (j == k + 4) { cell.SetCellValue(r.total_price); } + if (j == k + 5) + { + cell.SetCellValue(compareDict.ContainsKey(compareDictKey) ? compareDict[compareDictKey][2] : ""); + } cell.CellStyle = style12; } @@ -674,10 +740,18 @@ namespace FrontendWebApi.ApiControllers workbook.Write(ms); ms.Flush(); ms.Seek(0, SeekOrigin.Begin); - Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition"); + return File(ms, "application/vnd.ms-excel", "電表報表.xlsx"); + } - return File(ms, "application/vnd.ms-excel", "水表報表.xlsx"); + public static int GetDayInMonth(string yearMonth) + { + List datesList = new List(); + + DateTime startOfMonth = DateTime.Parse(yearMonth + "-01"); + int daysInMonth = DateTime.DaysInMonth(startOfMonth.Year, startOfMonth.Month); + + return daysInMonth; } } } diff --git a/FrontendWebApi/Models/HydroMeter.cs b/FrontendWebApi/Models/HydroMeter.cs index 7d9a582..4ac5c25 100644 --- a/FrontendWebApi/Models/HydroMeter.cs +++ b/FrontendWebApi/Models/HydroMeter.cs @@ -41,4 +41,14 @@ namespace FrontendWebApi.Models { public string type { get; set; } } + + public class HydroMeterCompareOutput + { + + } + + public class HydroMeterCompareExportInput + { + public List exportList { get; set; } + } }