Some checks failed
Build and Deploy Backend / build-and-deploy (push) Failing after 1m36s
139 lines
4.7 KiB
Python
139 lines
4.7 KiB
Python
"""
|
|
设备模块序列化器
|
|
"""
|
|
from rest_framework import serializers
|
|
from .models import DeviceType, DeviceBatch, Device, UserDevice, DeviceSettings, DeviceWifi
|
|
|
|
|
|
class DeviceTypeSerializer(serializers.ModelSerializer):
|
|
"""设备类型序列化器"""
|
|
|
|
class Meta:
|
|
model = DeviceType
|
|
fields = ['id', 'brand', 'product_code', 'name', 'is_network_required', 'is_active', 'created_at']
|
|
read_only_fields = ['id', 'is_network_required', 'created_at']
|
|
|
|
|
|
class DeviceBatchSerializer(serializers.ModelSerializer):
|
|
"""设备批次序列化器"""
|
|
|
|
device_type_info = DeviceTypeSerializer(source='device_type', read_only=True)
|
|
|
|
class Meta:
|
|
model = DeviceBatch
|
|
fields = ['id', 'device_type', 'device_type_info', 'batch_no', 'production_date',
|
|
'production_week', 'quantity', 'remark', 'status', 'created_at']
|
|
read_only_fields = ['id', 'production_week', 'status', 'created_at']
|
|
|
|
|
|
class DeviceBatchCreateSerializer(serializers.ModelSerializer):
|
|
"""创建设备批次序列化器"""
|
|
|
|
class Meta:
|
|
model = DeviceBatch
|
|
fields = ['device_type', 'batch_no', 'production_date', 'quantity', 'remark']
|
|
|
|
|
|
class DeviceSerializer(serializers.ModelSerializer):
|
|
"""设备序列化器"""
|
|
|
|
device_type_info = DeviceTypeSerializer(source='device_type', read_only=True)
|
|
|
|
class Meta:
|
|
model = Device
|
|
fields = ['id', 'sn', 'device_type', 'device_type_info', 'mac_address',
|
|
'name', 'status', 'firmware_version', 'last_online_at', 'created_at']
|
|
|
|
|
|
class DeviceSimpleSerializer(serializers.ModelSerializer):
|
|
"""设备简单序列化器"""
|
|
|
|
class Meta:
|
|
model = Device
|
|
fields = ['id', 'sn', 'mac_address', 'status', 'created_at']
|
|
|
|
|
|
class UserDeviceSerializer(serializers.ModelSerializer):
|
|
"""用户设备绑定序列化器"""
|
|
|
|
device = DeviceSerializer(read_only=True)
|
|
spirit_name = serializers.CharField(source='spirit.name', read_only=True, allow_null=True)
|
|
|
|
class Meta:
|
|
model = UserDevice
|
|
fields = ['id', 'device', 'spirit', 'spirit_name', 'bind_type', 'bind_time', 'is_active']
|
|
|
|
|
|
class BindDeviceSerializer(serializers.Serializer):
|
|
"""绑定设备序列化器"""
|
|
|
|
sn = serializers.CharField(max_length=50, help_text='设备SN码')
|
|
spirit_id = serializers.IntegerField(required=False, allow_null=True, help_text='智能体ID')
|
|
|
|
|
|
class DeviceVerifySerializer(serializers.Serializer):
|
|
"""验证设备SN序列化器"""
|
|
|
|
sn = serializers.CharField(max_length=50, help_text='设备SN码')
|
|
|
|
|
|
class QueryByMacSerializer(serializers.Serializer):
|
|
"""通过MAC查询SN序列化器"""
|
|
|
|
mac = serializers.CharField(max_length=20, help_text='MAC地址')
|
|
|
|
def validate_mac(self, value):
|
|
# 统一MAC地址格式
|
|
value = value.upper().replace('-', ':')
|
|
return value
|
|
|
|
|
|
class DeviceSettingsSerializer(serializers.ModelSerializer):
|
|
"""设备设置序列化器"""
|
|
|
|
class Meta:
|
|
model = DeviceSettings
|
|
fields = ['nickname', 'user_name', 'volume', 'brightness',
|
|
'allow_interrupt', 'privacy_mode']
|
|
|
|
|
|
class DeviceWifiSerializer(serializers.ModelSerializer):
|
|
"""设备WiFi序列化器"""
|
|
|
|
class Meta:
|
|
model = DeviceWifi
|
|
fields = ['ssid', 'is_connected']
|
|
|
|
|
|
class DeviceDetailSerializer(serializers.ModelSerializer):
|
|
"""设备详情序列化器"""
|
|
|
|
settings = DeviceSettingsSerializer(read_only=True)
|
|
wifi_list = DeviceWifiSerializer(many=True, read_only=True)
|
|
status = serializers.SerializerMethodField()
|
|
bound_spirit = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Device
|
|
fields = ['id', 'sn', 'name', 'status', 'battery', 'firmware_version',
|
|
'mac_address', 'is_ai', 'icon', 'settings', 'wifi_list', 'bound_spirit']
|
|
|
|
def get_status(self, obj):
|
|
return 'online' if obj.is_online else 'offline'
|
|
|
|
def get_bound_spirit(self, obj):
|
|
user_device = self.context.get('user_device')
|
|
if user_device and user_device.spirit:
|
|
return {'id': user_device.spirit.id, 'name': user_device.spirit.name}
|
|
return None
|
|
|
|
|
|
class DeviceSettingsUpdateSerializer(serializers.Serializer):
|
|
"""更新设备设置序列化器"""
|
|
nickname = serializers.CharField(max_length=50, required=False)
|
|
user_name = serializers.CharField(max_length=50, required=False)
|
|
volume = serializers.IntegerField(min_value=0, max_value=100, required=False)
|
|
brightness = serializers.IntegerField(min_value=0, max_value=100, required=False)
|
|
allow_interrupt = serializers.BooleanField(required=False)
|
|
privacy_mode = serializers.BooleanField(required=False)
|