完善训练链路接口与PDF下载

This commit is contained in:
刘金宝
2026-06-08 15:16:07 +08:00
parent 41a2851120
commit 11b1712b01
12 changed files with 550 additions and 164 deletions
+8 -2
View File
@@ -39,11 +39,11 @@ class OrderService:
def create_physical_exam_order(self, session_id: int, user_id: str, item_code: str) -> CreateOrderResponse:
"""体格检查结果:复用检查申请逻辑,结果仍只来自数据库。"""
return self.create_order(session_id, user_id, item_code)
return self._create_order(session_id, user_id, item_code, require_physical=True)
def create_auxiliary_exam_order(self, session_id: int, user_id: str, item_code: str) -> CreateOrderResponse:
"""辅助检查结果:复用检查申请逻辑,结果仍只来自数据库。"""
return self.create_order(session_id, user_id, item_code)
return self._create_order(session_id, user_id, item_code, require_physical=False)
def _items_response(self, items) -> OrderItemsResponse:
"""检查列表响应:把 ORM 检查项转换成前端列表结构。"""
@@ -64,6 +64,10 @@ class OrderService:
def create_order(self, session_id: int, user_id: str, item_code: str) -> CreateOrderResponse:
"""检查申请:从数据库读取检查结果并写入当前会话记录。"""
return self._create_order(session_id, user_id, item_code)
def _create_order(self, session_id: int, user_id: str, item_code: str, require_physical: bool | None = None) -> CreateOrderResponse:
"""检查申请:统一校验会话、项目类型和幂等逻辑,检查结果只来自数据库。"""
session = self._get_session(session_id, user_id)
if session.status not in {"inquiry", "diagnosis", "treatment"}:
raise AppError("SESSION_STATUS_INVALID", "current session does not allow ordering", 400)
@@ -71,6 +75,8 @@ class OrderService:
item = self.case_repo.get_exam_item(session.case_id, item_code)
if not item:
raise AppError("ORDER_ITEM_NOT_FOUND", "order item not found for current case", 404)
if require_physical is not None and self._is_physical_item(item) != require_physical:
raise AppError("ORDER_ITEM_TYPE_MISMATCH", "order item type does not match current exam endpoint", 400)
existing_order = self.session_repo.get_order_by_item(session.id, item.item_code)
if existing_order: