From c8355d4a1f27716edc510d936b6a7982b0ab99b3 Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期一, 24 三月 2025 13:37:26 +0800
Subject: [PATCH] Merge branch 'master' of http://114.132.189.42:9002/r/tx-lims-after

---
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java | 1475 +++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 880 insertions(+), 595 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 91912bb..5497fbe 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
@@ -15,35 +15,31 @@
 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.yuanchu.mom.common.GetLook;
 import com.yuanchu.mom.common.PrintChina;
-import com.yuanchu.mom.dto.InsOrderPlanDTO;
-import com.yuanchu.mom.dto.InsProductResultDto;
-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.*;
 import com.yuanchu.mom.vo.*;
-import org.apache.commons.io.IOUtils;
-import org.apache.poi.xwpf.usermodel.*;
+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;
@@ -51,11 +47,11 @@
 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;
 
 /**
  * 妫�楠屼换鍔�-涓氬姟瀹炵幇灞�
@@ -81,17 +77,22 @@
     @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;
@@ -120,39 +121,26 @@
     @Resource
     private UserMapper userMapper;
 
-    @Resource
-    private CustomMapper customMapper;
-
     @Value("${file.path}")
     private String imgUrl;
 
     @Resource
-    private InsBushingService insBushingService;
-
-    @Resource
-    private InsBushingMapper insBushingMapper;
-
-    @Resource
-    private InsFiberMapper insFiberMapper;
-
-    @Resource
-    private InsFibersMapper insFibersMapper;
-
-    @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);
-        User user = userMapper.selectById(map1.get("userId"));//褰撳墠鐧诲綍鐨勪汉
-
         String laboratory = null;
         String userName = null;
-        Integer userId = null;
         if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
-            userId = map1.get("userId");
             userName = userMapper.selectById(map1.get("userId")).getName();
             insOrderPlanDTO.setUserId(null);
         }
@@ -186,31 +174,6 @@
         if (Objects.isNull(entity)) {
             return false;
         }
-        /*璁ら闇�瑕佸垽鏂鏍峰搧鏄惁鍦ㄥ簱*/
-        //鏌ヨ鏍峰搧id(杩囨护娌℃湁妫�楠岄」鐩殑鏍峰搧)
-        List<Integer> sampleIds = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
-                .eq(InsSample::getInsOrderId, entity.getInsSampleId())).stream().map(InsSample::getId).collect(Collectors.toList());
-        for (Integer samId : sampleIds) {
-            //杩囨护娌℃湁妫�楠岄」鐩殑鏍峰搧id
-            if (ObjectUtils.isEmpty(insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
-                    .eq(InsProduct::getInsSampleId, samId)
-                    .eq(InsProduct::getState, 1)))) {
-                continue;
-            }
-            //鍏ュ簱娆℃暟
-            Long inCount = warehouseHistoryMapper.selectCount(Wrappers.<WarehouseHistory>lambdaQuery()
-                    .eq(WarehouseHistory::getState, 1)
-                    .eq(WarehouseHistory::getInsSampleId, samId));
-            //鍑哄簱娆℃暟
-            Long outCount = warehouseHistoryMapper.selectCount(Wrappers.<WarehouseHistory>lambdaQuery()
-                    .eq(WarehouseHistory::getState, 2)
-                    .eq(WarehouseHistory::getInsSampleId, samId));
-            if (inCount > 0 && inCount > outCount) {
-                continue;
-            } else {
-                throw new ErrorException("鎵�閫夌殑鏍峰搧搴撳瓨涓嶈冻,璇锋鏌ュ叆搴撳拰鍑哄簱璁板綍!");
-            }
-        }
         Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null);
         Integer userId = map1.get("userId");
         InsSampleUser insSampleUser = new InsSampleUser(entity.getInsSampleId().intValue(), userId, 0, entity.getSonLaboratory());
@@ -218,21 +181,30 @@
     }
 
     @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) {
-            if (BeanUtil.isEmpty(samples.getInsProduct())) continue;
-            samples.setBushing(insBushingService.selectBushingBySampleId(samples.getId()));
-        }
         map.put("sampleProduct", list);
         return map;
     }
@@ -244,8 +216,19 @@
             case 0:
                 //鏍峰搧
                 insProducts = insSampleMapper.getInsProduct1(id, laboratory);
-                if (insProducts.size()==0){
-                    insProducts = insSampleMapper.getIns2Product1(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:
@@ -266,12 +249,15 @@
     }
 
     @Override
-    public List<InsProduct> getInsProduct2(Integer id, Integer type, String laboratory, HttpServletRequest request,Integer num) {
+    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);
+                insProducts = insSampleMapper.get2InsProduct1(id, laboratory, num);
+                if (insProducts.size() == 0) {
+                    throw new ErrorException("褰撳墠妫�楠屾暟鎹繕娌℃湁淇濆瓨,淇濆瓨涔嬪悗鏈夋暟鎹巻鍙�");
+                }
                 break;
             case 1:
                 //鍏夌氦甯�
@@ -291,12 +277,10 @@
     }
 
     @Override
-    public List<String> checkSubmitPlan(Integer orderId, String laboratory) {
+    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::getInsSampleId, sampleId)
                 .eq(InsProduct::getSonLaboratory, laboratory)
                 .eq(InsProduct::getState, 1)
                 .eq(InsProduct::getInsResult, 0));
@@ -312,13 +296,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;
@@ -326,6 +323,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/")) {
             // 鏄浘鐗�
@@ -341,201 +344,43 @@
             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")) {
+                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.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());
         }
-    }
-
-    //鍒囨崲璁板綍妯$増鏌ヨ妫�楠屽唴瀹�
-    @Override
-    public Map<String, Object> getReportModel(Integer sampleId) {
-        Map<String, Object> map = new HashMap<>();
-        //鍏堟煡鍑哄绠�
-        List<InsBushing> insBushings = insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery().eq(InsBushing::getInsSampleId, sampleId));
-        List<InsFibers> fibers = new ArrayList<>();
-        List<InsFiber> fiber = new ArrayList<>();
-        List<InsBushing> bush = new ArrayList<>();
-        for (InsBushing insBushing : insBushings) {
-            //鍐嶆煡璇㈠嚭鎵�鏈夌殑鍏夌氦甯�
-            List<InsFibers> insFibers = insFibersMapper.selectList(Wrappers.<InsFibers>lambdaQuery().eq(InsFibers::getInsBushingId, insBushing.getId()));
-            List<InsFiber> insFiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsBushingId, insBushing.getId()));
-            if (CollectionUtils.isNotEmpty(insFibers)) {
-                for (InsFibers insFiber : insFibers) {
-                    List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsFibersId, insFiber.getId()));
-                    List<Integer> collect = insProducts.stream().map(InsProduct::getInsResult)
-                            .filter(sm -> ObjectUtils.isNotEmpty(sm) && sm != 2).collect(Collectors.toList());
-                    if (insProducts.size() == collect.size()) {
-                        insFiber.setState(1);//宸叉楠�
-                    } else {
-                        insFiber.setState(0);//鏈楠�
-                    }
-                }
-                fibers.addAll(insFibers);
-                //鏌ュ嚭鍏夌氦甯︿笅鎵�鏈夌殑鍏夌氦
-                List<InsFiber> fiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().in(InsFiber::getInsFibersId, insFibers.stream().map(InsFibers::getId).collect(Collectors.toList())));
-                for (InsFiber insFiber : fiberList) {
-                    List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsFiberId, insFiber.getId()));
-                    List<Integer> collect = insProducts.stream().map(InsProduct::getInsResult)
-                            .filter(sm -> ObjectUtils.isNotEmpty(sm) && sm != 2).collect(Collectors.toList());
-                    if (insProducts.size() == collect.size()) {
-                        insFiber.setState(1);//宸叉楠�
-                    } else {
-                        insFiber.setState(0);//鏈楠�
-                    }
-                }
-                fiber.addAll(fiberList);
-            }
-            //濡傛灉濂楃涓嬫病鏈夊厜绾ゅ甫灏卞彧鏈夊厜绾や簡
-            else if (CollectionUtils.isNotEmpty(insFiberList)) {
-                for (InsFiber insFiber : insFiberList) {
-                    List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsFiberId, insFiber.getId()));
-                    List<Integer> collect = insProducts.stream().map(InsProduct::getInsResult)
-                            .filter(sm -> ObjectUtils.isNotEmpty(sm) && sm != 2).collect(Collectors.toList());
-                    if (insProducts.size() == collect.size()) {
-                        insFiber.setState(1);//宸叉楠�
-                    } else {
-                        insFiber.setState(0);//鏈楠�
-                    }
-                }
-                fiber.addAll(insFiberList);
-            }
-            //濡傛灉鍏夌氦甯﹀拰鍏夌氦閮芥病鏈夊氨鍙湁濂楃(鏉惧绠�)
-            else {
-                List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
-                        .eq(InsProduct::getInsBushId, insBushing.getId()));
-                List<Integer> collect = insProducts.stream()
-                        .map(InsProduct::getInsResult)
-                        .filter(sm -> ObjectUtils.isNotEmpty(sm) && sm != 2).collect(Collectors.toList());
-                if (insProducts.size() == collect.size()) {
-                    insBushing.setState(1);//宸叉楠�
-                } else {
-                    insBushing.setState(0);//鏈楠�
-                }
-                bush.add(insBushing);
-            }
-        }
-        map.put("鍏夌氦甯�", fibers);
-        map.put("鍏夌氦", fiber);
-        map.put("濂楃", bush);
-        return map;
-    }
-
-    //娓╁害寰幆鏌ョ湅鍒楄〃鏁版嵁(鍖呮嫭閫氳繃鏍峰搧id,寰幆娆℃暟,娓╁害,寰幆娆℃暟杩涜绛涢��)
-    @Override
-    public Map<String, Object> temCycle(Integer sampleId, String inspectionItem, String inspectionItemSubclass) {
-        Map<String, Object> map = new HashMap<>();
-        //鏍峰搧淇℃伅
-        SampleVo sampleVo = insSampleMapper.getDetailById(sampleId);
-        map.put("sampleVo", sampleVo);
-        List<ProductVo> productVos = new ArrayList<>();
-        //鍏堟煡鍑鸿繖涓牱鍝佷笅鏈夊摢浜涚鑹叉爣,鍏夌氦甯�,鍏夌氦鑹叉爣
-        //鍏堟煡鍑哄绠�
-        List<InsBushing> insBushings = insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery().eq(InsBushing::getInsSampleId, sampleId));
-        if (insBushings.size() > 0) {
-            //閫氫俊--娓╁害寰幆
-            for (InsBushing insBushing : insBushings) {
-                //鍐嶆煡璇㈠嚭鎵�鏈夌殑鍏夌氦甯�
-                List<InsFibers> insFibers = insFibersMapper.selectList(Wrappers.<InsFibers>lambdaQuery().eq(InsFibers::getInsBushingId, insBushing.getId()));
-                if (CollectionUtils.isNotEmpty(insFibers)) {
-                    for (InsFibers insFiber : insFibers) {
-                        //鏌ュ嚭鍏夌氦甯︿笅鎵�鏈夌殑鍏夌氦
-                        List<InsFiber> fiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsFibersId, insFiber.getId()));
-                        for (InsFiber fiber : fiberList) {
-                            //鍐嶆牴鎹叧鑱旂殑鍏夌氦閰嶇疆鐨刬d鍜屽惊鐜鏁板拰娓╁害鍜屾牱鍝乮d杩涜鏌ヨ妫�楠岄」鐩�
-                            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
-                                    .eq(InsProduct::getInsSampleId, sampleId)
-                                    .eq(InsProduct::getInspectionItem, inspectionItem)
-                                    .eq(InsProduct::getInspectionItemSubclass, inspectionItemSubclass)
-                                    .eq(InsProduct::getInsFiberId, fiber.getId()));
-                            for (InsProduct insProduct : insProducts) {
-                                InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
-                                        .eq(InsProductResult::getInsProductId, insProduct.getId()));
-                                ProductVo productVo = new ProductVo();
-                                productVo.setCode(insFiber.getCode());
-                                productVo.setColor(fiber.getColor());
-                                productVo.setBushColor(insBushing.getColor());
-                                if (ObjectUtils.isNotEmpty(insProductResult)) {
-                                    insProduct.setInsProductResult(insProductResult);
-                                }
-                                //姹傚悓绛夋潯浠朵笅1娆″惊鐜�20搴﹀父娓╃殑璁$畻鍊�
-                                InsProductResult insProductResult1 = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
-                                        .eq(InsProduct::getInsSampleId, sampleId)
-                                        .eq(InsProduct::getInspectionItem, "1")
-                                        .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)")
-                                        .eq(InsProduct::getInspectionItemClass, insProduct.getInspectionItemClass())
-                                        .eq(InsProduct::getInsFiberId, fiber.getId())).getId()));
-                                if (ObjectUtils.isNotEmpty(insProductResult1) && !insProductResult1.getComValue().equals("[]")) {
-                                    insProduct.setComplue(insProductResult1.getComValue().split(":")[1].split("\"")[1]);
-                                }
-                                productVo.setInsProduct(insProduct);
-                                productVos.add(productVo);
-                            }
-                        }
-                    }
-                } else {
-                    //濡傛灉濂楃涓嬫病鏈夊厜绾ゅ甫灏卞彧鏈夊厜绾や簡
-                    List<InsFiber> insFiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsBushingId, insBushing.getId()));
-                    for (InsFiber fiber : insFiberList) {
-                        //鍐嶆牴鎹叧鑱旂殑鍏夌氦閰嶇疆鐨刬d鍜屽惊鐜鏁板拰娓╁害鍜屾牱鍝乮d杩涜鏌ヨ妫�楠岄」鐩�
-                        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
-                                .eq(InsProduct::getInsSampleId, sampleId)
-                                .eq(InsProduct::getInspectionItem, inspectionItem)
-                                .eq(InsProduct::getInspectionItemSubclass, inspectionItemSubclass)
-                                .eq(InsProduct::getInsFiberId, fiber.getId()));
-                        for (InsProduct insProduct : insProducts) {
-                            InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()));
-                            ProductVo productVo = new ProductVo();
-                            productVo.setCode("-");
-                            productVo.setColor(fiber.getColor());
-                            productVo.setBushColor(fiber.getBushColor());
-                            insProduct.setInsProductResult(insProductResult);
-                            //姹傚悓绛夋潯浠朵笅1娆″惊鐜�20搴﹀父娓╃殑璁$畻鍊�
-                            InsProductResult insProductResult1 = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
-                                    .eq(InsProduct::getInsSampleId, sampleId)
-                                    .eq(InsProduct::getInspectionItem, "1")
-                                    .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)")
-                                    .eq(InsProduct::getInspectionItemClass, insProduct.getInspectionItemClass())
-                                    .eq(InsProduct::getInsFiberId, fiber.getId())).getId()));
-                            if (ObjectUtils.isNotEmpty(insProductResult1) && !insProductResult1.getComValue().equals("[]")) {
-                                insProduct.setComplue(insProductResult1.getComValue().split(":")[1].split("\"")[1]);
-                            }
-                            productVo.setInsProduct(insProduct);
-                            productVos.add(productVo);
-                        }
-                    }
-                }
-            }
-            productVos = productVos.stream().sorted(Comparator.comparing(productVo -> productVo.getInsProduct().getInspectionItemClass())).collect(Collectors.toList());
-        } else {
-            //鐢靛姏--鐑惊鐜拰娓╁崌璇曢獙
-            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
-                    .eq(InsProduct::getInsSampleId, sampleId)
-                    .eq(InsProduct::getInspectionItem, inspectionItem));
-            for (InsProduct insProduct : insProducts) {
-                InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()));
-                ProductVo productVo = new ProductVo();
-                if (ObjectUtils.isNotEmpty(insProductResult)) {
-                    insProduct.setInsProductResult(insProductResult);
-                }
-                productVo.setInsProduct(insProduct);
-                productVos.add(productVo);
-            }
-        }
-        map.put("productVos", productVos);
-        return map;
+        return 0;
     }
 
     @Override
