This commit is contained in:
zlwu committed 2026-05-20 20:41:47 +08:00
1 parent c6c3a37fa7
commit e6b4b9a8d7
28 files changed
+5812 -4687

No files matched your search

+74 -8
View File
@@ -3,6 +3,7 @@ from typing import Any, List, Optional
from fastapi import APIRouter, Depends, Query
from pydantic import BaseModel, ConfigDict, Field
from sqlalchemy import or_
from sqlalchemy.orm import Session
from app.core.data_scope import apply_data_scope
@@ -82,7 +83,17 @@ async def list_customers(
BizCustomer.tenant_no == tenant_no,
)
if keyword:
query = query.filter(BizCustomer.customer_name.like(f"%{keyword}%"))
kw = keyword.strip()
if kw:
like = f"%{kw}%"
query = query.filter(
or_(
BizCustomer.customer_name.like(like),
BizCustomer.phone_no.like(like),
BizCustomer.id_card_no.like(like),
BizCustomer.customer_tags.like(like),
)
)
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()
@@ -201,7 +212,15 @@ async def list_cell_sample_types(
BizCellSampleType.tenant_no == tenant_no,
)
if keyword:
query = query.filter(BizCellSampleType.type_name.like(f"%{keyword}%"))
kw = keyword.strip()
if kw:
like = f"%{kw}%"
query = query.filter(
or_(
BizCellSampleType.type_code.like(like),
BizCellSampleType.type_name.like(like),
)
)
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()
@@ -314,7 +333,11 @@ async def list_collection_regions(
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]
region_ids = [r.id for r in items]
hospital_map = region_svc._hospital_names_by_region_ids(db, region_ids)
result_list = [
region_svc._region_to_dict(r, hospital_names=hospital_map.get(r.id, [])) for r in items
]
tp = region_svc.total_pages(total, pageSize)
return success_response({"list": result_list, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp})
@@ -500,6 +523,9 @@ class ProtocolNoCreateBody(BaseModel):
issued: int = 0
order_num: Optional[int] = Field(0, alias="orderNum")
remark: Optional[str] = None
issued_user_id: Optional[str] = Field(None, alias="issuedUserId")
issued_user_name: Optional[str] = Field(None, alias="issuedUserName")
issued_time: Optional[str] = Field(None, alias="issuedTime")
class ProtocolNoUpdateBody(BaseModel):
@@ -519,6 +545,7 @@ 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,
issued_user_id: Optional[str] = Query(None, alias="issuedUserId"),
user: dict = Depends(require_menu_code("biz:collectionProtocolNo:list")),
db: Session = Depends(get_db),
):
@@ -527,12 +554,23 @@ async def list_protocol_nos(
BizCollectionProtocolNo.del_flag == 0,
BizCollectionProtocolNo.tenant_no == tenant_no,
)
if keyword:
query = query.filter(BizCollectionProtocolNo.protocol_no.like(f"%{keyword}%"))
kw = (keyword or "").strip()
if kw:
like = f"%{kw}%"
query = query.filter(
or_(
BizCollectionProtocolNo.protocol_no.like(like),
BizCollectionProtocolNo.remark.like(like),
)
)
uid = (issued_user_id or "").strip()
if uid:
query = query.filter(BizCollectionProtocolNo.issued_user_id == uid)
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]
protocol_no_svc.enrich_issued_user_names(db, result_list)
used_nos = collection_protocol_svc.get_protocol_nos_used_in_protocols(
db,
tenant_no=tenant_no,
@@ -656,8 +694,13 @@ async def create_protocol_no(
order_num=body.order_num,
remark=body.remark,
user_id=user.get("user_id"),
issued_user_id=body.issued_user_id,
issued_user_name=body.issued_user_name,
issued_time=body.issued_time,
)
return success_response(protocol_no_svc._row_to_dict(obj), message="创建成功")
row = protocol_no_svc._row_to_dict(obj)
protocol_no_svc.enrich_issued_user_names(db, [row])
return success_response(row, message="创建成功")
except ValueError as e:
return error_response(400, str(e))
@@ -713,9 +756,13 @@ class SampleCodeCreateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
sample_code: str = Field(..., alias="sampleCode")
sample_code_type: Optional[str] = Field(None, alias="sampleCodeType")
issued: int = 0
order_num: Optional[int] = Field(0, alias="orderNum")
remark: Optional[str] = None
issued_user_id: Optional[str] = Field(None, alias="issuedUserId")
issued_user_name: Optional[str] = Field(None, alias="issuedUserName")
issued_time: Optional[str] = Field(None, alias="issuedTime")
class SampleCodeUpdateBody(BaseModel):
@@ -831,6 +878,8 @@ 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,
sample_code_type: Optional[str] = Query(None, alias="sampleCodeType"),
issued_user_id: Optional[str] = Query(None, alias="issuedUserId"),
user: dict = Depends(require_menu_code("biz:sampleCode:list")),
db: Session = Depends(get_db),
):
@@ -839,8 +888,21 @@ async def list_sample_codes(
BizSampleCode.del_flag == 0,
BizSampleCode.tenant_no == tenant_no,
)
if keyword:
query = query.filter(BizSampleCode.sample_code.like(f"%{keyword}%"))
kw = (keyword or "").strip()
if kw:
like = f"%{kw}%"
query = query.filter(
or_(
BizSampleCode.sample_code.like(like),
BizSampleCode.remark.like(like),
)
)
code_type = (sample_code_type or "").strip()
if code_type:
query = query.filter(BizSampleCode.sample_code_type == code_type)
uid = (issued_user_id or "").strip()
if uid:
query = query.filter(BizSampleCode.issued_user_id == uid)
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()
@@ -867,11 +929,15 @@ async def create_sample_code(
obj = sample_code_svc.create_sample_code(
db,
sample_code=body.sample_code,
sample_code_type=body.sample_code_type,
issued=body.issued,
tenant_no=tenant_no,
order_num=body.order_num,
remark=body.remark,
user_id=user.get("user_id"),
issued_user_id=body.issued_user_id,
issued_user_name=body.issued_user_name,
issued_time=body.issued_time,
)
return success_response(sample_code_svc._row_to_dict(obj), message="创建成功")
except ValueError as e: