feat: 搜索中心 子项目 添加 相关依赖文件 及 修改

This commit is contained in:
super_liu
2021-08-03 17:52:08 +08:00
parent 17ba48200c
commit 3a19c44991
10 changed files with 679 additions and 234 deletions
@@ -1,7 +1,9 @@
package com.adc.da.search.entity;
import com.adc.da.base.page.BasePage;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -17,13 +19,103 @@ import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Data
public class SeniorSearchInfoEO extends BasePage {
private String standType;
/**
* -----------------------------FOTON-------------------------------------
* -------------------------- 动态属性字段---------------------------------
*/
@ApiModelProperty(value = "主键")
private String id;
@ApiModelProperty(value = "标准分类")
private String standType;
@ApiModelProperty(value = "国家地区")
private String country;
@ApiModelProperty(value = "标准类别")
private String standSort;
@ApiModelProperty(value = "标准编号")
private String standNumber;
@ApiModelProperty(value = "标准年份")
private String standYear;
@ApiModelProperty(value = "标准名称")
private String standName;
@ApiModelProperty(value = "标准英文名称")
private String standEnName;
@ApiModelProperty(value = "标准状态")
private String standState;
@ApiModelProperty(value = "标准性质")
private String standNature;
@ApiModelProperty(value = "标准发布日期")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
private Date issueTime;
@ApiModelProperty(value = "实施日期")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
private Date putTime;
@ApiModelProperty(value = "内容摘要")
private String synopsis;
@ApiModelProperty(value = "代替标准号")
private String replaceStandNum;
@ApiModelProperty(value = "被代替标准号")
private String replacedStandNum;
@ApiModelProperty(value = "代替部分标准号")
private String replacePartStandNum;
@ApiModelProperty(value = "被代替部分标准号")
private String replacedPartStandNum;
private String creationUser;
@ApiModelProperty(value = "是否有效")
private String validFlag;
@ApiModelProperty(value = "创建时间")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
private Date creationTime;
@ApiModelProperty(value = "修改时间")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
private Date modifyTime;
@ApiModelProperty(value = "是否纳入认证清单(0否 1是)")
private String isRelateAccess;
@ApiModelProperty(value = "引用标准")
private String citeStand;
@ApiModelProperty(value = "被引用标准")
private String citedStand;
// 新添加字段
@ApiModelProperty(value = "文本状态")
private String textStatus;
@ApiModelProperty(value = "标准体系")
private String standSystem;
@ApiModelProperty(value = "新增修改时属性表信息")
private String sarStandAttrEOStr;
/**
* ---------其他字段------------
*/
//标准性质
private String nature;
//国家地区
private String country;
//标准类别
private String standSort;
//标准,文件号
private String numberShow;
//标准,文件名称
@@ -38,10 +130,6 @@ public class SeniorSearchInfoEO extends BasePage {
private String energyKind;
//采标程度
private String adoptExtent;
//标准状态
private String standState;
//发布日期
private Date issueTime;
//标准大类
private String bussBigClass;
//标准细类
@@ -55,21 +143,8 @@ public class SeniorSearchInfoEO extends BasePage {
private String selectIndex;
//高级搜索
//标准编号
private String standNumber;
//标准年份
private String standYear;
//标准英文名称
private String standEnName;
//代替标准号 手动输入可以多个,用","隔开
private String replaceStandNum;
//被代替标准号
private String replacedStandNum;
//采用国际标准号
private String interStandNum;
//实施日期
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date putTime;
//新生产车实施日期
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date newproductPutTime;
@@ -85,8 +160,6 @@ public class SeniorSearchInfoEO extends BasePage {
private String draftingUnit;
//关键词
private String tags;
//内容摘要
private String synopsis;
//责任部门
private String responsibleUnit;
//发布单位
@@ -156,4 +229,7 @@ public class SeniorSearchInfoEO extends BasePage {
private String stand_status;
private String isHigh;
}
@@ -0,0 +1,41 @@
package com.adc.da.search.sarStandAttrDetails.dao;
import com.adc.da.search.sarStandAttrDetails.entity.SarStandAttrDetails;
import com.adc.da.search.sarStandAttrDetails.page.SarStandAttrDetailsEOPage;
import com.adc.da.sys.common.SelectionResult;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author super_liu
* @since 2021-06-01
*/
@Repository
public interface SarStandAttrDetailsSearchDao extends BaseMapper<SarStandAttrDetails> {
List<SarStandAttrDetails> queryByPage(SarStandAttrDetailsEOPage page);
List<SarStandAttrDetails> queryByList(SarStandAttrDetailsEOPage page);
Integer queryByCount(SarStandAttrDetailsEOPage page);
int deleteByIds(@Param("idList") List<String> idList);
String selectAllFieldToStr(SarStandAttrDetailsEOPage page);
List<SelectionResult> selectFileFieldForSel(@Param("attrField") String attrField);
List<SelectionResult> selectFileFieldForSel1(@Param("attrField") String attrField);
String selectNameByField(@Param("attrField") String attrField, @Param("sarType") String sarType);
SarStandAttrDetails selectFieldByName(@Param("attrName") String attrName, @Param("sarType") String sarType);
}
@@ -0,0 +1,114 @@
package com.adc.da.search.sarStandAttrDetails.entity;
import com.adc.da.base.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author super_liu
* @since 2021-06-01
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@ApiModel(value="SarStandAttrDetails对象", description="")
public class SarStandAttrDetails extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
@TableId("ID")
private String id;
@ApiModelProperty(value = "属性字段")
@TableField("ATTR_FIELD")
private String attrField;
@ApiModelProperty(value = "属性名称")
@TableField("ATTR_NAME")
private String attrName;
@ApiModelProperty(value = "类型(INPUT_STR字符串输入框,INPUT_NUM数字输入框,SELECT_OPTION下拉框,DATE_PICKER日期选择,FILE文件,TEXTAREA文本框)")
@TableField("ATTR_TYPE")
private String attrType;
@ApiModelProperty(value = "属性字段长度")
@TableField("ATTR_LEN")
private Long attrLen;
@ApiModelProperty(value = "展示顺序")
@TableField("ORDER_NUM")
private Long orderNum;
@ApiModelProperty(value = "是否可编辑(0是,1否)")
@TableField("IS_EDIT")
private String isEdit;
@TableField("CREATION_USER")
private String creationUser;
@ApiModelProperty(value = "是否有效")
@TableField("VALID_FLAG")
private String validFlag;
@ApiModelProperty(value = "创建时间")
@TableField("CREATION_TIME")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
private Date creationTime;
@ApiModelProperty(value = "修改时间")
@TableField("MODIFY_TIME")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
private Date modifyTime;
@ApiModelProperty(value = "是否必填")
@TableField("IS_MUST")
private String isMust;
@ApiModelProperty(value = "是否展示")
@TableField("IS_SHOW_IMP")
private String isShowImp;
@ApiModelProperty(value = "展示区域")
@TableField("SHOW_REGION_ID")
private String showRegionId;
@ApiModelProperty(value = "下拉选项所用的值")
@TableField("SEL_VAL")
private String selVal;
@ApiModelProperty(value = "模块类型(STAND标准,LAWS政策)")
@TableField("SAR_TYPE")
private String sarType;
@ApiModelProperty(value = "是否作为检索条件")
@TableField("IS_SEARCH")
private String isSearch;
@ApiModelProperty(value = "是否预警")
@TableField("IS_WARN")
private String isWarn;
@ApiModelProperty(value = "是否检索字段")
@TableField("IS_JANSUO")
private String isJansuo;
@TableField(exist = false)
private String attrValue;
@TableField(exist = false)
private String areaName;
}
@@ -0,0 +1,46 @@
package com.adc.da.search.sarStandAttrDetails.page;
import com.adc.da.base.page.BasePage;
import lombok.Data;
/**
* <b>功能:</b>SAR_STAND_ATTR_DETAILS SarStandAttrDetailsEOPage<br>
* <b>作者:</b>code generator<br>
* <b>日期:</b> 2020-08-17 <br>
* <b>版权所有:<b>版权归北京卡达克数据技术中心所有。<br>
*/
@Data
public class SarStandAttrDetailsEOPage extends BasePage {
private String id;
private String idOperator = "=";
private String attrField;
private String attrFieldOperator = "=";
private String attrName;
private String attrNameOperator = "=";
private String attrType;
private String attrTypeOperator = "=";
private String orderNum;
private String orderNumOperator = "=";
private String isEdit;
private String isEditOperator = "=";
private String creationUser;
private String creationUserOperator = "=";
private String validFlag;
private String validFlagOperator = "=";
private String creationTime;
private String creationTime1;
private String creationTime2;
private String creationTimeOperator = "=";
private String modifyTime;
private String modifyTime1;
private String modifyTime2;
private String modifyTimeOperator = "=";
private String attrLen;
private String attrLenOperator = "=";
private String[] idList;
private String notId;
private String sarType;
private String isSearch;
private String isWarn;
}
@@ -0,0 +1,24 @@
package com.adc.da.search.sarStandAttrDetails.service;
import com.adc.da.search.sarStandAttrDetails.entity.SarStandAttrDetails;
import com.adc.da.search.sarStandAttrDetails.page.SarStandAttrDetailsEOPage;
import com.adc.da.sys.common.SelectionResult;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author super_liu
* @since 2021-06-01
*/
public interface ISarStandAttrDetailsSearchService extends IService<SarStandAttrDetails> {
List<SelectionResult> selectFileFieldForSel(String attrField);
List<SelectionResult> selectFileFieldForSel1(String attrField);
}
@@ -0,0 +1,39 @@
package com.adc.da.search.sarStandAttrDetails.service.impl;
import com.adc.da.search.sarStandAttrDetails.dao.SarStandAttrDetailsSearchDao;
import com.adc.da.search.sarStandAttrDetails.entity.SarStandAttrDetails;
import com.adc.da.search.sarStandAttrDetails.service.ISarStandAttrDetailsSearchService;
import com.adc.da.sys.common.SelectionResult;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* <p>
* 服务实现类
* </p>
*
* @author super_liu
* @since 2021-06-01
*/
@Service
public class SarStandAttrDetailsSearchServiceImpl extends ServiceImpl<SarStandAttrDetailsSearchDao, SarStandAttrDetails> implements ISarStandAttrDetailsSearchService {
private static final Logger logger = LoggerFactory.getLogger(ISarStandAttrDetailsSearchService.class);
@Autowired
private SarStandAttrDetailsSearchDao dao;
public List<SelectionResult> selectFileFieldForSel(String attrField){
return dao.selectFileFieldForSel(attrField);
}
public List<SelectionResult> selectFileFieldForSel1(String attrField){
return dao.selectFileFieldForSel1(attrField);
}
}
@@ -1,9 +1,8 @@
package com.adc.da.search.service.impl;
import com.adc.da.person.dao.PersonSearchEODao;
import com.adc.da.search.entity.*;
import com.adc.da.search.service.SearchCenterService;
import com.alibaba.fastjson.JSONArray;
import com.adc.da.search.util.InitStandAttrSearchUtil;
import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
@@ -11,20 +10,14 @@ import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.lucene.search.function.CombineFunction;
import org.elasticsearch.common.lucene.search.function.FieldValueFactorFunction;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.index.query.functionscore.FieldValueFactorFunctionBuilder;
import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.range.Range;
import org.elasticsearch.search.aggregations.bucket.range.RangeAggregationBuilder;
import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
@@ -34,9 +27,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@Component
@Slf4j
@@ -143,210 +136,32 @@ public class SearchCenterServiceImpl implements SearchCenterService {
return result;
}
public BoolQueryBuilder querySeniorMsg (SeniorSearchInfoEO searchInfoEO, BoolQueryBuilder boolQueryBuilder) {
/**
* 自动匹配动态字段条件查询 ES
* @param searchInfoEO
* @param boolQueryBuilder
* @return
*/
private BoolQueryBuilder querySeniorMsg(SeniorSearchInfoEO searchInfoEO, BoolQueryBuilder boolQueryBuilder) {
BoolQueryBuilder boolQueryBuilderMust = new BoolQueryBuilder();
String advanceStr = searchInfoEO.getAdvanceSearchVOStr();
List<SarAdvanceSearchVO> searchVOList = new ArrayList<>();
if (StringUtils.isNotBlank(advanceStr)) {
searchVOList = JSONArray.parseArray(advanceStr, SarAdvanceSearchVO.class);
}
if (searchVOList != null && !searchVOList.isEmpty()) {
List<SarAdvanceSearchVO> sarAdvanceSearchVOS = new ArrayList<>();
int size = searchVOList.size();
for (SarAdvanceSearchVO searchVO1 : searchVOList) {
SarAdvanceSearchVO sarAdvanceSearchVO = new SarAdvanceSearchVO();
if ("XCXSSRQ".equals(searchVO1.getField())||"ZCCSSRQ".equals(searchVO1.getField())||"EOPSSRQ".equals(searchVO1.getField())){
sarAdvanceSearchVO.setField(searchVO1.getField()+"1");
sarAdvanceSearchVO.setConnect("OR");
sarAdvanceSearchVO.setType("like");
sarAdvanceSearchVO.setValue("TBD");
sarAdvanceSearchVOS.add(sarAdvanceSearchVO);
}
}
searchVOList.addAll(sarAdvanceSearchVOS);
for (SarAdvanceSearchVO searchVO : searchVOList) {
if ("stand_state".equals(searchVO.getField())){
searchVO.setType("=");
}
String field = searchVO.getField();
String value = searchVO.getValue();
if ("WFSPJS".equals(field) || "SVPPS".equals(field)){
value = value.replace(","," , ");
}
//发布时间范围
if (StringUtils.isNotBlank(searchVO.getField()) &&("issue_time".equals(searchVO.getField()) || "put_time".equals(searchVO.getField()) || "FZRQ".equals(searchVO.getField())|| "FSRQ".equals(searchVO.getField()) ||"XCXSSRQ".equals(searchVO.getField())||"ZCCSSRQ".equals(searchVO.getField())||"EOPSSRQ".equals(searchVO.getField()))) {
String fieldName = "";
fieldName = searchVO.getField();
switch (searchVO.getField()){
case "issue_time" :
// boolQueryBuilderMust.mustNot(QueryBuilders.matchQuery(field, "已实施")).must(QueryBuilders.existsQuery(field)).mustNot(QueryBuilders.matchQuery(field, "N/A")).mustNot(QueryBuilders.matchQuery(field+".keyword", " ")).mustNot(QueryBuilders.matchQuery(field+".keyword", ""));
boolQueryBuilder.should(QueryBuilders.matchQuery(field + ".keyword" , "TBD"));
fieldName = ISSUE_TIME;
break;
case "put_time" :
// boolQueryBuilderMust.mustNot(QueryBuilders.matchQuery(field, "已实施")).must(QueryBuilders.existsQuery(field)).mustNot(QueryBuilders.matchQuery(field, "N/A")).mustNot(QueryBuilders.matchQuery(field+".keyword", " ")).mustNot(QueryBuilders.matchQuery(field+".keyword", ""));
boolQueryBuilder.should(QueryBuilders.matchQuery(field + ".keyword", "TBD"));
fieldName = "put_time_data";
break;
case "XCXSSRQ" :
// boolQueryBuilderMust.mustNot(QueryBuilders.matchQuery(field, "已实施")).must(QueryBuilders.existsQuery(field)).mustNot(QueryBuilders.matchQuery(field, "N/A")).mustNot(QueryBuilders.matchQuery(field+".keyword", " ")).mustNot(QueryBuilders.matchQuery(field+".keyword", ""));
boolQueryBuilder.should(QueryBuilders.matchQuery(field + ".keyword", "TBD"));
fieldName = "XCXSSRQ_data";
break;
case "ZCCSSRQ" :
// boolQueryBuilderMust.mustNot(QueryBuilders.matchQuery(field, "已实施")).must(QueryBuilders.existsQuery(field)).mustNot(QueryBuilders.matchQuery(field, "N/A")).mustNot(QueryBuilders.matchQuery(field+".keyword", " ")).mustNot(QueryBuilders.matchQuery(field+".keyword", ""));
boolQueryBuilder.should(QueryBuilders.matchQuery(field + ".keyword", "TBD"));
fieldName = "ZCCSSRQ_data";
break;
case "EOPSSRQ" :
// boolQueryBuilderMust.mustNot(QueryBuilders.matchQuery(field, "已实施")).must(QueryBuilders.existsQuery(field)).mustNot(QueryBuilders.matchQuery(field, "N/A")).mustNot(QueryBuilders.matchQuery(field+".keyword", " ")).mustNot(QueryBuilders.matchQuery(field+".keyword", ""));
boolQueryBuilder.should(QueryBuilders.matchQuery(field + ".keyword", "TBD"));
fieldName = "EOPSSRQ_data";
break;
default :
break;
}
Long beginTime = 0L;
Long endTime = 0L;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
beginTime = sdf.parse("1970-01-01 00:00:00").getTime();
} catch (ParseException e1) {
e1.printStackTrace();
}
try {
endTime = sdf.parse("2999-01-01 00:00:00").getTime();
} catch (ParseException e1) {
e1.printStackTrace();
}
Long starttime = 0L;
Long endtime = 0L;
try {
starttime = sdf.parse(searchVO.getTimeSt() +" 00:00:00").getTime();
starttime--;
} catch (ParseException e) {
try {
starttime = sdf.parse("1970-01-01 00:00:00").getTime();
} catch (ParseException e1) {
e1.printStackTrace();
}
}
try {
endtime = sdf.parse(searchVO.getTimeEd()+" 23:59:59").getTime();
endtime++;
} catch (ParseException e) {
try {
endtime = sdf.parse("2999-01-01 00:00:00").getTime();
} catch (ParseException e1) {
e1.printStackTrace();
}
}
if ("=".equals(searchVO.getType()) || "like".equals(searchVO.getType())) {
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(fieldName ).from(starttime).to(endtime).includeLower(true).includeUpper(true);
if ("AND".equals(searchVO.getConnect())|| StringUtils.isBlank(searchVO.getConnect())) {
// RangeQueryBuilder rangeQueryBuilder1 = QueryBuilders.rangeQuery(fieldName ).from(1L).to(starttime).includeLower(true).includeUpper(true);
// RangeQueryBuilder rangeQueryBuilder2 = QueryBuilders.rangeQuery(fieldName ).from(endtime).to(endTime).includeLower(true).includeUpper(true);
// boolQueryBuilder.mustNot(rangeQueryBuilder1);
// boolQueryBuilder.mustNot(rangeQueryBuilder2);
// boolQueryBuilder.mustNot(rangeQueryBuilder3);
boolQueryBuilderMust.must(rangeQueryBuilder);
}else{
boolQueryBuilder.should(rangeQueryBuilder);
}
}else{
if ("!=".equals(searchVO.getType())){
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(fieldName ).from(starttime).to(endtime).includeLower(true).includeUpper(true);
if ("AND".equals(searchVO.getConnect()) || StringUtils.isBlank(searchVO.getConnect())) {
boolQueryBuilder.mustNot(rangeQueryBuilder);
}else{
boolQueryBuilder.should(rangeQueryBuilder);
}
}
}
continue;
}
if (StringUtils.isNotBlank(field) && StringUtils.isNotBlank(value)) {
String type = searchVO.getType();
String connect = searchVO.getConnect();
if ("stand_name".equals(field) || "laws_name".equals(field)) {
field = "nameshow";
} else if ("stand_state".equals(field) || "laws_state".equals(field) || "stand_status".equals(field)) {
field = "statecode";
// }else if ("FZRQ".equals(field)){
// field = "FZRQString";
// }else if ("FSRQ".equals(field)){
// field = "FSRQString";
}
if (("FZRQString".equals(field) || "FSRQString".equals(field))){
List<String> values = new ArrayList<>(Arrays.asList(value.split("-")));
if ("=".equals(type) && ("AND".equals(connect) || StringUtils.isBlank(connect))) {
for (String va :values){
boolQueryBuilderMust.must(QueryBuilders.wildcardQuery(field, "*"+va+"*"));
}
} else if ("=".equals(type) && ("OR".equals(connect) || StringUtils.isBlank(connect))) {
for (String va :values){
boolQueryBuilder.should(QueryBuilders.wildcardQuery(field, "*"+va+"*"));
}
// boolQueryBuilder.should(QueryBuilders.wildcardQuery(field, "*"+value+"*"));
} else if ("!=".equals(type) && ("AND".equals(connect) || StringUtils.isBlank(connect))) {
if ("FSRQString".equals(field)){
boolQueryBuilder.mustNot(QueryBuilders.matchQuery("FSRQDate", "*"+value.replace("-","")+"*"));
}else{
boolQueryBuilder.mustNot(QueryBuilders.matchQuery("FZRQDate", "*"+value.replace("-","")+"*"));
}
// boolQueryBuilder.mustNot(QueryBuilders.wildcardQuery(field, "*"+value+"*"));
} else if ("like".equals(type) && ("AND".equals(connect) || StringUtils.isBlank(connect))) {
for (String va :values){
boolQueryBuilderMust.must(QueryBuilders.wildcardQuery(field, "*"+va+"*"));
}
// boolQueryBuilder.must(QueryBuilders.wildcardQuery(field, "*"+value+"*"));
} else if ("like".equals(type) && ("OR".equals(connect) || StringUtils.isBlank(connect))) {
for (String va :values){
boolQueryBuilder.should(QueryBuilders.wildcardQuery(field, "*"+va+"*"));
}
// boolQueryBuilder.should(QueryBuilders.wildcardQuery(field, "*"+value+"*"));
}
continue;
}
if ("XCXSSRQ1".equals(searchVO.getField())||"ZCCSSRQ1".equals(searchVO.getField())||"EOPSSRQ1".equals(searchVO.getField())){
searchVO.setField(searchVO.getField().substring(0,searchVO.getField().length()-1));
field = searchVO.getField();
}
//外发审批角色的企标 等于 查询
// if("WFSPJS".equals(field) && "=".equals(type)){
// field = "WFSPJSField";
// if (StringUtils.isNotBlank(value)){
// value = value.replace(" , ","");
// }
// }
// if("ZRBM".equals(field) && "=".equals(type)){
// field = "ZRBMField";
// if (StringUtils.isNotBlank(value)){
// value = value.replace(" , ","");
// }
// }
if ("FO".equals(field)){
value = value + " ";
}
// if (StringUtils.isBlank(connect) && size > 1){
// connect = "OR";
// }
if ("=".equals(type) && ("AND".equals(connect) || StringUtils.isBlank(connect))) {
boolQueryBuilderMust.must(QueryBuilders.termQuery(field+".keyword", value));
} else if ("=".equals(type) && ("OR".equals(connect) || StringUtils.isBlank(connect))) {
boolQueryBuilder.should(QueryBuilders.termQuery(field+".keyword", value));
} else if ("!=".equals(type) && ("AND".equals(connect) || StringUtils.isBlank(connect))) {
// boolQueryBuilder.mustNot(QueryBuilders.termQuery(field+".keyword", value));
boolQueryBuilder.mustNot(QueryBuilders.wildcardQuery(field+".keyword", "*"+value+"*"));
} else if ("like".equals(type) && ("AND".equals(connect) || StringUtils.isBlank(connect))) {
boolQueryBuilderMust.must(QueryBuilders.wildcardQuery(field+".keyword", "*"+value+"*"));
// boolQueryBuilder.should(QueryBuilders.wildcardQuery(field, value));
} else if ("like".equals(type) && ("OR".equals(connect) || StringUtils.isBlank(connect))) {
boolQueryBuilder.should(QueryBuilders.wildcardQuery(field+".keyword", "*"+value+"*"));
}
}
String sarStandAttrEOStr = searchInfoEO.getSarStandAttrEOStr();
Map<String, String> sarStandAttrMap = JSONObject.fromObject(sarStandAttrEOStr);
// MAP通过JAVA8新特性流过滤NULL值或对象
Map<String, String> collectAttrMap = sarStandAttrMap.entrySet().stream().filter((e) -> e.getValue() != null).collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue));
String fieldInfo = InitStandAttrSearchUtil.queryField;
List<String> fieldInfoList = Arrays.asList(fieldInfo .split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList());
// 动态存储属性字段 ---1
for (String field : fieldInfoList) {
if(collectAttrMap.containsKey(field)){
boolQueryBuilderMust.must(QueryBuilders.fuzzyQuery(field, "*"+collectAttrMap.get(field)+"*"));
}
}
boolQueryBuilder.should(boolQueryBuilderMust);
return boolQueryBuilder;
}
@@ -0,0 +1,219 @@
package com.adc.da.search.util;
import com.adc.da.search.sarStandAttrDetails.entity.SarStandAttrDetails;
import com.adc.da.search.sarStandAttrDetails.service.ISarStandAttrDetailsSearchService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description: 启动项目时加载标准属性信息
* @Author: super_liu
* date: 2020/9/7 10:54
*/
@Component
public class InitStandAttrSearchUtil implements ApplicationRunner {
private static final Logger logger = LoggerFactory.getLogger(InitStandAttrSearchUtil.class);
@Autowired
private ISarStandAttrDetailsSearchService sarStandAttrDetailsEOService;
private final static List<String> standTypeList = new ArrayList<>();
private final static List<String> lawsTypeList = new ArrayList<>();
public final static List<String> standStateList = new ArrayList<>();
static {
standTypeList.add(SarTypeEnum.STAND.getValue());
standTypeList.add(SarTypeEnum.INLAND_STAND.getValue());
standTypeList.add(SarTypeEnum.FOREIGN_STAND.getValue());
lawsTypeList.add(SarTypeEnum.LAWS.getValue());
lawsTypeList.add(SarTypeEnum.INLAND_LAWS.getValue());
lawsTypeList.add(SarTypeEnum.FOREIGN_LAWS.getValue());
standStateList.add("DRAFT");
standStateList.add("ADVICE");
standStateList.add("RADYSUBMIT");
standStateList.add("SUBMIT");
standStateList.add("FJNVYX9Q7J");
standStateList.add("ZTJJSS");
standStateList.add("TOVOID");
standStateList.add("ZTXXYX");
standStateList.add("5E5Z3CELX6");
standStateList.add("N5KLTFLNRC");
}
// 标准属性字段信息
public static String queryField = ""; //所有属性表需要查询的字段以逗号分隔
public static String queryFieldNames = ""; //所有属性表需要查询的字段名以逗号分隔
public static List<String> queryFieldList = new ArrayList<>(); //所有属性表需要查询的字段
public static List<String> selectionFieldList = new ArrayList<>(); // 属性表下拉选项类型字段
public static List<String> fileFieldList = new ArrayList<>(); // 属性表文件类型字段
public static List<String> clobFieldList = new ArrayList<>(); // 属性表clob类型字段
public static List<String> timeFieldList = new ArrayList<>(); // 属性表日期类型字段
public static List<String> multiTimeFieldList = new ArrayList<>(); // 属性表多个日期类型字段
public static List<String> numFieldList = new ArrayList<>(); // 属性表数字类型字段
public static List<SarStandAttrDetails> standInlandAttrFieldList = new ArrayList<>(); // 全部国内标准字段属性
public static List<SarStandAttrDetails> standForeignAttrFieldList = new ArrayList<>(); // 全部海外标准字段属性
public static Map<String,String> selectFieldMap = new HashMap<>(); // 下拉属性字段及选项值
// 政策属性字段信息
public static String queryFieldLaws = ""; //所有属性表需要查询的字段以逗号分隔
public static String queryFieldNamesLaws = ""; //所有属性表需要查询的字段名以逗号分隔
public static List<String> queryFieldListLaws = new ArrayList<>(); //所有属性表需要查询的字段
public static List<String> selectionFieldListLaws = new ArrayList<>(); // 属性表下拉选项类型字段
public static List<String> fileFieldListLaws = new ArrayList<>(); // 属性表文件类型字段
public static List<String> clobFieldListLaws = new ArrayList<>(); // 属性表clob类型字段
public static List<String> timeFieldListLaws = new ArrayList<>(); // 属性表日期类型字段
public static List<String> multiTimeFieldListLaws = new ArrayList<>(); // 属性表多个日期类型字段
public static List<String> numFieldListLaws = new ArrayList<>(); // 属性表数字类型字段
public static List<SarStandAttrDetails> lawsInlandAttrFieldList = new ArrayList<>(); // 属性表数字类型字段
public static List<SarStandAttrDetails> lawsForeignAttrFieldList = new ArrayList<>(); // 全部政策字段属性
public static Map<String,String> selectFieldMapLaws = new HashMap<>(); // 下拉属性字段及选项值
// 企标属性字段信息
public static String queryFieldBuss = ""; //所有属性表需要查询的字段以逗号分隔
public static String queryFieldNamesBuss = ""; //所有属性表需要查询的字段名以逗号分隔
public static List<String> queryFieldListBuss = new ArrayList<>(); //所有属性表需要查询的字段
public static List<String> selectionFieldListBuss = new ArrayList<>(); // 属性表下拉选项类型字段
public static List<String> fileFieldListBuss = new ArrayList<>(); // 属性表文件类型字段
public static List<String> clobFieldListBuss = new ArrayList<>(); // 属性表clob类型字段
public static List<String> timeFieldListBuss = new ArrayList<>(); // 属性表日期类型字段
public static List<String> multiTimeFieldListBuss = new ArrayList<>(); // 属性表多个日期类型字段
public static List<String> numFieldListBuss = new ArrayList<>(); // 属性表数字类型字段
public static List<SarStandAttrDetails> bussAttrFieldList = new ArrayList<>(); // 全部企标字段属性
public static Map<String,String> selectFieldMapBuss = new HashMap<>(); // 下拉属性字段及选项值
@Override
public void run(ApplicationArguments args) throws Exception {
logger.info("项目启动时加载-搜索中心-查询标准属性类!");
// 属性表需要查询的字段
StringBuilder fieldInfoBuilder = new StringBuilder();
StringBuilder fieldInfoBuilderLaws = new StringBuilder();
StringBuilder fieldInfoBuilderBuss = new StringBuilder();
StringBuilder fieldInfoNameBuilder = new StringBuilder();
StringBuilder fieldInfoNameBuilderLaws = new StringBuilder();
StringBuilder fieldInfoNameBuilderBuss = new StringBuilder();
QueryWrapper qw = new QueryWrapper();
qw.eq("VALID_FLAG","0");
qw.orderByAsc("ORDER_NUM");
List<SarStandAttrDetails> getDetailsList = sarStandAttrDetailsEOService.list(qw);
if (getDetailsList != null && !getDetailsList.isEmpty()) {
logger.info("项目启动时加载-搜索中心-查询标准属性类--查询到" + getDetailsList.size() + "条属性字段数据!");
for (SarStandAttrDetails detailsEO : getDetailsList) {
String sarType = detailsEO.getSarType();
String attrType = detailsEO.getAttrType();
if (standTypeList.contains(sarType)) {
if (!SarTypeEnum.FOREIGN_STAND.getValue().equals(sarType)) {
standInlandAttrFieldList.add(detailsEO);
}
if (!SarTypeEnum.INLAND_STAND.getValue().equals(sarType)) {
standForeignAttrFieldList.add(detailsEO);
}
fieldInfoBuilder.append(detailsEO.getAttrField() + ",");
fieldInfoNameBuilder.append(detailsEO.getAttrName() + ",");
queryFieldList.add(detailsEO.getAttrField());
if (StandAttrTypeEnum.SELECT_OPTION.getValue().equals(attrType) || StandAttrTypeEnum.SEL_OPTS.getValue().equals(attrType)) {
selectionFieldList.add(detailsEO.getAttrField());
selectFieldMap.put(detailsEO.getAttrField(),detailsEO.getSelVal());
} else if (StandAttrTypeEnum.FILE.getValue().equals(attrType)) {
fileFieldList.add(detailsEO.getAttrField());
} else if (StandAttrTypeEnum.TEXTAREA.getValue().equals(attrType) && detailsEO.getAttrLen() >= 4000) {
clobFieldList.add(detailsEO.getAttrField());
} else if (StandAttrTypeEnum.DATE_PICKER.getValue().equals(attrType)) {
timeFieldList.add(detailsEO.getAttrField());
} else if (StandAttrTypeEnum.DATE_PIC_OPTS.getValue().equals(attrType)) {
multiTimeFieldList.add(detailsEO.getAttrField());
} else if (StandAttrTypeEnum.INPUT_NUM.getValue().equals(attrType)) {
numFieldList.add(detailsEO.getAttrField());
}
} else if (lawsTypeList.contains(sarType)) {
if (!SarTypeEnum.FOREIGN_LAWS.getValue().equals(sarType)) {
lawsInlandAttrFieldList.add(detailsEO);
}
if (!SarTypeEnum.INLAND_LAWS.getValue().equals(sarType)) {
lawsForeignAttrFieldList.add(detailsEO);
}
fieldInfoBuilderLaws.append(detailsEO.getAttrField() + ",");
fieldInfoNameBuilderLaws.append(detailsEO.getAttrName() + ",");
queryFieldListLaws.add(detailsEO.getAttrField());
if (StandAttrTypeEnum.SELECT_OPTION.getValue().equals(attrType) || StandAttrTypeEnum.SEL_OPTS.getValue().equals(attrType)) {
selectionFieldListLaws.add(detailsEO.getAttrField());
selectFieldMapLaws.put(detailsEO.getAttrField(),detailsEO.getSelVal());
} else if (StandAttrTypeEnum.FILE.getValue().equals(attrType)) {
fileFieldListLaws.add(detailsEO.getAttrField());
} else if (StandAttrTypeEnum.TEXTAREA.getValue().equals(attrType) && detailsEO.getAttrLen() >= 4000) {
clobFieldListLaws.add(detailsEO.getAttrField());
} else if (StandAttrTypeEnum.DATE_PICKER.getValue().equals(attrType)) {
timeFieldListLaws.add(detailsEO.getAttrField());
} else if (StandAttrTypeEnum.DATE_PIC_OPTS.getValue().equals(attrType)) {
multiTimeFieldListLaws.add(detailsEO.getAttrField());
} else if (StandAttrTypeEnum.INPUT_NUM.getValue().equals(attrType)) {
numFieldListLaws.add(detailsEO.getAttrField());
}
} else if (SarTypeEnum.BUSS.getValue().equals(sarType)) {
bussAttrFieldList.add(detailsEO);
fieldInfoBuilderBuss.append(detailsEO.getAttrField() + ",");
fieldInfoNameBuilderBuss.append(detailsEO.getAttrName() + ",");
queryFieldListBuss.add(detailsEO.getAttrField());
if (StandAttrTypeEnum.SELECT_OPTION.getValue().equals(attrType) || StandAttrTypeEnum.SEL_OPTS.getValue().equals(attrType)) {
selectionFieldListBuss.add(detailsEO.getAttrField());
selectFieldMapBuss.put(detailsEO.getAttrField(),detailsEO.getSelVal());
} else if (StandAttrTypeEnum.FILE.getValue().equals(attrType)) {
fileFieldListBuss.add(detailsEO.getAttrField());
} else if (StandAttrTypeEnum.TEXTAREA.getValue().equals(attrType) && detailsEO.getAttrLen() >= 4000) {
clobFieldListBuss.add(detailsEO.getAttrField());
} else if (StandAttrTypeEnum.DATE_PICKER.getValue().equals(attrType)) {
timeFieldListBuss.add(detailsEO.getAttrField());
} else if (StandAttrTypeEnum.DATE_PIC_OPTS.getValue().equals(attrType)) {
multiTimeFieldListBuss.add(detailsEO.getAttrField());
} else if (StandAttrTypeEnum.INPUT_NUM.getValue().equals(attrType)) {
numFieldListBuss.add(detailsEO.getAttrField());
}
}
}
queryField = fieldInfoBuilder.toString();
queryFieldLaws = fieldInfoBuilderLaws.toString();
queryFieldBuss = fieldInfoBuilderBuss.toString();
if (StringUtils.isNotBlank(queryField)) {
queryField = queryField.substring(0,queryField.length()-1);
}
if (StringUtils.isNotBlank(queryFieldLaws)) {
queryFieldLaws = queryFieldLaws.substring(0,queryFieldLaws.length()-1);
}
if (StringUtils.isNotBlank(queryFieldBuss)) {
queryFieldBuss = queryFieldBuss.substring(0,queryFieldBuss.length()-1);
}
logger.info("项目启动时加载-搜索中心-查询标准属性类--查询到属性字段为:" + queryField);
logger.info("项目启动时加载-搜索中心-查询政策属性类--查询到属性字段为:" + queryFieldLaws);
logger.info("项目启动时加载-搜索中心-查询企标属性类--查询到属性字段为:" + queryFieldBuss);
queryFieldNames = fieldInfoNameBuilder.toString();
queryFieldNamesLaws = fieldInfoNameBuilderLaws.toString();
queryFieldNamesBuss = fieldInfoNameBuilderBuss.toString();
if (StringUtils.isNotBlank(queryFieldNames)) {
queryFieldNames = queryFieldNames.substring(0,queryFieldNames.length()-1);
}
if (StringUtils.isNotBlank(queryFieldNamesLaws)) {
queryFieldNamesLaws = queryFieldNamesLaws.substring(0,queryFieldNamesLaws.length()-1);
}
if (StringUtils.isNotBlank(queryFieldNamesBuss)) {
queryFieldNamesBuss = queryFieldNamesBuss.substring(0,queryFieldNamesBuss.length()-1);
}
logger.info("项目启动时加载-搜索中心-查询标准属性类--查询到属性字段名称为:" + queryFieldNames);
logger.info("项目启动时加载-搜索中心-查询政策属性类--查询到属性字段名称为:" + queryFieldNamesLaws);
logger.info("项目启动时加载-搜索中心-查询企标属性类--查询到属性字段名称为:" + queryFieldNamesBuss);
} else {
logger.error("项目启动时加载-搜索中心-查询标准属性类--未查询到属性字段数据!");
}
}
}
@@ -0,0 +1,43 @@
package com.adc.da.search.util;
/**
* 标准法规分类
* @author gaoyan
* date 2018/09/19
*/
public enum SarTypeEnum {
INLAND_STAND("INLAND_STAND","国内标准法规"),INLAND_LAWS("INLAND_LAWS","国内政策"),
FOREIGN_STAND("FOREIGN_STAND","国外标准法规"),FOREIGN_LAWS("FOREIGN_LAWS","国外政策"),
STAND("STAND","国内外标准法规"),
LAWS("LAWS","国内外政策"),
BUSINESS("BUSINESS","企业标准"),
BUSS("BUSS","企业标准"),
SPLIT("SPLIT","标准拆分"),
ACCESS("ACCESS","标准法规清单"),
// 增加清单临时分类代码 后续通过同步按钮同步时切换类型
INLAND_STAND_ACCESS("INLAND_STAND_ACCESS","国内标准法规清单"),
FOREIGN_STAND_ACCESS("FOREIGN_STAND_ACCESS","国外标准法规清单"),
FOREIGN_LAWS_ACCESS("FOREIGN_LAWS_ACCESS","国内外政策清单"),
BUSS_ACCESS("BUSS","企业标准清单"),
PRODUCT("PRODUCT","车型/项目库"),
RECORDS("RECORDS","企标备案库");
private String value;
private String lable;
private SarTypeEnum(String value, String lable) {
this.value = value;
this.lable = lable;
}
public String getValue() {
return value;
}
public String getLable() {
return lable;
}
}
@@ -0,0 +1,28 @@
package com.adc.da.search.util;
/**
* @Description: 属性类型枚举类
* @Author: super_liu
* date: 2020/8/17 17:02
*/
public enum StandAttrTypeEnum {
INPUT_STR("INPUT_STR","输入框(字符串)"),INPUT_NUM("INPUT_NUM","输入框(数字)"),
SELECT_OPTION("SEL_OPTION","单选下拉框"),SEL_OPTS("SEL_OPTS","多选下拉框"),DATE_PICKER("DATE_PICKER","日期选择"),
DATE_PIC_OPTS("DATE_PIC_OPTS","多日期选择"),FILE("FILE","文件"),
TEXTAREA("TEXTAREA","文本框") ;
private String value;
private String lable;
private StandAttrTypeEnum(String value, String lable) {
this.value = value;
this.lable = lable;
}
public String getValue() {
return value;
}
public String getLable() {
return lable;
}
}