From 476740c4330135b38be6a32f54dbe1bbcd32476a Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期一, 13 一月 2025 13:20:56 +0800
Subject: [PATCH] Merge branch 'master' into cnas

---
 inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java                            |  512 +++++++++++++++++++++++++++++++++++
 inspect-server/src/main/java/com/yuanchu/mom/controller/InsProductTemplateController.java    |    4 
 inspect-server/src/main/java/com/yuanchu/mom/vo/InsProductResult2VO.java                     |   29 ++
 inspect-server/src/main/java/com/yuanchu/mom/utils/DianLuUtils.java                          |  176 ++++++++++++
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java       |   21 +
 inspect-server/src/main/resources/mapper/InsProductResult2Mapper.xml                         |   19 +
 inspect-server/src/main/java/com/yuanchu/mom/mapper/InsProductResult2Mapper.java             |    2 
 inspect-server/src/main/java/com/yuanchu/mom/service/InsProductTemplateService.java          |    4 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsProductTemplateServiceImpl.java |   16 +
 inspect-server/src/main/resources/static/word2.docx                                          |    0 
 10 files changed, 762 insertions(+), 21 deletions(-)

diff --git a/inspect-server/src/main/java/com/yuanchu/mom/controller/InsProductTemplateController.java b/inspect-server/src/main/java/com/yuanchu/mom/controller/InsProductTemplateController.java
index 2d9d096..f00ff41 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/controller/InsProductTemplateController.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/controller/InsProductTemplateController.java
@@ -42,8 +42,8 @@
     @ValueAuth
     @ApiOperation(value = "閫夋嫨鐢佃矾璇曢獙妫�楠屾ā鐗�")
     @PostMapping("/chooseInsProductTemplate")
-    public Result chooseInsProductTemplate() {
-        return Result.success(insProductTemplateService.list());
+    public Result chooseInsProductTemplate(String version) {
+        return Result.success(insProductTemplateService.chooseInsProductTemplate(version));
     }
 
     @ValueAuth
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsProductResult2Mapper.java b/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsProductResult2Mapper.java
index dcd9a6b..59c3fcc 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsProductResult2Mapper.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsProductResult2Mapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yuanchu.mom.pojo.InsProductResult;
 import com.yuanchu.mom.pojo.InsProductResult2;
+import com.yuanchu.mom.vo.InsProductResult2VO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -16,6 +17,7 @@
 public interface InsProductResult2Mapper extends BaseMapper<InsProductResult2> {
     void saveBatch(@Param("result2s") List<InsProductResult2> result2s);
 
+    List<InsProductResult2VO> selectWordHang(@Param("num") Integer num, @Param("ids") List<Integer> ids);
 }
 
 
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/InsProductTemplateService.java b/inspect-server/src/main/java/com/yuanchu/mom/service/InsProductTemplateService.java
index 0ece08d..0e05909 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/InsProductTemplateService.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/InsProductTemplateService.java
@@ -3,6 +3,8 @@
 import com.yuanchu.mom.pojo.InsProductTemplate;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  * 鐢ㄤ簬鐢佃矾璇曢獙鐨勬ā鐗� 鏈嶅姟绫�
@@ -13,4 +15,6 @@
  */
 public interface InsProductTemplateService extends IService<InsProductTemplate> {
 
+    List<InsProductTemplate> chooseInsProductTemplate(String version);
+
 }
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
index dd80cec..3a32619 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -311,6 +311,7 @@
 
     @Override
     public Object uploadFile(Integer orderId, MultipartFile file, String sonLaboratory, Integer sampleId) {
+        InsOrder insOrder = insOrderMapper.selectById(orderId);
         String urlString;
         String pathName;
         String path;
@@ -353,6 +354,8 @@
                 dianLuUtils.readDianLuFile1(sampleId, insOrderFile);
             } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("鐢佃矾璇曢獙") && split[split.length - 1].equals("csv") && filename.contains("椹绘尝")) {
                 dianLuUtils.readDianLuFile2(sampleId, insOrderFile);
+            }else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("鐢佃矾璇曢獙") && split[split.length - 1].equals("csv") && insOrder.getSampleType().equals("鏃犳簮鍣ㄤ欢")) {
+                dianLuUtils.readDianLuFile3(sampleId, insOrderFile);
             }
         } catch (Exception e) {
             throw new ErrorException(e.getMessage());
@@ -1189,13 +1192,21 @@
         insSampleUserMapper.insert(insSampleUser);
         /*鐢熸垚鐢佃矾璇曢獙鐨勭珯鐐规姤鍛婂苟涓婁紶鍒伴檮浠朵腑*/
         if (submitPlanDto.getLaboratory().equals("鐢佃矾璇曢獙")) {
-//            wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
-            //todo 鐢佃矾绔欑偣鎶ュ憡 姝e紡搴撻儴缃叉斁寮�
-            try {
+            if (!insOrder.getSampleType().equals("鏃犳簮鍣ㄤ欢")) {
                 wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
-            } catch (Exception e) {
-                throw new ErrorException("鐢佃矾璇曢獙鐨勭珯鐐规姤鍛婄敓鎴愭湁璇�,璇疯仈绯诲紑鍙戜汉鍛樿皟鏁�!");
+            }else {
+                wordUtils.generateWord2(submitPlanDto.getTerm(), orderState);
             }
+            //todo 鐢佃矾绔欑偣鎶ュ憡 姝e紡搴撻儴缃叉斁寮�
+//            try {
+//                if (!insOrder.getSampleType().equals("鏃犳簮鍣ㄤ欢")) {
+//                    wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
+//                }else {
+//                    wordUtils.generateWord2(submitPlanDto.getTerm(), orderState);
+//                }
+//            } catch (Exception e) {
+//                throw new ErrorException("鐢佃矾璇曢獙鐨勭珯鐐规姤鍛婄敓鎴愭湁璇�,璇疯仈绯诲紑鍙戜汉鍛樿皟鏁�!");
+//            }
         }
         /*鐢熸垚浜ч噺宸ユ椂*/
         //鏍¢獙濡傛灉杩欎釜浜鸿繖涓娴嬮」鐩凡缁忔坊鍔犺繃浜嗗垯涓嶉渶瑕佸啀鏂板
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsProductTemplateServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsProductTemplateServiceImpl.java
index 9034442..bb9d63f 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsProductTemplateServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsProductTemplateServiceImpl.java
@@ -1,10 +1,15 @@
 package com.yuanchu.mom.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.yuanchu.mom.pojo.InsProductTemplate;
 import com.yuanchu.mom.mapper.InsProductTemplateMapper;
 import com.yuanchu.mom.service.InsProductTemplateService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +22,15 @@
 @Service
 public class InsProductTemplateServiceImpl extends ServiceImpl<InsProductTemplateMapper, InsProductTemplate> implements InsProductTemplateService {
 
+    @Resource
+    private InsProductTemplateMapper insProductTemplateMapper;
+
+    @Override
+    public List<InsProductTemplate> chooseInsProductTemplate(String version) {
+        if (ObjectUtils.isNotEmpty(version) && version.equals("2")){
+            return insProductTemplateMapper.selectList(Wrappers.<InsProductTemplate>lambdaQuery().eq(InsProductTemplate::getVersion,2));
+        }else {
+            return insProductTemplateMapper.selectList(Wrappers.<InsProductTemplate>lambdaQuery().ne(InsProductTemplate::getVersion,2));
+        }
+    }
 }
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/utils/DianLuUtils.java b/inspect-server/src/main/java/com/yuanchu/mom/utils/DianLuUtils.java
index 387ec5e..35d5e7f 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/utils/DianLuUtils.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/utils/DianLuUtils.java
@@ -28,6 +28,8 @@
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 @Component
@@ -69,7 +71,6 @@
         List<InsProductResult2> result2s = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
                 .eq(InsProductResult2::getNum, orderStates.get(0).getNum())
                 .in(InsProductResult2::getInsProductId, insProducts.stream().distinct().map(InsProduct::getId).collect(Collectors.toList())));
-        //List<InsProduct> productList = getInsProduct(sampleId, "鐢佃矾璇曢獙");
         //鏍规嵁棰戠偣鍒嗙被
         Map<String, List<HuTiaoData>> collect = huTiaoData.stream()
                 .collect(Collectors.groupingBy(HuTiaoData::getOften, LinkedHashMap::new, Collectors.toList()));
@@ -176,7 +177,7 @@
                     if (products6.size() <= 0) {
                         throw new ErrorException("闅旂搴﹂」鐩湭鎵惧埌");
                     }
-                    insProductResult2.setInsProductId(products6.get(0).getId());//鍚屾瀬鍖栭殧绂�
+                    insProductResult2.setInsProductId(products6.get(0).getId());//鍚屽垪闅旂
                     insProductResult2.setFrequency(listEntry.getKey());//棰戞
                     insProductResult2.setAngle("0掳");//瑙掑害
                     insProductResult2.setNum(orderStates.get(0).getNum());//娆℃暟
@@ -191,7 +192,7 @@
                     if (products7.size() <= 0) {
                         throw new ErrorException("绔彛闂撮殧绂婚」鐩湭鎵惧埌");
                     }
-                    insProductResult2.setInsProductId(products7.get(0).getId());//鍚屾瀬鍖栭殧绂�
+                    insProductResult2.setInsProductId(products7.get(0).getId());//绔彛闂撮殧绂�
                     insProductResult2.setFrequency(listEntry.getKey());//棰戞
                     insProductResult2.setAngle("0掳");//瑙掑害
                     insProductResult2.setNum(orderStates.get(0).getNum());//娆℃暟
@@ -339,6 +340,175 @@
                 result2.setValue("[[" + value + "]]");
                 result2.setAngle("0掳");
                 result2.setOften(entry.getValue().stream().map(InsProductResult2::getOften).collect(Collectors.joining(",")));
+                result2.setNum(orderStates.get(0).getNum());
+                filteredList.add(result2);
+            }
+        }
+        insProductResult2Service.saveBatch(filteredList);
+    }
+
+    //璇诲彇csv鐨勬枃浠�(鏃犳簮鍣ㄤ欢)
+    public void readDianLuFile3(Integer sampleId, InsOrderFile insOrderFile) {
+        List<InsProductResult2> insProductResult2s = new ArrayList<>();
+        String excelFilePath = wordUrl + "/" + insOrderFile.getFileUrl(); // 鏇存柊涓轰綘鐨勬枃浠惰矾寰�
+        List<TianXianData> tianXianData = readExcelData2(excelFilePath);
+        //鏌ヨ妫�楠屼换鍔d
+        List<InsOrderState> orderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
+                .eq(InsOrderState::getInsSampleId, sampleId)
+                .eq(InsOrderState::getLaboratory, "鐢佃矾璇曢獙"));
+        List<InsProduct> products = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .eq(InsProduct::getState, 1)
+                .eq(InsProduct::getInsSampleId, sampleId));
+        //鏌ヨ璇ユ牱鍝佺殑鐢靛帇椹绘尝姣旈」鐩甶d
+        List<InsProduct> products1 = products.stream().filter(insProduct -> insProduct.getInspectionItemSubclass().equals("鐢靛帇椹绘尝姣�")).collect(Collectors.toList());
+        //鏌ヨ璇ユ牱鍝佺殑鏃犳簮鍣ㄤ欢闅旂搴﹂」鐩甶d
+        List<InsProduct> products2 = products.stream().filter(insProduct -> insProduct.getInspectionItemSubclass().equals("鏃犳簮鍣ㄤ欢闅旂搴�")).collect(Collectors.toList());
+        //鏌ヨ璇ユ牱鍝佺殑鎻掑叆鎹熻�楅」鐩甶d
+        List<InsProduct> products3 = products.stream().filter(insProduct -> insProduct.getInspectionItemSubclass().equals("鎻掑叆鎹熻��")).collect(Collectors.toList());
+        //鏌ヨ璇ユ牱鍝佺殑甯﹀唴娉㈠姩椤圭洰id
+        List<InsProduct> products4 = products.stream().filter(insProduct -> insProduct.getInspectionItemSubclass().equals("甯﹀唴娉㈠姩")).collect(Collectors.toList());
+        //鏌ヨ璇ユ牱鍝佺殑甯﹀鎶戝埗椤圭洰id
+        List<InsProduct> products5 = products.stream().filter(insProduct -> insProduct.getInspectionItemSubclass().equals("甯﹀鎶戝埗")).collect(Collectors.toList());
+        //鏌ヨ璇ユ牱鍝佺殑鏈�澶ц�﹀悎搴﹂」鐩甶d
+        List<InsProduct> products6 = products.stream().filter(insProduct -> insProduct.getInspectionItemSubclass().equals("鏈�澶ц�﹀悎搴�")).collect(Collectors.toList());
+        //鏌ヨ璇ユ牱鍝佺殑鏈�灏忚�﹀悎搴﹂」鐩甶d
+        List<InsProduct> products7 = products.stream().filter(insProduct -> insProduct.getInspectionItemSubclass().equals("鏈�灏忚�﹀悎搴�")).collect(Collectors.toList());
+        //鑾峰彇鎵�鏈夐娈�,鏍规嵁棰戞杩涜鍒嗙被
+        Map<String, List<TianXianData>> map = tianXianData.stream().collect(Collectors.groupingBy(TianXianData::frequency, LinkedHashMap::new, Collectors.toList()));
+        for (Map.Entry<String, List<TianXianData>> listEntry : map.entrySet()) {
+            //鑾峰彇淇℃伅,鏍规嵁妫�楠岄」鐩繘琛屽垎绫�
+            Map<String, List<TianXianData>> collect = listEntry.getValue().stream().collect(Collectors.groupingBy(TianXianData::getName, LinkedHashMap::new, Collectors.toList()));
+            for (Map.Entry<String, List<TianXianData>> entry : collect.entrySet()) {
+                InsProductResult2 insProductResult2 = new InsProductResult2();
+                if (entry.getKey().contains("椹绘尝")) {
+                    if (products1.size() <= 0) {
+                        throw new ErrorException("鐢靛帇椹绘尝姣旈」鐩湭鎵惧埌");
+                    }
+                    insProductResult2.setInsProductId(products1.get(0).getId());//鐢靛帇椹绘尝姣�
+                    insProductResult2.setFrequency(listEntry.getKey());//棰戞
+                    insProductResult2.setNum(orderStates.get(0).getNum());//娆℃暟
+                    //鑾峰彇绔彛
+                    String port = entry.getValue().stream().map(TianXianData::getPort).collect(Collectors.joining(","));
+                    insProductResult2.setPort(port);//绔彛
+                    //鑾峰彇妫�楠屽��
+                    String value = entry.getValue().stream().map(tianXianData1 -> "\"" + tianXianData1.getValue() + "\"").collect(Collectors.joining(","));
+                    insProductResult2.setValue("[[" + value + "]]");//鍊�
+                    insProductResult2s.add(insProductResult2);
+                }
+                else if (entry.getKey().contains("闅旂搴�")) {
+                    if (products2.size() <= 0) {
+                        throw new ErrorException("闅旂搴﹂」鐩湭鎵惧埌");
+                    }
+                    insProductResult2.setInsProductId(products2.get(0).getId());//鏃犳簮鍣ㄤ欢闅旂搴�
+                    insProductResult2.setFrequency(listEntry.getKey());//棰戞
+                    insProductResult2.setNum(orderStates.get(0).getNum());//娆℃暟
+                    //鑾峰彇绔彛
+                    String port = entry.getValue().stream().map(TianXianData::getPort).collect(Collectors.joining(","));
+                    insProductResult2.setPort(port);//绔彛
+                    //鑾峰彇妫�楠屽��
+                    String value = entry.getValue().stream().map(tianXianData1 -> "\"" + tianXianData1.getValue() + "\"").collect(Collectors.joining(","));
+                    insProductResult2.setValue("[[" + value + "]]");//鍊�
+                    insProductResult2s.add(insProductResult2);
+                }
+                else if (entry.getKey().contains("鎻掑叆鎹熻��")) {
+                    if (products3.size() <= 0) {
+                        throw new ErrorException("鎻掑叆鎹熻�楅」鐩湭鎵惧埌");
+                    }
+                    insProductResult2.setInsProductId(products3.get(0).getId());//鎻掑叆鎹熻��
+                    insProductResult2.setFrequency(listEntry.getKey());//棰戞
+                    insProductResult2.setNum(orderStates.get(0).getNum());//娆℃暟
+                    //鑾峰彇绔彛
+                    String port = entry.getValue().stream().map(TianXianData::getPort).collect(Collectors.joining(","));
+                    insProductResult2.setPort(port);//绔彛
+                    //鑾峰彇妫�楠屽��
+                    String value = entry.getValue().stream().map(tianXianData1 -> "\"" + tianXianData1.getValue() + "\"").collect(Collectors.joining(","));
+                    insProductResult2.setValue("[[" + value + "]]");//鍊�
+                    insProductResult2s.add(insProductResult2);
+                }
+                else if (entry.getKey().contains("甯﹀唴娉㈠姩")) {
+                    if (products4.size() <= 0) {
+                        throw new ErrorException("甯﹀唴娉㈠姩椤圭洰鏈壘鍒�");
+                    }
+                    insProductResult2.setInsProductId(products4.get(0).getId());//甯﹀唴娉㈠姩
+                    insProductResult2.setFrequency(listEntry.getKey());//棰戞
+                    insProductResult2.setNum(orderStates.get(0).getNum());//娆℃暟
+                    //鑾峰彇绔彛
+                    String port = entry.getValue().stream().map(TianXianData::getPort).collect(Collectors.joining(","));
+                    insProductResult2.setPort(port);//绔彛
+                    //鑾峰彇妫�楠屽��
+                    String value = entry.getValue().stream().map(tianXianData1 -> "\"" + tianXianData1.getValue() + "\"").collect(Collectors.joining(","));
+                    insProductResult2.setValue("[[" + value + "]]");//鍊�
+                    insProductResult2s.add(insProductResult2);
+                }
+                else if (entry.getKey().contains("甯﹀鎶戝埗")) {
+                    if (products5.size() <= 0) {
+                        throw new ErrorException("甯﹀鎶戝埗椤圭洰鏈壘鍒�");
+                    }
+                    insProductResult2.setInsProductId(products5.get(0).getId());//甯﹀鎶戝埗
+                    insProductResult2.setFrequency(listEntry.getKey());//棰戞
+                    insProductResult2.setNum(orderStates.get(0).getNum());//娆℃暟
+                    //鑾峰彇绔彛
+                    String port = entry.getValue().stream().map(TianXianData::getPort).collect(Collectors.joining(","));
+                    insProductResult2.setPort(port);//绔彛
+                    //鑾峰彇妫�楠屽��
+                    String value = entry.getValue().stream().map(tianXianData1 -> "\"" + tianXianData1.getValue() + "\"").collect(Collectors.joining(","));
+                    insProductResult2.setValue("[[" + value + "]]");//鍊�
+                    insProductResult2s.add(insProductResult2);
+                }
+                else if (entry.getKey().contains("鑰﹀悎搴�")) {
+                    if (products6.size() <= 0 || products7.size()<=0) {
+                        throw new ErrorException("鑰﹀悎搴﹂」鐩湭鎵惧埌");
+                    }
+                    /*鏈�澶ц�﹀悎搴�*/
+                    insProductResult2.setFrequency(listEntry.getKey());//棰戞
+                    insProductResult2.setNum(orderStates.get(0).getNum());//娆℃暟
+                    //鑾峰彇绔彛
+                    String port = entry.getValue().stream().map(TianXianData::getPort).collect(Collectors.joining(","));
+                    insProductResult2.setPort(port);//绔彛
+                    insProductResult2.setInsProductId(products6.get(0).getId());//鏈�澶ц�﹀悎搴�
+                    //鑾峰彇妫�楠屽��
+                    String value = entry.getValue().stream().map(tianXianData1 -> {
+                        String input = tianXianData1.getValue().replace("[", "").replace("]", "");
+                        String[] parts = input.split("--");
+                        return "\"" + "-"+parts[1] + "\"" ; }).collect(Collectors.joining(","));
+                    insProductResult2.setValue("[[" + value + "]]");//鍊�
+                    insProductResult2s.add(insProductResult2);
+                    /*鏈�灏忚�﹀悎搴�*/
+                    InsProductResult2 insProductResult22 = new InsProductResult2();
+                    insProductResult22.setFrequency(listEntry.getKey());//棰戞
+                    insProductResult22.setNum(orderStates.get(0).getNum());//娆℃暟
+                    //鑾峰彇绔彛
+                    insProductResult22.setPort(port);//绔彛
+                    insProductResult22.setInsProductId(products7.get(0).getId());//鏈�灏忚�﹀悎搴�
+                    String value1 = entry.getValue().stream().map(tianXianData1 -> {
+                        String input = tianXianData1.getValue().replace("[", "").replace("]", "");
+                        String[] parts = input.split("--");
+                        return "\"" +parts[0] + "\"" ; }).collect(Collectors.joining(","));
+                    insProductResult22.setValue("[[" + value1 + "]]");//鍊�
+                    insProductResult2s.add(insProductResult22);
+                }
+            }
+        }
+
+        Map<String, List<InsProductResult2>> groupedMap = insProductResult2s.stream()
+                .collect(Collectors.groupingBy(item -> item.getInsProductId() + "_" + item.getFrequency()));
+        // 杩囨护鍑哄垎缁勫悗鏁伴噺绛変簬1鐨勭粍
+        List<InsProductResult2> filteredList = groupedMap.values().stream()
+                .filter(list -> list.size() == 1)
+                .flatMap(List::stream)
+                .collect(Collectors.toList());
+        for (Map.Entry<String, List<InsProductResult2>> entry : groupedMap.entrySet()) {
+            if (entry.getValue().size() > 1) {
+                InsProductResult2 result2 = new InsProductResult2();
+                result2.setInsProductId(Integer.parseInt(entry.getKey().split("_")[0]));
+                result2.setFrequency(entry.getKey().split("_")[1]);
+                result2.setPort(entry.getValue().stream().map(InsProductResult2::getPort).collect(Collectors.joining(",")));
+                String value = entry.getValue().stream().map(insProductResult2 -> {
+                    return insProductResult2.getValue().replace("[[", "").replace("]]", "");
+                }).collect(Collectors.joining(","));
+                result2.setValue("[[" + value + "]]");
+                result2.setOften(entry.getValue().stream().map(InsProductResult2::getOften).collect(Collectors.joining(",")));
+                result2.setNum(orderStates.get(0).getNum());
                 filteredList.add(result2);
             }
         }
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java b/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
index 1ce8337..e698902 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
@@ -18,6 +18,7 @@
 import com.yuanchu.mom.exception.ErrorException;
 import com.yuanchu.mom.mapper.*;
 import com.yuanchu.mom.pojo.*;
+import com.yuanchu.mom.vo.InsProductResult2VO;
 import org.apache.commons.io.IOUtils;
 import org.apache.poi.openxml4j.util.ZipSecureFile;
 import org.apache.poi.xwpf.usermodel.*;
@@ -25,6 +26,7 @@
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
@@ -94,7 +96,7 @@
     GiveCode giveCode;
 
 
-    //鐢熸垚绔欑偣鐢佃矾璇曢獙鎶ュ憡
+    //鐢熸垚绔欑偣鐢佃矾璇曢獙鎶ュ憡(澶╃嚎)
     public void generateWord(String term, InsOrderState insOrderState) {
         AtomicInteger lable = new AtomicInteger(1);
         AtomicInteger index = new AtomicInteger();
@@ -2050,6 +2052,303 @@
         insOrderFileMapper.insert(insOrderFile);
     }
 
+    //鐢熸垚绔欑偣鐢佃矾璇曢獙鎶ュ憡(鏃犳簮鍣ㄤ欢)
+    public void generateWord2(String term, InsOrderState insOrderState) {
+        AtomicInteger index = new AtomicInteger();
+        String title = term + "鐢佃矾鍙傛暟";
+        List<Map<String, Object>> tables = new ArrayList<>();
+        //鏌ヨ璁㈠崟
+        InsOrder insOrder = insOrderMapper.selectById(insOrderState.getInsOrderId());
+        //鏌ヨ鏍峰搧
+        InsSample insSample = insSampleMapper.selectById(insOrderState.getInsSampleId());
+        //鏌ヨ椤圭洰
+        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .eq(InsProduct::getState,1)
+                .eq(InsProduct::getInsSampleId, insSample.getId())
+                .eq(InsProduct::getSonLaboratory, "鐢佃矾璇曢獙"));
+        //璁$畻琛屾暟
+        List<InsProductResult2VO> result2VOS = new ArrayList<>();
+        List<InsProductResult2VO> insProductResult2VOS = insProductResult2Mapper.selectWordHang(insOrderState.getNum(), insProducts.stream().map(InsProduct::getId).collect(Collectors.toList()));
+        for (InsProductResult2VO insProductResult2VO : insProductResult2VOS) {
+            String[] split = insProductResult2VO.getPort().split(",");
+            String value = insProductResult2VO.getValue().replace("[[", "").replace("]]", "");
+            if (split.length>1){
+                for (int i = 0; i < split.length; i++) {
+                    InsProductResult2VO insProductResult2VO1 = new InsProductResult2VO();
+                    BeanUtils.copyProperties(insProductResult2VO,insProductResult2VO1);
+                    //绔彛
+                    insProductResult2VO1.setPort(split[i]);
+                    //鍊�
+                    try{
+                        insProductResult2VO1.setValue(value.split(",")[i].replace("\"",""));
+                    }catch (Exception e){
+                        insProductResult2VO1.setValue("");
+                    }
+                    result2VOS.add(insProductResult2VO1);
+                }
+            }
+            else {
+                insProductResult2VO.setValue(value.replace("\"",""));
+                result2VOS.add(insProductResult2VO);
+            }
+        }
+        List<RowRenderData> rows = new ArrayList<>();
+        Set<String> itemSet = new HashSet<>();
+        //琛ㄦ牸鐨勮鏁�
+        for (int i = 0; i < result2VOS.size(); i++) {
+                RowRenderData rowRenderData = new RowRenderData();
+                RowStyle rowStyle = new RowStyle();
+                rowStyle.setHeight(40);
+                rowRenderData.setRowStyle(rowStyle);
+                List<CellRenderData> cells = new ArrayList<>();
+                //琛ㄦ牸鐨勫垪鏁�
+                for (int j = 0; j < 8; j++) {
+                    CellRenderData cellRenderData = new CellRenderData();
+                    CellStyle cellStyle = new CellStyle();
+                    cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+                    cellRenderData.setCellStyle(cellStyle);
+                    List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+                    ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+                    ParagraphStyle paragraphStyle = new ParagraphStyle();
+                    paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+                    paragraphRenderData.setParagraphStyle(paragraphStyle);
+                    List<RenderData> renderData = new ArrayList<>();
+                    TextRenderData textRenderData = new TextRenderData();
+                    Style style = new Style();
+                    style.setFontFamily("瀹嬩綋");
+                    style.setColor("000000");
+                    textRenderData.setStyle(style);
+                    if (j==0){
+                        //绗竴鍒�(搴忓彿)
+                        if (itemSet.add(result2VOS.get(i).getInspectionItemSubclass())) {
+                            index.getAndIncrement();
+                        }
+                        textRenderData.setText(index + "鈭�1" + index);
+                        renderData.add(textRenderData);
+                        paragraphRenderData.setContents(renderData);
+                        paragraphRenderDataList.add(paragraphRenderData);
+                        cellRenderData.setParagraphs(paragraphRenderDataList);
+                        cells.add(cellRenderData);
+                    }
+                    else if (j==1){
+                        //绗簩鍒�(妫�楠岄」鐩�)
+                        textRenderData.setText(result2VOS.get(i).getInspectionItemSubclass()+ "鈭�2" + index);
+                        renderData.add(textRenderData);
+                        paragraphRenderData.setContents(renderData);
+                        paragraphRenderDataList.add(paragraphRenderData);
+                        cellRenderData.setParagraphs(paragraphRenderDataList);
+                        cells.add(cellRenderData);
+                    }
+                    else if (j==2){
+                        //绗笁鍒�(鍗曚綅)
+                        textRenderData.setText(result2VOS.get(i).getUnit()+ "鈭�3" + index);
+                        renderData.add(textRenderData);
+                        paragraphRenderData.setContents(renderData);
+                        paragraphRenderDataList.add(paragraphRenderData);
+                        cellRenderData.setParagraphs(paragraphRenderDataList);
+                        cells.add(cellRenderData);
+                    }
+                    else if (j==3){
+                        //绗洓鍒�(鏍囧噯涓庤姹�)
+                        textRenderData.setText(result2VOS.get(i).getAsk());
+                        renderData.add(textRenderData);
+                        paragraphRenderData.setContents(renderData);
+                        paragraphRenderDataList.add(paragraphRenderData);
+                        cellRenderData.setParagraphs(paragraphRenderDataList);
+                        cells.add(cellRenderData);
+                    }
+                    else if (j==4){
+                        //绗簲鍒�(绔彛)
+                        try{
+                            textRenderData.setText(result2VOS.get(i).getPort());
+                        }catch (Exception e){
+                            textRenderData.setText("");
+                        }
+                        renderData.add(textRenderData);
+                        paragraphRenderData.setContents(renderData);
+                        paragraphRenderDataList.add(paragraphRenderData);
+                        cellRenderData.setParagraphs(paragraphRenderDataList);
+                        cells.add(cellRenderData);
+                    }
+                    else if (j==5){
+                        //绗叚鍒�(棰戞)
+                        try{
+                            textRenderData.setText(result2VOS.get(i).getFrequency());
+                        }catch (Exception e){
+                            textRenderData.setText("");
+                        }
+                        renderData.add(textRenderData);
+                        paragraphRenderData.setContents(renderData);
+                        paragraphRenderDataList.add(paragraphRenderData);
+                        cellRenderData.setParagraphs(paragraphRenderDataList);
+                        cells.add(cellRenderData);
+                    }
+                    else if (j==6){
+                        //绗竷鍒�(妫�楠屽��)
+                        try{
+                            textRenderData.setText(result2VOS.get(i).getValue());
+                        }catch (Exception e){
+                            textRenderData.setText("");
+                        }
+                        renderData.add(textRenderData);
+                        paragraphRenderData.setContents(renderData);
+                        paragraphRenderDataList.add(paragraphRenderData);
+                        cellRenderData.setParagraphs(paragraphRenderDataList);
+                        cells.add(cellRenderData);
+                    }
+                    else {
+                        //鏈�鍚庝竴鍒�(缁撹)
+                        try{
+                            if (result2VOS.get(i).getResult().equals("1")) {
+                                textRenderData.setText("鍚堟牸");
+                            }else if (result2VOS.get(i).getResult().equals("0")){
+                                textRenderData.setText("涓嶅悎鏍�");
+                            }else {
+                                textRenderData.setText("涓嶅垽瀹�");
+                            }
+                        }catch (Exception e){
+                            textRenderData.setText("");
+                        }
+                        renderData.add(textRenderData);
+                        paragraphRenderData.setContents(renderData);
+                        paragraphRenderDataList.add(paragraphRenderData);
+                        cellRenderData.setParagraphs(paragraphRenderDataList);
+                        cells.add(cellRenderData);
+                    }
+                }
+                rowRenderData.setCells(cells);
+                if (rowRenderData.getCells().size() != 0) {
+                    rows.add(rowRenderData);
+                }
+            }
+        TableRenderData tableRenderData = new TableRenderData();
+        tableRenderData.setRows(rows);
+        int countSize = tableRenderData.getRows().get(0).getCells().size();
+        for (RowRenderData row : tableRenderData.getRows()) {
+                if (row.getCells().size() != countSize) {
+                    throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+                }
+        }
+        TableStyle tableStyle = new TableStyle();
+        tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+        tableStyle.setAlign(TableRowAlign.CENTER);
+        BorderStyle borderStyle = new BorderStyle();
+        borderStyle.setColor("000000");
+        borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+        borderStyle.setSize(4);
+        tableStyle.setLeftBorder(borderStyle);
+        tableStyle.setTopBorder(borderStyle);
+        tableStyle.setRightBorder(borderStyle);
+        tableStyle.setBottomBorder(borderStyle);
+        tableRenderData.setTableStyle(tableStyle);
+        Map<String, Object> table = new HashMap<>();
+        table.put("table", tableRenderData);
+        tables.add(table);
+
+        ZipSecureFile.setMinInflateRatio(0.0001);
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/word2.docx");
+
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("title", title);
+                    put("tables", tables);
+                }});
+        String name = insOrder.getEntrustCode().replace("/", "") + "-" +insSample.getSampleCode()+"-"+ title + ".docx";
+        String url = UUID.randomUUID() + "_" + name;
+        try {
+            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + url)));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+        String path = wordUrl + "/" + url;
+        try {
+            ZipSecureFile.setMinInflateRatio(0.0001);
+            FileInputStream stream = new FileInputStream(path);
+            XWPFDocument document = new XWPFDocument(stream);
+            List<XWPFTable> xwpfTables = document.getTables();
+            for (int i = 0; i < xwpfTables.size(); i++) {
+                Set<String> set1 = new HashSet<>();
+                Map<String, Map<String, Integer>> maps = new HashMap<>();
+                for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("鈭�") > -1) {
+                            String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�");
+                            if (set1.add(split[1])) {
+                                Map<String, Integer> map = new HashMap<>();
+                                map.put("sr", j);
+                                map.put("sc", k);
+                                map.put("er", j + 0);
+                                map.put("ec", k + 0);
+                                maps.put(split[1], map);
+                            } else {
+                                Map<String, Integer> map1 = maps.get(split[1]);
+                                if (j == map1.get("sr")) {
+                                    map1.put("ec", map1.get("ec") + 1);
+                                } else if (k == map1.get("sc")) {
+                                    map1.put("er", map1.get("er") + 1);
+                                }
+                            }
+                            String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0];
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(org.apache.poi.xwpf.usermodel.ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+
+                // 鍗曞厓鏍兼帓搴�, 閬垮厤鏍煎紡閿欎贡
+                List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet());
+                entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc"));
+
+                // 鎸夌収椤哄簭娣诲姞杩涢泦鍚�
+                List<String> list = new ArrayList<>();
+                for (Map.Entry<String, Map<String, Integer>> entry : entries) {
+                    list.add(entry.getKey());
+                }
+                /*List<String> list = new ArrayList<>();
+                for (String s : maps.keySet()) {
+                    list.add(s);
+                }*/
+                for (int a = list.size() - 1; a >= 0; a--) {
+                    Map<String, Integer> v = maps.get(list.get(a));
+                    for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
+                        if (v.get("ec") > v.get("sc")) {
+                            try {
+                                TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+                            } catch (Exception e) {
+                            }
+                        }
+                    }
+                    if (v.get("er") > v.get("sr")) {
+                        try {
+                            TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+                        } catch (Exception e) {
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream = new FileOutputStream(path);
+            document.write(fileOutputStream);
+            fileOutputStream.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        InsOrderFile insOrderFile = new InsOrderFile();
+        insOrderFile.setInsOrderId(insOrderState.getInsOrderId());
+        insOrderFile.setInsSampleId(insOrderState.getInsSampleId());
+        insOrderFile.setFileName(name);
+        insOrderFile.setType(2);
+        insOrderFile.setFileUrl(url);
+        insOrderFile.setSonLaboratory("鐢佃矾璇曢獙");
+        insOrderFileMapper.insert(insOrderFile);
+    }
+
     //鐢熸垚鎬绘姤鍛�
     public void generateReport(Integer orderId, InsReportDto1 insReportDto1) {
         LocalDateTime now = LocalDateTime.now();
@@ -2421,7 +2720,11 @@
                 InsOrderState orderState = insOrderStateMapper.selectById(insOrderUser.getInsOrderStateId());
                 if (orderState.getLaboratory().equals("鐢佃矾璇曢獙")) {
                     orderState.setNum(insOrderUser.getNum());
-                    getWord1(insOrderUser.getTerm(), orderState, tables2);
+                    if(!insOrder.getSampleType().equals("鏃犳簮鍣ㄤ欢")){
+                        getWord1(insOrderUser.getTerm(), orderState, tables2);
+                    }else {
+                        getWord2(insOrderUser.getTerm(), orderState, tables2);
+                    }
                 }
             }
         }
@@ -2783,25 +3086,24 @@
     }
 
 
-    //鐢佃矾鎶ュ憡鐢ㄤ簬鎬绘姤鍛婄殑鏂规硶
+    //鐢佃矾鎶ュ憡鐢ㄤ簬鎬绘姤鍛婄殑鏂规硶(澶╃嚎)
     private void getWord1(String term, InsOrderState insOrderState,List<Map<String, Object>> tables2) {
         AtomicInteger lable = new AtomicInteger(1);
         AtomicInteger index = new AtomicInteger();
         String title = term + "鐢佃矾鍙傛暟";
         InsSample insSample = insSampleMapper.selectById(insOrderState.getInsSampleId());
-
-            //鏌ヨ椤圭洰
-            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+        //鏌ヨ椤圭洰
+        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                     .eq(InsProduct::getState,1)
                     .eq(InsProduct::getInsSampleId, insSample.getId())
                     .eq(InsProduct::getSonLaboratory, "鐢佃矾璇曢獙"));
-            //鑾峰彇鏈�澶х鍙f暟閲�,瑙掑害鏁伴噺,棰戞鏁伴噺
-            List<InsProductResult2> insProductResult2s = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
+        //鑾峰彇鏈�澶х鍙f暟閲�,瑙掑害鏁伴噺,棰戞鏁伴噺
+        List<InsProductResult2> insProductResult2s = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
                     .eq(InsProductResult2::getNum, insOrderState.getNum())
                     .in(InsProductResult2::getInsProductId, insProducts.stream().map(InsProduct::getId).collect(Collectors.toList())));
