zhuo
2024-07-23 5ed5f51d479989d5b2149b09c82b6b3ea495b589
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -1,13 +1,18 @@
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.Console;
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.conditions.query.QueryWrapper;
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;
@@ -15,48 +20,52 @@
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.Style;
import com.deepoove.poi.data.style.TableStyle;
import com.deepoove.poi.data.style.*;
import com.deepoove.poi.util.TableTools;
import com.deepoove.poi.xwpf.WidthScalePattern;
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.common.PrintChina;
import com.yuanchu.mom.dto.ExcelDto;
import com.yuanchu.mom.dto.InsOrderPlanDTO;
import com.yuanchu.mom.dto.SampleProductDto;
import com.yuanchu.mom.dto.*;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.*;
import com.yuanchu.mom.pojo.*;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.service.InsOrderPlanService;
import com.yuanchu.mom.service.InsOrderService;
import com.yuanchu.mom.service.StandardTemplateService;
import com.yuanchu.mom.utils.GiveCode;
import com.yuanchu.mom.service.*;
import com.yuanchu.mom.utils.JackSonUtil;
import com.yuanchu.mom.utils.MatrixToImageWriter;
import com.yuanchu.mom.utils.QueryWrappers;
import com.yuanchu.mom.utils.RedisUtil;
import com.yuanchu.mom.vo.InsOrderPlanTaskSwitchVo;
import com.yuanchu.mom.vo.InsOrderPlanVO;
import com.yuanchu.mom.vo.ProductVo;
import com.yuanchu.mom.vo.SampleVo;
import org.apache.commons.io.IOUtils;
import org.apache.poi.xwpf.usermodel.TableRowAlign;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.*;
import java.math.BigInteger;
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.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
 * 检验任务-业务实现层
 */
@Service
//@AllArgsConstructor
public class InsOrderPlanServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder> implements InsOrderPlanService {
    @Resource
@@ -83,9 +92,6 @@
    private String twoCode;
    @Resource
    private GiveCode giveCode;
    @Resource
    private InsReportMapper insReportMapper;
    @Resource
@@ -94,20 +100,71 @@
    @Resource
    private InsProductUserMapper insProductUserMapper;
    @Resource
    private InsUnPassService insUnPassService;
    @Resource
    AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
    @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));
        Integer userId = null;
        if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId()) ) {
            Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null);
             userId = map1.get("userId");
            insOrderPlanDTO.setUserId(userId.longValue());
        }
        String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//试验室
        IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId,sonLaboratory);
        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");
        if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
            insOrderPlanDTO.setUserId(userId.longValue());
        }
        IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId);
        String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//试验室
        IPage<InsOrderPlanTaskSwitchVo> insOrderPage = insSampleMapper.inspectionOrderDetailsTaskSwitching(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId,sonLaboratory);
        map.put("body", insOrderPage);
        return map;
    }
    //认领任务
    @Override
    public boolean claimInsOrderPlan(InsOrderPlanDTO entity) {
        if (Objects.isNull(entity)) {
@@ -115,7 +172,7 @@
        }
        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null);
        Integer userId = map1.get("userId");
        InsSampleUser insSampleUser = new InsSampleUser(entity.getInsSampleId().intValue(), userId, 1);
        InsSampleUser insSampleUser = new InsSampleUser(entity.getInsSampleId().intValue(), userId, 1,entity.getSonLaboratory());
        return insSampleUserMapper.insert(insSampleUser) > 0;
    }
@@ -130,16 +187,258 @@
            insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, id).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 1));
        }
        Map<String, Object> map = insOrderService.getInsOrderAndSample(id, laboratory);
        Set<Integer> set = new HashSet<>();
        Map<Integer, String> map2 = new HashMap<>();
        List<SampleProductDto> list = JSON.parseArray(JSON.toJSONString(map.get("sampleProduct")), SampleProductDto.class);
        for (SampleProductDto samples : list) {
            if (BeanUtil.isEmpty(samples.getInsProduct())) continue;
            getTemplateThing(set, map2, samples);
            samples.setBushing(insBushingService.selectBushingBySampleId(samples.getId()));
        }
        map.put("sampleProduct", list);
        return map;
    }
    @Override
    public List<InsProduct> getInsProduct(Integer id, Integer type, String laboratory) {
        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;
        }
        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<>();
        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<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)).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)).collect(Collectors.toList());
                    if (insProducts.size()==collect.size()) {
                        insFiber.setState(1);//已检验
                    }else {
                        insFiber.setState(0);//未检验
                    }
                }
                fiber.addAll(fiberList);
            } else {
                //如果套管下没有光纤带就只有光纤了
                List<InsFiber> insFiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsBushingId, insBushing.getId()));
                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)).collect(Collectors.toList());
                    if (insProducts.size()==collect.size()) {
                        insFiber.setState(1);//已检验
                    }else {
                        insFiber.setState(0);//未检验
                    }
                }
                fiber.addAll(insFiberList);
            }
        }
        map.put("光纤带", fibers);
        map.put("光纤", fiber);
        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) {
                            //再根据关联的光纤配置的id和循环次数和温度和样品id进行查询检验项目
                            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(fiber.getBushColor());
                                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 (!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) {
                        //再根据关联的光纤配置的id和循环次数和温度和样品id进行查询检验项目
                        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 (!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 void saveInsContext(Map<String, Object> insContext) {
@@ -149,9 +448,12 @@
                JSONObject jo = JSON.parseObject(JSON.toJSONString(v));
                InsProduct insProduct = new InsProduct();
                insProduct.setId(Integer.parseInt(k));
                InsProductResult result = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()));
                if (BeanUtil.isEmpty(result)) {
                List<InsProductResult> results = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()));
                InsProductResult result;
                if (CollectionUtils.isEmpty(results)) {
                    result = new InsProductResult();
                } else {
                    result = results.get(0);
                }
                result.setInsProductId(Integer.parseInt(k));
                if (jo.get("insValue") != null) {
@@ -161,6 +463,8 @@
                        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")));
                        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 + "");
@@ -188,9 +492,10 @@
                    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==null?null:(o + ""));
                        insProduct.setLastValue(o.equals("") ? null : (o.toString()));
                    }
                }catch (Exception e){}
                } catch (Exception e) {
                }
                if (jo.get("equipValue") != null) {
                    JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("equipValue")));
                    List<Map<String, Object>> ev = new ArrayList<>();
@@ -231,6 +536,39 @@
                insProduct.setUpdateUser(userId);
                insProductMapper.updateById(insProduct);
                insProductUserMapper.insert(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId()));
                insProduct = insProductMapper.selectById(insProduct);
                //查询检验单信息
                InsOrder insOrder = insOrderMapper.selectById(insSampleMapper.selectById(insProduct.getInsSampleId()).getInsOrderId());
                //校验如果这个人这个检测项目已经添加过了则不需要再新增
                Long count = auxiliaryOutputWorkingHoursMapper.selectCount(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
                        .eq(AuxiliaryOutputWorkingHours::getCheck, userId)
                        .eq(AuxiliaryOutputWorkingHours::getInspectionItem, insProduct.getInspectionItem())
                        .eq(AuxiliaryOutputWorkingHours::getInspectionItemSubclass, insProduct.getInspectionItemSubclass())
                        .eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode()));
                if (count == 0 && ObjectUtils.isNotEmpty(insProduct.getManHour())) {
                    //添加每个人的产量工时,要判断当前时间是否是这个人的排班时间,如果不是则是加班
                    AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
                    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(insProduct.getManHour());//产量工时
                    auxiliaryOutputWorkingHours.setManHourGroup(insProduct.getManHourGroup());//工时分组
                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                    DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                    auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//日期
                    LocalDateTime localDateTime = LocalDateTime.now();
                    DateTime parse = DateUtil.parse(localDateTime.format(formatter));
                    auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//星期
                    auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//周次
                    auxiliaryOutputWorkingHours.setCheck(userId);//检测人
                    auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
                }
                InsSample insSample = insSampleMapper.selectById(insProductMapper.selectById(insProduct.getId()).getInsSampleId());
                insSample.setInsState(1);
                Long l = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
@@ -241,10 +579,15 @@
                    insSample.setInsState(2);
                }
                insSampleMapper.updateById(insSample);
                /*校验一下result表*/
                List<InsProductResult> insProductResults = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()).orderByDesc(InsProductResult::getId));
                if (insProductResults.size() > 1) {
                    insProductResultMapper.deleteById(insProductResults.get(0));
                }
            });
            return insContext.keySet().stream().findFirst().orElse(null);
        }).thenAccept(res -> {
            if(res!=null){
            if (res != null) {
                int pId = Integer.parseInt(res.replaceAll("\\D+", ""));
                InsProduct insProduct = insProductMapper.selectById(pId);
                // 通过pId 获取当前样本id
@@ -254,13 +597,7 @@
                // 通过订单id查找所有样本id
                List<Integer> sampleIds = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId)).stream().map(InsSample::getId).collect(Collectors.toList());
                // 通过检查每一个样本id查到属于检验项结论 is null的数量
                Long count = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery().in(InsProduct::getInsSampleId, sampleIds).isNull(InsProduct::getInsResult).eq(InsProduct::getSonLaboratory, insProduct.getSonLaboratory()));
                // is null的数量为0是将订单状态表的状态改为已检验
                List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().in(InsProduct::getInsSampleId, sampleIds).isNull(InsProduct::getInsResult).eq(InsProduct::getSonLaboratory, insProduct.getSonLaboratory()));
                insProducts.forEach(insProduct1 -> {
                    System.out.println(insProduct1.getInsResult());
                    System.out.println(insProduct1.getId());
                });
                Long count = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery().in(InsProduct::getInsSampleId, sampleIds).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)
@@ -274,12 +611,14 @@
        });
    }
    //交接
    @Override
    public int upPlanUser(Integer userId, Integer orderId) {
    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);
    }
@@ -289,30 +628,66 @@
        Integer num = (type == 1 ? 5 : 4);
        LocalDateTime now = LocalDateTime.now();
        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, now).set(InsOrderState::getInsState, num).set(InsOrderState::getVerifyTell, tell).set(InsOrderState::getVerifyUser, getLook.selectPowerByMethodAndUserId(null).get("userId")));
        List<InsOrderState> insOrderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, orderId));
        long count = insOrderStates.stream().filter(a -> a.getInsState() == 5).count();
        if (count == insOrderStates.size() && num == 5) {
        Long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, orderId).ne(InsOrderState::getInsState, 5));
        if (count == 0 && num == 5) {
            List<InsUnPass> insUnPasses = new ArrayList<>();
            /*样品下的项目只要有一个项目不合格则检验结果为0,否则为1*/
            //这里的insSamples是订单下的所有样品包括("/")
            List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId));
            for (InsSample insSample : insSamples) {
                List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, insSample.getId()).eq(InsProduct::getState, 1));
                List<Integer> results = insProducts.stream().map(InsProduct::getInsResult).filter(str -> str != null).collect(Collectors.toList());
                if (results.contains(0)) {
                    insSample.setInsResult(0);
                } else {
                    insSample.setInsResult(1);
                }
                insSampleMapper.updateById(insSample);
                /*复核通过后,将不合格的项目信息添加到ins_un_pass表中*/
                for (InsProduct insProduct : insProducts) {
                    if (insProduct.getInsResult() == 0) {
                        InsUnPass insUnPass = new InsUnPass();
                        insUnPass.setId(null);
                        insUnPass.setModel(insSample.getModel());
                        insUnPass.setSample(insSample.getSample());
                        insUnPass.setInspectionItem(insProduct.getInspectionItem());
                        insUnPass.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());
                        insUnPass.setLastValue(insProduct.getLastValue());
                        insUnPass.setEntrustCode(insOrderMapper.selectById(orderId).getEntrustCode());
                        List<Integer> userIds = insProductUserMapper.selectList(Wrappers.<InsProductUser>lambdaQuery().eq(InsProductUser::getInsProductId, insProduct.getId())).stream().map(InsProductUser::getCreateUser).distinct().collect(Collectors.toList());
                        String name = userMapper.selectBatchIds(userIds).stream().map(User::getName).collect(Collectors.joining(","));
                        insUnPass.setName(name);
                        insUnPasses.add(insUnPass);
                    }
                }
            }
            insUnPassService.saveBatch(insUnPasses);
            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(giveCode.giveCode("JCZX/TX-", "ins_report", "-", "yyMMdd"));
            insReport.setCode(insOrder.getEntrustCode());
            insReport.setInsOrderId(orderId);
            Set<Integer> set = new HashSet<>();
            Map<Integer, String> map2 = new HashMap<>();
            List<Map<String, Object>> tables = new ArrayList<>();
            Set<String> standardMethod = new HashSet<>();
            Set<String> deviceSet = new HashSet<>();
            Set<String> models = new HashSet<>();
            AtomicReference<Integer> productSize = new AtomicReference<>(0);
            String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
            AtomicReference<String> resultCh = new AtomicReference<>("");
            AtomicReference<String> resultEn = new AtomicReference<>("");
            /*基础报告(根据绘制的原始记录模版形成)*/
            samples.forEach(a -> {
                Set<Integer> set = new HashSet<>();
                Map<Integer, String> map2 = new HashMap<>();
                Long productCount = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, a.getId()));
                productSize.set(productSize.get() + Integer.parseInt(productCount + ""));
                models.add(a.getModel());
                standardMethod.add(baseMapper.getStandardMethodCode(a.getStandardMethodListId()));
                Set<String> templateSet = new HashSet<>();
                getTemplateThing(set, map2, a);
                getTemplateThing(set, map2, a.getInsProduct());
                for (InsProduct b : a.getInsProduct()) {
                    standardMethod.add(b.getMethodS());
                    productSize.set(productSize.get() + 1);
                    if (b.getInsProductResult() != null) {
                        List<JSONObject> jsonObjects = JSON.parseArray(b.getInsProductResult().getEquipValue(), JSONObject.class);
                        for (JSONObject jsonObject : jsonObjects) {
@@ -321,12 +696,16 @@
                            }
                        }
                    }
                    if (b.getTemplate() == null) {
                        continue;
                    }
                    if (b.getTemplate().size() == 0) {
                        continue;
                    }
                    templateSet.add(JSON.toJSONString(b.getTemplate()));
                }
                AtomicInteger index = new AtomicInteger();
                Set<String> itemSet = new HashSet<>();
                templateSet.forEach(tem -> {
                    Set<Integer> set2 = new HashSet<>();
                    List<RowRenderData> rows = new ArrayList<>();
@@ -363,24 +742,30 @@
                    List<JSONObject> temp = JSON.parseArray(JSON.toJSONString(excelDtos), JSONObject.class);
                    Map<String, InsProduct> pMap = new HashMap<>();
                    Set<String> delRSet = new HashSet<>();
                    delRSet.add("0");
                    for (JSONObject jo1 : temp) {
                        JSONObject v = JSON.parseObject(JSON.toJSONString(jo1.get("v")));
                        if (Integer.parseInt(jo1.get("c") + "") > 9) {
                            delSet.add(jo1.get("c") + "");
                            continue;
                        }
                        if (v.get("ps") != null) {
                            int count3 = 0;
                            String str = "";
                            if ("检验值".equals(JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "") || "设备名称".equals(JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "") || "设备编码".equals(JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "")) {
                            String s = JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "";
                            if (s.contains("检验值") || s.contains("设备名称") || s.contains("设备编码") || s.contains("试验方法") || s.contains("检测方法")) {
                                delSet.add(jo1.get("c") + "");
                                continue;
                            }
                            for (JSONObject jo2 : temp) {
                                JSONObject v2 = JSON.parseObject(JSON.toJSONString(jo2.get("v")));
                                if (jo1.get("r").equals(jo2.get("r"))) {
                                    if (v2.get("ps") != null && JSON.parseObject(JSON.toJSONString(v2.get("ps"))).get("value").equals("检验项")) {
                                    if (v2.get("ps") != null && JSON.parseObject(JSON.toJSONString(v2.get("ps"))).get("value").toString().contains("检验项")) {
                                        if (count3 == 0) {
                                            str += v2.get("v");
                                            count3 += 1;
                                        }
                                    } else if (v2.get("ps") != null && JSON.parseObject(JSON.toJSONString(v2.get("ps"))).get("value").equals("检验子项")) {
                                    } else if (v2.get("ps") != null && JSON.parseObject(JSON.toJSONString(v2.get("ps"))).get("value").toString().contains("检验子项")) {
                                        if (count3 == 1) {
                                            str += v2.get("v");
                                            count3 += 1;
@@ -402,11 +787,8 @@
                                    delRSet.add(jo1.get("r") + "");
                                }
                            }
                        } else {
                            if ("参数".equals(v.get("v"))) delSet.add(jo1.get("c") + "");
                        }
                    }
                    // TODO: 2024/5/5 下列循环缺少word合并单元格的操作
                    for (int i = 0; i < temp.size(); i++) {
                        JSONObject jo1 = temp.get(i);
                        TextRenderData textRenderData = new TextRenderData();
@@ -428,63 +810,81 @@
                        InsProduct p = pMap.get(jo1.get("r") + "");
                        if (p != null && v.get("ps") != null) {
                            String value = JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "";
                            if (value.equals("要求值")) {
                                textRenderData.setText(p.getAsk());
                            } else if (value.equals("单位")) {
                            if (value.contains("要求值")) {
                                textRenderData.setText(ObjectUtils.isNotEmpty(p.getTell()) ? p.getTell() : "");
                            } else if (value.contains("单位")) {
                                textRenderData.setText(p.getUnit());
                            } else if (value.equals("结论")) {
                            } else if (value.contains("结论")) {
                                switch (p.getInsResult()) {
                                    case 1:
                                        textRenderData.setText("√");
                                        break;
                                    case 0:
                                        resultCh.set(resultCh.get() + "、" + p.getInspectionItem() + (Objects.equals(p.getInspectionItemSubclass(), "") ? "" : " " + p.getInspectionItemSubclass()));
                                        resultEn.set(resultEn.get() + "、" + p.getInspectionItemEn() + ((Objects.equals(p.getInspectionItemSubclassEn(), "") || Objects.equals(p.getInspectionItemSubclassEn(), null)) ? "" : " " + p.getInspectionItemSubclassEn()));
                                        textRenderData.setText("×");
                                        break;
                                    default:
                                        textRenderData.setText("-");
                                        break;
                                }
                            } else if (value.equals("序号")) {
                                index.getAndIncrement();
                            } else if (value.contains("序号")) {
                                if (itemSet.add(p.getInspectionItem())) {
                                    index.getAndIncrement();
                                }
                                textRenderData.setText(index + "");
                            } else if (value.equals("计算值")) {
                            } else if (value.contains("计算值")) {
                                JSONArray jsonArray = JSON.parseArray(p.getInsProductResult().getComValue());
                                textRenderData.setText((JSON.parseObject(JSON.toJSONString(jsonArray.get(0))).get("v") + "").equals("") ? "/" : JSON.parseObject(JSON.toJSONString(jsonArray.get(0))).get("v") + "");
                            } else if (value.equals("最终值")) {
                            } else if (value.contains("最终值")) {
                                textRenderData.setText(p.getLastValue());
                            } else if (value.equals("样品编号")) {
                            } else if (value.contains("样品编号")) {
                                textRenderData.setText(a.getSampleCode());
                            } else if (value.equals("样品型号")) {
                            } else if (value.contains("样品型号")) {
                                textRenderData.setText(a.getModel());
                            } else if (value.equals("样品名称")) {
                            } else if (value.contains("样品名称")) {
                                textRenderData.setText(a.getSample());
                            } else if (value.equals("试验方法")) {
                            } else if (value.contains("试验方法")) {
                                textRenderData.setText(p.getMethodS());
                            } else if (value.contains("检验项")) {
                                if (ObjectUtils.isEmpty(p.getInspectionItemEn())) {
                                    textRenderData.setText(p.getInspectionItem());
                                } else {
                                    textRenderData.setText(p.getInspectionItem() + "@" + p.getInspectionItemEn());
                                }
                            } else if (value.contains("检验子项")) {
                                if (ObjectUtils.isEmpty(p.getInspectionItemSubclassEn())) {
                                    textRenderData.setText(p.getInspectionItemSubclass());
                                } else {
                                    textRenderData.setText(p.getInspectionItemSubclass() + "@" + p.getInspectionItemSubclassEn());
                                }
                            } else {
                                textRenderData.setText(v.get("v") == null ? "" : v.get("v") + "");
                            }
                        } else if (p == null && v.get("ps") != null) {
                            String value = JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "";
                            p = pMap.get(pMap.keySet().iterator().next());
                            if (value.equals("最终值")) {
                            if (value.contains("最终值")) {
                                textRenderData.setText(p.getLastValue());
                            } else if (value.equals("结论")) {
                            } else if (value.contains("结论")) {
                                switch (p.getInsResult()) {
                                    case 1:
                                        textRenderData.setText("✔");
                                        break;
                                    case 0:
                                        resultCh.set(resultCh.get() + "、" + p.getInspectionItem() + (p.getInspectionItemSubclass().equals("") ? "" : " " + p.getInspectionItemSubclass()));
                                        resultEn.set(resultEn.get() + "、" + p.getInspectionItemEn() + ((Objects.equals(p.getInspectionItemSubclassEn(), "") || Objects.equals(p.getInspectionItemSubclassEn(), null)) ? "" : " " + p.getInspectionItemSubclassEn()));
                                        textRenderData.setText("✖");
                                        break;
                                    default:
                                        textRenderData.setText("-");
                                        break;
                                }
                            } else if (value.equals("样品编号")) {
                            } else if (value.contains("样品编号")) {
                                textRenderData.setText(a.getSampleCode());
                            } else if (value.equals("样品型号")) {
                            } else if (value.contains("样品型号")) {
                                textRenderData.setText(a.getModel());
                            } else if (value.equals("样品名称")) {
                            } else if (value.contains("样品名称")) {
                                textRenderData.setText(a.getSample());
                            } else {
                                textRenderData.setText(v.get("v") == null ? "" : v.get("v") + "");
@@ -492,9 +892,11 @@
                        } else {
                            textRenderData.setText(v.get("v") == null ? "" : v.get("v") + "");
                        }
                        if (jo1.get("mc") != null) {
                            textRenderData.setText(textRenderData.getText() + "∑" + jo1.get("mc"));
                        }
                        Style style = new Style();
                        style.setFontFamily(v.get("ff") == null ? "微软雅黑" : v.get("ff") + "");
//                        style.setFontSize(v.get("fs")==null?14:Integer.parseInt(v.get("fs")+""));
                        style.setFontFamily("宋体");
                        if (!((v.get("fc") + "").indexOf("rgb") > -1)) {
                            style.setColor(v.get("fc") == null ? "000000" : (v.get("fc") + "").replace("#", ""));
                        } else {
@@ -502,38 +904,716 @@
                        }
                        textRenderData.setStyle(style);
                        text.add(textRenderData);
                        if (i == temp.size() - 1) {
                            TextRenderData[] text2 = text.toArray(new TextRenderData[0]);
                            rowRenderData = Rows.of(text2).rowAtleastHeight(1).center().create();
                            rows.add(rowRenderData);
                            text = new ArrayList<>();
                        }
                    }
                    TextRenderData[] text2 = text.toArray(new TextRenderData[0]);
                    rowRenderData = Rows.of(text2).rowAtleastHeight(1).center().create();
                    if (rowRenderData.getCells().size() != 0) {
                        rows.add(rowRenderData);
                    }
                    List<TableRenderData> tables1 = new ArrayList<>();
                    TableRenderData tableRenderData = new TableRenderData();
                    tableRenderData.setRows(rows);
                    TableStyle tableStyle = new TableStyle();
                    /*JSONObject styleJo = JSON.parseObject(JSON.toJSONString(b.getStyle().get("columnlen")));
                    List<Integer> colLen = new ArrayList<>();
                    int colSize = rows.get(0).getCells().size();
                    int colOne = Integer.parseInt(b.getTemplate().get(0).get("r") + "");
                    for (int i = colOne; i < colSize + colOne; i++) {
                        if (styleJo.get(i + "") == null) {
                            colLen.add(pxToCm(100));
                        } else {
                            int i1 = Integer.parseInt(styleJo.get(i + "") + "");
                            colLen.add(pxToCm(i1));
                    tableRenderData.setRows(new ArrayList<>());
                    double totalHeight = 0.0; // 用于跟踪当前表格的总行高
                    double heightThreshold = 8000.0; // 阈值,
                    List<RowRenderData> firstTwoRows = new ArrayList<>(); // 保存前两行以便复制到新表格
                    // 保存前两行以便复制到新表格
                    if (rows.size() >= 2) {
                        firstTwoRows.add(rows.get(0));
                        firstTwoRows.add(rows.get(1));
                    }
                    for (RowRenderData row : rows) {
                        double rowHeight = row.getRowStyle().getHeight(); // 获取当前行的行高
                        totalHeight += rowHeight; // 更新总行高
                        if (totalHeight >= heightThreshold) {
                            // 创建新表格并复制前两行
                            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 = rowHeight;
                        }
                    }*/
//                    tableStyle.setColWidths(ArrayUtils.toPrimitive(colLen.toArray(new Integer[0])));
                    tableStyle.setAlign(TableRowAlign.CENTER);
                    tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                    tableRenderData.setTableStyle(tableStyle);
                    Map<String, Object> table = new HashMap<>();
                    table.put("table", tableRenderData);
                    table.put("report", insReport);
                    tables.add(table);
                        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);
                    });
                });
            });
            /*光纤接头损耗的报告样式*/
            //查询订单下所有样品的检验项目,如果有光纤接头损耗则重新构建表格
            List<Map<String, Object>> tables4 = new ArrayList<>();
            List<InsProduct> insProducts0 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList())));
            if (insProducts0.stream().map(InsProduct::getInspectionItem).collect(Collectors.toList()).contains("光纤接头损耗")) {
                //清空原有的基础表格
                tables.clear();
                //去重的检验项目
                List<String> filteredProducts = insProducts0.stream().map(insProduct -> {
                    return (insProduct.getInspectionItem() + "," + insProduct.getInspectionItemEn() + "," + insProduct.getInspectionItemSubclass() + "," + insProduct.getInspectionItemSubclassEn() + "," + insProduct.getTell());
                }).distinct().collect(Collectors.toList());
                //检验项目的总数量(去重)
                long size = filteredProducts.size();
                long number = 10;
                long number2 = 7;
                long index = 1;
                //检验结果报告(当检验项目超过10个新建表)
                for (long i = 0; i < size; i++) {
                    if (i % number == 0) {
                        List<RowRenderData> rows = new ArrayList<>();
                        //表格的行数 × √ ✖ ✔
                        long count1 = size-(index-1)*number < number ? size-(index-1)*number + 3 : number + 3;
                        for (int j = 0; j <count1 ; j++) {
                            RowRenderData rowRenderData = new RowRenderData();
                            RowStyle rowStyle = new RowStyle();
                            rowStyle.setHeight(40);
                            rowRenderData.setRowStyle(rowStyle);
                            List<CellRenderData> cells = new ArrayList<>();
                            //表格的列数
                            for (int k = 0; k < 6; k++) {
                                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 (j == 0) {
                                    //第一行
                                    if (k < 4) {
                                        //前4列
                                        textRenderData.setText("规格型号@Type∑11");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //后2列
                                        textRenderData.setText(insSamples.get(0).getModel() + "∑12");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                }
                                else if (j == 1) {
                                    //第二行
                                    if (k == 0) {
                                        //第一列
                                        textRenderData.setText("序号@No.∑13");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 1) {
                                        //第二列
                                        textRenderData.setText("检验项目@Test Item∑14");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 2 || k == 3) {
                                        //第三四列
                                        textRenderData.setText("标准要求@Requirement∑15");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 4) {
                                        //第五列
                                        textRenderData.setText("检验结果@Test result∑16");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //第六列
                                        textRenderData.setText("结论@Conclusion∑17");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                }
                                else if (j == count1-1) {
                                    //最后一行
                                    if (k == 0 || k == 1) {
                                        //前两列
                                        textRenderData.setText("备注∑18");
                                        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 unqualified∑19");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                }
                                else {
                                    if (k == 0) {
                                        //第一列
                                        textRenderData.setText((j - 1) + "");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 1) {
                                        //第二列
                                        String insProduct;
                                        try {
                                            insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1)));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = insProduct.split(",");
                                        if (ObjectUtils.isEmpty(split[1]) || split[1].equals("")) {
                                            textRenderData.setText(split[0]);
                                        } else {
                                            textRenderData.setText(split[0] + "@" + split[1]);
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 2) {
                                        //第三列
                                        //先判断检验项是否有子类
                                        String insProduct;
                                        try {
                                            insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1)));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = insProduct.split(",");
                                        if (ObjectUtils.isEmpty(split[2]) || split[2].equals("")) {
                                            //如果没有子类
                                            textRenderData.setText(split[4] + "∑2" + j);//要求描述
                                        } else {
                                            //如果有子类
                                            //还要判断是否有英文
                                            if (ObjectUtils.isEmpty(split[3]) || split[3].equals("")) {
                                                textRenderData.setText(split[2]);//检验子项
                                            } else {
                                                textRenderData.setText(split[2] + "@" + split[3]);//检验子项+英文
                                            }
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 3) {
                                        //第四列
                                        //先判断检验项是否有子类
                                        String insProduct;
                                        try {
                                            insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1)));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = insProduct.split(",");
                                        if (ObjectUtils.isEmpty(split[2]) || split[2].equals("")) {
                                            //如果没有子类
                                            textRenderData.setText(split[4] + "∑2" + j);//要求描述
                                        } else {
                                            //如果有子类
                                            textRenderData.setText(split[4]);//要求描述
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 4) {
                                        //第五列
                                        String insProduct;
                                        try {
                                            insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1)));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = insProduct.split(",");
                                        //查询所有样品该检验项的检验结果(最终值)
                                        List<InsProduct> products = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState, 1)
                                                .eq(InsProduct::getInspectionItem, split[0])
                                                .eq(InsProduct::getInspectionItemSubclass, split[2])
                                                .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList())));
                                        //获取最小值和最大值
                                        Optional<String> max = products.stream().map(InsProduct::getLastValue)
                                                .filter(value -> !value.isEmpty())
                                                .max(String::compareTo);
                                        Optional<String> min = products.stream().map(InsProduct::getLastValue)
                                                .filter(value -> !value.isEmpty())
                                                .min(String::compareTo);
                                        textRenderData.setText(min.get() + "-" + max.get());//检验结果
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //最后一列
                                        String insProduct;
                                        try {
                                            insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1)));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = insProduct.split(",");
                                        //查询所有样品该检验项的检验结论(ins_result)
                                        List<InsProduct> products = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState, 1)
                                                .eq(InsProduct::getInspectionItem, split[0])
                                                .eq(InsProduct::getInspectionItemSubclass, split[2])
                                                .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList())));
                                        List<Integer> result = products.stream().map(InsProduct::getInsResult).distinct().collect(Collectors.toList());
                                        if (result.size() == 1 && result.contains(1)) {
                                            //合格
                                            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);
                        int countSize = tableRenderData.getRows().get(0).getCells().size();
                        for (RowRenderData row : tableRenderData.getRows()) {
                         /* for (CellRenderData cell : row.getCells()) {
                              System.out.print(cell.getParagraphs().get(0).getContents());
                          }
                          System.out.println("");*/
                            if (row.getCells().size() != countSize) {
                                throw new ErrorException("每行单元格不相等1");
                            }
                        }
                        TableStyle tableStyle = new TableStyle();
                        tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                        tableStyle.setAlign(TableRowAlign.CENTER);
                        BorderStyle borderStyle = new BorderStyle();
                        borderStyle.setColor("000000");
                        borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                        borderStyle.setSize(14);
                        tableStyle.setLeftBorder(borderStyle);
                        tableStyle.setTopBorder(borderStyle);
                        tableStyle.setRightBorder(borderStyle);
                        tableStyle.setBottomBorder(borderStyle);
                        tableRenderData.setTableStyle(tableStyle);
                        Map<String, Object> table = new HashMap<>();
                        table.put("table", tableRenderData);
                        table.put("report", insReport);
                        table.put("index", index);
                        tables.add(table);
                        index++;
                    }
                }
                long index4 = 1;
                //检验报告报告(当检验项目超过7个新建表)
                for (long j = 0; j < size; j++) {
                    if (j % number2 == 0) {
                        List<RowRenderData> rows = new ArrayList<>();
                        //表格的行数(根据样品数量来)
                        for (int i = 0; i < samples.size() + 2; i++) {
                            RowRenderData rowRenderData = new RowRenderData();
                            RowStyle rowStyle = new RowStyle();
                            rowStyle.setHeight(40);
                            rowRenderData.setRowStyle(rowStyle);
                            List<CellRenderData> cells = new ArrayList<>();
                            //表格的列数
                            for (int k = 0; k < 8; k++) {
                                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 (k == 0) {
                                        //第一列
                                        textRenderData.setText("样品编号@Sample number∑30");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //第二列
                                        String product;
                                        try {
                                            product = filteredProducts.get((int) ((k - 1) + (index4 - 1) * 7));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = product.split(",");
                                        if (ObjectUtils.isEmpty(split[2]) || split[2].equals("")) {
                                            if (ObjectUtils.isEmpty(split[1]) || split[1].equals("")) {
                                                textRenderData.setText(split[0] + "∑3" + k);
                                            } else {
                                                textRenderData.setText(split[0] + "@" + split[1] + "∑3" + k);
                                            }
                                        } else {
                                            if (ObjectUtils.isEmpty(split[1]) || split[1].equals("")) {
                                                textRenderData.setText(split[0]);
                                            } else {
                                                textRenderData.setText(split[0] + "@" + split[1]);
                                            }
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                } else if (i == 1) {
                                    //第二行
                                    if (k == 0) {
                                        //第一列
                                        textRenderData.setText("样品编号@Sample number∑30");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //第二列
                                        String product;
                                        try {
                                            product = filteredProducts.get((int) ((k - 1) + (index4 - 1) * 7));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = product.split(",");
                                        if (ObjectUtils.isEmpty(split[2]) || split[2].equals("")) {
                                            if (ObjectUtils.isEmpty(split[1]) || split[1].equals("")) {
                                                textRenderData.setText(split[0] + "∑3" + k);
                                            } else {
                                                textRenderData.setText(split[0] + "@" + split[1] + "∑3" + k);
                                            }
                                        } else {
                                            if (ObjectUtils.isEmpty(split[3]) || split[3].equals("")) {
                                                textRenderData.setText(split[2]);
                                            } else {
                                                textRenderData.setText(split[2] + "@" + split[3]);
                                            }
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                } else {
                                    if (k == 0) {
                                        //第一列
                                        textRenderData.setText(samples.get(i - 2).getSampleCode());
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //根据样品编号和项目去查询最终值
                                        String product;
                                        try {
                                            product = filteredProducts.get((int) ((k - 1) + (index4 - 1) * 7));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = product.split(",");
                                        InsProduct insProduct = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState, 1)
                                                .eq(InsProduct::getInsSampleId, samples.get(i - 2).getId())
                                                .eq(InsProduct::getInspectionItem, split[0])
                                                .eq(InsProduct::getInspectionItemSubclass, split[2]));
                                        if (ObjectUtils.isEmpty(insProduct)) {
                                            //可能根据正常的样品编号和光纤接头损耗的项目查不到对应的项目,则需要根据"/"来查
                                            List<InsSample> sampleList = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().like(InsSample::getSampleCode, samples.get(i - 2).getSampleCode()));
                                            List<InsProduct> products = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState, 1)
                                                    .in(InsProduct::getInsSampleId, sampleList.stream().map(InsSample::getId).collect(Collectors.toList()))
                                                    .eq(InsProduct::getInspectionItem, split[0])
                                                    .eq(InsProduct::getInspectionItemSubclass, split[2]));
                                            insProduct = products.get(0);
                                        }
                                        textRenderData.setText(insProduct.getLastValue());
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                }
                            }
                            rowRenderData.setCells(cells);
                            if (rowRenderData.getCells().size() != 0) {
                                rows.add(rowRenderData);
                            }
                        }
                        TableRenderData tableRenderData = new TableRenderData();
                        tableRenderData.setRows(rows);
                        int countSize = tableRenderData.getRows().get(0).getCells().size();
                        for (RowRenderData row : tableRenderData.getRows()) {
                                /*for (CellRenderData cell : row.getCells()) {
                                    System.out.print(cell.getParagraphs().get(0).getContents());
                                }
                                System.out.println("");*/
                            if (row.getCells().size() != countSize) {
                                throw new ErrorException("每行单元格不相等2");
                            }
                        }
                        TableStyle tableStyle = new TableStyle();
                        tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                        tableStyle.setAlign(TableRowAlign.CENTER);
                        BorderStyle borderStyle = new BorderStyle();
                        borderStyle.setColor("000000");
                        borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                        borderStyle.setSize(14);
                        tableStyle.setLeftBorder(borderStyle);
                        tableStyle.setTopBorder(borderStyle);
                        tableStyle.setRightBorder(borderStyle);
                        tableStyle.setBottomBorder(borderStyle);
                        tableRenderData.setTableStyle(tableStyle);
                        Map<String, Object> table = new HashMap<>();
                        table.put("table4", tableRenderData);
                        table.put("report", insReport);
                        table.put("index4", index4);
                        tables4.add(table);
                        index4++;
                    }
                }
                //光纤接头损耗的报告还是tables4
                //查询样品(只查询带"/")的数量
                List<InsSample> sampleList = insSamples.stream().filter(insSample -> insSample.getSampleCode().contains("/")).collect(Collectors.toList());
                //过滤出光纤接头损耗的检验项目
                List<String> strings = filteredProducts.stream().filter(s -> s.contains("光纤接头损耗")).distinct().collect(Collectors.toList());
                long index41 = 1;
                for (int i = 0; i < sampleList.size(); i++) {
                    if (i % 16 == 0) {
                        //样品数量超过16需要新增表格
                        List<RowRenderData> rows = new ArrayList<>();
                        int count2 = sampleList.size()-(index41-1)*16 < 16 ? (int) (sampleList.size() - (index41 - 1) * 16 + 1) : 17;
                        //表格的行数
                        for (int j = 0; j < count2; j++) {
                            RowRenderData rowRenderData = new RowRenderData();
                            RowStyle rowStyle = new RowStyle();
                            rowStyle.setHeight(40);
                            rowRenderData.setRowStyle(rowStyle);
                            List<CellRenderData> cells = new ArrayList<>();
                            //表格的列数
                            for (int k = 0; k < 6; k++) {
                                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 (j == 0) {
                                    //第一行
                                    if (k == 0) {
                                        //第一列
                                        textRenderData.setText("光纤类型@Fiber type");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 1 || k == 2) {
                                        //第二 三列
                                        textRenderData.setText("样品编号@Sample number");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        String[] split = strings.get(k - 3).split(",");
                                        if (ObjectUtils.isEmpty(split[3]) || split[3].equals("")) {
                                            textRenderData.setText(split[2]);
                                        } else {
                                            textRenderData.setText(split[2] + "@" + split[3]);
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                }
                                else {
                                    if (k == 0) {
                                        //第一列
                                        textRenderData.setText(sampleList.get(0).getModel() + "∑44");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 1) {
                                        //第二列
                                        textRenderData.setText(sampleList.get(j - 1).getSampleCode().split("/")[0]);
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 2) {
                                        //第三列
                                        textRenderData.setText(sampleList.get(j - 1).getSampleCode().split("/")[1]);
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //根据对应的样品编号和检验项目查询对应数据(最终值)
                                        String[] split = strings.get(k - 3).split(",");
                                        InsProduct insProduct = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState, 1)
                                                .eq(InsProduct::getInsSampleId, sampleList.get(j - 1).getId())
                                                .eq(InsProduct::getInspectionItem, split[0])
                                                .eq(InsProduct::getInspectionItemSubclass, split[2]));
                                        textRenderData.setText(insProduct.getLastValue());
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                }
                            }
                            rowRenderData.setCells(cells);
                            if (rowRenderData.getCells().size() != 0) {
                                rows.add(rowRenderData);
                            }
                        }
                        TableRenderData tableRenderData = new TableRenderData();
                        tableRenderData.setRows(rows);
                        int countSize = tableRenderData.getRows().get(0).getCells().size();
                        for (RowRenderData row : tableRenderData.getRows()) {
                                /*for (CellRenderData cell : row.getCells()) {
                                    System.out.print(cell.getParagraphs().get(0).getContents());
                                }
                                System.out.println("");*/
                            if (row.getCells().size() != countSize) {
                                throw new ErrorException("每行单元格不相等3");
                            }
                        }
                        TableStyle tableStyle = new TableStyle();
                        tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                        tableStyle.setAlign(TableRowAlign.CENTER);
                        BorderStyle borderStyle = new BorderStyle();
                        borderStyle.setColor("000000");
                        borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                        borderStyle.setSize(14);
                        tableStyle.setLeftBorder(borderStyle);
                        tableStyle.setTopBorder(borderStyle);
                        tableStyle.setRightBorder(borderStyle);
                        tableStyle.setBottomBorder(borderStyle);
                        tableRenderData.setTableStyle(tableStyle);
                        Map<String, Object> table = new HashMap<>();
                        table.put("table4", tableRenderData);
                        table.put("report", insReport);
                        table.put("index4", index4 + 1);
                        tables4.add(table);
                        index4++;
                        index41++;
                    }
                }
                tables4.forEach(table4 -> {
                    table4.put("tableSize4", tables4.size());
                });
            }
            String url;
            try {
                InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
@@ -554,7 +1634,10 @@
            tables.forEach(table -> {
                table.put("tableSize", tables.size() + 1);
            });
            List<Map<String, String>> deviceList = insOrderMapper.selectDeviceList(deviceSet);
            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());
@@ -572,19 +1655,1578 @@
                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 (signatureUrl.equals("")) {
                throw new ErrorException("找不到检验人的签名");
            }
            //Custom custom = customMapper.selectById(user.get("company"));
            Custom custom = customMapper.selectById(insOrder.getCompanyId());
            if (!resultCh.get().equals("")) {
                resultCh.set("依据委托要求," + resultCh.get().replaceFirst("、", "") + "等所检项目不符合要求,其余所检项目均符合要求。");
                resultEn.set("According to commissioned requirements," + resultEn.get().replaceFirst("、", "") + " these inspected items do not meet the requirements, all other inspected items meet the requirements.");
            } else {
                resultCh.set("依据委托要求,所检项目均符合要求。");
                resultEn.set("According to commissioned requirements, all the tested items meet the requirements.");
            }
            /*光纤配置的检验报告*/
            //先判断是否有光纤配置
            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))
                    .isNotNull(InsProduct::getInsFiberId)
                    .isNull(InsProduct::getInspectionItemClass));//用检验分项字段区别光纤配置与温度循环
            List<Map<String, Object>> tables2 = new ArrayList<>();
            if (insProducts.size() > 0) {
                samples.forEach(sample -> {
                    List<InsProduct> insProducts1 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                            .eq(InsProduct::getState, 1)
                            .eq(InsProduct::getInsSampleId, sample.getId())
                            .isNotNull(InsProduct::getInsFiberId)
                            .isNull(InsProduct::getInspectionItemClass));
                    List<InsProduct> filteredProducts = insProducts1.stream()
                            .collect(Collectors.groupingBy(product -> product.getInspectionItem() + product.getInspectionItemSubclass()))
                            .values().stream()
                            .map(group -> group.get(0))
                            .sorted(Comparator.comparing(InsProduct::getInspectionItem))
                            .collect(Collectors.toList());
                    long size = insProducts1.stream().map(insProduct -> {
                        return (insProduct.getInspectionItem() + insProduct.getInspectionItemSubclass());
                    }).distinct().collect(Collectors.toList()).size();
                    long size2 = insProducts1.stream().map(InsProduct::getInsFiberId).distinct().count();
                    long number = 7;
                    long k = 0;
                    long index2 = 1;
                    for (long c = 0; c < size; c++) {
                        if (c % number == 0) {
                            List<RowRenderData> rows = new ArrayList<>();
                            //判断检验项目是否有父子关系
                            Boolean state = true;
                            for (InsProduct insProduct : filteredProducts) {
                                if (!insProduct.getInspectionItemSubclass().equals("") && insProduct.getInspectionItemSubclass() != null) {
                                    state = false;
                                }
                            }
                            int a = 1;
                            if (!state) {
                                a = 2;
                            }
                            //表格的行数
                            for (long i = 0; i < size2 + a; i++) {
                                RowRenderData rowRenderData = new RowRenderData();
                                RowStyle rowStyle = new RowStyle();
                                rowStyle.setHeight(40);
                                rowRenderData.setRowStyle(rowStyle);
                                List<CellRenderData> cells = new ArrayList<>();
                                //表格的列数
                                for (long j = 0; j < 9; j++) {
                                    CellRenderData cellRenderData = new CellRenderData();
                                    CellStyle cellStyle = new CellStyle();
                                    cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                                    cellRenderData.setCellStyle(cellStyle);
                                    List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                                    ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                                    ParagraphStyle paragraphStyle = new ParagraphStyle();
                                    paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                                    paragraphRenderData.setParagraphStyle(paragraphStyle);
                                    List<RenderData> renderData = new ArrayList<>();
                                    TextRenderData textRenderData = new TextRenderData();
                                    Style style = new Style();
                                    style.setFontFamily("宋体");
                                    style.setColor("000000");
                                    textRenderData.setStyle(style);
                                    if (i == 0) {
                                        //第一行
                                        if (j == 0) {
                                            //第一列
                                            textRenderData.setText("管色标@Pipe∑100");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二列
                                            textRenderData.setText("光纤色标@Scanning Number∑101");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //项目信息
                                            try {
                                                filteredProducts.get((int) (j - 2 + k));
                                            } catch (Exception e) {
                                                continue;
                                            }
                                            textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getInspectionItem() + "@" + insProducts1.get((int) (j - 2 + k)).getInspectionItemEn() + "∑" + (j + 101 + k));
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    } else if (a == 2 && i == 1) {
                                        //有父子项目关系的第三行
                                        if (j == 0) {
                                            //第一列
                                            textRenderData.setText("管色标@Pipe∑100");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二列
                                            textRenderData.setText("光纤色标@Scanning Number∑101");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //项目信息
                                            try {
                                                filteredProducts.get((int) (j - 2 + k));
                                            } catch (Exception e) {
                                                continue;
                                            }
                                            //判断是否有项目子类
                                            if (filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclass().equals("") || filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclass() == null) {
                                                textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getInspectionItem() + "@" + filteredProducts.get((int) (j - 2 + k)).getInspectionItemEn() + "∑" + (j + 101 + k));
                                            } else {
                                                textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclass() + "@" + filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclassEn());
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    } else {
                                        int aa;
                                        if (a == 2) {
                                            aa = (int) i - 2;
                                        } else aa = (int) i - 1;
                                        List<Integer> list = insProducts1.stream().map(InsProduct::getInsFiberId).distinct().collect(Collectors.toList());
                                        try {
                                            insFiberMapper.selectById(list.get(aa));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        InsFiber insFiber = insFiberMapper.selectById(list.get(aa));
                                        //填值
                                        if (j == 0) {
                                            //第一列
                                            textRenderData.setText(insFiber.getBushColor());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二列
                                            textRenderData.setText(insFiber.getColor());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //项目信息
                                            try {
                                                filteredProducts.get((int) (j - 2 + k));
                                            } catch (Exception e) {
                                                continue;
                                            }
                                            textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getLastValue());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    }
                                }
                                rowRenderData.setCells(cells);
                                if (rowRenderData.getCells().size() != 0) {
                                    rows.add(rowRenderData);
                                }
                            }
                            TableRenderData tableRenderData = new TableRenderData();
                            tableRenderData.setRows(rows);
                            int countSize = tableRenderData.getRows().get(0).getCells().size();
                            for (RowRenderData row : tableRenderData.getRows()) {
                                /*for (CellRenderData cell : row.getCells()) {
                                    System.out.print(cell.getParagraphs().get(0).getContents());
                                }
                                System.out.println("");*/
                                if (row.getCells().size() != countSize) {
                                    throw new ErrorException("每行单元格不相等4");
                                }
                            }
                            TableStyle tableStyle = new TableStyle();
                            tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                            tableStyle.setAlign(TableRowAlign.CENTER);
                            BorderStyle borderStyle = new BorderStyle();
                            borderStyle.setColor("000000");
                            borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                            borderStyle.setSize(14);
                            tableStyle.setLeftBorder(borderStyle);
                            tableStyle.setTopBorder(borderStyle);
                            tableStyle.setRightBorder(borderStyle);
                            tableStyle.setBottomBorder(borderStyle);
                            tableRenderData.setTableStyle(tableStyle);
                            Map<String, Object> table = new HashMap<>();
                            table.put("table2", tableRenderData);
                            table.put("report", insReport);
                            table.put("sample_number", sample.getSampleCode());
                            table.put("type", sample.getModel());
                            table.put("index2", index2);
                            tables2.add(table);
                            k += 7;
                            index2++;
                        }
                    }
                });
            }
            tables2.forEach(table2 -> {
                table2.put("tableSize2", tables2.size());
            });
            /*温度循环的检验报告*/
            //先判断是否有温度循环
            List<InsProduct> insProducts3 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))
                    .isNotNull(InsProduct::getInspectionItemClass)//用检验分项字段区别光纤配置与温度循环
                    .isNotNull(InsProduct::getInsFiberId));
            List<Map<String, Object>> tables3 = new ArrayList<>();
            if (insProducts3.size() > 0) {
                samples.forEach(sample -> {
                    //查询温度循环下的检验项目
                    List<InsProduct> insPros = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                            .eq(InsProduct::getState, 1)
                            .eq(InsProduct::getInsSampleId, sample.getId())
                            .isNotNull(InsProduct::getInsFiberId)
                            .isNotNull(InsProduct::getInspectionItemClass));
                    //获取所有检验项目,按照循环次数,色标,温度,nm进行排序
                    Map<String, Integer> temperatureToIdMap = new HashMap<>();
                    for (InsProduct product : insPros) {
                        String temperature = product.getInspectionItemSubclass();
                        int id = product.getId();
                        temperatureToIdMap.putIfAbsent(temperature, id);
                        if (temperatureToIdMap.get(temperature) > id) {
                            temperatureToIdMap.put(temperature, id);
                        }
                    }
                    // 自定义排序
                    Collections.sort(insPros, new Comparator<InsProduct>() {
                        @Override
                        public int compare(InsProduct p1, InsProduct p2) {
                            // 首先按getInspectionItem排序
                            int result = p1.getInspectionItem().compareTo(p2.getInspectionItem());
                            if (result != 0) {
                                return result;
                            }
                            // 如果getInspectionItem相等,再按getInsFiberId排序
                            result = p1.getInsFiberId().compareTo(p2.getInsFiberId());
                            if (result != 0) {
                                return result;
                            }
                            // 如果getInsFiberId也相等,最后按getInspectionItemSubclass排序
                            return compareTemperature(p1.getInspectionItemSubclass(), p2.getInspectionItemSubclass());
                        }
                        private int compareTemperature(String temp1, String temp2) {
                            // 根据温度对应的id进行排序
                            int id1 = temperatureToIdMap.get(temp1);
                            int id2 = temperatureToIdMap.get(temp2);
                            return Integer.compare(id1, id2);
                        }
                    });
                    List<InsProduct> filteredProducts = insPros;
                    //获取所有光纤色标
                    List<InsFiber> insFibers = insFiberMapper.selectBatchIds(insPros.stream().map(InsProduct::getInsFiberId).collect(Collectors.toList()));
                    //获取所有的温度(除了第一个20℃(常温))
                    List<String> temperature = insPros.stream().map(InsProduct::getInspectionItemSubclass).filter(s -> !s.equals("20℃(常温)")).distinct().collect(Collectors.toList());
                    //获取所有的温度(除了第一个20℃(常温)和最后一个20℃)
                    List<String> temperature2 = insPros.stream().map(InsProduct::getInspectionItemSubclass).filter(s -> !s.equals("20℃(常温)")).filter(s -> !s.equals("20℃")).distinct().collect(Collectors.toList());
                    //获取所有的光纤项目(1310nm)
                    List<String> nm = insPros.stream().map(InsProduct::getInspectionItemClass).distinct().collect(Collectors.toList());
                    //获取所有检验项目的数量(列数)(这里需要注意两个温度,一个是20℃常温(只有第一次循环才有),另一个是20℃(只有最后一个循环才有))
                    long size = insPros.stream().map(insProduct -> {
                        return (insProduct.getInspectionItemSubclass() + insProduct.getInspectionItemClass());
                    }).distinct().collect(Collectors.toList()).size();
                    //获取循环次数(表格的数量)
                    int size1 = insPros.stream().map(InsProduct::getInspectionItem).distinct().collect(Collectors.toList()).size();
                    //获取光纤色标的数量(行数)
                    long size2 = insPros.stream().map(InsProduct::getInsFiberId).distinct().count();
                    long index3 = 1;
                    for (int i = 0; i < size1; i++) {
                        //按照循环次数生成对应数量的表格
                        List<RowRenderData> rows = new ArrayList<>();
                        //表格的行数(光纤色标的数量+8)
                        for (long j = 0; j < size2 + 8; j++) {
                            RowRenderData rowRenderData = new RowRenderData();
                            RowStyle rowStyle = new RowStyle();
                            rowStyle.setHeight(40);
                            rowRenderData.setRowStyle(rowStyle);
                            List<CellRenderData> cells = new ArrayList<>();
                            //表格的列数需要根据循环的次数对应的改变
                            if (size1 == 1) {
                                //如果只循环一次,那么列数包括20℃和20℃常温(2 * size - nm.size()+1)
                                for (long k = 0; k < 2 * size - nm.size() + 1; k++) {
                                    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 (j == 0) {
                                        //第一行
                                        if (k <= (2 * size - nm.size() + 1) / 4) {
                                            //第一列
                                            textRenderData.setText("样品编号@Sample number∑1000");
                                        } else if (k > (2 * size - nm.size() + 1) / 4 && k <= (2 * size - nm.size() + 1) / 2) {
                                            //第二列
                                            textRenderData.setText(sample.getSampleCode() + "∑998");
                                        } else if (k > (2 * size - nm.size() + 1) / 2 && k < 2 * size - nm.size()) {
                                            //第三列
                                            textRenderData.setText("规格型号@Type ∑999");
                                        } else {
                                            //第四列
                                            textRenderData.setText(sample.getModel());
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (j == 1) {
                                        //第二行
                                        if (k == 0) {
                                            //第一列
                                            textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                        } else {
                                            textRenderData.setText("检测结果(循环" + (i + 1) + ")∑1005");
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (j == 2) {
                                        //第三行
                                        if (k == 0) {
                                            //第一列
                                            textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (k > 0 && k <= nm.size()) {
                                            //第二列
                                            textRenderData.setText("20℃(常温)∑1006");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //根据温度循环
                                            for (int i1 = 0; i1 < temperature.size(); i1++) {
                                                if (k > (2 * i1 + 1) * nm.size() && k <= (2 * i1 + 3) * nm.size()) {
                                                    //第三列
                                                    textRenderData.setText(temperature.get(i1) + "∑52" + i1);
                                                    renderData.add(textRenderData);
                                                    paragraphRenderData.setContents(renderData);
                                                    paragraphRenderDataList.add(paragraphRenderData);
                                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                                    cells.add(cellRenderData);
                                                }
                                            }
                                        }
                                    } else if (j == 3) {
                                        //第四行
                                        if (k == 0) {
                                            //第一列
                                            textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (k > 0 && k <= nm.size()) {
                                            //第二列和第三列
                                            for (int i1 = 0; i1 < nm.size(); i1++) {
                                                if (k == i1 + 1) {
                                                    textRenderData.setText(nm.get(i1));
                                                    renderData.add(textRenderData);
                                                    paragraphRenderData.setContents(renderData);
                                                    paragraphRenderDataList.add(paragraphRenderData);
                                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                                    cells.add(cellRenderData);
                                                }
                                            }
                                        } else {
                                            for (int j1 = 0; j1 < temperature.size(); j1++) {
                                                for (int i1 = 0; i1 < nm.size(); i1++) {
                                                    if (k > (i1 + 1 + 2 * j1) * nm.size() && k <= (i1 + 1 + 2 * j1) * nm.size() + 2) {
                                                        textRenderData.setText(nm.get(i1));
                                                        renderData.add(textRenderData);
                                                        paragraphRenderData.setContents(renderData);
                                                        paragraphRenderDataList.add(paragraphRenderData);
                                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                                        cells.add(cellRenderData);
                                                    }
                                                }
                                            }
                                        }
                                    } else if (j == 4) {
                                        //第五行
                                        if (k == 0) {
                                            //第一列
                                            textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (k > 0 && k <= nm.size()) {
                                            //第二列和第三列
                                            textRenderData.setText("衰减");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (k > nm.size() && (k - (nm.size())) % 2 == 0) {
                                            textRenderData.setText("|∆ α|");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            textRenderData.setText("衰减");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    } else if (j == size2 + 5) {
                                        //倒数第三行
                                        if (k == 0) {
                                            //第一列
                                            textRenderData.setText("|max|");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (k <= nm.size()) {
                                            //计算20℃常温的第(k-1)个项目的所有色标的平均值的最大值
                                            List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .isNotNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, i + 1)
                                                    .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)")
                                                    .eq(InsProduct::getInspectionItemClass, nm.get((int) (k - 1)))).stream().map(InsProduct::getId).collect(Collectors.toList());
                                            List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                            Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                                return insProductResult.getComValue().split(":")[1].split("\"")[1];
                                            }).filter(value -> !value.isEmpty())
                                                    .max(String::compareTo);
                                            if (max.isPresent()) {
                                                textRenderData.setText(max.get());
                                            } else {
                                                textRenderData.setText("");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if ((k - (nm.size())) % 2 == 0) {
                                            //计算第()温度的第()个项目的所有色标的最终值的最大值
                                            Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .isNotNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, i + 1)
                                                    .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k / (nm.size() + 2)) - 1)))
                                                    .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - (nm.size() + 2)) / 2 % nm.size()))))
                                                    .stream().map(InsProduct::getLastValue)
                                                    .filter(value -> !value.isEmpty())
                                                    .max(String::compareTo);
                                            if (max.isPresent()) {
                                                textRenderData.setText(max.get());
                                            } else {
                                                textRenderData.setText("");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //计算第()温度的第()个项目的所有色标的平均值的最大值
                                            List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .isNotNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, i + 1)
                                                    .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (((k + 1) / (nm.size() + 2)) - 1)))
                                                    .eq(InsProduct::getInspectionItemClass, nm.get((int) (((k + 1) - (nm.size() + 2)) / 2 % nm.size())))).stream().map(InsProduct::getId).collect(Collectors.toList());
                                            List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                            Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                                return insProductResult.getComValue().split(":")[1].split("\"")[1];
                                            }).filter(value -> !value.isEmpty()).max(String::compareTo);
                                            if (max.isPresent()) {
                                                textRenderData.setText(max.get());
                                            } else {
                                                textRenderData.setText("");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    } else if (j == size2 + 6) {
                                        //倒数第二行
                                        if (k == 0) {
                                            //第一列
                                            textRenderData.setText("|∆ α max|");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (k <= nm.size()) {
                                            textRenderData.setText("-");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if ((k - (nm.size())) % 2 == 0) {
                                            Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .isNotNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, i + 1)
                                                    .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k / (nm.size() + 2)) - 1)))
                                                    .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - (nm.size() + 2)) / 2 % nm.size()))))
                                                    .stream().map(InsProduct::getLastValue)
                                                    .filter(value -> !value.isEmpty())
                                                    .max(String::compareTo);
                                            if (max.isPresent()) {
                                                textRenderData.setText(max.get());
                                            } else {
                                                textRenderData.setText("");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            textRenderData.setText("-");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    } else if (j == size2 + 7) {
                                        //倒数第一行
                                        textRenderData.setText("“|∆ α|”表示附加衰减绝对值∑111111");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //其余填写检验值的内容
                                        if (k == 0) {
                                            //第一列填写色标
                                            textRenderData.setText(insFibers.get((int) (j - 5)).getColor());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (k <= nm.size()) {
                                            //第二列和第三列填写20℃常温的平均值(result表里面的com_value)
                                            textRenderData.setText(insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size() + 1) * nm.size() + k - 1)).getId())).getComValue().split(":")[1].split("\"")[1]);
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if ((k - (nm.size())) % 2 == 0) {
                                            //填写衰减差就是last_value
                                            textRenderData.setText(filteredProducts.get((int) ((j - 5) * (temperature.size() + 1) * nm.size() + k / 2)).getLastValue());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //填写其余正常温度的衰减(result表里面的com_value)
                                            textRenderData.setText(insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size() + 1) * nm.size() + (k + 1) / 2)).getId())).getComValue().split(":")[1].split("\"")[1]);
                                            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);
                                }
                            } else {
                                //如果有多次循环
                                if (i == 0) {
                                    //第一次循环的列数,那么列数包括20℃常温(2 * (size-nm.size()) -nm.size()+1)
                                    for (long k = 0; k < 2 * (size - nm.size()) - nm.size() + 1; k++) {
                                        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 (j == 0) {
                                            //第一行
                                            if (k <= (2 * (size - nm.size()) - nm.size() + 1) / 4) {
                                                //第一列
                                                textRenderData.setText("样品编号@Sample number∑1000");
                                            } else if (k > (2 * (size - nm.size()) - nm.size() + 1) / 4 && k <= (2 * (size - nm.size()) - nm.size() + 1) / 2) {
                                                //第二列
                                                textRenderData.setText(sample.getSampleCode() + "∑998");
                                            } else if (k > (2 * (size - nm.size()) - nm.size() + 1) / 2 && k < 2 * (size - nm.size()) - nm.size()) {
                                                //第三列
                                                textRenderData.setText("规格型号@Type∑999");
                                            } else {
                                                //第四列
                                                textRenderData.setText(sample.getModel());
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                            } else {
                                                textRenderData.setText("检测结果(循环" + (i + 1) + ")∑1005");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 2) {
                                            //第三行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k > 0 && k <= nm.size()) {
                                                //第二列
                                                textRenderData.setText("20℃(常温)∑1006");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //根据温度循环
                                                for (int i1 = 0; i1 < temperature2.size(); i1++) {
                                                    if (k > (2 * i1 + 1) * nm.size() && k <= (2 * i1 + 3) * nm.size()) {
                                                        //第三列
                                                        textRenderData.setText(temperature2.get(i1) + "∑52" + i1);
                                                        renderData.add(textRenderData);
                                                        paragraphRenderData.setContents(renderData);
                                                        paragraphRenderDataList.add(paragraphRenderData);
                                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                                        cells.add(cellRenderData);
                                                    }
                                                }
                                            }
                                        } else if (j == 3) {
                                            //第四行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k > 0 && k <= nm.size()) {
                                                //第二列和第三列
                                                for (int i1 = 0; i1 < nm.size(); i1++) {
                                                    if (k == i1 + 1) {
                                                        textRenderData.setText(nm.get(i1));
                                                        renderData.add(textRenderData);
                                                        paragraphRenderData.setContents(renderData);
                                                        paragraphRenderDataList.add(paragraphRenderData);
                                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                                        cells.add(cellRenderData);
                                                    }
                                                }
                                            } else {
                                                for (int j1 = 0; j1 < temperature2.size(); j1++) {
                                                    for (int i1 = 0; i1 < nm.size(); i1++) {
                                                        if (k > (i1 + 1 + 2 * j1) * nm.size() && k <= (i1 + 1 + 2 * j1) * nm.size() + 2) {
                                                            textRenderData.setText(nm.get(i1));
                                                            renderData.add(textRenderData);
                                                            paragraphRenderData.setContents(renderData);
                                                            paragraphRenderDataList.add(paragraphRenderData);
                                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                                            cells.add(cellRenderData);
                                                        }
                                                    }
                                                }
                                            }
                                        } else if (j == 4) {
                                            //第五行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k > 0 && k <= nm.size()) {
                                                //第二列和第三列
                                                textRenderData.setText("衰减");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k > nm.size() && (k - (nm.size())) % 2 == 0) {
                                                textRenderData.setText("|∆ α|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                textRenderData.setText("衰减");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 5) {
                                            //倒数第三行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("|max|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k <= nm.size()) {
                                                //计算20℃常温的第(k-1)个项目的所有色标的平均值的最大值
                                                List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)")
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) (k - 1)))).stream().map(InsProduct::getId).collect(Collectors.toList());
                                                List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                                Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                                    return insProductResult.getComValue().split(":")[1].split("\"")[1];
                                                }).filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if ((k - (nm.size())) % 2 == 0) {
                                                //计算第()温度的第()个项目的所有色标的最终值的最大值
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k / (nm.size() + 2)) - 1)))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - (nm.size() + 2)) / 2 % nm.size()))))
                                                        .stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //计算第()温度的第()个项目的所有色标的平均值的最大值
                                                List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (((k + 1) / (nm.size() + 2)) - 1)))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) (((k + 1) - (nm.size() + 2)) / 2 % nm.size())))).stream().map(InsProduct::getId).collect(Collectors.toList());
                                                List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                                Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                                    return insProductResult.getComValue().split(":")[1].split("\"")[1];
                                                }).filter(value -> !value.isEmpty()).max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 6) {
                                            //倒数第二行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("|∆ α max|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k <= nm.size()) {
                                                textRenderData.setText("-");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if ((k - (nm.size())) % 2 == 0) {
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k / (nm.size() + 2)) - 1)))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - (nm.size() + 2)) / 2 % nm.size()))))
                                                        .stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                textRenderData.setText("-");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 7) {
                                            //倒数第一行
                                            textRenderData.setText("“|∆ α|”表示附加衰减绝对值∑111111");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //其余填写检验值的内容
                                            if (k == 0) {
                                                //第一列填写色标
                                                textRenderData.setText(insFibers.get((int) (j - 5)).getColor());
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k <= nm.size()) {
                                                //第二列和第三列填写20℃常温的平均值(result表里面的com_value)
                                                textRenderData.setText(insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size() + 1) * nm.size() + k - 1)).getId())).getComValue().split(":")[1].split("\"")[1]);
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if ((k - (nm.size())) % 2 == 0) {
                                                //填写衰减差就是last_value
                                                textRenderData.setText(filteredProducts.get((int) ((j - 5) * (temperature.size()) * nm.size() + k / 2)).getLastValue());
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //填写其余正常温度的衰减(result表里面的com_value)
                                                textRenderData.setText(insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size()) * nm.size() + (k + 1) / 2)).getId())).getComValue().split(":")[1].split("\"")[1]);
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        }
                                    }
                                } else if (i == size1 - 1) {
                                    //最后一次循环的列数,那么列数包括20℃(2 * (size-nm.size())+1)
                                    for (long k = 0; k < 2 * (size - nm.size()) + 1; k++) {
                                        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 (j == 0) {
                                            //第一行
                                            if (k <= (2 * (size - nm.size()) + 1) / 4) {
                                                //第一列
                                                textRenderData.setText("样品编号@Sample number∑1000");
                                            } else if (k > (2 * (size - nm.size()) + 1) / 4 && k <= (2 * (size - nm.size()) + 1) / 2) {
                                                //第二列
                                                textRenderData.setText(sample.getSampleCode() + "∑998");
                                            } else if (k > (2 * (size - nm.size()) + 1) / 2 && k < 2 * (size - nm.size())) {
                                                //第三列
                                                textRenderData.setText("规格型号@Type∑999");
                                            } else {
                                                //第四列
                                                textRenderData.setText(sample.getModel());
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                            } else {
                                                textRenderData.setText("检测结果(循环" + (i + 1) + ")∑1005");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 2) {
                                            //第三行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //根据温度循环
                                                for (int i1 = 0; i1 < temperature.size(); i1++) {
                                                    if (k > (2 * i1) * nm.size() && k <= (2 * i1 + 2) * nm.size()) {
                                                        //第三列
                                                        textRenderData.setText(temperature.get(i1) + "∑52" + i1);
                                                        renderData.add(textRenderData);
                                                        paragraphRenderData.setContents(renderData);
                                                        paragraphRenderDataList.add(paragraphRenderData);
                                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                                        cells.add(cellRenderData);
                                                    }
                                                }
                                            }
                                        } else if (j == 3) {
                                            //第四行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                for (int j1 = 0; j1 < temperature.size(); j1++) {
                                                    for (int i1 = 0; i1 < nm.size(); i1++) {
                                                        if (k > (i1 + 2 * j1) * nm.size() && k <= (i1 + 2 * j1) * nm.size() + 2) {
                                                            textRenderData.setText(nm.get(i1));
                                                            renderData.add(textRenderData);
                                                            paragraphRenderData.setContents(renderData);
                                                            paragraphRenderDataList.add(paragraphRenderData);
                                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                                            cells.add(cellRenderData);
                                                        }
                                                    }
                                                }
                                            }
                                        } else if (j == 4) {
                                            //第五行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                textRenderData.setText("|∆ α|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                textRenderData.setText("衰减");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 5) {
                                            //倒数第三行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("|max|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                //计算第()温度的第()个项目的所有色标的最终值的最大值
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k - 1) / (2 * nm.size()))))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - nm.size()) / 2 % nm.size()))))
                                                        .stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //计算第()温度的第()个项目的所有色标的平均值的最大值
                                                List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (k / (2 * nm.size()))))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) (((k + 1) - nm.size()) / 2 % nm.size())))).stream().map(InsProduct::getId).collect(Collectors.toList());
                                                List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                                Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                                    return insProductResult.getComValue().split(":")[1].split("\"")[1];
                                                }).filter(value -> !value.isEmpty()).max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 6) {
                                            //倒数第二行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("|∆ α max|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k - 1) / (2 * nm.size()))))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - nm.size()) / 2 % nm.size()))))
                                                        .stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                textRenderData.setText("-");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 7) {
                                            //倒数第一行
                                            textRenderData.setText("“|∆ α|”表示附加衰减绝对值∑111111");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //其余填写检验值的内容
                                            if (k == 0) {
                                                //第一列填写色标
                                                textRenderData.setText(insFibers.get((int) (j - 5)).getColor());
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                //填写衰减差就是last_value
                                                textRenderData.setText(filteredProducts.get((int) ((j - 5) * (temperature.size()) * nm.size() + ((temperature.size() * nm.size() * size2 * i) - (size2 * nm.size() * (i - 1))) + (k - 2) / 2)).getLastValue());
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //填写其余正常温度的衰减(result表里面的com_value)
                                                textRenderData.setText(insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size()) * nm.size() + ((temperature.size() * nm.size() * size2 * i) - (size2 * nm.size() * (i - 1))) + ((k - 2) + 1) / 2)).getId())).getComValue().split(":")[1].split("\"")[1]);
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        }
                                    }
                                } else {
                                    //其余循环的列数,,那么列数不包括20℃+20℃(常温)(2 * (size- 2*nm.size()) +1)
                                    for (long k = 0; k < 2 * (size - 2 * nm.size()) + 1; k++) {
                                        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 (j == 0) {
                                            //第一行
                                            if (k <= (2 * (size - 2 * nm.size()) + 1) / 4) {
                                                //第一列
                                                textRenderData.setText("样品编号@Sample number∑1000");
                                            } else if (k > (2 * (size - 2 * nm.size()) + 1) / 4 && k <= (2 * (size - 2 * nm.size()) + 1) / 2) {
                                                //第二列
                                                textRenderData.setText(sample.getSampleCode() + "∑998");
                                            } else if (k > (2 * (size - 2 * nm.size()) + 1) / 2 && k < 2 * (size - 2 * nm.size())) {
                                                //第三列
                                                textRenderData.setText("规格型号@Type∑999");
                                            } else {
                                                //第四列
                                                textRenderData.setText(sample.getModel());
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                            } else {
                                                textRenderData.setText("检测结果(循环" + (i + 1) + ")∑1005");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 2) {
                                            //第三行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //根据温度循环
                                                for (int i1 = 0; i1 < temperature2.size(); i1++) {
                                                    if (k > (2 * i1) * nm.size() && k <= (2 * i1 + 2) * nm.size()) {
                                                        //第三列
                                                        textRenderData.setText(temperature2.get(i1) + "∑52" + i1);
                                                        renderData.add(textRenderData);
                                                        paragraphRenderData.setContents(renderData);
                                                        paragraphRenderDataList.add(paragraphRenderData);
                                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                                        cells.add(cellRenderData);
                                                    }
                                                }
                                            }
                                        } else if (j == 3) {
                                            //第四行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                for (int j1 = 0; j1 < temperature2.size(); j1++) {
                                                    for (int i1 = 0; i1 < nm.size(); i1++) {
                                                        if (k > (i1 + 2 * j1) * nm.size() && k <= (i1 + 2 * j1) * nm.size() + 2) {
                                                            textRenderData.setText(nm.get(i1));
                                                            renderData.add(textRenderData);
                                                            paragraphRenderData.setContents(renderData);
                                                            paragraphRenderDataList.add(paragraphRenderData);
                                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                                            cells.add(cellRenderData);
                                                        }
                                                    }
                                                }
                                            }
                                        } else if (j == 4) {
                                            //第五行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                textRenderData.setText("|∆ α|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                textRenderData.setText("衰减");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 5) {
                                            //倒数第三行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("|max|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                //计算第()温度的第()个项目的所有色标的最终值的最大值
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (((k - 1) / (2 * nm.size())))))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - nm.size()) / 2 % nm.size()))))
                                                        .stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //计算第()温度的第()个项目的所有色标的平均值的最大值
                                                List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (k / (2 * nm.size()))))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) (((k + 1) - nm.size()) / 2 % nm.size())))).stream().map(InsProduct::getId).collect(Collectors.toList());
                                                List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                                Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                                    return insProductResult.getComValue().split(":")[1].split("\"")[1];
                                                }).filter(value -> !value.isEmpty()).max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 6) {
                                            //倒数第二行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("|∆ α max|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k - 1) / (2 * nm.size()))))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - nm.size()) / 2 % nm.size()))))
                                                        .stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                textRenderData.setText("-");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 7) {
                                            //倒数第一行
                                            textRenderData.setText("“|∆ α|”表示附加衰减绝对值∑111111");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //其余填写检验值的内容
                                            if (k == 0) {
                                                //第一列填写色标
                                                textRenderData.setText(insFibers.get((int) (j - 5)).getColor());
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                //填写衰减差就是last_value
                                                textRenderData.setText(filteredProducts.get((int) ((j - 5) * (temperature.size() - 1) * nm.size() + (temperature.size() * nm.size() * size2) + (k - 2) / 2)).getLastValue());
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //填写其余正常温度的衰减(result表里面的com_value)
                                                textRenderData.setText(insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size() - 1) * nm.size() + (temperature.size() * nm.size() * size2) + ((k - 2) + 1) / 2)).getId())).getComValue().split(":")[1].split("\"")[1]);
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        }
                                    }
                                }
                                rowRenderData.setCells(cells);
                                if (rowRenderData.getCells().size() != 0) {
                                    rows.add(rowRenderData);
                                }
                            }
                        }
                        TableRenderData tableRenderData = new TableRenderData();
                        tableRenderData.setRows(rows);
                        int countSize = tableRenderData.getRows().get(0).getCells().size();
                        for (RowRenderData row : tableRenderData.getRows()) {
                            /*for (CellRenderData cell : row.getCells()) {
                                System.out.print(cell.getParagraphs().get(0).getContents());
                            }
                            System.out.println("");*/
                            if (row.getCells().size() != countSize) {
                                throw new ErrorException("每行单元格不相等5");
                            }
                        }
                        TableStyle tableStyle = new TableStyle();
                        tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                        tableStyle.setAlign(TableRowAlign.CENTER);
                        BorderStyle borderStyle = new BorderStyle();
                        borderStyle.setColor("000000");
                        borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                        borderStyle.setSize(14);
                        tableStyle.setLeftBorder(borderStyle);
                        tableStyle.setTopBorder(borderStyle);
                        tableStyle.setRightBorder(borderStyle);
                        tableStyle.setBottomBorder(borderStyle);
                        tableRenderData.setTableStyle(tableStyle);
                        Map<String, Object> table = new HashMap<>();
                        table.put("table3", tableRenderData);
                        table.put("report", insReport);
                        table.put("index3", index3);
                        tables3.add(table);
                        index3++;
                    }
                });
            }
            tables3.forEach(table3 -> {
                table3.put("tableSize3", tables3.size());
            });
            /*获取附件图片类型*/
            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("user", user);
