@@ -3,6 +3,9 @@ package com.zt.plat.module.qms.business.bus.service;
import java.time.LocalDateTime ;
import java.time.LocalDateTime ;
import java.util.ArrayList ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.List ;
import java.util.Map ;
import java.util.Objects ;
import java.util.Set ;
import java.util.stream.Collectors ;
import java.util.stream.Collectors ;
import org.apache.commons.lang3.StringUtils ;
import org.apache.commons.lang3.StringUtils ;
@@ -237,6 +240,9 @@ public class SampleTaskAssignServiceImpl implements SampleTaskAssignService {
//查询子样分析方法及检测项目
//查询子样分析方法及检测项目
// List<ConfigAssayMethodProjectExtendRespVO> configAssayMethodProjectList = configAssayMethodProjectMapper.selectByConfigSubSampleIdsAndAssayDepartmentId(configSubSampleIdList, visitDeptId);
// List<ConfigAssayMethodProjectExtendRespVO> configAssayMethodProjectList = configAssayMethodProjectMapper.selectByConfigSubSampleIdsAndAssayDepartmentId(configSubSampleIdList, visitDeptId);
//根据样品大类,查询所有子样方法
List < ConfigSubSampleMethodExtendRespVO > configSubSampleMethodList = configSubSampleMethodMapper . selectByBaseSampleId ( baseSampleId ) ;
//查询分析方法检测项目
//查询分析方法检测项目
List < AssayMethodProjectRespVO > list = businessAssayProjectDataMapper . selectAssayMethodProjectByBusinessSubSampleIdListAndConfigAssayMethodId ( businessSubSampleIdList , configAssayMethodId ) ;
List < AssayMethodProjectRespVO > list = businessAssayProjectDataMapper . selectAssayMethodProjectByBusinessSubSampleIdListAndConfigAssayMethodId ( businessSubSampleIdList , configAssayMethodId ) ;
@@ -246,9 +252,15 @@ public class SampleTaskAssignServiceImpl implements SampleTaskAssignService {
for ( AssayMethodProjectRespVO assayMethodProject : list ) {
for ( AssayMethodProjectRespVO assayMethodProject : list ) {
List < ConfigAssayMethodProjectExtendRespVO > methodList = materialAssayStandardMethodList . stream ( ) . filter ( f - > assayMethodProject . getDictionaryProjectId ( ) . equals ( f . getDictionaryProjectId ( ) ) ) . map ( m - > {
List < ConfigAssayMethodProjectExtendRespVO > 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 ( ) ;
ConfigAssayMethodProjectExtendRespVO configAssayMethod = new ConfigAssayMethodProjectExtendRespVO ( ) ;
configAssayMethod . setConfigAssayMethodId ( m . getConfigAssayMethodId ( ) ) ;
configAssayMethod . setConfigAssayMethodId ( m . getConfigAssayMethodId ( ) ) ;
configAssayMethod . setConfigAssayMethodName ( m . getConfigAssayMethodName ( ) ) ;
configAssayMethod . setConfigAssayMethodName ( m . getConfigAssayMethodName ( ) ) ;
configAssayMethod . setAssayType ( assayType ) ;
configAssayMethod . setConfigAssayMethodNameAndCategory ( m . getConfigAssayMethodNameAndCategory ( ) ) ;
configAssayMethod . setConfigAssayMethodNameAndCategory ( m . getConfigAssayMethodNameAndCategory ( ) ) ;
return configAssayMethod ;
return configAssayMethod ;
} ) . collect ( Collectors . toList ( ) ) ;
} ) . collect ( Collectors . toList ( ) ) ;
@@ -258,6 +270,499 @@ public class SampleTaskAssignServiceImpl implements SampleTaskAssignService {
}
}
@Override
@Transactional ( rollbackFor = Exception . class )
public void changeMethod ( ChangeAssayMethodReqVO req ) {
List < Long > businessSubSampleIdList = req . getBusinessSubSampleIdList ( ) ;
Long configAssayMethodId = req . getConfigAssayMethodId ( ) ;
List < AssayMethodProjectRespVO > changeConfigAssayMethodProjectList = req . getChangeConfigAssayMethodProjectList ( ) ;
// 先按 configAssayMethodId 分组
Map < Long , List < AssayMethodProjectRespVO > > groupedByConfigId = changeConfigAssayMethodProjectList . stream ( )
. collect ( Collectors . groupingBy ( AssayMethodProjectRespVO : : getConfigAssayMethodId ) ) ;
// 遍历每个分组,检查 assayType 是否唯一
for ( Map . Entry < Long , List < AssayMethodProjectRespVO > > entry : groupedByConfigId . entrySet ( ) ) {
List < AssayMethodProjectRespVO > group = entry . getValue ( ) ;
// 获取该组所有非空的 assayType( 去重)
Set < String > 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 < Long > changeConfigAssayMethodIdList = changeConfigAssayMethodProjectList . stream ( ) . map ( m - > m . getConfigAssayMethodId ( ) ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
LocalDateTime currentDateTime = LocalDateTime . now ( ) ;
//需要更新的报表数据
List < BusinessAssayReportDataDO > updateBusinessAssayReportDataDOList = new ArrayList < > ( ) ;
//需要更新的分析任务
List < BusinessAssayTaskDataDO > updateBusinessAssayTaskDataDOList = new ArrayList < > ( ) ;
//需要更新的分析任务检测项目
List < BusinessAssayProjectDataDO > updateBusinessAssayProjectDataDOList = new ArrayList < > ( ) ;
//需要更新的分析任务检测项目参数
List < BusinessAssayParameterDataDO > updateBusinessAssayParameterDataDOList = new ArrayList < > ( ) ;
//需要更新的子样判定
List < BusinessSubSampleAssessmentDO > updateBusinessSubSampleAssessmentDOList = new ArrayList < > ( ) ;
//需要更新的分样判定
List < BusinessSubParentSampleAssessmentDO > updateBusinessSubParentSampleAssessmentDOList = new ArrayList < > ( ) ;
//需要新建的分析任务
List < BusinessAssayTaskDataDO > saveBusinessAssayTaskDataDOList = new ArrayList < > ( ) ;
//需要新建的分析任务检测项目
List < BusinessAssayProjectDataDO > saveBusinessAssayProjectDataDOList = new ArrayList < > ( ) ;
//需要新建的分析任务检测项目参数
List < BusinessAssayParameterDataDO > saveBusinessAssayParameterDataDOList = new ArrayList < > ( ) ;
//需要新建的子样判定
List < BusinessSubSampleAssessmentDO > saveBusinessSubSampleAssessmentDOList = new ArrayList < > ( ) ;
//需要新建的分样判定
List < BusinessSubParentSampleAssessmentDO > saveBusinessSubParentSampleAssessmentDOList = new ArrayList < > ( ) ;
//需要删除的分析任务
List < Long > removeAssayTaskDataIdList = new ArrayList < > ( ) ;
//需要删除的分析任务检测项目
List < Long > removeAssayProjectIdList = new ArrayList < > ( ) ;
//需要删除的分析任务检测项目参数
List < Long > removeAssayParameterIdList = new ArrayList < > ( ) ;
//需要删除的子样判定
List < Long > removeSubSampleAssessmentIdList = new ArrayList < > ( ) ;
//需要删除的分样判定
List < Long > removeSubParentSampleAssessmentIdList = new ArrayList < > ( ) ;
//查询子样
List < BusinessSubSampleDO > businessSubSampleDOList = businessSubSampleMapper . selectByIds ( businessSubSampleIdList ) ;
List < Long > businessBaseSampleIdList = businessSubSampleDOList . stream ( ) . map ( m - > m . getBusinessBaseSampleId ( ) ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
List < Long > businessSubParentSampleIdList = businessSubSampleDOList . stream ( ) . map ( m - > m . getBusinessSubParentSampleId ( ) ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
List < Long > configSubSampleIdList = businessSubSampleDOList . stream ( ) . map ( m - > m . getConfigSubSampleId ( ) ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
//查询检测任务 (通过分样id, 可以查询双杯样的)
List < BusinessAssayTaskDataDO > 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 < Long > businessAssayTaskDataIdList = businessAssayTaskDataDOList . stream ( ) . map ( m - > m . getId ( ) ) . collect ( Collectors . toList ( ) ) ;
//查询检测任务的检测项目
List < BusinessAssayProjectDataExtendRespVO > businessAssayProjectDataList = businessAssayProjectDataMapper . selectByBusinessAssayTaskDataIds ( businessAssayTaskDataIdList ) ;
List < Long > businessAssayProjectDataIdList = businessAssayProjectDataList . stream ( ) . map ( m - > m . getId ( ) ) . collect ( Collectors . toList ( ) ) ;
//查询检测任务的检测项目的参数
List < BusinessAssayParameterDataDO > businessAssayParameterDataDOList = businessAssayParameterDataMapper . selectByBusinessAssayProjectDataIds ( businessAssayProjectDataIdList ) ;
//查询子样判定 (通过分样id, 可以查询双杯样的)
List < BusinessSubSampleAssessmentDO > businessSubSampleAssessmentDOList = businessSubSampleAssessmentMapper . selectByBusinessSubParentSampleIdsAndConfigAssayMethodId ( businessSubParentSampleIdList , configAssayMethodId ) ;
//查询分样判定
List < BusinessSubParentSampleAssessmentExtendRespVO > businessSubParentSampleAssessmentList = businessSubParentSampleAssessmentMapper . selectByBusinessSubParentSampleIdsAndConfigAssayMethodId ( businessSubParentSampleIdList , configAssayMethodId ) ;
//查询要变更的分析方法配置
List < ConfigAssayMethodDO > configAssayMethodDOList = configAssayMethodMapper . selectByIds ( changeConfigAssayMethodIdList ) ;
//分析方法检测项目配置
List < ConfigAssayMethodProjectExtendRespVO > configAssayMethodProjectList = configAssayMethodProjectMapper . selectByConfigAssayMethodIds ( changeConfigAssayMethodIdList ) ;
//分析方法检测项目参数配置
List < ConfigAssayMethodProjectParameterDO > configAssayMethodProjectParameterList = configAssayMethodProjectParameterMapper . selectByConfigAssayMethodIds ( changeConfigAssayMethodIdList ) ;
//查询要变更的子样及分析方法配置
List < ConfigSubSampleMethodExtendRespVO > 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 < Long > 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 < Long > 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 < Long > 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 < Long > 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 < Long > 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 < String > projectShowNameList = changeConfigAssayMethodProjectList . stream ( ) . filter ( f - > f . getConfigAssayMethodId ( ) . equals ( configAssayMethodId ) ) . map ( m - > m . getDictionaryProjectShowName ( ) ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
//查询旧的检测任务
List < BusinessAssayTaskDataDO > 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 < ConfigAssayMethodProjectExtendRespVO > 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 < ConfigAssayMethodProjectParameterDO > 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 < Long > 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 < Long > 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 < Long > 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 < Long > 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 < Long > 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 < String > projectShowNameList = changeConfigAssayMethodProjectList . stream ( ) . filter ( f - > f . getConfigAssayMethodId ( ) . equals ( configAssayMethodId ) ) . map ( m - > m . getDictionaryProjectShowName ( ) ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
//查询旧的检测任务
List < BusinessAssayTaskDataDO > 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 < BusinessAssayTaskDataDO > currBusinessAssayTaskDataDOList = businessAssayTaskDataMapper . selectByBusinessSubParentSampleIdAndConfigAssayMethodId ( businessSubParentSampleAssessmentDO . getBusinessSubParentSampleId ( ) , changeConfigAssayMethodId ) ;
//当前存在的分析任务循环
for ( BusinessAssayTaskDataDO businessAssayTaskDataDO : currBusinessAssayTaskDataDOList ) {
List < ConfigAssayMethodProjectExtendRespVO > 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 < ConfigAssayMethodProjectParameterDO > 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 < BusinessAssayReportDataDO > businessAssayReportDataDOList = businessAssayReportDataMapper . selectBytBusinessBaseSampleIds ( businessBaseSampleIdList ) ;
for ( BusinessAssayReportDataDO businessAssayReportDataDO : businessAssayReportDataDOList ) {
String dataSource = businessAssayReportDataDO . getDataSource ( ) ;
if ( dataSource . contains ( req . getConfigAssayMethodId ( ) . toString ( ) ) ) { //判定是否存在
List < Long > 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
@Override
@Transactional(rollbackFor = Exception.class)
@Transactional(rollbackFor = Exception.class)
public void changeMethod(ChangeAssayMethodReqVO req) {
public void changeMethod(ChangeAssayMethodReqVO req) {
@@ -699,7 +1204,8 @@ public class SampleTaskAssignServiceImpl implements SampleTaskAssignService {
}
}
**/
@Override
@Override
@Transactional ( rollbackFor = Exception . class )
@Transactional ( rollbackFor = Exception . class )
public LiteflowResponse methodAssign ( SampleTaskAssignMethodParam param ) {
public LiteflowResponse methodAssign ( SampleTaskAssignMethodParam param ) {