提交 a8d31b34 作者: 925993793@qq.com

导出excel以及接口逻辑修改

上级 a97d16a7
...@@ -155,13 +155,12 @@ public class EventAnalysisController { ...@@ -155,13 +155,12 @@ public class EventAnalysisController {
@GetMapping("/eventContext") @GetMapping("/eventContext")
public Result<?> eventContext(@RequestParam String eventId, public Result<?> eventContext(@RequestParam String eventId,
@RequestParam(required = false) String versionId) { @RequestParam(required = false) String versionId) {
if (StringUtils.isEmpty(versionId)) { if (StringUtils.isNotEmpty(versionId)) {
EventAnalysisVersion eventAnalysisVersion = eventAnalysisVersionService.latestVersion(eventId); String versionData = eventAnalysisVersionRecordService.getVersionData(versionId, AnalysisColumnEnum.EVENT_CONTEXT.getCode());
versionId = eventAnalysisVersion.getId(); return Result.OK(JSON.parseArray(versionData,JSONObject.class));
} }
String versionData = eventAnalysisVersionRecordService.getVersionData(versionId, AnalysisColumnEnum.EVENT_CONTEXT.getCode()); List<Map<String, Object>> versionData = eventContextService.eventContext(eventId);
//List<Map<String, Object>> versionData = eventContextService.eventContext(eventId); return Result.OK(versionData);
return Result.OK(JSON.parseArray(versionData,JSONObject.class));
} }
/** /**
...@@ -247,13 +246,12 @@ public class EventAnalysisController { ...@@ -247,13 +246,12 @@ public class EventAnalysisController {
@RequestParam(required = false) String startTime, @RequestParam(required = false) String startTime,
@RequestParam(required = false) String endTime, @RequestParam(required = false) String endTime,
@RequestParam(required = false) String versionId) { @RequestParam(required = false) String versionId) {
if (StringUtils.isEmpty(versionId)) { if (StringUtils.isNotEmpty(versionId)) {
EventAnalysisVersion eventAnalysisVersion = eventAnalysisVersionService.latestVersion(eventId); String versionData = eventAnalysisVersionRecordService.getVersionData(versionId, AnalysisColumnEnum.KEYWORD_TREND.getCode());
versionId = eventAnalysisVersion.getId(); return Result.OK(JSON.parseArray(versionData,JSONObject.class));
} }
String versionData = eventAnalysisVersionRecordService.getVersionData(versionId, AnalysisColumnEnum.KEYWORD_TREND.getCode()); List<CountVO> versionData = analysisService.wordTrend(eventId, startTime, endTime);
//List<CountVO> versionData = analysisService.wordTrend(eventId, startTime, endTime); return Result.OK(versionData);
return Result.OK(JSON.parseArray(versionData,JSONObject.class));
} }
...@@ -270,13 +268,12 @@ public class EventAnalysisController { ...@@ -270,13 +268,12 @@ public class EventAnalysisController {
@RequestParam(required = false) String startTime, @RequestParam(required = false) String startTime,
@RequestParam(required = false) String endTime, @RequestParam(required = false) String endTime,
@RequestParam(required = false) String versionId) { @RequestParam(required = false) String versionId) {
if (StringUtils.isEmpty(versionId)) { if (StringUtils.isNotEmpty(versionId)) {
EventAnalysisVersion eventAnalysisVersion = eventAnalysisVersionService.latestVersion(eventId); String versionData = eventAnalysisVersionRecordService.getVersionData(versionId, AnalysisColumnEnum.CO_OCCURRENCE.getCode());
versionId = eventAnalysisVersion.getId(); return Result.OK(JSON.parseArray(versionData,JSONObject.class));
} }
String versionData = eventAnalysisVersionRecordService.getVersionData(versionId, AnalysisColumnEnum.CO_OCCURRENCE.getCode()); List<CoOccurrenceVO> versionData = analysisService.coOccurrence(eventId, startTime, endTime);
//List<CoOccurrenceVO> versionData = analysisService.coOccurrence(eventId, startTime, endTime); return Result.OK(versionData);
return Result.OK(JSON.parseArray(versionData,JSONObject.class));
} }
/** /**
......
...@@ -19,11 +19,14 @@ import com.zzsn.event.util.*; ...@@ -19,11 +19,14 @@ import com.zzsn.event.util.*;
import com.zzsn.event.util.user.UserUtil; import com.zzsn.event.util.user.UserUtil;
import com.zzsn.event.util.user.UserVo; import com.zzsn.event.util.user.UserVo;
import com.zzsn.event.vo.*; import com.zzsn.event.vo.*;
import com.zzsn.event.vo.es.Label;
import com.zzsn.event.xxljob.service.IXxlJobInfoService; import com.zzsn.event.xxljob.service.IXxlJobInfoService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -32,6 +35,10 @@ import org.springframework.web.bind.annotation.*; ...@@ -32,6 +35,10 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -533,12 +540,91 @@ public class EventDataController { ...@@ -533,12 +540,91 @@ public class EventDataController {
frontList.forEach(e -> subjectIdList.add(e.getId())); frontList.forEach(e -> subjectIdList.add(e.getId()));
} }
//获取数据 //获取数据
IPage<SubjectDataVo> pageList = esService.frontListByPage(subjectIdList, searchWord, position, category,origin, labelId, startTime, endTime, column, order, pageNo, pageSize); IPage<SubjectDataVo> pageList = esService.frontListByPage(subjectIdList, searchWord, position, category, origin, labelId, startTime, endTime, column, order, pageNo, pageSize);
return Result.OK(pageList); return Result.OK(pageList);
} }
/** /**
* 导出excel
*
* @param projectId 项目id
* @param subjectId 事件id
* @param searchWord 搜索词
* @param position 搜索位置(title-标题;content-内容)
* @param category 匹配度(1-模糊;2-精确)
* @param origin 来源
* @param labelId 标签id
* @param startTime 开始时间
* @param endTime 结束时间
* @param column 排序字段
* @param order 排序方式(asc-正序;desc-倒序)
* @author lkg
* @date 2024/4/10
*/
@ApiOperation(value = "专题信息列表-导出excel", notes = "专题信息列表-导出excel")
@GetMapping(value = "/exportExcel")
public void queryPageList(@RequestParam(name = "projectId", defaultValue = "1476527644425682945") String projectId,
@RequestParam(name = "ids", required = false) List<String> ids,
@RequestParam(name = "subjectId", required = false) String subjectId,
@RequestParam(name = "searchWord", required = false) String searchWord,
@RequestParam(name = "position", required = false) String position,
@RequestParam(name = "category", required = false) Integer category,
@RequestParam(name = "origin", required = false) String origin,
@RequestParam(name = "labelId", required = false) String labelId,
@RequestParam(name = "startTime", required = false) String startTime,
@RequestParam(name = "endTime", required = false) String endTime,
@RequestParam(name = "column", defaultValue = "publishDate") String column,
@RequestParam(name = "order", defaultValue = "desc") String order,
HttpServletResponse response) {
UserVo currentUser = UserUtil.getLoginUser();
String username = currentUser.getUsername();
List<String> subjectIdList = new ArrayList<>();
if (StringUtils.isNotEmpty(subjectId)) {
subjectIdList.add(subjectId);
} else {
List<EventExcelVO> frontList = eventService.frontAllList(projectId, username, null, null, null, null, null, null);
frontList.forEach(e -> subjectIdList.add(e.getId()));
}
//栏目字典
List<SysDictItem> dictItemList = dictItemService.listByDictCode("eventView");
try {
long timestamp = System.currentTimeMillis();
String filename = subjectId + "_" + timestamp + ".xlsx";
String[] arr = new String[]{"标题", "摘要", "正文", "来源", "发布时间", "原文链接", "所属栏目"};
List<String> headers = Arrays.asList(arr);
SXSSFWorkbook workbook = new SXSSFWorkbook();
int pageSize = 1000;
for (int i = 0; ; i++) {
List<SubjectDataVo> informationList = esService.exportList(subjectIdList, ids, searchWord, position, category, origin, labelId, startTime, endTime, column, order, i, pageSize);
log.info("本次循环-{},数据量为-{}", i, informationList.size());
if (CollectionUtils.isEmpty(informationList)) {
break;
}
List<List<String>> rows = formatExportData(informationList, dictItemList);
BigExcelExportUtil.exportExcelData(workbook, i - 1, headers, rows, "sheet" + i);
log.info("第【{}】个sheet页写入成功", i);
}
// 将Workbook写入字节流
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
workbook.write(outStream);
// 将字节流转换为InputStream
byte[] bytes = outStream.toByteArray();
filename = URLEncoder.encode(filename, "UTF-8").replace("+", " ");
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-Disposition", "attachment;filename=" + filename);
response.setContentLength(bytes.length);
OutputStream out = response.getOutputStream();
out.write(bytes);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 资讯详情 * 资讯详情
* *
* @return * @return
...@@ -640,4 +726,31 @@ public class EventDataController { ...@@ -640,4 +726,31 @@ public class EventDataController {
List<SubjectDataVo> recommendList = informationService.recommendList(subjectId, id, title, pageNo, pageSize); List<SubjectDataVo> recommendList = informationService.recommendList(subjectId, id, title, pageNo, pageSize);
return Result.OK(recommendList); return Result.OK(recommendList);
} }
private List<List<String>> formatExportData(List<SubjectDataVo> list, List<SysDictItem> dictItemList) {
List<List<String>> rows = new ArrayList<>();
Map<String, String> eventViewMap = dictItemList.stream().collect(Collectors.toMap(SysDictItem::getItemValue, SysDictItem::getItemText));
for (SubjectDataVo subjectDataVo : list) {
List<String> row = new ArrayList<>();
row.add(StringUtils.isNotEmpty(subjectDataVo.getTitle()) ? subjectDataVo.getTitle() : "");
row.add(StringUtils.isNotEmpty(subjectDataVo.getSummary()) ? subjectDataVo.getSummary() : "");
row.add(StringUtils.isNotEmpty(subjectDataVo.getContent()) ? subjectDataVo.getContent() : "");
row.add(StringUtils.isNotEmpty(subjectDataVo.getOrigin()) ? subjectDataVo.getOrigin() : "");
row.add(StringUtils.isNotEmpty(subjectDataVo.getPublishDate()) ? subjectDataVo.getPublishDate() : "");
row.add(StringUtils.isNotEmpty(subjectDataVo.getSourceAddress()) ? subjectDataVo.getSourceAddress() : "");
List<Label> labels = subjectDataVo.getLabels();
if (CollectionUtils.isNotEmpty(labels)) {
List<Label> collect = labels.stream().filter(e -> eventViewMap.containsKey(e.getRelationId())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(collect)) {
row.add(collect.stream().map(e -> eventViewMap.get(e.getRelationId())).collect(Collectors.joining(",")));
} else {
row.add("");
}
} else {
row.add("");
}
rows.add(row);
}
return rows;
}
} }
...@@ -325,6 +325,83 @@ public class EsService { ...@@ -325,6 +325,83 @@ public class EsService {
return pageData; return pageData;
} }
public List<SubjectDataVo> exportList(List<String> subjectIdList,List<String> ids, String searchWord, String position, Integer category, String origin,
String labelId, String startTime, String endTime, String column, String order, int pageNo, int pageSize) {
SearchRequest searchRequest = new SearchRequest(Constants.SUBJECT_INDEX);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//设置分页参数
searchSourceBuilder.size(pageSize);
searchSourceBuilder.from((pageNo - 1) * pageSize);
if (column.equals("score")) {
if (order.equals("asc")) {
searchSourceBuilder.sort(SortBuilders.scoreSort().order(SortOrder.ASC));
searchSourceBuilder.sort("publishDate", SortOrder.ASC);
} else if (order.equals("desc")) {
searchSourceBuilder.sort(SortBuilders.scoreSort().order(SortOrder.DESC));
searchSourceBuilder.sort("publishDate", SortOrder.DESC);
}
} else if (column.equals("publishDate")) {
if (order.equals("desc")) {
searchSourceBuilder.sort("publishDate", SortOrder.DESC);
searchSourceBuilder.sort(SortBuilders.scoreSort().order(SortOrder.DESC));
} else if (order.equals("asc")) {
searchSourceBuilder.sort("publishDate", SortOrder.ASC);
searchSourceBuilder.sort(SortBuilders.scoreSort().order(SortOrder.ASC));
}
}
String[] fetchFields = new String[]{"id", "title", "summary", "content", "origin", "publishDate", "sourceAddress", "labels"};
searchSourceBuilder.fetchSource(fetchFields, null);
//默认最大数量是10000,设置为true后,显示准确数量
searchSourceBuilder.trackTotalHits(true);
//创建查询对象
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
if (CollectionUtils.isNotEmpty(ids)) {
boolQuery.must(QueryBuilders.termsQuery("id", ids));
} else {
boolQuery.must(QueryBuilders.termsQuery("subjectId.keyword", subjectIdList));
if (StringUtils.isNotBlank(searchWord)) {
if (category == 1) {
boolQuery.must(QueryBuilders.matchQuery(position, searchWord));
} else if (category == 2) {
boolQuery.must(QueryBuilders.matchPhraseQuery(position, searchWord));
}
}
if (StringUtils.isNotBlank(origin)) {
boolQuery.must(QueryBuilders.matchPhraseQuery("origin", origin));
}
if (StringUtils.isNotBlank(labelId)) {
boolQuery.must(QueryBuilders.nestedQuery("labels", QueryBuilders.termQuery("labels.relationId", labelId), ScoreMode.None));
}
if (StringUtils.isNotBlank(startTime) || StringUtils.isNotBlank(endTime)) {
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("publishDate");
if (StringUtils.isNotBlank(startTime)) {
rangeQueryBuilder.gte(EsDateUtil.esFieldDateFormat(startTime));
}
if (StringUtils.isNotBlank(endTime)) {
rangeQueryBuilder.lte(EsDateUtil.esFieldDateFormat(endTime));
}
boolQuery.filter(rangeQueryBuilder);
}
boolQuery.mustNot(QueryBuilders.termQuery("deleteFlag", "1"));
}
searchSourceBuilder.query(boolQuery);
searchRequest.source(searchSourceBuilder);
List<SubjectDataVo> list = new ArrayList<>();
try {
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHit[] searchHits = searchResponse.getHits().getHits();
for (SearchHit hit : searchHits) {
String queryInfo = hit.getSourceAsString();
SubjectDataVo info = JSONUtil.toBean(queryInfo, SubjectDataVo.class);
info.setPublishDate(EsDateUtil.esFieldDateMapping(info.getPublishDate()));
list.add(info);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/** /**
* 查看资讯详情 * 查看资讯详情
* *
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论