//                        put("samples", samples);
                        put("sampleSize", samples.size() + samples.get(0).getUnit());
                        put("environment", finalEnvironment);
                        put("custom", custom);
                        put("sampleSize", samples.size());
                        put("tables", tables);
                        put("tableSize", tables.size() + 1);
                        put("standardMethod", standardMethod2);
                        put("deviceList", deviceList);
                        put("tables2", tables2);
                        put("tableSize2", tables2.size());
                        put("tables3", tables3);
                        put("tableSize3", tables3.size());
                        put("tables4", tables4);
                        put("tableSize4", tables4.size());
                        put("standardMethod", (standardMethod2.toString().equals("null") ? "" : standardMethod2));
                        put("deviceList", finalDeviceList);
                        put("twoCode", Pictures.ofLocal(codePath).create());
                        put("models", finalModelStr.replace(",", ""));
                        put("productSize", productSize);
@@ -593,18 +3235,126 @@
                        put("insTime", insOrder.getInsTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日")));
                        put("insTimeEn", monthNames[insOrder.getInsTime().getMonthValue() - 1] + " " + now.getDayOfMonth() + ", " + now.getYear());
                        put("writeUrl", null);
                        put("insUrl", 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年MM月dd日")));
                        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.setState(4);
                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);
            }
@@ -612,16 +3362,18 @@
        return 1;
    }
    private void getTemplateThing(Set<Integer> set, Map<Integer, String> map2, SampleProductDto a) {
        for (InsProduct product : a.getInsProduct()) {
    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());
            }
            String thing = map2.get(product.getTemplateId());
            if (StrUtil.isNotEmpty(thing)) {
                JSONObject sheet = JSON.parseObject(JSON.toJSONString(JSON.parseArray(JSON.toJSONString(JSON.parseObject(thing).get("data"))).get(0)));
                JSONObject config = JSON.parseObject(JSON.toJSONString(sheet.get("config")));
@@ -637,22 +3389,151 @@
    }
    @Override
    public int submitPlan(Integer orderId, String laboratory) {
    public int submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode, String sampleCode) {
        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId));
        List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList());
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().in(InsProduct::getInsSampleId, ids).eq(InsProduct::getSonLaboratory, laboratory).eq(InsProduct::getState, 1).isNull(InsProduct::getInsResult));
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                .in(InsProduct::getInsSampleId, ids)
                .eq(InsProduct::getSonLaboratory, laboratory)
                .eq(InsProduct::getState, 1)
                .isNull(InsProduct::getInsResult)
                .isNull(InsProduct::getInsFiberId)
                .isNull(InsProduct::getInsFibersId));
        insProducts.addAll(insProductMapper.selectFiberInsProduct(ids, laboratory));
        if (insProducts.size() > 0) {
            String str = "";
            int count = 0;
            for (InsProduct product : insProducts) {
                str += product.getInspectionItem() + product.getInspectionItemSubclass() + ";";
                //如果是光缆的温度循环
                if (product.getInspectionItem().equals("温度循环") && insOrderMapper.selectById(orderId).getSampleType().equals("光缆")) {
                    //查询那些循环温度的检验项目的结论是否全部检验
                    List<InsProduct> insProductList = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, product.getInsSampleId())
                            .isNotNull(InsProduct::getInsFiberId).like(InsProduct::getInspectionItemSubclass, "℃"));
                    List<Integer> collect = insProductList.stream().filter(insProduct -> insProduct.getInsResult() != null).map(InsProduct::getInsResult).collect(Collectors.toList());
                    List<Integer> tt = new ArrayList<>();
                    tt.add(1);
                    if (collect.contains(0)) {
                        product.setLastValue("不合格");
                        product.setInsResult(0);
                    } else if (collect.size() == insProductList.size() && collect.stream().distinct().collect(Collectors.toList()).containsAll(tt)) {
                        product.setLastValue("合格");
                        product.setInsResult(1);
                    }
                    insProductMapper.updateById(product);
                }
                //如果是热循环或者是温升试验
                else if (product.getInspectionItem().equals("热循环") || product.getInspectionItem().equals("温升试验")){
                    //查询这些项目下的其他检验项目是否全部检验
                    List<InsProduct> insProductList = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                            .eq(InsProduct::getInsSampleId, product.getInsSampleId())
                            .like(InsProduct::getInspectionItemSubclass, "温度"));
                    List<Integer> collect = insProductList.stream().filter(insProduct -> insProduct.getInsResult() != null).map(InsProduct::getInsResult).collect(Collectors.toList());
                    List<Integer> tt = new ArrayList<>();
                    tt.add(1);
                    if (collect.contains(0)) {
                        product.setLastValue("不合格");
                        product.setInsResult(0);
                    } else if (collect.size() == insProductList.size() && collect.stream().distinct().collect(Collectors.toList()).containsAll(tt)) {
                        product.setLastValue("合格");
                        product.setInsResult(1);
                    }
                    insProductMapper.updateById(product);
                }
                else {
                    count++;
                    str += "<br/>" + count + ":" + product.getInspectionItem() + " " + product.getInspectionItemSubclass() + "<br/>";
                }
            }
            throw new ErrorException("以下是未检验的项目:" + str);
            if (ObjectUtils.isNotEmpty(str)) {
                throw new ErrorException("<strong>存在待检验的项目:</strong><br/>" + str);
            }
        }
        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 3));
        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(0);
        insSampleUser.setSonLaboratory(laboratory);
         insSampleUserMapper.insert(insSampleUser);
        /*校验一下result表*/
        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).orderByDesc(InsProductResult::getId));
                if (insProductResults.size() > 1) {
                    insProductResultMapper.deleteById(insProductResults.get(0));
                }
            }
            return null;
        });
        // 删除数采采集次数
        String key = "frequency" + ":" + entrustCode + ":" + sampleCode;
        RedisUtil.del(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 "未知";
        }
    }
}