提交 539dee42 作者: chenshiqiang

import

上级 c7b759e7
...@@ -197,6 +197,13 @@ ...@@ -197,6 +197,13 @@
<version>1.11</version> <version>1.11</version>
</dependency> </dependency>
<!-- excel工具包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.10</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -26,6 +26,7 @@ import org.springframework.web.multipart.MultipartHttpServletRequest; ...@@ -26,6 +26,7 @@ import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.util.WebUtils; import org.springframework.web.util.WebUtils;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -101,6 +102,7 @@ public class KnowledgeController { ...@@ -101,6 +102,7 @@ public class KnowledgeController {
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
List<Result<KnowFile>> resultList = localFileService.upload(fileMap); List<Result<KnowFile>> resultList = localFileService.upload(fileMap);
KbAuthorizedUser userInfo = SpringContextUtils.getUserInfo(); KbAuthorizedUser userInfo = SpringContextUtils.getUserInfo();
knowledge.setImportData(0);
CompletableFuture.runAsync(()-> this.add(resultList,knowledge,userInfo)); CompletableFuture.runAsync(()-> this.add(resultList,knowledge,userInfo));
return Result.OK("添加成功!"); return Result.OK("添加成功!");
} }
...@@ -168,4 +170,14 @@ public class KnowledgeController { ...@@ -168,4 +170,14 @@ public class KnowledgeController {
} }
return Result.error("响应失败"); return Result.error("响应失败");
} }
/**
* 通过excel导入
*
* @return
*/
@RequestMapping(value = "/importInfo", method = RequestMethod.POST)
public Result<?> importInfo(HttpServletRequest request, HttpServletResponse response) {
return knowledgeService.doImportInfo(request);
}
} }
...@@ -111,6 +111,7 @@ public class Knowledge implements Serializable { ...@@ -111,6 +111,7 @@ public class Knowledge implements Serializable {
private List<Content> contents; private List<Content> contents;
private List<KnowFile> files; private List<KnowFile> files;
private Integer score; private Integer score;
private Integer importData;
} }
......
...@@ -6,6 +6,9 @@ import com.zzsn.knowbase.entity.KnowFile; ...@@ -6,6 +6,9 @@ import com.zzsn.knowbase.entity.KnowFile;
import com.zzsn.knowbase.entity.Knowledge; import com.zzsn.knowbase.entity.Knowledge;
import com.zzsn.knowbase.vo.KnowledgeParam; import com.zzsn.knowbase.vo.KnowledgeParam;
import com.zzsn.knowbase.vo.KnowledgeVO; import com.zzsn.knowbase.vo.KnowledgeVO;
import com.zzsn.knowbase.vo.Result;
import javax.servlet.http.HttpServletRequest;
/** /**
* @Description: 知识服务 * @Description: 知识服务
...@@ -45,4 +48,8 @@ public interface IKnowledgeService { ...@@ -45,4 +48,8 @@ public interface IKnowledgeService {
IPage<KnowledgeVO> listFromPython(KnowledgeParam knowledgeParam, Integer pageNo, Integer pageSize, String column, String order); IPage<KnowledgeVO> listFromPython(KnowledgeParam knowledgeParam, Integer pageNo, Integer pageSize, String column, String order);
KnowledgeVO getById(String id); KnowledgeVO getById(String id);
Result<?> doImportInfo(HttpServletRequest request);
void doExcel(HttpServletRequest request, String fileSuffix);
} }
package com.zzsn.knowbase.service.impl;
import com.zzsn.knowbase.service.IKnowledgeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
/**
* Description: 异步处理service
* Author: EDY
* Date: 2023/7/26
*/
@Service
public class AsyncService {
@Autowired
@Lazy
IKnowledgeService knowledgeService;
//异步执行文件解析
@Async
public void doimport(HttpServletRequest request, MultipartFile multipartFile, String fileSuffix) {
String subjectId = request.getParameter("subjectId");
String isTopping = request.getParameter("isTopping");
String isExamine = request.getParameter("isExamine");
knowledgeService.doExcel(request, fileSuffix);
}
}
package com.zzsn.knowbase.service.impl; package com.zzsn.knowbase.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.obs.services.model.PutObjectResult;
import com.zzsn.knowbase.constant.Constants; import com.zzsn.knowbase.constant.Constants;
import com.zzsn.knowbase.entity.*; import com.zzsn.knowbase.entity.*;
import com.zzsn.knowbase.enums.KnowTypeEnum; import com.zzsn.knowbase.enums.KnowTypeEnum;
...@@ -16,6 +19,7 @@ import com.zzsn.knowbase.service.KbKnowledgeProjectService; ...@@ -16,6 +19,7 @@ import com.zzsn.knowbase.service.KbKnowledgeProjectService;
import com.zzsn.knowbase.util.*; import com.zzsn.knowbase.util.*;
import com.zzsn.knowbase.vo.KnowledgeParam; import com.zzsn.knowbase.vo.KnowledgeParam;
import com.zzsn.knowbase.vo.KnowledgeVO; import com.zzsn.knowbase.vo.KnowledgeVO;
import com.zzsn.knowbase.vo.Result;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -36,7 +40,11 @@ import org.springframework.beans.BeanUtils; ...@@ -36,7 +40,11 @@ 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;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
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.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
...@@ -71,6 +79,9 @@ class KnowledgeServiceImpl implements IKnowledgeService { ...@@ -71,6 +79,9 @@ class KnowledgeServiceImpl implements IKnowledgeService {
@Value("${files.storage}") @Value("${files.storage}")
String filesStorage; String filesStorage;
@Autowired
private AsyncService asyncService;
@Override @Override
public void addKnowledge(KnowFile knowFile, Knowledge knowledge, KbAuthorizedUser userInfo) { public void addKnowledge(KnowFile knowFile, Knowledge knowledge, KbAuthorizedUser userInfo) {
...@@ -92,8 +103,8 @@ class KnowledgeServiceImpl implements IKnowledgeService { ...@@ -92,8 +103,8 @@ class KnowledgeServiceImpl implements IKnowledgeService {
File file = new File(filesStorage + knowledge.getFiles().get(0).getFilePath()); File file = new File(filesStorage + knowledge.getFiles().get(0).getFilePath());
html = DocUtil.convertDocStream2Html(new FileInputStream(file)); html = DocUtil.convertDocStream2Html(new FileInputStream(file));
String htmlWithTable = html.replace("</p>", "######</p>"); String htmlWithTable = html.replace("</p>", "######</p>");
htmlWithTable = htmlWithTable.replace("</title>", "######</title>"); htmlWithTable = htmlWithTable.replace("</title>", "######</title>");
htmlWithTable = htmlWithTable.replace("</h1>", "######</h1>"); htmlWithTable = htmlWithTable.replace("</h1>", "######</h1>");
contentStringList = Arrays.asList(htmlWithTable.split("######")); contentStringList = Arrays.asList(htmlWithTable.split("######"));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
...@@ -104,7 +115,7 @@ class KnowledgeServiceImpl implements IKnowledgeService { ...@@ -104,7 +115,7 @@ class KnowledgeServiceImpl implements IKnowledgeService {
for (String tem : contentStringList) { for (String tem : contentStringList) {
String text = Jsoup.parse(tem).text(); String text = Jsoup.parse(tem).text();
log.info("info:{}", text); log.info("info:{}", text);
if ((!tem.contains("<title>"))&&(!text.isEmpty())) { if ((!tem.contains("<title>")) && (!text.isEmpty())) {
knowledge.setTitle(text); knowledge.setTitle(text);
break; break;
} }
...@@ -445,6 +456,87 @@ class KnowledgeServiceImpl implements IKnowledgeService { ...@@ -445,6 +456,87 @@ class KnowledgeServiceImpl implements IKnowledgeService {
return null; return null;
} }
@Override
public Result<?> doImportInfo(HttpServletRequest request) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
if (fileMap.size() < 1) {
return Result.error("请上传excel或者word文件");
}
MultipartFile multipartFile = fileMap.get(new ArrayList<String>(fileMap.keySet()).get(0));
int index = multipartFile.getOriginalFilename().lastIndexOf(".");
String fileSuffix = multipartFile.getOriginalFilename().substring(index + 1);
if ("doc".equals(fileSuffix) || "docx".equals(fileSuffix) || "xls".equals(fileSuffix) || "xlsx".equals(fileSuffix)) {
asyncService.doimport(request, multipartFile, fileSuffix);
return Result.OK("已进行处理");
} else {
return Result.error("不支持的文件类型");
}
}
@Override
public void doExcel(HttpServletRequest request, String fileSuffix) {
String kbKnowledgeId = request.getParameter("kbKnowledgeId");
String knowledgeProjectId = request.getParameter("knowledgeProjectId");
String typeId = request.getParameter("typeId");
String createBy = request.getParameter("createBy");
try {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
MultipartFile multipartFile = fileMap.get(new ArrayList<String>(fileMap.keySet()).get(0));
//1.上传文件到文件服务器
// 将MultipartFile的文件内容保存到字节数组
byte[] fileData = multipartFile.getBytes();
List<List<String>> lists = ExcelExportUtil.readExcel(new ByteArrayInputStream(fileData), 1, 9);
//存入es
importInfo(lists, kbKnowledgeId, knowledgeProjectId, typeId,createBy);
} catch (Exception e) {
e.printStackTrace();
}
}
//导入发布库数据
public void importInfo(List<List<String>> lists, String kbKnowledgeId, String knowledgeProjectId, String typeId,String createBy ) {
for (List<String> info : lists) {
try {
Knowledge specialInformation = Knowledge.builder()
.kbKnowledgeId(kbKnowledgeId)
.knowledgeProjectId(knowledgeProjectId)
.typeId(typeId)
.createBy(createBy)
.importData(1)
.build();
specialInformation.setId(codeGenerateUtil.geneIdNo(Constants.FINANCE, 8));
//判断正文是否为空
if (StringUtils.isEmpty(info.get(3))) {
log.error("上传的数据为空");
return;
}
if (StringUtils.isNotEmpty(info.get(1))) {
specialInformation.setTitle(info.get(1));
}
if (StringUtils.isNotEmpty(info.get(4))) {
specialInformation.setAuthor(info.get(4));
}
if (StringUtils.isNotEmpty(info.get(5))) {
specialInformation.setOrigin(info.get(5));
}
if (StringUtils.isNotEmpty(info.get(6))) {
specialInformation.setPublishDate(EsDateUtil.esFieldDateFormat(info.get(6)));
}
specialInformation.setDeleteFlag(0);
specialInformation.setCreateTime(cn.hutool.core.date.DateUtil.format(new Date(), "yyyy-MM-dd'T'HH:mm:ss"));
esOpUtil.docSavaByEntity(Constants.ES_DATA_FOR_KNOWLEDGE, specialInformation.getId(), specialInformation);
} catch (NumberFormatException e) {
log.error("处理异常");
}
}
}
private String genKey(KnowledgeParam knowledgeParam) { private String genKey(KnowledgeParam knowledgeParam) {
String type = (knowledgeParam.getTypeIds() == null ? "" : knowledgeParam.getTypeIds()); String type = (knowledgeParam.getTypeIds() == null ? "" : knowledgeParam.getTypeIds());
String knowledgeProjectId = (knowledgeParam.getKnowledgeProjectId() == null ? "" : knowledgeParam.getKnowledgeProjectId()); String knowledgeProjectId = (knowledgeParam.getKnowledgeProjectId() == null ? "" : knowledgeParam.getKnowledgeProjectId());
......
package com.zzsn.knowbase.util;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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 java.io.InputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
public class ExcelExportUtil {
/**
* 读取excel数据
*
* @param firstRow 第一行有用数据(0表示第一行)
* @param columnNum 有用数据的总列数
* @return java.util.List<java.util.List < java.lang.String>>
*/
public static List<List<String>> readExcel(InputStream inputStream, Integer firstRow, Integer columnNum) throws Exception {
List<List<String>> dataList = new ArrayList<>();
//获取整个excel
XSSFWorkbook hb = new XSSFWorkbook(inputStream);
int sheets = hb.getNumberOfSheets();
for (int i = 0; i < sheets; i++) {
XSSFSheet sheet = hb.getSheetAt(i);
//第一行
int firstRowNum = sheet.getFirstRowNum();
//最后一行
int lastRowNum = sheet.getPhysicalNumberOfRows();
for (int j = firstRowNum + firstRow; j < lastRowNum; j++) {
//获取行
XSSFRow row = sheet.getRow(j);
if (row != null) {
List<String> list = new ArrayList<>();
for (int m = 0; m < columnNum; m++) {
String data = ExcelExportUtil.getValue(row.getCell(m)).trim();
list.add(data);
}
dataList.add(list);
}
}
}
return dataList;
}
public static String getValue(XSSFCell xssfCell) {
if (xssfCell == null || xssfCell.toString().trim().equals("")) {
return "";
}
int cellType = xssfCell.getCellType();
if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {
if (HSSFDateUtil.isCellDateFormatted(xssfCell)) {
return TimeUtil.getDateString(xssfCell.getDateCellValue());
} else {
//防止数字变成科学计数法的形式
DecimalFormat df = new DecimalFormat("0");
return df.format(xssfCell.getNumericCellValue());
}
} else {
return xssfCell.getStringCellValue();
}
}
}
...@@ -33,6 +33,7 @@ public class KnowledgeVO { ...@@ -33,6 +33,7 @@ public class KnowledgeVO {
private String author; private String author;
private Integer score; private Integer score;
private Integer verifyStatus; private Integer verifyStatus;
private Integer importData;
private List<Content> contents; private List<Content> contents;
private List<KnowFile> files; private List<KnowFile> files;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论