新增风险监控接口并补齐案例结果字段
This commit is contained in:
parent
680b0c20cf
commit
4562aa6bdc
@ -7,6 +7,7 @@ from app.api.v1.conversations import router as conversations_router
|
|||||||
from app.api.v1.dashboard import router as dashboard_router
|
from app.api.v1.dashboard import router as dashboard_router
|
||||||
from app.api.v1.health import router as health_router
|
from app.api.v1.health import router as health_router
|
||||||
from app.api.v1.model_config import router as model_config_router
|
from app.api.v1.model_config import router as model_config_router
|
||||||
|
from app.api.v1.monitoring import router as monitoring_router
|
||||||
from app.api.v1.ocr import router as ocr_router
|
from app.api.v1.ocr import router as ocr_router
|
||||||
from app.api.v1.reports import router as reports_router
|
from app.api.v1.reports import router as reports_router
|
||||||
from app.api.v1.risk_items import router as risk_items_router
|
from app.api.v1.risk_items import router as risk_items_router
|
||||||
@ -17,6 +18,7 @@ from app.api.v1.suppliers import router as suppliers_router
|
|||||||
api_router = APIRouter(prefix="/api/v1")
|
api_router = APIRouter(prefix="/api/v1")
|
||||||
api_router.include_router(health_router)
|
api_router.include_router(health_router)
|
||||||
api_router.include_router(model_config_router)
|
api_router.include_router(model_config_router)
|
||||||
|
api_router.include_router(monitoring_router)
|
||||||
api_router.include_router(ocr_router)
|
api_router.include_router(ocr_router)
|
||||||
api_router.include_router(auth_router)
|
api_router.include_router(auth_router)
|
||||||
api_router.include_router(conversations_router)
|
api_router.include_router(conversations_router)
|
||||||
|
|||||||
28
app/api/v1/monitoring.py
Normal file
28
app/api/v1/monitoring.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
from typing import Annotated
|
||||||
|
|
||||||
|
from fastapi import APIRouter, Depends
|
||||||
|
|
||||||
|
from app.api.dependencies import DatabaseSession, require_permission
|
||||||
|
from app.models.entities import OperationAudit, UserAccount
|
||||||
|
from app.schemas.common import ApiResponse
|
||||||
|
|
||||||
|
router = APIRouter(prefix="/monitoring", tags=["monitoring"])
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/risk")
|
||||||
|
async def monitor_risk(
|
||||||
|
payload: dict,
|
||||||
|
session: DatabaseSession,
|
||||||
|
current_user: Annotated[UserAccount, Depends(require_permission("risk.assess", operate=True))],
|
||||||
|
) -> ApiResponse[dict]:
|
||||||
|
session.add(
|
||||||
|
OperationAudit(
|
||||||
|
actor_user_id=current_user.id,
|
||||||
|
actor_emp_no=current_user.emp_no,
|
||||||
|
action="risk.monitor.add",
|
||||||
|
resource_type="risk_assessment",
|
||||||
|
resource_id=str(payload.get("subject_id") or ""),
|
||||||
|
audit_metadata=payload,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return ApiResponse(data={"monitored": True, "subject_id": payload.get("subject_id")})
|
||||||
@ -79,6 +79,7 @@ class SimilarCase(ApiSchema):
|
|||||||
description: str | None = None
|
description: str | None = None
|
||||||
root_cause: str | None = None
|
root_cause: str | None = None
|
||||||
defect_level: str | None = None
|
defect_level: str | None = None
|
||||||
|
result: str | None = None
|
||||||
problem: str | None = None
|
problem: str | None = None
|
||||||
solution: str | None = None
|
solution: str | None = None
|
||||||
similarity: float | None = None
|
similarity: float | None = None
|
||||||
|
|||||||
@ -123,6 +123,7 @@ class AnomalyCaseRAG:
|
|||||||
AnomalyCase.solution,
|
AnomalyCase.solution,
|
||||||
AnomalyCase.root_cause,
|
AnomalyCase.root_cause,
|
||||||
AnomalyCase.defect_level,
|
AnomalyCase.defect_level,
|
||||||
|
AnomalyCase.result,
|
||||||
)
|
)
|
||||||
vector_ready = await self._vector_column_ready()
|
vector_ready = await self._vector_column_ready()
|
||||||
has_vectors = await self._has_stored_vectors() if vector_ready else False
|
has_vectors = await self._has_stored_vectors() if vector_ready else False
|
||||||
@ -135,7 +136,7 @@ class AnomalyCaseRAG:
|
|||||||
"""
|
"""
|
||||||
SELECT id, date, product_name, product_category, material_type, supplier,
|
SELECT id, date, product_name, product_category, material_type, supplier,
|
||||||
factory, stage_new, anomaly_type, description, solution, root_cause,
|
factory, stage_new, anomaly_type, description, solution, root_cause,
|
||||||
defect_level, 1 - (embedding_vector <=> CAST(:embedding AS halfvec)) AS vector_score
|
defect_level, result, 1 - (embedding_vector <=> CAST(:embedding AS halfvec)) AS vector_score
|
||||||
FROM anomaly_cases
|
FROM anomaly_cases
|
||||||
WHERE embedding_vector IS NOT NULL
|
WHERE embedding_vector IS NOT NULL
|
||||||
ORDER BY embedding_vector <=> CAST(:embedding AS halfvec)
|
ORDER BY embedding_vector <=> CAST(:embedding AS halfvec)
|
||||||
@ -306,6 +307,7 @@ class AnomalyCaseRAG:
|
|||||||
description=row.get("description"),
|
description=row.get("description"),
|
||||||
root_cause=row.get("root_cause"),
|
root_cause=row.get("root_cause"),
|
||||||
defect_level=row.get("defect_level"),
|
defect_level=row.get("defect_level"),
|
||||||
|
result=row.get("result"),
|
||||||
problem=(row.get("anomaly_type") or row.get("description") or "历史异常未填写"),
|
problem=(row.get("anomaly_type") or row.get("description") or "历史异常未填写"),
|
||||||
solution=(row.get("solution") or row.get("root_cause") or "请查看原始案例记录"),
|
solution=(row.get("solution") or row.get("root_cause") or "请查看原始案例记录"),
|
||||||
)
|
)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user