package com.zy.ai.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import com.zy.ai.entity.AiDataAnalysisReport; import com.zy.ai.service.DataAnalysisFileStorageService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; @Slf4j @Service("dataAnalysisFileStorageService") public class DataAnalysisFileStorageServiceImpl implements DataAnalysisFileStorageService { @Value("${dataAnalysisStorage.loggingPath:../stock/out/wcs/aiAnalysis}") private String basePath; @Override public String saveReport(AiDataAnalysisReport report) { try { SimpleDateFormat dirFormat = new SimpleDateFormat("yyyyMMdd"); SimpleDateFormat fileFormat = new SimpleDateFormat("yyyyMMdd_HHmmss"); String dateDir = dirFormat.format(report.getCreateTime()); String timestamp = fileFormat.format(report.getCreateTime()); File dir = new File(basePath, dateDir); if (!dir.exists() && !dir.mkdirs()) { log.warn("Failed to create analysis storage directory: {}", dir.getAbsolutePath()); return null; } String fileName = "analysis_" + report.getPeriodType() + "_" + timestamp + ".json"; File file = new File(dir, fileName); Map content = new LinkedHashMap<>(); content.put("periodType", report.getPeriodType()); content.put("periodStart", report.getPeriodStart()); content.put("periodEnd", report.getPeriodEnd()); content.put("triggerType", report.getTriggerType()); content.put("status", report.getStatus()); content.put("summary", report.getSummary()); content.put("structuredData", report.getStructuredData()); content.put("llmCallCount", report.getLlmCallCount()); content.put("totalTokens", report.getTotalTokens()); content.put("createTime", report.getCreateTime()); content.put("finishTime", report.getFinishTime()); try (OutputStreamWriter writer = new OutputStreamWriter( new FileOutputStream(file), StandardCharsets.UTF_8)) { writer.write(JSON.toJSONString(content, SerializerFeature.PrettyFormat, SerializerFeature.WriteDateUseDateFormat)); } String relativePath = dateDir + "/" + fileName; log.info("Data analysis report saved to file: {}", relativePath); return relativePath; } catch (Exception e) { log.error("Failed to save data analysis report to file", e); return null; } } }