提交 88773e55 作者: 925993793@qq.com

事件分析优化

上级 f5510d77
...@@ -33,6 +33,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -33,6 +33,7 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
...@@ -267,9 +268,9 @@ public class EventAnalysisController { ...@@ -267,9 +268,9 @@ public class EventAnalysisController {
/** /**
* 热词共现 * 热词共现
* *
* @param eventId 事件id * @param eventId 事件id
* @param startTime 开始时间 * @param startTime 开始时间
* @param endTime 结束时间 * @param endTime 结束时间
* @param versionId 版本id * @param versionId 版本id
* @author lkg * @author lkg
* @date 2025/7/9 * @date 2025/7/9
...@@ -291,7 +292,7 @@ public class EventAnalysisController { ...@@ -291,7 +292,7 @@ public class EventAnalysisController {
} else { } else {
List<CoOccurrenceVO> coOccurrenceVOS = analysisService.coOccurrence(eventId, startTime, endTime); List<CoOccurrenceVO> coOccurrenceVOS = analysisService.coOccurrence(eventId, startTime, endTime);
if (CollectionUtils.isNotEmpty(coOccurrenceVOS)) { if (CollectionUtils.isNotEmpty(coOccurrenceVOS)) {
redisUtil.set(key, coOccurrenceVOS,3600 * 24); redisUtil.set(key, coOccurrenceVOS, 3600 * 24);
} }
return Result.OK(coOccurrenceVOS); return Result.OK(coOccurrenceVOS);
} }
...@@ -458,7 +459,7 @@ public class EventAnalysisController { ...@@ -458,7 +459,7 @@ public class EventAnalysisController {
try { try {
data = JSON.parseArray(versionData, JSONObject.class); data = JSON.parseArray(versionData, JSONObject.class);
} catch (Exception e) { } catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.IMPACT_ASSESSMENT.getName()); log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.IMPACT_ASSESSMENT.getName());
} }
return Result.OK(data); return Result.OK(data);
} }
...@@ -489,7 +490,7 @@ public class EventAnalysisController { ...@@ -489,7 +490,7 @@ public class EventAnalysisController {
try { try {
data = JSON.parseObject(versionData, JSONObject.class); data = JSON.parseObject(versionData, JSONObject.class);
} catch (Exception e) { } catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.DRIVING_FACTORS.getName()); log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.DRIVING_FACTORS.getName());
} }
return Result.OK(data); return Result.OK(data);
} }
...@@ -520,7 +521,7 @@ public class EventAnalysisController { ...@@ -520,7 +521,7 @@ public class EventAnalysisController {
try { try {
data = JSON.parseArray(versionData, JSONObject.class); data = JSON.parseArray(versionData, JSONObject.class);
} catch (Exception e) { } catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.RELATED_INDICATOR.getName()); log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.RELATED_INDICATOR.getName());
} }
return Result.OK(data); return Result.OK(data);
} }
...@@ -551,7 +552,7 @@ public class EventAnalysisController { ...@@ -551,7 +552,7 @@ public class EventAnalysisController {
try { try {
data = JSON.parseArray(versionData, JSONObject.class); data = JSON.parseArray(versionData, JSONObject.class);
} catch (Exception e) { } catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.MEASURE_SUGGEST.getName()); log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.MEASURE_SUGGEST.getName());
} }
return Result.OK(data); return Result.OK(data);
} }
...@@ -582,7 +583,7 @@ public class EventAnalysisController { ...@@ -582,7 +583,7 @@ public class EventAnalysisController {
try { try {
data = JSON.parseArray(versionData, JSONObject.class); data = JSON.parseArray(versionData, JSONObject.class);
} catch (Exception e) { } catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.KNOWLEDGE_ENTRY.getName()); log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.KNOWLEDGE_ENTRY.getName());
} }
return Result.OK(data); return Result.OK(data);
} }
...@@ -613,7 +614,7 @@ public class EventAnalysisController { ...@@ -613,7 +614,7 @@ public class EventAnalysisController {
try { try {
data = JSON.parseArray(versionData, JSONObject.class); data = JSON.parseArray(versionData, JSONObject.class);
} catch (Exception e) { } catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.ENTERPRISE_CASE.getName()); log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.ENTERPRISE_CASE.getName());
} }
return Result.OK(data); return Result.OK(data);
} }
...@@ -654,35 +655,35 @@ public class EventAnalysisController { ...@@ -654,35 +655,35 @@ public class EventAnalysisController {
*/ */
@GetMapping("/similarEvent") @GetMapping("/similarEvent")
public Result<?> similarEvent(@RequestParam String eventId, public Result<?> similarEvent(@RequestParam String eventId,
@RequestParam(required = false) String startTime, @RequestParam(required = false) String startTime,
@RequestParam(required = false) String endTime, @RequestParam(required = false) String endTime,
@RequestParam(required = false) String versionId) { @RequestParam(required = false) String versionId) {
if (StringUtils.isEmpty(versionId)) { if (StringUtils.isEmpty(versionId)) {
EventAnalysisVersion eventAnalysisVersion = eventAnalysisVersionService.latestVersion(eventId); EventAnalysisVersion eventAnalysisVersion = eventAnalysisVersionService.latestVersion(eventId);
if (eventAnalysisVersion != null) { if (eventAnalysisVersion != null) {
versionId = eventAnalysisVersion.getId(); versionId = eventAnalysisVersion.getId();
} }
} }
List<Map<String,Object>> dataList = new ArrayList<>(); List<Map<String, Object>> dataList = new ArrayList<>();
Map<String,Object> domestic = new HashMap<>(); Map<String, Object> domestic = new HashMap<>();
String domesticSimilarEvent = eventAnalysisVersionRecordService.getVersionData(versionId, AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getCode()); String domesticSimilarEvent = eventAnalysisVersionRecordService.getVersionData(versionId, AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getCode());
domestic.put("type",AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getName()); domestic.put("type", AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getName());
List<JSONObject> domesticSimilarEventList = new ArrayList<>(); List<JSONObject> domesticSimilarEventList = new ArrayList<>();
try { try {
domesticSimilarEventList = JSON.parseArray(domesticSimilarEvent, JSONObject.class); domesticSimilarEventList = JSON.parseArray(domesticSimilarEvent, JSONObject.class);
} catch (Exception e) { } catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getName()); log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getName());
} }
domestic.put("data", domesticSimilarEventList); domestic.put("data", domesticSimilarEventList);
dataList.add(domestic); dataList.add(domestic);
Map<String,Object> foreign = new HashMap<>(); Map<String, Object> foreign = new HashMap<>();
String foreignSimilarEvent = eventAnalysisVersionRecordService.getVersionData(versionId, AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getCode()); String foreignSimilarEvent = eventAnalysisVersionRecordService.getVersionData(versionId, AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getCode());
foreign.put("type",AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getName()); foreign.put("type", AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getName());
List<JSONObject> foreignSimilarEventList = new ArrayList<>(); List<JSONObject> foreignSimilarEventList = new ArrayList<>();
try { try {
foreignSimilarEventList = JSON.parseArray(foreignSimilarEvent, JSONObject.class); foreignSimilarEventList = JSON.parseArray(foreignSimilarEvent, JSONObject.class);
} catch (Exception e) { } catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getName()); log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getName());
} }
foreign.put("data", foreignSimilarEventList); foreign.put("data", foreignSimilarEventList);
dataList.add(foreign); dataList.add(foreign);
...@@ -715,7 +716,7 @@ public class EventAnalysisController { ...@@ -715,7 +716,7 @@ public class EventAnalysisController {
try { try {
data = JSON.parseArray(versionData, JSONObject.class); data = JSON.parseArray(versionData, JSONObject.class);
} catch (Exception e) { } catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getName()); log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.DOMESTIC_SIMILAR_EVENT.getName());
} }
return Result.OK(data); return Result.OK(data);
} }
...@@ -746,7 +747,7 @@ public class EventAnalysisController { ...@@ -746,7 +747,7 @@ public class EventAnalysisController {
try { try {
data = JSON.parseArray(versionData, JSONObject.class); data = JSON.parseArray(versionData, JSONObject.class);
} catch (Exception e) { } catch (Exception e) {
log.info("{}-事件分析【{}】返回结果数据解析异常",eventId,AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getName()); log.info("{}-事件分析【{}】返回结果数据解析异常", eventId, AnalysisColumnEnum.FOREIGN_SIMILAR_EVENT.getName());
} }
return Result.OK(data); return Result.OK(data);
} }
...@@ -784,34 +785,49 @@ public class EventAnalysisController { ...@@ -784,34 +785,49 @@ public class EventAnalysisController {
/** /**
* 导出ppt * 导出ppt
* *
* @param params 参数 * @param params 参数
* @author lkg * @author lkg
* @date 2025/8/15 * @date 2025/8/15
*/ */
@PostMapping("/exportPPT") @PostMapping("/exportPPT")
public void exportPPT(@RequestBody JSONObject params, HttpServletResponse response) throws IOException { public Result<?> exportPPT(@RequestBody JSONObject params) {
String versionId = params.getString("versionId"); String versionId = params.getString("versionId");
if (StringUtils.isEmpty(versionId)) { if (StringUtils.isEmpty(versionId)) {
return; return Result.FAIL("请选择要导出的版本");
} }
String pptPath; CompletableFuture.runAsync(() -> {
String eventId = params.getString("eventId");
JSONArray content = params.getJSONArray("content");
analysisService.exportPPT(eventId, versionId, content);
});
return Result.OK("PPT正在生成中。。。");
}
/**
* 下载ppt
*
* @param versionId 版本id
* @param response 响应
* @author lkg
* @date 2025/8/18
*/
@GetMapping("/downloadPPT")
public void downloadPPT(@RequestParam String versionId, HttpServletResponse response) {
EventAnalysisVersion eventAnalysisVersion = eventAnalysisVersionService.getById(versionId); EventAnalysisVersion eventAnalysisVersion = eventAnalysisVersionService.getById(versionId);
if (eventAnalysisVersion != null && StringUtils.isNotEmpty(eventAnalysisVersion.getPptPath())) { if (eventAnalysisVersion != null && StringUtils.isNotEmpty(eventAnalysisVersion.getPptPath())) {
pptPath = eventAnalysisVersion.getPptPath(); commonService.downloadTemplate(response, eventAnalysisVersion.getPptPath());
} else { } else {
String eventId = params.getString("eventId"); String json = JSON.toJSONString(Result.FAIL(201, "PPT还在生成中。。。"));
JSONArray content = params.getJSONArray("content"); response.setCharacterEncoding("UTF-8");
String ppt = analysisService.exportPPT(eventId, versionId,content); response.setContentType("text/html; charset=utf-8");
if (ppt == null) { try (PrintWriter writer = response.getWriter()) {
response.sendError(HttpServletResponse.SC_NOT_FOUND, "PPT文件生成失败"); writer.println(json);
return; } catch (Exception ignored) {
} else {
pptPath = ppt;
} }
} }
commonService.downloadTemplate(response, pptPath);
} }
/** /**
......
...@@ -174,8 +174,19 @@ public class EventHomeController { ...@@ -174,8 +174,19 @@ public class EventHomeController {
*/ */
@GetMapping("/hotWordRecommend") @GetMapping("/hotWordRecommend")
public Result<?> hotWordRecommend(@RequestParam String networkName) { public Result<?> hotWordRecommend(@RequestParam String networkName) {
String prompt = "请根据提供的百度/新浪热榜中的网络事件,再结合网络上资讯,推荐一些简短的关键词。以json格式输出:[\"关键词1\",\"关键词2\"]"; String prompt = "你是一个专业信息采集助手,根据用户专题描述生成关键词表达式:\n" +
String result = llmService.model(null, prompt, networkName); "1. 用 + 表示与关系(必须同现),| 表示或关系(任一出现),用()分组\n" +
"2. 执行三步操作:\n" +
" (1) 提取核心实体(如企业/产品名)\n" +
" (2) 将抽象词拆解为3-5个具体场景词(如\"动向\"→\"上升|下降|波动|结构调整\")\n" +
" (3) 扩展同义词/行业关联词\n" +
"3. 排除时间词,+号不超过2个,单组|内词不超过5个\n" +
"4. 输出仅含表达式\n" +
"\n" +
"示例: \n" +
"描述:苹果新款iPhone发布引发市场反响\n" +
"输出:(苹果|iPhone)+(発売|価格|予約状況|市場シェア|消費者反応)";
String result = llmService.model(null,null, prompt, networkName);
if (result.startsWith("```json")) { if (result.startsWith("```json")) {
result = result.substring(7, result.length() - 3); result = result.substring(7, result.length() - 3);
} else if (result.startsWith("```")) { } else if (result.startsWith("```")) {
......
...@@ -8,21 +8,11 @@ public interface LlmService { ...@@ -8,21 +8,11 @@ public interface LlmService {
/** /**
* glm模型调用 * glm模型调用
* *
* @param model 模型类型 * @param modelType 模型类型
* @param system 提示词
* @param content 引用内容
* @return 大模型响应结果
*/
String model(String model, String system, String content);
/**
* 采集词推荐(定制自定义专题)
*
* @param modelName 模型名称 * @param modelName 模型名称
* @param prompt 提示词 * @param system 提示词
* @param content 输入的内容 * @param content 引用内容
* @author lkg * @return 大模型响应结果
* @date 2025/8/16
*/ */
String crawlerWord(String modelName, String prompt, String content); String model(String modelType, String modelName, String system, String content);
} }
...@@ -45,11 +45,14 @@ public class LlmServiceImpl implements LlmService { ...@@ -45,11 +45,14 @@ public class LlmServiceImpl implements LlmService {
private LlmProperties llmProperties; private LlmProperties llmProperties;
@Override @Override
public String model(String modelType, String system, String content) { public String model(String modelType,String modelName, String system, String content) {
if (StringUtils.isEmpty(modelType)) { if (StringUtils.isEmpty(modelType)) {
modelType = llmProperties.getDefaultModelType(); modelType = llmProperties.getDefaultModelType();
} }
LlmProperties.ModelConfig modelConfig = llmProperties.getModelConfig(modelType); LlmProperties.ModelConfig modelConfig = llmProperties.getModelConfig(modelType);
if (StringUtils.isNotEmpty(modelName)) {
modelConfig.setDefaultModel(modelName);
}
if (modelType.equalsIgnoreCase("zhipu")) { if (modelType.equalsIgnoreCase("zhipu")) {
return glmModel(modelConfig, system, content); return glmModel(modelConfig, system, content);
} else if (modelType.equalsIgnoreCase("qwen")) { } else if (modelType.equalsIgnoreCase("qwen")) {
...@@ -62,15 +65,6 @@ public class LlmServiceImpl implements LlmService { ...@@ -62,15 +65,6 @@ public class LlmServiceImpl implements LlmService {
return null; return null;
} }
@Override
public String crawlerWord(String modelName, String prompt, String content) {
LlmProperties.ModelConfig modelConfig = llmProperties.getModelConfig("qwen");
if (StringUtils.isNotEmpty(modelName)) {
modelConfig.setDefaultModel(modelName);
}
return qwenModel(modelConfig, prompt, content);
}
/** /**
* glm模型调用 * glm模型调用
* *
......
...@@ -311,8 +311,27 @@ public class AnalysisServiceImpl implements AnalysisService { ...@@ -311,8 +311,27 @@ public class AnalysisServiceImpl implements AnalysisService {
if (llmConfig == null) { if (llmConfig == null) {
return null; return null;
} }
String result = llmService.model(llmConfig.getLlmName(), llmConfig.getLlmPrompt(), content); String result = llmService.model(llmConfig.getLlmName(),null, llmConfig.getLlmPrompt(), content);
result = result.replaceAll("```json","").replaceAll("```",""); AnalysisColumnEnum analysisColumnEnum = AnalysisColumnEnum.getByCode(llmConfig.getColumnCode());
String startHeader = null;
if (analysisColumnEnum != null) {
String resType = analysisColumnEnum.getResType();
if (resType.equals("array")) {
startHeader = "[";
} else if (resType.equals("object")) {
startHeader = "{";
}
}
if (startHeader != null && !result.startsWith(startHeader)) {
if (result.startsWith("```json")) {
result = result.substring(7, result.length() - 3);
} else if (result.startsWith("```")) {
result = result.substring(3, result.length() - 3);
} else if (result.contains(startHeader)){
result = result.substring(result.indexOf(startHeader));
}
}
result = result.replaceAll("```json", "").replaceAll("```","");
if (llmConfig.getColumnCode().equals(AnalysisColumnEnum.IMPACT_ASSESSMENT.getCode())) { if (llmConfig.getColumnCode().equals(AnalysisColumnEnum.IMPACT_ASSESSMENT.getCode())) {
EventLlmConfig detailConfig = eventLlmConfigService.getConfig(event.getId(), AnalysisColumnEnum.IMPACT_ASSESSMENT_DETAIL.getCode()); EventLlmConfig detailConfig = eventLlmConfigService.getConfig(event.getId(), AnalysisColumnEnum.IMPACT_ASSESSMENT_DETAIL.getCode());
List<JSONObject> impactList = JSON.parseArray(result, JSONObject.class); List<JSONObject> impactList = JSON.parseArray(result, JSONObject.class);
...@@ -321,7 +340,7 @@ public class AnalysisServiceImpl implements AnalysisService { ...@@ -321,7 +340,7 @@ public class AnalysisServiceImpl implements AnalysisService {
params.put("eventName", event.getEventName()); params.put("eventName", event.getEventName());
params.put("eventSummary", event.getEventDescribe()); params.put("eventSummary", event.getEventDescribe());
params.put("impactOutline", impact); params.put("impactOutline", impact);
String impactDetail = llmService.model(detailConfig.getLlmName(), detailConfig.getLlmPrompt(), params.toJSONString()); String impactDetail = llmService.model(detailConfig.getLlmName(),null, detailConfig.getLlmPrompt(), params.toJSONString());
impact.put("impactDetail", impactDetail); impact.put("impactDetail", impactDetail);
} }
result = JSON.toJSONString(impactList); result = JSON.toJSONString(impactList);
......
...@@ -71,7 +71,7 @@ public class NetWorkEventTask { ...@@ -71,7 +71,7 @@ public class NetWorkEventTask {
public void test(Integer type) { public void test(Integer type) {
List<EventNetwork> networkList = getNetWordEventList(type); List<EventNetwork> networkList = getNetWordEventList(type);
String response = llmService.model(null, PROMPT, JSONObject.toJSONString(networkList)); String response = llmService.model(null,null, PROMPT, JSONObject.toJSONString(networkList));
if (response.contains("```json")) { if (response.contains("```json")) {
response = response.substring(response.indexOf("```json") + 7, response.lastIndexOf("```")); response = response.substring(response.indexOf("```json") + 7, response.lastIndexOf("```"));
} }
...@@ -109,7 +109,7 @@ public class NetWorkEventTask { ...@@ -109,7 +109,7 @@ public class NetWorkEventTask {
} }
if (CollectionUtils.isNotEmpty(finalList)) { if (CollectionUtils.isNotEmpty(finalList)) {
finalList.forEach(network -> network.setLatest(1)); finalList.forEach(network -> network.setLatest(1));
String response = llmService.model(null, PROMPT, JSONObject.toJSONString(finalList)); String response = llmService.model(null,null, PROMPT, JSONObject.toJSONString(finalList));
if (StringUtils.isNotEmpty(response)) { if (StringUtils.isNotEmpty(response)) {
try { try {
if (response.contains("```json")) { if (response.contains("```json")) {
......
...@@ -183,3 +183,28 @@ caiji: ...@@ -183,3 +183,28 @@ caiji:
data-permit: data-permit:
dataPermitGetQueryEntityTest: http://1.95.77.159:10089/permission/ dataPermitGetQueryEntityTest: http://1.95.77.159:10089/permission/
dataPermitGetQueryEntityProd: http://1.95.14.24:8060/ dataPermitGetQueryEntityProd: http://1.95.14.24:8060/
model:
default-modelType: zhipu
configs:
- modelType: zhipu
modelTypeName: 智谱
url: https://open.bigmodel.cn/api/paas/v4/chat/completions
api-key: c5a53bd5f95a4e37a8997deb5d0c6031.orXyRRPNvZiqRaxF
default-model: glm-4-flash #免费
web-search: true
- modelType: qwen
modelTypeName: 千问
url: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
api-key: sk-01ee9a6efa394178993a950b768e3753
default-model: qwen-plus #收费
- modelType: deepseek
modelTypeName: deepseek
url: https://api.deepseek.com/v1/chat/completions
api-key: sk-656a8ec451dc47aaad3dacf24fe36f20
default-model: deepseek-chat #收费
- modelType: doubao
modelTypeName: 豆包
url: https://ark.cn-beijing.volces.com/api/v3/chat/completions
api-key: ab54c534-4f3c-41b9-9b27-132cb7954b6f
default-model: doubao-1-5-pro-32k-250115 # Doubao-1.5-pro-32k #收费
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论