-    public List<String> upPlanUser2(Integer orderId) {
-        List<Integer> sampleId = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId)).stream().map(InsSample::getId).collect(Collectors.toList());
-        List<String> sonLaboratory = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getState, 1).in(InsProduct::getInsSampleId, sampleId)).stream().map(InsProduct::getSonLaboratory).distinct().collect(Collectors.toList());
+    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;
     }
 
@@ -547,9 +392,196 @@
                 .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);//閫掑
+                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);
+        }
+        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 + "绔欑偣鐨勭浉鍏抽」鐩�,璇锋煡鐪嬩笅鍗曡鎯�!");
+        }
+        //鍒ゆ柇璇ヨ鍗曟槸鍚︾珯鐐逛换鍔℃湁(缁х画璇曢獙鎴栬�呮槸缁撴潫璇曢獙)
+        List<InsOrderState> orderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
+                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                .eq(InsOrderState::getInsState, 5));//缁撴潫璇曢獙
+        if (CollectionUtils.isEmpty(orderStates)) {
+            List<InsOrderState> orderStates1 = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
+                    .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                    .eq(InsOrderState::getInsSampleId, insSample.getId())
+                    .eq(InsOrderState::getLaboratory, sonLaboratory)
+                    .eq(InsOrderState::getInsState, 6));//缁х画璇曢獙
+            if (CollectionUtils.isEmpty(orderStates1)) {
+                throw new ErrorException("璇ユ牱鍝佺殑妫�楠屼换鍔¤繕娌℃湁缁撴潫璇曢獙鎴栫户缁瘯楠�,鏆傛椂鏃犳硶鍑哄簱!");
+            }
+        }
+        boolean a = true;
+        warehouseService.outWarehouse(sampleCode, a, entrustCode);
+        return 0;
+    }
 
     @Override
-    public void saveInsContext(Map<String, Object> insContext,Integer num) {
+    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) -> {
@@ -557,6 +589,7 @@
                 InsProduct insProduct = new InsProduct();
                 insProduct.setId(Integer.parseInt(k));
                 List<InsProductResult> results = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
+                        .eq(InsProductResult::getNum, num)
                         .eq(InsProductResult::getInsProductId, insProduct.getId()));
                 InsProductResult result;
                 if (CollectionUtils.isEmpty(results)) {
@@ -611,6 +644,36 @@
                 } 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")));
@@ -656,67 +719,6 @@
                 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());
-                //鏍¢獙濡傛灉杩欎釜浜鸿繖涓娴嬮」鐩凡缁忔坊鍔犺繃浜嗗垯涓嶉渶瑕佸啀鏂板
-                //棣栧厛鍒ゆ柇褰撳墠浜虹殑褰撳墠鏃堕棿鏄惁鏄帓鐝椂闂村唴,濡傛灉涓嶆槸灏辨槸鍔犵彮
-                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);
-                        }
-                        if (ObjectUtils.isNotEmpty(insProduct.getManHour())) {
-                            //鍏堝垹鍚庡姞(宸ユ椂璁板綍鏈�鍚庝竴娆′繚瀛樼殑鏃堕棿)
-                            auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
-                                    .eq(AuxiliaryOutputWorkingHours::getInsProductId, insProduct.getId()));
-                            AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
-                            if (isWithinRange) {
-                                //鍦ㄦ椂闂村唴灏辨槸姝e父涓婄彮
-                                auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//闈炲姞鐝鎵樺崟鍙�
-                                auxiliaryOutputWorkingHours.setWorkTime(insProduct.getManHour());//闈炲姞鐝伐鏃�
-                                auxiliaryOutputWorkingHours.setAmount(1);//闈炲姞鐝暟閲�
-                                auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : 0) + (ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : 0));//浜ч噺宸ユ椂
-
-                            } else {
-                                //鍔犵彮
-                                auxiliaryOutputWorkingHours.setOvertimeOrderNo(insOrder.getEntrustCode());//鍔犵彮濮旀墭鍗曞彿
-                                auxiliaryOutputWorkingHours.setOvertimeWorkTime(insProduct.getManHour());//鍔犵彮宸ユ椂
-                                auxiliaryOutputWorkingHours.setOvertimeAmount(1);//鍔犵彮鏁伴噺
-                                auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : 0) + (ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : 0));//浜ч噺宸ユ椂
-                            }
-                            auxiliaryOutputWorkingHours.setInspectionItem(insProduct.getInspectionItem());//妫�娴嬬埗椤�
-                            auxiliaryOutputWorkingHours.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());//妫�娴嬪瓙椤�
-                            auxiliaryOutputWorkingHours.setSample(insSampleMapper.selectById(insProduct.getInsSampleId()).getSampleCode());//鏍峰搧缂栧彿
-                            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);//妫�娴嬩汉
-                            auxiliaryOutputWorkingHours.setInsProductId(insProduct.getId());//妫�楠岄」鐩甶d
-                            auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
-                        }
-                    }
-                }
                 InsSample insSample = insSampleMapper.selectById(insProductMapper.selectById(insProduct.getId()).getInsSampleId());
                 insSample.setInsState(1);
                 Long l = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
@@ -735,6 +737,7 @@
                 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++) {
@@ -748,11 +751,13 @@
                 int pId = Integer.parseInt(res.replaceAll("\\D+", ""));
                 InsProduct insProduct = insProductMapper.selectById(pId);
                 // 閫氳繃鏍锋湰id鑾峰彇璁㈠崟id
-                int orderId = insSampleMapper.selectById(insProduct.getInsSampleId()).getInsOrderId();
-                int count = insProductMapper.selectInsProductCountByOrderId(orderId);
+                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));
                 }
@@ -770,21 +775,23 @@
             throw new ErrorException("棰戠巼涓嶈兘涓虹┖");
         }
         Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+        //鏌ヨ鏍峰搧淇℃伅
+        InsSample insSample = insSampleMapper.selectById(insProductResultDtos.getSampleId());
         //鏌ヨ妫�楠屽崟淇℃伅
-        InsOrder insOrder = insOrderMapper.selectById(insProductResultDtos.getOrderId());
         InsOrderState orderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
-                .eq(InsOrderState::getInsOrderId, insProductResultDtos.getOrderId())
+                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                .eq(InsOrderState::getInsSampleId, insProductResultDtos.getSampleId())
                 .eq(InsOrderState::getLaboratory, insProductResultDtos.getSonLaboratory())
                 .orderByDesc(InsOrderState::getId)
                 .last("LIMIT 1"));// 纭繚鍙彇涓�鏉¤褰�
-        //鏌ヨ鏍峰搧淇℃伅
-        InsSample insSample = insSampleMapper.selectById(insProductResultDtos.getSampleId());
         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
@@ -820,8 +827,11 @@
                 //缁撹
                 int ressult = 1;
                 String valueStr = insProductResult2.getValue();
