From 22d3a8dc4185c5461bee9e42a9f4a2775ff448e6 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期二, 10 九月 2024 17:28:17 +0800
Subject: [PATCH] 报告更改+再次试验

---
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java | 1331 +++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 1,184 insertions(+), 147 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 78981e5..91912bb 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
@@ -1,53 +1,67 @@
 package com.yuanchu.mom.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.UUID;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 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.exception.ErrorException;
 import com.yuanchu.mom.mapper.*;
 import com.yuanchu.mom.pojo.*;
-import com.yuanchu.mom.exception.ErrorException;
-import com.yuanchu.mom.service.InsOrderPlanService;
-import com.yuanchu.mom.service.InsOrderService;
-import com.yuanchu.mom.service.StandardTemplateService;
-import com.yuanchu.mom.utils.GiveCode;
-import com.yuanchu.mom.utils.QueryWrappers;
-import com.yuanchu.mom.vo.InsOrderPlanVO;
-import lombok.AllArgsConstructor;
+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.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.ResourceUtils;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
+import javax.servlet.http.HttpServletRequest;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
-import java.util.stream.Collectors;
 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;
 
 /**
  * 妫�楠屼换鍔�-涓氬姟瀹炵幇灞�
  */
 @Service
-//@AllArgsConstructor
+@Transactional(rollbackFor = Exception.class)
 public class InsOrderPlanServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder> implements InsOrderPlanService {
 
     @Resource
@@ -66,40 +80,140 @@
     private InsOrderStateMapper insOrderStateMapper;
     @Resource
     private InsProductMapper insProductMapper;
+    @Resource
+    private ShiftTimeMapper shiftTimeMapper;
+    @Resource
+    private PerformanceShiftMapper performanceShiftMapper;
+    @Resource
+    private WarehouseHistoryMapper warehouseHistoryMapper;
 
     @Value("${wordUrl}")
     private String wordUrl;
 
-    @Resource
-    private GiveCode giveCode;
+    @Value("${twoCode}")
+    private String twoCode;
 
     @Resource
     private InsReportMapper insReportMapper;
 
+    @Resource
     private InsProductResultMapper insProductResultMapper;
+
+    @Resource
+    private InsProductResult2Mapper insProductResult2Mapper;
+
+    @Resource
+    private InsProductUserMapper insProductUserMapper;
+
+    @Resource
+    private InsUnPassService insUnPassService;
+
+    @Resource
+    AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
+
+    @Resource
+    QYWXApi qywxApi;
+
+    @Resource
+    private InformationNotificationService informationNotificationService;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Resource
+    private CustomMapper customMapper;
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Resource
+    private InsBushingService insBushingService;
+
+    @Resource
+    private InsBushingMapper insBushingMapper;
+
+    @Resource
+    private InsFiberMapper insFiberMapper;
+
+    @Resource
+    private InsFibersMapper insFibersMapper;
+
+    @Resource
+    private InsOrderFileMapper insOrderFileMapper;
 
     @Override
     public Map<String, Object> selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO) {
         Map<String, Object> map = new HashMap<>();
         map.put("head", PrintChina.printChina(InsOrderPlanVO.class));
         Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null);
-        Integer userId = map1.get("userId");
+        User user = userMapper.selectById(map1.get("userId"));//褰撳墠鐧诲綍鐨勪汉
+
+        String laboratory = null;
+        String userName = null;
+        Integer userId = null;
         if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
-            insOrderPlanDTO.setUserId(userId.longValue());
+            userId = map1.get("userId");
+            userName = userMapper.selectById(map1.get("userId")).getName();
+            insOrderPlanDTO.setUserId(null);
         }
-        IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId);
+        String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//璇曢獙瀹�
+        insOrderPlanDTO.setSonLaboratory(null);
+        IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userName, sonLaboratory, laboratory);
         map.put("body", insOrderPage);
         return map;
     }
 
     @Override
+    public Map<String, Object> inspectionOrderDetailsTaskSwitching(Page page, InsOrderPlanDTO insOrderPlanDTO) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("head", PrintChina.printChina(InsOrderPlanTaskSwitchVo.class));
+        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null);
+        Integer userId = map1.get("userId");
+        User user = userMapper.selectById(map1.get("userId"));//褰撳墠鐧诲綍鐨勪汉
+        String laboratory = null;
+        if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
+            insOrderPlanDTO.setUserId(userId.longValue());
+        }
+        String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//璇曢獙瀹�
+        IPage<InsOrderPlanTaskSwitchVo> insOrderPage = insSampleMapper.inspectionOrderDetailsTaskSwitching(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId, sonLaboratory, laboratory);
+        map.put("body", insOrderPage);
+        return map;
+    }
+
+    //璁ら浠诲姟
+    @Override
     public boolean claimInsOrderPlan(InsOrderPlanDTO entity) {
         if (Objects.isNull(entity)) {
             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, 1);
+        InsSampleUser insSampleUser = new InsSampleUser(entity.getInsSampleId().intValue(), userId, 0, entity.getSonLaboratory());
         return insSampleUserMapper.insert(insSampleUser) > 0;
     }
 
