kms-backend/task/drug.py

75 lines
2.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/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() # 执行异步任务