diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290001Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290001Executor.java index e3cbdbe..4505b94 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290001Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290001Executor.java @@ -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 ESCC2290001Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class ESCC2290001Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { + @Override public String getProcessType() { return ExperimentReviewProcessType.ESCC229000; @@ -26,8 +34,46 @@ public class ESCC2290001Executor extends BaseExecutor implements IExperimentRe 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) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + List 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 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; } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290002Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290002Executor.java index e2aa36a..5ddfab8 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290002Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290002Executor.java @@ -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 ESCC2290002Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class ESCC2290002Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { + @Override public String getProcessType() { return ExperimentReviewProcessType.ESCC229000; @@ -26,8 +35,44 @@ public class ESCC2290002Executor extends BaseExecutor implements IExperimentRe 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) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + List 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 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; } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290003Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290003Executor.java index e10cdaa..d5fec2f 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290003Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290003Executor.java @@ -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 ESCC2290003Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class ESCC2290003Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { + @Override public String getProcessType() { return ExperimentReviewProcessType.ESCC229000; @@ -26,8 +35,46 @@ public class ESCC2290003Executor extends BaseExecutor implements IExperimentRe 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) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + List 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 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; } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290004Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290004Executor.java index 1e2eb86..1b42309 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290004Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290004Executor.java @@ -4,18 +4,21 @@ */ 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 */ @Component -public class ESCC2290004Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class ESCC2290004Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.ESCC229000; @@ -26,8 +29,44 @@ public class ESCC2290004Executor extends BaseExecutor implements IExperimentRe return 4; } + /** + * 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) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + boolean condition1 = false, condition2 = false; + if (StringUtils.equals(experimentReview.getNeedAnneal(), "Y")) { + condition1 = true; + } + List 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; } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290005Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290005Executor.java index f1ec6d6..a86ba18 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290005Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290005Executor.java @@ -4,18 +4,21 @@ */ 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 */ @Component -public class ESCC2290005Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class ESCC2290005Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.ESCC229000; @@ -26,8 +29,41 @@ public class ESCC2290005Executor extends BaseExecutor implements IExperimentRe return 5; } + /** + * 7 + * + * 不需要进行加速退火但进行了加速退火的试验 + * + * 可能低估器件的抗辐射性能 + * + * 退火过程中的界面态增长将可能导致元器件的后损伤 + * + * 不包含MOS单元器件 + * + * 退火过程中有高温退火(退火温度为100℃识别为室温退火)这个过程;同时在评定流程中询问用户是否需要加速退火,用户选否,启动这条评定建议 + * + * @param experiment + * @param sampleInfo + * @param experimentReview + * @return + */ @Override 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 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; } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290006Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290006Executor.java index 4fbf2b7..3ee8a5d 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290006Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290006Executor.java @@ -4,18 +4,23 @@ */ 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 */ @Component -public class ESCC2290006Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class ESCC2290006Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.ESCC229000; @@ -26,8 +31,44 @@ public class ESCC2290006Executor extends BaseExecutor implements IExperimentRe return 6; } + /** + * 10 + * + * 器件未使用最劣偏置 + * + * 可能高估器件的抗辐射性能 + * + * 参见附件二知识库中84条目《辐射试验》的解释 + * + * 采用应用偏置条件 + * + * 试验数据中偏置条件选择动态偏置,启动这条评定建议 + * + * @param experiment + * @param sampleInfo + * @param experimentReview + * @return + */ @Override public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + boolean condition1 = false, condition2 = false; + + List 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; } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290007Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290007Executor.java index 61551d9..bdb061d 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290007Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290007Executor.java @@ -5,17 +5,20 @@ 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.Date; +import java.util.List; + /** * @author lise */ @Component -public class ESCC2290007Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class ESCC2290007Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.ESCC229000; @@ -26,8 +29,43 @@ public class ESCC2290007Executor extends BaseExecutor implements IExperimentRe return 7; } + /** + * 电学测试通过后未进行24小时的室温退火 + * + * 可能高估器件的抗辐射性能 + * + * 退火过程中的界面态增长将可能导致元器件的后损伤 + * + * 可参考QJ10004A-2018 、GJB-548C,分析试验流程在两个标准的适用性 + * + * 退火过程中的没有25℃ 24小时退火的记录,启动这条评定建议 + * + * @param experiment + * @param sampleInfo + * @param experimentReview + * @return + */ @Override public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + boolean condition1 = false, condition2 = false; + + List 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; } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290008Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290008Executor.java index 2606f29..74d314f 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290008Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290008Executor.java @@ -4,18 +4,23 @@ */ 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 ESCC2290008Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class ESCC2290008Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.ESCC229000; @@ -26,8 +31,52 @@ public class ESCC2290008Executor extends BaseExecutor implements IExperimentRe return 8; } + /** + * 15 + * + * 试验过程未缺失,并且都符合试验标准的要求,参数测试结果未超差 + * + * 评定结果通过 + * + * 辐照过程中备注栏有“已过辐照”字段;有100℃高温退火过程;最后一次测试通过,启动这条评定建议 + * + * @param experiment + * @param sampleInfo + * @param experimentReview + * @return + */ @Override public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + boolean condition1 = false, condition2 = false, condition3 = false; + + List experimentRadiationProcessList = experimentRadiationProcessService.getByExperimentId( + experiment.getId()); + for (ExperimentRadiationProcess v : experimentRadiationProcessList) { + if (StringUtils.contains(v.getComment(), "已过辐照")) { + condition1 = true; + break; + } + } + List experimentAnnealProcessList = experimentAnnealProcessService.getByExperimentId(experiment.getId()); + for (ExperimentAnnealProcess experimentAnnealProcess : experimentAnnealProcessList) { + if (StringUtils.contains(experimentAnnealProcess.getAnnealTemperature(), "100")) { + condition2 = true; + } + } + List experimentTestProcessList = experimentTestProcessService.getByExperimentId(experiment.getId()); + + for (ExperimentTestProcess v : experimentTestProcessList) { + List 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; } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290009Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290009Executor.java index 47a28e6..1985a91 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290009Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ESCC2290009Executor.java @@ -4,18 +4,23 @@ */ 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 ESCC2290009Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class ESCC2290009Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.ESCC229000; @@ -28,6 +33,21 @@ public class ESCC2290009Executor extends BaseExecutor implements IExperimentRe @Override public String execute(Experiment experiment, ExperimentSampleInfo sampleInfo, ExperimentReview experimentReview) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + boolean condition1 = false, condition2 = false, condition3 = false; + List experimentTestProcessList = experimentTestProcessService.getByExperimentId(experiment.getId()); + + for (ExperimentTestProcess v : experimentTestProcessList) { + List 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; } } \ No newline at end of file