mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-11-26 08:04:53 +00:00
Merge branch 'dev' into SP-1355-powr-clap-historical-data
This commit is contained in:
@ -1,25 +1,15 @@
|
|||||||
WITH params AS (
|
WITH total_energy AS (
|
||||||
SELECT
|
|
||||||
NULL::uuid AS device_id, -- filter: specific device (or NULL for all)
|
|
||||||
NULL::date AS input_date, -- filter: start date (or NULL for open range) -- filter: end date (or NULL for open range)
|
|
||||||
NULL::int AS hour, -- filter: hour of day (or NULL for all hours)
|
|
||||||
NULL::int AS min_kw -- filter: min kW consumed (or NULL for no filter)
|
|
||||||
),
|
|
||||||
|
|
||||||
total_energy AS (
|
|
||||||
SELECT
|
SELECT
|
||||||
log.device_id,
|
log.device_id,
|
||||||
log.event_time::date AS date,
|
log.event_time::date AS date,
|
||||||
EXTRACT(HOUR FROM log.event_time) AS hour,
|
EXTRACT(HOUR FROM log.event_time) AS hour,
|
||||||
|
TO_CHAR(log.event_time, 'MM-YYYY') AS event_month,
|
||||||
|
EXTRACT(YEAR FROM log.event_time)::int AS event_year,
|
||||||
MIN(log.value)::integer AS min_value,
|
MIN(log.value)::integer AS min_value,
|
||||||
MAX(log.value)::integer AS max_value
|
MAX(log.value)::integer AS max_value
|
||||||
FROM "device-status-log" log, params
|
FROM "device-status-log" log
|
||||||
WHERE log.code = 'EnergyConsumed'
|
WHERE log.code = 'EnergyConsumed'
|
||||||
AND (params.device_id IS NULL OR log.device_id = params.device_id)
|
GROUP BY 1,2,3,4,5
|
||||||
AND (params.input_date IS NULL OR log.event_time::date >= params.input_date)
|
|
||||||
AND (params.input_date IS NULL OR log.event_time::date <= params.input_date)
|
|
||||||
AND (params.hour IS NULL OR EXTRACT(HOUR FROM log.event_time) = params.hour)
|
|
||||||
GROUP BY log.device_id, log.event_time::date, EXTRACT(HOUR FROM log.event_time)
|
|
||||||
),
|
),
|
||||||
|
|
||||||
energy_phase_A AS (
|
energy_phase_A AS (
|
||||||
@ -27,15 +17,13 @@ energy_phase_A AS (
|
|||||||
log.device_id,
|
log.device_id,
|
||||||
log.event_time::date AS date,
|
log.event_time::date AS date,
|
||||||
EXTRACT(HOUR FROM log.event_time) AS hour,
|
EXTRACT(HOUR FROM log.event_time) AS hour,
|
||||||
|
TO_CHAR(log.event_time, 'MM-YYYY') AS event_month,
|
||||||
|
EXTRACT(YEAR FROM log.event_time)::int AS event_year,
|
||||||
MIN(log.value)::integer AS min_value,
|
MIN(log.value)::integer AS min_value,
|
||||||
MAX(log.value)::integer AS max_value
|
MAX(log.value)::integer AS max_value
|
||||||
FROM "device-status-log" log, params
|
FROM "device-status-log" log
|
||||||
WHERE log.code = 'EnergyConsumedA'
|
WHERE log.code = 'EnergyConsumedA'
|
||||||
AND (params.device_id IS NULL OR log.device_id = params.device_id)
|
GROUP BY 1,2,3,4,5
|
||||||
AND (params.input_date IS NULL OR log.event_time::date >= params.input_date)
|
|
||||||
AND (params.input_date IS NULL OR log.event_time::date <= params.input_date)
|
|
||||||
AND (params.hour IS NULL OR EXTRACT(HOUR FROM log.event_time) = params.hour)
|
|
||||||
GROUP BY log.device_id, log.event_time::date, EXTRACT(HOUR FROM log.event_time)
|
|
||||||
),
|
),
|
||||||
|
|
||||||
energy_phase_B AS (
|
energy_phase_B AS (
|
||||||
@ -43,15 +31,13 @@ energy_phase_B AS (
|
|||||||
log.device_id,
|
log.device_id,
|
||||||
log.event_time::date AS date,
|
log.event_time::date AS date,
|
||||||
EXTRACT(HOUR FROM log.event_time) AS hour,
|
EXTRACT(HOUR FROM log.event_time) AS hour,
|
||||||
|
TO_CHAR(log.event_time, 'MM-YYYY') AS event_month,
|
||||||
|
EXTRACT(YEAR FROM log.event_time)::int AS event_year,
|
||||||
MIN(log.value)::integer AS min_value,
|
MIN(log.value)::integer AS min_value,
|
||||||
MAX(log.value)::integer AS max_value
|
MAX(log.value)::integer AS max_value
|
||||||
FROM "device-status-log" log, params
|
FROM "device-status-log" log
|
||||||
WHERE log.code = 'EnergyConsumedB'
|
WHERE log.code = 'EnergyConsumedB'
|
||||||
AND (params.device_id IS NULL OR log.device_id = params.device_id)
|
GROUP BY 1,2,3,4,5
|
||||||
AND (params.input_date IS NULL OR log.event_time::date >= params.input_date)
|
|
||||||
AND (params.input_date IS NULL OR log.event_time::date <= params.input_date)
|
|
||||||
AND (params.hour IS NULL OR EXTRACT(HOUR FROM log.event_time) = params.hour)
|
|
||||||
GROUP BY log.device_id, log.event_time::date, EXTRACT(HOUR FROM log.event_time)
|
|
||||||
),
|
),
|
||||||
|
|
||||||
energy_phase_C AS (
|
energy_phase_C AS (
|
||||||
@ -59,20 +45,20 @@ energy_phase_C AS (
|
|||||||
log.device_id,
|
log.device_id,
|
||||||
log.event_time::date AS date,
|
log.event_time::date AS date,
|
||||||
EXTRACT(HOUR FROM log.event_time) AS hour,
|
EXTRACT(HOUR FROM log.event_time) AS hour,
|
||||||
|
TO_CHAR(log.event_time, 'MM-YYYY') AS event_month,
|
||||||
|
EXTRACT(YEAR FROM log.event_time)::int AS event_year,
|
||||||
MIN(log.value)::integer AS min_value,
|
MIN(log.value)::integer AS min_value,
|
||||||
MAX(log.value)::integer AS max_value
|
MAX(log.value)::integer AS max_value
|
||||||
FROM "device-status-log" log, params
|
FROM "device-status-log" log
|
||||||
WHERE log.code = 'EnergyConsumedC'
|
WHERE log.code = 'EnergyConsumedC'
|
||||||
AND (params.device_id IS NULL OR log.device_id = params.device_id)
|
GROUP BY 1,2,3,4,5
|
||||||
AND (params.input_date IS NULL OR log.event_time::date >= params.input_date)
|
|
||||||
AND (params.input_date IS NULL OR log.event_time::date <= params.input_date)
|
|
||||||
AND (params.hour IS NULL OR EXTRACT(HOUR FROM log.event_time) = params.hour)
|
|
||||||
GROUP BY log.device_id, log.event_time::date, EXTRACT(HOUR FROM log.event_time)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
t.device_id,
|
t.device_id,
|
||||||
t.date,
|
t.date,
|
||||||
|
t.event_year::text,
|
||||||
|
t.event_month,
|
||||||
t.hour,
|
t.hour,
|
||||||
(t.max_value - t.min_value) AS energy_consumed_kW,
|
(t.max_value - t.min_value) AS energy_consumed_kW,
|
||||||
(a.max_value - a.min_value) AS energy_consumed_A,
|
(a.max_value - a.min_value) AS energy_consumed_A,
|
||||||
@ -82,6 +68,4 @@ FROM total_energy t
|
|||||||
JOIN energy_phase_A a ON t.device_id = a.device_id AND t.date = a.date AND t.hour = a.hour
|
JOIN energy_phase_A a ON t.device_id = a.device_id AND t.date = a.date AND t.hour = a.hour
|
||||||
JOIN energy_phase_B b ON t.device_id = b.device_id AND t.date = b.date AND t.hour = b.hour
|
JOIN energy_phase_B b ON t.device_id = b.device_id AND t.date = b.date AND t.hour = b.hour
|
||||||
JOIN energy_phase_C c ON t.device_id = c.device_id AND t.date = c.date AND t.hour = c.hour
|
JOIN energy_phase_C c ON t.device_id = c.device_id AND t.date = c.date AND t.hour = c.hour
|
||||||
JOIN params p ON TRUE
|
ORDER BY 1,2;
|
||||||
WHERE (p.min_kw IS NULL OR (t.max_value - t.min_value) >= p.min_kw)
|
|
||||||
ORDER BY t.device_id, t.date, t.hour;
|
|
||||||
@ -0,0 +1,135 @@
|
|||||||
|
WITH total_energy AS (
|
||||||
|
SELECT
|
||||||
|
log.device_id,
|
||||||
|
log.event_time::date AS date,
|
||||||
|
EXTRACT(HOUR FROM log.event_time) AS hour,
|
||||||
|
TO_CHAR(log.event_time, 'MM-YYYY') AS event_month,
|
||||||
|
EXTRACT(YEAR FROM log.event_time)::int AS event_year,
|
||||||
|
MIN(log.value)::integer AS min_value,
|
||||||
|
MAX(log.value)::integer AS max_value
|
||||||
|
FROM "device-status-log" log
|
||||||
|
WHERE log.code = 'EnergyConsumed'
|
||||||
|
GROUP BY 1,2,3,4,5
|
||||||
|
),
|
||||||
|
|
||||||
|
energy_phase_A AS (
|
||||||
|
SELECT
|
||||||
|
log.device_id,
|
||||||
|
log.event_time::date AS date,
|
||||||
|
EXTRACT(HOUR FROM log.event_time) AS hour,
|
||||||
|
TO_CHAR(log.event_time, 'MM-YYYY') AS event_month,
|
||||||
|
EXTRACT(YEAR FROM log.event_time)::int AS event_year,
|
||||||
|
MIN(log.value)::integer AS min_value,
|
||||||
|
MAX(log.value)::integer AS max_value
|
||||||
|
FROM "device-status-log" log
|
||||||
|
WHERE log.code = 'EnergyConsumedA'
|
||||||
|
GROUP BY 1,2,3,4,5
|
||||||
|
),
|
||||||
|
|
||||||
|
energy_phase_B AS (
|
||||||
|
SELECT
|
||||||
|
log.device_id,
|
||||||
|
log.event_time::date AS date,
|
||||||
|
EXTRACT(HOUR FROM log.event_time) AS hour,
|
||||||
|
TO_CHAR(log.event_time, 'MM-YYYY') AS event_month,
|
||||||
|
EXTRACT(YEAR FROM log.event_time)::int AS event_year,
|
||||||
|
MIN(log.value)::integer AS min_value,
|
||||||
|
MAX(log.value)::integer AS max_value
|
||||||
|
FROM "device-status-log" log
|
||||||
|
WHERE log.code = 'EnergyConsumedB'
|
||||||
|
GROUP BY 1,2,3,4,5
|
||||||
|
),
|
||||||
|
|
||||||
|
energy_phase_C AS (
|
||||||
|
SELECT
|
||||||
|
log.device_id,
|
||||||
|
log.event_time::date AS date,
|
||||||
|
EXTRACT(HOUR FROM log.event_time) AS hour,
|
||||||
|
TO_CHAR(log.event_time, 'MM-YYYY') AS event_month,
|
||||||
|
EXTRACT(YEAR FROM log.event_time)::int AS event_year,
|
||||||
|
MIN(log.value)::integer AS min_value,
|
||||||
|
MAX(log.value)::integer AS max_value
|
||||||
|
FROM "device-status-log" log
|
||||||
|
WHERE log.code = 'EnergyConsumedC'
|
||||||
|
GROUP BY 1,2,3,4,5
|
||||||
|
)
|
||||||
|
, final_data as (
|
||||||
|
SELECT
|
||||||
|
t.device_id,
|
||||||
|
t.date,
|
||||||
|
t.event_year::text,
|
||||||
|
t.event_month,
|
||||||
|
t.hour,
|
||||||
|
(t.max_value - t.min_value) AS energy_consumed_kW,
|
||||||
|
(a.max_value - a.min_value) AS energy_consumed_A,
|
||||||
|
(b.max_value - b.min_value) AS energy_consumed_B,
|
||||||
|
(c.max_value - c.min_value) AS energy_consumed_C
|
||||||
|
FROM total_energy t
|
||||||
|
JOIN energy_phase_A a ON t.device_id = a.device_id AND t.date = a.date AND t.hour = a.hour
|
||||||
|
JOIN energy_phase_B b ON t.device_id = b.device_id AND t.date = b.date AND t.hour = b.hour
|
||||||
|
JOIN energy_phase_C c ON t.device_id = c.device_id AND t.date = c.date AND t.hour = c.hour
|
||||||
|
ORDER BY 1,2)
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO public."power-clamp-energy-consumed-daily"(
|
||||||
|
device_uuid,
|
||||||
|
energy_consumed_kw,
|
||||||
|
energy_consumed_a,
|
||||||
|
energy_consumed_b,
|
||||||
|
energy_consumed_c,
|
||||||
|
date
|
||||||
|
)
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
device_id,
|
||||||
|
SUM(CAST(energy_consumed_kw AS NUMERIC))::VARCHAR,
|
||||||
|
SUM(CAST(energy_consumed_a AS NUMERIC))::VARCHAR,
|
||||||
|
SUM(CAST(energy_consumed_b AS NUMERIC))::VARCHAR,
|
||||||
|
SUM(CAST(energy_consumed_c AS NUMERIC))::VARCHAR,
|
||||||
|
date
|
||||||
|
FROM final_data
|
||||||
|
GROUP BY device_id, date;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO public."power-clamp-energy-consumed-hourly"(
|
||||||
|
device_uuid,
|
||||||
|
energy_consumed_kw,
|
||||||
|
energy_consumed_a,
|
||||||
|
energy_consumed_b,
|
||||||
|
energy_consumed_c,
|
||||||
|
date,
|
||||||
|
hour
|
||||||
|
)
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
device_id,
|
||||||
|
SUM(CAST(energy_consumed_kw AS NUMERIC))::VARCHAR,
|
||||||
|
SUM(CAST(energy_consumed_a AS NUMERIC))::VARCHAR,
|
||||||
|
SUM(CAST(energy_consumed_b AS NUMERIC))::VARCHAR,
|
||||||
|
SUM(CAST(energy_consumed_c AS NUMERIC))::VARCHAR,
|
||||||
|
date,
|
||||||
|
hour
|
||||||
|
FROM final_data
|
||||||
|
GROUP BY 1,6,7
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO public."power-clamp-energy-consumed-monthly"(
|
||||||
|
device_uuid,
|
||||||
|
energy_consumed_kw,
|
||||||
|
energy_consumed_a,
|
||||||
|
energy_consumed_b,
|
||||||
|
energy_consumed_c,
|
||||||
|
month
|
||||||
|
)
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
device_id,
|
||||||
|
SUM(CAST(energy_consumed_kw AS NUMERIC))::VARCHAR,
|
||||||
|
SUM(CAST(energy_consumed_a AS NUMERIC))::VARCHAR,
|
||||||
|
SUM(CAST(energy_consumed_b AS NUMERIC))::VARCHAR,
|
||||||
|
SUM(CAST(energy_consumed_c AS NUMERIC))::VARCHAR,
|
||||||
|
TO_CHAR(date, 'MM-YYYY')
|
||||||
|
FROM final_data
|
||||||
|
GROUP BY 1,6;
|
||||||
|
|
||||||
@ -679,12 +679,14 @@ export class DeviceService {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
const { productId, id, uuid, name, ...rest } = camelCaseResponse.result;
|
const { productId, id, productName, uuid, name, ...rest } =
|
||||||
|
camelCaseResponse.result;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...rest,
|
...rest,
|
||||||
productUuid: product.uuid,
|
productUuid: product.uuid,
|
||||||
name: deviceDetails.name,
|
name: deviceDetails.name,
|
||||||
|
productName: product.name,
|
||||||
} as GetDeviceDetailsInterface;
|
} as GetDeviceDetailsInterface;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('error', error);
|
console.log('error', error);
|
||||||
|
|||||||
Reference in New Issue
Block a user