ESCC229000

This commit is contained in:
ls
2025-06-23 15:30:37 +08:00
parent 61a1b7d089
commit 3f23066efc
9 changed files with 389 additions and 28 deletions

View File

@@ -4,18 +4,26 @@
*/ */
package org.jeecg.modules.database.service.executor; 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.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
* @version GJB548C1Executor.java, v 0.1 2025年06月16日 20:57 lise
*/ */
@Component @Component
public class ESCC2290001Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { public class ESCC2290001Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override @Override
public String getProcessType() { public String getProcessType() {
return ExperimentReviewProcessType.ESCC229000; return ExperimentReviewProcessType.ESCC229000;
@@ -26,8 +34,46 @@ public class ESCC2290001Executor extends BaseExecutor implements IExperimentRe
return 1; return 1;
} }
/**
* 1
*
* 模拟器件未进行ELDRS试验
*
* 可能高估器件的抗辐射性能
*
* 参见附件二知识库中68条目《双极器件的低剂量率效应》的解释。
*
* a)已知器件设计不包含双极晶体管; b)已知器件设计不包含任何线性电路功能; c)业已证明该器件类型或IC工艺并未表现出器件参数ELDRS,而且也已证明影呴ELDRS 响应的变量对于特定的生产方工艺过程已处于受控状态
*
* 样片类型为模拟集成电路样片名称中含有双极的字段。但是实际剂量率大于0.01 rad (Si) /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);
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; 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.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
* @version GJB548C1Executor.java, v 0.1 2025年06月16日 20:57 lise
*/ */
@Component @Component
public class ESCC2290002Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { public class ESCC2290002Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override @Override
public String getProcessType() { public String getProcessType() {
return ExperimentReviewProcessType.ESCC229000; return ExperimentReviewProcessType.ESCC229000;
@@ -26,8 +35,44 @@ public class ESCC2290002Executor extends BaseExecutor implements IExperimentRe
return 2; return 2;
} }
/**
* 2
*
* 选择剂量率低于规定剂量率进行辐照试验
*
* 可能低估器件的抗辐射性能
*
* 参见附件二知识库中83条目《双极器件的辐射试验-辐照剂量率》的解释
*
* 可参考 QJ10004A-2018的相关规定分析剂量率选择在QJ10004A-2018的适用性
*
* 样片类型非模拟集成电路样片名称中不含有双极的字段。但是实际剂量率小于50 rad (Si) /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);
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; 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.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
* @version GJB548C1Executor.java, v 0.1 2025年06月16日 20:57 lise
*/ */
@Component @Component
public class ESCC2290003Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { public class ESCC2290003Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override @Override
public String getProcessType() { public String getProcessType() {
return ExperimentReviewProcessType.ESCC229000; return ExperimentReviewProcessType.ESCC229000;
@@ -26,8 +35,46 @@ public class ESCC2290003Executor extends BaseExecutor implements IExperimentRe
return 3; return 3;
} }
/**
* 3
*
* 选择剂量率高于规定剂量率进行辐照试验
*
* 可能高估器件的抗辐射性能
*
* 参见附件二知识库中83条目《双极器件的辐射试验-辐照剂量率》的解释
*
* 可参考 QJ10004A-2018的相关规定分析剂量率选择在QJ10004A-2018的适用性
*
* 样片类型非模拟集成电路样片名称中不含有双极的字段。但是实际剂量率大于300 rad (Si) /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);
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,21 @@
*/ */
package org.jeecg.modules.database.service.executor; 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.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 ESCC2290004Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { public class ESCC2290004Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override @Override
public String getProcessType() { public String getProcessType() {
return ExperimentReviewProcessType.ESCC229000; return ExperimentReviewProcessType.ESCC229000;
@@ -26,8 +29,44 @@ public class ESCC2290004Executor extends BaseExecutor implements IExperimentRe
return 4; return 4;
} }
/**
* 6
*
* 需要进行加速退火而未进行加速退火的试验
*
* 可能高估器件的抗辐射性能
*
* 界面态在退火过程中的后增长和氧化物陷阱电荷的退火
*
* 已知器件的电路设计中不包含MOS单元已知应用环境的总剂量不超过50Gy(Si已知器件在辐射环境服役的总寿命小于TDE时间按预定应用环境的剂量率进行辐射试验
*
* 通过表征试验业已证明该器件类型或IC工艺并未表现出器件参数TDE变化大于试验误差或大于规定的上限而且也已证明影响TDE响应的变量对于特定的生产方工艺过程已处于受控状态。作为起码要求上述表征试验应包括评价TDE
* 对传输延迟、输出驱动、最小工作电压参数的影响、对影响TDE变量的连续工艺控制状态可通过MOS测试结构的辐射加固批取样试验得到证明
*
* 退火过程中没有高温退火退火温度为100℃识别为高温退火这个过程同时在评定流程中询问用户是否需要加速退火用户选是启动这条评定建议
*
* @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;
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,18 +4,21 @@
*/ */
package org.jeecg.modules.database.service.executor; 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.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 ESCC2290005Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { public class ESCC2290005Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override @Override
public String getProcessType() { public String getProcessType() {
return ExperimentReviewProcessType.ESCC229000; return ExperimentReviewProcessType.ESCC229000;
@@ -26,8 +29,41 @@ public class ESCC2290005Executor extends BaseExecutor implements IExperimentRe
return 5; return 5;
} }
/**
* 7
*
* 不需要进行加速退火但进行了加速退火的试验
*
* 可能低估器件的抗辐射性能
*
* 退火过程中的界面态增长将可能导致元器件的后损伤
*
* 不包含MOS单元器件
*
* 退火过程中有高温退火退火温度为100℃识别为室温退火这个过程同时在评定流程中询问用户是否需要加速退火用户选否启动这条评定建议
*
* @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;
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,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 ESCC2290006Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { public class ESCC2290006Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override @Override
public String getProcessType() { public String getProcessType() {
return ExperimentReviewProcessType.ESCC229000; return ExperimentReviewProcessType.ESCC229000;
@@ -26,8 +31,44 @@ public class ESCC2290006Executor extends BaseExecutor implements IExperimentRe
return 6; return 6;
} }
/**
* 10
*
* 器件未使用最劣偏置
*
* 可能高估器件的抗辐射性能
*
* 参见附件二知识库中84条目《辐射试验》的解释
*
* 采用应用偏置条件
*
* 试验数据中偏置条件选择动态偏置,启动这条评定建议
*
* @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 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

@@ -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 ESCC2290007Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { public class ESCC2290007Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override @Override
public String getProcessType() { public String getProcessType() {
return ExperimentReviewProcessType.ESCC229000; return ExperimentReviewProcessType.ESCC229000;
@@ -26,8 +29,43 @@ public class ESCC2290007Executor extends BaseExecutor implements IExperimentRe
return 7; return 7;
} }
/**
* 电学测试通过后未进行24小时的室温退火
*
* 可能高估器件的抗辐射性能
*
* 退火过程中的界面态增长将可能导致元器件的后损伤
*
* 可参考QJ10004A-2018 、GJB-548C分析试验流程在两个标准的适用性
*
* 退火过程中的没有25℃ 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) {
if (experimentAnnealProcess.getAnnealTemperature().equals("25")) {
condition1 = true;
continue;
}
Date annealStartTime = experimentAnnealProcess.getAnnealStartTime();
Date annealEndTime = experimentAnnealProcess.getAnnealEndTime();
long diffInMillis = annealEndTime.getTime() - annealStartTime.getTime();
if (diffInMillis > 24 * 60 * 60 * 1000) {
condition2 = true;
}
}
if (!condition1 && condition2) {
return ExperimentReviewResultEnum.HIGH;
}
return ExperimentReviewResultEnum.ITEM_PASS;
} }
} }

View File

@@ -4,18 +4,23 @@
*/ */
package org.jeecg.modules.database.service.executor; 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.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.TestMeteringPointDTO;
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 ESCC2290008Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { public class ESCC2290008Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override @Override
public String getProcessType() { public String getProcessType() {
return ExperimentReviewProcessType.ESCC229000; return ExperimentReviewProcessType.ESCC229000;
@@ -26,8 +31,52 @@ public class ESCC2290008Executor extends BaseExecutor implements IExperimentRe
return 8; return 8;
} }
/**
* 15
*
* 试验过程未缺失,并且都符合试验标准的要求,参数测试结果未超差
*
* 评定结果通过
*
* 辐照过程中备注栏有“已过辐照”字段有100℃高温退火过程最后一次测试通过启动这条评定建议
*
* @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, 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,18 +4,23 @@
*/ */
package org.jeecg.modules.database.service.executor; 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.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.TestMeteringPointDTO;
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 ESCC2290009Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { public class ESCC2290009Executor extends BaseExecutor implements IExperimentReviewRuleExecutor {
@Override @Override
public String getProcessType() { public String getProcessType() {
return ExperimentReviewProcessType.ESCC229000; return ExperimentReviewProcessType.ESCC229000;
@@ -28,6 +33,21 @@ public class ESCC2290009Executor extends BaseExecutor implements IExperimentRe
@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, 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;
} }
} }