parent
795ff83e1e
commit
3242d66835
@ -0,0 +1,69 @@ |
|||||||
|
package digital.laboratory.platform.inspection.service; |
||||||
|
|
||||||
|
import digital.laboratory.platform.inspection.dto.HairSewageDataDto; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author ChenJiangBao |
||||||
|
* @version 1.0 |
||||||
|
* @description: 处理检验数据接口 |
||||||
|
* @date 2025/3/24 9:56 |
||||||
|
*/ |
||||||
|
public interface ProcessInspectDataService { |
||||||
|
|
||||||
|
//设置是否在误差范围内
|
||||||
|
String getWithinErrorText(BigDecimal actualValue, BigDecimal expectedValue); |
||||||
|
|
||||||
|
//判断保留时间范围是否符合
|
||||||
|
String getRtWithinErrorText(double targetRtErr, double errorRange); |
||||||
|
|
||||||
|
/** |
||||||
|
* 计算离子丰度比 相对偏差 (目标物离子丰度比 - 标准物离子丰度比) / 标准物质离子丰度比 * 100 |
||||||
|
* |
||||||
|
* @param ionAbundanceRatioWithinError 检测样本的丰度比偏差 |
||||||
|
* @param stdIonAbundanceRatio 标准物质的离子丰度比 |
||||||
|
*/ |
||||||
|
String calculateHairCaseIonAbundanceRatioWithinError(double ionAbundanceRatioWithinError, double stdIonAbundanceRatio); |
||||||
|
|
||||||
|
/** |
||||||
|
* 计算离子丰度比偏差 |
||||||
|
* |
||||||
|
* @param sampleIonAbundanceRatio 目标物的离子丰度比 |
||||||
|
* @param stdIonAbundanceRatio 标准物质的离子丰度比 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
double getAbundanceRatioErrorValue(double sampleIonAbundanceRatio, double stdIonAbundanceRatio); |
||||||
|
|
||||||
|
/** |
||||||
|
* 计算相对误差 (目标物保留时间 - 标准物保留时间) / 标准物质保留时间 * 100 |
||||||
|
* |
||||||
|
* @param hairSewageDataDto |
||||||
|
* @param hairSewageDataDtoStd |
||||||
|
*/ |
||||||
|
void calculateHairCaseRtTimeError(HairSewageDataDto hairSewageDataDto, HairSewageDataDto hairSewageDataDtoStd); |
||||||
|
|
||||||
|
/** |
||||||
|
* 计算保留时间的相对误差 |
||||||
|
* |
||||||
|
* @param targetRtTime 目标物保留时间信息 |
||||||
|
* @param stdRtTime 标准物保留时间信息 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
double getHairCaseRtTimeError(double targetRtTime, double stdRtTime); |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断保留时间相对误差是否符合误差范围 |
||||||
|
* |
||||||
|
* @param rtTimeError |
||||||
|
*/ |
||||||
|
String setHairCaseRtTimeWithinError(double rtTimeError); |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取碎片的丰度比偏差范围 |
||||||
|
* |
||||||
|
* @param abundanceRatio |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
BigDecimal getErrorRange(BigDecimal abundanceRatio); |
||||||
|
} |
@ -0,0 +1,180 @@ |
|||||||
|
package digital.laboratory.platform.inspection.service.impl; |
||||||
|
|
||||||
|
import digital.laboratory.platform.inspection.constant.TestRecordSampleDataConstant; |
||||||
|
import digital.laboratory.platform.inspection.dto.HairSewageDataDto; |
||||||
|
import digital.laboratory.platform.inspection.service.ProcessInspectDataService; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author ChenJiangBao |
||||||
|
* @version 1.0 |
||||||
|
* @description: 处理检验数据接口 实现类 |
||||||
|
* @date 2025/3/24 9:57 |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class ProcessInspectDataServiceImpl implements ProcessInspectDataService { |
||||||
|
|
||||||
|
//设置是否在误差范围内
|
||||||
|
@Override |
||||||
|
public String getWithinErrorText(BigDecimal actualValue, BigDecimal expectedValue) { |
||||||
|
if (actualValue.compareTo(expectedValue) < 0) { // actualValue < expectedValue
|
||||||
|
return TestRecordSampleDataConstant.IS; |
||||||
|
} else { |
||||||
|
return TestRecordSampleDataConstant.NO; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//判断保留时间范围是否符合
|
||||||
|
@Override |
||||||
|
public String getRtWithinErrorText(double targetRtErr, double errorRange) { |
||||||
|
if (targetRtErr < errorRange) { |
||||||
|
return TestRecordSampleDataConstant.IS; |
||||||
|
} else { |
||||||
|
return TestRecordSampleDataConstant.NO; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 计算离子丰度比 相对偏差 (目标物离子丰度比 - 标准物离子丰度比) / 标准物质离子丰度比 * 100 |
||||||
|
* |
||||||
|
* @param ionAbundanceRatioWithinError 检测样本的丰度比偏差 |
||||||
|
* @param stdIonAbundanceRatio 标准物质的离子丰度比 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public String calculateHairCaseIonAbundanceRatioWithinError(double ionAbundanceRatioWithinError, double stdIonAbundanceRatio) { |
||||||
|
|
||||||
|
// 判断是否在离子丰度比允许的最大偏差范围
|
||||||
|
if (stdIonAbundanceRatio > TestRecordSampleDataConstant.HAIR_CASE_ION_ABUNDANCE_RATIO_1) { |
||||||
|
|
||||||
|
return setHairCaseWhetherCheckOut( |
||||||
|
ionAbundanceRatioWithinError, |
||||||
|
TestRecordSampleDataConstant.HAIR_CASE_POSITIVE_MAX_ALLOW_ERROR_1, |
||||||
|
TestRecordSampleDataConstant.HAIR_CASE_NEGATIVE_MAX_ALLOW_ERROR_1); |
||||||
|
|
||||||
|
} else if (stdIonAbundanceRatio > TestRecordSampleDataConstant.HAIR_CASE_ION_ABUNDANCE_RATIO_2 |
||||||
|
&& stdIonAbundanceRatio <= TestRecordSampleDataConstant.HAIR_CASE_ION_ABUNDANCE_RATIO_1) { |
||||||
|
|
||||||
|
return setHairCaseWhetherCheckOut( |
||||||
|
ionAbundanceRatioWithinError, |
||||||
|
TestRecordSampleDataConstant.HAIR_CASE_POSITIVE_MAX_ALLOW_ERROR_2, |
||||||
|
TestRecordSampleDataConstant.HAIR_CASE_NEGATIVE_MAX_ALLOW_ERROR_2); |
||||||
|
|
||||||
|
} else if (stdIonAbundanceRatio > TestRecordSampleDataConstant.HAIR_CASE_ION_ABUNDANCE_RATIO_3 |
||||||
|
&& stdIonAbundanceRatio <= TestRecordSampleDataConstant.HAIR_CASE_ION_ABUNDANCE_RATIO_2) { |
||||||
|
|
||||||
|
return setHairCaseWhetherCheckOut( |
||||||
|
ionAbundanceRatioWithinError, |
||||||
|
TestRecordSampleDataConstant.HAIR_CASE_POSITIVE_MAX_ALLOW_ERROR_3, |
||||||
|
TestRecordSampleDataConstant.HAIR_CASE_NEGATIVE_MAX_ALLOW_ERROR_3); |
||||||
|
} else { |
||||||
|
return setHairCaseWhetherCheckOut( |
||||||
|
ionAbundanceRatioWithinError, |
||||||
|
TestRecordSampleDataConstant.HAIR_CASE_POSITIVE_MAX_ALLOW_ERROR_4, |
||||||
|
TestRecordSampleDataConstant.HAIR_CASE_NEGATIVE_MAX_ALLOW_ERROR_4); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 计算离子丰度比偏差 |
||||||
|
* |
||||||
|
* @param sampleIonAbundanceRatio 目标物的离子丰度比 |
||||||
|
* @param stdIonAbundanceRatio 标准物质的离子丰度比 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public double getAbundanceRatioErrorValue(double sampleIonAbundanceRatio, double stdIonAbundanceRatio) { |
||||||
|
double diffValue = sampleIonAbundanceRatio - stdIonAbundanceRatio; |
||||||
|
double abundanceRatioErrorValue = Math.abs(diffValue) / stdIonAbundanceRatio * 100; |
||||||
|
return abundanceRatioErrorValue; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 计算相对误差 (目标物保留时间 - 标准物保留时间) / 标准物质保留时间 * 100 |
||||||
|
* |
||||||
|
* @param hairSewageDataDto |
||||||
|
* @param hairSewageDataDtoStd |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public void calculateHairCaseRtTimeError(HairSewageDataDto hairSewageDataDto, HairSewageDataDto hairSewageDataDtoStd) { |
||||||
|
if ( !TestRecordSampleDataConstant.isInvalidValue(hairSewageDataDto.getTargetRtTime()) ) { |
||||||
|
// 计算保留时间的相对误差
|
||||||
|
double rtTimeError = getHairCaseRtTimeError(hairSewageDataDto.getTargetRtTime(), hairSewageDataDtoStd.getStdRtTime()); |
||||||
|
hairSewageDataDto.setRtTimeError(rtTimeError); |
||||||
|
// 判断保留时间相对误差是否符合误差范围
|
||||||
|
hairSewageDataDto.setRtTimeWithinError(setHairCaseRtTimeWithinError(hairSewageDataDto.getRtTimeError())); |
||||||
|
} else { |
||||||
|
hairSewageDataDto.setRtTimeError(TestRecordSampleDataConstant.INVALID_VALUE); |
||||||
|
hairSewageDataDto.setRtTimeWithinError("/"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 计算保留时间的相对误差 |
||||||
|
* |
||||||
|
* @param targetRtTime 目标物保留时间信息 |
||||||
|
* @param stdRtTime 标准物保留时间信息 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public double getHairCaseRtTimeError(double targetRtTime, double stdRtTime) { |
||||||
|
return (targetRtTime - stdRtTime) / stdRtTime * 100; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断保留时间相对误差是否符合误差范围 |
||||||
|
* |
||||||
|
* @param rtTimeError |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public String setHairCaseRtTimeWithinError(double rtTimeError) { |
||||||
|
if (rtTimeError > TestRecordSampleDataConstant.HAIR_CASE_NEGATIVE_RT_ERROR |
||||||
|
&& rtTimeError < TestRecordSampleDataConstant.HAIR_CASE_POSITIVE_RT_ERROR) { |
||||||
|
return TestRecordSampleDataConstant.IS; |
||||||
|
} else { |
||||||
|
return TestRecordSampleDataConstant.NO; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取碎片的丰度比偏差范围 |
||||||
|
* |
||||||
|
* @param abundanceRatio |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public BigDecimal getErrorRange(BigDecimal abundanceRatio) { |
||||||
|
double retValue; |
||||||
|
if (abundanceRatio.compareTo(BigDecimal.valueOf(50)) > 0) { // abundanceRatio > 50
|
||||||
|
retValue = 10; |
||||||
|
} else if (abundanceRatio.compareTo(BigDecimal.valueOf(20)) > 0) { // abundanceRatio > 20
|
||||||
|
retValue = 15; |
||||||
|
} else if (abundanceRatio.compareTo(BigDecimal.valueOf(10)) > 0) { // abundanceRatio > 10
|
||||||
|
retValue = 20; |
||||||
|
} else { |
||||||
|
retValue = 50; |
||||||
|
} |
||||||
|
return BigDecimal.valueOf(retValue); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 根据计算出来的离子丰度比误差来判断是否检出 |
||||||
|
* |
||||||
|
* @param ionAbundanceRatioWithinError |
||||||
|
* @param positive |
||||||
|
* @param negative |
||||||
|
*/ |
||||||
|
private String setHairCaseWhetherCheckOut(double ionAbundanceRatioWithinError, double positive, double negative) { |
||||||
|
if (ionAbundanceRatioWithinError < positive |
||||||
|
&& ionAbundanceRatioWithinError > negative) { |
||||||
|
return TestRecordSampleDataConstant.IS; |
||||||
|
} else { |
||||||
|
return TestRecordSampleDataConstant.NO; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue