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 结束"));
     }
 
+
     /**
      * 构建体内检验记录数据
      *