From 0cecb31e6de96382728c465bb8e85d9168dcae01 Mon Sep 17 00:00:00 2001 From: keke Date: Tue, 29 Aug 2023 15:03:08 +0800 Subject: [PATCH] =?UTF-8?q?[FE=20API]=20=E6=9B=B4=E6=96=B0=E5=90=84?= =?UTF-8?q?=E5=88=86=E7=9B=A4=E7=B8=BD=E7=9B=A4=E6=9F=A5=E8=A9=A2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E5=9B=9E=E5=82=B3=E4=B9=8B=E5=89=8D=E7=9A=84?= =?UTF-8?q?=20json=20=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiControllers/HydroMeterController.cs | 143 +++++++++++++----- FrontendWebApi/Models/HydroMeter.cs | 4 +- 2 files changed, 103 insertions(+), 44 deletions(-) diff --git a/FrontendWebApi/ApiControllers/HydroMeterController.cs b/FrontendWebApi/ApiControllers/HydroMeterController.cs index 2a50cc6..8aab0b3 100644 --- a/FrontendWebApi/ApiControllers/HydroMeterController.cs +++ b/FrontendWebApi/ApiControllers/HydroMeterController.cs @@ -826,8 +826,8 @@ namespace FrontendWebApi.ApiControllers } [HttpPost] - [Route("api/ExportElectricEachCompareList")] - public FileResult OpeExportEachCompareExcelElec([FromBody] HydroMeterInput input) + [Route("api/ExportElectricEachTotalCompareList")] + public FileResult OpeExportEachTotalCompareExcelElec([FromBody] HydroMeterInput input) { List> result = new List>(); var building = backendRepository.GetAllAsync("select * from building where deleted = 0").Result; @@ -999,9 +999,9 @@ namespace FrontendWebApi.ApiControllers [HttpPost] [Route("api/ElectricListEachTotal")] - public async Task>>> ElectricListEachTotal([FromBody] HydroMeterInput input) + public async Task>>> ElectricListEachTotal([FromBody] HydroMeterInput input) { - ApiResult> apiResult = new ApiResult>(jwt_str); + ApiResult> apiResult = new ApiResult>(jwt_str); if (!jwtlife) { apiResult.Code = "5000"; @@ -1053,7 +1053,7 @@ namespace FrontendWebApi.ApiControllers if (string.IsNullOrEmpty(isTable)) //check for has table or not { apiResult.Code = "0000"; - apiResult.Data = new List() { }; + apiResult.Data = new List() { }; return Ok(apiResult); } @@ -1062,59 +1062,118 @@ namespace FrontendWebApi.ApiControllers string header_lastY = last_year + "_" + start_month; var sql = $@" -select e.full_name building_name, a.device_number, {header_now} searchMT, ifnull(b.{header_now}, 0) searchM, {header_lastM} lastMT, ifnull(c.{header_lastM}, 0) lastM, {header_lastY} lastYT, ifnull(d.{header_lastY}, 0) lastY +select e.full_name building_name, a.device_number, '{header_now}' searchMT, ifnull(b.kwh_sum, 0) searchM, '{header_lastM}' lastMT, ifnull(c.kwh_sum, 0) lastM, '{header_lastY}' lastYT, ifnull(d.kwh_sum, 0) lastY from device a -left join (select device_number, sum(kwh_result) {header_now} from archive_electric_meter_month where year(start_timestamp) = {start_year} and month(start_timestamp) = {start_month} group by device_number) b on a.device_number COLLATE utf8mb4_0900_ai_ci = b.device_number -- month1 -left join (select device_number, sum(kwh_result) {header_lastM} from archive_electric_meter_month where year(start_timestamp) = {start_year} and month(start_timestamp) = {last_month} group by device_number) c on a.device_number COLLATE utf8mb4_0900_ai_ci = c.device_number -- month2 -left join (select device_number, sum(kwh_result) {header_lastY} from archive_electric_meter_month where year(start_timestamp) = {last_year} and month(start_timestamp) = {start_month} group by device_number) d on a.device_number COLLATE utf8mb4_0900_ai_ci = d.device_number -- last Month +left join (select device_number, sum(kwh_result) kwh_sum from archive_electric_meter_month where year(start_timestamp) = {start_year} and month(start_timestamp) = {start_month} group by device_number) b on a.device_number COLLATE utf8mb4_0900_ai_ci = b.device_number -- month1 +left join (select device_number, sum(kwh_result) kwh_sum from archive_electric_meter_month where year(start_timestamp) = {start_year} and month(start_timestamp) = {last_month} group by device_number) c on a.device_number COLLATE utf8mb4_0900_ai_ci = c.device_number -- month2 +left join (select device_number, sum(kwh_result) kwh_sum from archive_electric_meter_month where year(start_timestamp) = {last_year} and month(start_timestamp) = {start_month} group by device_number) d on a.device_number COLLATE utf8mb4_0900_ai_ci = d.device_number -- last Month join building e on a.device_building_tag = e.building_tag where {sqlWhere} order by a.priority"; Logger.LogInformation("SQL = " + sql + " building=" + input.building_tag + " floor_tag = " + input.floor_tag); var rawData = await backendRepository.GetAllAsync(sql); - List ResultData = new List(); - - //if (tag_quantity == "5") - //{ - // Result = rawData - // .GroupBy(x => new { building_tag = x.device_number.Split("_")[0], floor_tag = x.device_number.Split("_")[2], device_serial_tag = x.device_number.Split("_")[4], device_number = x.device_number }) - // .Select(x => new HydroMeterOutput { building_tag = x.Key.building_tag, floor_tag = x.Key.floor_tag, device_serial_tag = x.Key.device_serial_tag, device_number = x.Key.device_number }) - // .ToList(); - //} - //else - //{ - // Result = rawData - // .GroupBy(x => new { building_tag = x.device_number.Split("_")[1], floor_tag = x.device_number.Split("_")[4], device_master = x.device_number.Split("_")[5], device_serial_tag = x.device_number.Split("_")[7], device_number = x.device_number }) - // .Select(x => new HydroMeterOutput { building_tag = x.Key.building_tag, floor_tag = x.Key.floor_tag, device_serial_tag = x.Key.device_serial_tag, device_master = x.Key.device_master, device_number = x.Key.device_number }) - // .ToList(); - //} + List ResultData = new List(); - foreach (var l in rawData) + ResultData = rawData + .GroupBy(x => new { building_tag = x.device_number.Split("_")[1], floor_tag = x.device_number.Split("_")[4], device_master = x.device_number.Split("_")[5], device_serial_tag = x.device_number.Split("_")[7], device_number = x.device_number }) + .Select(x => new HydroMeterEachTotalOutput { building_tag = x.Key.building_tag, floor_tag = x.Key.floor_tag, device_serial_tag = x.Key.device_serial_tag, device_master = x.Key.device_master, device_number = x.Key.device_number }) + .ToList(); + + foreach (var l in ResultData) { - //l.rawData = new List(); - //l.device_full_name = await backendRepository.GetOneAsync($"select full_name from device where device_number = '{l.device_number}'"); + + l.rawData = new List(); + + l.rawData.AddRange( + rawData + .Where(x => x.device_number == l.device_number) + .Select(x => new HydroMeterRawDataOutput + { + timeStamp = x.searchMT, // 或者是您所需的日期格式 + device_number = x.device_number, + avg_rawdata = x.searchM + }) + ); + l.rawData.AddRange( + rawData + .Where(x => x.device_number == l.device_number) + .Select(x => new HydroMeterRawDataOutput + { + timeStamp = x.lastMT, // 或者是您所需的日期格式 + device_number = x.device_number, + avg_rawdata = x.lastM + }) + ); + l.rawData.AddRange( + rawData + .Where(x => x.device_number == l.device_number) + .Select(x => new HydroMeterRawDataOutput + { + timeStamp = "last month different", // 或者是您所需的日期格式 + device_number = x.device_number, + avg_rawdata = (double.Parse(x.searchM) - double.Parse(x.lastM)).ToString() + }) + ); + l.rawData.AddRange( + rawData + .Where(x => x.device_number == l.device_number) + .Select(x => new HydroMeterRawDataOutput + { + timeStamp = x.lastYT, // 或者是您所需的日期格式 + device_number = x.device_number, + avg_rawdata = x.lastY + }) + ); + l.rawData.AddRange( + rawData + .Where(x => x.device_number == l.device_number) + .Select(x => new HydroMeterRawDataOutput + { + timeStamp = "last year different", // 或者是您所需的日期格式 + device_number = x.device_number, + avg_rawdata = (double.Parse(x.searchM) - double.Parse(x.lastY)).ToString() + }) + ); + //HydroMeterRawDataOutput newData1 = new HydroMeterRawDataOutput + //{ + // timeStamp = rawData.FirstOrDefault(x => x.timeStamp == searchTime), + // device_number = l.device_number, + // avg_rawdata + //}; + + l.device_full_name = await backendRepository.GetOneAsync($"select full_name from device where device_number = '{l.device_number}'"); + l.building_name = await backendRepository.GetOneAsync("select full_name from building where building_tag = @building_tag and deleted = 0", + new { building_tag = l.building_tag }); + l.total = l.rawData.Where(x => x.avg_rawdata != "NaN").Sum(x => decimal.Parse(x.avg_rawdata ?? "0", System.Globalization.NumberStyles.Float)).ToString(); + l.price = input.price.HasValue + ? (Math.Round(input.price.Value, 2)).ToString() + : Math.Round((await backendRepository.GetOneAsync("select system_value from variable where system_type = 'ElectricPrice' and deleted = 0")), 2).ToString(); + l.total_price = Math.Round((Decimal.Parse(l.total) * Decimal.Parse(l.price)), 2).ToString(); + + + + - //l. //l.building_name = l.building_name; //l.total = l.rawData.Where(x => x.avg_rawdata != "NaN").Sum(x => decimal.Parse(x.avg_rawdata ?? "0", System.Globalization.NumberStyles.Float)).ToString(); - HydroMeterRawDataEachTotalOutput newData1 = new HydroMeterRawDataEachTotalOutput - { - building_name = l.building_name, - device_number = l.device_number, - searchMT = header_now, - searchM = l.searchM, - lastM = l.lastM, - lastY = l.lastY, - lastMT= header_lastM, - lastYT = header_lastY - }; + //HydroMeterRawDataEachTotalOutput newData1 = new HydroMeterRawDataEachTotalOutput + //{ + // building_name = l.building_name, + // device_number = l.device_number, + // searchMT = header_now, + // searchM = l.searchM, + // lastM = l.lastM, + // lastY = l.lastY, + // lastMT= header_lastM, + // lastYT = header_lastY + //}; - - ResultData.Add(newData1); + + //ResultData.Add(newData1); //var lastYear = previousYear.ToString("yyyy-MM"); //var lastMonth = previousMonth.ToString("yyyy-MM"); //var searchTime = input.startTime; // 欲查詢的月份 diff --git a/FrontendWebApi/Models/HydroMeter.cs b/FrontendWebApi/Models/HydroMeter.cs index 08a402e..db1de3a 100644 --- a/FrontendWebApi/Models/HydroMeter.cs +++ b/FrontendWebApi/Models/HydroMeter.cs @@ -61,7 +61,7 @@ namespace FrontendWebApi.Models public string total { get; set; } public string price { get; set; } public string total_price { get; set; } - public List rawData { get; set; } + public List rawData { get; set; } } public class HydroMeterRawDataEachTotalOutput @@ -71,8 +71,8 @@ namespace FrontendWebApi.Models public string searchMT { get; set; } public string searchM { get; set; } public string lastM { get; set; } - public string lastY { get; set; } public string lastMT { get; set; } + public string lastY { get; set; } public string lastYT { get; set; } }