#!/usr/bin/env python # encoding: utf-8 """ @author: tx @file: task.py @time: 2023/5/15 19:18 @desc: """ import datetime import asyncio import httpx from apscheduler.schedulers.asyncio import AsyncIOScheduler from pytz import timezone from conf import setting from helper.logger import logger from models import Cabinet, EnvironmentLogs from models.drug_use_log import DrugUseLog, DrugUseStateEnum # 设置领用关门多久之后更新药剂重量,判断是否称重 DELAY_UPDATE_MINUTES = 60 * 5 async def delayed_task_update_weight(): """ 异步任务,领用需称重是否称重数据 :return: """ logger.info("开始异步执行领用称重重量更新") drug_use_log_objs = await DrugUseLog.filter(alerted = False, weight = None, state = DrugUseStateEnum.TAKE, ).prefetch_related("drug").all() for drug_use_log in drug_use_log_objs: logger.info("异步执行领用称重重量更新:drug_use_log_id[{0}]".format(drug_use_log.id)) drug = drug_use_log.drug weight = drug.last_weight drug_use_log_dict = {"weight": weight} drug_dict = {"last_weight": 0} if not weight: # 报警 领用称重药剂未称重 logger.warning("领用称重药剂未称重:drug_use_log_id[{0}]".format(drug_use_log.id)) drug_use_log_dict.update({ "alarm_state": 1, "alarm_desc": "领用称重药剂未称重:{0}".format(drug.fill_json_content.get("k1")), }) else: drug_dict.update({ "remain_gross_weight": weight }) drug_use_log_dict["alerted"] = True # 更新 await drug_use_log.update_from_dict(drug_use_log_dict) await drug_use_log.save() await drug.update_from_dict(drug_dict) await drug.save() logger.info("更新完成") async def run_delayed_task(): """ 创建异步任务,5分钟后执行判断领用需称重是否称重数据 调用: asyncio.create_task(run_delayed_task()) :return: """ logger.info(f"等待{DELAY_UPDATE_MINUTES}分钟,执行异步任务查询领用药剂是否称重,更新重量") await asyncio.sleep(DELAY_UPDATE_MINUTES) # 等待5分钟 await delayed_task_update_weight() # 执行异步任务