zss
2024-07-11 a3ba94e23fec4281502a94221f65cc0567eb02a8
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -1,12 +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.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;
@@ -14,49 +20,51 @@
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.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.vo.InsOrderPlanTaskSwitchVo;
import com.yuanchu.mom.vo.InsOrderPlanVO;
import org.apache.poi.xwpf.usermodel.TableRowAlign;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import com.yuanchu.mom.vo.ProductVo;
import com.yuanchu.mom.vo.SampleVo;
import org.apache.commons.io.IOUtils;
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.util.ResourceUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.FileNotFoundException;
import java.io.IOException;
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.stream.Stream;
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 +91,6 @@
    private String twoCode;
    @Resource
    private GiveCode giveCode;
    @Resource
    private InsReportMapper insReportMapper;
    @Resource
@@ -93,6 +98,39 @@
    @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) {
@@ -104,6 +142,20 @@
            insOrderPlanDTO.setUserId(userId.longValue());
        }
        IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId);
        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<InsOrderPlanTaskSwitchVo> insOrderPage = insSampleMapper.inspectionOrderDetailsTaskSwitching(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId);
        map.put("body", insOrderPage);
        return map;
    }
@@ -125,25 +177,195 @@
        insOrder.setId(id);
        InsOrder order = insOrderMapper.selectById(id);
        if (BeanUtil.isEmpty(order.getInsTime())) {
            insOrder.setInsState(1);
            insOrder.setInsTime(LocalDateTime.now());
            insOrderMapper.updateById(insOrder);
            insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, id).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 1));
        }
        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, id).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 1));
        Map<String, Object> map = insOrderService.getInsOrderAndSample(id, laboratory);
        Set<Integer> set = new HashSet<>();
        Map<Integer, String> map2 = new HashMap<>();
        List<SampleProductDto> list = JSON.parseArray(JSON.toJSONString(map.get("sampleProduct")), SampleProductDto.class);
        for (SampleProductDto samples : list) {
            if (BeanUtil.isEmpty(samples.getInsProduct())) continue;
            getTemplateThing(set, map2, samples);
            samples.setBushing(insBushingService.selectBushingBySampleId(samples.getId()));
        }
        map.put("sampleProduct", list);
        return map;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    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)) {
                fibers.addAll(insFibers);
                //查出光纤带下所有的光纤
                List<InsFiber> fiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().in(InsFiber::getInsFibersId, insFibers.stream().map(InsFibers::getId).collect(Collectors.toList())));
                fiber.addAll(fiberList);
            } else {
                //如果套管下没有光纤带就只有光纤了
                List<InsFiber> insFiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsBushingId, insBushing.getId()));
                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));
        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);
                            }
                            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);
                        productVo.setInsProduct(insProduct);
                        productVos.add(productVo);
                    }
                }
            }
        }
        map.put("productVos", productVos);
        return map;
    }
    @Override
    public void saveInsContext(Map<String, Object> insContext) {
        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
        CompletableFuture.supplyAsync(() -> {
@@ -151,9 +373,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) {
@@ -175,7 +400,7 @@
                    }
                    result.setInsValue(JSON.toJSONString(iv));
                }
                if (jo.get("comValue") != null) {
                if (jo.get("comValue") != null && !Objects.equals(jo.get("comValue"), "")) {
                    JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("comValue")));
                    List<Map<String, Object>> cv = new ArrayList<>();
                    for (Object o : jsonArray2) {
@@ -186,9 +411,13 @@
                    }
                    result.setComValue(JSON.toJSONString(cv));
                }
                JSONObject resValue = JSON.parseObject(JSON.toJSONString(jo.get("resValue")));
                if (resValue.get("v") != null) {
                    insProduct.setLastValue(JSON.parseObject(JSON.toJSONString(resValue.get("v"))).get("v") + "");
                try {
                    JSONObject resValue = JSON.parseObject(JSON.toJSONString(jo.get("resValue")));
                    if (resValue.get("v") != null) {
                        Object o = JSON.parseObject(JSON.toJSONString(resValue.get("v"))).get("v");
                        insProduct.setLastValue(o.equals("") ? null : (o.toString()));
                    }
                } catch (Exception e) {
                }
                if (jo.get("equipValue") != null) {
                    JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("equipValue")));
