Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
E
event
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
陈世强
event
Commits
0c06ffd4
提交
0c06ffd4
authored
8月 13, 2025
作者:
925993793@qq.com
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
大模型处理逻辑优化
上级
ef63c0a9
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
85 行增加
和
80 行删除
+85
-80
AnalysisColumnEnum.java
src/main/java/com/zzsn/event/enums/AnalysisColumnEnum.java
+4
-2
AnalysisService.java
src/main/java/com/zzsn/event/service/AnalysisService.java
+6
-7
AnalysisServiceImpl.java
...java/com/zzsn/event/service/impl/AnalysisServiceImpl.java
+61
-54
AnalysisTask.java
src/main/java/com/zzsn/event/task/AnalysisTask.java
+14
-17
没有找到文件。
src/main/java/com/zzsn/event/enums/AnalysisColumnEnum.java
浏览文件 @
0c06ffd4
...
...
@@ -33,9 +33,11 @@ public enum AnalysisColumnEnum {
FOREIGN_SIMILAR_EVENT
(
11
,
"各国类似事件"
,
"array"
,
1
),
DRIVING_FACTORS
(
12
,
"事件核心驱动因素"
,
"
string
"
,
1
),
DRIVING_FACTORS
(
12
,
"事件核心驱动因素"
,
"
object
"
,
1
),
RELATED_INDICATOR
(
13
,
"事件相关指标"
,
"string"
,
1
)
RELATED_INDICATOR
(
13
,
"事件相关指标"
,
"array"
,
1
),
IMPACT_ASSESSMENT_DETAIL
(
14
,
"影响评估详情"
,
"string"
,
1
),
;
//栏目编码
...
...
src/main/java/com/zzsn/event/service/AnalysisService.java
浏览文件 @
0c06ffd4
...
...
@@ -3,12 +3,10 @@ package com.zzsn.event.service;
import
com.alibaba.fastjson2.JSONArray
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.zzsn.event.entity.Event
;
import
com.zzsn.event.entity.EventLlmConfig
;
import
com.zzsn.event.entity.SubjectAnalysis
;
import
com.zzsn.event.vo.CoOccurrenceVO
;
import
com.zzsn.event.vo.CountVO
;
import
com.zzsn.event.vo.EventContextVO
;
import
com.zzsn.event.vo.PropagationPathVo
;
import
com.zzsn.event.vo.*
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
java.util.LinkedHashMap
;
...
...
@@ -85,15 +83,16 @@ public interface AnalysisService {
/**
* 利用大模型生成的结果
*
* @param event
Name 事件名称
* @param event
事件信息
* @param startTime 开始时间
* @param endTime 结束时间
* @param llmConfig 模型配置信息
* @author lkg
* @date 2025/7/17
*/
String
llmResult
(
String
eventName
,
String
content
,
String
startTime
,
String
endTime
,
EventLlmConfig
llmConfig
);
String
llmResult
(
String
eventId
,
String
content
,
String
startTime
,
String
endTime
,
Integer
columnCode
);
String
llmResult
(
EventVO
event
,
String
content
,
String
startTime
,
String
endTime
,
EventLlmConfig
llmConfig
);
String
llmResult
(
String
eventId
,
String
content
,
String
startTime
,
String
endTime
,
Integer
columnCode
);
/**
* 重新生成
...
...
src/main/java/com/zzsn/event/service/impl/AnalysisServiceImpl.java
浏览文件 @
0c06ffd4
...
...
@@ -253,58 +253,61 @@ public class AnalysisServiceImpl implements AnalysisService {
@Override
public
PropagationPathVo
propagationPath
(
String
eventId
)
{
PropagationPathVo
top
=
null
;
Event
event
=
eventService
.
getById
(
eventId
);
String
subjectName
=
event
.
getEventName
();
//获取专题数据
String
startDate
=
null
;
String
endDate
=
null
;
if
(
event
.
getStartTime
()
!=
null
)
{
startDate
=
DateUtil
.
dateToString
(
event
.
getStartTime
(),
"yyyy-MM-dd HH:mm:ss"
);
}
if
(
event
.
getEndTime
()
!=
null
)
{
endDate
=
DateUtil
.
dateToString
(
event
.
getEndTime
(),
"yyyy-MM-dd HH:mm:ss"
);
}
List
<
SubjectDataVo
>
specialDataList
=
esService
.
getDataBySubjectId
(
eventId
,
startDate
,
endDate
,
Constants
.
FETCH_FIELDS_STATISTIC
);
if
(
CollectionUtils
.
isNotEmpty
(
specialDataList
))
{
//用于来源去重
List
<
String
>
allOriginList
=
new
ArrayList
<>();
top
=
new
PropagationPathVo
();
top
.
setName
(
subjectName
);
top
.
setTime
(
DateUtil
.
dateToString
(
event
.
getStartTime
()));
//获取发布时间最早的前10的资讯(来源不重复)
List
<
PropagationPathVo
>
secondList
=
new
ArrayList
<>();
List
<
SubjectDataVo
>
earlyList
=
topN
(
specialDataList
,
Constants
.
FAKE_NUM
);
earlyList
.
forEach
(
e
->
allOriginList
.
add
(
Constants
.
getRealOrigin
(
e
.
getOrigin
())));
for
(
SubjectDataVo
subjectDataVo
:
earlyList
)
{
String
origin
=
subjectDataVo
.
getOrigin
();
String
time
=
subjectDataVo
.
getPublishDate
();
if
(
StringUtils
.
isNotEmpty
(
origin
))
{
PropagationPathVo
second
=
new
PropagationPathVo
();
second
.
setName
(
Constants
.
getRealOrigin
(
origin
));
second
.
setTime
(
time
);
secondList
.
add
(
second
);
List
<
String
>
thirdList
=
esService
.
originList
(
subjectDataVo
.
getTitle
(),
subjectDataVo
.
getPublishDate
());
thirdList
.
removeAll
(
allOriginList
);
List
<
PropagationPathVo
>
lastList
=
new
ArrayList
<>();
if
(
thirdList
.
size
()
>
3
)
{
thirdList
=
thirdList
.
subList
(
0
,
3
);
}
for
(
String
s
:
thirdList
)
{
PropagationPathVo
third
=
new
PropagationPathVo
();
third
.
setName
(
s
);
lastList
.
add
(
third
);
int
count
=
esService
.
count
(
eventId
,
null
,
null
);
if
(
count
>
0
)
{
Event
event
=
eventService
.
getById
(
eventId
);
String
subjectName
=
event
.
getEventName
();
//获取专题数据
String
startDate
=
null
;
String
endDate
=
null
;
if
(
event
.
getStartTime
()
!=
null
)
{
startDate
=
DateUtil
.
dateToString
(
event
.
getStartTime
(),
"yyyy-MM-dd HH:mm:ss"
);
}
if
(
event
.
getEndTime
()
!=
null
)
{
endDate
=
DateUtil
.
dateToString
(
event
.
getEndTime
(),
"yyyy-MM-dd HH:mm:ss"
);
}
List
<
SubjectDataVo
>
specialDataList
=
esService
.
getDataBySubjectId
(
eventId
,
startDate
,
endDate
,
Constants
.
FETCH_FIELDS_STATISTIC
);
if
(
CollectionUtils
.
isNotEmpty
(
specialDataList
))
{
//用于来源去重
List
<
String
>
allOriginList
=
new
ArrayList
<>();
top
=
new
PropagationPathVo
();
top
.
setName
(
subjectName
);
top
.
setTime
(
DateUtil
.
dateToString
(
event
.
getStartTime
()));
//获取发布时间最早的前10的资讯(来源不重复)
List
<
PropagationPathVo
>
secondList
=
new
ArrayList
<>();
List
<
SubjectDataVo
>
earlyList
=
topN
(
specialDataList
,
Constants
.
FAKE_NUM
);
earlyList
.
forEach
(
e
->
allOriginList
.
add
(
Constants
.
getRealOrigin
(
e
.
getOrigin
())));
for
(
SubjectDataVo
subjectDataVo
:
earlyList
)
{
String
origin
=
subjectDataVo
.
getOrigin
();
String
time
=
subjectDataVo
.
getPublishDate
();
if
(
StringUtils
.
isNotEmpty
(
origin
))
{
PropagationPathVo
second
=
new
PropagationPathVo
();
second
.
setName
(
Constants
.
getRealOrigin
(
origin
));
second
.
setTime
(
time
);
secondList
.
add
(
second
);
List
<
String
>
thirdList
=
esService
.
originList
(
subjectDataVo
.
getTitle
(),
subjectDataVo
.
getPublishDate
());
thirdList
.
removeAll
(
allOriginList
);
List
<
PropagationPathVo
>
lastList
=
new
ArrayList
<>();
if
(
thirdList
.
size
()
>
3
)
{
thirdList
=
thirdList
.
subList
(
0
,
3
);
}
for
(
String
s
:
thirdList
)
{
PropagationPathVo
third
=
new
PropagationPathVo
();
third
.
setName
(
s
);
lastList
.
add
(
third
);
}
second
.
setChildren
(
lastList
);
allOriginList
.
addAll
(
thirdList
);
}
second
.
setChildren
(
lastList
);
allOriginList
.
addAll
(
thirdList
);
}
top
.
setChildren
(
secondList
);
}
top
.
setChildren
(
secondList
);
}
return
top
;
}
@Override
public
String
llmResult
(
String
eventName
,
String
content
,
String
startTime
,
String
endTime
,
EventLlmConfig
llmConfig
)
{
public
String
llmResult
(
EventVO
event
,
String
content
,
String
startTime
,
String
endTime
,
EventLlmConfig
llmConfig
)
{
if
(
llmConfig
==
null
)
{
return
null
;
}
...
...
@@ -329,14 +332,14 @@ public class AnalysisServiceImpl implements AnalysisService {
}
}
if
(
llmConfig
.
getColumnCode
().
equals
(
AnalysisColumnEnum
.
IMPACT_ASSESSMENT
.
getCode
()))
{
String
prompt
=
"根据提供的事件名称,以及其%s的概述,详细的描述下该事件的%s"
;
EventLlmConfig
detailConfig
=
eventLlmConfigService
.
getConfig
(
event
.
getId
(),
AnalysisColumnEnum
.
IMPACT_ASSESSMENT_DETAIL
.
getCode
())
;
List
<
JSONObject
>
impactList
=
JSON
.
parseArray
(
result
,
JSONObject
.
class
);
for
(
JSONObject
impact
:
impactList
)
{
String
theme
=
impact
.
getString
(
"theme"
);
JSONObject
params
=
new
JSONObject
();
params
.
put
(
"eventName"
,
eventName
);
params
.
put
(
"eventName"
,
event
.
getEventName
());
params
.
put
(
"eventSummary"
,
event
.
getEventDescribe
());
params
.
put
(
"impactOutline"
,
impact
);
String
impactDetail
=
llmService
.
model
(
llmConfig
.
getLlmName
(),
String
.
format
(
prompt
,
theme
,
theme
),
params
.
toJSONString
());
String
impactDetail
=
llmService
.
model
(
llmConfig
.
getLlmName
(),
detailConfig
.
getLlmPrompt
(
),
params
.
toJSONString
());
impact
.
put
(
"impactDetail"
,
impactDetail
);
}
result
=
JSON
.
toJSONString
(
impactList
);
...
...
@@ -346,9 +349,9 @@ public class AnalysisServiceImpl implements AnalysisService {
@Override
public
String
llmResult
(
String
eventId
,
String
content
,
String
startTime
,
String
endTime
,
Integer
columnCode
)
{
Event
event
=
eventService
.
getById
(
eventId
);
Event
VO
event
=
eventService
.
queryInfo
(
eventId
);
EventLlmConfig
llmConfig
=
eventLlmConfigService
.
getConfig
(
eventId
,
columnCode
);
return
llmResult
(
event
.
getEventName
()
,
content
,
startTime
,
endTime
,
llmConfig
);
return
llmResult
(
event
,
content
,
startTime
,
endTime
,
llmConfig
);
}
@Override
...
...
@@ -359,7 +362,6 @@ public class AnalysisServiceImpl implements AnalysisService {
String
versionId
=
saveVersion
(
eventId
,
today
);
EventVO
event
=
eventService
.
queryInfo
(
eventId
);
String
eventName
=
event
.
getEventName
();
String
content
=
"事件标题;"
+
eventName
+
"\n采集关键词:"
+
event
.
getKeywordsVO
().
getKeyword
();
log
.
info
(
"{}-事件分析重新生成逻辑开始。。。"
,
eventName
);
String
eventDescribe
=
event
.
getEventDescribe
();
//核心摘要
...
...
@@ -368,7 +370,8 @@ public class AnalysisServiceImpl implements AnalysisService {
//历史核心摘要是否为空
boolean
empty
=
StringUtils
.
isEmpty
(
eventDescribe
);
EventLlmConfig
config
=
configList
.
stream
().
filter
(
e
->
e
.
getColumnCode
().
equals
(
AnalysisColumnEnum
.
CORE_SUMMARY
.
getCode
())).
findFirst
().
orElse
(
new
EventLlmConfig
());
eventDescribe
=
this
.
llmResult
(
eventName
,
content
,
null
,
null
,
config
);
String
content
=
"事件标题;"
+
eventName
+
"\n采集关键词:"
+
event
.
getKeywordsVO
().
getKeyword
();
eventDescribe
=
this
.
llmResult
(
event
,
content
,
null
,
null
,
config
);
if
(
empty
)
{
event
.
setEventDescribe
(
eventDescribe
);
LambdaUpdateWrapper
<
Event
>
update
=
Wrappers
.
lambdaUpdate
();
...
...
@@ -404,10 +407,14 @@ public class AnalysisServiceImpl implements AnalysisService {
}
}
//大模型相关逻辑生成的结果(影响评估,举措建议等)
List
<
EventLlmConfig
>
collect
=
configList
.
stream
().
filter
(
e
->
!
e
.
getColumnCode
().
equals
(
AnalysisColumnEnum
.
CORE_SUMMARY
.
getCode
())).
collect
(
Collectors
.
toList
());
List
<
EventLlmConfig
>
collect
=
configList
.
stream
()
.
filter
(
e
->
!
e
.
getColumnCode
().
equals
(
AnalysisColumnEnum
.
CORE_SUMMARY
.
getCode
())
&&
!
e
.
getColumnCode
().
equals
(
AnalysisColumnEnum
.
IMPACT_ASSESSMENT_DETAIL
.
getCode
()))
.
collect
(
Collectors
.
toList
());
String
content
=
"事件标题;"
+
eventName
+
"\n事件摘要:"
+
event
.
getEventDescribe
();
for
(
EventLlmConfig
config
:
collect
)
{
try
{
String
llmResult
=
this
.
llmResult
(
event
Name
,
content
,
null
,
null
,
config
);
String
llmResult
=
this
.
llmResult
(
event
,
content
,
null
,
null
,
config
);
EventAnalysisVersionRecord
record
=
EventAnalysisVersionRecord
.
of
(
versionId
,
Objects
.
requireNonNull
(
AnalysisColumnEnum
.
getByCode
(
config
.
getColumnCode
())),
llmResult
);
eventAnalysisVersionRecordService
.
save
(
record
);
log
.
info
(
"{}-事件分析【{}】重新生成逻辑完成。"
,
eventName
,
config
.
getColumnName
());
...
...
src/main/java/com/zzsn/event/task/AnalysisTask.java
浏览文件 @
0c06ffd4
...
...
@@ -85,27 +85,24 @@ public class AnalysisTask {
for
(
Event
event
:
eventList
)
{
CompletableFuture
.
runAsync
(()
->
{
String
eventId
=
event
.
getId
();
int
count
=
esService
.
count
(
eventId
,
null
,
null
);
if
(
count
>
0
)
{
String
key
=
Constants
.
SUBJECT_ANALYSIS_PRE
+
Constants
.
PROPAGATION_KEY
+
eventId
;
Date
timeDisable
=
event
.
getEndTime
();
//已经结束的事件专题,永久缓存
if
(
timeDisable
!=
null
&&
deadlineDate
.
compareTo
(
timeDisable
)
>
0
)
{
Object
cacheObject
=
redisUtil
.
get
(
key
);
if
(
cacheObject
==
null
)
{
PropagationPathVo
pathVo
=
analysisService
.
propagationPath
(
eventId
);
if
(
ObjectUtils
.
isNotEmpty
(
pathVo
))
{
redisUtil
.
set
(
key
,
pathVo
);
log
.
info
(
"事件-{},传播路径数据【永久】缓存成功!"
,
event
.
getEventName
());
}
}
}
else
{
//已经结束的事件专题,缓存有效期一天
String
key
=
Constants
.
SUBJECT_ANALYSIS_PRE
+
Constants
.
PROPAGATION_KEY
+
eventId
;
Date
timeDisable
=
event
.
getEndTime
();
//已经结束的事件专题,永久缓存
if
(
timeDisable
!=
null
&&
deadlineDate
.
compareTo
(
timeDisable
)
>
0
)
{
Object
cacheObject
=
redisUtil
.
get
(
key
);
if
(
cacheObject
==
null
)
{
PropagationPathVo
pathVo
=
analysisService
.
propagationPath
(
eventId
);
if
(
ObjectUtils
.
isNotEmpty
(
pathVo
))
{
redisUtil
.
set
(
key
,
pathVo
,
3600
*
24
);
log
.
info
(
"事件-{},传播路径数据缓存成功!"
,
event
.
getEventName
());
redisUtil
.
set
(
key
,
pathVo
);
log
.
info
(
"事件-{},传播路径数据
【永久】
缓存成功!"
,
event
.
getEventName
());
}
}
}
else
{
//已经结束的事件专题,缓存有效期一天
PropagationPathVo
pathVo
=
analysisService
.
propagationPath
(
eventId
);
if
(
ObjectUtils
.
isNotEmpty
(
pathVo
))
{
redisUtil
.
set
(
key
,
pathVo
,
3600
*
24
);
log
.
info
(
"事件-{},传播路径数据缓存成功!"
,
event
.
getEventName
());
}
}
});
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论