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
28f22ac4
Commit
28f22ac4
authored
Dec 19, 2023
by
陈健智
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
非人工版本情报预警模块
parent
6a3e68fc
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
374 additions
and
23 deletions
+374
-23
src/main/java/com/zhiwei/brandkbs2/controller/InterfaceController.java
+25
-4
src/main/java/com/zhiwei/brandkbs2/controller/app/AppWarnController.java
+37
-5
src/main/java/com/zhiwei/brandkbs2/es/EsQueryTools.java
+35
-5
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsYuQingConfig.java
+1
-0
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsYuQingConfigNew.java
+50
-0
src/main/java/com/zhiwei/brandkbs2/pojo/vo/PageVO.java
+1
-0
src/main/java/com/zhiwei/brandkbs2/service/ProjectService.java
+17
-0
src/main/java/com/zhiwei/brandkbs2/service/ProjectWarnService.java
+9
-4
src/main/java/com/zhiwei/brandkbs2/service/impl/ProjectServiceImpl.java
+46
-0
src/main/java/com/zhiwei/brandkbs2/service/impl/ProjectWarnServiceImpl.java
+150
-5
src/main/resources/application-dev.properties
+1
-0
src/main/resources/application-local.properties
+1
-0
src/main/resources/application-prod.properties
+1
-0
No files found.
src/main/java/com/zhiwei/brandkbs2/controller/InterfaceController.java
View file @
28f22ac4
...
...
@@ -2,10 +2,7 @@ package com.zhiwei.brandkbs2.controller;
import
com.alibaba.fastjson.JSONObject
;
import
com.zhiwei.brandkbs2.model.ResponseResult
;
import
com.zhiwei.brandkbs2.pojo.external.BrandkbsChannelConfig
;
import
com.zhiwei.brandkbs2.pojo.external.BrandkbsHotEventConfig
;
import
com.zhiwei.brandkbs2.pojo.external.BrandkbsHotTopConfig
;
import
com.zhiwei.brandkbs2.pojo.external.BrandkbsYuQingConfig
;
import
com.zhiwei.brandkbs2.pojo.external.*
;
import
com.zhiwei.brandkbs2.pojo.vo.CrisisCaseWarnVO
;
import
com.zhiwei.brandkbs2.service.ProjectService
;
import
com.zhiwei.brandkbs2.service.ProjectWarnService
;
...
...
@@ -58,12 +55,21 @@ public class InterfaceController {
@ApiOperation
(
"获取舆情动态-预警结果"
)
@PostMapping
(
"/warn/yuqing"
)
@Deprecated
public
ResponseResult
getYuqingWaring
(
@RequestBody
JSONObject
json
)
{
String
projectId
=
json
.
getString
(
"projectId"
);
BrandkbsYuQingConfig
config
=
json
.
getObject
(
"config"
,
BrandkbsYuQingConfig
.
class
);
return
projectWarnService
.
getYuqingWaring
(
projectId
,
config
);
}
@ApiOperation
(
"获取舆情动态-预警结果"
)
@PostMapping
(
"/warn/yuqingNew"
)
public
ResponseResult
getYuqingWaringNew
(
@RequestBody
JSONObject
json
)
{
String
projectId
=
json
.
getString
(
"projectId"
);
BrandkbsYuQingConfigNew
config
=
json
.
getObject
(
"config"
,
BrandkbsYuQingConfigNew
.
class
);
return
projectWarnService
.
getYuqingWaringNew
(
projectId
,
config
);
}
@ApiOperation
(
"获取渠道参与-预警结果"
)
@PostMapping
(
"/warn/channel"
)
public
ResponseResult
getChannelWaring
(
@RequestBody
JSONObject
json
)
{
...
...
@@ -113,4 +119,19 @@ public class InterfaceController {
List
<
String
>
list
=
JSONObject
.
parseObject
(
texts
).
getJSONArray
(
"texts"
).
toJavaList
(
String
.
class
);
return
ResponseResult
.
success
(
textUtil
.
getHighWordsJson
(
list
,
30
));
}
@ApiOperation
(
"获取用户项目列表分页"
)
@GetMapping
(
"/middleware/user-project-page-data"
)
public
ResponseResult
getUserProjectPageData
(
@RequestParam
(
value
=
"current"
)
int
current
,
@RequestParam
(
value
=
"pageSize"
)
int
pageSize
,
@RequestParam
(
value
=
"userId"
,
required
=
false
)
String
userId
,
@RequestParam
(
value
=
"keyword"
,
required
=
false
)
String
keyword
)
{
return
projectService
.
getUserProjectPageData
(
userId
,
keyword
,
current
,
pageSize
);
}
@ApiOperation
(
"获取用户项目列表"
)
@GetMapping
(
"/middleware/user-project-list"
)
public
ResponseResult
getUserProjectList
(
String
userId
)
{
return
projectService
.
getUserProject
(
userId
);
}
}
src/main/java/com/zhiwei/brandkbs2/controller/app/AppWarnController.java
View file @
28f22ac4
...
...
@@ -31,6 +31,7 @@ import javax.annotation.Resource;
import
java.io.UnsupportedEncodingException
;
import
java.net.URLEncoder
;
import
java.util.Map
;
import
java.util.Objects
;
/**
...
...
@@ -93,6 +94,9 @@ public class AppWarnController extends BaseController {
@Value
(
"${warn.taskSwitch.url}"
)
private
String
warnTaskSwitchUrl
;
@Value
(
"${warn.push.ticket.url}"
)
private
String
warnPushTicketUrl
;
@ApiOperation
(
"情报预警-推送任务获取"
)
@GetMapping
(
"/project"
)
public
ResponseResult
getPushTaskId
()
{
...
...
@@ -108,7 +112,13 @@ public class AppWarnController extends BaseController {
@PostMapping
(
"/project"
)
public
ResponseResult
postPushTaskId
(
@RequestBody
JSONObject
json
)
{
try
{
return
pushTaskId
(
null
,
json
.
getString
(
"planName"
),
HttpMethod
.
POST
);
ResponseResult
responseResult
=
pushTaskId
(
null
,
json
.
getString
(
"planName"
),
HttpMethod
.
POST
);
JSONObject
body
=
(
JSONObject
)
responseResult
.
getData
();
if
(!
body
.
getBoolean
(
"status"
)
&&
Objects
.
isNull
(
body
.
getJSONObject
(
"data"
))){
return
ResponseResult
.
failure
(
"超过方案数量上限,新增失败"
);
}
JSONObject
data
=
body
.
getJSONObject
(
"data"
);
return
ResponseResult
.
success
(
data
.
getString
(
"id"
));
}
catch
(
Exception
e
)
{
log
.
error
(
"情报预警-推送任务新增失败"
,
e
);
return
ResponseResult
.
failure
(
"情报预警-推送任务新增失败"
);
...
...
@@ -119,7 +129,8 @@ public class AppWarnController extends BaseController {
@PutMapping
(
"/project"
)
public
ResponseResult
putPushTaskId
(
@RequestBody
JSONObject
json
)
{
try
{
return
pushTaskId
(
json
.
getString
(
"taskId"
),
json
.
getString
(
"planName"
),
HttpMethod
.
PUT
);
pushTaskId
(
json
.
getString
(
"taskId"
),
json
.
getString
(
"planName"
),
HttpMethod
.
PUT
);
return
ResponseResult
.
success
();
}
catch
(
Exception
e
)
{
log
.
error
(
"情报预警-推送任务修改失败"
,
e
);
return
ResponseResult
.
failure
(
"情报预警-推送任务修改失败"
);
...
...
@@ -305,6 +316,27 @@ public class AppWarnController extends BaseController {
}
}
@ApiOperation
(
"情报预警-获取自动化ticket"
)
@GetMapping
(
"/push/ticket"
)
public
ResponseResult
getTicket
()
{
try
{
String
token
=
request
.
getHeader
(
jwtKey
);
// 请求头参数设置
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
add
(
"Push-Token"
,
token
);
HttpEntity
<
String
>
request
=
new
HttpEntity
<>(
headers
);
String
ticket
=
restTemplate
.
exchange
(
warnPushTicketUrl
,
HttpMethod
.
GET
,
request
,
JSONObject
.
class
)
.
getBody
().
getJSONObject
(
"data"
).
getString
(
"ticket"
);
return
ResponseResult
.
success
(
ticket
);
}
catch
(
Exception
e
)
{
log
.
error
(
"情报预警-获取自动化ticket"
,
e
);
return
ResponseResult
.
failure
(
"情报预警-获取自动化ticket"
);
}
}
private
ResponseResult
pushTaskId
(
String
taskId
,
String
planName
,
HttpMethod
httpMethod
)
throws
UnsupportedEncodingException
{
String
projectId
=
UserThreadLocal
.
getProjectId
();
String
projectName
=
projectService
.
getProjectById
(
projectId
).
getProjectName
();
...
...
@@ -323,8 +355,7 @@ public class AppWarnController extends BaseController {
}
if
(
HttpMethod
.
DELETE
==
httpMethod
)
{
request
=
new
HttpEntity
<>(
headers
);
return
ResponseResult
.
success
(
restTemplate
.
exchange
(
warnProjectUrl
+
"/"
+
taskId
,
httpMethod
,
request
,
JSONObject
.
class
).
getBody
().
getJSONArray
(
"data"
));
return
ResponseResult
.
success
(
restTemplate
.
exchange
(
warnProjectUrl
+
"/"
+
taskId
,
httpMethod
,
request
,
JSONObject
.
class
).
getBody
().
getJSONArray
(
"data"
));
}
JSONObject
paramMap
=
new
JSONObject
();
paramMap
.
put
(
"planName"
,
planName
);
...
...
@@ -335,7 +366,8 @@ public class AppWarnController extends BaseController {
paramMap
.
put
(
"projectName"
,
projectName
);
}
request
=
new
HttpEntity
<>(
paramMap
,
headers
);
return
ResponseResult
.
success
(
restTemplate
.
exchange
(
warnProjectUrl
,
httpMethod
,
request
,
JSONObject
.
class
).
getBody
().
getJSONArray
(
"data"
));
JSONObject
body
=
restTemplate
.
exchange
(
warnProjectUrl
,
httpMethod
,
request
,
JSONObject
.
class
).
getBody
();
return
ResponseResult
.
success
(
body
);
}
}
src/main/java/com/zhiwei/brandkbs2/es/EsQueryTools.java
View file @
28f22ac4
...
...
@@ -6,6 +6,7 @@ import com.zhiwei.brandkbs2.common.GlobalPojo;
import
com.zhiwei.brandkbs2.config.Constant
;
import
com.zhiwei.brandkbs2.enmus.ImportantChannelEnum
;
import
com.zhiwei.brandkbs2.pojo.external.BrandkbsYuQingConfig
;
import
com.zhiwei.brandkbs2.pojo.external.BrandkbsYuQingConfigNew
;
import
com.zhiwei.pushlog.tools.Tools
;
import
com.zhiwei.qbjc.bean.pojo.common.MessagePlatform
;
import
org.apache.commons.collections4.CollectionUtils
;
...
...
@@ -161,6 +162,19 @@ public class EsQueryTools {
return
boolQueryBuilder
;
}
public
static
BoolQueryBuilder
assembleCacheMapsQueryWithProject
(
String
projectId
,
BrandkbsYuQingConfigNew
config
)
{
BoolQueryBuilder
boolQueryBuilder
=
QueryBuilders
.
boolQuery
();
String
key
=
concat
(
projectId
,
Constant
.
PRIMARY_CONTEND_ID
);
BoolQueryBuilder
nestedBoolBuilder
=
QueryBuilders
.
boolQuery
();
// 必要条件
nestedBoolBuilder
.
must
(
QueryBuilders
.
termQuery
(
"brandkbs_cache_maps.key.keyword"
,
key
));
// 或需要添加其余nested字段
boolQueryBuilder
.
must
(
cacheMapsNestedQuery
(
nestedBoolBuilder
));
// sensitiveChannel
addSensitiveChannel
(
config
,
boolQueryBuilder
);
return
boolQueryBuilder
;
}
public
static
BoolQueryBuilder
assembleCacheMapsQueryExcludePrimaryId
(
String
projectId
){
BoolQueryBuilder
query
=
QueryBuilders
.
boolQuery
();
query
.
must
(
cacheMapsNestedQuery
(
QueryBuilders
.
termQuery
(
"brandkbs_cache_maps.project_id.keyword"
,
projectId
)));
...
...
@@ -276,11 +290,8 @@ public class EsQueryTools {
public
static
BoolQueryBuilder
assembleForward2Query
(
boolean
isForward
)
{
BoolQueryBuilder
queryBuilder
=
QueryBuilders
.
boolQuery
();
// 需要转发数据,平台必须为微博
if
(
isForward
)
{
BoolQueryBuilder
mustWeiboCondition
=
QueryBuilders
.
boolQuery
();
queryBuilder
.
should
(
mustWeiboCondition
.
must
(
QueryBuilders
.
termQuery
(
"platform_id"
,
"5d02236e6395002a7c380b79"
)));
queryBuilder
.
should
(
QueryBuilders
.
termQuery
(
"is_forward"
,
true
));
queryBuilder
.
must
(
QueryBuilders
.
termQuery
(
"is_forward"
,
true
));
}
else
{
queryBuilder
.
mustNot
(
QueryBuilders
.
termQuery
(
"is_forward"
,
true
));
}
...
...
@@ -295,7 +306,7 @@ public class EsQueryTools {
*/
public
static
BoolQueryBuilder
assembleC2Query
(
Integer
dataType
)
{
BoolQueryBuilder
queryBuilder
=
QueryBuilders
.
boolQuery
();
queryBuilder
.
should
(
QueryBuilders
.
termQuery
(
"c2"
,
dataType
<<
23
));
queryBuilder
.
should
(
QueryBuilders
.
termQuery
(
GenericAttribute
.
ES_C2
,
dataType
<<
23
));
return
queryBuilder
;
}
...
...
@@ -392,6 +403,25 @@ public class EsQueryTools {
boolQueryBuilder
.
must
(
hitBoolQuery
);
}
public
static
void
addSensitiveChannel
(
BrandkbsYuQingConfigNew
config
,
BoolQueryBuilder
boolQueryBuilder
)
{
BoolQueryBuilder
hitBoolQuery
=
QueryBuilders
.
boolQuery
();
if
(!
Tools
.
isEmpty
(
config
.
getPoliticsLevels
()))
{
List
<
String
>
hitList
=
config
.
getPoliticsLevels
();
if
(
config
.
getPoliticsLevels
().
contains
(
"全部"
))
{
hitList
=
ChannelType
.
POLITICS_LEVELS
;
}
hitList
.
forEach
(
politicsLevel
->
hitBoolQuery
.
should
(
QueryBuilders
.
termQuery
(
GenericAttribute
.
ES_SENSITIVE_CHANNEL
+
"."
+
GenericAttribute
.
ES_POLITICS_LEVEL
+
".keyword"
,
politicsLevel
)));
}
if
(!
Tools
.
isEmpty
(
config
.
getFields
()))
{
List
<
String
>
hitList
=
config
.
getFields
();
if
(
config
.
getFields
().
contains
(
"全部"
))
{
hitList
=
ChannelType
.
COMMON_FIELDS
;
}
hitList
.
forEach
(
field
->
hitBoolQuery
.
should
(
QueryBuilders
.
termQuery
(
GenericAttribute
.
ES_SENSITIVE_CHANNEL
+
"."
+
GenericAttribute
.
ES_FIELD
+
".keyword"
,
field
)));
}
boolQueryBuilder
.
must
(
hitBoolQuery
);
}
public
static
void
addSensitiveChannel
(
String
politicsLevel
,
String
field
,
String
region
,
String
mainBodyType
,
BoolQueryBuilder
boolQueryBuilder
)
{
if
(
null
!=
politicsLevel
)
{
boolQueryBuilder
.
must
(
QueryBuilders
.
termQuery
(
GenericAttribute
.
ES_SENSITIVE_CHANNEL
+
"."
+
GenericAttribute
.
ES_POLITICS_LEVEL
+
".keyword"
,
politicsLevel
));
...
...
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsYuQingConfig.java
View file @
28f22ac4
...
...
@@ -5,6 +5,7 @@ import lombok.Data;
import
java.util.List
;
@Data
@Deprecated
public
class
BrandkbsYuQingConfig
{
private
String
configName
;
...
...
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsYuQingConfigNew.java
0 → 100644
View file @
28f22ac4
package
com
.
zhiwei
.
brandkbs2
.
pojo
.
external
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
BrandkbsYuQingConfigNew
{
private
String
configName
;
/**
* 关键字命中
*/
private
String
keyword
;
/**
* 自定义渠道
*/
private
String
channel
;
/**
* 行政级别
*/
private
List
<
String
>
politicsLevels
;
/**
* 是否转发
*/
private
List
<
Boolean
>
primary
;
/**
* 领域
*/
private
List
<
String
>
fields
;
/**
* 本品舆情
*/
private
List
<
String
>
markerTags
;
/**
* pushInterval 推送间隔
*/
private
Long
pushInterval
;
/**
* distinctFilter 去重过滤
*/
private
boolean
distinctFilter
;
}
src/main/java/com/zhiwei/brandkbs2/pojo/vo/PageVO.java
View file @
28f22ac4
...
...
@@ -45,6 +45,7 @@ public class PageVO<T> {
pageVO
.
setPages
(
pages
);
pageVO
.
setSize
(
size
);
pageVO
.
setHasNext
(
pageNum
<
pages
);
pageVO
.
setPageSize
(
size
);
return
pageVO
;
}
...
...
src/main/java/com/zhiwei/brandkbs2/service/ProjectService.java
View file @
28f22ac4
...
...
@@ -193,4 +193,21 @@ public interface ProjectService {
* @return json
*/
JSONObject
nonManualProjectOverview
(
String
project
);
/**
* 获取用户拥有权限的项目
* @param userId
* @return
*/
ResponseResult
getUserProject
(
String
userId
);
/**
* 分页获取用户拥有权限的项目,支持项目名关键词模糊
* @param userId
* @param keyword 项目名模糊查询关键词
* @param page
* @param pageSize
* @return
*/
ResponseResult
getUserProjectPageData
(
String
userId
,
String
keyword
,
int
page
,
int
pageSize
);
}
src/main/java/com/zhiwei/brandkbs2/service/ProjectWarnService.java
View file @
28f22ac4
package
com
.
zhiwei
.
brandkbs2
.
service
;
import
com.zhiwei.brandkbs2.model.ResponseResult
;
import
com.zhiwei.brandkbs2.pojo.external.BrandkbsChannelConfig
;
import
com.zhiwei.brandkbs2.pojo.external.BrandkbsHotEventConfig
;
import
com.zhiwei.brandkbs2.pojo.external.BrandkbsHotTopConfig
;
import
com.zhiwei.brandkbs2.pojo.external.BrandkbsYuQingConfig
;
import
com.zhiwei.brandkbs2.pojo.external.*
;
import
com.zhiwei.brandkbs2.pojo.vo.CrisisCaseWarnVO
;
public
interface
ProjectWarnService
{
...
...
@@ -34,6 +31,14 @@ public interface ProjectWarnService {
ResponseResult
getYuqingWaring
(
String
projectId
,
BrandkbsYuQingConfig
brandkbsYuQingConfig
);
/**
* 获取舆情动态预警-新
* @param projectId
* @param brandkbsYuQingConfigNew
* @return
*/
ResponseResult
getYuqingWaringNew
(
String
projectId
,
BrandkbsYuQingConfigNew
brandkbsYuQingConfigNew
);
/**
* 获取渠道参与预警
* @param projectId
* @param brandkbsChannelConfig
...
...
src/main/java/com/zhiwei/brandkbs2/service/impl/ProjectServiceImpl.java
View file @
28f22ac4
...
...
@@ -22,6 +22,7 @@ import com.zhiwei.middleware.event.pojo.dto.EventTagRelatedDTO;
import
com.zhiwei.middleware.event.pojo.entity.BrandkbsBasicInfo
;
import
com.zhiwei.middleware.mark.vo.MarkerTag
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.springframework.beans.factory.annotation.Value
;
...
...
@@ -585,6 +586,51 @@ public class ProjectServiceImpl implements ProjectService {
return
json
;
}
@Override
public
ResponseResult
getUserProject
(
String
userId
)
{
User
user
=
userDao
.
findOneById
(
userId
);
Query
query
=
new
Query
();
if
(!
user
.
isSuperAdmin
()){
List
<
String
>
projectIds
=
user
.
getRoles
().
stream
().
map
(
UserRole:
:
getProjectId
).
collect
(
Collectors
.
toList
());
query
.
addCriteria
(
Criteria
.
where
(
"_id"
).
in
(
projectIds
));
}
List
<
Project
>
projectList
=
projectDao
.
findList
(
query
);
List
<
JSONObject
>
res
=
projectList
.
stream
().
map
(
project
->
{
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"id"
,
project
.
getId
());
jsonObject
.
put
(
"name"
,
project
.
getProjectName
());
return
jsonObject
;
}).
collect
(
Collectors
.
toList
());
return
ResponseResult
.
success
(
res
);
}
@Override
public
ResponseResult
getUserProjectPageData
(
String
userId
,
String
keyword
,
int
page
,
int
pageSize
)
{
Query
query
=
new
Query
();
projectDao
.
addSort
(
query
,
"{\"_id\":\"asc\"}"
);
// 项目名关键词模糊
if
(
StringUtils
.
isNotBlank
(
keyword
)){
projectDao
.
addKeywordFuzz
(
query
,
keyword
,
"projectName"
);
}
// 用户拥有权限的项目
if
(
StringUtils
.
isNotBlank
(
userId
)
&&
!
userDao
.
findOneById
(
userId
).
isSuperAdmin
()){
List
<
String
>
projectIds
=
userDao
.
findOneById
(
userId
).
getRoles
().
stream
().
map
(
UserRole:
:
getProjectId
).
collect
(
Collectors
.
toList
());
query
.
addCriteria
(
Criteria
.
where
(
"_id"
).
in
(
projectIds
));
}
long
total
=
projectDao
.
count
(
query
);
int
skipCount
=
(
page
-
1
)
*
pageSize
;
query
.
limit
(
pageSize
);
query
.
skip
(
skipCount
);
List
<
Project
>
projectList
=
projectDao
.
findList
(
query
);
List
<
JSONObject
>
resList
=
projectList
.
stream
().
map
(
project
->
{
JSONObject
result
=
new
JSONObject
();
result
.
put
(
"id"
,
project
.
getId
());
result
.
put
(
"projectName"
,
project
.
getProjectName
());
return
result
;
}).
collect
(
Collectors
.
toList
());
return
ResponseResult
.
success
(
PageVO
.
createPageVo
(
total
,
page
,
pageSize
,
resList
));
}
/**
* 获取舆情对应项目的情感标签
* @param brandName
...
...
src/main/java/com/zhiwei/brandkbs2/service/impl/ProjectWarnServiceImpl.java
View file @
28f22ac4
...
...
@@ -170,12 +170,19 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
public
ResponseResult
getProjectWarnCriteriaDefault
(
String
projectId
,
String
type
)
{
switch
(
type
)
{
case
"舆情动态"
:
BrandkbsYuQingConfig
config
=
new
BrandkbsYuQingConfig
();
// BrandkbsYuQingConfig config = new BrandkbsYuQingConfig();
// config.setPoliticsLevels(Collections.singletonList("全部"));
// config.setFields(Collections.singletonList("全部"));
// config.setPrimary(Collections.singletonList(Boolean.TRUE));
// config.setMarkerTags(Arrays.asList("正面", "负面", "中性"));
// config.setDuplicate(Boolean.FALSE);
// config.setPushInterval(10 * ONE_MINUTE);
BrandkbsYuQingConfigNew
config
=
new
BrandkbsYuQingConfigNew
();
config
.
setPoliticsLevels
(
Collections
.
singletonList
(
"央级"
));
config
.
setFields
(
Collections
.
singletonList
(
"
财经
"
));
config
.
setPrimary
(
Collections
.
singletonList
(
Boolean
.
TRU
E
));
config
.
setMarkerTags
(
Collections
.
singletonList
(
"负面
"
));
config
.
setD
uplicate
(
Boolean
.
FALSE
);
config
.
setFields
(
Collections
.
singletonList
(
"
全部
"
));
config
.
setPrimary
(
Collections
.
singletonList
(
Boolean
.
FALS
E
));
config
.
setMarkerTags
(
Arrays
.
asList
(
"正面"
,
"负面"
,
"中性
"
));
config
.
setD
istinctFilter
(
true
);
config
.
setPushInterval
(
10
*
ONE_MINUTE
);
return
ResponseResult
.
success
(
config
);
case
"渠道参与"
:
...
...
@@ -213,6 +220,89 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
return
ResponseResult
.
success
();
}
private
BrandkbsWarnTemplate
brandkbsWarnTemplate4Yuqing
(
BrandkbsYuQingConfigNew
config
,
List
<
BaseMap
>
datas
,
long
start
,
long
end
,
AbstractProject
project
)
{
if
(
datas
.
isEmpty
())
{
return
null
;
}
int
firstCount
=
datas
.
size
();
// key1
String
key1
=
"【品见】舆情动态-"
+
project
.
getProjectName
();
// key2
// String key2Header = "全部";
String
key2Header
=
""
;
StringBuilder
mediaChannel
=
new
StringBuilder
();
List
<
String
>
politicsLevels
=
config
.
getPoliticsLevels
();
List
<
String
>
fields
=
config
.
getFields
();
if
(
Tools
.
isEmpty
(
politicsLevels
)){
key2Header
+=
"【全部级别】"
;
}
else
if
(
politicsLevels
.
contains
(
"全部"
)){
key2Header
+=
"【重点级别】"
;
}
else
{
politicsLevels
.
forEach
(
politicsLevel
->
mediaChannel
.
append
(
politicsLevel
).
append
(
"、"
));
}
if
(
Tools
.
isEmpty
(
fields
))
{
if
(
0
!=
key2Header
.
length
())
{
key2Header
+=
"、"
;
key2Header
+=
"【全部领域】,"
;
}
else
{
key2Header
+=
"【全部领域】"
;
}
}
else
if
(
fields
.
contains
(
"全部"
))
{
if
(
0
!=
key2Header
.
length
())
{
key2Header
+=
"、"
;
key2Header
+=
"【重点领域】,"
;
}
else
{
key2Header
+=
"【重点领域】"
;
}
}
else
{
fields
.
forEach
(
field
->
mediaChannel
.
append
(
field
).
append
(
"、"
));
}
if
(
0
!=
mediaChannel
.
length
())
{
if
(
0
!=
key2Header
.
length
())
{
key2Header
+=
"、"
;
}
// 替换“全部” 并去掉末位的、
key2Header
+=
mediaChannel
.
deleteCharAt
(
mediaChannel
.
length
()
-
1
).
toString
();
key2Header
+=
"媒体,"
;
}
StringBuilder
dataType
=
new
StringBuilder
();
config
.
getMarkerTags
().
forEach
(
emotion
->
dataType
.
append
(
emotion
).
append
(
" "
));
// dataType.append("(本品)");
// 如果有竞品
// if (CollectionUtils.isNotEmpty(config.getContends())) {
// dataType.append(",");
// config.getContends().forEach(contend -> dataType.append(projectService.getProjectByContendId(project.getId(), contend).getBrandName()).append(" "));
// dataType.append("(竞品)");
// }
String
key2
=
key2Header
+
dataType
;
// key3
String
key3
=
Constant
.
SPEC_MINUTE_FORMAT
.
format
(
start
)
+
" ~ "
+
Constant
.
SPEC_MINUTE_FORMAT
.
format
(
end
);
// key4
String
key4
;
StringBuilder
keyBuilder4
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
Math
.
min
(
datas
.
size
(),
2
);
i
++)
{
BaseMap
baseMap
=
datas
.
get
(
i
);
String
platform
=
baseMap
.
getPlatform
();
String
source
=
baseMap
.
getSource
();
String
title
=
baseMap
.
getTitle
();
keyBuilder4
.
append
(
platform
).
append
(
"-"
).
append
(
source
).
append
(
"\r\n"
);
// 最后一条
if
(
datas
.
size
()
==
i
+
1
)
{
keyBuilder4
.
append
(
i
+
1
).
append
(
"、"
).
append
(
title
);
}
else
{
keyBuilder4
.
append
(
i
+
1
).
append
(
"、"
).
append
(
title
).
append
(
"\r\n"
);
}
}
if
(
datas
.
size
()
>
2
)
{
key4
=
keyBuilder4
.
append
(
"..."
).
toString
();
}
else
{
key4
=
keyBuilder4
.
toString
();
}
List
<
BaseMapCompound
>
collect
=
datas
.
stream
().
map
(
baseMap
->
BaseMapCompound
.
createFromBaseMap
(
baseMap
,
project
.
getId
())).
collect
(
Collectors
.
toList
());
return
new
BrandkbsWarnTemplate
(
firstCount
,
key1
,
key2
,
key3
,
key4
,
new
BrandkbsYuQingWarn
(
collect
));
}
@Deprecated
private
BrandkbsWarnTemplate
brandkbsWarnTemplate4Yuqing
(
BrandkbsYuQingConfig
config
,
List
<
BaseMap
>
datas
,
long
start
,
long
end
,
AbstractProject
project
)
{
if
(
datas
.
isEmpty
())
{
return
null
;
...
...
@@ -613,6 +703,7 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
}
@Override
@Deprecated
public
ResponseResult
getYuqingWaring
(
String
projectId
,
BrandkbsYuQingConfig
config
)
{
Project
project
=
null
;
long
end
=
System
.
currentTimeMillis
();
...
...
@@ -671,6 +762,60 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
}
@Override
public
ResponseResult
getYuqingWaringNew
(
String
projectId
,
BrandkbsYuQingConfigNew
config
)
{
Project
project
;
long
end
=
System
.
currentTimeMillis
();
long
start
=
end
-
config
.
getPushInterval
();
try
{
project
=
projectService
.
getProjectById
(
projectId
);
log
.
info
(
"获取新舆情动态预警开始,project:{}"
,
project
.
getProjectName
());
EsClientDao
.
SearchHelper
helper
=
EsClientDao
.
createSearchHelper
();
// 发声渠道
BoolQueryBuilder
postFilter
=
EsQueryTools
.
assembleCacheMapsQueryWithProject
(
projectId
,
config
);
// 时间(标注时间)
postFilter
.
must
(
QueryBuilders
.
rangeQuery
(
"mtime"
).
gte
(
start
).
lt
(
end
));
// 文章类型
if
(
CollectionUtils
.
isNotEmpty
(
config
.
getPrimary
())
&&
config
.
getPrimary
().
size
()
==
1
)
{
postFilter
.
must
(
EsQueryTools
.
assembleForward2Query
(
config
.
getPrimary
().
get
(
0
)));
}
// 舆情调性
BoolQueryBuilder
sourceBuilder
=
QueryBuilders
.
boolQuery
();
if
(
CollectionUtils
.
isNotEmpty
(
config
.
getMarkerTags
()))
{
config
.
getMarkerTags
().
forEach
(
tagName
->
sourceBuilder
.
should
(
QueryBuilders
.
termQuery
(
"brandkbs_mark_cache_maps.name.keyword"
,
tagName
)));
}
postFilter
.
must
(
sourceBuilder
);
// 自定义渠道
if
(
StringUtils
.
isNotBlank
(
config
.
getChannel
())){
postFilter
.
must
(
EsQueryTools
.
assembleSourceQuery
(
config
.
getChannel
()));
}
helper
.
setPostFilter
(
postFilter
);
SearchHits
searchHits
=
esClientDao
.
searchHits
(
helper
);
log
.
info
(
"获取新舆情动态预警-es搜索到数据:{}条,剩余关键词筛选未进行,project:{}"
,
searchHits
.
getHits
().
length
,
project
.
getProjectName
());
List
<
BaseMap
>
datas
=
Arrays
.
stream
(
searchHits
.
getHits
()).
map
(
hit
->
{
Map
<
String
,
Object
>
sourceMap
=
hit
.
getSourceAsMap
();
BaseMap
baseMap
=
Tools
.
getBaseFromEsMap
(
sourceMap
);
// 关键词命中
if
(!
Tools
.
isContains
(
config
.
getKeyword
(),
baseMap
.
getTitle
()
+
baseMap
.
getContent
()))
{
return
null
;
}
baseMap
.
setTitle
(
baseMap
.
getTitleNullOptionalContent
());
baseMap
.
subStringContentTop
();
return
baseMap
;
}).
filter
(
Objects:
:
nonNull
).
collect
(
Collectors
.
toList
());
// 开启去重
if
(
Boolean
.
TRUE
.
equals
(
config
.
isDistinctFilter
()))
{
datas
=
duplicateBaseMapList
(
datas
);
}
log
.
info
(
"获取舆情动态预警结束,project:{}"
,
project
.
getProjectName
());
// 封装返回值
return
ResponseResult
.
success
(
brandkbsWarnTemplate4Yuqing
(
config
,
datas
,
start
,
end
,
project
));
}
catch
(
Exception
e
)
{
log
.
info
(
"获取舆情动态预警失败,projectId:{},start:{},end:{}"
,
projectId
,
start
,
end
,
e
);
}
return
ResponseResult
.
failure
(
"获取舆情动态预警失败"
);
}
@Override
public
ResponseResult
getChannelWaring
(
String
projectId
,
BrandkbsChannelConfig
config
)
{
Project
project
=
null
;
long
end
=
System
.
currentTimeMillis
();
...
...
src/main/resources/application-dev.properties
View file @
28f22ac4
...
...
@@ -117,6 +117,7 @@ warn.hotEvent.url=https://auto-push.zhiweidata.com/qbjc/brandkbsPush/interface/b
warn.hotTop.url
=
https://auto-push.zhiweidata.com/qbjc/brandkbsPush/interface/brandkbs/config/hotTop/{1}
warn.yuQing.url
=
https://auto-push.zhiweidata.com/qbjc/brandkbsPush/interface/brandkbs/config/yuQing/{1}
warn.taskSwitch.url
=
https://auto-push.zhiweidata.com/qbjc/brandkbsPush/interface/brandkbs/enable/used
warn.push.ticket.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/task/token/ticket
#\u9884\u8B66\u5916\u90E8\u63A5\u53E3
ef.external.filterNew.url
=
https://ef.zhiweidata.com/external/filterNew.do?firstTypes={1}&start={2}&end={3}
hot.search.url
=
https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/findNewHotSearch?type={1}
...
...
src/main/resources/application-local.properties
View file @
28f22ac4
...
...
@@ -123,6 +123,7 @@ warn.hotEvent.url=http://192.168.0.225:11003/qbjc/brandkbsPush/interface/brandkb
warn.hotTop.url
=
http://192.168.0.225:11003/qbjc/brandkbsPush/interface/brandkbs/config/hotTop/{1}
warn.yuQing.url
=
http://192.168.0.225:11003/qbjc/brandkbsPush/interface/brandkbs/config/yuQing/{1}
warn.taskSwitch.url
=
http://192.168.0.225:11003/qbjc/brandkbsPush/interface/brandkbs/enable/used
warn.push.ticket.url
=
http://192.168.0.225:11003/qbjc/pushTask/interface/task/token/ticket
#\u9884\u8B66\u5916\u90E8\u63A5\u53E3
ef.external.filterNew.url
=
https://ef.zhiweidata.com/external/filterNew.do?firstTypes={1}&start={2}&end={3}
hot.search.url
=
https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/findNewHotSearch?type={1}
...
...
src/main/resources/application-prod.properties
View file @
28f22ac4
...
...
@@ -117,6 +117,7 @@ warn.hotEvent.url=https://auto-push.zhiweidata.com/qbjc/brandkbsPush/interface/b
warn.hotTop.url
=
https://auto-push.zhiweidata.com/qbjc/brandkbsPush/interface/brandkbs/config/hotTop/{1}
warn.yuQing.url
=
https://auto-push.zhiweidata.com/qbjc/brandkbsPush/interface/brandkbs/config/yuQing/{1}
warn.taskSwitch.url
=
https://auto-push.zhiweidata.com/qbjc/brandkbsPush/interface/brandkbs/enable/used
warn.push.ticket.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/task/token/ticket
#\u9884\u8B66\u5916\u90E8\u63A5\u53E3
ef.external.filterNew.url
=
https://ef.zhiweidata.com/external/filterNew.do?firstTypes={1}&start={2}&end={3}
hot.search.url
=
https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/findNewHotSearch?type={1}
...
...
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