Commit f154f56c by shenjunjie

Merge branch 'feature' into 'master'

Feature

See merge request !70
parents eb4d6d46 f60b13c1
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);
}
} }
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("情报预警-任务开关失败");
}
}
}
...@@ -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
......
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
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;
}
}
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;
}
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;
}
}
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;
}
}
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;
}
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;
}
}
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;
}
...@@ -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
......
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,11 +115,100 @@ public class ProjectWarnServiceImpl implements ProjectWarnService { ...@@ -89,11 +115,100 @@ 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());
EsClientDao.SearchHelper helper = EsClientDao.createSearchHelper();
// 发声渠道
BoolQueryBuilder postFilter = EsQueryTools.assembleCacheMapsQuery(projectId, project.getBrandLinkedGroupId(), contendId, config.getChannelTypes());
// 文章类型
if (CollectionUtils.isNotEmpty(config.getPrimary()) && config.getPrimary().size() == 1) {
postFilter.must(EsQueryTools.assembleForwardQuery(config.getPrimary().get(0)));
}
// 本品舆情+竞品舆情
BoolQueryBuilder sourceBuilder = QueryBuilders.boolQuery();
if (CollectionUtils.isNotEmpty(config.getMarkerTags())) {
sourceBuilder.should(QueryBuilders.termQuery("brandkbs_mark_cache_maps.name.keyword", config.getMarkerTags()));
}
if (CollectionUtils.isNotEmpty(config.getContends())) {
EsQueryTools.assembleContendsQuery(sourceBuilder, config.getContends());
}
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);
}
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 BrandkbsHotEventWarn.HotEvent getHotEventTemplate() {
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;
}
@Override
public ResponseResult getYuqingWaring(String projectId, BrandkbsYuQingConfig config) {
return ResponseResult.success(getWarnTemplate(new BrandkbsYuQingWarn(Arrays.asList(getBaseMapCompoundTemplate()))));
} }
private <T> void warnCriteriaAdd(Map<String, Object> res, String key, List<String> listValueName, List<T> listValueId, String annotation) { @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()) { if (listValueName.size() != listValueId.size()) {
throw new IllegalArgumentException("listValueName-size与listValueId-size不符!"); throw new IllegalArgumentException("listValueName-size与listValueId-size不符!");
} }
...@@ -109,38 +224,35 @@ public class ProjectWarnServiceImpl implements ProjectWarnService { ...@@ -109,38 +224,35 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
} }
value.add(map); value.add(map);
} }
warnCriteriaAdd(res, key, value, null); // 设置默认值
if (null != defaultValue) {
Map<String, Object> defaultMap = new HashMap<>();
defaultMap.put("defaultValue", defaultValue);
value.add(defaultMap);
}
warnCriteriaAdd(res, key, value);
} }
private void warnCriteriaAddSimple(Map<String, Object> res, String key, List<String> listValue) {
warnCriteriaAddSimple(res, key, listValue, null); public static <T> void warnCriteriaAdd(Map<String, Object> res, String key, List<String> listValueName, List<T> listValueId) {
warnCriteriaAdd(res, key, listValueName, listValueId, null);
} }
private void warnCriteriaAddSimple(Map<String, Object> res, String key, List<String> listValue, String annotation) { public static void warnCriteriaAddSimple(Map<String, Object> res, String key, List<String> listValue, List<String> defaultValue) {
List<Map<String, Object>> value = null; List<String> listValueId = null;
if (null != listValue) { if (null != listValue) {
value = new ArrayList<>(); listValueId = new ArrayList<>(listValue);
for (String str : listValue) {
Map<String, Object> map = new HashMap<>();
map.put("name", str);
map.put("id", str);
value.add(map);
}
} }
warnCriteriaAdd(res, key, value, annotation); warnCriteriaAdd(res, key, listValue, listValueId, defaultValue);
} }
private void warnCriteriaAdd(Map<String, Object> res, String key, List<Map<String, Object>> value) { public static void warnCriteriaAddSimple(Map<String, Object> res, String key, List<String> listValue) {
warnCriteriaAdd(res, key, value, null); warnCriteriaAddSimple(res, key, listValue, null);
} }
private void warnCriteriaAdd(Map<String, Object> res, String key, List<Map<String, Object>> value, String annotation) { public static void warnCriteriaAdd(Map<String, Object> res, String key, List<Map<String, Object>> value) {
// Map<String, Object> element = new HashMap<>();
// element.put(key, value);
// if (null != annotation) {
// element.put("annotation", annotation);
// }
res.put(key, value); res.put(key, value);
} }
}
} }
...@@ -80,3 +80,14 @@ istarshine.getIStarShineKSInfoData.url=https://istarshine-service.zhiweidata.com ...@@ -80,3 +80,14 @@ istarshine.getIStarShineKSInfoData.url=https://istarshine-service.zhiweidata.com
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
#\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
...@@ -82,3 +82,14 @@ istarshine.getIStarShineKSInfoData.url=https://istarshine-service.zhiweidata.com ...@@ -82,3 +82,14 @@ istarshine.getIStarShineKSInfoData.url=https://istarshine-service.zhiweidata.com
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
#\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
...@@ -80,3 +80,14 @@ istarshine.getIStarShineKSInfoData.url=https://istarshine-service.zhiweidata.com ...@@ -80,3 +80,14 @@ istarshine.getIStarShineKSInfoData.url=https://istarshine-service.zhiweidata.com
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
#\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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment