| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397 |
- import datetime
- import json
- import modulefinder
- from rest_framework import serializers
- class QxzTypeConfigAddSerializer(serializers.Serializer):
- eNum = serializers.CharField(help_text="要素编号", required=True, max_length=10)
- cName = serializers.CharField(help_text="中文名称", required=True, max_length=64)
- units = serializers.CharField(help_text="要素单位", required=True, max_length=64)
- def validate_eNum(self, value):
- try:
- eNum = int(value)
- if eNum < 0:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("编号必须是大于0的有效整数")
- return str(value)
- def validate_cName(self, value):
- try:
- value = value.strip()
- if len(value) > 10:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("要素类型名称必须在10个字符以内")
- return value
- class QxzTypeConfigDeleteSerializer(serializers.Serializer):
- qsc_id = serializers.IntegerField(help_text="要素类型配置id", required=True)
- def validate_qsc_id(self, value):
- try:
- value = int(value)
- if value < 0:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("要素类型配置id必须是大于0的有效整数")
- return value
- class QxzTypeConfigModifySerializer(serializers.Serializer):
- cName = serializers.CharField(help_text="中文名称", required=True, max_length=64)
- units = serializers.CharField(help_text="要素单位", required=True, max_length=64)
- qsc_id = serializers.IntegerField(help_text="要素类型配置id", required=True)
- def validate_qsc_id(self, value):
- try:
- value = int(value)
- if value < 0:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("要素类型配置id必须是大于0的有效整数")
- return value
- def validate_cName(self, value):
- try:
- value = value.strip()
- if len(value) > 10:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("要素类型名称必须在10个字符以内")
- return value
- class QxzTypeConfigListSerializer(serializers.Serializer):
- cName = serializers.CharField(help_text="中文名称", required=False, max_length=64, allow_null=True, allow_blank=True)
- is_default = serializers.BooleanField(help_text="是否默认要素类型", required=False, allow_null=True, default=None)
- def to_representation(self, instance):
- return {
- 'qsc_id': instance.id,
- 'cName': instance.cName,
- 'units': instance.units,
- 'eNum': instance.eNum,
- 'is_default': instance.is_default
- }
- class QxzElementAddSerializer(serializers.Serializer):
- cName = serializers.CharField(help_text="中文名称", required=False, max_length=64)
- eName = serializers.CharField(help_text="英文名称", required=False, max_length=64)
- eNum = serializers.CharField(help_text="要素编号", required=True, max_length=10)
- units = serializers.CharField(help_text="要素单位", required=True, max_length=64)
- is_standard = serializers.BooleanField(help_text="是否标配", required=True)
- sensor_addr = serializers.IntegerField(help_text="从机地址", required=True)
- start_reg = serializers.IntegerField(help_text="起始寄存器", required=True)
- count = serializers.IntegerField(help_text="读取数量", required=True)
- d_pos = serializers.IntegerField(help_text="有效数据位置", required=True)
- d_length = serializers.IntegerField(help_text="位宽", required=True)
- factor = serializers.IntegerField(help_text="系数", required=True)
- dotled_s = serializers.CharField(help_text="LED屏幕内容", required=True, max_length=256)
- def validate_cName(self, value):
- try:
- value = value.strip()
- if len(value) > 4:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("中文名称必须在4个字符以内")
- return value
- def validate_eName(self, value):
- try:
- value = value.strip()
- if len(value) > 30:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("英文名称必须在30个字符以内")
- return value
- def validate_eNum(self, value):
- try:
- eNum = int(value)
- if eNum < 0:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("编号必须是大于0的有效整数")
- return str(value)
- def validate_sensor_addr(self, value):
- try:
- value = int(value)
- if not (1 <= value <= 254):
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("从机地址必须是1-254之间的有效整数")
- return value
- def validate_start_reg(self, value):
- try:
- value = int(value)
- if not (0 <= value <= 254):
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("起始寄存器必须是0-254之间的有效整数")
- return value
- def validate_count(self, value):
- try:
- value = int(value)
- if not (1 <= value <= 10):
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("读取数量必须是1-10之间的有效整数")
- return value
- def validate_d_pos(self, value):
- try:
- value = int(value)
- if not (0 <= value <= 10):
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("有效数据位置必须是0-10之间的有效整数")
- return value
- def validate_d_length(self, value):
- try:
- value = int(value)
- if not (1 <= value <= 2):
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("d_length必须是1-2之间的有效整数")
- return value
- def validate_factor(self, value):
- try:
- value = int(value)
- if value not in [1, 10, -10, -100]:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("系数不符合要求")
- return value
- def validate_dotled_s(self, value):
- if len(value) > 256:
- raise serializers.ValidationError("LED屏幕内容过长")
- return value
- class QxzElementModifySerializer(serializers.Serializer):
- qec_id = serializers.IntegerField(help_text="要素信息id", required=True)
- cName = serializers.CharField(help_text="中文名称", required=False, max_length=64)
- eName = serializers.CharField(help_text="英文名称", required=False, max_length=64)
- is_standard = serializers.BooleanField(help_text="是否标配", required=True)
- sensor_addr = serializers.IntegerField(help_text="从机地址", required=True)
- start_reg = serializers.IntegerField(help_text="起始寄存器", required=True)
- count = serializers.IntegerField(help_text="读取数量", required=True)
- d_pos = serializers.IntegerField(help_text="有效数据位置", required=True)
- d_length = serializers.IntegerField(help_text="位宽", required=True)
- factor = serializers.IntegerField(help_text="系数", required=True)
- dotled_s = serializers.CharField(help_text="LED屏幕内容", required=True, max_length=256)
- def validate_qec_id(self, value):
- try:
- value = int(value)
- if value < 0:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("要素信息id必须大于0的整数")
- return value
- def validate_cName(self, value):
- try:
- value = value.strip()
- if len(value) > 4:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("中文名称必须在4个字符以内")
- return value
- def validate_eName(self, value):
- try:
- value = value.strip()
- if len(value) > 30:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("英文名称必须在30个字符以内")
- return value
- def validate_sensor_addr(self, value):
- try:
- value = int(value)
- if not (1 <= value <= 254):
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("从机地址必须是1-254之间的有效整数")
- return value
- def validate_start_reg(self, value):
- try:
- value = int(value)
- if not (0 <= value <= 254):
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("起始寄存器必须是0-254之间的有效整数")
- return value
- def validate_count(self, value):
- try:
- value = int(value)
- if not (1 <= value <= 10):
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("读取数量必须是1-10之间的有效整数")
- return value
- def validate_d_pos(self, value):
- try:
- value = int(value)
- if not (0 <= value <= 10):
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("有效数据位置必须是0-10之间的有效整数")
- return value
- def validate_d_length(self, value):
- try:
- value = int(value)
- if not (1 <= value <= 2):
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("d_length必须是1-2之间的有效整数")
- return value
- def validate_factor(self, value):
- try:
- value = int(value)
- if value not in [1, 10, -10, -100]:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("系数不符合要求")
- return value
- def validate_dotled_s(self, value):
- if len(value) > 256:
- raise serializers.ValidationError("LED屏幕内容过长")
- return value
- class QxzElementDeleteSerializer(serializers.Serializer):
- qec_id = serializers.IntegerField(help_text="要素信息id", required=True)
- def validate_qec_id(self, value):
- try:
- value = int(value)
- if value < 0:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError("要素信息id必须大于0的整数")
- return value
- class QxzElementListSerializer(serializers.Serializer):
- ele_name = serializers.CharField(help_text="要素名称", required=False, max_length=64, allow_blank=True, allow_null=True)
- is_standard = serializers.BooleanField(help_text="是否标配", required=False, allow_null=True, default=None)
- def to_representation(self, instance):
- return {
- 'qec_id': instance.id,
- 'cName': instance.cName,
- 'eName': instance.eName,
- 'units': instance.units,
- 'eNum': instance.eNum,
- 'is_standard': instance.is_standard,
- 'sensor_addr': instance.sensor_addr,
- 'start_reg': instance.start_reg,
- 'count': instance.count,
- 'd_pos': instance.d_pos,
- 'd_length': instance.d_length,
- 'factor': instance.factor,
- 'dotled_s': instance.dotled_s
- }
- class QxzDeviceAddSerializer(serializers.Serializer):
- device_id = serializers.CharField(help_text="设备编号", max_length=20, required=True)
- order_num = serializers.CharField(help_text="任务单号", max_length=20, required=True)
- device_type = serializers.CharField(help_text="设备类型", max_length=4, required=True)
- is_standard = serializers.BooleanField(help_text="是否标配", required=True)
- ele_cnf = serializers.JSONField(help_text="要素配置", required=True)
- led_cnf = serializers.JSONField(help_text="led配置", required=False, default=None, allow_null=True)
- def validate_device_type(self, value):
- try:
- value = value.strip()
- if value not in ['0', '1', '2']:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError('设备类型参数异常')
- return value
- def validate_ele_cnf(self, value):
- v = list(value.values())
- if len(v) != len(set(v)):
- raise serializers.ValidationError('英文名称不能重复')
- try:
- key_list = sorted(value.keys(), key=lambda x: int(x.replace('c', '')))
- for i, k in enumerate(key_list):
- t = int(k.replace('c', ''))
- if not (0 <= t <= 29):
- raise serializers.ValidationError('要素序号必须在0-29之间')
- if i != t:
- raise serializers.ValidationError('要素序号顺序必须连续')
- except Exception as e:
- raise serializers.ValidationError('要素序号参数异常')
- return value
- def validate_led_conf(self, value):
- if value:
- try:
- if value['Control_card'] not in [1, 2, 3]:
- raise Exception()
- if value['front'] not in [12, 16]:
- raise Exception()
- if not (1 <= value['keep_time'] <= 72):
- raise Exception()
- if 0 <= value['Start_x'] <= 1024:
- raise Exception()
- if 0 <= value['Start_y'] <= 1024:
- raise Exception()
- if 1 <= value['Width'] <= 1024:
- raise Exception()
- if 1 <= value['Height'] <= 1024:
- raise Exception()
- except Exception as e:
- raise serializers.ValidationError('led参数异常')
- return value
- class QxzDeviceListSerializer(serializers.Serializer):
- device_id = serializers.CharField(help_text="设备编号", max_length=20, required=False, allow_null=True, allow_blank=True)
- def to_representation(self, instance):
- return {
- 'device_id': instance.device_id,
- 'order_num': instance.order_num,
- 'device_type': instance.device_type,
- 'is_standard': instance.is_standard,
- 'create_time': instance.create_time.strftime("%Y-%m-%d %H:%S:%M"),
- 'ele_cnf': json.loads(instance.ele_cnf),
- 'led_cnf': json.loads(instance.led_cnf),
- 'ele_name': json.loads(instance.ele_name)
- }
|