This commit is contained in:
ls
2025-06-23 15:15:43 +08:00
parent 8e6c7f7059
commit 61a1b7d089
18 changed files with 688 additions and 85 deletions

View File

@@ -17,7 +17,11 @@ public class ExecutorHolder {
@PostConstruct
public void init() {
executorList.forEach(executor -> executorMap.put(executor.getProcessType() + executor.getPriority(), executor));
executorList.forEach(executor -> {
if (!executorMap.containsKey(executor.getProcessType() + executor.getPriority())) {
executorMap.put(executor.getProcessType() + executor.getPriority(), executor);
}
});
}
public String execute(String processType, Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {

View File

@@ -4,12 +4,17 @@
*/
package org.jeecg.modules.database.service.executor;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.database.constant.ExperimentReviewProcessType;
import org.jeecg.modules.database.entity.*;
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
*/
@@ -26,8 +31,44 @@ public class QJ1000410Executor extends BaseExecutor implements IExperimentRevi
return 10;
}
/**
* 10
*
* 器件未使用最劣偏置
*
* 可能高估器件的抗辐射性能
*
* 参见附件二知识库中84条目《辐射试验》的解释
*
* 采用应用偏置条件
*
* 试验数据中偏置条件选择动态偏置,启动这条评定建议
*
* @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;
List<ExperimentAnnealProcess> experimentAnnealProcessList = experimentAnnealProcessService.getByExperimentId(experiment.getId());
for (ExperimentAnnealProcess experimentAnnealProcess : experimentAnnealProcessList) {
String deviationCondition = experimentAnnealProcess.getDeviationCondition();
JSONObject jsonObject = JSON.parseObject(deviationCondition);
if (jsonObject.containsKey("offsetCondition")) {
String offsetCondition = jsonObject.getString("offsetCondition");
if (StringUtils.contains(offsetCondition, "dtpz")) {
condition1 = true;
break;
}
}
}
if (condition1) {
return ExperimentReviewResultEnum.HIGH;
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -4,9 +4,10 @@
*/
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.entity.*;
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;
@@ -26,8 +27,29 @@ public class QJ1000411Executor extends BaseExecutor implements IExperimentRevi
return 11;
}
/**
* 11
*
* 需要老炼而未老炼
*
* 可能高估器件的抗辐射性能
*
* 老炼后氧化层的氢分布会不一样,并且激活一部分缺陷,对器件的辐射损伤起到加速退化的作用
*
* 以前有表征试验证明或设计上证明老炼对总剂量辐射响应的影响可以忽略(电参数符合辐射后规范)
*
* 在评定流程中询问用户是否进行了老炼试验,用户选否,启动这条评定建议
*
* @param experiment
* @param sampleInfo
* @param experimentReview
* @return
*/
@Override
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {
if (StringUtils.equals(experimentReview.getNeedBurnin(), "N")) {
return ExperimentReviewResultEnum.HIGH;
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -5,11 +5,13 @@
package org.jeecg.modules.database.service.executor;
import org.jeecg.modules.database.constant.ExperimentReviewProcessType;
import org.jeecg.modules.database.entity.*;
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
*/
@@ -26,8 +28,48 @@ public class QJ1000412Executor extends BaseExecutor implements IExperimentRevi
return 12;
}
/**
* 12
*
* 辐射室温环境温度不在标准范围内
*
* 温度高可能高估器件的抗辐射性能;温度低可能低估器件的抗辐射性能
*
* 参见附件二知识库中85条目《辐射试验的辐射试验-温度》的解释
*
* 可参考QJ10004A-2018分析辐射室温环境温度在QJ10004A-2018的适用性
*
* 辐照过程中的辐照环境温度在15-30℃范围外启动这条评定建议
*
* @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;
List<ExperimentRadiationProcess> radiationProcessList = experimentRadiationProcessService.getByExperimentId(experiment.getId());
for (ExperimentRadiationProcess experimentRadiationProcess : radiationProcessList) {
String environmentalTemperature = experimentRadiationProcess.getEnvironmentalTemperature();
Integer temp = Integer.valueOf(environmentalTemperature);
if (temp < 15) {
condition1 = true;
break;
}
if (temp > 30) {
condition2 = true;
break;
}
}
if (condition1) {
return ExperimentReviewResultEnum.LOW;
}
if (condition2) {
return ExperimentReviewResultEnum.HIGH;
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -4,12 +4,15 @@
*/
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.entity.*;
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
*/
@@ -26,8 +29,41 @@ public class QJ1000413Executor extends BaseExecutor implements IExperimentRevi
return 13;
}
/**
* 13
*
* 未使用干冰保存
*
* 可能高估器件的抗辐射性能
*
* 氧化物陷阱电荷在干冰条件下退火减弱
*
* 未使用干冰保存的适用范围:如果应用环境比干冰环境温度低,采用应用环境温度进行保存
*
* 在退火过程的备注中,有“保存”字段但是没有“干冰”字段,启动这条评定建议
*
* @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;
List<ExperimentAnnealProcess> experimentAnnealProcessList = experimentAnnealProcessService.getByExperimentId(experiment.getId());
for (ExperimentAnnealProcess experimentAnnealProcess : experimentAnnealProcessList) {
String comment = experimentAnnealProcess.getComment();
if (StringUtils.contains(comment, "保存") && !StringUtils.contains(comment, "干冰")) {
condition1 = true;
break;
}
}
if (condition1) {
return ExperimentReviewResultEnum.HIGH;
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -4,12 +4,15 @@
*/
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.entity.*;
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
*/
@@ -26,8 +29,45 @@ public class QJ1000414Executor extends BaseExecutor implements IExperimentRevi
return 14;
}
/**
* 14
*
* 使用干冰保存器件,应通过针对性的退火表征试验
*
* 可能高估器件的抗辐射性能
*
* 氧化物陷阱电荷在干冰条件下退火减弱
*
* 没有给出过表征试验的结果的适用范围试验方案按照QJ10004A-2018的相关规定进行执行
*
* 在退火过程的备注中,有“干冰”字段,在评定流程中询问用户是否进行了针对性的退火表征试验,用户选否,启动这条评定建议
*
* @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;
List<ExperimentAnnealProcess> experimentAnnealProcessList = experimentAnnealProcessService.getByExperimentId(experiment.getId());
for (ExperimentAnnealProcess experimentAnnealProcess : experimentAnnealProcessList) {
String comment = experimentAnnealProcess.getComment();
if (StringUtils.contains(comment, "干冰")) {
condition1 = true;
break;
}
}
if (StringUtils.contains(experimentReview.getNeedAnneal(), "N")) {
condition2 = true;
}
if (condition1 && condition2) {
return ExperimentReviewResultEnum.HIGH;
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -4,12 +4,17 @@
*/
package org.jeecg.modules.database.service.executor;
import cn.hutool.core.collection.CollUtil;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.database.constant.ExperimentReviewProcessType;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.constant.ExperimentReviewResultEnum;
import org.jeecg.modules.database.dto.TestMeteringPointDTO;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author lise
*/
@@ -26,8 +31,52 @@ public class QJ1000415Executor extends BaseExecutor implements IExperimentRevi
return 15;
}
/**
* 15
*
* 试验过程未缺失,并且都符合试验标准的要求,参数测试结果未超差
*
* 评定结果通过
*
* 辐照过程中备注栏有“已过辐照”字段有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, condition3 = false;
List<ExperimentRadiationProcess> experimentRadiationProcessList = experimentRadiationProcessService.getByExperimentId(
experiment.getId());
for (ExperimentRadiationProcess v : experimentRadiationProcessList) {
if (StringUtils.contains(v.getComment(), "已过辐照")) {
condition1 = true;
break;
}
}
List<ExperimentAnnealProcess> experimentAnnealProcessList = experimentAnnealProcessService.getByExperimentId(experiment.getId());
for (ExperimentAnnealProcess experimentAnnealProcess : experimentAnnealProcessList) {
if (StringUtils.contains(experimentAnnealProcess.getAnnealTemperature(), "100")) {
condition2 = true;
}
}
List<ExperimentTestProcess> experimentTestProcessList = experimentTestProcessService.getByExperimentId(experiment.getId());
for (ExperimentTestProcess v : experimentTestProcessList) {
List<TestMeteringPointDTO> testMeteringPointList = v.getTestMeteringPointList();
TestMeteringPointDTO last = CollUtil.getLast(testMeteringPointList);
if (!StringUtils.equals(last.getResult(), "合格")) {
condition3 = true;
break;
}
}
if (condition1 && condition2 && condition3) {
return ExperimentReviewResultEnum.FINAL_PASS;
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -4,12 +4,17 @@
*/
package org.jeecg.modules.database.service.executor;
import cn.hutool.core.collection.CollUtil;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.database.constant.ExperimentReviewProcessType;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.constant.ExperimentReviewResultEnum;
import org.jeecg.modules.database.dto.TestMeteringPointDTO;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author lise
*/
@@ -28,6 +33,21 @@ public class QJ1000416Executor extends BaseExecutor implements IExperimentRevi
@Override
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {
experimentService.fetchExperimentDetail(experiment);
boolean condition1 = false, condition2 = false, condition3 = false;
List<ExperimentTestProcess> experimentTestProcessList = experimentTestProcessService.getByExperimentId(experiment.getId());
for (ExperimentTestProcess v : experimentTestProcessList) {
List<TestMeteringPointDTO> testMeteringPointList = v.getTestMeteringPointList();
TestMeteringPointDTO last = CollUtil.getLast(testMeteringPointList);
if (!StringUtils.equals(last.getResult(), "合格")) {
condition3 = true;
break;
}
}
if (!condition3) {
return ExperimentReviewResultEnum.NOT_PASS;
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -1,33 +0,0 @@
/*
* Ant Group
* Copyright (c) 2004-2025 All Rights Reserved.
*/
package org.jeecg.modules.database.service.executor;
import org.jeecg.modules.database.constant.ExperimentReviewProcessType;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.constant.ExperimentReviewResultEnum;
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
import org.springframework.stereotype.Component;
/**
* @author lise
*/
@Component
public class QJ1000417Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override
public String getProcessType() {
return ExperimentReviewProcessType.QJ10004;
}
@Override
public int getPriority() {
return 17;
}
@Override
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -4,18 +4,26 @@
*/
package org.jeecg.modules.database.service.executor;
import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.database.constant.ExperimentReviewProcessType;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.constant.ExperimentReviewResultEnum;
import org.jeecg.modules.database.dto.RadiationDetailDTO;
import org.jeecg.modules.database.dto.RadiationMapDTO;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author lise
* @version GJB548C1Executor.java, v 0.1 2025年06月16日 20:57 lise
*/
@Component
public class QJ100041Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override
public String getProcessType() {
return ExperimentReviewProcessType.QJ10004;
@@ -26,8 +34,46 @@ public class QJ100041Executor extends BaseExecutor implements IExperimentRevie
return 1;
}
/**
* 1
*
* 模拟器件未进行ELDRS试验
*
* 可能高估器件的抗辐射性能
*
* 参见附件二知识库中68条目《双极器件的低剂量率效应》的解释。
*
* a)已知器件设计不包含双极晶体管; b)已知器件设计不包含任何线性电路功能; c)业已证明该器件类型或IC工艺并未表现出器件参数ELDRS,而且也已证明影呴ELDRS 响应的变量对于特定的生产方工艺过程已处于受控状态
*
* 样片类型为模拟集成电路样片名称中含有双极的字段。但是实际剂量率大于0.01 rad (Si) /s并且备注中没有加速试验的备注情况下启动这条评定建议
*
* @param experiment
* @param sampleInfo
* @param experimentReview
* @return
*/
@Override
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {
experimentService.fetchExperimentDetail(experiment);
List<ExperimentRadiationProcess> radiationProcessList = experimentRadiationProcessService.getByExperimentId(experiment.getId());
for (ExperimentRadiationProcess radiationProcess : radiationProcessList) {
if (!StringUtils.contains(radiationProcess.getSampleInfo(), sampleInfo.getId())) {
continue;
}
String radiationDetailJson = radiationProcess.getRadiationDetail();
RadiationMapDTO radiationMap = JSON.parseObject(radiationDetailJson, RadiationMapDTO.class);
List<RadiationDetailDTO> detailDTOList = radiationMap.assembleDetails();
Double minRate = detailDTOList.stream().map(obj -> obj.getActualMeasurementRate()).filter(
point -> StringUtils.isNotBlank(point)).filter(str -> str.matches("-?\\d+(\\.\\d+)?")).mapToDouble(Double::parseDouble)
.min().orElse(0d);
if (sampleInfo.getSampleName().contains("双极") && sampleInfo.getSampleType().equals("模拟集成电路") && NumberUtil.compare(
minRate, 0.01d) > 0 && StringUtils.contains(radiationProcess.getComment(), "加速试验")) {
return ExperimentReviewResultEnum.HIGH;
}
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -4,18 +4,27 @@
*/
package org.jeecg.modules.database.service.executor;
import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.database.constant.ExperimentReviewProcessType;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.constant.ExperimentReviewResultEnum;
import org.jeecg.modules.database.dto.RadiationDetailDTO;
import org.jeecg.modules.database.dto.RadiationMapDTO;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author lise
* @version GJB548C1Executor.java, v 0.1 2025年06月16日 20:57 lise
*/
@Component
public class QJ100042Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override
public String getProcessType() {
return ExperimentReviewProcessType.QJ10004;
@@ -26,8 +35,44 @@ public class QJ100042Executor extends BaseExecutor implements IExperimentRevie
return 2;
}
/**
* 2
*
* 选择剂量率低于规定剂量率进行辐照试验
*
* 可能低估器件的抗辐射性能
*
* 参见附件二知识库中83条目《双极器件的辐射试验-辐照剂量率》的解释
*
* 可参考 QJ10004A-2018的相关规定分析剂量率选择在QJ10004A-2018的适用性
*
* 样片类型非模拟集成电路样片名称中不含有双极的字段。但是实际剂量率小于50 rad (Si) /s启动这条评定建议
*
* @param experiment
* @param sampleInfo
* @param experimentReview
* @return
*/
@Override
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {
experimentService.fetchExperimentDetail(experiment);
List<ExperimentRadiationProcess> radiationProcessList = experimentRadiationProcessService.getByExperimentId(experiment.getId());
for (ExperimentRadiationProcess radiationProcess : radiationProcessList) {
if (!StringUtils.contains(radiationProcess.getSampleInfo(), sampleInfo.getId())) {
continue;
}
String radiationDetailJson = radiationProcess.getRadiationDetail();
RadiationMapDTO radiationMap = JSON.parseObject(radiationDetailJson, RadiationMapDTO.class);
List<RadiationDetailDTO> detailDTOList = radiationMap.assembleDetails();
Double minRate = detailDTOList.stream().map(obj -> obj.getActualMeasurementRate()).filter(
point -> StringUtils.isNotBlank(point)).filter(str -> str.matches("-?\\d+(\\.\\d+)?")).mapToDouble(Double::parseDouble)
.max().orElse(0d);
if (!sampleInfo.getSampleName().contains("双极") && NumberUtil.compare(
minRate, 50d) < 0) {
return ExperimentReviewResultEnum.LOW;
}
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -4,18 +4,27 @@
*/
package org.jeecg.modules.database.service.executor;
import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.database.constant.ExperimentReviewProcessType;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.constant.ExperimentReviewResultEnum;
import org.jeecg.modules.database.dto.RadiationDetailDTO;
import org.jeecg.modules.database.dto.RadiationMapDTO;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author lise
* @version GJB548C1Executor.java, v 0.1 2025年06月16日 20:57 lise
*/
@Component
public class QJ100043Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override
public String getProcessType() {
return ExperimentReviewProcessType.QJ10004;
@@ -26,8 +35,46 @@ public class QJ100043Executor extends BaseExecutor implements IExperimentRevie
return 3;
}
/**
* 3
*
* 选择剂量率高于规定剂量率进行辐照试验
*
* 可能高估器件的抗辐射性能
*
* 参见附件二知识库中83条目《双极器件的辐射试验-辐照剂量率》的解释
*
* 可参考 QJ10004A-2018的相关规定分析剂量率选择在QJ10004A-2018的适用性
*
* 样片类型非模拟集成电路样片名称中不含有双极的字段。但是实际剂量率大于300 rad (Si) /s启动这条评定建议
*
* @param experiment
* @param sampleInfo
* @param experimentReview
* @return
*/
@Override
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {
experimentService.fetchExperimentDetail(experiment);
List<ExperimentRadiationProcess> radiationProcessList = experimentRadiationProcessService.getByExperimentId(experiment.getId());
for (ExperimentRadiationProcess radiationProcess : radiationProcessList) {
if (!StringUtils.contains(radiationProcess.getSampleInfo(), sampleInfo.getId())) {
continue;
}
String radiationDetailJson = radiationProcess.getRadiationDetail();
RadiationMapDTO radiationMap = JSON.parseObject(radiationDetailJson, RadiationMapDTO.class);
List<RadiationDetailDTO> detailDTOList = radiationMap.assembleDetails();
Double minRate = detailDTOList.stream().map(obj -> obj.getActualMeasurementRate()).filter(
point -> StringUtils.isNotBlank(point)).filter(str -> str.matches("-?\\d+(\\.\\d+)?")).mapToDouble(Double::parseDouble)
.max().orElse(0d);
if (!sampleInfo.getSampleName().contains("双极") && !sampleInfo.getSampleType().equals("模拟集成电路") && NumberUtil.compare(
minRate, 300d) > 0) {
return ExperimentReviewResultEnum.HIGH;
}
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -4,18 +4,25 @@
*/
package org.jeecg.modules.database.service.executor;
import cn.hutool.core.collection.CollUtil;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.database.constant.ExperimentReviewProcessType;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.constant.ExperimentReviewResultEnum;
import org.jeecg.modules.database.dto.TestMeteringPointDTO;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author lise
* @version GJB548C1Executor.java, v 0.1 2025年06月16日 20:57 lise
*/
@Component
public class QJ100044Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override
public String getProcessType() {
return ExperimentReviewProcessType.QJ10004;
@@ -26,8 +33,52 @@ public class QJ100044Executor extends BaseExecutor implements IExperimentRevie
return 4;
}
/**
* 4
*
* 器件没有通过电测试,未进行室温退火
*
* 可能低估器件的抗辐射性能
*
* 室温退火过程中的氧化物陷阱电荷的退火,器件的电参数有可能恢复
*
* 器件功能失效当预定应用环境辐射剂量率比试验剂量率高且高于0.001Gy(Si)/
* 剂量率高且高于0.001Gy(Si)/
*
*
*
* 最后一个剂量点测试未通过但是退火过程中没有室温退火退火温度为25℃识别为室温退火启动这条评定建议。
*
* @param experiment
* @param sampleInfo
* @param experimentReview
* @return
*/
@Override
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {
experimentService.fetchExperimentDetail(experiment);
List<ExperimentTestProcess> experimentTestProcesses = experimentTestProcessService.getByExperimentId(experiment.getId());
boolean condition1 = false, condition2 = false;
for (ExperimentTestProcess v : experimentTestProcesses) {
List<TestMeteringPointDTO> testMeteringPointList = v.getTestMeteringPointList();
TestMeteringPointDTO last = CollUtil.getLast(testMeteringPointList);
if (!StringUtils.equals(last.getResult(), "合格")) {
condition1 = true;
break;
}
}
List<ExperimentAnnealProcess> experimentAnnealProcessList = experimentAnnealProcessService.getByExperimentId(experiment.getId());
for (ExperimentAnnealProcess experimentAnnealProcess : experimentAnnealProcessList) {
if (experimentAnnealProcess.getAnnealTemperature().equals("25")) {
condition2 = true;
break;
}
}
if (condition1 && condition2) {
return ExperimentReviewResultEnum.LOW;
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -4,18 +4,24 @@
*/
package org.jeecg.modules.database.service.executor;
import cn.hutool.core.collection.CollUtil;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.database.constant.ExperimentReviewProcessType;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.constant.ExperimentReviewResultEnum;
import org.jeecg.modules.database.dto.TestMeteringPointDTO;
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 QJ100045Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override
public String getProcessType() {
return ExperimentReviewProcessType.QJ10004;
@@ -23,11 +29,50 @@ public class QJ100045Executor extends BaseExecutor implements IExperimentRevie
@Override
public int getPriority() {
return 5;
return 4;
}
/**
* 5
*
* 不需要进行室温退火试验,但进行了室温退火
*
* 可能低估器件的抗辐射性能
*
* 退火过程中的界面态增长将可能导致元器件的后损伤
*
* 可参考 ESCC229000的相关规定分析退火时长在ESCC229000的适用性
*
* 最后一个剂量点测试通过但是退火过程中有室温退火退火温度为25℃识别为室温退火启动这条评定建议
*
* @param experiment
* @param sampleInfo
* @param experimentReview
* @return
*/
@Override
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {
experimentService.fetchExperimentDetail(experiment);
List<ExperimentTestProcess> experimentTestProcesses = experimentTestProcessService.getByExperimentId(experiment.getId());
boolean condition1 = false, condition2 = false;
for (ExperimentTestProcess v : experimentTestProcesses) {
List<TestMeteringPointDTO> testMeteringPointList = v.getTestMeteringPointList();
TestMeteringPointDTO last = CollUtil.getLast(testMeteringPointList);
if (StringUtils.equals(last.getResult(), "合格")) {
condition1 = true;
break;
}
}
List<ExperimentAnnealProcess> experimentAnnealProcessList = experimentAnnealProcessService.getByExperimentId(experiment.getId());
for (ExperimentAnnealProcess experimentAnnealProcess : experimentAnnealProcessList) {
if (experimentAnnealProcess.getAnnealTemperature().equals("25")) {
condition2 = true;
break;
}
}
if (condition1 && condition2) {
return ExperimentReviewResultEnum.LOW;
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -4,12 +4,15 @@
*/
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.entity.*;
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
*/
@@ -26,8 +29,44 @@ public class QJ100046Executor extends BaseExecutor implements IExperimentRevie
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;
}
}

View File

@@ -4,12 +4,15 @@
*/
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.entity.*;
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
*/
@@ -26,8 +29,41 @@ public class QJ100047Executor extends BaseExecutor implements IExperimentRevie
return 7;
}
/**
* 7
*
* 不需要进行加速退火但进行了加速退火的试验
*
* 可能低估器件的抗辐射性能
*
* 退火过程中的界面态增长将可能导致元器件的后损伤
*
* 不包含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(), "N")) {
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.LOW;
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -4,12 +4,15 @@
*/
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.entity.*;
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
*/
@@ -26,8 +29,41 @@ public class QJ100048Executor extends BaseExecutor implements IExperimentRevie
return 8;
}
/**
* 8
*
* 需要进行0.5倍过剂量辐照而未进行辐照
*
* 可能高估器件的抗辐射性能
*
* 辐射损伤冗余评估器件在50%过辐照持续退化
*
* 器件传输延迟、输出驱动和最小工作电压等参数向辐射前恢复的量值均不大于按4.12.3.2加速退火试验的恢复最值,并且辐射和加速退火试验所选择的偏置应使这些参数在加速退火过程中的响应达到最坏情况
*
* 辐照过程中备注栏没有“已过辐照”字段;同时在评定流程中询问用户是否需要进行过辐照,用户选是,启动这条评定建议
*
* @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;
List<ExperimentRadiationProcess> radiationProcessList = experimentRadiationProcessService.getByExperimentId(experiment.getId());
for (ExperimentRadiationProcess v : radiationProcessList) {
if (StringUtils.contains(v.getComment(), "已过辐照")) {
condition1 = true;
break;
}
}
if (StringUtils.equals(experimentReview.getNeedRadiation(), "Y")) {
condition2 = true;
}
if (!condition1 && condition2) {
return ExperimentReviewResultEnum.HIGH;
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}

View File

@@ -4,12 +4,15 @@
*/
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.entity.*;
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
*/
@@ -26,8 +29,42 @@ public class QJ100049Executor extends BaseExecutor implements IExperimentRevie
return 9;
}
/**
* 9
*
* 可以不进行0.5倍过剂量辐照,但进行了过辐照的试验
*
* 可能低估器件的抗辐射性能
*
* 增加了过辐照剂量的辐照损伤
*
* 可参考 QJ10004A-2018的相关规定分析其在QJ10004A-2018的适用性
*
* 辐照过程中备注栏有“已过辐照”字段;同时在评定流程中询问用户是否需要进行过辐照,用户选否,启动这条评定建议
*
* @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;
List<ExperimentRadiationProcess> radiationProcessList = experimentRadiationProcessService.getByExperimentId(experiment.getId());
for (ExperimentRadiationProcess v : radiationProcessList) {
if (StringUtils.contains(v.getComment(), "已过辐照")) {
condition1 = true;
break;
}
}
if (StringUtils.equals(experimentReview.getNeedRadiation(), "N")) {
condition2 = true;
}
if (condition1 && condition2) {
return ExperimentReviewResultEnum.LOW;
}
return ExperimentReviewResultEnum.ITEM_PASS;
}
}