@@ -200,6 +429,17 @@
                        ev.add(map);
                    }
                    result.setEquipValue(JSON.toJSONString(ev));
                }
                if (jo.get("equipName") != null) {
                    JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("equipName")));
                    List<Map<String, Object>> ev = new ArrayList<>();
                    for (Object o : jsonArray2) {
                        JSONObject equipValue = JSON.parseObject(JSON.toJSONString(o));
                        Map<String, Object> map = new HashMap<>();
                        map.put("v", JSON.parseObject(JSON.toJSONString(equipValue.get("v"))).get("v"));
                        ev.add(map);
                    }
                    result.setEquipName(JSON.toJSONString(ev));
                }
                try {
                    JSONObject insResult = JSON.parseObject(JSON.toJSONString(jo.get("insResult")));
@@ -219,6 +459,36 @@
                insProduct.setUpdateUser(userId);
                insProductMapper.updateById(insProduct);
                insProductUserMapper.insert(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId()));
                insProduct = insProductMapper.selectById(insProduct);
                //查询检验单信息
                InsOrder insOrder = insOrderMapper.selectById(insSampleMapper.selectById(insProduct.getInsSampleId()).getInsOrderId());
                //校验如果这个人这个检测项目已经添加过了则不需要再新增
                Long count = auxiliaryOutputWorkingHoursMapper.selectCount(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
                        .eq(AuxiliaryOutputWorkingHours::getCheck, userId)
                        .eq(AuxiliaryOutputWorkingHours::getInspectProject, insProduct.getInspectionItemSubclass() + insProduct.getInspectionItem())
                        .eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode()));
                if (count == 0 && ObjectUtils.isNotEmpty(insProduct.getManHour())) {
                    //添加每个人的产量工时
                    AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
                    auxiliaryOutputWorkingHours.setInspectProject(insProduct.getInspectionItemSubclass() + insProduct.getInspectionItem());//检测项目
                    auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//非加班委托单号
                    auxiliaryOutputWorkingHours.setWorkTime(insProduct.getManHour());//非加班工时
                    auxiliaryOutputWorkingHours.setAmount(1);//非加班数量
                    auxiliaryOutputWorkingHours.setOutputWorkTime(insProduct.getManHour());//产量工时
                    auxiliaryOutputWorkingHours.setManHourGroup(insProduct.getManHourGroup());//工时分组
                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                    DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                    auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//日期
                    LocalDateTime localDateTime = LocalDateTime.now();
                    DateTime parse = DateUtil.parse(localDateTime.format(formatter));
                    auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//星期
                    auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//周次
                    auxiliaryOutputWorkingHours.setCheck(userId);//检测人
                    auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
                }
                InsSample insSample = insSampleMapper.selectById(insProductMapper.selectById(insProduct.getId()).getInsSampleId());
                insSample.setInsState(1);
                Long l = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
