From 8bf55e1ac0ac6eb6c97a025f0c03b78e208f668e Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期一, 26 八月 2024 17:26:58 +0800
Subject: [PATCH] 复核确认+插队+认领判断是否在库

---
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java | 1754 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 1,726 insertions(+), 28 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 5b4a1e7..f268a67 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,76 +1,1774 @@
 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.ExcelDto;
 import com.yuanchu.mom.dto.InsOrderPlanDTO;
-import com.yuanchu.mom.mapper.InsOrderMapper;
-import com.yuanchu.mom.mapper.InsSampleMapper;
-import com.yuanchu.mom.mapper.InsSampleUserMapper;
-import com.yuanchu.mom.pojo.InsOrder;
-import com.yuanchu.mom.pojo.InsSampleUser;
-import com.yuanchu.mom.service.InsOrderPlanService;
-import com.yuanchu.mom.service.InsOrderService;
+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.service.*;
+import com.yuanchu.mom.utils.JackSonUtil;
+import com.yuanchu.mom.utils.MatrixToImageWriter;
 import com.yuanchu.mom.utils.QueryWrappers;
-import com.yuanchu.mom.vo.InsOrderPlanVO;
-import lombok.AllArgsConstructor;
+import com.yuanchu.mom.utils.RedisUtil;
+import com.yuanchu.mom.vo.*;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+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.web.multipart.MultipartFile;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.io.*;
+import java.math.BigDecimal;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
 
 /**
  * 妫�楠屼换鍔�-涓氬姟瀹炵幇灞�
  */
 @Service
-@AllArgsConstructor
 public class InsOrderPlanServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder> implements InsOrderPlanService {
 
+    @Resource
     private InsSampleMapper insSampleMapper;
-
+    @Resource
     private InsSampleUserMapper insSampleUserMapper;
-
+    @Resource
     private GetLook getLook;
-
+    @Resource
     private InsOrderMapper insOrderMapper;
-
+    @Resource
     private InsOrderService insOrderService;
+    @Resource
+    private StandardTemplateService standardTemplateService;
+    @Resource
+    private InsOrderStateMapper insOrderStateMapper;
+    @Resource
+    private InsProductMapper insProductMapper;
+    @Resource
+    private ShiftTimeMapper shiftTimeMapper;
+    @Resource
+    private PerformanceShiftMapper performanceShiftMapper;
+    @Resource
+    private WarehouseHistoryMapper warehouseHistoryMapper;
+
+    @Value("${wordUrl}")
+    private String wordUrl;
+
+    @Value("${twoCode}")
+    private String twoCode;
+
+    @Resource
+    private InsReportMapper insReportMapper;
+
+    @Resource
+    private InsProductResultMapper insProductResultMapper;
+
+    @Resource
+    private InsProductUserMapper insProductUserMapper;
+
+    @Resource
+    private InsUnPassService insUnPassService;
+
+    @Resource
+    AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
+
+    @Resource
+    AuxiliaryOutputWorkingHoursService auxiliaryOutputWorkingHoursService;
+
+    @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");
-        if(ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())){
-            insOrderPlanDTO.setUserId(userId.longValue());
+        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);
         }
-        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;
+        //鑾峰彇褰撳墠浜烘墍灞炲疄楠屽id
+       /* String departLimsId = user.getDepartLimsId();
+        if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.equals("")) {
+            String[] split = departLimsId.split(",");
+            //鏌ヨ瀵瑰簲鏋舵瀯鍚嶇О(閫氫俊瀹為獙瀹�,鐢靛姏瀹為獙瀹�,妫�娴嬪姙)
+            String departLims = baseMapper.seldepLimsId(Integer.parseInt(split[split.length - 1]));
+            if (departLims.contains("瀹為獙瀹�")) {
+                laboratory = departLims;
+            }
+        }*/
+        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)){
+        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) {
+            //鍏ュ簱娆℃暟
+            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) {
+                //鍏ュ簱
+            } 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);
-        return insSampleUserMapper.insert(insSampleUser)>0;
+        InsSampleUser insSampleUser = new InsSampleUser(entity.getInsSampleId().intValue(), userId, 0, entity.getSonLaboratory());
+        return insSampleUserMapper.insert(insSampleUser) > 0;
     }
 
     @Override
