Commit 6d34d505 by shenjunjie

Merge branch 'feature' into 'release'

非人工版本情报预警模块

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