zss
2024-07-04 90e768e3d4e6603ca9e47c0950255ec105757883
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -25,9 +25,7 @@
import com.deepoove.poi.xwpf.WidthScalePattern;
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.common.PrintChina;
import com.yuanchu.mom.dto.ExcelDto;
import com.yuanchu.mom.dto.InsOrderPlanDTO;
import com.yuanchu.mom.dto.SampleProductDto;
import com.yuanchu.mom.dto.*;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.*;
import com.yuanchu.mom.pojo.*;
@@ -37,8 +35,12 @@
import com.yuanchu.mom.utils.QueryWrappers;
import com.yuanchu.mom.vo.InsOrderPlanTaskSwitchVo;
import com.yuanchu.mom.vo.InsOrderPlanVO;
import com.yuanchu.mom.vo.ProductVo;
import com.yuanchu.mom.vo.SampleVo;
import org.apache.commons.io.IOUtils;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -46,6 +48,7 @@
import javax.annotation.Resource;
import java.io.*;
import java.math.BigInteger;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
@@ -118,7 +121,13 @@
    private InsBushingService insBushingService;
    @Resource
    private InsBushingMapper insBushingMapper;
    @Resource
    private InsFiberMapper insFiberMapper;
    @Resource
    private InsFibersMapper insFibersMapper;
    @Resource
    private InsOrderFileMapper insOrderFileMapper;
@@ -175,11 +184,8 @@
        Map<String, Object> map = insOrderService.getInsOrderAndSample(id, laboratory);
        List<SampleProductDto> list = JSON.parseArray(JSON.toJSONString(map.get("sampleProduct")), SampleProductDto.class);
        for (SampleProductDto samples : list) {
//            Set<Integer> set = new HashSet<>();
//            Map<Integer, String> map2 = new HashMap<>();
            if (BeanUtil.isEmpty(samples.getInsProduct())) continue;
            samples.setBushing(insBushingService.selectBushingBySampleId(samples.getId()));
//            getTemplateThing(set, map2, samples.getInsProduct());
        }
        map.put("sampleProduct", list);
        return map;
