176 lines
10 KiB
C#
176 lines
10 KiB
C#
using Dapper;
|
|
using SolarPower.Helper;
|
|
using SolarPower.Models;
|
|
using SolarPower.Repository.Interface;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace SolarPower.Repository.Implement
|
|
{
|
|
public class StationReportRepository : RepositoryBase<StationReport>, IStationReportRepository
|
|
{
|
|
public StationReportRepository(IDatabaseHelper databaseHelper) : base(databaseHelper)
|
|
{
|
|
tableName = "power_station";
|
|
}
|
|
|
|
|
|
public async Task<List<string>> GetInverterId(string DBname, Select_table post)
|
|
{
|
|
List<string> result = new List<string>();
|
|
using (IDbConnection conn = _databaseHelper.GetConnection())
|
|
{
|
|
conn.Open();
|
|
try
|
|
{
|
|
string sql = @$"SELECT InverterId from {DBname}.inverter i left JOIN {DBname}.controller c ON i.ControllerId = c.Id
|
|
WHERE i.Deleted != 1 AND c.PowerStationId = {post.PowerStation}";
|
|
result = (await conn.QueryAsync<string>(sql)).ToList();
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
throw exception;
|
|
}
|
|
finally
|
|
{
|
|
conn.Close();
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
public async Task<dynamic> Gettablebody(Select_table post)
|
|
{
|
|
using (IDbConnection conn = _databaseHelper.GetConnection())
|
|
{
|
|
dynamic a;
|
|
conn.Open();
|
|
try
|
|
{
|
|
string sql = "";
|
|
switch(post.FormType)
|
|
{
|
|
case 0:
|
|
sql = @$"
|
|
SET @sql = NULL;
|
|
SELECT
|
|
GROUP_CONCAT(DISTINCT
|
|
CONCAT('max(case when INVERTERID = ''', INVERTERID, ''' then a.KWH end) ''inv_', right(INVERTERID, 4), '''')
|
|
) INTO @sql
|
|
FROM inverter_history_hour;
|
|
SET @sql = CONCAT('SELECT DATE_FORMAT(a.TIMESTAMP,''%m-%d %H'') report_date, ', @sql,
|
|
', b.KWH hourKWH, round((b.KWH / (SELECT MAX(TODAYKWH) FROM power_station_history_hour WHERE DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') = ''{post.Time}'' and powerstationid = {post.PowerStation}))*100,2) ''hourKWHp'', d.irradiance ''irradiance'', d.Temperature ''temperature'',
|
|
b.money ''hourmoney'', c.TODAYKWH ''totKWH'', c.KWHKWP ''totKWHKWP'', c.money ''totmoney'', stationName, powerRate daymoney, c.SOLARHOUR tothour,round(b.PR, 2) as pr
|
|
FROM inverter_history_hour a left join
|
|
( # 每小時加總 inv
|
|
select powerStationid, DATE_FORMAT(TIMESTAMP,''%Y-%m-%d %H:%i'') report_date, siteid, sitetype, round(KWH, 2) KWH,
|
|
round(TODAYKWH, 2) TODAYKWH,round(KWHKWP, 2) KWHKWP, round(PR, 2) PR, round(money, 2) money
|
|
from power_station_history_hour
|
|
where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') = ''{post.Time}''
|
|
) b on a.powerStationid = b.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d %H:%i'') = b.report_date
|
|
left join
|
|
( # day
|
|
select powerStationid, DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') report_date, sitetype, round(TODAYKWH, 2) TODAYKWH,round(KWHKWP, 2) KWHKWP
|
|
, round(PR, 2) PR, round(money, 2) money , round(SOLARHOUR, 2) SOLARHOUR
|
|
from power_station_history_day
|
|
where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') = ''{post.Time}''
|
|
) c on a.powerStationid = c.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') = c.report_date
|
|
left join
|
|
(
|
|
select powerStationID, DATE_FORMAT(TIMESTAMP,''%Y-%m-%d %H:%i'')report_date, irradiance, Temperature
|
|
from sensor_history_hour
|
|
where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') = ''{post.Time}''
|
|
) d on a.powerStationid = d.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d %H:%i'') = d.report_date
|
|
join
|
|
(
|
|
select id, name stationName, powerRate from power_station where id = {post.PowerStation}
|
|
)z on a.powerstationid = z.id
|
|
where DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') = ''{post.Time}''
|
|
GROUP BY DATE_FORMAT(TIMESTAMP,''%Y-%m-%d %H:%i'')
|
|
order by DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d %H:%i'') ');
|
|
|
|
#select @sql as 'mySelect'; #顯示動態語法
|
|
PREPARE stmt FROM @sql;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;";
|
|
break;
|
|
case 1:
|
|
if(post.SearchType == 2)
|
|
{
|
|
sql = @$"
|
|
SET @sql = NULL;
|
|
SELECT
|
|
GROUP_CONCAT(DISTINCT
|
|
CONCAT('max(case when INVERTERID = ''', INVERTERID, ''' then round(a.KWH, 2) end) ''inv_', right(INVERTERID, 4), '''')
|
|
) INTO @sql
|
|
FROM inverter_history_hour;
|
|
SET @sql = CONCAT('SELECT DATE_FORMAT(a.TIMESTAMP,''%m/%d'') report_date, ', @sql,
|
|
',b.TODAYKWH ''dayKWH'', round((b.TODAYKWH / c.monthKWH)*100,2) ''dayKWHp'', b.SOLARHOUR ''tothour'', b.KWHKWP ''KWHKWP'', b.PR,
|
|
d.irradiance ''irradiance'', d.Temperature ''temperature'', b.money ''soldmoney'',
|
|
c.monthKWH ''monthKWH'', c.money ''monthmoney'', stationName, powerRate ''monthmoneyone''
|
|
FROM inverter_history_day a left join
|
|
( # 每日加總 inv
|
|
select powerStationid, DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') report_date, siteid, sitetype, #, round(KWH, 2) KWH,
|
|
round(todayKWH, 2) todayKWH,round(KWHKWP, 2) KWHKWP, round(PR, 2) PR, ifnull(round(money, 2),0) money, round(SOLARHOUR, 2) SOLARHOUR
|
|
from power_station_history_day
|
|
where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m'') = ''{post.Time}''
|
|
) b on a.powerStationid = b.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') = b.report_date
|
|
left join
|
|
( # month
|
|
select powerStationid, DATE_FORMAT(TIMESTAMP,''%Y-%m'') report_date, sitetype, round(monthKWH, 2) monthKWH,round(KWHKWP, 2) KWHKWP
|
|
, round(PR, 2) PR, round(money, 2) money , round(SOLARHOUR, 2) SOLARHOUR
|
|
from power_station_history_month
|
|
where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m'') = ''{post.Time}''
|
|
) c on a.powerStationid = c.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m'') = c.report_date
|
|
left join
|
|
(
|
|
select powerStationID, DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'')report_date, irradiance, Temperature
|
|
from sensor_history_day
|
|
where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m'') = ''{post.Time}''
|
|
) d on a.powerStationid = d.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') = d.report_date
|
|
join
|
|
(
|
|
select id, name stationName, powerRate from power_station where id = {post.PowerStation}
|
|
)z on a.powerstationid = z.id
|
|
where DATE_FORMAT(a.TIMESTAMP,''%Y-%m'') = ''{post.Time}''
|
|
GROUP BY DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'')
|
|
order by DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') ');
|
|
|
|
# select @sql as 'mySelect'; #顯示動態語法
|
|
PREPARE stmt FROM @sql;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;";
|
|
}
|
|
else
|
|
{
|
|
sql = "";
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
|
|
a = await conn.QueryAsync<dynamic>(sql);
|
|
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
throw exception;
|
|
}
|
|
finally
|
|
{
|
|
conn.Close();
|
|
}
|
|
return a;
|
|
}
|
|
}
|
|
}
|
|
}
|