@@ -107,116 +221,428 @@
     public Map<String, Object> doInsOrder(Integer id, String laboratory) {
         InsOrder insOrder = new InsOrder();
         insOrder.setId(id);
-        insOrder.setInsState(1);
         InsOrder order = insOrderMapper.selectById(id);
         if (BeanUtil.isEmpty(order.getInsTime())) {
             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));
         }
-        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);
-        Set<Integer> set = new HashSet<>();
-        Map<Integer, String> map2 = new HashMap<>();
         List<SampleProductDto> list = JSON.parseArray(JSON.toJSONString(map.get("sampleProduct")), SampleProductDto.class);
         for (SampleProductDto samples : list) {
             if (BeanUtil.isEmpty(samples.getInsProduct())) continue;
-            for (InsProduct product : samples.getInsProduct()) {
-                if (product.getTemplateId() == null) {
-                    product.setTemplate(new ArrayList<>());
-                    continue;
-                }
-                if (set.add(product.getTemplateId())) {
-                    map2.put(product.getTemplateId(), standardTemplateService.getStandTempThingById(product.getTemplateId()) + "");
-                }
-                String thing = map2.get(product.getTemplateId());
-                if (StrUtil.isNotEmpty(thing)) {
-                    JSONObject sheet = JSON.parseObject(JSON.toJSONString(JSON.parseArray(JSON.toJSONString(JSON.parseObject(thing).get("data"))).get(0)));
-                    JSONObject config = JSON.parseObject(JSON.toJSONString(sheet.get("config")));
-                    List<JSONObject> cellData = JSON.parseArray(JSON.toJSONString(sheet.get("celldata")), JSONObject.class);
-                    List<JSONObject> tableData = new ArrayList<>();
-                    Map<String, Object> style = new HashMap<>();
-//                    style.put("borderInfo", config.get("borderInfo"));
-                    style.put("rowlen", config.get("rowlen"));
-                    style.put("columnlen", config.get("columnlen"));
-                    int r = -1;
-                    if (BeanUtil.isNotEmpty(cellData)) {
-                        for (JSONObject o : cellData) {
-                            JSONObject v = JSON.parseObject(JSON.toJSONString(o.get("v")));
-                            if (BeanUtil.isNotEmpty(v.get("ps"))) {
-                                JSONObject ps = JSON.parseObject(JSON.toJSONString(v.get("ps")));
-                                if (ps.get("value").equals("妫�楠岄」") && v.get("v").equals(product.getInspectionItem())) {
-                                    tableData.add(o);
-                                    r = Integer.parseInt(o.get("r") + "");
-                                    continue;
-                                }
-                            }
-                            if (tableData.size() > 0) {
-                                if ((Integer.parseInt(o.get("r") + "") == r + 1 || Integer.parseInt(o.get("r") + "") == r) && !(o.get("v") + "").equals("{\"ht\":\"0\"}")) {
-                                    r = Integer.parseInt(o.get("r") + "");
-                                    tableData.add(o);
-                                } else {
-                                    break;
-                                }
-                            }
-                        }
-                    }
-                    product.setTemplate(tableData);
-                    product.setStyle(style);
-                }
-            }
+            samples.setBushing(insBushingService.selectBushingBySampleId(samples.getId()));
         }
         map.put("sampleProduct", list);
         return map;
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void saveInsContext(Map<String, Object> insContext) {
+    public List<InsProduct> getInsProduct(Integer id, Integer type, String laboratory, HttpServletRequest request) {
+        List<InsProduct> insProducts = new ArrayList<>();
+        switch (type) {
+            case 0:
+                //鏍峰搧
+                insProducts = insSampleMapper.getInsProduct1(id, laboratory);
+                if (insProducts.size()==0){
+                    insProducts = insSampleMapper.getIns2Product1(id, laboratory);
+                }
+                break;
+            case 1:
+                //鍏夌氦甯�
+                break;
+            case 2:
+                //鍏夌氦
+                break;
+            case 3:
+                //濂楃
+                break;
+        }
+        Set<Integer> set = new HashSet<>();
+        Map<Integer, String> map2 = new HashMap<>();
+        if (BeanUtil.isEmpty(insProducts)) return null;
+        getTemplateThing(set, map2, insProducts);
+        return insProducts;
+    }
+
+    @Override
+    public List<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);
+                break;
+            case 1:
+                //鍏夌氦甯�
+                break;
+            case 2:
+                //鍏夌氦
+                break;
+            case 3:
+                //濂楃
+                break;
+        }
+        Set<Integer> set = new HashSet<>();
+        Map<Integer, String> map2 = new HashMap<>();
+        if (BeanUtil.isEmpty(insProducts)) return null;
+        getTemplateThing(set, map2, insProducts);
+        return insProducts;
+    }
+
+    @Override
+    public List<String> checkSubmitPlan(Integer orderId, String laboratory) {
+        List<String> collect = new ArrayList<>();
+        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId));
+        List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList());
+        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .in(InsProduct::getInsSampleId, ids)
+                .eq(InsProduct::getSonLaboratory, laboratory)
+                .eq(InsProduct::getState, 1)
+                .eq(InsProduct::getInsResult, 0));
+        if (insProducts.size() > 0) {
+            collect = insProducts.stream().map(insProduct -> {
+                return insProduct.getInspectionItem() + "-" + insProduct.getInspectionItemSubclass();
+            }).collect(Collectors.toList());
+        }
+        return collect;
+    }
+
+    @Override
+    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));
+        map.put("body", insOrderFileIPage);
+        return map;
+    }
+
+    @Override
+    public int uploadFile(Integer orderId, MultipartFile file) {
+        String urlString;
+        String pathName;
+        String path;
+        String filename = file.getOriginalFilename();
+        String contentType = file.getContentType();
+        InsOrderFile insOrderFile = new InsOrderFile();
+        insOrderFile.setInsOrderId(orderId);
+        insOrderFile.setFileName(filename);
+        if (contentType != null && contentType.startsWith("image/")) {
+            // 鏄浘鐗�
+            path = imgUrl;
+            insOrderFile.setType(1);
+        } else {
+            // 鏄枃浠�
+            path = wordUrl;
+            insOrderFile.setType(2);
+        }
+        try {
+            File realpath = new File(path);
+            if (!realpath.exists()) {
+                realpath.mkdirs();
+            }
+            pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+            urlString = realpath + "/" + pathName;
+            file.transferTo(new File(urlString));
+            insOrderFile.setFileUrl(pathName);
+            return insOrderFileMapper.insert(insOrderFile);
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.err.println("闄勪欢涓婁紶閿欒");
+            return 0;
+        }
+    }
+
+    //鍒囨崲璁板綍妯$増鏌ヨ妫�楠屽唴瀹�
+    @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;
+    }
+
+    @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());
+        return sonLaboratory;
+    }
+
+    @Override
+    public int deleteInsContext(InsProductResultVo insProductResultVo) {
+        return insProductResult2Mapper.delete(Wrappers.<InsProductResult2>lambdaQuery()
+                .eq(InsProductResult2::getFrequency, insProductResultVo.getFrequency())
+                .eq(InsProductResult2::getNum, insProductResultVo.getNum())
+                .in(InsProductResult2::getInsProductId, insProductResultVo.getProductIds()));
+    }
+
+
+    @Override
+    public void saveInsContext(Map<String, Object> insContext,Integer num) {
         Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
         CompletableFuture.supplyAsync(() -> {
-            AtomicInteger count = new AtomicInteger();
             insContext.forEach((k, v) -> {
                 JSONObject jo = JSON.parseObject(JSON.toJSONString(v));
                 InsProduct insProduct = new InsProduct();
                 insProduct.setId(Integer.parseInt(k));
-                InsProductResult result = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()));
-                if (BeanUtil.isEmpty(result)) {
+                List<InsProductResult> results = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
+                        .eq(InsProductResult::getInsProductId, insProduct.getId()));
+                InsProductResult result;
+                if (CollectionUtils.isEmpty(results)) {
                     result = new InsProductResult();
+                } else {
+                    result = results.get(0);
                 }
                 result.setInsProductId(Integer.parseInt(k));
-                JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(jo.get("insValue")));
-                List<Map<String, Object>> iv = new ArrayList<>();
-                for (Object o : jsonArray) {
-                    JSONObject insValue = JSON.parseObject(JSON.toJSONString(o));
-                    Map<String, Object> map = new HashMap<>();
-                    map.put("v", JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v"));
-                    if (insValue.get("u") == null && StrUtil.isNotEmpty(JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v").toString())) {
-                        map.put("u", userId);
-                    }else {
-                        map.put("u", insValue.get("u"));
+                result.setNum(num);
+                //妫�楠屽��
+                if (jo.get("insValue") != null) {
+                    JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(jo.get("insValue")));
+                    List<Map<String, Object>> iv = new ArrayList<>();
+                    for (Object o : jsonArray) {
+                        JSONObject insValue = JSON.parseObject(JSON.toJSONString(o));
+                        Map<String, Object> map = new HashMap<>();
+                        map.put("v", JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v"));
+                        map.put("r", JSON.toJSONString(insValue.get("r")));
+                        map.put("c", JSON.toJSONString(insValue.get("c")));
+                        map.put("w", insValue.get("w"));
+                        try {
+                            if ((insValue.get("u") == null || insValue.get("u").equals("")) && StrUtil.isNotEmpty(JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v").toString())) {
+                                map.put("u", userId + "");
+                            } else {
+                                map.put("u", insValue.get("u"));
+                            }
+                            iv.add(map);
+                        } catch (Exception e) {
+                        }
                     }
-                    iv.add(map);
+                    result.setInsValue(JSON.toJSONString(iv));
                 }
-                result.setInsValue(JSON.toJSONString(iv));
-                JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("comValue")));
-                List<Map<String, Object>> cv = new ArrayList<>();
-                for (Object o : jsonArray2) {
-                    JSONObject comValue = JSON.parseObject(JSON.toJSONString(o));
-                    Map<String, Object> map = new HashMap<>();
-                    map.put("v", JSON.parseObject(JSON.toJSONString(comValue.get("v"))).get("v"));
-                    cv.add(map);
+                //璁$畻鍊�
+                if (jo.get("comValue") != null && !Objects.equals(jo.get("comValue"), "")) {
+                    JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("comValue")));
+                    List<Map<String, Object>> cv = new ArrayList<>();
+                    for (Object o : jsonArray2) {
+                        JSONObject comValue = JSON.parseObject(JSON.toJSONString(o));
+                        Map<String, Object> map = new HashMap<>();
+                        map.put("v", JSON.parseObject(JSON.toJSONString(comValue.get("v"))).get("v"));
+                        cv.add(map);
+                    }
+                    result.setComValue(JSON.toJSONString(cv));
                 }
-                result.setComValue(JSON.toJSONString(cv));
-                JSONObject resValue = JSON.parseObject(JSON.toJSONString(jo.get("resValue")));
-                insProduct.setLastValue(JSON.parseObject(JSON.toJSONString(resValue.get("v"))).get("v") + "");
-                JSONObject equipValue = JSON.parseObject(JSON.toJSONString(jo.get("equipValue")));
+                //鏈�缁堝��
                 try {
-                    result.setEquipValue(JSON.parseObject(JSON.toJSONString(equipValue.get("v"))).get("v") + "");
-                }catch (Exception ignored){
-                    result.setEquipValue(null);
+                    JSONObject resValue = JSON.parseObject(JSON.toJSONString(jo.get("resValue")));
+                    if (resValue.get("v") != null) {
+                        Object o = JSON.parseObject(JSON.toJSONString(resValue.get("v"))).get("v");
+                        insProduct.setLastValue(o.equals("") ? null : (o.toString()));
+                    }
+                } catch (Exception e) {
+                    insProduct.setLastValue("");//''
                 }
-                JSONObject insResult = JSON.parseObject(JSON.toJSONString(jo.get("insResult")));
-                insProduct.setInsResult(Integer.parseInt(JSON.parseObject(JSON.toJSONString(insResult.get("v"))).get("v") + ""));
+                //璁惧缂栧彿
+                if (jo.get("equipValue") != null) {
+                    JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("equipValue")));
+                    List<Map<String, Object>> ev = new ArrayList<>();
+                    for (Object o : jsonArray2) {
+                        JSONObject equipValue = JSON.parseObject(JSON.toJSONString(o));
+                        Map<String, Object> map = new HashMap<>();
+                        map.put("v", JSON.parseObject(JSON.toJSONString(equipValue.get("v"))).get("v"));
+                        ev.add(map);
+                    }
+                    result.setEquipValue(JSON.toJSONString(ev));
+                }
+                //璁惧鍚嶇О
+                if (jo.get("equipName") != null) {
+                    JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("equipName")));
+                    List<Map<String, Object>> ev = new ArrayList<>();
+                    for (Object o : jsonArray2) {
+                        JSONObject equipValue = JSON.parseObject(JSON.toJSONString(o));
+                        Map<String, Object> map = new HashMap<>();
+                        map.put("v", JSON.parseObject(JSON.toJSONString(equipValue.get("v"))).get("v"));
+                        ev.add(map);
+                    }
+                    result.setEquipName(JSON.toJSONString(ev));
+                }
+                //缁撹
+                try {
+                    JSONObject insResult = JSON.parseObject(JSON.toJSONString(jo.get("insResult")));
+                    String ir = JSON.parseObject(JSON.toJSONString(insResult.get("v"))).get("v") + "";
+                    insProduct.setInsResult(Integer.parseInt(ir));
+                } catch (Exception e) {
+                    insProduct.setInsResult(2);//寰呭畾
+                }
                 if (BeanUtil.isEmpty(result.getId())) {
                     result.setCreateUser(userId);
                     result.setUpdateUser(userId);
@@ -228,79 +654,690 @@
                 }
                 insProduct.setUpdateUser(userId);
                 insProductMapper.updateById(insProduct);
