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 61604ed1..6b0d9f59 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 @@ -455,6 +455,17 @@ public interface BusinessAssayTaskDataMapper extends BaseMapperX selectByBusinessBaseSampleIds(List businessBaseSampleIdList) { + return selectList(new LambdaQueryWrapperX() + .in(BusinessAssayTaskDataDO::getBusinessBaseSampleId, businessBaseSampleIdList)); + } + + /** * 根据主样及分析部门查询分析任务 * @param businessBaseSampleId 主样id diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleDeptEntrustDocAuditServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleDeptEntrustDocAuditServiceImpl.java index a359d991..e2dd3484 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleDeptEntrustDocAuditServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleDeptEntrustDocAuditServiceImpl.java @@ -243,7 +243,7 @@ public class SampleDeptEntrustDocAuditServiceImpl implements SampleDeptEntrustDo //查询委托分析部门明细样品 List businessSampleEntrustDepartmentDetailDOList = businessSampleEntrustDepartmentDetailMapper.selectByBusinessSampleEntrustDepartmentId(businessSampleEntrustDepartmentId); - //或者主样id列表 + //主样id列表 List businessBaseSampleIdList = businessSampleEntrustDepartmentDetailDOList.stream().map(m -> m.getBusinessBaseSampleId()).collect(Collectors.toList()); //查询分析任务 List businessAssayTaskDataDOList = businessAssayTaskDataMapper.selectByBusinessBaseSampleIdsAndAssayDepartmentId(businessBaseSampleIdList, businessSampleEntrustDepartmentDO.getAssayDepartmentId()); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleResultReportingServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleResultReportingServiceImpl.java index 4e7bafcb..8720d312 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleResultReportingServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleResultReportingServiceImpl.java @@ -8,6 +8,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -24,11 +25,18 @@ import com.alibaba.qlexpress4.QLResult; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.zt.plat.framework.common.exception.ServiceException; +import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.security.core.LoginUser; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; +import com.zt.plat.module.infra.api.businessfile.BusinessFileApi; +import com.zt.plat.module.infra.api.businessfile.dto.BusinessFileSaveReqDTO; +import com.zt.plat.module.infra.api.file.FileApi; +import com.zt.plat.module.infra.api.file.dto.FileCreateReqDTO; +import com.zt.plat.module.infra.api.file.dto.FileRespDTO; import com.zt.plat.module.qms.business.bus.controller.vo.BatchResultDataReportingReqVO; import com.zt.plat.module.qms.business.bus.controller.vo.BatchResultDataReportingReqVO.BusinessSubParentSampleIdAndRetestCount; +import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayProjectDataExtendRespVO; import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSubParentSampleAssessmentProjectExtendRespVO; import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSubParentSampleAssessmentGroupReqVO; import com.zt.plat.module.qms.business.bus.controller.vo.BusinessSubParentSampleAssessmentGroupRespVO; @@ -47,6 +55,7 @@ import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessBaseSampleDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDepartmentDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDepartmentDetailDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDetailDO; +import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustFileDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubParentSampleAssessmentDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubParentSampleAssessmentProjectDO; @@ -64,6 +73,7 @@ import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessBaseSampleMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustDepartmentDetailMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustDepartmentMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustDetailMapper; +import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustFileMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSampleEntrustRegistrationMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubParentSampleAssessmentMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubParentSampleAssessmentProjectMapper; @@ -86,6 +96,7 @@ import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodPr import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectParameterDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigEntrustSourceDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigReportFieldDO; +import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigReportTemplateDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSubSampleMethodDO; import com.zt.plat.module.qms.business.config.dal.mapper.BaseSampleMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodMapper; @@ -96,16 +107,36 @@ import com.zt.plat.module.qms.business.config.dal.mapper.ConfigProjectMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigReportFieldMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSampleReportMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSubSampleMethodMapper; +import com.zt.plat.module.qms.business.config.service.ConfigReportTemplateService; import com.zt.plat.module.qms.business.dic.dal.dataobject.DictionaryProjectDO; import com.zt.plat.module.qms.enums.QmsCommonConstant; +import com.zt.plat.module.qms.framework.gridreport.GridReport; +import com.zt.plat.module.qms.framework.gridreport.PdfHelper; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import gridreport.jni.BinaryObject; +import gridreport.jni.ExportType; import jakarta.annotation.Resource; @Service public class SampleResultReportingServiceImpl implements SampleResultReportingService { + + @Resource + private GridReport gridReport; + @Resource + private FileApi fileApi; + + @Resource + private BusinessFileApi businessFileApi; + + @Resource + private ConfigReportTemplateService configReportTemplateService; + + @Resource + private SampleAnalysisAuditService sampleAnalysisAuditService; + @Resource private BusinessAssayTaskDataMapper businessAssayTaskDataMapper; @@ -562,6 +593,9 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe @Resource private BusinessSampleEntrustDetailMapper businessSampleEntrustDetailMapper; + @Resource + private BusinessSampleEntrustFileMapper businessSampleEntrustFileMapper; + @Resource private BusinessSampleEntrustDepartmentMapper businessSampleEntrustDepartmentMapper; @@ -584,6 +618,7 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe List updatebBusinessSampleEntrustRegistrationDOList = new ArrayList<>(); List updateBusinessSampleEntrustDepartmentDOList = new ArrayList<>(); List updateBusinessSampleEntrustDepartmentDetailDOList = new ArrayList<>(); + List businessSampleEntrustFileDOList = new ArrayList<>(); List updateBusinessSubSampleDOList = new ArrayList<>(); List updateBusinessSubSampleAnalysisGroupDOList = new ArrayList<>(); @@ -834,6 +869,88 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe continue; } businessSampleEntrustRegistrationDO.setAssayStatus(QmsCommonConstant.CHECKED); + + //处理原始记录附件,原始记录需要过滤掉 + //过滤当前 +// List currEntrustBusinessBaseSampleIdList = allBusinessSampleEntrustDetailDOList.stream().filter(f -> businessSampleEntrustRegistrationDO.getId().equals(f.getBusinessSampleEntrustRegistrationId())).map(m -> m.getBusinessBaseSampleId()).collect(Collectors.toList()); + + //查询分析任务 + List currEntrustBusinessAssayTaskDataDOList = businessAssayTaskDataMapper.selectByBusinessBaseSampleIds(currentBusinessBaseSampleIdList); + List currEntrustBusinessAssayTaskDataDOIdList = currEntrustBusinessAssayTaskDataDOList.stream().map(m -> m.getId()).collect(Collectors.toList()); + + //查询分析项目 + List currEntrustBusinessAssayProjectDataList = businessAssayProjectDataMapper.selectByBusinessAssayTaskDataIds(currEntrustBusinessAssayTaskDataDOIdList); + //过滤出需要上报的分析任务id + List usageReportBusinessAssayTaskDataDOIdList = currEntrustBusinessAssayProjectDataList.stream().filter(f -> (QmsCommonConstant.ASSAY_PROJECT_USAGE_REPORT.equals(f.getUsage()) || QmsCommonConstant.ASSAY_PROJECT_USAGE_INGREDIENT_REPORT.equals(f.getUsage()))).map(m -> m.getBusinessAssayTaskDataId()).distinct().collect(Collectors.toList()); + + //通过要上报的进行任务id分组 + Map> businessAssayTaskDataByTaskMap = currEntrustBusinessAssayTaskDataDOList.stream().filter(f -> usageReportBusinessAssayTaskDataDOIdList.contains(f.getId())).collect(Collectors.groupingBy(BusinessAssayTaskDataDO::getBusinessAssayTaskId)); +// List businessAssayTaskIdList = businessAssayTaskDataDOList.stream().map(m -> m.getBusinessAssayTaskId()).distinct().collect(Collectors.toList()); + for (Map.Entry> entry : businessAssayTaskDataByTaskMap.entrySet()) { + Long businessAssayTaskId = entry.getKey(); + List currBusinessAssayTaskDataIdList = entry.getValue().stream().map(m -> m.getId()).collect(Collectors.toList()); + JSONObject json = sampleAnalysisAuditService.getCrossAuditDataByTaskId(businessAssayTaskId, currBusinessAssayTaskDataIdList); + JSONObject businessAssayTaskJson = json.getJSONArray("businessAssayTask").getJSONObject(0); + String configReportTemplateKey = businessAssayTaskJson.getString("configReportTemplateKey"); + String taskNo = businessAssayTaskJson.getString("taskNo"); + String taskName = businessAssayTaskJson.getString("taskName"); + String fileName = taskNo + "-" + taskName; +// String assayOperatorId = businessAssayTaskJson.getString("assayOperatorId"); +// String assayOperator = businessAssayTaskJson.getString("assayOperator"); + + ConfigReportTemplateDO gridppReportFile = configReportTemplateService.getConfigReportTemplateByKey(configReportTemplateKey); + + //报表参数 + Map reportParams = new HashMap<>(); + BinaryObject binaryObject; + try { + binaryObject = gridReport.genReport(gridppReportFile.getContent(), json.toJSONString(), reportParams, ExportType.PDF); + } catch (Exception e) { + throw new ServiceException(1_032_100_000, taskNo + "原始记录生成失败!"); + } + byte[] docBytes = PdfHelper.modifyDocInfo(binaryObject.getDataBuf()); + //上传到文件服务 + FileCreateReqDTO fileCreateReqDTO = new FileCreateReqDTO(); + fileCreateReqDTO.setName(fileName); + fileCreateReqDTO.setDirectory(null); + fileCreateReqDTO.setType(null); + fileCreateReqDTO.setContent(docBytes); + CommonResult fileResult = fileApi.createFileWithReturn(fileCreateReqDTO); + if (fileResult == null || !fileResult.isSuccess() || fileResult.getData() == null) { + throw new ServiceException(1_032_100_000, "通过文件服务创建附件失败: " + Optional.ofNullable(fileResult).map(CommonResult::getMsg).orElse("未知错误")); + } + FileRespDTO fileRespDTO = fileResult.getData(); + //创建businessFile + BusinessFileSaveReqDTO businessFileSaveReqDTO = BusinessFileSaveReqDTO.builder() + .businessId(businessSampleEntrustRegistrationDO.getId()) + .businessCode(taskNo) + .fileName(fileRespDTO.getName()) + .fileId(fileRespDTO.getId()) + .source(null) + .status(1) + .build(); + businessFileApi.createBusinessFile(businessFileSaveReqDTO); + + //设置附件 + JSONObject fileExtInfoJSON = new JSONObject(); + fileExtInfoJSON.put("taskNo", businessAssayTaskJson.getString("taskNo")); + fileExtInfoJSON.put("taskName", businessAssayTaskJson.getString("taskName")); + fileExtInfoJSON.put("assayOperator", businessAssayTaskJson.getString("assayOperator")); + fileExtInfoJSON.put("assayTime", businessAssayTaskJson.getString("assayTime")); + fileExtInfoJSON.put("reportOperator", businessAssayTaskJson.getString("reportOperator")); + fileExtInfoJSON.put("reportTime", businessAssayTaskJson.getString("reportTime")); + BusinessSampleEntrustFileDO businessSampleEntrustFileDO = new BusinessSampleEntrustFileDO(); + businessSampleEntrustFileDO.setBusinessSampleEntrustRegistrationId(businessSampleEntrustRegistrationDO.getId()); + businessSampleEntrustFileDO.setFileCategory(QmsCommonConstant.ENTRUST_ATTACHMENT_CATEGORY_ASSAY_TASK); + businessSampleEntrustFileDO.setFileId(fileRespDTO.getId()); + businessSampleEntrustFileDO.setFileName(fileRespDTO.getName()); + businessSampleEntrustFileDO.setFilePath(fileRespDTO.getDirectory()); + businessSampleEntrustFileDO.setExternalInfomation(fileExtInfoJSON.toJSONString()); + + businessSampleEntrustFileDOList.add(businessSampleEntrustFileDO); + + } + updatebBusinessSampleEntrustRegistrationDOList.add(businessSampleEntrustRegistrationDO); } } @@ -877,6 +994,10 @@ public class SampleResultReportingServiceImpl implements SampleResultReportingSe businessSampleEntrustDepartmentMapper.updateBatch(updateBusinessSampleEntrustDepartmentDOList); } + if (businessSampleEntrustFileDOList.size() > 0) { + businessSampleEntrustFileMapper.insertBatch(businessSampleEntrustFileDOList); + } + if (updateBusinessSampleEntrustDepartmentDetailDOList.size() > 0) { businessSampleEntrustDepartmentDetailMapper.updateBatch(updateBusinessSampleEntrustDepartmentDetailDOList); }