使用poi-tl实现多级表格渲染

word模板
在这里插入图片描述
生成结果
在这里插入图片描述
在这里插入图片描述

生成word表格代码

/**
     * 导出专家评分总结果表
     *
     * @param expertEvaSummaryFile 生成文件
     * @param subpackageInfo       分包信息
     * @param tenderBidEvaHeadVO   评审头信息
     */
    private void expertEvaSummary(File expertEvaSummaryFile, TenderProjectItemSubpackage subpackageInfo, TenderBidEvaHeadVO tenderBidEvaHeadVO) {
        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            ConfigureBuilder builder = Configure.builder();
            builder.useSpringEL(false);
            //封装数据
            Map<String, Object> map = new HashMap<>();
            //渲染文本
            map.put("tenderProject", subpackageInfo.getTenderProject());//项目名称
            map.put("openBiddingTime", DateUtil.formatDateTime(subpackageInfo.getOpenBiddingTime()));//评标时间
            //评标信息ID
            String evaInfoId = tenderBidEvaHeadVO.getEvaInfoId();
            //查询所有环节信息
            List<TenderAttachEvaMethod> evaGroupList = tenderAttachEvaMethodService.lambdaQuery()
                    .eq(TenderAttachEvaMethod::getSubpackageId, subpackageInfo.getObjectID()).orderByAsc(TenderAttachEvaMethod::getOrderBy).list();
            Map<String, List<TenderAttachEvaMethod>> evaGroupMap = evaGroupList.stream().collect(Collectors.groupingBy(TenderAttachEvaMethod::getGroupTypeId));
            evaGroupMap.forEach((key, value) -> {
                if (TenderEvaGroupTypeEnum.REVIEW.getValue().equals(key)) {
                    //评审项
                    List<Map<String, Object>> reviewDynamic = new ArrayList<>();
                    for (TenderAttachEvaMethod evaMethod : value) {
                        Map<String, Object> reviewDynamicMap = getReviewSummaryDynamicMap(evaMethod, evaInfoId);
                        reviewDynamic.add(reviewDynamicMap);
                    }
                    map.put("reviewTable", reviewDynamic);
                } else if (TenderEvaGroupTypeEnum.SCORE.getValue().equals(key)) {
                    //评分项
                    List<Map<String, Object>> scoreDynamic = new ArrayList<>();
                    for (TenderAttachEvaMethod evaMethod : value) {
                        //查询评审任务数据
                        Map<String, Object> scoreDynamicMap = getScoreSummaryDynamicMap(evaMethod, evaInfoId);
                        scoreDynamic.add(scoreDynamicMap);
                    }
                    map.put("scoreTable", scoreDynamic);
                } else if (TenderEvaGroupTypeEnum.REVIEW_SCORE.getValue().equals(key)) {
                    //评审评分项
                    List<Map<String, Object>> reviewScoreDynamic = new ArrayList<>();
                    for (TenderAttachEvaMethod evaMethod : value) {
                        //查询评审任务数据
                        Map<String, Object> reviewScoreDynamicMap = getReviewScoreSummaryDynamicMap(evaMethod, evaInfoId);
                        reviewScoreDynamic.add(reviewScoreDynamicMap);
                    }
                    map.put("reviewScoreTable", reviewScoreDynamic);
                } else if (TenderEvaGroupTypeEnum.PRICE_REVIEW.getValue().equals(key)) {
                    //价格评分项
                    List<Map<String, Object>> priceReviewDynamic = new ArrayList<>();
                    for (TenderAttachEvaMethod evaMethod : value) {
                        //查询评审任务数据
                        Map<String, Object> priceReviewDynamicMap = getPriceReviewSummaryDynamicMap(evaMethod, evaInfoId);
                        priceReviewDynamic.add(priceReviewDynamicMap);
                    }
                    map.put("priceReviewTable", priceReviewDynamic);
                } else if (TenderEvaGroupTypeEnum.PRICE_COMPARISON.getValue().equals(key)) {
                    //价格比较项
                    //价格比较项
                    List<Map<String, Object>> priceComparisonDynamic = new ArrayList<>();
                    for (TenderAttachEvaMethod evaMethod : value) {
                        //查询评审任务数据
                        Map<String, Object> priceComparisonDynamicMap = getPriceComparisonSummaryDynamicMap(evaMethod, evaInfoId);
                        priceComparisonDynamic.add(priceComparisonDynamicMap);
                    }
                    map.put("priceComparisonTable", priceComparisonDynamic);
                }
            });
            inputStream = resourceLoader.getResource("classpath:static/template/评标结果-附件2_专家打分汇总.docx").getInputStream();
            XWPFTemplate template = XWPFTemplate.compile(Objects.requireNonNull(inputStream), builder.build()).render(map);
            outputStream = new FileOutputStream(expertEvaSummaryFile);
            template.write(outputStream);
        } catch (Exception e) {
            log.error("POI文件生成异常:{}", e);
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    log.error("IO异常:{}", e);
                }
            }
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    log.error("IO异常:{}", e);
                }
            }
        }
    }

生成评审类表格

private Map<String, Object> getReviewSummaryDynamicMap(TenderAttachEvaMethod evaMethod, String evaInfoId) {
        Map<String, Object> reviewDynamicMap = new HashMap<>();
        reviewDynamicMap.put("groupName", evaMethod.getGroupName());
        reviewDynamicMap.put("groupDesc", "有" + evaMethod.getVetoCondition().intValue() + "个不符合时否决投标。");
        //查询环节汇总结果
        SummaryEvaGroupResultVO summaryEvaGroupResultVO = tenderBidEvaHeadService.querySummaryEvaGroupResultByGroupId(evaMethod.getObjectID(), evaInfoId);
        TenderAttachEvaMethodVO evaluationGroup = summaryEvaGroupResultVO.getEvaluationGroup();
        List<TenderBidEvaSupplierVO> supplierList = summaryEvaGroupResultVO.getSupplierList();
        List<Map<String, Object>> resultList = summaryEvaGroupResultVO.getResultList();
        Map<Object, Map<String, Object>> resultListMap = resultList.stream().collect(Collectors.toMap(item -> item.get("id"), map -> map, (o1, o2) -> o1));
        List<TenderEvaJudgesVO> evaJudgesVOList = null;
        List<String> headerColList = new ArrayList<>();
        int headerColSize = 0;
        List<RowRenderData> rowList = new ArrayList<>();
        MergeCellRule.MergeCellRuleBuilder builder = MergeCellRule.builder();
        int groupStartRow = 1;
        int groupEndRow = 1;
        //列,开始行,结束行,此处合并第一行,和最后一行
        for (TenderBidEvaSupplierVO tenderBidEvaSupplierVO : supplierList) {
            List<TenderAttachEvaMethodReg> tenderAttachEvaMethodRegList = evaluationGroup.getTenderAttachEvaMethodRegList();
            //查询供应商各评委的打分情况
            EvaGroupRegulationResultVO evaGroupRegulationResultVO = tenderBidEvaHeadService
                    .querySupplierByEvaGroupId(evaMethod.getObjectID(), evaInfoId, tenderBidEvaSupplierVO.getSupplierAccount());
            if (evaJudgesVOList == null) {
                evaJudg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值