package com.zioinfo.mro.ai;
import com.zioinfo.mro.ai.service.AiTextRouter;
import com.zioinfo.mro.common.ai.TextAiClient.GenResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* GUARDiA MRO AI 서비스 — 6개 설비보전·MRO 자재 AI 기능. AiTextRouter(Claude→Ollama 폴백) 경유 + Java 폴백.
*
*
보안 불변 규칙: AI 호출은 AiTextRouter 경유(외부 API 는 anthropic 예외 외 금지).
* 라우터 degraded 시 모든 메서드가 규칙기반/통계 폴백으로 동작한다(예외 없음).
*
* - 고장 원인 분석 — 증상/설비/이력 상관 → 추정 원인·조치
* - 예지보전 — 가동률/다운타임/MTBF 패턴 이상 → 정비 권고(위험도)
* - 자재 수요 예측 — 소비 추세(가중이동평균+추세) 폴백
* - 자연어 조회 — Text→검색필터 추출
* - 안전재고·재발주점 추천 — 수요 변동/리드타임 기반
* - 신뢰성 지표 이상 감지 — MTBF/MTTR/가동률 임계 판정
*
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class AiService {
private final OllamaClient ollama;
/** provider 라우팅(Claude→Ollama 폴백) + 로컬 학습 로그 경유. */
private final AiTextRouter aiTextRouter;
public boolean ollamaAvailable() {
return ollama.available();
}
/** 라우터 경유 텍스트 생성 — degraded 면 null(호출부가 Java 폴백 수행). */
private String routeGenerate(String prompt) {
GenResult r = aiTextRouter.generate(prompt);
return (r != null && !r.degraded()) ? r.text() : null;
}
// 1. 고장 원인 분석 (증상/설비/정비이력 상관)
public Map faultRootCause(String equipmentCode, String symptom,
List