diff --git a/FrontendWebApi/ApiControllers/HydroMeterController.cs b/FrontendWebApi/ApiControllers/HydroMeterController.cs index cf1e978..58b9b3b 100644 --- a/FrontendWebApi/ApiControllers/HydroMeterController.cs +++ b/FrontendWebApi/ApiControllers/HydroMeterController.cs @@ -16,6 +16,7 @@ using Ionic.Zip; using System.Collections.Immutable; using System.Text; using iTextSharp.text; +using System.Collections; namespace FrontendWebApi.ApiControllers { @@ -999,20 +1000,6 @@ namespace FrontendWebApi.ApiControllers [Route("api/ElectricListEachTotal")] public async Task>>> ElectricListEachTotal([FromBody] HydroMeterInput input) { - - //switch (input.Mode) - //{ - // case HydroMeterInputSearchMode.All: - // break; - - // case HydroMeterInputSearchMode.Custom: break; - - // default: - - // break; - - //} - ApiResult> apiResult = new ApiResult>(jwt_str); if (!jwtlife) { @@ -1120,7 +1107,7 @@ left join ( {sqlWhere} {sqlGroup} ) aemm on aemm.start_timestamp >= {aemmStaDate} and aemm.end_timestamp < {aemmEndDate} and aemm.device_number = fd.device_number where DATE_FORMAT(fd.date, '%Y-%m') = '{searchTime}' or DATE_FORMAT(fd.date, '%Y-%m') = '{lastMonth}' or DATE_FORMAT(fd.date, '%Y-%m') = '{lastYear}' -order by fd.device_number, fd.date"; +order by fd.device_number, fd.date desc"; Logger.LogInformation("SQL = " + sql + " startTime=" + startTime + " endTime=" + endTime + " building=" + input.building_tag + " floor_tag = " + input.floor_tag); var rawData = await backendRepository.GetAllAsync(sql, new { startTime = startTime, endtime = endTime, building_tag = input.building_tag, dateFormat = dateFormat }); @@ -1157,6 +1144,47 @@ order by fd.device_number, fd.date"; rawData.Where(x => x.device_number.Split("_")[1] == l.building_tag && x.device_number.Split("_")[4] == l.floor_tag && x.device_number.Split("_")[5] == l.device_master && x.device_number.Split("_")[7] == l.device_serial_tag) ); } + + //var lastYear = previousYear.ToString("yyyy-MM"); + //var lastMonth = previousMonth.ToString("yyyy-MM"); + //var searchTime = input.startTime; // 欲查詢的月份 + + // 找到符合 searchTime 和 lastMonth 條件的資料 + var searchTimeData = l.rawData.FirstOrDefault(x => x.timeStamp == searchTime); + var lastMonthData = l.rawData.FirstOrDefault(x => x.timeStamp == lastMonth); + var lastYearData = l.rawData.FirstOrDefault(x => x.timeStamp == lastYear); + + if (searchTimeData != null && lastMonthData != null && lastYearData != null) + { + // 將 avg_rawdata 字串轉換為 double 型別 + double searchTimeValue = Convert.ToDouble(searchTimeData.avg_rawdata); + double lastMonthValue = Convert.ToDouble(lastMonthData.avg_rawdata); + double lastYearValue = Convert.ToDouble(lastYearData.avg_rawdata); + + // 計算差值 + double month_diff = searchTimeValue - lastMonthValue; + double year_diff = searchTimeValue - lastYearValue; + + // 創建新的 HydroMeterRawDataOutput + HydroMeterRawDataOutput newData1 = new HydroMeterRawDataOutput + { + timeStamp = "last month different", + device_number = searchTimeData.device_number, + avg_rawdata = month_diff.ToString() + }; + + HydroMeterRawDataOutput newData2 = new HydroMeterRawDataOutput + { + timeStamp = "last year different", + device_number = searchTimeData.device_number, + avg_rawdata = year_diff.ToString() + }; + + // 將新資料加入到 l.rawData 中 + l.rawData.Add(newData1); + l.rawData.Add(newData2); + } + 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();