+                String regex = "[\u4e00-\u9fa5]";
                 if (!insProduct.getAsk().contains(",")) {
-                    if (!isValueValid(valueStr, new String[]{insProduct.getAsk()})) {
+                    if (insProduct.getAsk().equals("/") || Pattern.compile(regex).matcher(insProduct.getAsk()).find()) {
+                        ressult = 3; //涓嶅垽瀹�
+                    } else if (!isValueValid(valueStr, new String[]{insProduct.getAsk()})) {
                         ressult = 0; //涓嶅悎鏍�
                     }
                 } else {
@@ -832,7 +842,6 @@
                         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 {
@@ -851,7 +860,6 @@
                                 } finally {
                                     continue;
                                 }
-
                             }
                         }
                     }
@@ -861,69 +869,13 @@
             }
             result2.setCreateUser(userId);
             result2.setUpdateUser(userId);
-            insProductResult2Mapper.insert(result2);
-            insProduct.setUpdateUser(userId);
-            insProductMapper.updateById(insProduct);
-            insProductUserMapper.insert(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId()));
-            /*鐢熸垚浜ч噺宸ユ椂*/
-            //鏍¢獙濡傛灉杩欎釜浜鸿繖涓娴嬮」鐩凡缁忔坊鍔犺繃浜嗗垯涓嶉渶瑕佸啀鏂板
-            //棣栧厛鍒ゆ柇褰撳墠浜虹殑褰撳墠鏃堕棿鏄惁鏄帓鐝椂闂村唴,濡傛灉涓嶆槸灏辨槸鍔犵彮
-            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);
-                    }
-                    if (ObjectUtils.isNotEmpty(insProduct.getManHour())) {
-                        //鍏堝垹鍚庡姞(宸ユ椂璁板綍鏈�鍚庝竴娆′繚瀛樼殑鏃堕棿)
-                        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
-                                .eq(AuxiliaryOutputWorkingHours::getInsProductId, insProduct.getId()));
-                        AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
-                        if (isWithinRange) {
-                            //鍦ㄦ椂闂村唴灏辨槸姝e父涓婄彮
-                            auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//闈炲姞鐝鎵樺崟鍙�
-                            auxiliaryOutputWorkingHours.setWorkTime(insProduct.getManHour());//闈炲姞鐝伐鏃�
-                            auxiliaryOutputWorkingHours.setAmount(1);//闈炲姞鐝暟閲�
-                            auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : 0) + (ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : 0));//浜ч噺宸ユ椂
-
-                        } else {
-                            //鍔犵彮
-                            auxiliaryOutputWorkingHours.setOvertimeOrderNo(insOrder.getEntrustCode());//鍔犵彮濮旀墭鍗曞彿
-                            auxiliaryOutputWorkingHours.setOvertimeWorkTime(insProduct.getManHour());//鍔犵彮宸ユ椂
-                            auxiliaryOutputWorkingHours.setOvertimeAmount(1);//鍔犵彮鏁伴噺
-                            auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : 0) + (ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : 0));//浜ч噺宸ユ椂
-                        }
-                        auxiliaryOutputWorkingHours.setInspectionItem(insProduct.getInspectionItem());//妫�娴嬬埗椤�
-                        auxiliaryOutputWorkingHours.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());//妫�娴嬪瓙椤�
-                        auxiliaryOutputWorkingHours.setSample(insSampleMapper.selectById(insProduct.getInsSampleId()).getSampleCode());//鏍峰搧缂栧彿
-                        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);//妫�娴嬩汉
-                        auxiliaryOutputWorkingHours.setInsProductId(insProduct.getId());//妫�楠岄」鐩甶d
-                        auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
-                    }
-                }
-            }
+            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()
@@ -939,17 +891,152 @@
                 //濡傛灉鎵�鏈夐」鐩兘鏈夌粨璁�,閭d箞璇ユ牱鍝佺姸鎬佸凡妫�
                 insSample.setInsState(2);
             }
-            insSampleMapper.updateById(insSample);
         }
+        insProductResult2Mapper.saveBatch(result2s);
+        insProductUserMapper.saveBatch(insProductUsers);
+        insSampleMapper.updateById(insSample);
         /*鍒ゆ柇璇ョ珯鐐圭殑妫�楠岄」鐩槸鍚﹀叏閮ㄥ凡妫�*/
-        int count = insProductMapper.selectInsProductCountByOrderId(insProductResultDtos.getOrderId());
+        int count = insProductMapper.selectInsProductCountByOrderId(insSample.getInsOrderId());
         if (count == 0) {
             insOrderStateMapper.update(new InsOrderState(), Wrappers.<InsOrderState>lambdaUpdate()
-                    .eq(InsOrderState::getInsOrderId, insProductResultDtos.getOrderId())
+                    .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++) {
+                        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() > 0){
+                        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++) {
+                        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瀽瑕佹眰鍊肩殑鏍煎紡
@@ -965,19 +1052,19 @@
             }
         }
         // 澶勭悊鍏朵粬姣旇緝鏉′欢
-        if (ask.startsWith(">")) {
+        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("<")) {
+        } 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("=")) {
+        } else if (ask.equals("=")|| ask.startsWith("锛�")) {
             double exactValue = Double.parseDouble(ask.substring(1));
             return s == exactValue;
         }
@@ -1001,7 +1088,7 @@
             if (ObjectUtils.isEmpty(s)) {
                 continue;
             }
