zss
2024-08-23 8a9505bd7845d50e83fae7adf4846931979c1419
检验下单+检验任务+报告编制批准选择印章修改
已修改27个文件
4243 ■■■■ 文件已修改
cnas-server/src/main/java/com/yuanchu/mom/controller/DepartmentController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/controller/SealController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/service/DepartmentLimsService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/service/DepartmentService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/service/impl/DepartmentLimsServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/resources/mapper/SealMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsReportController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/dto/ReportPageDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsOrder.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsOrderState.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsSampleUser.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/InsReportService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java 3756 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/vo/InsOrderPlanVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderMapper.xml 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsProductMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsReportMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsSampleMapper.xml 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/static/report-template.docx 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/resources/application-dev.yml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/resources/mapper/UserMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/controller/DepartmentController.java
@@ -76,4 +76,11 @@
    public Result selectDepartmentEnum() {
        return Result.success(departmentService.selectDepartmentEnum());
    }
    @ValueAuth
    @ApiOperation(value = "获取用户管理组织架构枚举")
    @GetMapping("/selectDepartmentLimsEnum")
    public Result selectDepartmentLimsEnum() {
        return Result.success(departmentLimsService.selectDepartmentLimsEnum());
    }
}
cnas-server/src/main/java/com/yuanchu/mom/controller/SealController.java
@@ -48,4 +48,11 @@
        Seal seal = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), Seal.class);
        return Result.success(sealService.selectSeal(page,seal));
    }
    @ValueClassify("场所或设施")
    @ApiOperation(value="删除印章")
    @PostMapping("/delectSeal")
    public  Result delectSeal(@RequestBody Seal seal) {
        return Result.success(sealService.removeById(seal));
    }
}
cnas-server/src/main/java/com/yuanchu/mom/service/DepartmentLimsService.java
@@ -22,4 +22,5 @@
    //删除部门
    boolean delDepartment(Integer id);
    List<DepartmentLims> selectDepartmentLimsEnum();
}
cnas-server/src/main/java/com/yuanchu/mom/service/DepartmentService.java
@@ -26,4 +26,5 @@
    boolean delDepartment(Integer id);
    List<Department> selectDepartmentEnum();
}
cnas-server/src/main/java/com/yuanchu/mom/service/impl/DepartmentLimsServiceImpl.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.dto.DepartmentDto;
import com.yuanchu.mom.mapper.DepartmentLimsMapper;
import com.yuanchu.mom.pojo.Department;
import com.yuanchu.mom.pojo.DepartmentLims;
import com.yuanchu.mom.service.DepartmentLimsService;
import lombok.AllArgsConstructor;
@@ -64,6 +65,11 @@
        return removeBatchByIds(department);
    }
    @Override
    public List<DepartmentLims> selectDepartmentLimsEnum() {
        return baseMapper.selectList(Wrappers.<DepartmentLims>lambdaQuery().isNotNull(DepartmentLims::getFatherId).select(DepartmentLims::getId,DepartmentLims::getName));
    }
    //判断是否有子类,直到没有为止
    public List<DepartmentLims> getDepartment(Integer id) {
        List<DepartmentLims> list = new ArrayList<>();
cnas-server/src/main/resources/mapper/SealMapper.xml
@@ -4,7 +4,7 @@
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.SealMapper">
    <select id="selectSeal" resultType="com.yuanchu.mom.pojo.Seal">
        select l.id,s.lab_id,l.laboratory_name ,s.address, s.type as Type,s.create_time
        select s.id,s.lab_id,l.laboratory_name ,s.address, s.type as Type,s.create_time
        from seal s  LEFT JOIN laboratory l  on s.lab_id=l.id
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderController.java
@@ -93,7 +93,8 @@
    public Result<?> getInsOrder(Integer orderId) {
        return Result.success(insOrderService.getInsOrder(orderId));
    }
    @ValueClassify("检验下单")
    @ValueAuth
    @ApiOperation(value = "审核检验单进行状态修改")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "检验单id", dataTypeClass = Integer.class),
@@ -103,6 +104,18 @@
    public Result<?> upInsOrderOfState(@RequestBody InsOrder insOrder) {
        return Result.success(insOrderService.upInsOrderOfState(insOrder));
    }
    @ValueClassify("检验下单")
    @ApiOperation(value = "检测中心主任审核/研发部经理审核/技术负责人审核")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "检验单id", dataTypeClass = Integer.class),
            @ApiImplicitParam(name = "state", value = "审核结果 1:通过 2:不通过", dataTypeClass = Integer.class)
    })
    @PostMapping("/upInsOrderOfState2")
    public Result<?> upInsOrderOfState2(@RequestBody InsOrder insOrder) {
        return Result.success(insOrderService.upInsOrderOfState2(insOrder));
    }
    @ValueClassify("检验下单")
    @ApiOperation(value = "添加检验单模板")
    @PostMapping("/addInsOrderTemplate")
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java
inspect-server/src/main/java/com/yuanchu/mom/controller/InsReportController.java
@@ -101,8 +101,8 @@
    @ValueClassify("报告编制")
    @ApiOperation(value = "批准")
    @PostMapping("/ratifyReport")
    public Result ratifyReport(Integer id, Integer isRatify, String ratifyTell) {
        return Result.success(insReportService.ratifyReport(id, isRatify, ratifyTell));
    public Result ratifyReport(Integer id, Integer isRatify, String ratifyTell,String sealUrl) {
        return Result.success(insReportService.ratifyReport(id, isRatify, ratifyTell,sealUrl));
    }
    @RequestMapping("/onlyOffice/save")
inspect-server/src/main/java/com/yuanchu/mom/dto/ReportPageDto.java
@@ -22,4 +22,7 @@
    @ValueTableShow(value = 6,name = "审核人")
    private String examineUser;
    //实验室id
    private Integer labId;
}
inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderMapper.java
@@ -53,4 +53,6 @@
    List<Map<Integer, Object>> selectReportModelByOrderId(@Param("id") Integer id, @Param("laboratory") String laboratory);
    String seldepLimsId(int depLimsId);
    InsOrder selectById2(Integer id);
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsOrder.java
@@ -215,11 +215,33 @@
    @ValueTableShow(value = 15, name = "委托人")
    private String prepareUser;
    @TableField(exist = false,select = false)
    private Integer prepareUserId;
    @ApiModelProperty("是否审核撤销")
    private Integer isRevocation;
    @ApiModelProperty("审核撤销的项目id")
    private String revocationInsProductIds;
    @ApiModelProperty("通信:下发至部门,关联的部门id")
    private Integer departmentLimsId;
    @ApiModelProperty("通信:下发至部门")
    private String departmentLims;
    @ApiModelProperty("通信:检测中心主任审核人")
    private Integer checkState1User;
    @ApiModelProperty("通信:检测中心主任审核结果2:不通过;1:通过")
    private Integer checkState1;
    @ApiModelProperty("通信:研发部经理审核人")
    private Integer checkState2User;
    @ApiModelProperty("通信:研发部经理审核结果2:不通过;1:通过")
    private Integer checkState2;
    @ApiModelProperty("通信:技术负责人审核人")
    private Integer checkState3User;
    @ApiModelProperty("通信:技术负责人审核结果2:不通过;1:通过")
    private Integer checkState3;
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsOrderState.java
@@ -9,6 +9,7 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
/**
 * 
@@ -30,13 +31,13 @@
    private Integer insOrderId;
    /**
     * 实验室
     * 试验室son
     */
    @TableField(value = "laboratory")
    private String laboratory;
    /**
     * 检验状态(0:待检验1:检验中 2:已检验3:待复核4:复核未通过 5:复核通过)
     * 检验状态(0:待检验1:检验中 2:已检验3:待复核4:复核再次试验 5:复核结束试验 6:复核继续试验)
     */
    @TableField(value = "ins_state")
    private Integer insState;
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsSampleUser.java
@@ -27,7 +27,7 @@
    private Integer id;
    /**
     * 外键:检验样品ins_sample表id
     * 外键:检验样品ins_sample表id(实际关联ins_order_state表id)
     */
    private Integer insSampleId;
inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderService.java
@@ -31,6 +31,8 @@
    int upInsOrderOfState(InsOrder insOrder);
    int upInsOrderOfState2(InsOrder insOrder);
    Map<String, Object> getInsOrderAndSample(Integer id, String laboratory);
    Map<String, Object> selectSampleAndProductByOrderId(IPage<SampleProductDto2> page, SampleProductDto2 sampleProductDto);
inspect-server/src/main/java/com/yuanchu/mom/service/InsReportService.java
@@ -31,7 +31,7 @@
    int examineReport(Integer id, Integer isExamine, String examineTell);
    //批准
    int ratifyReport(Integer id, Integer isRatify, String ratifyTell);
    int ratifyReport(Integer id, Integer isRatify, String ratifyTell,String sealUrl);
    int wordInsertUrl(Map<String, Object> map, String url);
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -145,17 +145,7 @@
        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null);
        User user = userMapper.selectById(map1.get("userId"));//当前登录的人
        //获取当前人所属实验室id
        String departLimsId = user.getDepartLimsId();
        String laboratory = null;
        if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.equals("")) {
            String[] split = departLimsId.split(",");
            //查询对应架构名称(通信实验室,电力实验室,检测办)
            String departLims = baseMapper.seldepLimsId(Integer.parseInt(split[split.length - 1]));
            if (departLims.contains("实验室")) {
                laboratory = departLims;
            }
        }
        String userName = null;
        Integer userId = null;
        if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
@@ -178,9 +168,9 @@
        Integer userId = map1.get("userId");
        User user = userMapper.selectById(map1.get("userId"));//当前登录的人
        //获取当前人所属实验室id
        String departLimsId = user.getDepartLimsId();
        String laboratory = null;
        //获取当前人所属实验室id
       /* String departLimsId = user.getDepartLimsId();
        if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.equals("")) {
            String[] split = departLimsId.split(",");
            //查询对应架构名称(通信实验室,电力实验室,检测办)
@@ -188,7 +178,7 @@
            if (departLims.contains("实验室")) {
                laboratory = departLims;
            }
        }
        }*/
        if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
            insOrderPlanDTO.setUserId(userId.longValue());
        }
