枚举类:
package com.dtranx.tools.corpora.businessapi.enums;
import com.dtranx.tools.commons.vo.EnumResponseVo;
import com.google.common.collect.Lists;
import java.util.List;
/**
* @ClassName SimpleSearchMode
* @Description TODO
* @Date 2024/5/28 15:55
* @Author ly
**/
public enum SimpleSearchMode {
TM(1,"TM","语料库"),
RTM(2,"RTM","反选库"),
STM(3,"STM","这个项目对应选择的参考库里有STM标签的语料库的结果"),
TM_STM(4,"TM_STM","语料库的基础上只查参考库中包含STM标签的结果"),
RTM_STM(5,"RTM_STM","反选库的基础上只查参考库中包含STM标签的结果");
private int value;
private String code;
private String desc;
SimpleSearchMode(int value, String code, String desc) {
this.value = value;
this.code = code;
this.desc = desc;
}
public static List<EnumResponseVo> getEnums(){
SimpleSearchMode[] values = SimpleSearchMode.values();
List<EnumResponseVo> enumResponseVos = Lists.newArrayList();
for(int i = 0;i<values.length;i++){
EnumResponseVo build = EnumResponseVo.builder()
.value(values[i].value)
.code(values[i].code)
.desc(values[i].desc).build();
enumResponseVos.add(build);
}
return enumResponseVos;
}
}
抽象策略:
package com.dtranx.tools.corpora.business.strategy.matchmode;
import com.dtranx.tools.commons.util.ScanSupport;
import com.dtranx.tools.corpora.abilityapi.req.MatchingReqVo;
import com.dtranx.tools.corpora.business.service.LibraryBusinessInfoService;
import com.dtranx.tools.corpora.businessapi.enums.SimpleSearchMode;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Map;
import java.util.Set;
/**
* @ClassName AbstractMatchMode
* @Description TODO
* @Date 2024/5/30 18:24
* @Author ly
**/
@Slf4j
public abstract class AbstractMatchMode {
protected static final Map<SimpleSearchMode, AbstractMatchMode> SEARCH_MODE = Maps.newHashMap();
static{
Class clazz = AbstractMatchMode.class;
Set<Class<?>> classes = null;
try {
classes = ScanSupport.classInfos(clazz.getPackage().getName());
} catch (Exception e) {
log.error("扫描搜索模式策略失败:",e);
}
if(CollectionUtils.isNotEmpty(classes)) {
for (Class<?> aClass : classes) {
if(ScanSupport.validate(aClass.getSuperclass(),clazz)){
try {
AbstractMatchMode abstractModeStrategy = (AbstractMatchMode) aClass.newInstance();
SimpleSearchMode mode = abstractModeStrategy.getMode();
SEARCH_MODE.put(mode,abstractModeStrategy);
} catch (Exception e) {
log.error("初始化搜索模式策略失败:",e);
}
}
}
}
}
public static void handleMatchReqVo(SimpleSearchMode simpleSearchMode,MatchingReqVo matchingReqVo, LibraryBusinessInfoService libraryBusinessInfoService){
if(simpleSearchMode == null) {
return;
}
AbstractMatchMode matchMode = SEARCH_MODE.get(simpleSearchMode);
if(matchMode == null){
return;
}
matchMode.handleMatchReqVo(matchingReqVo,libraryBusinessInfoService);
}
/**
* 处理MatchingReqVo
* @param matchingReqVo
* @param libraryBusinessInfoService
*/
protected abstract void handleMatchReqVo(MatchingReqVo matchingReqVo, LibraryBusinessInfoService libraryBusinessInfoService);
/**
* 获取搜索类型
* @return
*/
protected abstract SimpleSearchMode getMode();
}
具体策略:
package com.dtranx.tools.corpora.business.strategy.matchmode;
import com.dtranx.tools.corpora.abilityapi.req.MatchingReqVo;
import com.dtranx.tools.corpora.business.service.LibraryBusinessInfoService;
import com.dtranx.tools.corpora.businessapi.enums.SimpleSearchMode;
/**
* @ClassName TmMatchMode
* @Description TODO
* @Date 2024/5/30 18:29
* @Author ly
**/
public class RtmMatchMode extends AbstractMatchMode{
@Override
protected void handleMatchReqVo(MatchingReqVo matchingReqVo, LibraryBusinessInfoService libraryBusinessInfoService) {
matchingReqVo.setIds(null);
}
@Override
protected SimpleSearchMode getMode() {
return SimpleSearchMode.RTM;
}
}