|
|
@ -16,20 +16,44 @@ public class EmeterEnergyChangeService : BaseServices<EmeterEnergyChange>
|
|
|
|
|
|
|
|
|
|
|
|
public async Task<List<EmeterEnergyChange>> SevenDaysElectrical()
|
|
|
|
public async Task<List<EmeterEnergyChange>> SevenDaysElectrical()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
// 根据code分组,取最近7天数据,每天最大值-最小值=当日用电量,如果当天目前只有一条数据,取当天最大值-前一天最大值=当天耗电量
|
|
|
|
string sql = @"
|
|
|
|
string sql = @"
|
|
|
|
|
|
|
|
WITH daily_max_min AS (
|
|
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
|
|
`code`,
|
|
|
|
|
|
|
|
DATE(`upload_time`) AS `UploadTime`,
|
|
|
|
|
|
|
|
MAX(`value`) AS `MaxValue`,
|
|
|
|
|
|
|
|
MIN(`value`) AS `MinValue`
|
|
|
|
|
|
|
|
FROM
|
|
|
|
|
|
|
|
`emeter_energy_change`
|
|
|
|
|
|
|
|
WHERE
|
|
|
|
|
|
|
|
`upload_time` >= NOW() - INTERVAL 8 DAY
|
|
|
|
|
|
|
|
GROUP BY
|
|
|
|
|
|
|
|
`code`, DATE(`upload_time`)
|
|
|
|
|
|
|
|
), previous_day_max AS (
|
|
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
|
|
`code`,
|
|
|
|
|
|
|
|
`UploadTime`,
|
|
|
|
|
|
|
|
LAG(`MaxValue`) OVER (PARTITION BY `code` ORDER BY `UploadTime`) AS `PreviousMaxValue`
|
|
|
|
|
|
|
|
FROM
|
|
|
|
|
|
|
|
daily_max_min
|
|
|
|
|
|
|
|
)
|
|
|
|
SELECT
|
|
|
|
SELECT
|
|
|
|
code,
|
|
|
|
d.`code`,
|
|
|
|
date(upload_time) AS UploadTime,
|
|
|
|
d.`UploadTime`,
|
|
|
|
MAX(value) - MIN(value) AS Value
|
|
|
|
CASE
|
|
|
|
|
|
|
|
WHEN d.`MaxValue` = d.`MinValue` THEN COALESCE(d.`MaxValue` - p.`PreviousMaxValue`, d.`MaxValue`)
|
|
|
|
|
|
|
|
ELSE d.`MaxValue` - d.`MinValue`
|
|
|
|
|
|
|
|
END AS `Value`
|
|
|
|
FROM
|
|
|
|
FROM
|
|
|
|
emeter_energy_change
|
|
|
|
daily_max_min d
|
|
|
|
|
|
|
|
LEFT JOIN
|
|
|
|
|
|
|
|
previous_day_max p ON d.`code` = p.`code` AND d.`UploadTime` = p.`UploadTime`
|
|
|
|
WHERE
|
|
|
|
WHERE
|
|
|
|
upload_time >= NOW() - INTERVAL 7 DAY
|
|
|
|
d.`UploadTime` >= NOW() - INTERVAL 7 DAY
|
|
|
|
GROUP BY
|
|
|
|
|
|
|
|
code, date(upload_time)
|
|
|
|
|
|
|
|
ORDER BY
|
|
|
|
ORDER BY
|
|
|
|
code, date(upload_time);
|
|
|
|
d.`code`, d.`UploadTime`;
|
|
|
|
";
|
|
|
|
";
|
|
|
|
|
|
|
|
|
|
|
|
List<EmeterEnergyChange> emeterEnergies = await _emeterEnergyChangeRep.SqlQueryable(sql);
|
|
|
|
List<EmeterEnergyChange> emeterEnergies = await _emeterEnergyChangeRep.SqlQueryable(sql);
|
|
|
|
return emeterEnergies;
|
|
|
|
return emeterEnergies;
|
|
|
@ -55,19 +79,41 @@ public class EmeterEnergyChangeService : BaseServices<EmeterEnergyChange>
|
|
|
|
public async Task<List<EmeterEnergyChange>> GetTodayHourlyElectricalData()
|
|
|
|
public async Task<List<EmeterEnergyChange>> GetTodayHourlyElectricalData()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
string sql = @"
|
|
|
|
string sql = @"
|
|
|
|
SELECT
|
|
|
|
WITH hourly_max_min AS (
|
|
|
|
code,
|
|
|
|
SELECT
|
|
|
|
DATE_FORMAT(upload_time, '%Y-%m-%d %H:00:00') AS Hour,
|
|
|
|
`code`,
|
|
|
|
MAX(value) - MIN(value) AS Value
|
|
|
|
DATE_FORMAT(`upload_time`, '%Y-%m-%d %H:00:00') AS `Hour`,
|
|
|
|
FROM
|
|
|
|
MAX(`value`) AS `MaxValue`,
|
|
|
|
emeter_energy_change
|
|
|
|
MIN(`value`) AS `MinValue`,
|
|
|
|
WHERE
|
|
|
|
COUNT(*) AS `record_count`
|
|
|
|
DATE(upload_time) = CURDATE()
|
|
|
|
FROM
|
|
|
|
GROUP BY
|
|
|
|
`emeter_energy_change`
|
|
|
|
code, DATE_FORMAT(upload_time, '%Y-%m-%d %H:00:00')
|
|
|
|
WHERE
|
|
|
|
ORDER BY
|
|
|
|
DATE(`upload_time`) = CURDATE()
|
|
|
|
code, Hour;
|
|
|
|
GROUP BY
|
|
|
|
";
|
|
|
|
`code`, DATE_FORMAT(`upload_time`, '%Y-%m-%d %H:00:00')
|
|
|
|
|
|
|
|
), previous_hour_max AS (
|
|
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
|
|
`code`,
|
|
|
|
|
|
|
|
`Hour`,
|
|
|
|
|
|
|
|
LAG(`MaxValue`) OVER (PARTITION BY `code` ORDER BY `Hour`) AS `PreviousMaxValue`
|
|
|
|
|
|
|
|
FROM
|
|
|
|
|
|
|
|
`hourly_max_min`
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
|
|
h.`code`,
|
|
|
|
|
|
|
|
h.`Hour`,
|
|
|
|
|
|
|
|
CASE
|
|
|
|
|
|
|
|
WHEN h.`record_count` > 1 THEN h.`MaxValue` - h.`MinValue`
|
|
|
|
|
|
|
|
ELSE h.`MaxValue` - COALESCE(p.`PreviousMaxValue`, 0)
|
|
|
|
|
|
|
|
END AS `Value`
|
|
|
|
|
|
|
|
FROM
|
|
|
|
|
|
|
|
`hourly_max_min` h
|
|
|
|
|
|
|
|
LEFT JOIN
|
|
|
|
|
|
|
|
`previous_hour_max` p ON h.`code` = p.`code` AND h.`Hour` = p.`Hour`
|
|
|
|
|
|
|
|
ORDER BY
|
|
|
|
|
|
|
|
h.`code`, h.`Hour`;
|
|
|
|
|
|
|
|
";
|
|
|
|
List<EmeterEnergyChange> emeterEnergies = await _emeterEnergyChangeRep.SqlQueryable(sql);
|
|
|
|
List<EmeterEnergyChange> emeterEnergies = await _emeterEnergyChangeRep.SqlQueryable(sql);
|
|
|
|
return emeterEnergies;
|
|
|
|
return emeterEnergies;
|
|
|
|
}
|
|
|
|
}
|
|
|
|