From 1f15333b0a97a327865f7aab8f1e3f9ba8fc16f8 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期五, 18 十月 2024 12:45:59 +0800
Subject: [PATCH] 电路站点报告调试+总报告ing

---
 inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java                      |  665 ++++++++++++++++++++++++++++++--
 inspect-server/src/main/java/com/yuanchu/mom/dto/InsReportDto.java                     |    2 
 inspect-server/src/main/resources/mapper/InsSampleMapper.xml                           |    5 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java    |  377 ------------------
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java |   66 ++-
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java     |   51 +
 inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml                        |    3 
 system-run/src/main/resources/application-dev.yml                                      |    5 
 inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderFileMapper.java            |    3 
 inspect-server/src/main/java/com/yuanchu/mom/mapper/InsSampleMapper.java               |    2 
 framework/src/main/java/com/yuanchu/mom/utils/QYWXApi.java                             |    2 
 inspect-server/src/main/resources/mapper/InsOrderUserMapper.xml                        |    1 
 inspect-server/src/main/resources/static/report-template.docx                          |    0 
 inspect-server/src/main/java/com/yuanchu/mom/dto/InsReportDto1.java                    |    2 
 14 files changed, 725 insertions(+), 459 deletions(-)

diff --git a/framework/src/main/java/com/yuanchu/mom/utils/QYWXApi.java b/framework/src/main/java/com/yuanchu/mom/utils/QYWXApi.java
index 67041a3..ff6e615 100644
--- a/framework/src/main/java/com/yuanchu/mom/utils/QYWXApi.java
+++ b/framework/src/main/java/com/yuanchu/mom/utils/QYWXApi.java
@@ -21,7 +21,7 @@
 	public static final String WWA_423654_B_975441_AC = "wwa423654b975441ac";
 	final String ip = "https://qyapi.weixin.qq.com/";
 	final String corpid = WWA_423654_B_975441_AC;
-	final String corpsecret = "VfTV3D0BFWORlBm8grykUhloQSTM06mIXYEHUqr3UIc";
+	final String corpsecret = "rQ1_ddKBVW5qVSMNK_p0EnR3Z2OHrAMxGahBKTKWYxE";
 
 
 	/**
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/dto/InsReportDto.java b/inspect-server/src/main/java/com/yuanchu/mom/dto/InsReportDto.java
index 8c3d3f6..521594f 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/dto/InsReportDto.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/dto/InsReportDto.java
@@ -2,6 +2,7 @@
 
 import lombok.Data;
 
+import javax.validation.constraints.NotNull;
 import java.util.List;
 
 @Data
@@ -14,5 +15,6 @@
     private Integer state;
 
     //閫夋嫨鐨勬瘡涓珯鐐圭殑绗嚑娆℃暟鎹�
+    @NotNull
     private List<InsReportDto1> insReportDto1s;
 }
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/dto/InsReportDto1.java b/inspect-server/src/main/java/com/yuanchu/mom/dto/InsReportDto1.java
index c3fc8b2..dca5bd8 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/dto/InsReportDto1.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/dto/InsReportDto1.java
@@ -8,4 +8,6 @@
     private String laboratory;
 
     private Integer num;
+
+    private Integer insOrderUsersId;
 }
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderFileMapper.java b/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderFileMapper.java
index dd3a93e..bd53c37 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderFileMapper.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderFileMapper.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.mom.pojo.InsOrderFile;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -16,5 +17,5 @@
  */
 public interface InsOrderFileMapper extends BaseMapper<InsOrderFile> {
 
-    IPage<InsOrderFile> getFileList(Page page, QueryWrapper<InsOrderFile> ew);
+    IPage<InsOrderFile> getFileList(@Param("page") Page page, @Param("ew") QueryWrapper<InsOrderFile> ew , @Param("insOrderId") Integer insOrderId);
 }
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsSampleMapper.java b/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsSampleMapper.java
index 951385d..ab0a329 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsSampleMapper.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/mapper/InsSampleMapper.java
@@ -60,6 +60,8 @@
 
     //鏌ヨ涓旇繃婊ゅ嚭鏈夌數璺瘯楠岀殑鏍峰搧
     List<InsSample> selectSample(Integer insOrderId);
+
+    List<SampleProductDto> selectList1(Integer id);
 }
 
 
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 ff49a1e..36aa8e2 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
@@ -204,8 +204,22 @@
                 //鏍峰搧
                 insProducts = insSampleMapper.getInsProduct1(id, laboratory);
                 if (insProducts.size() == 0) {
-                    insProducts = insSampleMapper.getIns2Product1(id, laboratory);
+                    insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                            .eq(InsProduct::getInsSampleId, id)
+                            .eq(InsProduct::getState, 1)
+                            .eq(InsProduct::getSonLaboratory, laboratory));
+                    for (InsProduct insProduct : insProducts) {
+                        List<InsProductResult2> insProductResult2List = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
+                                .eq(InsProductResult2::getInsProductId, insProduct.getId()).isNull(InsProductResult2::getNum));
+                        insProduct.setInsProductResult2(insProductResult2List);
+                        InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
+                                .eq(InsProductResult::getInsProductId, insProduct.getId()).isNull(InsProductResult::getNum));
+                        insProduct.setInsProductResult(insProductResult);
+                    }
                 }
+                /*if (insProducts.size() == 0) {
+                    insProducts = insSampleMapper.getIns2Product1(id, laboratory);
+                }*/
                 break;
             case 1:
                 //鍏夌氦甯�
@@ -274,7 +288,9 @@
     public Map<String, Object> getFileList(Page page, InsOrderFile insOrderFile) {
         Map<String, Object> map = new HashMap<>();
         map.put("head", PrintChina.printChina(InsOrderFile.class));
-        IPage<InsOrderFile> insOrderFileIPage = insOrderFileMapper.getFileList(page, QueryWrappers.queryWrappers(insOrderFile));
+        Integer insOrderId = insOrderFile.getInsOrderId();
+        insOrderFile.setInsOrderId(null);
+        IPage<InsOrderFile> insOrderFileIPage = insOrderFileMapper.getFileList(page, QueryWrappers.queryWrappers(insOrderFile), insOrderId);
         map.put("body", insOrderFileIPage);
         return map;
     }
@@ -393,13 +409,15 @@
         //鍒ゆ柇璇ヨ鍗曟槸鍚︾珯鐐逛换鍔℃湁(缁х画璇曢獙鎴栬�呮槸缁撴潫璇曢獙)
         List<InsOrderState> orderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
                 .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
-                .and(wrapper -> wrapper
-                        .eq(InsOrderState::getInsState, 5)
-                        .or()
-                        .eq(InsOrderState::getInsState, 6)
-                ));
+                .eq(InsOrderState::getInsState, 5));
         if (CollectionUtils.isEmpty(orderStates)) {
-            throw new ErrorException("璇ユ牱鍝佺殑妫�楠屼换鍔¤繕娌℃湁缁撴潫璇曢獙,鏆傛椂鏃犳硶鍑哄簱!");
+            List<InsOrderState> orderStates1 = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
+                    .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                    .eq(InsOrderState::getLaboratory, sonLaboratory)
+                    .eq(InsOrderState::getInsState, 6));
+            if (CollectionUtils.isEmpty(orderStates1)) {
+                throw new ErrorException("璇ユ牱鍝佺殑妫�楠屼换鍔¤繕娌℃湁缁撴潫璇曢獙鎴栫户缁瘯楠�,鏆傛椂鏃犳硶鍑哄簱!");
+            }
         }
         warehouseService.outWarehouse(sampleCode);
         return 0;
@@ -857,7 +875,6 @@
         Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
         List<InsUnPass> insUnPasses = new ArrayList<>();
         /*鏍峰搧涓嬬殑椤圭洰鍙鏈変竴涓」鐩笉鍚堟牸鍒欐楠岀粨鏋滀负0,鍚﹀垯涓�1*/
-        //杩欓噷鐨刬nsSamples鏄鍗曚笅鐨勬墍鏈夋牱鍝佸寘鎷�("/")
         List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId));
         for (InsSample insSample : samples) {
             List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
@@ -935,6 +952,14 @@
                     //濡傛灉璁㈠崟绫诲瀷鏄師鐞嗘牱鏈�,鍒欒璁㈠崟鐩存帴闂幆
                     InsOrder insOrder = insOrderMapper.selectById(orderId);
                     if (insOrder.getFormType().equals("鍘熺悊鏍锋満")) {
+                        for (InsSample sample : samples) {
+                            //鍑哄簱
+                            try{
+                                outInsOrderState(laboratory,sample.getSampleCode());
+                            }catch (Exception e){
+
+                            }
+                        }
                         insOrder.setState(4);
                         insOrderMapper.updateById(insOrder);
                     }
@@ -1032,8 +1057,8 @@
                 .eq(InsOrderState::getLaboratory, submitPlanDto.getLaboratory())
                 .set(InsOrderState::getInsState, 3)
                 .set(InsOrderState::getVerifyUser, submitPlanDto.getVerifyUser()));
+        InsOrder insOrder = insOrderMapper.selectById(submitPlanDto.getOrderId());
         /*杩欎釜鎯呭喌鍏堝叧闂�----濡傛灉鏄疌绫昏鍗曚笖鏄笅鍙戝埌璐ㄩ噺閮�,鍒欑洿鎺ュ鏍搁�氳繃(缁撴潫璇曢獙)*/
-//        InsOrder insOrder = insOrderMapper.selectById(orderId);
 //        if (insOrder.getOrderType().equals("C") && insOrder.getDepartmentLims().equals("璐ㄩ噺閮�")) {
 //            try {
 //                verifyPlan(orderId, laboratory, 2, null);
@@ -1056,14 +1081,14 @@
         //todo 浼佷笟寰俊娑堟伅鎺ㄩ�丂zss
            /* HashMap<String, Object> map = new HashMap<>();
             String account = userMapper.selectById(userId).getAccount();
-            map.put("touser", *//*account*//*"ZT-012117");//鎺ユ敹娑堟伅鎴愬憳鐨勮处鍙�'ZT-031292'杩欑绫诲瀷(濡傛灉鏈夊涓敤'|'鍒嗛殧)
+            map.put("touser", account);//鎺ユ敹娑堟伅鎴愬憳鐨勮处鍙�'ZT-031292'杩欑绫诲瀷(濡傛灉鏈夊涓敤'|'鍒嗛殧)
             map.put("toparty", "");//鎺ユ敹閮ㄩ棬id
             map.put("totag", "");//娑堟伅鏍囩id
             map.put("msgtype", "text");//娑堟伅绫诲瀷 text:鏂囨湰
-            map.put("agentid", 1000513);//搴旂敤id
+            map.put("agentid", 1000517);//搴旂敤id
             HashMap<String, Object> hashMap = new HashMap<>();
-            hashMap.put("content", "鎮ㄦ湁涓�鏉℃楠屼换鍔″緟澶嶆牳娑堟伅,璇峰墠寰�LIMS绯荤粺鏌ョ湅銆�<a href=\"http://10.1.13.77/enter\"> </a>");
-            map.put("text", JSONArray.toJSONString(hashMap));//娑堟伅鍐呭
+            hashMap.put("content", "鎮ㄦ湁涓�鏉℃楠屼换鍔″緟澶嶆牳娑堟伅,璁㈠崟鍙锋槸锛�"+insOrder.getEntrustCode()+",璇峰墠寰�LIMS绯荤粺鏌ョ湅銆�<a href=\"https://ztwxlims.ztt.cn:7443/enter\">涓ぉ閫氫俊LIMS绯荤粺 </a>");
+            map.put("text", hashMap);//娑堟伅鍐呭
             map.put("safe", 0);//鏄惁淇濆瘑娑堟伅.0鍚�
             map.put("enable_id_trans", 0);//鏄惁寮�鍚痠d杞瘧.0鍚�
             map.put("enable_duplicate_check", 0);//鏄惁寮�鍚噸澶嶆秷鎭鏌�.0鍚�
@@ -1093,19 +1118,18 @@
         });*/
         /*鐢熸垚鐢佃矾璇曢獙鐨勭珯鐐规姤鍛婂苟涓婁紶鍒伴檮浠朵腑*/
         if (submitPlanDto.getLaboratory().equals("鐢佃矾璇曢獙")) {
-            try {
-                wordUtils.generateWord(submitPlanDto.getNote(), submitPlanDto.getTerm(), orderState);
-            } catch (Exception e) {
-                throw new ErrorException("鐢佃矾璇曢獙鐨勭珯鐐规姤鍛婄敓鎴愭湁璇�,璇疯仈绯诲紑鍙戜汉鍛樿皟鏁�!");
-            }
+            wordUtils.generateWord(submitPlanDto.getNote(), submitPlanDto.getTerm(), orderState);
+//            try {
+//                wordUtils.generateWord(submitPlanDto.getNote(), submitPlanDto.getTerm(), orderState);
+//            } catch (Exception e) {
+//                throw new ErrorException("鐢佃矾璇曢獙鐨勭珯鐐规姤鍛婄敓鎴愭湁璇�,璇疯仈绯诲紑鍙戜汉鍛樿皟鏁�!");
+//            }
         }
         /*// 鍒犻櫎鏁伴噰閲囬泦娆℃暟
         String key = "frequency" + ":" + submitPlanDto.getEntrustCode() + ":*";
         RedisUtil.delsLike(key);*/
 
         /*鐢熸垚浜ч噺宸ユ椂*/
-        //鏌ヨ妫�楠屽崟淇℃伅
-        InsOrder insOrder = insOrderMapper.selectById(submitPlanDto.getOrderId());
         //鏍¢獙濡傛灉杩欎釜浜鸿繖涓娴嬮」鐩凡缁忔坊鍔犺繃浜嗗垯涓嶉渶瑕佸啀鏂板
         //棣栧厛鍒ゆ柇褰撳墠浜虹殑褰撳墠鏃堕棿鏄惁鏄帓鐝椂闂村唴,濡傛灉涓嶆槸灏辨槸鍔犵彮
         LocalDateTime today = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT);
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
index e74f015..a54776a 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
@@ -74,6 +74,10 @@
     @Resource
     private InsSampleMapper insSampleMapper;
     @Resource
+    InsProductResult2Mapper insProductResult2Mapper;
+    @Resource
+    InsProductResultMapper insProductResultMapper;
+    @Resource
     private WarehouseHistoryMapper warehouseHistoryMapper;
     @Resource
     private InsProductMapper insProductMapper;
@@ -247,7 +251,7 @@
         }
         //濡傛灉鏈変笂浼犵殑闄勪欢
         if (CollectionUtils.isNotEmpty(files)) {
-            for (MultipartFile file : files ) {
+            for (MultipartFile file : files) {
                 String urlString;
                 String pathName;
                 String path;
@@ -322,27 +326,22 @@
         if (insOrder.getState() == 1) {
             //瀹℃牳閫氳繃鎵嶄細鐢熸垚濮旀墭缂栧彿
             insOrder.setEntrustCode(giveCode.giveCode2("WT-", "ins_order", "-", "yyMMdd"));
-            //纭畾璁㈠崟鐨勪笅鍙戞椂闂村拰绾﹀畾鏃堕棿
-            //int day = insProductService.selectOrderManDay(insOrder.getId());//棰勮瀹屾垚鏃堕棿
-            //insOrder.setAppointed(LocalDate.parse(LocalDateTime.now().plusHours(day).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))));
             insOrder.setSendTime(LocalDateTime.now());
             /*todo 鏍规嵁璁㈠崟绫诲瀷鍒ゆ柇鏄惁闇�瑕佹帹閫佷紒涓氬井淇� @zss*/
-            if (!order.getFormType().equals("鍏朵粬鎴愬搧")) {
-               /* HashMap<String, Object> map = new HashMap<>();
+            /*if (!order.getFormType().equals("鍏朵粬鎴愬搧")) {
                 String account = userMapper.selectById(order.getIssueUser()).getAccount();
+                HashMap<String, Object> map = new HashMap<>();
                 map.put("touser", account);//鎺ユ敹娑堟伅鎴愬憳鐨勮处鍙�'ZT-031292'杩欑绫诲瀷(濡傛灉鏈夊涓敤'|'鍒嗛殧)
-                map.put("toparty", "");//鎺ユ敹閮ㄩ棬id
-                map.put("totag", "");//娑堟伅鏍囩id
                 map.put("msgtype", "text");//娑堟伅绫诲瀷 text:鏂囨湰
-                map.put("agentid", 1000513);//搴旂敤id
+                map.put("agentid", 1000517);//搴旂敤id
                 HashMap<String, Object> hashMap = new HashMap<>();
-                hashMap.put("content", "鎮ㄦ湁涓�鏉¤鍗曢渶鐢熸垚妫�楠�,璇峰墠寰�LIMS绯荤粺鏌ョ湅銆�<a href=\"http://10.1.13.77/enter\"> </a>");
-                map.put("text", JSONArray.toJSONString(hashMap));//娑堟伅鍐呭
+                hashMap.put("content", "鎮ㄦ湁涓�鏉¤鍗曢渶瑕佸畬鎴�,璇峰墠寰�LIMS绯荤粺鏌ョ湅銆傝鍗曞彿鏄細"+order.getEntrustCode()+",璇峰墠寰�LIMS绯荤粺鏌ョ湅銆�<a href=\"https://ztwxlims.ztt.cn:7443/enter\">涓ぉ閫氫俊LIMS绯荤粺 </a>");
+                map.put("text", hashMap);//娑堟伅鍐呭
                 map.put("safe", 0);//鏄惁淇濆瘑娑堟伅.0鍚�
                 map.put("enable_id_trans", 0);//鏄惁寮�鍚痠d杞瘧.0鍚�
                 map.put("enable_duplicate_check", 0);//鏄惁寮�鍚噸澶嶆秷鎭鏌�.0鍚�
-                qywxApi.send(map);*/
-            }
+                qywxApi.send(map);
+            }*/
         }
         return insOrderMapper.updateById(insOrder);
     }
@@ -399,9 +398,31 @@
     public Map<String, Object> getInsOrderAndSample(Integer id, String laboratory) {
         Map<String, Object> map = new HashMap<>();
         InsOrder insOrder = insOrderMapper.selectById2(id);
+        List<SampleProductDto> insSamples = insSampleMapper.selectList1(insOrder.getId());
         List<SampleProductDto> list = insSampleMapper.getInsOrderAndSample(id, laboratory);
-        if (list.size() == 0) {
-            list = insSampleMapper.getInsOrderAndSample2(id, laboratory);
+        //鍐嶆璇曢獙浼氬嚭鐜颁负绌虹殑鎯呭喌
+        if (list.size() != insSamples.size()) {
+            List<Integer> ids = list.stream().map(sampleProductDto -> sampleProductDto.getId()).distinct().collect(Collectors.toList());
+            List<SampleProductDto> samples = insSamples.stream().filter(insSample ->
+                    !ids.contains(insSample.getId())
+            ).collect(Collectors.toList());
+            for (SampleProductDto insSample : samples) {
+                List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                        .eq(InsProduct::getInsSampleId, insSample.getId())
+                        .eq(InsProduct::getState, 1)
+                        .eq(InsProduct::getSonLaboratory, laboratory));
+                for (InsProduct insProduct : insProducts) {
+                    List<InsProductResult2> insProductResult2List = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
+                            .eq(InsProductResult2::getInsProductId, insProduct.getId()).isNull(InsProductResult2::getNum));
+                    insProduct.setInsProductResult2(insProductResult2List);
+                    InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
+                            .eq(InsProductResult::getInsProductId, insProduct.getId()).isNull(InsProductResult::getNum));
+                    insProduct.setInsProductResult(insProductResult);
+                }
+                insSample.setInsProduct(insProducts);
+                list.add(insSample);
+            }
+
         }
         for (SampleProductDto sampleProductDto : list) {
             List<Integer> ids = sampleProductDto.getInsProduct().stream().map(InsProduct::getId).collect(Collectors.toList());
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java
index 14cea9a..d7805c8 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java
@@ -17,6 +17,7 @@
 import com.deepoove.poi.data.*;
 import com.deepoove.poi.data.style.*;
 import com.deepoove.poi.data.style.Style;
+import com.deepoove.poi.data.style.TableStyle;
 import com.deepoove.poi.util.TableTools;
 import com.itextpdf.text.BadElementException;
 import com.itextpdf.text.DocumentException;
@@ -37,9 +38,12 @@
 import com.yuanchu.mom.utils.JackSonUtil;
 import com.yuanchu.mom.utils.MatrixToImageWriter;
 import com.yuanchu.mom.utils.QueryWrappers;
+import com.yuanchu.mom.utils.WordUtils;
 import com.yuanchu.mom.vo.Result;
 import org.apache.commons.io.IOUtils;
+import org.apache.logging.log4j.util.Strings;
 import org.apache.poi.xwpf.usermodel.*;
+import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.stereotype.Service;
@@ -103,6 +107,9 @@
     private InsOrderStateMapper insOrderStateMapper;
 
     @Resource
+    WordUtils wordUtils;
+
+    @Resource
     private InsProductMapper insProductMapper;
 
     @Resource
@@ -110,6 +117,9 @@
 
     @Resource
     private InsProductResult2Mapper insProductResult2Mapper;
+
+    @Resource
+    private InsOrderUserMapper insOrderUserMapper;
 
     @Resource
     private InsSampleMapper insSampleMapper;
@@ -380,7 +390,8 @@
         Long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, insReportDto.getId()).eq(InsOrderState::getInsState, 5));
         if (count > 0) {
             if (insReportDto.getState() == 1) {
-                generateReport(insReportDto.getId(), insReportDto.getInsReportDto1s());
+                List<InsReportDto1> insReportDto1s = insReportDto.getInsReportDto1s();
+                wordUtils.generateReport(insReportDto.getId(), insReportDto1s);
             } else {
                 //缁撴潫璁㈠崟
                 InsOrder insOrder = new InsOrder();
@@ -593,370 +604,6 @@
             over.addImage(img);
         }
         stamp.close();
-    }
-
-    //鐢熸垚鎶ュ憡
-    private void generateReport(Integer orderId, List<InsReportDto1> insReportDto1s) {
-        LocalDateTime now = LocalDateTime.now();
-        InsOrder insOrder = insOrderMapper.selectById(orderId);
-        //濮旀墭閮ㄩ棬 departLims
-        String departLims = userMapper.selectDepartLims(insOrder.getPrepareUser());
-        //samples鏄繃婊ゆ帀娌℃湁妫�楠岄」鐩殑鏍峰搧
-        List<SampleProductDto> samples = insSampleMapper.selectSampleProductListByOrderId(orderId);
-        String sampleCode = samples.get(0).getSampleCode();
-        InsReport insReport = new InsReport();
-        insReport.setCode(insOrder.getEntrustCode().replace("WT","TXJC"));
-        insReport.setInsOrderId(orderId);
-        List<Map<String, Object>> tables = new ArrayList<>();
-        Set<String> standardMethod = new HashSet<>();
-        Set<String> deviceSet = new HashSet<>();
-        Set<String> models = new HashSet<>();
-        AtomicReference<Integer> productSize = new AtomicReference<>(0);
-        AtomicReference<Integer> productSize1 = new AtomicReference<>(0);
-        AtomicReference<Integer> productSize2 = new AtomicReference<>(0);
-        AtomicReference<Integer> productSize3 = new AtomicReference<>(0);
-        String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
-        samples.forEach(s -> {
-            models.add(s.getModel());
-            standardMethod.addAll(standardMethodListMapper.selectList(Wrappers.<StandardMethodList>lambdaQuery()
-                    .in(StandardMethodList::getId,Arrays.stream(s.getStandardMethodListId().replaceAll("[\\[\\]]", "").split(","))
-                            .map(String::trim).map(Integer::parseInt).collect(Collectors.toList()))).stream().map(aa->{return aa.getCode()+" "+aa.getName();}).distinct().collect(Collectors.toList()));
-            //鎬绘暟
-            Long productCount = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
-                    .eq(InsProduct::getInsSampleId, s.getId()));
-            productSize.set(productSize.get() + Integer.parseInt(productCount + ""));
-            //涓嶅垽瀹�
-            Long productCount1 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
-                    .eq(InsProduct::getInsSampleId, s.getId())
-                    .eq(InsProduct::getInsResult, 3));
-            productSize1.set(productSize1.get() + Integer.parseInt(productCount1 + ""));
-            //涓嶅悎鏍�
-            Long productCount2 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
-                    .eq(InsProduct::getInsSampleId, s.getId())
-                    .eq(InsProduct::getInsResult, 0));
-            productSize2.set(productSize2.get() + Integer.parseInt(productCount2 + ""));
-            //鍚堟牸
-            Long productCount3 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
-                    .eq(InsProduct::getInsSampleId, s.getId())
-                    .eq(InsProduct::getInsResult, 1));
-            productSize3.set(productSize3.get() + Integer.parseInt(productCount3 + ""));
-            //灏嗛」鐩寜鐓х珯鐐硅繘琛屽垎绫�
-            Map<String, List<InsProduct>> listMap = s.getInsProduct().stream().collect(Collectors.groupingBy(InsProduct::getLaboratory));
-            // 鍒涘缓涓�涓� Map 灏嗙珯鐐瑰拰椤圭洰ID鐨勬槧灏勫叧绯�
-            Map<String, Set<Integer>> labToDeviceMap = new HashMap<>();
-            // 鑾峰彇鎵�鏈夌珯鐐圭殑椤圭洰ID 鍒楄〃
-            for (Map.Entry<String, List<InsProduct>> entry : listMap.entrySet()) {
-                Set<Integer> deviceIds = entry.getValue().stream()
-                        .map(InsProduct::getId)
-                        .collect(Collectors.toSet());
-                labToDeviceMap.put(entry.getKey(), deviceIds);
-            }
-            for (InsReportDto1 insReportDto1 : insReportDto1s) {
-                String laboratory = insReportDto1.getLaboratory();
-                if (!labToDeviceMap.containsKey(laboratory)) {
-                    continue;
-                }
-                Set<Integer> deviceIds = labToDeviceMap.get(laboratory);
-                Integer num = insReportDto1.getNum();
-                List<InsProductResult> insProductResults = insProductResultMapper.selectList(
-                        Wrappers.<InsProductResult>lambdaQuery()
-                                .eq(InsProductResult::getNum, num)
-                                .in(InsProductResult::getInsProductId, deviceIds));
-                for (InsProductResult insProductResult : insProductResults) {
-                    List<JSONObject> jsonObjects = JSON.parseArray(insProductResult.getEquipValue(), JSONObject.class);
-                    for (JSONObject jsonObject : jsonObjects) {
-                        String value = jsonObject.getString("v");
-                        if (value != null && !value.isEmpty()) {
-                            deviceSet.add(value);
-                        }
-                    }
-                }
-                List<InsProductResult2> insProductResult2s = insProductResult2Mapper.selectList(
-                        Wrappers.<InsProductResult2>lambdaQuery()
-                                .eq(InsProductResult2::getNum, num)
-                                .in(InsProductResult2::getInsProductId, deviceIds));
-                for (InsProductResult2 result2 : insProductResult2s) {
-                    String equipValue = result2.getEquipValue();
-                    if (equipValue != null && !equipValue.isEmpty()) {
-                        deviceSet.add(equipValue);
-                    }
-                }
-            }
-        });
-        String url;
-        try {
-            InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
-            File file = File.createTempFile("temp", ".tmp");
-            OutputStream outputStream = new FileOutputStream(file);
-            IOUtils.copy(inputStream, outputStream);
-            url = file.getAbsolutePath();
-        } catch (FileNotFoundException e) {
-            throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-        StringBuilder standardMethod2 = new StringBuilder();
-        for (String s : standardMethod) {
-            standardMethod2.append("锛沑n").append(s);
-        }
-        standardMethod2.append("锛沑n").append("GB/T 9410-2008 銆婄Щ鍔ㄩ�氫俊澶╃嚎閫氱敤鎶�鏈鑼冦��");
-        standardMethod2.replace(0, 1, "");
-        tables.forEach(table -> {
-            table.put("tableSize", tables.size() + 1);
-        });
-        List<Map<String, String>> deviceList = null;
-        if (deviceSet.size() != 0) {
-            deviceList = insOrderMapper.selectDeviceList(deviceSet);
-        }
-        Map<String, String> codeStr = new HashMap<>();
-        codeStr.put("鎶ュ憡缂栧彿", insReport.getCode());
-        codeStr.put("鏍峰搧鍚嶇О", insOrder.getSample());
-        codeStr.put("瑙勬牸鍨嬪彿", samples.get(0).getModel());
-        codeStr.put("鍙戞斁鏃ユ湡", now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-        String codePath;
-        try {
-            codePath = new MatrixToImageWriter().code(JackSonUtil.marshal(codeStr).replaceAll("\\{", "")
-                    .replaceAll("}", "").replaceAll(",", "").replaceAll("\"", ""), twoCode);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        String modelStr = "";
-        for (String model : models) {
-            modelStr += "," + model;
-        }
-        String finalModelStr = modelStr;
-        String sampleEn = insSampleMapper.getSampleEn(insOrder.getSample());
-        String orderType = insOrderMapper.getEnumLabelByValue(insOrder.getOrderType());
-        String formType = insOrderMapper.getEnumLabelByValue(insOrder.getFormType());
-        ConfigureBuilder builder = Configure.builder();
-        builder.useSpringEL(true);
-        List<Map<String, String>> finalDeviceList = deviceList;
-        List<Map<String, String>> sampleList = insSampleMapper.selectSampleList(orderId);
-        Integer userId = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery()
-                .eq(InsSampleUser::getInsSampleId, orderId).last("limit 1")).getUserId();
-        String signatureUrl;
-        try {
-            signatureUrl = userMapper.selectById(userId).getSignatureUrl();
-        } catch (Exception e) {
-            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
-        }
-        if (ObjectUtils.isEmpty(signatureUrl) || signatureUrl.equals("")) {
-            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
-        }
-        Custom custom = customMapper.selectById(insOrder.getCompanyId());
-
-        /*鑾峰彇闄勪欢鍥剧墖绫诲瀷*/
-        List<Map<String, Object>> images = new ArrayList<>();
-        List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery().eq(InsOrderFile::getType, 1).eq(InsOrderFile::getInsOrderId, orderId));
-        if (CollectionUtils.isNotEmpty(insOrderFiles)) {
-            insOrderFiles.forEach(insOrderFile -> {
-                Map<String, Object> image = new HashMap<>();
-                PictureRenderData pictureRenderData = Pictures.ofLocal(imgUrl + "/" + insOrderFile.getFileUrl()).sizeInCm(17, 20).create();
-                image.put("url", pictureRenderData);
-                image.put("report", insReport);
-                images.add(image);
-            });
-        }
-        //濮旀墭浜哄拰鐢佃瘽瀛楁鍒ゆ柇
-        if (ObjectUtils.isEmpty(insOrder.getPrepareUser())) {
-            insOrder.setPrepareUser("/");
-        }
-        if (ObjectUtils.isEmpty(insOrder.getPhone())) {
-            insOrder.setPhone("/");
-        }
-        //妫�楠岄」鐩殑鐜
-        InsProduct insProduct = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getState, 1).eq(InsProduct::getInsSampleId, samples.get(0).getId())).get(0);
-        String environment = "";
-        environment = (ObjectUtils.isNotEmpty(insProduct.getTemperature()) ? insProduct.getTemperature() + "鈩� " : "") + (ObjectUtils.isNotEmpty(insProduct.getHumidity()) ? insProduct.getHumidity() + "%" : "");
-        String finalEnvironment = environment;
-        List<SampleProductDto> finalSamples = samples;
-        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
-                new HashMap<String, Object>() {{
-                    put("order", insOrder);
-                    put("report", insReport);
-                    put("departLims", departLims);
-                    put("sampleCode", sampleCode);
-                    put("environment", finalEnvironment);
-                    put("custom", custom);
-                    put("sampleSize", finalSamples.size());
-                    put("tables", tables);
-                    put("tableSize", tables.size() + 1);
-                    put("standardMethod", (standardMethod2.toString().equals("null") ? "" : standardMethod2));
-                    put("deviceList", finalDeviceList);
-                    put("sampleList", sampleList);
-                    put("twoCode", Pictures.ofLocal(codePath).create());
-                    put("models", finalModelStr.replace(",", ""));
-                    put("productSize", productSize);
-                    put("productSize1", productSize1);
-                    put("productSize2", productSize2);
-                    put("productSize3", productSize3);
-                    put("createTime", now.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
-                    put("createTimeEn", monthNames[now.getMonthValue() - 1] + " " + now.getDayOfMonth() + ", " + now.getYear());
-                    put("insTime", insOrder.getInsTime().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
-                    put("insTimeEn", monthNames[insOrder.getInsTime().getMonthValue() - 1] + " " + insOrder.getInsTime().getDayOfMonth() + ", " + insOrder.getInsTime().getYear());
-                    put("writeUrl", null);
-                    put("insUrl", Pictures.ofLocal(imgUrl + "/" + signatureUrl).create());
-                    put("images", images);
-                    put("examineUrl", null);
-                    put("ratifyUrl", null);
-                    put("sampleEn", sampleEn);
-                    put("orderType", orderType);
-                    put("getTime", insOrder.getExamineTime().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
-                    put("getTimeEn", monthNames[insOrder.getExamineTime().getMonthValue() - 1] + " " + insOrder.getExamineTime().getDayOfMonth() + ", " + insOrder.getExamineTime().getYear());
-                    put("seal1", null);
-                    put("seal2", null);
-                    put("formTypeCh", formType);
-                    put("formTypeEn", insOrder.getFormType());
-                }});
-        try {
-            String name = insReport.getCode().replace("/", "") + ".docx";
-            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
-            insReport.setUrl("/word/" + name);
-            insReportMapper.insert(insReport);
-            insOrder.setInsState(5);
-            insOrderMapper.updateById(insOrder);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-        // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
-        String path = wordUrl + "/" + insReport.getCode().replace("/", "") + ".docx";
-        try {
-            FileInputStream stream = new FileInputStream(path);
-            XWPFDocument document = new XWPFDocument(stream);
-            List<XWPFTable> xwpfTables = document.getTables();
-            for (int i = 1; i < xwpfTables.size() - (deviceList == null ? 1 : 2); 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<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);
-        }
-        //澶勭悊涓嫳鏂囨崲琛岀殑闂
-        try {
-            FileInputStream stream1 = new FileInputStream(path);
-            XWPFDocument document1 = new XWPFDocument(stream1);
-            List<XWPFTable> xwpfTables1 = document1.getTables();
-            for (int i = 1; i < xwpfTables1.size() - (deviceList == null ? 1 : 2); i++) {
-                for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
-                    for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
-                        if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
-                            String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
-                            String[] split = text.split("@");
-                            xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
-                            XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
-                            XWPFRun run = xwpfParagraph.createRun();
-                            run.setText(split[0]);
-                            if (ObjectUtils.isNotNull(split[1])) {
-                                run.addBreak();
-                                run.setText(split[1]);
-                            }
-                            xwpfParagraph.setAlignment(org.apache.poi.xwpf.usermodel.ParagraphAlignment.CENTER);
-                        }
-                    }
-                }
-            }
-            FileOutputStream fileOutputStream1 = new FileOutputStream(path);
-            document1.write(fileOutputStream1);
-            fileOutputStream1.close();
-        } catch (FileNotFoundException e) {
-            throw new RuntimeException(e);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-
-    // 璁$畻琛岄珮鐨勬柟娉�
-    private int calculateRowHeight(RowRenderData rowRenderData) {
-        // 瀹炵幇璁$畻閫昏緫锛屽彲鑳介渶瑕佹牴鎹崟鍏冩牸鍐呭鍜屽瓧浣撶瓑鍙傛暟杩涜璁$畻
-        int height = 0;
-        for (CellRenderData cell : rowRenderData.getCells()) {
-            int cellHeight = estimateCellHeight(cell); // 鏍规嵁鍐呭浼扮畻鍗曞厓鏍奸珮搴�
-            if (cellHeight > height) {
-                height = cellHeight;
-            }
-        }
-        return height;
-    }
-
-    //鏍规嵁鍗曞厓鏍肩殑鏂囨湰鍐呭璁$畻瀹為檯琛岄珮
-    private int estimateCellHeight(CellRenderData cellRenderData) {
-        // 鍋囪榛樿琛岄珮鏄�40
-        int defaultHeight = 40;
-        // 鑾峰彇鍗曞厓鏍间腑鐨勬墍鏈夋钀�
-        List<ParagraphRenderData> paragraphs = cellRenderData.getParagraphs();
-        int estimatedHeight = 0;
-        // 閬嶅巻娈佃惤锛屼及绠楁瘡涓钀界殑楂樺害
-        for (ParagraphRenderData paragraph : paragraphs) {
-            List<RenderData> contents = paragraph.getContents();
-            for (RenderData content : contents) {
-                if (content instanceof TextRenderData) {
-                    TextRenderData text = (TextRenderData) content;
-                    Style style = text.getStyle();
-                    // 鍋囪姣忚鏂囨湰鐨勯珮搴︿负瀛椾綋澶у皬鐨�1.2鍊�
-                    Double fontSize = Objects.isNull(style.getFontSize()) ? 12.0 : style.getFontSize();
-                    int lines = (int) Math.ceil(text.getText().length() / 15.0); // 鍋囪姣忚绾�15涓瓧绗�
-                    int textHeight = (int) (fontSize * 1.2 * lines);
-                    // 绱姞娈佃惤鐨勯珮搴�
-                    estimatedHeight += textHeight;
-                }
-            }
-        }
-        // 杩斿洖鏈�澶у�硷紝纭繚楂樺害涓嶄綆浜庨粯璁ら珮搴�
-        return Math.max(estimatedHeight, defaultHeight);
     }
 }
 
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 9753772..62239b9 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
@@ -1,5 +1,8 @@
 package com.yuanchu.mom.utils;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.deepoove.poi.XWPFTemplate;
@@ -8,6 +11,8 @@
 import com.deepoove.poi.data.*;
 import com.deepoove.poi.data.style.*;
 import com.deepoove.poi.util.TableTools;
+import com.yuanchu.mom.dto.InsReportDto1;
+import com.yuanchu.mom.dto.SampleProductDto;
 import com.yuanchu.mom.exception.ErrorException;
 import com.yuanchu.mom.mapper.*;
 import com.yuanchu.mom.pojo.*;
@@ -24,8 +29,11 @@
 import java.io.*;
 import java.nio.file.Files;
 import java.nio.file.Paths;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 @Component
@@ -41,7 +49,22 @@
     private InsOrderFileMapper insOrderFileMapper;
 
     @Resource
+    CustomMapper customMapper;
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Resource
+    InsReportMapper insReportMapper;
+
+    @Resource
     private InsSampleMapper insSampleMapper;
+
+    @Resource
+    StandardMethodListMapper standardMethodListMapper;
+
+    @Value("${twoCode}")
+    private String twoCode;
 
     @Resource
     private InsProductMapper insProductMapper;
@@ -49,12 +72,20 @@
     @Resource
     private InsProductResult2Mapper insProductResult2Mapper;
 
+    @Resource
+    private InsProductResultMapper insProductResultMapper;
 
-    //鐢熸垚鎶ュ憡
+    @Resource
+    UserMapper userMapper;
+
+    @Resource
+    InsSampleUserMapper insSampleUserMapper;
+
+
+    //鐢熸垚绔欑偣鐢佃矾璇曢獙鎶ュ憡
     public void generateWord(String note, String term, InsOrderState insOrderState) {
         AtomicInteger lable = new AtomicInteger(1);
         AtomicInteger index = new AtomicInteger();
-        Set<String> itemSet = new HashSet<>();
         String title = term + "鐢佃矾鍙傛暟";
         List<Map<String, Object>> tables = new ArrayList<>();
         //鏌ヨ璁㈠崟
@@ -84,7 +115,10 @@
                     }
                 }
                 //棰戠偣鏁�
-                long often = insProductResult2s.stream().filter(insProductResult2 -> ObjectUtils.isNotEmpty(insProductResult2.getOften())).distinct().count();
+                long often = insProductResult2s.stream().filter(insProductResult2 -> insProductResult2.getFrequency().equals(s))
+                        .filter(insProductResult2 ->
+                                insProductMapper.selectById(insProductResult2.getInsProductId()).getInspectionItemSubclass().equals("浜掕皟")
+                        ).filter(insProductResult2 -> ObjectUtils.isNotEmpty(insProductResult2.getOften())).distinct().count();
                 List<String> inspectionItemSubclass = insProducts.stream().map(InsProduct::getInspectionItemSubclass).collect(Collectors.toList());
                 //琛屾暟
                 int aa = 0;
@@ -150,6 +184,7 @@
                     }
                 }
                 List<RowRenderData> rows = new ArrayList<>();
+                Set<String> itemSet = new HashSet<>();
                 int cc = 0;
                 int dd = 0;
                 int ee = 0;
@@ -273,10 +308,18 @@
                                         if (i % 2 == 0) {
                                             //鏈�宸��
                                             String value = result2s.get(0).getValue().replaceAll("[\\[\\]\"]", "");
-                                            textRenderData.setText(value.split(",")[(j - 5) + (i - 1) / 2 * (Math.min(ports, 8))]);
+                                            try {
+                                                textRenderData.setText(value.split(",")[(j - 5) + (i - 1) / 2 * (Math.min(ports, 8))]);
+                                            } catch (Exception e) {
+                                                textRenderData.setText("");
+                                            }
                                         } else {
                                             //绔彛
-                                            textRenderData.setText(result2s.get(0).getPort().split(",")[(j - 5) + (i / 2) * (Math.min(ports, 8))]);
+                                            try {
+                                                textRenderData.setText(result2s.get(0).getPort().split(",")[(j - 5) + (i / 2) * (Math.min(ports, 8))]);
+                                            } catch (Exception e) {
+                                                textRenderData.setText("");
+                                            }
                                         }
                                         renderData.add(textRenderData);
                                         paragraphRenderData.setContents(renderData);
