枚举类:
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{@Overrideprotected void handleMatchReqVo(MatchingReqVo matchingReqVo, LibraryBusinessInfoService libraryBusinessInfoService) {matchingReqVo.setIds(null);}@Overrideprotected SimpleSearchMode getMode() {return SimpleSearchMode.RTM;}
}