一、定义接口
public interface ValidBatchUploadStrategy {
ResultDTO check(MultipartFile file, String studyId,String appName) throws Exception;
}
二、策略实现类
@Slf4j
@Component(BatchUploadTypeConsts.ORG_TYPE)
public class OrgValidBatchUploadStrategyImpl implements ValidBatchUploadStrategy {
@Autowired
private CommonStrategyImpl commonStrategyImpl;
@Override
public ResultDTO check(MultipartFile file,String studyId,String appName) throws Exception{
return commonStrategyImpl.check(file,studyId,appName);
}
}
三、常量类(@component用到的常量名)
public class BatchUploadTypeConsts {
public static final String ORG_TYPE = "1";
public static final String STUDY_USER = "2";
public static final String TX_USER = "3";
public static final String TX_ORG="4";
}
四、公共逻辑业务类
@Component
public class CommonStrategyImpl {
public ResultDTO check(MultipartFile file, String studyId,String appName) throws
Exception{
//具体业务实现内容
}
}
五、策略入口类
@Slf4j
@Component
public class StrategyBatchComponent {
@Autowired
private Map<String, ValidBatchUploadStrategy> strategyMap = Maps.newConcurrentMap();
public StrategyBatchComponent(Map<String, ValidBatchUploadStrategy> strategyMap) {
this.strategyMap.clear();
strategyMap.forEach((k,v)->this.strategyMap.put(k,v));
}
public ResultDTO valid(UploadReq uploadReq) throws Exception{
ValidBatchUploadStrategy strategy = strategyMap.get(uploadReq.getType());
if(Objects.isNull(strategy)){
throw new ServiceException(ShanhuResponseType.BATCH_UPLOAD_TYPE_INVALID);
}
if(!BatchUploadTypeConsts.TX_USER.equals(uploadReq.getType()) &&
!BatchUploadTypeConsts.TX_ORG.equals(uploadReq.getType()) &&
StringUtils.isBlank(uploadReq.getStudyId())){
throw new ServiceException(ShanhuResponseType.STUDY_ID_EMPTY);
}
return
strategy.check(uploadReq.getFile(),uploadReq.getStudyId(),uploadReq.getAppName());
}
}