CronTaskController.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # @Author : Rocky
  2. # @File : CronTaskController.py
  3. # @Time : 2023/12/11 15:47
  4. import threading
  5. from django.views import View
  6. from Object.RedisObject import RedisObject
  7. from Object.ResponseObject import ResponseObject
  8. from Model.models import EquipmentInfo1, EquipmentInfo2, EquipmentInfo3, \
  9. EquipmentInfo4, EquipmentInfo5, EquipmentInfo6, EquipmentInfo7, EquipmentInfo8, EquipmentInfo9, EquipmentInfo10, \
  10. EquipmentInfo11, EquipmentInfo12, EquipmentInfo13, EquipmentInfo14, EquipmentInfo15, EquipmentInfo16, \
  11. EquipmentInfo17, EquipmentInfo18, EquipmentInfo19, EquipmentInfo20
  12. from Service.EquipmentInfoService import EQUIPMENT_INFO_DICT, EQUIPMENT_INFO_KEY_LIST
  13. # 每次写入的数据条数
  14. size = 1000
  15. class CronTaskView(View):
  16. def get(self, request, *args, **kwargs):
  17. request.encoding = 'utf-8'
  18. operation = kwargs.get('operation')
  19. return self.validation(request.GET, request, operation)
  20. def post(self, request, *args, **kwargs):
  21. request.encoding = 'utf-8'
  22. operation = kwargs.get('operation')
  23. return self.validation(request.POST, request, operation)
  24. def validation(self, request_dict, request, operation):
  25. response = ResponseObject()
  26. if operation == 'equipment_info':
  27. return self.equipment_info(response)
  28. else:
  29. return response.json(414)
  30. @classmethod
  31. def equipment_info(cls, response):
  32. for equipment_info_key in EQUIPMENT_INFO_KEY_LIST:
  33. # 异步保存数据
  34. kwargs = {
  35. 'equipment_info_key': equipment_info_key
  36. }
  37. push_thread = threading.Thread(
  38. target=cls.save_equipment_info,
  39. kwargs=kwargs)
  40. push_thread.start()
  41. return response.json(0)
  42. @staticmethod
  43. def save_equipment_info(**kwargs):
  44. equipment_info_key = kwargs['equipment_info_key']
  45. equipment_info_model = EQUIPMENT_INFO_DICT[equipment_info_key]
  46. # 读取缓存的前n条数据批量写入
  47. redis_obj = RedisObject()
  48. equipment_info_redis_list = redis_obj.lrange(equipment_info_key, 0, size - 1)
  49. redis_obj.ltrim(equipment_info_key, size, -1)
  50. equipment_info_list = []
  51. for equipment_info in equipment_info_redis_list:
  52. equipment_info_data = eval(equipment_info)
  53. # 设备昵称存在表情,解码utf-8
  54. if equipment_info_data.get('device_nick_name') is not None:
  55. equipment_info_data['device_nick_name'] = equipment_info_data['device_nick_name']. \
  56. encode('UTF-8', 'ignore').decode('UTF-8')
  57. equipment_info_list.append(equipment_info_model(**equipment_info_data))
  58. equipment_info_model.objects.bulk_create(equipment_info_list)