# -*- 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