@@ -853,16 +843,13 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int verifyPlan(Integer orderId, String laboratory, Integer type, String tell) {
        Integer num = (type == 1 ? 5 : 4);
        LocalDateTime now = LocalDateTime.now();
        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, now).set(InsOrderState::getInsState, num).set(InsOrderState::getVerifyTell, tell).set(InsOrderState::getVerifyUser, getLook.selectPowerByMethodAndUserId(null).get("userId")));
        Long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, orderId).ne(InsOrderState::getInsState, 5));
        if (count == 0 && num == 5) {
        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
            List<InsUnPass> insUnPasses = new ArrayList<>();
            /*样品下的项目只要有一个项目不合格则检验结果为0,否则为1*/
            //这里的insSamples是订单下的所有样品包括("/")
            List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId));
            for (InsSample insSample : insSamples) {
        List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId));
        for (InsSample insSample : samples) {
                List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, insSample.getId()).eq(InsProduct::getState, 1));
                List<Integer> results = insProducts.stream().map(InsProduct::getInsResult).filter(str -> str != null).collect(Collectors.toList());
                if (results.contains(0)) {
@@ -871,7 +858,7 @@
                    insSample.setInsResult(1);
                }
                insSampleMapper.updateById(insSample);
                /*复核通过后,将不合格的项目信息添加到ins_un_pass表中*/
            /*复核后,将不合格的项目信息添加到ins_un_pass表中*/
                for (InsProduct insProduct : insProducts) {
                    if (insProduct.getInsResult() == 0) {
                        InsUnPass insUnPass = new InsUnPass();
@@ -890,6 +877,111 @@
                }
            }
            insUnPassService.saveBatch(insUnPasses);
        /*type=0  再次试验; type=1 继续试验 ; type=2 结束试验*/
        switch (type) {
            case 0:
                /*再次试验:系统自动在此站台再次创建一次检验任务;*/
                //更新原来的检验任务
                // 查询根据 id 倒序排列的第一条记录
                InsOrderState record = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
                        .eq(InsOrderState::getInsOrderId, orderId)
                        .eq(InsOrderState::getLaboratory, laboratory)
                        .orderByDesc(InsOrderState::getId)
                        .last("LIMIT 1")); // 确保只取一条记录
                if (record != null) {
                    // 获取到第一条记录的 id 后,执行更新操作
                    insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                            .eq(InsOrderState::getId, record.getId())
                            .set(InsOrderState::getInsTime, now)
                            .set(InsOrderState::getInsState, 4)
                            .set(InsOrderState::getVerifyTell, tell)
                            .set(InsOrderState::getVerifyUser, userId));
                }
                //新建检验任务
               /* InsOrderState orderState = new InsOrderState();
                orderState.setInsOrderId(orderId);
                orderState.setLaboratory(laboratory);
                orderState.setInsState(0);
                insOrderStateMapper.insert(orderState);*/
                break;
            case 1:
                //继续试验:则继续将检验任务转接至下一站点;
                insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                        .eq(InsOrderState::getInsOrderId, orderId)
                        .eq(InsOrderState::getLaboratory, laboratory)
                        .set(InsOrderState::getInsTime, now)
                        .set(InsOrderState::getInsState, 6)
                        .set(InsOrderState::getVerifyTell, tell)
                        .set(InsOrderState::getVerifyUser, userId));
                //转接至下一站点,需要先判断是否还有其余试验室,如果有其余试验室需要将订单下发
                List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
                        .eq(InsSample::getInsOrderId, orderId).select(InsSample::getId));
                List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList());
                List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                        .in(InsProduct::getInsSampleId, ids)
                        .eq(InsProduct::getState, 1));
                List<Integer> list = new ArrayList<>();
                list.add(4);list.add(5);list.add(6);
                List<InsOrderState> insOrderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
                        .eq(InsOrderState::getInsOrderId, orderId)
                        .in(InsOrderState::getInsState, list));
                List<String> strings = insOrderStates.stream().map(InsOrderState::getLaboratory).distinct().collect(Collectors.toList());
                //除去当前复核的试验室和已经复核的试验室
                List<String> collect = insProducts.stream()
                        .map(InsProduct::getSonLaboratory)
                        .distinct()
                        .filter(s -> !s.equals(laboratory))
                        .filter(s -> !strings.contains(s))
                        .collect(Collectors.toList());
                if (collect.size() > 0) {
                    //要判断剩余试验室中哪个最空闲就安排给哪个
                    Map<String, Long> dataCounts = new HashMap<>();
                    for (String sonLaboratory : collect) {
                        Long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery()
                                .eq(InsOrderState::getLaboratory, sonLaboratory)
                                .ne(InsOrderState::getInsState, 4)
                                .ne(InsOrderState::getInsState, 5)
                                .ne(InsOrderState::getInsState, 6));
                        dataCounts.put(sonLaboratory, count);
                    }
                    // 查找数据量最少的元素
                    String minElement = null;
                    Long minCount = Long.MAX_VALUE;
                    for (Map.Entry<String, Long> entry : dataCounts.entrySet()) {
                        if (entry.getValue() < minCount) {
                            minCount = entry.getValue();
                            minElement = entry.getKey();
                        }
                    }
                    InsOrderState insOrderState = new InsOrderState();
                    insOrderState.setInsOrderId(orderId);
                    insOrderState.setLaboratory(minElement);
                    insOrderState.setInsState(0);
                    insOrderStateMapper.insert(insOrderState);
                } else {
                    //如果继续试验没有其他站点的检验任务那就结束试验
                    verifyPlan(orderId, laboratory, 2, tell);
                }
                break;
            case 2:
                //结束试验:此委托单停止试验,直接生成最终报告和费用统计。
                insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                        .eq(InsOrderState::getInsOrderId, orderId)
                        .eq(InsOrderState::getLaboratory, laboratory)
                        .set(InsOrderState::getInsTime, now)
                        .set(InsOrderState::getInsState, 5)
                        .set(InsOrderState::getVerifyTell, tell)
                        .set(InsOrderState::getVerifyUser, userId));
                /*生成报告*/
                generateReport(orderId);
                break;
        }
        return 1;
    }
    //生成报告
    private void generateReport(Integer orderId) {
        LocalDateTime now = LocalDateTime.now();
            InsOrder insOrder = insOrderMapper.selectById(orderId);
            Map<String, String> user = insProductMapper.selectUserById(insOrder.getUserId());
            //samples是过滤掉没有检验项目的样品
@@ -905,7 +997,7 @@
            String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
            AtomicReference<String> resultCh = new AtomicReference<>("");
            AtomicReference<String> resultEn = new AtomicReference<>("");
            /*基础报告(根据绘制的原始记录模版形成)*/
        /*基础报告(7列)*/
            samples.forEach(a -> {
                Set<Integer> set = new HashSet<>();
                Map<Integer, String> map2 = new HashMap<>();
@@ -913,7 +1005,6 @@
                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.getInsProduct());
                for (InsProduct b : a.getInsProduct()) {
                    if (b.getInsProductResult() != null) {
@@ -924,286 +1015,260 @@
                            }
                        }
                    }
                    if (b.getTemplate() == null) {
                        continue;
                    }
                    if (b.getTemplate().size() == 0) {
                        continue;
                    }
                    templateSet.add(JSON.toJSONString(b.getTemplate()));
                }
                AtomicInteger index = new AtomicInteger();
                Set<String> itemSet = new HashSet<>();
                templateSet.forEach(tem -> {
                    Set<Integer> set2 = new HashSet<>();
                    List<RowRenderData> rows = new ArrayList<>();
                    List<TextRenderData> text = new ArrayList<>();
                    RowRenderData rowRenderData;
                    Set<String> delSet = new HashSet<>();
                    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) {
                            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;
                            }
                            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 product : a.getInsProduct()) {
                                    if ((product.getInspectionItem() + product.getInspectionItemSubclass()).equals(str)) {
                                        pMap.put(jo1.get("r") + "", product);
                                        break;
                                    } else {
                                        count2++;
                                    }
                                }
                                if (count2 == a.getInsProduct().size()) {
                                    delRSet.add(jo1.get("r") + "");
                                }
                            }
                        }
                    }
                    for (int i = 0; i < temp.size(); i++) {
                        JSONObject jo1 = temp.get(i);
                        TextRenderData textRenderData = new TextRenderData();
                        if (set2.add(Integer.parseInt(jo1.get("r") + ""))) {
                            if (text.size() > 0) {
                                TextRenderData[] text2 = text.toArray(new TextRenderData[0]);
                                rowRenderData = Rows.of(text2).center().rowAtleastHeight(1).create();
                                rows.add(rowRenderData);
                                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.contains("要求值")) {
                                textRenderData.setText(ObjectUtils.isNotEmpty(p.getTell()) ? p.getTell() : "");
                            } else if (value.contains("单位")) {
                                textRenderData.setText(p.getUnit());
                            } else if (value.contains("结论")) {
                                switch (p.getInsResult()) {
                                    case 1:
                                        textRenderData.setText("√");
                                        break;
                                    case 0:
                                        String current = resultCh.get();
                                        // 使用 Set 来保持唯一项
                                        Set<String> uniqueItems = new HashSet<>();
                                        if (!current.isEmpty()) {
                                            // 分割当前字符串并加入到 Set 中
                                            String[] items = current.split("、");
                                            for (String item : items) {
                                                if (!item.isEmpty()) {
                                                    uniqueItems.add(item);
                                                }
                                            }
                                        }
                                        // 处理新数据
                                        String newItem = p.getInspectionItem() +
                                                (Objects.equals(p.getInspectionItemSubclass(), "") ? "" : " " + p.getInspectionItemSubclass());
                                        uniqueItems.add(newItem);
                                        // 连接唯一项并更新 AtomicReference
                                        String result = String.join("、", uniqueItems);
                                        resultCh.set(result);
                                        //resultCh.set(resultCh.get() + "、" + p.getInspectionItem() + (Objects.equals(p.getInspectionItemSubclass(), "") ? "" : " " + p.getInspectionItemSubclass()));
                                        String current1 = resultEn.get();
                                        // 使用 Set 来保持唯一项
                                        Set<String> uniqueItems1 = new HashSet<>();
                                        if (!current1.isEmpty()) {
                                            // 分割当前字符串并加入到 Set 中
                                            String[] items = current1.split("、");
                                            for (String item : items) {
                                                if (!item.isEmpty()) {
                                                    uniqueItems1.add(item);
                                                }
                                            }
                                        }
                                        // 处理新数据
                                        String newItem1 = p.getInspectionItemEn() +
                                                ((Objects.equals(p.getInspectionItemSubclassEn(), "") || Objects.equals(p.getInspectionItemSubclassEn(), null)) ? "" : " " + p.getInspectionItemSubclassEn());
                                        uniqueItems1.add(newItem1);
                                        // 连接唯一项并更新 AtomicReference
                                        String result1 = String.join("、", uniqueItems1);
                                        resultEn.set(result1);
                                        //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.contains("序号")) {
                                if (itemSet.add(p.getInspectionItem())) {
            //表格的行数
            for (int i = 0; i < 3 + a.getInsProduct().size(); i++) {
                RowRenderData rowRenderData = new RowRenderData();
                RowStyle rowStyle = new RowStyle();
                rowStyle.setHeight(40);
                rowRenderData.setRowStyle(rowStyle);
                List<CellRenderData> cells = new ArrayList<>();
                if (i >= 2 && i < 2 + a.getInsProduct().size()) {
                    if (itemSet.add(a.getInsProduct().get(i - 2).getInspectionItem())) {
                                    index.getAndIncrement();
                                }
                                textRenderData.setText(index + "");
                            } 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.contains("最终值")) {
                                textRenderData.setText(p.getLastValue());
                            } else if (value.contains("样品编号")) {
                                textRenderData.setText(a.getSampleCode());
                            } else if (value.contains("样品型号")) {
                                textRenderData.setText(a.getModel());
                            } 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.contains("最终值")) {
                                textRenderData.setText(p.getLastValue());
                            } else if (value.contains("结论")) {
                                switch (p.getInsResult()) {
                                    case 1:
                                        textRenderData.setText("✔");
                                        break;
                                    case 0:
                                        Set<String> uniqueItems1 = new HashSet<>();
                                        Set<String> uniqueItems2 = new HashSet<>();
                                        String item1 = p.getInspectionItem() + (p.getInspectionItemSubclass().equals("") ? "" : " " + p.getInspectionItemSubclass());
                                        if (uniqueItems1.add(item1)) {
                                            resultCh.set(resultCh.get() + "、" + item1);
                                        }
                                        //resultCh.set(resultCh.get() + "、" + p.getInspectionItem() + (p.getInspectionItemSubclass().equals("") ? "" : " " + p.getInspectionItemSubclass()));
                                        String item2 = p.getInspectionItemEn() + ((Objects.equals(p.getInspectionItemSubclassEn(), "") || Objects.equals(p.getInspectionItemSubclassEn(), null)) ? "" : " " + p.getInspectionItemSubclassEn());
                                        if (uniqueItems2.add(item2)) {
                                            resultEn.set(resultEn.get() + "、" + item2);
                                        }
                                        //resultEn.set(resultEn.get() + "、" + );
                                        textRenderData.setText("✖");
                                        break;
                                    default:
                                        textRenderData.setText("-");
                                        break;
                                }
                            } else if (value.contains("样品编号")) {
                                textRenderData.setText(a.getSampleCode());
                            } else if (value.contains("样品型号")) {
                                textRenderData.setText(a.getModel());
                            } else if (value.contains("样品名称")) {
                                textRenderData.setText(a.getSample());
                            } else {
                                textRenderData.setText(v.get("v") == null ? "" : v.get("v") + "");
                            }
                        } else {
                            textRenderData.setText(v.get("v") == null ? "" : v.get("v") + "∑" + jo1.get("mc"));
                        }
                        if (jo1.get("mc") != null) {
                            textRenderData.setText(textRenderData.getText() + "∑" + jo1.get("mc"));
                        }
                //列数
                for (int j = 0; j < 7; j++) {
                    CellRenderData cellRenderData = new CellRenderData();
                    CellStyle cellStyle = new CellStyle();
                    cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                    cellRenderData.setCellStyle(cellStyle);
                    List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                    ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                    ParagraphStyle paragraphStyle = new ParagraphStyle();
                    paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                    paragraphRenderData.setParagraphStyle(paragraphStyle);
                    List<RenderData> renderData = new ArrayList<>();
                    TextRenderData textRenderData = new TextRenderData();
                        Style style = new Style();
                        style.setFontFamily("宋体");
                        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 == 0) {
                        //第一行
                        if (j == 0 || j == 1) {
                            //第一列和第二列
                            textRenderData.setText("样品编号@Sample number∑1");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else if (j == 2 || j == 3) {
                            //第三列和第四列
                            textRenderData.setText(a.getSampleCode() + "∑2");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else if (j == 4) {
                            //第五列
                            textRenderData.setText("规格型号@Type");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else {
                            //第六列和第七列
                            textRenderData.setText(a.getModel() + "∑3");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                    }
                    TextRenderData[] text2 = text.toArray(new TextRenderData[0]);
                    rowRenderData = Rows.of(text2).rowAtleastHeight(1).center().create();
                    } else if (i == 1) {
                        //第二行
                        if (j == 0) {
                            //第一列
                            textRenderData.setText("序号@No.");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else if (j == 1 || j == 2) {
                            //第二列和第三列
                            textRenderData.setText("检测项目@Testing item∑4");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else if (j == 3) {
                            //第四列
                            textRenderData.setText("单位@Unit");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else if (j == 4) {
                            //第五列
                            textRenderData.setText("标准要求@Requirement");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else if (j == 5) {
                            //第六列
                            textRenderData.setText("检验结果@Test result");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else {
                            //第七列
                            textRenderData.setText("结论@Conclusion");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        }
                    } else if (i == 2 + a.getInsProduct().size()) {
                        //最后一行
                        if (j == 0 || j == 1) {
                            //第一列和第二列
                            textRenderData.setText("备注∑5");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else {
                            //其余列
                            textRenderData.setText("“√”表示项目合格,“×”表示项目不合格。@“√” indicates test item is qualified,“×” indicates test item is not qualified ∑6");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        }
                    } else {
                        //其余行
                        if (j == 0) {
                            //第一列
                            textRenderData.setText(index + "∑2" + index);
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else if (j == 1) {
                            //第二列
                            if (ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getInspectionItemSubclass())) {
                                if (ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getInspectionItemEn())) {
                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItem() + "@" + a.getInsProduct().get(i - 2).getInspectionItemEn() + "∑3" + index);
                                } else {
                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItem() + "∑3" + index);
                                }
                            } else {
                                if (ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getInspectionItemEn())) {
                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItem() + "@" + a.getInsProduct().get(i - 2).getInspectionItemEn() + "∑3" + index);
                                } else {
                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItem() + "∑3" + index);
                                }
                            }
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else if (j == 2) {
                            //第三列
                            if (ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getInspectionItemSubclass())) {
                                if (ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getInspectionItemSubclassEn())) {
                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItemSubclass() + "@" + a.getInsProduct().get(i - 2).getInspectionItemSubclassEn());
                                } else {
                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItemSubclass());
                                }
                            } else {
                                if (ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getInspectionItemEn())) {
                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItem() + "@" + a.getInsProduct().get(i - 2).getInspectionItemEn() + "∑3" + index);
                                } else {
                                    textRenderData.setText(a.getInsProduct().get(i - 2).getInspectionItem() + "∑3" + index);
                                }
                            }
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else if (j == 3) {
                            //第四列
                            textRenderData.setText(ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getUnit()) ? a.getInsProduct().get(i - 2).getUnit() : "");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else if (j == 4) {
                            //第五列
                            textRenderData.setText(a.getInsProduct().get(i - 2).getTell());
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else if (j == 5) {
                            //第六列
                            textRenderData.setText(a.getInsProduct().get(i - 2).getLastValue());
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else {
                            //第七列
                            if (a.getInsProduct().get(i - 2).getInsResult() == 0) {
                                textRenderData.setText("×");
                            } else if (a.getInsProduct().get(i - 2).getInsResult() == 1) {
                                textRenderData.setText("√");
                            } else {
                                textRenderData.setText("-");
                            }
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        }
                    }
                }
                rowRenderData.setCells(cells);
                    if (rowRenderData.getCells().size() != 0) {
                        rows.add(rowRenderData);
                    }
                    List<TableRenderData> tables1 = new ArrayList<>();
            }
                    TableRenderData tableRenderData = new TableRenderData();
            tableRenderData.setRows(rows);
            List<TableRenderData> tables1 = new ArrayList<>();
                    tableRenderData.setRows(new ArrayList<>());
                    double totalHeight = 0.0; // 用于跟踪当前表格的总行高
                    double heightThreshold = 8000.0; // 阈值,
            int totalHeight = 0;
            int pageHeightLimit = 500; // 假设每页的高度限制为500单位
            int rowHeight = 0;
                    List<RowRenderData> firstTwoRows = new ArrayList<>(); // 保存前两行以便复制到新表格
            List<RowRenderData> endRows = new ArrayList<>(); // 保存前两行以便复制到新表格
                    // 保存前两行以便复制到新表格
                    if (rows.size() >= 2) {
            if (rows.size() >= 3) {
                        firstTwoRows.add(rows.get(0));
                        firstTwoRows.add(rows.get(1));
                endRows.add(rows.get(rows.size() - 1));
                    }
                    for (RowRenderData row : rows) {
                        double rowHeight = row.getRowStyle().getHeight(); // 获取当前行的行高
                        totalHeight += rowHeight; // 更新总行高
                        if (totalHeight >= heightThreshold) {
                rowHeight = calculateRowHeight(row); // 自定义方法计算行高
                if (totalHeight + rowHeight > pageHeightLimit) {
                    tableRenderData.getRows().addAll(endRows);
                            // 创建新表格并复制前两行
                            TableRenderData newTableRenderData = new TableRenderData();
                            newTableRenderData.setRows(new ArrayList<>(firstTwoRows));
@@ -1224,8 +1289,9 @@
                            newTableRenderData.setTableStyle(tableStyle);
                            tables1.add(tableRenderData);
                            tableRenderData = newTableRenderData;
                            totalHeight = rowHeight;
                    totalHeight = 0;
                        }
                totalHeight += rowHeight;
                        tableRenderData.getRows().add(row);
                    }
                    if (!tableRenderData.getRows().isEmpty()) {
@@ -1252,643 +1318,7 @@
                        tables.add(tableMap);
                    });
                });
            });
            /*光纤接头损耗的报告样式*/
            //查询订单下所有样品的检验项目,如果有光纤接头损耗则重新构建表格
            List<Map<String, Object>> tables4 = new ArrayList<>();
            List<InsProduct> insProducts0 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList())));
            if (insProducts0.stream().map(InsProduct::getInspectionItem).collect(Collectors.toList()).contains("光纤接头损耗")) {
                //清空原有的基础表格
                tables.clear();
                //去重的检验项目
                List<String> filteredProducts = insProducts0.stream().map(insProduct -> {
                    return (insProduct.getInspectionItem() + "," + insProduct.getInspectionItemEn() + "," + insProduct.getInspectionItemSubclass() + "," + insProduct.getInspectionItemSubclassEn() + "," + insProduct.getTell());
                }).distinct().collect(Collectors.toList());
                //检验项目的总数量(去重)
                long size = filteredProducts.size();
                long number = 10;
                long number2 = 7;
                long index = 1;
                //检验结果报告(当检验项目超过10个新建表)
                for (long i = 0; i < size; i++) {
                    if (i % number == 0) {
                        List<RowRenderData> rows = new ArrayList<>();
                        //表格的行数 × √ ✖ ✔
                        long count1 = size - (index - 1) * number < number ? size - (index - 1) * number + 3 : number + 3;
                        for (int j = 0; j < count1; j++) {
                            RowRenderData rowRenderData = new RowRenderData();
                            RowStyle rowStyle = new RowStyle();
                            rowStyle.setHeight(40);
                            rowRenderData.setRowStyle(rowStyle);
                            List<CellRenderData> cells = new ArrayList<>();
                            //表格的列数
                            for (int k = 0; k < 6; k++) {
                                CellRenderData cellRenderData = new CellRenderData();
                                CellStyle cellStyle = new CellStyle();
                                cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                                cellRenderData.setCellStyle(cellStyle);
                                List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                                ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                                ParagraphStyle paragraphStyle = new ParagraphStyle();
                                paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                                paragraphRenderData.setParagraphStyle(paragraphStyle);
                                List<RenderData> renderData = new ArrayList<>();
                                TextRenderData textRenderData = new TextRenderData();
                                Style style = new Style();
                                style.setFontFamily("宋体");
                                style.setColor("000000");
                                textRenderData.setStyle(style);
                                if (j == 0) {
                                    //第一行
                                    if (k < 4) {
                                        //前4列
                                        textRenderData.setText("规格型号@Type∑11");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //后2列
                                        textRenderData.setText(insSamples.get(0).getModel() + "∑12");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                } else if (j == 1) {
                                    //第二行
                                    if (k == 0) {
                                        //第一列
                                        textRenderData.setText("序号@No.∑13");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 1) {
                                        //第二列
                                        textRenderData.setText("检验项目@Test Item∑14");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 2 || k == 3) {
                                        //第三四列
                                        textRenderData.setText("标准要求@Requirement∑15");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 4) {
                                        //第五列
                                        textRenderData.setText("检验结果@Test result∑16");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //第六列
                                        textRenderData.setText("结论@Conclusion∑17");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                } else if (j == count1 - 1) {
                                    //最后一行
                                    if (k == 0 || k == 1) {
                                        //前两列
                                        textRenderData.setText("备注∑18");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        textRenderData.setText("“√”表示项目合格,“×”表示项目不合格@“√”indicates test Item is qualified,“×”indicates test Item is unqualified∑19");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                } else {
                                    if (k == 0) {
                                        //第一列
                                        textRenderData.setText((j - 1) + "");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 1) {
                                        //第二列
                                        String insProduct;
                                        try {
                                            insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1)));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = insProduct.split(",");
                                        if (ObjectUtils.isEmpty(split[1]) || split[1].equals("")) {
                                            textRenderData.setText(split[0]);
                                        } else {
                                            textRenderData.setText(split[0] + "@" + split[1]);
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 2) {
                                        //第三列
                                        //先判断检验项是否有子类
                                        String insProduct;
                                        try {
                                            insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1)));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = insProduct.split(",");
                                        if (ObjectUtils.isEmpty(split[2]) || split[2].equals("")) {
                                            //如果没有子类
                                            textRenderData.setText(split[4] + "∑2" + j);//要求描述
                                        } else {
                                            //如果有子类
                                            //还要判断是否有英文
                                            if (ObjectUtils.isEmpty(split[3]) || split[3].equals("")) {
                                                textRenderData.setText(split[2]);//检验子项
                                            } else {
                                                textRenderData.setText(split[2] + "@" + split[3]);//检验子项+英文
                                            }
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 3) {
                                        //第四列
                                        //先判断检验项是否有子类
                                        String insProduct;
                                        try {
                                            insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1)));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = insProduct.split(",");
                                        if (ObjectUtils.isEmpty(split[2]) || split[2].equals("")) {
                                            //如果没有子类
                                            textRenderData.setText(split[4] + "∑2" + j);//要求描述
                                        } else {
                                            //如果有子类
                                            textRenderData.setText(split[4]);//要求描述
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 4) {
                                        //第五列
                                        String insProduct;
                                        try {
                                            insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1)));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = insProduct.split(",");
                                        //查询所有样品该检验项的检验结果(最终值)
                                        List<InsProduct> products = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState, 1)
                                                .eq(InsProduct::getInspectionItem, split[0])
                                                .eq(InsProduct::getInspectionItemSubclass, split[2])
                                                .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList())));
                                        //获取最小值和最大值
                                        Optional<String> max = products.stream().map(InsProduct::getLastValue)
                                                .filter(value -> !value.isEmpty())
                                                .max(String::compareTo);
                                        Optional<String> min = products.stream().map(InsProduct::getLastValue)
                                                .filter(value -> !value.isEmpty())
                                                .min(String::compareTo);
                                        textRenderData.setText(min.get() + "-" + max.get());//检验结果
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //最后一列
                                        String insProduct;
                                        try {
                                            insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1)));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = insProduct.split(",");
                                        //查询所有样品该检验项的检验结论(ins_result)
                                        List<InsProduct> products = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState, 1)
                                                .eq(InsProduct::getInspectionItem, split[0])
                                                .eq(InsProduct::getInspectionItemSubclass, split[2])
                                                .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList())));
                                        List<Integer> result = products.stream().map(InsProduct::getInsResult).distinct().collect(Collectors.toList());
                                        if (result.size() == 1 && result.contains(1)) {
                                            //合格
                                            textRenderData.setText("√");
                                        } else {
                                            //不合格
                                            textRenderData.setText("×");
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                }
                            }
                            rowRenderData.setCells(cells);
                            if (rowRenderData.getCells().size() != 0) {
                                rows.add(rowRenderData);
                            }
                        }
                        TableRenderData tableRenderData = new TableRenderData();
                        tableRenderData.setRows(rows);
                        int countSize = tableRenderData.getRows().get(0).getCells().size();
                        for (RowRenderData row : tableRenderData.getRows()) {
                         /* for (CellRenderData cell : row.getCells()) {
                              System.out.print(cell.getParagraphs().get(0).getContents());
                          }
                          System.out.println("");*/
                            if (row.getCells().size() != countSize) {
                                throw new ErrorException("每行单元格不相等1");
                            }
                        }
                        TableStyle tableStyle = new TableStyle();
                        tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                        tableStyle.setAlign(TableRowAlign.CENTER);
                        BorderStyle borderStyle = new BorderStyle();
                        borderStyle.setColor("000000");
                        borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                        borderStyle.setSize(14);
                        tableStyle.setLeftBorder(borderStyle);
                        tableStyle.setTopBorder(borderStyle);
                        tableStyle.setRightBorder(borderStyle);
                        tableStyle.setBottomBorder(borderStyle);
                        tableRenderData.setTableStyle(tableStyle);
                        Map<String, Object> table = new HashMap<>();
                        table.put("table", tableRenderData);
                        table.put("report", insReport);
                        table.put("index", index);
                        tables.add(table);
                        index++;
                    }
                }
                long index4 = 1;
                //检验报告报告(当检验项目超过7个新建表)
                for (long j = 0; j < size; j++) {
                    if (j % number2 == 0) {
                        List<RowRenderData> rows = new ArrayList<>();
                        //表格的行数(根据样品数量来)
                        for (int i = 0; i < samples.size() + 2; i++) {
                            RowRenderData rowRenderData = new RowRenderData();
                            RowStyle rowStyle = new RowStyle();
                            rowStyle.setHeight(40);
                            rowRenderData.setRowStyle(rowStyle);
                            List<CellRenderData> cells = new ArrayList<>();
                            //表格的列数
                            for (int k = 0; k < 8; k++) {
                                CellRenderData cellRenderData = new CellRenderData();
                                CellStyle cellStyle = new CellStyle();
                                cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                                cellRenderData.setCellStyle(cellStyle);
                                List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                                ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                                ParagraphStyle paragraphStyle = new ParagraphStyle();
                                paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                                paragraphRenderData.setParagraphStyle(paragraphStyle);
                                List<RenderData> renderData = new ArrayList<>();
                                TextRenderData textRenderData = new TextRenderData();
                                Style style = new Style();
                                style.setFontFamily("宋体");
                                style.setColor("000000");
                                textRenderData.setStyle(style);
                                if (i == 0) {
                                    //第一行
                                    if (k == 0) {
                                        //第一列
                                        textRenderData.setText("样品编号@Sample number∑30");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //第二列
                                        String product;
                                        try {
                                            product = filteredProducts.get((int) ((k - 1) + (index4 - 1) * 7));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = product.split(",");
                                        if (ObjectUtils.isEmpty(split[2]) || split[2].equals("")) {
                                            if (ObjectUtils.isEmpty(split[1]) || split[1].equals("")) {
                                                textRenderData.setText(split[0] + "∑3" + k);
                                            } else {
                                                textRenderData.setText(split[0] + "@" + split[1] + "∑3" + k);
                                            }
                                        } else {
                                            if (ObjectUtils.isEmpty(split[1]) || split[1].equals("")) {
                                                textRenderData.setText(split[0]);
                                            } else {
                                                textRenderData.setText(split[0] + "@" + split[1]);
                                            }
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                } else if (i == 1) {
                                    //第二行
                                    if (k == 0) {
                                        //第一列
                                        textRenderData.setText("样品编号@Sample number∑30");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //第二列
                                        String product;
                                        try {
                                            product = filteredProducts.get((int) ((k - 1) + (index4 - 1) * 7));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = product.split(",");
                                        if (ObjectUtils.isEmpty(split[2]) || split[2].equals("")) {
                                            if (ObjectUtils.isEmpty(split[1]) || split[1].equals("")) {
                                                textRenderData.setText(split[0] + "∑3" + k);
                                            } else {
                                                textRenderData.setText(split[0] + "@" + split[1] + "∑3" + k);
                                            }
                                        } else {
                                            if (ObjectUtils.isEmpty(split[3]) || split[3].equals("")) {
                                                textRenderData.setText(split[2]);
                                            } else {
                                                textRenderData.setText(split[2] + "@" + split[3]);
                                            }
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                } else {
                                    if (k == 0) {
                                        //第一列
                                        textRenderData.setText(samples.get(i - 2).getSampleCode());
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //根据样品编号和项目去查询最终值
                                        String product;
                                        try {
                                            product = filteredProducts.get((int) ((k - 1) + (index4 - 1) * 7));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        String[] split = product.split(",");
                                        InsProduct insProduct = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState, 1)
                                                .eq(InsProduct::getInsSampleId, samples.get(i - 2).getId())
                                                .eq(InsProduct::getInspectionItem, split[0])
                                                .eq(InsProduct::getInspectionItemSubclass, split[2]));
                                        if (ObjectUtils.isEmpty(insProduct)) {
                                            //可能根据正常的样品编号和光纤接头损耗的项目查不到对应的项目,则需要根据"/"来查
                                            List<InsSample> sampleList = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().like(InsSample::getSampleCode, samples.get(i - 2).getSampleCode()));
                                            List<InsProduct> products = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState, 1)
                                                    .in(InsProduct::getInsSampleId, sampleList.stream().map(InsSample::getId).collect(Collectors.toList()))
                                                    .eq(InsProduct::getInspectionItem, split[0])
                                                    .eq(InsProduct::getInspectionItemSubclass, split[2]));
                                            insProduct = products.get(0);
                                        }
                                        textRenderData.setText(insProduct.getLastValue());
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                }
                            }
                            rowRenderData.setCells(cells);
                            if (rowRenderData.getCells().size() != 0) {
                                rows.add(rowRenderData);
                            }
                        }
                        TableRenderData tableRenderData = new TableRenderData();
                        tableRenderData.setRows(rows);
                        int countSize = tableRenderData.getRows().get(0).getCells().size();
                        for (RowRenderData row : tableRenderData.getRows()) {
                                /*for (CellRenderData cell : row.getCells()) {
                                    System.out.print(cell.getParagraphs().get(0).getContents());
                                }
                                System.out.println("");*/
                            if (row.getCells().size() != countSize) {
                                throw new ErrorException("每行单元格不相等2");
                            }
                        }
                        TableStyle tableStyle = new TableStyle();
                        tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                        tableStyle.setAlign(TableRowAlign.CENTER);
                        BorderStyle borderStyle = new BorderStyle();
                        borderStyle.setColor("000000");
                        borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                        borderStyle.setSize(14);
                        tableStyle.setLeftBorder(borderStyle);
                        tableStyle.setTopBorder(borderStyle);
                        tableStyle.setRightBorder(borderStyle);
                        tableStyle.setBottomBorder(borderStyle);
                        tableRenderData.setTableStyle(tableStyle);
                        Map<String, Object> table = new HashMap<>();
                        table.put("table4", tableRenderData);
                        table.put("report", insReport);
                        table.put("index4", index4);
                        tables4.add(table);
                        index4++;
                    }
                }
                //光纤接头损耗的报告还是tables4
                //查询样品(只查询带"/")的数量
                List<InsSample> sampleList = insSamples.stream().filter(insSample -> insSample.getSampleCode().contains("/")).collect(Collectors.toList());
                //过滤出光纤接头损耗的检验项目
                List<String> strings = filteredProducts.stream().filter(s -> s.contains("光纤接头损耗")).distinct().collect(Collectors.toList());
                long index41 = 1;
                for (int i = 0; i < sampleList.size(); i++) {
                    if (i % 16 == 0) {
                        //样品数量超过16需要新增表格
                        List<RowRenderData> rows = new ArrayList<>();
                        int count2 = sampleList.size() - (index41 - 1) * 16 < 16 ? (int) (sampleList.size() - (index41 - 1) * 16 + 1) : 17;
                        //表格的行数
                        for (int j = 0; j < count2; j++) {
                            RowRenderData rowRenderData = new RowRenderData();
                            RowStyle rowStyle = new RowStyle();
                            rowStyle.setHeight(40);
                            rowRenderData.setRowStyle(rowStyle);
                            List<CellRenderData> cells = new ArrayList<>();
                            //表格的列数
                            for (int k = 0; k < 6; k++) {
                                CellRenderData cellRenderData = new CellRenderData();
                                CellStyle cellStyle = new CellStyle();
                                cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                                cellRenderData.setCellStyle(cellStyle);
                                List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                                ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                                ParagraphStyle paragraphStyle = new ParagraphStyle();
                                paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                                paragraphRenderData.setParagraphStyle(paragraphStyle);
                                List<RenderData> renderData = new ArrayList<>();
                                TextRenderData textRenderData = new TextRenderData();
                                Style style = new Style();
                                style.setFontFamily("宋体");
                                style.setColor("000000");
                                textRenderData.setStyle(style);
                                if (j == 0) {
                                    //第一行
                                    if (k == 0) {
                                        //第一列
                                        textRenderData.setText("光纤类型@Fiber type");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 1 || k == 2) {
                                        //第二 三列
                                        textRenderData.setText("样品编号@Sample number");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        String[] split = strings.get(k - 3).split(",");
                                        if (ObjectUtils.isEmpty(split[3]) || split[3].equals("")) {
                                            textRenderData.setText(split[2]);
                                        } else {
                                            textRenderData.setText(split[2] + "@" + split[3]);
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                } else {
                                    if (k == 0) {
                                        //第一列
                                        textRenderData.setText(sampleList.get(0).getModel() + "∑44");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 1) {
                                        //第二列
                                        textRenderData.setText(sampleList.get(j - 1).getSampleCode().split("/")[0]);
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (k == 2) {
                                        //第三列
                                        textRenderData.setText(sampleList.get(j - 1).getSampleCode().split("/")[1]);
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //根据对应的样品编号和检验项目查询对应数据(最终值)
                                        String[] split = strings.get(k - 3).split(",");
                                        InsProduct insProduct = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState, 1)
                                                .eq(InsProduct::getInsSampleId, sampleList.get(j - 1).getId())
                                                .eq(InsProduct::getInspectionItem, split[0])
                                                .eq(InsProduct::getInspectionItemSubclass, split[2]));
                                        textRenderData.setText(insProduct.getLastValue());
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                }
                            }
                            rowRenderData.setCells(cells);
                            if (rowRenderData.getCells().size() != 0) {
                                rows.add(rowRenderData);
                            }
                        }
                        TableRenderData tableRenderData = new TableRenderData();
                        tableRenderData.setRows(rows);
                        int countSize = tableRenderData.getRows().get(0).getCells().size();
                        for (RowRenderData row : tableRenderData.getRows()) {
                                /*for (CellRenderData cell : row.getCells()) {
                                    System.out.print(cell.getParagraphs().get(0).getContents());
                                }
                                System.out.println("");*/
                            if (row.getCells().size() != countSize) {
                                throw new ErrorException("每行单元格不相等3");
                            }
                        }
                        TableStyle tableStyle = new TableStyle();
                        tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                        tableStyle.setAlign(TableRowAlign.CENTER);
                        BorderStyle borderStyle = new BorderStyle();
                        borderStyle.setColor("000000");
                        borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                        borderStyle.setSize(14);
                        tableStyle.setLeftBorder(borderStyle);
                        tableStyle.setTopBorder(borderStyle);
                        tableStyle.setRightBorder(borderStyle);
                        tableStyle.setBottomBorder(borderStyle);
                        tableRenderData.setTableStyle(tableStyle);
                        Map<String, Object> table = new HashMap<>();
                        table.put("table4", tableRenderData);
                        table.put("report", insReport);
                        table.put("index4", index4 + 1);
                        tables4.add(table);
                        index4++;
                        index41++;
                    }
                }
                tables4.forEach(table4 -> {
                    table4.put("tableSize4", tables4.size());
                });
            }
            String url;
            try {
                InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
@@ -1936,7 +1366,8 @@
            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();
        Integer userId = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery()
                .eq(InsSampleUser::getInsSampleId, orderId).last("limit 1")).getUserId();
            String signatureUrl;
            try {
                signatureUrl = userMapper.selectById(userId).getSignatureUrl();
@@ -1956,2393 +1387,6 @@
                resultEn.set("According to commissioned requirements, all the tested items meet the requirements.");
            }
            /*光纤配置的检验报告*/
            //先判断是否有光纤配置
            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))
                    .isNotNull(InsProduct::getInsFiberId)
                    .isNull(InsProduct::getInspectionItemClass));//用检验分项字段区别光纤配置与温度循环
            List<Map<String, Object>> tables2 = new ArrayList<>();
            if (insProducts.size() > 0) {
                samples.forEach(sample -> {
                    List<InsProduct> insProducts1 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                            .eq(InsProduct::getState, 1)
                            .eq(InsProduct::getInsSampleId, sample.getId())
                            .isNotNull(InsProduct::getInsFiberId)
                            .isNull(InsProduct::getInspectionItemClass));
                    List<InsProduct> filteredProducts = insProducts1.stream()
                            .collect(Collectors.groupingBy(product -> product.getInspectionItem() + product.getInspectionItemSubclass()))
                            .values().stream()
                            .map(group -> group.get(0))
                            .sorted(Comparator.comparing(InsProduct::getInspectionItem))
                            .collect(Collectors.toList());
                    long size = insProducts1.stream().map(insProduct -> {
                        return (insProduct.getInspectionItem() + insProduct.getInspectionItemSubclass());
                    }).distinct().collect(Collectors.toList()).size();
                    long size2 = insProducts1.stream().map(InsProduct::getInsFiberId).distinct().count();
                    long number = 7;
                    long k = 0;
                    long index2 = 1;
                    for (long c = 0; c < size; c++) {
                        if (c % number == 0) {
                            List<RowRenderData> rows = new ArrayList<>();
                            //判断检验项目是否有父子关系
                            Boolean state = true;
                            for (InsProduct insProduct : filteredProducts) {
                                if (!insProduct.getInspectionItemSubclass().equals("") && insProduct.getInspectionItemSubclass() != null) {
                                    state = false;
                                }
                            }
                            int a = 1;
                            if (!state) {
                                a = 2;
                            }
                            //表格的行数
                            for (long i = 0; i < size2 + a; i++) {
                                RowRenderData rowRenderData = new RowRenderData();
                                RowStyle rowStyle = new RowStyle();
                                rowStyle.setHeight(40);
                                rowRenderData.setRowStyle(rowStyle);
                                List<CellRenderData> cells = new ArrayList<>();
                                //表格的列数
                                for (long j = 0; j < 9; j++) {
                                    CellRenderData cellRenderData = new CellRenderData();
                                    CellStyle cellStyle = new CellStyle();
                                    cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                                    cellRenderData.setCellStyle(cellStyle);
                                    List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                                    ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                                    ParagraphStyle paragraphStyle = new ParagraphStyle();
                                    paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                                    paragraphRenderData.setParagraphStyle(paragraphStyle);
                                    List<RenderData> renderData = new ArrayList<>();
                                    TextRenderData textRenderData = new TextRenderData();
                                    Style style = new Style();
                                    style.setFontFamily("宋体");
                                    style.setColor("000000");
                                    textRenderData.setStyle(style);
                                    if (i == 0) {
                                        //第一行
                                        if (j == 0) {
                                            //第一列
                                            textRenderData.setText("管色标@Pipe∑100");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二列
                                            textRenderData.setText("光纤色标@Scanning Number∑101");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //项目信息
                                            try {
                                                filteredProducts.get((int) (j - 2 + k));
                                            } catch (Exception e) {
                                                continue;
                                            }
                                            textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getInspectionItem() + "@" + insProducts1.get((int) (j - 2 + k)).getInspectionItemEn() + "∑" + (j + 101 + k));
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    } else if (a == 2 && i == 1) {
                                        //有父子项目关系的第三行
                                        if (j == 0) {
                                            //第一列
                                            textRenderData.setText("管色标@Pipe∑100");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二列
                                            textRenderData.setText("光纤色标@Scanning Number∑101");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //项目信息
                                            try {
                                                filteredProducts.get((int) (j - 2 + k));
                                            } catch (Exception e) {
                                                continue;
                                            }
                                            //判断是否有项目子类
                                            if (filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclass().equals("") || filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclass() == null) {
                                                textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getInspectionItem() + "@" + filteredProducts.get((int) (j - 2 + k)).getInspectionItemEn() + "∑" + (j + 101 + k));
                                            } else {
                                                textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclass() + "@" + filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclassEn());
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    } else {
                                        int aa;
                                        if (a == 2) {
                                            aa = (int) i - 2;
                                        } else aa = (int) i - 1;
                                        List<Integer> list = insProducts1.stream().map(InsProduct::getInsFiberId).distinct().collect(Collectors.toList());
                                        try {
                                            insFiberMapper.selectById(list.get(aa));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        InsFiber insFiber = insFiberMapper.selectById(list.get(aa));
                                        //填值
                                        if (j == 0) {
                                            //第一列
                                            textRenderData.setText(insFiber.getBushColor());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二列
                                            textRenderData.setText(insFiber.getColor());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //项目信息
                                            try {
                                                filteredProducts.get((int) (j - 2 + k));
                                            } catch (Exception e) {
                                                continue;
                                            }
                                            textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getLastValue());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    }
                                }
                                rowRenderData.setCells(cells);
                                if (rowRenderData.getCells().size() != 0) {
                                    rows.add(rowRenderData);
                                }
                            }
                            TableRenderData tableRenderData = new TableRenderData();
                            tableRenderData.setRows(rows);
                            int countSize = tableRenderData.getRows().get(0).getCells().size();
                            for (RowRenderData row : tableRenderData.getRows()) {
                                /*for (CellRenderData cell : row.getCells()) {
                                    System.out.print(cell.getParagraphs().get(0).getContents());
                                }
                                System.out.println("");*/
                                if (row.getCells().size() != countSize) {
                                    throw new ErrorException("每行单元格不相等4");
                                }
                            }
                            TableStyle tableStyle = new TableStyle();
                            tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                            tableStyle.setAlign(TableRowAlign.CENTER);
                            BorderStyle borderStyle = new BorderStyle();
                            borderStyle.setColor("000000");
                            borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                            borderStyle.setSize(14);
                            tableStyle.setLeftBorder(borderStyle);
                            tableStyle.setTopBorder(borderStyle);
                            tableStyle.setRightBorder(borderStyle);
                            tableStyle.setBottomBorder(borderStyle);
                            tableRenderData.setTableStyle(tableStyle);
                            Map<String, Object> table = new HashMap<>();
                            table.put("table2", tableRenderData);
                            table.put("report", insReport);
                            table.put("sample_number", sample.getSampleCode());
                            table.put("type", sample.getModel());
                            table.put("index2", index2);
                            tables2.add(table);
                            k += 7;
                            index2++;
                        }
                    }
                });
            }
            tables2.forEach(table2 -> {
                table2.put("tableSize2", tables2.size());
            });
            /*温度循环的检验报告*/
            //先判断是否有温度循环
            List<InsProduct> insProducts3 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))
                    .isNull(InsProduct::getTemplateId)  //区分常规项目
                    .isNotNull(InsProduct::getInspectionItemClass)//用检验分项字段区别光纤配置与温度循环
                    .isNotNull(InsProduct::getInsFiberId)); //用光纤区别热循环和温度循环
            List<Map<String, Object>> tables3 = new ArrayList<>();
            if (insProducts3.size() > 0) {
                samples.forEach(sample -> {
                    //查询温度循环下的检验项目
                    List<InsProduct> insPros = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                            .eq(InsProduct::getState, 1)
                            .eq(InsProduct::getInsSampleId, sample.getId())
                            .isNotNull(InsProduct::getInsFiberId)
                            .isNotNull(InsProduct::getInspectionItemClass));
                    //获取所有检验项目,按照循环次数,色标,温度,nm进行排序
                    Map<String, Integer> temperatureToIdMap = new HashMap<>();
                    for (InsProduct product : insPros) {
                        String temperature = product.getInspectionItemSubclass();
                        int id = product.getId();
                        temperatureToIdMap.putIfAbsent(temperature, id);
                        if (temperatureToIdMap.get(temperature) > id) {
                            temperatureToIdMap.put(temperature, id);
                        }
                    }
                    // 自定义排序
                    Collections.sort(insPros, new Comparator<InsProduct>() {
                        @Override
                        public int compare(InsProduct p1, InsProduct p2) {
                            // 首先按getInspectionItem排序
                            int result = p1.getInspectionItem().compareTo(p2.getInspectionItem());
                            if (result != 0) {
                                return result;
                            }
                            // 如果getInspectionItem相等,再按getInsFiberId排序
                            result = p1.getInsFiberId().compareTo(p2.getInsFiberId());
                            if (result != 0) {
                                return result;
                            }
                            // 如果getInsFiberId也相等,最后按getInspectionItemSubclass排序
                            return compareTemperature(p1.getInspectionItemSubclass(), p2.getInspectionItemSubclass());
                        }
                        private int compareTemperature(String temp1, String temp2) {
                            // 根据温度对应的id进行排序
                            int id1 = temperatureToIdMap.get(temp1);
                            int id2 = temperatureToIdMap.get(temp2);
                            return Integer.compare(id1, id2);
                        }
                    });
                    List<InsProduct> filteredProducts = insPros;
                    //获取所有光纤色标
                    List<InsFiber> insFibers = insFiberMapper.selectBatchIds(insPros.stream().map(InsProduct::getInsFiberId).collect(Collectors.toList()));
                    //获取所有的温度(除了第一个20℃(常温))
                    List<String> temperature = insPros.stream().map(InsProduct::getInspectionItemSubclass).filter(s -> !s.equals("20℃(常温)")).distinct().collect(Collectors.toList());
                    //获取所有的温度(除了第一个20℃(常温)和最后一个20℃)
                    List<String> temperature2 = insPros.stream().map(InsProduct::getInspectionItemSubclass).filter(s -> !s.equals("20℃(常温)")).filter(s -> !s.equals("20℃")).distinct().collect(Collectors.toList());
                    //获取所有的光纤项目(1310nm)
                    List<String> nm = insPros.stream().map(InsProduct::getInspectionItemClass).distinct().collect(Collectors.toList());
                    //获取所有检验项目的数量(列数)(这里需要注意两个温度,一个是20℃常温(只有第一次循环才有),另一个是20℃(只有最后一个循环才有))
                    long size = insPros.stream().map(insProduct -> {
                        return (insProduct.getInspectionItemSubclass() + insProduct.getInspectionItemClass());
                    }).distinct().collect(Collectors.toList()).size();
                    //获取循环次数(表格的数量)
                    int size1 = insPros.stream().map(InsProduct::getInspectionItem).distinct().collect(Collectors.toList()).size();
                    //获取光纤色标的数量(行数)
                    long size2 = insPros.stream().map(InsProduct::getInsFiberId).distinct().count();
                    long index3 = 1;
                    for (int i = 0; i < size1; i++) {
                        //按照循环次数生成对应数量的表格
                        List<RowRenderData> rows = new ArrayList<>();
                        //表格的行数(光纤色标的数量+8)
                        for (long j = 0; j < size2 + 8; j++) {
                            RowRenderData rowRenderData = new RowRenderData();
                            RowStyle rowStyle = new RowStyle();
                            rowStyle.setHeight(40);
                            rowRenderData.setRowStyle(rowStyle);
                            List<CellRenderData> cells = new ArrayList<>();
                            //表格的列数需要根据循环的次数对应的改变
                            if (size1 == 1) {
                                //如果只循环一次,那么列数包括20℃和20℃常温(2 * size - nm.size()+1)
                                for (long k = 0; k < 2 * size - nm.size() + 1; k++) {
                                    CellRenderData cellRenderData = new CellRenderData();
                                    CellStyle cellStyle = new CellStyle();
                                    cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                                    cellRenderData.setCellStyle(cellStyle);
                                    List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                                    ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                                    ParagraphStyle paragraphStyle = new ParagraphStyle();
                                    paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                                    paragraphRenderData.setParagraphStyle(paragraphStyle);
                                    List<RenderData> renderData = new ArrayList<>();
                                    TextRenderData textRenderData = new TextRenderData();
                                    Style style = new Style();
                                    style.setFontFamily("宋体");
                                    style.setColor("000000");
                                    textRenderData.setStyle(style);
                                    if (j == 0) {
                                        //第一行
                                        if (k <= (2 * size - nm.size() + 1) / 4) {
                                            //第一列
                                            textRenderData.setText("样品编号@Sample number∑1000");
                                        } else if (k > (2 * size - nm.size() + 1) / 4 && k <= (2 * size - nm.size() + 1) / 2) {
                                            //第二列
                                            textRenderData.setText(sample.getSampleCode() + "∑998");
                                        } else if (k > (2 * size - nm.size() + 1) / 2 && k < 2 * size - nm.size()) {
                                            //第三列
                                            textRenderData.setText("规格型号@Type ∑999");
                                        } else {
                                            //第四列
                                            textRenderData.setText(sample.getModel());
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (j == 1) {
                                        //第二行
                                        if (k == 0) {
                                            //第一列
                                            textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                        } else {
                                            textRenderData.setText("检测结果(循环" + (i + 1) + ")∑1005");
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (j == 2) {
                                        //第三行
                                        if (k == 0) {
                                            //第一列
                                            textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (k > 0 && k <= nm.size()) {
                                            //第二列
                                            textRenderData.setText("20℃(常温)∑1006");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //根据温度循环
                                            for (int i1 = 0; i1 < temperature.size(); i1++) {
                                                if (k > (2 * i1 + 1) * nm.size() && k <= (2 * i1 + 3) * nm.size()) {
                                                    //第三列
                                                    textRenderData.setText(temperature.get(i1) + "∑52" + i1);
                                                    renderData.add(textRenderData);
                                                    paragraphRenderData.setContents(renderData);
                                                    paragraphRenderDataList.add(paragraphRenderData);
                                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                                    cells.add(cellRenderData);
                                                }
                                            }
                                        }
                                    } else if (j == 3) {
                                        //第四行
                                        if (k == 0) {
                                            //第一列
                                            textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (k > 0 && k <= nm.size()) {
                                            //第二列和第三列
                                            for (int i1 = 0; i1 < nm.size(); i1++) {
                                                if (k == i1 + 1) {
                                                    textRenderData.setText(nm.get(i1));
                                                    renderData.add(textRenderData);
                                                    paragraphRenderData.setContents(renderData);
                                                    paragraphRenderDataList.add(paragraphRenderData);
                                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                                    cells.add(cellRenderData);
                                                }
                                            }
                                        } else {
                                            for (int j1 = 0; j1 < temperature.size(); j1++) {
                                                for (int i1 = 0; i1 < nm.size(); i1++) {
                                                    if (k > (i1 + 1 + 2 * j1) * nm.size() && k <= (i1 + 1 + 2 * j1) * nm.size() + 2) {
                                                        textRenderData.setText(nm.get(i1));
                                                        renderData.add(textRenderData);
                                                        paragraphRenderData.setContents(renderData);
                                                        paragraphRenderDataList.add(paragraphRenderData);
                                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                                        cells.add(cellRenderData);
                                                    }
                                                }
                                            }
                                        }
                                    } else if (j == 4) {
                                        //第五行
                                        if (k == 0) {
                                            //第一列
                                            textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (k > 0 && k <= nm.size()) {
                                            //第二列和第三列
                                            textRenderData.setText("衰减");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (k > nm.size() && (k - (nm.size())) % 2 == 0) {
                                            textRenderData.setText("|∆ α|");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            textRenderData.setText("衰减");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    } else if (j == size2 + 5) {
                                        //倒数第三行
                                        if (k == 0) {
                                            //第一列
                                            textRenderData.setText("|max|");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (k <= nm.size()) {
                                            //计算20℃常温的第(k-1)个项目的所有色标的平均值的最大值
                                            List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .isNotNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, i + 1)
                                                    .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)")
                                                    .eq(InsProduct::getInspectionItemClass, nm.get((int) (k - 1)))).stream().map(InsProduct::getId).collect(Collectors.toList());
                                            List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                            Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                                return insProductResult.getComValue().split(":")[1].split("\"")[1];
                                            }).filter(value -> !value.isEmpty())
                                                    .max(String::compareTo);
                                            if (max.isPresent()) {
                                                textRenderData.setText(max.get());
                                            } else {
                                                textRenderData.setText("");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if ((k - (nm.size())) % 2 == 0) {
                                            //计算第()温度的第()个项目的所有色标的最终值的最大值
                                            Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .isNotNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, i + 1)
                                                    .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k / (nm.size() + 2)) - 1)))
                                                    .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - (nm.size() + 2)) / 2 % nm.size()))))
                                                    .stream().map(InsProduct::getLastValue)
                                                    .filter(value -> !value.isEmpty())
                                                    .max(String::compareTo);
                                            if (max.isPresent()) {
                                                textRenderData.setText(max.get());
                                            } else {
                                                textRenderData.setText("");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //计算第()温度的第()个项目的所有色标的平均值的最大值
                                            List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .isNotNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, i + 1)
                                                    .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (((k + 1) / (nm.size() + 2)) - 1)))
                                                    .eq(InsProduct::getInspectionItemClass, nm.get((int) (((k + 1) - (nm.size() + 2)) / 2 % nm.size())))).stream().map(InsProduct::getId).collect(Collectors.toList());
                                            List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                            Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                                return insProductResult.getComValue().split(":")[1].split("\"")[1];
                                            }).filter(value -> !value.isEmpty()).max(String::compareTo);
                                            if (max.isPresent()) {
                                                textRenderData.setText(max.get());
                                            } else {
                                                textRenderData.setText("");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    } else if (j == size2 + 6) {
                                        //倒数第二行
                                        if (k == 0) {
                                            //第一列
                                            textRenderData.setText("|∆ α max|");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (k <= nm.size()) {
                                            textRenderData.setText("-");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if ((k - (nm.size())) % 2 == 0) {
                                            Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .isNotNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, i + 1)
                                                    .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k / (nm.size() + 2)) - 1)))
                                                    .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - (nm.size() + 2)) / 2 % nm.size()))))
                                                    .stream().map(InsProduct::getLastValue)
                                                    .filter(value -> !value.isEmpty())
                                                    .max(String::compareTo);
                                            if (max.isPresent()) {
                                                textRenderData.setText(max.get());
                                            } else {
                                                textRenderData.setText("");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            textRenderData.setText("-");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    } else if (j == size2 + 7) {
                                        //倒数第一行
                                        textRenderData.setText("“|∆ α|”表示附加衰减绝对值∑111111");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //其余填写检验值的内容
                                        if (k == 0) {
                                            //第一列填写色标
                                            textRenderData.setText(insFibers.get((int) (j - 5)).getColor());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (k <= nm.size()) {
                                            //第二列和第三列填写20℃常温的平均值(result表里面的com_value)
                                            textRenderData.setText(insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size() + 1) * nm.size() + k - 1)).getId())).getComValue().split(":")[1].split("\"")[1]);
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if ((k - (nm.size())) % 2 == 0) {
                                            //填写衰减差就是last_value
                                            textRenderData.setText(filteredProducts.get((int) ((j - 5) * (temperature.size() + 1) * nm.size() + k / 2)).getLastValue());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //填写其余正常温度的衰减(result表里面的com_value)
                                            textRenderData.setText(insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size() + 1) * nm.size() + (k + 1) / 2)).getId())).getComValue().split(":")[1].split("\"")[1]);
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    }
                                }
                                rowRenderData.setCells(cells);
                                if (rowRenderData.getCells().size() != 0) {
                                    rows.add(rowRenderData);
                                }
                            } else {
                                //如果有多次循环
                                if (i == 0) {
                                    //第一次循环的列数,那么列数包括20℃常温(2 * (size-nm.size()) -nm.size()+1)
                                    for (long k = 0; k < 2 * (size - nm.size()) - nm.size() + 1; k++) {
                                        CellRenderData cellRenderData = new CellRenderData();
                                        CellStyle cellStyle = new CellStyle();
                                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                                        cellRenderData.setCellStyle(cellStyle);
                                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                                        ParagraphStyle paragraphStyle = new ParagraphStyle();
                                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                                        paragraphRenderData.setParagraphStyle(paragraphStyle);
                                        List<RenderData> renderData = new ArrayList<>();
                                        TextRenderData textRenderData = new TextRenderData();
                                        Style style = new Style();
                                        style.setFontFamily("宋体");
                                        style.setColor("000000");
                                        textRenderData.setStyle(style);
                                        if (j == 0) {
                                            //第一行
                                            if (k <= (2 * (size - nm.size()) - nm.size() + 1) / 4) {
                                                //第一列
                                                textRenderData.setText("样品编号@Sample number∑1000");
                                            } else if (k > (2 * (size - nm.size()) - nm.size() + 1) / 4 && k <= (2 * (size - nm.size()) - nm.size() + 1) / 2) {
                                                //第二列
                                                textRenderData.setText(sample.getSampleCode() + "∑998");
                                            } else if (k > (2 * (size - nm.size()) - nm.size() + 1) / 2 && k < 2 * (size - nm.size()) - nm.size()) {
                                                //第三列
                                                textRenderData.setText("规格型号@Type∑999");
                                            } else {
                                                //第四列
                                                textRenderData.setText(sample.getModel());
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                            } else {
                                                textRenderData.setText("检测结果(循环" + (i + 1) + ")∑1005");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 2) {
                                            //第三行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k > 0 && k <= nm.size()) {
                                                //第二列
                                                textRenderData.setText("20℃(常温)∑1006");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //根据温度循环
                                                for (int i1 = 0; i1 < temperature2.size(); i1++) {
                                                    if (k > (2 * i1 + 1) * nm.size() && k <= (2 * i1 + 3) * nm.size()) {
                                                        //第三列
                                                        textRenderData.setText(temperature2.get(i1) + "∑52" + i1);
                                                        renderData.add(textRenderData);
                                                        paragraphRenderData.setContents(renderData);
                                                        paragraphRenderDataList.add(paragraphRenderData);
                                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                                        cells.add(cellRenderData);
                                                    }
                                                }
                                            }
                                        } else if (j == 3) {
                                            //第四行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k > 0 && k <= nm.size()) {
                                                //第二列和第三列
                                                for (int i1 = 0; i1 < nm.size(); i1++) {
                                                    if (k == i1 + 1) {
                                                        textRenderData.setText(nm.get(i1));
                                                        renderData.add(textRenderData);
                                                        paragraphRenderData.setContents(renderData);
                                                        paragraphRenderDataList.add(paragraphRenderData);
                                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                                        cells.add(cellRenderData);
                                                    }
                                                }
                                            } else {
                                                for (int j1 = 0; j1 < temperature2.size(); j1++) {
                                                    for (int i1 = 0; i1 < nm.size(); i1++) {
                                                        if (k > (i1 + 1 + 2 * j1) * nm.size() && k <= (i1 + 1 + 2 * j1) * nm.size() + 2) {
                                                            textRenderData.setText(nm.get(i1));
                                                            renderData.add(textRenderData);
                                                            paragraphRenderData.setContents(renderData);
                                                            paragraphRenderDataList.add(paragraphRenderData);
                                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                                            cells.add(cellRenderData);
                                                        }
                                                    }
                                                }
                                            }
                                        } else if (j == 4) {
                                            //第五行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k > 0 && k <= nm.size()) {
                                                //第二列和第三列
                                                textRenderData.setText("衰减");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k > nm.size() && (k - (nm.size())) % 2 == 0) {
                                                textRenderData.setText("|∆ α|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                textRenderData.setText("衰减");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 5) {
                                            //倒数第三行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("|max|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k <= nm.size()) {
                                                //计算20℃常温的第(k-1)个项目的所有色标的平均值的最大值
                                                List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)")
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) (k - 1)))).stream().map(InsProduct::getId).collect(Collectors.toList());
                                                List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                                Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                                    return insProductResult.getComValue().split(":")[1].split("\"")[1];
                                                }).filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if ((k - (nm.size())) % 2 == 0) {
                                                //计算第()温度的第()个项目的所有色标的最终值的最大值
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k / (nm.size() + 2)) - 1)))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - (nm.size() + 2)) / 2 % nm.size()))))
                                                        .stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //计算第()温度的第()个项目的所有色标的平均值的最大值
                                                List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (((k + 1) / (nm.size() + 2)) - 1)))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) (((k + 1) - (nm.size() + 2)) / 2 % nm.size())))).stream().map(InsProduct::getId).collect(Collectors.toList());
                                                List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                                Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                                    return insProductResult.getComValue().split(":")[1].split("\"")[1];
                                                }).filter(value -> !value.isEmpty()).max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 6) {
                                            //倒数第二行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("|∆ α max|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k <= nm.size()) {
                                                textRenderData.setText("-");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if ((k - (nm.size())) % 2 == 0) {
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k / (nm.size() + 2)) - 1)))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - (nm.size() + 2)) / 2 % nm.size()))))
                                                        .stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                textRenderData.setText("-");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 7) {
                                            //倒数第一行
                                            textRenderData.setText("“|∆ α|”表示附加衰减绝对值∑111111");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //其余填写检验值的内容
                                            if (k == 0) {
                                                //第一列填写色标
                                                textRenderData.setText(insFibers.get((int) (j - 5)).getColor());
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k <= nm.size()) {
                                                //第二列和第三列填写20℃常温的平均值(result表里面的com_value)
                                                textRenderData.setText(insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size() + 1) * nm.size() + k - 1)).getId())).getComValue().split(":")[1].split("\"")[1]);
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if ((k - (nm.size())) % 2 == 0) {
                                                //填写衰减差就是last_value
                                                textRenderData.setText(filteredProducts.get((int) ((j - 5) * (temperature.size()) * nm.size() + k / 2)).getLastValue());
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //填写其余正常温度的衰减(result表里面的com_value)
                                                textRenderData.setText(insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size()) * nm.size() + (k + 1) / 2)).getId())).getComValue().split(":")[1].split("\"")[1]);
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        }
                                    }
                                } else if (i == size1 - 1) {
                                    //最后一次循环的列数,那么列数包括20℃(2 * (size-nm.size())+1)
                                    for (long k = 0; k < 2 * (size - nm.size()) + 1; k++) {
                                        CellRenderData cellRenderData = new CellRenderData();
                                        CellStyle cellStyle = new CellStyle();
                                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                                        cellRenderData.setCellStyle(cellStyle);
                                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                                        ParagraphStyle paragraphStyle = new ParagraphStyle();
                                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                                        paragraphRenderData.setParagraphStyle(paragraphStyle);
                                        List<RenderData> renderData = new ArrayList<>();
                                        TextRenderData textRenderData = new TextRenderData();
                                        Style style = new Style();
                                        style.setFontFamily("宋体");
                                        style.setColor("000000");
                                        textRenderData.setStyle(style);
                                        if (j == 0) {
                                            //第一行
                                            if (k <= (2 * (size - nm.size()) + 1) / 4) {
                                                //第一列
                                                textRenderData.setText("样品编号@Sample number∑1000");
                                            } else if (k > (2 * (size - nm.size()) + 1) / 4 && k <= (2 * (size - nm.size()) + 1) / 2) {
                                                //第二列
                                                textRenderData.setText(sample.getSampleCode() + "∑998");
                                            } else if (k > (2 * (size - nm.size()) + 1) / 2 && k < 2 * (size - nm.size())) {
                                                //第三列
                                                textRenderData.setText("规格型号@Type∑999");
                                            } else {
                                                //第四列
                                                textRenderData.setText(sample.getModel());
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                            } else {
                                                textRenderData.setText("检测结果(循环" + (i + 1) + ")∑1005");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 2) {
                                            //第三行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //根据温度循环
                                                for (int i1 = 0; i1 < temperature.size(); i1++) {
                                                    if (k > (2 * i1) * nm.size() && k <= (2 * i1 + 2) * nm.size()) {
                                                        //第三列
                                                        textRenderData.setText(temperature.get(i1) + "∑52" + i1);
                                                        renderData.add(textRenderData);
                                                        paragraphRenderData.setContents(renderData);
                                                        paragraphRenderDataList.add(paragraphRenderData);
                                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                                        cells.add(cellRenderData);
                                                    }
                                                }
                                            }
                                        } else if (j == 3) {
                                            //第四行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                for (int j1 = 0; j1 < temperature.size(); j1++) {
                                                    for (int i1 = 0; i1 < nm.size(); i1++) {
                                                        if (k > (i1 + 2 * j1) * nm.size() && k <= (i1 + 2 * j1) * nm.size() + 2) {
                                                            textRenderData.setText(nm.get(i1));
                                                            renderData.add(textRenderData);
                                                            paragraphRenderData.setContents(renderData);
                                                            paragraphRenderDataList.add(paragraphRenderData);
                                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                                            cells.add(cellRenderData);
                                                        }
                                                    }
                                                }
                                            }
                                        } else if (j == 4) {
                                            //第五行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                textRenderData.setText("|∆ α|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                textRenderData.setText("衰减");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 5) {
                                            //倒数第三行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("|max|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                //计算第()温度的第()个项目的所有色标的最终值的最大值
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k - 1) / (2 * nm.size()))))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - nm.size()) / 2 % nm.size()))))
                                                        .stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //计算第()温度的第()个项目的所有色标的平均值的最大值
                                                List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (k / (2 * nm.size()))))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) (((k + 1) - nm.size()) / 2 % nm.size())))).stream().map(InsProduct::getId).collect(Collectors.toList());
                                                List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                                Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                                    return insProductResult.getComValue().split(":")[1].split("\"")[1];
                                                }).filter(value -> !value.isEmpty()).max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 6) {
                                            //倒数第二行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("|∆ α max|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k - 1) / (2 * nm.size()))))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - nm.size()) / 2 % nm.size()))))
                                                        .stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                textRenderData.setText("-");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 7) {
                                            //倒数第一行
                                            textRenderData.setText("“|∆ α|”表示附加衰减绝对值∑111111");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //其余填写检验值的内容
                                            if (k == 0) {
                                                //第一列填写色标
                                                textRenderData.setText(insFibers.get((int) (j - 5)).getColor());
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                //填写衰减差就是last_value
                                                textRenderData.setText(filteredProducts.get((int) ((j - 5) * (temperature.size()) * nm.size() + ((temperature.size() * nm.size() * size2 * i) - (size2 * nm.size() * (i - 1))) + (k - 2) / 2)).getLastValue());
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //填写其余正常温度的衰减(result表里面的com_value)
                                                textRenderData.setText(insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size()) * nm.size() + ((temperature.size() * nm.size() * size2 * i) - (size2 * nm.size() * (i - 1))) + ((k - 2) + 1) / 2)).getId())).getComValue().split(":")[1].split("\"")[1]);
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        }
                                    }
                                } else {
                                    //其余循环的列数,,那么列数不包括20℃+20℃(常温)(2 * (size- 2*nm.size()) +1)
                                    for (long k = 0; k < 2 * (size - 2 * nm.size()) + 1; k++) {
                                        CellRenderData cellRenderData = new CellRenderData();
                                        CellStyle cellStyle = new CellStyle();
                                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                                        cellRenderData.setCellStyle(cellStyle);
                                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                                        ParagraphStyle paragraphStyle = new ParagraphStyle();
                                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                                        paragraphRenderData.setParagraphStyle(paragraphStyle);
                                        List<RenderData> renderData = new ArrayList<>();
                                        TextRenderData textRenderData = new TextRenderData();
                                        Style style = new Style();
                                        style.setFontFamily("宋体");
                                        style.setColor("000000");
                                        textRenderData.setStyle(style);
                                        if (j == 0) {
                                            //第一行
                                            if (k <= (2 * (size - 2 * nm.size()) + 1) / 4) {
                                                //第一列
                                                textRenderData.setText("样品编号@Sample number∑1000");
                                            } else if (k > (2 * (size - 2 * nm.size()) + 1) / 4 && k <= (2 * (size - 2 * nm.size()) + 1) / 2) {
                                                //第二列
                                                textRenderData.setText(sample.getSampleCode() + "∑998");
                                            } else if (k > (2 * (size - 2 * nm.size()) + 1) / 2 && k < 2 * (size - 2 * nm.size())) {
                                                //第三列
                                                textRenderData.setText("规格型号@Type∑999");
                                            } else {
                                                //第四列
                                                textRenderData.setText(sample.getModel());
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                            } else {
                                                textRenderData.setText("检测结果(循环" + (i + 1) + ")∑1005");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 2) {
                                            //第三行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //根据温度循环
                                                for (int i1 = 0; i1 < temperature2.size(); i1++) {
                                                    if (k > (2 * i1) * nm.size() && k <= (2 * i1 + 2) * nm.size()) {
                                                        //第三列
                                                        textRenderData.setText(temperature2.get(i1) + "∑52" + i1);
                                                        renderData.add(textRenderData);
                                                        paragraphRenderData.setContents(renderData);
                                                        paragraphRenderDataList.add(paragraphRenderData);
                                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                                        cells.add(cellRenderData);
                                                    }
                                                }
                                            }
                                        } else if (j == 3) {
                                            //第四行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                for (int j1 = 0; j1 < temperature2.size(); j1++) {
                                                    for (int i1 = 0; i1 < nm.size(); i1++) {
                                                        if (k > (i1 + 2 * j1) * nm.size() && k <= (i1 + 2 * j1) * nm.size() + 2) {
                                                            textRenderData.setText(nm.get(i1));
                                                            renderData.add(textRenderData);
                                                            paragraphRenderData.setContents(renderData);
                                                            paragraphRenderDataList.add(paragraphRenderData);
                                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                                            cells.add(cellRenderData);
                                                        }
                                                    }
                                                }
                                            }
                                        } else if (j == 4) {
                                            //第五行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                textRenderData.setText("|∆ α|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                textRenderData.setText("衰减");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 5) {
                                            //倒数第三行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("|max|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                //计算第()温度的第()个项目的所有色标的最终值的最大值
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (((k - 1) / (2 * nm.size())))))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - nm.size()) / 2 % nm.size()))))
                                                        .stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //计算第()温度的第()个项目的所有色标的平均值的最大值
                                                List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (k / (2 * nm.size()))))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) (((k + 1) - nm.size()) / 2 % nm.size())))).stream().map(InsProduct::getId).collect(Collectors.toList());
                                                List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                                Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                                    return insProductResult.getComValue().split(":")[1].split("\"")[1];
                                                }).filter(value -> !value.isEmpty()).max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 6) {
                                            //倒数第二行
                                            if (k == 0) {
                                                //第一列
                                                textRenderData.setText("|∆ α max|");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                                        .isNotNull(InsProduct::getInsFiberId)
                                                        .eq(InsProduct::getInspectionItem, i + 1)
                                                        .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k - 1) / (2 * nm.size()))))
                                                        .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - nm.size()) / 2 % nm.size()))))
                                                        .stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                textRenderData.setText("-");
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        } else if (j == size2 + 7) {
                                            //倒数第一行
                                            textRenderData.setText("“|∆ α|”表示附加衰减绝对值∑111111");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //其余填写检验值的内容
                                            if (k == 0) {
                                                //第一列填写色标
                                                textRenderData.setText(insFibers.get((int) (j - 5)).getColor());
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else if (k % 2 == 0) {
                                                //填写衰减差就是last_value
                                                textRenderData.setText(filteredProducts.get((int) ((j - 5) * (temperature.size() - 1) * nm.size() + (temperature.size() * nm.size() * size2) + (k - 2) / 2)).getLastValue());
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            } else {
                                                //填写其余正常温度的衰减(result表里面的com_value)
                                                textRenderData.setText(insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size() - 1) * nm.size() + (temperature.size() * nm.size() * size2) + ((k - 2) + 1) / 2)).getId())).getComValue().split(":")[1].split("\"")[1]);
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        }
                                    }
                                }
                                rowRenderData.setCells(cells);
                                if (rowRenderData.getCells().size() != 0) {
                                    rows.add(rowRenderData);
                                }
                            }
                        }
                        TableRenderData tableRenderData = new TableRenderData();
                        tableRenderData.setRows(rows);
                        int countSize = tableRenderData.getRows().get(0).getCells().size();
                        for (RowRenderData row : tableRenderData.getRows()) {
                            /*for (CellRenderData cell : row.getCells()) {
                                System.out.print(cell.getParagraphs().get(0).getContents());
                            }
                            System.out.println("");*/
                            if (row.getCells().size() != countSize) {
                                throw new ErrorException("每行单元格不相等5");
                            }
                        }
                        TableStyle tableStyle = new TableStyle();
                        tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                        tableStyle.setAlign(TableRowAlign.CENTER);
                        BorderStyle borderStyle = new BorderStyle();
                        borderStyle.setColor("000000");
                        borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                        borderStyle.setSize(14);
                        tableStyle.setLeftBorder(borderStyle);
                        tableStyle.setTopBorder(borderStyle);
                        tableStyle.setRightBorder(borderStyle);
                        tableStyle.setBottomBorder(borderStyle);
                        tableRenderData.setTableStyle(tableStyle);
                        Map<String, Object> table = new HashMap<>();
                        table.put("table3", tableRenderData);
                        table.put("report", insReport);
                        table.put("index3", index3);
                        tables3.add(table);
                        index3++;
                    }
                });
            }
            /*温升试验的检验报告*/
            List<InsProduct> insProducts1 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))
                    .isNull(InsProduct::getTemplateId)  //区分常规项目
                    .isNull(InsProduct::getInspectionItemClass)//用检验分项字段区别温升试验与热循环
                    .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                    .eq(InsProduct::getInspectionItem, "1")); //温升试验的循环只有1次
            if (insProducts1.size() > 0) {
                samples.forEach(sample -> {
                    //查询温升试验下的检验项目
                    List<InsProduct> insPros = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                            .eq(InsProduct::getState, 1)
                            .eq(InsProduct::getInsSampleId, sample.getId())
                            .isNull(InsProduct::getTemplateId)  //区分常规项目
                            .isNull(InsProduct::getInspectionItemClass)//用检验分项字段区别温升试验与热循环
                            .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                            .eq(InsProduct::getInspectionItem, "1")); //温升试验的循环只有1次
                    //查询填写的检验值有多少种
                    InsProductResult insProductResult = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPros.get(0).getId())).get(0);
                    int vCount = StringUtils.countMatches(insProductResult.getInsValue(), "\"v\":\"");
                    long index3 = 1;
                    for (int c = 0; c < vCount; c++) {
                        if (c % 16 == 0) {
                            List<RowRenderData> rows = new ArrayList<>();
                            //表格的行数
                            for (int i = 0; i < 3 + vCount; i++) {
                                RowRenderData rowRenderData = new RowRenderData();
                                RowStyle rowStyle = new RowStyle();
                                rowStyle.setHeight(40);
                                rowRenderData.setRowStyle(rowStyle);
                                List<CellRenderData> cells = new ArrayList<>();
                                String a = null;//导线温度
                                String b = null;//耐张温度
                                String d = null;//接续温度
                                //列数
                                for (int j = 0; j < 6; 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("样品编号@Sample number");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二列
                                            textRenderData.setText(sample.getSampleCode());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 2) {
                                            //第三列
                                            textRenderData.setText("规格型号@Type and size");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 3) {
                                            //第四列
                                            textRenderData.setText(sample.getModel());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 4) {
                                            //第五列
                                            textRenderData.setText("检测项@Testing items");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //第六列
                                            textRenderData.setText("温升试验@Temperature rise test");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    } else if (i == 1) {
                                        //第二行
                                        if (j == 0) {
                                            //第一列
                                            textRenderData.setText("环境温度@Ambient temperature(℃)");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二列
                                            textRenderData.setText("导线温度@Wire temperature(℃)");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 2) {
                                            //第三列
                                            textRenderData.setText("耐张温度@Tensile temperature(℃)");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 3) {
                                            //第四列
                                            textRenderData.setText("接续温度@Connection temperature(℃)");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //第五列第六列
                                            textRenderData.setText("结果判定@Result judgment∑100");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    }
                                    else if (i == 2 + vCount) {
                                        //最后一行
                                        if (j == 0 || j == 1) {
                                            //第一列和第二列
                                            textRenderData.setText("备注∑101");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //其余列
                                            textRenderData.setText("“√”表示项目合格,“×”表示项目不合格。∑102");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    }
                                    else {
                                        //其余行
                                        if (j == 0) {
                                            //第一列(环境温度)
                                            InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState, 1)
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .eq(InsProduct::getInspectionItemSubclass, "环境温度")
                                                    .isNull(InsProduct::getTemplateId)  //区分常规项目
                                                    .isNull(InsProduct::getInspectionItemClass)//用检验分项字段区别温升试验与热循环
                                                    .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                                                    .eq(InsProduct::getInspectionItem, "1")); //温升试验的循环只有1次
                                            String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                            JSONArray jsonArray = JSONArray.parseArray(insValue);
                                            JSONObject jsonObject = jsonArray.getJSONObject(i - 2);
                                            String vValue = jsonObject.getString("v");
                                            System.out.println("环境温度第 " + (i - 1) + " 个 'v' 字段的值是: " + vValue);
                                            textRenderData.setText(vValue);
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                        else if (j == 1) {
                                            //第二列(导线温度)
                                            InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState, 1)
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .eq(InsProduct::getInspectionItemSubclass, "导线温度")
                                                    .isNull(InsProduct::getTemplateId)  //区分常规项目
                                                    .isNull(InsProduct::getInspectionItemClass)//用检验分项字段区别温升试验与热循环
                                                    .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                                                    .eq(InsProduct::getInspectionItem, "1")); //温升试验的循环只有1次
                                            String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                            JSONArray jsonArray = JSONArray.parseArray(insValue);
                                            JSONObject jsonObject = jsonArray.getJSONObject(i - 2);
                                            String vValue = jsonObject.getString("v");
                                            a = vValue;
                                            System.out.println("导线温度第 " + (i - 1) + " 个 'v' 字段的值是: " + vValue);
                                            textRenderData.setText(vValue);
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                        else if (j == 2) {
                                            //第三列(耐张温度)
                                            InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState, 1)
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .eq(InsProduct::getInspectionItemSubclass, "耐张温度")
                                                    .isNull(InsProduct::getTemplateId)  //区分常规项目
                                                    .isNull(InsProduct::getInspectionItemClass)//用检验分项字段区别温升试验与热循环
                                                    .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                                                    .eq(InsProduct::getInspectionItem, "1")); //温升试验的循环只有1次
                                            if (ObjectUtils.isNotEmpty(insPro)) {
                                                String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                JSONObject jsonObject = jsonArray.getJSONObject(i - 2);
                                                String vValue = jsonObject.getString("v");
                                                b = vValue;
                                                System.out.println("耐张温度第 " + (i - 1) + " 个 'v' 字段的值是: " + vValue);
                                                textRenderData.setText(vValue);
                                            } else {
                                                textRenderData.setText("");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                        else if (j == 3) {
                                            //第四列(接续温度)
                                            InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState, 1)
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .eq(InsProduct::getInspectionItemSubclass, "接续温度")
                                                    .isNull(InsProduct::getTemplateId)  //区分常规项目
                                                    .isNull(InsProduct::getInspectionItemClass)//用检验分项字段区别温升试验与热循环
                                                    .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                                                    .eq(InsProduct::getInspectionItem, "1")); //温升试验的循环只有1次
                                            if (ObjectUtils.isNotEmpty(insPro)) {
                                                String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                JSONObject jsonObject = jsonArray.getJSONObject(i - 2);
                                                String vValue = jsonObject.getString("v");
                                                d = vValue;
                                                System.out.println("接续温度第 " + (i - 1) + " 个 'v' 字段的值是: " + vValue);
                                                textRenderData.setText(vValue);
                                            } else {
                                                textRenderData.setText("");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                        else {
                                            //第五列 第六列(结论)
                                            //判断合格与不合格
                                            BigDecimal decimal1 = new BigDecimal(a);
                                            BigDecimal decimal2 = new BigDecimal(b == null ? "0" : b);
                                            BigDecimal decimal3 = new BigDecimal(d == null ? "0" : d);
                                            if (decimal1.compareTo(decimal2) > 0 && decimal1.compareTo(decimal3) > 0) {
                                                textRenderData.setText("√∑20"+i);
                                            } else {
                                                textRenderData.setText("×∑20"+i);
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    }
                                }
                                rowRenderData.setCells(cells);
                                if (rowRenderData.getCells().size() != 0) {
                                    rows.add(rowRenderData);
                                }
                            }
                            TableRenderData tableRenderData = new TableRenderData();
                            tableRenderData.setRows(rows);
                            int countSize = tableRenderData.getRows().get(0).getCells().size();
                            for (RowRenderData row : tableRenderData.getRows()) {
                            /*for (CellRenderData cell : row.getCells()) {
                                System.out.print(cell.getParagraphs().get(0).getContents());
                            }
                            System.out.println("");*/
                                if (row.getCells().size() != countSize) {
                                    throw new ErrorException("每行单元格不相等5");
                                }
                            }
                            TableStyle tableStyle = new TableStyle();
                            tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                            tableStyle.setAlign(TableRowAlign.CENTER);
                            BorderStyle borderStyle = new BorderStyle();
                            borderStyle.setColor("000000");
                            borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                            borderStyle.setSize(14);
                            tableStyle.setLeftBorder(borderStyle);
                            tableStyle.setTopBorder(borderStyle);
                            tableStyle.setRightBorder(borderStyle);
                            tableStyle.setBottomBorder(borderStyle);
                            tableRenderData.setTableStyle(tableStyle);
                            Map<String, Object> table = new HashMap<>();
                            table.put("table3", tableRenderData);
                            table.put("report", insReport);
                            table.put("index3", index3);
                            tables3.add(table);
                            index3++;
                        }
                    }
                });
            }
            /*热循环的检验报告*/
            List<InsProduct> insProducts2 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))
                    .isNull(InsProduct::getTemplateId)  //区分常规项目
                    .isNotNull(InsProduct::getInspectionItemClass)//用检验分项字段区别温升试验与热循环
                    .isNull(InsProduct::getInsFiberId)); //用光纤区别热循环和温度循环
            if (insProducts2.size() > 0) {
                samples.forEach(sample -> {
                    //计算数据的行数,先查出有多少次循环,再查每个循环的填写数量
                    InsProduct insProduct = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                            .eq(InsProduct::getState, 1)
                            .eq(InsProduct::getInsSampleId, sample.getId())
                            .eq(InsProduct::getInspectionItem, "热循环"));
                    String[] split = insProduct.getAsk().split(";");
                    Integer cycle = Integer.parseInt(split[split.length - 1]);//循环次数
                    int vCount = 0;
                    List<Integer> list = new ArrayList<>();
                    for (Integer i = 1; i <= cycle; i++) {
                        //查每个循环里面的填写数量
                        List<InsProduct> insPros = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                .eq(InsProduct::getState, 1)
                                .eq(InsProduct::getInsSampleId, sample.getId())
                                .isNull(InsProduct::getTemplateId)  //区分常规项目
                                .eq(InsProduct::getInspectionItemClass, "直流电阻")
                                .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                                .eq(InsProduct::getInspectionItem, i + ""));
                        InsProductResult insProductResult = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPros.get(0).getId())).get(0);
                        vCount += StringUtils.countMatches(insProductResult.getInsValue(), "\"v\":\"");
                        list.add(StringUtils.countMatches(insProductResult.getInsValue(), "\"v\":\""));
                    }
                    long index3 = 1;
                    for (int c = 0; c < vCount; c++) {
                        if (c % 18 == 0) {
                            List<RowRenderData> rows = new ArrayList<>();
                            //表格的行数
                            for (int i = 0; i < 4 + vCount; i++) {
                                RowRenderData rowRenderData = new RowRenderData();
                                RowStyle rowStyle = new RowStyle();
                                rowStyle.setHeight(40);
                                rowRenderData.setRowStyle(rowStyle);
                                List<CellRenderData> cells = new ArrayList<>();
                                String a = null;//导线温度
                                String b = null;//耐张温度
                                String d = null;//接续温度
                                //列数
                                for (int 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("样品编号@Sample number");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二列
                                            textRenderData.setText(sample.getSampleCode());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 2 || j == 3) {
                                            //第三列和第四列
                                            textRenderData.setText("规格型号@Type and size∑301");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 4 || j == 5) {
                                            //第五列和第六列
                                            textRenderData.setText(sample.getModel()+"∑302");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 6) {
                                            //第七列
                                            textRenderData.setText("检测项@Testing items");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //第八列和第九列
                                            textRenderData.setText("热循环@Thermal cycle∑303");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    }
                                    else if (i == 1) {
                                        //第二行
                                        if (j == 0) {
                                            //第一列
                                            textRenderData.setText("循环次数@Number of cycles(times)∑100");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二列
                                            textRenderData.setText("环境温度@Ambient temperature(℃)∑101");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 2 || j == 3) {
                                            //第三列和第四列
                                            textRenderData.setText("导线@Conductor∑102");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 4 || j == 5) {
                                            //第五列和第六列
                                            textRenderData.setText("耐张线夹@Tension clamp∑103");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 6 || j == 7) {
                                            //第七列第八列
                                            textRenderData.setText("接续金具@Splicing fittings∑104");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //第九列
                                            textRenderData.setText("结果判定@Result judgment∑105");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    }
                                    else if (i == 2) {
                                        //第三行
                                        if (j == 0) {
                                            //第一列
                                            textRenderData.setText("循环次数@Number of cycles(times)∑100");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二列
                                            textRenderData.setText("环境温度@Ambient temperature(℃)∑101");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 2) {
                                            //第三列
                                            textRenderData.setText("温度@Temperature(℃)");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 3) {
                                            //第四列
                                            textRenderData.setText("直流电阻@DC resistance(Ω/km)");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 4) {
                                            //第五列
                                            textRenderData.setText("温度@Temperature(℃)");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 5) {
                                            //第六列
                                            textRenderData.setText("直流电阻@DC resistance(Ω/km)");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 6) {
                                            //第七列
                                            textRenderData.setText("温度@Temperature(℃)");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 7) {
                                            //第八列
                                            textRenderData.setText("直流电阻@DC resistance(Ω/km)");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //第九列
                                            textRenderData.setText("结果判定@Result judgment∑105");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    }
                                    else if (i == 3 + vCount) {
                                        //最后一行
                                        if (j == 0) {
                                            //第一列
                                            textRenderData.setText("备注");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //其余列
                                            textRenderData.setText("“√”表示项目合格,“×”表示项目不合格。∑108");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    }
                                    else {
                                        //其余行
                                        if (j == 0) {
                                            //第一列
                                            int aa= 0;
                                            for (int m = 0; m < cycle; m++) {
                                                aa += list.get(m);
                                                if (i-3<aa){
                                                    textRenderData.setText((m+1)+"");
                                                    break;
                                                }
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                        else if (j == 1) {
                                            //第二列
                                            int aa= 0;
                                            for (int m = 0; m < cycle; m++) {
                                                aa += list.get(m);
                                                if (i-3<aa){
                                                    InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                            .eq(InsProduct::getState, 1)
                                                            .eq(InsProduct::getInsSampleId, sample.getId())
                                                            .eq(InsProduct::getInspectionItemSubclass, "环境温度")
                                                            .isNull(InsProduct::getTemplateId)
                                                            .eq(InsProduct::getInspectionItemClass,"直流电阻")
                                                            .isNull(InsProduct::getInsFiberId)
                                                            .eq(InsProduct::getInspectionItem, (m+1)+""));
                                                    String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                    JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                    JSONObject jsonObject = jsonArray.getJSONObject(i - 3-(aa-list.get(m)));
                                                    String vValue = jsonObject.getString("v");
                                                    System.out.println("环境温度第 " + (i - 2-(aa-list.get(m))) + " 个 'v' 字段的值是: " + vValue);
                                                    textRenderData.setText(vValue);
                                                    break;
                                                }
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                        else if (j == 2) {
                                            //第三列
                                            int aa= 0;
                                            for (int m = 0; m < cycle; m++) {
                                                aa += list.get(m);
                                                if (i-3<aa){
                                                    InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                            .eq(InsProduct::getState, 1)
                                                            .eq(InsProduct::getInsSampleId, sample.getId())
                                                            .eq(InsProduct::getInspectionItemSubclass, "导线温度")
                                                            .isNull(InsProduct::getTemplateId)
                                                            .eq(InsProduct::getInspectionItemClass,"直流电阻")
                                                            .isNull(InsProduct::getInsFiberId)
                                                            .eq(InsProduct::getInspectionItem, (m+1)+""));
                                                    if (ObjectUtils.isNotEmpty(insPro)) {
                                                        String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                        JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                        JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m)));
                                                        String vValue = jsonObject.getString("v");
                                                        a=vValue;
                                                        System.out.println("导线温度第 " + (i - 2 - (aa - list.get(m))) + " 个 'v' 字段的值是: " + vValue);
                                                        textRenderData.setText(vValue);
                                                    }else textRenderData.setText("");
                                                    break;
                                                }
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                        else if (j == 3) {
                                            //第四列
                                            int aa= 0;
                                            for (int m = 0; m < cycle; m++) {
                                                aa += list.get(m);
                                                if (i-3<aa){
                                                    InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                            .eq(InsProduct::getState, 1)
                                                            .eq(InsProduct::getInsSampleId, sample.getId())
                                                            .eq(InsProduct::getInspectionItemSubclass, "导线温度")
                                                            .isNull(InsProduct::getTemplateId)
                                                            .eq(InsProduct::getInspectionItemClass,"直流电阻")
                                                            .isNull(InsProduct::getInsFiberId)
                                                            .eq(InsProduct::getInspectionItem, (m+1)+""));
                                                    if (ObjectUtils.isNotEmpty(insPro)) {
                                                        String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                        JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                        JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m)));
                                                        String vValue = jsonObject.getString("w");
                                                        System.out.println("导线温度第 " + (i - 2 - (aa - list.get(m))) + " 个 'w' 字段的值是: " + vValue);
                                                        textRenderData.setText(vValue);
                                                    }else textRenderData.setText("");
                                                    break;
                                                }
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                        else if (j == 4) {
                                            //第五列
                                            int aa= 0;
                                            for (int m = 0; m < cycle; m++) {
                                                aa += list.get(m);
                                                if (i-3<aa){
                                                    InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                            .eq(InsProduct::getState, 1)
                                                            .eq(InsProduct::getInsSampleId, sample.getId())
                                                            .eq(InsProduct::getInspectionItemSubclass, "耐张温度")
                                                            .isNull(InsProduct::getTemplateId)
                                                            .eq(InsProduct::getInspectionItemClass,"直流电阻")
                                                            .isNull(InsProduct::getInsFiberId)
                                                            .eq(InsProduct::getInspectionItem, (m+1)+""));
                                                    if (ObjectUtils.isNotEmpty(insPro)) {
                                                        String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                        JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                        JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m)));
                                                        String vValue = jsonObject.getString("v");
                                                        b=vValue;
                                                        System.out.println("耐张温度第 " + (i - 2 - (aa - list.get(m))) + " 个 'v' 字段的值是: " + vValue);
                                                        textRenderData.setText(vValue);
                                                    }else textRenderData.setText("");
                                                    break;
                                                }
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                        else if (j == 5) {
                                            //第六列
                                            int aa= 0;
                                            for (int m = 0; m < cycle; m++) {
                                                aa += list.get(m);
                                                if (i-3<aa){
                                                    InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                            .eq(InsProduct::getState, 1)
                                                            .eq(InsProduct::getInsSampleId, sample.getId())
                                                            .eq(InsProduct::getInspectionItemSubclass, "耐张温度")
                                                            .isNull(InsProduct::getTemplateId)
                                                            .eq(InsProduct::getInspectionItemClass,"直流电阻")
                                                            .isNull(InsProduct::getInsFiberId)
                                                            .eq(InsProduct::getInspectionItem, (m+1)+""));
                                                    if (ObjectUtils.isNotEmpty(insPro)) {
                                                        String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                        JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                        JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m)));
                                                        String vValue = jsonObject.getString("w");
                                                        System.out.println("耐张温度第 " + (i - 2 - (aa - list.get(m))) + " 个 'w' 字段的值是: " + vValue);
                                                        textRenderData.setText(vValue);
                                                    }else textRenderData.setText("");
                                                    break;
                                                }
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                        else if (j == 6) {
                                            //第七列
                                            int aa= 0;
                                            for (int m = 0; m < cycle; m++) {
                                                aa += list.get(m);
                                                if (i-3<aa){
                                                    InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                            .eq(InsProduct::getState, 1)
                                                            .eq(InsProduct::getInsSampleId, sample.getId())
                                                            .eq(InsProduct::getInspectionItemSubclass, "接续温度")
                                                            .isNull(InsProduct::getTemplateId)
                                                            .eq(InsProduct::getInspectionItemClass,"直流电阻")
                                                            .isNull(InsProduct::getInsFiberId)
                                                            .eq(InsProduct::getInspectionItem, (m+1)+""));
                                                    if (ObjectUtils.isNotEmpty(insPro)) {
                                                        String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                        JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                        JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m)));
                                                        String vValue = jsonObject.getString("v");
                                                        d=vValue;
                                                        System.out.println("接续温度第 " + (i - 2 - (aa - list.get(m))) + " 个 'v' 字段的值是: " + vValue);
                                                        textRenderData.setText(vValue);
                                                    }else textRenderData.setText("");
                                                    break;
                                                }
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                        else if (j == 7) {
                                            //第八列
                                            int aa= 0;
                                            for (int m = 0; m < cycle; m++) {
                                                aa += list.get(m);
                                                if (i-3<aa){
                                                    InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                            .eq(InsProduct::getState, 1)
                                                            .eq(InsProduct::getInsSampleId, sample.getId())
                                                            .eq(InsProduct::getInspectionItemSubclass, "接续温度")
                                                            .isNull(InsProduct::getTemplateId)
                                                            .eq(InsProduct::getInspectionItemClass,"直流电阻")
                                                            .isNull(InsProduct::getInsFiberId)
                                                            .eq(InsProduct::getInspectionItem, (m+1)+""));
                                                    if (ObjectUtils.isNotEmpty(insPro)) {
                                                        String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                        JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                        JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m)));
                                                        String vValue = jsonObject.getString("w");
                                                        System.out.println("接续温度第 " + (i - 2 - (aa - list.get(m))) + " 个 'w' 字段的值是: " + vValue);
                                                        textRenderData.setText(vValue);
                                                    }else textRenderData.setText("");
                                                    break;
                                                }
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                        else  {
                                            //判断合格与不合格
                                            BigDecimal decimal1 = new BigDecimal(a);
                                            BigDecimal decimal2 = new BigDecimal(b == null ? "0" : b);
                                            BigDecimal decimal3 = new BigDecimal(d == null ? "0" : d);
                                            if (decimal1.compareTo(decimal2) > 0 && decimal1.compareTo(decimal3) > 0) {
                                                textRenderData.setText("√");
                                            } else {
                                                textRenderData.setText("×");
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    }
                                }
                                rowRenderData.setCells(cells);
                                if (rowRenderData.getCells().size() != 0) {
                                    rows.add(rowRenderData);
                                }
                            }
                            TableRenderData tableRenderData = new TableRenderData();
                            tableRenderData.setRows(rows);
                            int countSize = tableRenderData.getRows().get(0).getCells().size();
                            for (RowRenderData row : tableRenderData.getRows()) {
                            /*for (CellRenderData cell : row.getCells()) {
                                System.out.print(cell.getParagraphs().get(0).getContents());
                            }
                            System.out.println("");*/
                                if (row.getCells().size() != countSize) {
                                    throw new ErrorException("每行单元格不相等5");
                                }
                            }
                            TableStyle tableStyle = new TableStyle();
                            tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                            tableStyle.setAlign(TableRowAlign.CENTER);
                            BorderStyle borderStyle = new BorderStyle();
                            borderStyle.setColor("000000");
                            borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                            borderStyle.setSize(14);
                            tableStyle.setLeftBorder(borderStyle);
                            tableStyle.setTopBorder(borderStyle);
                            tableStyle.setRightBorder(borderStyle);
                            tableStyle.setBottomBorder(borderStyle);
                            tableRenderData.setTableStyle(tableStyle);
                            Map<String, Object> table = new HashMap<>();
                            table.put("table3", tableRenderData);
                            table.put("report", insReport);
                            table.put("index3", index3);
                            tables3.add(table);
                            index3++;
                        }
                    }
                });
            }
            tables3.forEach(table3 -> {
                table3.put("tableSize3", tables3.size());
            });
            /*获取附件图片类型*/
            List<Map<String, Object>> images = new ArrayList<>();
            List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery().eq(InsOrderFile::getType, 1).eq(InsOrderFile::getInsOrderId, orderId));
@@ -4376,12 +1420,6 @@
                        put("sampleSize", samples.size());
                        put("tables", tables);
                        put("tableSize", tables.size() + 1);
                        put("tables2", tables2);
                        put("tableSize2", tables2.size());
                        put("tables3", tables3);
                        put("tableSize3", tables3.size());
                        put("tables4", tables4);
                        put("tableSize4", tables4.size());
                        put("standardMethod", (standardMethod2.toString().equals("null") ? "" : standardMethod2));
                        put("deviceList", finalDeviceList);
                        put("twoCode", Pictures.ofLocal(codePath).create());
@@ -4515,16 +1553,50 @@
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        } else {
            //复核不通过将把复核的负责人去掉
            Integer id = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery().eq(InsSampleUser::getInsSampleId, orderId).orderByDesc(InsSampleUser::getId).last("limit 1")).getId();
            insSampleUserMapper.deleteById(id);
        }
        return 1;
    }
    private void getTemplateThing
            (Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) {
    // 计算行高的方法
    private int calculateRowHeight(RowRenderData rowRenderData) {
        // 实现计算逻辑,可能需要根据单元格内容和字体等参数进行计算
        int height = 0;
        for (CellRenderData cell : rowRenderData.getCells()) {
            int cellHeight = estimateCellHeight(cell); // 根据内容估算单元格高度
            if (cellHeight > height) {
                height = cellHeight;
            }
        }
        return height;
    }
    //根据单元格的文本内容计算实际行高
    private int estimateCellHeight(CellRenderData cellRenderData) {
        // 假设默认行高是40
        int defaultHeight = 40;
        // 获取单元格中的所有段落
        List<ParagraphRenderData> paragraphs = cellRenderData.getParagraphs();
        int estimatedHeight = 0;
        // 遍历段落,估算每个段落的高度
        for (ParagraphRenderData paragraph : paragraphs) {
            List<RenderData> contents = paragraph.getContents();
            for (RenderData content : contents) {
                if (content instanceof TextRenderData) {
                    TextRenderData text = (TextRenderData) content;
                    Style style = text.getStyle();
                    // 假设每行文本的高度为字体大小的1.2倍
                    Double fontSize = Objects.isNull(style.getFontSize()) ? 12.0 : style.getFontSize();
                    int lines = (int) Math.ceil(text.getText().length() / 15.0); // 假设每行约15个字符
                    int textHeight = (int) (fontSize * 1.2 * lines);
                    // 累加段落的高度
                    estimatedHeight += textHeight;
                }
            }
        }
        // 返回最大值,确保高度不低于默认高度
        return Math.max(estimatedHeight, defaultHeight);
    }
    private void getTemplateThing(Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) {
        for (InsProduct product : insProducts) {
            if (product.getTemplateId() == null) {
                product.setTemplate(new ArrayList<>());
@@ -4569,50 +1641,19 @@
            String str = "";
            int count = 0;
            for (InsProduct product : insProducts) {
                //如果是光缆的温度循环
                if (product.getInspectionItem().equals("温度循环") && insOrderMapper.selectById(orderId).getSampleType().equals("光缆")) {
                    //查询那些循环温度的检验项目的结论是否全部检验
                    List<InsProduct> insProductList = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, product.getInsSampleId())
                            .isNotNull(InsProduct::getInsFiberId).like(InsProduct::getInspectionItemSubclass, "℃"));
                    List<Integer> collect = insProductList.stream().filter(insProduct -> insProduct.getInsResult() != null).map(InsProduct::getInsResult).collect(Collectors.toList());
                    List<Integer> tt = new ArrayList<>();
                    tt.add(1);
                    if (collect.contains(0)) {
                        product.setLastValue("不合格");
                        product.setInsResult(0);
                    } else if (collect.size() == insProductList.size() && collect.stream().distinct().collect(Collectors.toList()).containsAll(tt)) {
                        product.setLastValue("合格");
                        product.setInsResult(1);
                    }
                    insProductMapper.updateById(product);
                }
                //如果是热循环或者是温升试验
                else if (product.getInspectionItem().equals("热循环") || product.getInspectionItem().equals("温升试验")) {
                    //查询这些项目下的其他检验项目是否全部检验
                    List<InsProduct> insProductList = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                            .eq(InsProduct::getInsSampleId, product.getInsSampleId())
                            .like(InsProduct::getInspectionItemSubclass, "温度"));
                    List<Integer> collect = insProductList.stream().filter(insProduct -> insProduct.getInsResult() != null).map(InsProduct::getInsResult).collect(Collectors.toList());
                    List<Integer> tt = new ArrayList<>();
                    tt.add(1);
                    if (collect.contains(0)) {
                        product.setLastValue("不合格");
                        product.setInsResult(0);
                    } else if (collect.size() == insProductList.size() && collect.stream().distinct().collect(Collectors.toList()).containsAll(tt)) {
                        product.setLastValue("合格");
                        product.setInsResult(1);
                    }
                    insProductMapper.updateById(product);
                } else {
                    count++;
                    str += "<br/>" + count + ":" + product.getInspectionItem() + " " + product.getInspectionItemSubclass() + "<br/>";
                }
            }
            if (ObjectUtils.isNotEmpty(str)) {
                throw new ErrorException("<strong>存在待检验的项目:</strong><br/>" + str);
            }
        }
        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 3).set(InsOrderState::getVerifyUser, verifyUser));
        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"));