@@ -229,9 +499,32 @@
                    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 null;
            return insContext.keySet().stream().findFirst().orElse(null);
        }).thenAccept(res -> {
            if (res != null) {
                int pId = Integer.parseInt(res.replaceAll("\\D+", ""));
                InsProduct insProduct = insProductMapper.selectById(pId);
                // 通过pId 获取当前样本id
                int sampleId = insProductMapper.selectById(pId).getInsSampleId();
                // 通过样本id获取订单id
                int orderId = insSampleMapper.selectById(sampleId).getInsOrderId();
                // 通过订单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()).eq(InsProduct::getState, 1));
                if (count == 0) {
                    insOrderStateMapper.update(new InsOrderState(), Wrappers.<InsOrderState>lambdaUpdate()
                            .eq(InsOrderState::getInsOrderId, orderId)
                            .eq(InsOrderState::getLaboratory, insProduct.getSonLaboratory())
                            .set(InsOrderState::getInsState, 2));
                }
            }
        }).exceptionally(e -> {
            e.printStackTrace();
            return null;
@@ -251,58 +544,155 @@
    @Transactional(rollbackFor = Exception.class)
    public int verifyPlan(Integer orderId, String laboratory, Integer type, String tell) {
        Integer num = (type == 1 ? 5 : 4);
        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, num).set(InsOrderState::getVerifyTell, tell).set(InsOrderState::getVerifyUser, getLook.selectPowerByMethodAndUserId(null).get("userId")));
        List<InsOrderState> insOrderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, orderId));
        long count = insOrderStates.stream().filter(a -> a.getInsState() == 5).count();
        if (count == insOrderStates.size() && num == 5) {
        LocalDateTime now = LocalDateTime.now();
        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, now).set(InsOrderState::getInsState, num).set(InsOrderState::getVerifyTell, tell).set(InsOrderState::getVerifyUser, getLook.selectPowerByMethodAndUserId(null).get("userId")));
        Long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, orderId).ne(InsOrderState::getInsState, 5));
        if (count == 0 && num == 5) {
            List<InsUnPass> insUnPasses = new ArrayList<>();
            /*样品下的项目只要有一个项目不合格则检验结果为0,否则为1*/
            List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId));
            for (InsSample insSample : insSamples) {
                List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, insSample.getId()).eq(InsProduct::getState, 1));
                List<Integer> results = insProducts.stream().map(InsProduct::getInsResult).filter(str -> str != null).collect(Collectors.toList());
                if (results.contains(0)) {
                    insSample.setInsResult(0);
                } else {
                    insSample.setInsResult(1);
                }
                insSampleMapper.updateById(insSample);
                /*复核通过后,将不合格的项目信息添加到ins_un_pass表中*/
                for (InsProduct insProduct : insProducts) {
                    if (insProduct.getInsResult() == 0) {
                        InsUnPass insUnPass = new InsUnPass();
                        insUnPass.setId(null);
                        insUnPass.setModel(insSample.getModel());
                        insUnPass.setSample(insSample.getSample());
                        insUnPass.setInspectionItem(insProduct.getInspectionItem());
                        insUnPass.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());
                        insUnPass.setLastValue(insProduct.getLastValue());
                        insUnPass.setEntrustCode(insOrderMapper.selectById(orderId).getEntrustCode());
                        List<Integer> userIds = insProductUserMapper.selectList(Wrappers.<InsProductUser>lambdaQuery().eq(InsProductUser::getInsProductId, insProduct.getId())).stream().map(InsProductUser::getCreateUser).distinct().collect(Collectors.toList());
                        String name = userMapper.selectBatchIds(userIds).stream().map(User::getName).collect(Collectors.joining(","));
                        insUnPass.setName(name);
                        insUnPasses.add(insUnPass);
                    }
                }
            }
            insUnPassService.saveBatch(insUnPasses);
            InsOrder insOrder = insOrderMapper.selectById(orderId);
            Map<String, String> user = insProductMapper.selectUserById(insOrder.getUserId());
            List<SampleProductDto> samples = insSampleMapper.selectSampleProductListByOrderId(orderId);
            InsReport insReport = new InsReport();
            insReport.setCode(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);
                a.getInsProduct().forEach(b -> {
                    String[] split = b.getMethod().replaceAll("]", "").replaceAll("\\[", "").replaceAll("\"", "").split(",");
                    standardMethod.addAll(Arrays.asList(split));
                getTemplateThing(set, map2, a.getInsProduct());
                for (InsProduct b : a.getInsProduct()) {
                    if (b.getInsProductResult() != null) {
                        if (b.getInsProductResult().getEquipValue() != null && !Objects.equals(b.getInsProductResult().getEquipValue(), "")) {
                            deviceSet.add(b.getInsProductResult().getEquipValue());
                        List<JSONObject> jsonObjects = JSON.parseArray(b.getInsProductResult().getEquipValue(), JSONObject.class);
                        for (JSONObject jsonObject : jsonObjects) {
                            if (!"".equals(jsonObject.get("v") + "")) {
                                deviceSet.add(jsonObject.get("v") + "");
                            }
                        }
                    }
                    if (b.getTemplate() == null) {
                        continue;
                    }
                    if (b.getTemplate().size() == 0) {
                        return;
                        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<>();
                    List<TextRenderData> text = new ArrayList<>();
                    RowRenderData rowRenderData;
                    Set<String> delSet = new HashSet<>();
                    List<JSONObject> temp = JSON.parseArray(tem, JSONObject.class);
                    List<ExcelDto> excelDtos = JSON.parseArray(tem, ExcelDto.class);
                    List<ExcelDto> mcList = new ArrayList<>();
                    excelDtos.forEach(b -> {
                        if (b.getV().getMc() != null && b.getV().getMc().getCs() != null && b.getV().getMc().getRs() != null) {
                            mcList.add(b);
                        }
                    });
                    int count5 = 0;
                    for (ExcelDto b : mcList) {
                        for (ExcelDto excelDto : excelDtos) {
                            for (int i = 0; i < b.getV().getMc().getCs(); i++) {
                                for (int i2 = 0; i2 < b.getV().getMc().getRs(); i2++) {
                                    if (excelDto.getC() == b.getC() + i && excelDto.getR() == b.getR() + i2) {
                                        ExcelDto bb = JSON.parseObject(JSON.toJSONString(b), ExcelDto.class);
                                        excelDto.getV().setV(bb.getV().getV());
                                        excelDto.getV().setPs(bb.getV().getPs());
                                        excelDto.getV().setFc(bb.getV().getFc());
                                        excelDto.getV().setFs(bb.getV().getFs());
                                        excelDto.getV().setHt(bb.getV().getHt());
                                        excelDto.setMc(count5);
                                        break;
                                    }
                                }
                            }
                        }
                        count5++;
                    }
                    List<JSONObject> temp = JSON.parseArray(JSON.toJSONString(excelDtos), JSONObject.class);
                    Map<String, InsProduct> pMap = new HashMap<>();
                    Set<String> delRSet = new HashSet<>();
                    delRSet.add("0");
                    for (JSONObject jo1 : temp) {
                        JSONObject v = JSON.parseObject(JSON.toJSONString(jo1.get("v")));
                        if (Integer.parseInt(jo1.get("c") + "") > 9) {
                            delSet.add(jo1.get("c") + "");
                            continue;
                        }
                        if (v.get("ps") != null) {
                            if ("检验值".equals(JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "") || "设备".equals(JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "")) {
                            int count3 = 0;
                            String str = "";
                            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;
                            }
                            if ("检验子项".equals(JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "")) {
                            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").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").toString().contains("检验子项")) {
                                        if (count3 == 1) {
                                            str += v2.get("v");
                                            count3 += 1;
                                        }
                                    }
                                }
                            }
                            if (!str.equals("")) {
                                int count2 = 0;
                                for (InsProduct p : a.getInsProduct()) {
                                    if (v.get("v").equals(p.getInspectionItemSubclass())) {
                                        pMap.put(jo1.get("r") + "", p);
                                for (InsProduct product : a.getInsProduct()) {
                                    if ((product.getInspectionItem() + product.getInspectionItemSubclass()).equals(str)) {
                                        pMap.put(jo1.get("r") + "", product);
                                        break;
                                    } else {
                                        count2++;
@@ -316,12 +706,6 @@
                    }
                    for (int i = 0; i < temp.size(); i++) {
                        JSONObject jo1 = temp.get(i);
                        if (delRSet.stream().anyMatch(e -> e.equals(jo1.get("r") + ""))) {
                            continue;
                        }
                        if (delSet.stream().anyMatch(e -> e.equals(jo1.get("c") + ""))) {
                            continue;
                        }
                        TextRenderData textRenderData = new TextRenderData();
                        if (set2.add(Integer.parseInt(jo1.get("r") + ""))) {
                            if (text.size() > 0) {
@@ -331,65 +715,91 @@
                                text = new ArrayList<>();
                            }
                        }
                        if (delRSet.stream().anyMatch(e -> e.equals(jo1.get("r") + ""))) {
                            continue;
                        }
                        if (delSet.stream().anyMatch(e -> e.equals(jo1.get("c") + ""))) {
                            continue;
                        }
                        JSONObject v = JSON.parseObject(JSON.toJSONString(jo1.get("v")));
                        InsProduct p = pMap.get(jo1.get("r") + "");
                        if (p != null && v.get("ps") != null) {
                            String value = JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "";
                            if (value.equals("要求值")) {
                                textRenderData.setText(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.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") + "");
@@ -397,49 +807,99 @@
                        } 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.setColor(v.get("fc") == null ? "000000" : (v.get("fc") + "").replace("#", ""));
                        style.setFontFamily("宋体");
                        if (!((v.get("fc") + "").indexOf("rgb") > -1)) {
                            style.setColor(v.get("fc") == null ? "000000" : (v.get("fc") + "").replace("#", ""));
                        } else {
                            style.setColor("000000");
                        }
                        textRenderData.setStyle(style);
                        text.add(textRenderData);
                        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);
                    });
                });
            });
            String url;
            try {
                url = ResourceUtils.getURL("classpath:static/report-template.docx").getPath();
                InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
                File file = File.createTempFile("temp", ".tmp");
                OutputStream outputStream = new FileOutputStream(file);
                IOUtils.copy(inputStream, outputStream);
                url = file.getAbsolutePath();
            } catch (FileNotFoundException e) {
                throw new ErrorException("找不到模板文件");
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            StringBuilder standardMethod2 = new StringBuilder();
            for (String s : standardMethod) {
@@ -449,12 +909,15 @@
            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());
            codeStr.put("规格型号", samples.get(0).getModel());
            codeStr.put("发放日期", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            codeStr.put("发放日期", now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            String codePath;
            try {
                codePath = new MatrixToImageWriter().code(JackSonUtil.marshal(codeStr).replaceAll("\\{", "")
@@ -462,28 +925,1741 @@
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
            String modelStr = "";
            for (String model : models) {
                modelStr += "," + model;
            }
            String finalModelStr = modelStr;
            String sampleEn = insSampleMapper.getSampleEn(insOrder.getSample());
            String orderType = insOrderMapper.getEnumLabelByValue(insOrder.getOrderType());
            String formType = insOrderMapper.getEnumLabelByValue(insOrder.getFormType());
            ConfigureBuilder builder = Configure.builder();
            builder.useSpringEL(true);
            List<Map<String, String>> finalDeviceList = deviceList;
            Integer userId = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery().eq(InsSampleUser::getInsSampleId, orderId).last("limit 1")).getUserId();
            String signatureUrl;
            try {
                signatureUrl = userMapper.selectById(userId).getSignatureUrl();
            } catch (Exception e) {
                throw new ErrorException("找不到检验人的签名");
            }
            //Custom custom = customMapper.selectById(user.get("company"));
            Custom custom = customMapper.selectById(insOrder.getCompanyId());
            if (!resultCh.get().equals("")) {
                resultCh.set("依据委托要求," + resultCh.get().replaceFirst("、", "") + "等所检项目不符合要求,其余所检项目均符合要求。");
                resultEn.set("According to commissioned requirements," + resultEn.get().replaceFirst("、", "") + " these inspected items do not meet the requirements, all other inspected items meet the requirements.");
            } else {
                resultCh.set("依据委托要求,所检项目均符合要求。");
                resultEn.set("According to commissioned requirements, all the tested items meet the requirements.");
            }
            /*光纤配置的检验报告*/
            //先判断是否有光纤配置
            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))
                    .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("每行单元格不相等");
                                }
                            }
                            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("每行单元格不相等");
                            }
                        }
                        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("sample_number", sample.getSampleCode());
                        table.put("type", sample.getModel());
                        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("standardMethod", (standardMethod2.toString().equals("null") ? "" : standardMethod2));
                        put("deviceList", finalDeviceList);
                        put("twoCode", Pictures.ofLocal(codePath).create());
                        put("models", finalModelStr.replace(",", ""));
                        put("productSize", productSize);
                        put("createTime", now.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日")));
                        put("createTimeEn", monthNames[now.getMonthValue() - 1] + " " + now.getDayOfMonth() + ", " + now.getYear());
                        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", 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 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yy_MM_dd&HH_mm_ss")) + ".docx";
                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);
            }
@@ -491,16 +2667,19 @@
        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;
            }
            if (set.add(product.getTemplateId())) {
            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());
//            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")));
@@ -510,27 +2689,123 @@
                style.put("columnlen", config.get("columnlen"));
                product.setTemplate(cellData);
                product.setStyle(style);
                product.setTemplateName(standardTemplateService.getStandTempNameById(product.getTemplateId()));
            }
        }
    }
    @Override
    public int submitPlan(Integer orderId, String laboratory) {
    public int submitPlan(Integer orderId, String laboratory, Integer verifyUser) {
        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId));
        List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList());
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().in(InsProduct::getInsSampleId, ids).eq(InsProduct::getSonLaboratory, laboratory).eq(InsProduct::getState, 1).isNull(InsProduct::getInsResult));
        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 {
                    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);
        upPlanUser(verifyUser, orderId);
        /*校验一下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;
        });
        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 day + " " + 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 "未知";
        }
    }
}