/*
 * Ant Group
 * Copyright (c) 2004-2025 All Rights Reserved.
 */
package org.jeecg.modules.database.service.executor;

import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.database.constant.ExperimentReviewProcessType;
import org.jeecg.modules.database.constant.ExperimentReviewResultEnum;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author lise
 */

@Component
public class GJB548C6Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
    @Override
    public String getProcessType() {
        return ExperimentReviewProcessType.GJB548C;
    }

    @Override
    public int getPriority() {
        return 6;
    }

    /**
     * 6
     *
     * 需要进行加速退火而未进行加速退火的试验
     *
     * 可能高估器件的抗辐射性能
     *
     * 界面态在退火过程中的后增长和氧化物陷阱电荷的退火
     *
     * 已知器件的电路设计中不包含MOS单元；已知应用环境的总剂量不超过50Gy(Si）；已知器件在辐射环境服役的总寿命小于TDE时间；按预定应用环境的剂量率进行辐射试验
     *
     * 通过表征试验，业已证明，该器件类型或IC工艺，并未表现出器件参数TDE变化大于试验误差（或大于规定的上限），而且也已证明影响TDE响应的变量对于特定的生产方工艺过程已处于受控状态。作为起码要求，上述表征试验应包括评价TDE
     * 对传输延迟、输出驱动、最小工作电压参数的影响、对影响TDE变量的连续工艺控制状态可通过MOS测试结构的辐射加固批取样试验得到证明
     *
     * 退火过程中没有高温退火（退火温度为100℃识别为高温退火）这个过程；同时在评定流程中询问用户是否需要加速退火，用户选是，启动这条评定建议
     *
     * @param experiment
     * @param sampleInfo
     * @param experimentReview
     * @return
     */
    @Override
    public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {
        experimentService.fetchExperimentDetail(experiment);
        boolean condition1 = false, condition2 = false;
        if (StringUtils.equals(experimentReview.getNeedAnneal(), "Y")) {
            condition1 = true;
        }
        List<ExperimentAnnealProcess> experimentAnnealProcessList = experimentAnnealProcessService.getByExperimentId(experiment.getId());
        for (ExperimentAnnealProcess experimentAnnealProcess : experimentAnnealProcessList) {
            if (experimentAnnealProcess.getAnnealTemperature().equals("100")) {
                condition2 = true;
                break;
            }
        }
        if (condition1 && !condition2) {
            return ExperimentReviewResultEnum.HIGH;
        }
        return ExperimentReviewResultEnum.ITEM_PASS;
    }
}