@@ -265,6 +271,100 @@
        }
    }
    //切换记录模版查询检验内容
    @Override
    public Map<String, Object> getReportModel(Integer sampleId) {
        Map<String, Object> map = new HashMap<>();
        //先查出套管
        List<InsBushing> insBushings = insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery().eq(InsBushing::getInsSampleId, sampleId));
        List<InsFibers> fibers = new ArrayList<>();
        List<InsFiber> fiber = new ArrayList<>();
        for (InsBushing insBushing : insBushings) {
            //再查询出所有的光纤带
            List<InsFibers> insFibers = insFibersMapper.selectList(Wrappers.<InsFibers>lambdaQuery().eq(InsFibers::getInsBushingId, insBushing.getId()));
            if (CollectionUtils.isNotEmpty(insFibers)) {
                fibers.addAll(insFibers);
                //查出光纤带下所有的光纤
                List<InsFiber> fiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().in(InsFiber::getInsFibersId, insFibers.stream().map(InsFibers::getId).collect(Collectors.toList())));
                fiber.addAll(fiberList);
            } else {
                //如果套管下没有光纤带就只有光纤了
                List<InsFiber> insFiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsBushingId, insBushing.getId()));
                fiber.addAll(insFiberList);
            }
        }
        map.put("光纤带", fibers);
        map.put("光纤", fiber);
        return map;
    }
    //温度循环查看列表数据(包括通过样品id,循环次数,温度,循环次数进行筛选)
    @Override
    public Map<String, Object> temCycle(Integer sampleId, String inspectionItem, String inspectionItemSubclass) {
        Map<String, Object> map = new HashMap<>();
        //样品信息
        SampleVo sampleVo = insSampleMapper.getDetailById(sampleId);
        map.put("sampleVo", sampleVo);
        List<ProductVo> productVos = new ArrayList<>();
        //先查出这个样品下有哪些管色标,光纤带,光纤色标
        //先查出套管
        List<InsBushing> insBushings = insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery().eq(InsBushing::getInsSampleId, sampleId));
        for (InsBushing insBushing : insBushings) {
            //再查询出所有的光纤带
            List<InsFibers> insFibers = insFibersMapper.selectList(Wrappers.<InsFibers>lambdaQuery().eq(InsFibers::getInsBushingId, insBushing.getId()));
            if (CollectionUtils.isNotEmpty(insFibers)) {
                for (InsFibers insFiber : insFibers) {
                    //查出光纤带下所有的光纤
                    List<InsFiber> fiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsFibersId, insFiber.getId()));
                    for (InsFiber fiber : fiberList) {
                        //再根据关联的光纤配置的id和循环次数和温度和样品id进行查询检验项目
                        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                .eq(InsProduct::getInsSampleId, sampleId)
                                .eq(InsProduct::getInspectionItem, inspectionItem)
                                .eq(InsProduct::getInspectionItemSubclass, inspectionItemSubclass)
                                .eq(InsProduct::getInsFiberId, fiber.getId()));
                        for (InsProduct insProduct : insProducts) {
                            InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()));
                            ProductVo productVo = new ProductVo();
                            productVo.setCode(insFiber.getCode());
                            productVo.setColor(fiber.getColor());
                            productVo.setBushColor(fiber.getBushColor());
                            if (ObjectUtils.isNotEmpty(insProductResult)) {
                                insProduct.setInsProductResult(insProductResult);
                            }
                            productVo.setInsProduct(insProduct);
                            productVos.add(productVo);
                        }
                    }
                }
            } else {
                //如果套管下没有光纤带就只有光纤了
                List<InsFiber> insFiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsBushingId, insBushing.getId()));
                for (InsFiber fiber : insFiberList) {
                    //再根据关联的光纤配置的id和循环次数和温度和样品id进行查询检验项目
                    List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                            .eq(InsProduct::getInsSampleId, sampleId)
                            .eq(InsProduct::getInspectionItem, inspectionItem)
                            .eq(InsProduct::getInspectionItemSubclass, inspectionItemSubclass)
                            .eq(InsProduct::getInsFiberId, fiber.getId()));
                    for (InsProduct insProduct : insProducts) {
                        InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()));
                        ProductVo productVo = new ProductVo();
                        productVo.setCode("/");
                        productVo.setColor(fiber.getColor());
                        productVo.setBushColor(fiber.getBushColor());
                        insProduct.setInsProductResult(insProductResult);
                        productVo.setInsProduct(insProduct);
                        productVos.add(productVo);
                    }
                }
            }
        }
        map.put("productVos", productVos);
        return map;
    }
    @Override
    public void saveInsContext(Map<String, Object> insContext) {
        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
@@ -276,9 +376,9 @@
                List<InsProductResult> results = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()));
                InsProductResult result;
                if (CollectionUtils.isEmpty(results)) {
                     result = new InsProductResult();
                    result = new InsProductResult();
                } else {
                     result = results.get(0);
                    result = results.get(0);
                }
                result.setInsProductId(Integer.parseInt(k));
                if (jo.get("insValue") != null) {
@@ -639,7 +739,7 @@
                                        break;
                                }
                            } else if (value.equals("序号")) {
                                if(itemSet.add(p.getInspectionItem())){
                                if (itemSet.add(p.getInspectionItem())) {
                                    index.getAndIncrement();
                                }
                                textRenderData.setText(index + "");
@@ -657,12 +757,16 @@
                            } else if (value.equals("试验方法")) {
                                textRenderData.setText(p.getMethodS());
                            } else if (value.equals("检验项")) {
                                textRenderData.setText(p.getInspectionItem() + "\r\n" + p.getInspectionItemEn());
                                if (ObjectUtils.isEmpty(p.getInspectionItemEn())) {
                                    textRenderData.setText(p.getInspectionItem());
                                } else {
                                    textRenderData.setText(p.getInspectionItem() + "&" + p.getInspectionItemEn());
                                }
                            } else if (value.equals("检验子项")) {
                                if (ObjectUtils.isEmpty(p.getInspectionItemSubclassEn())) {
                                    textRenderData.setText(p.getInspectionItemSubclass());
                                } else {
                                    textRenderData.setText(p.getInspectionItemSubclass() + "\r\n" + p.getInspectionItemSubclassEn());
                                    textRenderData.setText(p.getInspectionItemSubclass() + "&" + p.getInspectionItemSubclassEn());
                                }
                            } else {
                                textRenderData.setText(v.get("v") == null ? "" : v.get("v") + "");
@@ -702,7 +806,6 @@
                            textRenderData.setText(textRenderData.getText() + "∑" + jo1.get("mc"));
                        }
                        Style style = new Style();
//                        style.setFontFamily(v.get("ff") == null ? "宋体" : v.get("ff") + "");
                        style.setFontFamily("宋体");
                        if (!((v.get("fc") + "").indexOf("rgb") > -1)) {
                            style.setColor(v.get("fc") == null ? "000000" : (v.get("fc") + "").replace("#", ""));
@@ -717,35 +820,74 @@
                    if (rowRenderData.getCells().size() != 0) {
                        rows.add(rowRenderData);
                    }
                    List<TableRenderData> tables1 = new ArrayList<>();
                    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("每行单元格不相等");
                        }
                    tableRenderData.setRows(new ArrayList<>());
                    double totalHeight = 0.0; // 用于跟踪当前表格的总行高
                    double heightThreshold = 8000.0; // 阈值,例如40cm*28px*15twips
                    List<RowRenderData> firstTwoRows = new ArrayList<>(); // 保存前两行以便复制到新表格
                    // 保存前两行以便复制到新表格
                    if (rows.size() >= 2) {
                        firstTwoRows.add(rows.get(0));
                        firstTwoRows.add(rows.get(1));
                    }
                    TableStyle tableStyle = new TableStyle();
                    tableStyle.setColWidths(new int[]{650, 1600, 2000, 750, 2800, 1100, 1100});
                    tableStyle.setWidth("10000");
                    tableStyle.setAlign(TableRowAlign.CENTER);
                    BorderStyle borderStyle = new BorderStyle();
                    borderStyle.setColor("000000");
                    borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                    borderStyle.setSize(14);
                    tableStyle.setLeftBorder(borderStyle);
                    tableStyle.setTopBorder(borderStyle);
                    tableStyle.setRightBorder(borderStyle);
                    tableStyle.setBottomBorder(borderStyle);
                    tableRenderData.setTableStyle(tableStyle);
                    Map<String, Object> table = new HashMap<>();
                    table.put("table", tableRenderData);
                    table.put("report", insReport);
                    tables.add(table);
                    for (RowRenderData row : rows) {
                        double rowHeight = row.getRowStyle().getHeight(); // 获取当前行的行高
                        totalHeight += rowHeight; // 更新总行高
                        if (totalHeight >= heightThreshold) {
                            // 创建新表格并复制前两行
                            TableRenderData newTableRenderData = new TableRenderData();
                            newTableRenderData.setRows(new ArrayList<>(firstTwoRows));
                            TableStyle tableStyle = new TableStyle();
                            tableStyle.setColWidths(new int[]{650, 1600, 2000, 750, 2800, 1100, 1100});
                            tableStyle.setWidth("10000");
                            tableStyle.setAlign(TableRowAlign.CENTER);
                            BorderStyle borderStyle = new BorderStyle();
                            borderStyle.setColor("000000");
                            borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                            borderStyle.setSize(14);
                            tableStyle.setLeftBorder(borderStyle);
                            tableStyle.setTopBorder(borderStyle);
                            tableStyle.setRightBorder(borderStyle);
                            tableStyle.setBottomBorder(borderStyle);
                            tableRenderData.setTableStyle(tableStyle);
                            newTableRenderData.setTableStyle(tableStyle);
                            tables1.add(tableRenderData);
                            tableRenderData = newTableRenderData;
                            totalHeight = rowHeight;
                        }
                        tableRenderData.getRows().add(row);
                    }
                    if (!tableRenderData.getRows().isEmpty()) {
                        TableStyle tableStyle = new TableStyle();
                        tableStyle.setColWidths(new int[]{650, 1600, 2000, 750, 2800, 1100, 1100});
                        tableStyle.setWidth("10000");
                        tableStyle.setAlign(TableRowAlign.CENTER);
                        BorderStyle borderStyle = new BorderStyle();
                        borderStyle.setColor("000000");
                        borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                        borderStyle.setSize(14);
                        tableStyle.setLeftBorder(borderStyle);
                        tableStyle.setTopBorder(borderStyle);
                        tableStyle.setRightBorder(borderStyle);
                        tableStyle.setBottomBorder(borderStyle);
                        tableRenderData.setTableStyle(tableStyle);
                        tables1.add(tableRenderData);
                    }
                    tables1.forEach(table -> {
                        Map<String, Object> tableMap = new HashMap<>();
                        tableMap.put("table", table);
                        tableMap.put("report", insReport);
                        tables.add(tableMap);
                    });
                });
            });
            String url;
@@ -821,174 +963,211 @@
                    List<InsProduct> insProducts1 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                            .eq(InsProduct::getState, 1)
                            .eq(InsProduct::getInsSampleId, sample.getId())
                            .isNotNull(InsProduct::getInsFiberId));
                    long size = insProducts1.size();
                            .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();
                    List<RowRenderData> rows = new ArrayList<>();
                    //判断检验项目是否有父子关系
                    Boolean state = true;
                    for (InsProduct insProduct : insProducts1) {
                        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 < size + 2; 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("光纤色标\r\nScanning Number∑101");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //项目信息
                                    textRenderData.setText(insProducts1.get((int) (j - 2)).getInspectionItem() + "\r\n" + insProducts1.get((int) (j - 2)).getInspectionItemEn() + "∑" + (j + 101));
                                    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("管色标\r\nPipe∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("光纤色标\r\nScanning Number∑101");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //项目信息
                                    //判断是否有项目子类
                                    if (insProducts1.get((int) (j - 2)).getInspectionItemSubclass().equals("") || insProducts1.get((int) (j - 2)).getInspectionItemSubclass() == null) {
                                        textRenderData.setText(insProducts1.get((int) (j - 2)).getInspectionItem() + "\r\n" + insProducts1.get((int) (j - 2)).getInspectionItemEn() + "∑" + (j + 101));
                                    } else {
                                        textRenderData.setText(insProducts1.get((int) (j - 2)).getInspectionItemSubclass() + "\r\n" + insProducts1.get((int) (j - 2)).getInspectionItemSubclassEn());
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            } else {
                                int aa = 0;
                                if (a == 2) {
                                    aa = (int) i - 2;
                                } else aa = (int) i - 1;
                                InsFiber insFiber = insFiberMapper.selectById(insProducts1.get(aa).getInsFiberId());
                                //填值
                                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 {
                                    //项目信息
                                    textRenderData.setText(insProducts1.get((int) (j - 2)).getLastValue());
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                    long number = 7;
                    long k = 0;
                    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;
                                }
                            }
                        }
                        rowRenderData.setCells(cells);
                        if (rowRenderData.getCells().size() != 0) {
                            rows.add(rowRenderData);
                            int a = 1;
                            if (!state) {
                                a = 2;
                            }
                            //表格的行数
                            for (long i = 0; i < size2 + a; i++) {
                                RowRenderData rowRenderData = new RowRenderData();
                                RowStyle rowStyle = new RowStyle();
                                rowStyle.setHeight(40);
                                rowRenderData.setRowStyle(rowStyle);
                                List<CellRenderData> cells = new ArrayList<>();
                                //表格的列数
                                for (long j = 0; j < 9; j++) {
                                    CellRenderData cellRenderData = new CellRenderData();
                                    CellStyle cellStyle = new CellStyle();
                                    cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                                    cellRenderData.setCellStyle(cellStyle);
                                    List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                                    ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                                    ParagraphStyle paragraphStyle = new ParagraphStyle();
                                    paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                                    paragraphRenderData.setParagraphStyle(paragraphStyle);
                                    List<RenderData> renderData = new ArrayList<>();
                                    TextRenderData textRenderData = new TextRenderData();
                                    Style style = new Style();
                                    style.setFontFamily("宋体");
                                    style.setColor("000000");
                                    textRenderData.setStyle(style);
                                    if (i == 0) {
                                        //第一行
                                        if (j == 0) {
                                            //第一列
                                            textRenderData.setText("管色标&Pipe∑100");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二列
                                            textRenderData.setText("光纤色标&Scanning Number∑101");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //项目信息
                                            try {
                                                filteredProducts.get((int) (j - 2 + k));
                                            } catch (Exception e) {
                                                continue;
                                            }
                                            textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getInspectionItem() + "&" + insProducts1.get((int) (j - 2 + k)).getInspectionItemEn() + "∑" + (j + 101 + k));
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    } else if (a == 2 && i == 1) {
                                        //有父子项目关系的第三行
                                        if (j == 0) {
                                            //第一列
                                            textRenderData.setText("管色标&Pipe∑100");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二列
                                            textRenderData.setText("光纤色标&Scanning Number∑101");
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //项目信息
                                            try {
                                                filteredProducts.get((int) (j - 2 + k));
                                            } catch (Exception e) {
                                                continue;
                                            }
                                            //判断是否有项目子类
                                            if (filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclass().equals("") || filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclass() == null) {
                                                textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getInspectionItem() + "&" + filteredProducts.get((int) (j - 2 + k)).getInspectionItemEn() + "∑" + (j + 101 + k));
                                            } else {
                                                textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclass() + "&" + filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclassEn());
                                            }
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    } else {
                                        int aa;
                                        if (a == 2) {
                                            aa = (int) i - 2;
                                        } else aa = (int) i - 1;
                                        List<Integer> list = insProducts1.stream().map(InsProduct::getInsFiberId).distinct().collect(Collectors.toList());
                                        try {
                                            insFiberMapper.selectById(list.get(aa));
                                        } catch (Exception e) {
                                            continue;
                                        }
                                        InsFiber insFiber = insFiberMapper.selectById(list.get(aa));
                                        //填值
                                        if (j == 0) {
                                            //第一列
                                            textRenderData.setText(insFiber.getBushColor());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else if (j == 1) {
                                            //第二列
                                            textRenderData.setText(insFiber.getColor());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        } else {
                                            //项目信息
                                            try {
                                                filteredProducts.get((int) (j - 2 + k));
                                            } catch (Exception e) {
                                                continue;
                                            }
                                            textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getLastValue());
                                            renderData.add(textRenderData);
                                            paragraphRenderData.setContents(renderData);
                                            paragraphRenderDataList.add(paragraphRenderData);
                                            cellRenderData.setParagraphs(paragraphRenderDataList);
                                            cells.add(cellRenderData);
                                        }
                                    }
                                }
                                rowRenderData.setCells(cells);
                                if (rowRenderData.getCells().size() != 0) {
                                    rows.add(rowRenderData);
                                }
                            }
                            TableRenderData tableRenderData = new TableRenderData();
                            tableRenderData.setRows(rows);
                            int countSize = tableRenderData.getRows().get(0).getCells().size();
                            for (RowRenderData row : tableRenderData.getRows()) {
                                for (CellRenderData cell : row.getCells()) {
                                    System.out.print(cell.getParagraphs().get(0).getContents());
                                }
                                System.out.println("");
                                if (row.getCells().size() != countSize) {
                                    throw new ErrorException("每行单元格不相等");
                                }
                            }
                            TableStyle tableStyle = new TableStyle();
                            tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                            tableStyle.setAlign(TableRowAlign.CENTER);
                            BorderStyle borderStyle = new BorderStyle();
                            borderStyle.setColor("000000");
                            borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                            borderStyle.setSize(14);
                            tableStyle.setLeftBorder(borderStyle);
                            tableStyle.setTopBorder(borderStyle);
                            tableStyle.setRightBorder(borderStyle);
                            tableStyle.setBottomBorder(borderStyle);
                            tableRenderData.setTableStyle(tableStyle);
                            Map<String, Object> table = new HashMap<>();
                            table.put("table2", tableRenderData);
                            table.put("report", insReport);
                            table.put("sample_number", sample.getSampleCode());
                            table.put("type", sample.getModel());
                            tables2.add(table);
                            k += 7;
                        }
                    }
                    TableRenderData tableRenderData = new TableRenderData();
                    tableRenderData.setRows(rows);
                    int countSize = tableRenderData.getRows().get(0).getCells().size();
                    for (RowRenderData row : tableRenderData.getRows()) {
                        /*for (CellRenderData cell : row.getCells()) {
                            System.out.print(cell.getParagraphs().get(0).getContents());
                        }
                        System.out.println("");*/
                        if (row.getCells().size() != countSize) {
                            throw new ErrorException("每行单元格不相等");
                        }
                    }
                    TableStyle tableStyle = new TableStyle();
                    tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                    tableStyle.setAlign(TableRowAlign.CENTER);
                    BorderStyle borderStyle = new BorderStyle();
                    borderStyle.setColor("000000");
                    borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                    borderStyle.setSize(14);
                    tableStyle.setLeftBorder(borderStyle);
                    tableStyle.setTopBorder(borderStyle);
                    tableStyle.setRightBorder(borderStyle);
                    tableStyle.setBottomBorder(borderStyle);
                    tableRenderData.setTableStyle(tableStyle);
                    Map<String, Object> table = new HashMap<>();
                    table.put("table2", tableRenderData);
                    table.put("report", insReport);
                    table.put("sample_number", sample.getSampleCode());
                    table.put("type", sample.getModel());
                    tables2.add(table);
                });
            }
