EasyPoi表头如何合并导出?

news2024/11/17 10:29:21

先看效果图

在这里插入图片描述

实现流程

整个过程可以分为三大步:

  • 设计表头格式
  • 根据表头对应的key填充数据
  • 根据表头和数据导出Excel

实现代码

根据表头和数据导出Excel

  			// 设计表头格式
            List<ExcelExportEntity> callTableHeaderList = getExportRebateOffsetTableHeader();

            // 查询数据
            List<RebateOffsetVO> list = rebateOffsetList(request);

            // 根据表头对应的key填充数据
            List<Map<String, Object>> callRecordList = getExportRebateOffsetCallRecord(list);

            ExportParams exportParams = new ExportParams("title", DownloadTypeEnum.REBATE_OFFSET.getMeaning());
            exportParams.setType(ExcelType.HSSF);
            exportParams.setStyle(ExcelStyleHandler.class);
            // 根据表头和数据导出Excel
            Workbook workbook = ExcelExportUtil.exportExcel(exportParams, callTableHeaderList, callRecordList);

表头格式

/**
     * @author lwh
     * @date 2024/5/22
     * @description 获取本月应冲返利导出的表头
     **/
    private List<ExcelExportEntity> getExportRebateOffsetTableHeader() {
        // 表头设置
        List<ExcelExportEntity> callList = new ArrayList<>();

        // 支付信息
        ExcelExportEntity callPayEntity = new ExcelExportEntity("支付信息", "payInfo");
        List<ExcelExportEntity> payChildrenList = new ArrayList<>();
        payChildrenList.add(new ExcelExportEntity("订单号", "orderNo"));
        payChildrenList.add(new ExcelExportEntity("支付类型", "payType"));
        payChildrenList.add(new ExcelExportEntity("订单总条数", "orderNumber"));
        payChildrenList.add(new ExcelExportEntity("订单总金额", "orderTotalAmount"));
        payChildrenList.add(new ExcelExportEntity("返利抵扣金额", "deductionAmount"));
        payChildrenList.add(new ExcelExportEntity("现金支付金额", "thirdPartyAmount"));
        payChildrenList.add(new ExcelExportEntity("授信支付金额", "creditAmount"));
        callPayEntity.setList(payChildrenList);


        // 扫码入库信息
        ExcelExportEntity callScanInfoEntity = new ExcelExportEntity("扫码入库信息", "scanCodeInfo");
        List<ExcelExportEntity> scanCodeChildrenList = new ArrayList<>();
        scanCodeChildrenList.add(new ExcelExportEntity("扫码入库数", "scanNumber"));
        scanCodeChildrenList.add(new ExcelExportEntity("退货数", "returnNumber"));
        scanCodeChildrenList.add(new ExcelExportEntity("实际入库数(减退货)", "actualScanNumber"));
        callScanInfoEntity.setList(scanCodeChildrenList);


        // 客户退款信息
        ExcelExportEntity callRefundInfoEntity = new ExcelExportEntity("客户退款信息", "refundInfo");
        List<ExcelExportEntity> refundInfoChildrenList = new ArrayList<>();
        refundInfoChildrenList.add(new ExcelExportEntity("退款数", "orderReturnNumber"));
        refundInfoChildrenList.add(new ExcelExportEntity("退款总金额", "orderReturnAmount"));
        refundInfoChildrenList.add(new ExcelExportEntity("退款返利金额", "rebateRefundAmount"));
        refundInfoChildrenList.add(new ExcelExportEntity("退款现金金额", "cpcnRefundAmount"));
        refundInfoChildrenList.add(new ExcelExportEntity("退款授信金额", "creditRefundAmount"));
        callRefundInfoEntity.setList(refundInfoChildrenList);


        // 未入库系统退回信息
        ExcelExportEntity callNoReturnInfoEntity = new ExcelExportEntity("未入库系统退回信息", "noReturnInfo");
        List<ExcelExportEntity> noReturnInfoChildrenList = new ArrayList<>();
        noReturnInfoChildrenList.add(new ExcelExportEntity("未扫码入库数", "needReturnScanNumber"));
        noReturnInfoChildrenList.add(new ExcelExportEntity("未入库退回总金额", "needReturnTotalAmount"));
        noReturnInfoChildrenList.add(new ExcelExportEntity("返利退回金额", "rebateReturn"));
        noReturnInfoChildrenList.add(new ExcelExportEntity("现金退回金额", "cpcnReturn"));
        noReturnInfoChildrenList.add(new ExcelExportEntity("授信退回金额", "creditReturn"));
        callNoReturnInfoEntity.setList(noReturnInfoChildrenList);

        // 应冲返利金额
        ExcelExportEntity callGrantRebateEntity = new ExcelExportEntity("应冲返利金额", "grantRebate");
        callGrantRebateEntity.setMergeVertical(true);

        // 支付信息
        callList.add(callPayEntity);
        // 扫码入库信息
        callList.add(callScanInfoEntity);
        // 客户退款信息
        callList.add(callRefundInfoEntity);
        // 未入库系统退回信息
        callList.add(callNoReturnInfoEntity);
        // 应冲返利金额
        callList.add(callGrantRebateEntity);
        return callList;
    }

