Commit 64c458a8 by shenjunjie

恢复舆情数据聚合功能3

parent 43dda315
...@@ -9,6 +9,7 @@ import org.apache.commons.lang3.StringUtils; ...@@ -9,6 +9,7 @@ import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
...@@ -24,7 +25,7 @@ public class AggreeResult extends AbstractBaseMongo { ...@@ -24,7 +25,7 @@ public class AggreeResult extends AbstractBaseMongo {
/** /**
* 需要移除的属性 * 需要移除的属性
*/ */
private static final List<String> EXCLUDE_FIELD = Arrays.asList("brandkbs_mark_cache_maps", "brandkbs_cache_maps"); private static final List<String> EXCLUDE_FIELD = Collections.singletonList("mark_cache_maps");
/** /**
* 任务id * 任务id
......
...@@ -933,7 +933,7 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -933,7 +933,7 @@ public class MarkDataServiceImpl implements MarkDataService {
return Pair.of(new SearchHits[]{searchHits}, counts); return Pair.of(new SearchHits[]{searchHits}, counts);
} }
private EsClientDao.SearchHelper createContendSearchHelper(MarkSearchDTO dto){ private EsClientDao.SearchHelper createContendSearchHelper(MarkSearchDTO dto) {
EsClientDao.SearchHelper helper = EsClientDao.createSearchHelper(); EsClientDao.SearchHelper helper = EsClientDao.createSearchHelper();
// linkedGroupId、projectId、contendId // linkedGroupId、projectId、contendId
String projectId = dto.getProjectId(); String projectId = dto.getProjectId();
...@@ -942,9 +942,9 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -942,9 +942,9 @@ public class MarkDataServiceImpl implements MarkDataService {
List<String> contendIdList = projectService.getProjectById(projectId).getContendList().stream().map(AbstractBaseMongo::getId).collect(Collectors.toList()); List<String> contendIdList = projectService.getProjectById(projectId).getContendList().stream().map(AbstractBaseMongo::getId).collect(Collectors.toList());
// PostFilter 后置过滤器 time // PostFilter 后置过滤器 time
BoolQueryBuilder postFilter; BoolQueryBuilder postFilter;
if ("-1".equals(contendId) && CollectionUtils.isNotEmpty(contendIdList)){ if ("-1".equals(contendId) && CollectionUtils.isNotEmpty(contendIdList)) {
postFilter = QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery("brandkbs_cache_maps.key.keyword", Tools.concat(projectId, linkedGroupId, Constant.PRIMARY_CONTENDID))); postFilter = QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery("brandkbs_cache_maps.key.keyword", Tools.concat(projectId, linkedGroupId, Constant.PRIMARY_CONTENDID)));
}else { } else {
postFilter = projectLinkedGroupContendIdQuery(projectId, linkedGroupId, contendId); postFilter = projectLinkedGroupContendIdQuery(projectId, linkedGroupId, contendId);
} }
//time //time
...@@ -1014,7 +1014,7 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1014,7 +1014,7 @@ public class MarkDataServiceImpl implements MarkDataService {
String startTimeStr = sdf.format(dto.getStartTime()); String startTimeStr = sdf.format(dto.getStartTime());
String endTimeStr = sdf.format(dto.getEndTime()); String endTimeStr = sdf.format(dto.getEndTime());
String redisKey = RedisKeyPrefix.INDEX_COMPARE_SUMMARY_PC + Tools.concat(dto.getProjectId(), dto.getContendId(), startTimeStr, endTimeStr); String redisKey = RedisKeyPrefix.INDEX_COMPARE_SUMMARY_PC + Tools.concat(dto.getProjectId(), dto.getContendId(), startTimeStr, endTimeStr);
if (cache){ if (cache) {
String result = redisUtil.get(redisKey); String result = redisUtil.get(redisKey);
if (Objects.nonNull(result)) { if (Objects.nonNull(result)) {
return JSON.parseObject(result); return JSON.parseObject(result);
...@@ -1080,7 +1080,7 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1080,7 +1080,7 @@ public class MarkDataServiceImpl implements MarkDataService {
String startTimeStr = sdf.format(dto.getStartTime()); String startTimeStr = sdf.format(dto.getStartTime());
String endTimeStr = sdf.format(dto.getEndTime()); String endTimeStr = sdf.format(dto.getEndTime());
String redisKey = RedisKeyPrefix.INDEX_COMPARE_ANALYZE + Tools.concat(dto.getProjectId(), dto.getContendId(), startTimeStr, endTimeStr, hotArticleSize); String redisKey = RedisKeyPrefix.INDEX_COMPARE_ANALYZE + Tools.concat(dto.getProjectId(), dto.getContendId(), startTimeStr, endTimeStr, hotArticleSize);
if (cache){ if (cache) {
String result = redisUtil.get(redisKey); String result = redisUtil.get(redisKey);
if (Objects.nonNull(result)) { if (Objects.nonNull(result)) {
return JSON.parseObject(result); return JSON.parseObject(result);
...@@ -1122,7 +1122,7 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1122,7 +1122,7 @@ public class MarkDataServiceImpl implements MarkDataService {
long priGreaterThanAvg = primarySpread.stream().filter(line -> line.getLongValue("count") > avgPrimaryNormalCount).count(); long priGreaterThanAvg = primarySpread.stream().filter(line -> line.getLongValue("count") > avgPrimaryNormalCount).count();
result.put("priGtAvg", priGreaterThanAvg); result.put("priGtAvg", priGreaterThanAvg);
// 获取主品牌传播峰值时信息 // 获取主品牌传播峰值时信息
JSONObject primaryMax = primarySpread.stream().max(Comparator.comparing(line-> line.getLongValue("count"))).get(); JSONObject primaryMax = primarySpread.stream().max(Comparator.comparing(line -> line.getLongValue("count"))).get();
result.put("priMaxTime", sdf.format(Long.parseLong(primaryMax.getString("date")))); result.put("priMaxTime", sdf.format(Long.parseLong(primaryMax.getString("date"))));
result.put("priMaxCount", primaryMax.getLongValue("count")); result.put("priMaxCount", primaryMax.getLongValue("count"));
long priMaxDayStartTime = Long.parseLong(primaryMax.getString("date")); long priMaxDayStartTime = Long.parseLong(primaryMax.getString("date"));
...@@ -1176,7 +1176,7 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1176,7 +1176,7 @@ public class MarkDataServiceImpl implements MarkDataService {
long conMaxDayEndTime = DateUtils.addDays(new Date(Long.parseLong(primaryMax.getString("date"))), 1).getTime(); long conMaxDayEndTime = DateUtils.addDays(new Date(Long.parseLong(primaryMax.getString("date"))), 1).getTime();
List<Map.Entry<String, Integer>> conTopTitle = List<Map.Entry<String, Integer>> conTopTitle =
getMarkTopTitle(conMaxDayStartTime, conMaxDayEndTime, EmotionEnum.ALL.getName(), dto.getProjectId(), dto.getLinkedGroupId(), dto.getContendId(), 1); getMarkTopTitle(conMaxDayStartTime, conMaxDayEndTime, EmotionEnum.ALL.getName(), dto.getProjectId(), dto.getLinkedGroupId(), dto.getContendId(), 1);
if (CollectionUtils.isNotEmpty(conTopTitle)){ if (CollectionUtils.isNotEmpty(conTopTitle)) {
// 首发稿件 // 首发稿件
BaseMap conFirstArticle = BaseMap conFirstArticle =
getFirstArticle(conMaxDayStartTime, conMaxDayEndTime, conTopTitle.get(0).getKey(), dto.getProjectId(), dto.getLinkedGroupId(), dto.getContendId()); getFirstArticle(conMaxDayStartTime, conMaxDayEndTime, conTopTitle.get(0).getKey(), dto.getProjectId(), dto.getLinkedGroupId(), dto.getContendId());
...@@ -1187,7 +1187,7 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1187,7 +1187,7 @@ public class MarkDataServiceImpl implements MarkDataService {
// 获取竞品热门媒体方向 // 获取竞品热门媒体方向
List<Map.Entry<String, Integer>> conHotTitles = List<Map.Entry<String, Integer>> conHotTitles =
getMarkTopTitle(conMaxDayStartTime, conMaxDayEndTime, EmotionEnum.ALL.getName(), dto.getProjectId(), dto.getLinkedGroupId(), dto.getContendId(), hotArticleSize); getMarkTopTitle(conMaxDayStartTime, conMaxDayEndTime, EmotionEnum.ALL.getName(), dto.getProjectId(), dto.getLinkedGroupId(), dto.getContendId(), hotArticleSize);
if (CollectionUtils.isNotEmpty(conHotTitles)){ if (CollectionUtils.isNotEmpty(conHotTitles)) {
List<JSONObject> conHotArticle = conHotTitles.stream().map(map -> { List<JSONObject> conHotArticle = conHotTitles.stream().map(map -> {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
try { try {
...@@ -1245,9 +1245,10 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1245,9 +1245,10 @@ public class MarkDataServiceImpl implements MarkDataService {
/** /**
* 为竞品库竞品对比 标注数据搜索传输类设置默认值 * 为竞品库竞品对比 标注数据搜索传输类设置默认值
*
* @param dto 标注数据搜索传输类 * @param dto 标注数据搜索传输类
*/ */
private void defaultContendDTO(MarkSearchDTO dto){ private void defaultContendDTO(MarkSearchDTO dto) {
if (Objects.isNull(dto.getStartTime()) || Objects.isNull(dto.getEndTime())) { if (Objects.isNull(dto.getStartTime()) || Objects.isNull(dto.getEndTime())) {
Date now = new Date(); Date now = new Date();
dto.setEndTime(now.getTime()); dto.setEndTime(now.getTime());
...@@ -1505,13 +1506,23 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1505,13 +1506,23 @@ public class MarkDataServiceImpl implements MarkDataService {
String contendId = markSearchDTO.getContendId(); String contendId = markSearchDTO.getContendId();
// 重复消息折叠 // 重复消息折叠
if (markSearchDTO.isFold()) { if (markSearchDTO.isFold()) {
Map<String, List<Map<String, Object>>> collect = Arrays.stream(searchHits.getHits()).map(SearchHit::getSourceAsMap).collect(Collectors.groupingBy(map -> { // 根据旧顺序排序
List<String> sortList = Arrays.stream(searchHits.getHits()).map(hit -> hit.getSourceAsMap().get("id") + "").collect(Collectors.toList());
Map<String, List<Map<String, Object>>> groupMap = Arrays.stream(searchHits.getHits()).map(SearchHit::getSourceAsMap).collect(Collectors.groupingBy(map -> {
BaseMap baseMap = Tools.getBaseFromEsMap(map); BaseMap baseMap = Tools.getBaseFromEsMap(map);
String title = baseMap.getTitleNullOptionalContent(); String title = baseMap.getTitleNullOptionalContent();
return Tools.filterSpecialCharacter(title) + baseMap.getTypeB().encode(); return Tools.filterSpecialCharacter(title) + baseMap.getTypeB().encode();
})); }));
return collect.values().stream().map(list -> MarkFlowEntity.getFoldInstance(list.stream().map(map -> getMarkFlowEntity(map, projectId, Map<String, List<Map<String, Object>>> collect = groupMap.values().stream().map(list -> list.stream().sorted(Comparator.comparingLong(o -> Long.parseLong(o.get("time") + ""))).collect(Collectors.toList()))
linkedGroupId, contendId)).collect(Collectors.toList()))).collect(Collectors.toList()); .collect(Collectors.toMap(list -> list.get(0).get("id") + "", list -> list));
return sortList.stream().map(id -> {
List<Map<String, Object>> maps = collect.get(id);
if (null != maps) {
return MarkFlowEntity.getFoldInstance(maps.stream().map(map -> getMarkFlowEntity(map, projectId,
linkedGroupId, contendId)).collect(Collectors.toList()));
}
return null;
}).filter(Objects::nonNull).collect(Collectors.toList());
} }
return Arrays.stream(searchHits.getHits()).map(hit -> getMarkFlowEntity(hit.getSourceAsMap(), projectId, linkedGroupId, contendId)).collect(Collectors.toList()); return Arrays.stream(searchHits.getHits()).map(hit -> getMarkFlowEntity(hit.getSourceAsMap(), projectId, linkedGroupId, contendId)).collect(Collectors.toList());
} }
......
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