-                if(count.get() == 0){
-                    InsSample insSample = insSampleMapper.selectById(insProductMapper.selectById(insProduct.getId()).getInsSampleId());
-                    insSample.setInsState(1);
-                    count.addAndGet(1);
+                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()
+                        .eq(InsProduct::getInsSampleId, insSample.getId()));
+                Long l1 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+                        .eq(InsProduct::getInsSampleId, insSample.getId())
+                        .and(wrapper -> wrapper
+                                .isNotNull(InsProduct::getInsResult)
+                                .or()
+                                .ne(InsProduct::getInsResult, 2)
+                        ));
+                if (l == l1) {
+                    //濡傛灉鎵�鏈夐」鐩兘鏈夌粨璁�,閭d箞璇ユ牱鍝佺姸鎬佸凡妫�
+                    insSample.setInsState(2);
+                }
+                insSampleMapper.updateById(insSample);
+                /*鏍¢獙涓�涓媟esult琛�*/
+                List<InsProductResult> insProductResults = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
+                        .eq(InsProductResult::getInsProductId, insProduct.getId()));
+                if (insProductResults.size() > 1) {
+                    for (int i = 1; i < insProductResults.size(); i++) {
+                        insProductResultMapper.deleteById(insProductResults.get(i));
+                    }
                 }
             });
