提交 f0645305 作者: chenshiqiang

excel export

上级 f74747e8
......@@ -18,6 +18,9 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
......@@ -28,12 +31,11 @@ import org.springframework.web.util.WebUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
/**
* @Description: 知识
......@@ -54,6 +56,9 @@ public class KnowledgeController {
@Autowired
private ILocalFileService localFileService;
@Autowired
private RedisUtil redisUtil;
/**
* 分页列表查询
*/
......@@ -154,7 +159,7 @@ public class KnowledgeController {
* @return
*/
@PostMapping(value = "/delete")
public Result<?> delete( @RequestBody DeleteParam deleteParam) {
public Result<?> delete(@RequestBody DeleteParam deleteParam) {
knowledgeService.deleteKnowledge(deleteParam.getKnowledgeList());
return Result.OK("删除成功!");
}
......@@ -195,7 +200,7 @@ public class KnowledgeController {
public Result<?> importInfo(HttpServletRequest request, HttpServletResponse response) {
KbAuthorizedUser userInfo = SpringContextUtils.getUserInfo();
assert userInfo != null;
return knowledgeService.doImportInfo(request, userInfo.getId());
return knowledgeService.doImportInfo(request, userInfo.getId());
}
......@@ -215,8 +220,90 @@ public class KnowledgeController {
}
return Result.OK();
}
/*
* 导出excel(专题-已采集)
*
* @param request
* @param
* @update by wp
* 异步调用
*
*/
@PostMapping(value = "/exportCollectionXls")
public Result<?> exportCollectionXls(HttpServletRequest request, HttpServletResponse response, KnowledgeVO knowledgeVO,
String ids,
@RequestParam(name = "isAll", defaultValue = "0") String isAll) {
//获取数据
if (redisUtil.get(ids) == null) {
try {
String[] arr = new String[]{"标题", "正文", "作者", "来源", "发布时间"};
List<KnowledgeVO> informationList = knowledgeService.listByIds(ids);
if (CollectionUtils.isNotEmpty(informationList)) {
//动态补充表头
List<String> headers = Arrays.asList(arr);
//每个sheet页最多5000条数据
List<List<KnowledgeVO>> partition = ListUtils.partition(informationList, 5000);
XSSFWorkbook workbook = new XSSFWorkbook();
for (int i = 0; i < partition.size(); i++) {
List<List<String>> rows = formatData(partition.get(i));
ExcelExportUtil.exportExcelData(workbook, i, headers, rows, "sheet" + (i + 1));
}
File fileDir = ExcelExportUtil.getFileDir();
String filePath = fileDir.getAbsolutePath() + File.separator + UUID.randomUUID().toString().replace("-","") + "info.xlsx";
FileOutputStream outputStream = new FileOutputStream(filePath);
workbook.write(outputStream);
redisUtil.set(ids, filePath, 3600*24);
}
} catch (Exception e) {
e.printStackTrace();
return Result.OK(false);
}
}
return Result.OK(true);
}
/*
* 导出excel(专题-已入库)
*
* @param request
* @param
* @update by wp
* 异步调用
*
*/
@RequestMapping(value = "/downloadXls")
public void downloadXls(HttpServletResponse response,String ids) {
//获取下载路径
Object object = redisUtil.get(ids);
if (object != null) {
String filePath = object.toString();
try {
redisUtil.del(ids);
ExcelExportUtil.download(response, filePath, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private List<List<String>> formatData(List<KnowledgeVO> knowledgeVOS) {
List<List<String>> list = new ArrayList<>(knowledgeVOS.size());
for (KnowledgeVO knowledgeVO : knowledgeVOS) {
List<String> innerList=new ArrayList<>();
innerList.add(knowledgeVO.getTitle());
innerList.add(knowledgeVO.getContentAll());
innerList.add(knowledgeVO.getAuthor());
innerList.add(knowledgeVO.getOrigin());
innerList.add(knowledgeVO.getPublishDate());
list.add(innerList);
}
return list;
}
}
@Data
class DeleteParam{
class DeleteParam {
private List<Knowledge> knowledgeList;
}
\ No newline at end of file
......@@ -53,4 +53,6 @@ public interface IKnowledgeService {
Result<?> doImportInfo(HttpServletRequest request,String userId);
void doExcel(HttpServletRequest request, String fileSuffix,String userId);
List<KnowledgeVO> listByIds(String ids);
}
package com.zzsn.knowbase.service.impl;
import cn.hutool.json.JSONUtil;
import cn.hutool.system.UserInfo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
......@@ -180,7 +179,7 @@ class KnowledgeServiceImpl implements IKnowledgeService {
filePath = path;
File file = new File(filePath);
log.info("word dealing filePath{}",filePath);
log.info("word dealing filePath{}", filePath);
html = DocUtil.convertDocStream2Html(new FileInputStream(file));
log.info("html :{}", html);
String htmlWithTable = html.replace("</p>", "######</p>");
......@@ -204,10 +203,10 @@ class KnowledgeServiceImpl implements IKnowledgeService {
// break;
// }
// }
if(knowFile.getFileName()!=null&&knowFile.getFileName().contains(".")){
if (knowFile.getFileName() != null && knowFile.getFileName().contains(".")) {
knowledge.setTitle(knowFile.getFileName().substring(0, knowFile.getFileName().lastIndexOf('.')));
}else {
} else {
knowledge.setTitle(knowFile.getFileName());
}
......@@ -237,6 +236,8 @@ class KnowledgeServiceImpl implements IKnowledgeService {
knowledge.setContents(contentList);
knowledgeMessage.setContents(contentList);
}
BeanUtils.copyProperties(knowledge, knowledgeMessage);
knowledgeMessage.setType(knowledge.getTypeId());
//id为空表示新增
if (null == knowledge.getId()) {
knowledge.setId(codeGenerateUtil.geneIdNo(Constants.FINANCE, 8));
......@@ -244,6 +245,11 @@ class KnowledgeServiceImpl implements IKnowledgeService {
} else {
//id不为空表示修改数据
esOpUtil.docEditByEntity(Constants.ES_DATA_FOR_KNOWLEDGE, knowledge.getId(), knowledge);
KnowledgeVO knowledgeVO = this.getById(knowledge.getId());
knowledgeMessage.setKbKnowledgeId(knowledgeVO.getKbKnowledgeId());
knowledgeMessage.setKnowledgeProjectId(knowledgeVO.getKnowledgeProjectId());
knowledgeMessage.setType(knowledgeVO.getTypeId());
}
//删除
if (null == knowledge.getKnowledgeProjectId()) {
......@@ -251,14 +257,7 @@ class KnowledgeServiceImpl implements IKnowledgeService {
knowledge.setKnowledgeProjectId(knowledgeVO.getKbKnowledgeId());
}
deleteForPython(knowledge.getId(), knowledge.getKnowledgeProjectId());
BeanUtils.copyProperties(knowledge, knowledgeMessage);
knowledgeMessage.setType(knowledge.getTypeId());
log.info("send message:{}", knowledgeMessage);
KnowledgeVO knowledgeVO = this.getById(knowledge.getId());
knowledgeMessage.setKbKnowledgeId(knowledgeVO.getKbKnowledgeId());
knowledgeMessage.setKnowledgeProjectId(knowledgeVO.getKnowledgeProjectId());
knowledgeMessage.setType(knowledgeVO.getType());
produceInfo.sendKnowledgeContents(knowledgeMessage);
}
......@@ -648,6 +647,41 @@ class KnowledgeServiceImpl implements IKnowledgeService {
}
}
@Override
public List<KnowledgeVO> listByIds(String ids) {
List<KnowledgeVO> list = new ArrayList<>();
SearchRequest searchRequest = new SearchRequest(Constants.ES_DATA_FOR_KNOWLEDGE);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//默认最大数量是10000,设置为true后,显示准确数量
searchSourceBuilder.trackTotalHits(true);
//创建查询对象
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
if (!ids.isEmpty()) {
List<String> idList = Arrays.asList(ids.split(","));
boolQuery.must(QueryBuilders.termsQuery("id", idList));
}
searchSourceBuilder.query(boolQuery);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = null;
try {
searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
if (null != searchResponse && null != searchResponse.getHits()) {
SearchHit[] searchHits = searchResponse.getHits().getHits();
for (SearchHit hit : searchHits) {
String queryInfo = hit.getSourceAsString();
KnowledgeVO info = JSONUtil.toBean(queryInfo, KnowledgeVO.class);
info.setPublishDate(EsDateUtil.esFieldDateMapping(info.getPublishDate()));
list.add(info);
}
}
return list;
}
//导入发布库数据
public void importInfo(List<List<String>> lists, String kbKnowledgeId, String knowledgeProjectId, String typeId, String createBy) {
for (List<String> info : lists) {
......
......@@ -12,14 +12,8 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
......@@ -255,4 +249,90 @@ public class ExcelExportUtil {
}
//多个sheet
public static void exportExcelData(XSSFWorkbook workbook, int sheetNum, List<String> keyList, List<List<String>> rows, String sheetName) {
Sheet sheet = workbook.createSheet();
//多个sheet
workbook.setSheetName(sheetNum,sheetName);
sheet.setDefaultColumnWidth(20);
sheet.setDefaultRowHeight((short) 400);
XSSFCellStyle titleStyle = ExcelExportUtil.getHeaderStyle(workbook);
XSSFCellStyle rowStrStyle = ExcelExportUtil.getRowStrStyle(workbook);
// 产生表格标题行
Row row = sheet.createRow(0);
row.setHeight((short) 400);
Cell cell;
List<String> colData = new ArrayList<>(keyList);
for (int i = 0; i < colData.size(); i++) {
cell = row.createCell(i, CellType.STRING);
cell.setCellStyle(titleStyle);
cell.setCellValue(new XSSFRichTextString(colData.get(i)));
}
// 数据行
for (int m = 0; m < rows.size(); m++) {
List<String> rowData = rows.get(m);
row = sheet.createRow(m + 1);
row.setHeight((short) 400);
int i=0;
for (String rowDatum : rowData) {
createCell(rowStrStyle, row, i, rowDatum);
i++;
}
}
}
private static void createCell(XSSFCellStyle rowStrStyle, Row row, int index , String value){
Cell cell = row.createCell(index, CellType.STRING);
cell.setCellStyle(rowStrStyle);
cell.setCellValue(value);
}
/**
* 获取标题栏样式
*
* @param workbook
* @return
*/
private static XSSFCellStyle getHeaderStyle(XSSFWorkbook workbook) {
// 生成一个样式
XSSFCellStyle style = workbook.createCellStyle();
// 设置这些样式
style.setFillForegroundColor(IndexedColors.SKY_BLUE.index);
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
style.setBorderTop(BorderStyle.THIN);
style.setAlignment(HorizontalAlignment.CENTER);
// style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
// 生成一个字体
XSSFFont font = workbook.createFont();
font.setColor(IndexedColors.BLACK.index);
font.setFontHeightInPoints((short) 9);
// 把字体应用到当前的样式
style.setFont(font);
return style;
}
/**
* 获取字符串型内容栏样式
*
* @return
*/
private static XSSFCellStyle getRowStrStyle(XSSFWorkbook workbook) {
// 生成一个样式
XSSFCellStyle style = workbook.createCellStyle();
// 设置这些样式
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
style.setBorderTop(BorderStyle.THIN);
style.setAlignment(HorizontalAlignment.CENTER);
// 生成一个字体
XSSFFont font = workbook.createFont();
font.setColor(IndexedColors.BLACK.index);
font.setFontHeightInPoints((short) 9);
font.setBold(true);
// 把字体应用到当前的样式
style.setFont(font);
return style;
}
}
......@@ -29,6 +29,7 @@ public class KnowledgeVO {
private String kbKnowledgeId;
private String KnowledgeProjectId;
private String type;
private String typeId;
private String verifierName;
private String origin;
private String author;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论