diff --git a/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/controller/TestRecordController.java b/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/controller/TestRecordController.java index 6adadd7..9e8b09c 100644 --- a/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/controller/TestRecordController.java +++ b/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/controller/TestRecordController.java @@ -223,7 +223,7 @@ public class TestRecordController { @ApiOperation("生成检验记录-贵阳禁毒") @GetMapping("/inspectionRecord") public R inspectionRecord(String businessId, String materialType) throws Exception { - return inspectRecordService.buildInspectionRecord(businessId, materialType); + return inspectRecordService.buildInspectionRecord(businessId, materialType, false); } @ApiOperation("预览检验记录-贵阳禁毒") diff --git a/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/InspectRecordService.java b/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/InspectRecordService.java index f900c95..0140878 100644 --- a/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/InspectRecordService.java +++ b/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/InspectRecordService.java @@ -21,7 +21,7 @@ public interface InspectRecordService { * @return * @throws Exception */ - R buildInspectionRecord(String businessId, String materialType) throws Exception; + R buildInspectionRecord(String businessId, String materialType,boolean isPreview) throws Exception; void previewInspectionRecord(String businessId, String materialType, HttpServletResponse servletResponse) throws Exception; diff --git a/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/IdentifyBookDataServiceImpl.java b/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/IdentifyBookDataServiceImpl.java index 1a9b139..c36ecdc 100644 --- a/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/IdentifyBookDataServiceImpl.java +++ b/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/IdentifyBookDataServiceImpl.java @@ -67,42 +67,44 @@ public class IdentifyBookDataServiceImpl implements IdentifyBookDataService { entrustInfo.setMaterialNum(sampleInfos.size()); } } - return R.ok(entrustInfoList,"获取数据成功"); + return R.ok(entrustInfoList, "获取数据成功"); } + /** * 获取文书的数据 + * * @param businessId * @return */ @Override public R getIdentifyBookDataByBusinessId(String businessId) { //一个委托案件,只能属于一个实验,不允许一个委托中的检材分配到2个实验中做实验,这个是前提 - if(ObjectUtils.isNotEmpty(businessId)){ + if (ObjectUtils.isNotEmpty(businessId)) { IdentificationBookDTO identificationBookDTO = buildBookDataDetail(businessId); - return R.ok(identificationBookDTO,"构建数据成功"); - }else { - log.info("参数业务id不能为空,请检查参数{}",businessId); - return R.failed("参数业务id不能为空,请检查参数"+businessId); + return R.ok(identificationBookDTO, "构建数据成功"); + } else { + log.info("参数业务id不能为空,请检查参数{}", businessId); + return R.failed("参数业务id不能为空,请检查参数" + businessId); } } + //构建文书数据 - private IdentificationBookDTO buildBookDataDetail(String businessId){ - IdentificationBookDTO bookData=new IdentificationBookDTO(); + private IdentificationBookDTO buildBookDataDetail(String businessId) { + IdentificationBookDTO bookData = new IdentificationBookDTO(); //委托信息 EntrustInfo entrustInfo = entrustInfoService.getById(businessId); bookData.setEntrustInfo(entrustInfo); //检材 - List<SampleInfo> sampleList= sampleInfoService.list(Wrappers.<SampleInfo>lambdaQuery() + List<SampleInfo> sampleList = sampleInfoService.list(Wrappers.<SampleInfo>lambdaQuery() .eq(SampleInfo::getBusinessId, businessId).orderByAsc(SampleInfo::getAcceptNo)); bookData.setSampleInfoList(sampleList); //设置检验结果 - List<TestRecordSampleSolution> testRecordSampleSolutionList = getTestRecordSampleSolution(sampleList);//样本溶液 List<TestRecordSampleData> testRecordSampleDataList = getTestRecordSampleData(sampleList);//样本溶液对应的数据 - List<TestResult> testResultsList = buildTestResult(testRecordSampleDataList, testRecordSampleSolutionList, sampleList);//构建检验结果 - TestRecord testRecordInfo = getTestRecordInfo(testRecordSampleSolutionList); + List<TestResult> testResultsList = buildTestResult(testRecordSampleDataList, sampleList);//构建检验结果 + TestRecord testRecordInfo = testRecordService.getById(testRecordSampleDataList.get(0).getTestId()); //实验信息 - bookData.setTestMethod(getTestMethods(testRecordSampleSolutionList));//设置用到的实验方法 + bookData.setTestMethod(getTestMethods(testRecordInfo));//设置用到的实验方法 //设置检验过程 bookData.setTestProcessDes(testRecordInfo.getTestProcessDes());//设置检验过程 bookData.setTestResult(testRecordSampleDataService.generateQualitativeResults(businessId)); @@ -115,46 +117,53 @@ public class IdentifyBookDataServiceImpl implements IdentifyBookDataService { bookData.setTestFinishDate(sdf.format(testRecordInfo.getUpdateTime())); return bookData; } + //获取业务的实验对象 - private TestRecord getTestRecordInfo(List<TestRecordSampleSolution> testRecordSampleSolutionList){ - List<String> testIdList= testRecordSampleSolutionList.stream().map(s -> s.getTestId()).collect(Collectors.toList()); - List<String> distinctTestId= testIdList.stream().distinct().collect(Collectors.toList());//去重复 - if(distinctTestId.size()!=1){ + private TestRecord getTestRecordInfo(List<TestRecordSampleSolution> testRecordSampleSolutionList) { + List<String> testIdList = testRecordSampleSolutionList.stream().map(s -> s.getTestId()).collect(Collectors.toList()); + List<String> distinctTestId = testIdList.stream().distinct().collect(Collectors.toList());//去重复 + if (distinctTestId.size() != 1) { throw new RuntimeException("一个案件中的检材只能允许分配到一个实验中去做"); } - String testId= distinctTestId.get(0); - TestRecord testRecord= testRecordService.getById(testId); + String testId = distinctTestId.get(0); + TestRecord testRecord = testRecordService.getById(testId); return testRecord; } + //获取实验方法 - private String getTestMethods(List<TestRecordSampleSolution> testRecordSampleSolutionList){ - TestRecord testRecordInfo= getTestRecordInfo(testRecordSampleSolutionList); - List<String> testMethodList= testRecordInfo.getTestMethodList(); - List<TestRecordMethod> methodsList = testRecordMethodService.list(Wrappers.<TestRecordMethod>lambdaQuery() - .in(TestRecordMethod::getId, testMethodList)); + private String getTestMethods(TestRecord testRecord) { + List<String> testMethodList = testRecord.getTestMethodList(); + if (testMethodList == null || testMethodList.isEmpty()) { + return String.format("没有对应的方法数据!"); // 直接返回空列表,避免 SQL 语法错误 + } + + List<TestRecordMethod> methodsList = testRecordMethodService.list( + Wrappers.<TestRecordMethod>lambdaQuery().in(TestRecordMethod::getId, testMethodList) + ); + List<String> methodsName = methodsList.stream().map(s -> s.getMethodName()).collect(Collectors.toList()); - StringBuffer sbMethodNameStr=new StringBuffer(); - methodsName.forEach(item->{ + StringBuffer sbMethodNameStr = new StringBuffer(); + methodsName.forEach(item -> { sbMethodNameStr.append(item).append(","); }); - sbMethodNameStr.delete(sbMethodNameStr.length()-1,sbMethodNameStr.length()); + sbMethodNameStr.delete(sbMethodNameStr.length() - 1, sbMethodNameStr.length()); return sbMethodNameStr.toString(); } + //获取sampleData - private List<TestRecordSampleData> getTestRecordSampleData(List<SampleInfo> sampleInfoList){ - List<TestRecordSampleSolution> testRecordSampleSolution = getTestRecordSampleSolution(sampleInfoList); - if (CollUtil.isNotEmpty(testRecordSampleSolution)) { - List<String> sampleNoList= testRecordSampleSolution.stream().map(m -> m.getSampleNo()).collect(Collectors.toList());//得到样本溶液编号 + private List<TestRecordSampleData> getTestRecordSampleData(List<SampleInfo> sampleInfoList) { + if (!sampleInfoList.isEmpty()) { + List<String> sampleNoList = sampleInfoList.stream().map(m -> m.getAcceptNo()).collect(Collectors.toList());//得到样本溶液编号 //根据样本溶液编号查出对应的样本溶液检验数据 - List<TestRecordSampleData> sampleTestDataList= getTestRecordData(sampleNoList); + List<TestRecordSampleData> sampleTestDataList = getTestRecordData(sampleNoList); return sampleTestDataList; } - return null; } + //获取样本溶液 - private List<TestRecordSampleSolution> getTestRecordSampleSolution( List<SampleInfo> sampleInfoList){ - List<String> materialIdList= sampleInfoList.stream().map(m -> m.getId()).collect(Collectors.toList()); + private List<TestRecordSampleSolution> getTestRecordSampleSolution(List<SampleInfo> sampleInfoList) { + List<String> materialIdList = sampleInfoList.stream().map(m -> m.getId()).collect(Collectors.toList()); if (CollUtil.isEmpty(materialIdList)) { log.error("检材列表为空!"); return null; @@ -164,27 +173,22 @@ public class IdentifyBookDataServiceImpl implements IdentifyBookDataService { .in(TestRecordSampleSolution::getMaterialId, materialIdList)); return sampleSolutionList; } + //构建TestResult - private List<TestResult> buildTestResult(List<TestRecordSampleData> testRecordSampleDataList, - List<TestRecordSampleSolution> testRecordSampleSolutionList,List<SampleInfo> sampleInfoList){ + private List<TestResult> buildTestResult(List<TestRecordSampleData> testRecordSampleDataList, + List<SampleInfo> sampleInfoList) { //结果:应该是加入实验的检材的结果,目前暂定受理的检材我们按照受理顺序,全部定义为 1号检材,2号检材,3号检材等 //拿出实验数据中的所有实验样本编号,就是数据文件中的sampleId,也是溶液编号中的溶液编号, - List<String> sampleNoList= testRecordSampleDataList.stream().map(s -> s.getSampleNo()).collect(Collectors.toList()); + List<String> sampleNoList = testRecordSampleDataList.stream().map(s -> s.getSampleNo()).collect(Collectors.toList()); //取出检材ID - List<String> okTestRecordSampleSolutionIdList=new ArrayList<>(); - testRecordSampleSolutionList.forEach(item->{ - //如果溶液在提供的溶液编号中,则取出来 - if(sampleNoList.contains(item.getSampleNo())){ - okTestRecordSampleSolutionIdList.add(item.getMaterialId()); - } - }); - List<TestResult> retTestResult=new ArrayList<>(); + Map<String, SampleInfo> map = sampleInfoList.stream().collect(Collectors.toMap(s -> s.getAcceptNo(), s -> s)); + + List<TestResult> retTestResult = new ArrayList<>(); for (TestRecordSampleData testRecordSampleData : testRecordSampleDataList) { - TestResult eg=new TestResult(); - SampleInfo sampleInfo=getSampleInfoBySampleId(testRecordSampleSolutionList, - sampleInfoList,testRecordSampleData.getSampleNo()); + TestResult eg = new TestResult(); + SampleInfo sampleInfo = map.get(testRecordSampleData.getSampleNo()); eg.setCompoundName(testRecordSampleData.getCompoundName()); - eg.setMaterialNo(sampleInfo.getOrderNo()+"号"); + eg.setMaterialNo(sampleInfo.getOrderNo() + "号"); eg.setOrderNo(sampleInfo.getOrderNo()); eg.setIsFind(testRecordSampleData.getIsDetected()); eg.setTestId(testRecordSampleData.getTestId()); @@ -192,141 +196,147 @@ public class IdentifyBookDataServiceImpl implements IdentifyBookDataService { } return retTestResult; } + //根据sampleID获取对应的检材信息 private SampleInfo getSampleInfoBySampleId(List<TestRecordSampleSolution> testRecordSampleSolutionList, - List<SampleInfo> sampleInfoList,String sampleId){ + List<SampleInfo> sampleInfoList, String sampleId) { List<TestRecordSampleSolution> sampleSolutionList = testRecordSampleSolutionList.stream() .filter(s -> s.getSampleNo().equals(sampleId)).collect(Collectors.toList()); - String materialId=""; - if(sampleSolutionList.size()>0){ - if(sampleSolutionList.size()>1){ - log.info("溶液编号重复 {} ",sampleId); - }else{ - materialId= sampleSolutionList.get(0).getMaterialId(); + String materialId = ""; + if (sampleSolutionList.size() > 0) { + if (sampleSolutionList.size() > 1) { + log.info("溶液编号重复 {} ", sampleId); + } else { + materialId = sampleSolutionList.get(0).getMaterialId(); } } - List<SampleInfo> retObj=new ArrayList<>(); + List<SampleInfo> retObj = new ArrayList<>(); for (SampleInfo sampleInfo : sampleInfoList) { - if(sampleInfo.getId().equals(materialId)){ + if (sampleInfo.getId().equals(materialId)) { //找到 retObj.add(sampleInfo); } } - if(retObj.size()!=1){ + if (retObj.size() != 1) { log.info("存在重复的检材"); return null; } - if(retObj.size()==0){ + if (retObj.size() == 0) { log.info("未查询到检材"); return null; - }else { + } else { return retObj.get(0); } } + //构建实验结果 - private List<String> buildTestResultDes(List<TestResult> resultList){ + private List<String> buildTestResultDes(List<TestResult> resultList) { //按照检材编号先分组,这样的话,如果有n个检材,m个化合物,那么就会分成n组,每组中就m条数据 Map<String, List<TestResult>> resultMap1 = resultList.stream().collect(Collectors.groupingBy(m -> m.getMaterialNo())); //我们把每组中的List 数据再次分组,分组按检出和未检出分,这样就会得到2个组,一个组是检出的,一个组是未检出的 - Map<String, Map<Integer, List<TestResult>>> resultMap2=new HashMap<>(); - resultMap1.forEach((k,v)->{ + Map<String, Map<Integer, List<TestResult>>> resultMap2 = new HashMap<>(); + resultMap1.forEach((k, v) -> { //按检材编号分组,分成检出和未检出2组 - Map<Integer, List<TestResult>> tmp1Map= v.stream().collect(Collectors.groupingBy(m -> m.getIsFind())); - resultMap2.put(k,tmp1Map);//1号 检出 与未检出 + Map<Integer, List<TestResult>> tmp1Map = v.stream().collect(Collectors.groupingBy(m -> m.getIsFind())); + resultMap2.put(k, tmp1Map);//1号 检出 与未检出 }); // 对 resultMap2进行合并,然后再次分组 - List<TestResultDetail> testResultDetailList=new ArrayList<>(); - resultMap2.forEach((k,v)->{ - Map<Integer, List<TestResult>> tmp2Map=v;//这个map中只有2个key,key为0代表未检出的集合,key为1表示检出的集合 - TestResultDetail testResultDetail= buildCompoundList(tmp2Map, k); + List<TestResultDetail> testResultDetailList = new ArrayList<>(); + resultMap2.forEach((k, v) -> { + Map<Integer, List<TestResult>> tmp2Map = v;//这个map中只有2个key,key为0代表未检出的集合,key为1表示检出的集合 + TestResultDetail testResultDetail = buildCompoundList(tmp2Map, k); testResultDetailList.add(testResultDetail); }); // 对 testResultDetailList 进行 分组 //现在对上面的数据进行从新分组,按检出+化合物的形式 Map<String, List<TestResultDetail>> temp2 = testResultDetailList.stream().collect( Collectors.groupingBy(m -> m.getFindCompounds() + m.getNoFindCompounds())); - List<String> testResultDes= testResultSorted(temp2); + List<String> testResultDes = testResultSorted(temp2); return testResultDes; } + //对第一个结果进行排序 - private List<String> testResultSorted(Map<String, List<TestResultDetail>> tmpMap){ - List<Map.Entry<String, List<TestResultDetail>>> targetList=new ArrayList<Map.Entry<String, List<TestResultDetail>>>(tmpMap.entrySet()); + private List<String> testResultSorted(Map<String, List<TestResultDetail>> tmpMap) { + List<Map.Entry<String, List<TestResultDetail>>> targetList = new ArrayList<Map.Entry<String, List<TestResultDetail>>>(tmpMap.entrySet()); targetList.sort(new Comparator<Map.Entry<String, List<TestResultDetail>>>() { @Override public int compare(Map.Entry<String, List<TestResultDetail>> mp1, Map.Entry<String, List<TestResultDetail>> mp2) { int materialNo1 = getMinMaterialNo(mp1.getValue()); int materialNo2 = getMinMaterialNo(mp2.getValue()); - return materialNo1-materialNo2; + return materialNo1 - materialNo2; } }); - List<String> testResultDes=new ArrayList<>(); - targetList.forEach((target)->{ - StringBuffer sbNo=new StringBuffer(); - target.getValue().forEach(item->{ + List<String> testResultDes = new ArrayList<>(); + targetList.forEach((target) -> { + StringBuffer sbNo = new StringBuffer(); + target.getValue().forEach(item -> { sbNo.append(item.getMaterialNo()).append(","); }); - if(sbNo.length()>0){ - sbNo.delete(sbNo.length()-1,sbNo.length());//删除最后一个 , + if (sbNo.length() > 0) { + sbNo.delete(sbNo.length() - 1, sbNo.length());//删除最后一个 , } - testResultDes.add(sbNo.toString()+"检材未检出"+target.getValue().get(0).getNoFindCompounds()+",检出了"+target.getValue().get(0).getFindCompounds()); + testResultDes.add(sbNo.toString() + "检材未检出" + target.getValue().get(0).getNoFindCompounds() + ",检出了" + target.getValue().get(0).getFindCompounds()); }); return testResultDes; } + /** * 构造出一个检材一共检出了多少个化合物和未检出多少化合物 + * * @param mapCompound * @param materialNo * @return */ - private TestResultDetail buildCompoundList(Map<Integer, List<TestResult>> mapCompound,String materialNo){ + private TestResultDetail buildCompoundList(Map<Integer, List<TestResult>> mapCompound, String materialNo) { - StringBuffer findCompounds=new StringBuffer();//检出化合物的集合 - StringBuffer noFindCompounds=new StringBuffer();//未检出化合物的集合 - mapCompound.forEach((k1,v1)->{ - if(k1==0){ + StringBuffer findCompounds = new StringBuffer();//检出化合物的集合 + StringBuffer noFindCompounds = new StringBuffer();//未检出化合物的集合 + mapCompound.forEach((k1, v1) -> { + if (k1 == 0) { //未检出 - v1.forEach(item->{ + v1.forEach(item -> { noFindCompounds.append(item.getCompoundName()).append(","); }); } - if(k1==1){ + if (k1 == 1) { //检出 - v1.forEach(item->{ + v1.forEach(item -> { findCompounds.append(item.getCompoundName()).append(","); }); } }); - if(findCompounds.length()>0){ - findCompounds.delete(findCompounds.length()-1,findCompounds.length());//删除最后一个 , + if (findCompounds.length() > 0) { + findCompounds.delete(findCompounds.length() - 1, findCompounds.length());//删除最后一个 , } - if(noFindCompounds.length()>0){ - noFindCompounds.delete(noFindCompounds.length()-1,noFindCompounds.length());//删除最后一个 , + if (noFindCompounds.length() > 0) { + noFindCompounds.delete(noFindCompounds.length() - 1, noFindCompounds.length());//删除最后一个 , } - TestResultDetail eg=new TestResultDetail(); + TestResultDetail eg = new TestResultDetail(); eg.setMaterialNo(materialNo); eg.setFindCompounds(findCompounds.toString()); eg.setNoFindCompounds(noFindCompounds.toString()); return eg; } - private int getMinMaterialNo(List<TestResultDetail> materialList){ + private int getMinMaterialNo(List<TestResultDetail> materialList) { materialList.sort(new Comparator<TestResultDetail>() { @Override public int compare(TestResultDetail t1, TestResultDetail t2) { - int mNo1= Integer.parseInt(getNumberByMaterialNo(t1.getMaterialNo())); - int mNo2= Integer.parseInt(getNumberByMaterialNo(t2.getMaterialNo())); - return mNo1-mNo2; + int mNo1 = Integer.parseInt(getNumberByMaterialNo(t1.getMaterialNo())); + int mNo2 = Integer.parseInt(getNumberByMaterialNo(t2.getMaterialNo())); + return mNo1 - mNo2; } }); - return Integer.parseInt(getNumberByMaterialNo(materialList.get(0).getMaterialNo())); + return Integer.parseInt(getNumberByMaterialNo(materialList.get(0).getMaterialNo())); } /** * 根据编号获取排序值 + * * @param materialNo * @return */ - private String getNumberByMaterialNo(String materialNo){ + private String getNumberByMaterialNo(String materialNo) { Pattern pattern = Pattern.compile("\\d+"); Matcher matcher = pattern.matcher(materialNo); while (matcher.find()) { @@ -334,12 +344,14 @@ public class IdentifyBookDataServiceImpl implements IdentifyBookDataService { } return ""; } + /** * 根据溶液编号(sampleNo)获取仪器检测数据 + * * @param sampleNoList * @return */ - private List<TestRecordSampleData> getTestRecordData(List<String> sampleNoList){ + private List<TestRecordSampleData> getTestRecordData(List<String> sampleNoList) { return testRecordSampleDataService.list(Wrappers.<TestRecordSampleData>lambdaQuery() .in(TestRecordSampleData::getSampleNo, sampleNoList)); } diff --git a/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/InspectRecordServiceImpl.java b/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/InspectRecordServiceImpl.java index e831ee7..de40de2 100644 --- a/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/InspectRecordServiceImpl.java +++ b/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/InspectRecordServiceImpl.java @@ -93,41 +93,88 @@ public class InspectRecordServiceImpl implements InspectRecordService { * @throws Exception */ @Override - public R buildInspectionRecord(String businessId, String materialType) throws Exception { +/** + * 构建检验记录 + * + * @param businessId 业务ID,用于查询委托信息和检验记录 + * @param materialType 材料类型,用于生成特定类型的检验记录 + * @return 返回封装的响应对象,如果已存在 `.docx` 文件,则直接返回其路径,否则根据业务类型生成新的检验记录 + * @throws Exception 可能抛出的异常 + */ + public R buildInspectionRecord(String businessId, String materialType, boolean isPreview) throws Exception { + // 根据业务ID查询委托信息 EntrustInfo entrustInfo = entrustInfoService.getById(businessId); if (entrustInfo == null) { return R.ok(false, "委托信息不存在!"); } + + // 查询该业务ID对应的检验记录 + TestRecord testRecord = testRecordService.lambdaQuery() + .eq(TestRecord::getBusinessId, businessId) + .one(); + + // 判断是否是预览,如果是预览,则每次都要重新生成,如果不是预览,那就是已经结束实验后生成的检验记录,就去判断是否生成过了,如果生成过就不再生成了 + if (!isPreview) { + // 获取OSS存储中的检验记录目录下的文件列表 + List<String> list = ossFile.fileList(TestRecordFileUrl.TEST_RECORD_CATALOGUE.getFileUrl() + "/" + businessId + "/"); + + // 如果该目录下存在文件,则遍历查找是否有 .docx 结尾的文件 + if (CollUtil.isNotEmpty(list)) { + for (String fileName : list) { + // 提取文件后缀名 + String suffix = fileName.substring(fileName.lastIndexOf(".") + 1); + // 如果找到 .docx 文件,则直接返回文件路径 + if (suffix.equals("docx")) { + return R.ok(TestRecordFileUrl.TEST_RECORD_CATALOGUE.getFileUrl() + "/" + businessId + "/" + fileName, "生成成功!"); + } + } + } + } + // 如果业务类型为 "BOINT_CASE",生成体内检验记录 if (entrustInfo.getBusinessType().equals(BusinessType.BOINT_CASE.getBusinessType())) { return R.ok(this.buildInVivoDocFile(entrustInfo, materialType), "生成成功!"); } + + // 默认情况,生成通用的药品检验记录 return R.ok(this.generateCommonDrugInpectRecord(businessId)); } + @Override public void previewInspectionRecord(String businessId, String materialType, HttpServletResponse servletResponse) throws Exception { String path = ""; - path = (String) this.buildInspectionRecord(businessId, materialType).getData(); + path = (String) this.buildInspectionRecord(businessId, materialType, true).getData(); java.io.ByteArrayOutputStream fosWord = new java.io.ByteArrayOutputStream(); ossFile.fileGet(path, fosWord); ByteArrayInputStream fisWord = new ByteArrayInputStream(fosWord.toByteArray()); fosWord.close(); - // 转换临时目录中的 word 文档为 PDF - MockMultipartFile mockMultipartFile = new MockMultipartFile("file", "检验记录" + ".docx", "image/jpg", fisWord); + + // 转换 Word 文档为 PDF + MockMultipartFile mockMultipartFile = new MockMultipartFile("file", "检验记录" + ".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", fisWord); String pdfFilePath = path.substring(0, path.lastIndexOf(".")) + ".pdf"; Response response = remoteWord2PDFService.word2pdf(mockMultipartFile); fisWord.close(); + org.apache.commons.io.output.ByteArrayOutputStream outPDF = new org.apache.commons.io.output.ByteArrayOutputStream(); IoUtil.copy(response.body().asInputStream(), outPDF, IoUtil.DEFAULT_MIDDLE_BUFFER_SIZE); ByteArrayInputStream isPDF = new ByteArrayInputStream(outPDF.toByteArray()); outPDF.close(); + + // 保存 PDF 文件 ossFile.fileSave(pdfFilePath, isPDF); isPDF.close(); + + // 删除原 Word 文件 + ossFile.fileDelete(path); + System.out.println(String.format("已删除 Word 文件: %s", path)); + + // 发送 PDF 文件到响应流 ossFile.fileGet(pdfFilePath, servletResponse.getOutputStream()); System.out.println(String.format("转换为 PDF 结束")); } + /** * 构建体内检验记录数据 *