feat(api): expose QC inspection item template endpoints.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-08-17 12:46:59 +08:00
1 parent bc62ac796a
commit 52ec964f88
1 file changed
+168
+168
View File
@@ -25,6 +25,7 @@ QC_THIRD_PARTY_FEE_FIELD_NAMES = ("feeAmount", "thirdPartyFeeTotal")
from app.core.response import error_response, success_response
from app.core.utils import parse_datetime
from app.crud import qc_lab_test_item as lab_svc
from app.crud import qc_inspection_item_template as iit_svc
from app.crud import qc_item_param as param_svc
from app.crud import qc_task_result as result_svc
from app.crud import qc_task as task_svc
@@ -398,6 +399,31 @@ class LabTestItemUpdateBody(BaseModel):
remark: Optional[str] = None
# ---------- 检测项目模版(项目组合) ----------
class InspectionItemTemplateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
template_name: str = Field(..., alias="templateName")
lab_item_ids: List[str] = Field(default_factory=list, alias="labItemIds")
third_party_item_ids: List[str] = Field(default_factory=list, alias="thirdPartyItemIds")
status: Optional[str] = "1"
order_num: Optional[int] = Field(None, alias="orderNum")
remark: Optional[str] = None
class InspectionItemTemplateUpdateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
template_name: Optional[str] = Field(None, alias="templateName")
lab_item_ids: Optional[List[str]] = Field(None, alias="labItemIds")
third_party_item_ids: Optional[List[str]] = Field(None, alias="thirdPartyItemIds")
status: Optional[str] = None
order_num: Optional[int] = Field(None, alias="orderNum")
remark: Optional[str] = None
# ---------- 检测项目参数模板 ----------
@@ -533,6 +559,148 @@ async def delete_qc_lab_test_item(
return error_response(400, str(e))
@router.get("/qc-inspection-item-templates")
async def list_qc_inspection_item_templates(
page: int = Query(1, ge=1),
pageSize: int = Query(10, ge=1, le=100),
keyword: Optional[str] = None,
status: Optional[str] = None,
db: Session = Depends(get_db),
user: dict = Depends(require_menu_code("biz:qcInspectionItemTemplate:list")),
):
try:
tenant_no = _get_tenant_no(db, user)
items, total = iit_svc.list_templates(
db,
page=page,
page_size=pageSize,
keyword=keyword,
status=status,
tenant_no=tenant_no,
user_info=user,
)
return success_response(_page_payload(items, total, page, pageSize))
except PermissionError as e:
return error_response(403, str(e))
except Exception as e:
return error_response(400, str(e))
@router.get("/qc-inspection-item-templates/active")
async def list_qc_inspection_item_templates_active(
db: Session = Depends(get_db),
user: dict = Depends(
require_any_menu_code(
"biz:qcInspectionItemTemplate:list", "biz:qcWorkOrder:list"
)
),
):
try:
tenant_no = _get_tenant_no(db, user)
return success_response(
iit_svc.list_active_templates(db, tenant_no, user_info=user)
)
except PermissionError as e:
return error_response(403, str(e))
except Exception as e:
return error_response(400, str(e))
@router.get("/qc-inspection-item-templates/{template_id}")
async def get_qc_inspection_item_template(
template_id: str,
db: Session = Depends(get_db),
user: dict = Depends(require_menu_code("biz:qcInspectionItemTemplate:list")),
):
try:
tenant_no = _get_tenant_no(db, user)
obj = iit_svc.get_template(db, template_id, tenant_no=tenant_no)
if not obj:
return error_response(404, "模版不存在")
return success_response(iit_svc._row_to_dict(obj))
except PermissionError as e:
return error_response(403, str(e))
except Exception as e:
return error_response(400, str(e))
@router.post("/qc-inspection-item-templates")
async def create_qc_inspection_item_template(
body: InspectionItemTemplateBody,
db: Session = Depends(get_db),
user: dict = Depends(require_menu_code("biz:qcInspectionItemTemplate:add")),
):
try:
tenant_no = _get_tenant_no(db, user)
obj = iit_svc.create_template(
db,
template_name=body.template_name,
lab_item_ids=body.lab_item_ids,
third_party_item_ids=body.third_party_item_ids,
status=body.status or "1",
tenant_no=tenant_no,
order_num=body.order_num,
remark=body.remark,
user_id=_get_current_user_id(user),
create_dept_id=user.get("dept_id", "") or "",
)
return success_response(iit_svc._row_to_dict(obj), message="创建成功")
except PermissionError as e:
return error_response(403, str(e))
except ValueError as e:
return error_response(400, str(e))
except Exception as e:
return error_response(400, str(e))
@router.put("/qc-inspection-item-templates/{template_id}")
async def update_qc_inspection_item_template(
template_id: str,
body: InspectionItemTemplateUpdateBody,
db: Session = Depends(get_db),
user: dict = Depends(require_menu_code("biz:qcInspectionItemTemplate:edit")),
):
try:
tenant_no = _get_tenant_no(db, user)
obj = iit_svc.update_template(
db,
template_id,
template_name=body.template_name,
lab_item_ids=body.lab_item_ids,
third_party_item_ids=body.third_party_item_ids,
status=body.status,
order_num=body.order_num,
remark=body.remark,
user_id=_get_current_user_id(user),
tenant_no=tenant_no,
)
return success_response(iit_svc._row_to_dict(obj), message="更新成功")
except PermissionError as e:
return error_response(403, str(e))
except ValueError as e:
return error_response(400, str(e))
except Exception as e:
return error_response(400, str(e))
@router.delete("/qc-inspection-item-templates/{template_id}")
async def delete_qc_inspection_item_template(
template_id: str,
db: Session = Depends(get_db),
user: dict = Depends(require_menu_code("biz:qcInspectionItemTemplate:remove")),
):
try:
tenant_no = _get_tenant_no(db, user)
iit_svc.soft_delete_template(db, template_id, tenant_no=tenant_no)
return success_response(None, message="删除成功")
except PermissionError as e:
return error_response(403, str(e))
except ValueError as e:
return error_response(400, str(e))
except Exception as e:
return error_response(400, str(e))
# ---------- 检测项目参数模板 ----------