-            double numericValue = Double.parseDouble(s);
+            double numericValue = Math.abs(Double.parseDouble(s));
             boolean valid = Arrays.stream(valuesToCheck)
                     .allMatch(v -> getResult(numericValue, v));
             if (!valid) {
@@ -1013,10 +1100,10 @@
 
     //浜ゆ帴
     @Override
-    public int upPlanUser(Integer userId, Integer orderId, String sonLaboratory) {
+    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);
@@ -1024,57 +1111,59 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int verifyPlan(Integer orderId, String laboratory, Integer type, String tell) {
+    public int verifyPlan(Integer sampleId, String laboratory, Integer type, String tell)  {
         LocalDateTime now = LocalDateTime.now();
         Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
         List<InsUnPass> insUnPasses = new ArrayList<>();
         /*鏍峰搧涓嬬殑椤圭洰鍙鏈変竴涓」鐩笉鍚堟牸鍒欐楠岀粨鏋滀负0,鍚﹀垯涓�1*/
-        //杩欓噷鐨刬nsSamples鏄鍗曚笅鐨勬墍鏈夋牱鍝佸寘鎷�("/")
-        List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId));
-        for (InsSample insSample : samples) {
-            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
-                    .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琛ㄤ腑*/
-            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);
-                }
+        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);
         /*type=0  鍐嶆璇曢獙; type=1 缁х画璇曢獙 ; type=2 缁撴潫璇曢獙*/
-        switch (type) {
-            case 0:
-                /*鍐嶆璇曢獙:璇ュ崟瀛愰��鍥炲埌妫�楠岀姸鎬�(鎺掑簭鏀规垚褰撳墠鐨勬渶鍚�),娆℃暟閫掑(淇濈暀浠ュ墠鐨勬暟鎹�)锛�*/
-                //鏇存柊鍘熸潵鐨勬楠屼换鍔�
-                // 鏌ヨ鏍规嵁 id 鍊掑簭鎺掑垪鐨勭涓�鏉¤褰�
-                InsOrderState record = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
-                        .eq(InsOrderState::getInsOrderId, orderId)
-                        .eq(InsOrderState::getLaboratory, laboratory)
-                        .orderByDesc(InsOrderState::getId)
-                        .last("LIMIT 1")); // 纭繚鍙彇涓�鏉¤褰�
-                if (record != null) {
-                    // 鑾峰彇鍒扮涓�鏉¤褰曠殑 id 鍚庯紝鎵ц鏇存柊鎿嶄綔
+        // 鏌ヨ鏍规嵁 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)
@@ -1083,85 +1172,154 @@
                             .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, orderId)
-                        .eq(InsOrderState::getLaboratory, laboratory)
-                        .set(InsOrderState::getInsTime, now)
-                        .set(InsOrderState::getInsState, 6)
-                        .set(InsOrderState::getVerifyTell, tell)
-                        .set(InsOrderState::getVerifyUser, userId));
-                //杞帴鑷充笅涓�绔欑偣,闇�瑕佸厛鍒ゆ柇鏄惁杩樻湁鍏朵綑璇曢獙瀹�,濡傛灉鏈夊叾浣欒瘯楠屽闇�瑕佸皢璁㈠崟涓嬪彂
-                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::getState, 1));
-                List<Integer> list = new ArrayList<>();
-                list.add(4);
-                list.add(5);
-                list.add(6);
-                List<InsOrderState> insOrderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
-                        .eq(InsOrderState::getInsOrderId, orderId)
-                        .in(InsOrderState::getInsState, list));
-                List<String> strings = insOrderStates.stream().map(InsOrderState::getLaboratory).distinct().collect(Collectors.toList());
-                //闄ゅ幓褰撳墠澶嶆牳鐨勮瘯楠屽鍜屽凡缁忓鏍哥殑璇曢獙瀹�
-                List<String> collect = insProducts.stream()
-                        .map(InsProduct::getSonLaboratory)
-                        .distinct()
-                        .filter(s -> !s.equals(laboratory))
-                        .filter(s -> !strings.contains(s))
-                        .collect(Collectors.toList());
-                if (collect.size() > 0) {
-                    //瑕佸垽鏂墿浣欒瘯楠屽涓摢涓渶绌洪棽灏卞畨鎺掔粰鍝釜
-                    Map<String, Long> dataCounts = new HashMap<>();
-                    for (String sonLaboratory : collect) {
-                        Long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery()
-                                .eq(InsOrderState::getLaboratory, sonLaboratory)
-                                .ne(InsOrderState::getInsState, 4)
-                                .ne(InsOrderState::getInsState, 5)
-                                .ne(InsOrderState::getInsState, 6));
-                        dataCounts.put(sonLaboratory, count);
-                    }
-                    // 鏌ユ壘鏁版嵁閲忔渶灏戠殑鍏冪礌
-                    String minElement = null;
-                    Long minCount = Long.MAX_VALUE;
-                    for (Map.Entry<String, Long> entry : dataCounts.entrySet()) {
-                        if (entry.getValue() < minCount) {
-                            minCount = entry.getValue();
-                            minElement = entry.getKey();
+                    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));
+                    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<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSample.getInsOrderId()));
+                    for (InsSample sample : insSamples) {
+                        try{
+                            outInsOrderState(laboratory, sample.getSampleCode(), insOrder.getEntrustCode());
+                        }catch (Exception e){
+
                         }
                     }
-                    InsOrderState insOrderState = new InsOrderState();
-                    insOrderState.setInsOrderId(orderId);
-                    insOrderState.setLaboratory(minElement);
-                    insOrderState.setInsState(0);
-                    insOrderState.setNum(1);//鍒濆鏄涓�娆�
-                    insOrderStateMapper.insert(insOrderState);
-                } else {
-                    //濡傛灉缁х画璇曢獙娌℃湁鍏朵粬绔欑偣鐨勬楠屼换鍔¢偅灏辩粨鏉熻瘯楠�
-                    verifyPlan(orderId, laboratory, 2, tell);
-                }
-                break;
-            case 2:
-                //缁撴潫璇曢獙:姝ゅ鎵樺崟鍋滄璇曢獙锛岀洿鎺ョ敓鎴愭渶缁堟姤鍛婂拰璐圭敤缁熻銆�
-                insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
-                        .eq(InsOrderState::getInsOrderId, orderId)
-                        .eq(InsOrderState::getLaboratory, laboratory)
-                        .set(InsOrderState::getInsTime, now)
-                        .set(InsOrderState::getInsState, 5)
-                        .set(InsOrderState::getVerifyTell, tell)
-                        .set(InsOrderState::getVerifyUser, userId));
-                break;
+                    /*鐢熸垚瀵瑰簲鐨勬楠屾姤鍛�*/
+                    List<InsReportDto1> insReportDto1s=insOrderUserMapper.selectInsReportDto1(insOrder.getId());
+                    createReport(insOrder.getId(),insReportDto1s);
+                    //璇ヨ鍗曢棴鐜�
+                    insOrder.setState(4);
+                    insOrderMapper.updateById(insOrder);
+                    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));
+                    }
+                    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::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::getVerifyTell, tell)
+                                .set(InsOrderState::getVerifyUser, userId));
+                    }
+                    //鍑哄簱
+                    List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSample.getInsOrderId()));
+                    for (InsSample sample : insSamples) {
+                        try{
+                            outInsOrderState(laboratory, sample.getSampleCode(), insOrder.getEntrustCode());
+                        }catch (Exception e){
+                        }
+                    }
+                    /*鐢熸垚瀵瑰簲鐨勬楠屾姤鍛�*/
+                    List<InsReportDto1> insReportDto1s=insOrderUserMapper.selectInsReportDto1(insOrder.getId());
+                    createReport(insOrder.getId(),insReportDto1s);
+                    //璁㈠崟闂幆
+                    insOrder.setState(4);
+                    insOrderMapper.updateById(insOrder);
+                    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<>());
@@ -1187,33 +1345,39 @@
     }
 
     @Override
-    public int submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode) {
-        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
-                .eq(InsSample::getInsOrderId, orderId).select(InsSample::getId));
+    public int submitPlan(SubmitPlanDto submitPlanDto) {
+        InsSample insSample = insSampleMapper.selectById(submitPlanDto.getSampleId());
         InsOrderState orderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
-                .eq(InsOrderState::getInsOrderId, orderId)
-                .eq(InsOrderState::getLaboratory, laboratory)
+                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                .eq(InsOrderState::getInsSampleId, submitPlanDto.getSampleId())
+                .eq(InsOrderState::getLaboratory, submitPlanDto.getLaboratory())
                 .orderByDesc(InsOrderState::getId)
                 .last("LIMIT 1"));// 纭繚鍙彇涓�鏉¤褰�
-        List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList());
+        /*璁板綍妫�楠屼换鍔℃瘡娆$殑澶囨敞淇℃伅*/
+        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()
-                .in(InsProduct::getInsSampleId, ids)
-                .eq(InsProduct::getSonLaboratory, laboratory)
-                .eq(InsProduct::getState, 1)
+                .eq(InsProduct::getInsSampleId, insSample.getId())
+                .eq(InsProduct::getSonLaboratory, submitPlanDto.getLaboratory())
                 .and(wrapper -> wrapper
                         .isNull(InsProduct::getInsResult)
                         .or()
                         .eq(InsProduct::getInsResult, 2)
                 )
