Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
brandkbs2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
shenjunjie
brandkbs2
Commits
f4a353db
Commit
f4a353db
authored
Jan 31, 2024
by
陈健智
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
舆情分析走势图调整
parent
a03528a4
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
71 additions
and
12 deletions
+71
-12
src/main/java/com/zhiwei/brandkbs2/service/impl/MarkDataServiceImpl.java
+71
-12
No files found.
src/main/java/com/zhiwei/brandkbs2/service/impl/MarkDataServiceImpl.java
View file @
f4a353db
...
@@ -910,9 +910,6 @@ public class MarkDataServiceImpl implements MarkDataService {
...
@@ -910,9 +910,6 @@ public class MarkDataServiceImpl implements MarkDataService {
}
}
private
BaseMap
getFirstArticle
(
Long
startTime
,
Long
endTime
,
String
aggTitle
,
String
projectId
,
String
contendId
,
String
planId
,
boolean
include
)
throws
IOException
{
private
BaseMap
getFirstArticle
(
Long
startTime
,
Long
endTime
,
String
aggTitle
,
String
projectId
,
String
contendId
,
String
planId
,
boolean
include
)
throws
IOException
{
if
(
StringUtils
.
isBlank
(
aggTitle
)){
return
null
;
}
// 索引
// 索引
String
[]
indexes
=
esClientDao
.
getIndexes
();
String
[]
indexes
=
esClientDao
.
getIndexes
();
// postFilter
// postFilter
...
@@ -2522,21 +2519,35 @@ public class MarkDataServiceImpl implements MarkDataService {
...
@@ -2522,21 +2519,35 @@ public class MarkDataServiceImpl implements MarkDataService {
// 负面趋势图
// 负面趋势图
Pair
<
String
,
List
<
LineVO
>>
negativeSpreadTendency
=
getSpreadTendency
(
startTime
,
endTime
,
planId
,
EmotionEnum
.
NEGATIVE
.
getName
());
Pair
<
String
,
List
<
LineVO
>>
negativeSpreadTendency
=
getSpreadTendency
(
startTime
,
endTime
,
planId
,
EmotionEnum
.
NEGATIVE
.
getName
());
Map
<
String
,
BaseMap
>
baseMaps
=
new
HashMap
<>(
2
);
Map
<
String
,
BaseMap
>
baseMaps
=
new
HashMap
<>(
2
);
BaseMap
totalBaseMaps
=
null
;
BaseMap
negativeBaseMaps
=
null
;
if
(
Objects
.
nonNull
(
negativeSpreadTendency
.
getLeft
())
&&
Objects
.
nonNull
(
spreadTendency
.
getLeft
()))
{
CompletableFuture
.
allOf
(
Stream
.
of
(
spreadTendency
.
getLeft
(),
negativeSpreadTendency
.
getLeft
()).
map
(
aggTitle
->
CompletableFuture
.
runAsync
(()
->
{
CompletableFuture
.
allOf
(
Stream
.
of
(
spreadTendency
.
getLeft
(),
negativeSpreadTendency
.
getLeft
()).
map
(
aggTitle
->
CompletableFuture
.
runAsync
(()
->
{
try
{
try
{
baseMaps
.
put
(
aggTitle
,
getFirstArticle
(
startTime
,
endTime
,
aggTitle
,
projectId
,
Constant
.
PRIMARY_CONTEND_ID
,
planId
,
true
));
baseMaps
.
put
(
aggTitle
,
getFirstArticle
(
startTime
,
endTime
,
aggTitle
,
projectId
,
Constant
.
PRIMARY_CONTEND_ID
,
planId
,
true
));
}
catch
(
IOException
ignored
)
{
}
catch
(
IOException
ignored
)
{
}
}
},
executor
)).
toArray
(
CompletableFuture
[]::
new
)).
join
();
},
executor
)).
toArray
(
CompletableFuture
[]::
new
)).
join
();
}
// 趋势图标题为空,此时说明最高点的时间段发文平台全为微博,此时取最高点时间段内时间最早的微博发文
if
(
Objects
.
isNull
(
spreadTendency
.
getLeft
())
||
Objects
.
isNull
(
negativeSpreadTendency
.
getLeft
())){
totalBaseMaps
=
getWeiboFirstArticle
(
endTime
,
spreadTendency
.
getRight
(),
planId
,
projectId
,
null
);
negativeBaseMaps
=
getWeiboFirstArticle
(
endTime
,
spreadTendency
.
getRight
(),
planId
,
projectId
,
EmotionEnum
.
NEGATIVE
.
getName
());
}
// 最高点
// 最高点
BaseMap
baseMap
=
baseMaps
.
get
(
spreadTendency
.
getLeft
());
BaseMap
baseMap
=
Objects
.
isNull
(
baseMaps
.
get
(
spreadTendency
.
getLeft
()))
?
totalBaseMaps
:
baseMaps
.
get
(
spreadTendency
.
getLeft
());
JSONObject
highestJson
=
new
JSONObject
();
JSONObject
highestJson
=
new
JSONObject
();
highestJson
.
put
(
"title"
,
Objects
.
isNull
(
baseMap
)
?
null
:
baseMap
.
getTitle
());
if
(
Objects
.
nonNull
(
baseMap
))
{
highestJson
.
put
(
"url"
,
Objects
.
isNull
(
baseMap
)
?
null
:
baseMap
.
getUrl
());
highestJson
.
put
(
"title"
,
baseMap
.
getTitle
());
BaseMap
negativeBaseMap
=
baseMaps
.
get
(
negativeSpreadTendency
.
getLeft
());
highestJson
.
put
(
"url"
,
baseMap
.
getUrl
());
}
// 负面最高点
BaseMap
negativeBaseMap
=
Objects
.
isNull
(
baseMaps
.
get
(
negativeSpreadTendency
.
getLeft
()))
?
negativeBaseMaps
:
baseMaps
.
get
(
negativeSpreadTendency
.
getLeft
());
JSONObject
negativeHighestJson
=
new
JSONObject
();
JSONObject
negativeHighestJson
=
new
JSONObject
();
negativeHighestJson
.
put
(
"title"
,
Objects
.
isNull
(
negativeBaseMap
)
?
null
:
negativeBaseMap
.
getTitle
());
if
(
Objects
.
nonNull
(
negativeBaseMap
))
{
negativeHighestJson
.
put
(
"url"
,
Objects
.
isNull
(
negativeBaseMap
)
?
null
:
negativeBaseMap
.
getUrl
());
negativeHighestJson
.
put
(
"title"
,
negativeBaseMap
.
getTitle
());
negativeHighestJson
.
put
(
"url"
,
negativeBaseMap
.
getUrl
());
}
res
.
putAll
(
platformSpreadTendency
);
res
.
putAll
(
platformSpreadTendency
);
res
.
put
(
"总量"
,
spreadTendency
.
getRight
());
res
.
put
(
"总量"
,
spreadTendency
.
getRight
());
res
.
put
(
"负面"
,
negativeSpreadTendency
.
getRight
());
res
.
put
(
"负面"
,
negativeSpreadTendency
.
getRight
());
...
@@ -2548,6 +2559,54 @@ public class MarkDataServiceImpl implements MarkDataService {
...
@@ -2548,6 +2559,54 @@ public class MarkDataServiceImpl implements MarkDataService {
return
res
;
return
res
;
}
}
/**
* 获取时间段内的微博最早文章
*
* @param lines
* @param planId
* @param projectId
* @param emotion
* @return
* @throws IOException
*/
private
BaseMap
getWeiboFirstArticle
(
Long
endTime
,
List
<
LineVO
>
lines
,
String
planId
,
String
projectId
,
String
emotion
)
throws
IOException
{
if
(
CollectionUtils
.
isEmpty
(
lines
)){
return
null
;
}
// 最高点的时间为开始时间
LineVO
startLine
=
lines
.
stream
().
max
(
Comparator
.
comparingLong
(
LineVO:
:
getCount
)).
get
();
Long
startTime
=
startLine
.
getDate
();
int
startIndex
=
lines
.
indexOf
(
startLine
);
// 最高点后一个点的时间为结束时间
endTime
=
startIndex
==
lines
.
size
()
-
1
?
endTime
:
lines
.
get
(
startIndex
+
1
).
getDate
();
// 索引
String
[]
indexes
=
esClientDao
.
getIndexes
();
// postFilter
BoolQueryBuilder
postFilter
;
if
(
Objects
.
isNull
(
planId
))
{
postFilter
=
projectContendIdQuery
(
projectId
,
Constant
.
PRIMARY_CONTEND_ID
);
}
else
{
postFilter
=
EsQueryTools
.
assembleCacheMapsPlanQuery
(
projectId
,
planId
);
}
// emotion
if
(
StringUtils
.
isNotEmpty
(
emotion
)
&&
!
EmotionEnum
.
ALL
.
getName
().
equals
(
emotion
))
{
postFilter
.
must
(
QueryBuilders
.
termQuery
(
"brandkbs_mark_cache_maps.name.keyword"
,
emotion
));
}
// weibo平台
postFilter
.
must
(
QueryBuilders
.
termQuery
(
"platform_id"
,
"5d02236e6395002a7c380b79"
));
postFilter
.
must
(
QueryBuilders
.
rangeQuery
(
"time"
).
gte
(
startTime
).
lt
(
endTime
));
//sort
FieldSortBuilder
sort
=
new
FieldSortBuilder
(
"time"
).
order
(
SortOrder
.
ASC
);
//hits
SearchHits
hits
=
esClientDao
.
searchHits
(
indexes
,
postFilter
,
null
,
null
,
sort
,
0
,
1
,
null
);
if
(
0
==
hits
.
getTotalHits
().
value
)
{
return
new
BaseMap
();
}
BaseMap
baseMap
=
Tools
.
getBaseFromEsMap
(
hits
.
getAt
(
0
).
getSourceAsMap
());
baseMap
.
setTitle
(
baseMap
.
getContent
());
return
baseMap
;
}
@Override
@Override
public
List
<
JSONObject
>
getActiveChannels
(
Long
startTime
,
Long
endTime
,
String
planId
)
{
public
List
<
JSONObject
>
getActiveChannels
(
Long
startTime
,
Long
endTime
,
String
planId
)
{
List
<
JSONObject
>
list
=
new
ArrayList
<>();
List
<
JSONObject
>
list
=
new
ArrayList
<>();
...
@@ -2789,14 +2848,14 @@ public class MarkDataServiceImpl implements MarkDataService {
...
@@ -2789,14 +2848,14 @@ public class MarkDataServiceImpl implements MarkDataService {
res
.
add
(
new
LineVO
(
count
,
time
));
res
.
add
(
new
LineVO
(
count
,
time
));
});
});
// 走势图最高点的聚合标题
// 走势图最高点的聚合标题
String
maxAggTitle
=
""
;
String
maxAggTitle
=
null
;
Optional
<?
extends
Histogram
.
Bucket
>
maxBucket
=
buckets
.
stream
().
max
(
Comparator
.
comparingLong
(
MultiBucketsAggregation
.
Bucket
::
getDocCount
));
Optional
<?
extends
Histogram
.
Bucket
>
maxBucket
=
buckets
.
stream
().
max
(
Comparator
.
comparingLong
(
MultiBucketsAggregation
.
Bucket
::
getDocCount
));
if
(
maxBucket
.
isPresent
()){
if
(
maxBucket
.
isPresent
()){
Map
<
String
,
Aggregation
>
map
=
maxBucket
.
get
().
getAggregations
().
asMap
();
Map
<
String
,
Aggregation
>
map
=
maxBucket
.
get
().
getAggregations
().
asMap
();
ParsedStringTerms
countTeam
=
(
ParsedStringTerms
)
map
.
get
(
"titleAgg"
);
ParsedStringTerms
countTeam
=
(
ParsedStringTerms
)
map
.
get
(
"titleAgg"
);
List
<?
extends
Terms
.
Bucket
>
titleBuckets
=
countTeam
.
getBuckets
();
List
<?
extends
Terms
.
Bucket
>
titleBuckets
=
countTeam
.
getBuckets
();
// 没有拿到聚合标题,说明此时发文的平台
全
为微博
// 没有拿到聚合标题,说明此时发文的平台为微博
maxAggTitle
=
CollectionUtils
.
isEmpty
(
titleBuckets
)
?
""
:
titleBuckets
.
get
(
0
).
getKeyAsString
();
maxAggTitle
=
CollectionUtils
.
isEmpty
(
titleBuckets
)
?
null
:
titleBuckets
.
get
(
0
).
getKeyAsString
();
}
}
return
Pair
.
of
(
maxAggTitle
,
res
);
return
Pair
.
of
(
maxAggTitle
,
res
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment