From 2e12b4e5b7b6bd3e7d6841df6bf8ebd58adc03bd Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期一, 19 五月 2025 13:52:30 +0800
Subject: [PATCH] 复核结束界面不显示+消息提醒加上站点

---
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java | 2013 +++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 1,206 insertions(+), 807 deletions(-)

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 c2720da..4f9aae6 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
@@ -3,7 +3,6 @@
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.lang.Console;
 import cn.hutool.core.lang.UUID;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -16,52 +15,49 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.deepoove.poi.XWPFTemplate;
-import com.deepoove.poi.config.Configure;
-import com.deepoove.poi.config.ConfigureBuilder;
-import com.deepoove.poi.data.*;
-import com.deepoove.poi.data.style.*;
-import com.deepoove.poi.util.TableTools;
-import com.deepoove.poi.xwpf.WidthScalePattern;
 import com.yuanchu.mom.common.GetLook;
 import com.yuanchu.mom.common.PrintChina;
-import com.yuanchu.mom.dto.ExcelDto;
-import com.yuanchu.mom.dto.InsOrderPlanDTO;
-import com.yuanchu.mom.dto.SampleProductDto;
+import com.yuanchu.mom.dto.*;
 import com.yuanchu.mom.exception.ErrorException;
 import com.yuanchu.mom.mapper.*;
 import com.yuanchu.mom.pojo.*;
 import com.yuanchu.mom.service.*;
-import com.yuanchu.mom.utils.JackSonUtil;
-import com.yuanchu.mom.utils.MatrixToImageWriter;
-import com.yuanchu.mom.utils.QueryWrappers;
-import com.yuanchu.mom.vo.InsOrderPlanTaskSwitchVo;
-import com.yuanchu.mom.vo.InsOrderPlanVO;
-import org.apache.commons.io.IOUtils;
-import org.apache.poi.xwpf.usermodel.*;
+import com.yuanchu.mom.utils.*;
+import com.yuanchu.mom.vo.*;
+import org.apache.poi.hwpf.usermodel.*;
+import org.apache.poi.ss.usermodel.CellValue;
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletRequest;
 import java.io.*;
 import java.nio.file.Files;
-import java.nio.file.Paths;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicReference;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+
+import org.apache.poi.hwpf.HWPFDocument;
 
 /**
  * 妫�楠屼换鍔�-涓氬姟瀹炵幇灞�
  */
 @Service
+@Transactional(rollbackFor = Exception.class)
 public class InsOrderPlanServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder> implements InsOrderPlanService {
 
     @Resource
@@ -80,18 +76,32 @@
     private InsOrderStateMapper insOrderStateMapper;
     @Resource
     private InsProductMapper insProductMapper;
+    @Resource
+    private InsOrderUserMapper insOrderUserMapper;
+    @Resource
+    private ShiftTimeMapper shiftTimeMapper;
+    @Resource
+    private PerformanceShiftMapper performanceShiftMapper;
+    @Resource
+    private WarehouseHistoryMapper warehouseHistoryMapper;
+
+    @Resource
+    private WarehouseService warehouseService;
 
     @Value("${wordUrl}")
     private String wordUrl;
 
-    @Value("${twoCode}")
-    private String twoCode;
+    @Resource
+    WordUtils wordUtils;
 
     @Resource
     private InsReportMapper insReportMapper;
 
     @Resource
     private InsProductResultMapper insProductResultMapper;
+
+    @Resource
+    private InsProductResult2Mapper insProductResult2Mapper;
 
     @Resource
     private InsProductUserMapper insProductUserMapper;
@@ -103,36 +113,42 @@
     AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
 
     @Resource
+    QYWXApi qywxApi;
+
+    @Resource
     private InformationNotificationService informationNotificationService;
 
     @Resource
     private UserMapper userMapper;
 
-    @Resource
-    private CustomMapper customMapper;
-
     @Value("${file.path}")
     private String imgUrl;
 
     @Resource
-    private InsBushingService insBushingService;
-
-    @Resource
-    private InsFiberMapper insFiberMapper;
-
-    @Resource
     private InsOrderFileMapper insOrderFileMapper;
+
+    @Resource
+    FuSheUtils fuSheUtils;
+
+    @Resource
+    DianLuUtils dianLuUtils;
 
     @Override
     public Map<String, Object> selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO) {
         Map<String, Object> map = new HashMap<>();
         map.put("head", PrintChina.printChina(InsOrderPlanVO.class));
         Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null);
-        Integer userId = map1.get("userId");
+        String laboratory = null;
+        String userName = null;
         if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
-            insOrderPlanDTO.setUserId(userId.longValue());
+            userName = userMapper.selectById(map1.get("userId")).getName();
+            insOrderPlanDTO.setUserId(null);
         }
-        IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId);
+        String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//璇曢獙瀹�
+        insOrderPlanDTO.setSonLaboratory(null);
+        String sampleCode = insOrderPlanDTO.getSampleCode();
+        insOrderPlanDTO.setSampleCode(null);
+        IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userName, sonLaboratory, laboratory,sampleCode);
         map.put("body", insOrderPage);
         return map;
     }
@@ -143,14 +159,18 @@
         map.put("head", PrintChina.printChina(InsOrderPlanTaskSwitchVo.class));
         Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null);
         Integer userId = map1.get("userId");
+        User user = userMapper.selectById(map1.get("userId"));//褰撳墠鐧诲綍鐨勪汉
+        String laboratory = null;
         if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
             insOrderPlanDTO.setUserId(userId.longValue());
         }
-        IPage<InsOrderPlanTaskSwitchVo> insOrderPage = insSampleMapper.inspectionOrderDetailsTaskSwitching(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId);
+        String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//璇曢獙瀹�
+        IPage<InsOrderPlanTaskSwitchVo> insOrderPage = insSampleMapper.inspectionOrderDetailsTaskSwitching(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId, sonLaboratory, laboratory);
         map.put("body", insOrderPage);
         return map;
     }
 
+    //璁ら浠诲姟
     @Override
     public boolean claimInsOrderPlan(InsOrderPlanDTO entity) {
         if (Objects.isNull(entity)) {
@@ -158,45 +178,69 @@
         }
         Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null);
         Integer userId = map1.get("userId");
-        InsSampleUser insSampleUser = new InsSampleUser(entity.getInsSampleId().intValue(), userId, 1);
+        InsSampleUser insSampleUser = new InsSampleUser(entity.getInsSampleId().intValue(), userId, 0, entity.getSonLaboratory());
         return insSampleUserMapper.insert(insSampleUser) > 0;
     }
 
     @Override
-    public Map<String, Object> doInsOrder(Integer id, String laboratory) {
+    public Map<String, Object> doInsOrder(Integer sampleId, String laboratory) {
+        InsSample insSample = insSampleMapper.selectById(sampleId);
         InsOrder insOrder = new InsOrder();
-        insOrder.setId(id);
-        InsOrder order = insOrderMapper.selectById(id);
+        insOrder.setId(insSample.getInsOrderId());
+        InsOrder order = insOrderMapper.selectById(insSample.getInsOrderId());
         if (BeanUtil.isEmpty(order.getInsTime())) {
-            insOrder.setInsTime(LocalDateTime.now());
+            insOrder.setInsTime(LocalDateTime.now());//璁㈠崟鐨勬楠屾椂闂�
             insOrderMapper.updateById(insOrder);
-            insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, id).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 1));
         }
-        Map<String, Object> map = insOrderService.getInsOrderAndSample(id, laboratory);
+        InsOrderState orderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                .eq(InsOrderState::getInsSampleId, sampleId)
+                .eq(InsOrderState::getLaboratory, laboratory));
+        if (ObjectUtils.isEmpty(orderState.getInsTime())) {
+            //鏇存柊妫�楠屼换鍔¤〃鐨勬楠屾椂闂�
+            insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+                    .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                    .eq(InsOrderState::getInsSampleId, sampleId)
+                    .eq(InsOrderState::getLaboratory, laboratory)
+                    .set(InsOrderState::getInsTime, LocalDateTime.now())
+                    .set(InsOrderState::getInsState, 1));
+        }
+        Map<String, Object> map = insOrderService.getInsOrderAndSample(sampleId, laboratory);
         List<SampleProductDto> list = JSON.parseArray(JSON.toJSONString(map.get("sampleProduct")), SampleProductDto.class);
-        for (SampleProductDto samples : list) {
-//            Set<Integer> set = new HashSet<>();
-//            Map<Integer, String> map2 = new HashMap<>();
-            if (BeanUtil.isEmpty(samples.getInsProduct())) continue;
-            samples.setBushing(insBushingService.selectBushingBySampleId(samples.getId()));
-//            getTemplateThing(set, map2, samples.getInsProduct());
-        }
         map.put("sampleProduct", list);
         return map;
     }
 
     @Override
-    public List<InsProduct> getInsProduct(Integer id, Integer type, String laboratory) {
+    public List<InsProduct> getInsProduct(Integer id, Integer type, String laboratory, HttpServletRequest request) {
         List<InsProduct> insProducts = new ArrayList<>();
         switch (type) {
             case 0:
+                //鏍峰搧
                 insProducts = insSampleMapper.getInsProduct1(id, laboratory);
+                if (insProducts.size() == 0) {
+                    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);
+                    }
+                }
                 break;
             case 1:
-                insProducts = insSampleMapper.getInsProduct2(id);
+                //鍏夌氦甯�
                 break;
             case 2:
-                insProducts = insSampleMapper.getInsProduct3(id);
+                //鍏夌氦
+                break;
+            case 3:
+                //濂楃
                 break;
         }
         Set<Integer> set = new HashSet<>();
@@ -207,11 +251,41 @@
     }
 
     @Override
-    public List<String> checkSubmitPlan(Integer orderId, String laboratory) {
+    public List<InsProduct> getInsProduct2(Integer id, Integer type, String laboratory, HttpServletRequest request, Integer num) {
+        List<InsProduct> insProducts = new ArrayList<>();
+        switch (type) {
+            case 0:
+                //鏍峰搧
+                insProducts = insSampleMapper.get2InsProduct1(id, laboratory, num);
+                if (insProducts.size() == 0) {
+                    throw new ErrorException("褰撳墠妫�楠屾暟鎹繕娌℃湁淇濆瓨,淇濆瓨涔嬪悗鏈夋暟鎹巻鍙�");
+                }
+                break;
+            case 1:
+                //鍏夌氦甯�
+                break;
+            case 2:
+                //鍏夌氦
+                break;
+            case 3:
+                //濂楃
+                break;
+        }
+        Set<Integer> set = new HashSet<>();
+        Map<Integer, String> map2 = new HashMap<>();
+        if (BeanUtil.isEmpty(insProducts)) return null;
+        getTemplateThing(set, map2, insProducts);
+        return insProducts;
+    }
+
+    @Override
+    public List<String> checkSubmitPlan(Integer sampleId, String laboratory) {
         List<String> collect = new ArrayList<>();
-        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId));
-        List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList());
-        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().in(InsProduct::getInsSampleId, ids).eq(InsProduct::getSonLaboratory, laboratory).eq(InsProduct::getState, 1).eq(InsProduct::getInsResult, 0));
+        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .eq(InsProduct::getInsSampleId, sampleId)
+                .eq(InsProduct::getSonLaboratory, laboratory)
+                .eq(InsProduct::getState, 1)
+                .eq(InsProduct::getInsResult, 0));
         if (insProducts.size() > 0) {
             collect = insProducts.stream().map(insProduct -> {
                 return insProduct.getInspectionItem() + "-" + insProduct.getInspectionItemSubclass();
@@ -224,13 +298,26 @@
     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);
+        String sonLaboratory = null;
+        Integer sampleId = null;
+        if (ObjectUtils.isNotEmpty(insOrderFile.getSonLaboratory())) {
+            sonLaboratory = insOrderFile.getSonLaboratory();
+            insOrderFile.setSonLaboratory(null);
+        }
+        if (ObjectUtils.isNotEmpty(insOrderFile.getInsSampleId())) {
+            sampleId = insOrderFile.getInsSampleId();
+            insOrderFile.setInsSampleId(null);
+        }
+        IPage<InsOrderFile> insOrderFileIPage = insOrderFileMapper.getFileList(page, QueryWrappers.queryWrappers(insOrderFile), insOrderId, sonLaboratory, sampleId);
         map.put("body", insOrderFileIPage);
         return map;
     }
 
     @Override
-    public int uploadFile(Integer orderId, MultipartFile file) {
+    public Object uploadFile(Integer orderId, MultipartFile file, String sonLaboratory, Integer sampleId) {
+        InsOrder insOrder = insOrderMapper.selectById(orderId);
         String urlString;
         String pathName;
         String path;
@@ -238,6 +325,12 @@
         String contentType = file.getContentType();
         InsOrderFile insOrderFile = new InsOrderFile();
         insOrderFile.setInsOrderId(orderId);
+        if (ObjectUtils.isNotEmpty(sampleId)) {
+            insOrderFile.setInsSampleId(sampleId);
+        }
+        if (ObjectUtils.isNotEmpty(sonLaboratory)) {
+            insOrderFile.setSonLaboratory(sonLaboratory);
+        }
         insOrderFile.setFileName(filename);
         if (contentType != null && contentType.startsWith("image/")) {
             // 鏄浘鐗�
@@ -253,34 +346,266 @@
             if (!realpath.exists()) {
                 realpath.mkdirs();
             }
-            pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+            pathName = UUID.randomUUID() + "_" + file.getOriginalFilename().replace("#", "&");
             urlString = realpath + "/" + pathName;
             file.transferTo(new File(urlString));
             insOrderFile.setFileUrl(pathName);
-            return insOrderFileMapper.insert(insOrderFile);
+            insOrderFileMapper.insert(insOrderFile);
+            String[] split = filename.split("\\.");
+            if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("杩戝満") && (split[split.length - 1].equals("csv") || split[split.length - 1].equals("xlsx"))) {
+                fuSheUtils.getFuSheWord1(sonLaboratory, insOrderFile);
+            } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("杩滃満") && split[split.length - 1].equals("xlsx")) {
+                fuSheUtils.getFuSheWord2(sonLaboratory, insOrderFile);
+            } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("鐢佃矾璇曢獙") && split[split.length - 1].equals("xlsx") && filename.contains("浜よ皟")) {
+                dianLuUtils.readDianLuFile1(sampleId, insOrderFile);
+            } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("鐢佃矾璇曢獙") && split[split.length - 1].equals("csv") && filename.contains("椹绘尝")) {
+                dianLuUtils.readDianLuFile2(sampleId, insOrderFile);
+            } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("鐢佃矾璇曢獙") && split[split.length - 1].equals("csv") && insOrder.getSampleType().equals("鏃犳簮鍣ㄤ欢")) {
+                dianLuUtils.readDianLuFile3(sampleId, insOrderFile);
+            }
+            // 鐢佃矾瀹為獙杩斿洖鏂囦欢鍚�
+            if(ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("鐢佃矾璇曢獙")){
+                return pathName;
+            }
+            // 闇囧姩doc鏂囦欢瑙f瀽
+            if(filename.toLowerCase().contains(".doc") && sonLaboratory.equals("鎸姩")){
+                return docAnalysis(urlString,orderId,sampleId,file.getOriginalFilename());
+            }
         } catch (Exception e) {
-            e.printStackTrace();
-            System.err.println("闄勪欢涓婁紶閿欒");
-            return 0;
+            throw new ErrorException(e.getMessage());
         }
+        return 0;
     }
 
     @Override
-    public void saveInsContext(Map<String, Object> insContext) {
+    public List<String> upPlanUser2(Integer sampleId) {
+        List<String> sonLaboratory = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .eq(InsProduct::getState, 1)
+                .eq(InsProduct::getInsSampleId, sampleId))
+                .stream().map(InsProduct::getSonLaboratory).distinct().collect(Collectors.toList());
+        return sonLaboratory;
+    }
+
+    @Override
+    public int deleteInsContext(InsProductResultVo insProductResultVo) {
+        return insProductResult2Mapper.delete(Wrappers.<InsProductResult2>lambdaQuery()
+                .eq(InsProductResult2::getFrequency, insProductResultVo.getFrequency())
+                .eq(InsProductResult2::getNum, insProductResultVo.getNum())
+                .in(InsProductResult2::getInsProductId, insProductResultVo.getProductIds()));
+    }
+
+    //鎵爜鎶ユ
+    @Override
+    public int scanInsOrderState(String sonLaboratory, String sampleCode, String trees, String entrustCode) {
+        /*鏍峰搧鍏ュ簱*/
+        warehouseService.inWarehouse(trees, sampleCode, entrustCode);
+        /*鏂板妫�楠屼换鍔�*/
+        //鍏堝垽鏂鏍峰搧鏄惁鏈夎繖涓珯鐐圭殑椤圭洰
+        List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getEntrustCode, entrustCode));
+        InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery()
+                .eq(InsSample::getSampleCode, sampleCode)
+                .eq(InsSample::getInsOrderId, insOrders.get(0).getId()));
+        List<String> collect = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .eq(InsProduct::getState, 1)
+                .eq(InsProduct::getInsSampleId, insSample.getId())).stream().map(InsProduct::getSonLaboratory).collect(Collectors.toList());
+        if (!collect.contains(sonLaboratory)) {
+            throw new ErrorException("璇ユ牱鍝佹病鏈�" + sonLaboratory + "绔欑偣鐨勭浉鍏抽」鐩�,璇锋煡鐪嬩笅鍗曡鎯�!");
+        }
+        //鍒ゆ柇璇ヨ鍗曟槸鍚︾珯鐐逛换鍔℃湁缁撴潫璇曢獙(鍙浠讳竴浠诲姟缁撴潫璇曢獙閮戒笉鑳藉啀娆¤瘯楠�)
+        List<InsOrderState> orderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
+                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                .eq(InsOrderState::getInsState, 5));
+        if (CollectionUtils.isNotEmpty(orderStates)) {
+            throw new ErrorException("璇ヨ鍗曠珯鐐圭殑浠诲姟宸茬粡缁撴潫璇曢獙,鏃犳硶鍐嶆杩涜璇曢獙!");
+        }
+        InsOrderState orderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                .eq(InsOrderState::getInsSampleId, insSample.getId())
+                .eq(InsOrderState::getLaboratory, sonLaboratory));
+        if (ObjectUtils.isNotEmpty(orderState)) {
+            //缁х画璇曢獙
+            if (orderState.getInsState() == 6) {
+                orderState.setInsState(0);
+                orderState.setNum(orderState.getNum() + 1);//閫掑
+                orderState.setCreateTime(LocalDateTime.now());
+                insOrderStateMapper.updateById(orderState);
+            }
+        } else {
+            InsOrderState insOrderState = new InsOrderState();
+            insOrderState.setInsOrderId(insSample.getInsOrderId());
+            insOrderState.setInsSampleId(insSample.getId());
+            insOrderState.setLaboratory(sonLaboratory);
+            insOrderState.setInsState(0);
+            insOrderState.setNum(1);//鍒濆鏄涓�娆�
+            insOrderStateMapper.insert(insOrderState);
+        }
+        //鍚屼竴鏍峰搧鍦ㄥ叾浠栫珯鐐瑰叆搴撲箣鍚庨渶瑕佸皢鍏朵粬绔欑偣鐨勪换鍔′笉鏄剧ず
+        insOrderStateMapper.update(null,Wrappers.<InsOrderState>lambdaUpdate()
+        .eq(InsOrderState::getInsOrderId,insSample.getInsOrderId())
+        .eq(InsOrderState::getInsSampleId,insSample.getId())
+        .eq(InsOrderState::getInsState,6)//澶嶆牳缁х画璇曢獙
+        .ne(InsOrderState::getLaboratory,sonLaboratory)
+        .set(InsOrderState::getIsOut,1));//涓嶆樉绀�
+        return 1;
+    }
+
+    //鎵爜鍑哄簱(鍙湁澶嶆牳缁撴潫鎵嶄細璋冪敤)
+    @Override
+    public int outInsOrderState(String sonLaboratory, String sampleCode, String entrustCode) {
+        //鍒ゆ柇璇ユ牱鍝佺殑妫�楠屼换鍔℃槸鍚﹀凡缁忕粨鏉�(缁х画璇曢獙鎴栬�呮槸缁撴潫璇曢獙)
+        //鍏堝垽鏂鏍峰搧鏄惁鏈夎繖涓珯鐐圭殑椤圭洰
+        List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getEntrustCode, entrustCode));
+        InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery()
+                .eq(InsSample::getSampleCode, sampleCode)
+                .eq(InsSample::getInsOrderId, insOrders.get(0).getId()));
+        List<String> collect = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .eq(InsProduct::getState, 1)
+                .eq(InsProduct::getInsSampleId, insSample.getId())).stream().map(InsProduct::getSonLaboratory).collect(Collectors.toList());
+        if (!collect.contains(sonLaboratory)) {
+            throw new ErrorException("璇ユ牱鍝佹病鏈�" + sonLaboratory + "绔欑偣鐨勭浉鍏抽」鐩�,璇锋煡鐪嬩笅鍗曡鎯�!");
+        }
+        //鍒ゆ柇璇ヤ换鍔℃槸鍚︽槸缁撴潫璇曢獙
+        //鍒ゆ柇璇ヨ鍗曟槸鍚︾珯鐐逛换鍔℃湁(缁х画璇曢獙鎴栬�呮槸缁撴潫璇曢獙)
+        InsOrderState orderStates = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+                .eq(InsOrderState::getLaboratory,sonLaboratory)
+                .eq(InsOrderState::getInsSampleId, insSample.getId())
+                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId()));
+        if (orderStates.getInsState()!=5) {
+                throw new ErrorException("褰撳墠鏍峰搧鐨勭珯鐐逛换鍔″苟涓嶆槸澶嶆牳鐨勭粨鏉熻瘯楠�,鏃犻渶鎵嬪姩鍑哄簱!");
+        }
+        orderStates.setIsOut(1);
+        insOrderStateMapper.updateById(orderStates);//澶嶆牳缁撴潫鍑哄簱涔嬪悗鍒楄〃涓嶆樉绀�
+        warehouseService.outWarehouse(sampleCode, true, entrustCode);
+        return 0;
+    }
+
+    @Override
+    public List<InsOrderUser> getInsOrderUserList(Integer insOrderStateId) {
+        return insOrderUserMapper.getInsOrderUserList(insOrderStateId);
+    }
+
+    private static final String splitIdentifier = "@-@"; // 鑷畾涔夊敮涓�鏍囪瘑鍒嗗壊绗�
+
+    //棰勮鏂囦欢
+    @Override
+    public Object preview(Integer id) throws Exception {
+        InsOrderFile insOrderFile = insOrderFileMapper.selectById(id);
+        File file = new File(wordUrl + "/" + insOrderFile.getFileUrl());
+        StringBuilder stringBuilder = new StringBuilder();
+        // 鍒涘缓 reader
+        try (BufferedReader br = Files.newBufferedReader(file.toPath())) {
+            // CSV鏂囦欢鐨勫垎闅旂
+            String DELIMITER = ",";
+            // 鎸夎璇诲彇
+            String line;
+            while ((line = br.readLine()) != null) {
+                // 鍒嗗壊
+                String[] columns = line.split(DELIMITER);
+                // 鎵撳嵃琛�
+                stringBuilder.append(String.join(splitIdentifier, columns)).append("\n");
+            }
+        } catch (Exception ex) {
+            List<Object> list = new ArrayList<>();
+            //鍒涘缓宸ヤ綔绨垮璞�
+            XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream(file));
+            //鑾峰彇宸ヤ綔绨夸笅sheet鐨勪釜鏁� 鍙鍙栫涓�涓猻heet
+            int sheetNum = xssfWorkbook.getNumberOfSheets();
+            //閬嶅巻宸ヤ綔绨夸腑鐨勬墍鏈夋暟鎹�
+            for (int i = 0; i < sheetNum; i++) {
+                Map<String, Object> map = new HashMap<>();
+                StringBuilder result = new StringBuilder();
+                XSSFSheet sheet = xssfWorkbook.getSheetAt(i);
+                //鑾峰彇鏈�鍚庝竴琛岀殑num锛屽嵆鎬昏鏁般�傛澶勪粠0寮�濮�
+                int maxRow = sheet.getLastRowNum();
+                for (int row = 0; row <= maxRow; row++) {
+                    XSSFRow xssfRow = sheet.getRow(row);
+                    //鑾峰彇鏈�鍚庡崟鍏冩牸num锛屽嵆鎬诲崟鍏冩牸鏁� ***娉ㄦ剰锛氭澶勪粠1寮�濮嬭鏁�***
+                    int maxRol = sheet.getRow(row).getLastCellNum();
+                    StringBuilder aLine = new StringBuilder();
+                    /*for (int rol = 0; rol < maxRol; rol++) {
+                        aLine.append(sheet.getRow(row).getCell(rol)).append(",");
+                    }*/
+                    for (int rol = 0; rol < maxRol; rol++) {
+                        XSSFCell cell = xssfRow.getCell(rol);
+                        if (cell == null) {
+                            aLine.append(",");
+                        } else {
+                            switch (cell.getCellType()) {
+                                case FORMULA:
+                                    // 璁$畻鍏紡骞惰幏鍙栫粨鏋�
+                                    CellValue cellValue = xssfWorkbook.getCreationHelper().createFormulaEvaluator().evaluate(cell);
+                                    switch (cellValue.getCellType()) {
+                                        case NUMERIC:
+                                            String formattedValue = String.format("%.4f", cellValue.getNumberValue());
+                                            aLine.append(formattedValue);
+                                            break;
+                                        case STRING:
+                                            aLine.append(cellValue.getStringValue());
+                                            break;
+                                        case BOOLEAN:
+                                            aLine.append(cellValue.getBooleanValue());
+                                            break;
+                                        case ERROR:
+                                            aLine.append("#ERR!");
+                                            break;
+                                        default:
+                                            aLine.append("");
+                                            break;
+                                    }
+                                    break;
+                                case NUMERIC:
+                                    String formattedValue = String.format("%.4f", cell.getNumericCellValue());
+                                    aLine.append(formattedValue);
+                                    break;
+                                case STRING:
+                                    aLine.append(cell.getStringCellValue());
+                                    break;
+                                case BOOLEAN:
+                                    aLine.append(cell.getBooleanCellValue());
+                                    break;
+                                case ERROR:
+                                    aLine.append("#ERR!");
+                                    break;
+                                default:
+                                    aLine.append("");
+                                    break;
+                            }
+                            aLine.append(",");
+                        }
+                    }
+                    String substring = aLine.substring(0, aLine.length() - 1);
+                    result.append(substring).append("\n");
+                }
+                map.put("sheetName", sheet.getSheetName());
+                map.put("content", result.toString());
+                list.add(map);
+            }
+            return list;
+        }
+        return stringBuilder.toString();
+    }
+
+    //妯$増淇濆瓨妫�楠屽唴瀹�
+    @Override
+    public void saveInsContext(Map<String, Object> insContext, Integer num) {
         Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
         CompletableFuture.supplyAsync(() -> {
             insContext.forEach((k, v) -> {
                 JSONObject jo = JSON.parseObject(JSON.toJSONString(v));
                 InsProduct insProduct = new InsProduct();
                 insProduct.setId(Integer.parseInt(k));
-                List<InsProductResult> results = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()));
+                List<InsProductResult> results = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
+                        .eq(InsProductResult::getNum, num)
+                        .eq(InsProductResult::getInsProductId, insProduct.getId()));
                 InsProductResult result;
                 if (CollectionUtils.isEmpty(results)) {
-                     result = new InsProductResult();
+                    result = new InsProductResult();
                 } else {
-                     result = results.get(0);
+                    result = results.get(0);
                 }
                 result.setInsProductId(Integer.parseInt(k));
+                result.setNum(num);
+                //妫�楠屽��
                 if (jo.get("insValue") != null) {
                     JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(jo.get("insValue")));
                     List<Map<String, Object>> iv = new ArrayList<>();
@@ -288,6 +613,9 @@
                         JSONObject insValue = JSON.parseObject(JSON.toJSONString(o));
                         Map<String, Object> map = new HashMap<>();
                         map.put("v", JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v"));
+                        map.put("r", JSON.toJSONString(insValue.get("r")));
+                        map.put("c", JSON.toJSONString(insValue.get("c")));
+                        map.put("w", insValue.get("w"));
                         try {
                             if ((insValue.get("u") == null || insValue.get("u").equals("")) && StrUtil.isNotEmpty(JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v").toString())) {
                                 map.put("u", userId + "");
@@ -300,6 +628,7 @@
                     }
                     result.setInsValue(JSON.toJSONString(iv));
                 }
+                //璁$畻鍊�
                 if (jo.get("comValue") != null && !Objects.equals(jo.get("comValue"), "")) {
                     JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("comValue")));
                     List<Map<String, Object>> cv = new ArrayList<>();
@@ -311,6 +640,7 @@
                     }
                     result.setComValue(JSON.toJSONString(cv));
                 }
+                //鏈�缁堝��
                 try {
                     JSONObject resValue = JSON.parseObject(JSON.toJSONString(jo.get("resValue")));
                     if (resValue.get("v") != null) {
@@ -318,7 +648,39 @@
                         insProduct.setLastValue(o.equals("") ? null : (o.toString()));
                     }
                 } catch (Exception e) {
+                    insProduct.setLastValue("");//''
                 }
+                //璇曢獙鍓嶆牱鍝佹鏌�
+                try {
+                    JSONObject resValue = JSON.parseObject(JSON.toJSONString(jo.get("beforeCheck")));
+                    if (resValue.get("v") != null) {
+                        Object o = JSON.parseObject(JSON.toJSONString(resValue.get("v"))).get("v");
+                        result.setBeforeCheck(o.equals("") ? null : (o.toString()));
+                    }
+                } catch (Exception e) {
+                    result.setBeforeCheck("");//''
+                }
+                //璇曢獙鍚庢牱鍝佹鏌�
+                try {
+                    JSONObject resValue = JSON.parseObject(JSON.toJSONString(jo.get("afterCheck")));
+                    if (resValue.get("v") != null) {
+                        Object o = JSON.parseObject(JSON.toJSONString(resValue.get("v"))).get("v");
+                        result.setAfterCheck(o.equals("") ? null : (o.toString()));
+                    }
+                } catch (Exception e) {
+                    result.setAfterCheck("");//''
+                }
+                //瀹為獙缁撴灉
+                try {
+                    JSONObject resValue = JSON.parseObject(JSON.toJSONString(jo.get("testResult")));
+                    if (resValue.get("v") != null) {
+                        Object o = JSON.parseObject(JSON.toJSONString(resValue.get("v"))).get("v");
+                        result.setTestResult(o.equals("") ? null : (o.toString()));
+                    }
+                } catch (Exception e) {
+                    result.setTestResult("");//''
+                }
+                //璁惧缂栧彿
                 if (jo.get("equipValue") != null) {
                     JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("equipValue")));
                     List<Map<String, Object>> ev = new ArrayList<>();
@@ -330,6 +692,7 @@
                     }
                     result.setEquipValue(JSON.toJSONString(ev));
                 }
+                //璁惧鍚嶇О
                 if (jo.get("equipName") != null) {
                     JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("equipName")));
                     List<Map<String, Object>> ev = new ArrayList<>();
@@ -341,11 +704,13 @@
                     }
                     result.setEquipName(JSON.toJSONString(ev));
                 }
+                //缁撹
                 try {
                     JSONObject insResult = JSON.parseObject(JSON.toJSONString(jo.get("insResult")));
                     String ir = JSON.parseObject(JSON.toJSONString(insResult.get("v"))).get("v") + "";
                     insProduct.setInsResult(Integer.parseInt(ir));
                 } catch (Exception e) {
+                    insProduct.setInsResult(2);//寰呭畾
                 }
                 if (BeanUtil.isEmpty(result.getId())) {
                     result.setCreateUser(userId);
@@ -359,63 +724,46 @@
                 insProduct.setUpdateUser(userId);
                 insProductMapper.updateById(insProduct);
                 insProductUserMapper.insert(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId()));
-
                 insProduct = insProductMapper.selectById(insProduct);
-
-                //鏌ヨ妫�楠屽崟淇℃伅
-                InsOrder insOrder = insOrderMapper.selectById(insSampleMapper.selectById(insProduct.getInsSampleId()).getInsOrderId());
-                //鏍¢獙濡傛灉杩欎釜浜鸿繖涓娴嬮」鐩凡缁忔坊鍔犺繃浜嗗垯涓嶉渶瑕佸啀鏂板
-                Long count = auxiliaryOutputWorkingHoursMapper.selectCount(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
-                        .eq(AuxiliaryOutputWorkingHours::getCheck, userId)
-                        .eq(AuxiliaryOutputWorkingHours::getInspectProject, insProduct.getInspectionItemSubclass() + insProduct.getInspectionItem())
-                        .eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode()));
-                if (count == 0 && ObjectUtils.isNotEmpty(insProduct.getManHour())) {
-                    //娣诲姞姣忎釜浜虹殑浜ч噺宸ユ椂
-                    AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
-                    auxiliaryOutputWorkingHours.setInspectProject(insProduct.getInspectionItemSubclass() + insProduct.getInspectionItem());//妫�娴嬮」鐩�
-                    auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//闈炲姞鐝鎵樺崟鍙�
-                    auxiliaryOutputWorkingHours.setWorkTime(insProduct.getManHour());//闈炲姞鐝伐鏃�
-                    auxiliaryOutputWorkingHours.setAmount(1);//闈炲姞鐝暟閲�
-                    auxiliaryOutputWorkingHours.setOutputWorkTime(insProduct.getManHour());//浜ч噺宸ユ椂
-                    auxiliaryOutputWorkingHours.setManHourGroup(insProduct.getManHourGroup());//宸ユ椂鍒嗙粍
-                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-                    DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-                    auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//鏃ユ湡
-                    LocalDateTime localDateTime = LocalDateTime.now();
-                    DateTime parse = DateUtil.parse(localDateTime.format(formatter));
-                    auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//鏄熸湡
-                    auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//鍛ㄦ
-                    auxiliaryOutputWorkingHours.setCheck(userId);//妫�娴嬩汉
-                    auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
-                }
-
                 InsSample insSample = insSampleMapper.selectById(insProductMapper.selectById(insProduct.getId()).getInsSampleId());
                 insSample.setInsState(1);
                 Long l = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
                         .eq(InsProduct::getInsSampleId, insSample.getId()));
                 Long l1 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
-                        .eq(InsProduct::getInsSampleId, insSample.getId()).isNotNull(InsProduct::getInsResult));
+                        .eq(InsProduct::getInsSampleId, insSample.getId())
+                        .and(wrapper -> wrapper
+                                .isNotNull(InsProduct::getInsResult)
+                                .or()
+                                .ne(InsProduct::getInsResult, 2)
+                        ));
                 if (l == l1) {
+                    //濡傛灉鎵�鏈夐」鐩兘鏈夌粨璁�,閭d箞璇ユ牱鍝佺姸鎬佸凡妫�
                     insSample.setInsState(2);
                 }
                 insSampleMapper.updateById(insSample);
+                /*鏍¢獙涓�涓媟esult琛�*/
+                List<InsProductResult> insProductResults = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
+                        .eq(InsProductResult::getNum, num)
+                        .eq(InsProductResult::getInsProductId, insProduct.getId()));
+                if (insProductResults.size() > 1) {
+                    for (int i = 1; i < insProductResults.size(); i++) {
+                        insProductResultMapper.deleteById(insProductResults.get(i));
+                    }
+                }
             });
             return insContext.keySet().stream().findFirst().orElse(null);
         }).thenAccept(res -> {
             if (res != null) {
                 int pId = Integer.parseInt(res.replaceAll("\\D+", ""));
                 InsProduct insProduct = insProductMapper.selectById(pId);
-                // 閫氳繃pId 鑾峰彇褰撳墠鏍锋湰id
-                int sampleId = insProductMapper.selectById(pId).getInsSampleId();
                 // 閫氳繃鏍锋湰id鑾峰彇璁㈠崟id
-                int orderId = insSampleMapper.selectById(sampleId).getInsOrderId();
-                // 閫氳繃璁㈠崟id鏌ユ壘鎵�鏈夋牱鏈琲d
-                List<Integer> sampleIds = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId)).stream().map(InsSample::getId).collect(Collectors.toList());
-                // 閫氳繃妫�鏌ユ瘡涓�涓牱鏈琲d鏌ュ埌灞炰簬妫�楠岄」缁撹 is null鐨勬暟閲�
-                Long count = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery().in(InsProduct::getInsSampleId, sampleIds).isNull(InsProduct::getInsResult).eq(InsProduct::getSonLaboratory, insProduct.getSonLaboratory()).eq(InsProduct::getState, 1));
+                InsSample insSample = insSampleMapper.selectById(insProduct.getInsSampleId());
+                int orderId = insSample.getInsOrderId();
+                int count = insProductMapper.selectInsProductCountByOrderId(insSample.getId());
                 if (count == 0) {
                     insOrderStateMapper.update(new InsOrderState(), Wrappers.<InsOrderState>lambdaUpdate()
                             .eq(InsOrderState::getInsOrderId, orderId)
+                            .eq(InsOrderState::getInsSampleId, insSample.getId())
                             .eq(InsOrderState::getLaboratory, insProduct.getSonLaboratory())
                             .set(InsOrderState::getInsState, 2));
                 }
@@ -426,698 +774,562 @@
         });
     }
 
+    //鐢佃矾璇曢獙鐨勪繚瀛樻楠屽唴瀹�
     @Override
-    public int upPlanUser(Integer userId, Integer orderId) {
+    public List<Integer> saveInsContext2(InsProductResultDto insProductResultDtos) {
+        if (ObjectUtils.isEmpty(insProductResultDtos.getFrequency())) {
+            throw new ErrorException("棰戠巼涓嶈兘涓虹┖");
+        }
+        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+        //鏌ヨ鏍峰搧淇℃伅
+        InsSample insSample = insSampleMapper.selectById(insProductResultDtos.getSampleId());
+        //鏌ヨ妫�楠屽崟淇℃伅
+        InsOrderState orderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                .eq(InsOrderState::getInsSampleId, insProductResultDtos.getSampleId())
+                .eq(InsOrderState::getLaboratory, insProductResultDtos.getSonLaboratory())
+                .orderByDesc(InsOrderState::getId)
+                .last("LIMIT 1"));// 纭繚鍙彇涓�鏉¤褰�
+        List<Integer> list = new ArrayList<>();
+        /*鏂板妫�楠岄」鐩楠屽�艰褰曡〃(閲囧彇鍏堝垹鍚庡)*/
+        insProductResult2Mapper.delete(Wrappers.<InsProductResult2>lambdaQuery()
+                .in(InsProductResult2::getInsProductId, insProductResultDtos.getInsProductResult2s().stream().map(InsProductResult2::getInsProductId).distinct().collect(Collectors.toList()))
+                .eq(InsProductResult2::getNum, orderState.getNum())
+                .eq(InsProductResult2::getFrequency, insProductResultDtos.getFrequency()));
+        List<InsProductResult2> result2s = new ArrayList<>();
+        List<InsProductUser> insProductUsers = new ArrayList<>();
+        for (InsProductResult2 insProductResult2 : insProductResultDtos.getInsProductResult2s()) {
+            InsProduct insProduct = new InsProduct();
+            insProduct.setId(insProductResult2.getInsProductId());//椤圭洰id
+            InsProductResult2 result2 = new InsProductResult2();
+            result2.setNum(orderState.getNum());
+            result2.setInsProductId(insProductResult2.getInsProductId());
+            //棰戠巼
+            result2.setFrequency(insProductResultDtos.getFrequency());
+            //棰戠偣
+            if (insProductResult2.getOften() != null) {
+                result2.setOften(insProductResult2.getOften());
+            }
+            //绔彛
+            if (insProductResult2.getPort() != null) {
+                result2.setPort(insProductResult2.getPort());
+            }
+            //瑙掑害
+            if (insProductResult2.getAngle() != null) {
+                result2.setAngle(insProductResult2.getAngle());
+            }
+            //璁惧缂栧彿
+            if (insProductResult2.getEquipValue() != null) {
+                result2.setEquipValue(insProductResult2.getEquipValue());
+            }
+            //璁惧鍚嶇О
+            if (insProductResult2.getEquipName() != null) {
+                result2.setEquipName(insProductResult2.getEquipName());
+            }
+            insProduct = insProductMapper.selectById(insProduct.getId());
+            //鍊�
+            if (insProductResult2.getValue() != null) {
+                result2.setValue(insProductResult2.getValue());
+                //缁撹
+                int ressult = 1;
+                String valueStr = insProductResult2.getValue();
+                String regex = "[\u4e00-\u9fa5]";
+                if (!insProduct.getAsk().contains(",")) {
+                    if (insProduct.getAsk().equals("/") || Pattern.compile(regex).matcher(insProduct.getAsk()).find()) {
+                        ressult = 3; //涓嶅垽瀹�
+                    } else if (!isValueValid(valueStr, new String[]{insProduct.getAsk()})) {
+                        ressult = 0; //涓嶅悎鏍�
+                    }
+                } else {
+                    // 濡傛灉瑕佹眰鍊兼槸(2掳鈮�20,7掳鈮�25,12掳鈮�25)杩欑鎯呭喌
+                    String[] askParts = insProduct.getAsk().split(",");
+                    String[] angles = insProductResult2.getAngle().split(",");
+                    for (String s : askParts) {
+                        String[] askSplit = s.split("掳");
+                        String angleKey = askSplit[0];
+                        String angleValue = askSplit[1];
+                        for (int i = 0; i < angles.length; i++) {
+                            if (angles[i].split("掳")[0].equals(angleKey)) {
+                                try {
+                                    String s1 = valueStr.substring(1, valueStr.length() - 1).split("\\],\\[")[i];
+                                    if (!s1.startsWith("[")) {
+                                        s1 = "[" + s1;
+                                    }
+                                    if (!s1.endsWith("]")) {
+                                        s1 = s1 + "]";
+                                    }
+                                    if (!isValueValid("[" + s1 + "]", new String[]{angleValue})) {
+                                        ressult = 0; // 涓嶅悎鏍�
+                                        break;
+                                    }
+                                } catch (Exception e) {
+                                } finally {
+                                    continue;
+                                }
+                            }
+                        }
+                    }
+                }
+                result2.setResult(ressult);
+                list.add(ressult);
+            }
+            result2.setCreateUser(userId);
+            result2.setUpdateUser(userId);
+            result2s.add(result2);
+            //insProductResult2Mapper.insert(result2);
+            //insProduct.setUpdateUser(userId);
+            //insProducts.add(insProduct);
+            //insProductMapper.updateById(insProduct);
+            insProductUsers.add(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId()));
+            //insProductUserMapper.insert(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId()));
+            /*鏇存柊鏍峰搧鐨勬楠岀姸鎬�*/
+            insSample.setInsState(1);
+            Long l = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+                    .eq(InsProduct::getInsSampleId, insSample.getId()));
+            Long l1 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+                    .eq(InsProduct::getInsSampleId, insSample.getId())
+                    .and(wrapper -> wrapper
+                            .isNotNull(InsProduct::getInsResult)
+                            .or()
+                            .ne(InsProduct::getInsResult, 2)
+                    ));
+            if (l == l1) {
+                //濡傛灉鎵�鏈夐」鐩兘鏈夌粨璁�,閭d箞璇ユ牱鍝佺姸鎬佸凡妫�
+                insSample.setInsState(2);
+            }
+        }
+        insProductResult2Mapper.saveBatch(result2s);
+        insProductUserMapper.saveBatch(insProductUsers);
+        insSampleMapper.updateById(insSample);
+        /*鍒ゆ柇璇ョ珯鐐圭殑妫�楠岄」鐩槸鍚﹀叏閮ㄥ凡妫�*/
+        int count = insProductMapper.selectInsProductCountByOrderId(insSample.getInsOrderId());
+        if (count == 0) {
+            insOrderStateMapper.update(new InsOrderState(), Wrappers.<InsOrderState>lambdaUpdate()
+                    .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                    .eq(InsOrderState::getInsSampleId, insProductResultDtos.getSampleId())
+                    .eq(InsOrderState::getLaboratory, insProductResultDtos.getSonLaboratory())
+                    .set(InsOrderState::getInsState, 2));
+        }
+        return list;
+    }
+
+    //鐢佃矾璇曢獙鐨勪繚瀛樻楠屽唴瀹�(杩斿洖/鎻愪氦)
+    @Override
+    public int saveInsContext2s(InsProductResultDtos insProductResultDtos) {
+        for (InsProductResultDto insProductResultDto : insProductResultDtos.getInsProductResultDtos()) {
+            saveInsContext2(insProductResultDto);
+        }
+        return 1;
+    }
+
+    /**
+     * 闇囧姩doc鏂囦欢瑙f瀽
+     * @param urlString
+     * @param orderId
+     * @param sampleId
+     * @param originFileName
+     * @return
+     */
+    private Map<String, String> docAnalysis(String urlString,Integer orderId,Integer sampleId,String originFileName) {
+        Map<String, String> analysisMap = new HashMap<>();
+        try {
+            File file = new File(urlString);
+            HWPFDocument document = new HWPFDocument(new FileInputStream(file));
+            Range range = document.getRange();
+            TableIterator tableIterator = new TableIterator(range);
+            List<Table> tableList = new ArrayList<>();
+            while (tableIterator.hasNext()) {
+                tableList.add(tableIterator.next());
+            }
+            for (int tableIndex = 0; tableIndex < tableList.size(); tableIndex++) {
+                // 鍙栫涓�涓〃鍗曢檺鍒跺弬鏁扮殑  鎸姩鍙板瀷鍙枫�佽繍鍔ㄩ儴浠剁瓑鏁堣川閲忋�佽瘯浠惰川閲忔暟鍊�
+                if(tableIndex == 0){
+                    Table table = tableList.get(0);
+                    for (int i = 0; i < table.numRows(); i++) {
+                        if(table.getRow(i).numCells() < 2){
+                            continue;
+                        }
+                        String columnText = ObjectUtils.isEmpty(table.getRow(i).getCell(0))? "" : table.getRow(i).getCell(0).text();
+                        String columnValue = ObjectUtils.isEmpty(table.getRow(i).getCell(1))? "" : table.getRow(i).getCell(1).text();
+                        if(columnValue.contains("\u0007")){
+                            columnValue = columnValue.replace("\u0007","");
+                        }
+                        if(columnText.contains("\u0007")){
+                            columnText = columnText.replace("\u0007","");
+                        }
+                        if(columnText.equals("鎸姩鍙板瀷鍙�")){
+                            analysisMap.put("11",columnValue);
+                        }
+                        if(columnText.equals("杩愬姩閮ㄤ欢绛夋晥璐ㄩ噺")){
+                            analysisMap.put("12",columnValue);
+                        }
+                        if(columnText.equals("璇曚欢璐ㄩ噺")){
+                            analysisMap.put("1",columnValue);
+                        }
+                    }
+                }
+                //鍙栫涓�涓〃鍗曡緭鍏ラ�氶亾鍙傛暟绗竴鏉℃暟鎹�
+                if(tableIndex == 1){
+                    Table table = tableList.get(1);
+                    if(ObjectUtils.isNotEmpty(table) && table.numRows() > 1 && table.getRow(1).numCells() >= 3){
+                        String columnValue = ObjectUtils.isEmpty(table.getRow(1).getCell(2))? "" : table.getRow(1).getCell(2).text();
+                        if(columnValue.contains("\u0007")){
+                            columnValue = columnValue.replace("\u0007","");
+                        }
+                        analysisMap.put("9",columnValue);
+                    }
+                }
+                // 鍙栨渶鍚庝竴涓〃鍗曠涓夌鍥涜淇℃伅
+                if(tableIndex == tableList.size() - 1){
+                    Table table = tableList.get(tableIndex);
+                    for (int i = 0; i < table.numRows(); i++) {
+                        if(table.getRow(i).numCells() < 2){
+                            continue;
+                        }
+                        String columnText = ObjectUtils.isEmpty(table.getRow(i).getCell(0))? "" : table.getRow(i).getCell(0).text();
+                        String columnValue = ObjectUtils.isEmpty(table.getRow(i).getCell(1))? "" : table.getRow(i).getCell(1).text();
+                        if(columnValue.contains("\u0007")){
+                            columnValue = columnValue.replace("\u0007","");
+                        }
+                        if(columnText.contains("\u0007")){
+                            columnText = columnText.replace("\u0007","");
+                        }
+                        if(columnText.contains("鎬昏繍琛屾椂闂�")){
+                            analysisMap.put("13",columnValue);
+                        }
+                        if(columnText.contains("璇曢獙鎵鏁�")){
+                            analysisMap.put("10",columnValue);
+                        }
+                    }
+                }
+            }
+            // 鍥剧墖缁戝畾
+            List<Picture> pictureList = document.getPicturesTable().getAllPictures();
+            String[] split = originFileName.split("\\.");
+            String docName = "";
+            if(null != split && split.length > 0){
+                docName = split[0];
+            }
+            for (Picture picture : pictureList) {
+                byte[] pictureData = picture.getContent();
+                File imgDir = new File(imgUrl);
+                if (!imgDir.exists()) {
+                    imgDir.mkdirs();
+                }
+                String filename = docName + "_" + UUID.randomUUID()+".png";
+                File pictureFile = new File(imgUrl + File.separatorChar + filename);
+                // 鍒涘缓杈撳嚭娴佷互灏嗗浘鐗囨暟鎹啓鍏ュ埌鎸囧畾璺緞
+                try (OutputStream outputStream = new FileOutputStream(pictureFile)) {
+                    // 鍐欏叆鏁版嵁
+                    outputStream.write(pictureData);
+                }
+                InsOrderFile insOrderFile = new InsOrderFile();
+                insOrderFile.setInsOrderId(orderId);
+                insOrderFile.setInsSampleId(sampleId);
+                insOrderFile.setSonLaboratory("鎸姩");
+                insOrderFile.setType(1);
+                insOrderFile.setFileName(filename);
+                insOrderFile.setFileUrl(filename);
+                insOrderFileMapper.insert(insOrderFile);
+            }
+        }catch (Exception e){
+            log.error(e.getMessage());
+        }
+        return analysisMap;
+    }
+
+    //娓╂箍搴﹁瘯楠�+鍔熺巼璇曢獙鐨勪繚瀛樻楠屽唴瀹�
+    @Override
+    public int saveInsContext3(InsProductResult insProductResult) {
+        //鍏堝垹鍚庡姞
+        insProductResultMapper.delete(Wrappers.<InsProductResult>lambdaQuery()
+                .eq(InsProductResult::getInsProductId, insProductResult.getInsProductId())
+                .eq(InsProductResult::getNum, insProductResult.getNum()));
+        insProductResult.setEquipValue("[{\"v\":\"" + insProductResult.getEquipValue() + "\"}]");
+        insProductResult.setEquipName("[{\"v\":\"" + insProductResult.getEquipName() + "\"}]");
+        insProductResultMapper.insert(insProductResult);
+        return 0;
+    }
+
+    //瑙f瀽瑕佹眰鍊肩殑鏍煎紡
+    private boolean getResult(double s, String ask) {
+        // 澶勭悊卤鑼冨洿鐨勬潯浠�
+        if (ask.contains("卤")) {
+            Pattern pattern = Pattern.compile("(\\d+)卤(\\d+)");
+            Matcher matcher = pattern.matcher(ask);
+            if (matcher.matches()) {
+                double center = Double.parseDouble(matcher.group(1));
+                double tolerance = Double.parseDouble(matcher.group(2));
+                return Math.abs(s - center) <= tolerance;
+            }
+        }
+        // 澶勭悊鍏朵粬姣旇緝鏉′欢
+        if (ask.startsWith(">") || ask.startsWith("锛�")) {
+            double threshold = Double.parseDouble(ask.substring(1));
+            return s > threshold;
+        } else if (ask.startsWith("鈮�")) {
+            double threshold = Double.parseDouble(ask.substring(1));
+            return s >= threshold;
+        } else if (ask.startsWith("<")|| ask.startsWith("锛�")) {
+            double threshold = Double.parseDouble(ask.substring(1));
+            return s < threshold;
+        } else if (ask.startsWith("鈮�")) {
+            double threshold = Double.parseDouble(ask.substring(1));
+            return s <= threshold;
+        } else if (ask.equals("=")|| ask.startsWith("锛�")) {
+            double exactValue = Double.parseDouble(ask.substring(1));
+            return s == exactValue;
+        }
+        // 澶勭悊涓嶆敮鎸佺殑鏉′欢
+        throw new IllegalArgumentException("鏈煡鏍煎紡瑕佹眰鍊艰妫�鏌�" + ask);
+    }
+
+    //灏嗗墠绔紶杩囨潵鐨勫�艰浆鎹㈡垚鏁扮粍鐨勫舰寮�
+    private String[] parseValues(String valueStr) {
+        String trimmedStr = valueStr.substring(1, valueStr.length() - 1);
+        return Arrays.stream(trimmedStr.split("\\],\\["))
+                .map(s -> s.substring(1, s.length() - 1).split(","))
+                .flatMap(Arrays::stream)
+                .map(s -> s.replace("\"", ""))
+                .toArray(String[]::new);
+    }
+
+    //鍒よ鍚堟牸涓庝笉鍚堟牸
+    private boolean isValueValid(String valueStr, String[] valuesToCheck) {
+        for (String s : parseValues(valueStr)) {
+            if (ObjectUtils.isEmpty(s)) {
+                continue;
+            }
+            double numericValue = Math.abs(Double.parseDouble(s));
+            boolean valid = Arrays.stream(valuesToCheck)
+                    .allMatch(v -> getResult(numericValue, v));
+            if (!valid) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    //浜ゆ帴
+    @Override
+    public int upPlanUser(Integer userId, Integer sampleId, String sonLaboratory) {
         InsSampleUser insSampleUser = new InsSampleUser();
         insSampleUser.setUserId(userId);
-        insSampleUser.setInsSampleId(orderId);
+        insSampleUser.setInsSampleId(sampleId);
         insSampleUser.setState(0);
+        insSampleUser.setSonLaboratory(sonLaboratory);
         return insSampleUserMapper.insert(insSampleUser);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int verifyPlan(Integer orderId, String laboratory, Integer type, String tell) {
-        Integer num = (type == 1 ? 5 : 4);
+    public int verifyPlan(Integer sampleId, String laboratory, Integer type, String tell)  {
         LocalDateTime now = LocalDateTime.now();
-        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, now).set(InsOrderState::getInsState, num).set(InsOrderState::getVerifyTell, tell).set(InsOrderState::getVerifyUser, getLook.selectPowerByMethodAndUserId(null).get("userId")));
-        Long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, orderId).ne(InsOrderState::getInsState, 5));
-        if (count == 0 && num == 5) {
-            List<InsUnPass> insUnPasses = new ArrayList<>();
-            /*鏍峰搧涓嬬殑椤圭洰鍙鏈変竴涓」鐩笉鍚堟牸鍒欐楠岀粨鏋滀负0,鍚﹀垯涓�1*/
-            List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId));
-            for (InsSample insSample : insSamples) {
-                List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, insSample.getId()).eq(InsProduct::getState, 1));
-                List<Integer> results = insProducts.stream().map(InsProduct::getInsResult).filter(str -> str != null).collect(Collectors.toList());
-                if (results.contains(0)) {
-                    insSample.setInsResult(0);
-                } else {
-                    insSample.setInsResult(1);
-                }
-                insSampleMapper.updateById(insSample);
-                /*澶嶆牳閫氳繃鍚庯紝灏嗕笉鍚堟牸鐨勯」鐩俊鎭坊鍔犲埌ins_un_pass琛ㄤ腑*/
-                for (InsProduct insProduct : insProducts) {
-                    if (insProduct.getInsResult() == 0) {
-                        InsUnPass insUnPass = new InsUnPass();
-                        insUnPass.setId(null);
-                        insUnPass.setModel(insSample.getModel());
-                        insUnPass.setSample(insSample.getSample());
-                        insUnPass.setInspectionItem(insProduct.getInspectionItem());
-                        insUnPass.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());
-                        insUnPass.setLastValue(insProduct.getLastValue());
-                        insUnPass.setEntrustCode(insOrderMapper.selectById(orderId).getEntrustCode());
-                        List<Integer> userIds = insProductUserMapper.selectList(Wrappers.<InsProductUser>lambdaQuery().eq(InsProductUser::getInsProductId, insProduct.getId())).stream().map(InsProductUser::getCreateUser).distinct().collect(Collectors.toList());
-                        String name = userMapper.selectBatchIds(userIds).stream().map(User::getName).collect(Collectors.joining(","));
-                        insUnPass.setName(name);
-                        insUnPasses.add(insUnPass);
-                    }
-                }
+        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+        List<InsUnPass> insUnPasses = new ArrayList<>();
+        /*鏍峰搧涓嬬殑椤圭洰鍙鏈変竴涓」鐩笉鍚堟牸鍒欐楠岀粨鏋滀负0,鍚﹀垯涓�1*/
+        InsSample insSample = insSampleMapper.selectById(sampleId);
+        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .eq(InsProduct::getInsSampleId, insSample.getId())
+                .eq(InsProduct::getSonLaboratory, laboratory)
+                .eq(InsProduct::getState, 1));
+        List<Integer> results = insProducts.stream().map(InsProduct::getInsResult).filter(str -> str != null).collect(Collectors.toList());
+        if (results.contains(0)) {
+            insSample.setInsResult(0);
+        } else {
+            insSample.setInsResult(1);
+        }
+        insSampleMapper.updateById(insSample);
+        /*澶嶆牳鍚庯紝灏嗕笉鍚堟牸鐨勯」鐩俊鎭坊鍔犲埌ins_un_pass琛ㄤ腑*/
+        InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
+        for (InsProduct insProduct : insProducts) {
+            if (insProduct.getInsResult() == 0) {
+                InsUnPass insUnPass = new InsUnPass();
+                insUnPass.setId(null);
+                insUnPass.setModel(insSample.getModel());
+                insUnPass.setSample(insSample.getSample());
+                insUnPass.setInspectionItem(insProduct.getInspectionItem());
+                insUnPass.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());
+                insUnPass.setLastValue(insProduct.getLastValue());
+                insUnPass.setEntrustCode(insOrder.getEntrustCode());
+                List<Integer> userIds = insProductUserMapper.selectList(Wrappers.<InsProductUser>lambdaQuery().eq(InsProductUser::getInsProductId, insProduct.getId())).stream().map(InsProductUser::getCreateUser).distinct().collect(Collectors.toList());
+                String name = userMapper.selectBatchIds(userIds).stream().map(User::getName).collect(Collectors.joining(","));
+                insUnPass.setName(name);
+                insUnPasses.add(insUnPass);
             }