-            return null;
+            return insContext.keySet().stream().findFirst().orElse(null);
         }).thenAccept(res -> {
+            if (res != null) {
+                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);
+                if (count == 0) {
+                    insOrderStateMapper.update(new InsOrderState(), Wrappers.<InsOrderState>lambdaUpdate()
+                            .eq(InsOrderState::getInsOrderId, orderId)
+                            .eq(InsOrderState::getLaboratory, insProduct.getSonLaboratory())
+                            .set(InsOrderState::getInsState, 2));
+                }
+            }
         }).exceptionally(e -> {
             e.printStackTrace();
             return null;
         });
     }
 
+    //鐢佃矾璇曢獙鐨勪繚瀛樻楠屽唴瀹�
     @Override
-    public int upPlanUser(Integer userId, Integer orderId) {
+    public List<Integer> saveInsContext2(InsProductResultDto insProductResultDtos) {
+        if (ObjectUtils.isEmpty(insProductResultDtos.getFrequency())) {
+            throw new ErrorException("棰戠巼涓嶈兘涓虹┖");
+        }
+        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+        //鏌ヨ妫�楠屽崟淇℃伅
+        InsOrder insOrder = insOrderMapper.selectById(insProductResultDtos.getOrderId());
+        InsOrderState orderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+                .eq(InsOrderState::getInsOrderId, insProductResultDtos.getOrderId())
+                .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()));
+        for (InsProductResult2 insProductResult2 : insProductResultDtos.getInsProductResult2s()) {
+            InsProduct insProduct = new InsProduct();
+            insProduct.setId(insProductResult2.getInsProductId());//椤圭洰id
+            InsProductResult2 result2 = new InsProductResult2();
+            result2.setNum(orderState.getNum());
+            result2.setInsProductId(insProductResult2.getInsProductId());
+            //棰戠巼
+            result2.setFrequency(insProductResultDtos.getFrequency());
+            //棰戠偣
+            if (insProductResult2.getOften() != null) {
+                result2.setOften(insProductResult2.getOften());
+            }
+            //绔彛
+            if (insProductResult2.getPort() != null) {
+                result2.setPort(insProductResult2.getPort());
+            }
+            //瑙掑害
+            if (insProductResult2.getAngle() != null) {
+                result2.setAngle(insProductResult2.getAngle());
+            }
+            //璁惧缂栧彿
+            if (insProductResult2.getEquipValue() != null) {
+                result2.setEquipValue(insProductResult2.getEquipValue());
+            }
+            //璁惧鍚嶇О
+            if (insProductResult2.getEquipName() != null) {
+                result2.setEquipName(insProductResult2.getEquipName());
+            }
+            insProduct = insProductMapper.selectById(insProduct.getId());
+            //鍊�
+            if (insProductResult2.getValue() != null) {
+                result2.setValue(insProductResult2.getValue());
+                //缁撹
+                int ressult = 1;
+                String valueStr = insProductResult2.getValue();
+                if (!insProduct.getAsk().contains(",")) {
+                    if (!isValueValid(valueStr, new String[]{insProduct.getAsk()})) {
+                        ressult = 0; //涓嶅悎鏍�
+                    }
+                } else {
+                    // 濡傛灉瑕佹眰鍊兼槸(2掳鈮�20,7掳鈮�25,12掳鈮�25)杩欑鎯呭喌
+                    String[] askParts = insProduct.getAsk().split(",");
+                    String[] angles = insProductResult2.getAngle().split(",");
+                    for (String s : askParts) {
+                        String[] askSplit = s.split("掳");
+                        String angleKey = askSplit[0];
+                        String angleValue = askSplit[1];
+
+                        for (int i = 0; i < angles.length; i++) {
+                            if (angles[i].split("掳")[0].equals(angleKey)) {
+                                try {
+                                    String s1 = valueStr.substring(1, valueStr.length() - 1).split("\\],\\[")[i];
+                                    if (!s1.startsWith("[")) {
+                                        s1 = "[" + s1;
+                                    }
+                                    if (!s1.endsWith("]")) {
+                                        s1 = s1 + "]";
+                                    }
+                                    if (!isValueValid("[" + s1 + "]", new String[]{angleValue})) {
+                                        ressult = 0; // 涓嶅悎鏍�
+                                        break;
+                                    }
+                                } catch (Exception e) {
+                                } finally {
+                                    continue;
+                                }
+
+                            }
+                        }
+                    }
+                }
+                result2.setResult(ressult);
+                list.add(ressult);
+            }
+            result2.setCreateUser(userId);
+            result2.setUpdateUser(userId);
+            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);
+                    }
+                }
+            }
+            /*鏇存柊鏍峰搧鐨勬楠岀姸鎬�*/
+            insSample.setInsState(1);
+            Long l = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+                    .eq(InsProduct::getInsSampleId, insSample.getId()));
+            Long l1 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+                    .eq(InsProduct::getInsSampleId, insSample.getId())
+                    .and(wrapper -> wrapper
+                            .isNotNull(InsProduct::getInsResult)
+                            .or()
+                            .ne(InsProduct::getInsResult, 2)
+                    ));
+            if (l == l1) {
+                //濡傛灉鎵�鏈夐」鐩兘鏈夌粨璁�,閭d箞璇ユ牱鍝佺姸鎬佸凡妫�
+                insSample.setInsState(2);
+            }
+            insSampleMapper.updateById(insSample);
+        }
+        /*鍒ゆ柇璇ョ珯鐐圭殑妫�楠岄」鐩槸鍚﹀叏閮ㄥ凡妫�*/
+        int count = insProductMapper.selectInsProductCountByOrderId(insProductResultDtos.getOrderId());
+        if (count == 0) {
+            insOrderStateMapper.update(new InsOrderState(), Wrappers.<InsOrderState>lambdaUpdate()
+                    .eq(InsOrderState::getInsOrderId, insProductResultDtos.getOrderId())
+                    .eq(InsOrderState::getLaboratory, insProductResultDtos.getSonLaboratory())
+                    .set(InsOrderState::getInsState, 2));
+        }
+        return list;
+    }
+
+    //瑙f瀽瑕佹眰鍊肩殑鏍煎紡
+    private boolean getResult(double s, String ask) {
+        // 澶勭悊卤鑼冨洿鐨勬潯浠�
+        if (ask.contains("卤")) {
+            Pattern pattern = Pattern.compile("(\\d+)卤(\\d+)");
+            Matcher matcher = pattern.matcher(ask);
+            if (matcher.matches()) {
+                double center = Double.parseDouble(matcher.group(1));
+                double tolerance = Double.parseDouble(matcher.group(2));
+                return Math.abs(s - center) <= tolerance;
+            }
+        }
+        // 澶勭悊鍏朵粬姣旇緝鏉′欢
+        if (ask.startsWith(">")) {
+            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("<")) {
+            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("=")) {
+            double exactValue = Double.parseDouble(ask.substring(1));
+            return s == exactValue;
+        }
+        // 澶勭悊涓嶆敮鎸佺殑鏉′欢
+        throw new IllegalArgumentException("鏈煡鏍煎紡瑕佹眰鍊艰妫�鏌�" + ask);
+    }
+
+    //灏嗗墠绔紶杩囨潵鐨勫�艰浆鎹㈡垚鏁扮粍鐨勫舰寮�
+    private String[] parseValues(String valueStr) {
+        String trimmedStr = valueStr.substring(1, valueStr.length() - 1);
+        return Arrays.stream(trimmedStr.split("\\],\\["))
+                .map(s -> s.substring(1, s.length() - 1).split(","))
+                .flatMap(Arrays::stream)
+                .map(s -> s.replace("\"", ""))
+                .toArray(String[]::new);
+    }
+
+    //鍒よ鍚堟牸涓庝笉鍚堟牸
+    private boolean isValueValid(String valueStr, String[] valuesToCheck) {
+        for (String s : parseValues(valueStr)) {
+            if (ObjectUtils.isEmpty(s)) {
+                continue;
+            }
+            double numericValue = Double.parseDouble(s);
+            boolean valid = Arrays.stream(valuesToCheck)
+                    .allMatch(v -> getResult(numericValue, v));
+            if (!valid) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    //浜ゆ帴
+    @Override
+    public int upPlanUser(Integer userId, Integer orderId, String sonLaboratory) {
         InsSampleUser insSampleUser = new InsSampleUser();
         insSampleUser.setUserId(userId);
         insSampleUser.setInsSampleId(orderId);
         insSampleUser.setState(0);
+        insSampleUser.setSonLaboratory(sonLaboratory);
         return insSampleUserMapper.insert(insSampleUser);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int verifyPlan(Integer orderId, String laboratory, Integer type, String tell) {
-        Integer num = (type == 1 ? 5 : 4);
-        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, num).set(InsOrderState::getVerifyTell, tell).set(InsOrderState::getVerifyUser, getLook.selectPowerByMethodAndUserId(null).get("userId")));
-        List<InsOrderState> insOrderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, orderId));
-        long count = insOrderStates.stream().filter(a -> a.getInsState() == 5).count();
-        if (count == insOrderStates.size() && num == 5) {
-            InsOrder insOrder = insOrderMapper.selectById(orderId);
-            Map<String, String> user = insProductMapper.selectUserById(insOrder.getUserId());
-            List<SampleProductDto> samples = insSampleMapper.selectSampleProductListByOrderId(orderId);
-            samples.forEach(System.out::println);
-            InsReport insReport = new InsReport();
-            insReport.setCode(giveCode.giveCode("JCZX/TX-", "ins_report", "-", "yyMMdd"));
-            insReport.setInsOrderId(orderId);
-            String url;
-            try {
-                url = ResourceUtils.getURL("classpath:static/report-template.docx").getPath();
-            } catch (FileNotFoundException e) {
-                throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+        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);
             }
