7 小时以前 ed01be06d17f1159d32e7fa2133a32f2986d3b9f
yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/indicatorresult/MesQcProductReportWordBuilderTest.java
@@ -54,21 +54,35 @@
            assertEquals("10.023、10.115", itemTable.getRow(2).getCell(1).getText().trim());
            assertEquals("/", itemTable.getRow(3).getCell(1).getText().trim());
            // 判定结论/质检专用章留空
            // 判定结论带出检验结果;质检专用章留空待盖章
            assertTrue(itemTable.getRow(2).getCell(0).getText().contains("试样质量 m /g"));
            assertEquals("判定结论:", tables.get(2).getRow(0).getCell(0).getText().trim());
            assertEquals("判定结论:1型", tables.get(2).getRow(0).getCell(0).getText().trim());
            assertEquals("质检专用章:", tables.get(2).getRow(0).getCell(1).getText().trim());
            // 备注默认文案
            assertTrue(tables.get(3).getRow(0).getCell(1).getText().contains("检验结果仅对样品本身或本批次负责"));
            // 签字行留空(打印后手写),不得出现姓名
            // 签字行带出姓名:检验=检测人、复核=复核人、批准=审核人
            String signLine = doc.getParagraphs().stream()
                    .filter(p -> p.getText().contains("批准:"))
                    .findFirst().orElseThrow().getText();
            assertTrue(signLine.contains("检验:") && signLine.contains("复核:"));
            assertTrue(!signLine.contains("李博") && !signLine.contains("周亚洁") && !signLine.contains("包翠萍"),
                    "签字行应留空,不输出检验/复核/批准姓名");
            assertTrue(signLine.contains("检验:李博"), "检验应带出检测人姓名:" + signLine);
            assertTrue(signLine.contains("复核:周亚洁"), "复核应带出复核人姓名:" + signLine);
            assertTrue(signLine.contains("批准:包翠萍"), "批准应带出审核人姓名:" + signLine);
        }
    }
    @Test
    public void testBuildWithoutSigners() throws IOException {
        MesQcQcReportRespVO report = randomReport();
        report.setInspectorName(null).setAuditName("").setApproveName(null);
        byte[] docx = MesQcProductReportWordBuilder.build(report);
        try (InputStream in = new ByteArrayInputStream(docx); XWPFDocument doc = new XWPFDocument(in)) {
            String signLine = doc.getParagraphs().stream()
                    .filter(p -> p.getText().contains("批准:"))
                    .findFirst().orElseThrow().getText();
            assertTrue(signLine.contains("检验:") && signLine.contains("复核:") && signLine.contains("批准:"),
                    "未指定人员时仍保留三个栏位供手写:" + signLine);
        }
    }
@@ -80,7 +94,8 @@
                .setSamplingTime(LocalDateTime.of(2026, 1, 6, 9, 0))
                .setInspectDate(LocalDateTime.of(2026, 1, 6, 15, 0))
                .setDocCreateTime(LocalDateTime.of(2026, 1, 6, 8, 0))
                .setInspectorName("李博").setAuditName("周亚洁").setApproveName("包翠萍");
                .setInspectorName("李博").setAuditName("周亚洁").setApproveName("包翠萍")
                .setCheckResult(1).setCheckResultText("1型");
        MesQcQcReportRespVO.ReportItem appearance = new MesQcQcReportRespVO.ReportItem();
        appearance.setIndicatorName("外观").setItemType(1).setSortOrder(10);