From 61a1b7d0892343527bd33a3a28ddfe9bb8dc1d2b Mon Sep 17 00:00:00 2001 From: ls Date: Mon, 23 Jun 2025 15:15:43 +0800 Subject: [PATCH] QJ10004 --- .../service/executor/ExecutorHolder.java | 8 ++- .../service/executor/QJ1000410Executor.java | 47 ++++++++++++++- .../service/executor/QJ1000411Executor.java | 28 ++++++++- .../service/executor/QJ1000412Executor.java | 48 +++++++++++++++- .../service/executor/QJ1000413Executor.java | 42 +++++++++++++- .../service/executor/QJ1000414Executor.java | 46 ++++++++++++++- .../service/executor/QJ1000415Executor.java | 55 +++++++++++++++++- .../service/executor/QJ1000416Executor.java | 26 ++++++++- .../service/executor/QJ1000417Executor.java | 33 ----------- .../service/executor/QJ100041Executor.java | 54 ++++++++++++++++-- .../service/executor/QJ100042Executor.java | 51 ++++++++++++++++- .../service/executor/QJ100043Executor.java | 53 ++++++++++++++++- .../service/executor/QJ100044Executor.java | 57 ++++++++++++++++++- .../service/executor/QJ100045Executor.java | 53 +++++++++++++++-- .../service/executor/QJ100046Executor.java | 45 ++++++++++++++- .../service/executor/QJ100047Executor.java | 42 +++++++++++++- .../service/executor/QJ100048Executor.java | 42 +++++++++++++- .../service/executor/QJ100049Executor.java | 43 +++++++++++++- 18 files changed, 688 insertions(+), 85 deletions(-) delete mode 100644 physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000417Executor.java diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ExecutorHolder.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ExecutorHolder.java index 45d8b31..913a10e 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ExecutorHolder.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/ExecutorHolder.java @@ -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) { @@ -26,7 +30,7 @@ public class ExecutorHolder { return null; } try { - return executor.execute(experiment, sampleInfo,experimentReview); + return executor.execute(experiment, sampleInfo, experimentReview); } catch (Exception e) { return ExperimentReviewResultEnum.UNKNOWN; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000410Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000410Executor.java index 318d7d5..6e89a12 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000410Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000410Executor.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 QJ1000410Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class QJ1000410Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.QJ10004; @@ -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) { - 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/QJ1000411Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000411Executor.java index 01befad..1973f64 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000411Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000411Executor.java @@ -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; @@ -15,7 +16,7 @@ import org.springframework.stereotype.Component; */ @Component -public class QJ1000411Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class QJ1000411Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.QJ10004; @@ -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) { - return ExperimentReviewResultEnum.ITEM_PASS; + if (StringUtils.equals(experimentReview.getNeedBurnin(), "N")) { + 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/QJ1000412Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000412Executor.java index 9599942..9825ee1 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000412Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000412Executor.java @@ -5,17 +5,19 @@ 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 */ @Component -public class QJ1000412Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class QJ1000412Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.QJ10004; @@ -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) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + boolean condition1 = false, condition2 = false; + + List 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; } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000413Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000413Executor.java index 1c7e006..fc94d29 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000413Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000413Executor.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 QJ1000413Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class QJ1000413Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.QJ10004; @@ -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) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + boolean condition1 = false, condition2 = false; + + List 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; } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000414Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000414Executor.java index ba6b67f..49682e5 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000414Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000414Executor.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 QJ1000414Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class QJ1000414Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.QJ10004; @@ -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) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + boolean condition1 = false, condition2 = false; + + List 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; } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000415Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000415Executor.java index 89d973a..f70ce96 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000415Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000415Executor.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 QJ1000415Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class QJ1000415Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.QJ10004; @@ -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) { - 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/QJ1000416Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000416Executor.java index 103ddc8..e8a268d 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000416Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000416Executor.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 QJ1000416Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class QJ1000416Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.QJ10004; @@ -28,6 +33,21 @@ public class QJ1000416Executor extends BaseExecutor implements IExperimentRevi @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 diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000417Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000417Executor.java deleted file mode 100644 index a557fae..0000000 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ1000417Executor.java +++ /dev/null @@ -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; - } -} \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100041Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100041Executor.java index 149ddbc..33fff71 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100041Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100041Executor.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 QJ100041Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +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) { - 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/QJ100042Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100042Executor.java index ba3fe72..2b573c0 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100042Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100042Executor.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 QJ100042Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +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) { - 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/QJ100043Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100043Executor.java index 88c4644..45ff9a8 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100043Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100043Executor.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 QJ100043Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +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) { - 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/QJ100044Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100044Executor.java index dc4c1cc..6096c6b 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100044Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100044Executor.java @@ -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 { +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) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + List experimentTestProcesses = experimentTestProcessService.getByExperimentId(experiment.getId()); + boolean condition1 = false, condition2 = false; + for (ExperimentTestProcess v : experimentTestProcesses) { + List testMeteringPointList = v.getTestMeteringPointList(); + TestMeteringPointDTO last = CollUtil.getLast(testMeteringPointList); + if (!StringUtils.equals(last.getResult(), "合格")) { + condition1 = true; + break; + } + } + List 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; + } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100045Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100045Executor.java index c6a596b..a3ac6f6 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100045Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100045Executor.java @@ -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 { +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) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + List experimentTestProcesses = experimentTestProcessService.getByExperimentId(experiment.getId()); + boolean condition1 = false, condition2 = false; + for (ExperimentTestProcess v : experimentTestProcesses) { + List testMeteringPointList = v.getTestMeteringPointList(); + TestMeteringPointDTO last = CollUtil.getLast(testMeteringPointList); + if (StringUtils.equals(last.getResult(), "合格")) { + condition1 = true; + break; + } + } + List 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; } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100046Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100046Executor.java index 57bcfe1..0e97679 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100046Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100046Executor.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 QJ100046Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class QJ100046Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.QJ10004; @@ -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) { - 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/QJ100047Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100047Executor.java index 9940c5f..c1e471a 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100047Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100047Executor.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 QJ100047Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class QJ100047Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.QJ10004; @@ -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) { - 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/QJ100048Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100048Executor.java index f82e128..ac192b5 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100048Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100048Executor.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 QJ100048Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class QJ100048Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.QJ10004; @@ -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) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + boolean condition1 = false, condition2 = false; + List 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; } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100049Executor.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100049Executor.java index 83cbd86..a25d5fd 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100049Executor.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/executor/QJ100049Executor.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 QJ100049Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { +public class QJ100049Executor extends BaseExecutor implements IExperimentReviewRuleExecutor { @Override public String getProcessType() { return ExperimentReviewProcessType.QJ10004; @@ -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) { - return ExperimentReviewResultEnum.ITEM_PASS; + experimentService.fetchExperimentDetail(experiment); + boolean condition1 = false, condition2 = false; + List 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; } } \ No newline at end of file