serializers.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. import datetime
  2. import json
  3. import modulefinder
  4. from rest_framework import serializers
  5. class QxzTypeConfigAddSerializer(serializers.Serializer):
  6. eNum = serializers.CharField(help_text="要素编号", required=True, max_length=10)
  7. cName = serializers.CharField(help_text="中文名称", required=True, max_length=64)
  8. units = serializers.CharField(help_text="要素单位", required=True, max_length=64)
  9. def validate_eNum(self, value):
  10. try:
  11. eNum = int(value)
  12. if eNum < 0:
  13. raise Exception()
  14. except Exception as e:
  15. raise serializers.ValidationError("编号必须是大于0的有效整数")
  16. return str(value)
  17. def validate_cName(self, value):
  18. try:
  19. value = value.strip()
  20. if len(value) > 10:
  21. raise Exception()
  22. except Exception as e:
  23. raise serializers.ValidationError("要素类型名称必须在10个字符以内")
  24. return value
  25. class QxzTypeConfigDeleteSerializer(serializers.Serializer):
  26. qsc_id = serializers.IntegerField(help_text="要素类型配置id", required=True)
  27. def validate_qsc_id(self, value):
  28. try:
  29. value = int(value)
  30. if value < 0:
  31. raise Exception()
  32. except Exception as e:
  33. raise serializers.ValidationError("要素类型配置id必须是大于0的有效整数")
  34. return value
  35. class QxzTypeConfigModifySerializer(serializers.Serializer):
  36. cName = serializers.CharField(help_text="中文名称", required=True, max_length=64)
  37. units = serializers.CharField(help_text="要素单位", required=True, max_length=64)
  38. qsc_id = serializers.IntegerField(help_text="要素类型配置id", required=True)
  39. def validate_qsc_id(self, value):
  40. try:
  41. value = int(value)
  42. if value < 0:
  43. raise Exception()
  44. except Exception as e:
  45. raise serializers.ValidationError("要素类型配置id必须是大于0的有效整数")
  46. return value
  47. def validate_cName(self, value):
  48. try:
  49. value = value.strip()
  50. if len(value) > 10:
  51. raise Exception()
  52. except Exception as e:
  53. raise serializers.ValidationError("要素类型名称必须在10个字符以内")
  54. return value
  55. class QxzTypeConfigListSerializer(serializers.Serializer):
  56. cName = serializers.CharField(help_text="中文名称", required=False, max_length=64, allow_null=True, allow_blank=True)
  57. is_default = serializers.BooleanField(help_text="是否默认要素类型", required=False, allow_null=True, default=None)
  58. def to_representation(self, instance):
  59. return {
  60. 'qsc_id': instance.id,
  61. 'cName': instance.cName,
  62. 'units': instance.units,
  63. 'eNum': instance.eNum,
  64. 'is_default': instance.is_default
  65. }
  66. class QxzElementAddSerializer(serializers.Serializer):
  67. cName = serializers.CharField(help_text="中文名称", required=False, max_length=64)
  68. eName = serializers.CharField(help_text="英文名称", required=False, max_length=64)
  69. eNum = serializers.CharField(help_text="要素编号", required=True, max_length=10)
  70. units = serializers.CharField(help_text="要素单位", required=True, max_length=64)
  71. is_standard = serializers.BooleanField(help_text="是否标配", required=True)
  72. sensor_addr = serializers.IntegerField(help_text="从机地址", required=True)
  73. start_reg = serializers.IntegerField(help_text="起始寄存器", required=True)
  74. count = serializers.IntegerField(help_text="读取数量", required=True)
  75. d_pos = serializers.IntegerField(help_text="有效数据位置", required=True)
  76. d_length = serializers.IntegerField(help_text="位宽", required=True)
  77. factor = serializers.IntegerField(help_text="系数", required=True)
  78. dotled_s = serializers.CharField(help_text="LED屏幕内容", required=True, max_length=256)
  79. def validate_cName(self, value):
  80. try:
  81. value = value.strip()
  82. if len(value) > 4:
  83. raise Exception()
  84. except Exception as e:
  85. raise serializers.ValidationError("中文名称必须在4个字符以内")
  86. return value
  87. def validate_eName(self, value):
  88. try:
  89. value = value.strip()
  90. if len(value) > 30:
  91. raise Exception()
  92. except Exception as e:
  93. raise serializers.ValidationError("英文名称必须在30个字符以内")
  94. return value
  95. def validate_eNum(self, value):
  96. try:
  97. eNum = int(value)
  98. if eNum < 0:
  99. raise Exception()
  100. except Exception as e:
  101. raise serializers.ValidationError("编号必须是大于0的有效整数")
  102. return str(value)
  103. def validate_sensor_addr(self, value):
  104. try:
  105. value = int(value)
  106. if not (1 <= value <= 254):
  107. raise Exception()
  108. except Exception as e:
  109. raise serializers.ValidationError("从机地址必须是1-254之间的有效整数")
  110. return value
  111. def validate_start_reg(self, value):
  112. try:
  113. value = int(value)
  114. if not (0 <= value <= 254):
  115. raise Exception()
  116. except Exception as e:
  117. raise serializers.ValidationError("起始寄存器必须是0-254之间的有效整数")
  118. return value
  119. def validate_count(self, value):
  120. try:
  121. value = int(value)
  122. if not (1 <= value <= 10):
  123. raise Exception()
  124. except Exception as e:
  125. raise serializers.ValidationError("读取数量必须是1-10之间的有效整数")
  126. return value
  127. def validate_d_pos(self, value):
  128. try:
  129. value = int(value)
  130. if not (0 <= value <= 10):
  131. raise Exception()
  132. except Exception as e:
  133. raise serializers.ValidationError("有效数据位置必须是0-10之间的有效整数")
  134. return value
  135. def validate_d_length(self, value):
  136. try:
  137. value = int(value)
  138. if not (1 <= value <= 2):
  139. raise Exception()
  140. except Exception as e:
  141. raise serializers.ValidationError("d_length必须是1-2之间的有效整数")
  142. return value
  143. def validate_factor(self, value):
  144. try:
  145. value = int(value)
  146. if value not in [1, 10, -10, -100]:
  147. raise Exception()
  148. except Exception as e:
  149. raise serializers.ValidationError("系数不符合要求")
  150. return value
  151. def validate_dotled_s(self, value):
  152. if len(value) > 256:
  153. raise serializers.ValidationError("LED屏幕内容过长")
  154. return value
  155. class QxzElementModifySerializer(serializers.Serializer):
  156. qec_id = serializers.IntegerField(help_text="要素信息id", required=True)
  157. cName = serializers.CharField(help_text="中文名称", required=False, max_length=64)
  158. eName = serializers.CharField(help_text="英文名称", required=False, max_length=64)
  159. is_standard = serializers.BooleanField(help_text="是否标配", required=True)
  160. sensor_addr = serializers.IntegerField(help_text="从机地址", required=True)
  161. start_reg = serializers.IntegerField(help_text="起始寄存器", required=True)
  162. count = serializers.IntegerField(help_text="读取数量", required=True)
  163. d_pos = serializers.IntegerField(help_text="有效数据位置", required=True)
  164. d_length = serializers.IntegerField(help_text="位宽", required=True)
  165. factor = serializers.IntegerField(help_text="系数", required=True)
  166. dotled_s = serializers.CharField(help_text="LED屏幕内容", required=True, max_length=256)
  167. def validate_qec_id(self, value):
  168. try:
  169. value = int(value)
  170. if value < 0:
  171. raise Exception()
  172. except Exception as e:
  173. raise serializers.ValidationError("要素信息id必须大于0的整数")
  174. return value
  175. def validate_cName(self, value):
  176. try:
  177. value = value.strip()
  178. if len(value) > 4:
  179. raise Exception()
  180. except Exception as e:
  181. raise serializers.ValidationError("中文名称必须在4个字符以内")
  182. return value
  183. def validate_eName(self, value):
  184. try:
  185. value = value.strip()
  186. if len(value) > 30:
  187. raise Exception()
  188. except Exception as e:
  189. raise serializers.ValidationError("英文名称必须在30个字符以内")
  190. return value
  191. def validate_sensor_addr(self, value):
  192. try:
  193. value = int(value)
  194. if not (1 <= value <= 254):
  195. raise Exception()
  196. except Exception as e:
  197. raise serializers.ValidationError("从机地址必须是1-254之间的有效整数")
  198. return value
  199. def validate_start_reg(self, value):
  200. try:
  201. value = int(value)
  202. if not (0 <= value <= 254):
  203. raise Exception()
  204. except Exception as e:
  205. raise serializers.ValidationError("起始寄存器必须是0-254之间的有效整数")
  206. return value
  207. def validate_count(self, value):
  208. try:
  209. value = int(value)
  210. if not (1 <= value <= 10):
  211. raise Exception()
  212. except Exception as e:
  213. raise serializers.ValidationError("读取数量必须是1-10之间的有效整数")
  214. return value
  215. def validate_d_pos(self, value):
  216. try:
  217. value = int(value)
  218. if not (0 <= value <= 10):
  219. raise Exception()
  220. except Exception as e:
  221. raise serializers.ValidationError("有效数据位置必须是0-10之间的有效整数")
  222. return value
  223. def validate_d_length(self, value):
  224. try:
  225. value = int(value)
  226. if not (1 <= value <= 2):
  227. raise Exception()
  228. except Exception as e:
  229. raise serializers.ValidationError("d_length必须是1-2之间的有效整数")
  230. return value
  231. def validate_factor(self, value):
  232. try:
  233. value = int(value)
  234. if value not in [1, 10, -10, -100]:
  235. raise Exception()
  236. except Exception as e:
  237. raise serializers.ValidationError("系数不符合要求")
  238. return value
  239. def validate_dotled_s(self, value):
  240. if len(value) > 256:
  241. raise serializers.ValidationError("LED屏幕内容过长")
  242. return value
  243. class QxzElementDeleteSerializer(serializers.Serializer):
  244. qec_id = serializers.IntegerField(help_text="要素信息id", required=True)
  245. def validate_qec_id(self, value):
  246. try:
  247. value = int(value)
  248. if value < 0:
  249. raise Exception()
  250. except Exception as e:
  251. raise serializers.ValidationError("要素信息id必须大于0的整数")
  252. return value
  253. class QxzElementListSerializer(serializers.Serializer):
  254. ele_name = serializers.CharField(help_text="要素名称", required=False, max_length=64, allow_blank=True, allow_null=True)
  255. is_standard = serializers.BooleanField(help_text="是否标配", required=False, allow_null=True, default=None)
  256. def to_representation(self, instance):
  257. return {
  258. 'qec_id': instance.id,
  259. 'cName': instance.cName,
  260. 'eName': instance.eName,
  261. 'units': instance.units,
  262. 'eNum': instance.eNum,
  263. 'is_standard': instance.is_standard,
  264. 'sensor_addr': instance.sensor_addr,
  265. 'start_reg': instance.start_reg,
  266. 'count': instance.count,
  267. 'd_pos': instance.d_pos,
  268. 'd_length': instance.d_length,
  269. 'factor': instance.factor,
  270. 'dotled_s': instance.dotled_s
  271. }
  272. class QxzDeviceAddSerializer(serializers.Serializer):
  273. device_id = serializers.CharField(help_text="设备编号", max_length=20, required=True)
  274. order_num = serializers.CharField(help_text="任务单号", max_length=20, required=True)
  275. device_type = serializers.CharField(help_text="设备类型", max_length=4, required=True)
  276. is_standard = serializers.BooleanField(help_text="是否标配", required=True)
  277. ele_cnf = serializers.JSONField(help_text="要素配置", required=True)
  278. led_cnf = serializers.JSONField(help_text="led配置", required=False, default=None, allow_null=True)
  279. def validate_device_type(self, value):
  280. try:
  281. value = value.strip()
  282. if value not in ['0', '1', '2']:
  283. raise Exception()
  284. except Exception as e:
  285. raise serializers.ValidationError('设备类型参数异常')
  286. return value
  287. def validate_ele_cnf(self, value):
  288. v = list(value.values())
  289. if len(v) != len(set(v)):
  290. raise serializers.ValidationError('英文名称不能重复')
  291. try:
  292. key_list = sorted(value.keys(), key=lambda x: int(x.replace('c', '')))
  293. for i, k in enumerate(key_list):
  294. t = int(k.replace('c', ''))
  295. if not (0 <= t <= 29):
  296. raise serializers.ValidationError('要素序号必须在0-29之间')
  297. if i != t:
  298. raise serializers.ValidationError('要素序号顺序必须连续')
  299. except Exception as e:
  300. raise serializers.ValidationError('要素序号参数异常')
  301. return value
  302. def validate_led_conf(self, value):
  303. if value:
  304. try:
  305. if value['Control_card'] not in [1, 2, 3]:
  306. raise Exception()
  307. if value['front'] not in [12, 16]:
  308. raise Exception()
  309. if not (1 <= value['keep_time'] <= 72):
  310. raise Exception()
  311. if 0 <= value['Start_x'] <= 1024:
  312. raise Exception()
  313. if 0 <= value['Start_y'] <= 1024:
  314. raise Exception()
  315. if 1 <= value['Width'] <= 1024:
  316. raise Exception()
  317. if 1 <= value['Height'] <= 1024:
  318. raise Exception()
  319. except Exception as e:
  320. raise serializers.ValidationError('led参数异常')
  321. return value
  322. class QxzDeviceListSerializer(serializers.Serializer):
  323. device_id = serializers.CharField(help_text="设备编号", max_length=20, required=False, allow_null=True, allow_blank=True)
  324. def to_representation(self, instance):
  325. return {
  326. 'device_id': instance.device_id,
  327. 'order_num': instance.order_num,
  328. 'device_type': instance.device_type,
  329. 'is_standard': instance.is_standard,
  330. 'create_time': instance.create_time.strftime("%Y-%m-%d %H:%S:%M"),
  331. 'ele_cnf': json.loads(instance.ele_cnf),
  332. 'led_cnf': json.loads(instance.led_cnf),
  333. 'ele_name': json.loads(instance.ele_name)
  334. }