-                .isNull(InsProduct::getInsFiberId)
-                .isNull(InsProduct::getInsFibersId));
-        insProducts.addAll(insProductMapper.selectFiberInsProduct(ids, laboratory));
+                .eq(InsProduct::getState, 1));
         if (insProducts.size() > 0) {
             String str = "";
             int count = 0;
             for (InsProduct product : insProducts) {
-                //杈愬皠璇曢獙妫�娴嬬殑妫�楠岄」鐩�,涓嶉渶瑕佸幓鎵嬪姩濉啓妫�楠屽��,鍙渶瑕佷笂浼犺〃鏍兼枃浠跺氨鍙互浜�,鍚庡彴鎻愪氦鐨勬椂鍊欐牎楠岃烦杩囪繖涓楠岄」鐩�
-                if (product.getInspectionItem().equals("杈愬皠璇曢獙妫�娴�")) {
+                //娓╂箍搴﹁瘯楠�,鍔熺巼璇曢獙鐨勬楠岄」鐩�,涓嶉渶瑕佸幓鎵嬪姩濉啓妫�楠屽��,鍙渶瑕佷笂浼犺〃鏍兼枃浠跺氨鍙互浜�,鍚庡彴鎻愪氦鐨勬椂鍊欐牎楠岃烦杩囪繖涓楠岄」鐩�
+                if ( product.getInspectionItem().equals("娓╂箍搴﹁瘯楠�") || product.getInspectionItem().equals("鍔熺巼璇曢獙")) {
                     product.setInsResult(3);//涓嶅垽瀹�
                     insProductMapper.updateById(product);
                     continue;
@@ -1239,72 +1403,193 @@
             }
         }
         insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
-                .eq(InsOrderState::getInsOrderId, orderId)
-                .eq(InsOrderState::getLaboratory, laboratory)
-                .set(InsOrderState::getInsTime, LocalDateTime.now())
+                .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+                .eq(InsOrderState::getInsSampleId, submitPlanDto.getSampleId())
+                .eq(InsOrderState::getLaboratory, submitPlanDto.getLaboratory())
                 .set(InsOrderState::getInsState, 3)
-                .set(InsOrderState::getVerifyUser, verifyUser));
-        /*濡傛灉鏄疌绫昏鍗曚笖鏄笅鍙戝埌璐ㄩ噺閮�,鍒欑洿鎺ュ鏍搁�氳繃(缁撴潫璇曢獙)*/
-        InsOrder insOrder = insOrderMapper.selectById(orderId);
-        if (insOrder.getOrderType().equals("C") && insOrder.getDepartmentLims().equals("璐ㄩ噺閮�")) {
-            verifyPlan(orderId, laboratory, 2, null);
-        } else {
-            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.setSenderId(userId);
-            info.setConsigneeId(verifyUser);
-            info.setViewStatus(false);
-            info.setJumpPath("b1-inspect-order-plan");
-            informationNotificationService.addInformationNotification(info);
-            //todo 浼佷笟寰俊娑堟伅鎺ㄩ�丂zss
-           /* HashMap<String, Object> map = new HashMap<>();
-            String account = userMapper.selectById(userId).getAccount();
-            map.put("touser", *//*account*//*"ZT-012117");//鎺ユ敹娑堟伅鎴愬憳鐨勮处鍙�'ZT-031292'杩欑绫诲瀷(濡傛灉鏈夊涓敤'|'鍒嗛殧)
-            map.put("toparty", "");//鎺ユ敹閮ㄩ棬id
-            map.put("totag", "");//娑堟伅鏍囩id
-            map.put("msgtype", "text");//娑堟伅绫诲瀷 text:鏂囨湰
-            map.put("agentid", 1000513);//搴旂敤id
-            HashMap<String, Object> hashMap = new HashMap<>();
-            hashMap.put("content", "鎮ㄦ湁涓�鏉℃楠屼换鍔″緟澶嶆牳娑堟伅,璇峰墠寰�LIMS绯荤粺鏌ョ湅銆�<a href=\"http://10.1.13.77/enter\"> </a>");
-            map.put("text", JSONArray.toJSONString(hashMap));//娑堟伅鍐呭
-            map.put("safe", 0);//鏄惁淇濆瘑娑堟伅.0鍚�
-            map.put("enable_id_trans", 0);//鏄惁寮�鍚痠d杞瘧.0鍚�
-            map.put("enable_duplicate_check", 0);//鏄惁寮�鍚噸澶嶆秷鎭鏌�.0鍚�
-            qywxApi.send(map);*/
-        }
+                .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("鎮ㄦ湁涓�鏉℃楠屼换鍔″緟澶嶆牳娑堟伅,璁㈠崟鍙锋槸锛�" + insOrder.getEntrustCode() + ",鏍峰搧鍚嶇О涓猴細" + insSample.getSample());
+        info.setSenderId(userId);
+        info.setConsigneeId(submitPlanDto.getVerifyUser());
+        info.setViewStatus(false);
+        info.setJumpPath("b1-inspect-order-plan");
+        informationNotificationService.addInformationNotification(info);
         //澶嶆牳浜�--妫�楠屽崟鐩稿叧璐熻矗浜�
         InsSampleUser insSampleUser = new InsSampleUser();
-        insSampleUser.setUserId(verifyUser);
-        insSampleUser.setInsSampleId(orderId);
+        insSampleUser.setUserId(submitPlanDto.getVerifyUser());
+        insSampleUser.setInsSampleId(submitPlanDto.getSampleId());
         insSampleUser.setState(1);
-        insSampleUser.setSonLaboratory(laboratory);
+        insSampleUser.setSonLaboratory(submitPlanDto.getLaboratory());
         insSampleUserMapper.insert(insSampleUser);
-        /*鏍¢獙涓�涓媟esult琛�*/
-        CompletableFuture.supplyAsync(() -> {
-            List<Integer> ips = insProducts.stream().map(InsProduct::getId).distinct().collect(Collectors.toList());
-            for (Integer ip : ips) {
-                List<InsProductResult> insProductResults = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
-                        .eq(InsProductResult::getNum, orderState.getNum())
-                        .eq(InsProductResult::getInsProductId, ip));
-                if (insProductResults.size() > 1) {
-                    for (int i = 1; i < insProductResults.size(); i++) {
-                        insProductResultMapper.deleteById(insProductResults.get(i));
+        /*鐢熸垚鐢佃矾璇曢獙鐨勭珯鐐规姤鍛婂苟涓婁紶鍒伴檮浠朵腑*/
+        if (submitPlanDto.getLaboratory().equals("鐢佃矾璇曢獙")) {
+            if (!insOrder.getSampleType().equals("鏃犳簮鍣ㄤ欢")) {
+                wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
+            } else {
+                wordUtils.generateWord2(submitPlanDto.getTerm(), orderState);
+            }
+            //todo 鐢佃矾绔欑偣鎶ュ憡 姝e紡搴撻儴缃叉斁寮�
+//            try {
+//                if (!insOrder.getSampleType().equals("鏃犳簮鍣ㄤ欢")) {
+//                    wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
+//                }else {
+//                    wordUtils.generateWord2(submitPlanDto.getTerm(), orderState);
+//                }
+//            } catch (Exception e) {
+//                throw new ErrorException("鐢佃矾璇曢獙鐨勭珯鐐规姤鍛婄敓鎴愭湁璇�,璇疯仈绯诲紑鍙戜汉鍛樿皟鏁�!");
+//            }
+        }
+        /*鐢熸垚浜ч噺宸ユ椂*/
+        //鏍¢獙濡傛灉杩欎釜浜鸿繖涓娴嬮」鐩凡缁忔坊鍔犺繃浜嗗垯涓嶉渶瑕佸啀鏂板
+        //棣栧厛鍒ゆ柇褰撳墠浜虹殑褰撳墠鏃堕棿鏄惁鏄帓鐝椂闂村唴,濡傛灉涓嶆槸灏辨槸鍔犵彮
+        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);
                 }
             }
-            return null;
-        });
-        // 鍒犻櫎鏁伴噰閲囬泦娆℃暟
-        String key = "frequency" + ":" + entrustCode + ":*";
-        RedisUtil.delsLike(key);
+        }
+
+        //  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() + ",鏍峰搧鍚嶇О涓猴細" + 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;
     }
 
+    @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());
+            }
+        }
+
+        /*鍒犻櫎鐢熸垚浜ч噺宸ユ椂*/
+        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) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         try {

--
Gitblit v1.9.3