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
e6323c26
Commit
e6323c26
authored
Nov 10, 2022
by
shenjunjie
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature' into 'release'
Feature See merge request
!71
parents
88f7a151
f60b13c1
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
879 additions
and
73 deletions
+879
-73
src/main/java/com/zhiwei/brandkbs2/controller/InterfaceController.java
+29
-3
src/main/java/com/zhiwei/brandkbs2/controller/app/AppWarnController.java
+282
-0
src/main/java/com/zhiwei/brandkbs2/es/EsQueryTools.java
+15
-1
src/main/java/com/zhiwei/brandkbs2/pojo/external/BaseMapCompound.java
+29
-0
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsChannelConfig.java
+54
-0
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsChannelWarn.java
+28
-0
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsHotEventWarn.java
+64
-0
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsHotTopConfig.java
+60
-0
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsWarnTemplate.java
+23
-0
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsYuQingConfig.java
+54
-0
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsYuQingWarn.java
+23
-0
src/main/java/com/zhiwei/brandkbs2/service/impl/MarkDataServiceImpl.java
+5
-1
src/main/java/com/zhiwei/brandkbs2/service/impl/ProjectWarnServiceImpl.java
+174
-62
src/main/resources/application-dev.properties
+13
-2
src/main/resources/application-local.properties
+13
-2
src/main/resources/application-prod.properties
+13
-2
No files found.
src/main/java/com/zhiwei/brandkbs2/controller/InterfaceController.java
View file @
e6323c26
package
com
.
zhiwei
.
brandkbs2
.
controller
;
package
com
.
zhiwei
.
brandkbs2
.
controller
;
import
com.alibaba.fastjson.JSONObject
;
import
com.zhiwei.brandkbs2.model.ResponseResult
;
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.BrandkbsYuQingConfig
;
import
com.zhiwei.brandkbs2.service.ProjectService
;
import
com.zhiwei.brandkbs2.service.ProjectService
;
import
com.zhiwei.brandkbs2.service.ProjectWarnService
;
import
com.zhiwei.brandkbs2.service.ProjectWarnService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
...
@@ -40,4 +42,28 @@ public class InterfaceController {
...
@@ -40,4 +42,28 @@ public class InterfaceController {
return
ResponseResult
.
success
(
projectService
.
getUserAllProjectsPrimary
(
userId
));
return
ResponseResult
.
success
(
projectService
.
getUserAllProjectsPrimary
(
userId
));
}
}
@ApiOperation
(
"获取舆情动态-预警结果"
)
@PostMapping
(
"/warn/yuqing"
)
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/channel"
)
public
ResponseResult
getChannelWaring
(
@RequestBody
JSONObject
json
)
{
String
projectId
=
json
.
getString
(
"projectId"
);
BrandkbsChannelConfig
config
=
json
.
getObject
(
"config"
,
BrandkbsChannelConfig
.
class
);
return
projectWarnService
.
getChannelWaring
(
projectId
,
config
);
}
@ApiOperation
(
"获取热点事件-预警结果"
)
@PostMapping
(
"/warn/hotEvent"
)
public
ResponseResult
getHotEventWaring
(
@RequestBody
JSONObject
json
)
{
String
projectId
=
json
.
getString
(
"projectId"
);
BrandkbsHotEventConfig
config
=
json
.
getObject
(
"config"
,
BrandkbsHotEventConfig
.
class
);
return
projectWarnService
.
getHotEventWaring
(
projectId
,
config
);
}
}
}
src/main/java/com/zhiwei/brandkbs2/controller/app/AppWarnController.java
0 → 100644
View file @
e6323c26
package
com
.
zhiwei
.
brandkbs2
.
controller
.
app
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.zhiwei.brandkbs2.auth.UserThreadLocal
;
import
com.zhiwei.brandkbs2.common.GenericAttribute
;
import
com.zhiwei.brandkbs2.controller.BaseController
;
import
com.zhiwei.brandkbs2.model.ResponseResult
;
import
com.zhiwei.brandkbs2.service.ProjectService
;
import
com.zhiwei.brandkbs2.service.ProjectWarnService
;
import
com.zhiwei.brandkbs2.service.UserService
;
import
com.zhiwei.middleware.auth.util.JwtUtil
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiParam
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.http.HttpEntity
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpMethod
;
import
org.springframework.http.MediaType
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.client.RestTemplate
;
import
javax.annotation.Resource
;
import
java.net.URLEncoder
;
import
java.util.Map
;
/**
* @ClassName: WarnController
* @Description 情报预警
* @author: cjz
* @date: 2022-10-28 10:27
*/
@RestController
@Api
(
tags
=
"情报预警接口"
,
description
=
"情报预警"
)
@RequestMapping
(
"/app/warn"
)
public
class
AppWarnController
extends
BaseController
{
private
static
final
Logger
log
=
LogManager
.
getLogger
(
AppWarnController
.
class
);
private
static
final
String
taskType
=
"brandkbs"
;
@Value
(
"${jwt.key}"
)
private
String
jwtKey
;
@Autowired
private
RestTemplate
restTemplate
;
@Resource
(
name
=
"projectWarnServiceImpl"
)
private
ProjectWarnService
projectWarnService
;
@Resource
(
name
=
"projectServiceImpl"
)
private
ProjectService
projectService
;
@Resource
(
name
=
"userServiceImpl"
)
private
UserService
userService
;
@Value
(
"${warn.pushTask.token}"
)
private
String
token
;
@Value
(
"${warn.project.url}"
)
private
String
warnProjectUrl
;
@Value
(
"${warn.ticket.url}"
)
private
String
warnTicketUrl
;
@Value
(
"${warn.pushRecipientsList.url}"
)
private
String
warnPushRecipientsUrl
;
@Value
(
"${warn.deletePushRecipients.url}"
)
private
String
deletePushRecipientsUrl
;
@Value
(
"${warn.channel.url}"
)
private
String
warnChannelUrl
;
@Value
(
"${warn.hotEvent.url}"
)
private
String
warnHotEventUrl
;
@Value
(
"${warn.hotTop.url}"
)
private
String
warnHotTopUrl
;
@Value
(
"${warn.yuQing.url}"
)
private
String
warnYuQingUrl
;
@Value
(
"${warn.taskSwitch.url}"
)
private
String
warnTaskSwitchUrl
;
@ApiOperation
(
"情报预警-推送任务获取/新增"
)
@GetMapping
(
"/project"
)
public
ResponseResult
getPushTaskId
()
{
try
{
String
projectId
=
UserThreadLocal
.
getProjectId
();
String
projectName
=
projectService
.
getProjectById
(
projectId
).
getProjectName
();
String
userId
=
JwtUtil
.
unsign
(
request
.
getHeader
(
jwtKey
),
Map
.
class
).
get
(
GenericAttribute
.
USER_ID
).
toString
();
// header不支持中文 故对userName进行encode操作
String
userName
=
URLEncoder
.
encode
(
userService
.
queryUserInfo
(
userId
,
projectId
).
getNickname
(),
"UTF-8"
);
// 请求头参数设置
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
add
(
"token"
,
token
);
headers
.
add
(
"userId"
,
userId
);
headers
.
add
(
"userName"
,
userName
);
HttpEntity
<
Object
>
request
=
new
HttpEntity
<>(
headers
);
JSONObject
data
=
restTemplate
.
exchange
(
warnProjectUrl
,
HttpMethod
.
GET
,
request
,
JSONObject
.
class
,
projectId
,
projectName
).
getBody
().
getJSONObject
(
"data"
);
return
ResponseResult
.
success
(
data
);
}
catch
(
Exception
e
){
log
.
error
(
"情报预警-推送任务获取/新增失败"
,
e
);
return
ResponseResult
.
failure
(
"情报预警-推送任务获取/新增失败"
);
}
}
@ApiOperation
(
"情报预警-获取项目预警更新条件"
)
@GetMapping
(
"/warnCriteria"
)
public
ResponseResult
getProjectWarnCriteria
(
@RequestParam
(
value
=
"type"
)
String
type
){
return
ResponseResult
.
success
(
projectWarnService
.
getProjectWarnCriteria
(
UserThreadLocal
.
getProjectId
(),
type
));
}
@ApiOperation
(
"情报预警-二维码ticket获取"
)
@GetMapping
(
"/getTicket"
)
public
ResponseResult
getTicket
(
@RequestParam
(
value
=
"pushTaskId"
)
String
pushTaskId
)
{
// 请求头
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
add
(
"token"
,
token
);
HttpEntity
<
Object
>
request
=
new
HttpEntity
<>(
headers
);
JSONObject
data
=
restTemplate
.
exchange
(
warnTicketUrl
,
HttpMethod
.
GET
,
request
,
JSONObject
.
class
,
pushTaskId
,
taskType
).
getBody
().
getJSONObject
(
"data"
);
return
ResponseResult
.
success
(
data
);
}
@ApiOperation
(
"情报预警-已扫码推送名单获取"
)
@GetMapping
(
"/pushRecipientsList"
)
public
ResponseResult
pushRecipientList
(
@RequestParam
(
value
=
"pushTaskId"
)
String
pushTaskId
){
// 请求头
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
add
(
"token"
,
token
);
HttpEntity
<
Object
>
request
=
new
HttpEntity
<>(
headers
);
JSONArray
data
=
restTemplate
.
exchange
(
warnPushRecipientsUrl
,
HttpMethod
.
GET
,
request
,
JSONObject
.
class
,
pushTaskId
,
taskType
).
getBody
().
getJSONArray
(
"data"
);
return
ResponseResult
.
success
(
data
);
}
@ApiOperation
(
"情报预警-删除推送人"
)
@GetMapping
(
"/deletePushRecipients"
)
public
ResponseResult
deletePushRecipients
(
@RequestParam
(
value
=
"recipientsId"
)
String
recipientsId
,
@RequestParam
(
value
=
"pushTaskId"
)
String
pushTaskId
){
// 请求头
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
add
(
"token"
,
token
);
HttpEntity
<
Object
>
request
=
new
HttpEntity
<>(
headers
);
JSONObject
data
=
restTemplate
.
exchange
(
deletePushRecipientsUrl
,
HttpMethod
.
GET
,
request
,
JSONObject
.
class
,
pushTaskId
,
recipientsId
,
taskType
).
getBody
().
getJSONObject
(
"data"
);
return
ResponseResult
.
success
(
data
);
}
@ApiOperation
(
"情报预警-渠道参与配置"
)
@PutMapping
(
"/channel/{pushTaskId}"
)
public
ResponseResult
channel
(
@ApiParam
(
name
=
"channelConfig"
,
value
=
"情报预警-渠道参与配置-json:{\"channel\": \"string\", \"configName\": \"string\", \"duplicate\": true, \"friendlyChannel\": true, \"markerTags\": [\"string\"], \"primary\": [true], \"pushInterval\": 0, \"threshold\": 0, \"used\": true}"
,
required
=
true
)
@RequestBody
JSONObject
channelConfig
,
@PathVariable
(
value
=
"pushTaskId"
)
String
pushTaskId
){
try
{
String
userId
=
JwtUtil
.
unsign
(
request
.
getHeader
(
jwtKey
),
Map
.
class
).
get
(
GenericAttribute
.
USER_ID
).
toString
();
String
userName
=
URLEncoder
.
encode
(
userService
.
queryUserInfo
(
userId
,
UserThreadLocal
.
getProjectId
()).
getNickname
(),
"UTF-8"
);
// 请求头参数设置
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
add
(
"token"
,
token
);
headers
.
add
(
"userId"
,
userId
);
headers
.
add
(
"userName"
,
userName
);
HttpEntity
<
String
>
request
=
new
HttpEntity
<>(
channelConfig
.
toJSONString
(),
headers
);
JSONObject
data
=
restTemplate
.
exchange
(
warnChannelUrl
,
HttpMethod
.
PUT
,
request
,
JSONObject
.
class
,
pushTaskId
).
getBody
().
getJSONObject
(
"data"
);
return
ResponseResult
.
success
(
data
);
}
catch
(
Exception
e
){
log
.
error
(
"情报预警-渠道参与配置失败"
,
e
);
return
ResponseResult
.
failure
(
"情报预警-渠道参与配置失败"
);
}
}
@ApiOperation
(
"情报预警-热点榜单配置"
)
@PutMapping
(
"/hotTop/{pushTaskId}"
)
public
ResponseResult
hotTop
(
@ApiParam
(
name
=
"hotTopConfig"
,
value
=
"情报预警-热点榜单配置-json:{\"configName\": \"string\", \"filterKeyword\": \"string\", \"firstTop\": true, \"introduction\": true,\"listType\": [\"string\"], \"newHeight\": true, \"pushInterval\": 0, \"topNewHeight\": 0, \"topOnceAgain\": true, \"used\": true, \"warnKeyword\": \"string\"}"
,
required
=
true
)
@RequestBody
JSONObject
hotTopConfig
,
@PathVariable
(
value
=
"pushTaskId"
)
String
pushTaskId
){
try
{
String
userId
=
JwtUtil
.
unsign
(
request
.
getHeader
(
jwtKey
),
Map
.
class
).
get
(
GenericAttribute
.
USER_ID
).
toString
();
String
userName
=
URLEncoder
.
encode
(
userService
.
queryUserInfo
(
userId
,
UserThreadLocal
.
getProjectId
()).
getNickname
(),
"UTF-8"
);
// 请求头参数设置
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
add
(
"token"
,
token
);
headers
.
add
(
"userId"
,
userId
);
headers
.
add
(
"userName"
,
userName
);
HttpEntity
<
String
>
request
=
new
HttpEntity
<>(
hotTopConfig
.
toJSONString
(),
headers
);
JSONObject
data
=
restTemplate
.
exchange
(
warnHotTopUrl
,
HttpMethod
.
PUT
,
request
,
JSONObject
.
class
,
pushTaskId
).
getBody
().
getJSONObject
(
"data"
);
return
ResponseResult
.
success
(
data
);
}
catch
(
Exception
e
){
log
.
error
(
"情报预警-热点榜单配置失败"
,
e
);
return
ResponseResult
.
failure
(
"情报预警-热点榜单配置失败"
);
}
}
@ApiOperation
(
"情报预警-热点事件配置"
)
@PutMapping
(
"/hotEvent/{pushTaskId}"
)
public
ResponseResult
hotEvent
(
@ApiParam
(
name
=
"hotEventConfig"
,
value
=
"情报预警-热点事件配置-json:{\"configName\": \"string\", \"contendsEvent\": [\"string\"], \"eventTop\": 0, \"ownEvent\": [\"string\"], \"timeCycles\": 0,\"used\": true, \"zhiWeiEvent\": [\"string\"]}"
,
required
=
true
)
@RequestBody
JSONObject
hotEventConfig
,
@PathVariable
(
value
=
"pushTaskId"
)
String
pushTaskId
){
try
{
String
userId
=
JwtUtil
.
unsign
(
request
.
getHeader
(
jwtKey
),
Map
.
class
).
get
(
GenericAttribute
.
USER_ID
).
toString
();
String
userName
=
URLEncoder
.
encode
(
userService
.
queryUserInfo
(
userId
,
UserThreadLocal
.
getProjectId
()).
getNickname
(),
"UTF-8"
);
// 请求头参数设置
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
add
(
"token"
,
token
);
headers
.
add
(
"userId"
,
userId
);
headers
.
add
(
"userName"
,
userName
);
HttpEntity
<
String
>
request
=
new
HttpEntity
<>(
hotEventConfig
.
toJSONString
(),
headers
);
JSONObject
data
=
restTemplate
.
exchange
(
warnHotEventUrl
,
HttpMethod
.
PUT
,
request
,
JSONObject
.
class
,
pushTaskId
).
getBody
().
getJSONObject
(
"data"
);
return
ResponseResult
.
success
(
data
);
}
catch
(
Exception
e
){
log
.
error
(
"情报预警-热点事件配置失败- "
,
e
);
return
ResponseResult
.
failure
(
"情报预警-热点事件配置失败"
);
}
}
@ApiOperation
(
"情报预警-舆情动态配置"
)
@PutMapping
(
"/yuQing/{pushTaskId}"
)
public
ResponseResult
yuQing
(
@ApiParam
(
name
=
"yuQingConfig"
,
value
=
"情报预警-舆情动态配置-json:{\"channelTypes\": [\"string\"], \"configName\": \"string\", \"contends\": [\"string\"], \"duplicate\": true, \"keyword\": \"string\", \"markerTags\": [\"string\"], \"primary\": [true], \"pushInterval\": 0, \"used\": true}"
,
required
=
true
)
@RequestBody
JSONObject
yuQingConfig
,
@PathVariable
(
value
=
"pushTaskId"
)
String
pushTaskId
){
try
{
String
userId
=
JwtUtil
.
unsign
(
request
.
getHeader
(
jwtKey
),
Map
.
class
).
get
(
GenericAttribute
.
USER_ID
).
toString
();
String
userName
=
URLEncoder
.
encode
(
userService
.
queryUserInfo
(
userId
,
UserThreadLocal
.
getProjectId
()).
getNickname
(),
"UTF-8"
);
// 请求头参数设置
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
add
(
"token"
,
token
);
headers
.
add
(
"userId"
,
userId
);
headers
.
add
(
"userName"
,
userName
);
HttpEntity
<
String
>
request
=
new
HttpEntity
<>(
yuQingConfig
.
toJSONString
(),
headers
);
JSONObject
data
=
restTemplate
.
exchange
(
warnYuQingUrl
,
HttpMethod
.
PUT
,
request
,
JSONObject
.
class
,
pushTaskId
).
getBody
().
getJSONObject
(
"data"
);
return
ResponseResult
.
success
(
data
);
}
catch
(
Exception
e
){
log
.
error
(
"情报预警-舆情动态配置失败"
,
e
);
return
ResponseResult
.
failure
(
"情报预警-舆情动态配置失败"
);
}
}
@ApiOperation
(
"情报预警-任务开关"
)
@PutMapping
(
"/taskSwitch"
)
public
ResponseResult
taskSwitch
(
@ApiParam
(
name
=
"info"
,
value
=
"推送任务-开关-json:{id:, used:true|false, configType:HOT_EVENT}"
,
required
=
true
)
@RequestBody
JSONObject
info
){
try
{
String
userId
=
JwtUtil
.
unsign
(
request
.
getHeader
(
jwtKey
),
Map
.
class
).
get
(
GenericAttribute
.
USER_ID
).
toString
();
String
userName
=
URLEncoder
.
encode
(
userService
.
queryUserInfo
(
userId
,
UserThreadLocal
.
getProjectId
()).
getNickname
(),
"UTF-8"
);
// 请求头参数设置
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
add
(
"token"
,
token
);
headers
.
add
(
"userId"
,
userId
);
headers
.
add
(
"userName"
,
userName
);
HttpEntity
<
String
>
request
=
new
HttpEntity
<>(
info
.
toJSONString
(),
headers
);
JSONObject
data
=
restTemplate
.
exchange
(
warnTaskSwitchUrl
,
HttpMethod
.
PUT
,
request
,
JSONObject
.
class
).
getBody
().
getJSONObject
(
"data"
);
return
ResponseResult
.
success
(
data
);
}
catch
(
Exception
e
){
log
.
error
(
"情报预警-任务开关失败"
,
e
);
return
ResponseResult
.
failure
(
"情报预警-任务开关失败"
);
}
}
}
src/main/java/com/zhiwei/brandkbs2/es/EsQueryTools.java
View file @
e6323c26
...
@@ -176,7 +176,7 @@ public class EsQueryTools {
...
@@ -176,7 +176,7 @@ public class EsQueryTools {
BoolQueryBuilder
contendQuery
=
QueryBuilders
.
boolQuery
();
BoolQueryBuilder
contendQuery
=
QueryBuilders
.
boolQuery
();
// 主品牌一定参与
// 主品牌一定参与
// contendQuery.should(QueryBuilders.termQuery("contend_id.keyword", "0"));
// contendQuery.should(QueryBuilders.termQuery("contend_id.keyword", "0"));
if
(
null
==
contends
)
{
if
(
CollectionUtils
.
isEmpty
(
contends
)
)
{
return
;
return
;
}
}
for
(
String
contendId
:
contends
)
{
for
(
String
contendId
:
contends
)
{
...
@@ -210,6 +210,20 @@ public class EsQueryTools {
...
@@ -210,6 +210,20 @@ public class EsQueryTools {
}
}
/**
/**
* 针对微博平台转发 查询语句
*
* @param isForward
* @return
*/
public
static
BoolQueryBuilder
assembleForwardQuery
(
boolean
isForward
)
{
BoolQueryBuilder
queryBuilder
=
QueryBuilders
.
boolQuery
();
BoolQueryBuilder
notWeiboCondition
=
QueryBuilders
.
boolQuery
();
queryBuilder
.
should
(
notWeiboCondition
.
mustNot
(
QueryBuilders
.
termQuery
(
"platform_id"
,
"5d02236e6395002a7c380b79"
)));
queryBuilder
.
should
(
QueryBuilders
.
termQuery
(
"is_forward"
,
isForward
));
return
queryBuilder
;
}
/**
* 字段不拆封,多字段 同关键词
* 字段不拆封,多字段 同关键词
*
*
* @param @param boolQueryBuilder
* @param @param boolQueryBuilder
...
...
src/main/java/com/zhiwei/brandkbs2/pojo/external/BaseMapCompound.java
0 → 100644
View file @
e6323c26
package
com
.
zhiwei
.
brandkbs2
.
pojo
.
external
;
import
com.zhiwei.brandkbs2.pojo.BaseMap
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
java.util.List
;
/**
* @ClassName: BaseMapCompound
* @Description BaseMapCompound
* @author: sjj
* @date: 2022-11-02 16:21
*/
@Data
@AllArgsConstructor
public
class
BaseMapCompound
{
/**
* 基础字段
*/
private
BaseMap
baseMap
;
/**
* 标签列表
*/
private
List
<
String
>
tags
;
}
\ No newline at end of file
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsChannelConfig.java
0 → 100644
View file @
e6323c26
package
com
.
zhiwei
.
brandkbs2
.
pojo
.
external
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
BrandkbsChannelConfig
{
private
String
configName
;
/**
* 友好渠道
*/
private
Boolean
friendlyChannel
;
/**
* 阈值
*/
private
int
threshold
;
/**
* 自定义渠道
*/
private
String
channel
;
/**
* 是否转发
*/
private
List
<
Boolean
>
primary
;
/**
* 舆情标签
*/
private
List
<
String
>
markerTags
;
/**
* 是否去重
*/
private
Boolean
duplicate
;
/**
* pushInterval 推送间隔
*/
private
Long
pushInterval
;
private
boolean
used
;
public
BrandkbsChannelConfig
()
{
this
.
used
=
false
;
this
.
pushInterval
=
10
*
60
*
1000L
;
}
}
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsChannelWarn.java
0 → 100644
View file @
e6323c26
package
com
.
zhiwei
.
brandkbs2
.
pojo
.
external
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
java.util.List
;
/**
* @ClassName: BrandkbsChannelWarn
* @Description BrandkbsChannelWarn
* @author: sjj
* @date: 2022-11-02 16:45
*/
@Data
@AllArgsConstructor
public
class
BrandkbsChannelWarn
{
/**
* 基础数据
*/
private
List
<
BaseMapCompound
>
list
;
/**
* 预警理由
*/
private
String
channelWarnReason
;
}
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsHotEventWarn.java
0 → 100644
View file @
e6323c26
package
com
.
zhiwei
.
brandkbs2
.
pojo
.
external
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
java.util.List
;
/**
* @ClassName: BrandkbsHotEventWarn
* @Description BrandkbsHotEventWarn
* @author: sjj
* @date: 2022-11-02 16:49
*/
@Data
@AllArgsConstructor
public
class
BrandkbsHotEventWarn
{
private
List
<
HotEvent
>
hotEventList
;
@Data
public
static
class
HotEvent
{
/**
* 类别名称
*/
private
String
type
;
/**
* 事件标题
*/
private
String
title
;
/**
* 事件情感倾向
*/
private
String
emotion
;
/**
* 总传播量
*/
private
Long
totalDisseminationVolume
;
/**
* 参与渠道数
*/
private
Long
totalChannelVolume
;
/**
* 开始时间
*/
private
Long
startTime
;
/**
* 影响力
*/
private
double
influence
;
/**
* 标签列表
*/
private
List
<
String
>
tagList
;
}
}
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsHotTopConfig.java
0 → 100644
View file @
e6323c26
package
com
.
zhiwei
.
brandkbs2
.
pojo
.
external
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
BrandkbsHotTopConfig
{
private
String
configName
;
/**
* 预警关键字
*/
private
String
warnKeyword
;
/**
* 过滤词
*/
private
String
filterKeyword
;
/**
* 榜单类型
*/
private
List
<
String
>
listType
;
/**
* 预警类型 首次上榜
*/
private
Boolean
firstTop
;
/**
*
*/
private
Boolean
newHeight
;
/**
* 新高
*/
private
int
topNewHeight
;
/**
* 再一次上榜
*/
private
Boolean
topOnceAgain
;
private
Boolean
introduction
;
/**
* pushInterval 推送间隔
*/
private
Long
pushInterval
;
private
boolean
used
;
public
BrandkbsHotTopConfig
()
{
this
.
used
=
false
;
this
.
pushInterval
=
5
*
60
*
1000L
;
}
}
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsWarnTemplate.java
0 → 100644
View file @
e6323c26
package
com
.
zhiwei
.
brandkbs2
.
pojo
.
external
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
/**
* @ClassName: BrandkbsWarnTemplate
* @Description BrandkbsWarnTemplate
* @author: sjj
* @date: 2022-11-03 13:48
*/
@Data
@AllArgsConstructor
public
class
BrandkbsWarnTemplate
<
T
>
{
int
firstCount
;
String
keyword1
;
String
keyword2
;
String
keyword3
;
String
keyword4
;
T
warnDetails
;
}
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsYuQingConfig.java
0 → 100644
View file @
e6323c26
package
com
.
zhiwei
.
brandkbs2
.
pojo
.
external
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
BrandkbsYuQingConfig
{
private
String
configName
;
/**
* 发声渠道
*/
private
List
<
String
>
channelTypes
;
/**
* 文章类型
*/
private
List
<
Boolean
>
primary
;
/**
* 本品舆情
*/
private
List
<
String
>
markerTags
;
/**
* 竞品舆情
*/
private
List
<
String
>
contends
;
/**
* 是否去重
*/
private
Boolean
duplicate
;
/**
* 关键字命中
*/
private
String
keyword
;
/**
* pushInterval 推送间隔
*/
private
Long
pushInterval
;
private
boolean
used
;
public
BrandkbsYuQingConfig
()
{
this
.
used
=
false
;
this
.
pushInterval
=
60
*
60
*
1000L
;
}
}
src/main/java/com/zhiwei/brandkbs2/pojo/external/BrandkbsYuQingWarn.java
0 → 100644
View file @
e6323c26
package
com
.
zhiwei
.
brandkbs2
.
pojo
.
external
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
java.util.List
;
/**
* @ClassName: BrandkbsYuQingWarn
* @Description BrandkbsYuQingWarn
* @author: sjj
* @date: 2022-11-02 16:10
*/
@Data
@AllArgsConstructor
public
class
BrandkbsYuQingWarn
{
/**
* 基础数据
*/
private
List
<
BaseMapCompound
>
list
;
}
src/main/java/com/zhiwei/brandkbs2/service/impl/MarkDataServiceImpl.java
View file @
e6323c26
...
@@ -876,7 +876,11 @@ public class MarkDataServiceImpl implements MarkDataService {
...
@@ -876,7 +876,11 @@ public class MarkDataServiceImpl implements MarkDataService {
@Override
@Override
public
List
<
JSONObject
>
searchMarkDataByEvent
(
Event
event
)
{
public
List
<
JSONObject
>
searchMarkDataByEvent
(
Event
event
)
{
String
linkedGroupId
=
projectService
.
getProjectByContendId
(
event
.
getProjectId
(),
event
.
getContendId
()).
getBrandLinkedGroupId
();
String
linkedGroupId
=
projectService
.
getProjectByContendId
(
event
.
getProjectId
(),
event
.
getContendId
()).
getBrandLinkedGroupId
();
return
searchMarkDataByTime
(
event
.
getProjectId
(),
linkedGroupId
,
event
.
getContendId
(),
event
.
getStartTime
(),
event
.
getEndTime
(),
EVENT_FETCH_SOURCE
);
Long
endTime
=
null
;
if
(
event
.
isEndStatus
())
{
endTime
=
event
.
getEndTime
();
}
return
searchMarkDataByTime
(
event
.
getProjectId
(),
linkedGroupId
,
event
.
getContendId
(),
event
.
getStartTime
(),
endTime
,
EVENT_FETCH_SOURCE
);
}
}
@Override
@Override
...
...
src/main/java/com/zhiwei/brandkbs2/service/impl/ProjectWarnServiceImpl.java
View file @
e6323c26
package
com
.
zhiwei
.
brandkbs2
.
service
.
impl
;
package
com
.
zhiwei
.
brandkbs2
.
service
.
impl
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.zhiwei.brandkbs2.common.GenericAttribute
;
import
com.zhiwei.brandkbs2.config.Constant
;
import
com.zhiwei.brandkbs2.es.EsClientDao
;
import
com.zhiwei.brandkbs2.es.EsQueryTools
;
import
com.zhiwei.brandkbs2.model.ResponseResult
;
import
com.zhiwei.brandkbs2.model.ResponseResult
;
import
com.zhiwei.brandkbs2.pojo.AbstractProject
;
import
com.zhiwei.brandkbs2.pojo.BaseMap
;
import
com.zhiwei.brandkbs2.pojo.external.*
;
import
com.zhiwei.brandkbs2.service.ProjectService
;
import
com.zhiwei.brandkbs2.service.ProjectService
;
import
com.zhiwei.brandkbs2.service.ProjectWarnService
;
import
com.zhiwei.brandkbs2.service.ProjectWarnService
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.elasticsearch.index.query.BoolQueryBuilder
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.search.SearchHits
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
java.io.IOException
;
import
java.util.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -18,30 +32,36 @@ import java.util.stream.Collectors;
...
@@ -18,30 +32,36 @@ import java.util.stream.Collectors;
*/
*/
@Service
(
"projectWarnServiceImpl"
)
@Service
(
"projectWarnServiceImpl"
)
public
class
ProjectWarnServiceImpl
implements
ProjectWarnService
{
public
class
ProjectWarnServiceImpl
implements
ProjectWarnService
{
private
static
final
Logger
log
=
LogManager
.
getLogger
(
ProjectWarnServiceImpl
.
class
);
private
static
final
Long
ONE_MINUTE
=
60
*
1000L
;
private
static
final
Long
ONE_MINUTE
=
60
*
1000L
;
@Resource
(
name
=
"projectServiceImpl"
)
@Resource
(
name
=
"projectServiceImpl"
)
ProjectService
projectService
;
ProjectService
projectService
;
@Resource
(
name
=
"esClientDao"
)
EsClientDao
esClientDao
;
@Override
@Override
public
ResponseResult
getProjectWarnCriteria
(
String
projectId
,
String
type
)
{
public
ResponseResult
getProjectWarnCriteria
(
String
projectId
,
String
type
)
{
Map
<
String
,
Object
>
res
=
new
HashMap
<>();
Map
<
String
,
Object
>
res
=
new
HashMap
<>();
switch
(
type
)
{
switch
(
type
)
{
case
"舆情动态"
:
case
"舆情动态"
:
warnCriteriaAddSimple
(
res
,
"channelTypes"
,
Arrays
.
asList
(
"央级"
,
"门户"
,
"财经"
,
"科技"
,
"其他
"
));
CriteriaHelper
.
warnCriteriaAddSimple
(
res
,
"channelTypes"
,
Arrays
.
asList
(
"央级"
,
"门户"
,
"财经"
,
"科技"
,
"其他"
),
Collections
.
singletonList
(
"央级
"
));
warnCriteriaAdd
(
res
,
"primary"
,
Arrays
.
asList
(
"原创"
,
"转发"
),
Arrays
.
asList
(
false
,
true
),
"说明:仅对微博平台数据生效"
);
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"primary"
,
Arrays
.
asList
(
"原创"
,
"转发"
),
Arrays
.
asList
(
false
,
true
),
Collections
.
singletonList
(
"原创"
)
);
warnCriteriaAddSimple
(
res
,
"markerTags"
,
Arrays
.
asList
(
"正面"
,
"中性"
,
"负面"
));
CriteriaHelper
.
warnCriteriaAddSimple
(
res
,
"markerTags"
,
Arrays
.
asList
(
"正面"
,
"中性"
,
"负面"
),
Collections
.
singletonList
(
"负面"
));
List
<
JSONObject
>
brands
=
projectService
.
getBrands
(
projectId
,
false
);
List
<
JSONObject
>
brands
=
projectService
.
getBrands
(
projectId
,
false
);
List
<
String
>
nameList
=
brands
.
stream
().
map
(
json
->
json
.
getString
(
"brandName"
)).
collect
(
Collectors
.
toList
());
List
<
String
>
nameList
=
brands
.
stream
().
map
(
json
->
json
.
getString
(
"brandName"
)).
collect
(
Collectors
.
toList
());
List
<
String
>
idList
=
brands
.
stream
().
map
(
json
->
json
.
getString
(
"contendId"
)).
collect
(
Collectors
.
toList
());
List
<
String
>
idList
=
brands
.
stream
().
map
(
json
->
json
.
getString
(
"contendId"
)).
collect
(
Collectors
.
toList
());
warnCriteriaAdd
(
res
,
"contends"
,
nameList
,
idList
);
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"contends"
,
nameList
,
idList
);
warnCriteriaAdd
(
res
,
"keyword"
,
null
);
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"keyword"
,
null
);
warnCriteriaAdd
(
res
,
"duplicate"
,
Arrays
.
asList
(
"去重"
,
"不去重"
),
Arrays
.
asList
(
true
,
false
));
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"duplicate"
,
Arrays
.
asList
(
"去重"
,
"不去重"
),
Arrays
.
asList
(
true
,
false
),
Collections
.
singletonList
(
"不去重"
));
warnCriteriaAdd
(
res
,
"pushInterval"
,
Arrays
.
asList
(
"10min"
,
"30min"
,
"60min"
),
Arrays
.
asList
(
10
*
ONE_MINUTE
,
30
*
ONE_MINUTE
,
60
*
ONE_MINUTE
));
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"pushInterval"
,
Arrays
.
asList
(
"10min"
,
"30min"
,
"60min"
),
Arrays
.
asList
(
10
*
ONE_MINUTE
,
30
*
ONE_MINUTE
,
60
*
ONE_MINUTE
),
Collections
.
singletonList
(
"10min"
));
break
;
break
;
case
"渠道参与"
:
case
"渠道参与"
:
warnCriteriaAdd
(
res
,
"friendlyChannel"
,
Arrays
.
asList
(
"友好渠道"
,
"敏感渠道"
,
"自定义渠道"
),
Arrays
.
asList
(
true
,
false
,
null
));
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"friendlyChannel"
,
Arrays
.
asList
(
"友好渠道"
,
"敏感渠道"
,
"自定义渠道"
),
Arrays
.
asList
(
true
,
false
,
null
),
Collections
.
singletonList
(
"自定义渠道"
));
List
<
Map
<
String
,
Object
>>
thresholdValue
=
new
ArrayList
<>();
List
<
Map
<
String
,
Object
>>
thresholdValue
=
new
ArrayList
<>();
for
(
String
name
:
Arrays
.
asList
(
"友好渠道 友好指数"
,
"敏感渠道 敏感指数"
))
{
for
(
String
name
:
Arrays
.
asList
(
"友好渠道 友好指数"
,
"敏感渠道 敏感指数"
))
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
...
@@ -50,26 +70,30 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
...
@@ -50,26 +70,30 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
thresholdValue
.
add
(
map
);
thresholdValue
.
add
(
map
);
}
}
res
.
put
(
"threshold"
,
thresholdValue
);
res
.
put
(
"threshold"
,
thresholdValue
);
warnCriteriaAdd
(
res
,
"channel"
,
null
);
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"channel"
,
null
);
warnCriteriaAdd
(
res
,
"primary"
,
Arrays
.
asList
(
"原创"
,
"转发"
),
Arrays
.
asList
(
false
,
true
),
"说明:仅对微博平台数据生效"
);
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"primary"
,
Arrays
.
asList
(
"原创"
,
"转发"
),
Arrays
.
asList
(
false
,
true
),
Collections
.
singletonList
(
"原创"
));
warnCriteriaAddSimple
(
res
,
"markerTags"
,
Arrays
.
asList
(
"正面"
,
"中性"
,
"负面"
));
CriteriaHelper
.
warnCriteriaAddSimple
(
res
,
"markerTags"
,
Arrays
.
asList
(
"正面"
,
"中性"
,
"负面"
),
Collections
.
singletonList
(
"负面"
));
warnCriteriaAdd
(
res
,
"duplicate"
,
Arrays
.
asList
(
"去重"
,
"不去重"
),
Arrays
.
asList
(
true
,
false
));
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"duplicate"
,
Arrays
.
asList
(
"去重"
,
"不去重"
),
Arrays
.
asList
(
true
,
false
),
Collections
.
singletonList
(
"去重"
));
warnCriteriaAdd
(
res
,
"pushInterval"
,
Arrays
.
asList
(
"10min"
,
"30min"
,
"60min"
),
Arrays
.
asList
(
10
*
ONE_MINUTE
,
30
*
ONE_MINUTE
,
60
*
ONE_MINUTE
));
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"pushInterval"
,
Arrays
.
asList
(
"10min"
,
"30min"
,
"60min"
),
Arrays
.
asList
(
10
*
ONE_MINUTE
,
30
*
ONE_MINUTE
,
60
*
ONE_MINUTE
),
Collections
.
singletonList
(
"10min"
));
break
;
break
;
case
"热点事件"
:
case
"热点事件"
:
warnCriteriaAddSimple
(
res
,
"ownEvent"
,
Arrays
.
asList
(
"正面"
,
"中性"
,
"负面"
));
CriteriaHelper
.
warnCriteriaAddSimple
(
res
,
"ownEvent"
,
Arrays
.
asList
(
"正面"
,
"中性"
,
"负面"
)
,
Arrays
.
asList
(
"正面"
,
"中性"
,
"负面"
));
List
<
JSONObject
>
brands2
=
projectService
.
getBrands
(
projectId
,
false
);
List
<
JSONObject
>
brands2
=
projectService
.
getBrands
(
projectId
,
false
);
List
<
String
>
nameList2
=
brands2
.
stream
().
map
(
json
->
json
.
getString
(
"brandName"
)).
collect
(
Collectors
.
toList
());
List
<
String
>
nameList2
=
brands2
.
stream
().
map
(
json
->
json
.
getString
(
"brandName"
)).
collect
(
Collectors
.
toList
());
List
<
String
>
idList2
=
brands2
.
stream
().
map
(
json
->
json
.
getString
(
"contendId"
)).
collect
(
Collectors
.
toList
());
List
<
String
>
idList2
=
brands2
.
stream
().
map
(
json
->
json
.
getString
(
"contendId"
)).
collect
(
Collectors
.
toList
());
warnCriteriaAdd
(
res
,
"contendsEvent"
,
nameList2
,
idList2
);
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"contendsEvent"
,
nameList2
,
idList2
,
nameList2
);
warnCriteriaAddSimple
(
res
,
"zhiWeiEvent"
,
Arrays
.
asList
(
"社会"
,
"互联网"
,
"政务"
,
"财经"
,
"企业"
,
"娱乐"
,
"灾难"
,
"违法犯罪"
,
"国际"
,
"体育"
,
"谣言"
),
"说明:知微事见支持选择事件的领域"
);
List
<
String
>
zhiWeiEventList
=
Arrays
.
asList
(
"社会"
,
"互联网"
,
"政务"
,
"财经"
,
"企业"
,
"娱乐"
,
"灾难"
,
"违法犯罪"
,
"国际"
,
"体育"
,
"谣言"
);
warnCriteriaAdd
(
res
,
"eventTop"
,
Arrays
.
asList
(
"TOP5"
,
"TOP10"
),
Arrays
.
asList
(
5
,
10
),
"说明:按影响力选取;若事件数不足,以实际为准"
);
CriteriaHelper
.
warnCriteriaAddSimple
(
res
,
"zhiWeiEvent"
,
zhiWeiEventList
,
zhiWeiEventList
);
warnCriteriaAdd
(
res
,
"timeCycles"
,
Arrays
.
asList
(
"周一"
,
"周二"
,
"周三"
,
"周四"
,
"周五"
,
"周六"
,
"周日"
),
Arrays
.
asList
(
2
,
3
,
4
,
5
,
6
,
7
,
1
),
"说明:系统推送时间为08"
+
":00"
);
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"eventTop"
,
Arrays
.
asList
(
"TOP5"
,
"TOP10"
),
Arrays
.
asList
(
5
,
10
),
Collections
.
singletonList
(
"TOP10"
));
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"timeCycles"
,
Arrays
.
asList
(
"周一"
,
"周二"
,
"周三"
,
"周四"
,
"周五"
,
"周六"
,
"周日"
),
Arrays
.
asList
(
2
,
3
,
4
,
5
,
6
,
7
,
1
),
Collections
.
singletonList
(
"周一"
));
break
;
break
;
case
"上榜热搜"
:
case
"上榜热搜"
:
warnCriteriaAddSimple
(
res
,
"warnKeyword"
,
null
);
CriteriaHelper
.
warnCriteriaAddSimple
(
res
,
"warnKeyword"
,
null
);
warnCriteriaAddSimple
(
res
,
"filterKeyword"
,
null
);
CriteriaHelper
.
warnCriteriaAddSimple
(
res
,
"filterKeyword"
,
null
);
warnCriteriaAddSimple
(
res
,
"listType"
,
Arrays
.
asList
(
"微博热搜"
,
"微博话题"
,
"微博预热"
,
"头条热搜"
,
"抖音热搜"
,
"知乎热搜"
,
"B站热搜"
,
"快手热榜"
));
CriteriaHelper
.
warnCriteriaAddSimple
(
res
,
"listType"
,
Arrays
.
asList
(
"微博热搜"
,
"微博话题"
,
"微博预热"
,
"头条热搜"
,
"抖音热搜"
,
"知乎热搜"
,
"B站热搜"
,
"快手热榜"
),
Collections
.
singletonList
(
"微博热搜"
));
List
<
Map
<
String
,
Object
>>
topNewHeight
=
new
ArrayList
<>();
List
<
Map
<
String
,
Object
>>
topNewHeight
=
new
ArrayList
<>();
for
(
int
i
:
Arrays
.
asList
(
3
,
5
,
10
,
20
,
50
))
{
for
(
int
i
:
Arrays
.
asList
(
3
,
5
,
10
,
20
,
50
))
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
...
@@ -78,8 +102,10 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
...
@@ -78,8 +102,10 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
topNewHeight
.
add
(
map
);
topNewHeight
.
add
(
map
);
}
}
res
.
put
(
"topNewHeight"
,
topNewHeight
);
res
.
put
(
"topNewHeight"
,
topNewHeight
);
warnCriteriaAdd
(
res
,
"warnType"
,
Arrays
.
asList
(
"首次上榜"
,
"排名新高"
,
"掉榜和再次上榜"
,
"导语(仅支持微博平台)"
),
Arrays
.
asList
(
"firstTop"
,
"newHeight"
,
"topOnceAgain"
,
"introduction"
));
List
<
String
>
warnTypeList
=
Arrays
.
asList
(
"首次上榜"
,
"排名新高"
,
"掉榜和再次上榜"
,
"导语(仅支持微博平台)"
);
warnCriteriaAdd
(
res
,
"pushInterval"
,
Collections
.
singletonList
(
"5min"
),
Collections
.
singletonList
(
5
*
ONE_MINUTE
));
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"warnType"
,
warnTypeList
,
Arrays
.
asList
(
"firstTop"
,
"newHeight"
,
"topOnceAgain"
,
"introduction"
),
warnTypeList
);
CriteriaHelper
.
warnCriteriaAdd
(
res
,
"pushInterval"
,
Collections
.
singletonList
(
"5min"
),
Collections
.
singletonList
(
5
*
ONE_MINUTE
),
Collections
.
singletonList
(
"5min"
));
break
;
break
;
case
"案例上新"
:
case
"案例上新"
:
return
ResponseResult
.
success
();
return
ResponseResult
.
success
();
...
@@ -89,58 +115,144 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
...
@@ -89,58 +115,144 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
return
ResponseResult
.
success
(
res
);
return
ResponseResult
.
success
(
res
);
}
}
private
<
T
>
void
warnCriteriaAdd
(
Map
<
String
,
Object
>
res
,
String
key
,
List
<
String
>
listValueName
,
List
<
T
>
listValueId
)
{
private
ResponseResult
yuqingWaringReal
(
String
projectId
,
BrandkbsYuQingConfig
config
)
{
warnCriteriaAdd
(
res
,
key
,
listValueName
,
listValueId
,
null
);
String
contendId
=
Constant
.
PRIMARY_CONTEND_ID
;
}
AbstractProject
project
=
null
;
try
{
project
=
projectService
.
getProjectByContendId
(
projectId
,
contendId
);
log
.
info
(
"获取舆情动态预警开始,project:{}"
,
project
.
getProjectName
());
private
<
T
>
void
warnCriteriaAdd
(
Map
<
String
,
Object
>
res
,
String
key
,
List
<
String
>
listValueName
,
List
<
T
>
listValueId
,
String
annotation
)
{
EsClientDao
.
SearchHelper
helper
=
EsClientDao
.
createSearchHelper
();
if
(
listValueName
.
size
()
!=
listValueId
.
size
())
{
// 发声渠道
throw
new
IllegalArgumentException
(
"listValueName-size与listValueId-size不符!"
);
BoolQueryBuilder
postFilter
=
EsQueryTools
.
assembleCacheMapsQuery
(
projectId
,
project
.
getBrandLinkedGroupId
(),
contendId
,
config
.
getChannelTypes
());
}
// 文章类型
List
<
Map
<
String
,
Object
>>
value
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
config
.
getPrimary
())
&&
config
.
getPrimary
().
size
()
==
1
)
{
for
(
int
i
=
0
;
i
<
listValueName
.
size
();
i
++)
{
postFilter
.
must
(
EsQueryTools
.
assembleForwardQuery
(
config
.
getPrimary
().
get
(
0
)));
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
}
String
name
=
listValueName
.
get
(
i
);
// 本品舆情+竞品舆情
if
(
name
.
contains
(
"key:"
))
{
BoolQueryBuilder
sourceBuilder
=
QueryBuilders
.
boolQuery
();
map
.
put
(
name
.
substring
(
4
),
listValueId
.
get
(
i
));
if
(
CollectionUtils
.
isNotEmpty
(
config
.
getMarkerTags
()))
{
}
else
{
sourceBuilder
.
should
(
QueryBuilders
.
termQuery
(
"brandkbs_mark_cache_maps.name.keyword"
,
config
.
getMarkerTags
()));
map
.
put
(
"name"
,
name
);
}
map
.
put
(
"id"
,
listValueId
.
get
(
i
));
if
(
CollectionUtils
.
isNotEmpty
(
config
.
getContends
()))
{
EsQueryTools
.
assembleContendsQuery
(
sourceBuilder
,
config
.
getContends
());
}
}
value
.
add
(
map
);
postFilter
.
must
(
sourceBuilder
);
// 关键词命中
postFilter
.
must
(
EsQueryTools
.
assembleNormalKeywordQuery
(
config
.
getKeyword
(),
new
String
[]{
GenericAttribute
.
ES_IND_FULL_TEXT
}));
SearchHits
searchHits
=
esClientDao
.
searchHits
(
helper
);
// 开启去重
if
(
Boolean
.
TRUE
.
equals
(
config
.
getDuplicate
()))
{
}
log
.
info
(
"获取舆情动态预警结束,project:{}"
,
project
.
getProjectName
());
}
catch
(
IOException
e
)
{
log
.
info
(
"获取舆情动态预警失败,project:{}"
,
project
.
getProjectName
(),
e
);
}
}
warnCriteriaAdd
(
res
,
key
,
value
,
null
);
return
null
;
}
private
<
T
>
BrandkbsWarnTemplate
<
T
>
getWarnTemplate
(
T
t
)
{
int
firstCount
=
1
;
String
keyword1
=
"【品见】舆情动态-阿里"
;
String
keyword2
=
"央级、门户媒体,负面(本品)"
;
String
keyword3
=
"2022.02.03 08:00 ~ 2022.02.03 08:10"
;
String
keyword4
=
"网媒-人民网\n1、顺丰快递全球发售1.31亿股,引入阿里巴巴等\n平媒-人民日报"
;
return
new
BrandkbsWarnTemplate
<>(
firstCount
,
keyword1
,
keyword2
,
keyword3
,
keyword4
,
t
);
}
private
BaseMapCompound
getBaseMapCompoundTemplate
()
{
BaseMap
baseMap
=
new
BaseMap
();
baseMap
.
setTitle
(
"和府捞面新故事难讲"
);
baseMap
.
setContent
(
"和府捞面新故事难讲2022-11-0114:32新消费和府捞面来源:燃次元(ID:chaintruth)作者:张琳编辑:曹杨作为消费界的跨界流量担当,这次盯上咖啡的是面馆。作为昔日网红中式面馆的和府捞面,其旗下新品牌“PickMEの咖啡&热食”门店已经在上海外滩SOHO落地。和府捞面官方小程序显示,PickME目前售卖的品类涵盖拌饭、拌面、烘焙小食和咖啡。咖啡共有6款,包括PickMe美式、拿铁、大白梨特调生椰拿铁、桑葚特调拿铁等,售价在12-20元之间。图/“PickMEの咖啡&热食”门店示意图,来源/和府捞面官网2013年8月,和府捞面的第一家门店在江苏如皋大润发正式开业。凭借“书房里的养生面”这一独特定位,很快便从一众同质化的传统面馆中脱颖而出,不但吸引了大量食客前去打卡,还成功抬高了面馆的身价,将一碗中式面条卖到了40-50元的价格。新颖的概念也让和府捞面成了资本眼中的“香饽饽”。企查查显示,和府捞面至今共获得6次融资,金额分别为3000万元、5000万元、1亿元、2.15亿元、4.5亿元以及8亿元。其最近一次融资是在2021年7月,由CMC资本领投,众为资本,龙湖资本,腾讯投资等机构跟投,投后估值金额约70亿元人民币。对于本轮融资,和府表示,将主要用于深入布局全产业链体系、新品牌打造、渠道建设及数字化能力构建等方面。很显然,“PickMEの咖啡&热食”就是和府捞面要打造的新品牌,也成为了和府捞面众多“副业大军”中的一员。实际上,和府捞面在产业链的尝试从未止步,先试水火锅,开出“和府火锅和她的面”,而后趁着“餐饮+小酒馆”的热潮,推出子品牌“和府小面小酒”,再之后是主打聚会场景的“财神小排档”。今年5月,和府捞面又杀入兰州拉面赛道,开出首家“阿兰家兰州牛肉面”。对此,艾媒咨询CEO兼首席分析师张毅对燃次元表示,和府捞面在其“捞面”主营业务上已经打通了连锁经营的模式,将这一模式复制到其它子品牌上,可以增加整体营收规模,这也是和府捞面多次尝试发展子品牌的主要原因。不过,从和府捞面其它业务的经营上来看,似乎单纯的复制“捞面”模式并不奏效。比如,试水不足一年时间,和府捞面的火锅业务就“折戟”了,其北京、上海、济南等地的门店已将店名从“和府火锅和她的面”变更为“和府捞面”。除此之外,其它副业也并未在消费者中激起太多“水花”。零售电商行业专家、百联咨询创始人庄帅对燃次元表示,企业发展多业态大都是为了更好地盈利,但成功的却极少,“原因在于每种业态的组织管理、选址、经营模式、供应链体系、客户服务、消费习惯和竞争都很不一样,目前全球范围能做好三个以上规模化业态的零售企业非常少。”事实上,在竞争愈发激烈且同质化严重的新中式面馆赛道里,“书房里的捞面”对消费者的吸引力正在削弱。行至资本市场大门前,是继续讲好捞面的故事还是找到“第二增长曲线”,对和府捞面来说,都极具挑战。"
);
baseMap
.
setPlatform
(
"网媒"
);
baseMap
.
setSource
(
"i黑马"
);
baseMap
.
setEmotion
(
"正面"
);
baseMap
.
setUrl
(
"http://www.iheima.com/article-346459.html"
);
List
<
String
>
tags
=
new
ArrayList
<>();
tags
.
add
(
"央级"
);
tags
.
add
(
"原创"
);
tags
.
add
(
"腾讯"
);
return
new
BaseMapCompound
(
baseMap
,
tags
);
}
}
private
void
warnCriteriaAddSimple
(
Map
<
String
,
Object
>
res
,
String
key
,
List
<
String
>
listValue
)
{
private
BrandkbsHotEventWarn
.
HotEvent
getHotEventTemplate
()
{
warnCriteriaAddSimple
(
res
,
key
,
listValue
,
null
);
BrandkbsHotEventWarn
.
HotEvent
hotEvent
=
new
BrandkbsHotEventWarn
.
HotEvent
();
hotEvent
.
setType
(
"品牌动态"
);
hotEvent
.
setTitle
(
"中国电动汽车百人讨论会"
);
hotEvent
.
setEmotion
(
"正面"
);
hotEvent
.
setTotalDisseminationVolume
(
533L
);
hotEvent
.
setTotalChannelVolume
(
429L
);
hotEvent
.
setStartTime
(
1664553600000L
);
hotEvent
.
setInfluence
(
83.2
);
return
hotEvent
;
}
}
private
void
warnCriteriaAddSimple
(
Map
<
String
,
Object
>
res
,
String
key
,
List
<
String
>
listValue
,
String
annotation
)
{
@Override
List
<
Map
<
String
,
Object
>>
value
=
null
;
public
ResponseResult
getYuqingWaring
(
String
projectId
,
BrandkbsYuQingConfig
config
)
{
if
(
null
!=
listValue
)
{
return
ResponseResult
.
success
(
getWarnTemplate
(
new
BrandkbsYuQingWarn
(
Arrays
.
asList
(
getBaseMapCompoundTemplate
()))));
value
=
new
ArrayList
<>();
}
for
(
String
str
:
listValue
)
{
@Override
public
ResponseResult
getChannelWaring
(
String
projectId
,
BrandkbsChannelConfig
brandkbsChannelConfig
)
{
return
ResponseResult
.
success
(
getWarnTemplate
(
new
BrandkbsChannelWarn
(
Arrays
.
asList
(
getBaseMapCompoundTemplate
()),
"敏感渠道(敏感指数>70)"
)));
}
@Override
public
ResponseResult
getHotEventWaring
(
String
projectId
,
BrandkbsHotEventConfig
brandkbsHotEventConfig
)
{
return
ResponseResult
.
success
(
getWarnTemplate
(
new
BrandkbsHotEventWarn
(
Arrays
.
asList
(
getHotEventTemplate
()))));
}
public
static
class
CriteriaHelper
{
public
static
<
T
>
void
warnCriteriaAdd
(
Map
<
String
,
Object
>
res
,
String
key
,
List
<
String
>
listValueName
,
List
<
T
>
listValueId
,
List
<
String
>
defaultValue
)
{
if
(
null
==
listValueName
)
{
warnCriteriaAdd
(
res
,
key
,
null
);
return
;
}
if
(
listValueName
.
size
()
!=
listValueId
.
size
())
{
throw
new
IllegalArgumentException
(
"listValueName-size与listValueId-size不符!"
);
}
List
<
Map
<
String
,
Object
>>
value
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
listValueName
.
size
();
i
++)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"name"
,
str
);
String
name
=
listValueName
.
get
(
i
);
map
.
put
(
"id"
,
str
);
if
(
name
.
contains
(
"key:"
))
{
map
.
put
(
name
.
substring
(
4
),
listValueId
.
get
(
i
));
}
else
{
map
.
put
(
"name"
,
name
);
map
.
put
(
"id"
,
listValueId
.
get
(
i
));
}
value
.
add
(
map
);
value
.
add
(
map
);
}
}
// 设置默认值
if
(
null
!=
defaultValue
)
{
Map
<
String
,
Object
>
defaultMap
=
new
HashMap
<>();
defaultMap
.
put
(
"defaultValue"
,
defaultValue
);
value
.
add
(
defaultMap
);
}
warnCriteriaAdd
(
res
,
key
,
value
);
}
}
warnCriteriaAdd
(
res
,
key
,
value
,
annotation
);
}
private
void
warnCriteriaAdd
(
Map
<
String
,
Object
>
res
,
String
key
,
List
<
Map
<
String
,
Object
>>
value
)
{
warnCriteriaAdd
(
res
,
key
,
value
,
null
);
}
private
void
warnCriteriaAdd
(
Map
<
String
,
Object
>
res
,
String
key
,
List
<
Map
<
String
,
Object
>>
value
,
String
annotation
)
{
public
static
<
T
>
void
warnCriteriaAdd
(
Map
<
String
,
Object
>
res
,
String
key
,
List
<
String
>
listValueName
,
List
<
T
>
listValueId
)
{
// Map<String, Object> element = new HashMap<>();
warnCriteriaAdd
(
res
,
key
,
listValueName
,
listValueId
,
null
);
// element.put(key, value);
}
// if (null != annotation) {
// element.put("annotation", annotation);
public
static
void
warnCriteriaAddSimple
(
Map
<
String
,
Object
>
res
,
String
key
,
List
<
String
>
listValue
,
List
<
String
>
defaultValue
)
{
// }
List
<
String
>
listValueId
=
null
;
res
.
put
(
key
,
value
);
if
(
null
!=
listValue
)
{
listValueId
=
new
ArrayList
<>(
listValue
);
}
warnCriteriaAdd
(
res
,
key
,
listValue
,
listValueId
,
defaultValue
);
}
public
static
void
warnCriteriaAddSimple
(
Map
<
String
,
Object
>
res
,
String
key
,
List
<
String
>
listValue
)
{
warnCriteriaAddSimple
(
res
,
key
,
listValue
,
null
);
}
public
static
void
warnCriteriaAdd
(
Map
<
String
,
Object
>
res
,
String
key
,
List
<
Map
<
String
,
Object
>>
value
)
{
res
.
put
(
key
,
value
);
}
}
}
}
}
src/main/resources/application-dev.properties
View file @
e6323c26
...
@@ -79,4 +79,15 @@ istarshine.addIStarShineKSData.url=https://istarshine-service.zhiweidata.com/ist
...
@@ -79,4 +79,15 @@ istarshine.addIStarShineKSData.url=https://istarshine-service.zhiweidata.com/ist
istarshine.getIStarShineKSInfoData.url
=
https://istarshine-service.zhiweidata.com/istarshine/ks/getIStarShineKSInfoData?taskId={1}&appId=6183571e0d710000f6003a12
istarshine.getIStarShineKSInfoData.url
=
https://istarshine-service.zhiweidata.com/istarshine/ks/getIStarShineKSInfoData?taskId={1}&appId=6183571e0d710000f6003a12
whole.search.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/yuqing
whole.search.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/yuqing
whole.searchCriteria.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/pt
whole.searchCriteria.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/pt
whole.extraParam.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/extra/param
whole.extraParam.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/extra/param
\ No newline at end of file
#\u60C5\u62A5\u9884\u8B66\u5916\u90E8\u63A5\u53E3
warn.pushTask.token
=
AoJ0ooy3H2BpHmuaviYObTKw/Xfw/oA5aKccNYhYnoJFJQ/BgeW/
warn.project.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/brandkbs/project?projectId={1}&projectName={2}
warn.ticket.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/code?pushId={1}&taskType={2}
warn.pushRecipientsList.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/pushRecipients/{1}?taskType={2}
warn.deletePushRecipients.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/pushRecipients/?pushId={1}&recipientsId={2}&taskType={3}
warn.channel.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/brandkbs/config/channel/{1}
warn.hotEvent.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/brandkbs/config/hotEvent/{1}
warn.hotTop.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/brandkbs/config/hotTop/{1}
warn.yuQing.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/brandkbs/config/yuQing/{1}
warn.taskSwitch.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/brandkbs/enable/used
\ No newline at end of file
src/main/resources/application-local.properties
View file @
e6323c26
...
@@ -81,4 +81,15 @@ istarshine.addIStarShineKSData.url=https://istarshine-service.zhiweidata.com/ist
...
@@ -81,4 +81,15 @@ istarshine.addIStarShineKSData.url=https://istarshine-service.zhiweidata.com/ist
istarshine.getIStarShineKSInfoData.url
=
https://istarshine-service.zhiweidata.com/istarshine/ks/getIStarShineKSInfoData?taskId={1}&appId=6183571e0d710000f6003a12
istarshine.getIStarShineKSInfoData.url
=
https://istarshine-service.zhiweidata.com/istarshine/ks/getIStarShineKSInfoData?taskId={1}&appId=6183571e0d710000f6003a12
whole.search.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/yuqing
whole.search.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/yuqing
whole.searchCriteria.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/pt
whole.searchCriteria.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/pt
whole.extraParam.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/extra/param
whole.extraParam.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/extra/param
\ No newline at end of file
#\u60C5\u62A5\u9884\u8B66\u5916\u90E8\u63A5\u53E3
warn.pushTask.token
=
AoJ0ooy3H2BpHmuaviYObTKw/Xfw/oA5aKccNYhYnoJFJQ/BgeW/
warn.project.url
=
http://192.168.0.225:11003/qbjc/pushTask/interface/brandkbs/project?projectId={1}&projectName={2}
warn.ticket.url
=
http://192.168.0.225:11003/qbjc/pushTask/interface/code?pushId={1}&taskType={2}
warn.pushRecipientsList.url
=
http://192.168.0.225:11003/qbjc/pushTask/interface/pushRecipients/{1}?taskType={2}
warn.deletePushRecipients.url
=
http://192.168.0.225:11003/qbjc/pushTask/interface/pushRecipients/?pushId={1}&recipientsId={2}&taskType={3}
warn.channel.url
=
http://192.168.0.225:11003/qbjc/pushTask/interface/brandkbs/config/channel/{1}
warn.hotEvent.url
=
http://192.168.0.225:11003/qbjc/pushTask/interface/brandkbs/config/hotEvent/{1}
warn.hotTop.url
=
http://192.168.0.225:11003/qbjc/pushTask/interface/brandkbs/config/hotTop/{1}
warn.yuQing.url
=
http://192.168.0.225:11003/qbjc/pushTask/interface/brandkbs/config/yuQing/{1}
warn.taskSwitch.url
=
http://192.168.0.225:11003/qbjc/pushTask/interface/brandkbs/enable/used
\ No newline at end of file
src/main/resources/application-prod.properties
View file @
e6323c26
...
@@ -79,4 +79,15 @@ istarshine.addIStarShineKSData.url=https://istarshine-service.zhiweidata.com/ist
...
@@ -79,4 +79,15 @@ istarshine.addIStarShineKSData.url=https://istarshine-service.zhiweidata.com/ist
istarshine.getIStarShineKSInfoData.url
=
https://istarshine-service.zhiweidata.com/istarshine/ks/getIStarShineKSInfoData?taskId={1}&appId=6183571e0d710000f6003a12
istarshine.getIStarShineKSInfoData.url
=
https://istarshine-service.zhiweidata.com/istarshine/ks/getIStarShineKSInfoData?taskId={1}&appId=6183571e0d710000f6003a12
whole.search.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/yuqing
whole.search.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/yuqing
whole.searchCriteria.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/pt
whole.searchCriteria.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/pt
whole.extraParam.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/extra/param
whole.extraParam.url
=
https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/search/extra/param
\ No newline at end of file
#\u60C5\u62A5\u9884\u8B66\u5916\u90E8\u63A5\u53E3
warn.pushTask.token
=
AoJ0ooy3H2BpHmuaviYObTKw/Xfw/oA5aKccNYhYnoJFJQ/BgeW/
warn.project.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/brandkbs/project?projectId={1}&projectName={2}
warn.ticket.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/code?pushId={1}&taskType={2}
warn.pushRecipientsList.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/pushRecipients/{1}?taskType={2}
warn.deletePushRecipients.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/pushRecipients/?pushId={1}&recipientsId={2}&taskType={3}
warn.channel.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/brandkbs/config/channel/{1}
warn.hotEvent.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/brandkbs/config/hotEvent/{1}
warn.hotTop.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/brandkbs/config/hotTop/{1}
warn.yuQing.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/brandkbs/config/yuQing/{1}
warn.taskSwitch.url
=
https://auto-push.zhiweidata.com/qbjc/pushTask/interface/brandkbs/enable/used
\ No newline at end of file
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