zss
2025-03-15 fdde707bb95af657d838426f1329128b1ff167ab
报告调整
已修改13个文件
已添加3个文件
1219 ■■■■ 文件已修改
cnas-server/src/main/java/com/yuanchu/mom/pojo/Device.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/pom.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsReportController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/dto/DevListDto.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/dto/InsProductWordDto.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/dto/InsUserDto.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/mapper/StandardMethodListMapper.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/InsOrderServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/utils/FuSheUtils.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java 1049 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderMapper.xml 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/StandardMethodListMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/static/report-template.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/pojo/Device.java
@@ -152,4 +152,7 @@
    @ApiModelProperty("产地")
    private String origin;
    @ApiModelProperty("软件版本")
    private String version;
}
inspect-server/pom.xml
@@ -16,6 +16,14 @@
    <description>inspect-server</description>
    <packaging>jar</packaging>
    <repositories>
        <repository>
            <id>com.e-iceblue</id>
            <name>e-iceblue</name>
            <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
        </repository>
    </repositories>
    <dependencies>
        <!--word转pdf-->
        <!--D:\JavaWork\center-lims-after\inspect-server\src\main\resources\lib-->
@@ -52,6 +60,12 @@
        </dependency>
        <dependency>
            <groupId>e-iceblue</groupId>
            <artifactId>spire.doc.free</artifactId>
            <version>5.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>5.3.18</version>
@@ -84,4 +98,4 @@
            <version>5.5.2</version>
        </dependency>
    </dependencies>
