提交 864de83f 作者: obcy

Merge remote-tracking branch 'origin/master'

......@@ -16,6 +16,7 @@ import com.zzsn.knowbase.vo.KnowledgeVO;
import com.zzsn.knowbase.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -28,7 +29,10 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
/**
......@@ -66,17 +70,18 @@ public class KnowledgeController {
IPage<KnowledgeVO> pageList = knowledgeService.queryPageList(knowledgeParam, pageNo, pageSize, column, order);
return Result.OK(pageList);
}
/**
* 详情
*/
@GetMapping(value = "/getById")
public Result<?> getById(@RequestParam String id) {
log.info("{}===query begin",new Date());
KnowledgeVO knowledgeVO=knowledgeService.getById(id);
if(null!=knowledgeVO.getPublishDate()&&(!knowledgeVO.getPublishDate().isEmpty())){
public Result<?> getById(@RequestParam String id) {
log.info("{}===query begin", new Date());
KnowledgeVO knowledgeVO = knowledgeService.getById(id);
if (null != knowledgeVO.getPublishDate() && (!knowledgeVO.getPublishDate().isEmpty())) {
knowledgeVO.setPublishDate(EsDateUtil.esFieldDateMapping(knowledgeVO.getPublishDate()));
}
if(null!=knowledgeVO.getVerifyTime()&&(!knowledgeVO.getVerifyTime().isEmpty())){
if (null != knowledgeVO.getVerifyTime() && (!knowledgeVO.getVerifyTime().isEmpty())) {
knowledgeVO.setVerifyTime(EsDateUtil.esFieldDateMapping(knowledgeVO.getVerifyTime()));
}
return Result.OK(knowledgeVO);
......@@ -106,24 +111,26 @@ public class KnowledgeController {
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
Result<List<KnowFile>> result = localFileService.upload(fileMap);
if(!Integer.valueOf("200").equals(result.getCode())){
log.info("upload result:{}", result);
if (!Integer.valueOf("200").equals(result.getCode())) {
return Result.error(result.getMessage());
}
List<KnowFile> resultList = result.getResult();
KbAuthorizedUser userInfo = SpringContextUtils.getUserInfo();
knowledge.setImportData(0);
CompletableFuture.runAsync(()-> this.add(resultList,knowledge,userInfo));
CompletableFuture.runAsync(() -> this.add(resultList, knowledge, userInfo));
return Result.OK("添加成功!");
}
private void add( List<KnowFile> resultList, Knowledge knowledge,KbAuthorizedUser userInfo){
private void add(List<KnowFile> resultList, Knowledge knowledge, KbAuthorizedUser userInfo) {
if (null == resultList || resultList.isEmpty()) {
return ;
return;
}
for ( KnowFile knowFileResult : resultList) {
for (KnowFile knowFileResult : resultList) {
knowledge.setId(null);
knowledge.setTitle(null);
knowledgeService.addKnowledge(knowFileResult, knowledge,userInfo);
knowledgeService.addKnowledge(knowFileResult, knowledge, userInfo);
}
}
......@@ -143,14 +150,15 @@ public class KnowledgeController {
/**
* 通过id删除
*
* @param ids
* @param
* @return
*/
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name = "ids") String ids) {
knowledgeService.deleteKnowledge(ids);
@PostMapping(value = "/delete")
public Result<?> delete( @RequestBody DeleteParam deleteParam) {
knowledgeService.deleteKnowledge(deleteParam.getKnowledgeList());
return Result.OK("删除成功!");
}
@GetMapping(value = "/parse")
public Result<?> parse(@RequestParam(name = "filePath") String filePath) throws IOException {
String s = DocUtil.docParseHtml(filePath);
......@@ -166,7 +174,7 @@ public class KnowledgeController {
@PostMapping(value = "/IntelligentQa")
public Result<?> intelligentQa(@RequestBody IntelligentQaParam intelligentQaParam) throws IOException {
JSONObject params = new JSONObject();
params.put("score_threshold",intelligentQaParam.getScoreThreshold() );
params.put("score_threshold", intelligentQaParam.getScoreThreshold());
params.put("question", intelligentQaParam.getQuestion());
params.put("knowledge_base_id", intelligentQaParam.getKbKnowledgeIds().split(","));
String result = HttpUtil.doPost(intelligentQaUrl, params, 120000);
......@@ -186,9 +194,10 @@ public class KnowledgeController {
public Result<?> importInfo(HttpServletRequest request, HttpServletResponse response) {
KbAuthorizedUser userInfo = SpringContextUtils.getUserInfo();
assert userInfo != null;
knowledgeService.doImportInfo(request,userInfo.getId());
return Result.OK("导入正在后台进行");
return knowledgeService.doImportInfo(request, userInfo.getId());
}
/**
* 下载导入模板
*/
......@@ -206,3 +215,7 @@ public class KnowledgeController {
return Result.OK();
}
}
@Data
class DeleteParam{
private List<Knowledge> knowledgeList;
}
\ No newline at end of file
......@@ -9,6 +9,7 @@ import com.zzsn.knowbase.vo.KnowledgeVO;
import com.zzsn.knowbase.vo.Result;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @Description: 知识服务
......@@ -31,7 +32,7 @@ public interface IKnowledgeService {
/**
* 删除
*/
void deleteKnowledge(String ids);
void deleteKnowledge(List<Knowledge> knowledgeList);
/**
* 分页检索
......
......@@ -25,6 +25,7 @@ import org.apache.pdfbox.pdmodel.PDDocument;
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.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
......@@ -46,7 +47,10 @@ import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
......@@ -186,7 +190,8 @@ class KnowledgeServiceImpl implements IKnowledgeService {
String text = Jsoup.parse(tem).text();
log.info("info:{}", text);
if ((!tem.contains("<title>")) && (!text.isEmpty())) {
knowledge.setTitle(text);
String[] s = text.split(" ");
knowledge.setTitle(s[0]);
break;
}
}
......@@ -225,7 +230,7 @@ class KnowledgeServiceImpl implements IKnowledgeService {
esOpUtil.docEditByEntity(Constants.ES_DATA_FOR_KNOWLEDGE, knowledge.getId(), knowledge);
}
//删除
deleteForPython(knowledge.getId());
deleteForPython(knowledge.getId(),knowledge.getKnowledgeProjectId());
BeanUtils.copyProperties(knowledge, knowledgeMessage);
knowledgeMessage.setType(knowledge.getTypeId());
......@@ -239,24 +244,26 @@ class KnowledgeServiceImpl implements IKnowledgeService {
}
@Override
public void deleteKnowledge(String ids) {
String[] split = ids.split(",");
for (String id : split) {
esOpUtil.docDeleteById(Constants.ES_DATA_FOR_KNOWLEDGE, id);
public void deleteKnowledge(List<Knowledge> knowledgeList) {
for (Knowledge knowledge : knowledgeList) {
esOpUtil.docDeleteById(Constants.ES_DATA_FOR_KNOWLEDGE, knowledge.getId());
}
CompletableFuture.runAsync(() -> {
for (String id : split) {
deleteForPython(id);
for (Knowledge knowledge : knowledgeList) {
deleteForPython(knowledge.getId(),knowledge.getKbKnowledgeId());
}
});
}
public void deleteForPython(String id) {
public void deleteForPython(String id,String knowledgeBaseId) {
JSONObject params = new JSONObject();
params.put("knowledge_base_id", id);
List <String > lidList=new ArrayList<>();
lidList.add(id);
params.put("id", lidList);
params.put("knowledge_base_id", knowledgeBaseId);
try {
HttpUtil.doPost(deleteUrl, params, 120000);
} catch (IOException e) {
......@@ -547,20 +554,35 @@ class KnowledgeServiceImpl implements IKnowledgeService {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
if (fileMap.size() < 1) {
return Result.error("请上传excel或者word文件");
return Result.error("请上传excel文件");
}
MultipartFile multipartFile = fileMap.get(new ArrayList<String>(fileMap.keySet()).get(0));
int index = multipartFile.getOriginalFilename().lastIndexOf(".");
String fileSuffix = multipartFile.getOriginalFilename().substring(index + 1);
if ("xls".equals(fileSuffix) || "xlsx".equals(fileSuffix)) {
//文件校验
if(!this.checkExcel(multipartFile)){
log.error("excel格式不对");
return Result.error("模版错误,请下载正确模板,再次上传!");
}
asyncService.doimport(request, fileSuffix, userId);
return Result.OK("已进行处理");
return Result.OK("导入正在后台进行");
} else {
return Result.error("不支持的文件类型");
}
}
private boolean checkExcel(MultipartFile multipartFile) {
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 false;
}
@Override
public void doExcel(HttpServletRequest request, String fileSuffix, String userId) {
String kbKnowledgeId = request.getParameter("kbKnowledgeId");
......
......@@ -7,23 +7,34 @@ import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.zzsn.knowbase.entity.KnowledgeExcel;
import lombok.extern.slf4j.Slf4j;
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.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
@Slf4j
public class ExcelExportUtil {
private static final String XLS = "xls";
private static final String XLSX = "xlsx";
private static final String SPLIT = ".";
/**
* 读取excel数据
......@@ -191,4 +202,57 @@ public class ExcelExportUtil {
}
}
/**
* 获取Excel表头信息
* @param workbook
* @return
*/
public static List<String> getSheetTitles(Workbook workbook) {
// 拿第一个sheet表
Sheet sheet = workbook.getSheetAt(0);
// 校验sheet是否合法
if (Objects.isNull(sheet)) {
return null;
}
// 获取第一行数据(假如第一行就是列名)
Row sheetTitleRow = sheet.getRow(sheet.getFirstRowNum());
// 取出最后一列
short lastCellNum = sheetTitleRow.getLastCellNum();
List<String> sheetTitleList = new LinkedList<>();
for (int i = 0; i < lastCellNum; i++) {
// 取出每一列的名
String cellValue = sheetTitleRow.getCell(i).getStringCellValue();
sheetTitleList.add(cellValue);
}
return sheetTitleList;
}
/**
* 获取Excel表信息
* @param file
* @return
*/
public static Workbook getWorkbook(MultipartFile file) {
Workbook workbook = null;
try {
// 获取Excel后缀名
String fileName = file.getOriginalFilename();
if (StringUtils.isEmpty(fileName) || fileName.lastIndexOf(SPLIT) < 0) {
log.warn("解析Excel失败,因为获取到的Excel文件名非法!");
return null;
}
String fileType = fileName.substring(fileName.lastIndexOf(SPLIT) + 1);
// 获取Excel工作簿
if (fileType.equalsIgnoreCase(XLS)) {
workbook = new HSSFWorkbook(file.getInputStream());
} else if (fileType.equalsIgnoreCase(XLSX)) {
workbook = new XSSFWorkbook(file.getInputStream());
}
} catch (IOException e) {
e.printStackTrace();
}
return workbook;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论