CronTaskController.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. # 异步保存数据
  33. push_thread = threading.Thread(target=cls.save_equipment_info)
  34. push_thread.start()
  35. return response.json(0)
  36. @staticmethod
  37. def save_equipment_info():
  38. redis_obj_pipe = RedisObject().pipe
  39. for equipment_info_key in EQUIPMENT_INFO_KEY_LIST:
  40. equipment_info_model = EQUIPMENT_INFO_DICT[equipment_info_key]
  41. # 读取缓存的前n条数据批量写入
  42. redis_r_obj = RedisObject(mode='r')
  43. equipment_info_redis_list = redis_r_obj.lrange(equipment_info_key, 0, size - 1)
  44. redis_obj_pipe.ltrim(equipment_info_key, size, -1)
  45. equipment_info_list = []
  46. for equipment_info in equipment_info_redis_list:
  47. equipment_info_data = eval(equipment_info)
  48. # 设备昵称存在表情,解码utf-8
  49. if equipment_info_data.get('device_nick_name') is not None:
  50. equipment_info_data['device_nick_name'] = equipment_info_data['device_nick_name']. \
  51. encode('UTF-8', 'ignore').decode('UTF-8')
  52. equipment_info_list.append(equipment_info_model(**equipment_info_data))
  53. equipment_info_model.objects.bulk_create(equipment_info_list)
  54. redis_obj_pipe.execute()