add:集成es搜索模块

This commit is contained in:
2510220824
2021-06-22 17:14:39 +08:00
parent 90b6714345
commit 51d3edebfd
36 changed files with 8166 additions and 0 deletions
@@ -40,4 +40,8 @@ public interface ISarStandardsInfoService extends IService<SarStandardsInfo> {
List<RecommendVO> selectRecommendStand(SarStandardsInfoEOPage pagenew);
List<ActSarItemsEO> getStandAndItemsForAct (SarStandardsInfoEOPage page) throws Exception;
void insertIntoIndexForMap(Map<String,Object> attrInfoMap);
void updateIntoIndexForMap(Map<String,Object> attrInfoMap);
}
@@ -10,6 +10,7 @@ import com.adc.da.person.dao.PersonCollectEODao;
import com.adc.da.person.dao.PersonShareEODao;
import com.adc.da.person.entity.PersonMsgEO;
import com.adc.da.person.service.IPersonCollectEOService;
import com.adc.da.search.service.StandLawsSearchService;
import com.adc.da.slrs.sarLawsInfo.entity.SarLawsInfo;
import com.adc.da.slrs.sarLawsInfo.page.SarLawsInfoEOPage;
import com.adc.da.slrs.sarLawsInfo.page.SarLawsItemsEOPage;
@@ -51,6 +52,13 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;
import org.apache.pdfbox.util.PDFTextStripperByArea;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@@ -61,6 +69,7 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.io.FileInputStream;
import java.sql.Clob;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -151,6 +160,12 @@ public class SarStandardsInfoServiceImpl extends ServiceImpl<SarStandardsInfoDao
@Autowired
private SysInfoEOService sysInfoEOService;
@Autowired
private StandLawsSearchService standLawsSearchService;
@Value("${file.path}")
private String filePath;//文件存储路径
/***
@@ -1854,6 +1869,127 @@ public class SarStandardsInfoServiceImpl extends ServiceImpl<SarStandardsInfoDao
return standList;
}
@Override
public void insertIntoIndexForMap(Map<String, Object> attrInfoMap) {
Set<String> keys = attrInfoMap.keySet();
for (String key:keys) {
String value = String.valueOf(attrInfoMap.get(key));
if (com.adc.da.util.utils.StringUtils.isNotBlank(value) && !"null".equals(value) && !"SVPPS".equals(key)){
value = value.replace(" , ",",");
value = value.replace(","," , ");
attrInfoMap.put(key,value);
}
}
// 根据文件attid 读取文件内容
if (org.apache.commons.lang.StringUtils.isNotEmpty(String.valueOf(attrInfoMap.get("content")))) {
String[] attidlist = String.valueOf(attrInfoMap.get("content")).split(" , ");
StringBuilder content = new StringBuilder("");
for (int i = 0; i < attidlist.length; i++) {
if(org.apache.commons.lang.StringUtils.isNotEmpty(attidlist[i]) ){
AttFileEO attFileEO = attFileEOService.getFileInfo(attidlist[i]);
String readFilePath = filePath + "/" + attFileEO.getFilePath() + attFileEO.getFileName();
try {
// 判断文件是docx还是PDF
if (null != attFileEO.getFileSuffix() && (attFileEO.getFileSuffix().equals("docx") || attFileEO.getFileSuffix().equals("doc") || attFileEO.getFileSuffix().equals("ppt") || attFileEO.getFileSuffix().equals("pptx"))) {
if(attFileEO.getFileSuffix().equals("doc")){
FileInputStream fis = new FileInputStream(readFilePath);
WordExtractor wordExtractor = new WordExtractor(fis);
String txt = wordExtractor.getText();
content.append(txt);
}else {
OPCPackage opcPackage = XWPFDocument.openPackage(readFilePath);
XWPFWordExtractor extractor = new XWPFWordExtractor(opcPackage);
String txt = extractor.getText();
content.append(txt);
}
} else {
PDDocument document = PDDocument.load(new File(readFilePath));
document.getClass();
if (!document.isEncrypted()) {
PDFTextStripperByArea stripper = new PDFTextStripperByArea();
stripper.setSortByPosition(true);
PDFTextStripper tStripper = new PDFTextStripper();
String pdfFileInText = tStripper.getText(document);
// String[] lines = pdfFileInText.split("\\r?\\n");
content.append(pdfFileInText);
}
}
} catch (Exception e) {
logger.error("搜索中心新增数据读取文档内容时失败");
logger.error(e.getMessage(),e);
}
/*catch (IOException | OpenXML4JException | XmlException e) {
logger.error(e.getMessage(),e);
}*/
attrInfoMap.put("content",content.toString());
}
}
}
else{
attrInfoMap.put("content","");
}
standLawsSearchService.addStandLawsSearchForMap(attrInfoMap);
}
@Override
public void updateIntoIndexForMap(Map<String, Object> attrInfoMap) {
Set<String> keys = attrInfoMap.keySet();
for (String key:keys) {
String value = String.valueOf(attrInfoMap.get(key));
if (com.adc.da.util.utils.StringUtils.isNotBlank(value) && !"null".equals(value) && !"SVPPS".equals(key) && !"content".equals(key)){
value = value.replace(" , ",",");
value = value.replace(","," , ");
attrInfoMap.put(key,value);
}
}
// 根据文件attid 读取文件内容
if (org.apache.commons.lang.StringUtils.isNotEmpty(String.valueOf(attrInfoMap.get("content")))) {
String[] attidlist = String.valueOf(attrInfoMap.get("content")).split(" , ");
StringBuilder content = new StringBuilder("");
for (int i = 0; i < attidlist.length; i++) {
if(org.apache.commons.lang.StringUtils.isNotEmpty(attidlist[i]) && !"null".equals(attidlist[i])){
AttFileEO attFileEO = attFileEOService.getFileInfo(attidlist[i]);
String readFilePath = filePath + "/" + attFileEO.getFilePath() + attFileEO.getFileName();
try {
// 判断文件是docx还是PDF
if (attFileEO.getFileSuffix().equals("docx") || attFileEO.getFileSuffix().equals("doc")) {
if(attFileEO.getFileSuffix().equals("doc")){
FileInputStream fis = new FileInputStream(readFilePath);
WordExtractor wordExtractor = new WordExtractor(fis);
String txt = wordExtractor.getText();
content.append(txt);
}else {
OPCPackage opcPackage = XWPFDocument.openPackage(readFilePath);
XWPFWordExtractor extractor = new XWPFWordExtractor(opcPackage);
String txt = extractor.getText();
content.append(txt);
}
} else if (attFileEO.getFileSuffix().equals("pdf")){
PDDocument document = PDDocument.load(new File(readFilePath));
document.getClass();
if (!document.isEncrypted()) {
PDFTextStripperByArea stripper = new PDFTextStripperByArea();
stripper.setSortByPosition(true);
PDFTextStripper tStripper = new PDFTextStripper();
String pdfFileInText = tStripper.getText(document);
// String[] lines = pdfFileInText.split("\\r?\\n");
content.append(pdfFileInText);
}
}
} catch (Exception e) {
logger.error("搜索中心修改数据读取文档内容时失败");
logger.error(e.getMessage(),e);
}
attrInfoMap.put("content",content.toString());
}
}
}
else{
attrInfoMap.put("content","");
}
standLawsSearchService.updateStandLawsSearchForMap(attrInfoMap);
}
public void getStandDetailsForAct (SarStandardsInfoEOPage page,String[] idArr,String standState,List<ActSarItemsEO> standList) throws Exception{
page.setPageSize(100);
page.setIdlist(idArr);