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
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)
|