From 0a5bedfa728ff6f02cd0daecfeb27918c8428604 Mon Sep 17 00:00:00 2001 From: wxr Date: Fri, 3 Apr 2026 18:12:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E6=B5=8B=E9=A1=B9=E7=9B=AE=E5=88=86?= =?UTF-8?q?=E9=85=8D(=E5=B7=B2=E6=8C=87=E5=AE=9A=E5=AE=9A=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=E6=96=B9=E6=B3=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessAssayProjectDataController.java | 7 + ...pleEntrustUnStandardProjectController.java | 6 + .../BusinessAssayProjectDataExtendRespVO.java | 17 + .../vo/BusinessAssayProjectDataReqVO.java | 35 + .../BusinessAssayProjectDataMapper.java | 109 +++ .../SampleEntrustGenSampleDataCmp.java | 30 +- .../SampleTaskAssignDataSaveOrUpdateCmp.java | 45 ++ .../SampleTaskAssignProjectMethodCmp.java | 749 +++++++++++++++++- .../SampleTaskAssignProjectNoMethodCmp.java | 2 +- .../slot/SampleTaskAssignContext.java | 19 + .../BusinessAssayProjectDataService.java | 10 +- .../BusinessAssayProjectDataServiceImpl.java | 9 +- 12 files changed, 1018 insertions(+), 20 deletions(-) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessAssayProjectDataController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessAssayProjectDataController.java index d8dd50d0..94da4ec9 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessAssayProjectDataController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessAssayProjectDataController.java @@ -96,6 +96,13 @@ public class BusinessAssayProjectDataController implements BusinessControllerMar return success(BeanUtils.toBean(pageResult, BusinessAssayProjectDataRespVO.class)); } + @GetMapping("/list") + @Operation(summary = "获得检测项目数据业务列表") + public CommonResult getBusinessAssayProjectDataList(BusinessAssayProjectDataReqVO reqVO) { + List list = businessAssayProjectDataService.getBusinessAssayProjectDataList(reqVO); + return success(list); + } + @GetMapping("/export-excel") @Operation(summary = "导出检测项目数据业务 Excel") //@PreAuthorize("@ss.hasPermission('qms:business-assay-project-data:export')") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessSampleEntrustUnStandardProjectController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessSampleEntrustUnStandardProjectController.java index 73ec2f73..e5289cfe 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessSampleEntrustUnStandardProjectController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessSampleEntrustUnStandardProjectController.java @@ -25,6 +25,8 @@ import com.zt.plat.framework.datapermission.core.annotation.DeptDataPermissionIg import static com.zt.plat.framework.common.pojo.CommonResult.success; import com.zt.plat.framework.excel.core.util.ExcelUtils; +import com.zt.plat.framework.security.core.LoginUser; +import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.module.qms.business.bus.controller.vo.*; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustUnStandardProjectDO; import com.zt.plat.module.qms.business.bus.service.BusinessSampleEntrustUnStandardProjectService; @@ -95,6 +97,10 @@ public class BusinessSampleEntrustUnStandardProjectController implements Busines @GetMapping("/list") @Operation(summary = "获得委检登记样品检测项目表(无标准)列表") public CommonResult> getBusinessSampleEntrustUnStandardProjectList(BusinessSampleEntrustUnStandardProjectPageReqVO reqVO) { + if (reqVO.getAssayDepartmentId() == null) { + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + reqVO.setAssayDepartmentId(loginUser.getVisitDeptId()); + } List list = businessSampleEntrustUnStandardProjectService.getBusinessSampleEntrustUnStandardProjectList(reqVO); return success(list); } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayProjectDataExtendRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayProjectDataExtendRespVO.java index 53321205..75633c05 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayProjectDataExtendRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayProjectDataExtendRespVO.java @@ -1,5 +1,7 @@ package com.zt.plat.module.qms.business.bus.controller.vo; +import java.time.LocalDateTime; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -11,6 +13,15 @@ public class BusinessAssayProjectDataExtendRespVO extends BusinessAssayProjectDa @Schema(description = "主样配置ID") private Long configBaseSampleId; + + @Schema(description = "检测方法配置ID", example = "9130") + private Long configAssayMethodId; + + @Schema(description = "分析方法名称") + private String configAssayMethodName; + + @Schema(description = "检测方法配置名称及类别") + private String configAssayMethodNameAndCategory; @Schema(description = "样品分样ID", example = "15024") private Long businessSubParentSampleId; @@ -33,6 +44,12 @@ public class BusinessAssayProjectDataExtendRespVO extends BusinessAssayProjectDa @Schema(description = "归库编号") private String sampleReturnCode; + @Schema(description = "样品流程节点KEY", requiredMode = Schema.RequiredMode.REQUIRED) + private String sampleFlowNodeKey; + + @Schema(description = "样品流程节点时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime sampleFlowNodeTime; + @Schema(description = "分析人员") private String assayOperator; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayProjectDataReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayProjectDataReqVO.java index cf85b7eb..f1e27538 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayProjectDataReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayProjectDataReqVO.java @@ -89,4 +89,39 @@ public class BusinessAssayProjectDataReqVO { @Schema(description = "检测任务ID列表", example = "16505") private List businessAssayTaskDataIdList; + + @Schema(description = "分析部门ID", example = "18509") + private Long assayDepartmentId; + + @Schema(description = "是否已分配任务") + private Integer isAssignTasked; + + @Schema(description = "样品流程节点KEY") + private String sampleFlowNodeKey; + + @Schema(description = "样品流程节点时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] sampleFlowNodeTime; + + @Schema(description = "检测项目字典id列表") + private List dictionaryProjectIdList; + + @Schema(description = "收样时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] sampleReceiveTime; + + @Schema(description = "样品编号") + private String sampleCode; + + @Schema(description = "样品名称") + private String sampleName; + + @Schema(description = "分析编号") + private String sampleAssayCode; + + @Schema(description = "归库编号") + private String sampleReturnCode; + + @Schema(description = "样品状态") + private String sampleStatus; } \ 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/dal/mapper/BusinessAssayProjectDataMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayProjectDataMapper.java index da391199..8680a977 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayProjectDataMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayProjectDataMapper.java @@ -2,6 +2,7 @@ package com.zt.plat.module.qms.business.bus.dal.mapper; import java.util.*; +import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX; @@ -9,11 +10,17 @@ import com.zt.plat.module.qms.business.bus.controller.vo.*; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayProjectDataDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessBaseSampleDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleAnalysisGroupDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO; +import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectDO; import com.zt.plat.module.qms.business.dic.dal.dataobject.DictionaryProjectDO; import com.zt.plat.module.qms.common.dic.dal.dataobject.DictionaryBusinessDO; import com.zt.plat.module.qms.enums.QmsCommonConstant; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ObjectUtil; + import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -145,6 +152,76 @@ public interface BusinessAssayProjectDataMapper extends BaseMapperX selectList(BusinessAssayProjectDataReqVO reqVO) { + MPJLambdaWrapper mpjLambdaWrapper = new MPJLambdaWrapperX() + .leftJoin(BusinessAssayTaskDataDO.class, BusinessAssayTaskDataDO::getId, BusinessAssayProjectDataDO::getBusinessAssayTaskDataId) + .leftJoin(BusinessSubSampleAnalysisGroupDO.class, on -> on + .eq(BusinessSubSampleAnalysisGroupDO::getBusinessSubSampleId, BusinessAssayTaskDataDO::getBusinessSubSampleId) + .eq(BusinessSubSampleAnalysisGroupDO::getAssayDepartmentId, BusinessAssayTaskDataDO::getAssayDepartmentId)) + .leftJoin(ConfigAssayMethodProjectDO.class, ConfigAssayMethodProjectDO::getId, BusinessAssayProjectDataDO::getConfigAssayMethodProjectId) + .leftJoin(ConfigAssayMethodDO.class, ConfigAssayMethodDO::getId, BusinessAssayTaskDataDO::getConfigAssayMethodId) + .leftJoin(DictionaryProjectDO.class, DictionaryProjectDO::getId, BusinessAssayProjectDataDO::getDictionaryProjectId) + .leftJoin(BusinessSubSampleDO.class, BusinessSubSampleDO::getId, BusinessAssayTaskDataDO::getBusinessSubSampleId) + .selectAll(BusinessAssayProjectDataDO.class) + .selectAs(ConfigAssayMethodProjectDO::getDictionaryProjectUnit, BusinessAssayProjectDataExtendRespVO::getDictionaryProjectUnit) + .selectAs(DictionaryProjectDO::getKey, BusinessAssayProjectDataExtendRespVO::getDictionaryProjectKey) + .selectAs(DictionaryProjectDO::getSimpleName, BusinessAssayProjectDataExtendRespVO::getSimpleName) + .selectAs(DictionaryProjectDO::getShowName, BusinessAssayProjectDataExtendRespVO::getShowName) + .selectAs(BusinessAssayTaskDataDO::getAssayOperator, BusinessAssayProjectDataExtendRespVO::getAssayOperator) + .selectAs(BusinessAssayTaskDataDO::getRecheckCount, BusinessAssayProjectDataExtendRespVO::getRecheckCount) + .selectAs(BusinessAssayTaskDataDO::getRetestCount, BusinessAssayProjectDataExtendRespVO::getRetestCount) + .selectAs(BusinessAssayTaskDataDO::getBusinessBaseSampleId, BusinessAssayProjectDataExtendRespVO::getBusinessBaseSampleId) + .selectAs(BusinessAssayTaskDataDO::getBusinessSubParentSampleId, BusinessAssayProjectDataExtendRespVO::getBusinessSubParentSampleId) + .selectAs(BusinessAssayTaskDataDO::getBusinessSubSampleId, BusinessAssayProjectDataExtendRespVO::getBusinessSubSampleId) + .selectAs(BusinessAssayTaskDataDO::getSampleFlowNodeKey, BusinessAssayProjectDataExtendRespVO::getSampleFlowNodeKey) + .selectAs(BusinessAssayTaskDataDO::getSampleFlowNodeTime, BusinessAssayProjectDataExtendRespVO::getSampleFlowNodeTime) + .selectAs(BusinessAssayTaskDataDO::getConfigAssayMethodId, BusinessAssayProjectDataExtendRespVO::getConfigAssayMethodId) + .selectAs(ConfigAssayMethodDO::getName, BusinessAssayProjectDataExtendRespVO::getConfigAssayMethodName) + .selectAs(ConfigAssayMethodDO::getMethodNameCategory, BusinessAssayProjectDataExtendRespVO::getConfigAssayMethodNameAndCategory) + .selectAs(BusinessSubSampleDO::getSampleName, BusinessAssayProjectDataExtendRespVO::getSampleName) + .selectAs(BusinessSubSampleDO::getSampleCode, BusinessAssayProjectDataExtendRespVO::getSampleCode) + .selectAs(BusinessSubSampleDO::getSampleAssayCode, BusinessAssayProjectDataExtendRespVO::getSampleAssayCode) + .selectAs(BusinessSubSampleDO::getSampleReturnCode, BusinessAssayProjectDataExtendRespVO::getSampleReturnCode); + + if (ObjectUtil.isNotEmpty(reqVO.getAssayDepartmentId())) { + mpjLambdaWrapper.eq(BusinessAssayTaskDataDO::getAssayDepartmentId, reqVO.getAssayDepartmentId()); + } + + if (ObjectUtil.isNotEmpty(reqVO.getIsAssignTasked())) { + mpjLambdaWrapper.eq(BusinessAssayTaskDataDO::getIsAssignTasked, reqVO.getIsAssignTasked()); + } + + if (ObjectUtil.isNotEmpty(reqVO.getSampleName())) { + mpjLambdaWrapper.like(BusinessSubSampleDO::getSampleName, reqVO.getSampleName()); + } + + if (ObjectUtil.isNotEmpty(reqVO.getSampleAssayCode())) { + mpjLambdaWrapper.like(BusinessSubSampleDO::getSampleAssayCode, reqVO.getSampleAssayCode()); + } + + if (ObjectUtil.isNotEmpty(reqVO.getSampleFlowNodeKey())) { + mpjLambdaWrapper.eq(BusinessAssayTaskDataDO::getSampleFlowNodeKey, reqVO.getSampleFlowNodeKey()); + } + + if (ObjectUtil.isNotEmpty(reqVO.getSampleFlowNodeTime()) && ObjectUtil.isNotEmpty(reqVO.getSampleFlowNodeTime()[0]) && ObjectUtil.isNotEmpty(reqVO.getSampleFlowNodeTime()[1])) { + mpjLambdaWrapper.between(BusinessSubSampleDO::getSampleFlowNodeTime, reqVO.getSampleFlowNodeTime()[0], reqVO.getSampleFlowNodeTime()[1]); + } + + if (ObjectUtil.isAllNotEmpty(reqVO.getDictionaryProjectIdList()) && !ArrayUtil.isEmpty(reqVO.getDictionaryProjectIdList())) { + mpjLambdaWrapper.in(BusinessAssayProjectDataDO::getDictionaryProjectId, reqVO.getDictionaryProjectIdList()); + } + + if (ObjectUtil.isNotEmpty(reqVO.getSampleStatus())) { + mpjLambdaWrapper.eq(BusinessSubSampleAnalysisGroupDO::getSampleStatus, reqVO.getSampleStatus()); + } + + mpjLambdaWrapper.orderByAsc(BusinessAssayTaskDataDO::getSampleFlowNodeTime) + .orderByAsc("NVL(REGEXP_SUBSTR(SMP_ASY_CD, '^(.*-)'), SMP_ASY_CD)") + .orderByAsc("CASE WHEN INSTR(SMP_ASY_CD, '-') = 0 THEN 0 WHEN REGEXP_LIKE(REGEXP_SUBSTR(SMP_ASY_CD, '[^-]+$'), '[^0-9]') THEN 9999999 ELSE CAST(REGEXP_SUBSTR(SMP_ASY_CD, '[^-]+$') AS BIGINT) END"); + + return selectJoinList(BusinessAssayProjectDataExtendRespVO.class, mpjLambdaWrapper); + } + default List selectByBusinessAssayTaskId(Long businessAssayTaskId) { return selectJoinList(BusinessAssayProjectDataExtendRespVO.class, new MPJLambdaWrapperX() .leftJoin(BusinessAssayTaskDataDO.class, BusinessAssayTaskDataDO::getId, BusinessAssayProjectDataDO::getBusinessAssayTaskDataId) @@ -168,6 +245,7 @@ public interface BusinessAssayProjectDataMapper extends BaseMapperX selectExtendByIds(List idList) { + return selectJoinList(BusinessAssayProjectDataExtendRespVO.class, new MPJLambdaWrapperX() + .leftJoin(BusinessAssayTaskDataDO.class, BusinessAssayTaskDataDO::getId, BusinessAssayProjectDataDO::getBusinessAssayTaskDataId) + .leftJoin(ConfigAssayMethodProjectDO.class, ConfigAssayMethodProjectDO::getId, BusinessAssayProjectDataDO::getConfigAssayMethodProjectId) + .leftJoin(DictionaryProjectDO.class, DictionaryProjectDO::getId, BusinessAssayProjectDataDO::getDictionaryProjectId) + .leftJoin(BusinessSubSampleDO.class, BusinessSubSampleDO::getId, BusinessAssayTaskDataDO::getBusinessSubSampleId) + .selectAll(BusinessAssayProjectDataDO.class) + .selectAs(ConfigAssayMethodProjectDO::getDictionaryProjectUnit, BusinessAssayProjectDataExtendRespVO::getDictionaryProjectUnit) + .selectAs(DictionaryProjectDO::getKey, BusinessAssayProjectDataExtendRespVO::getDictionaryProjectKey) + .selectAs(DictionaryProjectDO::getSimpleName, BusinessAssayProjectDataExtendRespVO::getSimpleName) + .selectAs(DictionaryProjectDO::getShowName, BusinessAssayProjectDataExtendRespVO::getShowName) + .selectAs(BusinessAssayTaskDataDO::getAssayOperator, BusinessAssayProjectDataExtendRespVO::getAssayOperator) + .selectAs(BusinessAssayTaskDataDO::getRecheckCount, BusinessAssayProjectDataExtendRespVO::getRecheckCount) + .selectAs(BusinessAssayTaskDataDO::getRetestCount, BusinessAssayProjectDataExtendRespVO::getRetestCount) + .selectAs(BusinessAssayTaskDataDO::getBusinessBaseSampleId, BusinessAssayProjectDataExtendRespVO::getBusinessBaseSampleId) + .selectAs(BusinessAssayTaskDataDO::getBusinessSubParentSampleId, BusinessAssayProjectDataExtendRespVO::getBusinessSubParentSampleId) + .selectAs(BusinessAssayTaskDataDO::getBusinessSubSampleId, BusinessAssayProjectDataExtendRespVO::getBusinessSubSampleId) + .selectAs(BusinessAssayTaskDataDO::getConfigAssayMethodId, BusinessAssayProjectDataExtendRespVO::getConfigAssayMethodId) + .selectAs(BusinessSubSampleDO::getSampleName, BusinessAssayProjectDataExtendRespVO::getSampleName) + .selectAs(BusinessSubSampleDO::getSampleCode, BusinessAssayProjectDataExtendRespVO::getSampleCode) + .selectAs(BusinessSubSampleDO::getSampleAssayCode, BusinessAssayProjectDataExtendRespVO::getSampleAssayCode) + .selectAs(BusinessSubSampleDO::getSampleReturnCode, BusinessAssayProjectDataExtendRespVO::getSampleReturnCode) + .in(BusinessAssayProjectDataDO::getId, idList)); + } List selectAssayMethodProjectByBusinessSubSampleIdListAndConfigAssayMethodId(@Param("businessSubSampleIdList")List businessSubSampleIdList, @Param("configAssayMethodId") Long configAssayMethodId); + + } \ 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/liteflow/sample/entrust/SampleEntrustGenSampleDataCmp.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustGenSampleDataCmp.java index 9851ec47..6d5bae69 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustGenSampleDataCmp.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/entrust/SampleEntrustGenSampleDataCmp.java @@ -377,18 +377,6 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent { //添加到列表 businessBaseSampleDOList.add(businessBaseSampleDO); - //=======================报表========================== - List configSampleReportDOList = configSampleReportList.stream().filter(f -> f.getConfigBaseSampleId().equals(configBaseSampleId)).collect(Collectors.toList()); - for (ConfigSampleReportDO configSampleReport : configSampleReportDOList) { - BusinessAssayReportDataDO businessAssayReportDataDO = new BusinessAssayReportDataDO(); - businessAssayReportDataDO.setBusinessBaseSampleId(businessBaseSampleDO.getId()); - businessAssayReportDataDO.setDataSource(configSampleReport.getDataSource()); - businessAssayReportDataDO.setConfigReportTypeId(configSampleReport.getConfigReportTypeId()); - businessAssayReportDataDO.setConfigSampleReportId(configSampleReport.getId()); - businessAssayReportDataDO.setSampleCode(businessBaseSampleDO.getSampleCode()); - - businessAssayReportDataDOList.add(businessAssayReportDataDO); - } //=====================委托明细====================== //设置主样id businessSampleEntrustDetailDO.setBusinessBaseSampleId(businessBaseSampleDO.getId()); @@ -775,6 +763,24 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent { } } + + //=======================报表========================== + List configSampleReportDOList = configSampleReportList.stream().filter(f -> f.getConfigBaseSampleId().equals(configBaseSampleId)).collect(Collectors.toList()); + List currDataSourceConfigAssayMethodIdList = businessSubParentSampleAssessmentDOList.stream().filter(f -> f.getBusinessSubParentSampleId().equals(businessSubSampleDO.getBusinessSubParentSampleId())).map(m -> m.getConfigAssayMethodId()).distinct().collect(Collectors.toList()); + for (ConfigSampleReportDO configSampleReport : configSampleReportDOList) { + BusinessAssayReportDataDO businessAssayReportDataDO = new BusinessAssayReportDataDO(); + businessAssayReportDataDO.setBusinessBaseSampleId(businessBaseSampleDO.getId()); +// if (StringUtils.isNotBlank(configSampleReport.getDataSource())){ +// businessAssayReportDataDO.setDataSource(configSampleReport.getDataSource()); +// } else { + businessAssayReportDataDO.setDataSource(CollUtil.join(currDataSourceConfigAssayMethodIdList, ",")); +// } + businessAssayReportDataDO.setConfigReportTypeId(configSampleReport.getConfigReportTypeId()); + businessAssayReportDataDO.setConfigSampleReportId(configSampleReport.getId()); + businessAssayReportDataDO.setSampleCode(businessBaseSampleDO.getSampleCode()); + + businessAssayReportDataDOList.add(businessAssayReportDataDO); + } } //处理委托登记下的分析部门及部门明细数据 diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignDataSaveOrUpdateCmp.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignDataSaveOrUpdateCmp.java index 20d9094c..37a3b6de 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignDataSaveOrUpdateCmp.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignDataSaveOrUpdateCmp.java @@ -1,5 +1,6 @@ package com.zt.plat.module.qms.business.bus.liteflow.sample.taskassign; +import java.util.ArrayList; import java.util.List; import com.yomahub.liteflow.annotation.LiteflowComponent; @@ -121,6 +122,25 @@ public class SampleTaskAssignDataSaveOrUpdateCmp extends NodeComponent { List businessQCManagementParameterDataDOList = sampleTaskAssignContext.getBusinessQCManagementParameterDataDOList(); + + //需要删除的分析任务 + List removeAssayTaskDataIdList = sampleTaskAssignContext.getRemoveAssayTaskDataIdList(); + + //需要删除的分析任务参数 + List removeAssayTaskParameterDataIdList = sampleTaskAssignContext.getRemoveAssayTaskParameterDataIdList(); + + //需要删除的分析任务检测项目 + List removeAssayProjectIdList = sampleTaskAssignContext.getRemoveAssayProjectIdList(); + + //需要删除的分析任务检测项目参数 + List removeAssayParameterIdList = sampleTaskAssignContext.getRemoveAssayParameterIdList(); + + //需要删除的子样判定 + List removeSubSampleAssessmentIdList = sampleTaskAssignContext.getRemoveSubParentSampleAssessmentIdList(); + + //需要删除的分样判定 + List removeSubParentSampleAssessmentIdList = sampleTaskAssignContext.getRemoveSubParentSampleAssessmentIdList(); + if (CollUtil.isNotEmpty(saveBusinessSubParentSampleAssessmentList)) { this.businessSubParentSampleAssessmentMapper.insertBatch(saveBusinessSubParentSampleAssessmentList); } @@ -188,6 +208,31 @@ public class SampleTaskAssignDataSaveOrUpdateCmp extends NodeComponent { if (CollUtil.isNotEmpty(businessQCManagementParameterDataDOList)) { this.businessQCManagementParameterDataMapper.insertBatch(businessQCManagementParameterDataDOList); } + + if (CollUtil.isNotEmpty(removeAssayTaskDataIdList)) { + this.businessAssayTaskDataMapper.deleteByIds(removeAssayTaskDataIdList); + } + + if (CollUtil.isNotEmpty(removeAssayTaskParameterDataIdList)) { + this.businessAssayTaskParameterDataMapper.deleteByIds(removeAssayTaskParameterDataIdList); + } + + if (CollUtil.isNotEmpty(removeAssayProjectIdList)) { + this.businessAssayProjectDataMapper.deleteByIds(removeAssayProjectIdList); + } + + if (CollUtil.isNotEmpty(removeAssayParameterIdList)) { + this.businessAssayParameterDataMapper.deleteByIds(removeAssayParameterIdList); + } + + if (CollUtil.isNotEmpty(removeSubSampleAssessmentIdList)) { + this.businessSubSampleAssessmentMapper.deleteByIds(removeSubSampleAssessmentIdList); + } + + if (CollUtil.isNotEmpty(removeSubParentSampleAssessmentIdList)) { + this.businessSubParentSampleAssessmentMapper.deleteByIds(removeSubParentSampleAssessmentIdList); + } + } } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectMethodCmp.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectMethodCmp.java index f98fd4f6..b811a986 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectMethodCmp.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectMethodCmp.java @@ -1,17 +1,764 @@ package com.zt.plat.module.qms.business.bus.liteflow.sample.taskassign; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.apache.commons.lang3.StringUtils; + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.core.NodeComponent; +import com.zt.plat.framework.common.exception.ServiceException; +import com.zt.plat.framework.security.core.LoginUser; +import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayProjectDataExtendRespVO; +import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskParameterDataExtendRespVO; +import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSubParentSampleAssessmentExtendRespVO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayParameterDataDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayProjectDataDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayReportDataDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDetailDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskParameterDataDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubParentSampleAssessmentDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleAssessmentDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO; +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.bus.dal.mapper.BusinessAssayTaskMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayTaskParameterDataMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubParentSampleAssessmentMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubSampleAssessmentMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubSampleMapper; +import com.zt.plat.module.qms.business.bus.liteflow.param.AssignAssayUser; import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleTaskAssignContext; import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleTaskAssignTypeEnum; +import com.zt.plat.module.qms.business.config.controller.vo.ConfigAssayMethodProjectExtendRespVO; +import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodDO; +import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodParameterDO; +import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectParameterDO; +import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigReportTemplateDO; +import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodMapper; +import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodParameterMapper; +import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectMapper; +import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectParameterMapper; +import com.zt.plat.module.qms.business.config.dal.mapper.ConfigReportTemplateMapper; +import com.zt.plat.module.qms.common.dic.dal.dataobject.DictionaryBusinessDO; +import com.zt.plat.module.qms.common.dic.dal.mapper.DictionaryBusinessMapper; +import com.zt.plat.module.qms.core.code.SequenceUtil; +import com.zt.plat.module.qms.enums.QmsCommonConstant; + +import cn.hutool.core.collection.CollUtil; +import jakarta.annotation.Resource; @LiteflowComponent(id = "sampleTaskAssignProjectMethodCmp", name = "手动分配(按检测项目已指定方法分配)") public class SampleTaskAssignProjectMethodCmp extends NodeComponent { + @Resource + private SequenceUtil sequenceUtil; + + @Resource + private DictionaryBusinessMapper dictionaryBusinessMapper; + + @Resource + private ConfigAssayMethodMapper configAssayMethodMapper; + + @Resource + private ConfigAssayMethodParameterMapper configAssayMethodParameterMapper; + + @Resource + private ConfigAssayMethodProjectMapper configAssayMethodProjectMapper; + + @Resource + private ConfigAssayMethodProjectParameterMapper configAssayMethodProjectParameterMapper; + + @Resource + private ConfigReportTemplateMapper configReportTemplateMapper; + + @Resource + private BusinessAssayTaskMapper businessAssayTaskMapper; + + @Resource + private BusinessAssayTaskDataMapper businessAssayTaskDataMapper; + + @Resource + private BusinessAssayTaskParameterDataMapper businessAssayTaskParameterDataMapper; + + @Resource + private BusinessAssayProjectDataMapper businessAssayProjectDataMapper; + + @Resource + private BusinessAssayParameterDataMapper businessAssayParameterDataMapper; + + @Resource + private BusinessSubSampleMapper businessSubSampleMapper; + + @Resource + private BusinessSubSampleAssessmentMapper businessSubSampleAssessmentMapper; + + @Resource + private BusinessSubParentSampleAssessmentMapper businessSubParentSampleAssessmentMapper; + @Override public void process() throws Exception { + SampleTaskAssignContext sampleTaskAssignContext = this.getContextBean(SampleTaskAssignContext.class); + String loginRealname = sampleTaskAssignContext.getLoginRealname(); + LoginUser loginUser = sampleTaskAssignContext.getLoginUser(); + LocalDateTime currentDateTime = sampleTaskAssignContext.getCurrentDateTime(); + //指派的方法 + Long assignConfigAssayMethodId = sampleTaskAssignContext.getAssignConfigAssayMethodId(); + ConfigAssayMethodDO configAssayMethodDO = configAssayMethodMapper.selectById(assignConfigAssayMethodId); + //方法类型id + Long dictionaryBusinessId = configAssayMethodDO.getDictionaryBusinessId(); + DictionaryBusinessDO dictionaryBusinessDO = dictionaryBusinessMapper.selectById(dictionaryBusinessId); + //查询报表模板 + ConfigReportTemplateDO configReportTemplate = configReportTemplateMapper.selectLatestConfigReportTemplateByKey(configAssayMethodDO.getConfigReportTemplateKey()); + //指派的分析方法的参数 + List configAssayMethodParameterDOList = configAssayMethodParameterMapper.selectByConfigAssayMethodId(assignConfigAssayMethodId); + //分析方法检测项目配置 + List configAssayMethodProjectList = configAssayMethodProjectMapper.selectByConfigAssayMethodId(assignConfigAssayMethodId); + //分析方法检测项目参数配置 + List configAssayMethodProjectParameterList = configAssayMethodProjectParameterMapper.selectByConfigAssayMethodId(assignConfigAssayMethodId); + //分析类型 + String assayType = sampleTaskAssignContext.getAssayType(); + //分析任务数 + Integer assayTaskCount = sampleTaskAssignContext.getAssayTaskCount(); + List assignAssayUserList = sampleTaskAssignContext.getAssignAssayUserList(); + int assignAssayUserCount = assignAssayUserList.size(); - } + // 用于缓存已处理的任务单,避免同一用户在同一业务类型下重复查询数据库 + // Key: userId + dictionaryBusinessId, Value: BusinessAssayTaskDO + Map existingTaskCache = new HashMap<>(); + + //保存任务分配单 + List saveBusinessAssayTaskList = new ArrayList<>(); + //更新任务分配单 + List updateBusinessAssayTaskList = new ArrayList<>(); + //任务分配单明细 + List businessAssayTaskDetailList = new ArrayList<>(); + + //分析的检测项目id列表 + List assayProjectDataIdList = sampleTaskAssignContext.getAssayProjectDataIdList(); + + //查询旧的检测项目id列表 + List businessAssayProjectDataExtendList = businessAssayProjectDataMapper.selectExtendByIds(assayProjectDataIdList); + //检测项目显示名称 +// List projectShowNameList = businessAssayProjectDataExtendList.stream().map(m -> m.getShowName()).distinct().collect(Collectors.toList()); + //检测项目id列表 + List projectIdList = businessAssayProjectDataExtendList.stream().map(m -> m.getDictionaryProjectId()).distinct().collect(Collectors.toList()); + //子样id列表 + List businessSubSampleIdList = businessAssayProjectDataExtendList.stream().map(m -> m.getBusinessSubSampleId()).collect(Collectors.toList()); + //查询子样 + List businessSubSampleList = businessSubSampleMapper.selectByIds(businessSubSampleIdList); + sampleTaskAssignContext.setBusinessSubSampleList(businessSubSampleList); + + //需要更新的报表数据 + List updateBusinessAssayReportDataDOList = new ArrayList<>(); + + //需要更新的分析任务 + List updateBusinessAssayTaskDataDOList = new ArrayList<>(); + //需要更新的分析任务参数 + List updateBusinessAssayTaskParameterDataDOList = new ArrayList<>(); + //需要更新的分析任务检测项目 + List updateBusinessAssayProjectDataDOList = new ArrayList<>(); + //需要更新的分析任务检测项目参数 + List updateBusinessAssayParameterDataDOList = new ArrayList<>(); + + //需要更新的子样判定 + List updateBusinessSubSampleAssessmentDOList = new ArrayList<>(); + + //需要更新的分样判定 + List updateBusinessSubParentSampleAssessmentDOList = new ArrayList<>(); + + //需要新建的分析任务 + List saveBusinessAssayTaskDataDOList = new ArrayList<>(); + //需要新建的分析任务参数 + List saveBusinessAssayTaskParameterDataDOList = new ArrayList<>(); + //需要新建的分析任务检测项目 + List saveBusinessAssayProjectDataDOList = new ArrayList<>(); + //需要新建的分析任务检测项目参数 + List saveBusinessAssayParameterDataDOList = new ArrayList<>(); + + //需要新建的子样判定 + List saveBusinessSubSampleAssessmentDOList = new ArrayList<>(); + + //需要新建的分样判定 + List saveBusinessSubParentSampleAssessmentDOList = new ArrayList<>(); + + //需要删除的分析任务 + List removeAssayTaskDataIdList = new ArrayList<>(); + //需要删除的分析任务参数 + List removeAssayTaskParameterDataIdList = new ArrayList<>(); + //需要删除的分析任务检测项目 + List removeAssayProjectIdList = new ArrayList<>(); + //需要删除的分析任务检测项目参数 + List removeAssayParameterIdList = new ArrayList<>(); + + //需要删除的子样判定 + List removeSubSampleAssessmentIdList = new ArrayList<>(); + + //需要删除的分样判定 + List removeSubParentSampleAssessmentIdList = new ArrayList<>(); + + //旧的根据分析方法进行分组 + Map> businessAssayProjectDataExtendMethodMap = businessAssayProjectDataExtendList.stream().collect(Collectors.groupingBy(BusinessAssayProjectDataExtendRespVO::getConfigAssayMethodId)); + + for (Map.Entry> businessAssayProjectDataExtendMethodEntry : businessAssayProjectDataExtendMethodMap.entrySet()) { + Long oldConfigAssayMethodId = businessAssayProjectDataExtendMethodEntry.getKey(); + List currBusinessAssayProjectDataExtendList = businessAssayProjectDataExtendMethodEntry.getValue(); + //过滤当前分样id列表 + List currBusinessSubParentSampleIdList = currBusinessAssayProjectDataExtendList.stream().map(m -> m.getBusinessSubParentSampleId()).distinct().collect(Collectors.toList()); + //查询检测任务 (通过分样id,可以查询双杯样的) + List businessAssayTaskDataDOList = businessAssayTaskDataMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(currBusinessSubParentSampleIdList, oldConfigAssayMethodId); + + 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 businessAssayTaskParameterDataList = businessAssayTaskParameterDataMapper.selectExtendByBusinessAssayTaskDataIds(businessAssayTaskDataIdList); + + //查询检测任务的检测项目 + 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(currBusinessSubParentSampleIdList, oldConfigAssayMethodId); + + //查询分样判定 + List businessSubParentSampleAssessmentList = businessSubParentSampleAssessmentMapper.selectByBusinessSubParentSampleIdsAndConfigAssayMethodId(currBusinessSubParentSampleIdList, oldConfigAssayMethodId); + + //循环分样判定 + for (BusinessSubParentSampleAssessmentExtendRespVO businessSubParentSampleAssessment : businessSubParentSampleAssessmentList) { + //如果当前分析方法不等于要指派的方法 + if (!businessSubParentSampleAssessment.getConfigAssayMethodId().equals(assignConfigAssayMethodId)) { + //查询是否已有要变更的方法的分样判定 + BusinessSubParentSampleAssessmentDO businessSubParentSampleAssessmentDO = businessSubParentSampleAssessmentMapper.selectByBusinessSubParentSampleIdAndConfigAssayMethodIdAndRetestCount(businessSubParentSampleAssessment.getBusinessSubParentSampleId(), assignConfigAssayMethodId, 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);//平行 +// break; +// } +// default: +// configSubSampleMethod.setTaskCount(1);//单杯 +// break; +// } +// +// //扩展配置 +// String configInfomation = configSubSampleMethod.getConfigInfomation(); +// List getParamList = null; +// if (StringUtils.isNotBlank(configInfomation)) { +// //解析配置 +// ConfigSubSampleMethodConfInfo configSubSampleMethodConfInfo = JSON.parseObject(configInfomation, ConfigSubSampleMethodConfInfo.class); +// getParamList = configSubSampleMethodConfInfo.getGetParam(); +// } +// +// //根据任务数判断是平行还是 +// 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(assignConfigAssayMethodId); + businessSubParentSampleAssessmentDO.setAssayType(assayType); + businessSubParentSampleAssessmentDO.setTaskType("常规"); + saveBusinessSubParentSampleAssessmentDOList.add(businessSubParentSampleAssessmentDO); + + BusinessSubSampleDO businessSubSampleDO = null; + if (!QmsCommonConstant.ASSAY_TYPE_DOUBLE_CUP.equals(businessSubParentSampleAssessment.getAssayType())) {//如果不为双杯样 + businessSubSampleDO = businessSubSampleList.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(assignConfigAssayMethodId); + businessSubSampleAssessmentDO.setAssayType(assayType); + businessSubSampleAssessmentDO.setTaskType("常规"); + + saveBusinessSubSampleAssessmentDOList.add(businessSubSampleAssessmentDO); + + //查询需要删除的检测项目 + List removBusinessAssayProjectDataIdList = currBusinessAssayProjectDataExtendList.stream().filter(f -> f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).map(m -> m.getId()).collect(Collectors.toList()); + //添加到删除列表 + removeAssayProjectIdList.addAll(removBusinessAssayProjectDataIdList); + List removBusinessAssayParameterDataIdList = businessAssayParameterDataDOList.stream().filter(f -> removBusinessAssayProjectDataIdList.contains(f.getBusinessAssayProjectDataId())).map(m -> m.getId()).collect(Collectors.toList()); + removeAssayParameterIdList.addAll(removBusinessAssayParameterDataIdList); + +// List oldBusinessAssayProjectDataIdList = businessAssayProjectDataList.stream().filter(f -> f.getConfigAssayMethodId().equals(businessSubParentSampleAssessment.getConfigAssayMethodId()) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).map(m -> m.getId()).collect(Collectors.toList()); + + List projectShowNameList = businessAssayProjectDataList.stream().filter(f -> f.getConfigAssayMethodId().equals(oldConfigAssayMethodId) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId()) && !removeAssayProjectIdList.contains(f.getId())).map(m -> m.getShowName()).collect(Collectors.toList()); + + if (projectShowNameList.size() <= 0) { + //查询旧的检测任务 + List oldBusinessAssayTaskDataIdList = businessAssayTaskDataDOList.stream().filter(f -> f.getConfigAssayMethodId().equals(oldConfigAssayMethodId) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).map(m -> m.getId()).collect(Collectors.toList()); + //添加到删除列表 + removeAssayTaskDataIdList.addAll(oldBusinessAssayTaskDataIdList); + if (oldBusinessAssayTaskDataIdList.size() > 0) { + List oldBusinessAssayTaskParameterDataIdList = businessAssayTaskParameterDataList.stream().filter(f -> oldBusinessAssayTaskDataIdList.contains(f.getBusinessAssayTaskDataId())).map(m -> m.getId()).collect(Collectors.toList()); + //添加分析任务属性删除列表 + removeAssayTaskParameterDataIdList.addAll(oldBusinessAssayTaskParameterDataIdList); + } + //查询旧的子样判定 + List oldBusinessSubSampleAssesmentIdList = businessSubSampleAssessmentDOList.stream().filter(f -> f.getConfigAssayMethodId().equals(oldConfigAssayMethodId) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).map(m -> m.getId()).collect(Collectors.toList()); + //添加到删除列表 + removeSubSampleAssessmentIdList.addAll(oldBusinessSubSampleAssesmentIdList); + + //添加到删除列表 + removeSubParentSampleAssessmentIdList.add(businessSubParentSampleAssessment.getId()); + } else { + //查询旧的检测任务 + List oldBusinessAssayTaskDataList = businessAssayTaskDataDOList.stream().filter(f -> f.getConfigAssayMethodId().equals(oldConfigAssayMethodId) && 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 < assayTaskCount; 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(assignConfigAssayMethodId); + businessAssayTaskDataDO.setAssayType(assayType); + businessAssayTaskDataDO.setTaskType("常规"); + businessAssayTaskDataDO.setConfigSampleFlowId(oldBusinessAssayTaskDataDO.getConfigSampleFlowId()); + businessAssayTaskDataDO.setSampleFlowNodeKey(oldBusinessAssayTaskDataDO.getSampleFlowNodeKey()); + businessAssayTaskDataDO.setSampleFlowNodeTime(currentDateTime); + businessAssayTaskDataDO.setAssayDepartmentId(configAssayMethodDO.getAssayDepartmentId()); + businessAssayTaskDataDO.setAssayDepartmentName(configAssayMethodDO.getAssayDepartmentName()); + + // 1. 确定当前数据分配给哪个用户 (轮询) + AssignAssayUser currentUser = assignAssayUserList.get(i % assignAssayUserCount); + String currentOperatorName = currentUser.getRealName(); + Long currentOperatorId = currentUser.getUserId(); + + // 2. 查找或创建该用户在此业务类型下的任务单 + // 缓存Key:用户ID_业务ID + String cacheKey = currentOperatorId + "_" + dictionaryBusinessId; + BusinessAssayTaskDO businessAssayTaskDO = existingTaskCache.get(cacheKey); + + if (businessAssayTaskDO == null) { + // 缓存没命中,去数据库查该用户是否有进行中的任务 + businessAssayTaskDO = businessAssayTaskMapper.selectAssignInProgressByAssayUserAndAssignUser(dictionaryBusinessId, currentOperatorName, loginRealname); + + if (businessAssayTaskDO == null) { + // 没有进行中任务,新建 + String taskNo = sequenceUtil.genCode(configAssayMethodDO.getCodeRule()); + businessAssayTaskDO = new BusinessAssayTaskDO(); + businessAssayTaskDO.setId(IdWorker.getId()); + businessAssayTaskDO.setTaskNo(taskNo); + businessAssayTaskDO.setTaskName(dictionaryBusinessDO.getName()); + + // 设置当前轮询到的操作员 + businessAssayTaskDO.setAssayOperator(currentOperatorName); + businessAssayTaskDO.setAssayOperatorId(currentOperatorId); + + businessAssayTaskDO.setConfigAssayMethodId(configAssayMethodDO.getId()); + businessAssayTaskDO.setDictionaryBusinessId(dictionaryBusinessId); + businessAssayTaskDO.setDictionaryBusinessKey(configAssayMethodDO.getDictionaryBusinessKey()); + businessAssayTaskDO.setTaskSourceType(QmsCommonConstant.TASK_ASSIGN); + businessAssayTaskDO.setConfigReportTemplateId(configReportTemplate.getId()); + businessAssayTaskDO.setConfigReportTemplateKey(configReportTemplate.getKey()); + businessAssayTaskDO.setIsIngredients(configAssayMethodDO.getIsIngredients()); + businessAssayTaskDO.setIngredientsStatus("initial"); + + businessAssayTaskDO.setTaskAssignOperator(loginRealname); + businessAssayTaskDO.setTaskAssignOperatorId(loginUser.getId()); + businessAssayTaskDO.setTaskAssignTime(currentDateTime); + businessAssayTaskDO.setTaskAssignStatus(QmsCommonConstant.IN_PROGRESS); + businessAssayTaskDO.setTaskAssayStatus(QmsCommonConstant.NOT_START); + businessAssayTaskDO.setFinishStatus(QmsCommonConstant.NOT_START); + businessAssayTaskDO.setFlowStatus(QmsCommonConstant.NOT_START); + + saveBusinessAssayTaskList.add(businessAssayTaskDO); + } else { + updateBusinessAssayTaskList.add(businessAssayTaskDO); + } + // 放入缓存,后续同用户同业务类型的直接复用 + existingTaskCache.put(cacheKey, businessAssayTaskDO); + } + + // 3. 更新原始数据状态 + businessAssayTaskDataDO.setIsAssignTasked(QmsCommonConstant.YES); + businessAssayTaskDataDO.setAssignTaskTime(currentDateTime); + // 注意:这里也要更新为当前轮询到的操作员,而不是固定的某个人 + businessAssayTaskDataDO.setAssayOperator(currentOperatorName); + businessAssayTaskDataDO.setAssayOperatorId(currentOperatorId); + businessAssayTaskDataDO.setBusinessAssayTaskId(businessAssayTaskDO.getId()); + + // 4. 构建任务明细 + BusinessAssayTaskDetailDO businessAssayTaskDetailDO = new BusinessAssayTaskDetailDO(); + businessAssayTaskDetailDO.setBusinessAssayTaskDataId(businessAssayTaskDataDO.getId()); + businessAssayTaskDetailDO.setBusinessAssayTaskId(businessAssayTaskDO.getId()); + businessAssayTaskDetailDO.setTaskNo(businessAssayTaskDO.getTaskNo()); + businessAssayTaskDetailDO.setSampleId(businessAssayTaskDataDO.getBusinessSubSampleId()); + businessAssayTaskDetailDO.setSampleCode(businessSubSampleDO.getSampleAssayCode()); + businessAssayTaskDetailDO.setSampleName(businessSubSampleDO.getSampleName()); + businessAssayTaskDetailDO.setDataSourceType(QmsCommonConstant.NORMAL); + // 如果需要全局排序,这里的 sortNo 可能需要重新计算,如果是按任务单内部排序,保持自增即可 + // 由于现在拆分了任务单,每个任务单内部的 sortNo 最好单独维护,这里简单处理为累加(实际可能需按任务单分组后重排) + // 建议:如果在同一个任务单内,sortNo 应该是连续的。由于我们是循环插入,可能需要后期整理,或者在这里维护一个 Map + // 为了简化,这里暂时保持原有逻辑,实际生产中建议在循环结束后按 taskId 分组重新设置 sortNo + + businessAssayTaskDetailList.add(businessAssayTaskDetailDO); + + + //子样检测任务参数 + BusinessAssayTaskParameterDataDO businessAssayTaskParameterDataDO = null; + for (ConfigAssayMethodParameterDO configAssayMethodParameterDO : configAssayMethodParameterDOList) { + businessAssayTaskParameterDataDO = new BusinessAssayTaskParameterDataDO(); + businessAssayTaskParameterDataDO.setId(IdWorker.getId()); + businessAssayTaskParameterDataDO.setBusinessAssayTaskDataId(businessAssayTaskDataDO.getId()); + businessAssayTaskParameterDataDO.setConfigAssayMethodParameterId(configAssayMethodParameterDO.getId()); + businessAssayTaskParameterDataDO.setDataType(configAssayMethodParameterDO.getDataType()); + businessAssayTaskParameterDataDO.setDecimalPosition(configAssayMethodParameterDO.getDecimalPosition()); + + if (StringUtils.isNotBlank(configAssayMethodParameterDO.getDefaultValue())) { + businessAssayTaskParameterDataDO.setValue(configAssayMethodParameterDO.getDefaultValue()); + } +// if (getParamList != null) { +// BusinessAssayTaskParameterDataExtendRespVO oldBusinessAssayTaskParameterData = businessAssayTaskParameterDataList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodId) && f.getBusinessAssayTaskDataId().equals(oldBusinessAssayTaskDataDO.getId()) && f.getKey().equals(configAssayMethodParameterDO.getKey())).findFirst().orElse(null); +// ConfigSubSampleMethodConfItem targetAttribute = getParamList.stream().filter(f -> StringUtils.isNotBlank(f.getTarget().getAttribute()) && f.getTarget().getAttribute().equals(oldBusinessAssayTaskParameterData.getKey())).findFirst().orElse(null); +// if (targetAttribute != null) { +// businessAssayTaskParameterDataDO.setValue(oldBusinessAssayTaskParameterData.getValue()); +// } +// } + + saveBusinessAssayTaskParameterDataDOList.add(businessAssayTaskParameterDataDO); + } + + StringBuilder assayProjectBuilder = new StringBuilder(); + + for (ConfigAssayMethodProjectExtendRespVO configAssayMethodProjectDO : configAssayMethodProjectList) { + + //如果当前分析方法的项目不在当前检测项目中,则跳出循环继续 + 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.setEffectiveDigit(configAssayMethodProjectDO.getEffectiveDigit()); + 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()); + + if (StringUtils.isNotBlank(configAssayMethodProjectParameterDO.getDefaultValue())) { + businessAssayParameterDataDO.setValue(configAssayMethodProjectParameterDO.getDefaultValue()); + } + + 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); + +// List projectShowNameList = changeConfigAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodId)).map(m -> m.getDictionaryProjectShowName()).distinct().collect(Collectors.toList()); + List projectShowNameList = businessAssayProjectDataList.stream().filter(f -> f.getConfigAssayMethodId().equals(oldConfigAssayMethodId) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId()) && !removeAssayProjectIdList.contains(f.getId())).map(m -> m.getShowName()).collect(Collectors.toList()); + + if (projectShowNameList.size() <= 0) {//当前方法无检测项目,则需要删除 + //查询旧的检测任务 + List oldBusinessAssayTaskDataIdList = businessAssayTaskDataDOList.stream().filter(f -> f.getConfigAssayMethodId().equals(oldConfigAssayMethodId) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).map(m -> m.getId()).collect(Collectors.toList()); + //添加到删除列表 + removeAssayTaskDataIdList.addAll(oldBusinessAssayTaskDataIdList); + //查询旧的子样判定 + List oldBusinessSubSampleAssesmentIdList = businessSubSampleAssessmentDOList.stream().filter(f -> f.getConfigAssayMethodId().equals(oldConfigAssayMethodId) && f.getBusinessSubParentSampleId().equals(businessSubParentSampleAssessment.getBusinessSubParentSampleId())).map(m -> m.getId()).collect(Collectors.toList()); + //添加到删除列表 + removeSubSampleAssessmentIdList.addAll(oldBusinessSubSampleAssesmentIdList); + + //添加到删除列表 + removeSubParentSampleAssessmentIdList.add(businessSubParentSampleAssessment.getId()); + } else { + //查询旧的检测任务 + List oldBusinessAssayTaskDataList = businessAssayTaskDataDOList.stream().filter(f -> f.getConfigAssayMethodId().equals(oldConfigAssayMethodId) && 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(), assignConfigAssayMethodId); + + int i = 0; + //当前存在的分析任务循环 + for (BusinessAssayTaskDataDO businessAssayTaskDataDO : currBusinessAssayTaskDataDOList) { + + List configAssayMethodProjectDOList = configAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(assignConfigAssayMethodId)).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.setEffectiveDigit(configAssayMethodProjectDO.getEffectiveDigit()); + 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()); + + + // 1. 确定当前数据分配给哪个用户 (轮询) + AssignAssayUser currentUser = assignAssayUserList.get(i % assignAssayUserCount); + String currentOperatorName = currentUser.getRealName(); + Long currentOperatorId = currentUser.getUserId(); + + // 2. 查找或创建该用户在此业务类型下的任务单 + // 缓存Key:用户ID_业务ID + String cacheKey = currentOperatorId + "_" + dictionaryBusinessId; + BusinessAssayTaskDO businessAssayTaskDO = existingTaskCache.get(cacheKey); + + if (businessAssayTaskDO == null) { + // 缓存没命中,去数据库查该用户是否有进行中的任务 + businessAssayTaskDO = businessAssayTaskMapper.selectAssignInProgressByAssayUserAndAssignUser(dictionaryBusinessId, currentOperatorName, loginRealname); + + if (businessAssayTaskDO == null) { + // 没有进行中任务,新建 + String taskNo = sequenceUtil.genCode(configAssayMethodDO.getCodeRule()); + businessAssayTaskDO = new BusinessAssayTaskDO(); + businessAssayTaskDO.setId(IdWorker.getId()); + businessAssayTaskDO.setTaskNo(taskNo); + businessAssayTaskDO.setTaskName(dictionaryBusinessDO.getName()); + + // 设置当前轮询到的操作员 + businessAssayTaskDO.setAssayOperator(currentOperatorName); + businessAssayTaskDO.setAssayOperatorId(currentOperatorId); + + businessAssayTaskDO.setConfigAssayMethodId(configAssayMethodDO.getId()); + businessAssayTaskDO.setDictionaryBusinessId(dictionaryBusinessId); + businessAssayTaskDO.setDictionaryBusinessKey(configAssayMethodDO.getDictionaryBusinessKey()); + businessAssayTaskDO.setTaskSourceType(QmsCommonConstant.TASK_ASSIGN); + businessAssayTaskDO.setConfigReportTemplateId(configReportTemplate.getId()); + businessAssayTaskDO.setConfigReportTemplateKey(configReportTemplate.getKey()); + businessAssayTaskDO.setIsIngredients(configAssayMethodDO.getIsIngredients()); + businessAssayTaskDO.setIngredientsStatus("initial"); + + businessAssayTaskDO.setTaskAssignOperator(loginRealname); + businessAssayTaskDO.setTaskAssignOperatorId(loginUser.getId()); + businessAssayTaskDO.setTaskAssignTime(currentDateTime); + businessAssayTaskDO.setTaskAssignStatus(QmsCommonConstant.IN_PROGRESS); + businessAssayTaskDO.setTaskAssayStatus(QmsCommonConstant.NOT_START); + businessAssayTaskDO.setFinishStatus(QmsCommonConstant.NOT_START); + businessAssayTaskDO.setFlowStatus(QmsCommonConstant.NOT_START); + + saveBusinessAssayTaskList.add(businessAssayTaskDO); + } else { + updateBusinessAssayTaskList.add(businessAssayTaskDO); + } + // 放入缓存,后续同用户同业务类型的直接复用 + existingTaskCache.put(cacheKey, businessAssayTaskDO); + } + + // 3. 更新原始数据状态 + businessAssayTaskDataDO.setIsAssignTasked(QmsCommonConstant.YES); + businessAssayTaskDataDO.setAssignTaskTime(currentDateTime); + // 注意:这里也要更新为当前轮询到的操作员,而不是固定的某个人 + businessAssayTaskDataDO.setAssayOperator(currentOperatorName); + businessAssayTaskDataDO.setAssayOperatorId(currentOperatorId); + businessAssayTaskDataDO.setBusinessAssayTaskId(businessAssayTaskDO.getId()); + + // 4. 构建任务明细 + BusinessSubSampleDO businessSubSampleDO = sampleTaskAssignContext.getBusinessSubSampleById(businessAssayTaskDataDO.getBusinessSubSampleId()); + + BusinessAssayTaskDetailDO businessAssayTaskDetailDO = new BusinessAssayTaskDetailDO(); + businessAssayTaskDetailDO.setBusinessAssayTaskDataId(businessAssayTaskDataDO.getId()); + businessAssayTaskDetailDO.setBusinessAssayTaskId(businessAssayTaskDO.getId()); + businessAssayTaskDetailDO.setTaskNo(businessAssayTaskDO.getTaskNo()); + businessAssayTaskDetailDO.setSampleId(businessAssayTaskDataDO.getBusinessSubSampleId()); + businessAssayTaskDetailDO.setSampleCode(businessSubSampleDO.getSampleAssayCode()); + businessAssayTaskDetailDO.setSampleName(businessSubSampleDO.getSampleName()); + businessAssayTaskDetailDO.setDataSourceType(QmsCommonConstant.NORMAL); + // 如果需要全局排序,这里的 sortNo 可能需要重新计算,如果是按任务单内部排序,保持自增即可 + // 由于现在拆分了任务单,每个任务单内部的 sortNo 最好单独维护,这里简单处理为累加(实际可能需按任务单分组后重排) + // 建议:如果在同一个任务单内,sortNo 应该是连续的。由于我们是循环插入,可能需要后期整理,或者在这里维护一个 Map + // 为了简化,这里暂时保持原有逻辑,实际生产中建议在循环结束后按 taskId 分组重新设置 sortNo + + businessAssayTaskDetailList.add(businessAssayTaskDetailDO); + + updateBusinessAssayTaskDataDOList.add(businessAssayTaskDataDO); + i++; + } + + + } + + + + + + } + + } + + + } + + Map sortCounterMap = new HashMap<>(); + for (BusinessAssayTaskDetailDO detail : businessAssayTaskDetailList) { + Long taskId = detail.getBusinessAssayTaskId(); + int currentSort = sortCounterMap.getOrDefault(taskId, 0) + 1; + detail.setSortNo(currentSort); + sortCounterMap.put(taskId, currentSort); + } + + + sampleTaskAssignContext.setSaveBusinessSubParentSampleAssessmentList(saveBusinessSubParentSampleAssessmentDOList); + sampleTaskAssignContext.setSaveBusinessSubSampleAssessmentList(saveBusinessSubSampleAssessmentDOList); + + sampleTaskAssignContext.setSaveBusinessAssayTaskList(saveBusinessAssayTaskList); + sampleTaskAssignContext.setUpdateBusinessAssayTaskList(updateBusinessAssayTaskList); + + sampleTaskAssignContext.setSaveBusinessAssayTaskDataList(saveBusinessAssayTaskDataDOList); + sampleTaskAssignContext.setBusinessAssayTaskDataList(updateBusinessAssayTaskDataDOList); + + sampleTaskAssignContext.setSaveBusinessAssayTaskParameterDataList(saveBusinessAssayTaskParameterDataDOList); + + sampleTaskAssignContext.setSaveBusinessAssayProjectDataList(saveBusinessAssayProjectDataDOList); + sampleTaskAssignContext.setSaveBusinessAssayParameterDataList(saveBusinessAssayParameterDataDOList); + + sampleTaskAssignContext.setBusinessAssayTaskDetailList(businessAssayTaskDetailList); + + sampleTaskAssignContext.setRemoveAssayTaskDataIdList(removeAssayTaskDataIdList); + sampleTaskAssignContext.setRemoveAssayTaskParameterDataIdList(removeAssayTaskParameterDataIdList); + sampleTaskAssignContext.setRemoveAssayProjectIdList(removeAssayProjectIdList); + sampleTaskAssignContext.setRemoveAssayParameterIdList(removeAssayParameterIdList); + sampleTaskAssignContext.setRemoveSubSampleAssessmentIdList(removeSubSampleAssessmentIdList); + sampleTaskAssignContext.setRemoveSubParentSampleAssessmentIdList(removeSubParentSampleAssessmentIdList); +} @Override public boolean isAccess() { diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectNoMethodCmp.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectNoMethodCmp.java index 62ccb84e..e7f43ada 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectNoMethodCmp.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/sample/taskassign/SampleTaskAssignProjectNoMethodCmp.java @@ -398,6 +398,7 @@ public class SampleTaskAssignProjectNoMethodCmp extends NodeComponent { sampleTaskAssignContext.setUpdateBusinessAssayTaskList(updateBusinessAssayTaskList); sampleTaskAssignContext.setSaveBusinessAssayTaskDataList(saveBusinessAssayTaskDataList); + sampleTaskAssignContext.setSaveBusinessAssayTaskParameterDataList(saveBusinessAssayTaskParameterDataList); sampleTaskAssignContext.setSaveBusinessAssayProjectDataList(saveBusinessAssayProjectDataList); sampleTaskAssignContext.setSaveBusinessAssayParameterDataList(saveBusinessAssayParameterDataList); sampleTaskAssignContext.setSaveBusinessSampleEntrustUnStandardProjectList(saveBusinessSampleEntrustUnStandardProjectList); @@ -405,7 +406,6 @@ public class SampleTaskAssignProjectNoMethodCmp extends NodeComponent { sampleTaskAssignContext.setBusinessAssayTaskDetailList(businessAssayTaskDetailList); - } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/slot/SampleTaskAssignContext.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/slot/SampleTaskAssignContext.java index 0d926711..a4ac705b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/slot/SampleTaskAssignContext.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/liteflow/slot/SampleTaskAssignContext.java @@ -1,6 +1,7 @@ package com.zt.plat.module.qms.business.bus.liteflow.slot; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import cn.hutool.core.collection.CollUtil; @@ -148,4 +149,22 @@ public class SampleTaskAssignContext { /** 质控样-(质控空白)检测项目参数 **/ private List businessQCManagementParameterDataDOList; + + /** 需要删除的分析任务 **/ + private List removeAssayTaskDataIdList; + + /** 需要删除的分析任务参数 **/ + private List removeAssayTaskParameterDataIdList; + + /** 需要删除的分析任务检测项目 **/ + private List removeAssayProjectIdList; + + /** 需要删除的分析任务检测项目参数 **/ + private List removeAssayParameterIdList; + + /** 需要删除的子样判定 **/ + private List removeSubSampleAssessmentIdList; + + /** 需要删除的分样判定 **/ + private List removeSubParentSampleAssessmentIdList; } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayProjectDataService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayProjectDataService.java index 2ad2d165..853b3464 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayProjectDataService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayProjectDataService.java @@ -2,9 +2,6 @@ package com.zt.plat.module.qms.business.bus.service; import java.util.*; -import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayProjectDataPageReqVO; -import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayProjectDataRespVO; -import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayProjectDataSaveReqVO; import jakarta.validation.*; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.module.qms.business.bus.controller.vo.*; @@ -63,4 +60,11 @@ public interface BusinessAssayProjectDataService { */ PageResult getBusinessAssayProjectDataPage(BusinessAssayProjectDataPageReqVO pageReqVO); + /** + * 获得检测项目数据业务列表 + * @param reqVO + * @return + */ + List getBusinessAssayProjectDataList(BusinessAssayProjectDataReqVO reqVO); + } \ 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/BusinessAssayProjectDataServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayProjectDataServiceImpl.java index c8b4fd97..26fe7cd9 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayProjectDataServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayProjectDataServiceImpl.java @@ -1,9 +1,7 @@ package com.zt.plat.module.qms.business.bus.service; import cn.hutool.core.collection.CollUtil; -import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayProjectDataPageReqVO; -import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayProjectDataRespVO; -import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayProjectDataSaveReqVO; + import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -90,4 +88,9 @@ public class BusinessAssayProjectDataServiceImpl implements BusinessAssayProject return businessAssayProjectDataMapper.selectPage(pageReqVO); } + @Override + public List getBusinessAssayProjectDataList(BusinessAssayProjectDataReqVO reqVO) { + return businessAssayProjectDataMapper.selectList(reqVO); + } + } \ No newline at end of file