From fbd13f50d4f5c6bd90d1c9c43cb9b36abf5262d3 Mon Sep 17 00:00:00 2001 From: wxr Date: Sat, 31 Jan 2026 13:43:58 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=8D=95=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E9=85=8D=E6=96=99=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/BusinessAssayTaskAnalysisSampleAndQcProjectRespVO.java | 3 +++ .../qms/business/bus/service/SampleAnalysisServiceImpl.java | 1 + 2 files changed, 4 insertions(+) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskAnalysisSampleAndQcProjectRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskAnalysisSampleAndQcProjectRespVO.java index 8a6c9f8..aee3ef1 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskAnalysisSampleAndQcProjectRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskAnalysisSampleAndQcProjectRespVO.java @@ -47,6 +47,9 @@ public class BusinessAssayTaskAnalysisSampleAndQcProjectRespVO { @Schema(description = "是否配料,1-是,0-否") private Integer isIngredients; + @Schema(description = "配料方式,初始状态-initial、自动配料-automatic、人工配料-manual") + private String ingredientsWay; + @Schema(description = "配料状态,初始状态-initial、等待配料-in_progress、可提交-allow_submit", example = "2") private String ingredientsStatus; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisServiceImpl.java index 8ac8bfb..72b03ea 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisServiceImpl.java @@ -529,6 +529,7 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService { businessAssayTaskAnalysisSampleAndQcProjectRespVO.setDataCollectionId(businessAssayTaskDO.getFormDataCollectionId()); businessAssayTaskAnalysisSampleAndQcProjectRespVO.setFormValue(businessAssayTaskDO.getFormValue()); businessAssayTaskAnalysisSampleAndQcProjectRespVO.setIsIngredients(businessAssayTaskDO.getIsIngredients()); + businessAssayTaskAnalysisSampleAndQcProjectRespVO.setIngredientsWay(businessAssayTaskDO.getIngredientsWay()); businessAssayTaskAnalysisSampleAndQcProjectRespVO.setIngredientsStatus(businessAssayTaskDO.getIngredientsStatus()); ConfigAssayMethodDO configAssayMethodDO = configAssayMethodMapper.selectById(businessAssayTaskDO.getConfigAssayMethodId()); From e9259122b7433713732a08676bf307622e7a9a28 Mon Sep 17 00:00:00 2001 From: wxr Date: Sat, 31 Jan 2026 14:51:58 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BA=BA=E5=B7=A5=E9=85=8D=E6=96=99bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qms/business/bus/service/SampleAnalysisServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisServiceImpl.java index 72b03ea..51778dd 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisServiceImpl.java @@ -1483,7 +1483,7 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService { public void manualIngredients(Long businessAssayTaskId) { BusinessAssayTaskDO businessAssayTaskDO = businessAssayTaskMapper.selectById(businessAssayTaskId); businessAssayTaskDO.setIngredientsWay(QmsCommonConstant.MANUAL);//人工配料 - businessAssayTaskDO.setIngredientsStatus(QmsCommonConstant.IN_PROGRESS);//表示为允许提交 + businessAssayTaskDO.setIngredientsStatus(QmsCommonConstant.ALLOW_SUBMIT);//表示为允许提交 businessAssayTaskMapper.updateById(businessAssayTaskDO); } From a8330ade63d1c2bdd523942fb353f3a30fa96a87 Mon Sep 17 00:00:00 2001 From: wxr Date: Mon, 2 Feb 2026 17:54:20 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=8F=98=E6=9B=B4?= =?UTF-8?q?=E4=BF=AE=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, From 8121c7a97fcfbbf892c2989536ed7b4857c97348 Mon Sep 17 00:00:00 2001 From: shusir <497819738@qq.com> Date: Mon, 2 Feb 2026 18:09:24 +0800 Subject: [PATCH 4/6] =?UTF-8?q?fix:=E8=B0=83=E6=95=B4=E7=89=A9=E6=96=99?= =?UTF-8?q?=E9=AA=8C=E6=94=B6=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/MaterialBatchController.java | 8 - .../admin/MaterialLifecycleController.java | 30 ++-- .../controller/vo/MaterialBatchPageReqVO.java | 3 + .../vo/MaterialLifecyclePageReqVO.java | 2 +- .../vo/MaterialLifecycleRespVO.java | 2 + .../vo/MaterialLifecycleSaveReqVO.java | 5 +- .../dal/mapper/MaterialBatchMapper.java | 9 ++ .../mapper/MaterialLifecycleDetailMapper.java | 19 +++ .../dal/mapper/MaterialLifecycleMapper.java | 8 +- .../service/MaterialBatchServiceImpl.java | 14 +- .../MaterialLifecycleDetailService.java | 8 + .../MaterialLifecycleDetailServiceImpl.java | 6 + .../service/MaterialLifecycleService.java | 9 +- .../service/MaterialLifecycleServiceImpl.java | 142 +++++++++++++++++- 14 files changed, 230 insertions(+), 35 deletions(-) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java index 24ceed4..18baad8 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java @@ -94,14 +94,6 @@ public class MaterialBatchController implements BusinessControllerMarker { // @PreAuthorize("@ss.hasPermission('qms:material-batch:query')") public CommonResult> getMaterialBatchPage(@Valid MaterialBatchPageReqVO pageReqVO) { PageResult pageResult = materialBatchService.getMaterialBatchPageWithPdtInfo(pageReqVO); -// return success(BeanUtils.toBean(pageResult, MaterialBatchRespVO.class)); - return success(pageResult); - } - - @GetMapping("/gong-page") - @Operation(summary = "获得批次工段分页") - public CommonResult> getMaterialBatchGongPage(@Valid MaterialBatchPageReqVO pageReqVO) { - PageResult pageResult = materialBatchService.getMaterialBatchGongPageWithPdtInfo(pageReqVO); return success(pageResult); } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialLifecycleController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialLifecycleController.java index 58652fc..52ea127 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialLifecycleController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialLifecycleController.java @@ -52,16 +52,18 @@ public class MaterialLifecycleController extends AbstractFileUploadController im @Resource private MaterialLifecycleService materialLifecycleService; + // QMS_RESOURCE_MATERIAL_COMMON + @PostMapping("/create") @Operation(summary = "新建物料流程") -// @PreAuthorize("@ss.hasPermission('t:material-lifecycle:create')") +// @PreAuthorize("@ss.hasPermission('qms:material-lifecycle:create')") public CommonResult createMaterialLifecycle(@Validated(AddGroup.class) @RequestBody MaterialLifecycleSaveReqVO createReqVO) { return success(materialLifecycleService.createMaterialLifecycle(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新物料流程") -// @PreAuthorize("@ss.hasPermission('t:material-lifecycle:update')") +// @PreAuthorize("@ss.hasPermission('qms:material-lifecycle:update')") public CommonResult updateMaterialLifecycle(@Validated(UpdateGroup.class) @RequestBody MaterialLifecycleSaveReqVO updateReqVO) { materialLifecycleService.updateMaterialLifecycle(updateReqVO); return success(true); @@ -70,7 +72,7 @@ public class MaterialLifecycleController extends AbstractFileUploadController im @DeleteMapping("/delete") @Operation(summary = "删除物料流程") @Parameter(name = "id", description = "编号", required = true) -// @PreAuthorize("@ss.hasPermission('t:material-lifecycle:delete')") +// @PreAuthorize("@ss.hasPermission('qms:material-lifecycle:delete')") public CommonResult deleteMaterialLifecycle(@RequestParam("id") Long id) { materialLifecycleService.deleteMaterialLifecycle(id); return success(true); @@ -86,25 +88,33 @@ public class MaterialLifecycleController extends AbstractFileUploadController im } @GetMapping("/get") - @Operation(summary = "获得物料通用流程") + @Operation(summary = "获得物料流程") @Parameter(name = "id", description = "编号", required = true, example = "1024") -// @PreAuthorize("@ss.hasPermission('t:material-lifecycle:query')") +// @PreAuthorize("@ss.hasPermission('qms:material-lifecycle:query')") public CommonResult getMaterialLifecycle(@RequestParam("id") Long id) { - MaterialLifecycleDO materialLifecycle = materialLifecycleService.getMaterialLifecycle(id); - return success(BeanUtils.toBean(materialLifecycle, MaterialLifecycleRespVO.class)); + MaterialLifecycleRespVO lifecycleRespVO = materialLifecycleService.getMaterialLifecycle(id); + return success(lifecycleRespVO); } @GetMapping("/page") - @Operation(summary = "获得物料通用流程,物料验收、退换货分页") - @PreAuthorize("@ss.hasPermission('t:material-lifecycle:query')") + @Operation(summary = "获得物料流程分页") +// @PreAuthorize("@ss.hasPermission('qms:material-lifecycle:query')") public CommonResult> getMaterialLifecyclePage(@Valid MaterialLifecyclePageReqVO pageReqVO) { PageResult pageResult = materialLifecycleService.getMaterialLifecyclePage(pageReqVO); return success(BeanUtils.toBean(pageResult, MaterialLifecycleRespVO.class)); } + @PutMapping("/submit") + @Operation(summary = "提交(验收等流程)") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + public CommonResult submitLifecycle(@RequestParam("id") Long id) { + + return success(materialLifecycleService.submitLifecycle(id)); + } + @GetMapping("/export-excel") @Operation(summary = "导出物料通用流程,物料验收、退换货 Excel") - @PreAuthorize("@ss.hasPermission('t:material-lifecycle:export')") + @PreAuthorize("@ss.hasPermission('qms:material-lifecycle:export')") @ApiAccessLog(operateType = EXPORT) public void exportMaterialLifecycleExcel(@Valid MaterialLifecyclePageReqVO pageReqVO, HttpServletResponse response) throws IOException { diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchPageReqVO.java index e7e3717..37287c3 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialBatchPageReqVO.java @@ -22,6 +22,9 @@ public class MaterialBatchPageReqVO extends PageParam { @Schema(description = "是否需要组装 children") private Boolean children = false; + @Schema(description = "是否只需要工段") + private Boolean onlyGong = false; + @Schema(description = "批次编号") private String batchNo; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecyclePageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecyclePageReqVO.java index bf97380..e40ba21 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecyclePageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecyclePageReqVO.java @@ -44,7 +44,7 @@ public class MaterialLifecyclePageReqVO extends PageParam { @Schema(description = "流程实例id", example = "12151") private String flowInstanceId; - @Schema(description = "提交状态,提交状态,0-未提交,1-已提交", example = "1") + @Schema(description = "提交状态,0-未提交,1-已提交", example = "1") private Integer submitStatus; @Schema(description = "流程审批状态", example = "1") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleRespVO.java index 4389263..8763153 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleRespVO.java @@ -2,6 +2,7 @@ package com.zt.plat.module.qms.resource.material.controller.vo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import com.zt.plat.module.qms.core.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -63,6 +64,7 @@ public class MaterialLifecycleRespVO { @Schema(description = "流程审批状态", example = "1") @ExcelProperty("流程审批状态") + @Dict(dicCode = "flow_status") private String flowStatus; @Schema(description = "所属部门") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleSaveReqVO.java index 5452876..ba4215f 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleSaveReqVO.java @@ -23,25 +23,22 @@ public class MaterialLifecycleSaveReqVO { private String title; @Schema(description = "业务类型,【字典】【jy_material_lifecycle_bsn_type】验收、退换货、配置申请", example = "2") + @NotNull(groups = AddGroup.class, message = "业务类型不能为空") private String businessType; @Schema(description = "业务类型编码") private String businessTypeCode; @Schema(description = "申请人") - @NotNull(groups = AddGroup.class, message = "申请人不能为空") private String applyUser; @Schema(description = "申请人id", example = "4976") - @NotNull(groups = AddGroup.class, message = "申请人id 不能为空") private Long applyUserId; @Schema(description = "申请部门") - @NotNull(groups = AddGroup.class, message = "申请部门不能为空") private String applyDepartment; @Schema(description = "申请部门id", example = "19765") - @NotNull(groups = AddGroup.class, message = "申请部门id 不能为空") private Long applyDepartmentId; @Schema(description = "申请时间") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java index 57f2941..072b26f 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java @@ -7,6 +7,8 @@ import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX; +import com.zt.plat.framework.security.core.LoginUser; +import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchRespVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO; @@ -44,6 +46,11 @@ public interface MaterialBatchMapper extends BaseMapperX { // onlyGong 是否只查询工段 default PageResult selectPage(MaterialBatchPageReqVO reqVO, List pdtIds, Boolean onlyGong) { + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + Long visitDeptId = null; + if (loginUser != null) { + visitDeptId = loginUser.getVisitDeptId(); + } MPJLambdaWrapper wrapper = new MPJLambdaWrapperX() .selectAll(MaterialBatchDO.class) .selectAs(MaterialProductDO::getName, MaterialBatchRespVO::getProductName) @@ -54,6 +61,8 @@ public interface MaterialBatchMapper extends BaseMapperX { .eq(onlyGong != null && !onlyGong, MaterialBatchDO::getParentId, 0) // 只查询工段 .ne(onlyGong != null && onlyGong, MaterialBatchDO::getParentId, 0) + .eq(onlyGong != null && onlyGong, MaterialBatchDO::getSubmitStatus, 1) +// .eq(onlyGong != null && visitDeptId != null && onlyGong, MaterialBatchDO::getAssignDepartmentId, visitDeptId) .in(CollUtil.isNotEmpty(pdtIds), MaterialBatchDO::getProductId, pdtIds) .eq(CollUtil.isEmpty(pdtIds) && reqVO.getProductId() != null, MaterialBatchDO::getProductId, reqVO.getProductId()) .likeIfExists(MaterialBatchDO::getBatchNo, reqVO.getBatchNo()) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleDetailMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleDetailMapper.java index 2c47b0a..0de7b57 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleDetailMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleDetailMapper.java @@ -3,10 +3,16 @@ package com.zt.plat.module.qms.resource.material.dal.mapper; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleDetailPageReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleDetailRespVO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDetailDO; +import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * 物料通用流程明细 Mapper * @@ -32,4 +38,17 @@ public interface MaterialLifecycleDetailMapper extends BaseMapperX selectListWithPdtBatInfo(Long id){ + MPJLambdaWrapperX wrapperX = new MPJLambdaWrapperX() + .selectAll(MaterialLifecycleDetailDO.class) + .selectAs(MaterialProductDO::getName, MaterialLifecycleDetailRespVO::getProductName) + .selectAs(MaterialProductDO::getCode, MaterialLifecycleDetailRespVO::getProductCode) + .selectAs(MaterialProductDO::getModelNo, MaterialLifecycleDetailRespVO::getProductModelNo) + .selectAs(MaterialBatchDO::getBatchNo, MaterialLifecycleDetailRespVO::getBatchNo) + .leftJoin(MaterialProductDO.class, MaterialProductDO::getId, MaterialLifecycleDetailDO::getProductId) + .leftJoin(MaterialBatchDO.class, MaterialBatchDO::getId, MaterialLifecycleDetailDO::getBatchId) + .eq(MaterialLifecycleDetailDO::getLifecycleId, id); + + return selectJoinList(MaterialLifecycleDetailRespVO.class, wrapperX); + } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleMapper.java index 3ceba03..e39d53b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleMapper.java @@ -17,15 +17,15 @@ public interface MaterialLifecycleMapper extends BaseMapperX selectPage(MaterialLifecyclePageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(MaterialLifecycleDO::getTitle, reqVO.getTitle()) + .likeIfPresent(MaterialLifecycleDO::getTitle, reqVO.getTitle()) .eqIfPresent(MaterialLifecycleDO::getBusinessType, reqVO.getBusinessType()) .eqIfPresent(MaterialLifecycleDO::getBusinessTypeCode, reqVO.getBusinessTypeCode()) - .eqIfPresent(MaterialLifecycleDO::getApplyUser, reqVO.getApplyUser()) + .likeIfPresent(MaterialLifecycleDO::getApplyUser, reqVO.getApplyUser()) .eqIfPresent(MaterialLifecycleDO::getApplyUserId, reqVO.getApplyUserId()) - .eqIfPresent(MaterialLifecycleDO::getApplyDepartment, reqVO.getApplyDepartment()) + .likeIfPresent(MaterialLifecycleDO::getApplyDepartment, reqVO.getApplyDepartment()) .eqIfPresent(MaterialLifecycleDO::getApplyDepartmentId, reqVO.getApplyDepartmentId()) .betweenIfPresent(MaterialLifecycleDO::getApplyTime, reqVO.getApplyTime()) - .eqIfPresent(MaterialLifecycleDO::getFormData, reqVO.getFormData()) + .likeIfPresent(MaterialLifecycleDO::getFormData, reqVO.getFormData()) .eqIfPresent(MaterialLifecycleDO::getFlowInstanceId, reqVO.getFlowInstanceId()) .eqIfPresent(MaterialLifecycleDO::getSubmitStatus, reqVO.getSubmitStatus()) .eqIfPresent(MaterialLifecycleDO::getFlowStatus, reqVO.getFlowStatus()) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java index 632d3b9..b13774c 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java @@ -137,9 +137,12 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { @Override public PageResult getMaterialBatchPageWithPdtInfo(MaterialBatchPageReqVO pageReqVO) { - // 先分页查询批次 - PageResult pageResult = getMaterialBatchRespVOPageWithPdtInfo(pageReqVO, false); - // 再获取工段 + // 先分页查询批次或工段 + Boolean onlyGong = pageReqVO.getOnlyGong(); + PageResult pageResult = getMaterialBatchRespVOPageWithPdtInfo(pageReqVO, onlyGong); + // 只获取工段 + if (onlyGong) return pageResult; + // 如果获取是批次分页,再根据批次ids获取工段 List batches = pageResult.getList(); if (CollUtil.isNotEmpty(batches)) { List batIds = batches.stream().map(MaterialBatchRespVO::getId).toList(); @@ -235,6 +238,7 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { .ne(MaterialBatchDO::getParentId, 0)); } + @Transactional @Override public Boolean submitMaterialBatch(Long id) { MaterialBatchDO batchDO = materialBatchMapper.selectById(id); @@ -245,6 +249,10 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { if (!exists) throw new ServiceException(1_032_160_000, "批次还未拆分,不可提交"); batchDO.setSubmitStatus(1); materialBatchMapper.updateById(batchDO); + // 提交工段 + MaterialBatchDO updateBatch = new MaterialBatchDO().setSubmitStatus(1); + materialBatchMapper.update(updateBatch, Wrappers.lambdaQuery(MaterialBatchDO.class) + .eq(MaterialBatchDO::getParentId, id)); return true; } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailService.java index 828f349..5adae35 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailService.java @@ -81,4 +81,12 @@ public interface MaterialLifecycleDetailService { * @param ids 流程ids */ void deleteLifecycleDetailListByLfcIds(List ids); + + /** + * 根据流程id 获取流程明细数据 + * + * @param id 流程id + * @return 明细列表 + */ + List getMaterialLifecycleDetailListByLfcId(Long id); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailServiceImpl.java index 0432011..6d192b9 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleDetailServiceImpl.java @@ -106,4 +106,10 @@ public class MaterialLifecycleDetailServiceImpl implements MaterialLifecycleDeta .in(MaterialLifecycleDetailDO::getLifecycleId, ids)); } + @Override + public List getMaterialLifecycleDetailListByLfcId(Long id) { + + return materialLifecycleDetailMapper.selectListWithPdtBatInfo(id); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleService.java index fef441c..116ea5b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleService.java @@ -51,7 +51,7 @@ public interface MaterialLifecycleService { * @param id 编号 * @return 物料通用流程,物料验收、退换货 */ - MaterialLifecycleDO getMaterialLifecycle(Long id); + MaterialLifecycleRespVO getMaterialLifecycle(Long id); /** * 获得物料通用流程,物料验收、退换货分页 @@ -61,4 +61,11 @@ public interface MaterialLifecycleService { */ PageResult getMaterialLifecyclePage(MaterialLifecyclePageReqVO pageReqVO); + /** + * 提交(验收等流程) + * + * @param id 编号 + * @return 是否成功 + */ + Boolean submitLifecycle(Long id); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java index 67ae326..c6e1aef 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java @@ -1,10 +1,19 @@ package com.zt.plat.module.qms.resource.material.service; import cn.hutool.core.collection.CollUtil; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import cn.hutool.core.util.StrUtil; import com.zt.plat.framework.common.exception.ServiceException; +import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.PageResult; 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.bpm.api.task.BpmProcessInstanceApi; +import com.zt.plat.module.bpm.api.task.BpmTaskApi; +import com.zt.plat.module.bpm.api.task.dto.BpmTaskApproveReqDTO; +import com.zt.plat.module.bpm.api.task.dto.BpmTaskRespDTO; +import com.zt.plat.module.qms.enums.QmsCommonConstant; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleDetailRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecyclePageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleSaveReqVO; @@ -13,7 +22,6 @@ import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycle import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDetailDO; import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialLifecycleMapper; import jakarta.annotation.Resource; -import org.jspecify.annotations.NonNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -25,6 +33,8 @@ import java.util.function.Function; import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception0; +import static com.zt.plat.module.qms.enums.ErrorCodeConstants.ERROR_CODE_MODULE_COMMON; import static com.zt.plat.module.qms.enums.ErrorCodeConstants.MATERIAL_LIFECYCLE_NOT_EXISTS; /** @@ -45,6 +55,12 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService { @Autowired private MaterialLifecycleDetailService materialLifecycleDetailService; + @Autowired + private BpmTaskApi bpmTaskApi; + + @Autowired + private BpmProcessInstanceApi bpmProcessInstanceApi; + @Transactional @Override public MaterialLifecycleRespVO createMaterialLifecycle(MaterialLifecycleSaveReqVO createReqVO) { @@ -150,8 +166,14 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService { } @Override - public MaterialLifecycleDO getMaterialLifecycle(Long id) { - return materialLifecycleMapper.selectById(id); + public MaterialLifecycleRespVO getMaterialLifecycle(Long id) { + MaterialLifecycleDO lifecycleDO = materialLifecycleMapper.selectById(id); + if (lifecycleDO == null) return null; + MaterialLifecycleRespVO respVO = BeanUtils.toBean(lifecycleDO, MaterialLifecycleRespVO.class); + // 获取明细 + List detailRespVOS = materialLifecycleDetailService.getMaterialLifecycleDetailListByLfcId(id); + respVO.setDetailList(detailRespVOS); + return respVO; } @Override @@ -159,4 +181,116 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService { return materialLifecycleMapper.selectPage(pageReqVO); } + @Override + public Boolean submitLifecycle(Long id) { + MaterialLifecycleDO lifecycleDO = materialLifecycleMapper.selectById(id); + if (lifecycleDO == null) throw exception(MATERIAL_LIFECYCLE_NOT_EXISTS); + Integer submitStatus = lifecycleDO.getSubmitStatus(); + if (submitStatus == 1) throw new ServiceException(1_032_160_000, "申请已经提交过"); + + // 发起流程 + this.createProcessInstance(lifecycleDO); + + lifecycleDO.setSubmitStatus(1); + materialLifecycleMapper.updateById(lifecycleDO); + return true; + } + + private void createProcessInstance(MaterialLifecycleDO lifecycleDO) { + /* + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + //当前登录用户昵称 + String nickName = SecurityFrameworkUtils.getLoginUserNickname(); + Long id = param.getId(); + SupplierEvaluationDO entity = getSupplierEvaluation(id); + String flowInsId = entity.getFlowInstanceId(); + + if(!ObjectUtils.isEmpty(flowInsId)){ + CommonResult> taskRet = bpmTaskApi.getTaskListByProcessInstanceId(flowInsId); + List taskList = taskRet.getData(); + if(taskList.isEmpty()) + throw exception0(ERROR_CODE_MODULE_COMMON, "流程任务查询失败,请联系管理员处理"); + String taskId = taskList.get(taskList.size() - 1).getId(); + //驳回后重新提交 + BpmTaskApproveReqDTO reqVO = new BpmTaskApproveReqDTO(); + reqVO.setId(taskId); + CommonResult result = bpmProcessInstanceApi.approveTask(reqVO); + if(!result.isSuccess()){ + throw exception0(ERROR_CODE_MODULE_COMMON, result.getMsg()); + } + entity.setFlowStatus(QmsCommonConstant.IN_PROGRESS); + //todo 生成报告编号 documentCode + supplierEvaluationMapper.updateById(entity); + SupplierEvaluationRespVO respVO = BeanUtils.toBean(entity, SupplierEvaluationRespVO.class); + return CommonResult.success(respVO); + } + JSONObject formData = new JSONObject(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + formData.put("mainId", id); + formData.put("applyUser", nickName); + formData.put("applyUserId", loginUser.getId()); + formData.put("applyDepartment", loginUser.getVisitDeptName()); + formData.put("applyDepartmentId", loginUser.getVisitDeptId()); + formData.put("applyTime", sdf.format(new Date())); + Map variables = formData.toJavaObject(Map.class); + variables.put(BPM_CALLBACK_BEAN_NAME, "supplierEvaluationService"); //流程回调时使用的service + BpmProcessInstanceCreateReqDTO reqDTO = new BpmProcessInstanceCreateReqDTO(); + reqDTO.setBusinessKey(String.valueOf(id)); + reqDTO.setProcessDefinitionKey(QmsSupplierConstant.EVALUATION_FLOW_KEY); + reqDTO.setVariables(variables); + CommonResult result = bpmProcessInstanceApi.createProcessInstance(loginUser.getId(), reqDTO); + if(!result.isSuccess()){ + throw exception0(ERROR_CODE_MODULE_COMMON, result.getMsg()); + } + String wfInsId = result.getData(); + entity.setFlowInstanceId(wfInsId); + entity.setFlowStatus(QmsCommonConstant.IN_PROGRESS); + entity.setEvaluationDate(LocalDateTime.now()); + entity.setEvaluator(nickName); + supplierEvaluationMapper.updateById(entity); + SupplierEvaluationRespVO respVO = BeanUtils.toBean(entity, SupplierEvaluationRespVO.class); + return CommonResult.success(respVO); + */ + // 发起人及其部门 + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + String loginUserNickname = SecurityFrameworkUtils.getLoginUserNickname(); + if (loginUser != null) { + lifecycleDO.setApplyUser(loginUserNickname) + .setApplyUserId(loginUser.getId()) + .setApplyDepartment(loginUser.getVisitDeptName()) + .setApplyDepartmentId(loginUser.getVisitDeptId()); + } + String flowInstanceId = lifecycleDO.getFlowInstanceId(); + // 创建流程 + if (StrUtil.isEmpty(flowInstanceId)) { + CommonResult> taskRet = bpmTaskApi.getTaskListByProcessInstanceId(flowInstanceId); + List taskList = taskRet.getData(); + if(CollUtil.isEmpty(taskList)) + throw exception0(ERROR_CODE_MODULE_COMMON, "流程任务查询失败,请联系管理员处理"); + String taskId = taskList.get(taskList.size() - 1).getId(); + //驳回后重新提交 + BpmTaskApproveReqDTO reqVO = new BpmTaskApproveReqDTO(); + reqVO.setId(taskId); + CommonResult result = bpmProcessInstanceApi.approveTask(reqVO); + if(!result.isSuccess()){ + throw exception0(ERROR_CODE_MODULE_COMMON, result.getMsg()); + } + lifecycleDO.setFlowStatus(QmsCommonConstant.IN_PROGRESS); + return; + } + + switch (lifecycleDO.getBusinessType()) { + case "acceptance": + // 发起验收流程 + break; + case "return_exchange": + // 发起退换货流程 + break; + case "config_apply": + // 配置申请 + break; + } + } + } \ No newline at end of file From a96fa0ed9bf21343459f2326fcf62932764f3bae Mon Sep 17 00:00:00 2001 From: shusir <497819738@qq.com> Date: Tue, 3 Feb 2026 18:02:09 +0800 Subject: [PATCH 5/6] =?UTF-8?q?fix:=E7=89=A9=E6=96=99=E9=AA=8C=E6=94=B6?= =?UTF-8?q?=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/MaterialBatchController.java | 7 +- .../vo/MaterialLifecycleDetailRespVO.java | 5 + .../vo/MaterialLifecycleDetailSaveReqVO.java | 3 + .../vo/MaterialLifecycleSaveReqVO.java | 3 +- .../dataobject/MaterialLifecycleDetailDO.java | 5 + .../dal/mapper/MaterialBatchMapper.java | 42 +++- .../mapper/MaterialLifecycleDetailMapper.java | 11 +- .../service/MaterialBatchServiceImpl.java | 50 ++-- .../service/MaterialLifecycleServiceImpl.java | 220 +++++++++++------- 9 files changed, 217 insertions(+), 129 deletions(-) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java index 18baad8..6084480 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java @@ -93,7 +93,12 @@ public class MaterialBatchController implements BusinessControllerMarker { @Operation(summary = "获得物料批次分页") // @PreAuthorize("@ss.hasPermission('qms:material-batch:query')") public CommonResult> getMaterialBatchPage(@Valid MaterialBatchPageReqVO pageReqVO) { - PageResult pageResult = materialBatchService.getMaterialBatchPageWithPdtInfo(pageReqVO); + PageResult pageResult; + if (!pageReqVO.getOnlyGong()) { + pageResult = materialBatchService.getMaterialBatchPageWithPdtInfo(pageReqVO); + } else { + pageResult = materialBatchService.getMaterialBatchGongPageWithPdtInfo(pageReqVO); + } return success(pageResult); } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailRespVO.java index 7d34f86..7a29e57 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailRespVO.java @@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.math.BigDecimal; import java.time.LocalDateTime; @Schema(description = "管理后台 - 物料通用流程明细 Response VO") @@ -53,6 +54,10 @@ public class MaterialLifecycleDetailRespVO { @ExcelProperty("批次工段-部门名称") private String assignDepartmentName; + @Schema(description = "是否检化验,1-是,0-否") + @ExcelProperty("是否检化验,1-是,0-否") + private Integer assayFlag; + @Schema(description = "物料实例id", example = "968") @ExcelProperty("物料实例id") private Long infomationId; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailSaveReqVO.java index fbf6c06..678217a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleDetailSaveReqVO.java @@ -22,6 +22,9 @@ public class MaterialLifecycleDetailSaveReqVO { @Schema(description = "批次工段id", example = "21334") private Long batchGongduanId; + @Schema(description = "是否检化验,1-是,0-否") + private Integer assayFlag; + @Schema(description = "物料实例id", example = "968") private Long infomationId; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleSaveReqVO.java index ba4215f..b709d0e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/MaterialLifecycleSaveReqVO.java @@ -42,7 +42,6 @@ public class MaterialLifecycleSaveReqVO { private Long applyDepartmentId; @Schema(description = "申请时间") - @NotNull(groups = AddGroup.class, message = "申请时间不能为空") private LocalDateTime applyTime; @Schema(description = "表单数据,表单数据") @@ -64,6 +63,6 @@ public class MaterialLifecycleSaveReqVO { private String remark; @Schema(description = "工段列表") - private List gongIds; + private List detailList; } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialLifecycleDetailDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialLifecycleDetailDO.java index d5af1de..0fbc808 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialLifecycleDetailDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/dataobject/MaterialLifecycleDetailDO.java @@ -48,6 +48,11 @@ public class MaterialLifecycleDetailDO extends BusinessBaseDO { */ @TableField("BAT_GONG_ID") private Long batchGongduanId; + /** + * 是否检化验,1-是,0-否 + */ + @TableField("ASY_FLG") + private Integer assayFlag; /** * 物料实例id */ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java index 072b26f..ddcd184 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialBatchMapper.java @@ -1,7 +1,6 @@ package com.zt.plat.module.qms.resource.material.dal.mapper; import cn.hutool.core.collection.CollUtil; -import com.github.yulichang.base.MPJBaseMapper; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; @@ -44,8 +43,38 @@ public interface MaterialBatchMapper extends BaseMapperX { .orderByDesc(MaterialBatchDO::getId)); } - // onlyGong 是否只查询工段 - default PageResult selectPage(MaterialBatchPageReqVO reqVO, List pdtIds, Boolean onlyGong) { + default PageResult selectPageWithPdtInfo(MaterialBatchPageReqVO reqVO, List pdtIds) { + + MPJLambdaWrapper wrapper = new MPJLambdaWrapperX() + .selectAll(MaterialBatchDO.class) + .selectAs(MaterialProductDO::getName, MaterialBatchRespVO::getProductName) + .selectAs(MaterialProductDO::getCode, MaterialBatchRespVO::getProductCode) + .selectAs(MaterialProductDO::getModelNo, MaterialBatchRespVO::getProductModelNo) + .leftJoin(MaterialProductDO.class, MaterialProductDO::getId, MaterialBatchDO::getProductId) + // 只查询批次 + .eq(MaterialBatchDO::getParentId, 0) + .in(CollUtil.isNotEmpty(pdtIds), MaterialBatchDO::getProductId, pdtIds) + .eq(CollUtil.isEmpty(pdtIds) && reqVO.getProductId() != null, MaterialBatchDO::getProductId, reqVO.getProductId()) + .likeIfExists(MaterialBatchDO::getBatchNo, reqVO.getBatchNo()) + .likeIfExists(MaterialBatchDO::getLocation, reqVO.getLocation()) + .likeIfExists(MaterialBatchDO::getSupplierId, reqVO.getSupplierId()) +// .betweenIfPresent(MaterialBatchDO::getManufacturerDate, reqVO.getManufacturerDate()) +// .betweenIfPresent(MaterialBatchDO::getDueDate, reqVO.getDueDate()) + .eqIfExists(MaterialBatchDO::getAssignDepartmentId, reqVO.getAssignDepartmentId()) + .likeIfExists(MaterialBatchDO::getAssignDepartmentName, reqVO.getAssignDepartmentName()) + .eqIfExists(MaterialBatchDO::getAcceptanceStatus, reqVO.getAcceptanceStatus()) + .eqIfExists(MaterialBatchDO::getAssayFlag, reqVO.getAssayFlag()) + .eqIfExists(MaterialBatchDO::getAssayStatus, reqVO.getAssayStatus()) + .eqIfExists(MaterialBatchDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode()) + .eqIfExists(MaterialBatchDO::getRemark, reqVO.getRemark()) +// .betweenIfPresent(MaterialBatchDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MaterialBatchDO::getId); + return selectJoinPage(reqVO, MaterialBatchRespVO.class, wrapper); + } + + default PageResult selectGongPage(MaterialBatchPageReqVO reqVO, List pdtIds) { + + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); Long visitDeptId = null; if (loginUser != null) { @@ -57,11 +86,10 @@ public interface MaterialBatchMapper extends BaseMapperX { .selectAs(MaterialProductDO::getCode, MaterialBatchRespVO::getProductCode) .selectAs(MaterialProductDO::getModelNo, MaterialBatchRespVO::getProductModelNo) .leftJoin(MaterialProductDO.class, MaterialProductDO::getId, MaterialBatchDO::getProductId) - // 只查询批次,不查询工段 - .eq(onlyGong != null && !onlyGong, MaterialBatchDO::getParentId, 0) // 只查询工段 - .ne(onlyGong != null && onlyGong, MaterialBatchDO::getParentId, 0) - .eq(onlyGong != null && onlyGong, MaterialBatchDO::getSubmitStatus, 1) + .ne(MaterialBatchDO::getParentId, 0) + .eq(MaterialBatchDO::getSubmitStatus, 1) + .notExists("SELECT 1 FROM t_mtrl_lfc_dtl ld WHERE ld.BAT_GONG_ID = t.id AND ld.DELETED = 0") // .eq(onlyGong != null && visitDeptId != null && onlyGong, MaterialBatchDO::getAssignDepartmentId, visitDeptId) .in(CollUtil.isNotEmpty(pdtIds), MaterialBatchDO::getProductId, pdtIds) .eq(CollUtil.isEmpty(pdtIds) && reqVO.getProductId() != null, MaterialBatchDO::getProductId, reqVO.getProductId()) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleDetailMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleDetailMapper.java index 0de7b57..afd8649 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleDetailMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/dal/mapper/MaterialLifecycleDetailMapper.java @@ -1,5 +1,6 @@ package com.zt.plat.module.qms.resource.material.dal.mapper; +import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; @@ -39,16 +40,18 @@ public interface MaterialLifecycleDetailMapper extends BaseMapperX selectListWithPdtBatInfo(Long id){ - MPJLambdaWrapperX wrapperX = new MPJLambdaWrapperX() + MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(MaterialLifecycleDetailDO.class) .selectAs(MaterialProductDO::getName, MaterialLifecycleDetailRespVO::getProductName) .selectAs(MaterialProductDO::getCode, MaterialLifecycleDetailRespVO::getProductCode) .selectAs(MaterialProductDO::getModelNo, MaterialLifecycleDetailRespVO::getProductModelNo) - .selectAs(MaterialBatchDO::getBatchNo, MaterialLifecycleDetailRespVO::getBatchNo) + .selectAs("batch.BAT_NO", MaterialLifecycleDetailRespVO::getBatchNo) + .selectAs("gongduan.INB_QTY", MaterialLifecycleDetailRespVO::getInfluenceCount) .leftJoin(MaterialProductDO.class, MaterialProductDO::getId, MaterialLifecycleDetailDO::getProductId) - .leftJoin(MaterialBatchDO.class, MaterialBatchDO::getId, MaterialLifecycleDetailDO::getBatchId) + .leftJoin(MaterialBatchDO.class, "batch", MaterialBatchDO::getId, MaterialLifecycleDetailDO::getBatchId) + .leftJoin(MaterialBatchDO.class, "gongduan", MaterialBatchDO::getId, MaterialLifecycleDetailDO::getBatchGongduanId) .eq(MaterialLifecycleDetailDO::getLifecycleId, id); - return selectJoinList(MaterialLifecycleDetailRespVO.class, wrapperX); + return selectJoinList(MaterialLifecycleDetailRespVO.class, wrapper); } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java index b13774c..be6ff11 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java @@ -1,20 +1,15 @@ package com.zt.plat.module.qms.resource.material.service; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.zt.plat.framework.common.exception.ErrorCode; import com.zt.plat.framework.common.exception.ServiceException; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.module.qms.core.code.SequenceUtil; -import com.zt.plat.module.qms.enums.ErrorCodeConstants; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchSaveReqVO; -import com.zt.plat.module.qms.resource.material.controller.vo.MaterialProductRespVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO; -import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInfomationDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO; import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialBatchMapper; import jakarta.annotation.Resource; @@ -24,8 +19,6 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Calendar; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -71,12 +64,10 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { public void updateMaterialBatch(MaterialBatchSaveReqVO updateReqVO) { // 校验存在 Long reqId = updateReqVO.getId(); - validateMaterialBatchExists(reqId); - - // 已经拆分工段的不可编辑 - List asnDOs = materialBatchMapper.selectList(Wrappers.lambdaQuery(MaterialBatchDO.class) - .eq(MaterialBatchDO::getParentId, reqId)); - if (CollUtil.isNotEmpty(asnDOs)) throw exception(MATERIAL_BATCH_ASSIGN_END); + MaterialBatchDO batchDO = materialBatchMapper.selectById(reqId); + if (batchDO == null) throw exception(MATERIAL_BATCH_NOT_EXISTS); + // 已经提交的不可修改 + if (batchDO.getSubmitStatus() == 1) throw new ServiceException(1_032_160_000, "批次已经提交,不可修改"); // 更新 MaterialBatchDO updateObj = BeanUtils.toBean(updateReqVO, MaterialBatchDO.class); @@ -137,11 +128,19 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { @Override public PageResult getMaterialBatchPageWithPdtInfo(MaterialBatchPageReqVO pageReqVO) { - // 先分页查询批次或工段 - Boolean onlyGong = pageReqVO.getOnlyGong(); - PageResult pageResult = getMaterialBatchRespVOPageWithPdtInfo(pageReqVO, onlyGong); - // 只获取工段 - if (onlyGong) return pageResult; + Long pdtId = pageReqVO.getProductId(); + PageResult pageResult; + if (pdtId == null) { + pageResult = materialBatchMapper.selectPageWithPdtInfo(pageReqVO, List.of()); + } else { + List mtrlDos = materialProductService.getMaterialProductsByLikeIdPath(pdtId); + if (CollUtil.isEmpty(mtrlDos)) { + pageResult = materialBatchMapper.selectPageWithPdtInfo(pageReqVO, List.of()); + } else { + List pdtIds = mtrlDos.stream().map(MaterialProductDO::getId).toList(); + pageResult = materialBatchMapper.selectPageWithPdtInfo(pageReqVO, pdtIds); + } + } // 如果获取是批次分页,再根据批次ids获取工段 List batches = pageResult.getList(); if (CollUtil.isNotEmpty(batches)) { @@ -181,7 +180,7 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { // 2. 拆分后的数量要相等 MaterialBatchDO mtrlBat = materialBatchMapper.selectById(batId); if (mtrlBat == null) throw exception(MATERIAL_BATCH_NOT_EXISTS); - + if (mtrlBat.getSubmitStatus() == 1) throw new ServiceException(1_032_160_000, "批次已经提交,不可修改"); BigDecimal total = BigDecimal.valueOf(0); for (MaterialBatchSaveReqVO batAsn : createReqVOs) { total = total.add(batAsn.getInboundQuantity()); @@ -192,7 +191,6 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { boolean exists = materialBatchMapper.exists(Wrappers.lambdaQuery(MaterialBatchDO.class) .eq(MaterialBatchDO::getParentId, batId)); if (exists) { - if (mtrlBat.getSubmitStatus() == 1) throw new ServiceException(1_032_160_000, "批次已经提交,禁止修改"); // 删除之前的拆分数据 materialBatchMapper.delete(Wrappers.lambdaQuery(MaterialBatchDO.class) .eq(MaterialBatchDO::getParentId, batId)); @@ -267,22 +265,18 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { @Override public PageResult getMaterialBatchGongPageWithPdtInfo(MaterialBatchPageReqVO pageReqVO) { - - return getMaterialBatchRespVOPageWithPdtInfo(pageReqVO, true); - } - - private PageResult getMaterialBatchRespVOPageWithPdtInfo(MaterialBatchPageReqVO pageReqVO, boolean onlyGong) { + // 需要排除已经被选择的工段 Long pdtId = pageReqVO.getProductId(); PageResult pageResult; if (pdtId == null) { - pageResult = materialBatchMapper.selectPage(pageReqVO, List.of(), onlyGong); + pageResult = materialBatchMapper.selectGongPage(pageReqVO, List.of()); } else { List mtrlDos = materialProductService.getMaterialProductsByLikeIdPath(pdtId); if (CollUtil.isEmpty(mtrlDos)) { - pageResult = materialBatchMapper.selectPage(pageReqVO, List.of(), onlyGong); + pageResult = materialBatchMapper.selectGongPage(pageReqVO, List.of()); } else { List pdtIds = mtrlDos.stream().map(MaterialProductDO::getId).toList(); - pageResult = materialBatchMapper.selectPage(pageReqVO, pdtIds, onlyGong); + pageResult = materialBatchMapper.selectGongPage(pageReqVO, pdtIds); } } return pageResult; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java index c6e1aef..37d0f3c 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialLifecycleServiceImpl.java @@ -2,6 +2,8 @@ package com.zt.plat.module.qms.resource.material.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; import com.zt.plat.framework.common.exception.ServiceException; import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.PageResult; @@ -10,23 +12,28 @@ import com.zt.plat.framework.security.core.LoginUser; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.module.bpm.api.task.BpmProcessInstanceApi; import com.zt.plat.module.bpm.api.task.BpmTaskApi; +import com.zt.plat.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import com.zt.plat.module.bpm.api.task.dto.BpmTaskApproveReqDTO; import com.zt.plat.module.bpm.api.task.dto.BpmTaskRespDTO; +import com.zt.plat.module.qms.api.task.BMPCallbackInterface; +import com.zt.plat.module.qms.api.task.dto.QmsBpmDTO; import com.zt.plat.module.qms.enums.QmsCommonConstant; -import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleDetailRespVO; -import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecyclePageReqVO; -import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleRespVO; -import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleSaveReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.*; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDetailDO; import com.zt.plat.module.qms.resource.material.dal.mapper.MaterialLifecycleMapper; import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -36,15 +43,17 @@ import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.e import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception0; import static com.zt.plat.module.qms.enums.ErrorCodeConstants.ERROR_CODE_MODULE_COMMON; import static com.zt.plat.module.qms.enums.ErrorCodeConstants.MATERIAL_LIFECYCLE_NOT_EXISTS; +import static com.zt.plat.module.qms.enums.QmsBpmConstant.BPM_CALLBACK_BEAN_NAME; /** * 物料通用流程,物料验收、退换货 Service 实现类 * * @author 后台管理 */ -@Service +@Slf4j +@Service("materialLifecycleService") @Validated -public class MaterialLifecycleServiceImpl implements MaterialLifecycleService { +public class MaterialLifecycleServiceImpl implements MaterialLifecycleService , BMPCallbackInterface { @Resource private MaterialLifecycleMapper materialLifecycleMapper; @@ -67,14 +76,28 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService { // 插入 MaterialLifecycleDO mtrlLfc = BeanUtils.toBean(createReqVO, MaterialLifecycleDO.class); mtrlLfc.setSubmitStatus(0); + String loginUserNickname = SecurityFrameworkUtils.getLoginUserNickname(); + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + if (loginUser == null) throw new ServiceException(1_032_160_000, "登录用户不存在"); + mtrlLfc.setApplyUser(loginUserNickname) + .setApplyUserId(loginUser.getId()) + .setApplyDepartment(loginUser.getVisitDeptName()) + .setApplyDepartmentId(loginUser.getVisitDeptId()); + mtrlLfc.setFlowStatus(QmsCommonConstant.NOT_START); materialLifecycleMapper.insert(mtrlLfc); - List gongIds = createReqVO.getGongIds(); - if (CollUtil.isEmpty(gongIds)) + List detailList = createReqVO.getDetailList(); + if (CollUtil.isEmpty(detailList)) return BeanUtils.toBean(mtrlLfc, MaterialLifecycleRespVO.class); // 保存工段明细 + List gongIds = detailList.stream().map(MaterialLifecycleDetailSaveReqVO::getBatchGongduanId).toList(); + Map gongAssayMap = detailList.stream().collect(Collectors.toMap( + MaterialLifecycleDetailSaveReqVO::getBatchGongduanId, MaterialLifecycleDetailSaveReqVO::getAssayFlag)); List gongs = materialBatchService.getGongduanListByGongIds(gongIds); if (CollUtil.isEmpty(gongs) || gongs.size() != gongIds.size()) throw new ServiceException(1_032_160_000, "工段不存在或与传入的工段数量不匹配"); + for (MaterialBatchDO gong : gongs) { + gong.setAssayFlag(gongAssayMap.get(gong.getId())); + } List detailDOS = getLifecycleDetailDOsByGongs(gongs, gongIds, mtrlLfc); materialLifecycleDetailService.saveBatch(detailDOS); return BeanUtils.toBean(mtrlLfc, MaterialLifecycleRespVO.class); @@ -92,6 +115,7 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService { detailDO.setLifecycleId(mtrlLfc.getId()) .setProductId(gong.getProductId()).setBatchId(gong.getParentId()) .setBatchGongduanId(gong.getId()) + .setAssayFlag(gong.getAssayFlag()) .setTreatmentStatus(0); return detailDO; }).toList(); @@ -104,21 +128,28 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService { MaterialLifecycleDO lifecycleDO = materialLifecycleMapper.selectById(reqId); if (lifecycleDO == null) throw exception(MATERIAL_LIFECYCLE_NOT_EXISTS); if (lifecycleDO.getSubmitStatus() == 1) throw new ServiceException(1_032_160_000, "流程已提交,不可修改"); - List gongIds = updateReqVO.getGongIds(); + List detailList = updateReqVO.getDetailList(); // 更新 MaterialLifecycleDO mtrlLfc = BeanUtils.toBean(updateReqVO, MaterialLifecycleDO.class); - if (CollUtil.isEmpty(gongIds)) { + if (CollUtil.isEmpty(detailList)) { materialLifecycleMapper.updateById(mtrlLfc); return; } // 删除原来的明细 materialLifecycleDetailService.deleteLifecycleDetailListByLfcId(reqId); + List gongIds = detailList.stream().map(MaterialLifecycleDetailSaveReqVO::getBatchGongduanId).toList(); + Map gongAssayMap = detailList.stream().collect(Collectors.toMap( + MaterialLifecycleDetailSaveReqVO::getBatchGongduanId, MaterialLifecycleDetailSaveReqVO::getAssayFlag)); List gongs = materialBatchService.getGongduanListByGongIds(gongIds); if (CollUtil.isEmpty(gongs) || gongs.size() != gongIds.size()) throw new ServiceException(1_032_160_000, "工段不存在或与传入的工段数量不匹配"); + for (MaterialBatchDO gong : gongs) { + gong.setAssayFlag(gongAssayMap.get(gong.getId())); + } // 保存新的明细 List detailDOS = getLifecycleDetailDOsByGongs(gongs, gongIds, mtrlLfc); materialLifecycleDetailService.saveBatch(detailDOS); + materialLifecycleMapper.updateById(mtrlLfc); } @Transactional @@ -178,7 +209,18 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService { @Override public PageResult getMaterialLifecyclePage(MaterialLifecyclePageReqVO pageReqVO) { - return materialLifecycleMapper.selectPage(pageReqVO); + PageResult pageResult = materialLifecycleMapper.selectPage(pageReqVO); + List list = pageResult.getList(); + if (CollUtil.isEmpty(list)) return pageResult; + list.forEach(mtrlLfc -> { + String formData = mtrlLfc.getFormData(); + if (formData != null) { + String title = (String) JSONUtil.parseObj(formData).get("title"); + mtrlLfc.setTitle(title); + } + }); + pageResult.setList(list); + return pageResult; } @Override @@ -187,7 +229,7 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService { if (lifecycleDO == null) throw exception(MATERIAL_LIFECYCLE_NOT_EXISTS); Integer submitStatus = lifecycleDO.getSubmitStatus(); if (submitStatus == 1) throw new ServiceException(1_032_160_000, "申请已经提交过"); - + lifecycleDO.setApplyTime(LocalDateTime.now()); // 发起流程 this.createProcessInstance(lifecycleDO); @@ -197,73 +239,10 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService { } private void createProcessInstance(MaterialLifecycleDO lifecycleDO) { - /* - LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); - //当前登录用户昵称 - String nickName = SecurityFrameworkUtils.getLoginUserNickname(); - Long id = param.getId(); - SupplierEvaluationDO entity = getSupplierEvaluation(id); - String flowInsId = entity.getFlowInstanceId(); - if(!ObjectUtils.isEmpty(flowInsId)){ - CommonResult> taskRet = bpmTaskApi.getTaskListByProcessInstanceId(flowInsId); - List taskList = taskRet.getData(); - if(taskList.isEmpty()) - throw exception0(ERROR_CODE_MODULE_COMMON, "流程任务查询失败,请联系管理员处理"); - String taskId = taskList.get(taskList.size() - 1).getId(); - //驳回后重新提交 - BpmTaskApproveReqDTO reqVO = new BpmTaskApproveReqDTO(); - reqVO.setId(taskId); - CommonResult result = bpmProcessInstanceApi.approveTask(reqVO); - if(!result.isSuccess()){ - throw exception0(ERROR_CODE_MODULE_COMMON, result.getMsg()); - } - entity.setFlowStatus(QmsCommonConstant.IN_PROGRESS); - //todo 生成报告编号 documentCode - supplierEvaluationMapper.updateById(entity); - SupplierEvaluationRespVO respVO = BeanUtils.toBean(entity, SupplierEvaluationRespVO.class); - return CommonResult.success(respVO); - } - JSONObject formData = new JSONObject(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - - formData.put("mainId", id); - formData.put("applyUser", nickName); - formData.put("applyUserId", loginUser.getId()); - formData.put("applyDepartment", loginUser.getVisitDeptName()); - formData.put("applyDepartmentId", loginUser.getVisitDeptId()); - formData.put("applyTime", sdf.format(new Date())); - Map variables = formData.toJavaObject(Map.class); - variables.put(BPM_CALLBACK_BEAN_NAME, "supplierEvaluationService"); //流程回调时使用的service - BpmProcessInstanceCreateReqDTO reqDTO = new BpmProcessInstanceCreateReqDTO(); - reqDTO.setBusinessKey(String.valueOf(id)); - reqDTO.setProcessDefinitionKey(QmsSupplierConstant.EVALUATION_FLOW_KEY); - reqDTO.setVariables(variables); - CommonResult result = bpmProcessInstanceApi.createProcessInstance(loginUser.getId(), reqDTO); - if(!result.isSuccess()){ - throw exception0(ERROR_CODE_MODULE_COMMON, result.getMsg()); - } - String wfInsId = result.getData(); - entity.setFlowInstanceId(wfInsId); - entity.setFlowStatus(QmsCommonConstant.IN_PROGRESS); - entity.setEvaluationDate(LocalDateTime.now()); - entity.setEvaluator(nickName); - supplierEvaluationMapper.updateById(entity); - SupplierEvaluationRespVO respVO = BeanUtils.toBean(entity, SupplierEvaluationRespVO.class); - return CommonResult.success(respVO); - */ - // 发起人及其部门 - LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); - String loginUserNickname = SecurityFrameworkUtils.getLoginUserNickname(); - if (loginUser != null) { - lifecycleDO.setApplyUser(loginUserNickname) - .setApplyUserId(loginUser.getId()) - .setApplyDepartment(loginUser.getVisitDeptName()) - .setApplyDepartmentId(loginUser.getVisitDeptId()); - } String flowInstanceId = lifecycleDO.getFlowInstanceId(); - // 创建流程 - if (StrUtil.isEmpty(flowInstanceId)) { + // 流程已经发起过 + if (StrUtil.isNotEmpty(flowInstanceId)) { CommonResult> taskRet = bpmTaskApi.getTaskListByProcessInstanceId(flowInstanceId); List taskList = taskRet.getData(); if(CollUtil.isEmpty(taskList)) @@ -279,18 +258,85 @@ public class MaterialLifecycleServiceImpl implements MaterialLifecycleService { lifecycleDO.setFlowStatus(QmsCommonConstant.IN_PROGRESS); return; } + // 发起流程 + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + if (loginUser == null) return; + String loginUserNickname = SecurityFrameworkUtils.getLoginUserNickname(); + Long loginUserId = loginUser.getId(); + Map variables = new HashMap<>(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - switch (lifecycleDO.getBusinessType()) { - case "acceptance": - // 发起验收流程 - break; - case "return_exchange": - // 发起退换货流程 - break; - case "config_apply": - // 配置申请 - break; + variables.put("mainId", lifecycleDO.getId()); + variables.put("applyUser", loginUserNickname); + variables.put("applyUserId", loginUserId); + variables.put("applyDepartment", loginUser.getVisitDeptName()); + variables.put("applyDepartmentId", loginUser.getVisitDeptId()); + variables.put("applyTime", sdf.format(new Date())); + variables.put(BPM_CALLBACK_BEAN_NAME, "materialLifecycleService"); + BpmProcessInstanceCreateReqDTO reqDTO = new BpmProcessInstanceCreateReqDTO(); + reqDTO.setBusinessKey(String.valueOf(lifecycleDO.getId())) + .setVariables(variables); + +// switch (lifecycleDO.getBusinessType()) { +// case "验收": +// reqDTO.setProcessDefinitionKey("MATERIAL_ACCEPTANCE_FLOW_KEY"); +// break; +// case "退换货": +// reqDTO.setProcessDefinitionKey("MATERIAL_RETURN_EXCHANGE_FLOW_KEY"); +// break; +// case "配置申请": +// reqDTO.setProcessDefinitionKey("MATERIAL_CONFIG_APPLY_FLOW_KEY"); +// break; +// } + reqDTO.setProcessDefinitionKey("QMS_RESOURCE_MATERIAL_COMMON"); + CommonResult result = bpmProcessInstanceApi.createProcessInstance(loginUserId, reqDTO); + if(!result.isSuccess()){ + throw exception0(ERROR_CODE_MODULE_COMMON, result.getMsg()); } + lifecycleDO.setFlowInstanceId(result.getData()); + lifecycleDO.setFlowStatus(QmsCommonConstant.IN_PROGRESS); + lifecycleDO.setApplyUser(loginUserNickname) + .setApplyUserId(loginUserId) + .setApplyDepartment(loginUser.getVisitDeptName()) + .setApplyDepartmentId(loginUser.getVisitDeptId()); } + /** + * 流程回调处理 + * + */ + @Override + public CommonResult callback(QmsBpmDTO reqDTO) { + log.info("物料流程回调信息:{}", reqDTO.toString()); + /* + QmsBpmDTO( + processInstanceId=042585c1-00e3-11f1-9df0-005056c00001, + businessKey=2018618104343769090, + variables={ + "_FLOWABLE_SKIP_EXPRESSION_ENABLED":true, + "processInstanceId":"042585c1-00e3-11f1-9df0-005056c00001", + "nrOfActiveInstances":1, + "bpmFieldExtensions":[], + "PROCESS_STATUS":1, + "currentActivityInsId":"043c904a-00e3-11f1-9df0-005056c00001", + "bpmCallbackBean":"materialLifecycleService", + "applyDepartment":"检验检测管理中心", + "Activity_0tp833v_assignees":["2008359763063820290"], + "loopCounter":0, + "applyUserId":"2008359763063820290", + "nrOfInstances":1, + "PROCESS_START_USER_ID":"2008359763063820290", + "applyUser":"云铜检验管理员", + "Activity_0tp833v_assignee":"2008359763063820290", + "applyDepartmentId":170, + "applyTime":"2026-02-03 17:30:44", + "mainId":"2018618104343769090", + "bpmCallbackActivityId":"Activity_0tp833v", + "nrOfCompletedInstances":1 + }, + state=) + */ + // 变更流程状态 + return null; + } } \ No newline at end of file From 5a82d9abd88374f0b0eeabcc4659bc1bac40d361 Mon Sep 17 00:00:00 2001 From: wxr Date: Wed, 4 Feb 2026 16:17:51 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=88=86=E9=85=8D?= =?UTF-8?q?=E5=8F=8A=E5=88=86=E6=9E=90=E4=BB=BB=E5=8A=A1=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E6=97=B6=E9=85=8D=E6=96=99=E5=80=BC=E8=B5=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/SampleAnalysisController.java | 1 + .../vo/BusinessAssayTaskDataExtendRespVO.java | 3 + .../mapper/BusinessAssayTaskDataMapper.java | 14 ++ .../BusinessAssayTaskDataServiceImpl.java | 100 ++++++++- .../service/SampleAnalysisServiceImpl.java | 211 +++++++++++------- .../vo/ConfigSubSampleMethodConfInfo.java | 3 + .../vo/ConfigSubSampleMethodConfPoint.java | 5 +- .../service/AutoIngredientsServiceImpl.java | 43 ++-- 8 files changed, 278 insertions(+), 102 deletions(-) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleAnalysisController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleAnalysisController.java index 2d2ca38..5b29457 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleAnalysisController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/SampleAnalysisController.java @@ -71,6 +71,7 @@ public class SampleAnalysisController implements BusinessControllerMarker { return success("成功"); } + //提交分析 @PostMapping("/submitSampleAnalysisByTaskId") public CommonResult submitSampleAnalysisByTaskId(Long businessAssayTaskId) { sampleAnalysisService.submitSampleAnalysisByTaskId(businessAssayTaskId); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskDataExtendRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskDataExtendRespVO.java index abb66a9..42e371d 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskDataExtendRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskDataExtendRespVO.java @@ -44,4 +44,7 @@ public class BusinessAssayTaskDataExtendRespVO extends BusinessAssayTaskDataResp private Integer asmtIsRecheck; private String asmtReportedStatus; + + @Schema(description = "配料信息") + private String ingredientInfo; } 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 3f7438c..5334e4c 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 @@ -374,9 +374,11 @@ public interface BusinessAssayTaskDataMapper extends BaseMapperX selectExtendByBusinessAssayTaskId(Long businessAssayTaskId) { return selectJoinList(BusinessAssayTaskDataExtendRespVO.class, new MPJLambdaWrapperX() + .leftJoin(BusinessSubSampleDO.class, BusinessSubSampleDO::getId, BusinessAssayTaskDataDO::getBusinessSubSampleId) .leftJoin(BusinessBaseSampleDO.class, BusinessBaseSampleDO::getId, BusinessAssayTaskDataDO::getBusinessBaseSampleId) .selectAll(BusinessAssayTaskDataDO.class) .selectAs(BusinessBaseSampleDO::getConfigBaseSampleId, BusinessAssayTaskDataExtendRespVO::getConfigBaseSampleId) + .selectAs(BusinessSubSampleDO::getConfigSubSampleId, BusinessAssayTaskDataExtendRespVO::getConfigSubSampleId) .eq(BusinessAssayTaskDataDO::getBusinessAssayTaskId, businessAssayTaskId)); } @@ -390,6 +392,18 @@ public interface BusinessAssayTaskDataMapper extends BaseMapperX selectByBusinessSubSampleIdAndMethodKey(Long businessSubSampleId, String methodKey) { + String inSql = "SELECT tcam.ID FROM T_CFG_ASY_MTHD tcam WHERE tcam.DELETED = 0 AND tcam.DIC_BSN_KY = '" + methodKey + "'"; + return selectList(new LambdaQueryWrapperX() + .eq(BusinessAssayTaskDataDO::getBusinessSubSampleId, businessSubSampleId) + .inSql(BusinessAssayTaskDataDO::getConfigAssayMethodId, inSql)); + } /** * 根据子样及分析部门查询分析任务 diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayTaskDataServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayTaskDataServiceImpl.java index fea9f71..d918301 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayTaskDataServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayTaskDataServiceImpl.java @@ -1,17 +1,30 @@ package com.zt.plat.module.qms.business.bus.service; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import com.zt.plat.module.qms.business.bus.controller.vo.*; + +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; import java.util.*; +import java.util.stream.Collectors; + import com.zt.plat.module.qms.business.bus.controller.vo.*; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayParameterDataMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayProjectDataMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayTaskDataMapper; +import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfInfo; +import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfItem; +import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfPoint; +import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodExtendRespVO; +import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSubSampleMethodMapper; import com.zt.plat.framework.common.pojo.PageResult; +import com.alibaba.fastjson2.JSON; import com.zt.plat.framework.common.pojo.PageParam; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.security.core.LoginUser; @@ -34,6 +47,15 @@ public class BusinessAssayTaskDataServiceImpl implements BusinessAssayTaskDataSe @Resource private BusinessAssayTaskDataMapper businessAssayTaskDataMapper; + + @Resource + private BusinessAssayProjectDataMapper businessAssayProjectDataMapper; + + @Resource + private BusinessAssayParameterDataMapper businessAssayParameterDataMapper; + + @Resource + private ConfigSubSampleMethodMapper configSubSampleMethodMapper; @Override public BusinessAssayTaskDataRespVO createBusinessAssayTaskData(BusinessAssayTaskDataSaveReqVO createReqVO) { @@ -100,12 +122,86 @@ public class BusinessAssayTaskDataServiceImpl implements BusinessAssayTaskDataSe @Override public List getBusinessAssayTaskDataList(BusinessAssayTaskDataReqVO reqVO) { - return businessAssayTaskDataMapper.selectList(reqVO); + List list = businessAssayTaskDataMapper.selectList(reqVO); + List configSubSampleIdList = list.stream().map(m -> m.getConfigSubSampleId()).collect(Collectors.toList()); + List configSubSampleMethodList = configSubSampleMethodMapper.selectByConfigSubSampleIdsAndConfigAssayMethodId(configSubSampleIdList, reqVO.getConfigAssayMethodId()); + List businessAssayTaskDataIdList = list.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 businessAssayParameterDataList = businessAssayParameterDataMapper.selectExtendByBusinessAssayProjectDataIds(businessAssayProjectDataIdList); + + for (BusinessAssayTaskDataExtendRespVO businessAssayTaskData : list) { + ConfigSubSampleMethodExtendRespVO configSubSampleMethod = configSubSampleMethodList.stream().filter(f -> f.getConfigSubSampleId().equals(businessAssayTaskData.getConfigSubSampleId()) && f.getConfigAssayMethodId().equals(businessAssayTaskData.getConfigAssayMethodId())).findFirst().orElse(null); + String configInfomation = configSubSampleMethod.getConfigInfomation(); + if (StringUtils.isNotBlank(configInfomation)) { + ConfigSubSampleMethodConfInfo configSubSampleMethodConfInfo = JSON.parseObject(configInfomation, ConfigSubSampleMethodConfInfo.class); + List getParamList = configSubSampleMethodConfInfo.getGetParam(); + StringBuilder ingredientInfoBuilder = new StringBuilder(); + for (ConfigSubSampleMethodConfItem configSubSampleMethodConfItem : getParamList) { + ConfigSubSampleMethodConfPoint target = configSubSampleMethodConfItem.getTarget(); + List projectList = Arrays.asList(target.getProject().split(","));//来源可以有多个 + for (String project : projectList) { + String parameter = target.getParameter(); + BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = businessAssayProjectDataList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(businessAssayTaskData.getId()) && f.getSimpleName().equals(project)).findFirst().orElse(null); + BusinessAssayParameterDataExtendRespVO currentBusinessAssayParameterData = businessAssayParameterDataList.stream().filter(f -> f.getBusinessAssayProjectDataId().equals(currentBusinessAssayProjectData.getId()) && f.getParameterKey().equals(parameter)).findFirst().orElse(null); + if (currentBusinessAssayParameterData != null && StringUtils.isNotBlank(currentBusinessAssayParameterData.getValue())) { + ingredientInfoBuilder.append(currentBusinessAssayParameterData.getParameterName()).append(":").append(currentBusinessAssayParameterData.getValue()).append("、"); + break; + } + } + } + if (ingredientInfoBuilder.length() > 0) { + ingredientInfoBuilder.delete(ingredientInfoBuilder.length() - 1, ingredientInfoBuilder.length()); + } + businessAssayTaskData.setIngredientInfo(ingredientInfoBuilder.toString()); + } + } + + return list; } @Override public PageResult getBusinessAssayTaskDataPage(BusinessAssayTaskDataPageReqVO pageReqVO) { - return businessAssayTaskDataMapper.selectPage(pageReqVO); + PageResult page = businessAssayTaskDataMapper.selectPage(pageReqVO); + List list = page.getList(); + List configSubSampleIdList = list.stream().map(m -> m.getConfigSubSampleId()).collect(Collectors.toList()); + List configSubSampleMethodList = configSubSampleMethodMapper.selectByConfigSubSampleIdsAndConfigAssayMethodId(configSubSampleIdList, pageReqVO.getConfigAssayMethodId()); + List businessAssayTaskDataIdList = list.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 businessAssayParameterDataList = businessAssayParameterDataMapper.selectExtendByBusinessAssayProjectDataIds(businessAssayProjectDataIdList); + + for (BusinessAssayTaskDataExtendRespVO businessAssayTaskData : list) { + ConfigSubSampleMethodExtendRespVO configSubSampleMethod = configSubSampleMethodList.stream().filter(f -> f.getConfigSubSampleId().equals(businessAssayTaskData.getConfigSubSampleId()) && f.getConfigAssayMethodId().equals(businessAssayTaskData.getConfigAssayMethodId())).findFirst().orElse(null); + String configInfomation = configSubSampleMethod.getConfigInfomation(); + if (StringUtils.isNotBlank(configInfomation)) { + ConfigSubSampleMethodConfInfo configSubSampleMethodConfInfo = JSON.parseObject(configInfomation, ConfigSubSampleMethodConfInfo.class); + List getParamList = configSubSampleMethodConfInfo.getGetParam(); + StringBuilder ingredientInfoBuilder = new StringBuilder(); + for (ConfigSubSampleMethodConfItem configSubSampleMethodConfItem : getParamList) { + ConfigSubSampleMethodConfPoint target = configSubSampleMethodConfItem.getTarget(); + List projectList = Arrays.asList(target.getProject().split(","));//来源可以有多个 + for (String project : projectList) { + String parameter = target.getParameter(); + BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = businessAssayProjectDataList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(businessAssayTaskData.getId()) && f.getSimpleName().equals(project)).findFirst().orElse(null); + BusinessAssayParameterDataExtendRespVO currentBusinessAssayParameterData = businessAssayParameterDataList.stream().filter(f -> f.getBusinessAssayProjectDataId().equals(currentBusinessAssayProjectData.getId()) && f.getParameterKey().equals(parameter)).findFirst().orElse(null); + if (currentBusinessAssayParameterData != null && StringUtils.isNotBlank(currentBusinessAssayParameterData.getValue())) { + ingredientInfoBuilder.append(currentBusinessAssayParameterData.getParameterName()).append(":").append(currentBusinessAssayParameterData.getValue()).append("、"); + break; + } + } + } + if (ingredientInfoBuilder.length() > 0) { + ingredientInfoBuilder.delete(ingredientInfoBuilder.length() - 1, ingredientInfoBuilder.length()); + } + businessAssayTaskData.setIngredientInfo(ingredientInfoBuilder.toString()); + } + } + return page; } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisServiceImpl.java index 51778dd..251916b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisServiceImpl.java @@ -21,7 +21,6 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.zt.plat.framework.common.exception.ServiceException; -import com.zt.plat.framework.common.util.date.DateUtils; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.security.core.LoginUser; @@ -85,7 +84,6 @@ import com.zt.plat.module.qms.business.config.dal.dataobject.BaseSampleDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectCoefficientDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectRangeDO; -import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSubSampleMethodDO; import com.zt.plat.module.qms.business.config.dal.mapper.BaseSampleMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectCoefficientMapper; @@ -98,9 +96,7 @@ import com.zt.plat.module.qms.common.dic.controller.vo.DictionaryBusinessExtendR import com.zt.plat.module.qms.common.dic.dal.mapper.DictionaryBusinessMapper; import com.zt.plat.module.qms.enums.QmsCommonConstant; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import jakarta.annotation.Resource; @@ -662,85 +658,87 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService { Long configMethodId = source.getMethodId(); String sourceProject = source.getProject(); //String sourceParameter = source.getParameter(); - - + ConfigSubSampleMethodConfPoint target = configSubSampleMethodConfItem.getTarget();//目标 - String targetProject = target.getProject(); - String targetParameter = target.getParameter(); - - BusinessAssayParameterDataDO businessAssayParameterDataDO = businessAssayParameterDataMapper.selectByBusinessAssayTaskDataIdAndProjectSimpleNameAndParameterKey(businessAssayTaskDataDO.getId(), targetProject, targetParameter); - if (businessAssayParameterDataDO == null) { - throw new ServiceException(1_032_100_000, "子样检测方法映射配置错误"); - } - - if (StringUtils.isBlank(businessAssayParameterDataDO.getValue())) { - //1 查询委托明细 - BusinessSampleEntrustDetailDO businessSampleEntrustDetailDO = businessSampleEntrustDetailMapper.selectByBusinessBaseSampleId(businessAssayTaskDataDO.getBusinessBaseSampleId()); - //2 查询样品大类 - BaseSampleDO baseSampleDO = baseSampleMapper.selectById(businessSampleEntrustDetailDO.getBaseSampleId()); - //3 判断样品大类类型 - if (QmsCommonConstant.ENTRUST_INSPECTION_ANALYSIS_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey())) {//如果是商检分析样 - //查询当前批次的第一个商检分析样 - BusinessSampleEntrustDetailDO currBatchFirstBusinessSampleEntrustDetailDO = businessSampleEntrustDetailMapper.selectCurrBatchFirstByBusinessBaseSampleIdAndBaseSampleDictionaryBusinessKey(businessAssayTaskDataDO.getBusinessBaseSampleId(), QmsCommonConstant.ENTRUST_INSPECTION_ANALYSIS_SAMPLE); - List currBusinessSubParentSampleDOList = businessSubParentSampleMapper.selectByBusinessBaseSampleId(currBatchFirstBusinessSampleEntrustDetailDO.getBusinessBaseSampleId()); - List currBusinessSubParentSampleIdList = currBusinessSubParentSampleDOList.stream().map(m -> m.getId()).collect(Collectors.toList()); - List businessSubParentSampleAssessmentProjectList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(currBusinessSubParentSampleIdList, configMethodId); - BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessmentProject = businessSubParentSampleAssessmentProjectList.stream().filter(f -> f.getSimpleName().equals(sourceProject)).findFirst().orElse(null); - if (businessSubParentSampleAssessmentProject != null && StringUtils.isNotBlank(businessSubParentSampleAssessmentProject.getAssessmentValue())) { - businessAssayParameterDataDO.setValue(businessSubParentSampleAssessmentProject.getAssessmentValue()); - } - } else if (QmsCommonConstant.ENTRUST_COMPREHENSIVE_INSPECTION_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey())) {//如果是商检综合样 - //查询当前样品的其他分析方法的结果 - List businessSubParentSampleIdList = Arrays.asList(businessAssayTaskDataDO.getBusinessSubParentSampleId()); - List businessSubParentSampleAssessmentProjectList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIdList, configMethodId); - BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessmentProject = businessSubParentSampleAssessmentProjectList.stream().filter(f -> f.getSimpleName().equals(sourceProject)).findFirst().orElse(null); - if (businessSubParentSampleAssessmentProject != null && StringUtils.isNotBlank(businessSubParentSampleAssessmentProject.getAssessmentValue())) { - businessAssayParameterDataDO.setValue(businessSubParentSampleAssessmentProject.getAssessmentValue()); - } - } else if (QmsCommonConstant.ENTRUST_COMMISSION_INSPECTION_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey())) {//如果是委检样 - //查询来样品位 - Boolean isForecastS = false; - String forecastValue = null; - String forecastResult = businessSampleEntrustDetailDO.getForecastResult(); - if (StringUtils.isNotBlank(forecastResult)) { - JSONArray array = JSON.parseArray(forecastResult); - for (int i = 0; i < array.size(); i++) { - JSONObject item = array.getJSONObject(i); - if ("S".equals(item.getString("simpleName"))) { - isForecastS = true; - break; - } + + List projectList = Arrays.asList(target.getProject().split(","));//目标可以有多个 + for (String targetProject : projectList) { + String targetParameter = target.getParameter(); + + BusinessAssayParameterDataDO businessAssayParameterDataDO = businessAssayParameterDataMapper.selectByBusinessAssayTaskDataIdAndProjectSimpleNameAndParameterKey(businessAssayTaskDataDO.getId(), targetProject, targetParameter); + if (businessAssayParameterDataDO == null) { + throw new ServiceException(1_032_100_000, "子样检测方法映射配置错误"); + } + + if (StringUtils.isBlank(businessAssayParameterDataDO.getValue())) { + //1 查询委托明细 + BusinessSampleEntrustDetailDO businessSampleEntrustDetailDO = businessSampleEntrustDetailMapper.selectByBusinessBaseSampleId(businessAssayTaskDataDO.getBusinessBaseSampleId()); + //2 查询样品大类 + BaseSampleDO baseSampleDO = baseSampleMapper.selectById(businessSampleEntrustDetailDO.getBaseSampleId()); + //3 判断样品大类类型 + if (QmsCommonConstant.ENTRUST_INSPECTION_ANALYSIS_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey())) {//如果是商检分析样 + //查询当前批次的第一个商检分析样 + BusinessSampleEntrustDetailDO currBatchFirstBusinessSampleEntrustDetailDO = businessSampleEntrustDetailMapper.selectCurrBatchFirstByBusinessBaseSampleIdAndBaseSampleDictionaryBusinessKey(businessAssayTaskDataDO.getBusinessBaseSampleId(), QmsCommonConstant.ENTRUST_INSPECTION_ANALYSIS_SAMPLE); + List currBusinessSubParentSampleDOList = businessSubParentSampleMapper.selectByBusinessBaseSampleId(currBatchFirstBusinessSampleEntrustDetailDO.getBusinessBaseSampleId()); + List currBusinessSubParentSampleIdList = currBusinessSubParentSampleDOList.stream().map(m -> m.getId()).collect(Collectors.toList()); + List businessSubParentSampleAssessmentProjectList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(currBusinessSubParentSampleIdList, configMethodId); + BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessmentProject = businessSubParentSampleAssessmentProjectList.stream().filter(f -> f.getSimpleName().equals(sourceProject)).findFirst().orElse(null); + if (businessSubParentSampleAssessmentProject != null && StringUtils.isNotBlank(businessSubParentSampleAssessmentProject.getAssessmentValue())) { + businessAssayParameterDataDO.setValue(businessSubParentSampleAssessmentProject.getAssessmentValue()); } - for (int i = 0; i < array.size(); i++) { - JSONObject item = array.getJSONObject(i); - if (sourceProject.equals(item.getString("simpleName"))) { - forecastValue = item.getString("value"); - break; - } - } - } - if (isForecastS) {//来样品位存在S值, 则取预报的值 - businessAssayParameterDataDO.setValue(forecastValue); - } else { - //查询当前样品的其他方法的结果 + } else if (QmsCommonConstant.ENTRUST_COMPREHENSIVE_INSPECTION_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey())) {//如果是商检综合样 + //查询当前样品的其他分析方法的结果 List businessSubParentSampleIdList = Arrays.asList(businessAssayTaskDataDO.getBusinessSubParentSampleId()); List businessSubParentSampleAssessmentProjectList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIdList, configMethodId); BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessmentProject = businessSubParentSampleAssessmentProjectList.stream().filter(f -> f.getSimpleName().equals(sourceProject)).findFirst().orElse(null); if (businessSubParentSampleAssessmentProject != null && StringUtils.isNotBlank(businessSubParentSampleAssessmentProject.getAssessmentValue())) { businessAssayParameterDataDO.setValue(businessSubParentSampleAssessmentProject.getAssessmentValue()); } + } else if (QmsCommonConstant.ENTRUST_COMMISSION_INSPECTION_SAMPLE.equals(baseSampleDO.getDictionaryBusinessKey())) {//如果是委检样 + //查询来样品位 + Boolean isForecastS = false; + String forecastValue = null; + String forecastResult = businessSampleEntrustDetailDO.getForecastResult(); + if (StringUtils.isNotBlank(forecastResult)) { + JSONArray array = JSON.parseArray(forecastResult); + for (int i = 0; i < array.size(); i++) { + JSONObject item = array.getJSONObject(i); + if ("S".equals(item.getString("simpleName"))) { + isForecastS = true; + break; + } + } + for (int i = 0; i < array.size(); i++) { + JSONObject item = array.getJSONObject(i); + if (sourceProject.equals(item.getString("simpleName"))) { + forecastValue = item.getString("value"); + break; + } + } + } + if (isForecastS) {//来样品位存在S值, 则取预报的值 + businessAssayParameterDataDO.setValue(forecastValue); + } else { + //查询当前样品的其他方法的结果 + List businessSubParentSampleIdList = Arrays.asList(businessAssayTaskDataDO.getBusinessSubParentSampleId()); + List businessSubParentSampleAssessmentProjectList = businessSubParentSampleAssessmentProjectMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(businessSubParentSampleIdList, configMethodId); + BusinessSubParentSampleAssessmentProjectExtendRespVO businessSubParentSampleAssessmentProject = businessSubParentSampleAssessmentProjectList.stream().filter(f -> f.getSimpleName().equals(sourceProject)).findFirst().orElse(null); + if (businessSubParentSampleAssessmentProject != null && StringUtils.isNotBlank(businessSubParentSampleAssessmentProject.getAssessmentValue())) { + businessAssayParameterDataDO.setValue(businessSubParentSampleAssessmentProject.getAssessmentValue()); + } + } + } - } - - //处理已查询的数据 - BusinessAssayProjectAndParameterRespVO businessAssayProjectAndParameterRespVO = businessAssayParameterDataList.stream().filter(f -> f.getBizId().equals(businessAssayParameterDataDO.getBusinessAssayProjectDataId()) && f.getDicId().equals(businessAssayParameterDataDO.getConfigAssayMethodProjectParameterId()) ).findFirst().orElse(null); - if (businessAssayProjectAndParameterRespVO != null) { - businessAssayProjectAndParameterRespVO.setValue(businessAssayParameterDataDO.getValue()); - } + //处理已查询的数据 + BusinessAssayProjectAndParameterRespVO businessAssayProjectAndParameterRespVO = businessAssayParameterDataList.stream().filter(f -> f.getBizId().equals(businessAssayParameterDataDO.getBusinessAssayProjectDataId()) && f.getDicId().equals(businessAssayParameterDataDO.getConfigAssayMethodProjectParameterId()) ).findFirst().orElse(null); + if (businessAssayProjectAndParameterRespVO != null) { + businessAssayProjectAndParameterRespVO.setValue(businessAssayParameterDataDO.getValue()); + } - //更新 - businessAssayParameterDataMapper.updateById(businessAssayParameterDataDO); + //更新 + businessAssayParameterDataMapper.updateById(businessAssayParameterDataDO); + } } } } @@ -1275,8 +1273,56 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService { businessAssayTaskDO.setFinishStatus(QmsCommonConstant.IN_PROGRESS); businessAssayTaskDO.setFlowStatus(QmsCommonConstant.IN_PROGRESS); + //设置参数值 + List updateBusinessAssayParameterDataList = new ArrayList<>(); + List businessAssayTaskDataExtendList = businessAssayTaskDataMapper.selectExtendByBusinessAssayTaskId(businessAssayTaskId); + //查询检测项目 + List businessAssayTaskDataIdList = businessAssayTaskDataExtendList.stream().map(m -> m.getId()).collect(Collectors.toList()); + List businessAssayProjectDataExtendList = businessAssayProjectDataMapper.selectByBusinessAssayTaskDataIds(businessAssayTaskDataIdList); + + //子样配置id列表 + List configSubSampleIdList = businessAssayTaskDataExtendList.stream().map(m -> m.getConfigSubSampleId()).distinct().collect(Collectors.toList()); + + //子样方法配置列表 + List configSubSampleMethodDOList = configSubSampleMethodMapper.selectByConfigSubSampleIdsAndConfigAssayMethodId(configSubSampleIdList, businessAssayTaskDO.getConfigAssayMethodId()); + + //循环任务,赋值 + for (BusinessAssayTaskDataExtendRespVO businessAssayTaskData : businessAssayTaskDataExtendList) { + ConfigSubSampleMethodExtendRespVO configSubSampleMethod = configSubSampleMethodDOList.stream().filter(f -> f.getConfigBaseSampleId().equals(businessAssayTaskData.getConfigSubSampleId()) && f.getConfigAssayMethodId().equals(businessAssayTaskData.getConfigAssayMethodId())).findFirst().orElse(null); + String configInfomation = configSubSampleMethod.getConfigInfomation(); + if (StringUtils.isNotBlank(configInfomation)) { + ConfigSubSampleMethodConfInfo configSubSampleMethodConfInfo = JSON.parseObject(configInfomation, ConfigSubSampleMethodConfInfo.class); + List setParamList = configSubSampleMethodConfInfo.getSetParam(); + + String methodKey = setParamList.stream().map(m -> m.getTarget().getMethodKey()).distinct().findFirst().orElse(null); + List targetBusinessAssayTaskDataList = businessAssayTaskDataMapper.selectByBusinessSubSampleIdAndMethodKey(businessAssayTaskData.getBusinessSubSampleId(), methodKey); + List targetBusinessAssayTaskDataIdList = targetBusinessAssayTaskDataList.stream().map(m -> m.getId()).collect(Collectors.toList()); + List targetBusinessAssayProjectDataExtendList = businessAssayProjectDataMapper.selectByBusinessAssayTaskDataIds(targetBusinessAssayTaskDataIdList); + + for (ConfigSubSampleMethodConfItem configSubSampleMethodConfItem : setParamList) { + ConfigSubSampleMethodConfPoint source = configSubSampleMethodConfItem.getSource(); + String project = source.getProject(); + BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = businessAssayProjectDataExtendList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(businessAssayTaskData.getId()) && f.getSimpleName().equals(project)).findFirst().orElse(null); + ConfigSubSampleMethodConfPoint target = configSubSampleMethodConfItem.getTarget(); + for (BusinessAssayTaskDataDO targetBusinessAssayTaskData : targetBusinessAssayTaskDataList) { + List targetProjectList = Arrays.asList(target.getProject().split(",")); + String targetParameter = target.getParameter(); + for (String targetProject : targetProjectList) { + BusinessAssayProjectDataExtendRespVO targetBusinessAssayProjectData = targetBusinessAssayProjectDataExtendList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(targetBusinessAssayTaskData.getId()) && f.getSimpleName().equals(targetProject)).findFirst().orElse(null); + BusinessAssayParameterDataDO businessAssayParameterDataDO = businessAssayParameterDataMapper.selectByBusinessAssayTaskDataIdAndProjectSimpleNameAndParameterKey(targetBusinessAssayProjectData.getId(), targetProject, targetParameter); + if (businessAssayParameterDataDO != null) { + businessAssayParameterDataDO.setValue(currentBusinessAssayProjectData.getValue()); + updateBusinessAssayParameterDataList.add(businessAssayParameterDataDO); + } + + } + } + } + } + } + //补正系数列表 List configAssayMethodProjectCoefficientList = new ArrayList<>(); if (businessAssayTaskDO.getIsIngredients().equals(QmsCommonConstant.YES) && QmsCommonConstant.MANUAL.equals(businessAssayTaskDO.getIngredientsWay())) {//如果是需要配料,并且是人工配料的 @@ -1284,8 +1330,6 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService { configAssayMethodProjectCoefficientList = configAssayMethodProjectCoefficientMapper.selectByConfigBaseSampleIds(configBaseSampleIdList); } - List businessAssayTaskDataIdList = businessAssayTaskDataExtendList.stream().map(m -> m.getId()).collect(Collectors.toList()); - List businessAssayProjectDataExtendList = businessAssayProjectDataMapper.selectByBusinessAssayTaskDataIds(businessAssayTaskDataIdList); for (BusinessAssayProjectDataExtendRespVO businessAssayProjectDataExtend : businessAssayProjectDataExtendList) { if (businessAssayTaskDO.getIsIngredients().equals(QmsCommonConstant.YES) && QmsCommonConstant.MANUAL.equals(businessAssayTaskDO.getIngredientsWay())) { ConfigAssayMethodProjectCoefficientDO configAssayMethodProjectCoefficientDO = configAssayMethodProjectCoefficientList.stream().filter(f -> @@ -1313,6 +1357,10 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService { businessAssayProjectDataMapper.updateBatch(businessAssayProjectDataList); } + if (updateBusinessAssayParameterDataList.size() > 0) { + businessAssayParameterDataMapper.updateBatch(updateBusinessAssayParameterDataList); + } + businessAssayTaskMapper.updateById(businessAssayTaskDO); } @@ -1461,12 +1509,15 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService { for (ConfigSubSampleMethodConfItem configSubSampleMethodConfItem : downIngredients) { if (configSubSampleMethodConfItem.getRequired()) { ConfigSubSampleMethodConfPoint source = configSubSampleMethodConfItem.getSource(); - String project = source.getProject(); - String parameter = source.getParameter(); - BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = businessAssayProjectDataList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(businessAssayTaskDataDO.getId()) && f.getSimpleName().equals(project)).findFirst().orElse(null); - BusinessAssayParameterDataExtendRespVO currentBusinessAssayParameterData = businessAssayParameterDataList.stream().filter(f -> f.getBusinessAssayProjectDataId().equals(currentBusinessAssayProjectData.getId()) && f.getParameterKey().equals(parameter)).findFirst().orElse(null); - if (StringUtils.isBlank(currentBusinessAssayParameterData.getValue())) { - throw new ServiceException(1_032_050_000, "当前分析任务,存在下发配料必填为空情况。请检查后再下发!"); + + List projectList = Arrays.asList(source.getProject().split(","));//来源可以有多个 + for (String project : projectList) { + String parameter = source.getParameter(); + BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = businessAssayProjectDataList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(businessAssayTaskDataDO.getId()) && f.getSimpleName().equals(project)).findFirst().orElse(null); + BusinessAssayParameterDataExtendRespVO currentBusinessAssayParameterData = businessAssayParameterDataList.stream().filter(f -> f.getBusinessAssayProjectDataId().equals(currentBusinessAssayProjectData.getId()) && f.getParameterKey().equals(parameter)).findFirst().orElse(null); + if (StringUtils.isBlank(currentBusinessAssayParameterData.getValue())) { + throw new ServiceException(1_032_050_000, "当前分析任务,存在下发配料必填为空情况。请检查后再下发!"); + } } } } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigSubSampleMethodConfInfo.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigSubSampleMethodConfInfo.java index e854bf1..0671743 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigSubSampleMethodConfInfo.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigSubSampleMethodConfInfo.java @@ -10,6 +10,9 @@ public class ConfigSubSampleMethodConfInfo { /** 添加分析任务 **/ private ConfigSubSampleMethodConfAdd addAssayTask; + /** 分析方法参数设置值配置 **/ + private List setParam; + /** 分析方法参数取值配置 **/ private List getParam; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigSubSampleMethodConfPoint.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigSubSampleMethodConfPoint.java index 72a534d..6acd850 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigSubSampleMethodConfPoint.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigSubSampleMethodConfPoint.java @@ -8,7 +8,10 @@ public class ConfigSubSampleMethodConfPoint { /** 分析方法id **/ private Long methodId; - /** 检测项目 **/ + /** 分析方法Key **/ + private String methodKey; + + /** 检测项目,多个以“,”号分割 **/ private String project; /** 参数 **/ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/thirdpartyapi/service/AutoIngredientsServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/thirdpartyapi/service/AutoIngredientsServiceImpl.java index 6bf8243..cb8b2f9 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/thirdpartyapi/service/AutoIngredientsServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/thirdpartyapi/service/AutoIngredientsServiceImpl.java @@ -154,13 +154,18 @@ public class AutoIngredientsServiceImpl implements AutoIngredientsService { for (ConfigSubSampleMethodConfItem configSubSampleMethodConfItem : downIngredients) { if (configSubSampleMethodConfItem.getRequired()) { ConfigSubSampleMethodConfPoint source = configSubSampleMethodConfItem.getSource(); - String project = source.getProject(); - String parameter = source.getParameter(); - BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = currentBusinessAssayProjectDataList.stream().filter(f -> f.getSimpleName().equals(project)).findFirst().orElse(null); - BusinessAssayParameterDataExtendRespVO currentBusinessAssayParameterData = businessAssayParameterDataList.stream().filter(f -> f.getBusinessAssayProjectDataId().equals(currentBusinessAssayProjectData.getId()) && f.getParameterKey().equals(parameter)).findFirst().orElse(null); - ConfigSubSampleMethodConfPoint target = configSubSampleMethodConfItem.getTarget(); - String field = target.getField(); - BeanUtil.setFieldValue(autoIngredientsTaskDetailRespVO, field, currentBusinessAssayParameterData.getValue()); + List projectList = Arrays.asList(source.getProject().split(","));//来源可以有多个 + for (String project : projectList) { + String parameter = source.getParameter(); + BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = currentBusinessAssayProjectDataList.stream().filter(f -> f.getSimpleName().equals(project)).findFirst().orElse(null); + BusinessAssayParameterDataExtendRespVO currentBusinessAssayParameterData = businessAssayParameterDataList.stream().filter(f -> f.getBusinessAssayProjectDataId().equals(currentBusinessAssayProjectData.getId()) && f.getParameterKey().equals(parameter)).findFirst().orElse(null); + if (StringUtils.isNotBlank(currentBusinessAssayParameterData.getValue())) { + ConfigSubSampleMethodConfPoint target = configSubSampleMethodConfItem.getTarget(); + String field = target.getField(); + BeanUtil.setFieldValue(autoIngredientsTaskDetailRespVO, field, currentBusinessAssayParameterData.getValue()); + break; + } + } } } } @@ -239,19 +244,19 @@ public class AutoIngredientsServiceImpl implements AutoIngredientsService { // System.out.println("fieldValue:" + fieldValue); ConfigSubSampleMethodConfPoint target = configSubSampleMethodConfItem.getTarget(); - String project = target.getProject(); - - BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = businessAssayProjectDataList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(autoIngredientsTaskDetailAssayResultReqVO.getId()) && f.getSimpleName().equals(project)).findFirst().orElse(null); - String parameter = target.getParameter(); - if (StringUtils.isBlank(parameter)) { - currentBusinessAssayProjectData.setValue(fieldValue.toString()); - updateBusinessAssayProjectDataDOList.add(BeanUtils.toBean(currentBusinessAssayProjectData, BusinessAssayProjectDataDO.class)); - } else { - BusinessAssayParameterDataExtendRespVO currentBusinessAssayParameterData = businessAssayParameterDataList.stream().filter(f -> f.getBusinessAssayProjectDataId().equals(currentBusinessAssayProjectData.getId()) && f.getParameterKey().equals(parameter)).findFirst().orElse(null); - currentBusinessAssayParameterData.setValue(fieldValue.toString()); - updateBusinessAssayParameterDataDOList.add(BeanUtils.toBean(currentBusinessAssayParameterData, BusinessAssayParameterDataDO.class)); + List projectList = Arrays.asList(target.getProject().split(","));//目标可以有多个 + for (String project : projectList) { + BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = businessAssayProjectDataList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(autoIngredientsTaskDetailAssayResultReqVO.getId()) && f.getSimpleName().equals(project)).findFirst().orElse(null); + String parameter = target.getParameter(); + if (StringUtils.isBlank(parameter)) { + currentBusinessAssayProjectData.setValue(fieldValue.toString()); + updateBusinessAssayProjectDataDOList.add(BeanUtils.toBean(currentBusinessAssayProjectData, BusinessAssayProjectDataDO.class)); + } else { + BusinessAssayParameterDataExtendRespVO currentBusinessAssayParameterData = businessAssayParameterDataList.stream().filter(f -> f.getBusinessAssayProjectDataId().equals(currentBusinessAssayProjectData.getId()) && f.getParameterKey().equals(parameter)).findFirst().orElse(null); + currentBusinessAssayParameterData.setValue(fieldValue.toString()); + updateBusinessAssayParameterDataDOList.add(BeanUtils.toBean(currentBusinessAssayParameterData, BusinessAssayParameterDataDO.class)); + } } - } } }