根据表头对应的key填充数据

/**
     * @author lwh
     * @date 2024/5/22
     * @description 获取正向应冲返利导出数据
     **/
    private List<Map<String, Object>> getExportRebateOffsetCallRecord(List<RebateOffsetVO> list) {
        List<Map<String, Object>> callRecordList = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            RebateOffsetVO vo = list.get(i);

            Map<String, Object> callRecordMap = new HashMap<>();
            // 支付信息
            List<Map<String, Object>> listA = new ArrayList<>();
            Map<String, Object> valueMapA = new HashMap<>();
            valueMapA.put("orderNo", vo.getOrderNo());
            valueMapA.put("payType", RebateOffsetPayTypeEnum.getDescByCode(vo.getPayType()));
            valueMapA.put("orderNumber", vo.getOrderNumber());
            valueMapA.put("orderTotalAmount", vo.getOrderTotalAmount());
            valueMapA.put("deductionAmount", vo.getDeductionAmount());
            valueMapA.put("thirdPartyAmount", vo.getThirdPartyAmount());
            valueMapA.put("creditAmount", vo.getCreditAmount());
            listA.add(valueMapA);
            callRecordMap.put("payInfo", listA);

            // 扫码入库信息
            List<Map<String, Object>> listB = new ArrayList<>();
            Map<String, Object> valueMapB = new HashMap<>();
            valueMapB.put("scanNumber", vo.getScanNumber());
            valueMapB.put("returnNumber", vo.getReturnNumber());
            valueMapB.put("actualScanNumber", vo.getActualScanNumber());
            listB.add(valueMapB);
            callRecordMap.put("scanCodeInfo", listB);

            // 客户退款信息
            List<Map<String, Object>> listC = new ArrayList<>();
            Map<String, Object> valueMapC = new HashMap<>();
            valueMapC.put("orderReturnNumber", vo.getOrderReturnNumber());
            valueMapC.put("orderReturnAmount", vo.getOrderReturnAmount());
            valueMapC.put("rebateRefundAmount", vo.getRebateRefundAmount());
            valueMapC.put("cpcnRefundAmount", vo.getCpcnRefundAmount());
            valueMapC.put("creditRefundAmount", vo.getCreditRefundAmount());
            listC.add(valueMapC);
            callRecordMap.put("refundInfo", listC);

            // 未入库系统退回信息
            List<Map<String, Object>> listD = new ArrayList<>();
            Map<String, Object> valueMapD = new HashMap<>();
            valueMapD.put("needReturnScanNumber", vo.getNeedReturnScanNumber());
            valueMapD.put("needReturnTotalAmount", vo.getNeedReturnTotalAmount());
            valueMapD.put("rebateReturn", vo.getRebateReturn());
            valueMapD.put("cpcnReturn", vo.getCpcnReturn());
            valueMapD.put("creditReturn", vo.getCreditReturn());
            listD.add(valueMapD);
            callRecordMap.put("noReturnInfo", listD);

            // 应冲返利金额
            callRecordMap.put("grantRebate", vo.getGrantRebate());

            callRecordList.add(callRecordMap);
        }
        return callRecordList;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1687700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springsecurity入门登录授权

