|
|
# -*- coding: utf-8 -*-
|
|
|
# @Time : 2023/8/25 15:42
|
|
|
# @Author : tx
|
|
|
# @File : cabinet.py
|
|
|
# @Description :
|
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
from helper.utils import timezone_now
|
|
|
from models.drug import Drug, DrugStateEnum
|
|
|
from models.drug_use_log import DrugUseLog, DrugUseStateEnum
|
|
|
from models.terminal import Terminal
|
|
|
from models.cabinet import Cabinet
|
|
|
from conf.setting import setting
|
|
|
|
|
|
|
|
|
async def calculate_today_data(cabinet_id: str):
|
|
|
"""
|
|
|
计算每个柜子/每个终端的今日统计数据
|
|
|
:param cabinet:
|
|
|
:return:
|
|
|
"""
|
|
|
|
|
|
terminal_obj = await Terminal.get(id=setting.TERMINAL_ID)
|
|
|
stime = datetime.combine(timezone_now(), datetime.min.time())
|
|
|
etime = datetime.combine(timezone_now(), datetime.max.time())
|
|
|
|
|
|
q1 = {"storage_at__range": [stime, etime]}
|
|
|
# q2 = {"state": DrugStateEnum.IN, "expired_at__lt": timezone_now().strftime('%Y-%m-%d %H:%M:%S')}
|
|
|
q3 = {"state": DrugUseStateEnum.TAKE, "created_at__range": [stime, etime]}
|
|
|
q4 = {"state": DrugUseStateEnum.PUT, "created_at__range": [stime, etime]}
|
|
|
|
|
|
if not cabinet_id:
|
|
|
if setting.TERMINAL_ID:
|
|
|
cabinets_ids = await Cabinet.filter(terminal_id=setting.TERMINAL_ID).values_list("id", flat=True)
|
|
|
q1.update({"cabinet_id__in": cabinets_ids})
|
|
|
# q2.update({"cabinet_id__in": cabinets_ids})
|
|
|
q3.update({"terminal_id": terminal_obj.id})
|
|
|
q4.update({"terminal_id": terminal_obj.id})
|
|
|
else:
|
|
|
q1.update({"cabinet_id": cabinet_id})
|
|
|
# q2.update({"cabinet_id": cabinet_id})
|
|
|
q3.update({"cabinet_id": cabinet_id})
|
|
|
q4.update({"cabinet_id": cabinet_id})
|
|
|
|
|
|
# 今日入库
|
|
|
storage_count = await Drug.filter(**q1).count()
|
|
|
# 截止目前在库已过期
|
|
|
# expire_count = await Drug.filter(**q2).count()
|
|
|
# todo:逾期未归还
|
|
|
overdue_count = 0
|
|
|
# 今日领用
|
|
|
receive_count = await DrugUseLog.filter(**q3).count()
|
|
|
# 今日归还
|
|
|
return_count = await DrugUseLog.filter(**q4).count()
|
|
|
|
|
|
result = dict(storage_count=storage_count, overdue_count=overdue_count, receive_count=receive_count,
|
|
|
return_count=return_count)
|
|
|
return result
|