| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | # @Author    : Rocky# @File      : tasks.py# @Time      : 2024/3/12 14:23# 解决models导入失败问题# *************# 修改任务函数后需要重启supervisor的celery和celery-beat才能失效# *************# 需要在setup之前导入celery app,否则缺少Django环境配置from Ansjer.celery import appimport djangodjango.setup()# 其他导入在setup之后import requestsfrom Ansjer.Config.gatewaySensorConfig import DEVICE_TYPE, SMART_SOCKET_TOPIC, EVENT_TYPEfrom Service.CommonService import CommonServiceimport timefrom Ansjer.config import LOGGER, CONFIG_INFO, DETECT_PUSH_DOMAINSfrom Model.models import Device_Userfrom AdminController.CloudServiceManage.AgentOrderController import AgentOrderView# ###################测试函数@app.taskdef hello():    device_user_qs = Device_User.objects.filter(username='13138137872').values('NickName')    nickname = device_user_qs[0]['NickName']    info = 'celery测试日志, CONFIG_INFO:{}, nickname:{}'.format(CONFIG_INFO, nickname)    LOGGER.info(info)@app.taskdef test(arg):    time.sleep(10)    print(arg)@app.taskdef add(x, y):    print(x + y)# ###################@app.taskdef loocam_smart_scene(device_type, event_type, serial_number, scene_id=0):    """    loocam智能场景任务    @param device_type: 设备类型    @param event_type: 事件类型    @param serial_number: 序列号    @param scene_id: 场景id    @return:    """    LOGGER.info('loocam智能场景任务,device_type:{},event_type:{},serial_number:{},scene_id:{}'.                format(device_type, event_type, serial_number, scene_id))    if device_type == DEVICE_TYPE['socket']:        topic_name = SMART_SOCKET_TOPIC.format(serial_number)        status = 1 if event_type == EVENT_TYPE['socket_power_on'] else 0        msg = {            'type': 1,            'data': {'deviceSwitch': status}        }        CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)    # 没有设备任务时,最后一个任务上报场景日志    if scene_id:        data = {            'sceneId': scene_id,            'status': 1        }        url = DETECT_PUSH_DOMAINS + 'gatewayService/sceneLogPush'        requests.post(url=url, data=data, timeout=8)@app.taskdef update_installment_settlement_order():    LOGGER.info('start周期结算代理商订单任务')    AgentOrderView.update_periodic_settlement()    LOGGER.info('end周期结算代理商订单任务')
 |