|
|
|
@ -27,11 +27,68 @@ public class YunNanAiController extends Controller {
|
|
|
|
|
* http://10.10.21.20:9200/dsBase/ai/compareShiZhou?shiZhouA=文山州&shiZhouB=楚雄州
|
|
|
|
|
*/
|
|
|
|
|
@Before({GET.class})
|
|
|
|
|
public void compareShiZhou(String shiZhouA, String shiZhouB) throws InterruptedException {
|
|
|
|
|
public void compareShiZhou(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");
|
|
|
|
|
|
|
|
|
|
// 调用DeepSeek API进行流式分析
|
|
|
|
|
CallDeepSeek.callDeepSeekStream(content, new CallDeepSeek.SSEListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onData(String data) {
|
|
|
|
|
// 将DeepSeek返回的数据实时推送给前端
|
|
|
|
|
sseEmitter.sendMessage("data: " + data + "\n\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onComplete(String fullResponse) {
|
|
|
|
|
try {
|
|
|
|
|
// AI分析完成,开始生成Word文档
|
|
|
|
|
sseEmitter.sendMessage("data: AI深度分析完成,正在生成报告文档...\n\n");
|
|
|
|
|
|
|
|
|
|
String filePath = PathKit.getWebRootPath() + "/upload/" + shiZhouA + "与" + shiZhouB + "_教育分析报告_" +
|
|
|
|
|
new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) + ".docx";
|
|
|
|
|
WordGenerator.generateWordDocument(fullResponse, filePath, new String[]{shiZhouA, shiZhouB});
|
|
|
|
|
|
|
|
|
|
sseEmitter.sendMessage("data: 报告生成完成!文件路径:" + filePath + "\n\n");
|
|
|
|
|
sseEmitter.sendMessage("data: [DONE]\n\n");
|
|
|
|
|
|
|
|
|
|
// 完成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();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//锁住等待子线程推送完成
|
|
|
|
|
sseEmitter.waiting(100);
|
|
|
|
|
renderNull();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 主线程里
|
|
|
|
|
* 测试本地发送文本打字机
|
|
|
|
|
*/
|
|
|
|
|
public void sse1() throws InterruptedException {
|
|
|
|
|
String msg = "111 222 333 444 555 666 777";
|
|
|
|
|
//创建sse
|
|
|
|
|
SseEmitter sseEmitter = new SseEmitter(getResponse());
|
|
|
|
|
//主线程里拿到数据推送消息
|
|
|
|
|
String msg = "111 222 333 444 555 666 777";
|
|
|
|
|
String[] datas = msg.split("");
|
|
|
|
|
for (String data : datas) {
|
|
|
|
|
//推送
|
|
|
|
@ -54,8 +111,7 @@ public class YunNanAiController extends Controller {
|
|
|
|
|
final SseEmitter sseEmitter = new SseEmitter(getResponse());
|
|
|
|
|
String msg = "111 222 333 444 555 666 777";
|
|
|
|
|
//模拟chatgptapi 异步调用返回
|
|
|
|
|
new Thread(new Runnable() {
|
|
|
|
|
public void run() {
|
|
|
|
|
new Thread(() -> {
|
|
|
|
|
String[] datas = msg.split("");
|
|
|
|
|
for (String data : datas) {
|
|
|
|
|
//推送 异步子线程里推送数据给客户端
|
|
|
|
@ -68,7 +124,6 @@ public class YunNanAiController extends Controller {
|
|
|
|
|
}
|
|
|
|
|
//完成sse 告知主线程已经完成
|
|
|
|
|
sseEmitter.complete();
|
|
|
|
|
}
|
|
|
|
|
}).start();
|
|
|
|
|
//锁住等待子线程推送完成
|
|
|
|
|
sseEmitter.waiting(100);
|
|
|
|
|