package com.vincent.rsf.server.ai.service.diagnosis;
|
|
import com.vincent.rsf.framework.common.SnowflakeIdWorker;
|
import com.vincent.rsf.server.system.entity.AiCallLog;
|
import com.vincent.rsf.server.system.entity.AiDiagnosisRecord;
|
import com.vincent.rsf.server.system.service.AiCallLogService;
|
import com.vincent.rsf.server.system.service.AiDiagnosisRecordService;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.Date;
|
|
@Service
|
public class AiDiagnosisRuntimeService {
|
|
@Resource
|
private AiDiagnosisRecordService aiDiagnosisRecordService;
|
@Resource
|
private AiCallLogService aiCallLogService;
|
@Resource
|
private SnowflakeIdWorker snowflakeIdWorker;
|
@Resource
|
private AiDiagnosisReportService aiDiagnosisReportService;
|
|
/**
|
* 在诊断开始时创建一条诊断记录,并标记为“进行中”。
|
*/
|
public AiDiagnosisRecord startDiagnosis(Long tenantId, Long userId, String sessionId, String sceneCode, String question) {
|
AiDiagnosisRecord record = new AiDiagnosisRecord()
|
.setDiagnosisNo(String.valueOf(snowflakeIdWorker.nextId()).substring(3))
|
.setTenantId(tenantId)
|
.setUserId(userId)
|
.setSessionId(sessionId)
|
.setSceneCode(sceneCode)
|
.setQuestion(question)
|
.setResult(2)
|
.setStatus(1)
|
.setDeleted(0)
|
.setStartTime(new Date())
|
.setCreateTime(new Date())
|
.setUpdateTime(new Date());
|
aiDiagnosisRecordService.save(record);
|
return record;
|
}
|
|
/**
|
* 将诊断记录标记为成功,并补齐报告内容、模型信息和耗时。
|
*/
|
public void finishDiagnosisSuccess(AiDiagnosisRecord record, String conclusion, String modelCode, String toolSummary) {
|
if (record == null) {
|
return;
|
}
|
Date now = new Date();
|
record.setConclusion(conclusion);
|
aiDiagnosisReportService.fillReport(record, conclusion, toolSummary);
|
record.setModelCode(modelCode);
|
record.setToolSummary(toolSummary);
|
record.setResult(1);
|
record.setEndTime(now);
|
record.setSpendTime(now.getTime() - record.getStartTime().getTime());
|
record.setUpdateTime(now);
|
aiDiagnosisRecordService.updateById(record);
|
}
|
|
/**
|
* 将诊断记录标记为失败,并保留已有结论、错误信息和工具轨迹。
|
*/
|
public void finishDiagnosisFailure(AiDiagnosisRecord record, String conclusion, String err, String toolSummary) {
|
if (record == null) {
|
return;
|
}
|
Date now = new Date();
|
record.setConclusion(conclusion);
|
aiDiagnosisReportService.fillReport(record, conclusion, toolSummary);
|
record.setToolSummary(toolSummary);
|
record.setErr(err);
|
record.setResult(0);
|
record.setEndTime(now);
|
record.setSpendTime(record.getStartTime() == null ? null : now.getTime() - record.getStartTime().getTime());
|
record.setUpdateTime(now);
|
aiDiagnosisRecordService.updateById(record);
|
}
|
|
/**
|
* 保存一次模型调用日志,供审计、统计和故障定位使用。
|
*/
|
public AiCallLog saveCallLog(Long tenantId, Long userId, String sessionId, Long diagnosisId, String routeCode,
|
String modelCode, Integer attemptNo, Date requestTime, Date responseTime,
|
Integer result, String err) {
|
AiCallLog log = new AiCallLog()
|
.setTenantId(tenantId)
|
.setUserId(userId)
|
.setSessionId(sessionId)
|
.setDiagnosisId(diagnosisId)
|
.setRouteCode(routeCode)
|
.setModelCode(modelCode)
|
.setAttemptNo(attemptNo)
|
.setRequestTime(requestTime)
|
.setResponseTime(responseTime)
|
.setSpendTime(requestTime == null || responseTime == null ? null : responseTime.getTime() - requestTime.getTime())
|
.setResult(result)
|
.setErr(err)
|
.setStatus(1)
|
.setDeleted(0)
|
.setCreateTime(responseTime == null ? new Date() : responseTime);
|
aiCallLogService.save(log);
|
return log;
|
}
|
|
}
|