①我们需要自定义登陆接口&#xff0c;也就是在controller目录新建LoginController类&#xff0c;在controller方法里面去调用service接口&#xff0c;在service接口实现AuthenticationManager去进行用户的认证&#xff0c;注意&#xff0c;我们定义的controller方法要让Spring…

虚拟机网络设置为桥接模式后未显示网络

本方法为&#xff0c;VMware配置正确&#xff0c;但在尝试其他办法后未能成功解决的人提供一种方法 本机的虚拟机使用NAT模式正常使用 但是使用桥接模式后重启&#xff0c;未发现虚拟机内网络设置,详见下图&#xff1a; 使用 ifconfig 查看网络详情 发现没有ens33接口 查看硬…

AI工具推荐:提升工作效率与生活质量

有哪些好用&#xff0c;且国内可用的AI工具&#xff1f; 副本 在AI大发展的年代&#xff0c;还有人在工作、生活中没有使用过AI吗&#xff1f; 今天为大家推荐几款国内可用、好用的AI工具&#xff0c;不论是自媒体文案写作、打工人汇报PPT、还是论文、公文写作&#xff0c;总…

什么是国产网络变压器Magcom,介绍它的优点和性能参数

国产网络变压器Magcom是一种中国生产的网络设备&#xff0c;其优点和性能参数如下&#xff1a; 优点&#xff1a; 1. 稳定性&#xff1a;Magcom具有稳定的性能&#xff0c;能够确保网络数据传输的稳定性。 2. 可靠性&#xff1a;通过调节信号强度和频率&#xff0c;Magcom能够…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-17讲 定时器按键消抖

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

带你玩转OpenHarmony AI:打造智能语音子系统

简介 AI时代&#xff0c;智者当先&#xff0c;判断一个终端设备是否智能&#xff0c;语音能力是必不可缺的。智能家居、智慧厨房、智能汽车等等&#xff0c;一切衣食住行都在往智能方向发展&#xff0c;那我们该如何在OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&am…

海康监控web插件,跨域问题处理web-control

海康视频跨域问题处理web-control 海康监控视频&#xff0c;跨域处理&#xff0c;web-control修改案例 海康监控视频&#xff0c;跨域处理&#xff0c;web-control修改 海康监控&#xff0c;web-control&#xff0c;跨域播放&#xff0c;嵌套页面实现跨域播放 案例 能到做到…

【intel CPU】三代牙膏的对比

1、PC处理器的选择 制程工艺 传说的“intel7”,感觉就像老婆饼&#xff0c;并不是7nm。 2、12代到13代其实应该归为一代&#xff0c;那就是大核心不行就堆小核心 3、所以智能踢掉有小核的&#xff1b; 3.1、CPU规格 3.2 内存规格 3.3 封装规格 其他都是一样的&#xff1b; …

变量与常量

1.变量 数学中的定义&#xff1a; 变量&#xff1a;可变的数据称为变量 Java中定义&#xff1a; 内存中一块存储区域 该区域的数据可以在同一类型范围内不断变化 变量是程序中最基本的存储单元&#xff0c;包含了变量类型、变量名和存储的值 变量的作用就是在内存中保存…

uniapp微信小程序在ios端返回不显示弹窗的bug解决

这个问题其实是因为返回页面的时候弹的太快了导致的解决办法&#xff1a; 其实就是返回页面的弹窗加个延迟就好啦

新定义RD8T36P48点亮LED--汇编

其实汇编和C语言差不多&#xff0c;简单的东西用汇编挺好&#xff0c;中等及以上复杂度的程序还是C语言更灵活 直接在keil新建好工程&#xff0c;选好芯片型号和下载方式&#xff0c;再创建一个.asm文件并添加到工程&#xff0c; 工程创建完如图 工程配置 代码 ORG 0000HL…