@@ -4631,6 +1672,11 @@
        insSampleUser.setState(1);
        insSampleUser.setSonLaboratory(laboratory);
        insSampleUserMapper.insert(insSampleUser);
        /*如果是C类订单且是下发到质量部,则直接复核通过*/
        InsOrder insOrder = insOrderMapper.selectById(orderId);
        if (insOrder.getOrderType().equals("C") && insOrder.getDepartmentLims().equals("质量部")) {
            verifyPlan(orderId, laboratory, 1, null);
        }
        /*校验一下result表*/
        CompletableFuture.supplyAsync(() -> {
            List<Integer> ips = insProducts.stream().map(InsProduct::getId).distinct().collect(Collectors.toList());
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
@@ -47,10 +47,13 @@
 */
@Service
@AllArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class InsOrderServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder>
        implements InsOrderService {
    private GetLook getLook;
    private RoleMapper roleMapper;
    private InsOrderMapper insOrderMapper;
@@ -89,9 +92,9 @@
        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("selectInsOrderParameter");
        User user = userMapper.selectById(map1.get("userId"));//当前登录的人
        Integer roleId = user.getRoleId();
        //获取当前人所属实验室id
        String departLimsId = user.getDepartLimsId();
        String laboratory = null;
        //获取当前人所属实验室id
        /*String departLimsId = user.getDepartLimsId();
        if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.equals("")) {
            String[] split = departLimsId.split(",");
            //查询对应架构名称(通信实验室,电力实验室,检测办)
@@ -99,7 +102,7 @@
            if (departLims.contains("实验室")) {
                laboratory = departLims;
            }
        }
        }*/
        //判断是否是全部权限
        Power power = powerMapper.selectOne(Wrappers.<Power>lambdaQuery().eq(Power::getRoleId, roleId).eq(Power::getMenuMethod, "selectAllInsOrderParameter"));
        if (ObjectUtils.isEmpty(power)) {
@@ -134,25 +137,13 @@
        insOrder.setAppointed(LocalDate.parse(appointed));
        insOrder.setSendTime(LocalDateTime.now());
        insOrderMapper.updateById(insOrder);
        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId));
        List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList());
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                .in(InsProduct::getInsSampleId, ids)
                .eq(InsProduct::getState, 1)
//                .isNull(InsProduct::getInsFibersId)
//                .isNull(InsProduct::getInsFiberId)
                .select(InsProduct::getSonLaboratory).groupBy(InsProduct::getSonLaboratory));
        for (InsProduct insProduct : insProducts) {
        //修改成只给当前选择的试验室下发单子
            InsOrderState insOrderState = new InsOrderState();
            insOrderState.setInsOrderId(orderId);
            try {
                insOrderState.setLaboratory(insProduct.getSonLaboratory());
            } catch (NullPointerException e) {
                throw new ErrorException("该检验单有未维护实验室的检验项目");
            }
        insOrderState.setLaboratory(sonLaboratory);
            insOrderState.setInsState(0);
            insOrderStateMapper.insert(insOrderState);
        }
        //这里是在给分配的指定的人和试验室下发检验人
        if (userId != null) {
            InsSampleUser insSampleUser = new InsSampleUser();
            insSampleUser.setState(0);
@@ -203,65 +194,11 @@
            a.setId(null);
            a.setInsOrderId(insOrder.getId());
            if (StrUtil.isEmpty(a.getSampleCode())) {
                a.setSampleCode(giveCode.split("-")[2] + "-" + count.get());
                a.setSampleCode("TX(WYQJ)-" + giveCode.split("-")[2] + "-" + count.get());
            }
            insSampleMapper.insert(a);
            if (ObjectUtil.isNotEmpty(a.getInsProduct())) {
                addInsProductMethod(a.getId(), a.getInsProduct(), null, 0, false);
                if (ObjectUtil.isNotEmpty(a.getBushing())) {
                    for (BushingDto bushingDto : a.getBushing()) {
                        bushingDto.setInsSampleId(a.getId());
                        insBushingMapper.insert(bushingDto);
                        //光纤不为空
                        if (bushingDto.getFiber().size() != 0) {
                            for (FiberDto fiberDto : bushingDto.getFiber()) {
                                fiberDto.setInsBushingId(bushingDto.getId());
                                insFiberMapper.insert(fiberDto);
                                addInsProductMethod(a.getId(), a.getInsProduct(), fiberDto.getId(), 2, true);
                                addInsProductMethod(a.getId(), fiberDto.getProductList(), fiberDto.getId(), 2, false);
                            }
                        }
                        //光纤带不为空
                        else if ( bushingDto.getFibers().size()!=0){
                            for (FibersDto fibersDto : bushingDto.getFibers()) {
                                fibersDto.setInsBushingId(bushingDto.getId());
                                fibersDto.setCode(this.giveCode.giveCode("", "ins_fibers", "", "yyMMdd"));
                                insFibersMapper.insert(fibersDto);
                                for (FiberDto fiberDto : fibersDto.getFiber()) {
                                    fiberDto.setInsFibersId(fibersDto.getId());
                                    insFiberMapper.insert(fiberDto);
                                    addInsProductMethod(a.getId(), a.getInsProduct(), fiberDto.getId(), 2, true);
                                    addInsProductMethod(a.getId(), fiberDto.getProductList(), fiberDto.getId(), 2, false);
                                }
                                //addInsProductMethod(a.getId(), a.getInsProduct(), fibersDto.getId(), 1);
                                addInsProductMethod(a.getId(), fibersDto.getProductList(), fibersDto.getId(), 1, false);
                            }
                        }
                        //都为空 只配置了套管 这种情况只限于项目是含有松套管的
                        else {
                            String collect = a.getInsProduct().stream().map(InsProduct::getInspectionItem).distinct().collect(Collectors.joining(","));
                            if (collect.contains("松套管")){
                                //获取检验项目中包含松套管的检验项目
                                List<InsProduct> products = a.getInsProduct().stream().filter(insProduct -> insProduct.getInspectionItem().contains("松套管")).collect(Collectors.toList());
                                for (InsProduct product : products) {
                                    product.setInsBushId(bushingDto.getId());
                                    product.setId(null);
                                    product.setCreateTime(null);
                                    product.setCreateUser(null);
                                    product.setUpdateTime(null);
                                    product.setUpdateUser(null);
                                    product.setInsSampleId(a.getId());
                                    if (product.getInspectionItemSubclass() == null) {
                                        product.setInspectionItemSubclass("");
                                    }
                                    insProductMapper.insert(product);
                                }
                            }else {
                                throw new ErrorException("样品的光纤配置信息里面没有配置光纤带信息也没有光纤信息,请重新配置保存再提交下单!!!");
                            }
                        }
                    }
                }
            }
            if (ObjectUtil.isNotEmpty(a.getInsulating())) {
                List<InsProduct> ip2 = new ArrayList<>();
@@ -336,6 +273,11 @@
            } catch (Exception e) {
            }
        }
        //通信:如果是C类订单无需审核直接通过
        if (insOrder.getOrderType().equals("C")) {
            insOrder.setState(1);
            upInsOrderOfState(insOrder);
        }
        return insOrder.getId();
    }
