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