diff --git a/FrontendWebApi/ApiControllers/HistoryController.cs b/FrontendWebApi/ApiControllers/HistoryController.cs index a3ff0fa..ff8622a 100644 --- a/FrontendWebApi/ApiControllers/HistoryController.cs +++ b/FrontendWebApi/ApiControllers/HistoryController.cs @@ -26,15 +26,18 @@ namespace FrontendWebApi.ApiControllers { private readonly IBackendRepository backendRepository; private readonly IFrontendRepository frontendRepository; + private readonly IBackgroundServiceMsSqlRepository backgroundServiceMsSqlRepository; public HistoryController ( IBackendRepository backendRepository, - IFrontendRepository frontendRepository + IFrontendRepository frontendRepository, + IBackgroundServiceMsSqlRepository backgroundServiceMsSqlRepository ) { this.backendRepository = backendRepository; this.frontendRepository = frontendRepository; + this.backgroundServiceMsSqlRepository = backgroundServiceMsSqlRepository; } /// @@ -1083,5 +1086,57 @@ namespace FrontendWebApi.ApiControllers } return Ok(apiResult); } + + /// + /// 即使歷史資料(前7天) + /// + /// + /// + [HttpPost] + [Route("api/HistoryRealTime")] + public async Task>>> GetHistoryRealTime ([FromBody] HistoryRealTimeInput input) + { + ApiResult> apiResult = new ApiResult>(jwt_str); + apiResult.Data = new List(); + if (!jwtlife) + { + apiResult.Code = "5000"; + return BadRequest(apiResult); + } + if (input.tableDeviceName.Count == 0) + { + apiResult.Code = "9998"; + apiResult.Msg = "沒有設備被選擇"; + return BadRequest(apiResult); + } + + try + { + List tableName = new List(); + foreach (var dn in input.tableDeviceName) + { + tableName.AddRange(await backgroundServiceMsSqlRepository.GetAllAsync($"select table_name from INFORMATION_SCHEMA.TABLES where table_name like '{dn}%'")); + } + + if (tableName.Count > 0) + { + foreach (var tn in tableName) + { + var sql = $@"select timestamp as timeStamp, round(value, 2) as value from {tn} where replace(convert(varchar, [timestamp], 111), '/', '-') >= @startTime and replace(convert(varchar, [timestamp], 111), '/', '-') <= @endTime ordr by timestamp"; + apiResult.Data.AddRange( + await backgroundServiceMsSqlRepository.GetAllAsync(sql, new { startTime = input.startTime, endTime = input.endTime }) + ); + } + } + } + catch (Exception exception) + { + apiResult.Code = "9999"; + apiResult.Msg = "系統內部錯誤,請聯絡管理者。"; + Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); + return Ok(apiResult); + } + return Ok(apiResult); + } } } diff --git a/FrontendWebApi/ApiControllers/HydroMeterController.cs b/FrontendWebApi/ApiControllers/HydroMeterController.cs index aeddb78..281bfd0 100644 --- a/FrontendWebApi/ApiControllers/HydroMeterController.cs +++ b/FrontendWebApi/ApiControllers/HydroMeterController.cs @@ -79,11 +79,11 @@ namespace FrontendWebApi.ApiControllers if (input.tableType == "year") { - sqlGroup = $@" group by DATE_FORMAT(start_timestamp, @dateFormat), DATE_FORMAT(end_timestamp, @dateFormat), device_number "; - sqlAvgRawData = " round(avg(avg_rawdata), 2) as avg_rawdata"; + sqlGroup = $@" group by year(start_timestamp), year(end_timestamp), device_number "; + sqlAvgRawData = " round(avg(avg_rawdata), 2) as avg_rawdata, year(start_timestamp) as start_timestamp, year(end_timestamp) as end_timestamp "; } else - sqlAvgRawData = " round(avg_rawdata, 2) as avg_rawdata"; + sqlAvgRawData = " round(avg_rawdata, 2) as avg_rawdata, start_timestamp, end_timestamp "; var table = input.tableType == "year" ? "archive_electric_meter_day" : "archive_electric_meter_" + input.tableType; var dateFormat = input.tableType == "day" || input.tableType == "week" ? "%Y-%m-%d" : input.tableType == "month" ? "%Y-%m" : input.tableType == "year" ? "%Y" : null; @@ -107,7 +107,7 @@ namespace FrontendWebApi.ApiControllers ) ) fd left join ( - select device_number, {sqlAvgRawData}, start_timestamp, end_timestamp + select device_number, {sqlAvgRawData} from {table} where start_timestamp >= @startTime and end_timestamp < @endTime and point = 'KWH' and SUBSTRING_INDEX(device_number, '_', 1) = @building_tag {sqlWhere} {sqlGroup} @@ -204,11 +204,11 @@ namespace FrontendWebApi.ApiControllers if (input.tableType == "year") { - sqlGroup = $@" group by DATE_FORMAT(start_timestamp, @dateFormat), DATE_FORMAT(end_timestamp, @dateFormat), device_number "; - sqlAvgRawData = " round(avg(avg_rawdata), 2) as avg_rawdata"; + sqlGroup = $@" group by year(start_timestamp), year(end_timestamp), device_number "; + sqlAvgRawData = " round(avg(avg_rawdata), 2) as avg_rawdata, year(start_timestamp) as start_timestamp, year(end_timestamp) as end_timestamp "; } else - sqlAvgRawData = " round(avg_rawdata, 2) as avg_rawdata"; + sqlAvgRawData = " round(avg_rawdata, 2) as avg_rawdata, start_timestamp, end_timestamp "; var table = input.tableType == "year" ? "archive_water_meter_day" : "archive_water_meter_" + input.tableType; var dateFormat = input.tableType == "day" || input.tableType == "week" ? "%Y-%m-%d" : input.tableType == "month" ? "%Y-%m" : input.tableType == "year" ? "%Y" : null; @@ -232,7 +232,7 @@ namespace FrontendWebApi.ApiControllers ) ) fd left join ( - select device_number, {sqlAvgRawData}, start_timestamp, end_timestamp + select device_number, {sqlAvgRawData} from {table} where start_timestamp >= @startTime and end_timestamp < @endTime and point = 'RCV' and SUBSTRING_INDEX(device_number, '_', 1) = @building_tag {sqlWhere} {sqlGroup} diff --git a/FrontendWebApi/Models/HistoryClass.cs b/FrontendWebApi/Models/HistoryClass.cs index 8b8c123..2c97502 100644 --- a/FrontendWebApi/Models/HistoryClass.cs +++ b/FrontendWebApi/Models/HistoryClass.cs @@ -295,4 +295,17 @@ namespace FrontendWebApi.Models public string dateType { get; set; } public string type { get; set; } } + + public class HistoryRealTimeInput + { + public List tableDeviceName { get; set; } + public string startTime { get; set; } + public string endTime { get; set; } + } + + public class HistoryRealTimeOutput + { + public double value { get; set; } + public DateTime timeStamp { get; set; } + } } diff --git a/FrontendWebApi/Models/HydroMeter.cs b/FrontendWebApi/Models/HydroMeter.cs index 774d0c9..7d9a582 100644 --- a/FrontendWebApi/Models/HydroMeter.cs +++ b/FrontendWebApi/Models/HydroMeter.cs @@ -10,7 +10,7 @@ namespace FrontendWebApi.Models public class HydroMeterInput { - public string tableType { get; set; } //day, week, month + public string tableType { get; set; } //day, week, month, year public string building_tag { get; set; } public List floor_tag { get; set; } public string startTime { get; set; } diff --git a/FrontendWebApi/Startup.cs b/FrontendWebApi/Startup.cs index 0b4cf1f..956d4d8 100644 --- a/FrontendWebApi/Startup.cs +++ b/FrontendWebApi/Startup.cs @@ -91,6 +91,7 @@ namespace FrontendWebApi services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); #endregion Repository `J #region JWT `J diff --git a/FrontendWebApi/appsettings.json b/FrontendWebApi/appsettings.json index 2a2253a..eef838c 100644 --- a/FrontendWebApi/appsettings.json +++ b/FrontendWebApi/appsettings.json @@ -29,6 +29,13 @@ "Root": "SzdxEgaJJ7tcTCrUl2zKsA==", "Password": "FVAPxztxpY4gJJKQ/se4bQ==" }, + "MSSqlDBConfig": { + "Server": "bJm+UAtbeaTjDmp/A5ep2w==", //0.130 + "Port": "S5cUXKnKOacFtFy9+0dtpw==", + "Database": "VvfWH/59gQguY2eA2xBCug==", //taipei_dome + "Root": "sD8GZ9UPiIQGU6dU011/4A==", + "Password": "0O24es2ZRF5uoJ4aU+YCdg==" + } //"MSSqlDBConfig": { // "Server": "avZg8PA8C9GVgYZBgEKzCg==", // "Port": "lJA0KPkG6RvFfTgWiXFyUw==",