package jtznyj.engineer.service.dataDiagnosticService;

import jtznyj.engineer.service.dataDiagnosticService.data.DrillStateResult;

import java.util.List;

/**
 * 数据诊断分析基类
 * @param <T>
 * @param <K> 诊断信息
 */
public abstract class DataDiagnostic<T,K,P> implements IDataDiagnostic<T,K,P> {
    protected P param;

    /**
     * 所有数据（所有样本数据）
     */
    protected List<T> dataList;

    protected T data;

    protected String jh = "";

    /**
     * 设置诊断参
     * @param param
     */
    public void setParameter(P param){
        this.param = param;
    }

    /**
     * 设置分析所有数据数据
     * @param dataList
     */
    public void setDataList(List<T> dataList){
        this.dataList = dataList;
    }

    /**
     * 设置分析数据
     * @param data
     */
    public void setData(T data){
        this.data = data;
    }

    /**
     * 执行诊断
     * @return 诊断分析结果
     */
    public abstract DataDiagnosticAnalyzeResult performAnalyze(DrillStateResult drillStateResult);

    /**
     * 重置
     */
    public abstract void reset();

    /**
     * 获得字段分析异常数据集
     * @return
     */
    public abstract List<T> getAbnormalData();

    /**
     * 获得诊断描述信息
     * @return
     */
    public abstract List<DataDiagnosticDescription<K>> getDiagnosticDescriptions();
}
