ESCC22500

This commit is contained in:
ls
2025-06-23 15:58:41 +08:00
parent 3f23066efc
commit 391dc78839
5 changed files with 227 additions and 12 deletions

View File

@@ -4,18 +4,23 @@
*/ */
package org.jeecg.modules.database.service.executor; 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.constant.ExperimentReviewProcessType;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.constant.ExperimentReviewResultEnum; import org.jeecg.modules.database.constant.ExperimentReviewResultEnum;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor; import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
/** /**
* @author lise * @author lise
*/ */
@Component @Component
public class ESCC225001Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { public class ESCC225001Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override @Override
public String getProcessType() { public String getProcessType() {
return ExperimentReviewProcessType.ESCC22500; return ExperimentReviewProcessType.ESCC22500;
@@ -26,8 +31,50 @@ public class ESCC225001Executor extends BaseExecutor implements IExperimentRev
return 1; return 1;
} }
/**
* 质子退火过程中的偏置未采用无偏置条件
*
* 可能低估或高估器件的抗辐射性能
*
* 不同偏置下产生不同数量、类型的辐射损伤缺陷
*
* 测试计划中另有规定
*
* 在试验信息中辐射源选择质子加速器,试验数据中的偏置条件选择了静态偏置或动态偏置,启动这条评定建议
*
* @param experiment
* @param sampleInfo
* @param experimentReview
* @return
*/
@Override @Override
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) { public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {
return ExperimentReviewResultEnum.ITEM_PASS; experimentService.fetchExperimentDetail(experiment);
boolean condition1 = false, condition2 = false;
List<ExperimentRadiationProcess> radiationProcessList = experimentRadiationProcessService.getByExperimentId(experiment.getId());
for (ExperimentRadiationProcess experimentRadiationProcess : radiationProcessList) {
String radiationSource = experimentRadiationProcess.getRadiationSource();
if (StringUtils.contains(radiationSource, "质子加速器")) {
condition1 = true;
break;
}
}
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") || StringUtils.contains(offsetCondition, "jtpz")) {
condition2 = true;
break;
}
}
}
if (condition1 && condition2) {
return ExperimentReviewResultEnum.UNKNOWN;
}
return ExperimentReviewResultEnum.ITEM_PASS;
} }
} }

View File

@@ -4,18 +4,24 @@
*/ */
package org.jeecg.modules.database.service.executor; package org.jeecg.modules.database.service.executor;
import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.database.constant.ExperimentReviewProcessType; 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.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.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
/** /**
* @author lise * @author lise
*/ */
@Component @Component
public class ESCC225002Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { public class ESCC225002Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override @Override
public String getProcessType() { public String getProcessType() {
return ExperimentReviewProcessType.ESCC22500; return ExperimentReviewProcessType.ESCC22500;
@@ -26,8 +32,49 @@ public class ESCC225002Executor extends BaseExecutor implements IExperimentRev
return 2; return 2;
} }
/**
* 质子辐照过程中的通量过高
*
* 可能高估器件的抗辐射性能
*
* 通量过高可能导致器件温度上升,引起缺陷退火
*
* 考其他单位指定的质子测试指南
*
* 在试验信息中辐射源选择质子加速器辐照过程中的实际注量率高于10E9 p/cm²/s启动这条评定建议
*
* @param experiment
* @param sampleInfo
* @param experimentReview
* @return
*/
@Override @Override
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) { public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {
return ExperimentReviewResultEnum.ITEM_PASS; experimentService.fetchExperimentDetail(experiment);
boolean condition1 = false, condition2 = false;
List<ExperimentRadiationProcess> radiationProcessList = experimentRadiationProcessService.getByExperimentId(experiment.getId());
for (ExperimentRadiationProcess radiationProcess : radiationProcessList) {
String radiationSource = radiationProcess.getRadiationSource();
if (StringUtils.contains(radiationSource, "质子加速器")) {
condition1 = true;
}
String radiationDetail = radiationProcess.getRadiationDetail();
RadiationMapDTO radiationMap = JSON.parseObject(radiationDetail, RadiationMapDTO.class);
List<RadiationDetailDTO> list = radiationMap.getProton();
Double maxMeasurementPoint = list.stream().map(obj -> obj.getActualInjectionRate()) // 获取point字段
.filter(point -> StringUtils.isNotBlank(point)).filter(str -> str.matches("-?\\d+(\\.\\d+)?")) // 只保留数字格式的字符串
.mapToDouble(Double::parseDouble) // 转换为double
.max().getAsDouble();
if (maxMeasurementPoint > 10E9) {
condition2 = true;
}
}
if (condition1 && condition2) {
return ExperimentReviewResultEnum.HIGH;
}
return ExperimentReviewResultEnum.ITEM_PASS;
} }
} }