-    public Map<String, Object> doInsOrder(Integer id) {
+    public Map<String, Object> doInsOrder(Integer id, String laboratory) {
         InsOrder insOrder = new InsOrder();
         insOrder.setId(id);
-        insOrder.setInsState(1);
-        insOrderMapper.updateById(insOrder);
-        return insOrderService.getInsOrder(id);
+        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));
+        }
+        Map<String, Object> map = insOrderService.getInsOrderAndSample(id, 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;
+    }
+
+    @Override
+    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);
+                break;
+            case 1:
+                //鍏夌氦甯�
+                insProducts = insSampleMapper.getInsProduct2(id);
+                break;
+            case 2:
+                //鍏夌氦
+                insProducts = insSampleMapper.getInsProduct3(id);
+                break;
+            case 3:
+                //濂楃
+                insProducts = insSampleMapper.getInsProduct4(id);
+                break;
+        }
+
+        //濡傛灉鏄ぇ鏍峰搧涓嬬殑椤圭洰涓虹┖,閭d箞鏌ヨ绗竴涓厜绾ょ殑椤圭洰
+        if (ObjectUtils.isEmpty(insProducts) && type == 0) {
+            //鏌ヨ绗竴涓厜绾ょ殑id
+            List<InsFiber> insFibers = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsBushingId, insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery().eq(InsBushing::getInsSampleId, id)).get(0).getId()));
+            insProducts = insSampleMapper.getInsProduct3(insFibers.get(0).getId());
+        }
+        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 void saveInsContext(Map<String, Object> insContext) {
+        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+        CompletableFuture.supplyAsync(() -> {
+            insContext.forEach((k, v) -> {
+                JSONObject jo = JSON.parseObject(JSON.toJSONString(v));
+                InsProduct insProduct = new InsProduct();
+                insProduct.setId(Integer.parseInt(k));
+                List<InsProductResult> results = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
+                        .eq(InsProductResult::getInsProductId, insProduct.getId()));
+                InsProduct product = insProductMapper.selectById(insProduct.getId());
+                InsProductResult result;
+                if (CollectionUtils.isEmpty(results)) {
+                    result = new InsProductResult();
+                } else {
+                    result = results.get(0);
+                }
+                result.setInsProductId(Integer.parseInt(k));
+                /*鏍¢獙涓�涓媟esult琛�*/
+                List<InsProductResult> insProductResultss = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
+                        .eq(InsProductResult::getInsProductId, insProduct.getId()));
+                if (insProductResultss.size() > 1) {
+                    for (int i = 1; i < insProductResultss.size(); i++) {
+                        insProductResultMapper.deleteById(insProductResultss.get(i));
+                    }
+                }
+                //InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, Integer.parseInt(k)));
+                //妫�楠屽��
+                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) {
+                        }
+                    }
+                    result.setInsValue(JSON.toJSONString(iv));
+                }
+                //璁$畻鍊�
+                if (jo.get("comValue") != null && !Objects.equals(jo.get("comValue"), "")) {
+                    JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("comValue")));
+                    List<Map<String, Object>> cv = new ArrayList<>();
+                    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));
+                }
+                //鏈�缁堝��
+                try {
+                    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("");//''
+                }
+                //璁惧缂栧彿
+                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);
+                    insProductResultMapper.insert(result);
+                } else {
+                    result.setUpdateUser(userId);
+                    result.setUpdateTime(LocalDateTime.now());
+                    insProductResultMapper.updateById(result);
+                }
+
+                /*濡傛灉鏄涓�娆¢�夋嫨璁惧淇℃伅,涓旇繕鏈夊叾浣欐牱鍝佷篃鏈夊悓涓�涓粡楠岄」鐩�,閭d箞鎵�鏈夋牱鍝佺殑璇ラ」鐩兘鐢ㄨ繖涓澶囦俊鎭�*/
+                //鍏堟煡璇㈡槸鍚﹁繕鏈夊叾浣欐牱鍝�
+
+                Integer insSampleId = product.getInsSampleId();
+                List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSampleMapper.selectById(insSampleId).getInsOrderId()));
+                //濡傛灉鏈夊涓牱鍝佹垨鑰呮槸涓嶆槸閲囬泦绫诲瀷灏卞悓涓�涓澶�
+                if (insSamples.size() > 1 && !product.getInspectionItemType().equals("1")) {
+                    //瀛樺湪鍏朵綑鏍峰搧,鏌ヨ鏄惁鏈夊悓涓�绉嶆楠岄」鐩�
+                    for (InsSample sample : insSamples.stream().filter(insSample -> !insSample.getId().equals(insSampleId)).collect(Collectors.toList())) {
+                        InsProduct product1 = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
+                                .eq(InsProduct::getState, 1)
+                                .eq(InsProduct::getInsSampleId, sample.getId())
+                                .eq(InsProduct::getInspectionItem, product.getInspectionItem())
+                                .eq(InsProduct::getInspectionItemEn, product.getInspectionItemEn())
+                                .eq(InsProduct::getInspectionItemSubclass, product.getInspectionItemSubclass())
+                                .eq(InsProduct::getInspectionItemSubclassEn, product.getInspectionItemSubclassEn())
+                                .eq(InsProduct::getTemplateId, product.getTemplateId())
+                                .eq(InsProduct::getStandardMethodListId, product.getStandardMethodListId())
+                                .eq(InsProduct::getInsBushId, product.getInsBushId())
+                                .eq(InsProduct::getInsFibersId, product.getInsFibersId())
+                                .eq(InsProduct::getInsFiberId, product.getInsFiberId())
+                        );
+                        if (ObjectUtils.isNotEmpty(product1)) {
+                            //濡傛灉瀛樺湪椤圭洰,鏌ヨ鏄惁鏈夎〃
+                            InsProductResult productResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
+                                    .eq(InsProductResult::getInsProductId, product1.getId()));
+                            if (ObjectUtils.isEmpty(productResult)) {
+                                //娌℃湁琛ㄦ柊寤鸿〃
+                                productResult = new InsProductResult();
+                                productResult.setInsProductId(product1.getId());
+                                productResult.setEquipValue(result.getEquipValue());
+                                productResult.setEquipName(result.getEquipValue());
+                                productResult.setCreateUser(userId);
+                                productResult.setUpdateUser(userId);
+                                insProductResultMapper.insert(productResult);
+                            } else if (ObjectUtils.isEmpty(productResult.getEquipValue())) {
+                                //鏈夎〃鍒ゆ柇鏄惁鏈夎澶�
+                                productResult.setEquipValue(result.getEquipValue());
+                                productResult.setEquipName(result.getEquipValue());
+                                productResult.setUpdateUser(userId);
+                                productResult.setUpdateTime(LocalDateTime.now());
+                                insProductResultMapper.updateById(productResult);
+                            }
+                        }
+                    }
+
+                }
+                insProduct.setUpdateUser(userId);
+                insProductMapper.updateById(insProduct);
+                insProductUserMapper.insert(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId()));
+
+                insProduct = insProductMapper.selectById(insProduct);
+
+                //鏌ヨ妫�楠屽崟淇℃伅
+                InsOrder insOrder = insOrderMapper.selectById(insSampleMapper.selectById(insProduct.getInsSampleId()).getInsOrderId());
+                //鏍¢獙濡傛灉杩欎釜浜鸿繖涓娴嬮」鐩凡缁忔坊鍔犺繃浜嗗垯涓嶉渶瑕佸啀鏂板
+                //棣栧厛鍒ゆ柇褰撳墠浜虹殑褰撳墠鏃堕棿鏄惁鏄帓鐝椂闂村唴,濡傛灉涓嶆槸灏辨槸鍔犵彮
+                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);
+                        }
+                        //鍔犵彮
+                        List<AuxiliaryOutputWorkingHours> count1s = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
+                                .eq(AuxiliaryOutputWorkingHours::getCheck, userId)
+                                .eq(AuxiliaryOutputWorkingHours::getInspectionItem, insProduct.getInspectionItem())
+                                .eq(AuxiliaryOutputWorkingHours::getInspectionItemSubclass, insProduct.getInspectionItemSubclass())
+                                .eq(AuxiliaryOutputWorkingHours::getOvertimeOrderNo, insOrder.getEntrustCode())
+                                .eq(AuxiliaryOutputWorkingHours::getSample, insSampleMapper.selectById(insProduct.getInsSampleId()).getSampleCode()));
+                        if (count1s.size() > 1) {
+                            for (int i = 1; i < count1s.size(); i++) {
+                                auxiliaryOutputWorkingHoursMapper.deleteById(count1s.get(i));
+                            }
+                        }
+                        //闈炲姞鐝�
+                        List<AuxiliaryOutputWorkingHours> count2s = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
+                                .eq(AuxiliaryOutputWorkingHours::getCheck, userId)
+                                .eq(AuxiliaryOutputWorkingHours::getInspectionItem, insProduct.getInspectionItem())
+                                .eq(AuxiliaryOutputWorkingHours::getInspectionItemSubclass, insProduct.getInspectionItemSubclass())
+                                .eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode())
+                                .eq(AuxiliaryOutputWorkingHours::getSample, insSampleMapper.selectById(insProduct.getInsSampleId()).getSampleCode()));
+                        if (count2s.size() > 1) {
+                            for (int i = 1; i < count2s.size(); i++) {
+                                auxiliaryOutputWorkingHoursMapper.deleteById(count2s.get(i));
+                            }
+                        }
+                        if (ObjectUtils.isNotEmpty(insProduct.getManHour()) && CollectionUtils.isEmpty(count2s) && CollectionUtils.isEmpty(count1s)) {
+                            AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
+                            if (isWithinRange) {
+                                //鍦ㄦ椂闂村唴灏辨槸姝e父涓婄彮
+                                auxiliaryOutputWorkingHours.setInspectionItem(insProduct.getInspectionItem());//妫�娴嬬埗椤�
+                                auxiliaryOutputWorkingHours.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());//妫�娴嬪瓙椤�
+                                auxiliaryOutputWorkingHours.setSample(insSampleMapper.selectById(insProduct.getInsSampleId()).getSampleCode());//鏍峰搧缂栧彿
+                                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));//浜ч噺宸ユ椂
+                                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);//妫�娴嬩汉
+                            } else {
+                                //鍔犵彮
+                                auxiliaryOutputWorkingHours.setInspectionItem(insProduct.getInspectionItem());//妫�娴嬬埗椤�
+                                auxiliaryOutputWorkingHours.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());//妫�娴嬪瓙椤�
+                                auxiliaryOutputWorkingHours.setSample(insSampleMapper.selectById(insProduct.getInsSampleId()).getSampleCode());//鏍峰搧缂栧彿
+                                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.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);//妫�娴嬩汉
+                            }
+                            try {
+                                if (CollectionUtils.isEmpty(insProductResultss) && !result.getInsValue().equals("[]") || (CollectionUtils.isNotEmpty(insProductResultss) && !insProductResultss.get(0).getInsValue().equals(result.getInsValue()) && !insProductResultss.get(0).getInsValue().equals("[]"))) {
+                                    auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
+                                }
+                            } catch (Exception e) {
+                                System.out.println("宸ユ椂鏂板涓嶆垚鍔�!!!");
+                            }
+                        }
+                    }
+                }
+
+                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) {
+                    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 insContext.keySet().stream().findFirst().orElse(null);
+        }).thenAccept(res -> {
+            if (res != null) {
+                int pId = Integer.parseInt(res.replaceAll("\\D+", ""));
+                InsProduct insProduct = insProductMapper.selectById(pId);
+                // 閫氳繃pId 鑾峰彇褰撳墠鏍锋湰id
+                int sampleId = insProductMapper.selectById(pId).getInsSampleId();
+                // 閫氳繃鏍锋湰id鑾峰彇璁㈠崟id
+                int orderId = insSampleMapper.selectById(sampleId).getInsOrderId();
+                // 閫氳繃璁㈠崟id鏌ユ壘鎵�鏈夋牱鏈琲d
+                List<Integer> sampleIds = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId)).stream().map(InsSample::getId).collect(Collectors.toList());
+                // 閫氳繃妫�鏌ユ瘡涓�涓牱鏈琲d鏌ュ埌灞炰簬妫�楠岄」缁撹 is null 鎴栬�� =2 鐨勬暟閲�
+                Long count = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+                        .in(InsProduct::getInsSampleId, sampleIds)
+                        .and(wrapper -> wrapper
+                                .isNull(InsProduct::getInsResult)
+                                .or()
+                                .eq(InsProduct::getInsResult, 2)
+                        )
+                        //.isNull(InsProduct::getInsResult)
+                        .eq(InsProduct::getSonLaboratory, insProduct.getSonLaboratory())
+                        .eq(InsProduct::getState, 1));
+                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, 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) {
+        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);
+                }
+            }
+        }
+        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::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);
+                    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));
+                /*鐢熸垚鎶ュ憡*/
+                generateReport(orderId);
+                break;
+        }
+        return 1;
+    }
+
+    //鐢熸垚鎶ュ憡
+    private void generateReport(Integer orderId) {
+        LocalDateTime now = LocalDateTime.now();
+        InsOrder insOrder = insOrderMapper.selectById(orderId);
+        Map<String, String> user = insProductMapper.selectUserById(insOrder.getUserId());
+        //samples鏄繃婊ゆ帀娌℃湁妫�楠岄」鐩殑鏍峰搧
+        List<SampleProductDto> samples = insSampleMapper.selectSampleProductListByOrderId(orderId);
+        InsReport insReport = new InsReport();
+        insReport.setCode(insOrder.getEntrustCode());
+        insReport.setInsOrderId(orderId);
+        List<Map<String, Object>> tables = new ArrayList<>();
+        Set<String> standardMethod = new HashSet<>();
+        Set<String> deviceSet = new HashSet<>();
+        Set<String> models = new HashSet<>();
+        AtomicReference<Integer> productSize = new AtomicReference<>(0);
+        String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
+        AtomicReference<String> resultCh = new AtomicReference<>("");
+        AtomicReference<String> resultEn = new AtomicReference<>("");
+        /*鍩虹鎶ュ憡(7鍒�)*/
+        samples.forEach(a -> {
+            Set<Integer> set = new HashSet<>();
+            Map<Integer, String> map2 = new HashMap<>();
+            Long productCount = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, a.getId()));
+            productSize.set(productSize.get() + Integer.parseInt(productCount + ""));
+            models.add(a.getModel());
+            standardMethod.add(baseMapper.getStandardMethodCode(a.getStandardMethodListId()));
+            getTemplateThing(set, map2, a.getInsProduct());
+            for (InsProduct b : a.getInsProduct()) {
+                if (b.getInsProductResult() != null) {
+                    List<JSONObject> jsonObjects = JSON.parseArray(b.getInsProductResult().getEquipValue(), JSONObject.class);
+                    for (JSONObject jsonObject : jsonObjects) {
+                        if (!"".equals(jsonObject.get("v") + "")) {
+                            deviceSet.add(jsonObject.get("v") + "");
+                        }
+                    }
+                }
+            }
+            AtomicInteger index = new AtomicInteger();
+            Set<String> itemSet = new HashSet<>();
+            List<RowRenderData> rows = new ArrayList<>();
+            //琛ㄦ牸鐨勮鏁�
+            for (int i = 0; i < 3 + a.getInsProduct().size(); i++) {
+                RowRenderData rowRenderData = new RowRenderData();
+                RowStyle rowStyle = new RowStyle();
+                rowStyle.setHeight(40);
+                rowRenderData.setRowStyle(rowStyle);
+                List<CellRenderData> cells = new ArrayList<>();
+                if (i >= 2 && i < 2 + a.getInsProduct().size()) {
+                    if (itemSet.add(a.getInsProduct().get(i - 2).getInspectionItem())) {
+                        index.getAndIncrement();
+                    }
+                }
+                //鍒楁暟
+                for (int j = 0; j < 7; j++) {
+                    CellRenderData cellRenderData = new CellRenderData();
+                    CellStyle cellStyle = new CellStyle();
+                    cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+                    cellRenderData.setCellStyle(cellStyle);
+                    List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+                    ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+                    ParagraphStyle paragraphStyle = new ParagraphStyle();
+                    paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+                    paragraphRenderData.setParagraphStyle(paragraphStyle);
+                    List<RenderData> renderData = new ArrayList<>();
+                    TextRenderData textRenderData = new TextRenderData();
+                    Style style = new Style();
+                    style.setFontFamily("瀹嬩綋");
+                    style.setColor("000000");
+                    textRenderData.setStyle(style);
+                    if (i == 0) {
+                        //绗竴琛�
+                        if (j == 0 || j == 1) {
+                            //绗竴鍒楀拰绗簩鍒�
+                            textRenderData.setText("鏍峰搧缂栧彿@Sample number鈭�1");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else if (j == 2 || j == 3) {
+                            //绗笁鍒楀拰绗洓鍒�
+                            textRenderData.setText(a.getSampleCode() + "鈭�2");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else if (j == 4) {
+                            //绗簲鍒�
+                            textRenderData.setText("瑙勬牸鍨嬪彿@Type");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else {
+                            //绗叚鍒楀拰绗竷鍒�
+                            textRenderData.setText(a.getModel() + "鈭�3");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        }
+                    } else if (i == 1) {
+                        //绗簩琛�
+                        if (j == 0) {
+                            //绗竴鍒�
+                            textRenderData.setText("搴忓彿@No.");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else if (j == 1 || j == 2) {
+                            //绗簩鍒楀拰绗笁鍒�
+                            textRenderData.setText("妫�娴嬮」鐩瓳Testing item鈭�4");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else if (j == 3) {
+                            //绗洓鍒�
+                            textRenderData.setText("鍗曚綅@Unit");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else if (j == 4) {
+                            //绗簲鍒�
+                            textRenderData.setText("鏍囧噯瑕佹眰@Requirement");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else if (j == 5) {
+                            //绗叚鍒�
+                            textRenderData.setText("妫�楠岀粨鏋淍Test result");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else {
+                            //绗竷鍒�
+                            textRenderData.setText("缁撹@Conclusion");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        }
+                    } else if (i == 2 + a.getInsProduct().size()) {
+                        //鏈�鍚庝竴琛�
+                        if (j == 0 || j == 1) {
+                            //绗竴鍒楀拰绗簩鍒�
+                            textRenderData.setText("澶囨敞鈭�5");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else {
+                            //鍏朵綑鍒�
+                            textRenderData.setText("鈥溾垰鈥濊〃绀洪」鐩悎鏍硷紝鈥溍椻�濊〃绀洪」鐩笉鍚堟牸銆侤鈥溾垰鈥� indicates test item is qualified,鈥溍椻�� indicates test item is not qualified 鈭�6");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        }
+                    } else {
+                        //鍏朵綑琛�
+                        if (j == 0) {
+                            //绗竴鍒�
+                            textRenderData.setText(index + "鈭�2" + index);
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else if (j == 1) {
+                            //绗簩鍒�
+                            if (ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getInspectionItemSubclass())) {
+                                if (ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getInspectionItemEn())) {
+                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItem() + "@" + a.getInsProduct().get(i - 2).getInspectionItemEn() + "鈭�3" + index);
+                                } else {
+                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItem() + "鈭�3" + index);
+                                }
+                            } else {
+                                if (ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getInspectionItemEn())) {
+                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItem() + "@" + a.getInsProduct().get(i - 2).getInspectionItemEn() + "鈭�3" + index);
+                                } else {
+                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItem() + "鈭�3" + index);
+                                }
+                            }
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else if (j == 2) {
+                            //绗笁鍒�
+                            if (ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getInspectionItemSubclass())) {
+                                if (ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getInspectionItemSubclassEn())) {
+                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItemSubclass() + "@" + a.getInsProduct().get(i - 2).getInspectionItemSubclassEn());
+                                } else {
+                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItemSubclass());
+                                }
+                            } else {
+                                if (ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getInspectionItemEn())) {
+                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItem() + "@" + a.getInsProduct().get(i - 2).getInspectionItemEn() + "鈭�3" + index);
+                                } else {
+                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItem() + "鈭�3" + index);
+                                }
+                            }
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else if (j == 3) {
+                            //绗洓鍒�
+                            textRenderData.setText(ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getUnit()) ? a.getInsProduct().get(i - 2).getUnit() : "");
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else if (j == 4) {
+                            //绗簲鍒�
+                            textRenderData.setText(a.getInsProduct().get(i - 2).getTell());
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else if (j == 5) {
+                            //绗叚鍒�
+                            textRenderData.setText(a.getInsProduct().get(i - 2).getLastValue());
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        } else {
+                            //绗竷鍒�
+                            if (ObjectUtils.isEmpty(a.getInsProduct().get(i - 2).getInsResult())) {
+                                textRenderData.setText("-");
+                            } else if (a.getInsProduct().get(i - 2).getInsResult() == 1) {
+                                textRenderData.setText("鈭�");
+                            } else if (a.getInsProduct().get(i - 2).getInsResult() == 0) {
+                                textRenderData.setText("脳");
+                            } else {
+                                textRenderData.setText("-");
+                            }
+                            renderData.add(textRenderData);
+                            paragraphRenderData.setContents(renderData);
+                            paragraphRenderDataList.add(paragraphRenderData);
+                            cellRenderData.setParagraphs(paragraphRenderDataList);
+                            cells.add(cellRenderData);
+                        }
+                    }
+                }
+                rowRenderData.setCells(cells);
+                if (rowRenderData.getCells().size() != 0) {
+                    rows.add(rowRenderData);
+                }
+            }
+            TableRenderData tableRenderData = new TableRenderData();
+            tableRenderData.setRows(rows);
+
+            List<TableRenderData> tables1 = new ArrayList<>();
+            tableRenderData.setRows(new ArrayList<>());
+            int totalHeight = 0;
+            int pageHeightLimit = 500; // 鍋囪姣忛〉鐨勯珮搴﹂檺鍒朵负500鍗曚綅
+            int rowHeight = 0;
+            List<RowRenderData> firstTwoRows = new ArrayList<>(); // 淇濆瓨鍓嶄袱琛屼互渚垮鍒跺埌鏂拌〃鏍�
+            List<RowRenderData> endRows = new ArrayList<>(); // 淇濆瓨鍓嶄袱琛屼互渚垮鍒跺埌鏂拌〃鏍�
+            // 淇濆瓨鍓嶄袱琛屼互渚垮鍒跺埌鏂拌〃鏍�
+            if (rows.size() >= 3) {
+                firstTwoRows.add(rows.get(0));
+                firstTwoRows.add(rows.get(1));
+                endRows.add(rows.get(rows.size() - 1));
+            }
+            for (RowRenderData row : rows) {
+                rowHeight = calculateRowHeight(row); // 鑷畾涔夋柟娉曡绠楄楂�
+                if (totalHeight + rowHeight > pageHeightLimit) {
+                    tableRenderData.getRows().addAll(endRows);
+                    // 鍒涘缓鏂拌〃鏍煎苟澶嶅埗鍓嶄袱琛�
+                    TableRenderData newTableRenderData = new TableRenderData();
+                    newTableRenderData.setRows(new ArrayList<>(firstTwoRows));
+                    //璁剧疆鏍峰紡
+                    TableStyle tableStyle = new TableStyle();
+                    tableStyle.setColWidths(new int[]{650, 1600, 2000, 750, 2800, 1100, 1100});
+                    tableStyle.setWidth("10000");
+                    tableStyle.setAlign(TableRowAlign.CENTER);
+                    BorderStyle borderStyle = new BorderStyle();
+                    borderStyle.setColor("000000");
+                    borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+                    borderStyle.setSize(14);
+                    tableStyle.setLeftBorder(borderStyle);
+                    tableStyle.setTopBorder(borderStyle);
+                    tableStyle.setRightBorder(borderStyle);
+                    tableStyle.setBottomBorder(borderStyle);
+                    tableRenderData.setTableStyle(tableStyle);
+                    newTableRenderData.setTableStyle(tableStyle);
+                    tables1.add(tableRenderData);
+                    tableRenderData = newTableRenderData;
+                    totalHeight = 0;
+                }
+                totalHeight += rowHeight;
+                tableRenderData.getRows().add(row);
+            }
+            if (!tableRenderData.getRows().isEmpty()) {
+                //璁剧疆鏍峰紡
+                TableStyle tableStyle = new TableStyle();
+                tableStyle.setColWidths(new int[]{650, 1600, 2000, 750, 2800, 1100, 1100});
+                tableStyle.setWidth("10000");
+                tableStyle.setAlign(TableRowAlign.CENTER);
+                BorderStyle borderStyle = new BorderStyle();
+                borderStyle.setColor("000000");
+                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+                borderStyle.setSize(14);
+                tableStyle.setLeftBorder(borderStyle);
+                tableStyle.setTopBorder(borderStyle);
+                tableStyle.setRightBorder(borderStyle);
+                tableStyle.setBottomBorder(borderStyle);
+                tableRenderData.setTableStyle(tableStyle);
+                tables1.add(tableRenderData);
+            }
+            tables1.forEach(table -> {
+                Map<String, Object> tableMap = new HashMap<>();
+                tableMap.put("table", table);
+                tableMap.put("report", insReport);
+                tables.add(tableMap);
+            });
+        });
+
+        String url;
+        try {
+            InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
+            File file = File.createTempFile("temp", ".tmp");
+            OutputStream outputStream = new FileOutputStream(file);
+            IOUtils.copy(inputStream, outputStream);
+            url = file.getAbsolutePath();
+        } catch (FileNotFoundException e) {
+            throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        StringBuilder standardMethod2 = new StringBuilder();
+        for (String s : standardMethod) {
+            standardMethod2.append("銆�").append(s);
+        }
+        standardMethod2.replace(0, 1, "");
+        tables.forEach(table -> {
+            table.put("tableSize", tables.size() + 1);
+        });
+        List<Map<String, String>> deviceList = null;
+        if (deviceSet.size() != 0) {
+            deviceList = insOrderMapper.selectDeviceList(deviceSet);
+        }
+        Map<String, String> codeStr = new HashMap<>();
+        codeStr.put("鎶ュ憡缂栧彿", insReport.getCode());
+        codeStr.put("鏍峰搧鍚嶇О", insOrder.getSample());
+        codeStr.put("瑙勬牸鍨嬪彿", samples.get(0).getModel());
+        codeStr.put("鍙戞斁鏃ユ湡", now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        String codePath;
+        try {
+            codePath = new MatrixToImageWriter().code(JackSonUtil.marshal(codeStr).replaceAll("\\{", "")
+                    .replaceAll("}", "").replaceAll(",", "").replaceAll("\"", ""), twoCode);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        String modelStr = "";
+        for (String model : models) {
+            modelStr += "," + model;
+        }
+        String finalModelStr = modelStr;
+        String sampleEn = insSampleMapper.getSampleEn(insOrder.getSample());
+        String orderType = insOrderMapper.getEnumLabelByValue(insOrder.getOrderType());
+        String formType = insOrderMapper.getEnumLabelByValue(insOrder.getFormType());
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        List<Map<String, String>> finalDeviceList = deviceList;
+        Integer userId = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery()
+                .eq(InsSampleUser::getInsSampleId, orderId).last("limit 1")).getUserId();
+        String signatureUrl;
+        try {
+            signatureUrl = userMapper.selectById(userId).getSignatureUrl();
+        } catch (Exception e) {
+            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+        }
+        if (ObjectUtils.isEmpty(signatureUrl) || signatureUrl.equals("")) {
+            throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+        }
+        Custom custom = customMapper.selectById(insOrder.getCompanyId());
+        if (!resultCh.get().equals("")) {
+            resultCh.set("渚濇嵁濮旀墭瑕佹眰锛�" + resultCh.get().replaceFirst("銆�", "") + "绛夋墍妫�椤圭洰涓嶇鍚堣姹傦紝鍏朵綑鎵�妫�椤圭洰鍧囩鍚堣姹傘��");
+            resultEn.set("According to commissioned requirements," + resultEn.get().replaceFirst("銆�", "") + " these inspected items do not meet the requirements, all other inspected items meet the requirements.");
+        } else {
+            resultCh.set("渚濇嵁濮旀墭瑕佹眰锛屾墍妫�椤圭洰鍧囩鍚堣姹傘��");
+            resultEn.set("According to commissioned requirements, all the tested items meet the requirements.");
+        }
+
+        /*鑾峰彇闄勪欢鍥剧墖绫诲瀷*/
+        List<Map<String, Object>> images = new ArrayList<>();
+        List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery().eq(InsOrderFile::getType, 1).eq(InsOrderFile::getInsOrderId, orderId));
+        if (CollectionUtils.isNotEmpty(insOrderFiles)) {
+            insOrderFiles.forEach(insOrderFile -> {
+                Map<String, Object> image = new HashMap<>();
+                PictureRenderData pictureRenderData = Pictures.ofLocal(imgUrl + "/" + insOrderFile.getFileUrl()).sizeInCm(17, 20).create();
+                image.put("url", pictureRenderData);
+                image.put("report", insReport);
+                images.add(image);
+            });
+        }
+        //濮旀墭浜哄拰鐢佃瘽瀛楁鍒ゆ柇
+        if (ObjectUtils.isEmpty(insOrder.getPrepareUser())) {
+            insOrder.setPrepareUser("/");
+        }
+        if (ObjectUtils.isEmpty(insOrder.getPhone())) {
+            insOrder.setPhone("/");
+        }
+        //妫�楠岄」鐩殑鐜
+        InsProduct insProduct = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getState, 1).eq(InsProduct::getInsSampleId, samples.get(0).getId())).get(0);
+        String environment = "";
+        environment = (ObjectUtils.isNotEmpty(insProduct.getTemperature()) ? insProduct.getTemperature() + "鈩� " : "") + (ObjectUtils.isNotEmpty(insProduct.getHumidity()) ? insProduct.getHumidity() + "%" : "");
+        String finalEnvironment = environment;
+        XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("order", insOrder);
+                    put("report", insReport);
+                    put("environment", finalEnvironment);
+                    put("custom", custom);
+                    put("sampleSize", samples.size());
+                    put("tables", tables);
+                    put("tableSize", tables.size() + 1);
+                    put("standardMethod", (standardMethod2.toString().equals("null") ? "" : standardMethod2));
+                    put("deviceList", finalDeviceList);
+                    put("twoCode", Pictures.ofLocal(codePath).create());
+                    put("models", finalModelStr.replace(",", ""));
+                    put("productSize", productSize);
+                    put("createTime", now.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+                    put("createTimeEn", monthNames[now.getMonthValue() - 1] + " " + now.getDayOfMonth() + ", " + now.getYear());
+                    put("insTime", insOrder.getInsTime().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+                    put("insTimeEn", monthNames[insOrder.getInsTime().getMonthValue() - 1] + " " + insOrder.getInsTime().getDayOfMonth() + ", " + insOrder.getInsTime().getYear());
+                    put("writeUrl", null);
+                    put("insUrl", Pictures.ofLocal(imgUrl + "/" + signatureUrl).create());
+                    put("images", images);
+                    put("examineUrl", null);
+                    put("ratifyUrl", null);
+                    put("sampleEn", sampleEn);
+                    put("orderType", orderType);
+                    put("getTime", insOrder.getExamineTime().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+                    put("getTimeEn", monthNames[insOrder.getExamineTime().getMonthValue() - 1] + " " + insOrder.getExamineTime().getDayOfMonth() + ", " + insOrder.getExamineTime().getYear());
+                    put("seal1", null);
+                    put("seal2", null);
+                    put("formTypeCh", formType);
+                    put("formTypeEn", insOrder.getFormType());
+                    put("resultCh", resultCh.get());
+                    put("resultEn", resultEn.get());
+                }});
+        try {
+            String name = insReport.getCode().replace("/", "") + ".docx";
+            template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+            insReport.setUrl("/word/" + name);
+            insReportMapper.insert(insReport);
+            insOrder.setInsState(5);
+            insOrderMapper.updateById(insOrder);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+        String path = wordUrl + "/" + insReport.getCode().replace("/", "") + ".docx";
+        try {
+            FileInputStream stream = new FileInputStream(path);
+            XWPFDocument document = new XWPFDocument(stream);
+            List<XWPFTable> xwpfTables = document.getTables();
+            for (int i = 1; i < xwpfTables.size() - (deviceList == null ? 1 : 2); i++) {
+                Set<String> set1 = new HashSet<>();
+                Map<String, Map<String, Integer>> maps = new HashMap<>();
+                for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("鈭�") > -1) {
+                            String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�");
+                            if (set1.add(split[1])) {
+                                Map<String, Integer> map = new HashMap<>();
+                                map.put("sr", j);
+                                map.put("sc", k);
+                                map.put("er", j + 0);
+                                map.put("ec", k + 0);
+                                maps.put(split[1], map);
+                            } else {
+                                Map<String, Integer> map1 = maps.get(split[1]);
+                                if (j == map1.get("sr")) {
+                                    map1.put("ec", map1.get("ec") + 1);
+                                } else if (k == map1.get("sc")) {
+                                    map1.put("er", map1.get("er") + 1);
+                                }
+                            }
+                            String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0];
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+                            xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+                List<String> list = new ArrayList<>();
+                for (String s : maps.keySet()) {
+                    list.add(s);
+                }
+                for (int a = list.size() - 1; a >= 0; a--) {
+                    Map<String, Integer> v = maps.get(list.get(a));
+                    for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
+                        if (v.get("ec") > v.get("sc")) {
+                            try {
+                                TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+                            } catch (Exception e) {
+                            }
+                        }
+                    }
+                    if (v.get("er") > v.get("sr")) {
+                        try {
+                            TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+                        } catch (Exception e) {
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream = new FileOutputStream(path);
+            document.write(fileOutputStream);
+            fileOutputStream.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        //澶勭悊涓嫳鏂囨崲琛岀殑闂
+        try {
+            FileInputStream stream1 = new FileInputStream(path);
+            XWPFDocument document1 = new XWPFDocument(stream1);
+            List<XWPFTable> xwpfTables1 = document1.getTables();
+            for (int i = 1; i < xwpfTables1.size() - (deviceList == null ? 1 : 2); i++) {
+                for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+                    for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+                        if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+                            String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+                            String[] split = text.split("@");
+                            xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+                            XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+                            XWPFRun run = xwpfParagraph.createRun();
+                            run.setText(split[0]);
+                            if (ObjectUtils.isNotNull(split[1])) {
+                                run.addBreak();
+                                run.setText(split[1]);
+                            }
+                            xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+                        }
+                    }
+                }
+            }
+            FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+            document1.write(fileOutputStream1);
+            fileOutputStream1.close();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+
+    // 璁$畻琛岄珮鐨勬柟娉�
+    private int calculateRowHeight(RowRenderData rowRenderData) {
+        // 瀹炵幇璁$畻閫昏緫锛屽彲鑳介渶瑕佹牴鎹崟鍏冩牸鍐呭鍜屽瓧浣撶瓑鍙傛暟杩涜璁$畻
+        int height = 0;
+        for (CellRenderData cell : rowRenderData.getCells()) {
+            int cellHeight = estimateCellHeight(cell); // 鏍规嵁鍐呭浼扮畻鍗曞厓鏍奸珮搴�
+            if (cellHeight > height) {
+                height = cellHeight;
+            }
+        }
+        return height;
+    }
+
+    //鏍规嵁鍗曞厓鏍肩殑鏂囨湰鍐呭璁$畻瀹為檯琛岄珮
+    private int estimateCellHeight(CellRenderData cellRenderData) {
+        // 鍋囪榛樿琛岄珮鏄�40
+        int defaultHeight = 40;
+        // 鑾峰彇鍗曞厓鏍间腑鐨勬墍鏈夋钀�
+        List<ParagraphRenderData> paragraphs = cellRenderData.getParagraphs();
+        int estimatedHeight = 0;
+        // 閬嶅巻娈佃惤锛屼及绠楁瘡涓钀界殑楂樺害
+        for (ParagraphRenderData paragraph : paragraphs) {
+            List<RenderData> contents = paragraph.getContents();
+            for (RenderData content : contents) {
+                if (content instanceof TextRenderData) {
+                    TextRenderData text = (TextRenderData) content;
+                    Style style = text.getStyle();
+                    // 鍋囪姣忚鏂囨湰鐨勯珮搴︿负瀛椾綋澶у皬鐨�1.2鍊�
+                    Double fontSize = Objects.isNull(style.getFontSize()) ? 12.0 : style.getFontSize();
+                    int lines = (int) Math.ceil(text.getText().length() / 15.0); // 鍋囪姣忚绾�15涓瓧绗�
+                    int textHeight = (int) (fontSize * 1.2 * lines);
+                    // 绱姞娈佃惤鐨勯珮搴�
+                    estimatedHeight += textHeight;
+                }
+            }
+        }
+        // 杩斿洖鏈�澶у�硷紝纭繚楂樺害涓嶄綆浜庨粯璁ら珮搴�
+        return Math.max(estimatedHeight, defaultHeight);
+    }
+
+    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()));
+            }
+        }
+    }
+
+    @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));
+        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) {
+                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));
+        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+        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);
+        //澶嶆牳浜�--妫�楠屽崟鐩稿叧璐熻矗浜�
+        InsSampleUser insSampleUser = new InsSampleUser();
+        insSampleUser.setUserId(verifyUser);
+        insSampleUser.setInsSampleId(orderId);
+        insSampleUser.setState(1);
+        insSampleUser.setSonLaboratory(laboratory);
+        insSampleUserMapper.insert(insSampleUser);
+        /*濡傛灉鏄疌绫昏鍗曚笖鏄笅鍙戝埌璐ㄩ噺閮�,鍒欑洿鎺ュ鏍搁�氳繃(缁撴潫璇曢獙)*/
+        InsOrder insOrder = insOrderMapper.selectById(orderId);
+        if (insOrder.getOrderType().equals("C") && insOrder.getDepartmentLims().equals("璐ㄩ噺閮�")) {
+            verifyPlan(orderId, laboratory, 2, null);
+        }
+        /*鏍¢獙涓�涓媟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::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 int pxToCm(int px) {
+        return px / 9;
+    }
+
+    // 鑾峰彇涓や釜localDateTime鐨勬瘡涓�澶�
+    public static List<LocalDateTime> getLocalDateTimesBetween(LocalDateTime start, LocalDateTime end) {
+        List<LocalDateTime> localDateTimes = new ArrayList<>();
+        LocalDate currentDate = start.toLocalDate();
+        LocalDateTime currentLocalDateTime = start;
+        while (!currentDate.isAfter(end.toLocalDate())) {
+            localDateTimes.add(currentLocalDateTime);
+            currentLocalDateTime = currentLocalDateTime.plusDays(1);
+            currentDate = currentDate.plusDays(1);
+        }
+        return localDateTimes;
+    }
+
+    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