-            insUnPassService.saveBatch(insUnPasses);
-            InsOrder insOrder = insOrderMapper.selectById(orderId);
-            Map<String, String> user = insProductMapper.selectUserById(insOrder.getUserId());
-            List<SampleProductDto> samples = insSampleMapper.selectSampleProductListByOrderId(orderId);
-            InsReport insReport = new InsReport();
-            insReport.setCode(insOrder.getEntrustCode());
-            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);
-            String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
-            AtomicReference<String> resultCh = new AtomicReference<>("");
-            AtomicReference<String> resultEn = new AtomicReference<>("");
-            samples.forEach(a -> {
-                Set<Integer> set = new HashSet<>();
-                Map<Integer, String> map2 = new HashMap<>();
-                Long productCount = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, a.getId()));
-                productSize.set(productSize.get() + Integer.parseInt(productCount + ""));
-                models.add(a.getModel());
-                standardMethod.add(baseMapper.getStandardMethodCode(a.getStandardMethodListId()));
-                Set<String> templateSet = new HashSet<>();
-                getTemplateThing(set, map2, a.getInsProduct());
-                for (InsProduct b : a.getInsProduct()) {
-                    if (b.getInsProductResult() != null) {
-                        List<JSONObject> jsonObjects = JSON.parseArray(b.getInsProductResult().getEquipValue(), JSONObject.class);
-                        for (JSONObject jsonObject : jsonObjects) {
-                            if (!"".equals(jsonObject.get("v") + "")) {
-                                deviceSet.add(jsonObject.get("v") + "");
-                            }
-                        }
-                    }
-                    if (b.getTemplate() == null) {
-                        continue;
-                    }
-                    if (b.getTemplate().size() == 0) {
-                        continue;
-                    }
-                    templateSet.add(JSON.toJSONString(b.getTemplate()));
-                }
-                templateSet.forEach(tem -> {
-                    AtomicInteger index = new AtomicInteger();
-                    Set<Integer> set2 = new HashSet<>();
-                    List<RowRenderData> rows = new ArrayList<>();
-                    List<TextRenderData> text = new ArrayList<>();
-                    RowRenderData rowRenderData;
-                    Set<String> delSet = new HashSet<>();
-                    List<ExcelDto> excelDtos = JSON.parseArray(tem, ExcelDto.class);
-                    List<ExcelDto> mcList = new ArrayList<>();
-                    excelDtos.forEach(b -> {
-                        if (b.getV().getMc() != null && b.getV().getMc().getCs() != null && b.getV().getMc().getRs() != null) {
-                            mcList.add(b);
-                        }
-                    });
-                    int count5 = 0;
-                    for (ExcelDto b : mcList) {
-                        for (ExcelDto excelDto : excelDtos) {
-                            for (int i = 0; i < b.getV().getMc().getCs(); i++) {
-                                for (int i2 = 0; i2 < b.getV().getMc().getRs(); i2++) {
-                                    if (excelDto.getC() == b.getC() + i && excelDto.getR() == b.getR() + i2) {
-                                        ExcelDto bb = JSON.parseObject(JSON.toJSONString(b), ExcelDto.class);
-                                        excelDto.getV().setV(bb.getV().getV());
-                                        excelDto.getV().setPs(bb.getV().getPs());
-                                        excelDto.getV().setFc(bb.getV().getFc());
-                                        excelDto.getV().setFs(bb.getV().getFs());
-                                        excelDto.getV().setHt(bb.getV().getHt());
-                                        excelDto.setMc(count5);
-                                        break;
-                                    }
-                                }
-                            }
-                        }
-                        count5++;
-                    }
-                    List<JSONObject> temp = JSON.parseArray(JSON.toJSONString(excelDtos), JSONObject.class);
-                    Map<String, InsProduct> pMap = new HashMap<>();
-                    Set<String> delRSet = new HashSet<>();
-                    delRSet.add("0");
-                    for (JSONObject jo1 : temp) {
-                        JSONObject v = JSON.parseObject(JSON.toJSONString(jo1.get("v")));
-                        if (Integer.parseInt(jo1.get("c") + "") > 9) {
-                            delSet.add(jo1.get("c") + "");
-                            continue;
-                        }
-                        if (v.get("ps") != null) {
-                            int count3 = 0;
-                            String str = "";
-                            String s = JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "";
-                            if ("妫�楠屽��".equals(s) || "璁惧鍚嶇О".equals(s) || "璁惧缂栫爜".equals(s) || "璇曢獙鏂规硶".equals(s) || "妫�娴嬫柟娉�".equals(s)) {
-                                delSet.add(jo1.get("c") + "");
-                                continue;
-                            }
-                            for (JSONObject jo2 : temp) {
-                                JSONObject v2 = JSON.parseObject(JSON.toJSONString(jo2.get("v")));
-                                if (jo1.get("r").equals(jo2.get("r"))) {
-                                    if (v2.get("ps") != null && JSON.parseObject(JSON.toJSONString(v2.get("ps"))).get("value").equals("妫�楠岄」")) {
-                                        if (count3 == 0) {
-                                            str += v2.get("v");
-                                            count3 += 1;
-                                        }
-                                    } else if (v2.get("ps") != null && JSON.parseObject(JSON.toJSONString(v2.get("ps"))).get("value").equals("妫�楠屽瓙椤�")) {
-                                        if (count3 == 1) {
-                                            str += v2.get("v");
-                                            count3 += 1;
-                                        }
-                                    }
-                                }
-                            }
-                            if (!str.equals("")) {
-                                int count2 = 0;
-                                for (InsProduct product : a.getInsProduct()) {
-                                    if ((product.getInspectionItem() + product.getInspectionItemSubclass()).equals(str)) {
-                                        pMap.put(jo1.get("r") + "", product);
-                                        break;
-                                    } else {
-                                        count2++;
-                                    }
-                                }
-                                if (count2 == a.getInsProduct().size()) {
-                                    delRSet.add(jo1.get("r") + "");
-                                }
-                            }
-                        }
-                    }
-                    for (int i = 0; i < temp.size(); i++) {
-                        JSONObject jo1 = temp.get(i);
-                        TextRenderData textRenderData = new TextRenderData();
-                        if (set2.add(Integer.parseInt(jo1.get("r") + ""))) {
-                            if (text.size() > 0) {
-                                TextRenderData[] text2 = text.toArray(new TextRenderData[0]);
-                                rowRenderData = Rows.of(text2).center().rowAtleastHeight(1).create();
-                                rows.add(rowRenderData);
-                                text = new ArrayList<>();
-                            }
-                        }
-                        if (delRSet.stream().anyMatch(e -> e.equals(jo1.get("r") + ""))) {
-                            continue;
-                        }
-                        if (delSet.stream().anyMatch(e -> e.equals(jo1.get("c") + ""))) {
-                            continue;
-                        }
-                        JSONObject v = JSON.parseObject(JSON.toJSONString(jo1.get("v")));
-                        InsProduct p = pMap.get(jo1.get("r") + "");
-                        if (p != null && v.get("ps") != null) {
-                            String value = JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "";
-                            if (value.equals("瑕佹眰鍊�")) {
-                                textRenderData.setText(ObjectUtils.isNotEmpty(p.getTell()) ? p.getTell() : "");
-                            } else if (value.equals("鍗曚綅")) {
-                                textRenderData.setText(p.getUnit());
-                            } else if (value.equals("缁撹")) {
-                                switch (p.getInsResult()) {
-                                    case 1:
-                                        textRenderData.setText("鈭�");
-                                        break;
-                                    case 0:
-                                        resultCh.set(resultCh.get() + "銆�" + p.getInspectionItem() + (Objects.equals(p.getInspectionItemSubclass(), "") ? "" : " " + p.getInspectionItemSubclass()));
-                                        resultEn.set(resultEn.get() + "銆�" + p.getInspectionItemEn() + ((Objects.equals(p.getInspectionItemSubclassEn(), "") || Objects.equals(p.getInspectionItemSubclassEn(), null)) ? "" : " " + p.getInspectionItemSubclassEn()));
-                                        textRenderData.setText("脳");
-                                        break;
-                                    default:
-                                        textRenderData.setText("-");
-                                        break;
-                                }
-                            } else if (value.equals("搴忓彿")) {
-                                index.getAndIncrement();
-                                textRenderData.setText(index + "");
-                            } else if (value.equals("璁$畻鍊�")) {
-                                JSONArray jsonArray = JSON.parseArray(p.getInsProductResult().getComValue());
-                                textRenderData.setText((JSON.parseObject(JSON.toJSONString(jsonArray.get(0))).get("v") + "").equals("") ? "/" : JSON.parseObject(JSON.toJSONString(jsonArray.get(0))).get("v") + "");
-                            } else if (value.equals("鏈�缁堝��")) {
-                                textRenderData.setText(p.getLastValue());
-                            } else if (value.equals("鏍峰搧缂栧彿")) {
-                                textRenderData.setText(a.getSampleCode());
-                            } else if (value.equals("鏍峰搧鍨嬪彿")) {
-                                textRenderData.setText(a.getModel());
-                            } else if (value.equals("鏍峰搧鍚嶇О")) {
-                                textRenderData.setText(a.getSample());
-                            } else if (value.equals("璇曢獙鏂规硶")) {
-                                textRenderData.setText(p.getMethodS());
-                            } else if (value.equals("妫�楠岄」")) {
-                                textRenderData.setText(p.getInspectionItem() + "\n" + p.getInspectionItemEn());
-                            } else if (value.equals("妫�楠屽瓙椤�")) {
-                                if (ObjectUtils.isEmpty(p.getInspectionItemSubclassEn())) {
-                                    textRenderData.setText(p.getInspectionItemSubclass());
-                                } else {
-                                    textRenderData.setText(p.getInspectionItemSubclass() + "\n" + p.getInspectionItemSubclassEn());
-                                }
-                            } else {
-                                textRenderData.setText(v.get("v") == null ? "" : v.get("v") + "");
-                            }
-                        } else if (p == null && v.get("ps") != null) {
-                            String value = JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "";
-                            p = pMap.get(pMap.keySet().iterator().next());
-                            if (value.equals("鏈�缁堝��")) {
-                                textRenderData.setText(p.getLastValue());
-                            } else if (value.equals("缁撹")) {
-                                switch (p.getInsResult()) {
-                                    case 1:
-                                        textRenderData.setText("鉁�");
-                                        break;
-                                    case 0:
-                                        resultCh.set(resultCh.get() + "銆�" + p.getInspectionItem() + (p.getInspectionItemSubclass().equals("") ? "" : " " + p.getInspectionItemSubclass()));
-                                        resultEn.set(resultEn.get() + "銆�" + p.getInspectionItemEn() + ((Objects.equals(p.getInspectionItemSubclassEn(), "") || Objects.equals(p.getInspectionItemSubclassEn(), null)) ? "" : " " + p.getInspectionItemSubclassEn()));
-                                        textRenderData.setText("鉁�");
-                                        break;
-                                    default:
-                                        textRenderData.setText("-");
-                                        break;
-                                }
-                            } else if (value.equals("鏍峰搧缂栧彿")) {
-                                textRenderData.setText(a.getSampleCode());
-                            } else if (value.equals("鏍峰搧鍨嬪彿")) {
-                                textRenderData.setText(a.getModel());
-                            } else if (value.equals("鏍峰搧鍚嶇О")) {
-                                textRenderData.setText(a.getSample());
-                            } else {
-                                textRenderData.setText(v.get("v") == null ? "" : v.get("v") + "");
-                            }
-                        } else {
-                            textRenderData.setText(v.get("v") == null ? "" : v.get("v") + "");
-                        }
-                        if (jo1.get("mc") != null) {
-                            textRenderData.setText(textRenderData.getText() + "鈭�" + jo1.get("mc"));
-                        }
-                        Style style = new Style();
-//                        style.setFontFamily(v.get("ff") == null ? "瀹嬩綋" : v.get("ff") + "");
-                        style.setFontFamily("瀹嬩綋");
-                        if (!((v.get("fc") + "").indexOf("rgb") > -1)) {
-                            style.setColor(v.get("fc") == null ? "000000" : (v.get("fc") + "").replace("#", ""));
-                        } else {
-                            style.setColor("000000");
-                        }
-                        textRenderData.setStyle(style);
-                        text.add(textRenderData);
-                    }
-                    TextRenderData[] text2 = text.toArray(new TextRenderData[0]);
-                    rowRenderData = Rows.of(text2).rowAtleastHeight(1).center().create();
-                    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()) {
-                        /*for (CellRenderData cell : row.getCells()) {
-                            System.out.print(cell.getParagraphs().get(0).getContents());
-                        }
-                        System.out.println("");*/
-                        if (row.getCells().size() != countSize) {
-                            throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
-                        }
-                    }
-                    TableStyle tableStyle = new TableStyle();
-                    tableStyle.setColWidths(new int[]{650, 1600, 2000, 750, 2800, 1100, 1100});
-                    tableStyle.setWidth("10000");
-                    tableStyle.setAlign(TableRowAlign.CENTER);
-                    BorderStyle borderStyle = new BorderStyle();
-                    borderStyle.setColor("000000");
-                    borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
-                    borderStyle.setSize(14);
-                    tableStyle.setLeftBorder(borderStyle);
-                    tableStyle.setTopBorder(borderStyle);
-                    tableStyle.setRightBorder(borderStyle);
-                    tableStyle.setBottomBorder(borderStyle);
-                    tableRenderData.setTableStyle(tableStyle);
-                    Map<String, Object> table = new HashMap<>();
-                    table.put("table", tableRenderData);
-                    table.put("report", insReport);
-                    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("銆�").append(s);
-            }
-            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;
-            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("鎵句笉鍒版楠屼汉鐨勭鍚�");
-            }
-            //Custom custom = customMapper.selectById(user.get("company"));
-            Custom custom = customMapper.selectById(insOrder.getCompanyId());
-            if (!resultCh.get().equals("")) {
-                resultCh.set("渚濇嵁濮旀墭瑕佹眰锛�" + resultCh.get().replaceFirst("銆�", "") + "绛夋墍妫�椤圭洰涓嶇鍚堣姹傦紝鍏朵綑鎵�妫�椤圭洰鍧囩鍚堣姹傘��");
-                resultEn.set("According to commissioned requirements," + resultEn.get().replaceFirst("銆�", "") + " these inspected items do not meet the requirements, all other inspected items meet the requirements.");
-            } else {
-                resultCh.set("渚濇嵁濮旀墭瑕佹眰锛屾墍妫�椤圭洰鍧囩鍚堣姹傘��");
-                resultEn.set("According to commissioned requirements, all the tested items meet the requirements.");
-            }
-            /*鍏夌氦鐨勬楠屾姤鍛�*/
-            //鍏堝垽鏂槸鍚︽湁鍏夌氦閰嶇疆
-            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getState, 1).in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList())));
-            List<Integer> collect = insProducts.stream().map(InsProduct::getInsFiberId).filter(str -> str != null).collect(Collectors.toList());
-            List<Map<String, Object>> tables2 = new ArrayList<>();
-            if (collect.size() > 0) {
-                samples.forEach(sample -> {
-                    List<InsProduct> insProducts1 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
-                            .eq(InsProduct::getState, 1)
-                            .eq(InsProduct::getInsSampleId, sample.getId())
-                            .isNotNull(InsProduct::getInsFiberId));
-                    long size = insProducts1.size();
-                    long size2 = insProducts1.stream().map(InsProduct::getInsFiberId).distinct().count();
-                    List<RowRenderData> rows = new ArrayList<>();
-                    //鍒ゆ柇妫�楠岄」鐩槸鍚︽湁鐖跺瓙鍏崇郴
-                    Boolean state = true;
-                    for (InsProduct insProduct : insProducts1) {
-                        if (!insProduct.getInspectionItemSubclass().equals("") && insProduct.getInspectionItemSubclass() != null) {
-                            state = false;
-                        }
-                    }
-                    int a = 1;
-                    if (!state) {
-                        a = 2;
-                    }
-                    //琛ㄦ牸鐨勮鏁�
-                    for (long i = 0; i < size2 + a; i++) {
-                        RowRenderData rowRenderData = new RowRenderData();
-
-                        RowStyle rowStyle = new RowStyle();
-                        rowStyle.setHeight(40);
-                        rowRenderData.setRowStyle(rowStyle);
-                        List<CellRenderData> cells = new ArrayList<>();
-                        //琛ㄦ牸鐨勫垪鏁�
-                        for (long j = 0; j < size + 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("绠¤壊鏍嘰nPipe鈭�100");
-                                    renderData.add(textRenderData);
-                                    paragraphRenderData.setContents(renderData);
-                                    paragraphRenderDataList.add(paragraphRenderData);
-                                    cellRenderData.setParagraphs(paragraphRenderDataList);
-                                    cells.add(cellRenderData);
-                                } else if (j == 1) {
-                                    //绗簩鍒�
-                                    textRenderData.setText("鍏夌氦鑹叉爣\nScanning Number鈭�101");
-                                    renderData.add(textRenderData);
-                                    paragraphRenderData.setContents(renderData);
-                                    paragraphRenderDataList.add(paragraphRenderData);
-                                    cellRenderData.setParagraphs(paragraphRenderDataList);
-                                    cells.add(cellRenderData);
-                                } else {
-                                    //椤圭洰淇℃伅
-                                    textRenderData.setText(insProducts1.get((int) (j - 2)).getInspectionItem() + "\n" + insProducts1.get((int) (j - 2)).getInspectionItemEn() + "鈭�" + (j + 101));
-                                    renderData.add(textRenderData);
-                                    paragraphRenderData.setContents(renderData);
-                                    paragraphRenderDataList.add(paragraphRenderData);
-                                    cellRenderData.setParagraphs(paragraphRenderDataList);
-                                    cells.add(cellRenderData);
-                                }
-                            } else if (a == 2 && i == 1) {
-                                //鏈夌埗瀛愰」鐩叧绯荤殑绗笁琛�
-                                if (j == 0) {
-                                    //绗竴鍒�
-                                    textRenderData.setText("绠¤壊鏍嘰nPipe鈭�100");
-                                    renderData.add(textRenderData);
-                                    paragraphRenderData.setContents(renderData);
-                                    paragraphRenderDataList.add(paragraphRenderData);
-                                    cellRenderData.setParagraphs(paragraphRenderDataList);
-                                    cells.add(cellRenderData);
-                                } else if (j == 1) {
-                                    //绗簩鍒�
-                                    textRenderData.setText("鍏夌氦鑹叉爣\nScanning Number鈭�101");
-                                    renderData.add(textRenderData);
-                                    paragraphRenderData.setContents(renderData);
-                                    paragraphRenderDataList.add(paragraphRenderData);
-                                    cellRenderData.setParagraphs(paragraphRenderDataList);
-                                    cells.add(cellRenderData);
-                                } else {
-                                    //椤圭洰淇℃伅
-                                    //鍒ゆ柇鏄惁鏈夐」鐩瓙绫�
-                                    if (insProducts1.get((int) (j - 2)).getInspectionItemSubclass().equals("") || insProducts1.get((int) (j - 2)).getInspectionItemSubclass() == null) {
-                                        textRenderData.setText(insProducts1.get((int) (j - 2)).getInspectionItem() + "\n" + insProducts1.get((int) (j - 2)).getInspectionItemEn() + "鈭�" + (j + 101));
-                                    } else {
-                                        textRenderData.setText(insProducts1.get((int) (j - 2)).getInspectionItemSubclass() + "\n\n" + insProducts1.get((int) (j - 2)).getInspectionItemSubclassEn());
-                                    }
-                                    renderData.add(textRenderData);
-                                    paragraphRenderData.setContents(renderData);
-                                    paragraphRenderDataList.add(paragraphRenderData);
-                                    cellRenderData.setParagraphs(paragraphRenderDataList);
-                                    cells.add(cellRenderData);
-                                }
-                            } else {
-                                int aa = 0;
-                                if (a == 2) {
-                                    aa = (int) i - 2;
-                                } else aa = (int) i - 1;
-                                InsFiber insFiber = insFiberMapper.selectById(insProducts1.get(aa).getInsFiberId());
-                                //濉��
-                                if (j == 0) {
-                                    //绗竴鍒�
-                                    textRenderData.setText(insFiber.getBushColor());
-                                    renderData.add(textRenderData);
-                                    paragraphRenderData.setContents(renderData);
-                                    paragraphRenderDataList.add(paragraphRenderData);
-                                    cellRenderData.setParagraphs(paragraphRenderDataList);
-                                    cells.add(cellRenderData);
-                                } else if (j == 1) {
-                                    //绗簩鍒�
-                                    textRenderData.setText(insFiber.getColor());
-                                    renderData.add(textRenderData);
-                                    paragraphRenderData.setContents(renderData);
-                                    paragraphRenderDataList.add(paragraphRenderData);
-                                    cellRenderData.setParagraphs(paragraphRenderDataList);
-                                    cells.add(cellRenderData);
-                                } else {
-                                    //椤圭洰淇℃伅
-                                    textRenderData.setText(insProducts1.get((int) (j - 2)).getLastValue());
-                                    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()) {
-                        /*for (CellRenderData cell : row.getCells()) {
-                            System.out.print(cell.getParagraphs().get(0).getContents());
-                        }
-                        System.out.println("");*/
-                        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(14);
-                    tableStyle.setLeftBorder(borderStyle);
-                    tableStyle.setTopBorder(borderStyle);
-                    tableStyle.setRightBorder(borderStyle);
-                    tableStyle.setBottomBorder(borderStyle);
-                    tableRenderData.setTableStyle(tableStyle);
-                    Map<String, Object> table = new HashMap<>();
-                    table.put("table2", tableRenderData);
-                    table.put("report", insReport);
-                    table.put("sample_number", sample.getSampleCode());
-                    table.put("type", sample.getModel());
-                    tables2.add(table);
-                });
-            }
-
-            /*鑾峰彇闄勪欢鍥剧墖绫诲瀷*/
-            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("/");
-            }
-
-            XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
-                    new HashMap<String, Object>() {{
-                        put("order", insOrder);
-                        put("report", insReport);
-                        //put("user", user);
-                        put("custom", custom);
-                        put("sampleSize", samples.size());
-                        put("tables", tables);
-                        put("tableSize", tables.size() + 1);
-                        put("tables2", tables2);
-                        put("standardMethod", (standardMethod2.toString().equals("null") ? "" : standardMethod2));
-                        put("deviceList", finalDeviceList);
-                        put("twoCode", Pictures.ofLocal(codePath).create());
-                        put("models", finalModelStr.replace(",", ""));
-                        put("productSize", productSize);
-                        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] + " " + now.getDayOfMonth() + ", " + now.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());
-                        put("resultCh", resultCh.get());
-                        put("resultEn", resultEn.get());
-                    }});
-            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(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")) {
-                                TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
-                            }
-                        }
-                        if (v.get("er") > v.get("sr")) {
-                            TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
-                        }
-                    }
-                }
-                FileOutputStream fileOutputStream = new FileOutputStream(path);
-                document.write(fileOutputStream);
-                fileOutputStream.close();
-            } catch (FileNotFoundException e) {
-                throw new RuntimeException(e);
-            } catch (IOException e) {
-                throw new RuntimeException(e);
+        }
+        insUnPassService.saveBatch(insUnPasses);
+        /*type=0  鍐嶆璇曢獙; type=1 缁х画璇曢獙 ; type=2 缁撴潫璇曢獙*/
+        // 鏌ヨ鏍规嵁 id 鍊掑簭鎺掑垪鐨勭涓�鏉¤褰�
+        InsOrderState record = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                .eq(InsOrderState::getInsSampleId, sampleId)
+                .eq(InsOrderState::getLaboratory, laboratory)
+                .orderByDesc(InsOrderState::getId)
+                .last("LIMIT 1")); // 纭繚鍙彇涓�鏉¤褰�
+        if (record != null) {
+            //鏇存柊璁板綍
+            insOrderUserMapper.update(null, Wrappers.<InsOrderUser>lambdaUpdate()
+                    .eq(InsOrderUser::getInsOrderStateId, record.getId())
+                    .eq(InsOrderUser::getNum, record.getNum())
+                    .set(InsOrderUser::getTell, tell));
+            switch (type) {
+                case 0:
+                    //鍐嶆璇曢獙:璇ュ崟瀛愰��鍥炲埌妫�楠岀姸鎬�(鎺掑簭鏀规垚褰撳墠鐨勬渶鍚�),娆℃暟閫掑(淇濈暀浠ュ墠鐨勬暟鎹�)锛�
+                    insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+                            .eq(InsOrderState::getId, record.getId())
+                            .set(InsOrderState::getInsTime, now)
+                            .set(InsOrderState::getInsState, 4)
+                            .set(InsOrderState::getVerifyTell, tell)
+                            .set(InsOrderState::getVerifyUser, userId)
+                            .set(InsOrderState::getNum, record.getNum() + 1)//娆℃暟鍔�1
+                            .set(InsOrderState::getCreateTime, LocalDateTime.now()));
+                    break;
+                case 1:
+                    //缁х画璇曢獙:璇ユ牱鍝佽绔欑偣浠诲姟缁撴潫(鍙互鍐嶆鎵爜妫�楠�)锛�
+                    insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+                            .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                            .eq(InsOrderState::getInsSampleId, sampleId)
+                            .eq(InsOrderState::getLaboratory, laboratory)
+                            .set(InsOrderState::getInsState, 6)
+                            .set(InsOrderState::getVerifyTell, tell)
+                            .set(InsOrderState::getVerifyUser, userId));
+                    //缁х画璇曢獙鑷姩鍑哄簱
+                    WarehouseHistory history = new WarehouseHistory();
+                    history.setState(2);
+                    history.setInsSampleId(sampleId);
+                    history.setCellId(insSample.getCellId());
+                    history.setWarehouseCode(warehouseHistoryMapper.selectOne(Wrappers.<WarehouseHistory>lambdaQuery()
+                            .eq(WarehouseHistory::getInsSampleId, sampleId).select(WarehouseHistory::getWarehouseCode).orderByDesc(WarehouseHistory::getId).last("limit 1")).getWarehouseCode());
+                    insSampleMapper.update(null, Wrappers.<InsSample>lambdaUpdate().eq(InsSample::getId, sampleId).set(InsSample::getCellId, null));
+                    warehouseHistoryMapper.insert(history);
+                    break;
+                case 2:
+                    //缁撴潫璇曢獙:姝ゅ鎵樺崟鍋滄璇曢獙(鏃犳硶鍐嶆妫�楠�)銆�
+                    insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+                            .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                            .eq(InsOrderState::getInsSampleId, sampleId)
+                            .eq(InsOrderState::getLaboratory, laboratory)
+                            .set(InsOrderState::getInsState, 5)
+                            .set(InsOrderState::getVerifyTell, tell)
+                            .set(InsOrderState::getVerifyUser, userId));
+                    /*鐢熸垚瀵瑰簲鐨勬楠屾姤鍛�*/
+                    List<InsReportDto1> insReportDto1s=insOrderUserMapper.selectInsReportDto1(insOrder.getId());
+                    createReport(insOrder.getId(),insReportDto1s);
+                    break;
             }
         }
         return 1;
     }
 
-    private void getTemplateThing(Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) {
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int verifyPlan2(Integer sampleId, String laboratory, Integer type, String tell) {
+        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+        InsSample insSample = insSampleMapper.selectById(sampleId);
+        InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
+        /*type=0  鍐嶆璇曢獙; type=1 缁х画璇曢獙 ; type=2 缁撴潫璇曢獙*/
+        // 鏌ヨ鏍规嵁 id 鍊掑簭鎺掑垪鐨勭涓�鏉¤褰�
+        InsOrderState record = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                .eq(InsOrderState::getInsSampleId, sampleId)
+                .eq(InsOrderState::getLaboratory, laboratory)
+                .orderByDesc(InsOrderState::getId)
+                .last("LIMIT 1")); // 纭繚鍙彇涓�鏉¤褰�
+        if (record != null) {
+            switch (type) {
+                case 0:
+                    //鍐嶆璇曢獙:璇ュ崟瀛愰��鍥炲埌妫�楠岀姸鎬�(鎺掑簭鏀规垚褰撳墠鐨勬渶鍚�),娆℃暟閫掑(淇濈暀浠ュ墠鐨勬暟鎹�)锛�
+                    insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+                            .eq(InsOrderState::getId, record.getId())
+                            .set(InsOrderState::getInsTime, LocalDateTime.now())
+                            .set(InsOrderState::getInsState, 4)
+                            .set(InsOrderState::getVerifyTell, tell)
+                            .set(InsOrderState::getVerifyUser, userId)
+                            .set(InsOrderState::getNum, record.getNum() + 1)//娆℃暟鍔�1
+                            .set(InsOrderState::getCreateTime, LocalDateTime.now()));
+                    break;
+                case 1:
+                    //缁х画璇曢獙:璇ユ牱鍝佽绔欑偣浠诲姟缁撴潫(鍙互鍐嶆鎵爜妫�楠�)锛�
+                    //鍏堝垽鏂笂涓�涓鏍告槸浠�涔堢粨璁�
+                    if (record.getInsState()==4){
+                        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+                                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                                .eq(InsOrderState::getInsSampleId, sampleId)
+                                .eq(InsOrderState::getLaboratory, laboratory)
+                                .set(InsOrderState::getInsState, 6)
+                                .set(InsOrderState::getVerifyTell, tell)
+                                .set(InsOrderState::getNum, record.getNum() - 1)//娆℃暟-1
+                                .set(InsOrderState::getVerifyUser, userId));
+                    }else {
+                        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+                                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                                .eq(InsOrderState::getInsSampleId, sampleId)
+                                .eq(InsOrderState::getLaboratory, laboratory)
+                                .set(InsOrderState::getInsState, 6)
+                                .set(InsOrderState::getVerifyTell, tell)
+                                .set(InsOrderState::getVerifyUser, userId));
+                    }
+                    //缁х画璇曢獙闇�瑕佸嚭搴�
+                    WarehouseHistory history = new WarehouseHistory();
+                    history.setState(2);
+                    history.setInsSampleId(sampleId);
+                    history.setCellId(insSample.getCellId());
+                    history.setWarehouseCode(warehouseHistoryMapper.selectOne(Wrappers.<WarehouseHistory>lambdaQuery()
+                            .eq(WarehouseHistory::getInsSampleId, sampleId).select(WarehouseHistory::getWarehouseCode).orderByDesc(WarehouseHistory::getId).last("limit 1")).getWarehouseCode());
+                    insSampleMapper.update(null, Wrappers.<InsSample>lambdaUpdate()
+                            .eq(InsSample::getId, sampleId).set(InsSample::getCellId, null));
+                    warehouseHistoryMapper.insert(history);
+                    break;
+                case 2:
+                    //缁撴潫璇曢獙:姝ゅ鎵樺崟鍋滄璇曢獙(鏃犳硶鍐嶆妫�楠�)銆�
+                    //鍏堝垽鏂笂涓�涓鏍告槸浠�涔堢粨璁�
+                    if (record.getInsState()==4){
+                        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+                                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                                .eq(InsOrderState::getInsSampleId, sampleId)
+                                .eq(InsOrderState::getLaboratory, laboratory)
+                                .set(InsOrderState::getInsState, 5)
+                                .set(InsOrderState::getIsOut,1)//澶嶆牳缁撴潫鍑哄簱涔嬪悗鍒楄〃涓嶆樉绀�
+                                .set(InsOrderState::getNum, record.getNum() - 1)//娆℃暟-1
+                                .set(InsOrderState::getVerifyTell, tell)
+                                .set(InsOrderState::getVerifyUser, userId));
+                    }else {
+                        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+                                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                                .eq(InsOrderState::getInsSampleId, sampleId)
+                                .eq(InsOrderState::getLaboratory, laboratory)
+                                .set(InsOrderState::getInsState, 5)
+                                .set(InsOrderState::getIsOut,1)//澶嶆牳缁撴潫鍑哄簱涔嬪悗鍒楄〃涓嶆樉绀�
+                                .set(InsOrderState::getVerifyTell, tell)
+                                .set(InsOrderState::getVerifyUser, userId));
+                    }
+                    /*鐢熸垚瀵瑰簲鐨勬楠屾姤鍛�*/
+                    List<InsReportDto1> insReportDto1s=insOrderUserMapper.selectInsReportDto1(insOrder.getId());
+                    createReport(insOrder.getId(),insReportDto1s);
+                    break;
+            }
+        }
+        return 1;
+    }
+
+
+    /*鐢熸垚瀵瑰簲鐨勬楠屾姤鍛�*/
+    private void createReport(Integer orderId,List<InsReportDto1> insReportDto1s){
+        for (InsReportDto1 insReportDto1 : insReportDto1s) {
+            if (ObjectUtils.isNotEmpty(insReportDto1.getInsReportDto2s())){
+                wordUtils.generateReport(orderId, insReportDto1);
+//                try{
+//                    wordUtils.generateReport(orderId, insReportDto1);
+//                }catch (Exception e){
+//                    throw new ErrorException("鎶ュ憡鏍煎紡鐢熸垚鏈夎,璇疯仈绯荤鐞嗗憳!");
+//                }
+            }
+        }
+    }
+
+    private void getTemplateThing
+            (Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) {
         for (InsProduct product : insProducts) {
             if (product.getTemplateId() == null) {
                 product.setTemplate(new ArrayList<>());
@@ -1128,7 +1340,6 @@
                 map2.put(product.getTemplateId(), standardTemplateService.getStandTempThingById(product.getTemplateId()) + "");
                 thing = map2.get(product.getTemplateId());
             }
-//            thing = map2.get(product.getTemplateId());
             if (StrUtil.isNotEmpty(thing)) {
                 JSONObject sheet = JSON.parseObject(JSON.toJSONString(JSON.parseArray(JSON.toJSONString(JSON.parseObject(thing).get("data"))).get(0)));
                 JSONObject config = JSON.parseObject(JSON.toJSONString(sheet.get("config")));
@@ -1144,51 +1355,239 @@
     }
 
     @Override
-    public int submitPlan(Integer orderId, String laboratory, Integer verifyUser) {
-        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId));
-        List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList());
-        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().in(InsProduct::getInsSampleId, ids).eq(InsProduct::getSonLaboratory, laboratory).eq(InsProduct::getState, 1).isNull(InsProduct::getInsResult).isNull(InsProduct::getInsFiberId).isNull(InsProduct::getInsFibersId));
-        insProducts.addAll(insProductMapper.selectFiberInsProduct(ids, laboratory));
+    public int submitPlan(SubmitPlanDto submitPlanDto) {
+        InsSample insSample = insSampleMapper.selectById(submitPlanDto.getSampleId());
+        InsOrderState orderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                .eq(InsOrderState::getInsSampleId, submitPlanDto.getSampleId())
+                .eq(InsOrderState::getLaboratory, submitPlanDto.getLaboratory())
+                .orderByDesc(InsOrderState::getId)
+                .last("LIMIT 1"));// 纭繚鍙彇涓�鏉¤褰�
+        /*璁板綍妫�楠屼换鍔℃瘡娆$殑澶囨敞淇℃伅*/
+        InsOrderUser insOrderUser = new InsOrderUser();
+        insOrderUser.setInsOrderStateId(orderState.getId());
+        insOrderUser.setSubmitUser(getLook.selectPowerByMethodAndUserId(null).get("userId"));
+        insOrderUser.setInsTime(orderState.getInsTime());
+        insOrderUser.setSubmitTime(LocalDateTime.now());
+        insOrderUser.setNum(orderState.getNum());
+        insOrderUser.setNote(ObjectUtils.isNotEmpty(submitPlanDto.getNote()) ? submitPlanDto.getNote() : null);
+        insOrderUser.setTerm(ObjectUtils.isNotEmpty(submitPlanDto.getTerm()) ? submitPlanDto.getTerm() : null);
+        insOrderUserMapper.insert(insOrderUser);
+        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .eq(InsProduct::getInsSampleId, insSample.getId())
+                .eq(InsProduct::getSonLaboratory, submitPlanDto.getLaboratory())
+                .and(wrapper -> wrapper
+                        .isNull(InsProduct::getInsResult)
+                        .or()
+                        .eq(InsProduct::getInsResult, 2)
+                )
+                .eq(InsProduct::getState, 1));
         if (insProducts.size() > 0) {
             String str = "";
             int count = 0;
             for (InsProduct product : insProducts) {
+                //娓╂箍搴﹁瘯楠�,鍔熺巼璇曢獙鐨勬楠岄」鐩�,涓嶉渶瑕佸幓鎵嬪姩濉啓妫�楠屽��,鍙渶瑕佷笂浼犺〃鏍兼枃浠跺氨鍙互浜�,鍚庡彴鎻愪氦鐨勬椂鍊欐牎楠岃烦杩囪繖涓楠岄」鐩�
+                if ( product.getInspectionItem().equals("娓╂箍搴﹁瘯楠�") || product.getInspectionItem().equals("鍔熺巼璇曢獙")) {
+                    product.setInsResult(3);//涓嶅垽瀹�
+                    insProductMapper.updateById(product);
+                    continue;
+                }
+                //鐢佃矾璇曢獙鐨勬楠岄」鐩�,闇�瑕佸湪鎻愪氦鐨勬椂鍊欏啀鍘昏祴鍊煎悎鏍间笌涓嶅悎鏍�
+                if (product.getInspectionItem().equals("鐢佃矾璇曢獙")) {
+                    List<Integer> collect = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
+                            .eq(InsProductResult2::getNum, orderState.getNum())
+                            .eq(InsProductResult2::getInsProductId, product.getId())).stream().map(InsProductResult2::getResult).distinct().collect(Collectors.toList());
+                    if (collect.contains(0)) {
+                        product.setInsResult(0);//涓嶅悎鏍�
+                    } else {
+                        product.setInsResult(1);//鍚堟牸
+                    }
+                    insProductMapper.updateById(product);
+                    continue;
+                }
                 count++;
                 str += "<br/>" + count + "锛�" + product.getInspectionItem() + " " + product.getInspectionItemSubclass() + "<br/>";
             }
