diff --git a/lib/pages/analytics/modules/analytics/views/analytics_page.dart b/lib/pages/analytics/modules/analytics/views/analytics_page.dart index dc8457a5..883672a2 100644 --- a/lib/pages/analytics/modules/analytics/views/analytics_page.dart +++ b/lib/pages/analytics/modules/analytics/views/analytics_page.dart @@ -16,7 +16,7 @@ import 'package:syncrow_web/pages/analytics/services/analytics_devices/analytics import 'package:syncrow_web/pages/analytics/services/analytics_devices/remote_energy_management_analytics_devices_service.dart'; import 'package:syncrow_web/pages/analytics/services/analytics_devices/remote_occupancy_analytics_devices_service.dart'; import 'package:syncrow_web/pages/analytics/services/energy_consumption_by_phases/fake_energy_consumption_by_phases_service.dart'; -import 'package:syncrow_web/pages/analytics/services/energy_consumption_per_device/fake_energy_consumption_per_device_service.dart'; +import 'package:syncrow_web/pages/analytics/services/energy_consumption_per_device/remote_energy_consumption_per_device_service.dart'; import 'package:syncrow_web/pages/analytics/services/occupacy/fake_occupacy_service.dart'; import 'package:syncrow_web/pages/analytics/services/occupancy_heat_map/remote_occupancy_heat_map_service.dart'; import 'package:syncrow_web/pages/analytics/services/power_clamp_info/remote_power_clamp_info_service.dart'; @@ -62,7 +62,7 @@ class _AnalyticsPageState extends State { ), BlocProvider( create: (context) => EnergyConsumptionPerDeviceBloc( - FakeEnergyConsumptionPerDeviceService(), + RemoteEnergyConsumptionPerDeviceService(_httpService), ), ), BlocProvider( diff --git a/lib/pages/analytics/modules/energy_management/helpers/fetch_energy_management_data_helper.dart b/lib/pages/analytics/modules/energy_management/helpers/fetch_energy_management_data_helper.dart index 9346f66e..96fbb224 100644 --- a/lib/pages/analytics/modules/energy_management/helpers/fetch_energy_management_data_helper.dart +++ b/lib/pages/analytics/modules/energy_management/helpers/fetch_energy_management_data_helper.dart @@ -42,7 +42,12 @@ abstract final class FetchEnergyManagementDataHelper { spaceId: spaceId, ); loadEnergyConsumptionByPhases(context, selectedDate: selectedDate); - loadEnergyConsumptionPerDevice(context); + loadEnergyConsumptionPerDevice( + context, + communityId: communityId, + spaceId: spaceId, + selectedDate: selectedDate0, + ); loadRealtimeDeviceChanges(context); loadPowerClampInfo(context); } @@ -76,10 +81,19 @@ abstract final class FetchEnergyManagementDataHelper { ); } - static void loadEnergyConsumptionPerDevice(BuildContext context) { - const param = GetEnergyConsumptionPerDeviceParam(); + static void loadEnergyConsumptionPerDevice( + BuildContext context, { + DateTime? selectedDate, + required String communityId, + required String spaceId, + }) { + final param = GetEnergyConsumptionPerDeviceParam( + spaceId: spaceId, + communityId: communityId, + monthDate: selectedDate, + ); context.read().add( - const LoadEnergyConsumptionPerDeviceEvent(param), + LoadEnergyConsumptionPerDeviceEvent(param), ); } diff --git a/lib/pages/analytics/params/get_energy_consumption_per_device_param.dart b/lib/pages/analytics/params/get_energy_consumption_per_device_param.dart index 4995b843..ba659ae7 100644 --- a/lib/pages/analytics/params/get_energy_consumption_per_device_param.dart +++ b/lib/pages/analytics/params/get_energy_consumption_per_device_param.dart @@ -1,3 +1,19 @@ class GetEnergyConsumptionPerDeviceParam { - const GetEnergyConsumptionPerDeviceParam(); + const GetEnergyConsumptionPerDeviceParam({ + this.monthDate, + this.spaceId, + this.communityId, + }); + + final DateTime? monthDate; + final String? spaceId; + final String? communityId; + + Map toJson() => { + 'monthDate': + '${monthDate?.year}-${monthDate?.month.toString().padLeft(2, '0')}', + if (spaceId == null || spaceId == null) 'spaceUuid': spaceId, + 'communityUuid': communityId, + 'groupByDevice': true, + }; } diff --git a/lib/pages/analytics/params/get_total_energy_consumption_param.dart b/lib/pages/analytics/params/get_total_energy_consumption_param.dart index 9f76db9b..c47e5bfe 100644 --- a/lib/pages/analytics/params/get_total_energy_consumption_param.dart +++ b/lib/pages/analytics/params/get_total_energy_consumption_param.dart @@ -13,7 +13,7 @@ class GetTotalEnergyConsumptionParam { return { 'monthDate': '${monthDate?.year}-${monthDate?.month.toString().padLeft(2, '0')}', - if (communityId == null || communityId!.isEmpty) 'spaceUuid': spaceId, + if (spaceId == null || spaceId == null) 'spaceUuid': spaceId, 'communityUuid': communityId, 'groupByDevice': false, }; diff --git a/lib/pages/analytics/services/energy_consumption_per_device/remote_energy_consumption_per_device_service.dart b/lib/pages/analytics/services/energy_consumption_per_device/remote_energy_consumption_per_device_service.dart index 2c43bb23..8ceb6d80 100644 --- a/lib/pages/analytics/services/energy_consumption_per_device/remote_energy_consumption_per_device_service.dart +++ b/lib/pages/analytics/services/energy_consumption_per_device/remote_energy_consumption_per_device_service.dart @@ -1,4 +1,6 @@ +import 'package:flutter/material.dart'; import 'package:syncrow_web/pages/analytics/models/device_energy_data_model.dart'; +import 'package:syncrow_web/pages/analytics/models/energy_data_model.dart'; import 'package:syncrow_web/pages/analytics/params/get_energy_consumption_per_device_param.dart'; import 'package:syncrow_web/pages/analytics/services/energy_consumption_per_device/energy_consumption_per_device_service.dart'; import 'package:syncrow_web/services/api/http_service.dart'; @@ -15,16 +17,10 @@ class RemoteEnergyConsumptionPerDeviceService ) async { try { final response = await _httpService.get( - path: 'endpoint', + path: '/power-clamp/historical', showServerMessage: true, - expectedResponseModel: (data) { - final json = data as Map? ?? {}; - final mappedData = json['data'] as List? ?? []; - return mappedData.map((e) { - final jsonData = e as Map; - return DeviceEnergyDataModel.fromJson(jsonData); - }).toList(); - }, + queryParameters: param.toJson(), + expectedResponseModel: _EnergyConsumptionPerDeviceMapper.map, ); return response; } catch (e) { @@ -32,3 +28,33 @@ class RemoteEnergyConsumptionPerDeviceService } } } + +abstract final class _EnergyConsumptionPerDeviceMapper { + const _EnergyConsumptionPerDeviceMapper._(); + static List map(dynamic data) { + final json = data as Map? ?? {}; + final mappedData = json['data'] as List? ?? []; + return mappedData.where((e) { + final deviceData = (e as Map)['data'] as List? ?? []; + return deviceData.isNotEmpty; + }).map((e) { + final deviceData = e as Map; + final energyData = deviceData['data'] as List; + + return DeviceEnergyDataModel( + deviceId: deviceData['deviceUuid'] as String, + deviceName: deviceData['deviceName'] as String, + color: Color((DateTime.now().microsecondsSinceEpoch + + deviceData['deviceUuid'].hashCode) | + 0xFF000000), + energy: energyData.map((data) { + final energyJson = data as Map; + return EnergyDataModel( + date: DateTime.parse(energyJson['date'] as String), + value: double.parse(energyJson['total_energy_consumed_kw'] as String), + ); + }).toList(), + ); + }).toList(); + } +}