[FE API] 更新各分盤總盤查詢功能,回傳之前的 json 格式

This commit is contained in:
keke 2023-08-29 15:03:08 +08:00
parent 69d564c167
commit 0cecb31e6d
2 changed files with 103 additions and 44 deletions

View File

@ -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<List<HydroMeterOutput>> result = new List<List<HydroMeterOutput>>();
var building = backendRepository.GetAllAsync<HydroBuildList>("select * from building where deleted = 0").Result;
@ -999,9 +999,9 @@ namespace FrontendWebApi.ApiControllers
[HttpPost]
[Route("api/ElectricListEachTotal")]
public async Task<ActionResult<ApiResult<List<HydroMeterRawDataEachTotalOutput>>>> ElectricListEachTotal([FromBody] HydroMeterInput input)
public async Task<ActionResult<ApiResult<List<HydroMeterEachTotalOutput>>>> ElectricListEachTotal([FromBody] HydroMeterInput input)
{
ApiResult<List<HydroMeterRawDataEachTotalOutput>> apiResult = new ApiResult<List<HydroMeterRawDataEachTotalOutput>>(jwt_str);
ApiResult<List<HydroMeterEachTotalOutput>> apiResult = new ApiResult<List<HydroMeterEachTotalOutput>>(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<HydroMeterRawDataEachTotalOutput>() { };
apiResult.Data = new List<HydroMeterEachTotalOutput>() { };
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<HydroMeterRawDataEachTotalOutput>(sql);
List<HydroMeterRawDataEachTotalOutput> ResultData = new List<HydroMeterRawDataEachTotalOutput>();
//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<HydroMeterEachTotalOutput> ResultData = new List<HydroMeterEachTotalOutput>();
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<HydroMeterRawDataOutput>();
//l.device_full_name = await backendRepository.GetOneAsync<string>($"select full_name from device where device_number = '{l.device_number}'");
l.rawData = new List<HydroMeterRawDataOutput>();
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<string>($"select full_name from device where device_number = '{l.device_number}'");
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();
l.price = input.price.HasValue
? (Math.Round(input.price.Value, 2)).ToString()
: Math.Round((await backendRepository.GetOneAsync<decimal>("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; // 欲查詢的月份

View File

@ -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<HydroMeterRawDataEachTotalOutput> rawData { get; set; }
public List<HydroMeterRawDataOutput> 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; }
}