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

}