[FE API] 更新查詢上月上年比較差異

This commit is contained in:
keke 2023-08-28 14:33:14 +08:00
parent b479e1d5c5
commit d70320b27e

View File

@ -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<ActionResult<ApiResult<List<HydroMeterOutput>>>> ElectricListEachTotal([FromBody] HydroMeterInput input)
{
//switch (input.Mode)
//{
// case HydroMeterInputSearchMode.All:
// break;
// case HydroMeterInputSearchMode.Custom: break;
// default:
// break;
//}
ApiResult<List<HydroMeterOutput>> apiResult = new ApiResult<List<HydroMeterOutput>>(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<HydroMeterRawDataOutput>(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<string>("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();