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.
69 lines
1.9 KiB
69 lines
1.9 KiB
# -*- coding: utf-8 -*-
|
|
# @Time : 2023/10/7 14:26
|
|
# @Author : tx
|
|
# @File : stock.py
|
|
# @Description : 库存盘点
|
|
import json
|
|
from datetime import datetime
|
|
|
|
from fastapi import APIRouter, Request, Depends
|
|
from pydantic import BaseModel
|
|
from tortoise.queryset import QuerySet
|
|
|
|
from helper import respond_to, login_required
|
|
from helper.report import report_remain_drug
|
|
from models import StockRecord
|
|
|
|
router = APIRouter(prefix='/stock', dependencies=[Depends(login_required)])
|
|
|
|
|
|
class ParamStockRequest(BaseModel):
|
|
drug_name: str | None
|
|
dictionary_id: str | None
|
|
cabinet_ids: list | None
|
|
cabinet_id: str | None
|
|
page_no: int = 0
|
|
page_size: int = 20
|
|
spec:str|None
|
|
report_ids:str|None
|
|
cas_code:str|None
|
|
custom_num:int = 0
|
|
|
|
|
|
@router.get('', summary='盘点列表')
|
|
async def index(request: Request, cabinet_id: str | None, page_no: int = 1, page_size: int = 20):
|
|
"""
|
|
获取库存盘点列表
|
|
:return:
|
|
"""
|
|
offset = (page_no - 1) * page_size
|
|
query = QuerySet(StockRecord)
|
|
if cabinet_id:
|
|
query = query.filter(cabinet_id=cabinet_id)
|
|
count = await query.count()
|
|
stock_objs = await query.limit(page_size).offset(offset).order_by("-created_at")
|
|
|
|
return respond_to(data=dict(count=count, data=stock_objs))
|
|
|
|
|
|
@router.post('', summary='生成盘点')
|
|
async def create(request: Request, keyword: ParamStockRequest):
|
|
"""
|
|
生成库存盘点记录
|
|
:return:
|
|
"""
|
|
user = request.state.current_user
|
|
keyword.cabinet_ids = [keyword.cabinet_id]
|
|
content = await report_remain_drug(request, keyword)
|
|
now_time = datetime.now().strftime("%Y-%m-%d_%H%M%S")
|
|
name = f"{now_time}-库存盘点记录"
|
|
print("content", content)
|
|
stock_record = await StockRecord.create(
|
|
name=name,
|
|
content=json.dumps(content, ensure_ascii=False),
|
|
cabinet_id=keyword.cabinet_id,
|
|
user=user
|
|
)
|
|
|
|
return respond_to(desc="生成完成", data=stock_record)
|