|
|
|
@ -7,7 +7,6 @@ import com.dsideal.base.Plugin.YamlProp;
|
|
|
|
|
import com.dsideal.base.Tools.Util.CallDeepSeek;
|
|
|
|
|
import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil;
|
|
|
|
|
import com.dsideal.base.Tools.Util.PptAIKit;
|
|
|
|
|
import com.dsideal.base.Tools.Util.HttpUtils;
|
|
|
|
|
import com.jfinal.plugin.activerecord.Db;
|
|
|
|
|
import com.jfinal.plugin.activerecord.Record;
|
|
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
|
@ -16,7 +15,6 @@ import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
|
|
|
|
import org.apache.poi.xwpf.usermodel.XWPFRun;
|
|
|
|
|
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.FileOutputStream;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.util.Date;
|
|
|
|
@ -65,8 +63,6 @@ public class AiGenerate extends PptAIKit {
|
|
|
|
|
// 构建分析提示词
|
|
|
|
|
String analysisPrompt = createAnalysisPrompt(dataContent.toString());
|
|
|
|
|
|
|
|
|
|
// 构建PPT生成提示词
|
|
|
|
|
String pptPrompt = createPptPrompt(dataContent.toString(), biJiao);
|
|
|
|
|
|
|
|
|
|
// 生成输出文件路径
|
|
|
|
|
String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
|
|
|
|
@ -97,7 +93,7 @@ public class AiGenerate extends PptAIKit {
|
|
|
|
|
// 生成PPT
|
|
|
|
|
// 生成PPT
|
|
|
|
|
System.out.println("\n\n=== 开始生成PPT ===");
|
|
|
|
|
generatePptPresentation(biJiao, pptPrompt);
|
|
|
|
|
generatePptPresentation(analysisPrompt);
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
System.err.println("保存文件时出错: " + e.getMessage());
|
|
|
|
@ -133,54 +129,85 @@ public class AiGenerate extends PptAIKit {
|
|
|
|
|
/**
|
|
|
|
|
* 生成PPT演示文稿
|
|
|
|
|
*/
|
|
|
|
|
private static void generatePptPresentation(String[] cities, String pptPrompt) {
|
|
|
|
|
private static void generatePptPresentation(String analysisContent) {
|
|
|
|
|
try {
|
|
|
|
|
// 创建主题
|
|
|
|
|
String subject = String.join("与", cities) + "教育资源配置对比分析";
|
|
|
|
|
String uid = "user123";
|
|
|
|
|
String uid = "test";
|
|
|
|
|
// 第一步:使用DeepSeek生成简化的PPT提示词
|
|
|
|
|
String simplifiedPptPrompt = generateSimplifiedPptPrompt(analysisContent);
|
|
|
|
|
|
|
|
|
|
// 创建 api token
|
|
|
|
|
// 创建 api token (有效期2小时,建议缓存到redis,同一个 uid 创建时之前的 token 会在10秒内失效)
|
|
|
|
|
String apiToken = PptAIKit.createApiToken(uid, null);
|
|
|
|
|
System.out.println("PPT API token: " + apiToken);
|
|
|
|
|
System.out.println("api token: " + apiToken);
|
|
|
|
|
|
|
|
|
|
// 生成大纲 - 修正参数顺序
|
|
|
|
|
System.out.println("\n\n========== 正在生成PPT大纲 ==========\n");
|
|
|
|
|
String outline = PptAIKit.generateOutline(apiToken, subject, null, pptPrompt);
|
|
|
|
|
System.out.println("PPT大纲生成完成");
|
|
|
|
|
// 生成大纲
|
|
|
|
|
System.out.println("\n\n========== 正在生成大纲 ==========");
|
|
|
|
|
String outline = PptAIKit.generateOutline(apiToken, null, null, simplifiedPptPrompt);
|
|
|
|
|
|
|
|
|
|
// 生成大纲内容 - 修正参数
|
|
|
|
|
System.out.println("\n\n========== 正在生成PPT内容 ==========\n");
|
|
|
|
|
String markdown = PptAIKit.generateContent(apiToken, outline, null, pptPrompt);
|
|
|
|
|
System.out.println("PPT内容生成完成");
|
|
|
|
|
// 生成大纲内容
|
|
|
|
|
System.out.println("\n\n========== 正在生成大纲内容 ==========");
|
|
|
|
|
String markdown = PptAIKit.generateContent(apiToken, outline, null, simplifiedPptPrompt);
|
|
|
|
|
|
|
|
|
|
// 随机选择一个模板
|
|
|
|
|
System.out.println("\n\n========== 选择PPT模板 ==========\n");
|
|
|
|
|
// 随机一个模板
|
|
|
|
|
System.out.println("\n\n========== 随机选择模板 ==========");
|
|
|
|
|
String templateId = PptAIKit.randomOneTemplateId(apiToken);
|
|
|
|
|
System.out.println("选择的模板ID: " + templateId);
|
|
|
|
|
System.out.println(templateId);
|
|
|
|
|
|
|
|
|
|
// 生成PPT
|
|
|
|
|
System.out.println("\n\n========== 正在生成PPT文件 ==========\n");
|
|
|
|
|
System.out.println("\n\n========== 正在生成PPT ==========");
|
|
|
|
|
JSONObject pptInfo = PptAIKit.generatePptx(apiToken, templateId, markdown, false);
|
|
|
|
|
String pptId = pptInfo.getString("id");
|
|
|
|
|
System.out.println("PPT ID: " + pptId);
|
|
|
|
|
System.out.println("PPT主题:" + pptInfo.getString("subject"));
|
|
|
|
|
System.out.println("PPT封面:" + pptInfo.getString("coverUrl") + "?token=" + apiToken);
|
|
|
|
|
|
|
|
|
|
// 下载PPT到当前目录
|
|
|
|
|
System.out.println("\n\n========== 正在下载PPT ==========\n");
|
|
|
|
|
JSONObject result = PptAIKit.downloadPptx(apiToken, pptId);
|
|
|
|
|
String url = result.getString("fileUrl");
|
|
|
|
|
System.out.println("PPT下载链接:" + url);
|
|
|
|
|
System.out.println("pptId: " + pptId);
|
|
|
|
|
System.out.println("ppt主题:" + pptInfo.getString("subject"));
|
|
|
|
|
System.out.println("ppt封面:" + pptInfo.getString("coverUrl") + "?token=" + apiToken);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
|
|
|
|
|
String savePath = System.getProperty("user.dir") + File.separator + "教育资源对比分析PPT_" + timestamp + ".pptx";
|
|
|
|
|
HttpUtils.download(url, new File(savePath));
|
|
|
|
|
System.out.println("PPT下载完成,保存路径:" + savePath);
|
|
|
|
|
// 新增方法:使用DeepSeek生成简化的PPT提示词
|
|
|
|
|
private static String generateSimplifiedPptPrompt(String analysisContent) {
|
|
|
|
|
try {
|
|
|
|
|
// 构建DeepSeek的请求提示词
|
|
|
|
|
String deepseekPrompt = "请根据以下教育数据分析内容,生成一个简洁的PPT制作提示词。" +
|
|
|
|
|
"要求:\n" +
|
|
|
|
|
"1. 提取关键数据点和结论\n" +
|
|
|
|
|
"2. 突出对比分析结果\n" +
|
|
|
|
|
"3. 控制字数在500字以内\n" +
|
|
|
|
|
"4. 适合PPT展示的结构化内容\n\n" +
|
|
|
|
|
"原始分析内容:\n" + analysisContent;
|
|
|
|
|
|
|
|
|
|
// 添加PPT结构要求
|
|
|
|
|
return "请根据以下内容生成PPT:\n\n" +
|
|
|
|
|
"PPT结构要求:\n" +
|
|
|
|
|
"1. 封面 - 标题和概述\n" +
|
|
|
|
|
"2. 目录 - 内容导航\n" +
|
|
|
|
|
"3. 数据概览 - 整体情况\n" +
|
|
|
|
|
"4. 详细分析 - 分项对比\n" +
|
|
|
|
|
"5. 问题识别 - 发现的问题\n" +
|
|
|
|
|
"6. 建议方案 - 解决措施\n" +
|
|
|
|
|
"7. 总结 - 结论和展望\n\n" +
|
|
|
|
|
"内容要点:\n" + deepseekPrompt;
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
System.err.println("生成PPT时出错: " + e.getMessage());
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
// 如果DeepSeek调用失败,返回基础的PPT提示词
|
|
|
|
|
return createBasicPptPrompt();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 基础PPT提示词(作为备用方案)
|
|
|
|
|
private static String createBasicPptPrompt() {
|
|
|
|
|
return "请根据教育资源配置数据生成PPT:\n\n" +
|
|
|
|
|
"PPT结构要求:\n" +
|
|
|
|
|
"1. 封面 - 标题和概述\n" +
|
|
|
|
|
"2. 目录 - 内容导航\n" +
|
|
|
|
|
"3. 数据概览 - 整体情况\n" +
|
|
|
|
|
"4. 详细分析 - 分项对比\n" +
|
|
|
|
|
"5. 问题识别 - 发现的问题\n" +
|
|
|
|
|
"6. 建议方案 - 解决措施\n" +
|
|
|
|
|
"7. 总结 - 结论和展望\n\n" +
|
|
|
|
|
"请基于上传的数据生成具体的PPT内容。";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|