main
HuangHai 1 month ago
parent 2f7de8e343
commit 3238e84add

File diff suppressed because one or more lines are too long

@ -1,112 +0,0 @@
package com.dsideal.base.AI;
import com.dsideal.base.BaseApplication;
import com.dsideal.base.DataEase.Model.DataEaseModel;
import com.dsideal.base.Plugin.YamlProp;
import com.dsideal.base.Tools.DataCollector;
import com.dsideal.base.Util.CallDeepSeek;
import com.dsideal.base.Util.LocalMysqlConnectUtil;
import com.dsideal.base.Util.PptAIKit;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* AI - WordPPT
*/
public class AiGenerate {
public static DataEaseModel dm = new DataEaseModel();
public static void main(String[] args) {
try {
// 初始化配置
initializeConfiguration();
// 定义对比地区
String[] regions = {"文山州", "楚雄州"};
// 第一步:数据获取
String dataContent = DataCollector.collectEducationData(regions);
String analysisPrompt = DataCollector.createAnalysisPrompt(dataContent, regions);
// 第二步AI分析并生成Word文档
generateWordReport(analysisPrompt, regions);
} catch (Exception e) {
System.err.println("程序执行出错: " + e.getMessage());
e.printStackTrace();
}
}
/**
*
*/
private static void initializeConfiguration() {
String configFile = "application.yaml";
BaseApplication.PropKit = new YamlProp(configFile);
LocalMysqlConnectUtil.Init();
}
/**
* Word
*/
private static void generateWordReport(String analysisPrompt, String[] regions) {
// 生成输出文件名(不包含路径)
String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
// 构建区域名称
String regionName = String.join("与", regions);
// 调用DeepSeek进行分析
CallDeepSeek.callDeepSeekStream(analysisPrompt, new CallDeepSeek.SSEListener() {
private StringBuilder fullResponse = new StringBuilder();
@Override
public void onData(String data) {
System.out.print(data);
System.out.flush();
fullResponse.append(data);
}
@Override
public void onComplete(String response) {
System.out.println("\n\n=== Word文档分析完成 ===");
try {
// 使用完整的分析结果
String analysisResult = fullResponse.toString();
// 生成Word文档
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);
}
// 生成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);
}
} catch (Exception e) {
System.err.println("保存文件时出错: " + e.getMessage());
e.printStackTrace();
}
}
@Override
public void onError(String error) {
System.err.println("DeepSeek分析出错: " + error);
}
});
}
}

@ -0,0 +1,28 @@
package com.dsideal.base.AI.Controller;
import com.dsideal.base.AI.Model.YunNanModel;
import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import com.jfinal.ext.interceptor.GET;
public class YunNanAiController extends Controller {
YunNanModel ym = new YunNanModel();
/**
*
*
* @param shiZhouA A
* @param shiZhouB B
*/
@Before({GET.class})
public void compareShiZhou(String shiZhouA, String shiZhouB) {
String[] regions = {shiZhouA, shiZhouB};
// 第一步:数据获取
String dataContent = ym.collectEducationData(regions);
String analysisPrompt = ym.createAnalysisPrompt(dataContent, regions);
// 第二步AI分析并生成Word文档
ym.generateWordReport(analysisPrompt, regions);
}
}

@ -1,4 +1,4 @@
package com.dsideal.base.AI;
package com.dsideal.base.AI.Generator;
import com.dsideal.base.Util.CallDeepSeek;
import java.io.FileWriter;

@ -1,4 +1,4 @@
package com.dsideal.base.AI;
package com.dsideal.base.AI.Generator;
import com.alibaba.fastjson.JSONObject;
import java.io.BufferedReader;

@ -1,4 +1,4 @@
package com.dsideal.base.AI;
package com.dsideal.base.AI.Generator;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;

