Commit 89341941 by shenjunjie

Merge branch 'feature' into 'release'

Feature

See merge request !496
parents 6a74474e ac4d66c0
......@@ -211,10 +211,26 @@ public class EsQueryTools {
return channelBoolQueryBuilder;
}
/**
* source模糊匹配
* @param sourceKeyword
* @return
*/
public static BoolQueryBuilder assembleSourceQuery(String sourceKeyword) {
return assembleFiledKeywordQuery("source", sourceKeyword);
}
/**
* source精确匹配
* @param sourceKeyword
* @return
*/
public static BoolQueryBuilder assembleSourceKeywordQuery(String sourceKeyword) {
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.should(QueryBuilders.termQuery("source", sourceKeyword));
return queryBuilder;
}
public static void platformMustNot(BoolQueryBuilder boolQueryBuilder, String... platformNames) {
if (null == platformNames) {
return;
......
......@@ -2509,13 +2509,11 @@ public class MarkDataServiceImpl implements MarkDataService {
JSONObject res = new JSONObject();
try {
List<JSONObject> list = new ArrayList<>();
List<String> importantPlatforms = new ArrayList<>();
String projectId = UserThreadLocal.getProjectId();
dto.setProjectId(projectId);
for (String platformNames : Arrays.asList("微博", "微信", "抖音", "小红书", "今日头条", "网媒")) {
importantPlatforms.add(GlobalPojo.getPlatformIdByName(platformNames));
if (CollectionUtils.isEmpty(dto.getPlatforms())) {
dto.setPlatforms(Stream.of("微博", "微信", "抖音", "小红书", "今日头条", "网媒").map(GlobalPojo::getPlatformIdByName).collect(Collectors.toList()));
}
dto.setPlatforms(importantPlatforms);
Long total = getYuqingAnalyzeCount(dto);
// 平台聚合
SearchResponse searchResponse = platformAggSearchResponse(dto);
......@@ -2580,8 +2578,10 @@ public class MarkDataServiceImpl implements MarkDataService {
* @throws IOException
*/
private List<JSONObject> getPlatformPercentage(MarkSearchDTO dto) throws IOException {
List<String> platforms = commonService.getQbjcPlatform().stream().map(jsonObject -> jsonObject.getString("id")).collect(Collectors.toList());
dto.setPlatforms(platforms);
if (CollectionUtils.isEmpty(dto.getPlatforms())) {
List<String> platforms = commonService.getQbjcPlatform().stream().map(jsonObject -> jsonObject.getString("id")).collect(Collectors.toList());
dto.setPlatforms(platforms);
}
List<JSONObject> list = new ArrayList<>();
// total
dto.setProjectId(UserThreadLocal.getProjectId());
......@@ -2815,19 +2815,46 @@ public class MarkDataServiceImpl implements MarkDataService {
@Override
public PageVO<MarkFlowEntity> getYuqingAnalyzeDetail(MarkSearchDTO dto) {
//设置默认的时间、页码、排序方式等
defaultMarkSearch(dto);
PageVO<MarkFlowEntity> yuqingMarkList;
if (Objects.isNull(dto.getPlanId())){
yuqingMarkList = getYuqingMarkList(dto);
}else {
yuqingMarkList = getNonManualMarkList(dto);
try {
//设置默认的时间、页码、排序方式等
defaultMarkSearch(dto);
String[] indexes = esClientDao.getIndexes();
BoolQueryBuilder postFilter = yuqingAnalyzeQuery(dto);
FieldSortBuilder sort = null;
if (null != dto.getSorter()) {
for (Map.Entry<String, Object> entry : dto.getSorter().entrySet()) {
String key = entry.getKey();
if (null == entry.getValue() || entry.getValue().toString().contains("desc")) {
sort = SortBuilders.fieldSort(key).order(SortOrder.DESC);
} else {
sort = SortBuilders.fieldSort(key).order(SortOrder.ASC);
}
}
}
int from = (dto.getPage() - 1) * dto.getPageSize();
int size = dto.getPageSize();
SearchHits hits = esClientDao.searchHits(indexes, postFilter, null, null, sort, from, size, null);
// 总量
long total = hits.getTotalHits().value;
// 消息列表
List<MarkFlowEntity> flowEntityList;
if (Objects.nonNull(dto.getPlanId())) {
flowEntityList = getNonManualMarkFlowEntity(dto, hits);
} else {
flowEntityList = getMarkFlowEntity(dto, hits);
}
JSONObject jsonObject = new JSONObject();
// 高亮关键词
jsonObject.put("highlightWord", GlobalPojo.HIGHLIGHT_MAP.get(UserThreadLocal.getProjectId()));
// 列表数据最小mgid
MarkFlowEntity markFlowEntity = flowEntityList.stream()
.min(Comparator.comparingLong(entity -> JSONObject.parseObject(JSONObject.toJSONString(entity.getData())).getLongValue("mgid"))).orElse(null);
jsonObject.put("pageGid", Objects.isNull(markFlowEntity) ? Long.MAX_VALUE : JSONObject.parseObject(JSONObject.toJSONString(markFlowEntity.getData())).getLongValue("mgid"));
return PageVO.createPageVo(total, dto.getPage(), dto.getPageSize(), flowEntityList).setInfo(jsonObject);
}catch (Exception e){
ExceptionCast.cast(CommonCodeEnum.FAIL, "新舆情分析详情页getYuqingAnalyzeDetail异常-", e);
}
// 列表数据最小mgid
MarkFlowEntity markFlowEntity = yuqingMarkList.getList().stream()
.min(Comparator.comparingLong(entity -> JSONObject.parseObject(JSONObject.toJSONString(entity.getData())).getLongValue("mgid"))).orElse(null);
yuqingMarkList.getInfo().put("pageGid", Objects.isNull(markFlowEntity) ? Long.MAX_VALUE : JSONObject.parseObject(JSONObject.toJSONString(markFlowEntity.getData())).getLongValue("mgid"));
return yuqingMarkList;
return PageVO.createPageVo(0, dto.getPage(), dto.getPageSize(), Collections.emptyList());
}
@Override
......@@ -3066,17 +3093,15 @@ public class MarkDataServiceImpl implements MarkDataService {
String[] indexes = esClientDao.getIndexes();
dto.setProjectId(UserThreadLocal.getProjectId());
// query
if (Objects.nonNull(dto.getPlatforms()) && Objects.nonNull(dto.getPlatforms().get(0))){
dto.setPlatforms(Collections.singletonList(GlobalPojo.getPlatformIdByName(dto.getPlatforms().get(0))));
}
BoolQueryBuilder query = yuqingAnalyzeQuery(dto);
if (Objects.equals("其他", dto.getPlatforms().get(0))){
List<String> platforms = getPlatformPercentage(dto).stream().map(json -> json.getString("platform")).collect(Collectors.toList());
List<String> allPlatforms = GlobalPojo.PLATFORMS.stream().map(MessagePlatform::getName).collect(Collectors.toList());
allPlatforms.removeAll(platforms);
dto.setPlatforms(allPlatforms.stream().map(GlobalPojo::getPlatformIdByName).collect(Collectors.toList()));
query = yuqingAnalyzeQuery(dto);
}else {
dto.setPlatforms(Collections.singletonList(GlobalPojo.getPlatformIdByName(dto.getPlatforms().get(0))));
}
BoolQueryBuilder query = yuqingAnalyzeQuery(dto);
// sort
FieldSortBuilder sort = SortBuilders.fieldSort("time").order(SortOrder.DESC);
// response
......@@ -3190,9 +3215,12 @@ public class MarkDataServiceImpl implements MarkDataService {
private Map<String, List<LineVO>> getPlatformSpreadTendency(MarkSearchDTO dto) throws IOException{
Map<String, List<LineVO>> res = new HashMap<>(4);
// 平台
List<String> platforms = new ArrayList<>();
for (String platformNames : Arrays.asList("微博", "微信", "抖音", "小红书")) {
platforms.add(GlobalPojo.getPlatformIdByName(platformNames));
// List<String> platforms = new ArrayList<>();
// for (String platformNames : Arrays.asList("微博", "微信", "抖音", "小红书")) {
// platforms.add(GlobalPojo.getPlatformIdByName(platformNames));
// }
if (CollectionUtils.isEmpty(dto.getPlatforms())){
dto.setPlatforms(Stream.of("微博", "微信", "抖音", "小红书").map(GlobalPojo::getPlatformIdByName).collect(Collectors.toList()));
}
String[] indexes = esClientDao.getIndexes();
// 聚合请求
......@@ -3204,7 +3232,6 @@ public class MarkDataServiceImpl implements MarkDataService {
}else {
daysAggregationBuilder = AggregationBuilders.dateHistogram("timeAgg").field("time").calendarInterval(DateHistogramInterval.DAY);
}
dto.setPlatforms(platforms);
// query
BoolQueryBuilder query = yuqingAnalyzeQuery(dto);
// response
......@@ -3334,7 +3361,7 @@ public class MarkDataServiceImpl implements MarkDataService {
// 新增channelEmotion
BoolQueryBuilder postFilter = EsQueryTools.assembleCacheMapsQuery(projectId, contendId, dto.getPoliticsLevel(), dto.getField(), dto.getRegion(), dto.getMainBodyType(), dto.getChannelEmotion());
if (Objects.nonNull(dto.getPlanId())){
postFilter = EsQueryTools.assembleCacheMapsPlanQuery(projectId, dto.getPlanId());
postFilter = EsQueryTools.assembleCacheMapsPlanQuery(projectId, dto.getPlanId(), dto.getPoliticsLevel());
}
// time
postFilter.must(QueryBuilders.rangeQuery("time").gte(dto.getStartTime()).lt(dto.getEndTime()));
......@@ -3367,7 +3394,7 @@ public class MarkDataServiceImpl implements MarkDataService {
}
// sourceKeyword
if (StringUtils.isNotEmpty(dto.getSourceKeyword())) {
postFilter.must(EsQueryTools.assembleSourceQuery(dto.getSourceKeyword()));
postFilter.must(EsQueryTools.assembleSourceKeywordQuery(dto.getSourceKeyword()));
}
// hostKeyword
if (StringUtils.isNotEmpty(dto.getHostKeyword())) {
......
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