@@ -343,123 +285,7 @@
        InsOrder insOrder = insOrderMapper.selectById(insSampleMapper.selectById(sampleId).getInsOrderId());
        String name = insSampleMapper.selMethodById(sampleId);
        for (InsProduct product : productList) {
            if (product.getInspectionItem().contains("松套管")){
                continue;
            }
            if (product.getState() == 1 && !product.getInspectionItem().equals("光纤接头损耗")) {
                //判断光缆的温度循环项目添加
                if (insOrder.getSampleType().equals("光缆") && product.getInspectionItem().equals("温度循环") && type != 0) {
                    //判断选择的标准方法是委托要求还是其他标准方法
                    if (!name.equals("委托要求")) {
                        //判断标准方法的温度循环的要求描述是否有填写
                        if (ObjectUtils.isEmpty(product.getTell()) || product.getTell().equals("")) {
                            throw new ErrorException("光缆的温度循环的要求描述为空,需要在标准库配置要求描述!!!");
                        } else {
                            //解析(温度范围:20℃,-40℃,65℃;保温时间:12h; 循环次数:2次; 光纤(1310nm,1550nm)附加衰减不大于0.03dB/km)
                            String tell = product.getTell().replace(")", ")")
                                    .replace("(", "(")
                                    .replace(")", ")")
                                    .replace(",", ",")
                                    .replace(":", ":")
                                    .replace(";", ";")
                                    .replace("不大于", "≤")
                                    .replace("不小于", "≥")
                                    .replace("大于", ">")
                                    .replace("小于", "<")
                                    .replace("等于", "=");
                            String[] message=null;
                            String[] nm=null;
                            String ask=null;
                            String count=null;
                            try {
                                String[] strings = tell.split(";");
                                //温度
                                String temperature = strings[0];
                                String[] split = temperature.split(":");
                                 message = split[1].split(",");
                                //循环次数
                                 count = strings[2].split(":")[1].split("次")[0];
                                //光纤项目和要求值
                                String string = strings[3];
                                 nm = string.split("(")[1].split(")")[0].split(",");
                                 ask = string.split("衰减")[1].split("dB")[0];
                            }catch (Exception e){
                                throw new ErrorException("温度循环的要求描述格式异常,请参照温度范围:20℃,-40℃,65℃;保温时间:12h; 循环次数:2次; 光纤(1310nm,1550nm)附加衰减不大于0.03dB/km");
                            }
                            //拼接
                            String s="";
                            for (int i = 0; i < nm.length; i++) {
                                 s+= "20℃(常温)," + nm[i] + ",null;";
                                for (int j = 0; j < message.length; j++) {
                                    s+= message[j] + "," + nm[i] + "," + ask + ";" ;
                                }
                            }
                            s+=count;
                            product.setAsk(s);
                            insProductMapper.updateById(product);
                            dealWithTemperatureLoop(type,id,sampleId,product);
                        }
                    }
                    else {
                        //20℃(常温),1310nm,null;-40℃,1310nm,≤0.2;75℃,1310nm,<0.3;20℃,1310nm,≤0.1;20℃(常温),1550nm,null;-40℃,1550nm,≤0.2;75℃,1550nm,<0.3;20℃,1550nm,≤0.1;3
                        dealWithTemperatureLoop(type,id,sampleId,product);
                    }
                }
                //判断热循环项目的添加和温升试验项目的添加
                else if (product.getInspectionItem().equals("热循环") || product.getInspectionItem().equals("温升试验")) {
                    List<InsProduct> insProductess = new ArrayList<>();
                    product.setId(null);
                    product.setInsSampleId(sampleId);
                    insProductess.add(product);
                    List<InsProduct> insProductes = new ArrayList<>();
                    List<InsProduct> insProducts = new ArrayList<>();
                    String[] strings = product.getAsk().split(";");
                    //循环次数
                    int count = Integer.parseInt(strings[strings.length - 1]);
                    for (int i = 0; i < strings.length - 1; i++) {
                        String[] split = strings[i].split(",");
                        InsProduct insProduct = new InsProduct();
                        insProduct.setInspectionItem("1");//检验父项--循环次数
                        insProduct.setInspectionItemSubclass(split[0]);//检验子项--环境温度/导线温度/耐张温度/接续温度
                        insProduct.setInspectionItemSubclassEn(split[1]);//检验子项英文--环境温度/导线温度/耐张温度/接续温度
                        insProduct.setAsk(null);//检验要求
                        insProduct.setTell(null);//检验描述
                        insProduct.setInsSampleId(sampleId);
                        insProduct.setState(1);
                        insProduct.setFactory(product.getFactory());
                        insProduct.setLaboratory(product.getLaboratory());
                        insProduct.setSampleType(product.getSampleType());
                        insProduct.setSample(product.getSample());
                        insProduct.setModel(product.getModel());
                        insProduct.setSonLaboratory(product.getSonLaboratory());
                        insProduct.setUnit("℃");//单位
                        insProduct.setManHourGroup(product.getManHourGroup());
                        insProduct.setInspectionItemType("0");
                        insProduct.setInspectionValueType("1");
                        if (product.getInspectionItem().equals("热循环")) {
                            insProduct.setInspectionItemClass("直流电阻");//检验子子项--直流电阻
                            insProduct.setInspectionItemClassEn("DC resistance");//检验子子项英文--直流电阻
                            insProduct.setUnit("Ω/km");//单位
                        }
                        insProducts.add(insProduct);
                        insProductes.add(insProduct);
                        insProductess.add(insProduct);
                    }
                    //热循环才有多次循环次数
                    if (count > 1) {
                        //循环超过1次
                        for (int j = 2; j <= count; j++) {
                            for (InsProduct insProduct : insProductes) {
                                InsProduct insProduct1 = new InsProduct();
                                BeanUtils.copyProperties(insProduct, insProduct1);
                                insProduct1.setInspectionItem(j + "");//循环次数
                                insProductess.add(insProduct1);
                            }
                        }
                    }
                    insProductService.saveBatch(insProductess);
                }
                else {
                    if (!is) {
                        switch (type) {
                            case 1:
@@ -479,7 +305,6 @@
                            product.setInspectionItemSubclass("");
                        }
                        insProductMapper.insert(product);
                    }
                }
            }
        }
