You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
3.3 KiB

1 month ago
package com.dsideal.base.AI.Controller;
1 month ago
import com.dsideal.base.AI.Generator.WordGenerator;
1 month ago
import com.dsideal.base.AI.Model.YunNanModel;
1 month ago
import com.dsideal.base.Util.CallDeepSeek;
1 month ago
import com.dsideal.base.Util.CommonUtil;
1 month ago
import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import com.jfinal.ext.interceptor.GET;
1 month ago
import com.jfinal.kit.PathKit;
1 month ago
import com.jfinal.kit.SseEmitter;
1 month ago
1 month ago
import java.text.SimpleDateFormat;
import java.util.Date;
1 month ago
public class AiController extends Controller {
1 month ago
YunNanModel ym = new YunNanModel();
/**
1 month ago
* Word
1 month ago
*
* @param shiZhouA A
* @param shiZhouB B
1 month ago
* http://10.10.21.20:9200/dsBase/ai/compareShiZhouWord?shiZhouA=文山州&shiZhouB=楚雄州
1 month ago
*/
@Before({GET.class})
1 month ago
public void compareShiZhouWord(String shiZhouA, String shiZhouB) throws Exception {
1 month ago
// 数据获取
1 month ago
String content = ym.collectEducationData(new String[]{shiZhouA, shiZhouB});
//创建sse
final SseEmitter sseEmitter = new SseEmitter(getResponse());
// 发送开始分析的消息
sseEmitter.sendMessage("data: 开始数据分析...\n\n");
1 month ago
1 month ago
// 调用DeepSeek API进行流式分析
CallDeepSeek.callDeepSeekStream(content, new CallDeepSeek.SSEListener() {
@Override
public void onData(String data) {
1 month ago
sseEmitter.sendMessage("data: " + data + "\n\n"); // 将DeepSeek返回的数据实时推送给前端
1 month ago
}
@Override
public void onComplete(String fullResponse) {
try {
// AI分析完成开始生成Word文档
sseEmitter.sendMessage("data: AI深度分析完成正在生成报告文档...\n\n");
1 month ago
String fileName = "/upload/" + shiZhouA + "与" + shiZhouB + "_教育分析报告_" +
new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) + ".docx";
String filePath = PathKit.getWebRootPath() + fileName;
1 month ago
WordGenerator.generateWordDocument(fullResponse, filePath, new String[]{shiZhouA, shiZhouB});
1 month ago
String baseUrl = CommonUtil.getBaseUrl(getRequest());
sseEmitter.sendMessage("data: 报告生成完成文件Http 相对路径:" + baseUrl + "/dsBase" + fileName + "\n\n");
1 month ago
sseEmitter.sendMessage("data: [DONE]\n\n");
1 month ago
1 month ago
// 完成SSE连接
sseEmitter.complete();
} catch (Exception e) {
sseEmitter.sendMessage("data: 生成报告时发生错误:" + 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();
}
});
1 month ago
1 month ago
//锁住等待子线程推送完成
sseEmitter.waiting(100);
renderNull();
}
1 month ago
}