feat(server): 新增编排器和报销单API接口,扩展服务编排和报销管理端点

This commit is contained in:
caoxiaozhu
2026-05-14 15:42:22 +00:00
parent af98acceb3
commit fad583ee7c
2 changed files with 39 additions and 0 deletions

View File

@@ -272,6 +272,43 @@ def get_expense_claim_item_attachment_meta(
return ExpenseClaimAttachmentRead(**payload)
@router.get(
"/claims/{claim_id}/items/{item_id}/attachment/preview",
response_class=FileResponse,
summary="读取费用明细附件预览资源",
description="优先返回票据预览图;若无单独预览图,则回退到原附件内容。",
responses={
status.HTTP_404_NOT_FOUND: {
"model": ErrorResponse,
"description": "报销单、费用明细或附件预览不存在。",
},
},
)
def get_expense_claim_item_attachment_preview(
claim_id: str,
item_id: str,
db: DbSession,
current_user: CurrentUser,
) -> FileResponse:
service = ExpenseClaimService(db)
try:
payload = service.get_claim_item_attachment_preview_content(
claim_id=claim_id,
item_id=item_id,
current_user=current_user,
)
except LookupError as error:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(error)) from error
except FileNotFoundError as error:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(error)) from error
if payload is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Claim not found")
file_path, media_type, filename = payload
return FileResponse(file_path, media_type=media_type, filename=filename)
@router.get(
"/claims/{claim_id}/items/{item_id}/attachment",
response_class=FileResponse,