Merge branch 'AEB-71/navigation_and_dashboard' into 'main'
AEB-71: Added 3D navigation in monitoring zones See merge request wedeving/aerbim-www!13
This commit is contained in:
@@ -8,11 +8,11 @@ class AlertSerializer(serializers.ModelSerializer):
|
||||
name = serializers.SerializerMethodField()
|
||||
object = serializers.SerializerMethodField()
|
||||
metric_value = serializers.SerializerMethodField()
|
||||
sensor_type_name = serializers.SerializerMethodField()
|
||||
detector_type = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Alert
|
||||
fields = ('id', 'name', 'object', 'metric_value', 'sensor_type_name', 'message', 'severity', 'created_at', 'resolved')
|
||||
fields = ('id', 'name', 'object', 'metric_value', 'detector_type', 'message', 'severity', 'created_at', 'resolved')
|
||||
|
||||
@extend_schema_field(OpenApiTypes.STR)
|
||||
def get_name(self, obj) -> str:
|
||||
@@ -22,14 +22,17 @@ class AlertSerializer(serializers.ModelSerializer):
|
||||
def get_object(self, obj) -> Optional[str]:
|
||||
zone = obj.sensor.zones.first()
|
||||
return zone.object.title if zone else None
|
||||
|
||||
@extend_schema_field(OpenApiTypes.STR)
|
||||
def get_metric_value(self, obj) -> str:
|
||||
if obj.metric.value is not None:
|
||||
unit = obj.sensor.signal_format.unit if obj.sensor.signal_format else ''
|
||||
return f"{obj.metric.value} {unit}".strip()
|
||||
return obj.metric.raw_value
|
||||
|
||||
@extend_schema_field(OpenApiTypes.STR)
|
||||
def get_sensor_type_name(self, obj) -> str:
|
||||
return obj.sensor_type.name
|
||||
def get_detector_type(self, obj) -> str:
|
||||
sensor_type = getattr(obj, 'sensor_type', None)
|
||||
if sensor_type is None and hasattr(obj, 'sensor') and obj.sensor:
|
||||
sensor_type = getattr(obj.sensor, 'sensor_type', None)
|
||||
if sensor_type is None:
|
||||
return ''
|
||||
return (getattr(sensor_type, 'code', '') or '').upper()
|
||||
|
||||
@@ -23,6 +23,7 @@ class NotificationSerializer(serializers.ModelSerializer):
|
||||
class DetectorSerializer(serializers.ModelSerializer):
|
||||
detector_id = serializers.SerializerMethodField()
|
||||
type = serializers.SerializerMethodField()
|
||||
detector_type = serializers.SerializerMethodField()
|
||||
name = serializers.SerializerMethodField()
|
||||
object = serializers.SerializerMethodField()
|
||||
status = serializers.SerializerMethodField()
|
||||
@@ -32,22 +33,28 @@ class DetectorSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Sensor
|
||||
fields = ('detector_id', 'type', 'serial_number', 'name', 'object', 'status', 'zone', 'floor', 'notifications')
|
||||
fields = ('detector_id', 'type', 'detector_type', 'serial_number', 'name', 'object', 'status', 'zone', 'floor', 'notifications')
|
||||
|
||||
def get_detector_id(self, obj):
|
||||
return obj.name or f"{obj.sensor_type.code}-{obj.id}"
|
||||
|
||||
def get_type(self, obj):
|
||||
# маппинг типов сенсоров на нужные значения
|
||||
sensor_type_mapping = {
|
||||
'GA': 'fire_detector',
|
||||
'PE': 'pressure_sensor',
|
||||
'GLE': 'gas_detector'
|
||||
'GA': 'Инклинометр',
|
||||
'PE': 'Тензометр',
|
||||
'GLE': 'Гидроуровень',
|
||||
}
|
||||
return sensor_type_mapping.get(obj.sensor_type.code, 'unknown')
|
||||
code = (getattr(obj.sensor_type, 'code', '') or '').upper()
|
||||
return sensor_type_mapping.get(code, (getattr(obj.sensor_type, 'name', '') or ''))
|
||||
|
||||
def get_detector_type(self, obj):
|
||||
return (getattr(obj.sensor_type, 'code', '') or '').upper()
|
||||
|
||||
def get_name(self, obj):
|
||||
return f"{obj.sensor_type.name} {obj.serial_number}"
|
||||
sensor_type = getattr(obj, 'sensor_type', None) or getattr(obj, 'sensor_type', None)
|
||||
serial = getattr(obj, 'serial_number', '') or ''
|
||||
base_name = getattr(obj, 'name', '') or ''
|
||||
return base_name or f"{getattr(obj.sensor_type, 'code', '')}-{serial}".strip('-')
|
||||
|
||||
def get_object(self, obj):
|
||||
# получаем первую зону датчика и её объект
|
||||
@@ -64,17 +71,12 @@ class DetectorSerializer(serializers.ModelSerializer):
|
||||
return 'normal'
|
||||
|
||||
def get_zone(self, obj):
|
||||
zone = obj.zones.first()
|
||||
if zone:
|
||||
return zone.name
|
||||
return None
|
||||
first_zone = obj.zones.first()
|
||||
return first_zone.name if first_zone else None
|
||||
|
||||
def get_floor(self, obj):
|
||||
# получаем этаж из зоны
|
||||
zone = obj.zones.first()
|
||||
if zone:
|
||||
return zone.floor
|
||||
return None # если датчик не привязали к зоне
|
||||
first_zone = obj.zones.first()
|
||||
return getattr(first_zone, 'floor', None)
|
||||
|
||||
class DetectorsResponseSerializer(serializers.Serializer):
|
||||
detectors = serializers.SerializerMethodField()
|
||||
|
||||
@@ -59,4 +59,4 @@ class SensorView(APIView):
|
||||
except Sensor.DoesNotExist:
|
||||
return Response(
|
||||
{"error": "Датчики не найдены"},
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
Reference in New Issue
Block a user