-            XWPFTemplate template = XWPFTemplate.compile(url).render(
-                    new HashMap<String, Object>() {{
-                        put("order", insOrder);
-                        put("report", insReport);
-                        put("user", user);
-                        put("samples", samples);
-                        put("sampleSize", samples.size() + samples.get(0).getUnit());
-                    }});
-            try {
-                String name = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yy_MM_dd_HH_mm_ss")) + ".docx";
-                template.writeAndClose(new FileOutputStream(wordUrl + "/" + name));
-                insReport.setUrl("/word/"+ name);
-                insReportMapper.insert(insReport);
-            } catch (IOException e) {
-                throw new RuntimeException(e);
+            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);
+                }
             }
+        }
+        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 鍚庯紝鎵ц鏇存柊鎿嶄綔
+                    insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+                            .eq(InsOrderState::getId, record.getId())
+                            .set(InsOrderState::getInsTime, now)
+                            .set(InsOrderState::getInsState, 4)
+                            .set(InsOrderState::getVerifyTell, tell)
+                            .set(InsOrderState::getVerifyUser, userId)
+                            .set(InsOrderState::getNum, record.getNum() + 1)//娆℃暟鍔�1
+                            .set(InsOrderState::getCreateTime, LocalDateTime.now()));
+                }
+                break;
+            case 1:
+                //缁х画璇曢獙:鍒欑户缁皢妫�楠屼换鍔¤浆鎺ヨ嚦涓嬩竴绔欑偣锛�
+                insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+                        .eq(InsOrderState::getInsOrderId, 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();
+                        }
+                    }
+                    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;
         }
         return 1;
     }
 
