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 09bf871..1314dd4 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 @@ -12,6 +12,7 @@ import com.zt.plat.framework.business.interceptor.BusinessControllerMarker; import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.datapermission.core.annotation.DeptDataPermissionIgnore; import com.zt.plat.module.qms.business.bus.controller.vo.*; +import com.zt.plat.module.qms.business.bus.controller.vo.BatchAssessmentDataReportingReqVO.BusinessSubSampleIdAndRetestCount; import com.zt.plat.module.qms.business.bus.service.SampleAnalysisAuditService; import com.zt.plat.module.qms.enums.QmsCommonConstant; @@ -39,7 +40,7 @@ public class SampleAnalysisAuditController implements BusinessControllerMarker { */ @PostMapping("/crossAudit") public CommonResult crossAudit(Long businessAssayTaskId, String auditStatus) { - sampleAnalysisAuditService.crossAuditByByTaskId(businessAssayTaskId, auditStatus); + sampleAnalysisAuditService.crossAuditByTaskId(businessAssayTaskId, auditStatus); return success("成功"); } @@ -88,23 +89,23 @@ public class SampleAnalysisAuditController implements BusinessControllerMarker { //判定数据上报 @PostMapping("/assessmentDataReporting") - public CommonResult assessmentDataReporting(Long businessSubSampleId, Long configAssayMethodId) { - sampleAnalysisAuditService.assessmentDataReporting(businessSubSampleId, configAssayMethodId); + public CommonResult assessmentDataReporting(Long businessSubSampleId, Long configAssayMethodId, Integer retestCount) { + sampleAnalysisAuditService.assessmentDataReporting(businessSubSampleId, configAssayMethodId, retestCount); return success("成功"); } @PostMapping("/batchAssessmentDataReporting") public CommonResult batchAssessmentDataReporting(@RequestBody BatchAssessmentDataReportingReqVO reqVO) { - for (Long businessSubSampleId : reqVO.getBusinessSubSampleIds()) { - sampleAnalysisAuditService.assessmentDataReporting(businessSubSampleId, reqVO.getConfigAssayMethodId()); + for (BusinessSubSampleIdAndRetestCount businessSubSampleIdAndRetestCount : reqVO.getBusinessSubSampleIdAndRetestCounts()) { + sampleAnalysisAuditService.assessmentDataReporting(businessSubSampleIdAndRetestCount.getBusinessSubSampleId(), reqVO.getConfigAssayMethodId(), businessSubSampleIdAndRetestCount.getRetestCount()); } return success("成功"); } //重新创建复检委托 @PostMapping("/createReAnalysis") - public CommonResult createReAnalysis(Long businessSubSampleId, Long configAssayMethodId) { - sampleAnalysisAuditService.createReAnalysis(businessSubSampleId, configAssayMethodId); + public CommonResult createReAnalysis(Long businessSubSampleId, Long configAssayMethodId, Integer retestCount) { + sampleAnalysisAuditService.createReAnalysis(businessSubSampleId, configAssayMethodId, retestCount); return success("成功"); } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleReportDataQueryController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleReportDataQueryController.java index ed96e92..a0e4180 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleReportDataQueryController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleReportDataQueryController.java @@ -41,7 +41,7 @@ public class SampleReportDataQueryController { @Operation(summary = "委托单详情数据") @GetMapping("/crossAuditByTaskId") public CommonResult crossAuditByTaskId(Long businessAssayTaskId) { - JSONObject result = sampleAnalysisAuditService.crossAuditByTaskId(businessAssayTaskId); + JSONObject result = sampleAnalysisAuditService.getCrossAuditDataByTaskId(businessAssayTaskId); return success(result); } } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BatchAssessmentDataReportingReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BatchAssessmentDataReportingReqVO.java index 3fe58b0..c857ced 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BatchAssessmentDataReportingReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BatchAssessmentDataReportingReqVO.java @@ -1,13 +1,35 @@ package com.zt.plat.module.qms.business.bus.controller.vo; import java.util.List; +import java.util.stream.Collectors; +import cn.hutool.core.collection.CollUtil; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; @Data public class BatchAssessmentDataReportingReqVO { - private List businessSubSampleIds; + private List businessSubSampleIdAndRetestCounts; + + public List getBusinessSubSampleIds() { + if (CollUtil.isEmpty(this.businessSubSampleIdAndRetestCounts)) { + return null; + } + return this.businessSubSampleIdAndRetestCounts.stream().map(m -> m.getBusinessSubSampleId()).collect(Collectors.toList()); + } private Long configAssayMethodId; + + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class BusinessSubSampleIdAndRetestCount { + + private Long businessSubSampleId; + + private Integer retestCount; + } } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BatchResultDataReportingReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BatchResultDataReportingReqVO.java index c56d948..ef22800 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BatchResultDataReportingReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BatchResultDataReportingReqVO.java @@ -1,13 +1,34 @@ package com.zt.plat.module.qms.business.bus.controller.vo; import java.util.List; +import java.util.stream.Collectors; +import cn.hutool.core.collection.CollUtil; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; @Data public class BatchResultDataReportingReqVO { - private List businessSubParentSampleIds; - + private List businessSubParentSampleIdAndRetestCounts; + private Long configAssayMethodId; + + public List getBusinessSubParentSampleIds() { + if (CollUtil.isEmpty(this.businessSubParentSampleIdAndRetestCounts)) { + return null; + } + return this.businessSubParentSampleIdAndRetestCounts.stream().map(m -> m.getBusinessSubParentSampleId()).collect(Collectors.toList()); + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class BusinessSubParentSampleIdAndRetestCount { + + private Long businessSubParentSampleId; + + private Integer retestCount; + } } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubParentSampleAssessmentProjectRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubParentSampleAssessmentProjectRespVO.java index 50f1eb4..64dc59a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubParentSampleAssessmentProjectRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessSubParentSampleAssessmentProjectRespVO.java @@ -19,6 +19,9 @@ public class BusinessSubParentSampleAssessmentProjectRespVO { @Schema(description = "样品分样ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23188") @ExcelProperty("样品分样ID") private Long businessSubParentSampleId; + + @Schema(description = "班组判定数据业务ID") + private Long businessSubParentSampleAssessmentId; @Schema(description = "检测项目ID,字典表【T_DIC_PRJ】", requiredMode = Schema.RequiredMode.REQUIRED, example = "17642") @ExcelProperty("检测项目ID,字典表【T_DIC_PRJ】") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayTaskDataMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayTaskDataMapper.java index 73bf35f..53f19b9 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayTaskDataMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayTaskDataMapper.java @@ -441,16 +441,18 @@ public interface BusinessAssayTaskDataMapper extends BaseMapperX selectIsReportedList(List excludeIds, Long businessSubSampleId, Long configAssayMethodId, Integer isReported) { + default List selectIsReportedList(List excludeIds, Long businessSubSampleId, Long configAssayMethodId, Integer retestCount, Integer isReported) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapperX(); if (CollUtil.isNotEmpty(excludeIds)) { queryWrapper.notIn(BusinessAssayTaskDataDO::getId, excludeIds); } queryWrapper.eq(BusinessAssayTaskDataDO::getBusinessSubSampleId, businessSubSampleId) .eq(BusinessAssayTaskDataDO::getConfigAssayMethodId, configAssayMethodId) + .eq(BusinessAssayTaskDataDO::getRetestCount, retestCount) .eq(BusinessAssayTaskDataDO::getIsReported, isReported); return selectList(queryWrapper); } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubParentSampleAssessmentMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubParentSampleAssessmentMapper.java index cb92b17..e120d16 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubParentSampleAssessmentMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubParentSampleAssessmentMapper.java @@ -45,10 +45,11 @@ public interface BusinessSubParentSampleAssessmentMapper extends BaseMapperX() .eq(BusinessSubParentSampleAssessmentDO::getBusinessSubParentSampleId, businessSubParentSampleId) - .eq(BusinessSubParentSampleAssessmentDO::getConfigAssayMethodId, configAssayMethodId)); + .eq(BusinessSubParentSampleAssessmentDO::getConfigAssayMethodId, configAssayMethodId) + .eq(BusinessSubParentSampleAssessmentDO::getRetestCount, retestCount)); } default List selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(List businessSubParentSampleIds, Long configAssayMethodId) { diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubSampleAssessmentMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubSampleAssessmentMapper.java index c483da8..ae3ff6b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubSampleAssessmentMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubSampleAssessmentMapper.java @@ -50,12 +50,14 @@ public interface BusinessSubSampleAssessmentMapper extends BaseMapperX() .eq(BusinessSubSampleAssessmentDO::getBusinessSubSampleId, businessSubSampleId) - .eq(BusinessSubSampleAssessmentDO::getConfigAssayMethodId, configAssayMethodId)); + .eq(BusinessSubSampleAssessmentDO::getConfigAssayMethodId, configAssayMethodId) + .eq(BusinessSubSampleAssessmentDO::getRetestCount, retestCount)); } + @Deprecated default List selectByBusinessSubSampleIdsAndConfigAssayMethodIdAndRetestCount(List businessSubSampleIds, Long configAssayMethodId, Integer retestCount) { return selectList(new LambdaQueryWrapperX() .in(BusinessSubSampleAssessmentDO::getBusinessSubSampleId, businessSubSampleIds) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubSampleAssessmentProjectMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubSampleAssessmentProjectMapper.java index e146f3e..e866884 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubSampleAssessmentProjectMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessSubSampleAssessmentProjectMapper.java @@ -100,8 +100,11 @@ public interface BusinessSubSampleAssessmentProjectMapper extends BaseMapperX selectByBusinessSubSampleIdAndConfigAssayMethodId(Long businessSubSampleId, Long configAssayMethodId) { + @Deprecated + default List selectByBusinessSubSampleIdAndConfigAssayMethodId(Long businessSubSampleId, Long configAssayMethodId) { return selectJoinList(BusinessSubSampleAssessmentProjectExtendRespVO.class, new MPJLambdaWrapperX() + .leftJoin(BusinessSubSampleAssessmentDO.class, BusinessSubSampleAssessmentDO::getId, BusinessSubSampleAssessmentProjectDO::getBusinessSubSampleAssessmentId) + .leftJoin(ConfigAssayMethodDO.class, ConfigAssayMethodDO::getId, BusinessSubSampleAssessmentProjectDO::getConfigAssayMethodId) .leftJoin(ConfigAssayMethodProjectDO.class, ConfigAssayMethodProjectDO::getId, BusinessSubSampleAssessmentProjectDO::getConfigAssayMethodProjectId) .leftJoin(DictionaryProjectDO.class, DictionaryProjectDO::getId, BusinessSubSampleAssessmentProjectDO::getDictionaryProjectId) .selectAll(BusinessSubSampleAssessmentProjectDO.class) @@ -113,6 +116,22 @@ public interface BusinessSubSampleAssessmentProjectMapper extends BaseMapperX selectByBusinessSubSampleIdAndConfigAssayMethodIdAndRetestCount(Long businessSubSampleId, Long configAssayMethodId, Integer retestCount) { + return selectJoinList(BusinessSubSampleAssessmentProjectExtendRespVO.class, new MPJLambdaWrapperX() + .leftJoin(BusinessSubSampleAssessmentDO.class, BusinessSubSampleAssessmentDO::getId, BusinessSubSampleAssessmentProjectDO::getBusinessSubSampleAssessmentId) + .leftJoin(ConfigAssayMethodDO.class, ConfigAssayMethodDO::getId, BusinessSubSampleAssessmentProjectDO::getConfigAssayMethodId) + .leftJoin(ConfigAssayMethodProjectDO.class, ConfigAssayMethodProjectDO::getId, BusinessSubSampleAssessmentProjectDO::getConfigAssayMethodProjectId) + .leftJoin(DictionaryProjectDO.class, DictionaryProjectDO::getId, BusinessSubSampleAssessmentProjectDO::getDictionaryProjectId) + .selectAll(BusinessSubSampleAssessmentProjectDO.class) + .selectAs(ConfigAssayMethodProjectDO::getDictionaryProjectUnit, BusinessSubSampleAssessmentProjectExtendRespVO::getDictionaryProjectUnit) + .selectAs(DictionaryProjectDO::getKey, BusinessSubSampleAssessmentProjectExtendRespVO::getDictionaryProjectKey) + .selectAs(DictionaryProjectDO::getSimpleName, BusinessSubSampleAssessmentProjectExtendRespVO::getSimpleName) + .selectAs(DictionaryProjectDO::getShowName, BusinessSubSampleAssessmentProjectExtendRespVO::getShowName) + .eq(BusinessSubSampleAssessmentProjectDO::getBusinessSubSampleId, businessSubSampleId) + .eq(BusinessSubSampleAssessmentProjectDO::getConfigAssayMethodId, configAssayMethodId) + .eq(BusinessSubSampleAssessmentDO::getRetestCount, retestCount)); + } + default BusinessSubSampleAssessmentProjectDO selectByBusinessSubSampleIdAndConfigAssayMethodIdAndConfigAssayMethodProjectId(Long businessSubSampleId, Long configAssayMethodId, Long configAssayMethodProjectId) { return selectOne(new LambdaQueryWrapperX() .eq(BusinessSubSampleAssessmentProjectDO::getBusinessSubSampleId, businessSubSampleId) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditService.java index 8d036fc..84e056e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditService.java @@ -10,9 +10,9 @@ import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskDataRe */ public interface SampleAnalysisAuditService { - JSONObject crossAuditByTaskId(Long businessAssayTaskId); + JSONObject getCrossAuditDataByTaskId(Long businessAssayTaskId); - void crossAuditByByTaskId(Long businessAssayTaskId, String auditStatus); + void crossAuditByTaskId(Long businessAssayTaskId, String auditStatus); JSONObject getSampleResultAssessmentList(BusinessAssayTaskDataReqVO reqVO); @@ -20,9 +20,9 @@ public interface SampleAnalysisAuditService { JSONObject getDoubleCupResultAssessment(Long businessSubParentSampleId, Long configAssayMethodId); - void assessmentDataReporting(Long businessSubSampleId, Long configAssayMethodId); + void assessmentDataReporting(Long businessSubSampleId, Long configAssayMethodId, Integer retestCount); - void createReAnalysis(Long businessSubSampleId, Long configAssayMethodId); + void createReAnalysis(Long businessSubSampleId, Long configAssayMethodId, Integer retestCount); JSONObject modifyParallelResultAssessment(Long businessSubSampleId, Long configAssayMethodId, Long businessSubSampleAssessmentId, List 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 087dcb0..abf15d9 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 @@ -31,6 +31,7 @@ import com.zt.plat.framework.common.exception.ServiceException; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.module.qms.business.bus.controller.vo.*; +import com.zt.plat.module.qms.business.bus.controller.vo.BatchResultDataReportingReqVO.BusinessSubParentSampleIdAndRetestCount; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayParameterDataDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayProjectDataDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDO; @@ -198,7 +199,7 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic //为空则未添加过判定记录 if (assessmentMap == null) { if (QmsCommonConstant.ASSAY_TYPE_SINGLE_PARALLEL.equals(businessAssayTaskDataExtendRespVO.getAssayType())) {//平行 - List businessSubSampleAssessmentList = businessSubSampleAssessmentProjectMapper.selectByBusinessSubSampleIdAndConfigAssayMethodId(businessAssayTaskDataExtendRespVO.getBusinessSubSampleId(), configAssayMethodId); + List businessSubSampleAssessmentList = businessSubSampleAssessmentProjectMapper.selectByBusinessSubSampleIdAndConfigAssayMethodIdAndRetestCount(businessAssayTaskDataExtendRespVO.getBusinessSubSampleId(), configAssayMethodId, businessAssayTaskDataExtendRespVO.getRetestCount()); for (BusinessSubSampleAssessmentProjectExtendRespVO businessSubSampleAssessment : businessSubSampleAssessmentList) { businessAssayTaskDataAssessmentMap.put("id", businessSubSampleAssessment.getId()); businessAssayTaskDataAssessmentMap.put("assessmentStatus", businessSubSampleAssessment.getAssessmentStatus()); @@ -291,7 +292,7 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic } @Override - public JSONObject crossAuditByTaskId(Long businessAssayTaskId) { + public JSONObject getCrossAuditDataByTaskId(Long businessAssayTaskId) { JSONWriter.Context context = JSONFactory.createWriteContext(); context.setDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -622,13 +623,13 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic @Override @Transactional(rollbackFor = Exception.class) - public void crossAuditByByTaskId(Long businessAssayTaskId, String auditStatus) { + public void crossAuditByTaskId(Long businessAssayTaskId, String auditStatus) { //当前登录用户昵称 String nickName = SecurityFrameworkUtils.getLoginUserNickname(); - //自动上报的子样 - List automaticBusinessSubSampleIdList = new ArrayList<>(); + //自动上报的子样判定数据 + List automaticBusinessSubSampleAssessmentList = new ArrayList<>(); //判定记录 List updateBusinessSubSampleAssessmentDOList = new ArrayList<>(); @@ -645,9 +646,17 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic //查询分析任务明细 List businessAssayTaskDataDOList = businessAssayTaskDataMapper.selectByBusinessAssayTaskId(businessAssayTaskId); - Integer recheckCount = businessAssayTaskDataDOList.get(0).getRetestCount(); - List businessSubSampleIdList = businessAssayTaskDataDOList.stream().map(m -> m.getBusinessSubSampleId()).distinct().collect(Collectors.toList()); - List businessSubSampleAssessmentDOList = businessSubSampleAssessmentMapper.selectByBusinessSubSampleIdsAndConfigAssayMethodIdAndRetestCount(businessSubSampleIdList, businessAssayTaskDO.getConfigAssayMethodId(), recheckCount); + + +// Integer recheckCount = businessAssayTaskDataDOList.get(0).getRetestCount(); +// List businessSubSampleIdList = businessAssayTaskDataDOList.stream().map(m -> m.getBusinessSubSampleId()).distinct().collect(Collectors.toList()); +// List businessSubSampleAssessmentDOList = businessSubSampleAssessmentMapper.selectByBusinessSubSampleIdsAndConfigAssayMethodIdAndRetestCount(businessSubSampleIdList, businessAssayTaskDO.getConfigAssayMethodId(), recheckCount); + + //获取任务明细对应的判定id + List businessSubSampleAssessmentIdList = businessAssayTaskDataDOList.stream().map(m -> m.getBusinessSubSampleAssessmentId()).distinct().collect(Collectors.toList()); + //获取子样判定数据 + List businessSubSampleAssessmentDOList = businessSubSampleAssessmentMapper.selectByIds(businessSubSampleAssessmentIdList); + //根据子样分组 Map> businessAssayTaskDataDOMap = businessAssayTaskDataDOList.stream().collect(Collectors.groupingBy(BusinessAssayTaskDataDO::getBusinessSubSampleId)); //循环分组 @@ -655,43 +664,144 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic Long businessSubSampleId = businessAssayTaskDataDOMapEntry.getKey(); List businessAssayTaskDataList = businessAssayTaskDataDOMapEntry.getValue(); - List businessAssayTaskDataIdList = businessAssayTaskDataList.stream().map(m -> m.getId()).collect(Collectors.toList()); - BusinessAssayTaskDataDO businessAssayTaskDataDO = businessAssayTaskDataList.get(0); - BusinessSubSampleDO businessSubSampleDO = businessSubSampleMapper.selectById(businessSubSampleId); - //获取子样分析方法配置 - ConfigSubSampleMethodExtendRespVO configSubSampleMethodDO = configSubSampleMethodMapper.selectByConfigSubSampleIdAndConfigAssayMethodId(businessSubSampleDO.getConfigSubSampleId(), businessAssayTaskDataDO.getConfigAssayMethodId()); + Map> businessAssayTaskDataDORetestMap = businessAssayTaskDataList.stream().collect(Collectors.groupingBy(BusinessAssayTaskDataDO::getRetestCount)); + + for (Map.Entry> businessAssayTaskDataDORetestMapEntry : businessAssayTaskDataDORetestMap.entrySet()) { + Integer retestCount = businessAssayTaskDataDORetestMapEntry.getKey(); + List businessAssayTaskDataRetestList = businessAssayTaskDataDORetestMapEntry.getValue(); + + List businessAssayTaskDataIdList = businessAssayTaskDataRetestList.stream().map(m -> m.getId()).collect(Collectors.toList()); + BusinessAssayTaskDataDO businessAssayTaskDataDO = businessAssayTaskDataRetestList.get(0); + + BusinessSubSampleDO businessSubSampleDO = businessSubSampleMapper.selectById(businessSubSampleId); + //获取子样分析方法配置 + ConfigSubSampleMethodExtendRespVO configSubSampleMethodDO = configSubSampleMethodMapper.selectByConfigSubSampleIdAndConfigAssayMethodId(businessSubSampleDO.getConfigSubSampleId(), businessAssayTaskDataDO.getConfigAssayMethodId()); + + if (QmsCommonConstant.ASSAY_TYPE_SINGLE_PARALLEL.equals(businessAssayTaskDataDO.getAssayType())) { + //根据子样id及分析方法id,查询未上报的分析任务 + List unReportedList = businessAssayTaskDataMapper.selectIsReportedList(businessAssayTaskDataIdList, businessAssayTaskDataDO.getBusinessSubSampleId(), businessAssayTaskDataDO.getConfigAssayMethodId(), retestCount, QmsCommonConstant.NO); + if (unReportedList.size() > 0) {//还有未上报数据,直接处理,无需判定 + continue; + } else {//做超差判定 + //根据子样id及分析方法id,查询已上报的分析任务 + List reportedList = businessAssayTaskDataMapper.selectIsReportedList(businessAssayTaskDataIdList, businessAssayTaskDataDO.getBusinessSubSampleId(), businessAssayTaskDataDO.getConfigAssayMethodId(), retestCount, QmsCommonConstant.YES); + if (reportedList.size() > 0) { + List reportedBusinessAssayTaskDataIdList = reportedList.stream().map(m -> m.getId()).collect(Collectors.toList()); + businessAssayTaskDataIdList.addAll(reportedBusinessAssayTaskDataIdList); + } + + //查询判定业务 + BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = updateBusinessSubSampleAssessmentDOList.stream().filter(f -> f.getId().equals(businessAssayTaskDataDO.getBusinessSubSampleAssessmentId())).findFirst().orElse(null); + if (businessSubSampleAssessmentDO == null) { + businessSubSampleAssessmentDO = businessSubSampleAssessmentDOList.stream().filter(f -> f.getId().equals(businessAssayTaskDataDO.getBusinessSubSampleAssessmentId())).findFirst().orElse(null); + updateBusinessSubSampleAssessmentDOList.add(businessSubSampleAssessmentDO); + } + //状态设置为待上报 + businessSubSampleAssessmentDO.setReportedStatus(QmsCommonConstant.ASMT_PENDING_REPORT); + //查询分析项目 + List businessAssayProjectDataDOList = businessAssayProjectDataMapper.selectList(new LambdaQueryWrapperX().in(BusinessAssayProjectDataDO::getBusinessAssayTaskDataId, businessAssayTaskDataIdList)); + Map> businessAssayProjectDataDOMap = businessAssayProjectDataDOList.stream().collect(Collectors.groupingBy(BusinessAssayProjectDataDO::getDictionaryProjectId)); + for (Map.Entry> businessAssayProjectDataDOEntry : businessAssayProjectDataDOMap.entrySet()) { + Long dictionaryProjectId = businessAssayProjectDataDOEntry.getKey(); + List val1 = businessAssayProjectDataDOEntry.getValue(); + BusinessAssayProjectDataDO businessAssayProjectDataDO = val1.get(0); + List configAssayMethodProjectAssessmentDOList = configAssayMethodProjectAssessmentMapper.selectByConfigBaseSampleIdAndConfigAssayMethodIdAndConfigAssayMethodProjectId(configSubSampleMethodDO.getConfigBaseSampleId(), businessAssayTaskDataDO.getConfigAssayMethodId(), businessAssayProjectDataDO.getConfigAssayMethodProjectId()); - if (QmsCommonConstant.ASSAY_TYPE_SINGLE_PARALLEL.equals(businessAssayTaskDataDO.getAssayType())) { - //根据子样id及分析方法id,查询未上报的分析任务 - List unReportedList = businessAssayTaskDataMapper.selectIsReportedList(businessAssayTaskDataIdList, businessAssayTaskDataDO.getBusinessSubSampleId(), businessAssayTaskDataDO.getConfigAssayMethodId(), QmsCommonConstant.NO); - if (unReportedList.size() > 0) {//还有未上报数据,直接处理,无需判定 - continue; - } else {//做超差判定 - //根据子样id及分析方法id,查询已上报的分析任务 - List reportedList = businessAssayTaskDataMapper.selectIsReportedList(businessAssayTaskDataIdList, businessAssayTaskDataDO.getBusinessSubSampleId(), businessAssayTaskDataDO.getConfigAssayMethodId(), QmsCommonConstant.YES); - if (reportedList.size() > 0) { - List reportedBusinessAssayTaskDataIdList = reportedList.stream().map(m -> m.getId()).collect(Collectors.toList()); - businessAssayTaskDataIdList.addAll(reportedBusinessAssayTaskDataIdList); + //查询判定结果数据 + BusinessSubSampleAssessmentProjectDO businessSubSampleAssessmentProjectDO = businessSubSampleAssessmentProjectMapper.selectByBusinessSubSampleIdAndConfigAssayMethodIdAndConfigAssayMethodProjectId(businessSubSampleId, businessAssayTaskDataDO.getConfigAssayMethodId(), businessAssayProjectDataDO.getConfigAssayMethodProjectId()); + if (businessSubSampleAssessmentProjectDO == null) { + businessSubSampleAssessmentProjectDO = new BusinessSubSampleAssessmentProjectDO(); + + saveBusinessSubSampleAssessmentProjectDOList.add(businessSubSampleAssessmentProjectDO); + } else { + updateBusinessSubSampleAssessmentProjectDOList.add(businessSubSampleAssessmentProjectDO); + } + businessSubSampleAssessmentProjectDO.setBusinessSubParentSampleId(businessAssayTaskDataDO.getBusinessSubParentSampleId()); + businessSubSampleAssessmentProjectDO.setBusinessSubSampleId(businessAssayTaskDataDO.getBusinessSubSampleId()); + businessSubSampleAssessmentProjectDO.setBusinessSubSampleAssessmentId(businessSubSampleAssessmentDO.getId()); + businessSubSampleAssessmentProjectDO.setConfigAssayMethodId(businessAssayTaskDataDO.getConfigAssayMethodId()); + businessSubSampleAssessmentProjectDO.setConfigAssayMethodProjectId(businessAssayProjectDataDO.getConfigAssayMethodProjectId()); + businessSubSampleAssessmentProjectDO.setDictionaryProjectId(dictionaryProjectId); + businessSubSampleAssessmentProjectDO.setDataType(businessAssayProjectDataDO.getDataType()); + businessSubSampleAssessmentProjectDO.setDecimalPosition(businessAssayProjectDataDO.getDecimalPosition()); + businessSubSampleAssessmentProjectDO.setAssayType(businessAssayTaskDataDO.getAssayType()); + businessSubSampleAssessmentProjectDO.setTaskType(businessAssayTaskDataDO.getTaskType()); + businessSubSampleAssessmentProjectDO.setUsage(businessAssayProjectDataDO.getUsage()); + businessSubSampleAssessmentProjectDO.setSymbol(businessAssayProjectDataDO.getSymbol()); + businessSubSampleAssessmentProjectDO.setAssessmentStatus(QmsCommonConstant.NORMAL); + + // 排序并处理 null + List sortedValues = val1.stream() + .map(v -> { + String val = v.getValue(); + return val == null || val.trim().isEmpty() ? BigDecimal.ZERO : new BigDecimal(val.trim()); + }) + .sorted() + .collect(Collectors.toList()); + + // 获取小数精度 + int elementScale = businessAssayProjectDataDO.getDecimalPosition(); + // 计算代表值(均值或差值) + BigDecimal representativeValue = calculateRepresentativeValue(sortedValues, elementScale); + + //设置判定值 + businessSubSampleAssessmentProjectDO.setAssessmentValue(representativeValue.toPlainString()); + + // 查找匹配的允差规则 + ConfigAssayMethodProjectAssessmentDO matchedRule = findMatchingRule(configAssayMethodProjectAssessmentDOList, representativeValue); + if (matchedRule == null) { + throw new ServiceException(1_032_100_000, "未找到超差判定区间范围,元素ID: " + dictionaryProjectId + ", 值: " + 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(1_032_100_000, "超差判定计算出错,检测项目ID: " + dictionaryProjectId); + } + + // 判断相邻差值是否超差 + 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) { + businessSubSampleAssessmentProjectDO.setAssessmentStatus(QmsCommonConstant.EXCEEDS_TOLERANCE); + //存在超差,设置为待判定 + businessSubSampleAssessmentDO.setReportedStatus(QmsCommonConstant.ASMT_PENDING_ASSESSMENT); + break; + } + } + + } + + //如果为自动上报, 并且上报状态为待上报的 + if (QmsCommonConstant.AUTOMATIC.equals(configSubSampleMethodDO.getResultTreatmentWay()) && QmsCommonConstant.ASMT_PENDING_REPORT.equals(businessSubSampleAssessmentDO.getReportedStatus())) { + automaticBusinessSubSampleAssessmentList.add(businessSubSampleAssessmentDO); + } + + } + + } else if (QmsCommonConstant.ASSAY_TYPE_DOUBLE_CUP.equals(businessAssayTaskDataDO.getAssayType())) { + + } else {//单杯 + //查询判定业务 BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = updateBusinessSubSampleAssessmentDOList.stream().filter(f -> f.getId().equals(businessAssayTaskDataDO.getBusinessSubSampleAssessmentId())).findFirst().orElse(null); if (businessSubSampleAssessmentDO == null) { businessSubSampleAssessmentDO = businessSubSampleAssessmentDOList.stream().filter(f -> f.getId().equals(businessAssayTaskDataDO.getBusinessSubSampleAssessmentId())).findFirst().orElse(null); updateBusinessSubSampleAssessmentDOList.add(businessSubSampleAssessmentDO); } - //状态设置为待上报 + //修改状态为待上报 businessSubSampleAssessmentDO.setReportedStatus(QmsCommonConstant.ASMT_PENDING_REPORT); + //查询分析项目 List businessAssayProjectDataDOList = businessAssayProjectDataMapper.selectList(new LambdaQueryWrapperX().in(BusinessAssayProjectDataDO::getBusinessAssayTaskDataId, businessAssayTaskDataIdList)); - Map> businessAssayProjectDataDOMap = businessAssayProjectDataDOList.stream().collect(Collectors.groupingBy(BusinessAssayProjectDataDO::getDictionaryProjectId)); - for (Map.Entry> businessAssayProjectDataDOEntry : businessAssayProjectDataDOMap.entrySet()) { - Long dictionaryProjectId = businessAssayProjectDataDOEntry.getKey(); - List val1 = businessAssayProjectDataDOEntry.getValue(); - BusinessAssayProjectDataDO businessAssayProjectDataDO = val1.get(0); - List configAssayMethodProjectAssessmentDOList = configAssayMethodProjectAssessmentMapper.selectByConfigBaseSampleIdAndConfigAssayMethodIdAndConfigAssayMethodProjectId(configSubSampleMethodDO.getConfigBaseSampleId(), businessAssayTaskDataDO.getConfigAssayMethodId(), businessAssayProjectDataDO.getConfigAssayMethodProjectId()); - + + for (BusinessAssayProjectDataDO businessAssayProjectDataDO : businessAssayProjectDataDOList) { + //查询判定结果数据 BusinessSubSampleAssessmentProjectDO businessSubSampleAssessmentProjectDO = businessSubSampleAssessmentProjectMapper.selectByBusinessSubSampleIdAndConfigAssayMethodIdAndConfigAssayMethodProjectId(businessSubSampleId, businessAssayTaskDataDO.getConfigAssayMethodId(), businessAssayProjectDataDO.getConfigAssayMethodProjectId()); if (businessSubSampleAssessmentProjectDO == null) { @@ -706,120 +816,26 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic businessSubSampleAssessmentProjectDO.setBusinessSubSampleAssessmentId(businessSubSampleAssessmentDO.getId()); businessSubSampleAssessmentProjectDO.setConfigAssayMethodId(businessAssayTaskDataDO.getConfigAssayMethodId()); businessSubSampleAssessmentProjectDO.setConfigAssayMethodProjectId(businessAssayProjectDataDO.getConfigAssayMethodProjectId()); - businessSubSampleAssessmentProjectDO.setDictionaryProjectId(dictionaryProjectId); + businessSubSampleAssessmentProjectDO.setDictionaryProjectId(businessAssayProjectDataDO.getDictionaryProjectId()); businessSubSampleAssessmentProjectDO.setDataType(businessAssayProjectDataDO.getDataType()); businessSubSampleAssessmentProjectDO.setDecimalPosition(businessAssayProjectDataDO.getDecimalPosition()); businessSubSampleAssessmentProjectDO.setAssayType(businessAssayTaskDataDO.getAssayType()); businessSubSampleAssessmentProjectDO.setTaskType(businessAssayTaskDataDO.getTaskType()); businessSubSampleAssessmentProjectDO.setUsage(businessAssayProjectDataDO.getUsage()); + businessSubSampleAssessmentProjectDO.setMinimumLimitValue(businessAssayProjectDataDO.getMinimumLimitValue()); businessSubSampleAssessmentProjectDO.setSymbol(businessAssayProjectDataDO.getSymbol()); businessSubSampleAssessmentProjectDO.setAssessmentStatus(QmsCommonConstant.NORMAL); - - // 排序并处理 null - List sortedValues = val1.stream() - .map(v -> { - String val = v.getValue(); - return val == null || val.trim().isEmpty() ? BigDecimal.ZERO : new BigDecimal(val.trim()); - }) - .sorted() - .collect(Collectors.toList()); - - // 获取小数精度 - int elementScale = businessAssayProjectDataDO.getDecimalPosition(); - // 计算代表值(均值或差值) - BigDecimal representativeValue = calculateRepresentativeValue(sortedValues, elementScale); - - //设置判定值 - businessSubSampleAssessmentProjectDO.setAssessmentValue(representativeValue.toPlainString()); - - // 查找匹配的允差规则 - ConfigAssayMethodProjectAssessmentDO matchedRule = findMatchingRule(configAssayMethodProjectAssessmentDOList, representativeValue); - if (matchedRule == null) { - throw new ServiceException(1_032_100_000, "未找到超差判定区间范围,元素ID: " + dictionaryProjectId + ", 值: " + 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(1_032_100_000, "超差判定计算出错,检测项目ID: " + dictionaryProjectId); - } - - // 判断相邻差值是否超差 - 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) { - businessSubSampleAssessmentProjectDO.setAssessmentStatus(QmsCommonConstant.EXCEEDS_TOLERANCE); - //存在超差,设置为待判定 - businessSubSampleAssessmentDO.setReportedStatus(QmsCommonConstant.ASMT_PENDING_ASSESSMENT); - break; - } - } - + businessSubSampleAssessmentProjectDO.setAssessmentValue(businessAssayProjectDataDO.getValue()); } - //如果为自动上报, 并且上报状态为待上报的 + + //如果为自动上报 if (QmsCommonConstant.AUTOMATIC.equals(configSubSampleMethodDO.getResultTreatmentWay()) && QmsCommonConstant.ASMT_PENDING_REPORT.equals(businessSubSampleAssessmentDO.getReportedStatus())) { - automaticBusinessSubSampleIdList.add(businessSubSampleId); + automaticBusinessSubSampleAssessmentList.add(businessSubSampleAssessmentDO); } - + } - - - } else if (QmsCommonConstant.ASSAY_TYPE_DOUBLE_CUP.equals(businessAssayTaskDataDO.getAssayType())) { - - } else {//单杯 - - - //查询判定业务 - BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = updateBusinessSubSampleAssessmentDOList.stream().filter(f -> f.getId().equals(businessAssayTaskDataDO.getBusinessSubSampleAssessmentId())).findFirst().orElse(null); - if (businessSubSampleAssessmentDO == null) { - businessSubSampleAssessmentDO = businessSubSampleAssessmentDOList.stream().filter(f -> f.getId().equals(businessAssayTaskDataDO.getBusinessSubSampleAssessmentId())).findFirst().orElse(null); - updateBusinessSubSampleAssessmentDOList.add(businessSubSampleAssessmentDO); - } - //修改状态为待上报 - businessSubSampleAssessmentDO.setReportedStatus(QmsCommonConstant.ASMT_PENDING_REPORT); - - //查询分析项目 - List businessAssayProjectDataDOList = businessAssayProjectDataMapper.selectList(new LambdaQueryWrapperX().in(BusinessAssayProjectDataDO::getBusinessAssayTaskDataId, businessAssayTaskDataIdList)); - - for (BusinessAssayProjectDataDO businessAssayProjectDataDO : businessAssayProjectDataDOList) { - - //查询判定结果数据 - BusinessSubSampleAssessmentProjectDO businessSubSampleAssessmentProjectDO = businessSubSampleAssessmentProjectMapper.selectByBusinessSubSampleIdAndConfigAssayMethodIdAndConfigAssayMethodProjectId(businessSubSampleId, businessAssayTaskDataDO.getConfigAssayMethodId(), businessAssayProjectDataDO.getConfigAssayMethodProjectId()); - if (businessSubSampleAssessmentProjectDO == null) { - businessSubSampleAssessmentProjectDO = new BusinessSubSampleAssessmentProjectDO(); - - saveBusinessSubSampleAssessmentProjectDOList.add(businessSubSampleAssessmentProjectDO); - } else { - updateBusinessSubSampleAssessmentProjectDOList.add(businessSubSampleAssessmentProjectDO); - } - businessSubSampleAssessmentProjectDO.setBusinessSubParentSampleId(businessAssayTaskDataDO.getBusinessSubParentSampleId()); - businessSubSampleAssessmentProjectDO.setBusinessSubSampleId(businessAssayTaskDataDO.getBusinessSubSampleId()); - businessSubSampleAssessmentProjectDO.setBusinessSubSampleAssessmentId(businessSubSampleAssessmentDO.getId()); - businessSubSampleAssessmentProjectDO.setConfigAssayMethodId(businessAssayTaskDataDO.getConfigAssayMethodId()); - businessSubSampleAssessmentProjectDO.setConfigAssayMethodProjectId(businessAssayProjectDataDO.getConfigAssayMethodProjectId()); - businessSubSampleAssessmentProjectDO.setDictionaryProjectId(businessAssayProjectDataDO.getDictionaryProjectId()); - businessSubSampleAssessmentProjectDO.setDataType(businessAssayProjectDataDO.getDataType()); - businessSubSampleAssessmentProjectDO.setDecimalPosition(businessAssayProjectDataDO.getDecimalPosition()); - businessSubSampleAssessmentProjectDO.setAssayType(businessAssayTaskDataDO.getAssayType()); - businessSubSampleAssessmentProjectDO.setTaskType(businessAssayTaskDataDO.getTaskType()); - businessSubSampleAssessmentProjectDO.setUsage(businessAssayProjectDataDO.getUsage()); - businessSubSampleAssessmentProjectDO.setMinimumLimitValue(businessAssayProjectDataDO.getMinimumLimitValue()); - businessSubSampleAssessmentProjectDO.setSymbol(businessAssayProjectDataDO.getSymbol()); - businessSubSampleAssessmentProjectDO.setAssessmentStatus(QmsCommonConstant.NORMAL); - businessSubSampleAssessmentProjectDO.setAssessmentValue(businessAssayProjectDataDO.getValue()); - } - - - //如果为自动上报 - if (QmsCommonConstant.AUTOMATIC.equals(configSubSampleMethodDO.getResultTreatmentWay())) { - automaticBusinessSubSampleIdList.add(businessSubSampleId); - } - - } } @@ -850,9 +866,9 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic } //执行自动上报 - if (automaticBusinessSubSampleIdList.size() > 0) { - for (Long automaticBusinessSubSampleId : automaticBusinessSubSampleIdList) { - this.assessmentDataReporting(automaticBusinessSubSampleId, businessAssayTaskDO.getConfigAssayMethodId()); + if (automaticBusinessSubSampleAssessmentList.size() > 0) { + for (BusinessSubSampleAssessmentDO automaticBusinessSubSampleAssessment : automaticBusinessSubSampleAssessmentList) { + this.assessmentDataReporting(automaticBusinessSubSampleAssessment.getBusinessSubSampleId(), businessAssayTaskDO.getConfigAssayMethodId(), automaticBusinessSubSampleAssessment.getRetestCount()); } } @@ -936,29 +952,29 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic @Override @Transactional(rollbackFor = Exception.class) - public void assessmentDataReporting(Long businessSubSampleId, Long configAssayMethodId) { + public void assessmentDataReporting(Long businessSubSampleId, Long configAssayMethodId, Integer retestCount) { //当前登录用户昵称 String nickName = SecurityFrameworkUtils.getLoginUserNickname(); - List unReportedList = businessAssayTaskDataMapper.selectIsReportedList(null, businessSubSampleId, configAssayMethodId, QmsCommonConstant.NO); + List unReportedList = businessAssayTaskDataMapper.selectIsReportedList(null, businessSubSampleId, configAssayMethodId, retestCount, QmsCommonConstant.NO); if (unReportedList.size() > 0) { throw new ServiceException(1_032_100_000, "存在未上报的数据"); } //自动上报 - List automaticBusinessSubParentSampleIdList = new ArrayList<>(); + List automaticBusinessSubParentSampleIdAndRetestCounts = new ArrayList<>(); List businessSubParentSampleAssessmentDOList = new ArrayList<>(); //分析任务已全部上报 - List reportedList = businessAssayTaskDataMapper.selectIsReportedList(null, businessSubSampleId, configAssayMethodId, QmsCommonConstant.YES); + List reportedList = businessAssayTaskDataMapper.selectIsReportedList(null, businessSubSampleId, configAssayMethodId, retestCount, QmsCommonConstant.YES); //判定结果 - List businessSubSampleAssessmentList = businessSubSampleAssessmentProjectMapper.selectByBusinessSubSampleIdAndConfigAssayMethodId(businessSubSampleId, configAssayMethodId); + List businessSubSampleAssessmentList = businessSubSampleAssessmentProjectMapper.selectByBusinessSubSampleIdAndConfigAssayMethodIdAndRetestCount(businessSubSampleId, configAssayMethodId, retestCount); List businessSubSampleAssessmentIdList = businessSubSampleAssessmentList.stream().map(m -> m.getId()).collect(Collectors.toList()); BusinessAssayTaskDataDO businessAssayTaskDataDO = reportedList.get(0); //查询主样 - BusinessBaseSampleDO businessBaseSampleDO = businessBaseSampleMapper.selectById(businessAssayTaskDataDO.getBusinessBaseSampleId()); + //BusinessBaseSampleDO businessBaseSampleDO = businessBaseSampleMapper.selectById(businessAssayTaskDataDO.getBusinessBaseSampleId()); //查询分样 BusinessSubParentSampleDO businessSubParentSampleDO = businessSubParentSampleMapper.selectById(businessAssayTaskDataDO.getBusinessSubParentSampleId()); @@ -967,10 +983,10 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic ConfigSubSampleParentMethodDO configSubSampleParentMethodDO = configSubSampleParentMethodMapper.selectByConfigSubSampleParentIdAndConfigAssayMethodId(businessSubParentSampleDO.getConfigSubSampleParentId(), configAssayMethodId); //子样判定 - BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = businessSubSampleAssessmentMapper.selectByBusinessSubSampleIdAndConfigAssayMethodId(businessSubSampleId, configAssayMethodId); + BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = businessSubSampleAssessmentMapper.selectByBusinessSubSampleIdAndConfigAssayMethodIdAndRetestCount(businessSubSampleId, configAssayMethodId, retestCount); //分样判定 - BusinessSubParentSampleAssessmentDO businessSubParentSampleAssessmentDO = businessSubParentSampleAssessmentMapper.selectByBusinessSubParentSampleIdAndConfigAssayMethodId(businessSubParentSampleDO.getId(), configAssayMethodId); + BusinessSubParentSampleAssessmentDO businessSubParentSampleAssessmentDO = businessSubParentSampleAssessmentMapper.selectByBusinessSubParentSampleIdAndConfigAssayMethodIdAndRetestCount(businessSubParentSampleDO.getId(), configAssayMethodId, retestCount); //循环判定值 BusinessSubParentSampleAssessmentProjectDO businessSubParentSampleAssessmentProjectDO = null; @@ -1014,9 +1030,9 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic .in(BusinessSubSampleAssessmentProjectDO::getId, businessSubSampleAssessmentIdList)); if (QmsCommonConstant.AUTOMATIC.equals(configSubSampleParentMethodDO.getResultTreatmentWay())) { - automaticBusinessSubParentSampleIdList.add(businessSubParentSampleDO.getId()); + automaticBusinessSubParentSampleIdAndRetestCounts.add(new BusinessSubParentSampleIdAndRetestCount(businessSubParentSampleDO.getId(), retestCount)); BatchResultDataReportingReqVO batchResultDataReportingReqVO = new BatchResultDataReportingReqVO(); - batchResultDataReportingReqVO.setBusinessSubParentSampleIds(automaticBusinessSubParentSampleIdList); + batchResultDataReportingReqVO.setBusinessSubParentSampleIdAndRetestCounts(automaticBusinessSubParentSampleIdAndRetestCounts); batchResultDataReportingReqVO.setConfigAssayMethodId(configAssayMethodId); sampleResultReportingService.batchResultDataReporting(batchResultDataReportingReqVO); @@ -1034,7 +1050,7 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic @Override @Transactional(rollbackFor = Exception.class) - public void createReAnalysis(Long businessSubSampleId, Long configAssayMethodId) { + public void createReAnalysis(Long businessSubSampleId, Long configAssayMethodId, Integer retestCount) { //子样数据 BusinessSubSampleDO businessSubSampleDO = businessSubSampleMapper.selectById(businessSubSampleId); @@ -1048,7 +1064,7 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic List newBusinessAssayProjectDataDOList = new ArrayList<>(); List newBusinessAssayParameterDataDOList = new ArrayList<>(); - BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = businessSubSampleAssessmentMapper.selectByBusinessSubSampleIdAndConfigAssayMethodId(businessSubSampleId, configAssayMethodId); + BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = businessSubSampleAssessmentMapper.selectByBusinessSubSampleIdAndConfigAssayMethodIdAndRetestCount(businessSubSampleId, configAssayMethodId, retestCount); BusinessAssayTaskDataDO newBusinessAssayTaskDataDO = null; List businessAssayTaskDataDOList = businessAssayTaskDataMapper.selectMaxRecheckCountByBusinessSubSampleIdAndConfigAssayMethodId(businessSubSampleId, configAssayMethodId); @@ -1112,7 +1128,7 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic //修改判定状态 //查询判定值 - List businessSubSampleAssessmentList = businessSubSampleAssessmentProjectMapper.selectByBusinessSubSampleIdAndConfigAssayMethodId(businessSubSampleId, configAssayMethodId); + List businessSubSampleAssessmentList = businessSubSampleAssessmentProjectMapper.selectByBusinessSubSampleIdAndConfigAssayMethodIdAndRetestCount(businessSubSampleId, configAssayMethodId, retestCount); for (BusinessSubSampleAssessmentProjectExtendRespVO businessSubSampleAssessmentProjectExtendRespVO : businessSubSampleAssessmentList) { businessSubSampleAssessmentProjectExtendRespVO.setAssessmentValue(null); businessSubSampleAssessmentProjectExtendRespVO.setAssessmentStatus(QmsCommonConstant.IN_PROGRESS); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleResultReportingServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleResultReportingServiceImpl.java index 8e07c8f..a93f54a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleResultReportingServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleResultReportingServiceImpl.java @@ -28,6 +28,7 @@ import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.security.core.LoginUser; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.module.qms.business.bus.controller.vo.BatchResultDataReportingReqVO; +import com.zt.plat.module.qms.business.bus.controller.vo.BatchResultDataReportingReqVO.BusinessSubParentSampleIdAndRetestCount; import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSubParentSampleAssessmentProjectExtendRespVO; import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSubParentSampleAssessmentGroupReqVO; import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSubParentSampleAssessmentGroupRespVO; @@ -571,6 +572,9 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe List saveBusinessAssayReportDataDOList = new ArrayList<>(); List updateBusinessAssayReportDataDOList = new ArrayList<>(); + List businessSubParentSampleAssessmentIdList = new ArrayList<>(); + List businessSubParentSampleAssessmentProjectIdList = new ArrayList<>(); + List businessSubParentSampleAssessmentExtendList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(reqVO.getBusinessSubParentSampleIds(), reqVO.getConfigAssayMethodId()); List businessSubParentSampleDOList = businessSubParentSampleMapper.selectByIds(reqVO.getBusinessSubParentSampleIds()); @@ -615,33 +619,43 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe if (StringUtils.isNotBlank(assayData)) { assayDataJson = JSON.parseObject(assayData, new TypeReference>() {}); } - //循环判定值 - List businessSubParentSampleAssessmentList = businessSubParentSampleAssessmentExtendList.stream().filter(f -> f.getBusinessSubParentSampleId().equals(businessSubParentSampleDO.getId()) && "normal".equals(f.getAssessmentStatus())).collect(Collectors.toList()); - for (BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessment : businessSubParentSampleAssessmentList) { - Long configAssayMethodProjectId = businessSubParentSampleAssessment.getConfigAssayMethodProjectId(); - List configProjectFeildList = configProjectList.stream().filter(f -> f.getConfigAssayMethodProjectId() != null && f.getConfigAssayMethodProjectId().equals(configAssayMethodProjectId)).collect(Collectors.toList()); - for (ConfigProjectExtendRespVO configProjectFeild : configProjectFeildList) { - //查询动态报表字段 - ConfigReportFieldDO configReportField = configReportFieldDynamicList.stream().filter(f -> f.getConfigReportTypeId().equals(configSampleReport.getConfigReportTypeId()) && f.getField().equals(configProjectFeild.getSaveColumn())).findFirst().orElse(null); + + //过滤分样id,根据多个复测次数处理 + List businessSubParentSampleIdAndRetestCountList = reqVO.getBusinessSubParentSampleIdAndRetestCounts().stream().filter(f -> f.getBusinessSubParentSampleId().equals(businessSubParentSampleDO.getId())).collect(Collectors.toList()); + for (BusinessSubParentSampleIdAndRetestCount businessSubParentSampleIdAndRetestCount : businessSubParentSampleIdAndRetestCountList) { + + //循环判定值 + List businessSubParentSampleAssessmentList = businessSubParentSampleAssessmentExtendList.stream().filter(f -> f.getBusinessSubParentSampleId().equals(businessSubParentSampleDO.getId()) && f.getRetestCount().equals(businessSubParentSampleIdAndRetestCount.getRetestCount()) && "normal".equals(f.getAssessmentStatus())).collect(Collectors.toList()); + for (BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessment : businessSubParentSampleAssessmentList) { + businessSubParentSampleAssessmentProjectIdList.add(businessSubParentSampleAssessment.getId()); + businessSubParentSampleAssessmentIdList.add(businessSubParentSampleAssessment.getBusinessSubParentSampleAssessmentId()); - if (configReportField == null) { - continue; - } - - ReportFieldValueData reportFieldValueData = new ReportFieldValueData(); - reportFieldValueData.setFieldName(configReportField.getFieldName()); - reportFieldValueData.setFieldValue(businessSubParentSampleAssessment.getAssessmentValue()); - reportFieldValueData.setDataType(configReportField.getDataType()); - reportFieldValueData.setDecimalPosition(configReportField.getDecimalPosition()); - reportFieldValueData.setMathSymbol(businessSubParentSampleAssessment.getSymbol()); - reportFieldValueData.setUnit(configProjectFeild.getDictionaryProjectUnit()); - reportFieldValueData.setUsage(businessSubParentSampleAssessment.getUsage()); - reportFieldValueData.setMinLimitValue(businessSubParentSampleAssessment.getMinimumLimitValue()); - reportFieldValueData.setMethodName(businessSubParentSampleAssessment.getConfigAssayMethodName()); - assayDataJson.put(configReportField.getField(), reportFieldValueData); - } + Long configAssayMethodProjectId = businessSubParentSampleAssessment.getConfigAssayMethodProjectId(); + List configProjectFeildList = configProjectList.stream().filter(f -> f.getConfigAssayMethodProjectId() != null && f.getConfigAssayMethodProjectId().equals(configAssayMethodProjectId)).collect(Collectors.toList()); + for (ConfigProjectExtendRespVO configProjectFeild : configProjectFeildList) { + //查询动态报表字段 + ConfigReportFieldDO configReportField = configReportFieldDynamicList.stream().filter(f -> f.getConfigReportTypeId().equals(configSampleReport.getConfigReportTypeId()) && f.getField().equals(configProjectFeild.getSaveColumn())).findFirst().orElse(null); + + if (configReportField == null) { + continue; + } + + ReportFieldValueData reportFieldValueData = new ReportFieldValueData(); + reportFieldValueData.setFieldName(configReportField.getFieldName()); + reportFieldValueData.setFieldValue(businessSubParentSampleAssessment.getAssessmentValue()); + reportFieldValueData.setDataType(configReportField.getDataType()); + reportFieldValueData.setDecimalPosition(configReportField.getDecimalPosition()); + reportFieldValueData.setMathSymbol(businessSubParentSampleAssessment.getSymbol()); + reportFieldValueData.setUnit(configProjectFeild.getDictionaryProjectUnit()); + reportFieldValueData.setUsage(businessSubParentSampleAssessment.getUsage()); + reportFieldValueData.setMinLimitValue(businessSubParentSampleAssessment.getMinimumLimitValue()); + reportFieldValueData.setMethodName(businessSubParentSampleAssessment.getConfigAssayMethodName()); + assayDataJson.put(configReportField.getField(), reportFieldValueData); + } + } } + //修改已上报数据来源 String dataSource = businessAssayReportDataDO.getDataSource(); Set dataSources = StringUtils.isBlank(dataSource) ? new HashSet<>() : new HashSet<>(Arrays.asList(dataSource.split(","))); @@ -726,8 +740,9 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe //查询当前分析部门下的子样分析班组信息 List businessSubSampleAnalysisGroupDOList = businessSubSampleAnalysisGroupMapper.selectByBusinessSubParentSampleIdsAndAssayDepartmentId(reqVO.getBusinessSubParentSampleIds(), configAssayMethodDO.getAssayDepartmentId()); for (BusinessSubSampleAnalysisGroupDO businessSubSampleAnalysisGroupDO : businessSubSampleAnalysisGroupDOList) {//循环分析班组信息 - //查询当前分样判定上报未上报的,并排除当前上报的方法,的数量 - long count = businessSubParentSampleAssessmentDOList.stream().filter(f -> f.getBusinessSubParentSampleId().equals(businessSubSampleAnalysisGroupDO.getBusinessSubParentSampleId()) && !f.getConfigAssayMethodId().equals(reqVO.getConfigAssayMethodId()) && f.getIsReported().equals(QmsCommonConstant.NO)).count(); + //查询当前分样判定上报未上报的,并排除当前(上报方法和复测次数),的数量 + List retestCountList = reqVO.getBusinessSubParentSampleIdAndRetestCounts().stream().filter(f -> f.getBusinessSubParentSampleId().equals(businessSubSampleAnalysisGroupDO.getBusinessSubParentSampleId())).map(m -> m.getRetestCount()).collect(Collectors.toList()); + long count = businessSubParentSampleAssessmentDOList.stream().filter(f -> f.getBusinessSubParentSampleId().equals(businessSubSampleAnalysisGroupDO.getBusinessSubParentSampleId()) && !( f.getConfigAssayMethodId().equals(reqVO.getConfigAssayMethodId()) && retestCountList.contains(f.getRetestCount()) ) && f.getIsReported().equals(QmsCommonConstant.NO)).count(); if (count > 0) {//如果还存在未上报的数据,则继续 continue; } @@ -776,35 +791,20 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe } //查询正常上报的 - List businessSubParentSampleAssessmentIdList = businessSubParentSampleAssessmentExtendList.stream().filter(f -> "normal".equals(f.getAssessmentStatus())).map(m -> m.getId()).collect(Collectors.toList()); - //查询未上报的分样主id -// List noAllReportBusinessSubParentSampleIdList = businessSubParentSampleAssessmentExtendList.stream().filter(f -> "in_progress".equals(f.getAssessmentStatus())).map(m -> m.getBusinessSubParentSampleId()).distinct().collect(Collectors.toList()); - //全部上报的 -// List allReportBusinessSubParentSampleIdList = new ArrayList<>(); -// if (noAllReportBusinessSubParentSampleIdList != null) { -// allReportBusinessSubParentSampleIdList = reqVO.getBusinessSubParentSampleIds().stream().filter(item -> !noAllReportBusinessSubParentSampleIdList.contains(item)).collect(Collectors.toList()); -// } +// List businessSubParentSampleAssessmentIdList = businessSubParentSampleAssessmentExtendList.stream().filter(f -> "normal".equals(f.getAssessmentStatus()) ).map(m -> m.getId()).collect(Collectors.toList()); businessSubParentSampleAssessmentProjectMapper.update(new LambdaUpdateWrapper() .set(BusinessSubParentSampleAssessmentProjectDO::getIsReported, QmsCommonConstant.YES) .set(BusinessSubParentSampleAssessmentProjectDO::getReporter, nickName) .set(BusinessSubParentSampleAssessmentProjectDO::getReportTime, LocalDateTime.now()) - .in(BusinessSubParentSampleAssessmentProjectDO::getId, businessSubParentSampleAssessmentIdList)); + .in(BusinessSubParentSampleAssessmentProjectDO::getId, businessSubParentSampleAssessmentProjectIdList)); + -// if (allReportBusinessSubParentSampleIdList.size() > 0) { -// businessSubParentSampleAssessmentMapper.update(new LambdaUpdateWrapper() -// .set(BusinessSubParentSampleAssessmentDO::getIsReported, QmsCommonConstant.YES) -// .set(BusinessSubParentSampleAssessmentDO::getReporter, nickName) -// .set(BusinessSubParentSampleAssessmentDO::getReportTime, LocalDateTime.now()) -// .in(BusinessSubParentSampleAssessmentDO::getBusinessSubParentSampleId, allReportBusinessSubParentSampleIdList) -// .eq(BusinessSubParentSampleAssessmentDO::getConfigAssayMethodId, reqVO.getConfigAssayMethodId())); -// } businessSubParentSampleAssessmentMapper.update(new LambdaUpdateWrapper() .set(BusinessSubParentSampleAssessmentDO::getIsReported, QmsCommonConstant.YES) .set(BusinessSubParentSampleAssessmentDO::getReporter, nickName) .set(BusinessSubParentSampleAssessmentDO::getReportTime, LocalDateTime.now()) - .in(BusinessSubParentSampleAssessmentDO::getBusinessSubParentSampleId, reqVO.getBusinessSubParentSampleIds()) - .eq(BusinessSubParentSampleAssessmentDO::getConfigAssayMethodId, reqVO.getConfigAssayMethodId())); + .in(BusinessSubParentSampleAssessmentDO::getId, businessSubParentSampleAssessmentIdList)); if (updatebBusinessSampleEntrustRegistrationDOList.size() > 0) { businessSampleEntrustRegistrationMapper.updateBatch(updatebBusinessSampleEntrustRegistrationDOList); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleTaskAssignServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleTaskAssignServiceImpl.java index f1db901..915adac 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleTaskAssignServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleTaskAssignServiceImpl.java @@ -353,7 +353,7 @@ public class SampleTaskAssignServiceImpl implements SampleTaskAssignService { //如果当前分析方法不等于要变更的方法 if (!businessSubParentSampleAssessment.getConfigAssayMethodId().equals(changeConfigAssayMethodId)) { //查询是否已有要变更的方法的分样判定 - BusinessSubParentSampleAssessmentDO businessSubParentSampleAssessmentDO = businessSubParentSampleAssessmentMapper.selectByBusinessSubParentSampleIdAndConfigAssayMethodId(businessSubParentSampleAssessment.getBusinessSubParentSampleId(), changeConfigAssayMethodId); + BusinessSubParentSampleAssessmentDO businessSubParentSampleAssessmentDO = businessSubParentSampleAssessmentMapper.selectByBusinessSubParentSampleIdAndConfigAssayMethodIdAndRetestCount(businessSubParentSampleAssessment.getBusinessSubParentSampleId(), changeConfigAssayMethodId, businessSubParentSampleAssessment.getRetestCount()); if (businessSubParentSampleAssessmentDO == null) {//不存在 //根据变更方法过滤出检测项目 List projectIdList = changeConfigAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(changeConfigAssayMethodId)).map(m -> m.getDictionaryProjectId()).distinct().collect(Collectors.toList());