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, IStationReportRepository { public StationReportRepository(IDatabaseHelper databaseHelper) : base(databaseHelper) { tableName = "power_station"; } public async Task> GetInverterId(string DBname, Select_table post) { List result = new List(); 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(sql)).ToList(); } catch (Exception exception) { throw exception; } finally { conn.Close(); } return result; } } public async Task 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(sql); } catch (Exception exception) { throw exception; } finally { conn.Close(); } return a; } } } }