From a8330ade63d1c2bdd523942fb353f3a30fa96a87 Mon Sep 17 00:00:00 2001 From: wxr Date: Mon, 2 Feb 2026 17:54:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=8F=98=E6=9B=B4=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/AssayMethodProjectRespVO.java | 2 + .../service/SampleTaskAssignServiceImpl.java | 508 +++++++++++++++++- .../ConfigAssayMethodProjectExtendRespVO.java | 3 + .../mapper/ConfigSubSampleMethodMapper.java | 13 + .../mapper/BusinessAssayProjectDataMapper.xml | 2 + 5 files changed, 527 insertions(+), 1 deletion(-) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/AssayMethodProjectRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/AssayMethodProjectRespVO.java index 95fba2d..0b46229 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/AssayMethodProjectRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/AssayMethodProjectRespVO.java @@ -17,6 +17,8 @@ public class AssayMethodProjectRespVO { private String dictionaryProjectShowName; + private String assayType; + private Long configAssayMethodId; private String configAssayMethodName; 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 915adac..3bd02e4 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 @@ -3,6 +3,9 @@ package com.zt.plat.module.qms.business.bus.service; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; @@ -237,6 +240,9 @@ public class SampleTaskAssignServiceImpl implements SampleTaskAssignService { //查询子样分析方法及检测项目 // List configAssayMethodProjectList = configAssayMethodProjectMapper.selectByConfigSubSampleIdsAndAssayDepartmentId(configSubSampleIdList, visitDeptId); + //根据样品大类,查询所有子样方法 + List configSubSampleMethodList = configSubSampleMethodMapper.selectByBaseSampleId(baseSampleId); + //查询分析方法检测项目 List list = businessAssayProjectDataMapper.selectAssayMethodProjectByBusinessSubSampleIdListAndConfigAssayMethodId(businessSubSampleIdList, configAssayMethodId); @@ -246,9 +252,15 @@ public class SampleTaskAssignServiceImpl implements SampleTaskAssignService { for (AssayMethodProjectRespVO assayMethodProject : list) { List methodList = materialAssayStandardMethodList.stream().filter(f -> assayMethodProject.getDictionaryProjectId().equals(f.getDictionaryProjectId())).map(m -> { + ConfigSubSampleMethodExtendRespVO configSubSampleMethodExtend = configSubSampleMethodList.stream().filter(f -> m.getConfigAssayMethodId().equals(f.getConfigAssayMethodId())).findFirst().orElse(null); + String assayType = configSubSampleMethodExtend.getTaskCount() > 1 ? QmsCommonConstant.ASSAY_TYPE_SINGLE_PARALLEL : QmsCommonConstant.ASSAY_TYPE_SINGLE_CUP; + if (m.getIsDualCup().equals(1)) { + assayType = QmsCommonConstant.ASSAY_TYPE_DOUBLE_CUP; + } ConfigAssayMethodProjectExtendRespVO configAssayMethod = new ConfigAssayMethodProjectExtendRespVO(); configAssayMethod.setConfigAssayMethodId(m.getConfigAssayMethodId()); configAssayMethod.setConfigAssayMethodName(m.getConfigAssayMethodName()); + configAssayMethod.setAssayType(assayType); configAssayMethod.setConfigAssayMethodNameAndCategory(m.getConfigAssayMethodNameAndCategory()); return configAssayMethod; }).collect(Collectors.toList()); @@ -258,6 +270,499 @@ public class SampleTaskAssignServiceImpl implements SampleTaskAssignService { } + @Override + @Transactional(rollbackFor = Exception.class) + public void changeMethod(ChangeAssayMethodReqVO req) { + List businessSubSampleIdList = req.getBusinessSubSampleIdList(); + Long configAssayMethodId = req.getConfigAssayMethodId(); + List changeConfigAssayMethodProjectList = req.getChangeConfigAssayMethodProjectList(); + + // 先按 configAssayMethodId 分组 + Map> groupedByConfigId = changeConfigAssayMethodProjectList.stream() + .collect(Collectors.groupingBy(AssayMethodProjectRespVO::getConfigAssayMethodId)); + + // 遍历每个分组,检查 assayType 是否唯一 + for (Map.Entry> entry : groupedByConfigId.entrySet()) { + List group = entry.getValue(); + + // 获取该组所有非空的 assayType(去重) + Set assayTypes = group.stream() + .map(AssayMethodProjectRespVO::getAssayType) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + if (assayTypes.size() > 1) { + // 取第一个元素的 configAssayMethodNameAndCategory 作为代表(假设同 configId 下名称一致) + String methodName = group.get(0).getConfigAssayMethodNameAndCategory(); + if (methodName == null || methodName.trim().isEmpty()) { + methodName = "(未命名)"; + } + + throw new ServiceException(1_032_050_000, + String.format("检测方法“%s”存在多种分析类型:%s,请确保同一检测方法仅对应一种分析类型。", + methodName, + assayTypes.stream().sorted().collect(Collectors.joining(", ")) + ) + ); + } + } + + List changeConfigAssayMethodIdList = changeConfigAssayMethodProjectList.stream().map(m -> m.getConfigAssayMethodId()).distinct().collect(Collectors.toList()); + + LocalDateTime currentDateTime = LocalDateTime.now(); + + //需要更新的报表数据 + List updateBusinessAssayReportDataDOList = new ArrayList<>(); + + //需要更新的分析任务 + List updateBusinessAssayTaskDataDOList = new ArrayList<>(); + //需要更新的分析任务检测项目 + List updateBusinessAssayProjectDataDOList = new ArrayList<>(); + //需要更新的分析任务检测项目参数 + List updateBusinessAssayParameterDataDOList = new ArrayList<>(); + + //需要更新的子样判定 + List updateBusinessSubSampleAssessmentDOList = new ArrayList<>(); + + //需要更新的分样判定 + List updateBusinessSubParentSampleAssessmentDOList = new ArrayList<>(); + + //需要新建的分析任务 + List saveBusinessAssayTaskDataDOList = new ArrayList<>(); + //需要新建的分析任务检测项目 + List saveBusinessAssayProjectDataDOList = new ArrayList<>(); + //需要新建的分析任务检测项目参数 + List saveBusinessAssayParameterDataDOList = new ArrayList<>(); + + //需要新建的子样判定 + List saveBusinessSubSampleAssessmentDOList = new ArrayList<>(); + + //需要新建的分样判定 + List saveBusinessSubParentSampleAssessmentDOList = new ArrayList<>(); + + //需要删除的分析任务 + List removeAssayTaskDataIdList = new ArrayList<>(); + //需要删除的分析任务检测项目 + List removeAssayProjectIdList = new ArrayList<>(); + //需要删除的分析任务检测项目参数 + List removeAssayParameterIdList = new ArrayList<>(); + + //需要删除的子样判定 + List removeSubSampleAssessmentIdList = new ArrayList<>(); + + //需要删除的分样判定 + List removeSubParentSampleAssessmentIdList = new ArrayList<>(); + + //查询子样 + List businessSubSampleDOList = businessSubSampleMapper.selectByIds(businessSubSampleIdList); + List businessBaseSampleIdList = businessSubSampleDOList.stream().map(m -> m.getBusinessBaseSampleId()).distinct().collect(Collectors.toList()); + List businessSubParentSampleIdList = businessSubSampleDOList.stream().map(m -> m.getBusinessSubParentSampleId()).distinct().collect(Collectors.toList()); + List configSubSampleIdList = businessSubSampleDOList.stream().map(m -> m.getConfigSubSampleId()).distinct().collect(Collectors.toList()); + //查询检测任务 (通过分样id,可以查询双杯样的) + List businessAssayTaskDataDOList = businessAssayTaskDataMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIdList, configAssayMethodId); + + boolean disabled = businessAssayTaskDataDOList.stream().anyMatch(m -> m.getIsAssignTasked().equals(QmsCommonConstant.YES)); + if (disabled) { + throw new ServiceException(1_032_001_000, "当前样品存在已分配任务,不允许修改分析方法"); + } + + List businessAssayTaskDataIdList = businessAssayTaskDataDOList.stream().map(m -> m.getId()).collect(Collectors.toList()); + //查询检测任务的检测项目 + List businessAssayProjectDataList = businessAssayProjectDataMapper.selectByBusinessAssayTaskDataIds(businessAssayTaskDataIdList); + List businessAssayProjectDataIdList = businessAssayProjectDataList.stream().map(m -> m.getId()).collect(Collectors.toList()); + //查询检测任务的检测项目的参数 + List businessAssayParameterDataDOList = businessAssayParameterDataMapper.selectByBusinessAssayProjectDataIds(businessAssayProjectDataIdList); + + //查询子样判定 (通过分样id,可以查询双杯样的) + List businessSubSampleAssessmentDOList = businessSubSampleAssessmentMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIdList, configAssayMethodId); + + //查询分样判定 + List businessSubParentSampleAssessmentList = businessSubParentSampleAssessmentMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIdList, configAssayMethodId); + + //查询要变更的分析方法配置 + List configAssayMethodDOList = configAssayMethodMapper.selectByIds(changeConfigAssayMethodIdList); + //分析方法检测项目配置 + List configAssayMethodProjectList = configAssayMethodProjectMapper.selectByConfigAssayMethodIds(changeConfigAssayMethodIdList); + //分析方法检测项目参数配置 + List configAssayMethodProjectParameterList = configAssayMethodProjectParameterMapper.selectByConfigAssayMethodIds(changeConfigAssayMethodIdList); + //查询要变更的子样及分析方法配置 + List configSubSampleMethodList = configSubSampleMethodMapper.selectByConfigSubSampleIdsAndConfigAssayMethodIds(configSubSampleIdList, changeConfigAssayMethodIdList); + + //循环分样判定 + for (BusinessSubParentSampleAssessmentExtendRespVO businessSubParentSampleAssessment : businessSubParentSampleAssessmentList) { + + //循环变更的分析方法 + for (Long changeConfigAssayMethodId : changeConfigAssayMethodIdList) { + //如果当前分析方法不等于要变更的方法 + if (!businessSubParentSampleAssessment.getConfigAssayMethodId().equals(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()); + //分析类型 + String changeAssayType = changeConfigAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(changeConfigAssayMethodId)).map(m -> m.getAssayType()).distinct().findFirst().orElse(null); + + + //查询分析方法 + ConfigAssayMethodDO configAssayMethodDO = configAssayMethodDOList.stream().filter(f -> f.getId().equals(changeConfigAssayMethodId)).findFirst().orElse(null); + //查询子样分析方法 + ConfigSubSampleMethodExtendRespVO configSubSampleMethod = configSubSampleMethodList.stream().filter(f -> f.getConfigSubSampleParentId().equals(businessSubParentSampleAssessment.getConfigSubSampleParentId()) && f.getConfigAssayMethodId().equals(changeConfigAssayMethodId)).findFirst().orElse(null); + switch (changeAssayType) {//根据前端传入的分析类型,修改子样分析方法中的分析任务数 + case QmsCommonConstant.ASSAY_TYPE_SINGLE_PARALLEL: { + configSubSampleMethod.setTaskCount(2);//平行 + } + default: + configSubSampleMethod.setTaskCount(1);//单杯 + } + + + //根据任务数判断是平行还是 + String assayType = configSubSampleMethod.getTaskCount() > 1 ? QmsCommonConstant.ASSAY_TYPE_SINGLE_PARALLEL : QmsCommonConstant.ASSAY_TYPE_SINGLE_CUP; + + businessSubParentSampleAssessmentDO = new BusinessSubParentSampleAssessmentDO(); + businessSubParentSampleAssessmentDO.setId(IdWorker.getId()); + businessSubParentSampleAssessmentDO.setBusinessSubParentSampleId(businessSubParentSampleAssessment.getBusinessSubParentSampleId()); + businessSubParentSampleAssessmentDO.setConfigAssayMethodId(changeConfigAssayMethodId); + businessSubParentSampleAssessmentDO.setAssayType(assayType); + businessSubParentSampleAssessmentDO.setTaskType("常规"); + saveBusinessSubParentSampleAssessmentDOList.add(businessSubParentSampleAssessmentDO); + + BusinessSubSampleDO businessSubSampleDO = null; + if (!QmsCommonConstant.ASSAY_TYPE_DOUBLE_CUP.equals(businessSubParentSampleAssessment.getAssayType())) {//如果不为双杯样 + businessSubSampleDO = businessSubSampleDOList.stream().filter(f -> f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).findFirst().orElse(null); + } + + //子样判定数据 + BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = new BusinessSubSampleAssessmentDO(); + businessSubSampleAssessmentDO.setId(IdWorker.getId()); + businessSubSampleAssessmentDO.setBusinessBaseSampleId(businessSubParentSampleAssessment.getBusinessBaseSampleId()); + businessSubSampleAssessmentDO.setBusinessSubParentSampleId(businessSubParentSampleAssessment.getBusinessSubParentSampleId()); + businessSubSampleAssessmentDO.setBusinessSubParentSampleAssessmentId(businessSubParentSampleAssessmentDO.getId()); + if (businessSubSampleDO != null) { + businessSubSampleAssessmentDO.setBusinessSubSampleId(businessSubSampleDO.getId()); + } + businessSubSampleAssessmentDO.setConfigAssayMethodId(changeConfigAssayMethodId); + businessSubSampleAssessmentDO.setAssayType(assayType); + businessSubSampleAssessmentDO.setTaskType("常规"); + + saveBusinessSubSampleAssessmentDOList.add(businessSubSampleAssessmentDO); + + //查询旧的检测项目 + List oldBusinessAssayProjectDataIdList = businessAssayProjectDataList.stream().filter(f -> projectIdList.contains(f.getDictionaryProjectId()) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).map(m -> m.getId()).collect(Collectors.toList()); + //添加到删除列表 + removeAssayProjectIdList.addAll(oldBusinessAssayProjectDataIdList); + List oldBusinessAssayParameterDataIdList = businessAssayParameterDataDOList.stream().filter(f -> oldBusinessAssayProjectDataIdList.contains(f.getBusinessAssayProjectDataId())).map(m -> m.getId()).collect(Collectors.toList()); + removeAssayParameterIdList.addAll(oldBusinessAssayParameterDataIdList); + if (projectIdList.size() == changeConfigAssayMethodProjectList.size()) { + //查询旧的检测任务 + List oldBusinessAssayTaskDataIdList = businessAssayTaskDataDOList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodId) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).map(m -> m.getId()).collect(Collectors.toList()); + //添加到删除列表 + removeAssayTaskDataIdList.addAll(oldBusinessAssayTaskDataIdList); + //查询旧的子样判定 + List oldBusinessSubSampleAssesmentIdList = businessSubSampleAssessmentDOList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodId) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).map(m -> m.getId()).collect(Collectors.toList()); + //添加到删除列表 + removeSubSampleAssessmentIdList.addAll(oldBusinessSubSampleAssesmentIdList); + + //添加到删除列表 + removeSubParentSampleAssessmentIdList.add(businessSubParentSampleAssessment.getId()); + } else { + List projectShowNameList = changeConfigAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodId)).map(m -> m.getDictionaryProjectShowName()).distinct().collect(Collectors.toList()); + //查询旧的检测任务 + List oldBusinessAssayTaskDataList = businessAssayTaskDataDOList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodId) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).collect(Collectors.toList()); + for (BusinessAssayTaskDataDO oldBusinessAssayTaskData : oldBusinessAssayTaskDataList) { + boolean isAdd = updateBusinessAssayTaskDataDOList.stream().anyMatch(m -> m.getId().equals(oldBusinessAssayTaskData.getId())); + if (!isAdd) {//如果未添加过更新,则修改检测项目并添加更新 + oldBusinessAssayTaskData.setAssayProject(CollUtil.join(projectShowNameList, ",")); + updateBusinessAssayTaskDataDOList.add(oldBusinessAssayTaskData); + } + } + } + + BusinessAssayTaskDataDO oldBusinessAssayTaskDataDO = businessAssayTaskDataDOList.stream().filter(f -> f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).findFirst().orElse(null); + + //根据检测方法循环 + BusinessAssayTaskDataDO businessAssayTaskDataDO = null; + //根据任务数循环 + for (int i = 0; i < configSubSampleMethod.getTaskCount(); i++) { + //子样检测任务 + businessAssayTaskDataDO = new BusinessAssayTaskDataDO(); + businessAssayTaskDataDO.setId(IdWorker.getId()); + businessAssayTaskDataDO.setBusinessBaseSampleId(businessSubSampleDO.getBusinessBaseSampleId()); + businessAssayTaskDataDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId()); + businessAssayTaskDataDO.setBusinessSubSampleId(businessSubSampleDO.getId()); + businessAssayTaskDataDO.setBusinessSubSampleAssessmentId(businessSubSampleAssessmentDO.getId());//子样判定id + businessAssayTaskDataDO.setConfigAssayMethodId(changeConfigAssayMethodId); + businessAssayTaskDataDO.setAssayType(assayType); + businessAssayTaskDataDO.setTaskType("常规"); + businessAssayTaskDataDO.setConfigSampleFlowId(oldBusinessAssayTaskDataDO.getConfigSampleFlowId()); + businessAssayTaskDataDO.setSampleFlowNodeKey(oldBusinessAssayTaskDataDO.getSampleFlowNodeKey()); + businessAssayTaskDataDO.setSampleFlowNodeTime(currentDateTime); + businessAssayTaskDataDO.setAssayDepartmentId(configAssayMethodDO.getAssayDepartmentId()); + businessAssayTaskDataDO.setAssayDepartmentName(configAssayMethodDO.getAssayDepartmentName()); + + List configAssayMethodProjectDOList = configAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(changeConfigAssayMethodId)).collect(Collectors.toList()); + + StringBuilder assayProjectBuilder = new StringBuilder(); + + for (ConfigAssayMethodProjectExtendRespVO configAssayMethodProjectDO : configAssayMethodProjectDOList) { + + //如果当前分析方法的项目不在当前检测项目中,则跳出循环继续 + if (!projectIdList.contains(configAssayMethodProjectDO.getDictionaryProjectId())) { + continue; + } + + assayProjectBuilder.append(configAssayMethodProjectDO.getShowName()).append(","); + + + //检测项目 + BusinessAssayProjectDataDO businessAssayProjectDataDO = new BusinessAssayProjectDataDO(); + businessAssayProjectDataDO.setId(IdWorker.getId()); + businessAssayProjectDataDO.setBusinessAssayTaskDataId(businessAssayTaskDataDO.getId()); + businessAssayProjectDataDO.setConfigAssayMethodProjectId(configAssayMethodProjectDO.getId()); + businessAssayProjectDataDO.setDictionaryProjectId(configAssayMethodProjectDO.getDictionaryProjectId()); + businessAssayProjectDataDO.setDataType(configAssayMethodProjectDO.getDataType()); + businessAssayProjectDataDO.setDecimalPosition(configAssayMethodProjectDO.getDecimalPosition()); + businessAssayProjectDataDO.setUsage(QmsCommonConstant.ASSAY_PROJECT_USAGE_REPORT); + businessAssayProjectDataDO.setMinimumLimitValue(configAssayMethodProjectDO.getMinimumLimitValue()); + businessAssayProjectDataDO.setIsEnabled(QmsCommonConstant.YES); + businessAssayProjectDataDO.setIsNotAssessment(QmsCommonConstant.NO); + + saveBusinessAssayProjectDataDOList.add(businessAssayProjectDataDO); + + List configAssayMethodProjectParameterDOList = configAssayMethodProjectParameterList.stream().filter(f -> f.getConfigAssayMethodProjectId().equals(configAssayMethodProjectDO.getId())).collect(Collectors.toList()); + for (ConfigAssayMethodProjectParameterDO configAssayMethodProjectParameterDO : configAssayMethodProjectParameterDOList) { + BusinessAssayParameterDataDO businessAssayParameterDataDO = new BusinessAssayParameterDataDO(); + businessAssayParameterDataDO.setId(IdWorker.getId()); + businessAssayParameterDataDO.setConfigAssayMethodProjectParameterId(configAssayMethodProjectParameterDO.getId()); + businessAssayParameterDataDO.setBusinessAssayProjectDataId(businessAssayProjectDataDO.getId()); + businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId()); + businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType()); + businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition()); + + saveBusinessAssayParameterDataDOList.add(businessAssayParameterDataDO); + } + } + if (assayProjectBuilder.length() > 1) { + assayProjectBuilder.delete(assayProjectBuilder.length() - 1 , assayProjectBuilder.length()); + } + businessAssayTaskDataDO.setAssayProject(assayProjectBuilder.toString()); + saveBusinessAssayTaskDataDOList.add(businessAssayTaskDataDO); + } + + } else {//已存在 + //分析类型 + String changeAssayType = changeConfigAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(changeConfigAssayMethodId)).map(m -> m.getAssayType()).distinct().findFirst().orElse(null); + if (!businessSubParentSampleAssessmentDO.getAssayType().equals(changeAssayType)) { + String configAssayMethodNameAndCategory = changeConfigAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(changeConfigAssayMethodId)).map(m -> m.getConfigAssayMethodNameAndCategory()).distinct().findFirst().orElse(null); + throw new ServiceException(1_032_001_000, "检测方法“"+configAssayMethodNameAndCategory+"”,存在与当前分析类型不同的分析任务!"); + } + + //根据变更方法过滤出检测项目 + List projectIdList = changeConfigAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(changeConfigAssayMethodId)).map(m -> m.getDictionaryProjectId()).distinct().collect(Collectors.toList()); + + //查询分析方法 + //ConfigAssayMethodDO configAssayMethodDO = configAssayMethodDOList.stream().filter(f -> f.getId().equals(changeConfigAssayMethodId)).findFirst().orElse(null); + //查询子样分析方法 + //ConfigSubSampleMethodExtendRespVO configSubSampleMethod = configSubSampleMethodList.stream().filter(f -> f.getConfigSubSampleParentId().equals(businessSubParentSampleAssessment.getConfigSubSampleParentId()) && f.getConfigAssayMethodId().equals(changeConfigAssayMethodId)).findFirst().orElse(null); + + //根据任务数判断是平行还是 + //String assayType = configSubSampleMethod.getTaskCount() > 1 ? QmsCommonConstant.ASSAY_TYPE_SINGLE_PARALLEL : QmsCommonConstant.ASSAY_TYPE_SINGLE_CUP; + + //查询子样判定 + //BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = businessSubSampleAssessmentMapper.selectByBusinessSubParentSampleIdAndConfigAssayMethodId(businessSubParentSampleAssessmentDO.getBusinessSubParentSampleId(), changeConfigAssayMethodId); + + //查询旧的检测项目 + List oldBusinessAssayProjectDataIdList = businessAssayProjectDataList.stream().filter(f -> projectIdList.contains(f.getDictionaryProjectId()) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).map(m -> m.getId()).collect(Collectors.toList()); + //添加到删除列表 + removeAssayProjectIdList.addAll(oldBusinessAssayProjectDataIdList); + List oldBusinessAssayParameterDataIdList = businessAssayParameterDataDOList.stream().filter(f -> oldBusinessAssayProjectDataIdList.contains(f.getBusinessAssayProjectDataId())).map(m -> m.getId()).collect(Collectors.toList()); + removeAssayParameterIdList.addAll(oldBusinessAssayParameterDataIdList); + if (projectIdList.size() == changeConfigAssayMethodProjectList.size()) { + //查询旧的检测任务 + List oldBusinessAssayTaskDataIdList = businessAssayTaskDataDOList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodId) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).map(m -> m.getId()).collect(Collectors.toList()); + //添加到删除列表 + removeAssayTaskDataIdList.addAll(oldBusinessAssayTaskDataIdList); + //查询旧的子样判定 + List oldBusinessSubSampleAssesmentIdList = businessSubSampleAssessmentDOList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodId) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).map(m -> m.getId()).collect(Collectors.toList()); + //添加到删除列表 + removeSubSampleAssessmentIdList.addAll(oldBusinessSubSampleAssesmentIdList); + + //添加到删除列表 + removeSubParentSampleAssessmentIdList.add(businessSubParentSampleAssessment.getId()); + } else { + List projectShowNameList = changeConfigAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodId)).map(m -> m.getDictionaryProjectShowName()).distinct().collect(Collectors.toList()); + //查询旧的检测任务 + List oldBusinessAssayTaskDataList = businessAssayTaskDataDOList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodId) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).collect(Collectors.toList()); + for (BusinessAssayTaskDataDO oldBusinessAssayTaskData : oldBusinessAssayTaskDataList) { + boolean isAdd = updateBusinessAssayTaskDataDOList.stream().anyMatch(m -> m.getId().equals(oldBusinessAssayTaskData.getId())); + if (!isAdd) {//如果未添加过更新,则修改检测项目并添加更新 + oldBusinessAssayTaskData.setAssayProject(CollUtil.join(projectShowNameList, ",")); + updateBusinessAssayTaskDataDOList.add(oldBusinessAssayTaskData); + } + } + } + + //查询当前存在的分析任务 + List currBusinessAssayTaskDataDOList = businessAssayTaskDataMapper.selectByBusinessSubParentSampleIdAndConfigAssayMethodId(businessSubParentSampleAssessmentDO.getBusinessSubParentSampleId(), changeConfigAssayMethodId); + + //当前存在的分析任务循环 + for (BusinessAssayTaskDataDO businessAssayTaskDataDO : currBusinessAssayTaskDataDOList) { + + List configAssayMethodProjectDOList = configAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(changeConfigAssayMethodId)).collect(Collectors.toList()); + + StringBuilder assayProjectBuilder = new StringBuilder(businessAssayTaskDataDO.getAssayProject()); + assayProjectBuilder.append(","); + + for (ConfigAssayMethodProjectExtendRespVO configAssayMethodProjectDO : configAssayMethodProjectDOList) { + + //如果当前分析方法的项目不在当前检测项目中,则跳出循环继续 + if (!projectIdList.contains(configAssayMethodProjectDO.getDictionaryProjectId())) { + continue; + } + + assayProjectBuilder.append(configAssayMethodProjectDO.getShowName()).append(","); + + + //检测项目 + BusinessAssayProjectDataDO businessAssayProjectDataDO = new BusinessAssayProjectDataDO(); + businessAssayProjectDataDO.setId(IdWorker.getId()); + businessAssayProjectDataDO.setBusinessAssayTaskDataId(businessAssayTaskDataDO.getId()); + businessAssayProjectDataDO.setConfigAssayMethodProjectId(configAssayMethodProjectDO.getId()); + businessAssayProjectDataDO.setDictionaryProjectId(configAssayMethodProjectDO.getDictionaryProjectId()); + businessAssayProjectDataDO.setDataType(configAssayMethodProjectDO.getDataType()); + businessAssayProjectDataDO.setDecimalPosition(configAssayMethodProjectDO.getDecimalPosition()); + businessAssayProjectDataDO.setUsage(QmsCommonConstant.ASSAY_PROJECT_USAGE_REPORT); + businessAssayProjectDataDO.setMinimumLimitValue(configAssayMethodProjectDO.getMinimumLimitValue()); + businessAssayProjectDataDO.setIsEnabled(QmsCommonConstant.YES); + businessAssayProjectDataDO.setIsNotAssessment(QmsCommonConstant.NO); + + saveBusinessAssayProjectDataDOList.add(businessAssayProjectDataDO); + + List configAssayMethodProjectParameterDOList = configAssayMethodProjectParameterList.stream().filter(f -> f.getConfigAssayMethodProjectId().equals(configAssayMethodProjectDO.getId())).collect(Collectors.toList()); + for (ConfigAssayMethodProjectParameterDO configAssayMethodProjectParameterDO : configAssayMethodProjectParameterDOList) { + BusinessAssayParameterDataDO businessAssayParameterDataDO = new BusinessAssayParameterDataDO(); + businessAssayParameterDataDO.setId(IdWorker.getId()); + businessAssayParameterDataDO.setConfigAssayMethodProjectParameterId(configAssayMethodProjectParameterDO.getId()); + businessAssayParameterDataDO.setBusinessAssayProjectDataId(businessAssayProjectDataDO.getId()); + businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId()); + businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType()); + businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition()); + + saveBusinessAssayParameterDataDOList.add(businessAssayParameterDataDO); + } + } + if (assayProjectBuilder.length() > 1) { + assayProjectBuilder.delete(assayProjectBuilder.length() - 1 , assayProjectBuilder.length()); + } + businessAssayTaskDataDO.setAssayProject(assayProjectBuilder.toString()); + updateBusinessAssayTaskDataDOList.add(businessAssayTaskDataDO); + } + + + } + + } + + } + + } + + //查询报表数据 + List businessAssayReportDataDOList = businessAssayReportDataMapper.selectBytBusinessBaseSampleIds(businessBaseSampleIdList); + for (BusinessAssayReportDataDO businessAssayReportDataDO : businessAssayReportDataDOList) { + String dataSource = businessAssayReportDataDO.getDataSource(); + if (dataSource.contains(req.getConfigAssayMethodId().toString())) {//判定是否存在 + List dataSourceList = new ArrayList<>(); + String[] dataSourceSplit = dataSource.split(","); + for (int i = 0; i < dataSourceSplit.length; i++) { + dataSourceList.add(Long.parseLong(dataSourceSplit[i])); + } + + //移除当前的 + dataSourceList.remove(req.getConfigAssayMethodId()); + //添加新的 + dataSourceList.addAll(changeConfigAssayMethodIdList); + + //重新赋值 + businessAssayReportDataDO.setDataSource(CollUtil.join(dataSourceList, ",")); + + //添加到更新列表 + updateBusinessAssayReportDataDOList.add(businessAssayReportDataDO); + } + } + + + + //======================== 删除 ===================================================================== + + if (removeAssayTaskDataIdList.size() > 0) { + businessAssayTaskDataMapper.deleteByIds(removeAssayTaskDataIdList); + } + if (removeAssayProjectIdList.size() > 0) { + businessAssayProjectDataMapper.deleteByIds(removeAssayProjectIdList); + } + if (removeAssayParameterIdList.size() > 0) { + businessAssayParameterDataMapper.deleteByIds(removeAssayParameterIdList); + } + + if (removeSubSampleAssessmentIdList.size() > 0) { + businessSubSampleAssessmentMapper.deleteByIds(removeSubSampleAssessmentIdList); + } + + if (removeSubParentSampleAssessmentIdList.size() > 0) { + businessSubParentSampleAssessmentMapper.deleteByIds(removeSubParentSampleAssessmentIdList); + } + + //======================== 修改 ===================================================================== + + if (updateBusinessAssayReportDataDOList.size() > 0) { + businessAssayReportDataMapper.updateBatch(updateBusinessAssayReportDataDOList); + } + + if (updateBusinessAssayTaskDataDOList.size() > 0) { + businessAssayTaskDataMapper.updateBatch(updateBusinessAssayTaskDataDOList); + } + if (updateBusinessAssayProjectDataDOList.size() > 0) { + businessAssayProjectDataMapper.updateBatch(updateBusinessAssayProjectDataDOList); + } + if (updateBusinessAssayParameterDataDOList.size() > 0) { + businessAssayParameterDataMapper.updateBatch(updateBusinessAssayParameterDataDOList); + } + + if (updateBusinessSubSampleAssessmentDOList.size() > 0) { + businessSubSampleAssessmentMapper.updateBatch(updateBusinessSubSampleAssessmentDOList); + } + + if (updateBusinessSubParentSampleAssessmentDOList.size() > 0) { + businessSubParentSampleAssessmentMapper.updateBatch(updateBusinessSubParentSampleAssessmentDOList); + } + + //======================== 新建 ===================================================================== + + if (saveBusinessAssayTaskDataDOList.size() > 0) { + businessAssayTaskDataMapper.insertBatch(saveBusinessAssayTaskDataDOList); + } + if (saveBusinessAssayProjectDataDOList.size() > 0) { + businessAssayProjectDataMapper.insertBatch(saveBusinessAssayProjectDataDOList); + } + if (saveBusinessAssayParameterDataDOList.size() > 0) { + businessAssayParameterDataMapper.insertBatch(saveBusinessAssayParameterDataDOList); + } + + if (saveBusinessSubSampleAssessmentDOList.size() > 0) { + businessSubSampleAssessmentMapper.insertBatch(saveBusinessSubSampleAssessmentDOList); + } + + if (saveBusinessSubParentSampleAssessmentDOList.size() > 0) { + businessSubParentSampleAssessmentMapper.insertBatch(saveBusinessSubParentSampleAssessmentDOList); + } + + + + } + + /** @Override @Transactional(rollbackFor = Exception.class) public void changeMethod(ChangeAssayMethodReqVO req) { @@ -699,7 +1204,8 @@ public class SampleTaskAssignServiceImpl implements SampleTaskAssignService { } - +**/ + @Override @Transactional(rollbackFor = Exception.class) public LiteflowResponse methodAssign(SampleTaskAssignMethodParam param) { diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigAssayMethodProjectExtendRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigAssayMethodProjectExtendRespVO.java index 627832e..7e09937 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigAssayMethodProjectExtendRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigAssayMethodProjectExtendRespVO.java @@ -20,4 +20,7 @@ public class ConfigAssayMethodProjectExtendRespVO extends ConfigAssayMethodProje @Schema(description = "显示名称") private String showName; + + @Schema(description = "分析类型 单杯-single_cup、双杯-double_cup、平行-single_parallel") + private String assayType; } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigSubSampleMethodMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigSubSampleMethodMapper.java index 3d17c5f..bd1ed05 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigSubSampleMethodMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigSubSampleMethodMapper.java @@ -97,5 +97,18 @@ public interface ConfigSubSampleMethodMapper extends BaseMapperX selectByBaseSampleId(Long baseSampleId) { + return selectJoinList(ConfigSubSampleMethodExtendRespVO.class, new MPJLambdaWrapperX() + .leftJoin(ConfigSubSampleParentMethodDO.class, ConfigSubSampleParentMethodDO::getId, ConfigSubSampleMethodDO::getConfigSubSampleParentMethodId) + .leftJoin(ConfigSubSampleDO.class, ConfigSubSampleDO::getId, ConfigSubSampleMethodDO::getConfigSubSampleId) + .selectAll(ConfigSubSampleMethodDO.class) + .selectAs(ConfigSubSampleParentMethodDO::getConfigAssayMethodId, ConfigSubSampleMethodExtendRespVO::getConfigAssayMethodId) + .selectAs(ConfigSubSampleParentMethodDO::getIsDefaultUse, ConfigSubSampleMethodExtendRespVO::getIsDefaultUse) + .selectAs(ConfigSubSampleDO::getConfigSubSampleParentId, ConfigSubSampleMethodExtendRespVO::getConfigSubSampleParentId) + .selectAs(ConfigSubSampleDO::getConfigBaseSampleId, ConfigSubSampleMethodExtendRespVO::getConfigBaseSampleId) + .selectAs(ConfigSubSampleDO::getBaseSampleId, ConfigSubSampleMethodExtendRespVO::getBaseSampleId) + .eq(ConfigSubSampleDO::getBaseSampleId, baseSampleId)); + } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayProjectDataMapper.xml b/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayProjectDataMapper.xml index 018e02a..c660bca 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayProjectDataMapper.xml +++ b/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayProjectDataMapper.xml @@ -15,6 +15,7 @@ tdp.NAME AS dictionaryProjectName, tdp.SMPL_NAME AS dictionaryProjectSimpleName, tdp.SHW_NAME AS dictionaryProjectShowName, + tbatd.ASY_TP AS assayType, tbatd.CFG_ASY_MTHD_ID AS configAssayMethodId, tcam.NAME AS configAssayMethodName, tcam.MTHD_NAME_CTGR AS configAssayMethodNameAndCategory, @@ -44,6 +45,7 @@ tdp.NAME, tdp.SMPL_NAME, tdp.SHW_NAME, + tbatd.ASY_TP, tbatd.CFG_ASY_MTHD_ID, tcam.NAME, tcam.MTHD_NAME_CTGR,