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());
}
}
}
}