@@ -353,7 +396,11 @@
                                         cells.add(cellRenderData);
                                     } else if (j % 2 == 0) {
                                         String value = result2s.get(0).getValue().replaceAll("[\\[\\]\"]", "");
-                                        textRenderData.setText(value.split(",")[(j - 6) / 2 + (i - cc - 1) * 4] + "鈭�5" + i + (j - 6));
+                                        try {
+                                            textRenderData.setText(value.split(",")[(j - 6) / 2 + (i - cc - 1) * 4] + "鈭�5" + i + (j - 6));
+                                        } catch (Exception e) {
+                                            textRenderData.setText("");
+                                        }
                                         renderData.add(textRenderData);
                                         paragraphRenderData.setContents(renderData);
                                         paragraphRenderDataList.add(paragraphRenderData);
@@ -361,7 +408,11 @@
                                         cells.add(cellRenderData);
                                     } else {
                                         String value = result2s.get(0).getValue().replaceAll("[\\[\\]\"]", "");
-                                        textRenderData.setText(value.split(",")[(j - 5) / 2 + (i - cc - 1) * 4] + "鈭�5" + i + (j - 5));
+                                        try {
+                                            textRenderData.setText(value.split(",")[(j - 5) / 2 + (i - cc - 1) * 4] + "鈭�5" + i + (j - 5));
+                                        } catch (Exception e) {
+                                            textRenderData.setText("");
+                                        }
                                         renderData.add(textRenderData);
                                         paragraphRenderData.setContents(renderData);
                                         paragraphRenderDataList.add(paragraphRenderData);
@@ -437,7 +488,11 @@
                                         cells.add(cellRenderData);
                                     } else if (j % 2 == 0) {
                                         String value = result2s.get(0).getValue().replaceAll("[\\[\\]\"]", "");
-                                        textRenderData.setText(value.split(",")[(j - 6) / 2 + (i - (dd == 0 ? cc : dd) - 1) * 4] + "鈭�5" + i + (j - 6));
+                                        try {
+                                            textRenderData.setText(value.split(",")[(j - 6) / 2 + (i - (dd == 0 ? cc : dd) - 1) * 4] + "鈭�5" + i + (j - 6));
+                                        } catch (Exception e) {
+                                            textRenderData.setText("");
+                                        }
                                         renderData.add(textRenderData);
                                         paragraphRenderData.setContents(renderData);
                                         paragraphRenderDataList.add(paragraphRenderData);
@@ -445,7 +500,11 @@
                                         cells.add(cellRenderData);
                                     } else {
                                         String value = result2s.get(0).getValue().replaceAll("[\\[\\]\"]", "");
-                                        textRenderData.setText(value.split(",")[(j - 5) / 2 + (i - (dd == 0 ? cc : dd) - 1) * 4] + "鈭�5" + i + (j - 5));
+                                        try {
+                                            textRenderData.setText(value.split(",")[(j - 5) / 2 + (i - (dd == 0 ? cc : dd) - 1) * 4] + "鈭�5" + i + (j - 5));
+                                        } catch (Exception e) {
+                                            textRenderData.setText("");
+                                        }
                                         renderData.add(textRenderData);
                                         paragraphRenderData.setContents(renderData);
                                         paragraphRenderDataList.add(paragraphRenderData);
@@ -514,11 +573,11 @@
                                             textRenderData.setText("/");
                                         } else {
                                             if (products.get(0).getInsResult() == 1) {
-                                                textRenderData.setText("鍚堟牸鈭�8" + index+ ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) + (angles - 1)) / (angles + 1) - 1));
+                                                textRenderData.setText("鍚堟牸鈭�8" + index + ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) + (angles - 1)) / (angles + 1) - 1));
                                             } else if (products.get(0).getInsResult() == 0) {
-                                                textRenderData.setText("涓嶅悎鏍尖垜8" + index+ ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) + (angles - 1)) / (angles + 1) - 1));
+                                                textRenderData.setText("涓嶅悎鏍尖垜8" + index + ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) + (angles - 1)) / (angles + 1) - 1));
                                             } else {
-                                                textRenderData.setText("涓嶅垽瀹氣垜8" + index+ ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) + (angles - 1)) / (angles + 1) - 1));
+                                                textRenderData.setText("涓嶅垽瀹氣垜8" + index + ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) + (angles - 1)) / (angles + 1) - 1));
                                             }
                                         }
                                         renderData.add(textRenderData);
@@ -528,11 +587,15 @@
                                         cells.add(cellRenderData);
                                     } else {
                                         if ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee)) % (angles + 1) == 1) {
-                                            textRenderData.setText(result2s.get((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee)) / (2 * (angles + 1))).getOften() + "鈭�6" + index);
+                                            textRenderData.setText(result2s.get((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee)) / portRow / (angles + 1)).getOften() + "鈭�6" + i + index);
                                         } else {
-                                            String[] value = result2s.get((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee)) / (2 * (angles + 1))).getValue().split("\\],\\[");
+                                            String[] value = result2s.get((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee)) / portRow / (angles + 2)).getValue().split("\\],\\[");
                                             String[] split = value[(i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) - 2) % (angles + 1)].replaceAll("[\\[\\]\"]", "").split(",");
-                                            textRenderData.setText(split[(j - 5) + ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) + (angles - 1)) / (angles + 1) - 1) * (Math.min(ports, 8))]);
+                                            try {
+                                                textRenderData.setText(split[((j - 5) + ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) - 1) / (angles + 1) % portRow) * (Math.min(ports, 8)))]);
+                                            } catch (Exception e) {
+                                                textRenderData.setText("");
+                                            }
                                         }
                                         renderData.add(textRenderData);
                                         paragraphRenderData.setContents(renderData);
@@ -606,11 +669,11 @@
                                         } else {
                                             //缁撹
                                             if (products.get(0).getInsResult() == 1) {
-                                                textRenderData.setText("鍚堟牸鈭�8" + index+ ((i + (angles - 1)) / (angles + 1) - 1));
+                                                textRenderData.setText("鍚堟牸鈭�8" + index + ((i + (angles - 1)) / (angles + 1) - 1));
                                             } else if (products.get(0).getInsResult() == 0) {
-                                                textRenderData.setText("涓嶅悎鏍尖垜8" + index+ ((i + (angles - 1)) / (angles + 1) - 1));
+                                                textRenderData.setText("涓嶅悎鏍尖垜8" + index + ((i + (angles - 1)) / (angles + 1) - 1));
                                             } else {
-                                                textRenderData.setText("涓嶅垽瀹氣垜8" + index+ ((i + (angles - 1)) / (angles + 1) - 1));
+                                                textRenderData.setText("涓嶅垽瀹氣垜8" + index + ((i + (angles - 1)) / (angles + 1) - 1));
                                             }
                                         }
                                         renderData.add(textRenderData);
@@ -622,12 +685,20 @@
                                         //鍏朵綑鍒�
                                         if (i % (angles + 1) == 1) {
                                             //绔彛
-                                            textRenderData.setText(result2s.get(0).getPort().split(",")[(j - 5) + (i / (angles + 1)) * (Math.min(ports, 8))]);
+                                            try {
+                                                textRenderData.setText(result2s.get(0).getPort().split(",")[(j - 5) + (i / (angles + 1)) * (Math.min(ports, 8))]);
+                                            } catch (Exception e) {
+                                                textRenderData.setText("");
+                                            }
                                         } else {
                                             //鏈�宸��
                                             String[] value = result2s.get(0).getValue().split("\\],\\[");
                                             String[] split = value[(i + (angles - 1)) % (angles + 1)].replaceAll("[\\[\\]\"]", "").split(",");
-                                            textRenderData.setText(split[(j - 5) + ((i + (angles - 1)) / (angles + 1) - 1) * (Math.min(ports, 8))]);
+                                            try {
+                                                textRenderData.setText(split[(j - 5) + ((i + (angles - 1)) / (angles + 1) - 1) * (Math.min(ports, 8))]);
+                                            } catch (Exception e) {
+                                                textRenderData.setText("");
+                                            }
                                         }
                                         renderData.add(textRenderData);
                                         paragraphRenderData.setContents(renderData);
@@ -703,11 +774,11 @@
                                             } else {
                                                 //缁撹
                                                 if (products.get(0).getInsResult() == 1) {
-                                                    textRenderData.setText("鍚堟牸鈭�8" + index+((i - cc) / (angles + 2)));
+                                                    textRenderData.setText("鍚堟牸鈭�8" + index + ((i - cc) / (angles + 2)));
                                                 } else if (products.get(0).getInsResult() == 0) {
-                                                    textRenderData.setText("涓嶅悎鏍尖垜8" + index+((i - cc) / (angles + 2)));
+                                                    textRenderData.setText("涓嶅悎鏍尖垜8" + index + ((i - cc) / (angles + 2)));
                                                 } else {
-                                                    textRenderData.setText("涓嶅垽瀹氣垜8" + index+((i - cc) / (angles + 2)));
+                                                    textRenderData.setText("涓嶅垽瀹氣垜8" + index + ((i - cc) / (angles + 2)));
                                                 }
                                             }
                                             renderData.add(textRenderData);
@@ -721,13 +792,13 @@
                                                 //绔彛
                                                 if (j % 2 == 0) {
                                                     try {
-                                                        textRenderData.setText(result2s.get(0).getPort().split(",")[(j - 6) / 2 + ((i - cc) / (angles + 2)) * (ports > 8 ? 4 : (ports + 1) / 2)] + "鈭�5" + i + (j - 6));
+                                                        textRenderData.setText(result2s.get(0).getPort().split(",")[(j - 6) / 2 + ((i - cc) / (angles + 1)) * (ports > 8 ? 4 : (ports + 1) / 2)] + "鈭�5" + i + (j - 6));
                                                     } catch (Exception e) {
                                                         textRenderData.setText("");
                                                     }
                                                 } else {
                                                     try {
-                                                        textRenderData.setText(result2s.get(0).getPort().split(",")[(j - 5) / 2 + ((i - cc) / (angles + 2)) * (ports > 8 ? 4 : (ports + 1) / 2)] + "鈭�5" + i + (j - 5));
+                                                        textRenderData.setText(result2s.get(0).getPort().split(",")[(j - 5) / 2 + ((i - cc) / (angles + 1)) * (ports > 8 ? 4 : (ports + 1) / 2)] + "鈭�5" + i + (j - 5));
                                                     } catch (Exception e) {
                                                         textRenderData.setText("");
                                                     }
@@ -826,11 +897,11 @@
                                             } else {
                                                 //缁撹
                                                 if (products.get(0).getInsResult() == 1) {
-                                                    textRenderData.setText("鍚堟牸鈭�8" + index+ ((i - (dd == 0 ? cc : dd)) / (angles + 2)));
+                                                    textRenderData.setText("鍚堟牸鈭�8" + index + ((i - (dd == 0 ? cc : dd)) / (angles + 2)));
                                                 } else if (products.get(0).getInsResult() == 0) {
-                                                    textRenderData.setText("涓嶅悎鏍尖垜8" + index+ ((i - (dd == 0 ? cc : dd)) / (angles + 2)));
+                                                    textRenderData.setText("涓嶅悎鏍尖垜8" + index + ((i - (dd == 0 ? cc : dd)) / (angles + 2)));
                                                 } else {
-                                                    textRenderData.setText("涓嶅垽瀹氣垜8" + index+ ((i - (dd == 0 ? cc : dd)) / (angles + 2)));
+                                                    textRenderData.setText("涓嶅垽瀹氣垜8" + index + ((i - (dd == 0 ? cc : dd)) / (angles + 2)));
                                                 }
                                             }
                                             renderData.add(textRenderData);
@@ -844,13 +915,13 @@
                                                 //绔彛
                                                 if (j % 2 == 0) {
                                                     try {
-                                                        textRenderData.setText(result2s.get(0).getPort().split(",")[(j - 6) / 2 + ((i - (dd == 0 ? cc : dd)) / (angles + 2)) * (ports > 8 ? 4 : (ports + 1) / 2)] + "鈭�5" + i + (j - 6));
+                                                        textRenderData.setText(result2s.get(0).getPort().split(",")[(j - 6) / 2 + ((i - (dd == 0 ? cc : dd)) / (angles + 1)) * (ports > 8 ? 4 : (ports + 1) / 2)] + "鈭�5" + i + (j - 6));
                                                     } catch (Exception e) {
                                                         textRenderData.setText("");
                                                     }
                                                 } else {
                                                     try {
-                                                        textRenderData.setText(result2s.get(0).getPort().split(",")[(j - 5) / 2 + ((i - (dd == 0 ? cc : dd)) / (angles + 2)) * (ports > 8 ? 4 : (ports + 1) / 2)] + "鈭�5" + i + (j - 5));
+                                                        textRenderData.setText(result2s.get(0).getPort().split(",")[(j - 5) / 2 + ((i - (dd == 0 ? cc : dd)) / (angles + 1)) * (ports > 8 ? 4 : (ports + 1) / 2)] + "鈭�5" + i + (j - 5));
                                                     } catch (Exception e) {
                                                         textRenderData.setText("");
                                                     }
@@ -944,11 +1015,11 @@
                                         } else {
                                             //缁撹
                                             if (products.get(0).getInsResult() == 1) {
-                                                textRenderData.setText("鍚堟牸鈭�8" + index+ ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) + (angles - 1)) / (angles + 1) - 1));
+                                                textRenderData.setText("鍚堟牸鈭�8" + index + ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) + (angles - 1)) / (angles + 1) - 1));
                                             } else if (products.get(0).getInsResult() == 0) {
-                                                textRenderData.setText("涓嶅悎鏍尖垜8" + index+ ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) + (angles - 1)) / (angles + 1) - 1));
+                                                textRenderData.setText("涓嶅悎鏍尖垜8" + index + ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) + (angles - 1)) / (angles + 1) - 1));
                                             } else {
-                                                textRenderData.setText("涓嶅垽瀹氣垜8" + index+ ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) + (angles - 1)) / (angles + 1) - 1));
+                                                textRenderData.setText("涓嶅垽瀹氣垜8" + index + ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) + (angles - 1)) / (angles + 1) - 1));
                                             }
                                         }
                                         renderData.add(textRenderData);
@@ -960,12 +1031,16 @@
                                         //鍏朵綑鍒�
                                         if ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee)) % (angles + 1) == 1) {
                                             //棰戠偣
-                                            textRenderData.setText(result2s.get((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee)) / (angles + 1)).getOften() + "鈭�6" + index);
+                                            textRenderData.setText(result2s.get((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee)) / portRow / (angles + 1)).getOften() + "鈭�6" + i + index);
                                         } else {
                                             //鏈�宸��
-                                            String[] value = result2s.get((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee)) / (angles + 1)).getValue().split("\\],\\[");
+                                            String[] value = result2s.get((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee)) / portRow / (angles + 2)).getValue().split("\\],\\[");
                                             String[] split = value[(i + (angles - 1)) % (angles + 1)].replaceAll("[\\[\\]\"]", "").split(",");
-                                            textRenderData.setText(split[(j - 5) + (((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) + (angles - 1)) / (angles + 1) - 1) * (Math.min(ports, 8)))]);
+                                            try {
+                                                textRenderData.setText(split[((j - 5) + ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) - 1) / (angles + 1) % portRow)* (Math.min(ports, 8)))]);
+                                            } catch (Exception e) {
+                                                textRenderData.setText("");
+                                            }
                                         }
                                         renderData.add(textRenderData);
                                         paragraphRenderData.setContents(renderData);
@@ -1058,7 +1133,7 @@
                                             //鏈�宸��
                                             String[] value = result2s.get(0).getValue().split("\\],\\[");
                                             String[] split = value[(i + (angles - 1)) % (angles + 1)].replaceAll("[\\[\\]\"]", "").split(",");
-                                            textRenderData.setText(split[0] + "鈭�7" + i + j);
+                                            textRenderData.setText(split[0] + "鈭�7" + i );
                                         }
                                         renderData.add(textRenderData);
                                         paragraphRenderData.setContents(renderData);
@@ -1151,7 +1226,7 @@
                                             //鏈�宸��
                                             String[] value = result2s.get(0).getValue().split("\\],\\[");
                                             String[] split = value[(i + (angles - 1)) % (angles + 1)].replaceAll("[\\[\\]\"]", "").split(",");
-                                            textRenderData.setText(split[0] + "鈭�7" + i + j);
+                                            textRenderData.setText(split[0] + "鈭�7" + i );
                                         }
                                         renderData.add(textRenderData);
                                         paragraphRenderData.setContents(renderData);
@@ -1220,19 +1295,18 @@
                                             paragraphRenderDataList.add(paragraphRenderData);
                                             cellRenderData.setParagraphs(paragraphRenderDataList);
                                             cells.add(cellRenderData);
-                                        }
-                                        else if (j == bb - 1) {
+                                        } else if (j == bb - 1) {
                                             //鏈�鍚庝竴鍒�
                                             if ((i - (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh)) % (angles + 1) == 1) {
                                                 textRenderData.setText("/");
                                             } else {
                                                 //缁撹
                                                 if (products.get(0).getInsResult() == 1) {
-                                                    textRenderData.setText("鍚堟牸鈭�8" + index+ ((i - (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh)) / (angles + 2)));
+                                                    textRenderData.setText("鍚堟牸鈭�8" + index + ((i - (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh)) / (angles + 2)));
                                                 } else if (products.get(0).getInsResult() == 0) {
-                                                    textRenderData.setText("涓嶅悎鏍尖垜8" + index+ ((i - (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh)) / (angles + 2)));
+                                                    textRenderData.setText("涓嶅悎鏍尖垜8" + index + ((i - (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh)) / (angles + 2)));
                                                 } else {
-                                                    textRenderData.setText("涓嶅垽瀹氣垜8" + index+ ((i - (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh)) / (angles + 2)));
+                                                    textRenderData.setText("涓嶅垽瀹氣垜8" + index + ((i - (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh)) / (angles + 2)));
                                                 }
                                             }
                                             renderData.add(textRenderData);
@@ -1240,8 +1314,7 @@
                                             paragraphRenderDataList.add(paragraphRenderData);
                                             cellRenderData.setParagraphs(paragraphRenderDataList);
                                             cells.add(cellRenderData);
-                                        }
-                                        else {
+                                        } else {
                                             //鍏朵綑鍒�
                                             if ((i - (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh)) % (angles + 1) == 1) {
                                                 //棰戞
@@ -1313,8 +1386,7 @@
                                             paragraphRenderDataList.add(paragraphRenderData);
                                             cellRenderData.setParagraphs(paragraphRenderDataList);
                                             cells.add(cellRenderData);
-                                        }
-                                        else if (j == 4) {
+                                        } else if (j == 4) {
                                             //绗簲鍒�
                                             if ((i - (mm == 0 ? (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh) : mm)) % (angles + 1) == 1) {
                                                 //棰戞
@@ -1328,19 +1400,18 @@
                                             paragraphRenderDataList.add(paragraphRenderData);
                                             cellRenderData.setParagraphs(paragraphRenderDataList);
                                             cells.add(cellRenderData);
-                                        }
-                                        else if (j == bb - 1) {
+                                        } else if (j == bb - 1) {
                                             //鏈�鍚庝竴鍒�
                                             if ((i - (mm == 0 ? (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh) : mm)) % (angles + 1) == 1) {
                                                 textRenderData.setText("/");
                                             } else {
                                                 //缁撹
                                                 if (products.get(0).getInsResult() == 1) {
-                                                    textRenderData.setText("鍚堟牸鈭�8" + index+ ((i - (mm == 0 ? (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh) : mm)) / (angles + 2)));
+                                                    textRenderData.setText("鍚堟牸鈭�8" + index + ((i - (mm == 0 ? (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh) : mm)) / (angles + 2)));
                                                 } else if (products.get(0).getInsResult() == 0) {
-                                                    textRenderData.setText("涓嶅悎鏍尖垜8" + index+ ((i - (mm == 0 ? (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh) : mm)) / (angles + 2)));
+                                                    textRenderData.setText("涓嶅悎鏍尖垜8" + index + ((i - (mm == 0 ? (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh) : mm)) / (angles + 2)));
                                                 } else {
-                                                    textRenderData.setText("涓嶅垽瀹氣垜8" + index+ ((i - (mm == 0 ? (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh) : mm)) / (angles + 2)));
+                                                    textRenderData.setText("涓嶅垽瀹氣垜8" + index + ((i - (mm == 0 ? (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh) : mm)) / (angles + 2)));
                                                 }
                                             }
                                             renderData.add(textRenderData);
@@ -1407,6 +1478,7 @@
                 table.put("table", tableRenderData);
                 tables.add(table);
                 lable.getAndIncrement();
+                index.getAndIncrement();
             });
         });
         String url;
@@ -1518,4 +1590,493 @@
         insOrderFile.setFileUrl(name);
         insOrderFileMapper.insert(insOrderFile);
     }
