feat: 手术视频消耗、待确认与持久化改造
- 新增 Alembic 初始迁移、领域明细模型及归档持久化与重试链路\n- 拆分视频会话注册表、分类处理、推理时间窗聚合与流处理\n- 消耗日志:TSV/Markdown 含 top2/top3;item_id 优先产品编码;待确认记「待确认」行,语音确认后落正式行并更新汇总\n- 待确认时内存/DB 明细为占位行,确认后替换;拒绝时移除占位\n- 分类 probs 先 detach/cpu 再转 NumPy,修复 MPS/CUDA 上推理被静默跳过\n- 补充集成测试、归档与设备张量等单测 Made-with: Cursor
This commit is contained in:
@@ -235,7 +235,7 @@ async def end_surgery(
|
||||
responses={
|
||||
status.HTTP_503_SERVICE_UNAVAILABLE: {
|
||||
"description": (
|
||||
"结果尚不可查询:未同时满足「已开录」且「算法已产生可返回的实时计算结果」。"
|
||||
"结果尚不可查询:无至少一条消耗明细,或手术未开始、未开录成功、尚无可查归档等。"
|
||||
),
|
||||
"model": SurgeryClientErrorResponse,
|
||||
},
|
||||
@@ -245,7 +245,7 @@ async def end_surgery(
|
||||
description=(
|
||||
"根据手术 6 位号查询该台手术的耗材消耗明细(多行)及按物品汇总。"
|
||||
"手术进行中返回当前内存已记账结果;结束后返回数据库持久化结果。"
|
||||
"若手术从未开始或尚无可查的最终归档,返回 503。"
|
||||
"若无至少一条消耗明细(含已归档但明细为空)、手术从未开始或尚无可查归档,返回 503。"
|
||||
"使用 GET:只读、幂等。\n\n"
|
||||
"响应体 `details` 与 `summary` 的字段定义见模式 SurgeryConsumptionDetail / SurgeryConsumptionSummary;"
|
||||
"若服务端启用耗材 TSV 文本日志,文件明细列为 tab 分隔的 "
|
||||
@@ -267,13 +267,14 @@ async def get_surgery_result(
|
||||
) -> SurgeryResultResponse:
|
||||
logger.info("Query surgery result: surgery_id={}", surgery_id)
|
||||
details = await pipeline.get_consumption_details_for_client(surgery_id)
|
||||
if details is None:
|
||||
if not details:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
||||
detail={
|
||||
"code": "RESULT_NOT_READY",
|
||||
"message": (
|
||||
"当前无该手术的可查询结果:手术未开始、未成功开录或尚未产生可返回的数据。"
|
||||
"当前无该手术的可查询结果:手术未开始、未成功开录、尚无至少一条消耗明细,"
|
||||
"或尚无可返回的数据。"
|
||||
),
|
||||
"surgery_id": surgery_id,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user