-            throw new ErrorException("<strong>瀛樺湪寰呮楠岀殑椤圭洰锛�</strong><br/>" + str);
+            if (ObjectUtils.isNotEmpty(str)) {
+                throw new ErrorException("<strong>瀛樺湪寰呮楠岀殑椤圭洰锛�</strong><br/>" + str);
+            }
         }
-        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 3).set(InsOrderState::getVerifyUser, verifyUser));
+        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                .eq(InsOrderState::getInsSampleId, submitPlanDto.getSampleId())
+                .eq(InsOrderState::getLaboratory, submitPlanDto.getLaboratory())
+                .set(InsOrderState::getInsState, 3)
+                .set(InsOrderState::getVerifyUser, submitPlanDto.getVerifyUser()));
+        InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
+
         Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+        //LIMS绯荤粺娑堟伅鎺ㄩ��
         InformationNotification info = new InformationNotification();
         info.setCreateUser(insProductMapper.selectUserById(userId).get("name"));
         info.setMessageType("2");
         info.setTheme("澶嶆牳閫氱煡");
-        info.setContent("鎮ㄦ湁涓�鏉℃楠屼换鍔″緟澶嶆牳娑堟伅");
+        info.setContent("鎮ㄦ湁涓�鏉℃楠屼换鍔″緟澶嶆牳娑堟伅,璁㈠崟鍙锋槸锛�" + insOrder.getEntrustCode()+"绔欑偣鏄細"+submitPlanDto.getLaboratory() + ",鏍峰搧鍚嶇О涓猴細" + insSample.getSample());
         info.setSenderId(userId);