@@ -577,14 +402,93 @@
                code2=one.getCode2();
            }
            insOrder.setEntrustCode(giveCode.giveCode2("JCZX/" + code + "-" + code2 + "-", insOrder.getCompanyId(), insOrder.getLaboratory(), "ins_order", "", "yyMM"));
            /*审核通过之后还需要判断该样品是否在库*/
            //如果在库,系统查询站点任务分布情况,将检验任务下发至最少的站台
            List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
                    .eq(InsSample::getInsOrderId, insOrder.getId()).select(InsSample::getId));
            List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList());
            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                            .eq(InsProduct::getState, 1)
                            .in(InsProduct::getInsSampleId, ids));
            List<String> collect = insProducts.stream().map(InsProduct::getSonLaboratory).distinct().collect(Collectors.toList());
            //要判断剩余试验室中哪个最空闲就安排给哪个
            Map<String, Long> dataCounts = new HashMap<>();
            for (String sonLaboratory : collect) {
                Long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery()
                        .eq(InsOrderState::getLaboratory, sonLaboratory)
                        .ne(InsOrderState::getInsState, 4)
                        .ne(InsOrderState::getInsState, 5)
                        .ne(InsOrderState::getInsState, 6));
                dataCounts.put(sonLaboratory, count);
            }
            // 查找数据量最少的元素
            String minElement = null;
            Long minCount = Long.MAX_VALUE;
            for (Map.Entry<String, Long> entry : dataCounts.entrySet()) {
                if (entry.getValue() < minCount) {
                    minCount = entry.getValue();
                    minElement = entry.getKey();
                }
            }
            int day = insProductService.selectOrderManDay(insOrder.getId());//预计完成时间
            upInsOrder(insOrder.getId(),null,LocalDateTime.now().plusHours(day).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")),null,minElement);
            //如果不在库,暂不下发
        }
        return insOrderMapper.updateById(insOrder);
    }
    @Override
    public int upInsOrderOfState2(InsOrder insOrder) {
        InsOrder order = insOrderMapper.selectById(insOrder.getId());
        //获取当前人
        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
        //获取当前人的角色
        String roleName = roleMapper.selectById(userMapper.selectById(userId).getRoleId()).getName();
        //判断是检测中心主任/研发部经理/技术负责人
        switch (roleName) {
            case "检测中心主任":
                order.setCheckState1(insOrder.getState());
                order.setCheckState1User(userId);
                break;
            case "研发部经理":
                order.setCheckState2(insOrder.getState());
                order.setCheckState2User(userId);
                break;
            case "技术负责人":
                order.setCheckState3(insOrder.getState());
                order.setCheckState3User(userId);
                break;
            default:
                throw new ErrorException("当前登录用户的角色不是检测中心主任/研发部经理/技术负责人,无法进行审核");
        }
        insOrderMapper.updateById(order);
        //查询该订单是A类还是B类
        if (order.getOrderType().equals("A")) {
            //如果是A类,1和2和3都审核通过这个单子就审核通过
            if (order.getCheckState1() == 1 && order.getCheckState2() == 1 && order.getCheckState3() == 1) {
                order.setState(1);
                upInsOrderOfState(order);
            } else if (order.getCheckState1() == 2 || order.getCheckState2() == 2 || order.getCheckState3() == 2){
                order.setState(2);
                upInsOrderOfState(order);
            }
        } else if (order.getOrderType().equals("B")) {
            //如果是B类,1和2审核通过后这个单子就审核通过
            if (order.getCheckState1() == 1 && order.getCheckState2() == 1 ) {
                order.setState(1);
                upInsOrderOfState(order);
            } else if (order.getCheckState1() == 2 || order.getCheckState2() == 2 ){
                order.setState(2);
                upInsOrderOfState(order);
            }
        }
        return 1;
    }
    @Override
    public Map<String, Object> getInsOrderAndSample(Integer id, String laboratory) {
        Map<String, Object> map = new HashMap<>();
        InsOrder insOrder = insOrderMapper.selectById(id);
        InsOrder insOrder = insOrderMapper.selectById2(id);
        List<SampleProductDto> list = insSampleMapper.getInsOrderAndSample(id, laboratory);
        for (SampleProductDto sampleProductDto : list) {
            List<Integer> ids = sampleProductDto.getInsProduct().stream().map(InsProduct::getId).collect(Collectors.toList());
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java
@@ -171,7 +171,7 @@
    //批准
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int ratifyReport(Integer id, Integer isRatify, String ratifyTell) {
    public int ratifyReport(Integer id, Integer isRatify, String ratifyTell,String sealUrl) {
        InsReport insReport = insReportMapper.selectById(id);
        insReport.setIsRatify(isRatify);
        if (ObjectUtils.isNotEmpty(ratifyTell)) {
@@ -192,14 +192,14 @@
            throw new ErrorException("找不到批准人的签名");
        }
        //获取场所的报告专用章
        String sealUrl;
       /* String sealUrl;
        try {
            String laboratory = insOrderMapper.selectById(insReport.getInsOrderId()).getLaboratory();
            sealUrl = insReportMapper.getLaboratoryByName(laboratory);
        } catch (Exception e) {
            throw new ErrorException("找不到报告专用章");
        }
        if (sealUrl == null) throw new ErrorException("找不到报告专用章");
        if (sealUrl == null) throw new ErrorException("找不到报告专用章");*/
        //系统生成报告地址
        String url = insReport.getUrl();
        //手动上传报告地址
inspect-server/src/main/java/com/yuanchu/mom/vo/InsOrderPlanVO.java
@@ -48,4 +48,6 @@
    private Integer verifyUser;
    private Integer orderStateId;
}
inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -69,7 +69,8 @@
        ir.url,
        ir.url_s,
        sample_counts.sample_num,
        CONCAT(ROUND(approved_product_counts.approved_count / total_product_counts.total_count * 100, 2), '%') AS insProgress,
        CONCAT(ROUND(approved_product_counts.approved_count / total_product_counts.total_count * 100, 2), '%') AS
        insProgress,
        GROUP_CONCAT(DISTINCT isa.sample_code SEPARATOR ',') AS sample_code,
        GROUP_CONCAT(DISTINCT isa.sample SEPARATOR ' ') AS sample_name,
        GROUP_CONCAT(DISTINCT isa.model SEPARATOR ' ') AS sample_model,
@@ -81,13 +82,15 @@
        LEFT JOIN
        ins_sample_user isau ON isau.ins_sample_id = io.id
        LEFT JOIN
        (SELECT id, ins_order_id, is_ratify, url, url_s FROM ins_report WHERE is_ratify = 1) ir ON io.id = ir.ins_order_id
        (SELECT id, ins_order_id, is_ratify, url, url_s FROM ins_report WHERE is_ratify = 1) ir ON io.id =
        ir.ins_order_id
        LEFT JOIN
        user u ON io.create_user = u.id
        LEFT JOIN
        (SELECT ins_order_id, COUNT(*) AS sample_num
        FROM ins_sample
        WHERE id in(select id1 from (select is2.id id1 ,ip.id from ins_sample is2 left join ins_product ip on is2.id = ip.ins_sample_id where ip.id is not null)s )
        WHERE id in(select id1 from (select is2.id id1 ,ip.id from ins_sample is2 left join ins_product ip on is2.id =
        ip.ins_sample_id where ip.id is not null)s )
        GROUP BY ins_order_id) sample_counts ON io.id = sample_counts.ins_order_id
        LEFT JOIN
        (SELECT ins_sample.ins_order_id, COUNT(*) AS total_count
@@ -153,7 +156,8 @@
        select *
        from (
        select
        i.id,isa.sample_code,isa.sample,isa.model,isa.ins_state,ip.id insProductId,ip.state,ip.unit,ip.inspection_item,ip.inspection_item_subclass,
        i.id,isa.sample_code,isa.sample,isa.model,isa.ins_state,ip.id
        insProductId,ip.state,ip.unit,ip.inspection_item,ip.inspection_item_subclass,
        ip.son_laboratory,ip.inspection_item_type,ip.inspection_value_type,ip.tell,ip.`last_value`,ip.ins_result,ipr.equip_value
        from ins_sample isa
        left join ins_order i on isa.ins_order_id = i.id
@@ -228,7 +232,8 @@
        GROUP_CONCAT(b.inspection_item2
        SEPARATOR ',')
        inspection_item from (select * ,
        GROUP_CONCAT(CONCAT(inspection_item,'@',inspection_item_subclass) SEPARATOR ',')inspection_item2 from ins_product where state = 1 and template_id IS NOT NULL GROUP BY ins_sample_id,man_hour_group) b GROUP
        GROUP_CONCAT(CONCAT(inspection_item,'@',inspection_item_subclass) SEPARATOR ',')inspection_item2 from
        ins_product where state = 1 and template_id IS NOT NULL GROUP BY ins_sample_id,man_hour_group) b GROUP
        BY b.ins_sample_id) c ON c.ins_sample_id = isa.id
        where (i.state = 1 or i.state = 3 or i.state = 4) and c.ins_sample_id IS not  NULL)A
        GROUP BY
@@ -443,7 +448,8 @@
        GROUP_CONCAT(b.inspection_item2
        SEPARATOR ',')
        inspection_item from (select * ,
        GROUP_CONCAT(CONCAT(inspection_item,'@',inspection_item_subclass) SEPARATOR ',')inspection_item2 from ins_product where state = 1 and template_id IS NOT NULL GROUP BY ins_sample_id,man_hour_group) b GROUP
        GROUP_CONCAT(CONCAT(inspection_item,'@',inspection_item_subclass) SEPARATOR ',')inspection_item2 from
        ins_product where state = 1 and template_id IS NOT NULL GROUP BY ins_sample_id,man_hour_group) b GROUP
        BY b.ins_sample_id) c ON c.ins_sample_id = isa.id
        where (i.state = 1 or i.state = 3 or i.state = 4) and c.ins_sample_id IS not  NULL)A
        GROUP BY
