问题知识库-新增、修改、删除同步数据到es中。

This commit is contained in:
wangzhijiang
2022-08-18 22:16:54 +08:00
parent 933918db33
commit 929413d7f8
2 changed files with 223 additions and 1 deletions
@@ -12,7 +12,10 @@ public enum SearchEnum {
TYPE_NAME_LAWS_MONTHLY_REPORT("法规月报类型名称","lawsMonthlyReport"),
FULL_TEXT_SEARCH("全部中文","fulltextsearchcn"),
FULL_TEXT_SEARCH_CN("全部中文","fulltextsearchcn"),
FULL_TEXT_SEARCH_EN("全部英文","fulltextsearchen");
FULL_TEXT_SEARCH_EN("全部英文","fulltextsearchen"),
INDEX_PROBLEM_KNOWLEDGE_BASE("问题知识库索引名称","problemKnowledgeBase"),
TYPE_PROBLEM_KNOWLEDGE_BASE_CN("问题知识库类型","problemKnowledgeBaseTypeCn"),
TYPE_PROBLEM_KNOWLEDGE_BASE_EN("问题知识库类型","problemKnowledgeBaseTypeEn");
String name;
String value;
@@ -1,10 +1,15 @@
package com.jero.modules.problemKnowledgeBase.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.constant.enums.CutEnum;
import com.jero.common.es.JeroElasticsearchTemplate;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.system.vo.DictModel;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.document.enums.SearchEnum;
import com.jero.modules.problemKnowledgeBase.entity.*;
import com.jero.modules.problemKnowledgeBase.enums.CollectStatusEnum;
import com.jero.modules.problemKnowledgeBase.enums.PraiseStatusEnum;
@@ -52,6 +57,10 @@ public class ProblemKnowledgeBaseEOServiceImpl extends ServiceImpl<ProblemKnowle
private ISysDictService sysDictService;
@Autowired
private IProblemKnowledgeBaseCommentEOService problemKnowledgeBaseCommentEOService;
@Autowired
private JeroElasticsearchTemplate jeroElasticsearchTemplate;
public static final String SEARCH_FLAG = "";
/**
* 保存
@@ -69,9 +78,212 @@ public class ProblemKnowledgeBaseEOServiceImpl extends ServiceImpl<ProblemKnowle
//如果该条问题知识库的展示权限为私密,则创建权限表数据
if(StringUtils.equals(problemKnowledgeBaseEO.getShowPermissions(), ShowPermissionsEnum.PRIVACY.getValue())){
batchInsertProblemKnowledgeBaseUserEO(problemKnowledgeBaseEO);
}else {
//如果展示权限是公开,则把该数据插入到搜索中心中。
this.addOrUpdateElasticsearch(problemKnowledgeBaseEO);
}
}
/**
* 将问题知识库数据添加或修改到es中
* @param problemKnowledgeBaseEO
*/
public void addOrUpdateElasticsearch(ProblemKnowledgeBaseEO problemKnowledgeBaseEO){
String problemKnowledgeBaseId = problemKnowledgeBaseEO.getId();
List<Map<String, Object>> mapListTempCn = new ArrayList<>();
List<Map<String, Object>> mapListTempEn = new ArrayList<>();
//sbCn sbEn 这两个字段作为es中英文切换
StringBuilder sbCn = new StringBuilder();
esFullText(problemKnowledgeBaseEO,sbCn,null,CutEnum.CN.getValue());
StringBuilder sbEn = new StringBuilder();
esFullText(problemKnowledgeBaseEO,null,sbEn,CutEnum.EN.getValue());
Map<String, Object> stringMapCn = new HashMap<>();
this.problemKnowledgeBaseEOConvertMapByCut(problemKnowledgeBaseEO,CutEnum.EN.getValue(),stringMapCn);
Map<String, Object> stringMapEn = new HashMap<>();
this.problemKnowledgeBaseEOConvertMapByCut(problemKnowledgeBaseEO,CutEnum.EN.getValue(),stringMapEn);
this.putMap(problemKnowledgeBaseId,sbCn.toString(),CutEnum.CN.getValue(),stringMapCn,SEARCH_FLAG,"问题知识库");
this.putMap(problemKnowledgeBaseId,sbEn.toString(),CutEnum.EN.getValue(),stringMapEn,SEARCH_FLAG,"Problem knowledge base");
Map<String, Object> stringMapCnBase = new HashMap<>();
this.problemKnowledgeBaseEOConvertMapByCut(problemKnowledgeBaseEO,CutEnum.EN.getValue(),stringMapCnBase);
Map<String, Object> stringMapEnBase = new HashMap<>();
this.problemKnowledgeBaseEOConvertMapByCut(problemKnowledgeBaseEO,CutEnum.EN.getValue(),stringMapEnBase);
this.putMap(problemKnowledgeBaseId,sbCn.toString(),CutEnum.CN.getValue(),stringMapCnBase,null,"问题知识库");
this.putMap(problemKnowledgeBaseId,sbEn.toString(),CutEnum.EN.getValue(),stringMapEnBase,null,"Problem knowledge base");
mapListTempCn.add(stringMapCn);
mapListTempCn.add(stringMapCnBase);
mapListTempEn.add(stringMapEn);
mapListTempEn.add(stringMapCnBase);
JSONObject jsonObjectCn = JSON.parseObject(JSON.toJSONString(stringMapCn));
JSONObject jsonObjectEn = JSON.parseObject(JSON.toJSONString(stringMapEn));
JSONArray arrayCn = JSONArray.parseArray(JSON.toJSONString(mapListTempCn));
JSONArray arrayEn = JSONArray.parseArray(JSON.toJSONString(mapListTempEn));
try {
this.deleteElasticsearchData(problemKnowledgeBaseId);
//问题知识库索引添加数据
this.jeroElasticsearchTemplate.saveOrUpdate(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_EN.getValue(), SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_EN.getValue(), problemKnowledgeBaseId, jsonObjectEn);
this.jeroElasticsearchTemplate.saveOrUpdate(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_CN.getValue(), SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_CN.getValue(), problemKnowledgeBaseId, jsonObjectCn);
//全部索引添加数据
this.jeroElasticsearchTemplate.saveBatch(SearchEnum.FULL_TEXT_SEARCH_CN.getValue(), SearchEnum.FULL_TEXT_SEARCH_CN.getValue(), arrayCn);
this.jeroElasticsearchTemplate.saveBatch(SearchEnum.FULL_TEXT_SEARCH_EN.getValue(), SearchEnum.FULL_TEXT_SEARCH_EN.getValue(), arrayEn);
} catch (Exception e) {
e.printStackTrace();
log.error("问题知识库添加es失败");
}
}
/**
* 根据问题知识库id删除es中数据
* @param problemKnowledgeBaseId
*/
public void deleteElasticsearchData(String problemKnowledgeBaseId){
try {
//根据id删除全部索引中数据
this.jeroElasticsearchTemplate.delete(SearchEnum.FULL_TEXT_SEARCH_CN.getValue(), SearchEnum.FULL_TEXT_SEARCH_CN.getValue(), problemKnowledgeBaseId);
this.jeroElasticsearchTemplate.delete(SearchEnum.FULL_TEXT_SEARCH_EN.getValue(), SearchEnum.FULL_TEXT_SEARCH_EN.getValue(), problemKnowledgeBaseId);
//根据id删除问题知识库索引中数据
this.jeroElasticsearchTemplate.delete(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_CN.getValue(), SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_CN.getValue(), problemKnowledgeBaseId);
this.jeroElasticsearchTemplate.delete(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_EN.getValue(), SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_EN.getValue(), problemKnowledgeBaseId);
}catch (Exception ex){
ex.printStackTrace();
log.error("问题知识库根据id删除es数据失败,问题知识库id为:" + problemKnowledgeBaseId);
}
}
public void esFullText(ProblemKnowledgeBaseEO problemKnowledgeBaseEO,StringBuilder sbCn,StringBuilder sbEn,String cut){
if(StringUtils.equals(cut,CutEnum.CN.getValue())){
if(StringUtils.isNotEmpty(problemKnowledgeBaseEO.getShowPermissions_dicText())){
sbCn.append("展示权限" + ":" + problemKnowledgeBaseEO.getShowPermissions_dicText() + " ");
}else {
sbCn.append("展示权限" + ":" + "-- ");
}
if(StringUtils.isNotEmpty(problemKnowledgeBaseEO.getTitle())){
sbCn.append("标题" + ":" + problemKnowledgeBaseEO.getTitle() + " ");
}else {
sbCn.append("标题" + ":" + "-- ");
}
if(StringUtils.isNotEmpty(problemKnowledgeBaseEO.getProblemTypeName())){
sbCn.append("问题分类" + ":" + problemKnowledgeBaseEO.getProblemTypeName() + " ");
}else {
sbCn.append("问题分类" + ":" + "-- ");
}
if(StringUtils.isNotEmpty(problemKnowledgeBaseEO.getTargetMarket_dicText())){
sbCn.append("市场" + ":" + problemKnowledgeBaseEO.getTargetMarket_dicText() + " ");
}else {
sbCn.append("市场" + ":" + "-- ");
}
if(StringUtils.isNotEmpty(problemKnowledgeBaseEO.getStandNumber())){
sbCn.append("标准编号" + ":" + problemKnowledgeBaseEO.getStandNumber() + " ");
}else {
sbCn.append("标准编号" + ":" + "-- ");
}
/*if(StringUtils.isNotEmpty(problemKnowledgeBaseEO.getStandTitle())){
sbCn.append("标准标题" + ":" + problemKnowledgeBaseEO.getStandTitle() + " ");
}else {
sbCn.append("标准标题" + ":" + "-- ");
}*/
if(StringUtils.isNotEmpty(problemKnowledgeBaseEO.getContent())){
sbCn.append("内容" + ":" + problemKnowledgeBaseEO.getContent() + " ");
}else {
sbCn.append("内容" + ":" + "-- ");
}
}else if(StringUtils.equals(cut,CutEnum.EN.getValue())){
if(StringUtils.isNotEmpty(problemKnowledgeBaseEO.getShowPermissions_dicText())){
sbEn.append("Display permission" + ":" + problemKnowledgeBaseEO.getShowPermissions_dicText() + " ");
}else {
sbEn.append("Display permission" + ":" + "-- ");
}
if(StringUtils.isNotEmpty(problemKnowledgeBaseEO.getTitle())){
sbEn.append("Title" + ":" + problemKnowledgeBaseEO.getTitle() + " ");
}else {
sbEn.append("Title" + ":" + "-- ");
}
if(StringUtils.isNotEmpty(problemKnowledgeBaseEO.getProblemTypeName())){
sbEn.append("Problem classification" + ":" + problemKnowledgeBaseEO.getProblemTypeName() + " ");
}else {
sbEn.append("Problem classification" + ":" + "-- ");
}
if(StringUtils.isNotEmpty(problemKnowledgeBaseEO.getTargetMarket_dicText())){
sbEn.append("Market" + ":" + problemKnowledgeBaseEO.getTargetMarket_dicText() + " ");
}else {
sbEn.append("Market" + ":" + "-- ");
}
if(StringUtils.isNotEmpty(problemKnowledgeBaseEO.getStandNumber())){
sbEn.append("Standard No" + ":" + problemKnowledgeBaseEO.getStandNumber() + " ");
}else {
sbEn.append("Standard No" + ":" + "-- ");
}
/*if(StringUtils.isNotEmpty(problemKnowledgeBaseEO.getStandTitle())){
sbEn.append("Standard Title" + ":" + problemKnowledgeBaseEO.getStandTitle() + " ");
}else {
sbEn.append("Standard Title" + ":" + "-- ");
}*/
if(StringUtils.isNotEmpty(problemKnowledgeBaseEO.getContent())){
sbEn.append("Content" + ":" + problemKnowledgeBaseEO.getContent() + " ");
}else {
sbEn.append("Content" + ":" + "-- ");
}
}
}
public void putMap(String id,String content,String cut,Map<String, Object> map,String flag,String moduleType){
map.put("id",id);
map.put("module_type", moduleType);
map.put("content",content);
map.put("flag",flag);
}
/**
* 问题知识库对象转Map,根据中英文切换字段转
* @param problemKnowledgeBaseEO 问题知识库对象
* @param cut 中英文切换标识 值对应CutEnum枚举类
* @param convertAfterMap 转换后的Map
*/
public void problemKnowledgeBaseEOConvertMapByCut(ProblemKnowledgeBaseEO problemKnowledgeBaseEO,String cut,Map<String, Object> convertAfterMap){
if(StringUtils.equals(cut,CutEnum.CN.getValue())){
convertAfterMap.put("id",problemKnowledgeBaseEO.getId());
convertAfterMap.put("标题",problemKnowledgeBaseEO.getTitle());
convertAfterMap.put("问题分类",problemKnowledgeBaseEO.getProblemType());
convertAfterMap.put("市场",problemKnowledgeBaseEO.getTargetMarket());
convertAfterMap.put("标准编号",problemKnowledgeBaseEO.getStandNumber());
//convertAfterMap.put("标准标题",problemKnowledgeBaseEO.getStandTitle());
convertAfterMap.put("内容",problemKnowledgeBaseEO.getContent());
}else if(StringUtils.equals(cut,CutEnum.EN.getValue())){
convertAfterMap.put("id",problemKnowledgeBaseEO.getId());
convertAfterMap.put("title",problemKnowledgeBaseEO.getTitle());
convertAfterMap.put("Problem Classification",problemKnowledgeBaseEO.getProblemType());
convertAfterMap.put("Market",problemKnowledgeBaseEO.getTargetMarket());
convertAfterMap.put("Standard No",problemKnowledgeBaseEO.getStandNumber());
//convertAfterMap.put("Standard Title",problemKnowledgeBaseEO.getStandTitle());
convertAfterMap.put("Content",problemKnowledgeBaseEO.getContent());
convertAfterMap.put("createTime",problemKnowledgeBaseEO.getCreateTime());
}
}
/**
* 更新
*
@@ -87,6 +299,9 @@ public class ProblemKnowledgeBaseEOServiceImpl extends ServiceImpl<ProblemKnowle
//如果该条问题知识库的展示权限为私密,则创建权限表数据
if(StringUtils.equals(problemKnowledgeBaseEO.getShowPermissions(), ShowPermissionsEnum.PRIVACY.getValue())){
batchInsertProblemKnowledgeBaseUserEO(problemKnowledgeBaseEO);
this.deleteElasticsearchData(problemKnowledgeBaseEO.getId());
}else {
this.addOrUpdateElasticsearch(problemKnowledgeBaseEO);
}
}
@@ -122,6 +337,10 @@ public class ProblemKnowledgeBaseEOServiceImpl extends ServiceImpl<ProblemKnowle
this.problemKnowledgeBaseBrowsingHistoryEOService.remove(deleteWrapper);
this.problemKnowledgeBaseCommentEOService.remove(deleteWrapper);
for (String problemKnowledgeBaseId : ids) {
this.deleteElasticsearchData(problemKnowledgeBaseId);
}
}
/**