Ubuntu中 petalinux 安装 移植linux --tftp/tftp-hpa服务的方法

Xilinx 文档 PetaLinux 指南&#xff1a;如何创建 PetaLinux 环境 &#xff08;2019.1&#xff09; PetaLinux工具参考指南 PetaLinux安装详解(Xilinx , linux, zynq, zynqMP) petalinux 2020.1安装教程 一、PetaLinux工具和库安装 PetaLinux 工具要求主机系统 /bin/sh 为“b…

【分享】3种方法取消PPT的“限制保护”

PPT如果设置了有密码的“只读方式”&#xff0c;每次打开PPT&#xff0c;都会出现对话框&#xff0c;提示需要输入密码才能修改文件&#xff0c;否则只能以“只读方式”打开。 以“只读方式”打开的PPT就会被限制&#xff0c;无法进行编辑修改等操作。那如果后续不需要“限制保…

搭建LNMP服务器

一、环境准备 Linux 采用 CentOS7 Nginx 采用 Nginx-1.24.0 安装目录/opt/nginx Mysql 采用 Mysql-5.7.23 安装目录/opt/mysql PHP 采用 PHP-7.3.5 安装目录/opt/php 用于测试环境&#xff0c;搭建在虚拟机上&#xff0c;只准备了一台虚拟机&#xff0c;所有服务都搭建在一…

代码随想录算法训练营第16天 |● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数

文章目录 前言104.二叉树的最大深度思路知识点 方法一 递归法方法二 迭代法 559. n叉树的最大深度111.二叉树的最小深度思路方法一 后向遍历递归法方法二 迭代法 222.完全二叉树的节点个数思路方法一 当成普通二叉树来做方法二 利用完全二叉树的特性 总结 前言 所有的题目一刷…

最简单的,在mac笔记本上安装Unix-v6系统,进行“Unix内核源码剖析”

Unix V6 已经是 1975 年的系统了&#xff0c;但是其源代码拢共只有 1w 行左右&#xff0c;并且使用了 C 语言&#xff08;K & R 之前的标准&#xff09;&#xff0c;还是现代操作系统的鼻祖&#xff0c;所以说是初学者最好的研究对象。 安装模拟器 brew install simh …

U-Mail邮件系统取得多项适配认证,全面支持国产化信创环境

随着信息技术的发展&#xff0c;信息化建设越来越深入到社会各个领域&#xff0c;成为驱动经济社会发展的重要力量。在此背景下&#xff0c;我国正加快构建国家信息安全保障体系&#xff0c;实现自主可控&#xff0c;形成安全可靠的信息技术体系。这正是我们所说的“信创”&…

Mac上安装多版本nodejs 并 随意切换node版本

Mac上安装多版本nodejs 并 随意切换node版本 1. 先查看当前版本2. 说明3. 安装 n 组件4. 根据需要安装其他版本的node4.1 查看node历史版本4.2 安装指定版本的node4.2.1 使用n 组件安装多版本4.2.2 n 组件常用命令 4.3 也可以安装node14 1. 先查看当前版本 如下&#xff1a;no…

26【构图】场景透视 —— 一点透视

1 一点透视更能体现纵深 2 图中的 消失点 透视线 视平线的位置 3 一点透视模型 蓝色的是消失点&#xff0c;根据消失点发射出无数的透视线 在PS中可以用简单的方法画出一点透视的透视线&#xff08;通过多边形工具&#xff09;

电脑视频如何压缩变小 mp4视频太大怎么压缩不影响画质

视频格式是指用于存储、编码、解码和播放数字视频内容的特定文件类型和结构。它定义了视频数据的压缩方式、存储布局以及播放参数&#xff0c;确保不同的设备和软件能够识别并正确处理视频文件。视频格式包括两大部分视频编码格式和容器格式。 视频太大的话有时候上传不了&…