@@ -478,4 +484,11 @@
        from department_lims
        where id = #{depLimsId}
    </select>
    <select id="selectById2" resultType="com.yuanchu.mom.pojo.InsOrder">
        select ins_order.*, user.id prepareUserId
        from ins_order
                 join user on prepare_user = name
        where ins_order.id = #{id}
    </select>
</mapper>
inspect-server/src/main/resources/mapper/InsProductMapper.xml
@@ -84,7 +84,7 @@
                 left join ins_order io on io.id = isa.ins_order_id
                 left join user u on u.id = ipr.update_user
        where ip.ins_sample_id = #{sampleId}
          and ip.ins_result is not null
          and template_id is not null
    </select>
    <select id="selectFiberInsProduct" resultType="com.yuanchu.mom.pojo.InsProduct">
inspect-server/src/main/resources/mapper/InsReportMapper.xml
@@ -23,12 +23,13 @@
        select *
        from (
        select
        ir.*,io.entrust_code,u.name write_user_name,u1.name ratify_user,u2.name examine_user,io.laboratory
        ir.*,io.entrust_code,u.name write_user_name,u1.name ratify_user,u2.name examine_user,io.laboratory,l.id labId
        from ins_report ir
        left join ins_order io on io.id = ir.ins_order_id
        left join user u on u.id = ir.write_user_id
        left join user u1 on u1.id = ir.ratify_user_id
        left join user u2 on u2.id = ir.examine_user_id
        left join laboratory l on io.laboratory=laboratory_name
        where 1=1
        <if test="laboratory!=null and laboratory!=''">
           and  laboratory=#{laboratory}
inspect-server/src/main/resources/mapper/InsSampleMapper.xml
@@ -25,75 +25,9 @@
    </resultMap>
    <select id="findInsSampleAndOrder" resultType="com.yuanchu.mom.vo.InsOrderPlanVO">
        <!--SELECT  *
        FROM (
        SELECT  *
        FROM (
        SELECT
        io.id,
        io.entrust_code,
        io.type,
        io.appointed,
        io.send_time,
        GROUP_CONCAT(DISTINCT isa.sample SEPARATOR ' ') AS sample,
        isu.userName,
        isu2.checkName,
        ip.son_laboratory,
        io.ins_time,
        io.laboratory,
        ios.ins_state,
        ios.verify_tell,
        ios.verify_user
        FROM
        ins_order io
        LEFT JOIN ins_sample isa ON isa.ins_order_id = io.id
        LEFT JOIN (
        SELECT
        ins_sample_id,
        GROUP_CONCAT(DISTINCT uu.name SEPARATOR ',') AS userName
        FROM
        ins_sample_user u
        LEFT JOIN user uu ON u.user_id = uu.id
        WHERE
        son_laboratory = #{sonLaboratory} AND u.state = 0
        GROUP BY
        ins_sample_id
        ) isu ON isu.ins_sample_id = io.id
        LEFT JOIN (
        SELECT
        ins_sample_id,
        uu.name AS checkName
        FROM
        ins_sample_user u
        LEFT JOIN user uu ON u.user_id = uu.id
        WHERE
        son_laboratory = #{sonLaboratory} AND u.state = 1
        GROUP BY
        ins_sample_id
        ) isu2 ON isu2.ins_sample_id = io.id
        LEFT JOIN ins_product ip ON ip.ins_sample_id = isa.id
        LEFT JOIN ins_order_state ios ON ios.ins_order_id = io.id AND ios.laboratory = ip.son_laboratory
        WHERE
        io.state = 1
        AND io.send_time IS NOT NULL
        AND (ip.son_laboratory = #{sonLaboratory} OR isu.userName IS NULL OR isu2.checkName IS NULL)
        <if test="userName != null and userName != ''">
            AND (isu.userName LIKE CONCAT('%', #{userName}, '%') OR isu2.checkName LIKE CONCAT('%', #{userName}, '%'))
        </if>
        GROUP BY
        io.id, ip.son_laboratory
        ORDER BY
        io.type DESC, io.id
        ) a
        WHERE
        a.ins_state IS NOT NULL
        <if test="laboratory != null and laboratory != ''">
            AND a.laboratory = #{laboratory}
        </if>
        ) b-->
        select * from(select * from(
        SELECT
        a.*,ios.ins_state,ios.verify_tell,verify_user
        a.*,ios.ins_state,ios.verify_tell,verify_user,ios.id orderStateId
        FROM
        (
        SELECT
@@ -119,7 +53,6 @@
        GROUP BY ins_sample_id
        ORDER BY ins_sample_id
        ) isu ON isu.ins_sample_id = io.id
        LEFT JOIN (
        SELECT ins_sample_id,uu.name checkName
        FROM ins_sample_user u LEFT JOIN user uu ON u.user_id = uu.id
inspect-server/src/main/resources/static/report-template.docx
Binary files differ
system-run/src/main/resources/application-dev.yml
@@ -41,14 +41,14 @@
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/11?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
#    url: jdbc:mysql://localhost:3306/11?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
#    url: jdbc:mysql://10.1.200.86:3306/center-lims?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
#    url: jdbc:mysql://10.16.173.59:3306/center-lims?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
#    url: jdbc:mysql://10.1.13.77:3306/center-lims?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    url: jdbc:mysql://10.1.13.77:3306/center-lims?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
#    url: jdbc:mysql://114.132.189.42:9004/center-lims?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
#    username: remote_user
    username: root
    password: 123456
    username: remote_user
#    username: root
    password: zttZTT123!
    druid:
      #   Druid数据源配置
      initialSize: 5 # 初始连接数
user-server/src/main/resources/mapper/UserMapper.xml
@@ -45,6 +45,7 @@
        where u.id = #{userId}
    </select>
    <select id="getUser" resultType="com.yuanchu.mom.pojo.User">
        select * from user where  depart_lims_id=FIND_IN_SET(depart_lims_id, (select  GROUP_CONCAT(id SEPARATOR ',') from department_lims where department_lims.name like '%实验室'))
        select * from user
        # where  depart_lims_id=FIND_IN_SET(depart_lims_id, (select  GROUP_CONCAT(id SEPARATOR ',') from department_lims where department_lims.name like '%实验室'))
    </select>
</mapper>