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.

134 lines
4.2 KiB

# -*- coding: utf-8 -*-
# @Time : 2023/11/21 10:34
# @Author : tx
# @File : drug_item.py
# @Description : 盒装药剂明细接口 一码多物
from datetime import datetime
from fastapi import APIRouter, Depends
from fastapi.requests import Request
from fastapi.encoders import jsonable_encoder
from tortoise.queryset import QuerySet, Q
from pydantic import BaseModel
from helper import respond_to, login_required
from models import Drug, DrugItem
from models.drug_item import DrugItemStateEnum
router = APIRouter(prefix='/drug_item', dependencies=[Depends(login_required)])
class DrugItemCreateRequest(BaseModel):
fill_json_content: dict
expired_at: str = ''
state: int = -1
is_open: int = -1
@router.get('/index', summary="盒装药剂明细")
async def index(request: Request, rfid: str = "", drug_id: str = "", page_no: int = 1,
page_size: int = 20):
"""
盒装药剂明细
根据传递的rfid或者drug_id获取盒装药剂明细
:param rfid: rfid
:param drug_id: 药剂id
:param page_no: 1
:param page_size: 20
:return:
"""
offset = (page_no - 1) * page_size
query = QuerySet(DrugItem).filter()
if drug_id:
query = query.filter(drug_id=drug_id)
if rfid:
query = query.filter(Q(barcode=rfid) | Q(rfid=rfid))
count = await query.count()
drug_item_objs = await query.limit(page_size).offset(offset).order_by("-created_at")
return respond_to(code=200, data=dict(count=count, data=drug_item_objs))
@router.post('/add/{drug_id}', summary="盒装药剂明细新增")
async def index(request: Request, drug_id: str, keyword: DrugItemCreateRequest):
"""
盒装药剂明细新增
根据传递的rfid或者drug_id获取盒装药剂明细
:param request: request
:param drug_id: 药剂id
:param keyword: 1
:return:
"""
drug_obj = await Drug.get_or_none(id=drug_id)
if not drug_obj:
return respond_to(404, desc="盒装药剂未找到")
current_user = request.state.current_user
kwargs = {
"drug_id": drug_id,
"rfid": drug_obj.rfid,
"barcode": drug_obj.barcode,
"state": DrugItemStateEnum.INITIAL,
"fill_json_content": keyword.fill_json_content,
"bind": current_user,
"bind_at": datetime.now(),
"storage": current_user,
"storage_at": datetime.now(),
}
if keyword.expired_at:
kwargs.update({
"expired_at": keyword.expired_at
})
if keyword.fill_json_content.get("k1"):
kwargs.update({
"name": keyword.fill_json_content.get("k1")
})
result = await DrugItem.create(**kwargs)
if not result:
return respond_to(desc="创建失败!")
return respond_to(code=200, desc="添加成功", data=result)
@router.delete('/delete/{drug_item_id}', summary="盒装药剂明细删除")
async def index(request: Request, drug_item_id: str):
"""
盒装药剂明细删除
:param request: request
:param drug_item_id: 药剂明细id
:return:
"""
drug_item_obj = await DrugItem.get_or_none(id=drug_item_id)
if not drug_item_obj:
return respond_to(404, desc="盒装药剂条目未找到")
await drug_item_obj.delete()
return respond_to(code=200, desc="删除成功")
@router.put('/update/{drug_item_id}', summary="盒装药剂明细修改")
async def index(request: Request, drug_item_id: str, keyword: DrugItemCreateRequest):
"""
盒装药剂明细修改
:param request: request
:param drug_item_id: 药剂id
:param keyword: 1
:return:
"""
drug_item_obj = await DrugItem.get_or_none(id=drug_item_id)
if not drug_item_obj:
return respond_to(404, desc="盒装药剂条目未找到")
drug_item_obj.fill_json_content = keyword.fill_json_content
drug_item_obj.name = keyword.fill_json_content.get("k1")
if keyword.expired_at:
drug_item_obj.expired_at = keyword.expired_at
if keyword.state > -1:
drug_item_obj.state = keyword.state
# 是否开封
if keyword.is_open == 1:
drug_item_obj.open_date = datetime.now()
await drug_item_obj.save(update_fields=['fill_json_content', 'expired_at'])
return respond_to(code=200, desc="更新成功", data=drug_item_obj)