提交 0c25f2e7 作者: obcy

Merge remote-tracking branch 'origin/master'

......@@ -29,14 +29,12 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.net.URLEncoder;
import java.util.*;
import java.util.concurrent.CompletableFuture;
/**
* @Description: 知识
* 知识
* @Author: chenshiqiang
* @Version: V1.0
*/
......@@ -54,6 +52,9 @@ public class KnowledgeController {
@Autowired
private ILocalFileService localFileService;
@Autowired
private RedisUtil redisUtil;
/**
* 分页列表查询
*/
......@@ -78,6 +79,9 @@ public class KnowledgeController {
public Result<?> getById(@RequestParam String id) {
log.info("{}===query begin", new Date());
KnowledgeVO knowledgeVO = knowledgeService.getById(id);
if(knowledgeVO==null){
return Result.OK("nothing");
}
if (null != knowledgeVO.getPublishDate() && (!knowledgeVO.getPublishDate().isEmpty())) {
knowledgeVO.setPublishDate(EsDateUtil.esFieldDateMapping(knowledgeVO.getPublishDate()));
}
......@@ -154,7 +158,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("删除成功!");
}
......@@ -177,6 +181,7 @@ public class KnowledgeController {
params.put("score_threshold", intelligentQaParam.getScoreThreshold());
params.put("question", intelligentQaParam.getQuestion());
params.put("knowledge_base_id", intelligentQaParam.getKbKnowledgeIds().split(","));
params.put("size", intelligentQaParam.getSize());
String result = HttpUtil.doPost(intelligentQaUrl, params, 120000);
if (!result.isEmpty()) {
JSONObject jsonObject = JSON.parseObject(result);
......@@ -194,7 +199,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());
}
......@@ -214,8 +219,89 @@ public class KnowledgeController {
}
return Result.OK();
}
/**
* 预导出
*
* @param newsIds 资讯知识ids
* @param fileIds 文件知识ids
*/
@PostMapping(value = "/export")
public Result<?> exportCollectionXls(HttpServletRequest request,
String newsIds, String fileIds) {
log.info("newsIds:{},fileIds:{}",newsIds,fileIds);
if(!newsIds.isEmpty()){
knowledgeService.exportExcel(newsIds);
}
if(!fileIds.isEmpty()){
knowledgeService.exportPackage(fileIds);
}
return Result.OK(true);
}
/**
* 导出
*
* @param newsIds 资讯知识ids
* @param fileIds 文件知识ids
*/
@RequestMapping(value = "/downloadFile")
public void downloadXls(HttpServletResponse response, String newsIds, String fileIds) {
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
//获取下载路径
Object newsObject = redisUtil.get(newsIds);
Object fileObject = redisUtil.get(fileIds);
String fileName = UUID.randomUUID().toString().replace("-", "");
String newsFilePath = null;
String fileFilePath = null;
if (newsObject != null) {
newsFilePath = newsObject.toString();
}
if (fileObject != null) {
fileFilePath = fileObject.toString();
}
try {
if ((!newsIds.isEmpty())&&(!fileIds.isEmpty())) {
log.info("files and news package downloading ");
List<String> list=new ArrayList<>();
list.add(newsFilePath);
list.add(fileFilePath);
log.info("newsFilePath:{},fileFilePath:{}",newsFilePath,fileFilePath);
String filePath = knowledgeService.comprocessByName(list,fileName );
log.info("filePath:{}",filePath);
response.setHeader("content-Disposition", "attachment;filename=" + URLEncoder.encode(filePath, "UTF-8"));
ExcelExportUtil.download(response, filePath, true);
return;
}
if (fileIds.isEmpty()) {//news
log.info("only news downloading");
redisUtil.del(newsIds);
if(newsFilePath==null){
log.error("nothing");
return;
}
log.info("newsFilePath:{}",newsFilePath);
response.setHeader("content-Disposition", "attachment;filename=" + URLEncoder.encode(newsFilePath, "UTF-8"));
ExcelExportUtil.download(response, newsFilePath, true);
return;
}
log.info("only files downloading");
String s = knowledgeService.exportPackage(fileIds);
log.info("packageFile:{}",s);
response.setHeader("content-Disposition", "attachment;filename=" + URLEncoder.encode(s, "UTF-8"));
ExcelExportUtil.download(response, s, true);
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
}
@Data
class DeleteParam{
class DeleteParam {
private List<Knowledge> knowledgeList;
}
\ No newline at end of file
......@@ -53,4 +53,12 @@ public interface IKnowledgeService {
Result<?> doImportInfo(HttpServletRequest request,String userId);
void doExcel(HttpServletRequest request, String fileSuffix,String userId);
List<KnowledgeVO> listByIds(String ids);
void exportExcel(String ids);
String exportPackage(String ids);
String comprocessByName(List<String> list, String filePath);
}
......@@ -19,6 +19,8 @@ import com.zzsn.knowbase.vo.KnowledgeVO;
import com.zzsn.knowbase.vo.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.lucene.search.join.ScoreMode;
import org.apache.pdfbox.pdmodel.PDDocument;
......@@ -26,6 +28,7 @@ import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.TextPosition;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
......@@ -47,13 +50,12 @@ import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.*;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @Description: 知识
......@@ -85,16 +87,21 @@ class KnowledgeServiceImpl implements IKnowledgeService {
@Value("${files.storage}")
String filesStorage;
String tmpFile = "/storage" + Constants.FSP + "brap" + Constants.FSP + "download"
+ Constants.FSP;
@Autowired
private AsyncService asyncService;
private String TEMP_PATH="/storage/temp/";
private String TEMP_PATH = "/storage/temp/";
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Override
public void addKnowledge(KnowFile knowFile, Knowledge knowledge, KbAuthorizedUser userInfo) {
log.info("addKnowledge knowledge :{}", knowledge);
log.info("addKnowledge knowFile :{}", knowFile);
knowledge.setAuthor(userInfo.getName());
if (null == knowledge.getVerifyStatus()) {
knowledge.setVerifyStatus(0);
......@@ -115,44 +122,49 @@ class KnowledgeServiceImpl implements IKnowledgeService {
String html = null;
try {
String path = filesStorage + knowledge.getFiles().get(0).getFilePath();
String filePath=null;
String filePath = null;
if (".pdf".equals(knowFile.getFileType())) {
log.info("pdf");
try {
PDDocument document = PDDocument.load(new File(path));
StringBuilder allBuilder= new StringBuilder();
PDFTextStripper pdfTextStripper = new PDFTextStripper(){
private StringBuilder paragraphBuilder= new StringBuilder();
StringBuilder allBuilder = new StringBuilder();
PDFTextStripper pdfTextStripper = new PDFTextStripper() {
private StringBuilder paragraphBuilder = new StringBuilder();
@Override
protected void startPage(PDPage page) throws IOException{
protected void startPage(PDPage page) throws IOException {
super.startPage(page);
paragraphBuilder.setLength(0);//make paragraphBuilder empty
}
@Override
protected void writeLineSeparator() throws IOException{
protected void writeLineSeparator() throws IOException {
super.writeLineSeparator();
if(
paragraphBuilder.toString().endsWith(".")||
paragraphBuilder.toString().endsWith("。")||
paragraphBuilder.toString().endsWith("!")||
if (
paragraphBuilder.toString().endsWith(".") ||
paragraphBuilder.toString().endsWith("。") ||
paragraphBuilder.toString().endsWith("!") ||
paragraphBuilder.toString().endsWith("!")
){
) {
paragraphBuilder.append("\n");//mark paragraph
paragraphBuilder.append("😀");
}else {
} else {
paragraphBuilder.append("\n");//mark paragraph
}
}
@Override
protected void writeString(String string, List<TextPosition> textPositions) throws IOException{
super.writeString(string,textPositions);
protected void writeString(String string, List<TextPosition> textPositions) throws IOException {
super.writeString(string, textPositions);
paragraphBuilder.append(string);//add text content
}
@Override
protected void endPage(PDPage page) throws IOException{
protected void endPage(PDPage page) throws IOException {
super.endPage(page);
String paragraph= paragraphBuilder.toString().trim();//get paragraph
if(!paragraph.isEmpty()){
String paragraph = paragraphBuilder.toString().trim();//get paragraph
if (!paragraph.isEmpty()) {
allBuilder.append(paragraph);
}
}
......@@ -163,17 +175,18 @@ class KnowledgeServiceImpl implements IKnowledgeService {
pdfTextStripper.setEndPage(document.getNumberOfPages());
String text = pdfTextStripper.getText(document);
knowledge.setContentAll(text);
log.info("allBuilder:{}",allBuilder);
log.info("allBuilder:{}", allBuilder);
contentStringList = Arrays.asList(allBuilder.toString().split("😀"));
} catch (Exception e) {
log.error("parsing pdf error :{}", e.getMessage());
}
}else {
filePath=path;
} else {
filePath = path;
File file = new File(filePath);
log.info("word dealing filePath{}", filePath);
html = DocUtil.convertDocStream2Html(new FileInputStream(file));
log.info("html :{}", html);
String htmlWithTable = html.replace("</p>", "######</p>");
htmlWithTable = htmlWithTable.replace("</title>", "######</title>");
htmlWithTable = htmlWithTable.replace("</h1>", "######</h1>");
......@@ -181,20 +194,27 @@ class KnowledgeServiceImpl implements IKnowledgeService {
}
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
if (null == knowledge.getTitle()) {
for (String tem : contentStringList) {
String text = Jsoup.parse(tem).text();
log.info("info:{}", text);
if ((!tem.contains("<title>")) && (!text.isEmpty())) {
String[] s = text.split(" ");
knowledge.setTitle(s[0]);
break;
}
// for (String tem : contentStringList) {
// String text = Jsoup.parse(tem).text();
// log.info("info:{}", text);
// if ((!tem.contains("<title>")) && (!text.isEmpty())) {
// String[] s = text.split(" ");
// knowledge.setTitle(s[0]);
// break;
// }
// }
if (knowFile.getFileName() != null && knowFile.getFileName().contains(".")) {
knowledge.setTitle(knowFile.getFileName().substring(0, knowFile.getFileName().lastIndexOf('.')));
} else {
knowledge.setTitle(knowFile.getFileName());
}
}
List<String> messageContentList = contentStringList.stream()
......@@ -221,6 +241,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));
......@@ -228,19 +250,32 @@ 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());
}
//删除
deleteForPython(knowledge.getId(),knowledge.getKnowledgeProjectId());
BeanUtils.copyProperties(knowledge, knowledgeMessage);
knowledgeMessage.setType(knowledge.getTypeId());
if (null == knowledge.getKnowledgeProjectId()) {
KnowledgeVO knowledgeVO = this.getById(knowledge.getId());
knowledge.setKnowledgeProjectId(knowledgeVO.getKbKnowledgeId());
}
deleteForPython(knowledge.getId(), knowledge.getKnowledgeProjectId());
log.info("send message:{}", knowledgeMessage);
produceInfo.sendKnowledgeContents(knowledgeMessage);
}
@Override
public void updateKnowledge(Knowledge knowledge) {
esOpUtil.docSavaByEntity(Constants.ES_DATA_FOR_KNOWLEDGE, knowledge.getId(), knowledge);
//sync data
KbAuthorizedUser userInfo = SpringContextUtils.getUserInfo();
if (null == userInfo) {
return;
}
KnowledgeVO knowledgeVO = this.getById(knowledge.getId());
addKnowledge(knowledgeVO.getFiles().get(0), knowledge, userInfo);
}
@Override
......@@ -250,20 +285,21 @@ class KnowledgeServiceImpl implements IKnowledgeService {
}
CompletableFuture.runAsync(() -> {
for (Knowledge knowledge : knowledgeList) {
deleteForPython(knowledge.getId(),knowledge.getKbKnowledgeId());
for (Knowledge knowledge : knowledgeList) {
deleteForPython(knowledge.getId(), knowledge.getKbKnowledgeId());
}
});
}
public void deleteForPython(String id,String knowledgeBaseId) {
public void deleteForPython(String id, String knowledgeBaseId) {
JSONObject params = new JSONObject();
List <String > lidList=new ArrayList<>();
List<String> lidList = new ArrayList<>();
lidList.add(id);
params.put("id", lidList);
params.put("knowledge_base_id", knowledgeBaseId);
log.info("delete param:{}", params);
try {
HttpUtil.doPost(deleteUrl, params, 120000);
} catch (IOException e) {
......@@ -310,8 +346,8 @@ class KnowledgeServiceImpl implements IKnowledgeService {
searchSourceBuilder.from((pageNo - 1) * pageSize);
//默认按照置顶以及时间倒序排列
//根据topNum正序查找,查询置顶数据
searchSourceBuilder.sort("publishDate", SortOrder.DESC);
if ("publishDate".equals(column)) {
// searchSourceBuilder.sort("publishDate", SortOrder.DESC);
if ("publishTime".equals(column)) {
if ("desc".equals(order)) {
searchSourceBuilder.sort("publishDate", SortOrder.DESC);
} else if ("asc".equals(order)) {
......@@ -384,7 +420,7 @@ class KnowledgeServiceImpl implements IKnowledgeService {
boolQuery.must(multiMatchQueryBuilder);
}
if (StringUtils.isNotEmpty(knowledgeParam.getOrigin())) {
boolQuery.must(QueryBuilders.matchPhraseQuery("origin", knowledgeParam.getOrigin()));
boolQuery.must(QueryBuilders.matchQuery("origin", knowledgeParam.getOrigin()));
}
if (StringUtils.isNotEmpty(knowledgeParam.getVerifierName())) {
boolQuery.must(QueryBuilders.matchPhraseQuery("verifierName", knowledgeParam.getVerifierName()));
......@@ -415,6 +451,14 @@ class KnowledgeServiceImpl implements IKnowledgeService {
if (StringUtils.isNotBlank(knowledgeParam.getEndTime())) {
boolQuery.filter(QueryBuilders.rangeQuery("publishDate").lte(EsDateUtil.esFieldDateFormat(knowledgeParam.getEndTime())));
}
//时间过滤筛选
if (StringUtils.isNotBlank(knowledgeParam.getVerifyStartTime())) {
boolQuery.filter(QueryBuilders.rangeQuery("verifyTime").gte(EsDateUtil.esFieldDateFormat(knowledgeParam.getStartTime())));
}
if (StringUtils.isNotBlank(knowledgeParam.getVerifyEndTime())) {
boolQuery.filter(QueryBuilders.rangeQuery("verifyTime").lte(EsDateUtil.esFieldDateFormat(knowledgeParam.getEndTime())));
}
outer.should(boolQuery);
searchSourceBuilder.query(outer);
searchRequest.source(searchSourceBuilder);
......@@ -424,20 +468,24 @@ class KnowledgeServiceImpl implements IKnowledgeService {
} catch (IOException e) {
e.printStackTrace();
}
SearchHit[] searchHits = searchResponse.getHits().getHits();
List<KnowledgeVO> list = new ArrayList<>();
for (SearchHit hit : searchHits) {
String queryInfo = hit.getSourceAsString();
KnowledgeVO info = JSONUtil.toBean(queryInfo, KnowledgeVO.class);
info.setPublishDate(EsDateUtil.esFieldDateMapping(info.getPublishDate()));
info.setVerifyTime(EsDateUtil.esFieldDateMapping(info.getVerifyTime()));
list.add(info);
}
IPage<KnowledgeVO> pageData = new Page<>(pageNo, pageSize, searchResponse.getHits().getTotalHits().value);
if (null != searchResponse && null != searchResponse.getHits()) {
SearchHit[] searchHits = searchResponse.getHits().getHits();
List<KnowledgeVO> list = new ArrayList<>();
for (SearchHit hit : searchHits) {
String queryInfo = hit.getSourceAsString();
KnowledgeVO info = JSONUtil.toBean(queryInfo, KnowledgeVO.class);
info.setPublishDate(EsDateUtil.esFieldDateMapping(info.getPublishDate()));
info.setVerifyTime(EsDateUtil.esFieldDateMapping(info.getVerifyTime()));
list.add(info);
}
pageData.setRecords(list);
return pageData;
IPage<KnowledgeVO> pageData = new Page<>(pageNo, pageSize, searchResponse.getHits().getTotalHits().value);
pageData.setRecords(list);
return pageData;
}
return new Page<>(pageNo, pageSize, 0);
}
@Override
......@@ -561,7 +609,7 @@ class KnowledgeServiceImpl implements IKnowledgeService {
String fileSuffix = multipartFile.getOriginalFilename().substring(index + 1);
if ("xls".equals(fileSuffix) || "xlsx".equals(fileSuffix)) {
//文件校验
if(!this.checkExcel(multipartFile)){
if (!this.checkExcel(multipartFile)) {
log.error("excel格式不对");
return Result.error("模版错误,请下载正确模板,再次上传!");
}
......@@ -577,8 +625,8 @@ class KnowledgeServiceImpl implements IKnowledgeService {
Workbook workbook = ExcelExportUtil.getWorkbook(multipartFile);
if (workbook != null) {
List<String> list = ExcelExportUtil.getSheetTitles(workbook);
return list != null&&list.contains("标题")&&list.contains("正文")
&&list.contains("作者")&&list.contains("来源")&&list.contains("发布时间");
return list != null && list.contains("标题") && list.contains("正文")
&& list.contains("作者") && list.contains("来源") && list.contains("发布时间");
}
return false;
}
......@@ -604,6 +652,101 @@ 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;
}
@Override
public void exportExcel(String ids) {
//获取数据
if (redisUtil.get(ids) == null) {
try {
String[] arr = new String[]{"标题", "正文", "作者", "来源", "发布时间"};
List<KnowledgeVO> informationList = this.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();
log.error(e.getMessage());
}
}
}
@Override
public String exportPackage(String ids) {
List<KnowledgeVO> knowledgeVOS = this.listByIds(ids);
List<String> pathList = new ArrayList<>(knowledgeVOS.size());
for (KnowledgeVO knowledgeVO : knowledgeVOS) {
pathList.add(filesStorage + knowledgeVO.getFiles().get(0).getFilePath());
}
String filePackage=UUID.randomUUID().toString().replace("-", "");
ZipUtils.compressFiles(tmpFile,filePackage,pathList );
String packagePath=tmpFile+filePackage+".zip";
redisUtil.set(ids, packagePath, 3600 * 24);
return packagePath;
}
/*
* 将所有的文件都压缩到一个文件中去
*/
@Override
public String comprocessByName(List<String> fileNameList, String downloadFileName) {
if (fileNameList.size() == 1) {
return fileNameList.get(0);
}
ZipUtils.compressFiles(tmpFile,downloadFileName,fileNameList);
return tmpFile+downloadFileName+".zip";
}
//导入发布库数据
public void importInfo(List<List<String>> lists, String kbKnowledgeId, String knowledgeProjectId, String typeId, String createBy) {
for (List<String> info : lists) {
......@@ -683,4 +826,19 @@ class KnowledgeServiceImpl implements IKnowledgeService {
searchInfo + "#";
}
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;
}
}
......@@ -112,6 +112,7 @@ public class LocalFileServiceImpl implements ILocalFileService {
return result; // create user metadata and return it
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
// if the operation of file uploading is unsuccessful, an error occurs
Result result = Result.error("上传文件时出现问题!");
......
......@@ -415,6 +415,7 @@ public class EsOpUtil {
public Boolean docDeleteById(String index, String id) {
try {
DeleteRequest deleteRequest = new DeleteRequest(index, id);
deleteRequest.setRefreshPolicy("true");
DeleteResponse delete = client.delete(deleteRequest, RequestOptions.DEFAULT);
if (delete.status() == RestStatus.OK) {
log.info("DELETE /{}/_doc/{}/\r\n", index, id);
......
......@@ -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;
}
}
package com.zzsn.knowbase.util;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @Description
* @ClassName ZipUtils
* @Author yuhuofei
* @Date 2022/8/10 20:37
* @Version 1.0
*/
@Slf4j
public class ZipUtils {
/**
* @param zipPathDir 压缩包路径 ,如 /home/data/zip-folder/
* @param zipFileName 压缩包名称 ,如 测试文件.zip
* @param fileList 要压缩的文件列表(绝对路径),如 /home/person/test/测试.doc,/home/person/haha/测试.doc
* @return
*/
public static void compressFiles(String zipPathDir, String zipFileName, List<String> fileList) {
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(zipPathDir + zipFileName+".zip")))) {
File zipFile = new File(zipPathDir);
if (!zipFile.exists()) {
zipFile.mkdirs();
}
for (String filePath : fileList) {
log.info("file package file :{}",filePath);
File file = new File(filePath);
if (file.exists()) {
int index = file.getName().lastIndexOf('.');
ZipEntry zipEntry = new ZipEntry(file.getName().substring(0, index) + "-" + dateRandom18() + file.getName().substring(index));
zos.putNextEntry(zipEntry);
byte[] buffer = new byte[2048];
compressSingleFile(file, zos, buffer);
}
}
zos.flush();
} catch (Exception e) {
log.error("压缩所有文件成zip包出错{}" , e.getMessage());
}
}
//压缩单个文件
public static void compressSingleFile(File file, ZipOutputStream zos, byte[] buffer) {
int len;
try (FileInputStream fis = new FileInputStream(file)) {
while ((len = fis.read(buffer)) > 0) {
zos.write(buffer, 0, len);
zos.flush();
}
zos.closeEntry();
} catch (IOException e) {
System.out.println("====压缩单个文件异常====" + e);
}
}
//生成随机数
public static String dateRandom18() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
String date = simpleDateFormat.format(new Date());
String timeMillis = String.valueOf(System.currentTimeMillis());
String fiveNumber = timeMillis.substring(timeMillis.length() - 6);
String tempRandom = String.valueOf(Math.random());
String number = tempRandom.substring(tempRandom.length() - 4);
return date + fiveNumber + number;
}
//测试方法
public static void main(String[] args) {
String zipPathDir = "D:/";
String zipFileName = "测试文件.zip";
List<String> list = new ArrayList<>();
list.add("D:/a.txt");
list.add("D:/b.txt");
compressFiles(zipPathDir, zipFileName, list);
}
}
......@@ -16,5 +16,6 @@ public class IntelligentQaParam {
private String question;
private String kbKnowledgeIds;
private Integer scoreThreshold=700;
private Integer size=20;
}
......@@ -27,7 +27,9 @@ public class KnowledgeVO {
private String publishDate;
private String createTime;
private String kbKnowledgeId;
private String KnowledgeProjectId;
private String type;
private String typeId;
private String verifierName;
private String origin;
private String author;
......
......@@ -24,7 +24,7 @@ spring:
requiredAcks: 1
redis:
database: 0
host: 114.115.236.206
host: 114.116.90.53
lettuce:
pool:
max-active: 8 #最大连接数据库连接数,设 0 为没有限制
......@@ -32,7 +32,7 @@ spring:
max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
min-idle: 0 #最小等待连接中的数量,设 0 为没有限制
shutdown-timeout: 100ms
port: 6379
port: 6380
password: clbzzsn
thymeleaf:
......@@ -58,11 +58,14 @@ know:
document:
server:
host: http://114.116.116.241:9088
# host: http://192.168.1.71:9088
files:
storage: /storage/know/
# storage: C:/know/
docservice:
url:
site: http://114.116.116.241:80/
# site: http://192.168.1.216:80/
converter: ConvertService.ashx
command: coauthoring/CommandService.ashx
api: web-apps/apps/api/documents/api.js
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论