diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleAnalysisAuditController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleAnalysisAuditController.java index 2296d08..1f061c5 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleAnalysisAuditController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleAnalysisAuditController.java @@ -3,17 +3,22 @@ package com.zt.plat.module.qms.business.bus.controller.admin; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.alibaba.fastjson2.JSONObject; import com.zt.plat.framework.common.pojo.CommonResult; +import com.zt.plat.module.qms.business.bus.controller.vo.*; import com.zt.plat.module.qms.business.bus.service.SampleAnalysisAuditService; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import static com.zt.plat.framework.common.pojo.CommonResult.success; +import java.util.List; +import java.util.Map; + /** * 分析审核 */ @@ -69,6 +74,18 @@ public class SampleAnalysisAuditController { return success(result); } + //修改结果判定 + @PostMapping("/modifyResultAssessment") + public CommonResult modifyResultAssessment(@RequestBody ModifyResultAssessmentReqVO reqVO) { + JSONObject result = null; + if ("平行".equals(reqVO.getAssayType())) { + result = sampleAnalysisAuditService.modifyParallelResultAssessment(reqVO.getSampleId(), reqVO.getConfigAssayMethodId(), reqVO.getSampleAssessmentId(), reqVO.getBusinessAssayProjectDataIds()); + } else if ("双杯".equals(reqVO.getAssayType())) { + + } + return success(result); + } + //判定数据上报 @PostMapping("/assessmentDataReporting") public CommonResult assessmentDataReporting(Long businessSubSampleId, Long configAssayMethodId) { @@ -82,4 +99,5 @@ public class SampleAnalysisAuditController { sampleAnalysisAuditService.createReAnalysis(businessSubSampleId, configAssayMethodId); return success("成功"); } + } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/ModifyResultAssessmentReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/ModifyResultAssessmentReqVO.java new file mode 100644 index 0000000..70bc584 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/ModifyResultAssessmentReqVO.java @@ -0,0 +1,19 @@ +package com.zt.plat.module.qms.business.bus.controller.vo; + +import java.util.List; + +import lombok.Data; + +@Data +public class ModifyResultAssessmentReqVO { + + private String assayType; + + private Long sampleId; + + private Long configAssayMethodId; + + private Long sampleAssessmentId; + + private List businessAssayProjectDataIds; +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayProjectDataMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayProjectDataMapper.java index fd19e9c..5d683ef 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayProjectDataMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayProjectDataMapper.java @@ -116,7 +116,8 @@ public interface BusinessAssayProjectDataMapper extends BaseMapperX businessAssayProjectDataIds); + } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditServiceImpl.java index e3ac076..501becd 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditServiceImpl.java @@ -109,43 +109,12 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic public JSONObject getSampleResultAssessmentList(Long configAssayMethodId, String assessmentStatus) { List configAssayMethodProjectDOList = configAssayMethodProjectMapper.selectByConfigAssayMethodId(configAssayMethodId); List> columnList = new ArrayList<>(); -// columnList.add(new HashMap() {{ -// put("title", "样品名称"); -// put("field", "sampleName"); -// put("dataType", "string"); -// put("decimalPosition", null); -// put("isEdit", false); -// }}); -// columnList.add(new HashMap() {{ -// put("title", "样品编号"); -// put("field", "sampleAssayCode"); -// put("dataType", "string"); -// put("decimalPosition", null); -// put("isEdit", false); -// }}); -// columnList.add(new HashMap() {{ -// put("title", "收样时间"); -// put("field", "sampleReceiveTime"); -// put("dataType", "string"); -// put("decimalPosition", null); -// put("isEdit", false); -// }}); -// columnList.add(new HashMap() {{ -// put("title", "分析人"); -// put("field", "assayOperator"); -// put("dataType", "string"); -// put("decimalPosition", null); -// put("isEdit", false); -// }}); -// columnList.add(new HashMap() {{ -// put("title", "上报时间"); -// put("field", "reportTime"); -// put("dataType", "string"); -// put("decimalPosition", null); -// put("isEdit", false); -// }}); + for (ConfigAssayMethodProjectExtendRespVO configAssayMethodProject : configAssayMethodProjectDOList) { - columnList.add(new HashMap() {{ + columnList.add(new HashMap() { + private static final long serialVersionUID = 2100402322138923549L; + + { put("title", configAssayMethodProject.getShowName() + "(" + configAssayMethodProject.getDictionaryProjectUnit() + ")"); put("field", configAssayMethodProject.getSimpleName()); put("dataType", configAssayMethodProject.getDataType()); @@ -178,6 +147,7 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic for (BusinessSubSampleAssessmentExtendRespVO businessSubSampleAssessment : businessSubSampleAssessmentList) { businessAssayTaskDataAssessmentMap.put("id", businessSubSampleAssessment.getId()); businessAssayTaskDataAssessmentMap.put("assessmentStatus", businessSubSampleAssessment.getAssessmentStatus()); + businessAssayTaskDataAssessmentMap.put("assessmentStatus_" + businessSubSampleAssessment.getSimpleName(), businessSubSampleAssessment.getAssessmentStatus()); businessAssayTaskDataAssessmentMap.put(businessSubSampleAssessment.getSimpleName(), businessSubSampleAssessment.getAssessmentValue()); businessAssayTaskDataAssessmentMap.put("assessmentValue", businessSubSampleAssessment.getAssessmentValue()); } @@ -193,8 +163,10 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic List businessAssayProjectDataList = businessAssayProjectDataMapper.selectByBusinessAssayTaskDataId(businessAssayTaskDataExtendRespVO.getId()); for (BusinessAssayProjectDataExtendRespVO businessAssayProjectData : businessAssayProjectDataList) { businessAssayTaskDataMap.put(businessAssayProjectData.getSimpleName(), businessAssayProjectData.getValue()); + businessAssayTaskDataMap.put("isNotAssessment_" + businessAssayProjectData.getSimpleName(), businessAssayProjectData.getIsNotAssessment()); //添加判定状态 businessAssayTaskDataMap.put("assessmentStatus", assessmentMap.get("assessmentStatus")); + } dataList.add(businessAssayTaskDataMap); @@ -210,7 +182,6 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic json.put("datas", dataList); return json; } - @Override public JSONObject getParallelResultAssessment(Long businessSubSampleId, Long configAssayMethodId) { @@ -229,12 +200,12 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic //单个检测项目的分析结果 List businessAssayProjectDataSingleList = businessAssayProjectDataEntry.getValue(); for (BusinessAssayProjectDataExtendRespVO businessAssayProjectDataExtendRespVO : businessAssayProjectDataSingleList) {//每个检测结果作为一个动态列 - columnList.add(new HashMap() {{ + columnList.add(new HashMap() { + private static final long serialVersionUID = -1844858000003248901L; + + { put("title", businessAssayProjectDataExtendRespVO.getSampleAssayCode() + "(" + businessAssayProjectDataExtendRespVO.getAssayOperator() + ")"); - put("field", businessAssayProjectDataExtendRespVO.getId() + ";" + businessAssayProjectDataExtendRespVO.getConfigAssayMethodProjectId() + ";" + businessAssayProjectDataExtendRespVO.getBusinessSubSampleId() + ";" + businessAssayProjectDataExtendRespVO.getAnalysisCount()); -// put("dataType", configAssayMethodProject.getDataType()); -// put("decimalPosition", configAssayMethodProject.getDecimalPosition()); -// put("isEdit", true); + put("field", businessAssayProjectDataExtendRespVO.getBusinessAssayTaskDataId() + ";" + businessAssayProjectDataExtendRespVO.getBusinessSubSampleId() + ";" + businessAssayProjectDataExtendRespVO.getAnalysisCount()); }}); } @@ -249,7 +220,7 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic Map businessSubSampleAssessmentMap = BeanUtil.beanToMap(businessSubSampleAssessment); List businessAssayProjectDataSingleList = businessAssayProjectDataList.stream().filter(f -> f.getDictionaryProjectId().equals(businessSubSampleAssessment.getDictionaryProjectId())).collect(Collectors.toList()); for (BusinessAssayProjectDataExtendRespVO businessAssayProjectDataExtendRespVO : businessAssayProjectDataSingleList) { - businessSubSampleAssessmentMap.put(businessAssayProjectDataExtendRespVO.getId() + ";" + businessAssayProjectDataExtendRespVO.getConfigAssayMethodProjectId() + ";" + businessAssayProjectDataExtendRespVO.getBusinessSubSampleId() + ";" + businessAssayProjectDataExtendRespVO.getAnalysisCount(), businessAssayProjectDataExtendRespVO.getValue()); + businessSubSampleAssessmentMap.put(businessAssayProjectDataExtendRespVO.getBusinessAssayTaskDataId() + ";" + businessAssayProjectDataExtendRespVO.getBusinessSubSampleId() + ";" + businessAssayProjectDataExtendRespVO.getAnalysisCount(), businessAssayProjectDataExtendRespVO.getValue()); } dataList.add(businessSubSampleAssessmentMap); } @@ -698,6 +669,78 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic } + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject modifyParallelResultAssessment(Long businessSubSampleId, Long configAssayMethodId, Long businessSubSampleAssessmentId, List businessAssayProjectDataIds) { + BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = businessSubSampleAssessmentMapper.selectById(businessSubSampleAssessmentId); + + BusinessAssayProjectDataReqVO businessAssayProjectDataSearch = new BusinessAssayProjectDataReqVO(); + businessAssayProjectDataSearch.setBusinessSubSampleId(businessSubSampleId); + businessAssayProjectDataSearch.setConfigAssayMethodId(configAssayMethodId); + businessAssayProjectDataSearch.setConfigAssayMethodProjectId(businessSubSampleAssessmentDO.getConfigAssayMethodProjectId()); + List businessAssayProjectDataList = businessAssayProjectDataMapper.selectAnalysisBy(businessAssayProjectDataSearch); + List businessAssayProjectDataDOList = BeanUtil.copyToList(businessAssayProjectDataList, BusinessAssayProjectDataDO.class); + for (BusinessAssayProjectDataDO businessAssayProjectDataDO : businessAssayProjectDataDOList) { + if (businessAssayProjectDataIds.contains(businessAssayProjectDataDO.getId())) { + businessAssayProjectDataDO.setIsNotAssessment(QmsCommonConstant.NO); + } else { + businessAssayProjectDataDO.setIsNotAssessment(QmsCommonConstant.YES); + } + } + // 排序并处理 null + List sortedValues = businessAssayProjectDataDOList.stream() + .filter(f -> f.getIsNotAssessment().equals(QmsCommonConstant.NO)) + .map(v -> { + String val = v.getValue(); + return val == null || val.trim().isEmpty() ? BigDecimal.ZERO : new BigDecimal(val.trim()); + }) + .sorted() + .collect(Collectors.toList()); + + // 获取小数精度 + int elementScale = businessSubSampleAssessmentDO.getDecimalPosition(); + // 计算代表值(均值或差值) + BigDecimal representativeValue = calculateRepresentativeValue(sortedValues, elementScale); + + //设置判定值 + businessSubSampleAssessmentDO.setAssessmentValue(representativeValue.toPlainString()); + + List configAssayMethodProjectAssessmentDOList = configAssayMethodProjectAssessmentMapper.selectList(new LambdaQueryWrapperX() + .eq(ConfigAssayMethodProjectAssessmentDO::getConfigAssayMethodId, businessSubSampleAssessmentDO.getConfigAssayMethodId()) + .eq(ConfigAssayMethodProjectAssessmentDO::getConfigAssayMethodProjectId, businessSubSampleAssessmentDO.getConfigAssayMethodProjectId())); + + // 查找匹配的允差规则 + ConfigAssayMethodProjectAssessmentDO matchedRule = findMatchingRule(configAssayMethodProjectAssessmentDOList, representativeValue); + if (matchedRule == null) { + throw new ServiceException(500, "未找到超差判定区间范围,元素ID: " + businessSubSampleAssessmentDO.getDictionaryProjectId() + ", 值: " + representativeValue); + } + + // 计算允差值 + BigDecimal allowValue; + try { + allowValue = allowanceCalculatorComponent.calculateAllowableValue(new BigDecimal(matchedRule.getMinimumValue()), new BigDecimal(matchedRule.getMaximumValue()), new BigDecimal(matchedRule.getMinimumToleraanceValue()), new BigDecimal(matchedRule.getMaximumToleraanceValue()), new BigDecimal(matchedRule.getToleraanceAdjustmentValue()), representativeValue, matchedRule.getIsUseFormula(), matchedRule.getFormula(), elementScale); + } catch (Exception e) { + throw new ServiceException(500, "超差判定计算出错,检测项目ID: " + businessSubSampleAssessmentDO.getDictionaryProjectId()); + } + + // 判断相邻差值是否超差 + for (int i = 0; i < sortedValues.size() - 1; i++) { + BigDecimal diff = sortedValues.get(i + 1).subtract(sortedValues.get(i)).abs(); + if (diff.compareTo(allowValue) > 0) { + businessSubSampleAssessmentDO.setAssessmentStatus(QmsCommonConstant.EXCEEDS_TOLERANCE); + break; + } + } + + //更新判定值 + businessSubSampleAssessmentMapper.updateById(businessSubSampleAssessmentDO); + //更新检测项目 + businessAssayProjectDataMapper.updateBatch(businessAssayProjectDataDOList); + + + return getParallelResultAssessment(businessSubSampleId, configAssayMethodId); + } + }