</project>
</project>
inspect-server/src/main/java/com/yuanchu/mom/controller/InsReportController.java
@@ -150,12 +150,11 @@
        return Result.success(insReportService.upAll(file));
    }
    //取消2.26
    @ValueAuth
    @ApiOperation(value = "查出该订单下每个样品下每个站点的检验次数")
    @GetMapping("/getInsOrderStateCount")
    public Result getInsOrderStateCount(Integer id){
        return Result.success(insReportService.getInsOrderStateCount(id));
    public Result getInsOrderStateCount(Integer id,Integer sampleId){
        return Result.success(insReportService.getInsOrderStateCount(id,sampleId));
    }
    //取消2.26
inspect-server/src/main/java/com/yuanchu/mom/dto/DevListDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.yuanchu.mom.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
//报告生成的测试仪表
public class DevListDto {
    @ApiModelProperty("序号")
    private String indexs;
    @ApiModelProperty("仪器设备")
    private String name;
    @ApiModelProperty("型号")
    private String model;
    @ApiModelProperty("编号")
    private String number;
    @ApiModelProperty("软件版本")
    private String version;
    @ApiModelProperty("校准有效日期")
    private String date;
}
inspect-server/src/main/java/com/yuanchu/mom/dto/InsProductWordDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.yuanchu.mom.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
//报告生成的检验情况一览表
public class InsProductWordDto {
    @ApiModelProperty("序号")
    private String index;
    @ApiModelProperty("检验项目")
    private String term;
    @ApiModelProperty("结论")
    private String result;
}
inspect-server/src/main/java/com/yuanchu/mom/dto/InsUserDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.yuanchu.mom.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
//报告生成的检测人员信息
public class InsUserDto {
    @ApiModelProperty("序号")
    private String index;
    @ApiModelProperty("项目")
    private String insProduct;
    @ApiModelProperty("测试人员")
    private String insUser;
    @ApiModelProperty("审核人员")
    private String checkUser;
}
inspect-server/src/main/java/com/yuanchu/mom/mapper/InsOrderMapper.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.dto.CostStatisticsDto;
import com.yuanchu.mom.dto.DevListDto;
import com.yuanchu.mom.dto.SampleOrderDto;
import com.yuanchu.mom.dto.SampleProductDto2;
import com.yuanchu.mom.pojo.InsOrder;
@@ -37,7 +38,8 @@
    List<CostStatisticsDto> selectCostStatistics2(@Param("ew") QueryWrapper<CostStatisticsDto> ew);
    List<Map<String, String>> selectDeviceList(Set<String> names);
    List<DevListDto> selectDeviceList(Set<String> names);
    List<SampleDefectsFatherVo> selectSampleDefects(Page page, @Param("inspectionItems") String inspectionItems, @Param("orderNumber") String orderNumber);
    Long getCount(@Param("inspectionItems") String inspectionItems, @Param("orderNumber") String orderNumber);
@@ -53,4 +55,4 @@
    String seldepLimsId(int depLimsId);
    InsOrder selectById2(Integer id);
}
}
inspect-server/src/main/java/com/yuanchu/mom/mapper/StandardMethodListMapper.java
@@ -32,6 +32,8 @@
    List<StandardMethodList> selectListEnum();
    Integer getStandardMethodId(String code);
    String getStandardMethodName(String code);
}
inspect-server/src/main/java/com/yuanchu/mom/service/InsReportService.java
@@ -47,5 +47,5 @@
    int isReport(InsReportDto insReportDto);
    //查出该订单下每个样品下每个站点下的检验次数
    List<InsOrderStateDto> getInsOrderStateCount(Integer id);
    List<InsOrderStateDto> getInsOrderStateCount(Integer id,Integer sampleId);
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
@@ -166,7 +166,7 @@
            a.setInsOrderId(insOrder.getId());
            //样品编号
            if (StrUtil.isEmpty(a.getSampleCode())) {
                a.setSampleCode("YP-" + a.getModel() + "-" + giveCode.split("-")[2] + "-" + count.get());
                a.setSampleCode("YP-" + giveCode.split("-")[2] + "-" + count.get());
            }
            insSampleMapper.insert(a);
            //样品的检验项目
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java
@@ -256,7 +256,7 @@
        /*检验单结束*/
        List<InsReport> insReports = insReportMapper.selectList(Wrappers.<InsReport>lambdaQuery().eq(InsReport::getInsOrderId, insReport.getInsOrderId()));
        List<Integer> list = insReports.stream().map(InsReport::getIsRatify).distinct().collect(Collectors.toList());
        if (list.size()==1 && list.contains(1)){
        if (list.size() == 1 && list.contains(1)) {
            InsOrder insOrder = insOrderMapper.selectById(insReport.getInsOrderId());
            insOrder.setState(4);
            insOrderMapper.updateById(insOrder);
@@ -377,7 +377,7 @@
            if (insReportDto.getState() == 1) {
                List<InsReportDto1> insReportDto1s = insReportDto.getInsReportDto1s();
                for (InsReportDto1 insReportDto1 : insReportDto1s) {
                    if (ObjectUtils.isNotEmpty(insReportDto1.getInsReportDto2s())){
                    if (ObjectUtils.isNotEmpty(insReportDto1.getInsReportDto2s())) {
                        wordUtils.generateReport(insReportDto.getId(), insReportDto1);
                    }
                }
@@ -390,16 +390,15 @@
    //查出该订单下每个站点下的检验次数
    @Override
    public List<InsOrderStateDto> getInsOrderStateCount(Integer id) {
    public List<InsOrderStateDto> getInsOrderStateCount(Integer id, Integer sampleId) {
        List<InsOrderStateDto> insOrderStateDtos = new ArrayList<>();
        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, id));
        for (InsSample insSample : insSamples) {
            InsOrderStateDto insOrderStateDto = new InsOrderStateDto();
            insOrderStateDto.setInsSample(insSample);
            List<InsOrderState> insOrderStates = insOrderStateMapper.getInsOrderStateCount(id, insSample.getId());
            insOrderStateDto.setInsOrderStates(insOrderStates);
            insOrderStateDtos.add(insOrderStateDto);
        }
        InsSample insSample = insSampleMapper.selectById(sampleId);
        InsOrderStateDto insOrderStateDto = new InsOrderStateDto();
        insOrderStateDto.setInsSample(insSample);
        List<InsOrderState> insOrderStates = insOrderStateMapper.getInsOrderStateCount(id, insSample.getId());
        insOrderStateDto.setInsOrderStates(insOrderStates);
        insOrderStateDtos.add(insOrderStateDto);
        return insOrderStateDtos;
    }
inspect-server/src/main/java/com/yuanchu/mom/utils/FuSheUtils.java
@@ -525,7 +525,7 @@
            XWPFParagraph paragraph18 = table1.getRow(1).getCell(0).getParagraphArray(0);
            paragraph18.setAlignment(ParagraphAlignment.CENTER);
            XWPFRun run18 = paragraph18.createRun();
            run18.setText("频段: " + result1 + "MHz " + "下倾角" + result);
            run18.setText("下倾角" + result);
            List<String> collect = Arrays.stream(split).collect(Collectors.toList());
            List<Map<String, Object>> list = new ArrayList<>();
            // å¯¹æ‰€æœ‰çš„键聚合
@@ -740,7 +740,7 @@
            XWPFParagraph paragraph18 = table1.getRow(1).getCell(0).getParagraphArray(0);
            XWPFRun run18 = paragraph18.createRun();
            run18.setText("频段: " + result1 + "MHz " + "下倾角" + result);
            run18.setText("下倾角" + result);
            List<String> collect = Arrays.stream(split).collect(Collectors.toList());
inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
@@ -12,9 +12,8 @@
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.deepoove.poi.util.TableTools;
import com.yuanchu.mom.dto.InsReportDto1;
import com.yuanchu.mom.dto.InsReportDto2;
import com.yuanchu.mom.dto.SampleProductDto;
import com.spire.doc.FileFormat;
import com.yuanchu.mom.dto.*;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.*;
import com.yuanchu.mom.pojo.*;
@@ -69,9 +68,6 @@
    @Resource
    StandardMethodListMapper standardMethodListMapper;
    @Value("${twoCode}")
    private String twoCode;
    @Resource
    private InsProductMapper insProductMapper;
@@ -160,7 +156,8 @@
                if (inspectionItemSubclass.contains("互调")) {
                    aa += (angles + 1) * portRow * often;
                }
            } else {
            }
            else {
                if (inspectionItemSubclass.contains("电压驻波比")) {
                    aa += (angles + 1) * portRow;
                }
@@ -276,7 +273,7 @@
                    style.setFontFamily("宋体");
                    style.setColor("000000");
                    textRenderData.setStyle(style);
                    if (i == 0) {
                    if (i == 1) {
                        //第一行
                        textRenderData.setText("频段:" + s + "∑0" + lable);
                        renderData.add(textRenderData);
@@ -284,7 +281,9 @@
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else {
                    }
                    else {
                        i=i-1;
                        if (insOrderState.getVersion() == 1) {
                            //非电调版本(简单版)
                            if (inspectionItemSubclass.contains("电压驻波比") && i <= 2 * portRow) {
@@ -355,7 +354,7 @@
                                            textRenderData.setText("不判定");
                                        }
                                    } else {
                                        textRenderData.setText("/");
                                        textRenderData.setText("判定");
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
@@ -801,7 +800,7 @@
                                } else if (j == 4) {
                                    //第五列
                                    if ((i - (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg)) % (angles + 1) == 1) {
                                        textRenderData.setText("角度");
                                        textRenderData.setText("频段");
                                    } else {
                                        textRenderData.setText(result2s.get(0).getAngle().split(",")[(i - (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) - 2) % (angles + 1)]);
                                    }
@@ -813,7 +812,7 @@
                                } else if (j == bb - 1) {
                                    //最后一列
                                    if ((i - (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg)) % (angles + 1) == 1) {
                                        textRenderData.setText("/");
                                        textRenderData.setText("判定");
                                    } else {
                                        if (products.get(0).getInsResult() == 1) {
                                            textRenderData.setText("合格∑8" + index + ((i - (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) + (angles - 1)) / (angles + 1) - 1));
@@ -847,7 +846,8 @@
                                    cells.add(cellRenderData);
                                }
                            }
                        } else {
                        }
                        else {
                            //电调版本(复杂版)
                            if (inspectionItemSubclass.contains("电压驻波比") && i <= (angles + 1) * portRow) {
                                cc = (angles + 1) * portRow;
@@ -908,7 +908,7 @@
                                } else if (j == bb - 1) {
                                    //最后一列
                                    if (i % (angles + 1) == 1) {
                                        textRenderData.setText("/");
                                        textRenderData.setText("判定");
                                    } else {
                                        //结论
                                        if (products.get(0).getInsResult() == 1) {
@@ -1013,7 +1013,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - cc) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -1136,7 +1136,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - (dd == 0 ? cc : dd)) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -1259,7 +1259,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee)) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -1382,7 +1382,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff)) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -1487,7 +1487,7 @@
                                    //第五列
                                    if ((i - (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg)) % (angles + 1) == 1) {
                                        //角度
                                        textRenderData.setText("角度");
                                        textRenderData.setText("频段");
                                    } else {
                                        //值
                                        textRenderData.setText(result2s.get(0).getAngle().split(",")[(i + (angles - 1)) % (angles + 1)]);
@@ -1500,7 +1500,7 @@
                                } else if (j == bb - 1) {
                                    //最后一列
                                    if ((i - (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg)) % (angles + 1) == 1) {
                                        textRenderData.setText("/");
                                        textRenderData.setText("判定");
                                    } else {
                                        //结论
                                        if (products.get(0).getInsResult() == 1) {
@@ -1597,7 +1597,7 @@
                                } else if (j == bb - 1) {
                                    //最后一列
                                    if ((i - (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh)) % (angles + 1) == 1) {
                                        textRenderData.setText("/");
                                        textRenderData.setText("判定");
                                    } else {
                                        //结论
                                        if (products.get(0).getInsResult() == 1) {
@@ -1690,7 +1690,7 @@
                                } else if (j == bb - 1) {
                                    //最后一列
                                    if ((i - (mm == 0 ? (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh) : mm)) % (angles + 1) == 1) {
                                        textRenderData.setText("/");
                                        textRenderData.setText("判定");
                                    } else {
                                        //结论
                                        if (products.get(0).getInsResult() == 1) {
@@ -1787,7 +1787,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - (nn == 0 ? (mm == 0 ? (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh) : mm) : nn)) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -1894,7 +1894,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - (pp == 0 ? (nn == 0 ? (mm == 0 ? (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh) : mm) : nn) : pp)) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -2001,7 +2001,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - rr) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -2107,7 +2107,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - ss) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -2578,31 +2578,57 @@
    //生成总报告
    public void generateReport(Integer orderId, InsReportDto1 insReportDto1) {
        LocalDateTime now = LocalDateTime.now();
        InsOrder insOrder = insOrderMapper.selectById(orderId);
        //委托部门 departLims
        String departLims = userMapper.selectDepartLims(insOrder.getPrepareUser());
        SampleProductDto insSample = insSampleMapper.selectSampleProductListByOrderId(insReportDto1.getSampleId());
        String sampleCode = insSample.getSampleCode();
        SampleProductDto s = insSample;
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                .eq(InsProduct::getInsSampleId, insSample.getId())
                .eq(InsProduct::getState, 1));
        /*首页*/
        //产品名称
        String sampleName = insSample.getSample();
        //型号规格
        int indexOf = s.getModel().indexOf("-");
        String models = (indexOf!=-1?s.getModel().substring(indexOf + 1):s.getModel());
        //委托单位
        Custom custom = customMapper.selectById(insOrder.getCompanyId());
        //报告发布日期
        LocalDateTime now = LocalDateTime.now();
        //报告编号
        InsReport insReport = new InsReport();
        insReport.setCode(giveCode.giveCode("TXJC-", "ins_report", "-", "yyMMdd"));
        insReport.setInsSampleId(insSample.getId());
        insReport.setInsOrderId(orderId);
        Set<String> standardMethod = new HashSet<>();
        Set<String> deviceSet = new HashSet<>();
        Set<String> models = new HashSet<>();
        /*检测报告描述*/
        //样品名称,型号规格,时间按照首页的来,order里面的信息有insOrder
        //委托人和电话字段判断
        if (ObjectUtils.isEmpty(insOrder.getPrepareUser())) {
            insOrder.setPrepareUser("/");
        }
        if (ObjectUtils.isEmpty(insOrder.getPhone())) {
            insOrder.setPhone("/");
        }
        //委托部门
        String departLims = userMapper.selectDepartLims(insOrder.getPrepareUser());
        //样品编号
        String sampleCode = insSample.getSampleCode();
        //检测依据
        Set<String> standardMethod = new HashSet<>();
        standardMethod.addAll(insProducts.stream()
                .map(insProduct -> {
                    String standardMethodName = standardMethodListMapper.getStandardMethodName(insProduct.getMethodS());
                    return insProduct.getMethodS()+" "+standardMethodName;
                }).distinct().collect(Collectors.toList()));
        StringBuilder standardMethod2 = new StringBuilder();
        for (String s1 : standardMethod) {
            standardMethod2.append(";\n").append(s1);
        }
        standardMethod2.replace(0, 1, "");
        //检测结论
        AtomicReference<Integer> productSize = new AtomicReference<>(0);
        AtomicReference<Integer> productSize2 = new AtomicReference<>(0);
        AtomicReference<Integer> productSize3 = new AtomicReference<>(0);
        String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
        SampleProductDto s = insSample;
        models.add(s.getModel());
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                .eq(InsProduct::getInsSampleId, insSample.getId())
                .eq(InsProduct::getState, 1));
        /*查询标准方法*/
        standardMethod.addAll(insProducts.stream().map(InsProduct::getMethodS).distinct().collect(Collectors.toList()));
        //总数
        long productCount = insProducts.size();
        //不合格
@@ -2641,79 +2667,47 @@
        productSize.set(productSize.get() + Integer.parseInt(productCount + ""));
        productSize2.set(productSize2.get() + Integer.parseInt(productCount2 + ""));
        productSize3.set(productSize3.get() + Integer.parseInt(productCount3 + ""));
        //将项目按照站点进行分类
        Map<String, List<InsProduct>> listMap = s.getInsProduct().stream().collect(Collectors.groupingBy(InsProduct::getSonLaboratory));
        // åˆ›å»ºä¸€ä¸ª Map å°†ç«™ç‚¹å’Œé¡¹ç›®ID的映射关系
        Map<String, Set<Integer>> labToDeviceMap = new HashMap<>();
        // èŽ·å–æ‰€æœ‰ç«™ç‚¹çš„é¡¹ç›®ID åˆ—表
        for (Map.Entry<String, List<InsProduct>> entry : listMap.entrySet()) {
            Set<Integer> productIds = entry.getValue().stream()
                    .map(InsProduct::getId)
                    .collect(Collectors.toSet());
            labToDeviceMap.put(entry.getKey(), productIds);
        }
        for (InsReportDto2 insReportDto2 : insReportDto1.getInsReportDto2s()) {
            String laboratory = insReportDto2.getLaboratory();
            if (!labToDeviceMap.containsKey(laboratory)) {
                continue;
        /*检验情况一览表*/
        List<InsProductWordDto> insProductList = new ArrayList<>();
        int index1=1;
        for (InsProduct insPro : insProducts) {
            InsProductWordDto insProductWordDto = new InsProductWordDto();
            insProductWordDto.setIndex(index1+"");//序号
            insProductWordDto.setTerm(insPro.getInspectionItem()+"-"+insPro.getInspectionItemSubclass());//检验项目
            if (ObjectUtils.isNotNull(insPro.getInsResult()) && insPro.getInsResult()==0) {
                insProductWordDto.setResult("不合格");//结论
            } else {
                insProductWordDto.setResult("合格");//结论
            }
            Set<Integer> productIds = labToDeviceMap.get(laboratory);
            Integer num = insReportDto2.getNum();
            //普通试验结果表
            List<InsProductResult> insProductResults = insProductResultMapper.selectList(
                    Wrappers.<InsProductResult>lambdaQuery()
                            .eq(InsProductResult::getNum, num)
                            .in(InsProductResult::getInsProductId, productIds));
            for (InsProductResult insProductResult : insProductResults) {
                List<JSONObject> jsonObjects = JSON.parseArray(insProductResult.getEquipValue(), JSONObject.class);
                if (ObjectUtils.isNotEmpty(jsonObjects)) {
                    for (JSONObject jsonObject : jsonObjects) {
                        String value = jsonObject.getString("v");
                        if (value != null && !value.isEmpty()) {
                            deviceSet.add(value);
                        }
            insProductList.add(insProductWordDto);
            index1++;
        }
        /*检测结果*/
        //获取所有检验的站点信息
        List<String> strings = insReportDto1.getInsReportDto2s().stream()
                .map(InsReportDto2::getLaboratory).distinct().collect(Collectors.toList());
        //电路表格
        List<Map<String, Object>> tables2 = new ArrayList<>();
        if (strings.contains("电路试验")) {
            /*勾选的电路试验表*/
            for (InsReportDto2 insReportDto2 : insReportDto1.getInsReportDto2s()) {
                InsOrderUser insOrderUser = insOrderUserMapper.selectById(insReportDto2.getInsOrderUsersId());
                InsOrderState orderState = insOrderStateMapper.selectById(insOrderUser.getInsOrderStateId());
                if (orderState.getLaboratory().equals("电路试验")) {
                    orderState.setNum(insOrderUser.getNum());
                    if (!insOrder.getSampleType().equals("无源器件")) {
                        getWord1(insOrderUser.getTerm(), orderState, tables2);
                    } else {
                        getWord2(insOrderUser.getTerm(), orderState, tables2);
                    }
                }
            }
            //电路试验结果表
            List<InsProductResult2> insProductResult2s = insProductResult2Mapper.selectList(
                    Wrappers.<InsProductResult2>lambdaQuery()
                            .eq(InsProductResult2::getNum, num)
                            .in(InsProductResult2::getInsProductId, productIds));
            for (InsProductResult2 result2 : insProductResult2s) {
                String equipValue = result2.getEquipValue();
                if (equipValue != null && !equipValue.isEmpty()) {
                    deviceSet.add(equipValue);
                }
            }
        }
        /*检验情况一览表*/
        List<Map<String, String>> tables = new ArrayList<>();
        List<Map<String, Object>> tables2 = new ArrayList<>();
        //辐射表格
        List<Map<String, Object>> tables3 = new ArrayList<>();
        List<Map<String, Object>> tables4 = new ArrayList<>();
        Integer indexs = 1;
        //判断是否有电路试验,环境试验
        List<String> strings = insReportDto1.getInsReportDto2s().stream()
                .map(InsReportDto2::getLaboratory).distinct().collect(Collectors.toList());
        if (strings.contains("近场") || strings.contains("远场")) {
            Map<String, String> table = new HashMap<>();
            table.put("indexs", indexs + "");
            indexs += 1;
            table.put("term", "辐射方向图参数");
            List<Integer> list = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .eq(InsProduct::getInsSampleId, insSample.getId())
                    .eq(InsProduct::getInspectionItem, "辐射试验")).stream()
                    .map(InsProduct::getInsResult).distinct().collect(Collectors.toList());
            if (list.contains(0)) {
                table.put("result", "不合格");
            } else {
                table.put("result", "合格");
            }
            tables.add(table);
            /*辐射的试验表*/
            List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery()
                    .eq(InsOrderFile::getInsOrderId, orderId)
@@ -2817,469 +2811,275 @@
                }
            }
        }
        if (strings.contains("电路试验")) {
            strings.remove("电路试验");
            strings.remove("近场");
            strings.remove("远场");
            List<Integer> productIdes = insSample.getInsProduct().stream().map(InsProduct::getId).collect(Collectors.toList());
            List<Integer> collect = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
                    .in(InsProductResult2::getInsProductId, productIdes))
                    .stream().map(InsProductResult2::getResult).distinct().collect(Collectors.toList());
            //如果有环境试验
            if (strings.size() > 0) {
                Map<String, String> table1 = new HashMap<>();
                table1.put("indexs", indexs + "");
                table1.put("term", "环境试验前电路参数");
                if (collect.contains(0)) {
                    table1.put("result", "不合格");
                } else {
                    table1.put("result", "合格");
                }
                tables.add(table1);
                indexs += 1;
                Map<String, String> table2 = new HashMap<>();
                table2.put("indexs", "环境试验:" + String.join("、", strings) + "∑1");
                table2.put("term", "环境试验:" + String.join("、", strings) + "∑1");
                List<Integer> list = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                        .eq(InsProduct::getState, 1)
                        .eq(InsProduct::getInsSampleId,insSample.getId())
                        .in(InsProduct::getSonLaboratory, strings)).stream()
                        .map(InsProduct::getInsResult).distinct().collect(Collectors.toList());
                if (list.contains(0)) {
                    table2.put("result", "不合格");
                } else {
                    table2.put("result", "合格");
                }
                tables.add(table2);
                Map<String, String> table3 = new HashMap<>();
                table3.put("indexs", indexs + "");
                table3.put("term", "环境试验后电路参数");
                if (collect.contains(0)) {
                    table3.put("result", "不合格");
                } else {
                    table3.put("result", "合格");
                }
                tables.add(table3);
                indexs += 1;
                /*创建环境试验条件表2*(项目数+1)*/
                List<InsProduct> products = insSample.getInsProduct().stream()
                        .filter(insProduct -> !insProduct.getInspectionItem().equals("电路试验"))
                        .filter(insProduct -> !insProduct.getInspectionItem().equals("辐射试验"))
                        .map(insProduct -> {
                            InsProduct product = new InsProduct();
                            product.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());
                            product.setTell(insProduct.getTell());
                            return product;
                        }).distinct().collect(Collectors.toList());
                List<RowRenderData> rows = new ArrayList<>();
                //行数
                for (int i = 0; i < products.size() + 1; i++) {
                    RowRenderData rowRenderData = new RowRenderData();
                    RowStyle rowStyle = new RowStyle();
                    rowStyle.setHeight(40);
                    rowRenderData.setRowStyle(rowStyle);
                    List<CellRenderData> cells = new ArrayList<>();
                    //列数
                    for (int j = 0; j < 3; 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("项目");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 1) {
                                //第二列
                                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 == 0) {
                                //第一列
                                textRenderData.setText(products.get(i - 1).getInspectionItemSubclass());
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 1) {
                                textRenderData.setText(products.get(i - 1).getTell());
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else {
                                //第三列
                                //获取检验项目和结论
                                InsProduct insProduct = products.get(i - 1);
                                String shiyanjieguo = "无异常";
                                if (ObjectUtils.isNotNull(insProduct.getInsResult())) {
                                    shiyanjieguo = insProduct.getInsResult() == 0 ? "不合格" : "无异常";
                                }
                                textRenderData.setText("经过" + insProduct.getInspectionItemSubclass() + "之后,样品" +shiyanjieguo + "。");
                                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()) {
                    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(4);
                tableStyle.setLeftBorder(borderStyle);
                tableStyle.setTopBorder(borderStyle);
                tableStyle.setRightBorder(borderStyle);
                tableStyle.setBottomBorder(borderStyle);
                tableRenderData.setTableStyle(tableStyle);
                Map<String, Object> table4 = new HashMap<>();
                table4.put("table4", tableRenderData);
                tables4.add(table4);
            }
            else {
                Map<String, String> table = new HashMap<>();
                table.put("indexs", indexs + "");
                table.put("term", "电路参数");
                if (collect.contains(0)) {
                    table.put("result", "不合格");
                } else {
                    table.put("result", "合格");
                }
                tables.add(table);
                indexs += 1;
            }
            /*勾选的电路试验表*/
            for (InsReportDto2 insReportDto2 : insReportDto1.getInsReportDto2s()) {
                InsOrderUser insOrderUser = insOrderUserMapper.selectById(insReportDto2.getInsOrderUsersId());
                InsOrderState orderState = insOrderStateMapper.selectById(insOrderUser.getInsOrderStateId());
                if (orderState.getLaboratory().equals("电路试验")) {
                    orderState.setNum(insOrderUser.getNum());
                    if (!insOrder.getSampleType().equals("无源器件")) {
                        getWord1(insOrderUser.getTerm(), orderState, tables2);
                    } else {
                        getWord2(insOrderUser.getTerm(), orderState, tables2);
                    }
                }
            }
        }
        else {
            //如果只有环境试验没有电路试验
            strings.remove("近场");
            strings.remove("远场");
            if (strings.size() > 0) {
                Map<String, String> table2 = new HashMap<>();
                table2.put("indexs", "环境试验:" + String.join("、", strings) + "∑1");
                table2.put("term", "环境试验:" + String.join("、", strings) + "∑1");
                List<Integer> list = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                        .eq(InsProduct::getState, 1)
                        .eq(InsProduct::getInsSampleId,insSample.getId())
                        .in(InsProduct::getSonLaboratory, strings)).stream()
                        .map(InsProduct::getInsResult).distinct().collect(Collectors.toList());
                if (list.contains(0)) {
                    table2.put("result", "不合格");
                } else {
                    table2.put("result", "合格");
                }
                tables.add(table2);
                /*创建环境试验条件表2*(项目数+1)*/
                List<InsProduct> products = insSample.getInsProduct().stream()
                        .filter(insProduct -> !insProduct.getInspectionItem().equals("电路试验"))
                        .filter(insProduct -> !insProduct.getInspectionItem().equals("辐射试验"))
                        .map(insProduct -> {
                            InsProduct product = new InsProduct();
                            product.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());
                            product.setTell(insProduct.getTell());
                            return product;
                        }).distinct().collect(Collectors.toList());
                List<RowRenderData> rows = new ArrayList<>();
                //行数
                for (int i = 0; i < products.size() + 1; i++) {
                    RowRenderData rowRenderData = new RowRenderData();
                    RowStyle rowStyle = new RowStyle();
                    rowStyle.setHeight(40);
                    rowRenderData.setRowStyle(rowStyle);
                    List<CellRenderData> cells = new ArrayList<>();
                    //列数
                    for (int j = 0; j < 3; 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("项目");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 1) {
                                //第二列
                                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 == 0) {
                                //第一列
                                textRenderData.setText(products.get(i - 1).getInspectionItemSubclass());
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j == 1) {
                                //第二列
                                textRenderData.setText(products.get(i - 1).getTell());
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else {
                                //第三列
                                //获取检验项目和结论
                                InsProduct insProduct = products.get(i - 1);
                                String shiyanjieguo = "无异常";
                                if (ObjectUtils.isNotNull(insProduct.getInsResult())) {
                                    shiyanjieguo = insProduct.getInsResult() == 0 ? "不合格" : "无异常";
                                }
                                textRenderData.setText("经过" + insProduct.getInspectionItemSubclass() + "之后,样品" + shiyanjieguo + "。");
                                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()) {
                    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(4);
                tableStyle.setLeftBorder(borderStyle);
                tableStyle.setTopBorder(borderStyle);
                tableStyle.setRightBorder(borderStyle);
                tableStyle.setBottomBorder(borderStyle);
                tableRenderData.setTableStyle(tableStyle);
                Map<String, Object> table4 = new HashMap<>();
                table4.put("table4", tableRenderData);
                tables4.add(table4);
            }
        }
        ZipSecureFile.setMinInflateRatio(0.0001);
        InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
        StringBuilder standardMethod2 = new StringBuilder();
        for (String s1 : standardMethod) {
            standardMethod2.append(";\n").append(s1);
        }
        standardMethod2.replace(0, 1, "");
        List<Map<String, String>> deviceList = null;
        if (deviceSet.size() != 0) {
            deviceList = insOrderMapper.selectDeviceList(deviceSet);
        }
        Map<String, String> codeStr = new HashMap<>();
        codeStr.put("报告编号", insReport.getCode());
        codeStr.put("样品名称", insSample.getSample());
        codeStr.put("规格型号", insSample.getModel());
        codeStr.put("发放日期", now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
        String codePath;
        try {
            codePath = new MatrixToImageWriter().code(JackSonUtil.marshal(codeStr).replaceAll("\\{", "")
                    .replaceAll("}", "").replaceAll(",", "").replaceAll("\"", ""), twoCode);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        String modelStr = "";
        for (String model : models) {
            modelStr += "," + model;
        }
        String finalModelStr = modelStr;
        String sampleEn = insSampleMapper.getSampleEn(insOrder.getSample());
        String orderType = insOrderMapper.getEnumLabelByValue(insOrder.getOrderType());
        String formType = insOrderMapper.getEnumLabelByValue(insOrder.getFormType());
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        List<Map<String, String>> finalDeviceList = deviceList;
        List<Map<String, String>> sampleList = insSampleMapper.selectSampleList(orderId);
        Integer userId = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery()
                .eq(InsSampleUser::getInsSampleId, insReportDto1.getSampleId())
                .eq(InsSampleUser::getState, 0)
                .last("limit 1")).getUserId();
        String signatureUrl;
        try {
            signatureUrl = userMapper.selectById(userId).getSignatureUrl();
        } catch (Exception e) {
            throw new ErrorException("找不到检验人的签名");
        }
        if (ObjectUtils.isEmpty(signatureUrl) || signatureUrl.equals("")) {
            throw new ErrorException("找不到检验人的签名");
        }
        Custom custom = customMapper.selectById(insOrder.getCompanyId());
        /*获取附件图片类型*/
        List<Map<String, Object>> images = new ArrayList<>();
        List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery().eq(InsOrderFile::getType, 1).eq(InsOrderFile::getInsOrderId, orderId));
        if (CollectionUtils.isNotEmpty(insOrderFiles)) {
            insOrderFiles.forEach(insOrderFile -> {
                Map<String, Object> image = new HashMap<>();
                PictureRenderData pictureRenderData = Pictures.ofLocal(imgUrl + "/" + insOrderFile.getFileUrl()).sizeInCm(17, 20).create();
                image.put("url", pictureRenderData);
                image.put("report", insReport);
                images.add(image);
            });
        }
        //委托人和电话字段判断
        if (ObjectUtils.isEmpty(insOrder.getPrepareUser())) {
            insOrder.setPrepareUser("/");
        }
        if (ObjectUtils.isEmpty(insOrder.getPhone())) {
            insOrder.setPhone("/");
        }
        //检验项目的环境
        InsProduct insProduct = insProducts.get(0);
        String environment = "";
        environment = (ObjectUtils.isNotEmpty(insProduct.getTemperature()) ? insProduct.getTemperature() + "℃ " : "") + (ObjectUtils.isNotEmpty(insProduct.getHumidity()) ? insProduct.getHumidity() + "%" : "");
        String finalEnvironment = environment;
        //辐射的标题
        String title3 = "";
        if (tables3.size() > 0) {
            title3 = "辐射方向图参数";
        }
        //环境表格
        List<Map<String, Object>> tables4 = new ArrayList<>();
        //创建环境试验条件表2*(项目数+1)
        List<InsProduct> products = insSample.getInsProduct().stream()
                .filter(insProduct -> !insProduct.getInspectionItem().equals("电路试验"))
                .filter(insProduct -> !insProduct.getInspectionItem().equals("辐射试验"))
                .map(insProduct -> {
                    InsProduct product = new InsProduct();
                    product.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());
                    product.setTell(insProduct.getTell());
                    return product;
                }).distinct().collect(Collectors.toList());
        if (products.size()>0) {
            List<RowRenderData> rows = new ArrayList<>();
            //行数
            for (int i = 0; i < products.size() + 1; i++) {
                RowRenderData rowRenderData = new RowRenderData();
                RowStyle rowStyle = new RowStyle();
                rowStyle.setHeight(40);
                rowRenderData.setRowStyle(rowStyle);
                List<CellRenderData> cells = new ArrayList<>();
                //列数
                for (int j = 0; j < 3; 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("项目");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else if (j == 1) {
                            //第二列
                            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 == 0) {
                            //第一列
                            textRenderData.setText(products.get(i - 1).getInspectionItemSubclass());
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else if (j == 1) {
                            //第二列
                            textRenderData.setText(products.get(i - 1).getTell());
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        } else {
                            //第三列
                            //获取检验项目和结论
                            InsProduct insProduct = products.get(i - 1);
                            String shiyanjieguo = "无异常";
                            if (ObjectUtils.isNotNull(insProduct.getInsResult())) {
                                shiyanjieguo = insProduct.getInsResult() == 0 ? "不合格" : "无异常";
                            }
                            textRenderData.setText("经过" + insProduct.getInspectionItemSubclass() + "之后,样品" + shiyanjieguo + "。");
                            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()) {
                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(4);
            tableStyle.setLeftBorder(borderStyle);
            tableStyle.setTopBorder(borderStyle);
            tableStyle.setRightBorder(borderStyle);
            tableStyle.setBottomBorder(borderStyle);
            tableRenderData.setTableStyle(tableStyle);
            Map<String, Object> table4 = new HashMap<>();
            table4.put("table4", tableRenderData);
            tables4.add(table4);
        }
        /*检验样品信息*/
        //样品照片
        //获取附件图片类型
        List<List<Map<String, Object>>> imageRows = new ArrayList<>();
        List<Map<String, Object>> currentRow = new ArrayList<>();
        List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery()
                .eq(InsOrderFile::getType, 1)
                .eq(InsOrderFile::getInsSampleId,insReportDto1.getSampleId())
                .eq(InsOrderFile::getInsOrderId, orderId));
        if (CollectionUtils.isNotEmpty(insOrderFiles)) {
            for (int i = 0; i < insOrderFiles.size(); i++) {
                Map<String, Object> image = new HashMap<>();
                PictureRenderData pictureRenderData = Pictures.ofLocal(imgUrl + "/" + insOrderFiles.get(i).getFileUrl()).sizeInCm(8, 10).create();
                image.put("url", pictureRenderData);
                currentRow.add(image);
                if ((i + 1) % 2 == 0 || i == insOrderFiles.size() - 1) {
                    imageRows.add(currentRow);
                    currentRow = new ArrayList<>();
                }
            }
            // å¦‚果最后一行不足两个,也添加到结果中
            if (!currentRow.isEmpty()) {
                imageRows.add(currentRow);
            }
        }
        //样品编号参照上述sampleCode
        /*检测人员信息*/
        List<InsUserDto> insUsers = new ArrayList<>();
        //查询每个站点的检验人员与复核人员
        List<InsSampleUser> insSampleUsers = insSampleUserMapper.selectList(Wrappers.<InsSampleUser>lambdaQuery()
                .eq(InsSampleUser::getInsSampleId, insReportDto1.getSampleId()));
        //根据站点进行分类
        Map<String, List<InsSampleUser>> listMap = insSampleUsers.stream().collect(Collectors.groupingBy(InsSampleUser::getSonLaboratory));
        int index2=1;
        for (Map.Entry<String, List<InsSampleUser>> entry : listMap.entrySet()) {
            InsUserDto insUserDto = new InsUserDto();
            insUserDto.setIndex(index2+"");//序号
            insUserDto.setInsProduct(entry.getKey());//项目
            List<InsSampleUser> insUserList = entry.getValue().stream().filter(insSampleUser -> insSampleUser.getState() == 0).collect(Collectors.toList());//检验人
            String insUser = insUserList.stream().map(insSampleUser -> {
                User user = userMapper.selectById(insSampleUser.getUserId());
                return user.getName();
            }).collect(Collectors.joining(","));
            insUserDto.setInsUser(insUser);//测试人员
            List<InsSampleUser> checkUserList = entry.getValue().stream().filter(insSampleUser -> insSampleUser.getState() == 1).collect(Collectors.toList());//复核人
            String checkUser = checkUserList.stream().map(insSampleUser -> {
                User user = userMapper.selectById(insSampleUser.getUserId());
                return user.getName();
            }).collect(Collectors.joining(","));
            insUserDto.setCheckUser(checkUser);//审核人员
            insUsers.add(insUserDto);
            index2++;
        }
        /*测试仪表*/
        Set<String> deviceSet = new HashSet<>();
        //查询所有项目的设备
        List<Integer> productIds = insProducts.stream().map(InsProduct::getId).collect(Collectors.toList());
        //普通
        List<InsProductResult> results = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
                .in(InsProductResult::getInsProductId, productIds));
        if (results.size()>0){
            for (InsProductResult result : results) {
                List<JSONObject> jsonObjects = JSON.parseArray(result.getEquipValue(), JSONObject.class);
                if (ObjectUtils.isNotEmpty(jsonObjects)) {
                    for (JSONObject jsonObject : jsonObjects) {
                        String value = jsonObject.getString("v");
                        if (value != null && !value.isEmpty()) {
                            deviceSet.add(value);
                        }
                    }
                }
            }
        }
        //电路
        List<InsProductResult2> result2s = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
                .in(InsProductResult2::getInsProductId, productIds));
        if (result2s.size()>0){
            for (InsProductResult2 result2 : result2s) {
                String equipValue = result2.getEquipValue();
                if (equipValue != null && !equipValue.isEmpty()) {
                    deviceSet.add(equipValue);
                }
            }
        }
        List<DevListDto> devList = new ArrayList<>();
        if (deviceSet.size() != 0) {
            devList = insOrderMapper.selectDeviceList(deviceSet);
        }
        /*生成报告*/
        ZipSecureFile.setMinInflateRatio(0.0001);
        InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
        Configure configure = Configure.builder()
                .bind("insProductList", new HackLoopTableRenderPolicy())
                .bind("devList", new HackLoopTableRenderPolicy())
                .bind("insUsers", new HackLoopTableRenderPolicy())
                .build();
        List<DevListDto> finalDevList = devList;
        String finalTitle = title3;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("order", insOrder);
                    put("report", insReport);
                    put("departLims", departLims);
                    put("sampleCode", sampleCode);
                    put("environment", finalEnvironment);
                    put("custom", custom);
                    put("sampleSize", "1");
                    put("standardMethod", (standardMethod2.toString().equals("null") ? "" : standardMethod2));
                    put("deviceList", finalDeviceList);
                    put("tables", tables);
                    put("tables2", tables2);
                    put("title3", finalTitle);
                    put("tables3", tables3);
                    put("tables4", tables4);
                    put("sampleList", sampleList);
                    put("twoCode", Pictures.ofLocal(codePath).create());
                    put("models", finalModelStr.replace(",", ""));
                    put("productSize", productSize);
                    put("productSize2", productSize2);
                    put("productSize3", productSize3);
                    put("createTime", now.format(DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日")));
//                    put("createTimeEn", monthNames[now.getMonthValue() - 1] + " " + now.getDayOfMonth() + ", " + now.getYear());
                    put("insTime", insOrder.getInsTime().format(DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日")));
                    put("insTimeEn", monthNames[insOrder.getInsTime().getMonthValue() - 1] + " " + insOrder.getInsTime().getDayOfMonth() + ", " + insOrder.getInsTime().getYear());
                    put("writeUrl", null);
                    put("insUrl", Pictures.ofLocal(imgUrl + "/" + signatureUrl).create());
                    put("images", images);
                    put("examineUrl", null);
                    put("ratifyUrl", null);
                    put("sampleEn", sampleEn);
                    put("orderType", orderType);
                    put("getTime", insOrder.getExamineTime().format(DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日")));
                    put("getTimeEn", monthNames[insOrder.getExamineTime().getMonthValue() - 1] + " " + insOrder.getExamineTime().getDayOfMonth() + ", " + insOrder.getExamineTime().getYear());
                    put("seal1", null);
                    put("seal2", null);
                    put("formTypeCh", formType);
                    put("formTypeEn", insOrder.getFormType());
                    put("sampleName", sampleName);  //产品名称
                    put("models",models);           //型号规格
                    put("custom", custom);          //委托单位
                    put("createTime", now.format(DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日")));   //报告发布日期
                    put("departLims", departLims);   //委托部门
                    put("sampleCode", sampleCode);     //样品编号
                    put("order", insOrder);         //订单主体信息
                    put("getTime", insOrder.getExamineTime().format(DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日")));  //来样日期
                    put("insTime", insOrder.getInsTime().format(DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日")));       //检测日期
                    put("standardMethod", (standardMethod2.toString().equals("null") ? "" : standardMethod2));     //检测依据
                    put("productSize", productSize);        //检测结论
                    put("productSize2", productSize2);          //检测结论
                    put("productSize3", productSize3);          //检测结论
                    put("report", insReport);                   //报告编号
                    put("insProductList", insProductList);      //检验情况一览表
                    put("tables2", tables2);                    //检测结果
                    put("title3", finalTitle);                  //检测结果
                    put("tables3", tables3);                    //检测结果
                    put("tables4", tables4);                    //检测结果
                    put("images", imageRows);                   //样品照片
                    put("insUsers", insUsers);                //检测人员信息
                    put("devList", finalDevList);                //测试仪表
                    put("writeUrl", null);                      //提交人
                    put("examineUrl", null);                    //审核人
                    put("ratifyUrl", null);                     //批准人
                    put("seal1", null);                         //印章
                    put("seal2", null);                         //印章
                }});
        try {
            ZipSecureFile.setMinInflateRatio(0.0001);
@@ -3299,7 +3099,7 @@
            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++) {
            for (int i = 1; i < xwpfTables.size() - (devList == 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++) {
@@ -3371,7 +3171,7 @@
            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 i = 1; i < xwpfTables1.size() - (devList == 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("@")) {
@@ -3396,6 +3196,19 @@
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        //目录更新
        try{
            com.spire.doc.Document document = new com.spire.doc.Document();
            document.loadFromFile(path);
            // æ›´æ–°ç›®å½•
            document.updateTableOfContents();
            // ä¿å­˜æ–‡æ¡£
            document.saveToFile(path, FileFormat.Docx);
            document.close();
        }
        catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
@@ -3459,7 +3272,8 @@
                if (inspectionItemSubclass.contains("互调")) {
                    aa += (angles + 1) * portRow * often;
                }
            } else {
            }
            else {
                if (inspectionItemSubclass.contains("电压驻波比")) {
                    aa += (angles + 1) * portRow;
                }
@@ -3551,7 +3365,7 @@
            int qq = 0;
            int ss = 0;
            //表格的行数
            for (int i = 0; i <= aa; i++) {
            for (int i = 0; i <= aa+1; i++) {
                RowRenderData rowRenderData = new RowRenderData();
                RowStyle rowStyle = new RowStyle();
                rowStyle.setHeight(40);
@@ -3575,7 +3389,57 @@
                    style.setFontFamily("宋体");
                    style.setColor("000000");
                    textRenderData.setStyle(style);
                    if (i == 0) {
                    if (i==0){
                        if (j==0){
                            textRenderData.setText("序号");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        }
                        else if (j == 1) {
                            textRenderData.setText("检验项目");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        }
                        else if (j == 2) {
                            textRenderData.setText("单位");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        }
                        else if (j == 3) {
                            textRenderData.setText("标准与要求");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        }
                        else if (j == bb-1) {
                            textRenderData.setText("检验结论");
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        }
                        else {
                            textRenderData.setText("检验结果∑5476" + i);
                            renderData.add(textRenderData);
                            paragraphRenderData.setContents(renderData);
                            paragraphRenderDataList.add(paragraphRenderData);
                            cellRenderData.setParagraphs(paragraphRenderDataList);
                            cells.add(cellRenderData);
                        }
                    }
                    else if (i == 1) {
                        //第一行
                        textRenderData.setText("频段:" + s + "∑0" + lable);
                        renderData.add(textRenderData);
@@ -3584,6 +3448,7 @@
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else {
                        i=i-1;
                        if (insOrderState.getVersion() == 1) {
                            //非电调版本(简单版)
                            if (inspectionItemSubclass.contains("电压驻波比") && i <= 2 * portRow) {
@@ -3642,7 +3507,8 @@
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == bb - 1) {
                                }
                                else if (j == bb - 1) {
                                    //最后一列
                                    if (i % 2 == 0) {
                                        //结论
@@ -3654,14 +3520,15 @@
                                            textRenderData.setText("不判定");
                                        }
                                    } else {
                                        textRenderData.setText("/");
                                        textRenderData.setText("判定");
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                }
                                else {
                                    //其余列
                                    if (i % 2 == 0) {
                                        //最差值
@@ -4100,7 +3967,7 @@
                                } else if (j == 4) {
                                    //第五列
                                    if ((i - (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg)) % (angles + 1) == 1) {
                                        textRenderData.setText("角度");
                                        textRenderData.setText("频段");
                                    } else {
                                        textRenderData.setText(result2s.get(0).getAngle().split(",")[(i - (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) - 2) % (angles + 1)]);
                                    }
@@ -4112,7 +3979,7 @@
                                } else if (j == bb - 1) {
                                    //最后一列
                                    if ((i - (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg)) % (angles + 1) == 1) {
                                        textRenderData.setText("/");
                                        textRenderData.setText("判定");
                                    } else {
                                        if (products.get(0).getInsResult() == 1) {
                                            textRenderData.setText("合格∑8" + index + ((i - (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) + (angles - 1)) / (angles + 1) - 1));
@@ -4207,7 +4074,7 @@
                                } else if (j == bb - 1) {
                                    //最后一列
                                    if (i % (angles + 1) == 1) {
                                        textRenderData.setText("/");
                                        textRenderData.setText("判定");
                                    } else {
                                        //结论
                                        if (products.get(0).getInsResult() == 1) {
@@ -4312,7 +4179,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - cc) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -4435,7 +4302,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - (dd == 0 ? cc : dd)) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -4558,7 +4425,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - (ee == 0 ? ((dd == 0 ? cc : dd)) : ee)) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -4681,7 +4548,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff)) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -4786,7 +4653,7 @@
                                    //第五列
                                    if ((i - (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg)) % (angles + 1) == 1) {
                                        //角度
                                        textRenderData.setText("角度");
                                        textRenderData.setText("频段");
                                    } else {
                                        //值
                                        textRenderData.setText(result2s.get(0).getAngle().split(",")[(i + (angles - 1)) % (angles + 1)]);
@@ -4799,7 +4666,7 @@
                                } else if (j == bb - 1) {
                                    //最后一列
                                    if ((i - (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg)) % (angles + 1) == 1) {
                                        textRenderData.setText("/");
                                        textRenderData.setText("判定");
                                    } else {
                                        //结论
                                        if (products.get(0).getInsResult() == 1) {
@@ -4896,7 +4763,7 @@
                                } else if (j == bb - 1) {
                                    //最后一列
                                    if ((i - (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh)) % (angles + 1) == 1) {
                                        textRenderData.setText("/");
                                        textRenderData.setText("判定");
                                    } else {
                                        //结论
                                        if (products.get(0).getInsResult() == 1) {
@@ -4989,7 +4856,7 @@
                                } else if (j == bb - 1) {
                                    //最后一列
                                    if ((i - (mm == 0 ? (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh) : mm)) % (angles + 1) == 1) {
                                        textRenderData.setText("/");
                                        textRenderData.setText("判定");
                                    } else {
                                        //结论
                                        if (products.get(0).getInsResult() == 1) {
@@ -5086,7 +4953,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - (nn == 0 ? (mm == 0 ? (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh) : mm) : nn)) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -5193,7 +5060,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - (pp == 0 ? (nn == 0 ? (mm == 0 ? (hh == 0 ? (gg == 0 ? (ff == 0 ? (ee == 0 ? ((dd == 0 ? cc : dd)) : ee) : ff) : gg) : hh) : mm) : nn) : pp)) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -5300,7 +5167,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - rr) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -5406,7 +5273,7 @@
                                    } else if (j == bb - 1) {
                                        //最后一列
                                        if ((i - ss) % (angles + 1) == 1) {
                                            textRenderData.setText("/");
                                            textRenderData.setText("判定");
                                        } else {
                                            //结论
                                            if (products.get(0).getInsResult() == 1) {
@@ -5520,7 +5387,7 @@
        List<RowRenderData> rows = new ArrayList<>();
        Set<String> itemSet = new HashSet<>();
        //表格的行数
        for (int i = 0; i < result2VOS.size(); i++) {
        for (int i = 0; i < result2VOS.size()+1; i++) {
            RowRenderData rowRenderData = new RowRenderData();
            RowStyle rowStyle = new RowStyle();
            rowStyle.setHeight(40);
@@ -5554,7 +5421,8 @@
                    paragraphRenderDataList.add(paragraphRenderData);
                    cellRenderData.setParagraphs(paragraphRenderDataList);
                    cells.add(cellRenderData);
                } else if (j == 1) {
                }
                else if (j == 1) {
                    //第二列(检验项目)
                    textRenderData.setText(result2VOS.get(i).getInspectionItemSubclass() + "∑2" + index);
                    renderData.add(textRenderData);
@@ -5562,7 +5430,8 @@
                    paragraphRenderDataList.add(paragraphRenderData);
                    cellRenderData.setParagraphs(paragraphRenderDataList);
                    cells.add(cellRenderData);
                } else if (j == 2) {
                }
                else if (j == 2) {
                    //第三列(单位)
                    textRenderData.setText(result2VOS.get(i).getUnit() + "∑3" + index);
                    renderData.add(textRenderData);
inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -250,24 +250,7 @@
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="selectDeviceList" resultType="java.util.Map">
        select device_name,
        specification_model,
        management_number,
        date_format(CASE
        WHEN dmr.next_calibration_date is not null THEN dmr.next_calibration_date
        WHEN d.next_calibration_date > CURDATE() THEN d.next_calibration_date
        END,'%Y-%m-%d')
        <!--date_format(next_calibration_date,'%Y-%m-%d')-->
        latest_traceability
        from device d
        left join
        device_metric_record dmr on d.id = dmr.device_id
        where d.management_number in
        <foreach collection="names" index="index" open="(" separator="," close=")" item="val">
            #{val}
        </foreach>
    </select>
    <update id="upInsOrderParameter" parameterType="com.yuanchu.mom.pojo.InsOrder">
        UPDATE ins_order
@@ -463,4 +446,23 @@
                 join user on prepare_user = name
        where ins_order.id = #{id}
    </select>
    <select id="selectDeviceList" resultType="com.yuanchu.mom.dto.DevListDto">
        select ROW_NUMBER() OVER (ORDER BY d.management_number) AS indexs,
        device_name AS name,
        specification_model AS model,
        management_number AS number,
        version,
        date_format(CASE
        WHEN dmr.next_calibration_date is not null THEN dmr.next_calibration_date
        WHEN d.next_calibration_date > CURDATE() THEN d.next_calibration_date
        END,'%Y-%m-%d') AS date
        from device d
        left join
        device_metric_record dmr on d.id = dmr.device_id
        where d.management_number in
        <foreach collection="names" index="index" open="(" separator="," close=")" item="val">
            #{val}
        </foreach>
    </select>
</mapper>
inspect-server/src/main/resources/mapper/StandardMethodListMapper.xml
@@ -96,4 +96,8 @@
    <select id="getStandardMethodId" resultType="java.lang.Integer">
        select id from standard_method where code = #{code}
    </select>
    <select id="getStandardMethodName" resultType="java.lang.String">
        select name from standard_method where code = #{code}
    </select>
</mapper>
inspect-server/src/main/resources/static/report-template.docx
Binary files differ