@ -0,0 +1,150 @@
package com.dsideal.base.AI.Model;
import cn.hutool.json.JSONUtil;
import com.dsideal.base.AI.Generator.HtmlGenerator;
import com.dsideal.base.AI.Generator.PptGenerator;
import com.dsideal.base.AI.Generator.WordGenerator;
import com.dsideal.base.DataEase.Model.DataEaseModel;
import com.dsideal.base.Util.CallDeepSeek;
import com.dsideal.base.Util.PptAIKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class YunNanModel {
/**
*
*
* @param regions
* @return
*/
public String collectEducationData(String[] regions) {
// 查询教育资源配置发展预测相关表
String sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dataease' AND TABLE_NAME LIKE 'excel_报告-教育资源配置发展预测%';";
List<com.jfinal.plugin.activerecord.Record> tableList = Db.find(sql);
StringBuilder dataContent = new StringBuilder();
// 构建数据标题
dataContent.append("教育资源配置发展预测数据对比分析\n\n");
dataContent.append("对比州市:").append(String.join(" vs ", regions)).append("\n\n");
// 遍历所有相关数据表
for (com.jfinal.plugin.activerecord.Record record : tableList) {
String tableName = record.getStr("TABLE_NAME");
dataContent.append("数据表:").append(tableName).append("\n");
// 为每个地区收集数据
for (String region : regions) {
sql = "select * from `" + tableName + "` where `行政区划`=?";
List<com.jfinal.plugin.activerecord.Record> listContent = Db.use(DataEaseModel.DB_NAME).find(sql, region);
if (!listContent.isEmpty()) {
dataContent.append("\n").append(region).append("数据:\n");
for (Record dataRecord : listContent) {
dataContent.append(JSONUtil.toJsonPrettyStr(dataRecord.getColumns())).append("\n");
}
} else {
dataContent.append("\n").append(region).append(":无相关数据\n");
}
}
dataContent.append("\n----------------------------------------\n\n");
}
return dataContent.toString();
}
/**
*
*
* @param dataContent
* @param regions
* @return
*/
public String createAnalysisPrompt(String dataContent, String[] regions) {
String regionNames = String.join("和", regions);
return "你是一位专业的教育数据分析专家,请基于以下数据对" + regionNames + "的教育资源配置情况进行深入对比分析。\n\n" +
"重要要求请生成结构化的纯文本格式报告使用清晰的段落结构不要使用markdown语法。\n\n" +
"请按照以下结构进行分析并生成专业的分析报告:\n\n" +
"1. 执行摘要\n" +
" 简要概述两州教育资源配置的整体情况和主要发现\n\n" +
"2. 数据概览\n" +
" 两州基本教育数据对比和关键指标汇总\n\n" +
"3. 详细对比分析\n" +
" 教育资源配置水平对比、发展趋势分析、优势与不足分析\n\n" +
"4. 问题识别\n" +
" 存在的主要问题和资源配置不均衡情况\n\n" +
"5. 建议与对策\n" +
" 针对性改进建议和资源优化配置方案\n\n" +
"6. 结论\n" +
" 总体评价和未来发展方向\n\n" +
"请确保分析客观、专业,数据引用准确,建议具有可操作性。\n\n" +
"=== 原始数据 ===\n" + dataContent;
}
/**
* Word
*/
public void generateWordReport(String analysisPrompt, String[] regions) {
// 生成输出文件名(不包含路径)
String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
// 构建区域名称
String regionName = String.join("与", regions);
// 调用DeepSeek进行分析
CallDeepSeek.callDeepSeekStream(analysisPrompt, new CallDeepSeek.SSEListener() {
private StringBuilder fullResponse = new StringBuilder();
@Override
public void onData(String data) {
System.out.print(data);
System.out.flush();
fullResponse.append(data);
}
@Override
public void onComplete(String response) {
System.out.println("\n\n=== Word文档分析完成 ===");
try {
// 使用完整的分析结果
String analysisResult = fullResponse.toString();
// 生成Word文档
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);
}
// 生成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);
}
} catch (Exception e) {
System.err.println("保存文件时出错: " + e.getMessage());
e.printStackTrace();
}
}
@Override
public void onError(String error) {
System.err.println("DeepSeek分析出错: " + error);
}
});
}
}

@ -1,5 +1,6 @@
package com.dsideal.base;
import com.dsideal.base.AI.Controller.YunNanAiController;
import com.dsideal.base.Base.Controller.BaseController;
import com.dsideal.base.Classes.Controller.ClassController;
import com.dsideal.base.DataAuthority.Controller.DataAuthorityController;
@ -100,6 +101,8 @@ public class BaseApplication extends JFinalConfig {
me.add("/res", ResourceController.class);
//云校
me.add("/yx",YunXiaoController.class);
//大数据AI
me.add("/ai", YunNanAiController.class);
}
@Override

@ -1,82 +0,0 @@
package com.dsideal.base.Tools;
import com.dsideal.base.DataEase.Model.DataEaseModel;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import cn.hutool.json.JSONUtil;
import java.util.List;
/**
* -
*/
public class DataCollector {
/**
*
* @param regions
* @return
*/
public static String collectEducationData(String[] regions) {
// 查询教育资源配置发展预测相关表
String sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dataease' AND TABLE_NAME LIKE 'excel_报告-教育资源配置发展预测%';";
List<Record> tableList = Db.find(sql);
StringBuilder dataContent = new StringBuilder();
// 构建数据标题
dataContent.append("教育资源配置发展预测数据对比分析\n\n");
dataContent.append("对比州市:").append(String.join(" vs ", regions)).append("\n\n");
// 遍历所有相关数据表
for (Record record : tableList) {
String tableName = record.getStr("TABLE_NAME");
dataContent.append("数据表:").append(tableName).append("\n");
// 为每个地区收集数据
for (String region : regions) {
sql = "select * from `" + tableName + "` where `行政区划`=?";
List<Record> listContent = Db.use(DataEaseModel.DB_NAME).find(sql, region);
if (!listContent.isEmpty()) {
dataContent.append("\n").append(region).append("数据:\n");
for (Record dataRecord : listContent) {
dataContent.append(JSONUtil.toJsonPrettyStr(dataRecord.getColumns())).append("\n");
}
} else {
dataContent.append("\n").append(region).append(":无相关数据\n");
}
}
dataContent.append("\n----------------------------------------\n\n");
}
return dataContent.toString();
}
/**
*
* @param dataContent
* @param regions
* @return
*/
public static String createAnalysisPrompt(String dataContent, String[] regions) {
String regionNames = String.join("和", regions);
return "你是一位专业的教育数据分析专家,请基于以下数据对" + regionNames + "的教育资源配置情况进行深入对比分析。\n\n" +
"重要要求请生成结构化的纯文本格式报告使用清晰的段落结构不要使用markdown语法。\n\n" +
"请按照以下结构进行分析并生成专业的分析报告:\n\n" +
"1. 执行摘要\n" +
" 简要概述两州教育资源配置的整体情况和主要发现\n\n" +
"2. 数据概览\n" +
" 两州基本教育数据对比和关键指标汇总\n\n" +
"3. 详细对比分析\n" +
" 教育资源配置水平对比、发展趋势分析、优势与不足分析\n\n" +
"4. 问题识别\n" +
" 存在的主要问题和资源配置不均衡情况\n\n" +
"5. 建议与对策\n" +
" 针对性改进建议和资源优化配置方案\n\n" +
"6. 结论\n" +
" 总体评价和未来发展方向\n\n" +
"请确保分析客观、专业,数据引用准确,建议具有可操作性。\n\n" +
"=== 原始数据 ===\n" + dataContent;
}
}
Loading…
Cancel
Save