Commit 85fe2fd9 by 陈健智

舆情导出-补充自定义标签

parent 6a5a5bca
...@@ -332,11 +332,11 @@ public class AppDownloadController extends BaseController { ...@@ -332,11 +332,11 @@ public class AppDownloadController extends BaseController {
@LogRecord(description = "舆情库-有效舆情导出", values = {"startTime", "endTime", "customTags", "field", "keyword", "politicsLevel", "mainBodyType", "platforms", "region", "tags"}, entity = true, arguments = true) @LogRecord(description = "舆情库-有效舆情导出", values = {"startTime", "endTime", "customTags", "field", "keyword", "politicsLevel", "mainBodyType", "platforms", "region", "tags"}, entity = true, arguments = true)
@DownloadTask(taskName = "舆情库有效舆情数据下载", description = "舆情库有效舆情数据") @DownloadTask(taskName = "舆情库有效舆情数据下载", description = "舆情库有效舆情数据")
public ResponseResult exportYuqingMarkList(@RequestBody MarkSearchDTO markSearchDTO) { public ResponseResult exportYuqingMarkList(@RequestBody MarkSearchDTO markSearchDTO) {
Pair<String, List<ExportAppYuqingDTO>> stringListPair = markDataService.downloadYuqingMarkList(markSearchDTO); Pair<String, Pair<List<List<String>>, List<List<Object>>>> stringPairPair = markDataService.downloadMarkListDynamicHead(markSearchDTO);
// excel写入至指定路径 // excel写入至指定路径
String projectName = projectService.getProjectById(UserThreadLocal.getProjectId()).getProjectName(); String projectName = projectService.getProjectById(UserThreadLocal.getProjectId()).getProjectName();
String filePath = EasyExcelUtil.generateExcelFilePath(brandkbsFilePath, projectName, UserThreadLocal.getNickname(), stringListPair.getLeft() + "_舆情列表数据"); String filePath = EasyExcelUtil.generateExcelFilePath(brandkbsFilePath, projectName, UserThreadLocal.getNickname(), stringPairPair.getLeft() + "_舆情列表数据");
EasyExcelUtil.write(filePath, "sheet1", ExportAppYuqingDTO.class, stringListPair.getRight()); EasyExcelUtil.dynamicHeadWrite(filePath, "sheet1", stringPairPair.getRight().getLeft(), stringPairPair.getRight().getRight());
return ResponseResult.success(filePath); return ResponseResult.success(filePath);
} }
......
...@@ -79,6 +79,12 @@ public interface MarkDataService { ...@@ -79,6 +79,12 @@ public interface MarkDataService {
Pair<String, List<ExportAppYuqingDTO>> downloadYuqingMarkList(MarkSearchDTO markSearchDTO); Pair<String, List<ExportAppYuqingDTO>> downloadYuqingMarkList(MarkSearchDTO markSearchDTO);
/** /**
* @param markSearchDTO 标注数据搜索传输类
* @return 返回结果
*/
Pair<String, Pair<List<List<String>>, List<List<Object>>>> downloadMarkListDynamicHead(MarkSearchDTO markSearchDTO);
/**
* 生成聚合列表并返回id * 生成聚合列表并返回id
* *
* @return 聚合id * @return 聚合id
......
...@@ -372,6 +372,11 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -372,6 +372,11 @@ public class MarkDataServiceImpl implements MarkDataService {
} }
@Override @Override
public Pair<String, Pair<List<List<String>>, List<List<Object>>>> downloadMarkListDynamicHead(MarkSearchDTO markSearchDTO) {
return downloadMarkListDynamicHead(markSearchDTO, esSearchService::searchMarkHitsAndCount);
}
@Override
public String generateYuqingMarkAggreeList(Long startTime, Long endTime) { public String generateYuqingMarkAggreeList(Long startTime, Long endTime) {
return generateAggreeList(UserThreadLocal.getProjectId(), startTime, endTime, esSearchService::searchMarkHitsAndCount); return generateAggreeList(UserThreadLocal.getProjectId(), startTime, endTime, esSearchService::searchMarkHitsAndCount);
} }
...@@ -4249,7 +4254,7 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -4249,7 +4254,7 @@ public class MarkDataServiceImpl implements MarkDataService {
/** /**
* 获取 * 获取
* @param json * @param json
* @param content * @param brandStr
* @return * @return
*/ */
private static List<FieldMapping> getFiledMapping(JSONObject json, String brandStr) { private static List<FieldMapping> getFiledMapping(JSONObject json, String brandStr) {
...@@ -5118,4 +5123,88 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -5118,4 +5123,88 @@ public class MarkDataServiceImpl implements MarkDataService {
} }
return null; return null;
} }
private Pair<String, Pair<List<List<String>>, List<List<Object>>>> downloadMarkListDynamicHead(MarkSearchDTO markSearchDTO, ArticleFunction.SearchHitsAndCount searchHitsAndCount) {
try {
List<TagFilterDTO> tagFilters = tagFilterService.getTagFilter();
List<List<String>> heads = getMarkDownloadHead(tagFilters);
List<List<Object>> datas = new ArrayList<>();
Project project = projectService.getProjectById(UserThreadLocal.getProjectId());
defaultMarkSearch(markSearchDTO);
markSearchDTO.setPageSize(null);
for (SearchHits searchHits : searchHitsAndCount.search(markSearchDTO, false).getLeft()) {
datas.addAll(createMarkDownloadData(searchHits, tagFilters, heads));
}
return Pair.of(project.getBrandName() + "_" + markSearchDTO.getStartTime() + "_" + markSearchDTO.getEndTime(), Pair.of(heads, datas));
} catch (IOException e) {
ExceptionCast.cast(CommonCodeEnum.FAIL, "es查询异常");
}
return null;
}
/**
* 组装excel下载舆情数据
* @param searchHits
* @param tagFilters
* @param heads
* @return
*/
private List<List<Object>> createMarkDownloadData(SearchHits searchHits, List<TagFilterDTO> tagFilters, List<List<String>> heads){
List<JSONObject> hits = Arrays.stream(searchHits.getHits()).map(SearchHit::getSourceAsMap).map(JSONObject::new).collect(Collectors.toList());
List<String> uniqueIds = new ArrayList<>();
// 自定义标签uniqueIds
tagFilters.forEach(tagFilter -> tagFilter.getTagList().forEach(tag -> uniqueIds.add(tag.getUniqueId())));
List<String> groupNames = tagFilters.stream().map(TagFilterDTO::getGroupName).collect(Collectors.toList());
List<List<Object>> res = new ArrayList<>();
for (JSONObject hit : hits) {
BaseMap baseMap = Tools.getBaseFromEsMap(hit);
List<Object> data = new ArrayList<>();
data.add(new Date(baseMap.getTime()));
data.add(baseMap.getPlatform());
data.add(baseMap.getSource());
data.add(baseMap.getTitle());
data.add(baseMap.getContent());
data.add(baseMap.getUrl());
data.add(baseMap.getEmotion());
List<JSONObject> markCacheMaps = hit.getJSONArray(GenericAttribute.ES_MARK_CACHE_MAPS).toJavaList(JSONObject.class);
if (CollectionUtils.isEmpty(markCacheMaps)){
res.add(data);
continue;
}
// 过滤非自定义标签
Map<String, JSONObject> map = markCacheMaps.stream()
.filter(json -> uniqueIds.contains(json.getString("unique_id")))
.collect(Collectors.toMap(json -> json.getString("group_name"), o -> o, (v1, v2) -> v1));
for (String name : groupNames) {
JSONObject jsonObject = map.get(name);
if (Objects.isNull(jsonObject)){
data.add(null);
continue;
}
data.add(jsonObject.getString("name"));
}
res.add(data);
}
return res;
}
/**
* 获取舆情数据下载表头
* @param tagFilter
* @return
*/
private List<List<String>> getMarkDownloadHead(List<TagFilterDTO> tagFilter){
List<List<String>> heads = new ArrayList<>();
heads.add(Collections.singletonList("时间"));
heads.add(Collections.singletonList("平台"));
heads.add(Collections.singletonList("渠道"));
heads.add(Collections.singletonList("标题"));
heads.add(Collections.singletonList("文本"));
heads.add(Collections.singletonList("地址"));
heads.add(Collections.singletonList("情感调性"));
for (TagFilterDTO tagFilterDTO : tagFilter) {
heads.add(Collections.singletonList(tagFilterDTO.getGroupName()));
}
return heads;
}
} }
\ No newline at end of file
...@@ -699,7 +699,7 @@ public class SearchWholeServiceImpl implements SearchWholeService { ...@@ -699,7 +699,7 @@ public class SearchWholeServiceImpl implements SearchWholeService {
while (!existTask.getFinish()) { while (!existTask.getFinish()) {
existTask = markSearchAnalyzeTaskDao.findOne("searchFilterDTO", dto); existTask = markSearchAnalyzeTaskDao.findOne("searchFilterDTO", dto);
long eTime = System.currentTimeMillis(); long eTime = System.currentTimeMillis();
if (existTask.getFinish() || eTime - sTime >= 3 * 60 * 1000) { if (Objects.isNull(existTask) || existTask.getFinish() || eTime - sTime >= 3 * 60 * 1000) {
break; break;
} }
Thread.sleep(10000L); Thread.sleep(10000L);
......
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