tasks.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # @Author : Rocky
  2. # @File : tasks.py
  3. # @Time : 2024/3/12 14:23
  4. # 解决models导入失败问题
  5. # *************
  6. # 修改任务函数后需要重启supervisor的celery和celery-beat才能失效
  7. # *************
  8. # 需要在setup之前导入celery app,否则缺少Django环境配置
  9. from Ansjer.celery import app
  10. import django
  11. django.setup()
  12. # 其他导入在setup之后
  13. import requests
  14. from Ansjer.Config.gatewaySensorConfig import DEVICE_TYPE, SMART_SOCKET_TOPIC, EVENT_TYPE
  15. from Service.CommonService import CommonService
  16. import time
  17. from Ansjer.config import LOGGER, CONFIG_INFO, DETECT_PUSH_DOMAINS
  18. from Model.models import Device_User
  19. # ###################测试函数
  20. @app.task
  21. def hello():
  22. device_user_qs = Device_User.objects.filter(username='13138137872').values('NickName')
  23. nickname = device_user_qs[0]['NickName']
  24. info = 'celery测试日志, CONFIG_INFO:{}, nickname:{}'.format(CONFIG_INFO, nickname)
  25. LOGGER.info(info)
  26. @app.task
  27. def test(arg):
  28. time.sleep(10)
  29. print(arg)
  30. @app.task
  31. def add(x, y):
  32. print(x + y)
  33. # ###################
  34. @app.task
  35. def loocam_smart_scene(device_type, event_type, serial_number, scene_id=0):
  36. """
  37. loocam智能场景任务
  38. @param device_type: 设备类型
  39. @param event_type: 事件类型
  40. @param serial_number: 序列号
  41. @param scene_id: 场景id
  42. @return:
  43. """
  44. LOGGER.info('loocam智能场景任务,device_type:{},event_type:{},serial_number:{},scene_id:{}'.
  45. format(device_type, event_type, serial_number, scene_id))
  46. if device_type == DEVICE_TYPE['socket']:
  47. topic_name = SMART_SOCKET_TOPIC.format(serial_number)
  48. status = 1 if event_type == EVENT_TYPE['socket_power_on'] else 0
  49. msg = {
  50. 'type': 1,
  51. 'data': {'deviceSwitch': status}
  52. }
  53. CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
  54. # 没有设备任务时,最后一个任务上报场景日志
  55. if scene_id:
  56. data = {
  57. 'sceneId': scene_id,
  58. 'status': 1
  59. }
  60. url = DETECT_PUSH_DOMAINS + 'gatewayService/sceneLogPush'
  61. requests.post(url=url, data=data, timeout=8)
  62. @app.task
  63. def update_installment_settlement_order():
  64. LOGGER.info('update_installment_settlement_order测试周期任务')