main
HuangHai 1 month ago
parent 724a4f85b7
commit 1ac7fed38b

@ -25,12 +25,10 @@ public class AiGenerate {
String[] regions = {"文山州", "楚雄州"};
// 第一步:数据获取
System.out.println("=== 开始数据收集 ===");
String dataContent = DataCollector.collectEducationData(regions);
String analysisPrompt = DataCollector.createAnalysisPrompt(dataContent, regions);
// 第二步AI分析并生成Word文档
System.out.println("=== 开始AI分析和Word文档生成 ===");
generateWordReport(analysisPrompt, regions);
} catch (Exception e) {
@ -46,7 +44,6 @@ public class AiGenerate {
String configFile = "application.yaml";
BaseApplication.PropKit = new YamlProp(configFile);
LocalMysqlConnectUtil.Init();
System.out.println("配置初始化完成");
}
/**
@ -55,9 +52,9 @@ public class AiGenerate {
private static void generateWordReport(String analysisPrompt, String[] regions) {
// 生成输出文件名(不包含路径)
String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String fileName = "教育资源对比分析报告_" + timestamp + ".docx";
System.out.println("开始调用DeepSeek进行数据分析...");
// 构建区域名称
String regionName = String.join("与", regions);
// 调用DeepSeek进行分析
CallDeepSeek.callDeepSeekStream(analysisPrompt, new CallDeepSeek.SSEListener() {
@ -75,18 +72,28 @@ public class AiGenerate {
System.out.println("\n\n=== Word文档分析完成 ===");
try {
// 使用完整的分析结果
String analysisResult = fullResponse.toString();
// 生成Word文档
String wordFilePath = WordGenerator.generateWordDocument(fullResponse.toString(), fileName, regions);
System.out.println("Word分析报告已保存到: " + wordFilePath);
String wordOutputPath = "D:\\dsWork\\YunNanDsBase\\WebRoot\\upload\\" + regionName + "_教育分析报告_" + timestamp + ".docx";
String wordFilePath = WordGenerator.generateWordDocument(analysisResult, wordOutputPath, regions);
if (wordFilePath != null) {
System.out.println("Word文档生成完成: " + wordFilePath);
}
// 第三步生成PPT
System.out.println("\n\n=== 开始生成PPT ===");
String uid = "dsideal";
String apiToken = PptAIKit.createApiToken(uid, null);
String pptFilePath = PptGenerator.generatePptPresentation(fullResponse.toString(), regions, apiToken);
// 生成HTML报告
String htmlOutputPath = "D:\\dsWork\\YunNanDsBase\\WebRoot\\upload\\" + regionName + "_教育分析报告_" + timestamp + ".html";
String htmlFilePath = HtmlGenerator.generateHtmlReport(analysisResult, htmlOutputPath, regionName);
if (htmlFilePath != null) {
System.out.println("HTML报告生成完成: " + htmlFilePath);
}
// 生成PPT
String token = PptAIKit.createApiToken("dsideal", 1000);
String pptFilePath = PptGenerator.generatePptPresentation(analysisResult, regions, token);
if (pptFilePath != null) {
System.out.println("PPT演示文稿已保存到: " + pptFilePath);
System.out.println("PPT演示文稿生成完成: " + pptFilePath);
}
} catch (Exception e) {

@ -0,0 +1,98 @@
package com.dsideal.base.Tools;
import com.dsideal.base.Tools.Util.CallDeepSeek;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class HtmlGenerator {
/**
* HTML
* @param analysisResult AI
* @param outputPath
* @param regionName
* @return HTML
*/
public static String generateHtmlReport(String analysisResult, String outputPath, String regionName) {
try {
// 构建DeepSeek提示词要求生成包含图表的HTML报告
String prompt = buildHtmlPrompt(analysisResult, regionName);
System.out.println("正在调用DeepSeek生成HTML报告...");
// 调用DeepSeek API生成HTML内容
String htmlContent = CallDeepSeek.callDeepSeek(prompt);
if (htmlContent == null || htmlContent.trim().isEmpty()) {
System.err.println("DeepSeek生成HTML内容失败");
return null;
}
// 清理HTML内容移除可能的markdown标记
htmlContent = cleanHtmlContent(htmlContent);
// 保存HTML文件
try (FileWriter writer = new FileWriter(outputPath, StandardCharsets.UTF_8)) {
writer.write(htmlContent);
}
System.out.println("HTML报告生成成功: " + outputPath);
return outputPath;
} catch (IOException e) {
System.err.println("保存HTML文件时出错: " + e.getMessage());
e.printStackTrace();
return null;
} catch (Exception e) {
System.err.println("生成HTML报告时出错: " + e.getMessage());
e.printStackTrace();
return null;
}
}
/**
* DeepSeek
*/
private static String buildHtmlPrompt(String analysisResult, String regionName) {
return String.format(
"请根据以下数据分析结果生成一个完整的HTML格式报告。要求\n\n" +
"1. 生成完整的HTML文档结构包含<!DOCTYPE html>、<html>、<head>、<body>等标签)\n" +
"2. 使用现代化的CSS样式包含响应式设计\n" +
"3. 必须包含以下类型的图表使用Chart.js库\n" +
" - 人口分布饼图\n" +
" - 教育资源对比柱状图\n" +
" - 综合指标雷达图\n" +
" - 发展趋势线图\n" +
"4. 图表数据要根据分析内容合理推算和展示\n" +
"5. 报告标题为:《%s人口变化趋势对基础教育的影响分析报告》\n" +
"6. 包含报告摘要、详细分析、图表展示、结论建议等章节\n" +
"7. 样式要美观专业,适合作为正式报告展示\n" +
"8. 直接输出完整的HTML代码不要用markdown包装\n\n" +
"数据分析结果:\n%s\n\n" +
"请生成完整的HTML代码",
regionName, analysisResult
);
}
/**
* HTML
*/
private static String cleanHtmlContent(String htmlContent) {
// 移除可能的markdown代码块标记
htmlContent = htmlContent.replaceAll("```html\\s*", "");
htmlContent = htmlContent.replaceAll("```\\s*$", "");
htmlContent = htmlContent.replaceAll("^```\\s*", "");
// 确保HTML文档完整性
if (!htmlContent.trim().toLowerCase().startsWith("<!doctype") &&
!htmlContent.trim().toLowerCase().startsWith("<html")) {
// 如果不是完整的HTML文档添加基本结构
htmlContent = "<!DOCTYPE html>\n<html lang='zh-CN'>\n<head>\n<meta charset='UTF-8'>\n<title>教育分析报告</title>\n</head>\n<body>\n" + htmlContent + "\n</body>\n</html>";
}
return htmlContent.trim();
}
}

@ -33,8 +33,6 @@ public class WordGenerator {
saveDir.mkdirs();
}
// 构建完整的输出路径
String outputPath = SAVE_DIRECTORY + File.separator + fileName;
XWPFDocument document = new XWPFDocument();
@ -55,12 +53,12 @@ public class WordGenerator {
addDocumentFooter(document);
// 保存文档
try (FileOutputStream out = new FileOutputStream(outputPath)) {
try (FileOutputStream out = new FileOutputStream(fileName)) {
document.write(out);
}
System.out.println("Word文档已保存到: " + outputPath);
return outputPath;
System.out.println("Word文档已保存到: " + fileName);
return fileName;
} finally {
document.close();

Loading…
Cancel
Save