-        info.setConsigneeId(verifyUser);
+        info.setConsigneeId(submitPlanDto.getVerifyUser());
         info.setViewStatus(false);
         info.setJumpPath("b1-inspect-order-plan");
         informationNotificationService.addInformationNotification(info);
-        upPlanUser(verifyUser, orderId);
+        //澶嶆牳浜�--妫�楠屽崟鐩稿叧璐熻矗浜�
+        InsSampleUser insSampleUser = new InsSampleUser();
+        insSampleUser.setUserId(submitPlanDto.getVerifyUser());
+        insSampleUser.setInsSampleId(submitPlanDto.getSampleId());
+        insSampleUser.setState(1);
+        insSampleUser.setSonLaboratory(submitPlanDto.getLaboratory());
+        insSampleUserMapper.insert(insSampleUser);
+        /*鐢熸垚鐢佃矾璇曢獙鐨勭珯鐐规姤鍛婂苟涓婁紶鍒伴檮浠朵腑*/
+        if (submitPlanDto.getLaboratory().equals("鐢佃矾璇曢獙")) {
+            if (!insOrder.getSampleType().equals("鏃犳簮鍣ㄤ欢")) {
+                wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
+            } else {
+                wordUtils.generateWord2(submitPlanDto.getTerm(), orderState);
+            }
+        }
+        /*鐢熸垚浜ч噺宸ユ椂*/
+        //鏍¢獙濡傛灉杩欎釜浜鸿繖涓娴嬮」鐩凡缁忔坊鍔犺繃浜嗗垯涓嶉渶瑕佸啀鏂板
+        //棣栧厛鍒ゆ柇褰撳墠浜虹殑褰撳墠鏃堕棿鏄惁鏄帓鐝椂闂村唴,濡傛灉涓嶆槸灏辨槸鍔犵彮
+        LocalDateTime today = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT);
+        PerformanceShift performanceShift = performanceShiftMapper.selectOne(Wrappers.<PerformanceShift>lambdaQuery()
+                .eq(PerformanceShift::getUserId, userId)
+                .eq(PerformanceShift::getWorkTime, today));
+        if (ObjectUtils.isNotEmpty(performanceShift)) {
+            ShiftTime shiftTime = shiftTimeMapper.selectOne(Wrappers.<ShiftTime>lambdaQuery().eq(ShiftTime::getShift, performanceShift.getShift()));
+            if (ObjectUtils.isNotEmpty(shiftTime)) {
+                DateTimeFormatter forma = DateTimeFormatter.ofPattern("HH:mm");
+                LocalTime now = LocalTime.now();
+                LocalTime startTime = LocalTime.parse(shiftTime.getStartTime(), forma);
+                LocalTime endTime = LocalTime.parse(shiftTime.getEndTime(), forma);
+                // 妫�鏌ュ綋鍓嶆椂闂存槸鍚﹀湪鑼冨洿鍐咃紙鍖呮嫭杈圭晫锛�
+                boolean isWithinRange;
+                if (endTime.isAfter(startTime)) {
+                    // 涓嶈法澶╃殑鎯呭喌
+                    isWithinRange = !now.isBefore(startTime) && !now.isAfter(endTime);
+                } else {
+                    // 璺ㄥぉ鐨勬儏鍐�
+                    isWithinRange = !now.isBefore(startTime) || !now.isAfter(endTime);
+                }
+                for (AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours : submitPlanDto.getAuxiliaryOutputWorkingHoursList()) {
+                    InsProduct insProduct = insProductMapper.selectById(auxiliaryOutputWorkingHours.getInsProductId());
+                    if (isWithinRange) {
+                        //鍦ㄦ椂闂村唴灏辨槸姝e父涓婄彮
+                        auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//闈炲姞鐝鎵樺崟鍙�
+                        auxiliaryOutputWorkingHours.setWorkTime(auxiliaryOutputWorkingHours.getOutputWorkTime());//闈炲姞鐝伐鏃�
+                        auxiliaryOutputWorkingHours.setAmount(1);//闈炲姞鐝暟閲�
+                    } else {
+                        //鍔犵彮
+                        auxiliaryOutputWorkingHours.setOvertimeOrderNo(insOrder.getEntrustCode());//鍔犵彮濮旀墭鍗曞彿
+                        auxiliaryOutputWorkingHours.setOvertimeWorkTime(auxiliaryOutputWorkingHours.getOutputWorkTime());//鍔犵彮宸ユ椂
+                        auxiliaryOutputWorkingHours.setOvertimeAmount(1);//鍔犵彮鏁伴噺
+                    }
+                    auxiliaryOutputWorkingHours.setManHourGroup(insProduct.getManHourGroup());//宸ユ椂鍒嗙粍
+                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                    DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+                    auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//鏃ユ湡
+                    LocalDateTime localDateTime = LocalDateTime.now();
+                    DateTime parse = DateUtil.parse(localDateTime.format(formatter));
+                    auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//鏄熸湡
+                    auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//鍛ㄦ
+                    auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
+                }
+            }
+        }
+
+        //  todo 浼佷笟寰俊娑堟伅鎺ㄩ�丂zss
+        HashMap<String, Object> map = new HashMap<>();
+        String account = userMapper.selectById(submitPlanDto.getVerifyUser()).getAccount();
+        map.put("touser", account);//鎺ユ敹娑堟伅鎴愬憳鐨勮处鍙�'ZT-031292'杩欑绫诲瀷(濡傛灉鏈夊涓敤'|'鍒嗛殧)
+        map.put("toparty", "");//鎺ユ敹閮ㄩ棬id
+        map.put("totag", "");//娑堟伅鏍囩id
+        map.put("msgtype", "text");//娑堟伅绫诲瀷 text:鏂囨湰
+        map.put("agentid", 1000517);//搴旂敤id
+        HashMap<String, Object> hashMap = new HashMap<>();
+        hashMap.put("content", "鎮ㄦ湁涓�鏉℃楠屼换鍔″緟澶嶆牳娑堟伅,璁㈠崟鍙锋槸锛�" + insOrder.getEntrustCode()+"绔欑偣鏄細"+submitPlanDto.getLaboratory() + ",鏍峰搧鍚嶇О涓猴細"  + ",鏍峰搧鍚嶇О涓猴細" + insSample.getSample() +
+                ",璇峰墠寰�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);
         return 1;
     }
 
-    public int pxToCm(int px) {
-        return px / 9;
-    }
-
-    // 鑾峰彇涓や釜localDateTime鐨勬瘡涓�澶�
-    public static List<LocalDateTime> getLocalDateTimesBetween(LocalDateTime start, LocalDateTime end) {
-        List<LocalDateTime> localDateTimes = new ArrayList<>();
-        LocalDate currentDate = start.toLocalDate();
-        LocalDateTime currentLocalDateTime = start;
-        while (!currentDate.isAfter(end.toLocalDate())) {
-            localDateTimes.add(currentLocalDateTime);
-            currentLocalDateTime = currentLocalDateTime.plusDays(1);
-            currentDate = currentDate.plusDays(1);
+    @Override
+    public int cancelSubmitPlan(Integer orderStateId) {
+        InsOrderState orderState = insOrderStateMapper.selectById(orderStateId);
+        InsOrder insOrder = insOrderMapper.selectById(orderState.getInsOrderId());
+        InsSample insSample = insSampleMapper.selectById(orderState.getInsSampleId());
+        /*鍒犻櫎璁板綍妫�楠屼换鍔℃瘡娆$殑澶囨敞淇℃伅*/
+        insOrderUserMapper.delete(Wrappers.<InsOrderUser>lambdaQuery()
+                .eq(InsOrderUser::getInsOrderStateId, orderState.getId())
+                .eq(InsOrderUser::getNum, orderState.getNum()));
+        //鎾ら攢鎻愪氦
+        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+                .eq(InsOrderState::getInsOrderId, orderState.getInsOrderId())
+                .eq(InsOrderState::getInsSampleId, orderState.getInsSampleId())
+                .eq(InsOrderState::getLaboratory, orderState.getLaboratory())
+                .set(InsOrderState::getInsState, 2));
+        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+        //LIMS绯荤粺娑堟伅鎺ㄩ��
+        InformationNotification info = new InformationNotification();
+        info.setCreateUser(insProductMapper.selectUserById(userId).get("name"));
+        info.setMessageType("2");
+        info.setTheme("澶嶆牳鎾ら攢閫氱煡");
+        info.setContent("鎮ㄦ湁涓�鏉℃楠屼换鍔″緟澶嶆牳宸叉挙閿�鐨勬秷鎭�,璁㈠崟鍙锋槸锛�" + insOrder.getEntrustCode() + ",鏍峰搧鍚嶇О涓猴細" + insSample.getSample());
+        info.setSenderId(userId);
+        info.setConsigneeId(orderState.getVerifyUser());
+        info.setViewStatus(false);
+        info.setJumpPath("b1-inspect-order-plan");
+        informationNotificationService.addInformationNotification(info);
+        //鍒犻櫎澶嶆牳浜�--妫�楠屽崟鐩稿叧璐熻矗浜�
+        insSampleUserMapper.delete(Wrappers.<InsSampleUser>lambdaQuery()
+                .eq(InsSampleUser::getState, 1)
+                .eq(InsSampleUser::getSonLaboratory, orderState.getLaboratory())
+                .eq(InsSampleUser::getUserId, orderState.getVerifyUser())
+                .eq(InsSampleUser::getInsSampleId, orderState.getInsSampleId()));
+        //鍒犻櫎鐢熸垚鐨勬姤鍛�
+        if (orderState.getLaboratory().equals("鐢佃矾璇曢獙")) {
+            List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery()
+                    .eq(InsOrderFile::getType, 2)
+                    .like(InsOrderFile::getFileName, "鐢佃矾鍙傛暟.docx")
+                    .eq(InsOrderFile::getInsOrderId, insOrder.getId())
+                    .eq(InsOrderFile::getInsSampleId, orderState.getInsSampleId())
+                    .eq(InsOrderFile::getSonLaboratory, orderState.getLaboratory()));
+            for (InsOrderFile insOrderFile : insOrderFiles) {
+                File file = new File(wordUrl + "/" + insOrderFile.getFileUrl());
+                file.delete();
+                insOrderFileMapper.deleteById(insOrderFile.getId());
+            }
         }
-        return localDateTimes;
+
+        /*鍒犻櫎鐢熸垚浜ч噺宸ユ椂*/
+        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, insSample.getId()));
+        List<Integer> productIds = insProducts.stream().map(InsProduct::getId).distinct().collect(Collectors.toList());
+        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
+                .eq(AuxiliaryOutputWorkingHours::getSample, insSample.getSampleCode())
+                .in(AuxiliaryOutputWorkingHours::getInsProductId, productIds)
+                .eq(AuxiliaryOutputWorkingHours::getNum, orderState.getNum()));
+
+        //  todo 浼佷笟寰俊娑堟伅鎺ㄩ�丂zss
+        HashMap<String, Object> map = new HashMap<>();
+        String account = userMapper.selectById(orderState.getVerifyUser()).getAccount();
+        map.put("touser", account);//鎺ユ敹娑堟伅鎴愬憳鐨勮处鍙�'ZT-031292'杩欑绫诲瀷(濡傛灉鏈夊涓敤'|'鍒嗛殧)
+        map.put("toparty", "");//鎺ユ敹閮ㄩ棬id
+        map.put("totag", "");//娑堟伅鏍囩id
+        map.put("msgtype", "text");//娑堟伅绫诲瀷 text:鏂囨湰
+        map.put("agentid", 1000517);//搴旂敤id
+        HashMap<String, Object> hashMap = new HashMap<>();
+        hashMap.put("content", "鎮ㄦ湁涓�鏉″鏍哥殑娑堟伅宸叉挙閿�,璁㈠崟鍙锋槸锛�" + insOrder.getEntrustCode() + ",鏍峰搧鍚嶇О涓猴細" + insSample.getSample() +
+                ",璇峰墠寰�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);
+        return 0;
     }
 
     public static String getWeek(String dayStr) {
@@ -1199,7 +1598,7 @@
             calendar.setTime(date);
             int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
             int day = calendar.get(Calendar.DAY_OF_MONTH);
-            return day + " " + getWeekDay(dayOfWeek);
+            return getWeekDay(dayOfWeek);
         } catch (Exception e) {
             e.printStackTrace();
         }

--
Gitblit v1.9.3