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