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
28ae2919
Commit
28ae2919
authored
Feb 06, 2023
by
shenjunjie
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'release' into 'master'
Release See merge request
!188
parents
50cfa6ce
9ac58d98
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
155 additions
and
57 deletions
+155
-57
pom.xml
+1
-1
src/main/java/com/zhiwei/brandkbs2/controller/app/AppEventController.java
+4
-2
src/main/java/com/zhiwei/brandkbs2/controller/app/AppSearchController.java
+19
-1
src/main/java/com/zhiwei/brandkbs2/dao/impl/EventDaoImpl.java
+10
-0
src/main/java/com/zhiwei/brandkbs2/dao/impl/EventDataDaoImpl.java
+5
-0
src/main/java/com/zhiwei/brandkbs2/enmus/RoleEnum.java
+6
-1
src/main/java/com/zhiwei/brandkbs2/interceptor/MainAuthInterceptor.java
+2
-1
src/main/java/com/zhiwei/brandkbs2/pojo/dto/ExportAppChannelEventDTO.java
+10
-4
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsHotEventWarn.java
+8
-5
src/main/java/com/zhiwei/brandkbs2/service/impl/ChannelServiceImpl.java
+0
-0
src/main/java/com/zhiwei/brandkbs2/service/impl/CommonServiceImpl.java
+1
-1
src/main/java/com/zhiwei/brandkbs2/service/impl/IndexServiceImpl.java
+22
-14
src/main/java/com/zhiwei/brandkbs2/service/impl/ProjectWarnServiceImpl.java
+32
-16
src/main/java/com/zhiwei/brandkbs2/service/impl/ReportServiceImpl.java
+35
-11
No files found.
pom.xml
View file @
28ae2919
...
...
@@ -35,7 +35,7 @@
<dubbo.version>
2.7.4.1
</dubbo.version>
<curator.version>
2.12.0
</curator.version>
<push.log.version>
2.17.0-SNAPSHOT
</push.log.version>
<event-client.version>
1.0.
2
-SNAPSHOT
</event-client.version>
<event-client.version>
1.0.
4
-SNAPSHOT
</event-client.version>
</properties>
<dependencies>
...
...
src/main/java/com/zhiwei/brandkbs2/controller/app/AppEventController.java
View file @
28ae2919
...
...
@@ -21,8 +21,6 @@ import org.springframework.http.ResponseEntity;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.client.RestTemplate
;
import
java.util.List
;
/**
* @Description: 前台事件库
* @Author: shentao
...
...
@@ -74,18 +72,21 @@ public class AppEventController extends BaseController {
@ApiOperation
(
"前台事件库-事件详情-基础信息"
)
@GetMapping
(
"/info/base/{id}"
)
@Auth
(
role
=
RoleEnum
.
NO_AUTHORISE
)
public
ResponseResult
getEventBaseInfo
(
@PathVariable
String
id
)
{
return
ResponseResult
.
success
(
eventService
.
getEventBaseInfo
(
id
));
}
@ApiOperation
(
"前台事件库-事件详情-传播趋势图"
)
@GetMapping
(
"/info/dissemination-trends/{id}"
)
@Auth
(
role
=
RoleEnum
.
NO_AUTHORISE
)
public
ResponseResult
getEventDisseminationTrends
(
@PathVariable
String
id
,
@RequestParam
(
value
=
"type"
,
defaultValue
=
"小时"
)
String
type
)
{
return
ResponseResult
.
success
(
eventService
.
getEventDisseminationTrends
(
id
,
type
));
}
@ApiOperation
(
"前台事件库-事件详情-渠道发声"
)
@GetMapping
(
"/info/channel-voices/{id}"
)
@Auth
(
role
=
RoleEnum
.
NO_AUTHORISE
)
public
ResponseResult
getEventChannelVoices
(
@PathVariable
String
id
,
@RequestParam
(
value
=
"type"
,
defaultValue
=
"重要渠道"
)
String
type
,
@RequestParam
(
value
=
"page"
,
defaultValue
=
"1"
)
int
page
,
...
...
@@ -96,6 +97,7 @@ public class AppEventController extends BaseController {
@ApiOperation
(
"前台事件库-事件详情-热门文章分析"
)
@GetMapping
(
"/info/top-articles-analysis/{id}"
)
@Auth
(
role
=
RoleEnum
.
NO_AUTHORISE
)
public
ResponseResult
getEventTopArticlesAnalysis
(
@PathVariable
String
id
,
@RequestParam
(
value
=
"type"
,
defaultValue
=
"按时间"
)
String
type
,
@RequestParam
(
value
=
"emotion"
,
defaultValue
=
"全部"
)
String
emotion
,
...
...
src/main/java/com/zhiwei/brandkbs2/controller/app/AppSearchController.java
View file @
28ae2919
...
...
@@ -10,8 +10,10 @@ import com.zhiwei.brandkbs2.easyexcel.EasyExcelUtil;
import
com.zhiwei.brandkbs2.enmus.RoleEnum
;
import
com.zhiwei.brandkbs2.model.ResponseResult
;
import
com.zhiwei.brandkbs2.pojo.dto.*
;
import
com.zhiwei.brandkbs2.pojo.vo.ChannelListVO
;
import
com.zhiwei.brandkbs2.service.*
;
import
com.zhiwei.brandkbs2.util.Tools
;
import
com.zhiwei.middleware.event.pojo.dto.BrandkbsEventSearchDTO
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.apache.commons.lang3.time.DateUtils
;
...
...
@@ -168,7 +170,11 @@ public class AppSearchController extends BaseController {
@GetMapping
(
"channel/list/active"
)
public
ResponseResult
getActiveChannelList
(
@RequestParam
(
value
=
"size"
,
defaultValue
=
"2"
)
int
size
)
{
Long
[]
timeRangeDay
=
commonService
.
getTimeRangeDay
();
return
ResponseResult
.
success
(
channelService
.
getActiveChannelList
(
"0"
,
null
,
null
,
timeRangeDay
[
0
],
timeRangeDay
[
1
],
size
,
true
));
List
<
ChannelListVO
>
activeChannelList
=
channelService
.
getActiveChannelList
(
"0"
,
null
,
null
,
timeRangeDay
[
0
],
timeRangeDay
[
1
],
size
,
true
);
if
(
activeChannelList
.
size
()
>
2
)
{
activeChannelList
=
activeChannelList
.
subList
(
0
,
2
);
}
return
ResponseResult
.
success
(
activeChannelList
);
}
@ApiOperation
(
"搜索-渠道搜索条件"
)
...
...
@@ -203,6 +209,18 @@ public class AppSearchController extends BaseController {
return
ResponseResult
.
success
(
eventService
.
getEventList
(
eventSearchDTO
));
}
@ApiOperation
(
"搜索-前台事件库-搜索条件-新"
)
@GetMapping
(
"/event/criteria/{brandId}"
)
public
ResponseResult
getEventSearchCriteriaMiddleware
(
@PathVariable
String
brandId
){
return
ResponseResult
.
success
(
eventService
.
getEventListCriteria
(
brandId
));
}
@ApiOperation
(
"搜索-前台事件库-品牌事件库-新"
)
@PostMapping
(
"/event/newList"
)
public
ResponseResult
getEventListMiddleware
(
@RequestBody
BrandkbsEventSearchDTO
dto
){
return
ResponseResult
.
success
(
eventService
.
getEventListMiddleware
(
dto
));
}
@ApiOperation
(
"搜索-查竞品"
)
@PostMapping
(
"/contend/list"
)
public
ResponseResult
getContendSearchList
(
@RequestBody
MarkSearchDTO
markSearchDTO
)
{
...
...
src/main/java/com/zhiwei/brandkbs2/dao/impl/EventDaoImpl.java
View file @
28ae2919
...
...
@@ -54,6 +54,7 @@ public class EventDaoImpl extends BaseMongoDaoImpl<Event> implements EventDao {
}
@Override
@Deprecated
public
List
<
String
>
getEvents
(
ChannelIndex
channelIndex
)
{
// 添加渠道唯一标识
Criteria
criteria
=
addChannelIndex
(
channelIndex
);
...
...
@@ -68,18 +69,21 @@ public class EventDaoImpl extends BaseMongoDaoImpl<Event> implements EventDao {
}
@Override
@Deprecated
public
Map
<
Long
,
List
<
Event
>>
getEventDay
(
ChannelIndex
channelIndex
,
Long
startTime
,
Long
endTime
)
{
// return getEventTimePattern(channelIndex, startTime, endTime, 8 + 2);
return
getEventTimePatternNew
(
channelIndex
,
startTime
,
endTime
,
false
);
}
@Override
@Deprecated
public
Map
<
Long
,
List
<
Event
>>
getEventMonth
(
ChannelIndex
channelIndex
,
Long
startTime
,
Long
endTime
)
{
// return getEventTimePattern(channelIndex, startTime, endTime, 6 + 1);
return
getEventTimePatternNew
(
channelIndex
,
startTime
,
endTime
,
true
);
}
@Override
@Deprecated
public
long
getEventCount
(
ChannelIndex
channelIndex
,
List
<
String
>
eventEmotions
,
String
emotion
)
{
long
res
=
0
;
Criteria
criteria
=
Criteria
.
where
(
"channelFid"
).
is
(
channelIndex
.
getFid
());
...
...
@@ -98,11 +102,13 @@ public class EventDaoImpl extends BaseMongoDaoImpl<Event> implements EventDao {
}
@Override
@Deprecated
public
long
getEventCountByProjectIdAndContendId
(
Long
startTime
,
Long
endTime
,
String
emotion
,
String
projectId
,
String
contendId
)
{
return
mongoTemplate
.
count
(
Query
.
query
(
eventCountCriteria
(
startTime
,
endTime
,
emotion
,
projectId
,
contendId
)),
COLLECTION_NAME
);
}
@Override
@Deprecated
public
List
<
Event
>
getEventsByProjectIdAndContendId
(
Long
startTime
,
Long
endTime
,
String
emotion
,
String
projectId
,
String
contendId
,
int
limit
)
{
Query
query
=
new
Query
();
Criteria
criteria
=
eventCountCriteria
(
startTime
,
endTime
,
emotion
,
projectId
,
contendId
);
...
...
@@ -114,6 +120,7 @@ public class EventDaoImpl extends BaseMongoDaoImpl<Event> implements EventDao {
}
@Override
@Deprecated
public
List
<
Event
>
getEventsByProjectIdAndContendId
(
Long
startTime
,
Long
endTime
,
List
<
String
>
emotions
,
String
projectId
,
String
contendId
,
int
limit
)
{
Query
query
=
new
Query
();
Criteria
criteria
=
eventCountCriteria
(
startTime
,
endTime
,
emotions
,
projectId
,
contendId
);
...
...
@@ -125,6 +132,7 @@ public class EventDaoImpl extends BaseMongoDaoImpl<Event> implements EventDao {
}
@Override
@Deprecated
public
List
<
Event
>
getEventsByTotalChannelVolumeTop
(
Long
startTime
,
Long
endTime
,
String
emotion
,
String
projectId
,
String
contendId
,
int
limit
)
{
Query
query
=
new
Query
();
Criteria
criteria
=
eventCountCriteria
(
startTime
,
endTime
,
emotion
,
projectId
,
contendId
);
...
...
@@ -135,6 +143,7 @@ public class EventDaoImpl extends BaseMongoDaoImpl<Event> implements EventDao {
return
mongoTemplate
.
find
(
query
,
clazz
,
COLLECTION_NAME
);
}
@Deprecated
private
Criteria
eventCountCriteria
(
Long
startTime
,
Long
endTime
,
String
emotion
,
String
projectId
,
String
contendId
)
{
Criteria
criteria
=
Criteria
.
where
(
"projectId"
).
is
(
projectId
);
criteria
.
and
(
"contendId"
).
is
(
contendId
);
...
...
@@ -257,6 +266,7 @@ public class EventDaoImpl extends BaseMongoDaoImpl<Event> implements EventDao {
return
res
;
}
@Deprecated
private
Map
<
Long
,
List
<
Event
>>
getEventTimePatternNew
(
ChannelIndex
channelIndex
,
Long
startTime
,
Long
endTime
,
boolean
month
)
{
Map
<
Long
,
List
<
Event
>>
res
=
new
HashMap
<>();
String
pattern
;
...
...
src/main/java/com/zhiwei/brandkbs2/dao/impl/EventDataDaoImpl.java
View file @
28ae2919
...
...
@@ -58,11 +58,13 @@ public class EventDataDaoImpl extends BaseMongoDaoImpl<EventData> implements Eve
}
@Override
@Deprecated
public
long
getEventArticleCount
(
Event
event
)
{
return
count
(
Query
.
query
(
Criteria
.
where
(
"eventId"
).
is
(
event
.
getId
())),
event
.
getCollectionName
());
}
@Override
@Deprecated
public
long
getEventArticleWithChannelCount
(
Event
event
,
ChannelIndex
channelIndex
)
{
return
count
(
Query
.
query
(
Criteria
.
where
(
"eventId"
).
is
(
event
.
getId
()).
and
(
"source"
).
is
(
channelIndex
.
getSource
()).
and
(
"realSource"
).
is
(
channelIndex
.
getRealSource
()).
and
(
"platform"
).
is
(
channelIndex
.
getPlatform
())),
event
.
getCollectionName
());
}
...
...
@@ -73,6 +75,7 @@ public class EventDataDaoImpl extends BaseMongoDaoImpl<EventData> implements Eve
}
@Override
@Deprecated
public
List
<
EventData
>
findEventDataListByTime
(
String
eventId
,
Date
startTime
,
Date
endTime
,
String
collectionName
)
{
Query
query
=
Query
.
query
(
Criteria
.
where
(
"eventId"
).
is
(
eventId
));
query
.
addCriteria
(
Criteria
.
where
(
"time"
).
gte
(
startTime
).
lt
(
endTime
));
...
...
@@ -80,12 +83,14 @@ public class EventDataDaoImpl extends BaseMongoDaoImpl<EventData> implements Eve
}
@Override
@Deprecated
public
long
findEventDataCount
(
String
eventId
,
String
collectionName
)
{
Query
query
=
Query
.
query
(
Criteria
.
where
(
"eventId"
).
is
(
eventId
));
return
mongoTemplate
.
count
(
query
,
EventData
.
class
,
collectionName
);
}
@Override
@Deprecated
public
Set
<
String
>
findEventIdsByChannelFid
(
String
channelFid
,
long
startTime
,
long
endTime
)
{
Set
<
String
>
res
=
new
HashSet
<>();
Criteria
criteria
=
Criteria
.
where
(
"channelFid"
).
is
(
channelFid
).
and
(
"eventMapper.startTime"
).
gte
(
startTime
).
lt
(
endTime
);
...
...
src/main/java/com/zhiwei/brandkbs2/enmus/RoleEnum.java
View file @
28ae2919
...
...
@@ -22,7 +22,12 @@ public enum RoleEnum {
/**
* 客户
*/
CUSTOMER
(
4
,
"客户"
);
CUSTOMER
(
4
,
"客户"
),
/**
* 客户
*/
NO_AUTHORISE
(-
1
,
"无需权限"
);
private
final
int
state
;
private
final
String
name
;
...
...
src/main/java/com/zhiwei/brandkbs2/interceptor/MainAuthInterceptor.java
View file @
28ae2919
...
...
@@ -2,6 +2,7 @@ package com.zhiwei.brandkbs2.interceptor;
import
com.zhiwei.brandkbs2.auth.Auth
;
import
com.zhiwei.brandkbs2.common.GenericAttribute
;
import
com.zhiwei.brandkbs2.enmus.RoleEnum
;
import
com.zhiwei.brandkbs2.model.CommonCodeEnum
;
import
com.zhiwei.brandkbs2.model.ResponseResult
;
import
com.zhiwei.brandkbs2.pojo.UserInfo
;
...
...
@@ -46,7 +47,7 @@ public class MainAuthInterceptor implements HandlerInterceptor {
}
}
// 不需要验证权限
if
(
null
==
auth
)
{
if
(
null
==
auth
||
RoleEnum
.
NO_AUTHORISE
==
auth
.
role
()
)
{
return
true
;
}
String
token
=
request
.
getHeader
(
"Token"
);
...
...
src/main/java/com/zhiwei/brandkbs2/pojo/dto/ExportAppChannelEventDTO.java
View file @
28ae2919
...
...
@@ -2,7 +2,8 @@ package com.zhiwei.brandkbs2.pojo.dto;
import
com.alibaba.excel.annotation.ExcelProperty
;
import
com.zhiwei.brandkbs2.enmus.EventTagEnum
;
import
com.zhiwei.brandkbs2.pojo.Event
;
import
com.zhiwei.middleware.event.pojo.entity.Event
;
import
com.zhiwei.middleware.event.pojo.entity.EventTagBasicInfo
;
import
lombok.Data
;
import
lombok.ToString
;
...
...
@@ -39,10 +40,15 @@ public class ExportAppChannelEventDTO {
ExportAppChannelEventDTO
dto
=
new
ExportAppChannelEventDTO
();
dto
.
setStartTime
(
new
Date
(
event
.
getStartTime
()));
dto
.
setEndTime
(
new
Date
(
event
.
getEndTime
()));
dto
.
setTitle
(
event
.
get
Titl
e
());
dto
.
setEmotion
(
event
.
getEmotion
());
dto
.
setTitle
(
event
.
get
Nam
e
());
dto
.
setEmotion
(
event
.
getEmotion
EventTag
().
getName
());
dto
.
setInfluence
(
event
.
getInfluence
());
dto
.
setEventType
(
event
.
getEventTag
().
getString
(
EventTagEnum
.
EVENT_TYPE
.
getName
()));
dto
.
setEventType
(
null
);
for
(
EventTagBasicInfo
eventTag
:
event
.
getEventTags
())
{
if
(
eventTag
.
getGroupName
().
equals
(
EventTagEnum
.
EVENT_TYPE
.
getName
())){
dto
.
setEventType
(
eventTag
.
getName
());
}
}
return
dto
;
}
}
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsHotEventWarn.java
View file @
28ae2919
package
com
.
zhiwei
.
brandkbs2
.
pojo
.
external
;
import
com.zhiwei.brandkbs2.pojo.Event
;
import
com.zhiwei.middleware.event.pojo.entity.Event
;
import
com.zhiwei.middleware.event.pojo.entity.EventTagBasicInfo
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
...
...
@@ -65,14 +66,16 @@ public class BrandkbsHotEventWarn {
public
static
HotEvent
createFromEvent
(
String
type
,
Event
event
)
{
HotEvent
hotEvent
=
new
HotEvent
();
hotEvent
.
setType
(
type
);
hotEvent
.
setTitle
(
event
.
get
Titl
e
());
hotEvent
.
setEmotion
(
event
.
getEmotion
());
hotEvent
.
setTitle
(
event
.
get
Nam
e
());
hotEvent
.
setEmotion
(
event
.
getEmotion
EventTag
().
getName
());
hotEvent
.
setTotalChannelVolume
(
event
.
getTotalChannelVolume
());
hotEvent
.
setTotalDisseminationVolume
(
event
.
getTotalDisseminationVolume
());
hotEvent
.
setStartTime
(
event
.
getStartTime
());
hotEvent
.
setInfluence
(
event
.
getInfluence
());
List
<
String
>
tagList
=
event
.
getEventTag
().
entrySet
().
stream
().
filter
(
entry
->
!
"情感倾向"
.
equals
(
entry
.
getKey
())).
map
(
entry
->
String
.
valueOf
(
entry
.
getValue
())).
collect
(
Collectors
.
toList
());
// List<String> tagList = event.getEventTag().entrySet().stream().filter(entry -> !"情感倾向".equals(entry.getKey()))
// .map(entry -> String.valueOf(entry.getValue())).collect(Collectors.toList());
List
<
String
>
tagList
=
event
.
getEventTags
().
stream
().
filter
(
eventTagBasicInfo
->
!
"情感倾向"
.
equals
(
eventTagBasicInfo
.
getGroupName
()))
.
map
(
EventTagBasicInfo:
:
getName
).
collect
(
Collectors
.
toList
());
hotEvent
.
setTagList
(
tagList
);
return
hotEvent
;
}
...
...
src/main/java/com/zhiwei/brandkbs2/service/impl/ChannelServiceImpl.java
View file @
28ae2919
This diff is collapsed.
Click to expand it.
src/main/java/com/zhiwei/brandkbs2/service/impl/CommonServiceImpl.java
View file @
28ae2919
...
...
@@ -127,7 +127,7 @@ public class CommonServiceImpl implements CommonService {
@Override
public
Long
[]
getTimeRangeDay
()
{
long
endTime
=
DateUtils
.
addDays
(
Tools
.
truncDate
(
new
Date
(),
Constant
.
DAY_PATTERN
),
1
).
getTime
();
long
endTime
=
Tools
.
truncDate
(
new
Date
(),
Constant
.
DAY_PATTERN
).
getTime
();
long
startTime
=
DateUtils
.
addDays
(
new
Date
(
endTime
),
-
1
).
getTime
();
return
new
Long
[]{
startTime
,
endTime
};
}
...
...
src/main/java/com/zhiwei/brandkbs2/service/impl/IndexServiceImpl.java
View file @
28ae2919
...
...
@@ -19,12 +19,14 @@ import com.zhiwei.brandkbs2.service.MarkDataService;
import
com.zhiwei.brandkbs2.service.ProjectService
;
import
com.zhiwei.brandkbs2.util.RedisUtil
;
import
com.zhiwei.brandkbs2.util.Tools
;
import
com.zhiwei.middleware.event.core.EventClient
;
import
com.zhiwei.qbjc.bean.pojo.common.MessagePlatform
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.ListUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.joda.time.Period
;
import
org.joda.time.PeriodType
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
...
...
@@ -61,6 +63,9 @@ public class IndexServiceImpl implements IndexService {
@Resource
private
RedisUtil
redisUtil
;
@Autowired
private
EventClient
eventClient
;
@Override
public
JSONObject
getYuqingAmount
(
Long
startTime
,
Long
endTime
,
boolean
cache
)
{
if
(
null
==
startTime
||
null
==
endTime
)
{
...
...
@@ -184,11 +189,10 @@ public class IndexServiceImpl implements IndexService {
Long
oldStartTime
=
startTime
-
(
endTime
-
startTime
);
int
selectMonths
=
new
Period
(
startTime
,
endTime
,
PeriodType
.
months
()).
getMonths
();
selectMonths
=
0
==
selectMonths
?
1
:
selectMonths
;
long
total
=
eventDao
.
getEventCountByProjectIdAndContendId
(
null
,
null
,
EmotionEnum
.
ALL
.
getName
(),
projectId
,
contendId
);
long
eventTotal
=
eventDao
.
getEventCountByProjectIdAndContendId
(
startTime
,
endTime
,
EmotionEnum
.
ALL
.
getName
(),
projectId
,
contendId
);
long
oldEventTotal
=
eventDao
.
getEventCountByProjectIdAndContendId
(
oldStartTime
,
endTime
,
EmotionEnum
.
ALL
.
getName
(),
projectId
,
contendId
);
// 调用事件中间件时,主品牌id使用项目id
long
total
=
eventClient
.
getEventCountByProjectIdAndContendId
(
null
,
null
,
EmotionEnum
.
ALL
.
getName
(),
projectId
,
projectId
);
long
eventTotal
=
eventClient
.
getEventCountByProjectIdAndContendId
(
startTime
,
endTime
,
EmotionEnum
.
ALL
.
getName
(),
projectId
,
projectId
);
long
oldEventTotal
=
eventClient
.
getEventCountByProjectIdAndContendId
(
oldStartTime
,
endTime
,
EmotionEnum
.
ALL
.
getName
(),
projectId
,
projectId
);
jsonObject
.
put
(
"eventTotal"
,
eventTotal
);
jsonObject
.
put
(
"avgEventTotal"
,
total
*
selectMonths
/
(
totalMonths
+
1
));
jsonObject
.
put
(
"compare"
,
oldEventTotal
==
0
?
0
d
:
(
eventTotal
-
oldEventTotal
)
/
(
double
)
oldEventTotal
);
...
...
@@ -418,12 +422,14 @@ public class IndexServiceImpl implements IndexService {
*/
private
JSONObject
getTopEvent
(
Long
startTime
,
Long
endTime
,
String
projectId
,
String
contendId
)
{
JSONObject
result
=
new
JSONObject
();
List
<
Event
>
eventList
=
eventDao
.
getEventsByProjectIdAndContendId
(
startTime
,
endTime
,
EmotionEnum
.
ALL
.
getName
(),
projectId
,
contendId
,
1
);
contendId
=
Objects
.
equals
(
contendId
,
Constant
.
PRIMARY_CONTEND_ID
)
?
projectId
:
contendId
;
List
<
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
>
eventList
=
eventClient
.
getEventsByProjectIdAndContendId
(
startTime
,
endTime
,
EmotionEnum
.
ALL
.
getName
(),
projectId
,
contendId
,
1
);
if
(
CollectionUtils
.
isNotEmpty
(
eventList
))
{
Event
event
=
eventList
.
get
(
0
);
long
articleCount
=
event
DataDao
.
getEventArticleCount
(
event
);
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
event
=
eventList
.
get
(
0
);
long
articleCount
=
event
Client
.
getEventArticleCount
(
event
);
result
.
put
(
"id"
,
event
.
getId
());
result
.
put
(
"title"
,
event
.
get
Titl
e
());
result
.
put
(
"title"
,
event
.
get
Nam
e
());
result
.
put
(
"influence"
,
event
.
getInfluence
());
result
.
put
(
"articleCount"
,
articleCount
);
}
...
...
@@ -535,7 +541,8 @@ public class IndexServiceImpl implements IndexService {
result
.
put
(
"normalCount"
,
normalCount
);
result
.
put
(
"time"
,
startTime
);
//统计时间段总事件数
long
eventCount
=
eventDao
.
getEventCountByProjectIdAndContendId
(
startTime
,
endTime
,
EmotionEnum
.
ALL
.
getName
(),
projectId
,
"0"
);
// 调用事件中间件时,主品牌id使用项目id
long
eventCount
=
eventClient
.
getEventCountByProjectIdAndContendId
(
startTime
,
endTime
,
EmotionEnum
.
ALL
.
getName
(),
projectId
,
projectId
);
result
.
put
(
"eventCount"
,
eventCount
);
lineList
.
add
(
result
);
}
...
...
@@ -556,10 +563,11 @@ public class IndexServiceImpl implements IndexService {
Long
startTime
=
map
.
get
(
"startTime"
);
Long
endTime
=
map
.
get
(
"endTime"
);
//统计时间段总事件数
long
totalEventCount
=
eventDao
.
getEventCountByProjectIdAndContendId
(
startTime
,
endTime
,
EmotionEnum
.
ALL
.
getName
(),
projectId
,
contendId
);
long
posEventCount
=
eventDao
.
getEventCountByProjectIdAndContendId
(
startTime
,
endTime
,
EmotionEnum
.
POSITIVE
.
getName
(),
projectId
,
contendId
);
long
neuEventCount
=
eventDao
.
getEventCountByProjectIdAndContendId
(
startTime
,
endTime
,
EmotionEnum
.
NEUTRAL
.
getName
(),
projectId
,
contendId
);
long
negEventCount
=
eventDao
.
getEventCountByProjectIdAndContendId
(
startTime
,
endTime
,
EmotionEnum
.
NEGATIVE
.
getName
(),
projectId
,
contendId
);
// 调用事件中间件时,主品牌id使用项目id
long
totalEventCount
=
eventClient
.
getEventCountByProjectIdAndContendId
(
startTime
,
endTime
,
EmotionEnum
.
ALL
.
getName
(),
projectId
,
projectId
);
long
posEventCount
=
eventClient
.
getEventCountByProjectIdAndContendId
(
startTime
,
endTime
,
EmotionEnum
.
POSITIVE
.
getName
(),
projectId
,
projectId
);
long
neuEventCount
=
eventClient
.
getEventCountByProjectIdAndContendId
(
startTime
,
endTime
,
EmotionEnum
.
NEUTRAL
.
getName
(),
projectId
,
projectId
);
long
negEventCount
=
eventClient
.
getEventCountByProjectIdAndContendId
(
startTime
,
endTime
,
EmotionEnum
.
NEGATIVE
.
getName
(),
projectId
,
projectId
);
JSONObject
result
=
new
JSONObject
();
result
.
put
(
"totalCount"
,
totalEventCount
);
result
.
put
(
"posCount"
,
posEventCount
);
...
...
src/main/java/com/zhiwei/brandkbs2/service/impl/ProjectWarnServiceImpl.java
View file @
28ae2919
...
...
@@ -18,6 +18,9 @@ import com.zhiwei.brandkbs2.service.ProjectService;
import
com.zhiwei.brandkbs2.service.ProjectWarnService
;
import
com.zhiwei.brandkbs2.util.RedisUtil
;
import
com.zhiwei.brandkbs2.util.Tools
;
import
com.zhiwei.middleware.event.core.EventClient
;
import
com.zhiwei.middleware.event.pojo.entity.Event
;
import
com.zhiwei.middleware.event.pojo.entity.EventTagBasicInfo
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.logging.log4j.LogManager
;
...
...
@@ -78,6 +81,9 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
@Resource
(
name
=
"redisUtil"
)
RedisUtil
redisUtil
;
@Autowired
private
EventClient
eventClient
;
private
static
final
Map
<
String
,
String
>
TYPE_SEARCH
=
new
HashMap
<>();
static
{
...
...
@@ -297,7 +303,7 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
return
new
BrandkbsWarnTemplate
(
firstCount
,
key1
,
key2
,
key3
,
key4
,
new
BrandkbsYuQingWarn
(
collect
));
}
private
BrandkbsWarnTemplate
brandkbsWarnTemplate4HotEvent
(
BrandkbsHotEventConfig
config
,
Map
<
String
,
List
<
Event
>>
eventMap
,
long
start
,
long
end
,
AbstractProject
project
)
{
private
BrandkbsWarnTemplate
brandkbsWarnTemplate4HotEvent
(
BrandkbsHotEventConfig
config
,
Map
<
String
,
List
<
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
>>
eventMap
,
long
start
,
long
end
,
AbstractProject
project
)
{
int
firstCount
=
eventMap
.
values
().
stream
().
mapToInt
(
List:
:
size
).
sum
();
if
(
firstCount
==
0
)
{
return
null
;
...
...
@@ -313,17 +319,17 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
final
int
limit
=
2
;
int
count
=
limit
;
out:
for
(
List
<
Event
>
value
:
eventMap
.
values
())
{
for
(
List
<
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
>
value
:
eventMap
.
values
())
{
for
(
Event
event
:
value
)
{
if
(--
count
==
0
)
{
if
(
firstCount
<=
limit
)
{
keyBuilder4
.
append
(
event
.
get
Titl
e
());
keyBuilder4
.
append
(
event
.
get
Nam
e
());
}
else
{
keyBuilder4
.
append
(
event
.
get
Titl
e
()).
append
(
"\r\n"
);
keyBuilder4
.
append
(
event
.
get
Nam
e
()).
append
(
"\r\n"
);
}
break
out
;
}
else
{
keyBuilder4
.
append
(
event
.
get
Titl
e
()).
append
(
"\r\n"
);
keyBuilder4
.
append
(
event
.
get
Nam
e
()).
append
(
"\r\n"
);
}
}
}
...
...
@@ -332,7 +338,8 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
}
else
{
key4
=
keyBuilder4
.
toString
();
}
Map
<
String
,
List
<
BrandkbsHotEventWarn
.
HotEvent
>>
collect
=
eventMap
.
entrySet
().
stream
().
collect
(
Collectors
.
toMap
(
Map
.
Entry
::
getKey
,
entry
->
entry
.
getValue
().
stream
().
map
(
event
->
BrandkbsHotEventWarn
.
HotEvent
.
createFromEvent
(
entry
.
getKey
(),
event
)).
collect
(
Collectors
.
toList
())));
Map
<
String
,
List
<
BrandkbsHotEventWarn
.
HotEvent
>>
collect
=
eventMap
.
entrySet
().
stream
().
collect
(
Collectors
.
toMap
(
Map
.
Entry
::
getKey
,
entry
->
entry
.
getValue
()
.
stream
().
map
(
event
->
BrandkbsHotEventWarn
.
HotEvent
.
createFromEvent
(
entry
.
getKey
(),
event
)).
collect
(
Collectors
.
toList
())));
// List<BrandkbsHotEventWarn.HotEvent> collect = eventMap.entrySet().stream().map(entry -> entry.getValue().stream().
// map(event -> BrandkbsHotEventWarn.HotEvent.createFromEvent(entry.getKey(), event)).collect(Collectors.toList())).
// collect(Collectors.toList()).stream().flatMap(List::stream).collect(Collectors.toList());
...
...
@@ -718,30 +725,39 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
long
start
=
end
-
Constant
.
ONE_DAY
*
7
;
try
{
log
.
info
(
"获取热点事件预警开始,project:{}"
,
project
.
getProjectName
());
Map
<
String
,
List
<
Event
>>
eventMap
=
new
LinkedHashMap
<>();
Map
<
String
,
List
<
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
>>
eventMap
=
new
LinkedHashMap
<>();
if
(
CollectionUtils
.
isNotEmpty
(
config
.
getOwnEvent
()))
{
List
<
Event
>
ownEvents
=
eventDao
.
getEventsByProjectIdAndContendId
(
start
,
end
,
config
.
getOwnEvent
(),
projectId
,
"0"
,
config
.
getEventTop
());
// 调用事件中间件时,使用项目id作为主品牌id
List
<
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
>
ownEvents
=
eventClient
.
getEventsByProjectIdAndContendId
(
start
,
end
,
config
.
getOwnEvent
(),
projectId
,
projectId
,
config
.
getEventTop
());
eventMap
.
put
(
"品牌动态"
,
ownEvents
);
}
if
(
CollectionUtils
.
isNotEmpty
(
config
.
getContendsEvent
()))
{
List
<
Event
>
contentEvents
=
new
ArrayList
<>();
List
<
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
>
contentEvents
=
new
ArrayList
<>();
for
(
String
contendId
:
config
.
getContendsEvent
())
{
contentEvents
.
addAll
(
eventDao
.
getEventsByProjectIdAndContendId
(
start
,
end
,
config
.
getOwnEvent
(),
projectId
,
contendId
,
config
.
getEventTop
()));
contendId
=
Objects
.
equals
(
Constant
.
PRIMARY_CONTEND_ID
,
contendId
)
?
projectId
:
contendId
;
contentEvents
.
addAll
(
eventClient
.
getEventsByProjectIdAndContendId
(
start
,
end
,
config
.
getOwnEvent
(),
projectId
,
contendId
,
config
.
getEventTop
()));
}
eventMap
.
put
(
"友商动态"
,
contentEvents
);
}
if
(
CollectionUtils
.
isNotEmpty
(
config
.
getZhiWeiEvent
()))
{
List
<
Event
>
externalEvents
=
new
ArrayList
<>();
List
<
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
>
externalEvents
=
new
ArrayList
<>();
ResponseEntity
<
String
>
forEntity
=
restTemplate
.
getForEntity
(
getExternalFilterNewUrl
,
String
.
class
,
config
.
getZhiWeiEvent
().
toArray
(),
start
,
end
);
JSONObject
jsonObject
=
JSON
.
parseObject
(
forEntity
.
getBody
());
JSONArray
jsonArray
=
jsonObject
.
getJSONObject
(
"data"
).
getJSONArray
(
"events"
);
for
(
int
i
=
0
;
i
<
config
.
getEventTop
();
i
++)
{
JSONObject
zhiweiEvent
=
jsonArray
.
getJSONObject
(
i
);
Event
event
=
new
Event
();
event
.
setTitle
(
zhiweiEvent
.
getString
(
"eventname"
));
JSONObject
eventTag
=
new
JSONObject
();
eventTag
.
put
(
"事件类型"
,
zhiweiEvent
.
getString
(
"type"
));
event
.
setEventTag
(
eventTag
);
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
event
=
new
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
();
event
.
setName
(
zhiweiEvent
.
getString
(
"eventname"
));
// JSONObject eventTag = new JSONObject();
// eventTag.put("事件类型", zhiweiEvent.getString("type"));
// event.setEventTag(eventTag);
EventTagBasicInfo
eventTagBasicInfo
=
new
EventTagBasicInfo
();
eventTagBasicInfo
.
setGroupName
(
"事件类型"
);
eventTagBasicInfo
.
setName
(
zhiweiEvent
.
getString
(
"type"
));
List
<
EventTagBasicInfo
>
infos
=
new
ArrayList
<>(
1
);
infos
.
add
(
eventTagBasicInfo
);
event
.
setEventTags
(
infos
);
event
.
setTotalDisseminationVolume
(
zhiweiEvent
.
getLong
(
"allCount"
));
event
.
setStartTime
(
zhiweiEvent
.
getLong
(
"startTime"
));
event
.
setInfluence
(
zhiweiEvent
.
getDouble
(
"index"
));
...
...
src/main/java/com/zhiwei/brandkbs2/service/impl/ReportServiceImpl.java
View file @
28ae2919
...
...
@@ -28,6 +28,8 @@ import com.zhiwei.brandkbs2.service.ReportService;
import
com.zhiwei.brandkbs2.util.MongoUtil
;
import
com.zhiwei.brandkbs2.util.RedisUtil
;
import
com.zhiwei.brandkbs2.util.Tools
;
import
com.zhiwei.middleware.event.core.EventClient
;
import
com.zhiwei.middleware.event.pojo.entity.BrandkbsBasicInfo
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.time.DateUtils
;
...
...
@@ -86,6 +88,9 @@ public class ReportServiceImpl implements ReportService {
@Autowired
StringRedisTemplate
stringRedisTemplate
;
@Autowired
private
EventClient
eventClient
;
@Override
public
Map
<
String
,
ReportSettingsDTO
>
getReportSettings
()
{
Map
<
String
,
ReportSettingsDTO
>
res
=
new
HashMap
<>();
...
...
@@ -348,7 +353,9 @@ public class ReportServiceImpl implements ReportService {
result
.
put
(
"curPosTotal"
,
curPositiveTotal
);
result
.
put
(
"curPosPro"
,
curTotal
==
0
?
0
:
curPositiveTotal
*
1.0
/
curTotal
);
//正面事件传播量top
List
<
Event
>
topPosEventList
=
eventDao
.
getEventsByTotalChannelVolumeTop
(
startTime
,
endTime
,
EmotionEnum
.
POSITIVE
.
getName
(),
projectId
,
contendId
,
3
);
// 调用事件中间件时,主品牌id使用项目id
List
<
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
>
topPosEventList
=
eventClient
.
getEventsByTotalChannelVolumeTop
(
startTime
,
endTime
,
EmotionEnum
.
POSITIVE
.
getName
(),
projectId
,
projectId
,
3
);
if
(
CollectionUtils
.
isEmpty
(
topPosEventList
))
{
List
<
Map
.
Entry
<
String
,
Integer
>>
topPosArticleList
=
markDataService
.
getMarkTopTitle
(
startTime
,
endTime
,
EmotionEnum
.
POSITIVE
.
getName
(),
projectId
,
linkedGroupId
,
contendId
,
3
);
result
.
put
(
"topPosSummary"
,
this
.
getTopArticlesMsg
(
startTime
,
endTime
,
projectId
,
linkedGroupId
,
contendId
,
topPosArticleList
));
...
...
@@ -364,7 +371,9 @@ public class ReportServiceImpl implements ReportService {
result
.
put
(
"curNeuTotal"
,
curNeutralTotal
);
result
.
put
(
"curNeuPro"
,
curTotal
==
0
?
0
:
curNeutralTotal
*
1.0
/
curTotal
);
//中性事件传播量top
List
<
Event
>
topNeuEventList
=
eventDao
.
getEventsByTotalChannelVolumeTop
(
startTime
,
endTime
,
EmotionEnum
.
NEUTRAL
.
getName
(),
projectId
,
contendId
,
4
);
// 调用事件中间件时,主品牌id使用项目id
List
<
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
>
topNeuEventList
=
eventClient
.
getEventsByTotalChannelVolumeTop
(
startTime
,
endTime
,
EmotionEnum
.
NEUTRAL
.
getName
(),
projectId
,
projectId
,
4
);
if
(
CollectionUtils
.
isEmpty
(
topNeuEventList
))
{
List
<
Map
.
Entry
<
String
,
Integer
>>
topNeuArticleList
=
markDataService
.
getMarkTopTitle
(
startTime
,
endTime
,
EmotionEnum
.
NEUTRAL
.
getName
(),
projectId
,
linkedGroupId
,
contendId
,
4
);
result
.
put
(
"topNeuSummary"
,
this
.
getTopArticlesMsg
(
startTime
,
endTime
,
projectId
,
linkedGroupId
,
contendId
,
topNeuArticleList
));
...
...
@@ -380,7 +389,9 @@ public class ReportServiceImpl implements ReportService {
result
.
put
(
"curNegTotal"
,
curNegativeTotal
);
result
.
put
(
"curNegPro"
,
curTotal
==
0
?
0
:
curNegativeTotal
*
1.0
/
curTotal
);
//中性事件传播量top
List
<
Event
>
topNegEventList
=
eventDao
.
getEventsByTotalChannelVolumeTop
(
startTime
,
endTime
,
EmotionEnum
.
NEGATIVE
.
getName
(),
projectId
,
contendId
,
4
);
// 调用事件中间件时,主品牌id使用项目id
List
<
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
>
topNegEventList
=
eventClient
.
getEventsByTotalChannelVolumeTop
(
startTime
,
endTime
,
EmotionEnum
.
NEGATIVE
.
getName
(),
projectId
,
projectId
,
4
);
if
(
CollectionUtils
.
isEmpty
(
topNegEventList
))
{
List
<
Map
.
Entry
<
String
,
Integer
>>
topNegArticleList
=
markDataService
.
getMarkTopTitle
(
startTime
,
endTime
,
EmotionEnum
.
NEGATIVE
.
getName
(),
projectId
,
linkedGroupId
,
contendId
,
4
);
result
.
put
(
"topNegSummary"
,
this
.
getTopArticlesMsg
(
startTime
,
endTime
,
projectId
,
linkedGroupId
,
contendId
,
topNegArticleList
));
...
...
@@ -457,17 +468,24 @@ public class ReportServiceImpl implements ReportService {
return
emotions
.
stream
().
map
(
emotion
->
{
JSONObject
result
=
new
JSONObject
();
result
.
put
(
"name"
,
Objects
.
equals
(
emotion
,
EmotionEnum
.
POSITIVE
.
getName
())
?
"正面事件"
:
Objects
.
equals
(
emotion
,
EmotionEnum
.
NEGATIVE
.
getName
())
?
"负面事件"
:
"中性事件"
);
List
<
Event
>
topEventList
=
eventDao
.
getEventsByTotalChannelVolumeTop
(
startTime
,
endTime
,
emotion
,
projectId
,
contendId
,
10
);
// 调用事件中间件时,主品牌id使用项目id
List
<
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
>
topEventList
=
eventClient
.
getEventsByTotalChannelVolumeTop
(
startTime
,
endTime
,
emotion
,
projectId
,
projectId
,
10
);
result
.
put
(
"events"
,
topEventList
.
stream
().
map
(
event
->
{
JSONObject
topEvent
=
new
JSONObject
();
boolean
hasAnalyze
=
Objects
.
equals
(
event
.
getContendId
(),
Constant
.
PRIMARY_CONTEND_ID
);
boolean
hasAnalyze
=
false
;
for
(
BrandkbsBasicInfo
brandkbsInfo
:
event
.
getBrandkbsInfos
())
{
if
(
brandkbsInfo
.
getBrandkbsProjectId
().
equals
(
projectId
)
&&
brandkbsInfo
.
getBrandkbsBrandId
().
equals
(
projectId
)){
hasAnalyze
=
true
;
}
}
topEvent
.
put
(
"id"
,
event
.
getId
());
String
title
=
event
.
get
Titl
e
();
String
title
=
event
.
get
Nam
e
();
topEvent
.
put
(
"title"
,
title
.
length
()
<=
30
?
title
:
title
.
substring
(
0
,
30
)
+
"..."
);
topEvent
.
put
(
"influence"
,
event
.
getInfluence
());
topEvent
.
put
(
"articleCount"
,
event
.
getTotalDisseminationVolume
());
//
查询
首发稿件
EventData
firstData
=
eventDataDao
.
findFirstData
(
event
.
getId
(),
event
.
getCollectionName
()
);
//
首发稿件
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
EventData
firstData
=
event
.
getOriginArticle
(
);
topEvent
.
put
(
"firstSource"
,
Objects
.
isNull
(
firstData
)
?
""
:
firstData
.
getSource
());
topEvent
.
put
(
"hasAnalyze"
,
hasAnalyze
);
return
topEvent
;
...
...
@@ -516,12 +534,18 @@ public class ReportServiceImpl implements ReportService {
* @param topEventList top事件集合
* @return top事件信息
*/
private
List
<
JSONObject
>
getTopEventMsg
(
List
<
Event
>
topEventList
)
{
private
List
<
JSONObject
>
getTopEventMsg
(
List
<
com
.
zhiwei
.
middleware
.
event
.
pojo
.
entity
.
Event
>
topEventList
)
{
String
projectId
=
UserThreadLocal
.
getProjectId
();
return
topEventList
.
stream
().
map
(
event
->
{
boolean
hasAnalyze
=
Objects
.
equals
(
event
.
getContendId
(),
Constant
.
PRIMARY_CONTEND_ID
);
boolean
hasAnalyze
=
false
;
for
(
BrandkbsBasicInfo
brandkbsInfo
:
event
.
getBrandkbsInfos
())
{
if
(
brandkbsInfo
.
getBrandkbsProjectId
().
equals
(
projectId
)
&&
brandkbsInfo
.
getBrandkbsBrandId
().
equals
(
projectId
)){
hasAnalyze
=
true
;
}
}
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"id"
,
event
.
getId
());
String
title
=
event
.
get
Titl
e
();
String
title
=
event
.
get
Nam
e
();
jsonObject
.
put
(
"title"
,
title
.
length
()
<=
30
?
title
:
title
.
substring
(
0
,
30
)
+
"..."
);
jsonObject
.
put
(
"hasAnalyze"
,
hasAnalyze
);
return
jsonObject
;
...
...
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