View File

@@ -5,17 +5,19 @@
package org.jeecg.modules.database.service.executor; package org.jeecg.modules.database.service.executor;
import org.jeecg.modules.database.constant.ExperimentReviewProcessType; 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.constant.ExperimentReviewResultEnum;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor; import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
/** /**
* @author lise * @author lise
*/ */
@Component @Component
public class ESCC225003Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { public class ESCC225003Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override @Override
public String getProcessType() { public String getProcessType() {
return ExperimentReviewProcessType.ESCC22500; return ExperimentReviewProcessType.ESCC22500;
@@ -26,8 +28,45 @@ public class ESCC225003Executor extends BaseExecutor implements IExperimentRev
return 3; return 3;
} }
/**
* 质子退火过程中的环境温度
*
* 可能低估或高估器件的抗辐射性能
*
* 退火温度偏高有利于器件的辐射感生缺陷退火,退火温度偏低不有利于器件的辐射感生缺陷退火
*
* 参考其他单位指定的质子测试指南
*
* 退火过程退火温度在10-30℃范围外启动这条评定建议
*
* @param experiment
* @param sampleInfo
* @param experimentReview
* @return
*/
@Override @Override
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) { public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {
return ExperimentReviewResultEnum.ITEM_PASS; experimentService.fetchExperimentDetail(experiment);
boolean condition1 = false, condition2 = false;
List<ExperimentAnnealProcess> experimentAnnealProcessList = experimentAnnealProcessService.getByExperimentId(experiment.getId());
for (ExperimentAnnealProcess experimentAnnealProcess : experimentAnnealProcessList) {
String annealTemperature = experimentAnnealProcess.getAnnealTemperature();
Integer temp = Integer.valueOf(annealTemperature);
if (temp < 10) {
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

@@ -5,17 +5,20 @@
package org.jeecg.modules.database.service.executor; package org.jeecg.modules.database.service.executor;
import org.jeecg.modules.database.constant.ExperimentReviewProcessType; 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.constant.ExperimentReviewResultEnum;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor; import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
/** /**
* @author lise * @author lise
*/ */
@Component @Component
public class ESCC225004Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { public class ESCC225004Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override @Override
public String getProcessType() { public String getProcessType() {
return ExperimentReviewProcessType.ESCC22500; return ExperimentReviewProcessType.ESCC22500;
@@ -26,8 +29,46 @@ public class ESCC225004Executor extends BaseExecutor implements IExperimentRev
return 4; return 4;
} }
/**
* 质子辐照过程中的退火时长
*
* 可能低估或高估器件的抗辐射性能
*
* 退火时长偏长有利于器件的辐射感生缺陷退火,退火时长偏短不有利于器件的辐射感生缺陷退火
*
* 参考其他单位指定的质子测试指南
*
* 退火过程中的退火时长在24小时至一个月的范围外启动这条评定建议
*
* @param experiment
* @param sampleInfo
* @param experimentReview
* @return
*/
@Override @Override
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) { public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {
return ExperimentReviewResultEnum.ITEM_PASS; experimentService.fetchExperimentDetail(experiment);
boolean condition1 = false, condition2 = false;
List<ExperimentAnnealProcess> experimentAnnealProcessList = experimentAnnealProcessService.getByExperimentId(experiment.getId());
for (ExperimentAnnealProcess experimentAnnealProcess : experimentAnnealProcessList) {
Date startTime = experimentAnnealProcess.getAnnealStartTime();
Date endTime = experimentAnnealProcess.getAnnealEndTime();
long diffInMillis = endTime.getTime() - startTime.getTime();
if (diffInMillis < 24 * 60 * 60 * 1000) {
condition1 = true;
break;
}
if (diffInMillis > 30 * 24 * 60 * 60 * 1000) {
condition2 = true;
break;
}
}
if (condition1) {
return ExperimentReviewResultEnum.LOW;
}
if (condition2) {
return ExperimentReviewResultEnum.HIGH;
}
return ExperimentReviewResultEnum.ITEM_PASS;
} }
} }

View File

@@ -0,0 +1,41 @@
/*
* 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.constant.ExperimentReviewResultEnum;
import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.service.IExperimentReviewRuleExecutor;
import org.springframework.stereotype.Component;
/**
* @author lise
*/
@Component
public class ESCC225005Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override
public String getProcessType() {
return ExperimentReviewProcessType.ESCC22500;
}
@Override
public int getPriority() {
return 5;
}
/**
* 评定通过
*
* @param experiment
* @param sampleInfo
* @param experimentReview
* @return
*/
@Override
public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) {
return ExperimentReviewResultEnum.FINAL_PASS;
}
}