+
+    //鐢熸垚鎬绘姤鍛�
+    public void generateReport(Integer orderId, List<InsReportDto1> insReportDto1s) {
+        LocalDateTime now = LocalDateTime.now();
+        InsOrder insOrder = insOrderMapper.selectById(orderId);
+        //濮旀墭閮ㄩ棬 departLims
+        String departLims = userMapper.selectDepartLims(insOrder.getPrepareUser());
+        //samples鏄繃婊ゆ帀娌℃湁妫�楠岄」鐩殑鏍峰搧
+        List<SampleProductDto> samples = insSampleMapper.selectSampleProductListByOrderId(orderId);
+        String sampleCode = samples.get(0).getSampleCode();
+        InsReport insReport = new InsReport();
+        insReport.setCode(insOrder.getEntrustCode().replace("WT", "TXJC"));
+        insReport.setInsOrderId(orderId);
+        Set<String> standardMethod = new HashSet<>();
+        Set<String> deviceSet = new HashSet<>();
+        Set<String> models = new HashSet<>();
+
+        AtomicReference<Integer> productSize = new AtomicReference<>(0);
+        AtomicReference<Integer> productSize1 = new AtomicReference<>(0);
+        AtomicReference<Integer> productSize2 = new AtomicReference<>(0);
+        AtomicReference<Integer> productSize3 = new AtomicReference<>(0);
+        String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
+        samples.forEach(s -> {
+            models.add(s.getModel());
+            standardMethod.addAll(standardMethodListMapper.selectList(Wrappers.<StandardMethodList>lambdaQuery()
+                    .in(StandardMethodList::getId, Arrays.stream(s.getStandardMethodListId().replaceAll("[\\[\\]]", "").split(","))
+                            .map(String::trim).map(Integer::parseInt).collect(Collectors.toList()))).stream().map(aa -> {
+                return aa.getCode() + " " + aa.getName();
+            }).distinct().collect(Collectors.toList()));
+            //鎬绘暟
+            Long productCount = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+                    .eq(InsProduct::getInsSampleId, s.getId()));
+            productSize.set(productSize.get() + Integer.parseInt(productCount + ""));
+            //涓嶅垽瀹�
+            Long productCount1 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+                    .eq(InsProduct::getInsSampleId, s.getId())
+                    .eq(InsProduct::getInsResult, 3));
+            productSize1.set(productSize1.get() + Integer.parseInt(productCount1 + ""));
+            //涓嶅悎鏍�
+            Long productCount2 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+                    .eq(InsProduct::getInsSampleId, s.getId())
+                    .eq(InsProduct::getInsResult, 0));
+            productSize2.set(productSize2.get() + Integer.parseInt(productCount2 + ""));
+            //鍚堟牸
+            Long productCount3 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+                    .eq(InsProduct::getInsSampleId, s.getId())
+                    .eq(InsProduct::getInsResult, 1));
+            productSize3.set(productSize3.get() + Integer.parseInt(productCount3 + ""));
+            //灏嗛」鐩寜鐓х珯鐐硅繘琛屽垎绫�
+            Map<String, List<InsProduct>> listMap = s.getInsProduct().stream().collect(Collectors.groupingBy(InsProduct::getLaboratory));
+            // 鍒涘缓涓�涓� Map 灏嗙珯鐐瑰拰椤圭洰ID鐨勬槧灏勫叧绯�
+            Map<String, Set<Integer>> labToDeviceMap = new HashMap<>();
+            // 鑾峰彇鎵�鏈夌珯鐐圭殑椤圭洰ID 鍒楄〃
+            for (Map.Entry<String, List<InsProduct>> entry : listMap.entrySet()) {
+                Set<Integer> productIds = entry.getValue().stream()
+                        .map(InsProduct::getId)
+                        .collect(Collectors.toSet());
+                labToDeviceMap.put(entry.getKey(), productIds);
+            }
+            for (InsReportDto1 insReportDto1 : insReportDto1s) {
+                String laboratory = insReportDto1.getLaboratory();
+                if (!labToDeviceMap.containsKey(laboratory)) {
+                    continue;
+                }
+                Set<Integer> productIds = labToDeviceMap.get(laboratory);
+                Integer num = insReportDto1.getNum();
+                //鏅�氳瘯楠岀粨鏋滆〃
+                List<InsProductResult> insProductResults = insProductResultMapper.selectList(
+                        Wrappers.<InsProductResult>lambdaQuery()
+                                .eq(InsProductResult::getNum, num)
+                                .in(InsProductResult::getInsProductId, productIds));
+                for (InsProductResult insProductResult : insProductResults) {
+                    List<JSONObject> jsonObjects = JSON.parseArray(insProductResult.getEquipValue(), JSONObject.class);
+                    for (JSONObject jsonObject : jsonObjects) {
+                        String value = jsonObject.getString("v");
+                        if (value != null && !value.isEmpty()) {
+                            deviceSet.add(value);
+                        }
+                    }
+                }
+                //鐢佃矾璇曢獙缁撴灉琛�
+                List<InsProductResult2> insProductResult2s = insProductResult2Mapper.selectList(
+                        Wrappers.<InsProductResult2>lambdaQuery()
+                                .eq(InsProductResult2::getNum, num)
+                                .in(InsProductResult2::getInsProductId, productIds));
+                for (InsProductResult2 result2 : insProductResult2s) {
+                    String equipValue = result2.getEquipValue();
+                    if (equipValue != null && !equipValue.isEmpty()) {
+                        deviceSet.add(equipValue);
+                    }
+                }
+            }
+        });
+
+        /*妫�楠屾儏鍐典竴瑙堣〃*/
+        List<Map<String, String>> tables = null;
+        List<Map<String, Object>> tables2 = null;
+        List<Map<String, Object>> tables3 = null;
+        List<Map<String, Object>> tables4 = null;
+        Map<String, String> table = null;
+        Integer indexs = 1;
+        //鍒ゆ柇鏄惁鏈夌數璺瘯楠�,鐜璇曢獙
+        List<String> strings = insReportDto1s.stream().map(InsReportDto1::getLaboratory).distinct().collect(Collectors.toList());
+        if (strings.contains("鐢佃矾璇曢獙")) {
+            strings.remove("鐢佃矾璇曢獙");
+            strings.remove("杩戝満");
+            strings.remove("杩滃満");
+            List<Integer> productIdes = samples.stream().flatMap(sampleProductDto ->
+                    sampleProductDto.getInsProduct().stream().map(InsProduct::getId)).collect(Collectors.toList());
+            List<Integer> collect = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
+                    .in(InsProductResult2::getInsProductId, productIdes))
+                    .stream().map(InsProductResult2::getResult).distinct().collect(Collectors.toList());
+            //濡傛灉鏈夌幆澧冭瘯楠�
+            if (strings.size() > 0) {
+                table.put("indexs", indexs + "");
+                table.put("term", "鐜璇曢獙鍓嶇數璺弬鏁�");
+                if (collect.contains(0)) {
+                    table.put("result", "涓嶅悎鏍�");
+                } else {
+                    table.put("result", "鍚堟牸");
+                }
+                tables.add(table);
+                indexs += 1;
+
+                table.put("indexs", "鐜璇曢獙:" + String.join("銆�", strings) + "鈭�1");
+                table.put("term", "鐜璇曢獙:" + String.join("銆�", strings) + "鈭�1");
+                table.put("result", "鐜璇曢獙:" + String.join("銆�", strings) + "鈭�1");
+                tables.add(table);
+
+                table.put("indexs", indexs + "");
+                table.put("term", "鐜璇曢獙鍚庣數璺弬鏁�");
+                if (collect.contains(0)) {
+                    table.put("result", "涓嶅悎鏍�");
+                } else {
+                    table.put("result", "鍚堟牸");
+                }
+                tables.add(table);
+                indexs += 1;
+
+                /*鍒涘缓鐜璇曢獙鏉′欢琛�2*(椤圭洰鏁�+1)*/
+                List<InsProduct> products = samples.stream().flatMap(sampleProductDto -> sampleProductDto.getInsProduct().stream()
+                        .filter(insProduct -> !insProduct.getInspectionItem().equals("鐢佃矾璇曢獙"))
+                        .filter(insProduct -> !insProduct.getInspectionItem().equals("杈愬皠璇曢獙"))).collect(Collectors.toList());
+                List<RowRenderData> rows = new ArrayList<>();
+                //琛屾暟
+                for (int i = 0; i < products.size() + 1; 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 < 2; 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 (i == 0) {
+                            //绗竴琛�
+                            if (j == 0) {
+                                //绗竴鍒�
+                                textRenderData.setText("椤圭洰");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                //绗簩鍒�
+                                textRenderData.setText("璇曢獙瑕佹眰");
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            }
+                        } else {
+                            //鍏朵綑琛�
+                            if (j == 0) {
+                                //绗竴鍒�
+                                textRenderData.setText(products.get(i - 1).getInspectionItemSubclass());
+                                renderData.add(textRenderData);
+                                paragraphRenderData.setContents(renderData);
+                                paragraphRenderDataList.add(paragraphRenderData);
+                                cellRenderData.setParagraphs(paragraphRenderDataList);
+                                cells.add(cellRenderData);
+                            } else {
+                                textRenderData.setText(products.get(i - 1).getTell());
+                                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> table4 = new HashMap<>();
+                table4.put("table4", tableRenderData);
+                tables4.add(table4);
+            } else {
+                table.put("indexs", indexs + "");
+                table.put("term", "鐢佃矾鍙傛暟");
+                if (collect.contains(0)) {
+                    table.put("result", "涓嶅悎鏍�");
+                } else {
+                    table.put("result", "鍚堟牸");
+                }
+                tables.add(table);
+                indexs += 1;
+            }
+            /*鎷兼帴鍕鹃�夌殑鐢佃矾璇曢獙琛�*/
+        }
+        if (strings.contains("杩戝満") || strings.contains("杩滃満")) {
+            table.put("indexs", indexs + "");
+            table.put("term", "杈愬皠鏂瑰悜鍥惧弬鏁�");
+            table.put("result", "涓嶅垽瀹�");
+            tables.add(table);
+        }
+
+
+        String url;
+        try {
+            InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
+            File file = File.createTempFile("temp", ".tmp");
+            OutputStream outputStream = new FileOutputStream(file);
+            IOUtils.copy(inputStream, outputStream);
+            url = file.getAbsolutePath();
+        } catch (FileNotFoundException e) {
+            throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        StringBuilder standardMethod2 = new StringBuilder();
+        for (String s : standardMethod) {
+            standardMethod2.append("锛沑n").append(s);
+        }
+        standardMethod2.append("锛沑n").append("GB/T 9410-2008 銆婄Щ鍔ㄩ�氫俊澶╃嚎閫氱敤鎶�鏈鑼冦��");
+        standardMethod2.replace(0, 1, "");
+        List<Map<String, String>> deviceList = null;
+        if (deviceSet.size() != 0) {
+            deviceList = insOrderMapper.selectDeviceList(deviceSet);
+        }
+        Map<String, String> codeStr = new HashMap<>();
+        codeStr.put("鎶ュ憡缂栧彿", insReport.getCode());
+        codeStr.put("鏍峰搧鍚嶇О", insOrder.getSample());
+        codeStr.put("瑙勬牸鍨嬪彿", samples.get(0).getModel());
+        codeStr.put("鍙戞斁鏃ユ湡", now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        String codePath;
+        try {
+            codePath = new MatrixToImageWriter().code(JackSonUtil.marshal(codeStr).replaceAll("\\{", "")
+                    .replaceAll("}", "").replaceAll(",", "").replaceAll("\"", ""), twoCode);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        String modelStr = "";
+        for (String model : models) {
+            modelStr += "," + model;
+        }
+        String finalModelStr = modelStr;
+        String sampleEn = insSampleMapper.getSampleEn(insOrder.getSample());
+        String orderType = insOrderMapper.getEnumLabelByValue(insOrder.getOrderType());
+        String formType = insOrderMapper.getEnumLabelByValue(insOrder.getFormType());
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        List<Map<String, String>> finalDeviceList = deviceList;
+        List<Map<String, String>> sampleList = insSampleMapper.selectSampleList(orderId);
+        Integer userId = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery()
+                .eq(InsSampleUser::getInsSampleId, orderId).last("limit 1")).getUserId();
+        String signatureUrl;
+        try {
+            signatureUrl = userMapper.selectById(userId).getSignatureUrl();
+        } catch (Exception e) {
+            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+        }
+        if (ObjectUtils.isEmpty(signatureUrl) || signatureUrl.equals("")) {
+            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+        }
+        Custom custom = customMapper.selectById(insOrder.getCompanyId());
+
+        /*鑾峰彇闄勪欢鍥剧墖绫诲瀷*/
+        List<Map<String, Object>> images = new ArrayList<>();
+        List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery().eq(InsOrderFile::getType, 1).eq(InsOrderFile::getInsOrderId, orderId));
+        if (CollectionUtils.isNotEmpty(insOrderFiles)) {
+            insOrderFiles.forEach(insOrderFile -> {
+                Map<String, Object> image = new HashMap<>();
+                PictureRenderData pictureRenderData = Pictures.ofLocal(imgUrl + "/" + insOrderFile.getFileUrl()).sizeInCm(17, 20).create();
+                image.put("url", pictureRenderData);
+                image.put("report", insReport);
+                images.add(image);
+            });
+        }
+        //濮旀墭浜哄拰鐢佃瘽瀛楁鍒ゆ柇
+        if (ObjectUtils.isEmpty(insOrder.getPrepareUser())) {
+            insOrder.setPrepareUser("/");
+        }
+        if (ObjectUtils.isEmpty(insOrder.getPhone())) {
+            insOrder.setPhone("/");
+        }
+        //妫�楠岄」鐩殑鐜
+        InsProduct insProduct = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getState, 1).eq(InsProduct::getInsSampleId, samples.get(0).getId())).get(0);
+        String environment = "";
+        environment = (ObjectUtils.isNotEmpty(insProduct.getTemperature()) ? insProduct.getTemperature() + "鈩� " : "") + (ObjectUtils.isNotEmpty(insProduct.getHumidity()) ? insProduct.getHumidity() + "%" : "");
+        String finalEnvironment = environment;
+        List<SampleProductDto> finalSamples = samples;
+        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("order", insOrder);
+                    put("report", insReport);
+                    put("departLims", departLims);
+                    put("sampleCode", sampleCode);
+                    put("environment", finalEnvironment);
+                    put("custom", custom);
+                    put("sampleSize", finalSamples.size());
+                    put("standardMethod", (standardMethod2.toString().equals("null") ? "" : standardMethod2));
+                    put("deviceList", finalDeviceList);
+                    put("tables", tables);
+                    put("tables2", tables2);
+                    put("tables3", tables3);
+                    put("tables4", tables4);
+                    put("sampleList", sampleList);
+                    put("twoCode", Pictures.ofLocal(codePath).create());
+                    put("models", finalModelStr.replace(",", ""));
+                    put("productSize", productSize);
+                    put("productSize1", productSize1);
+                    put("productSize2", productSize2);
+                    put("productSize3", productSize3);
+                    put("createTime", now.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+//                    put("createTimeEn", monthNames[now.getMonthValue() - 1] + " " + now.getDayOfMonth() + ", " + now.getYear());
+                    put("insTime", insOrder.getInsTime().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+                    put("insTimeEn", monthNames[insOrder.getInsTime().getMonthValue() - 1] + " " + insOrder.getInsTime().getDayOfMonth() + ", " + insOrder.getInsTime().getYear());
+                    put("writeUrl", null);
+                    put("insUrl", Pictures.ofLocal(imgUrl + "/" + signatureUrl).create());
+                    put("images", images);
+                    put("examineUrl", null);
+                    put("ratifyUrl", null);
+                    put("sampleEn", sampleEn);
+                    put("orderType", orderType);
+                    put("getTime", insOrder.getExamineTime().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+                    put("getTimeEn", monthNames[insOrder.getExamineTime().getMonthValue() - 1] + " " + insOrder.getExamineTime().getDayOfMonth() + ", " + insOrder.getExamineTime().getYear());
+                    put("seal1", null);
+                    put("seal2", null);
+                    put("formTypeCh", formType);
+                    put("formTypeEn", insOrder.getFormType());
+                }});
+        try {
+            String name = insReport.getCode().replace("/", "") + ".docx";
+            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+            insReport.setUrl("/word/" + name);
+            insReportMapper.insert(insReport);
+            insOrder.setInsState(5);
+            insOrderMapper.updateById(insOrder);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+        String path = wordUrl + "/" + insReport.getCode().replace("/", "") + ".docx";
+        try {
+            FileInputStream stream = new FileInputStream(path);
+            XWPFDocument document = new XWPFDocument(stream);
+            List<XWPFTable> xwpfTables = document.getTables();
+            for (int i = 1; i < xwpfTables.size() - (deviceList == null ? 1 : 2); 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<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);
+        }
+        //澶勭悊涓嫳鏂囨崲琛岀殑闂
+        try {
+            FileInputStream stream1 = new FileInputStream(path);
+            XWPFDocument document1 = new XWPFDocument(stream1);
+            List<XWPFTable> xwpfTables1 = document1.getTables();
+            for (int i = 1; i < xwpfTables1.size() - (deviceList == null ? 1 : 2); i++) {
+                for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+                            String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+                            String[] split = text.split("@");
+                            xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+                            XWPFRun run = xwpfParagraph.createRun();
+                            run.setText(split[0]);
+                            if (ObjectUtils.isNotNull(split[1])) {
+                                run.addBreak();
+                                run.setText(split[1]);
+                            }
+                            xwpfParagraph.setAlignment(org.apache.poi.xwpf.usermodel.ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+            document1.write(fileOutputStream1);
+            fileOutputStream1.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
 }
diff --git a/inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml
index 9d060b9..3dbe7bd 100644
--- a/inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml
+++ b/inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml
@@ -17,7 +17,8 @@
         select A.*
         from (select iof.*, name
               from ins_order_file iof
-                       left join user u on iof.create_user = u.id) A
+                       left join user u on iof.create_user = u.id
+        where ins_order_id=#{insOrderId}) A
         <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
             ${ew.customSqlSegment}
         </if>
diff --git a/inspect-server/src/main/resources/mapper/InsOrderUserMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderUserMapper.xml
index 2750726..fa205eb 100644
--- a/inspect-server/src/main/resources/mapper/InsOrderUserMapper.xml
+++ b/inspect-server/src/main/resources/mapper/InsOrderUserMapper.xml
@@ -17,5 +17,6 @@
         select iou.*, name submitUserName
         from ins_order_user iou
                  left join user on submit_user = user.id
+        where ins_order_state_id=#{insOrderStateId}
     </select>
 </mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsSampleMapper.xml b/inspect-server/src/main/resources/mapper/InsSampleMapper.xml
index 31aa13f..a52c2d0 100644
--- a/inspect-server/src/main/resources/mapper/InsSampleMapper.xml
+++ b/inspect-server/src/main/resources/mapper/InsSampleMapper.xml
@@ -367,6 +367,7 @@
           and state = 1
           and ip.son_laboratory = #{laboratory}
           and ios.laboratory = #{laboratory}
+          and (ipr2.num is null or ipr.num is null)
     </select>
     <select id="getSampleEn" resultType="java.lang.String">
         select name_en
@@ -950,4 +951,8 @@
           and state = 1
           and ins_order_id = #{insOrderId}
     </select>
+    <select id="selectList1" resultType="com.yuanchu.mom.dto.SampleProductDto">
+        select * from ins_sample where ins_order_id=#{id
+}
+    </select>
 </mapper>
diff --git a/inspect-server/src/main/resources/static/report-template.docx b/inspect-server/src/main/resources/static/report-template.docx
index 9c46fcd..8052ed3 100644
--- a/inspect-server/src/main/resources/static/report-template.docx
+++ b/inspect-server/src/main/resources/static/report-template.docx
Binary files differ
diff --git a/system-run/src/main/resources/application-dev.yml b/system-run/src/main/resources/application-dev.yml
index 2b97af2..43cd9bb 100644
--- a/system-run/src/main/resources/application-dev.yml
+++ b/system-run/src/main/resources/application-dev.yml
@@ -42,10 +42,8 @@
     type: com.alibaba.druid.pool.DruidDataSource
     driverClassName: com.mysql.cj.jdbc.Driver
 #    url: jdbc:mysql://localhost:3306/11?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
-#    url: jdbc:mysql://10.1.200.86:3306/center-lims?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
-#    url: jdbc:mysql://10.16.173.59:3306/center-lims?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
     url: jdbc:mysql://10.1.13.77:3306/center-lims?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
-#    url: jdbc:mysql://114.132.189.42:9004/center-lims?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
+#    url: jdbc:mysql://192.168.22.29:3306/center-lims?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
     username: remote_user
 #    username: root
     password: zttZTT123!
@@ -76,6 +74,7 @@
     port: 6379
     # redis璁块棶瀵嗙爜锛堥粯璁や负绌猴級
     password: 123456
+#    password: zttZTT123!
     # redis杩炴帴瓒呮椂鏃堕棿锛堝崟浣嶆绉掞級
     timeout: 50
     # redis杩炴帴姹犻厤缃�

--
Gitblit v1.9.3