20250328 更新
1.处理生物样本丰度比和丰度比偏差在前台的显示
This commit is contained in:
@@ -9,7 +9,6 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@@ -20,13 +19,13 @@ import digital.laboratory.platform.common.core.util.R;
|
|||||||
import digital.laboratory.platform.common.mybatis.security.service.DLPUser;
|
import digital.laboratory.platform.common.mybatis.security.service.DLPUser;
|
||||||
import digital.laboratory.platform.comservice.entity.DlpDictData;
|
import digital.laboratory.platform.comservice.entity.DlpDictData;
|
||||||
import digital.laboratory.platform.comservice.feign.RemoteDictDataService;
|
import digital.laboratory.platform.comservice.feign.RemoteDictDataService;
|
||||||
|
import digital.laboratory.platform.inspection.constant.TestRecordSampleDataConstant;
|
||||||
import digital.laboratory.platform.inspection.convert.TestRecordSampleDataConverter;
|
import digital.laboratory.platform.inspection.convert.TestRecordSampleDataConverter;
|
||||||
|
import digital.laboratory.platform.inspection.dto.*;
|
||||||
|
import digital.laboratory.platform.inspection.entity.*;
|
||||||
import digital.laboratory.platform.inspection.enums.BusinessType;
|
import digital.laboratory.platform.inspection.enums.BusinessType;
|
||||||
import digital.laboratory.platform.inspection.enums.StdSolutionNum;
|
import digital.laboratory.platform.inspection.enums.StdSolutionNum;
|
||||||
import digital.laboratory.platform.inspection.enums.TaskTestDataStatus;
|
import digital.laboratory.platform.inspection.enums.TaskTestDataStatus;
|
||||||
import digital.laboratory.platform.inspection.constant.TestRecordSampleDataConstant;
|
|
||||||
import digital.laboratory.platform.inspection.dto.*;
|
|
||||||
import digital.laboratory.platform.inspection.entity.*;
|
|
||||||
import digital.laboratory.platform.inspection.event.AuditDataExecutionEvent;
|
import digital.laboratory.platform.inspection.event.AuditDataExecutionEvent;
|
||||||
import digital.laboratory.platform.inspection.event.FinishTestExecutionEvent;
|
import digital.laboratory.platform.inspection.event.FinishTestExecutionEvent;
|
||||||
import digital.laboratory.platform.inspection.mapper.SampleInjectorMapper;
|
import digital.laboratory.platform.inspection.mapper.SampleInjectorMapper;
|
||||||
@@ -43,7 +42,6 @@ import digital.laboratory.platform.inspetion.api.entity.SampleInfo;
|
|||||||
import digital.laboratory.platform.inspetion.api.entity.TestRecord;
|
import digital.laboratory.platform.inspetion.api.entity.TestRecord;
|
||||||
import digital.laboratory.platform.sys.entity.Drug;
|
import digital.laboratory.platform.sys.entity.Drug;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.BeanUtils;
|
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -56,7 +54,6 @@ import java.text.DecimalFormat;
|
|||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|||||||
@@ -5,14 +5,14 @@ import cn.hutool.core.util.StrUtil;
|
|||||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import digital.laboratory.platform.inspection.convert.TestSampleDataExpandConverter;
|
|
||||||
import digital.laboratory.platform.inspection.dto.TestSampleDataExpandDTO;
|
|
||||||
import digital.laboratory.platform.inspection.entity.TestRecordSampleData;
|
|
||||||
import digital.laboratory.platform.inspection.enums.BusinessType;
|
|
||||||
import digital.laboratory.platform.inspection.constant.TestRecordSampleDataConstant;
|
import digital.laboratory.platform.inspection.constant.TestRecordSampleDataConstant;
|
||||||
|
import digital.laboratory.platform.inspection.convert.TestSampleDataExpandConverter;
|
||||||
import digital.laboratory.platform.inspection.dto.HairSewageDataDto;
|
import digital.laboratory.platform.inspection.dto.HairSewageDataDto;
|
||||||
import digital.laboratory.platform.inspection.dto.NPSCaseTestDataDto;
|
import digital.laboratory.platform.inspection.dto.NPSCaseTestDataDto;
|
||||||
|
import digital.laboratory.platform.inspection.dto.TestSampleDataExpandDTO;
|
||||||
|
import digital.laboratory.platform.inspection.entity.TestRecordSampleData;
|
||||||
import digital.laboratory.platform.inspection.entity.TestRecordSampleDataExpand;
|
import digital.laboratory.platform.inspection.entity.TestRecordSampleDataExpand;
|
||||||
|
import digital.laboratory.platform.inspection.enums.BusinessType;
|
||||||
import digital.laboratory.platform.inspection.mapper.TestRecordSampleDataExpandMapper;
|
import digital.laboratory.platform.inspection.mapper.TestRecordSampleDataExpandMapper;
|
||||||
import digital.laboratory.platform.inspection.service.ProcessInspectDataService;
|
import digital.laboratory.platform.inspection.service.ProcessInspectDataService;
|
||||||
import digital.laboratory.platform.inspection.service.TestRecordSampleDataService;
|
import digital.laboratory.platform.inspection.service.TestRecordSampleDataService;
|
||||||
@@ -27,7 +27,6 @@ import org.springframework.stereotype.Service;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -259,13 +258,20 @@ public class TestRecordSampledataExpandServiceImpl extends ServiceImpl<TestRecor
|
|||||||
sampleDataExpand.setIonAbundanceRatio(sampleDataExpand.getPeakArea().divide(basePeakData.getPeakArea(), 5, BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(100)));
|
sampleDataExpand.setIonAbundanceRatio(sampleDataExpand.getPeakArea().divide(basePeakData.getPeakArea(), 5, BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(100)));
|
||||||
if (CollUtil.isNotEmpty(finalStdDataExpandList)) {
|
if (CollUtil.isNotEmpty(finalStdDataExpandList)) {
|
||||||
finalStdDataExpandList.forEach(stdDataExpand -> {
|
finalStdDataExpandList.forEach(stdDataExpand -> {
|
||||||
if (stdDataExpand.getMassToChargeRatio().equals(sampleDataExpand.getMassToChargeRatio())) {
|
boolean matched = false; // 匹配对应的标准物质数据
|
||||||
|
boolean isNPSCase = testRecord.getBusinessType().equals(BusinessType.NPS_CASE.getBusinessType()); // 是否是常规毒品案件
|
||||||
|
if (isNPSCase) {
|
||||||
|
matched = stdDataExpand.getMassToChargeRatio().equals(sampleDataExpand.getMassToChargeRatio());
|
||||||
|
} else {
|
||||||
|
matched = stdDataExpand.getQualitativeIonPair().equals(sampleDataExpand.getQualitativeIonPair());
|
||||||
|
}
|
||||||
|
if (matched) {
|
||||||
BigDecimal ionAbundanceRatioError = sampleDataExpand.getIonAbundanceRatio()
|
BigDecimal ionAbundanceRatioError = sampleDataExpand.getIonAbundanceRatio()
|
||||||
.subtract(stdDataExpand.getIonAbundanceRatio())
|
.subtract(stdDataExpand.getIonAbundanceRatio())
|
||||||
.divide(stdDataExpand.getIonAbundanceRatio(), 5, BigDecimal.ROUND_HALF_UP)
|
.divide(stdDataExpand.getIonAbundanceRatio(), 5, BigDecimal.ROUND_HALF_UP)
|
||||||
.multiply(BigDecimal.valueOf(100));
|
.multiply(BigDecimal.valueOf(100));
|
||||||
sampleDataExpand.setIonAbundanceRatioError(ionAbundanceRatioError);
|
sampleDataExpand.setIonAbundanceRatioError(ionAbundanceRatioError);
|
||||||
if (testRecord.getBusinessType().equals(BusinessType.NPS_CASE.getBusinessType())) {
|
if (isNPSCase) {
|
||||||
sampleDataExpand.setIonAbundanceRatioWithinError(processInspectDataService.getWithinErrorText(ionAbundanceRatioError, processInspectDataService.getErrorRange(sampleDataExpand.getIonAbundanceRatio())));
|
sampleDataExpand.setIonAbundanceRatioWithinError(processInspectDataService.getWithinErrorText(ionAbundanceRatioError, processInspectDataService.getErrorRange(sampleDataExpand.getIonAbundanceRatio())));
|
||||||
} else {
|
} else {
|
||||||
sampleDataExpand.setIonAbundanceRatioWithinError(processInspectDataService.calculateHairCaseIonAbundanceRatioWithinError(ionAbundanceRatioError.doubleValue(), stdDataExpand.getIonAbundanceRatio().doubleValue()));
|
sampleDataExpand.setIonAbundanceRatioWithinError(processInspectDataService.calculateHairCaseIonAbundanceRatioWithinError(ionAbundanceRatioError.doubleValue(), stdDataExpand.getIonAbundanceRatio().doubleValue()));
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package digital.laboratory.platform.inspection.vo;
|
package digital.laboratory.platform.inspection.vo;
|
||||||
|
|
||||||
import digital.laboratory.platform.inspection.constant.TestRecordSampleDataConstant;
|
import digital.laboratory.platform.inspection.constant.TestRecordSampleDataConstant;
|
||||||
import digital.laboratory.platform.inspection.entity.TestRecordSampleDataExpand;
|
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -93,4 +92,29 @@ public class TestRecordSampleDataVO {
|
|||||||
public BigDecimal getRtTimeError() {
|
public BigDecimal getRtTimeError() {
|
||||||
return rtTimeError != null ? rtTimeError.setScale(3, RoundingMode.HALF_UP) : null;
|
return rtTimeError != null ? rtTimeError.setScale(3, RoundingMode.HALF_UP) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 该getter方法因为生物样本的丰度比只有一个,为前端显示而添加
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public BigDecimal getIonAbundanceRatioError() {
|
||||||
|
return expandList.get(1).getIonAbundanceRatioError();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 该getter方法因为生物样本的丰度比只有一个,为前端显示而添加
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public BigDecimal getIonAbundanceRatio() {
|
||||||
|
return expandList.get(1).getIonAbundanceRatio();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 离子丰度比偏差是否在误差范围内
|
||||||
|
*/
|
||||||
|
public String getIonAbundanceRatioWithinError() {
|
||||||
|
return expandList.get(1).getIonAbundanceRatioWithinError();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user