feat: RAG 임베딩 자동 동기화 + AI 서비스 개선
- 부적합 라이프사이클 전 과정에서 Qdrant 임베딩 자동 동기화 - 관리함 5개 저장 함수 + 수신함 상태 변경 시 fire-and-forget sync - 30분 주기 전체 재동기화 안전망 (FastAPI lifespan 백그라운드 태스크) - build_document_text에 카테고리(final_category/category) 포함 - RAG 질의에 DB 통계 집계 지원 (카테고리별/부서별 건수) - Qdrant client.search → query_points API 마이그레이션 - AI 어시스턴트 페이지 권한 추가 (tkuser) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -82,6 +82,38 @@ def get_daily_qc_stats(date_str: str) -> dict:
|
||||
return dict(row._mapping) if row else {}
|
||||
|
||||
|
||||
def get_category_stats() -> list[dict]:
|
||||
"""카테고리별 부적합 건수 집계"""
|
||||
with engine.connect() as conn:
|
||||
result = conn.execute(
|
||||
text(
|
||||
"SELECT COALESCE(final_category, category) AS category, "
|
||||
"COUNT(*) AS count "
|
||||
"FROM qc_issues "
|
||||
"GROUP BY COALESCE(final_category, category) "
|
||||
"ORDER BY count DESC"
|
||||
)
|
||||
)
|
||||
return [dict(row._mapping) for row in result]
|
||||
|
||||
|
||||
def get_department_stats() -> list[dict]:
|
||||
"""부서별 부적합 건수 집계"""
|
||||
with engine.connect() as conn:
|
||||
result = conn.execute(
|
||||
text(
|
||||
"SELECT responsible_department AS department, "
|
||||
"COUNT(*) AS count "
|
||||
"FROM qc_issues "
|
||||
"WHERE responsible_department IS NOT NULL "
|
||||
"AND responsible_department != '' "
|
||||
"GROUP BY responsible_department "
|
||||
"ORDER BY count DESC"
|
||||
)
|
||||
)
|
||||
return [dict(row._mapping) for row in result]
|
||||
|
||||
|
||||
def get_issues_for_date(date_str: str) -> list[dict]:
|
||||
with engine.connect() as conn:
|
||||
result = conn.execute(
|
||||
|
||||
Reference in New Issue
Block a user