-    @Override
-    public int submitPlan(Integer orderId, String laboratory) {
-        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId));
-        List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList());
-        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().in(InsProduct::getInsSampleId, ids).eq(InsProduct::getSonLaboratory, laboratory).isNotNull(InsProduct::getInsResult));
-        if (insProducts.size() == 0) {
-            return 0;
+    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<>());
+                continue;
+            }
+            String thing = null;
+            if (product.getTemplateId() != null && set.add(product.getTemplateId())) {
+                map2.put(product.getTemplateId(), standardTemplateService.getStandTempThingById(product.getTemplateId()) + "");
+                thing = map2.get(product.getTemplateId());
+            }
+            if (StrUtil.isNotEmpty(thing)) {
+                JSONObject sheet = JSON.parseObject(JSON.toJSONString(JSON.parseArray(JSON.toJSONString(JSON.parseObject(thing).get("data"))).get(0)));
+                JSONObject config = JSON.parseObject(JSON.toJSONString(sheet.get("config")));
+                List<JSONObject> cellData = JSON.parseArray(JSON.toJSONString(sheet.get("celldata")), JSONObject.class);
+                Map<String, Object> style = new HashMap<>();
+                style.put("rowlen", config.get("rowlen"));
+                style.put("columnlen", config.get("columnlen"));
+                product.setTemplate(cellData);
+                product.setStyle(style);
+                product.setTemplateName(standardTemplateService.getStandTempNameById(product.getTemplateId()));
+            }
         }
