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 AnalysisStationCombineRepository : RepositoryBase, IAnalysisStationCombineRepository { public AnalysisStationCombineRepository(IDatabaseHelper databaseHelper) : base(databaseHelper) { tableName = "power_station"; } public async Task GetPowerStationInfoList(ChartInput post) { var a = new AnalysisStationCombine(); using (IDbConnection conn = _databaseHelper.GetConnection()) { conn.Open(); using (var trans = conn.BeginTransaction()) { try { string sql = ""; switch(post.SeacrhType) { case 0: string timerange = Convert.ToDateTime(post.Timerange).ToString("yyyy-MM-dd"); sql = $@"SELECT m.*,n.*,o.* FROM ( SELECT SUM(TOTALMONEY) AS All_money, SUM(TOTALKWH) AS All_kwh, SUM(TOTALCARBON) AS All_Carbon from (SELECT psm.PowerStationId, max(psm.TIMESTAMP) AS TIMESTAMP FROM power_station_history_month psm WHERE PowerStationId IN @ids GROUP BY PowerStationId) a LEFT JOIN power_station_history_month psm ON a.PowerStationId = psm.PowerStationId AND a.TIMESTAMP = psm.TIMESTAMP ) AS m, ( SELECT SUM(b.TODAYKWH) AS Now_kwh, SUM(b.TODAYMONEY) AS Now_money, AVG(b.KWHKWP) AS Now_KWH_KWP , AVG(b.PR) AS Now_PR, SUM(b.TODAYCARBON) AS Now_Carbon FROM (SELECT MAX(a.`TIMESTAMP`) AS maxTIMESTAMP FROM (SELECT * FROM power_station_history_hour hr WHERE DATE_FORMAT(hr.`TIMESTAMP`,'%Y-%m-%d') = '{timerange}') a ) c LEFT JOIN (SELECT * FROM power_station_history_hour hr WHERE DATE_FORMAT(hr.`TIMESTAMP`,'%Y-%m-%d') = '{timerange}' ) b ON c.maxTIMESTAMP = b.`TIMESTAMP` WHERE PowerStationId IN @ids ) AS n, ( SELECT AVG(avg_kwhkwp) AS All_KWH_KWP, AVG(avg_PR) AS All_PR from power_station WHERE Id IN @ids ) AS o"; break; case 1: var time = post.Timerange.Split('-'); sql = $@"SELECT m.*,n.*,o.* FROM ( SELECT SUM(TOTALMONEY) AS All_money, SUM(TOTALKWH) AS All_kwh, SUM(TOTALCARBON) AS All_Carbon from (SELECT psm.PowerStationId, max(psm.TIMESTAMP) AS TIMESTAMP FROM power_station_history_month psm WHERE PowerStationId IN @ids GROUP BY PowerStationId) a LEFT JOIN power_station_history_month psm ON a.PowerStationId = psm.PowerStationId AND a.TIMESTAMP = psm.TIMESTAMP ) AS m, ( SELECT SUM(b.TODAYKWH) AS Now_kwh, SUM(b.MONEY) AS Now_money, AVG(b.KWHKWP) AS Now_KWH_KWP, AVG(b.PR) AS Now_PR, SUM(b.CARBON) AS Now_Carbon FROM power_station_history_day b WHERE PowerStationId IN @ids AND TIMESTAMP BETWEEN '{time[0]}' AND '{time[1]}' ) AS n, ( SELECT AVG(avg_kwhkwp) AS All_KWH_KWP, AVG(avg_PR) AS All_PR from power_station WHERE Id IN @ids ) AS o"; break; case 2: sql = $@"SELECT m.*,n.*,o.* FROM ( SELECT SUM(TOTALMONEY) AS All_money, SUM(TOTALKWH) AS All_kwh, SUM(TOTALCARBON) AS All_Carbon from (SELECT psm.PowerStationId, max(psm.TIMESTAMP) AS TIMESTAMP FROM power_station_history_month psm WHERE PowerStationId IN @ids GROUP BY PowerStationId) a LEFT JOIN power_station_history_month psm ON a.PowerStationId = psm.PowerStationId AND a.TIMESTAMP = psm.TIMESTAMP ) AS m, ( SELECT SUM(b.TODAYKWH) AS Now_kwh, SUM(b.MONEY) AS Now_money, AVG(b.KWHKWP) AS Now_KWH_KWP, AVG(b.PR) AS Now_PR, SUM(b.CARBON) AS Now_Carbon FROM power_station_history_day b WHERE PowerStationId IN @ids AND DATE_FORMAT(TIMESTAMP, '%Y-%m') = '{post.Timerange}' ) AS n, ( SELECT AVG(avg_kwhkwp) AS All_KWH_KWP, AVG(avg_PR) AS All_PR from power_station WHERE Id IN @ids ) AS o"; break; case 3: sql = $@"SELECT m.*,n.*,o.* FROM ( SELECT SUM(TOTALMONEY) AS All_money, SUM(TOTALKWH) AS All_kwh, SUM(TOTALCARBON) AS All_Carbon from (SELECT psm.PowerStationId, max(psm.TIMESTAMP) AS TIMESTAMP FROM power_station_history_month psm WHERE PowerStationId IN @ids GROUP BY PowerStationId) a LEFT JOIN power_station_history_month psm ON a.PowerStationId = psm.PowerStationId AND a.TIMESTAMP = psm.TIMESTAMP ) AS m, ( SELECT SUM(b.MONTHKWH) AS Now_kwh, SUM(b.MONEY) AS Now_money, AVG(b.KWHKWP) AS Now_KWH_KWP, AVG(b.PR) AS Now_PR, SUM(b.CARBON) AS Now_Carbon FROM power_station_history_month b WHERE PowerStationId IN @ids AND DATE_FORMAT(TIMESTAMP, '%Y') = '{post.Timerange}' ) AS n, ( SELECT AVG(avg_kwhkwp) AS All_KWH_KWP, AVG(avg_PR) AS All_PR from power_station WHERE Id IN @ids ) AS o"; break; } a = await conn.QueryFirstOrDefaultAsync(sql,new { ids = post.StationIds}); } catch (Exception exception) { throw exception; } finally { conn.Close(); } } } return a; } public async Task> GetChart(ChartInput post) { var a = new List(); using (IDbConnection conn = _databaseHelper.GetConnection()) { conn.Open(); using (var trans = conn.BeginTransaction()) { try { string sql = ""; switch (post.SeacrhType) { case 0: sql = $@"SELECT DATE_FORMAT(p.TIMESTAMP,'%h %p') AS `Time`, SUM(p.KWH) AS KWH, SUM(s.Irradiance) AS Irradiance, AVG(s.Temperature) AS Temperature FROM (SELECT * FROM power_station_history_hour ps WHERE ps.PowerStationId IN @ids AND DATE_FORMAT(ps.TIMESTAMP,'%Y-%m-%d') = '{post.Timerange}') p LEFT JOIN (SELECT * FROM sensor_history_hour sh WHERE sh.PowerStationId IN @ids AND DATE_FORMAT(sh.TIMESTAMP,'%Y-%m-%d') = '{post.Timerange}') s ON p.TIMESTAMP = s.TIMESTAMP AND p.PowerStationId = s.PowerStationId GROUP BY p.TIMESTAMP"; break; case 1: var time = post.Timerange.Replace(" ","").Split('-'); sql = $@"SELECT DATE_FORMAT(p.TIMESTAMP,'%Y-%m-%d') AS `Time`, SUM(p.TODAYKWH) AS KWH, SUM(s.Irradiance) AS Irradiance, AVG(s.Temperature) AS Temperature FROM (SELECT * FROM power_station_history_day ps WHERE ps.PowerStationId IN @ids AND DATE_FORMAT(ps.TIMESTAMP,'%Y-%m-%d') BETWEEN '{time[0].Replace('/', '-')}' AND '{time[1].Replace('/', '-')}') p LEFT JOIN (SELECT * FROM sensor_history_day sh WHERE sh.PowerStationId IN @ids AND DATE_FORMAT(sh.TIMESTAMP,'%Y-%m-%d') BETWEEN '{time[0].Replace('/', '-')}' AND '{time[1].Replace('/', '-')}') s ON s.TIMESTAMP = p.TIMESTAMP AND p.PowerStationId = s.PowerStationId GROUP BY p.TIMESTAMP"; break; case 2: sql = $@"SELECT DATE_FORMAT(p.TIMESTAMP,'%Y-%m-%d') AS `Time`, SUM(p.TODAYKWH) AS KWH, SUM(s.Irradiance) AS Irradiance, AVG(s.Temperature) AS Temperature FROM (SELECT * FROM power_station_history_day ps WHERE ps.PowerStationId IN @ids AND DATE_FORMAT(ps.TIMESTAMP,'%Y-%m') = '{post.Timerange}') p LEFT JOIN (SELECT * FROM sensor_history_day sh WHERE sh.PowerStationId IN @ids AND DATE_FORMAT(sh.TIMESTAMP,'%Y-%m') = '{post.Timerange}') s ON s.TIMESTAMP = p.TIMESTAMP AND p.PowerStationId = s.PowerStationId GROUP BY p.TIMESTAMP"; break; case 3: sql = $@"SELECT DATE_FORMAT(p.TIMESTAMP,'%Y-%m') AS `Time`, SUM(p.MONTHKWH) AS KWH, SUM(s.Irradiance) AS Irradiance, AVG(s.Temperature) AS Temperature FROM (SELECT * FROM power_station_history_month ps WHERE ps.PowerStationId IN @ids AND DATE_FORMAT(ps.TIMESTAMP,'%Y') = '{post.Timerange}') p LEFT JOIN (SELECT * FROM sensor_history_month sh WHERE sh.PowerStationId IN @ids AND DATE_FORMAT(sh.TIMESTAMP,'%Y') = '{post.Timerange}') s ON s.TIMESTAMP = p.TIMESTAMP AND p.PowerStationId = s.PowerStationId GROUP BY p.TIMESTAMP"; break; } a = (await conn.QueryAsync(sql,new { ids = post.StationIds})).ToList(); } catch (Exception exception) { throw exception; } finally { conn.Close(); } } } return a; } } }