@@ -1011,12 +1190,16 @@
            if (ObjectUtils.isEmpty(insOrder.getPhone())) {
                insOrder.setPhone("/");
            }
            //检验项目的环境
            InsProduct insProduct = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getState, 1).eq(InsProduct::getInsSampleId, samples.get(0).getId())).get(0);
            String environment = "";
            environment = (ObjectUtils.isNotEmpty(insProduct.getTemperature()) ? insProduct.getTemperature() + "℃ " : "") + (ObjectUtils.isNotEmpty(insProduct.getHumidity()) ? insProduct.getHumidity() + "%" : "");
            String finalEnvironment = environment;
            XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
                    new HashMap<String, Object>() {{
                        put("order", insOrder);
                        put("report", insReport);
                        //put("user", user);
                        put("environment", finalEnvironment);
                        put("custom", custom);
                        put("sampleSize", samples.size());
                        put("tables", tables);
@@ -1057,18 +1240,28 @@
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            // 处理合并单元格的问题
            String path = wordUrl + "/" + insReport.getCode().replace("/", "") + ".docx";
            try {
                FileInputStream stream = new FileInputStream(path);
                XWPFDocument document = new XWPFDocument(stream);
                List<XWPFTable> xwpfTables = document.getTables();
                for (int i = 1; i < xwpfTables.size() - (deviceList == null ? 1 : 2); i++) {
                    Set<String> set1 = new HashSet<>();
                    Map<String, Map<String, Integer>> maps = new HashMap<>();
                    for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
                        for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
                            if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("∑") > -1) {
                                String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("∑");
                    XWPFTable table = xwpfTables.get(i);
                    for (int j = 0; j < table.getRows().size(); j++) {
                        XWPFTableRow row = table.getRow(j);
                        if (row == null) continue;
                        for (int k = 0; k < row.getTableCells().size(); k++) {
                            XWPFTableCell cell = row.getCell(k);
                            if (cell == null || cell.getText() == null) continue;
                            if (cell.getText().indexOf("∑") > -1) {
                                String[] split = cell.getText().split("∑");
                                if (set1.add(split[1])) {
                                    Map<String, Integer> map = new HashMap<>();
                                    map.put("sr", j);
@@ -1084,33 +1277,123 @@
                                        map1.put("er", map1.get("er") + 1);
                                    }
                                }
                                String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("∑")[0];
                                xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
                                xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
                                xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
                                xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER);
                                String str = split[0];
                                cell.removeParagraph(0);
                                cell.setText(str);
                                cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
                                if (cell.getParagraphArray(0) != null) {
                                    cell.getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER);
                                }
                            }
                        }
                    }
                    List<String> list = new ArrayList<>();
                    for (String s : maps.keySet()) {
                        list.add(s);
                    }
                    List<String> list = new ArrayList<>(maps.keySet());
                    for (int a = list.size() - 1; a >= 0; a--) {
                        Map<String, Integer> v = maps.get(list.get(a));
                        for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
                       /* for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
                            if (v.get("ec") > v.get("sc")) {
                                TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
                                TableTools.mergeCellsHorizonal(table, v.get("sr") + j, v.get("sc"), v.get("ec"));
                            }
                        }
                        if (v.get("er") > v.get("sr")) {
                            TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
                            TableTools.mergeCellsVertically(table, v.get("sc"), v.get("sr"), v.get("er"));
                        }*/
                        for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
                            if (v.get("ec") > v.get("sc")) {
                                XWPFTableRow row = table.getRow(v.get("sr") + j);
                                if (row != null) {
                                    for (int col = v.get("sc"); col <= v.get("ec"); col++) {
                                        XWPFTableCell cell = row.getCell(col);
                                        if (cell == null) {
                                            row.createCell(); // 创建新的单元格以防空指针异常
                                        }
                                    }
                                    TableTools.mergeCellsHorizonal(table, v.get("sr") + j, v.get("sc"), v.get("ec"));
                                }
                            }
                        }
                        if (v.get("er") > v.get("sr")) {
                            for (int rowIdx = v.get("sr"); rowIdx <= v.get("er"); rowIdx++) {
                                XWPFTableRow row = table.getRow(rowIdx);
                                if (row != null) {
                                    XWPFTableCell cell = row.getCell(v.get("sc"));
                                    if (cell == null) {
                                        row.createCell(); // 创建新的单元格以防空指针异常
                                    }
                                }
                            }
                            TableTools.mergeCellsVertically(table, v.get("sc"), v.get("sr"), v.get("er"));
                        }
                    }
                }
                FileOutputStream fileOutputStream = new FileOutputStream(path);
                document.write(fileOutputStream);
                fileOutputStream.close();
            } catch (FileNotFoundException e) {
                throw new RuntimeException(e);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            try {
                FileInputStream stream1 = new FileInputStream(path);
                XWPFDocument document1 = new XWPFDocument(stream1);
                List<XWPFTable> xwpfTables1 = document1.getTables();
                //处理中英文换行的问题
                for (int i = 1; i < xwpfTables1.size() - (deviceList == null ? 1 : 2); i++) {
                    for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
                        for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
                            if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("&")) {
                                String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
                                String[] split = text.split("&");
                                xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
                                XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
                                XWPFRun run = xwpfParagraph.createRun();
                                run.setText(split[0]);
                                if (ObjectUtils.isNotNull(split[1])) {
                                    run.addBreak();
                                    run.setText(split[1]);
                                }
                                xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
                            }
                            /*if (k == 2 || k == 3 || k == 4) {
                                if (k == 2 && xwpfTables1.get(i).getRows().get(j).getTableCells().get(k-1).getText().contains("@@")) {
                                    XWPFTableCell cell = xwpfTables1.get(i).getRow(j).getCell(k);
                                    CTTblWidth tblWidth = cell.getCTTc().addNewTcPr().addNewTcW();
                                    tblWidth.setType(STTblWidth.DXA);
                                    tblWidth.setW(BigInteger.valueOf((int) (4.79 * 1440 / 2.54)));
                                }
                                if (k == 3 && xwpfTables1.get(i).getRows().get(j).getTableCells().get(k - 2).getText().contains("@@")) {
                                    XWPFTableCell cell = xwpfTables1.get(i).getRow(j).getCell(k);
                                    CTTblWidth tblWidth = cell.getCTTc().addNewTcPr().addNewTcW();
                                    tblWidth.setType(STTblWidth.DXA);
                                    tblWidth.setW(BigInteger.valueOf((int) (1.49 * 1440 / 2.54)));
                                }
                                if (k == 4 && xwpfTables1.get(i).getRows().get(j).getTableCells().get(k - 3).getText().contains("@@")) {
                                    XWPFTableCell cell = xwpfTables1.get(i).getRow(j).getCell(k);
                                    CTTblWidth tblWidth = cell.getCTTc().addNewTcPr().addNewTcW();
                                    tblWidth.setType(STTblWidth.DXA);
                                    tblWidth.setW(BigInteger.valueOf((int) (3.51 * 1440 / 2.54)));
                                }
                            }
                            if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@@")) {
                                String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
                                text = text.replace("@@","");
                                xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
                                XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
                                XWPFRun run = xwpfParagraph.createRun();
                                run.setText(text);
                                xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
                            }*/
                        }
                    }
                }
                FileOutputStream fileOutputStream1 = new FileOutputStream(path);
                document1.write(fileOutputStream1);
                fileOutputStream1.close();
            } catch (FileNotFoundException e) {
                throw new RuntimeException(e);
            } catch (IOException e) {
@@ -1120,7 +1403,8 @@
        return 1;
    }
    private void getTemplateThing(Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) {
    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<>());
@@ -1156,8 +1440,24 @@
            String str = "";
            int count = 0;
            for (InsProduct product : insProducts) {
                count++;
                str += "<br/>" + count + ":" + product.getInspectionItem() + " " + product.getInspectionItemSubclass() + "<br/>";
                //如果是光缆的温度循环
                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.setInsResult(0);
                    } else if (collect.size() == insProductList.size() && collect.stream().distinct().collect(Collectors.toList()).containsAll(tt)) {
                        product.setInsResult(0);
                    }
                    insProductMapper.updateById(product);
                } else {
                    count++;
                    str += "<br/>" + count + ":" + product.getInspectionItem() + " " + product.getInspectionItemSubclass() + "<br/>";
                }
            }
            throw new ErrorException("<strong>存在待检验的项目:</strong><br/>" + str);
        }