AnalysisObserver.java
package com.bioproj.analysis.observer; import com.bioproj.analysis.entity.SeqSampleAnalysis; import com.mbiolance.cloud.auth.domain.dto.SysUserDto; import com.mbiolance.common.domain.SampleStatus; public interface AnalysisObserver { /** * 创建分析 */ void notifyCreateAnalysis(SeqSampleAnalysis analysis, SysUserDto loginUser); /** * 运行分析数据 */ void notifyRunAnalysisData(SeqSampleAnalysis analysis, SysUserDto loginUser); /** * 分析结束 */ void notifyAnalysisEnd(SeqSampleAnalysis analysis, SampleStatus originStatus, SysUserDto loginUser); }
package com.bioproj.analysis.observer; import com.bioproj.analysis.entity.SeqSampleAnalysis; import com.mbiolance.cloud.auth.domain.dto.SysUserDto; import com.mbiolance.common.domain.SampleStatus; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationContext; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; import java.util.Map; @Component @Slf4j public class AnalysisObserverHandles { private final List<AnalysisObserver> observers = new ArrayList<>(); public AnalysisObserverHandles(ApplicationContext cxt) { Map<String, AnalysisObserver> observerMap = cxt.getBeansOfType(AnalysisObserver.class); observerMap.forEach((k, v) -> { if (!(v instanceof AnalysisObserverHandles)) { this.observers.add(v); } }); } @Async("eventTaskExecutor") // @Override public void notifyCreateAnalysis(SeqSampleAnalysis analysis, SysUserDto loginUser) { for (AnalysisObserver observer : observers) { try { observer.notifyCreateAnalysis(analysis, loginUser); } catch (Exception e) { log.error("notifyCreateAnalysis error: {}", e.getMessage()); } } } @Async("eventTaskExecutor") // @Override public void notifyRunAnalysisData(SeqSampleAnalysis analysis, SysUserDto loginUser) { for (AnalysisObserver observer : observers) { try { observer.notifyRunAnalysisData(analysis, loginUser); } catch (Exception e) { log.error("notifyRunAnalysisData error: {}", e.getMessage()); } } } @Async("eventTaskExecutor") // @Override public void notifyAnalysisEnd(SeqSampleAnalysis analysis, SampleStatus originStatus, SysUserDto loginUser) { for (AnalysisObserver observer : observers) { try { observer.notifyAnalysisEnd(analysis, originStatus, loginUser); } catch (Exception e) { log.error("notifyAnalysisEnd error: {}", e.getMessage()); } } } }
Github开源生信云平台 DEMO