提交
This commit is contained in:
1 parent
135dd550b6
commit
2a4767a014
76 files changed
+25160
-2306
No files matched your search
@@ -5,15 +5,24 @@ from fastapi import APIRouter, Depends, Query
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.core.data_scope import apply_data_scope
|
||||
from app.core.database import get_db
|
||||
from app.core.menu_guard import require_admin_or_super_admin
|
||||
from app.core.menu_guard import require_admin_or_super_admin, require_menu_code
|
||||
from app.core.response import error_response, success_response
|
||||
from app.crud import cell_sample_type as cell_type_svc
|
||||
from app.crud import collection_region as region_svc
|
||||
from app.crud import collection_protocol as collection_protocol_svc
|
||||
from app.crud import collection_protocol_no as protocol_no_svc
|
||||
from app.crud import customer as customer_svc
|
||||
from app.crud import sample_code as sample_code_svc
|
||||
from app.models.models import SysUser
|
||||
from app.models.models import (
|
||||
BizCellSampleType,
|
||||
BizCollectionProtocolNo,
|
||||
BizCollectionRegion,
|
||||
BizCustomer,
|
||||
BizSampleCode,
|
||||
SysUser,
|
||||
)
|
||||
|
||||
router = APIRouter(prefix="/web/admin", tags=["基础信息管理"])
|
||||
|
||||
@@ -64,13 +73,22 @@ async def list_customers(
|
||||
page: int = Query(1, ge=1),
|
||||
pageSize: int = Query(10, ge=1, le=100, alias="pageSize"),
|
||||
keyword: Optional[str] = None,
|
||||
user: dict = Depends(require_admin_or_super_admin),
|
||||
user: dict = Depends(require_menu_code("biz:customer:list")),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
tenant_no = _get_tenant_no(db, user)
|
||||
items, total = customer_svc.list_customers(db, page=page, page_size=pageSize, keyword=keyword, tenant_no=tenant_no)
|
||||
query = db.query(BizCustomer).filter(
|
||||
BizCustomer.del_flag == 0,
|
||||
BizCustomer.tenant_no == tenant_no,
|
||||
)
|
||||
if keyword:
|
||||
query = query.filter(BizCustomer.customer_name.like(f"%{keyword}%"))
|
||||
query = apply_data_scope(query, BizCustomer, user, db, tenant_no)
|
||||
total = query.count()
|
||||
items = query.order_by(BizCustomer.create_time.desc()).offset((page - 1) * pageSize).limit(pageSize).all()
|
||||
result_list = [customer_svc._row_to_dict(r) for r in items]
|
||||
tp = customer_svc.total_pages(total, pageSize)
|
||||
return success_response({"list": items, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp})
|
||||
return success_response({"list": result_list, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp})
|
||||
|
||||
|
||||
@router.post("/customers")
|
||||
@@ -174,15 +192,22 @@ async def list_cell_sample_types(
|
||||
page: int = Query(1, ge=1),
|
||||
pageSize: int = Query(10, ge=1, le=100, alias="pageSize"),
|
||||
keyword: Optional[str] = None,
|
||||
user: dict = Depends(require_admin_or_super_admin),
|
||||
user: dict = Depends(require_menu_code("biz:cellSampleType:list")),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
tenant_no = _get_tenant_no(db, user)
|
||||
items, total = cell_type_svc.list_cell_sample_types(
|
||||
db, page=page, page_size=pageSize, keyword=keyword, tenant_no=tenant_no
|
||||
query = db.query(BizCellSampleType).filter(
|
||||
BizCellSampleType.del_flag == 0,
|
||||
BizCellSampleType.tenant_no == tenant_no,
|
||||
)
|
||||
if keyword:
|
||||
query = query.filter(BizCellSampleType.type_name.like(f"%{keyword}%"))
|
||||
query = apply_data_scope(query, BizCellSampleType, user, db, tenant_no)
|
||||
total = query.count()
|
||||
items = query.order_by(BizCellSampleType.create_time.desc()).offset((page - 1) * pageSize).limit(pageSize).all()
|
||||
result_list = [cell_type_svc._row_to_dict(r) for r in items]
|
||||
tp = cell_type_svc.total_pages(total, pageSize)
|
||||
return success_response({"list": items, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp})
|
||||
return success_response({"list": result_list, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp})
|
||||
|
||||
|
||||
@router.post("/cell-sample-types")
|
||||
@@ -276,15 +301,22 @@ async def list_collection_regions(
|
||||
page: int = Query(1, ge=1),
|
||||
pageSize: int = Query(10, ge=1, le=100, alias="pageSize"),
|
||||
keyword: Optional[str] = None,
|
||||
user: dict = Depends(require_admin_or_super_admin),
|
||||
user: dict = Depends(require_menu_code("biz:collectionRegion:list")),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
tenant_no = _get_tenant_no(db, user)
|
||||
items, total = region_svc.list_collection_regions(
|
||||
db, page=page, page_size=pageSize, keyword=keyword, tenant_no=tenant_no
|
||||
query = db.query(BizCollectionRegion).filter(
|
||||
BizCollectionRegion.del_flag == 0,
|
||||
BizCollectionRegion.tenant_no == tenant_no,
|
||||
)
|
||||
if keyword:
|
||||
query = query.filter(BizCollectionRegion.region_name.like(f"%{keyword}%"))
|
||||
query = apply_data_scope(query, BizCollectionRegion, user, db, tenant_no)
|
||||
total = query.count()
|
||||
items = query.order_by(BizCollectionRegion.create_time.desc()).offset((page - 1) * pageSize).limit(pageSize).all()
|
||||
result_list = [region_svc._region_to_dict(r) for r in items]
|
||||
tp = region_svc.total_pages(total, pageSize)
|
||||
return success_response({"list": items, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp})
|
||||
return success_response({"list": result_list, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp})
|
||||
|
||||
|
||||
@router.post("/collection-regions")
|
||||
@@ -373,7 +405,7 @@ async def list_hospitals(
|
||||
page: int = Query(1, ge=1),
|
||||
pageSize: int = Query(10, ge=1, le=100, alias="pageSize"),
|
||||
keyword: Optional[str] = None,
|
||||
user: dict = Depends(require_admin_or_super_admin),
|
||||
user: dict = Depends(require_menu_code("biz:collectionRegion:list")),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
try:
|
||||
@@ -487,15 +519,29 @@ async def list_protocol_nos(
|
||||
page: int = Query(1, ge=1),
|
||||
pageSize: int = Query(10, ge=1, le=100, alias="pageSize"),
|
||||
keyword: Optional[str] = None,
|
||||
user: dict = Depends(require_admin_or_super_admin),
|
||||
user: dict = Depends(require_menu_code("biz:collectionProtocolNo:list")),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
tenant_no = _get_tenant_no(db, user)
|
||||
items, total = protocol_no_svc.list_protocol_nos(
|
||||
db, page=page, page_size=pageSize, keyword=keyword, tenant_no=tenant_no
|
||||
query = db.query(BizCollectionProtocolNo).filter(
|
||||
BizCollectionProtocolNo.del_flag == 0,
|
||||
BizCollectionProtocolNo.tenant_no == tenant_no,
|
||||
)
|
||||
if keyword:
|
||||
query = query.filter(BizCollectionProtocolNo.protocol_no.like(f"%{keyword}%"))
|
||||
query = apply_data_scope(query, BizCollectionProtocolNo, user, db, tenant_no)
|
||||
total = query.count()
|
||||
items = query.order_by(BizCollectionProtocolNo.create_time.desc()).offset((page - 1) * pageSize).limit(pageSize).all()
|
||||
result_list = [protocol_no_svc._row_to_dict(r) for r in items]
|
||||
used_nos = collection_protocol_svc.get_protocol_nos_used_in_protocols(
|
||||
db,
|
||||
tenant_no=tenant_no,
|
||||
protocol_nos=[row["protocolNo"] for row in result_list],
|
||||
)
|
||||
for row in result_list:
|
||||
row["usedInProtocol"] = row.get("protocolNo") in used_nos
|
||||
tp = protocol_no_svc.total_pages(total, pageSize)
|
||||
return success_response({"list": items, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp})
|
||||
return success_response({"list": result_list, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp})
|
||||
|
||||
|
||||
class ProtocolNoBatchGenerateBody(BaseModel):
|
||||
@@ -785,15 +831,29 @@ async def list_sample_codes(
|
||||
page: int = Query(1, ge=1),
|
||||
pageSize: int = Query(10, ge=1, le=100, alias="pageSize"),
|
||||
keyword: Optional[str] = None,
|
||||
user: dict = Depends(require_admin_or_super_admin),
|
||||
user: dict = Depends(require_menu_code("biz:sampleCode:list")),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
tenant_no = _get_tenant_no(db, user)
|
||||
items, total = sample_code_svc.list_sample_codes(
|
||||
db, page=page, page_size=pageSize, keyword=keyword, tenant_no=tenant_no
|
||||
query = db.query(BizSampleCode).filter(
|
||||
BizSampleCode.del_flag == 0,
|
||||
BizSampleCode.tenant_no == tenant_no,
|
||||
)
|
||||
if keyword:
|
||||
query = query.filter(BizSampleCode.sample_code.like(f"%{keyword}%"))
|
||||
query = apply_data_scope(query, BizSampleCode, user, db, tenant_no)
|
||||
total = query.count()
|
||||
items = query.order_by(BizSampleCode.create_time.desc()).offset((page - 1) * pageSize).limit(pageSize).all()
|
||||
result_list = [sample_code_svc._row_to_dict(r) for r in items]
|
||||
used_codes = collection_protocol_svc.get_sample_codes_used_in_protocol_samples(
|
||||
db,
|
||||
tenant_no=tenant_no,
|
||||
sample_codes=[row["sampleCode"] for row in result_list],
|
||||
)
|
||||
for row in result_list:
|
||||
row["usedInProtocol"] = row.get("sampleCode") in used_codes
|
||||
tp = sample_code_svc.total_pages(total, pageSize)
|
||||
return success_response({"list": items, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp})
|
||||
return success_response({"list": result_list, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp})
|
||||
|
||||
|
||||
@router.post("/sample-codes")
|
||||
|
||||
Reference in new issue
Block a user