main
HuangHai 1 month ago
parent d857a13cb4
commit 7ebbf13749

@ -1,6 +1,7 @@
package com.dsideal.base.AI.Controller;
import com.dsideal.base.AI.Generator.WordGenerator;
import com.dsideal.base.AI.Generator.HtmlGenerator;
import com.dsideal.base.AI.Model.YunNanModel;
import com.dsideal.base.Util.CallDeepSeek;
import com.dsideal.base.Util.CommonUtil;
@ -75,4 +76,72 @@ public class AiController extends Controller {
sseEmitter.waiting(100);
renderNull();
}
/**
* HTML
*
* @param shiZhouA A
* @param shiZhouB B
* http://10.10.21.20:9200/dsBase/ai/compareShiZhouHtml?shiZhouA=文山州&shiZhouB=楚雄州
*/
@Before({GET.class})
public void compareShiZhouHtml(String shiZhouA, String shiZhouB) throws Exception {
// 数据获取
String content = ym.collectEducationData(new String[]{shiZhouA, shiZhouB});
//创建sse
final SseEmitter sseEmitter = new SseEmitter(getResponse());
// 发送开始分析的消息
sseEmitter.sendMessage("data: 开始数据分析...\n\n");
// 构建HTML提示词直接生成HTML报告
String regionName = shiZhouA + "与" + shiZhouB;
String htmlPrompt = HtmlGenerator.buildHtmlPrompt(content, regionName);
// 调用DeepSeek API生成HTML报告
CallDeepSeek.callDeepSeekStream(htmlPrompt, new CallDeepSeek.SSEListener() {
@Override
public void onData(String data) {
// 实时推送HTML生成进度
sseEmitter.sendMessage("data: " + data + "\n\n");
}
@Override
public void onComplete(String fullResponse) {
try {
// HTML生成完成保存文件
sseEmitter.sendMessage("data: HTML报告生成完成正在保存文件...\n\n");
String fileName = "/upload/" + shiZhouA + "与" + shiZhouB + "_教育分析报告_" +
new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) + ".html";
String filePath = PathKit.getWebRootPath() + fileName;
// 清理并保存HTML内容
HtmlGenerator htmlGenerator = new HtmlGenerator();
htmlGenerator.saveHtmlContent(fullResponse, filePath);
String baseUrl = CommonUtil.getBaseUrl(getRequest());
sseEmitter.sendMessage("data: HTML报告生成完成文件Http 相对路径:" + baseUrl + "/dsBase" + fileName + "\n\n");
sseEmitter.sendMessage("data: [DONE]\n\n");
// 完成SSE连接
sseEmitter.complete();
} catch (Exception e) {
sseEmitter.sendMessage("data: 保存HTML文件时发生错误" + e.getMessage() + "\n\n");
sseEmitter.sendMessage("data: [DONE]\n\n");
sseEmitter.complete();
}
}
@Override
public void onError(String error) {
// 发送错误信息给前端
sseEmitter.sendMessage("data: 调用DeepSeek API异常" + error + "\n\n");
sseEmitter.sendMessage("data: [DONE]\n\n");
sseEmitter.complete();
}
});
//锁住等待子线程推送完成
sseEmitter.waiting(100);
renderNull();
}
}

@ -1,6 +1,5 @@
package com.dsideal.base.AI.Generator;
import com.dsideal.base.Util.CallDeepSeek;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@ -8,49 +7,11 @@ import java.nio.charset.StandardCharsets;
public class HtmlGenerator {
/**
* HTML
* @param analysisResult AI
* @param outputPath
* @param regionName
* @return HTML
*/
public void 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内容失败");
}
// 清理HTML内容移除可能的markdown标记
htmlContent = cleanHtmlContent(htmlContent);
// 保存HTML文件
try (FileWriter writer = new FileWriter(outputPath, StandardCharsets.UTF_8)) {
writer.write(htmlContent);
}
System.out.println("HTML报告生成成功: " + outputPath);
} catch (IOException e) {
System.err.println("保存HTML文件时出错: " + e.getMessage());
e.printStackTrace();
} catch (Exception e) {
System.err.println("生成HTML报告时出错: " + e.getMessage());
e.printStackTrace();
}
}
/**
* DeepSeek
* HTML
*/
private static String buildHtmlPrompt(String analysisResult, String regionName) {
public static String buildHtmlPrompt(String dataContent, String regionName) {
return String.format(
"请根据以下数据分析结果生成一个完整的HTML格式报告。要求\n\n" +
"请根据以下数据内容生成一个完整的HTML格式报告。要求\n\n" +
"1. 生成完整的HTML文档结构包含<!DOCTYPE html>、<html>、<head>、<body>等标签)\n" +
"2. 使用现代化的CSS样式包含响应式设计\n" +
"3. 必须包含以下类型的图表使用Chart.js库\n" +
@ -58,17 +19,39 @@ public class HtmlGenerator {
" - 教育资源对比柱状图\n" +
" - 综合指标雷达图\n" +
" - 发展趋势线图\n" +
"4. 图表数据要根据分析内容合理推算和展示\n" +
"4. 图表数据要根据数据内容合理推算和展示\n" +
"5. 报告标题为:《%s人口变化趋势对基础教育的影响分析报告》\n" +
"6. 包含报告摘要、详细分析、图表展示、结论建议等章节\n" +
"7. 样式要美观专业,适合作为正式报告展示\n" +
"8. 直接输出完整的HTML代码不要用markdown包装\n\n" +
"数据分析结果\n%s\n\n" +
"数据内容\n%s\n\n" +
"请生成完整的HTML代码",
regionName, analysisResult
regionName, dataContent
);
}
/**
* HTML
* @param htmlContent HTML
* @param outputPath
*/
public void saveHtmlContent(String htmlContent, String outputPath) {
try {
// 清理HTML内容
htmlContent = cleanHtmlContent(htmlContent);
// 保存HTML文件
try (FileWriter writer = new FileWriter(outputPath, StandardCharsets.UTF_8)) {
writer.write(htmlContent);
}
System.out.println("HTML文件保存成功: " + outputPath);
} catch (IOException e) {
System.err.println("保存HTML文件时出错: " + e.getMessage());
e.printStackTrace();
throw new RuntimeException("保存HTML文件失败", e);
}
}
/**
* HTML
*/

Loading…
Cancel
Save