diff --git a/zt-module-qms/zt-module-qms-api/src/main/java/com/zt/plat/module/qms/enums/QmsCommonConstant.java b/zt-module-qms/zt-module-qms-api/src/main/java/com/zt/plat/module/qms/enums/QmsCommonConstant.java index 6934dec..12f108e 100644 --- a/zt-module-qms/zt-module-qms-api/src/main/java/com/zt/plat/module/qms/enums/QmsCommonConstant.java +++ b/zt-module-qms/zt-module-qms-api/src/main/java/com/zt/plat/module/qms/enums/QmsCommonConstant.java @@ -184,4 +184,7 @@ public interface QmsCommonConstant { /** 手动 **/ String MANUAL = "manual"; + + /** 允许提交 **/ + String ALLOW_SUBMIT = "allow_submit"; } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayParameterDataExtendRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayParameterDataExtendRespVO.java new file mode 100644 index 0000000..ee2ff02 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayParameterDataExtendRespVO.java @@ -0,0 +1,12 @@ +package com.zt.plat.module.qms.business.bus.controller.vo; + +import lombok.Data; + +@Data +public class BusinessAssayParameterDataExtendRespVO extends BusinessAssayParameterDataRespVO { + + private String parameterName; + + private String parameterKey; + +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskDataExtendRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskDataExtendRespVO.java index b7a252a..0958e76 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskDataExtendRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskDataExtendRespVO.java @@ -17,6 +17,9 @@ public class BusinessAssayTaskDataExtendRespVO extends BusinessAssayTaskDataResp /** 分析方法名称 **/ @Schema(description = "分析方法名称") private String configAssayMethodName; + + @Schema(description = "子样配置id") + private Long configSubSampleId; @Schema(description = "样品名称") private String sampleName; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayParameterDataMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayParameterDataMapper.java index d5b2ddc..c0f5797 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayParameterDataMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayParameterDataMapper.java @@ -83,5 +83,14 @@ public interface BusinessAssayParameterDataMapper extends BaseMapperX() .in(BusinessAssayParameterDataDO::getBusinessAssayProjectDataId, businessAssayProjectDataIds)); } + + default List selectExtendByBusinessAssayProjectDataIds(List businessAssayProjectDataIds) { + return selectJoinList(BusinessAssayParameterDataExtendRespVO.class, new MPJLambdaWrapperX() + .leftJoin(DictionaryParameterDO.class, DictionaryParameterDO::getId, BusinessAssayParameterDataDO::getDictionaryParameterId) + .selectAll(BusinessAssayParameterDataDO.class) + .selectAs(DictionaryParameterDO::getName, BusinessAssayParameterDataExtendRespVO::getParameterName) + .selectAs(DictionaryParameterDO::getKey, BusinessAssayParameterDataExtendRespVO::getParameterKey) + .in(BusinessAssayParameterDataDO::getBusinessAssayProjectDataId, businessAssayProjectDataIds)); + } } \ 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/BusinessAssayTaskDataMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayTaskDataMapper.java index 2456be4..aec5f55 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayTaskDataMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayTaskDataMapper.java @@ -47,6 +47,7 @@ public interface BusinessAssayTaskDataMapper extends BaseMapperX getParam; + + /** 分析方法下发配料配置 **/ + private List downIngredients; + + /** 分析方法配料上传配置 **/ + private List upIngredients; +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigSubSampleMethodConfItem.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigSubSampleMethodConfItem.java new file mode 100644 index 0000000..3ba9e78 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigSubSampleMethodConfItem.java @@ -0,0 +1,16 @@ +package com.zt.plat.module.qms.business.config.controller.vo; + +import lombok.Data; + +@Data +public class ConfigSubSampleMethodConfItem { + + /** 来源 **/ + private ConfigSubSampleMethodConfPoint source; + + /** 目标 **/ + private ConfigSubSampleMethodConfPoint target; + + /** 是否必须 **/ + private Boolean required; +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigSubSampleMethodConfPoint.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigSubSampleMethodConfPoint.java new file mode 100644 index 0000000..72a534d --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/controller/vo/ConfigSubSampleMethodConfPoint.java @@ -0,0 +1,20 @@ +package com.zt.plat.module.qms.business.config.controller.vo; + +import lombok.Data; + +@Data +public class ConfigSubSampleMethodConfPoint { + + /** 分析方法id **/ + private Long methodId; + + /** 检测项目 **/ + private String project; + + /** 参数 **/ + private String parameter; + + /** 字段 **/ + private String field; + +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigSubSampleMethodMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigSubSampleMethodMapper.java index 50cdda1..7abb095 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigSubSampleMethodMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigSubSampleMethodMapper.java @@ -53,5 +53,11 @@ public interface ConfigSubSampleMethodMapper extends BaseMapperX selectByConfigSubSampleIdsAndConfigAssayMethodId(List configSubSampleIds, Long configAssayMethodId) { + return selectList(new LambdaQueryWrapper() + .in(ConfigSubSampleMethodDO::getConfigSubSampleId, configSubSampleIds) + .eq(ConfigSubSampleMethodDO::getConfigAssayMethodId, 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/thirdpartyapi/service/AutoIngredientsServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/thirdpartyapi/service/AutoIngredientsServiceImpl.java index 26ebc1b..3e5f8f3 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/thirdpartyapi/service/AutoIngredientsServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/thirdpartyapi/service/AutoIngredientsServiceImpl.java @@ -6,27 +6,51 @@ import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.alibaba.fastjson2.JSON; +import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayParameterDataExtendRespVO; +import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayProjectDataExtendRespVO; +import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskDataExtendRespVO; +import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskDataReqVO; import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskExtendRespVO; import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskPageReqVO; -import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDetailDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayParameterDataDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayProjectDataDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO; +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.BusinessAssayTaskDetailMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayTaskMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubSampleMapper; +import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfInfo; +import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfItem; +import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfPoint; +import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSubSampleMethodDO; +import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSubSampleMethodMapper; import com.zt.plat.module.qms.enums.QmsCommonConstant; import com.zt.plat.module.qms.thirdpartyapi.controller.vo.AutoIngredientsTaskAssayResultReqVO; +import com.zt.plat.module.qms.thirdpartyapi.controller.vo.AutoIngredientsTaskDetailAssayResultReqVO; import com.zt.plat.module.qms.thirdpartyapi.controller.vo.AutoIngredientsTaskDetailRespVO; import com.zt.plat.module.qms.thirdpartyapi.controller.vo.AutoIngredientsTaskQueryReqVO; import com.zt.plat.module.qms.thirdpartyapi.controller.vo.AutoIngredientsTaskRespVO; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import jakarta.annotation.Resource; @Service public class AutoIngredientsServiceImpl implements AutoIngredientsService { + @Resource + private BusinessSubSampleMapper businessSubSampleMapper; + @Resource private BusinessAssayTaskMapper businessAssayTaskMapper; @@ -36,6 +60,9 @@ public class AutoIngredientsServiceImpl implements AutoIngredientsService { @Resource private BusinessAssayTaskDataMapper businessAssayTaskDataMapper; + @Resource + private ConfigSubSampleMethodMapper configSubSampleMethodMapper; + @Resource private BusinessAssayProjectDataMapper businessAssayProjectDataMapper; @@ -58,22 +85,154 @@ public class AutoIngredientsServiceImpl implements AutoIngredientsService { @Override public List taskDetailList(Long taskId) { -// List list = businessAssayTaskDetailMapper.selectByBusinessAssayTaskId(taskId); -// businessAssayTaskDataMapper.selectByBusinessAssayTaskId(taskId) - List resultList = new ArrayList<>(); -// for (BusinessAssayTaskDetailDO businessAssayTaskDetailDO : list) { -// AutoIngredientsTaskDetailRespVO autoIngredientsTaskDetailRespVO = new AutoIngredientsTaskDetailRespVO(); -// autoIngredientsTaskDetailRespVO.setAssayOperator(null) -// resultList.add(autoIngredientsTaskDetailRespVO); -// -// } + //查询任务分配信息 + BusinessAssayTaskDO businessAssayTaskDO = businessAssayTaskMapper.selectById(taskId); + //查询子样检测任务 + BusinessAssayTaskDataReqVO search = new BusinessAssayTaskDataReqVO(); + search.setBusinessAssayTaskId(taskId); + List list = businessAssayTaskDataMapper.selectList(search); + //子样配置id列表 + List configSubSampleIdList = list.stream().map(m -> m.getConfigSubSampleId()).distinct().collect(Collectors.toList()); + + //子样配置方法 + List configSubSampleMethodList = configSubSampleMethodMapper.selectByConfigSubSampleIdsAndConfigAssayMethodId(configSubSampleIdList, businessAssayTaskDO.getConfigAssayMethodId()); + + //分析任务id列表 + List businessAssayTaskDataIdList = list.stream().map(m -> m.getId()).collect(Collectors.toList()); + + //查询检测项目 + List businessAssayProjectDataList = businessAssayProjectDataMapper.selectByBusinessAssayTaskDataIds(businessAssayTaskDataIdList); + List businessAssayProjectDataIdList = businessAssayProjectDataList.stream().map(m -> m.getId()).collect(Collectors.toList()); + //查询检测项目参数 + List businessAssayParameterDataList = businessAssayParameterDataMapper.selectExtendByBusinessAssayProjectDataIds(businessAssayProjectDataIdList); + + List resultList = list.stream().map(m -> { + //子样配置信息 + ConfigSubSampleMethodDO configSubSampleMethodDO = configSubSampleMethodList.stream().filter(f -> f.getConfigSubSampleId().equals(m.getConfigSubSampleId())).findFirst().orElse(null); + String configInfomation = configSubSampleMethodDO.getConfigInfomation(); + //当前检测项目列表 + List currentBusinessAssayProjectDataList = businessAssayProjectDataList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(m.getId())).collect(Collectors.toList()); + + AutoIngredientsTaskDetailRespVO autoIngredientsTaskDetailRespVO = new AutoIngredientsTaskDetailRespVO(); + autoIngredientsTaskDetailRespVO.setId(m.getId()); + autoIngredientsTaskDetailRespVO.setTaskId(m.getBusinessAssayTaskId()); + autoIngredientsTaskDetailRespVO.setSampleCode(m.getSampleAssayCode()); + autoIngredientsTaskDetailRespVO.setSampleName(m.getSampleName()); + + if (StringUtils.isNotBlank(configInfomation)) { + ConfigSubSampleMethodConfInfo configSubSampleMethodConfInfo = JSON.parseObject(configInfomation, ConfigSubSampleMethodConfInfo.class); + //获取下发配置 + List downIngredients = configSubSampleMethodConfInfo.getDownIngredients(); + for (ConfigSubSampleMethodConfItem configSubSampleMethodConfItem : downIngredients) { + if (configSubSampleMethodConfItem.getRequired()) { + ConfigSubSampleMethodConfPoint source = configSubSampleMethodConfItem.getSource(); + String project = source.getProject(); + String parameter = source.getParameter(); + BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = currentBusinessAssayProjectDataList.stream().filter(f -> f.getSimpleName().equals(project)).findFirst().orElse(null); + BusinessAssayParameterDataExtendRespVO currentBusinessAssayParameterData = businessAssayParameterDataList.stream().filter(f -> f.getBusinessAssayProjectDataId().equals(currentBusinessAssayProjectData.getId()) && f.getParameterKey().equals(parameter)).findFirst().orElse(null); + ConfigSubSampleMethodConfPoint target = configSubSampleMethodConfItem.getTarget(); + String field = target.getField(); + BeanUtil.setFieldValue(autoIngredientsTaskDetailRespVO, field, currentBusinessAssayParameterData.getValue()); + } + } + } + autoIngredientsTaskDetailRespVO.setAssayProject(m.getAssayProject()); + autoIngredientsTaskDetailRespVO.setAssayOperator(m.getAssayOperator()); + autoIngredientsTaskDetailRespVO.setAssayOperatorName(m.getAssayOperator()); + autoIngredientsTaskDetailRespVO.setRemark(m.getRemark()); + + return autoIngredientsTaskDetailRespVO; + }).collect(Collectors.toList()); return resultList; } @Override + @Transactional(rollbackFor = Exception.class) public void submitAssayResult(AutoIngredientsTaskAssayResultReqVO body) { + List updateBusinessAssayTaskDataDOList = new ArrayList<>(); + List updateBusinessAssayProjectDataDOList = new ArrayList<>(); + List updateBusinessAssayParameterDataDOList = new ArrayList<>(); + + //任务id + Long taskId = body.getTaskId(); + //查询任务分配信息 + BusinessAssayTaskDO businessAssayTaskDO = businessAssayTaskMapper.selectById(taskId); + List sampleList = body.getSampleList(); + //获取检测任务id + List businessAssayTaskDataIdList = sampleList.stream().map(m -> m.getId()).collect(Collectors.toList()); + List businessAssayTaskDataDOList = businessAssayTaskDataMapper.selectByIds(businessAssayTaskDataIdList); + //获取子样id列表 + List businessSubSampleIdList = businessAssayTaskDataDOList.stream().map(m -> m.getBusinessSubSampleId()).distinct().collect(Collectors.toList()); + //获取子样 + List businessSubSampleDOList = businessSubSampleMapper.selectByIds(businessSubSampleIdList); + //子样配置id列表 + List configSubSampleIdList = businessSubSampleDOList.stream().map(m -> m.getConfigSubSampleId()).distinct().collect(Collectors.toList()); + //子样配置方法 + List configSubSampleMethodList = configSubSampleMethodMapper.selectByConfigSubSampleIdsAndConfigAssayMethodId(configSubSampleIdList, businessAssayTaskDO.getConfigAssayMethodId()); + + List businessAssayProjectDataList = businessAssayProjectDataMapper.selectByBusinessAssayTaskDataIds(businessAssayTaskDataIdList); + List businessAssayProjectDataIdList = businessAssayProjectDataList.stream().map(m -> m.getId()).collect(Collectors.toList()); + //查询检测项目参数 + List businessAssayParameterDataList = businessAssayParameterDataMapper.selectExtendByBusinessAssayProjectDataIds(businessAssayProjectDataIdList); + + for (AutoIngredientsTaskDetailAssayResultReqVO autoIngredientsTaskDetailAssayResultReqVO : sampleList) { + //获取子样检测任务 + BusinessAssayTaskDataDO businessAssayTaskDataDO = businessAssayTaskDataDOList.stream().filter(f -> f.getId().equals(autoIngredientsTaskDetailAssayResultReqVO.getId())).findFirst().orElse(null); + //获取子样 + BusinessSubSampleDO businessSubSampleDO = businessSubSampleDOList.stream().filter(f -> f.getId().equals(businessAssayTaskDataDO.getBusinessSubSampleId())).findFirst().orElse(null); + + //子样配置信息 + ConfigSubSampleMethodDO configSubSampleMethodDO = configSubSampleMethodList.stream().filter(f -> f.getConfigSubSampleId().equals(businessSubSampleDO.getConfigSubSampleId())).findFirst().orElse(null); + String configInfomation = configSubSampleMethodDO.getConfigInfomation(); + if (StringUtils.isNotBlank(configInfomation)) { + ConfigSubSampleMethodConfInfo configSubSampleMethodConfInfo = JSON.parseObject(configInfomation, ConfigSubSampleMethodConfInfo.class); + //获取上传配置 + List upIngredients = configSubSampleMethodConfInfo.getUpIngredients(); + for (ConfigSubSampleMethodConfItem configSubSampleMethodConfItem : upIngredients) { + if (configSubSampleMethodConfItem.getRequired()) { + ConfigSubSampleMethodConfPoint source = configSubSampleMethodConfItem.getSource(); + String field = source.getField(); + Object fieldValue = BeanUtil.getFieldValue(autoIngredientsTaskDetailAssayResultReqVO, field); + + ConfigSubSampleMethodConfPoint target = configSubSampleMethodConfItem.getTarget(); + String project = target.getProject(); + + BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = businessAssayProjectDataList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(autoIngredientsTaskDetailAssayResultReqVO.getId()) && f.getSimpleName().equals(project)).findFirst().orElse(null); + String parameter = target.getParameter(); + if (StringUtils.isBlank(parameter)) { + currentBusinessAssayProjectData.setValue(fieldValue.toString()); + updateBusinessAssayProjectDataDOList.add(BeanUtils.toBean(currentBusinessAssayProjectData, BusinessAssayProjectDataDO.class)); + } else { + BusinessAssayParameterDataExtendRespVO currentBusinessAssayParameterData = businessAssayParameterDataList.stream().filter(f -> f.getBusinessAssayProjectDataId().equals(currentBusinessAssayProjectData.getId()) && f.getParameterKey().equals(parameter)).findFirst().orElse(null); + currentBusinessAssayParameterData.setValue(fieldValue.toString()); + updateBusinessAssayParameterDataDOList.add(BeanUtils.toBean(currentBusinessAssayParameterData, BusinessAssayParameterDataDO.class)); + } + + } + } + } + String remark = CollUtil.join(Arrays.asList(autoIngredientsTaskDetailAssayResultReqVO.getRemark()), "、"); + + businessAssayTaskDataDO.setRemark(remark); + updateBusinessAssayTaskDataDOList.add(businessAssayTaskDataDO); + } + + businessAssayTaskDO.setIngredientsStatus(QmsCommonConstant.ALLOW_SUBMIT); + + businessAssayTaskMapper.updateById(businessAssayTaskDO); + + if (CollUtil.isNotEmpty(updateBusinessAssayTaskDataDOList)) { + businessAssayTaskDataMapper.updateBatch(updateBusinessAssayTaskDataDOList); + } + if (CollUtil.isNotEmpty(updateBusinessAssayProjectDataDOList)) { + businessAssayProjectDataMapper.updateBatch(updateBusinessAssayProjectDataDOList); + } + if (CollUtil.isNotEmpty(updateBusinessAssayParameterDataDOList)) { + businessAssayParameterDataMapper.updateBatch(updateBusinessAssayParameterDataDOList); + } + } }