-            //鎸夌収棰戞鍒嗚〃(鏌ヨ鎵�鏈夐娈�)
-            List<String> frequencys = insProductResult2s.stream().map(InsProductResult2::getFrequency).distinct().collect(Collectors.toList());
-            frequencys.forEach(s -> {
+        //鎸夌収棰戞鍒嗚〃(鏌ヨ鎵�鏈夐娈�)
+        List<String> frequencys = insProductResult2s.stream().map(InsProductResult2::getFrequency).distinct().collect(Collectors.toList());
+        frequencys.forEach(s -> {
                 int ports = 0;//绔彛鏁�
                 int angles = 0;//瑙掑害鏁�
                 List<InsProductResult2> productResult2s = insProductResult2s.stream().filter(insProductResult2 -> insProductResult2.getFrequency().equals(s)).collect(Collectors.toList());
@@ -4636,6 +4938,194 @@
             });
     }
 
+    //鐢佃矾鎶ュ憡鐢ㄤ簬鎬绘姤鍛婄殑鏂规硶(鏃犳簮鍣ㄤ欢)
+    private void getWord2(String term, InsOrderState insOrderState,List<Map<String, Object>> tables2){
+        AtomicInteger index = new AtomicInteger();
+        String title = term + "鐢佃矾鍙傛暟";
+        //鏌ヨ鏍峰搧
+        InsSample insSample = insSampleMapper.selectById(insOrderState.getInsSampleId());
+        //鏌ヨ椤圭洰
+        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .eq(InsProduct::getState,1)
+                .eq(InsProduct::getInsSampleId, insSample.getId())
+                .eq(InsProduct::getSonLaboratory, "鐢佃矾璇曢獙"));
+        //璁$畻琛屾暟
+        List<InsProductResult2VO> result2VOS = new ArrayList<>();
+        List<InsProductResult2VO> insProductResult2VOS = insProductResult2Mapper.selectWordHang(insOrderState.getNum(), insProducts.stream().map(InsProduct::getId).collect(Collectors.toList()));
+        for (InsProductResult2VO insProductResult2VO : insProductResult2VOS) {
+            String[] split = insProductResult2VO.getPort().split(",");
+            String value = insProductResult2VO.getValue().replace("[[", "").replace("]]", "");
+            if (split.length>1){
+                for (int i = 0; i < split.length; i++) {
+                    InsProductResult2VO insProductResult2VO1 = new InsProductResult2VO();
+                    BeanUtils.copyProperties(insProductResult2VO,insProductResult2VO1);
+                    //绔彛
+                    insProductResult2VO1.setPort(split[i]);
+                    //鍊�
+                    insProductResult2VO1.setValue(value.split(",")[i].replace("\"",""));
+                    result2VOS.add(insProductResult2VO1);
+                }
+            }
+            else {
+                insProductResult2VO.setValue(value.replace("\"",""));
+                result2VOS.add(insProductResult2VO);
+            }
+        }
+        List<RowRenderData> rows = new ArrayList<>();
+        Set<String> itemSet = new HashSet<>();
+        //琛ㄦ牸鐨勮鏁�
+        for (int i = 0; i < result2VOS.size(); i++) {
+            RowRenderData rowRenderData = new RowRenderData();
+            RowStyle rowStyle = new RowStyle();
+            rowStyle.setHeight(40);
+            rowRenderData.setRowStyle(rowStyle);
+            List<CellRenderData> cells = new ArrayList<>();
+            //琛ㄦ牸鐨勫垪鏁�
+            for (int j = 0; j < 8; j++) {
+                CellRenderData cellRenderData = new CellRenderData();
+                CellStyle cellStyle = new CellStyle();
+                cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+                cellRenderData.setCellStyle(cellStyle);
+                List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+                ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+                ParagraphStyle paragraphStyle = new ParagraphStyle();
+                paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+                paragraphRenderData.setParagraphStyle(paragraphStyle);
+                List<RenderData> renderData = new ArrayList<>();
+                TextRenderData textRenderData = new TextRenderData();
+                Style style = new Style();
+                style.setFontFamily("瀹嬩綋");
+                style.setColor("000000");
+                textRenderData.setStyle(style);
+                if (j==0){
+                    //绗竴鍒�(搴忓彿)
+                    if (itemSet.add(result2VOS.get(i).getInspectionItemSubclass())) {
+                        index.getAndIncrement();
+                    }
+                    textRenderData.setText(index + "鈭�1" + index);
+                    renderData.add(textRenderData);
+                    paragraphRenderData.setContents(renderData);
+                    paragraphRenderDataList.add(paragraphRenderData);
+                    cellRenderData.setParagraphs(paragraphRenderDataList);
+                    cells.add(cellRenderData);
+                }
+                else if (j==1){
+                    //绗簩鍒�(妫�楠岄」鐩�)
+                    textRenderData.setText(result2VOS.get(i).getInspectionItemSubclass()+ "鈭�2" + index);
+                    renderData.add(textRenderData);
+                    paragraphRenderData.setContents(renderData);
+                    paragraphRenderDataList.add(paragraphRenderData);
+                    cellRenderData.setParagraphs(paragraphRenderDataList);
+                    cells.add(cellRenderData);
+                }
+                else if (j==2){
+                    //绗笁鍒�(鍗曚綅)
+                    textRenderData.setText(result2VOS.get(i).getUnit()+ "鈭�3" + index);
+                    renderData.add(textRenderData);
+                    paragraphRenderData.setContents(renderData);
+                    paragraphRenderDataList.add(paragraphRenderData);
+                    cellRenderData.setParagraphs(paragraphRenderDataList);
+                    cells.add(cellRenderData);
+                }
+                else if (j==3){
+                    //绗洓鍒�(鏍囧噯涓庤姹�)
+                    textRenderData.setText(result2VOS.get(i).getAsk());
+                    renderData.add(textRenderData);
+                    paragraphRenderData.setContents(renderData);
+                    paragraphRenderDataList.add(paragraphRenderData);
+                    cellRenderData.setParagraphs(paragraphRenderDataList);
+                    cells.add(cellRenderData);
+                }
+                else if (j==4){
+                    //绗簲鍒�(绔彛)
+                    try{
+                        textRenderData.setText(result2VOS.get(i).getPort());
+                    }catch (Exception e){
+                        textRenderData.setText("");
+                    }
+                    renderData.add(textRenderData);
+                    paragraphRenderData.setContents(renderData);
+                    paragraphRenderDataList.add(paragraphRenderData);
+                    cellRenderData.setParagraphs(paragraphRenderDataList);
+                    cells.add(cellRenderData);
+                }
+                else if (j==5){
+                    //绗叚鍒�(棰戞)
+                    try{
+                        textRenderData.setText(result2VOS.get(i).getFrequency());
+                    }catch (Exception e){
+                        textRenderData.setText("");
+                    }
+                    renderData.add(textRenderData);
+                    paragraphRenderData.setContents(renderData);
+                    paragraphRenderDataList.add(paragraphRenderData);
+                    cellRenderData.setParagraphs(paragraphRenderDataList);
+                    cells.add(cellRenderData);
+                }
+                else if (j==6){
+                    //绗竷鍒�(妫�楠屽��)
+                    try{
+                        textRenderData.setText(result2VOS.get(i).getValue());
+                    }catch (Exception e){
+                        textRenderData.setText("");
+                    }
+                    renderData.add(textRenderData);
+                    paragraphRenderData.setContents(renderData);
+                    paragraphRenderDataList.add(paragraphRenderData);
+                    cellRenderData.setParagraphs(paragraphRenderDataList);
+                    cells.add(cellRenderData);
+                }
+                else {
+                    //鏈�鍚庝竴鍒�(缁撹)
+                    try{
+                        if (result2VOS.get(i).getResult().equals("1")) {
+                            textRenderData.setText("鍚堟牸");
+                        }else if (result2VOS.get(i).getResult().equals("0")){
+                            textRenderData.setText("涓嶅悎鏍�");
+                        }else {
+                            textRenderData.setText("涓嶅垽瀹�");
+                        }
+                    }catch (Exception e){
+                        textRenderData.setText("");
+                    }
+                    renderData.add(textRenderData);
+                    paragraphRenderData.setContents(renderData);
+                    paragraphRenderDataList.add(paragraphRenderData);
+                    cellRenderData.setParagraphs(paragraphRenderDataList);
+                    cells.add(cellRenderData);
+                }
+            }
+            rowRenderData.setCells(cells);
+            if (rowRenderData.getCells().size() != 0) {
+                rows.add(rowRenderData);
+            }
+        }
+        TableRenderData tableRenderData = new TableRenderData();
+        tableRenderData.setRows(rows);
+        int countSize = tableRenderData.getRows().get(0).getCells().size();
+        for (RowRenderData row : tableRenderData.getRows()) {
+            if (row.getCells().size() != countSize) {
+                throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+            }
+        }
+        TableStyle tableStyle = new TableStyle();
+        tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+        tableStyle.setAlign(TableRowAlign.CENTER);
+        BorderStyle borderStyle = new BorderStyle();
+        borderStyle.setColor("000000");
+        borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+        borderStyle.setSize(4);
+        tableStyle.setLeftBorder(borderStyle);
+        tableStyle.setTopBorder(borderStyle);
+        tableStyle.setRightBorder(borderStyle);
+        tableStyle.setBottomBorder(borderStyle);
+        tableRenderData.setTableStyle(tableStyle);
+        Map<String, Object> table2 = new HashMap<>();
+        table2.put("table2", tableRenderData);
+        table2.put("title", title);
+        tables2.add(table2);
+    }
+
     // 姘村钩鍚堝苟鍗曞厓鏍�
     private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
         for (int i = fromCol; i <= toCol; i++) {
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/vo/InsProductResult2VO.java b/inspect-server/src/main/java/com/yuanchu/mom/vo/InsProductResult2VO.java
new file mode 100644
index 0000000..07ab956
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/vo/InsProductResult2VO.java
@@ -0,0 +1,29 @@
+package com.yuanchu.mom.vo;
+
+import lombok.Data;
+
+//鏃犳簮鍣ㄤ欢鐨勭數璺瘯楠岀敓鎴愭姤鍛婃墍鐢�
+@Data
+public class InsProductResult2VO {
+
+    //妫�楠岄」鐩�
+    private String inspectionItemSubclass;
+
+    //鍗曚綅
+    private String unit;
+
+    //鏍囧噯瑕佹眰
+    private String ask;
+
+    //绔彛
+    private String port;
+
+    //棰戞
+    private String frequency;
+
+    //妫�楠屽��
+    private String value;
+
+    //缁撹
+    private String result;
+}
diff --git a/inspect-server/src/main/resources/mapper/InsProductResult2Mapper.xml b/inspect-server/src/main/resources/mapper/InsProductResult2Mapper.xml
index 883e299..de4be72 100644
--- a/inspect-server/src/main/resources/mapper/InsProductResult2Mapper.xml
+++ b/inspect-server/src/main/resources/mapper/InsProductResult2Mapper.xml
@@ -35,4 +35,23 @@
              #{result2.num})
         </foreach>
     </insert>
+    <select id="selectWordHang" resultType="com.yuanchu.mom.vo.InsProductResult2VO">
+        select
+        inspection_item_subclass,
+        unit,
+        ask,
+        result,
+        frequency,
+        port,
+        value,
+        result
+        from  ins_product_result_2 ipr2
+                          left join ins_product ip on ipr2.ins_product_id = ip.id
+        where num=#{num}
+          and ip.id in
+            <foreach collection="ids" separator="," item="id" open="(" close=")" >
+                #{id}
+            </foreach>
+        order by inspection_item_subclass
+    </select>
 </mapper>
diff --git a/inspect-server/src/main/resources/static/word2.docx b/inspect-server/src/main/resources/static/word2.docx
new file mode 100644
index 0000000..0ee5b6e
--- /dev/null
+++ b/inspect-server/src/main/resources/static/word2.docx
Binary files differ

--
Gitblit v1.9.3