-        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 3));
+    }
+
+    @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));
+        InsOrderState orderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+                .eq(InsOrderState::getInsOrderId, orderId)
+                .eq(InsOrderState::getLaboratory, laboratory)
+                .orderByDesc(InsOrderState::getId)
+                .last("LIMIT 1"));// 纭繚鍙彇涓�鏉¤褰�
+        List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList());
+        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .in(InsProduct::getInsSampleId, ids)
+                .eq(InsProduct::getSonLaboratory, laboratory)
+                .eq(InsProduct::getState, 1)
+                .and(wrapper -> wrapper
+                        .isNull(InsProduct::getInsResult)
+                        .or()
+                        .eq(InsProduct::getInsResult, 2)
+                )
+                .isNull(InsProduct::getInsFiberId)
+                .isNull(InsProduct::getInsFibersId));
+        insProducts.addAll(insProductMapper.selectFiberInsProduct(ids, laboratory));
+        if (insProducts.size() > 0) {
+            String str = "";
+            int count = 0;
+            for (InsProduct product : insProducts) {
+                //杈愬皠璇曢獙妫�娴嬬殑妫�楠岄」鐩�,涓嶉渶瑕佸幓鎵嬪姩濉啓妫�楠屽��,鍙渶瑕佷笂浼犺〃鏍兼枃浠跺氨鍙互浜�,鍚庡彴鎻愪氦鐨勬椂鍊欐牎楠岃烦杩囪繖涓楠岄」鐩�
+                if (product.getInspectionItem().equals("杈愬皠璇曢獙妫�娴�")) {
+                    product.setInsResult(3);//涓嶅垽瀹�
+                    insProductMapper.updateById(product);
+                    continue;
+                }
+                //鐢佃矾璇曢獙鐨勬楠岄」鐩�,闇�瑕佸湪鎻愪氦鐨勬椂鍊欏啀鍘昏祴鍊煎悎鏍间笌涓嶅悎鏍�
+                if (product.getInspectionItem().equals("鐢佃矾璇曢獙")) {
+                    List<Integer> collect = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
+                            .eq(InsProductResult2::getNum, orderState.getNum())
+                            .eq(InsProductResult2::getInsProductId, product.getId())).stream().map(InsProductResult2::getResult).distinct().collect(Collectors.toList());
+                    if (collect.contains(0)) {
+                        product.setInsResult(0);//涓嶅悎鏍�
+                    } else {
+                        product.setInsResult(1);//鍚堟牸
+                    }
+                    insProductMapper.updateById(product);
+                    continue;
+                }
+                count++;
+                str += "<br/>" + count + "锛�" + product.getInspectionItem() + " " + product.getInspectionItemSubclass() + "<br/>";
+            }
+            if (ObjectUtils.isNotEmpty(str)) {
+                throw new ErrorException("<strong>瀛樺湪寰呮楠岀殑椤圭洰锛�</strong><br/>" + str);
+            }
+        }
+        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+                .eq(InsOrderState::getInsOrderId, orderId)
+                .eq(InsOrderState::getLaboratory, laboratory)
+                .set(InsOrderState::getInsTime, LocalDateTime.now())
+                .set(InsOrderState::getInsState, 3)
+                .set(InsOrderState::getVerifyUser, verifyUser));
+        /*濡傛灉鏄疌绫昏鍗曚笖鏄笅鍙戝埌璐ㄩ噺閮�,鍒欑洿鎺ュ鏍搁�氳繃(缁撴潫璇曢獙)*/
+        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);*/
+        }
+        //澶嶆牳浜�--妫�楠屽崟鐩稿叧璐熻矗浜�
+        InsSampleUser insSampleUser = new InsSampleUser();
+        insSampleUser.setUserId(verifyUser);
+        insSampleUser.setInsSampleId(orderId);
+        insSampleUser.setState(1);
+        insSampleUser.setSonLaboratory(laboratory);
+        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));
+                    }
+                }
+            }
+            return null;
+        });
+        // 鍒犻櫎鏁伴噰閲囬泦娆℃暟
+        String key = "frequency" + ":" + entrustCode + ":*";
+        RedisUtil.delsLike(key);
         return 1;
     }
+
+    public static String getWeek(String dayStr) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            Date date = sdf.parse(dayStr);
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(date);
+            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
+            int day = calendar.get(Calendar.DAY_OF_MONTH);
+            return getWeekDay(dayOfWeek);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static String getWeekDay(int dayOfWeek) {
+        switch (dayOfWeek) {
+            case Calendar.MONDAY:
+                return "鍛ㄤ竴";
+            case Calendar.TUESDAY:
+                return "鍛ㄤ簩";
+            case Calendar.WEDNESDAY:
+                return "鍛ㄤ笁";
+            case Calendar.THURSDAY:
+                return "鍛ㄥ洓";
+            case Calendar.FRIDAY:
+                return "鍛ㄤ簲";
+            case Calendar.SATURDAY:
+                return "鍛ㄥ叚";
+            case Calendar.SUNDAY:
+                return "鍛ㄦ棩";
+            default:
+                return "鏈煡";
+        }
+    }
 }

--
Gitblit v1.9.3