128 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
from rest_framework import serializers
 | 
						|
 | 
						|
from apps.am.models import Area
 | 
						|
from apps.hrm.serializers import EmployeeSimpleSerializer, EmployeeShortSerializer
 | 
						|
from apps.third.models import BltBind, TDevice, Tlog, DoorAuth
 | 
						|
from apps.utils.serializers import CustomModelSerializer
 | 
						|
from django.core.cache import cache
 | 
						|
 | 
						|
 | 
						|
class PicSerializer(serializers.Serializer):
 | 
						|
    path = serializers.CharField(label='图片oss地址')
 | 
						|
 | 
						|
 | 
						|
class TDeviceSerializer(CustomModelSerializer):
 | 
						|
    employee_ = EmployeeSimpleSerializer(source='employee', read_only=True)
 | 
						|
    area_name = serializers.CharField(source='area.name', read_only=True)
 | 
						|
    mtask_ = serializers.SerializerMethodField()
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = TDevice
 | 
						|
        fields = '__all__'
 | 
						|
 | 
						|
    def get_mtask_(self, obj):
 | 
						|
        return cache.get('vchannel_' + obj.code, {})
 | 
						|
 | 
						|
 | 
						|
class TDeviceUpdateSerializer(CustomModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = TDevice
 | 
						|
        fields = ['is_clock', 'access_list']
 | 
						|
 | 
						|
    def update(self, instance, validated_data):
 | 
						|
        if validated_data.get('access_list', []):
 | 
						|
            validated_data['access_list'] = [
 | 
						|
                'employee', 'remployee', 'visitor']
 | 
						|
        return super().update(instance, validated_data)
 | 
						|
 | 
						|
 | 
						|
class TDeviceSimpleSerializer(CustomModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = TDevice
 | 
						|
        fields = ['id', 'name', 'code']
 | 
						|
 | 
						|
 | 
						|
class RequestCommonSerializer(serializers.Serializer):
 | 
						|
    method_choice = (
 | 
						|
        ('post', 'post'),
 | 
						|
        ('get', 'get'),
 | 
						|
        ('put', 'put'),
 | 
						|
        ('delete', 'delete')
 | 
						|
    )
 | 
						|
    url = serializers.CharField(label='请求地址', required=False)
 | 
						|
    method = serializers.ChoiceField(
 | 
						|
        label='请求方法', choices=method_choice, required=False)
 | 
						|
    params = serializers.JSONField(
 | 
						|
        label='请求参数', required=False, allow_null=True)
 | 
						|
    json = serializers.JSONField(
 | 
						|
        label='请求body(json格式)', required=False, allow_null=True)
 | 
						|
    code = serializers.CharField(
 | 
						|
        label='请求短标识', required=False, allow_null=True)
 | 
						|
 | 
						|
 | 
						|
class BindAreaSerializer(serializers.Serializer):
 | 
						|
    ids = serializers.ListField(child=serializers.CharField(), label='设备ID列表')
 | 
						|
    area = serializers.PrimaryKeyRelatedField(queryset=Area.objects.all(),
 | 
						|
                                              label="区域ID")
 | 
						|
 | 
						|
 | 
						|
class LabelLocationSerializer(CustomModelSerializer):
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = TDevice
 | 
						|
        fields = ['location', 'area', 'areas']
 | 
						|
 | 
						|
 | 
						|
class BindAreasSerializer(serializers.Serializer):
 | 
						|
    type = serializers.CharField(label='设备类型')
 | 
						|
    codes = serializers.ListField(child=serializers.CharField(), label='标识列表')
 | 
						|
    areas = serializers.PrimaryKeyRelatedField(queryset=Area.objects.all(),
 | 
						|
                                               label="区域ID列表",
 | 
						|
                                               required=False, many=True)
 | 
						|
 | 
						|
 | 
						|
class TlogSerializer(CustomModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = Tlog
 | 
						|
        fields = '__all__'
 | 
						|
 | 
						|
 | 
						|
class BltSerializer(serializers.ModelSerializer):
 | 
						|
    employee_ = EmployeeSimpleSerializer(source='employee', read_only=True)
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = TDevice
 | 
						|
        fields = ['code', 'obj_cate', 'employee', 'employee_', 'id']
 | 
						|
 | 
						|
 | 
						|
class BltQuerySerializer(serializers.ModelSerializer):
 | 
						|
    depts = serializers.ListField(
 | 
						|
        child=serializers.CharField(), label="部门ID列表", required=False)
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = TDevice
 | 
						|
        fields = ['area', 'depts']
 | 
						|
 | 
						|
 | 
						|
class BltBindCreateSerializer(serializers.ModelSerializer):
 | 
						|
    # blt = serializers.PrimaryKeyRelatedField(queryset=TDevice.objects.filter(type=TDevice.DEVICE_BLT))
 | 
						|
    code = serializers.CharField(label='标签mac地址')
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = BltBind
 | 
						|
        fields = ['type', 'code', 'employee']
 | 
						|
 | 
						|
 | 
						|
class BltCreatesSerializer(serializers.Serializer):
 | 
						|
    macs = serializers.ListField(
 | 
						|
        child=serializers.CharField(), label='标签mac列表')
 | 
						|
 | 
						|
 | 
						|
class DoorAuthSerializer(CustomModelSerializer):
 | 
						|
    employee_ = EmployeeShortSerializer(source='employee', read_only=True)
 | 
						|
    dchannel_ = TDeviceSimpleSerializer(source='dchannel', read_only=True)
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = DoorAuth
 | 
						|
        fields = '__all__'
 |