review
This commit is contained in:
@@ -6,10 +6,6 @@ package org.jeecg.modules.database.service;
|
||||
|
||||
import org.jeecg.modules.database.entity.Experiment;
|
||||
import org.jeecg.modules.database.entity.ExperimentSampleInfo;
|
||||
import org.jeecg.modules.system.cache.AuthStateRedisCache;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author lise
|
||||
@@ -18,6 +14,8 @@ import java.util.Map;
|
||||
public interface IExperimentReviewRuleExecutor {
|
||||
|
||||
String getProcessType();
|
||||
int getPriority();
|
||||
|
||||
int getPriority();
|
||||
|
||||
String execute(Experiment experiment, ExperimentSampleInfo sampleInfo);
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.jeecg.modules.database.service.executor;
|
||||
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import org.jeecg.modules.database.constant.ExperimentReviewResultEnum;
|
||||
import org.jeecg.modules.database.entity.Experiment;
|
||||
import org.jeecg.modules.database.entity.ExperimentSampleInfo;
|
||||
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
|
||||
@@ -25,6 +26,10 @@ public class ExecutorHolder {
|
||||
if (executor == null) {
|
||||
return null;
|
||||
}
|
||||
return executor.execute(experiment, sampleInfo);
|
||||
try {
|
||||
return executor.execute(experiment, sampleInfo);
|
||||
} catch (Exception e) {
|
||||
return ExperimentReviewResultEnum.UNKNOWN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,19 +4,31 @@
|
||||
*/
|
||||
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.constant.ExperimentReviewResultEnum;
|
||||
import org.jeecg.modules.database.entity.Experiment;
|
||||
import org.jeecg.modules.database.entity.ExperimentSampleInfo;
|
||||
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
|
||||
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.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
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 GJB548C1Executor implements IExperimentReviewRuleExecutor {
|
||||
@Autowired
|
||||
private IExperimentService experimentService;
|
||||
@Autowired
|
||||
private IExperimentRadiationProcessService experimentRadiationProcessService;
|
||||
|
||||
@Override
|
||||
public String getProcessType() {
|
||||
return ExperimentReviewProcessType.GJB548C;
|
||||
@@ -27,8 +39,45 @@ public class GJB548C1Executor implements IExperimentReviewRuleExecutor {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1
|
||||
*
|
||||
* 模拟器件未进行ELDRS试验
|
||||
*
|
||||
* 可能高估器件的抗辐射性能
|
||||
*
|
||||
* 参见附件二知识库中68条目《双极器件的低剂量率效应》的解释。
|
||||
*
|
||||
* a)已知器件设计不包含双极晶体管; b)已知器件设计不包含任何线性电路功能; c)业已证明,该器件类型或IC工艺,并未表现出器件参数ELDRS,而且也已证明影呴ELDRS 响应的变量对于特定的生产方工艺过程已处于受控状态
|
||||
*
|
||||
* 样片类型为模拟集成电路,样片名称中含有双极的字段。但是实际剂量率大于0.01 rad (Si) /s,并且备注中没有加速试验的备注情况下,启动这条评定建议
|
||||
*
|
||||
* @param experiment
|
||||
* @param sampleInfo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo) {
|
||||
return ExperimentReviewResultEnum.HIGH;
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -4,13 +4,20 @@
|
||||
*/
|
||||
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.constant.ExperimentReviewResultEnum;
|
||||
import org.jeecg.modules.database.entity.Experiment;
|
||||
import org.jeecg.modules.database.entity.ExperimentSampleInfo;
|
||||
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
|
||||
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.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author lise
|
||||
* @version GJB548C1Executor.java, v 0.1 2025年06月16日 20:57 lise
|
||||
@@ -18,6 +25,11 @@ import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class GJB548C2Executor implements IExperimentReviewRuleExecutor {
|
||||
@Autowired
|
||||
private IExperimentService experimentService;
|
||||
@Autowired
|
||||
private IExperimentRadiationProcessService experimentRadiationProcessService;
|
||||
|
||||
@Override
|
||||
public String getProcessType() {
|
||||
return ExperimentReviewProcessType.GJB548C;
|
||||
@@ -28,8 +40,43 @@ public class GJB548C2Executor implements IExperimentReviewRuleExecutor {
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* 2
|
||||
*
|
||||
* 选择剂量率低于规定剂量率进行辐照试验
|
||||
*
|
||||
* 可能低估器件的抗辐射性能
|
||||
*
|
||||
* 参见附件二知识库中83条目《双极器件的辐射试验-辐照剂量率》的解释
|
||||
*
|
||||
* 可参考 QJ10004A-2018的相关规定,分析剂量率选择在QJ10004A-2018的适用性
|
||||
*
|
||||
* 样片类型非模拟集成电路,样片名称中不含有双极的字段。但是实际剂量率小于50 rad (Si) /s,启动这条评定建议
|
||||
*
|
||||
* @param experiment
|
||||
* @param sampleInfo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -4,13 +4,20 @@
|
||||
*/
|
||||
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.constant.ExperimentReviewResultEnum;
|
||||
import org.jeecg.modules.database.entity.Experiment;
|
||||
import org.jeecg.modules.database.entity.ExperimentSampleInfo;
|
||||
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
|
||||
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.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author lise
|
||||
* @version GJB548C1Executor.java, v 0.1 2025年06月16日 20:57 lise
|
||||
@@ -18,6 +25,11 @@ import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class GJB548C3Executor implements IExperimentReviewRuleExecutor {
|
||||
@Autowired
|
||||
private IExperimentService experimentService;
|
||||
@Autowired
|
||||
private IExperimentRadiationProcessService experimentRadiationProcessService;
|
||||
|
||||
@Override
|
||||
public String getProcessType() {
|
||||
return ExperimentReviewProcessType.GJB548C;
|
||||
@@ -28,8 +40,45 @@ public class GJB548C3Executor implements IExperimentReviewRuleExecutor {
|
||||
return 3;
|
||||
}
|
||||
|
||||
/**
|
||||
* 3
|
||||
*
|
||||
* 选择剂量率高于规定剂量率进行辐照试验
|
||||
*
|
||||
* 可能高估器件的抗辐射性能
|
||||
*
|
||||
* 参见附件二知识库中83条目《双极器件的辐射试验-辐照剂量率》的解释
|
||||
*
|
||||
* 可参考 QJ10004A-2018的相关规定,分析剂量率选择在QJ10004A-2018的适用性
|
||||
*
|
||||
* 样片类型非模拟集成电路,样片名称中不含有双极的字段。但是实际剂量率大于300 rad (Si) /s,启动这条评定建议
|
||||
*
|
||||
* @param experiment
|
||||
* @param sampleInfo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo) {
|
||||
return ExperimentReviewResultEnum.HIGH;
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -4,12 +4,20 @@
|
||||
*/
|
||||
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.Experiment;
|
||||
import org.jeecg.modules.database.entity.ExperimentSampleInfo;
|
||||
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
|
||||
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.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author lise
|
||||
* @version GJB548C1Executor.java, v 0.1 2025年06月16日 20:57 lise
|
||||
@@ -17,6 +25,11 @@ import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class GJB548C4Executor implements IExperimentReviewRuleExecutor {
|
||||
@Autowired
|
||||
private IExperimentService experimentService;
|
||||
@Autowired
|
||||
private IExperimentRadiationProcessService experimentRadiationProcessService;
|
||||
|
||||
@Override
|
||||
public String getProcessType() {
|
||||
return ExperimentReviewProcessType.GJB548C;
|
||||
@@ -27,8 +40,47 @@ public class GJB548C4Executor implements IExperimentReviewRuleExecutor {
|
||||
return 4;
|
||||
}
|
||||
|
||||
/**
|
||||
* 4
|
||||
*
|
||||
* 器件没有通过电测试,未进行室温退火
|
||||
*
|
||||
* 可能低估器件的抗辐射性能
|
||||
*
|
||||
* 室温退火过程中的氧化物陷阱电荷的退火,器件的电参数有可能恢复
|
||||
*
|
||||
* 器件功能失效;当预定应用环境辐射剂量率比试验剂量率高,且高于0.001Gy(Si)/
|
||||
* 剂量率高,且高于0.001Gy(Si)/
|
||||
*
|
||||
* 样片类型非模拟集成电路,样片名称中不含有双极的字段。但是实际剂量率大于300 rad (Si) /s,启动这条评定建议
|
||||
*
|
||||
* @param experiment
|
||||
* @param sampleInfo
|
||||
* @return
|
||||
*/
|
||||
|
||||
@Override
|
||||
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo) {
|
||||
return "";
|
||||
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.LOW;
|
||||
}
|
||||
}
|
||||
return ExperimentReviewResultEnum.ITEM_PASS;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -4,18 +4,33 @@
|
||||
*/
|
||||
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.Experiment;
|
||||
import org.jeecg.modules.database.entity.ExperimentSampleInfo;
|
||||
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
|
||||
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.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author lise
|
||||
*/
|
||||
|
||||
@Component
|
||||
public class GJB548C5Executor implements IExperimentReviewRuleExecutor {
|
||||
@Autowired
|
||||
private IExperimentService experimentService;
|
||||
@Autowired
|
||||
private IExperimentRadiationProcessService experimentRadiationProcessService;
|
||||
@Autowired
|
||||
private IExperimentAnnealProcessService experimentAnnealProcessService;
|
||||
@Autowired
|
||||
private IExperimentTestProcessService experimentTestProcessService;
|
||||
|
||||
@Override
|
||||
public String getProcessType() {
|
||||
return ExperimentReviewProcessType.GJB548C;
|
||||
@@ -26,8 +41,46 @@ public class GJB548C5Executor implements IExperimentReviewRuleExecutor {
|
||||
return 4;
|
||||
}
|
||||
|
||||
/**
|
||||
* 5
|
||||
*
|
||||
* 不需要进行室温退火试验,但进行了室温退火
|
||||
*
|
||||
* 可能低估器件的抗辐射性能
|
||||
*
|
||||
* 退火过程中的界面态增长将可能导致元器件的后损伤
|
||||
*
|
||||
* 可参考 ESCC229000的相关规定,分析退火时长在ESCC229000的适用性
|
||||
*
|
||||
* 最后一个剂量点测试通过,但是退火过程中有室温退火(退火温度为25℃识别为室温退火),启动这条评定建议
|
||||
*
|
||||
* @param experiment
|
||||
* @param sampleInfo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo) {
|
||||
return "";
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user