|
|
# -*- coding: utf-8 -*-
|
|
|
# @Time : 2023/8/8 16:40
|
|
|
# @Author : tx
|
|
|
# @File : msds.py
|
|
|
# @Description :
|
|
|
|
|
|
import datetime
|
|
|
import os
|
|
|
import subprocess
|
|
|
|
|
|
from fastapi import APIRouter, Depends, File, Request, UploadFile
|
|
|
from starlette.responses import FileResponse
|
|
|
from tortoise.queryset import QuerySet, Q
|
|
|
from fastapi.encoders import jsonable_encoder
|
|
|
|
|
|
from helper import login_required, respond_to
|
|
|
from models import Msds
|
|
|
|
|
|
router = APIRouter(prefix='/msds', dependencies=[Depends(login_required)])
|
|
|
|
|
|
|
|
|
@router.get('', summary='msds数据库')
|
|
|
async def index(keyword: str = '', page_no: int = 1, page_size: int = 10):
|
|
|
"""
|
|
|
获取msds数据库
|
|
|
:param keyword: 按药剂信息搜索
|
|
|
:param page_no: 分页页码,默认为1
|
|
|
:param page_size: 分页大小,默认为10
|
|
|
:return:
|
|
|
"""
|
|
|
offset = (page_no - 1) * page_size
|
|
|
query = QuerySet(Msds)
|
|
|
if keyword:
|
|
|
query = query.filter(Q(name__contains=keyword) | Q(english_name__contains=keyword))
|
|
|
|
|
|
count = await query.count()
|
|
|
msds_objs = await query.limit(page_size).offset(offset)
|
|
|
result_list = jsonable_encoder(msds_objs)
|
|
|
|
|
|
return respond_to(data={'data': result_list, 'count': count})
|
|
|
|
|
|
|
|
|
@router.post('/import', summary='新增msds/上传msds附件')
|
|
|
async def create(request: Request, drug_name: str, cas_number: str, file: UploadFile = File(...)):
|
|
|
"""
|
|
|
:param request: 请求
|
|
|
:param id: 药剂模板ID
|
|
|
:param file: 模板文件
|
|
|
"""
|
|
|
if not (file.filename and file.filename.rsplit('.', 1)[1].lower() in ['pdf']):
|
|
|
return respond_to(code=400, desc='请上传正确的文件格式')
|
|
|
current_user = request.state.current_user
|
|
|
|
|
|
try:
|
|
|
current_month = datetime.datetime.now().strftime("%Y-%m")
|
|
|
save_folder = os.path.join("/static/msds_file", current_month)
|
|
|
os.makedirs(save_folder, exist_ok=True)
|
|
|
save_path = os.path.join(save_folder, file.filename)
|
|
|
if os.path.exists(save_path):
|
|
|
return respond_to(code=400, desc='同名附件已存在,上传失败')
|
|
|
with open(save_path, "wb") as buffer:
|
|
|
buffer.write(await file.read())
|
|
|
except Exception as e:
|
|
|
print("附件上传有误e", e)
|
|
|
return respond_to(code=400, desc='附件上传有误')
|
|
|
msds = {
|
|
|
"upload_user_id": current_user.id,
|
|
|
"upload_at": datetime.datetime.now(),
|
|
|
"path": os.path.abspath(save_folder),
|
|
|
"file_name": file.filename,
|
|
|
"name": drug_name,
|
|
|
"cas_number": cas_number
|
|
|
}
|
|
|
data = await Msds.create(**msds)
|
|
|
|
|
|
return respond_to(data=data)
|
|
|
|
|
|
|
|
|
@router.get("/pdf/{filename:path}", summary='附件查看')
|
|
|
async def read_pdf(filename: str):
|
|
|
# 调用函数获取并删除数据
|
|
|
file_path = os.getcwd()+f"/static/{filename}"
|
|
|
try:
|
|
|
if os.name == 'posix':
|
|
|
# Linux系统
|
|
|
os.system(f"xdg-open {file_path}")
|
|
|
elif os.name == 'nt':
|
|
|
# Windows系统
|
|
|
os.startfile(file_path)
|
|
|
else:
|
|
|
print("不支持的操作系统")
|
|
|
except Exception as e:
|
|
|
print(f"打开文件失败: {e}")
|
|
|
|