inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -35,6 +35,8 @@
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.springframework.beans.factory.annotation.Value;
@@ -270,7 +272,6 @@
    @Override
    public Map<String, Object> getReportModel(Integer sampleId) {
        Map<String, Object> map = new HashMap<>();
        //List<Integer> insSampleIds = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId)).stream().map(InsSample::getId).collect(Collectors.toList());
        //先查出套管
        List<InsBushing> insBushings = insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery().eq(InsBushing::getInsSampleId, sampleId));
        List<InsFibers> fibers = new ArrayList<>();
@@ -294,7 +295,71 @@
        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
@@ -556,6 +621,30 @@
                    Set<String> delSet = new HashSet<>();
                    List<ExcelDto> excelDtos = JSON.parseArray(tem, ExcelDto.class);
                    List<ExcelDto> mcList = new ArrayList<>();
                   /* int aaaa = excelDtos.get(excelDtos.size() - 1).getR();//这里是模版里面的所有检测项的长度,先以15个项目分页
                    int bbbb = 17;
                    int cccc = 0;
                    for (int p = 0; p < aaaa; p++) {
                        if (p % bbbb == 0) {
                            for (int y = 0; y < excelDtos.size(); y++) {
                                if (y == 0 || y == 1) {
                                    if (excelDtos.get(y).getV().getMc() != null && excelDtos.get(y).getV().getMc().getCs() != null && excelDtos.get(y).getV().getMc().getRs() != null) {
                                        mcList.add(excelDtos.get(y));
                                    }
                                } else {
                                    try {
                                        excelDtos.get(y + cccc - 2);
                                    } catch (Exception e) {
                                        continue;
                                    }
                                    if (excelDtos.get(y + cccc - 2).getV().getMc() != null && excelDtos.get(y + cccc - 2).getV().getMc().getCs() != null && excelDtos.get(y + cccc - 2).getV().getMc().getRs() != null) {
                                        mcList.add(excelDtos.get(y + cccc - 2));
                                    }
                                }
                            }
                            cccc += 17;
                        }
                    }*/
                    excelDtos.forEach(b -> {
                        if (b.getV().getMc() != null && b.getV().getMc().getCs() != null && b.getV().getMc().getRs() != null) {
                            mcList.add(b);
@@ -689,12 +778,12 @@
                            } else if (value.equals("试验方法")) {
                                textRenderData.setText(p.getMethodS());
                            } else if (value.equals("检验项")) {
                                textRenderData.setText(p.getInspectionItem() + "\r\n" + p.getInspectionItemEn());
                                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") + "");
@@ -853,13 +942,26 @@
                    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();
                    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 : insProducts1) {
                            for (InsProduct insProduct : filteredProducts) {
                        if (!insProduct.getInspectionItemSubclass().equals("") && insProduct.getInspectionItemSubclass() != null) {
                            state = false;
                        }
@@ -877,7 +979,7 @@
                        rowRenderData.setRowStyle(rowStyle);
                        List<CellRenderData> cells = new ArrayList<>();
                        //表格的列数
                        for (long j = 0; j < size + 2; j++) {
                                for (long j = 0; j < 9; j++) {
                            CellRenderData cellRenderData = new CellRenderData();
                            CellStyle cellStyle = new CellStyle();
                            cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
@@ -897,7 +999,7 @@
                                //第一行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("管色标\r\nPipe∑100");
                                            textRenderData.setText("管色标&Pipe∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
@@ -905,7 +1007,7 @@
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("光纤色标\r\nScanning Number∑101");
                                            textRenderData.setText("光纤色标&Scanning Number∑101");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
@@ -913,7 +1015,12 @@
                                    cells.add(cellRenderData);
                                } else {
                                    //项目信息
                                    textRenderData.setText(insProducts1.get((int) (j - 2)).getInspectionItem() + "\r\n" + insProducts1.get((int) (j - 2)).getInspectionItemEn() + "∑" + (j + 101));
                                            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);
@@ -924,7 +1031,7 @@
                                //有父子项目关系的第三行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("管色标\r\nPipe∑100");
                                            textRenderData.setText("管色标&Pipe∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
@@ -932,7 +1039,7 @@
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("光纤色标\r\nScanning Number∑101");
                                            textRenderData.setText("光纤色标&Scanning Number∑101");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
@@ -940,11 +1047,16 @@
                                    cells.add(cellRenderData);
                                } else {
                                    //项目信息
                                            try {
                                                filteredProducts.get((int) (j - 2 + k));
                                            } catch (Exception e) {
                                                continue;
                                            }
                                    //判断是否有项目子类
                                    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));
                                            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(insProducts1.get((int) (j - 2)).getInspectionItemSubclass() + "\r\n" + insProducts1.get((int) (j - 2)).getInspectionItemSubclassEn());
                                                textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclass() + "&" + filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclassEn());
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
@@ -953,11 +1065,17 @@
                                    cells.add(cellRenderData);
                                }
                            } else {
                                int aa = 0;
                                        int aa;
                                if (a == 2) {
                                    aa = (int) i - 2;
                                } else aa = (int) i - 1;
                                InsFiber insFiber = insFiberMapper.selectById(insProducts1.get(aa).getInsFiberId());
                                        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) {
                                    //第一列
@@ -977,7 +1095,12 @@
                                    cells.add(cellRenderData);
                                } else {
                                    //项目信息
                                    textRenderData.setText(insProducts1.get((int) (j - 2)).getLastValue());
                                            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);
@@ -995,10 +1118,10 @@
                    tableRenderData.setRows(rows);
                    int countSize = tableRenderData.getRows().get(0).getCells().size();
                    for (RowRenderData row : tableRenderData.getRows()) {
                        /*for (CellRenderData cell : row.getCells()) {
                                for (CellRenderData cell : row.getCells()) {
                            System.out.print(cell.getParagraphs().get(0).getContents());
                        }
                        System.out.println("");*/
                                System.out.println("");
                        if (row.getCells().size() != countSize) {
                            throw new ErrorException("每行单元格不相等");
                        }
@@ -1021,6 +1144,9 @@
                    table.put("sample_number", sample.getSampleCode());
                    table.put("type", sample.getModel());
                    tables2.add(table);
                            k += 7;
                        }
                    }
                });
            }
@@ -1043,12 +1169,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);
@@ -1089,6 +1219,7 @@
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            //处理合并单元格的问题
            String path = wordUrl + "/" + insReport.getCode().replace("/", "") + ".docx";
            try {
                FileInputStream stream = new FileInputStream(path);
@@ -1148,11 +1279,45 @@
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            try {
                FileInputStream stream1 = new FileInputStream(path);
                XWPFDocument document1 = new XWPFDocument(stream1);
                List<XWPFTable> xwpfTables1 = document1.getTables();
                //处理中英文换行的问题
                for (int i = 1; i < xwpfTables1.size() - (deviceList == null ? 1 : 2); i++) {
                    for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
                        for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
                            if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("&")) {
                                String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
                                String[] split = text.split("&");
                                xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
                                XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
                                XWPFRun run = xwpfParagraph.createRun();
                                run.setText(split[0]);
                                if (ObjectUtils.isNotNull(split[1])) {
                                    run.addBreak();
                                    run.setText(split[1]);
                                }
                                xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
                            }
                        }
                    }
                }
                //处理检验结果跨页的问题
                FileOutputStream fileOutputStream1 = new FileOutputStream(path);
                document1.write(fileOutputStream1);
                fileOutputStream1.close();
            } catch (FileNotFoundException e) {
                throw new RuntimeException(e);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        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<>());
@@ -1188,9 +1353,25 @@
            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.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);
        }
        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));