You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

35 lines
1.6 KiB

from datetime import datetime
from fastapi import APIRouter
from conf import setting
from helper import respond_to
from helper.utils import timezone_now
from models import Drug, DrugUseLog, DrugStateEnum, DrugUseStateEnum, Terminal, Cabinet
router = APIRouter(prefix='/today')
@router.get('')
async def index():
# 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())
cabinets_ids = await Cabinet.filter(terminal_id=setting.TERMINAL_ID).values_list("id", flat=True)
# 今日入库
storage_count = await Drug.filter(storage_at__range=[stime, etime],
cabinet_id__in=cabinets_ids).count()
# 截止目前在库已过期
expire_count = await Drug.filter(state=DrugStateEnum.IN,
expired_at__lt=timezone_now().strftime('%Y-%m-%d %H:%M:%S'),
cabinet_id__in=cabinets_ids).count()
# 今日领用
receive_count = await DrugUseLog.filter(state__in=[DrugUseStateEnum.TAKE, DrugStateEnum.EMPTY], created_at__range=[stime, etime],
cabinet_id__in=cabinets_ids).count()
# 今日归还
return_count = await DrugUseLog.filter(state=DrugUseStateEnum.PUT, created_at__range=[stime, etime],
cabinet_id__in=cabinets_ids).count()
return respond_to(data=dict(storage_count=storage_count, expire_count=expire_count, receive_count=receive_count,
return_count=return_count))