java导出Excel接口

news2024/9/22 9:59:01

需求:需要实现一个导出的接口,点导出同时导出5个Excel表格,五种表格的数据筛选不同数据

public String export(MarketReceiveVo query) {
        Date winApprovalStartDate = query.getWinApprovalStartDate();
        Date winApprovalEndDate = query.getWinApprovalEndDate();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String winApprovalStartDateStr = sdf.format(winApprovalStartDate);
        String winApprovalEndDateStr = sdf.format(winApprovalEndDate);

        // 根据日期获取团队详细信息
        List<MarketXxxxListVo> allAchievementExport = marketSysFrameworkService.getAllAchievement(winApprovalStartDate, winApprovalEndDate);//所有的
        List<MarketXxxxListVo> gManagerExportVo = marketSysFrameworkService.getGManager(winApprovalStartDate, winApprovalEndDate);// 副总的数据
        List<MarketXxxxListVo> leaderExports = marketSysFrameworkService.getLeaderExports(winApprovalStartDate, winApprovalEndDate);// 组长的数据
        List<MarketXxxxListVo> TeamMemberExport = marketSysFrameworkService.getTeamMemberExport(winApprovalStartDate, winApprovalEndDate);// 组员的数据
        List<MarketXxxxListVo> marketAchievementExport = marketSysFrameworkService.getDetailed(winApprovalStartDate, winApprovalEndDate); // 分配明细

        // 数据转换
        List<AllAchievementExportVo> exportVos = Optional.ofNullable(allAchievementExport)
                .orElse(new ArrayList<>())
                .stream()
                .map(source -> BeanUtil.convert(source, AllAchievementExportVo.class))
                .collect(Collectors.toList());

        List<GManagerExportVo> exportVosGManager = Optional.ofNullable(gManagerExportVo)
                .orElse(new ArrayList<>())
                .stream()
                .map(source -> BeanUtil.convert(source, GManagerExportVo.class))
                .collect(Collectors.toList()); //副总

        List<AllAchievementExportVo> exportVosGroupLeader = Optional.ofNullable(leaderExports)
                .orElse(new ArrayList<>())
                .stream()
                .map(source -> BeanUtil.convert(source, AllAchievementExportVo.class))
                .collect(Collectors.toList());

        List<AllAchievementExportVo> exportVosStaff = Optional.ofNullable(TeamMemberExport)
                .orElse(new ArrayList<>())
                .stream()
                .map(source -> BeanUtil.convert(source, AllAchievementExportVo.class))
                .collect(Collectors.toList());

        List<MarketAchievementExportVo> exportVosFive = Optional.ofNullable(marketAchievementExport)
                .orElse(new ArrayList<>())
                .stream()
                .map(source -> BeanUtil.convert(source, MarketAchievementExportVo.class))
                .collect(Collectors.toList());

        // 排序
        List<AllAchievementExportVo> sortedAll = sortData(exportVos);
        List<GManagerExportVo> sortedGManager = sortDataGManager(exportVosGManager);
        List<AllAchievementExportVo> sortedGroupLeader = sortData(exportVosGroupLeader);
        List<AllAchievementExportVo> sortedStaff = sortData(exportVosStaff);
        List<MarketAchievementExportVo> sortedDetailed= sortDataDetailed(exportVosFive);

        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
            ExcelWriter writeWorkbook = EasyExcel.write(outputStream).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();

            // 创建5个Sheet
            WriteSheet writeSheetAll = EasyExcel.writerSheet("所有人排名").head(AllAchievementExportVo.class).build();
            writeWorkbook.write(sortedAll, writeSheetAll);

            WriteSheet writeSheetGManager = EasyExcel.writerSheet("营销副总排名").head(GManagerExportVo.class).build();
            writeWorkbook.write(sortedGManager, writeSheetGManager);

            WriteSheet writeSheetAllThree = EasyExcel.writerSheet("组长排名").head(AllAchievementExportVo.class).build();
            writeWorkbook.write(sortedGroupLeader, writeSheetAllThree);

            WriteSheet writeSheetFour = EasyExcel.writerSheet("组员排名").head(AllAchievementExportVo.class).build();
            writeWorkbook.write(sortedStaff, writeSheetFour);

            WriteSheet writeSheetDetailed = EasyExcel.writerSheet("业绩分配明细").head(MarketAchievementExportVo.class).build();
            writeWorkbook.write(sortedDetailed, writeSheetDetailed);

            writeWorkbook.finish();
            try (ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray())) {
                FileInfo fileInfo = whaleClientConfig.getWhalefsClient()
                        .upload(whaleClientConfig.getBucketName(), "tmp/" + "业绩分配" + winApprovalStartDateStr + "-" + winApprovalEndDateStr + ".xlsx", inputStream, true);
                return fileInfo.getUrl();
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error(String.format("业绩分配导出错误, 参数:[%s]", JSONObject.toJSONString(query)));
            log.error(String.format("业绩分配导出错误, 错误信息:[%s]", e.getMessage()));
            throw new BusinessException("导出Excel错误");
        }
    }

要注意导出类的实体Vo,对于一些Excel常用的注解,注解类的注释

@ApiModelProperty(value = "序号")
    @TableId(type = IdType.AUTO)
    @ExcelProperty(value = "序号",index = 0)
    private Integer index;

多余不展示字段

@ApiModelProperty(value = "上报通过开始日期")
    @DateTimeFormat("yyyy-MM-dd")
    @ExcelIgnore
    private Date winApprovalStartDate;

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

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

相关文章

笔记:应用Visual Studio Profiler识别和解决内存泄漏问题

一、目的&#xff1a;应用Visual Studio Profiler识别和解决内存泄漏问题 识别和解决内存泄漏问题是确保应用程序稳定性和性能的关键步骤。 二、实现 以下是如何使用 Visual Studio Profiler 识别和解决内存泄漏问题的详细步骤&#xff1a; 1. 启动内存分析 1. 打开项目&…

从最浅层剖析C语言————第四节(深入了解二维数组存储以及实现二分查找)

目录 1. 前情提要 2. sizeof计算数组元素个数 3. 二维数组的创建及其初始化 3.1 二维数组的概念 3.2 二维数组的创建 3.3 二维数组的初始化 4. 二维数组的使用 4.1 二维数组的下标 4.2 二维数组在内存之中的存储 4.3 C99中的变长数组 1. 前情提要 前面一篇博客中&…

经纬恒润天津工厂荣获2024年第一批天津市数字化车间

在数字化转型的浪潮中&#xff0c;天津市工业与信息化局本月正式公布了2024年第一批数字化车间和智能工厂名单&#xff0c;经纬恒润天津工厂凭借其卓越的创新能力与先进的智能制造技术成功入选&#xff0c;荣膺"天津市数字化车间"称号&#xff0c;标志着经纬恒润在数…

SOMEIP_ETS_081: ClientServiceActivate_Server_reboot

测试目的&#xff1a; 验证设备&#xff08;DUT&#xff09;是否能够检测到其服务器的重启&#xff0c;并通过重新建立通信来适当地做出反应。 描述 本测试用例旨在检查DUT在检测到服务器重启后&#xff0c;是否能够重新建立TCP连接&#xff0c;并重新订阅事件组&#xff0c…

联想凌拓产品生命周期管理系统(PLM)解决方案

PLM&#xff08;Product Lifecycle Management&#xff09;产品生命周期管理系统其内部集合了 CAD、CAE、CAM、PDM 等设计类产品&#xff0c;是主要的研发设计类软件产品。PLM 系统有助于缩短产品开发周期、实时同步产品信息、降低风险和成本、提升产品质量、加强和供应商的协作…

苹果11月推出新款M4 Mac:Mac mini设计焕新 MacBook Pro仅例行更新

据外媒 MacRumors 报道&#xff0c;苹果公司计划在 11 月推出首批 M4 Mac&#xff0c;这一时间表与去年相似&#xff0c;当时苹果公司在同样的时间点中宣布推出搭载 M3 芯片的 MacBook Pro。 ▲ 苹果公司在 2023 年 10 月 31 日推出的 M3 MacBook Pro 同时根据古尔曼爆料称苹果…

023集—— @字符详解——C#学习笔记

1、是取消字符串中的转意符。 比如不加的字符串&#xff0c;"\\a\n" C#会解释成一个\和一个a再加一个换行&#xff0c; 如果加了&#xff0c; "\\a\n“ C#会解释成两个\加一个a加一个\加一个n。 在路径中写单斜杠会报错&#xff08;“\”做转义符用&#xff0…

中锂天源卡车电瓶:绿色能源驱动未来物流

随着我国新能源汽车产业的飞速发展&#xff0c;作为新能源汽车核心部件的锂电池产业也得到了前所未有的关注。在这其中&#xff0c;中锂天源作为一家专业从事锂电池研发、生产、销售的企业&#xff0c;凭借其卓越的科技创新和产品质量&#xff0c;逐渐成为了卡车电瓶领域的一股…

独立站运营中容易陷入的误区

近年来&#xff0c;越来越多的跨境电商卖家选择独立站作为他们品牌的出海模式&#xff0c;但有些卖家花了很多时间精力在建站和投放广告上&#xff0c;却依旧无法获得一个好的效果&#xff0c;究其原因&#xff0c;可能是你在运营独立站的时候搞错了重点&#xff0c;本文整理了…

Kettle发送邮件功能如何配置以实现自动化?

kettle发送邮件如何设置&#xff1f;Kettle配置发送邮件的方法&#xff1f; Kettle发送邮件功能能够帮助用户在数据处理过程中自动发送电子邮件&#xff0c;极大地提高了工作效率。AokSend将详细介绍如何配置Kettle发送邮件功能&#xff0c;以实现自动化操作。 Kettle发送邮件…

PDF文档处理技巧:如何编辑 PDF文档

如果没有合适的工具&#xff0c;PDF 编辑起来会很棘手。虽然有些工具价格昂贵&#xff0c;但一些免费工具也可以完成这项工作。以下是您需要获得和了解的内容。 如果您曾经尝试编辑可移植文档格式文件 (PDF)&#xff0c;那么您几乎肯定会发现它比编辑 Microsoft Word 或 Googl…

STL—stack/queue/priority_queue_/deque

STL—stack和queue 之前我们学了string和vector和list&#xff0c;并且完成了它们的模拟实现&#xff0c;他们都是很重要的容器。 这次要学习的stack和queue不是容器&#xff0c;是——容器适配器 stack和queue 1. stack 1.1 stack的介绍 stack 的文档介绍 翻译: stack是…

AI人数智能统计监测摄像头

随着人工智能技术的不断发展&#xff0c;AI人数智能统计监测摄像头 在各个领域得到了广泛应用。这种摄像头结合了图像识别技术和智能算法&#xff0c;旨在实现对人群数量的准确统计和监测。通过高清晰度的摄像头捕捉到场景中的人群图像&#xff0c;并通过人工智能技术进行快速准…

手机删除的短信怎么恢复?学会这4招,短信恢复不是梦!

手机短信在今天作为我们沟通的重要桥梁&#xff0c;承载着无数珍贵的瞬间与关键信息。然而&#xff0c;不小心误删或者系统的故障&#xff0c;可能会把重要短信删除了。手机删除的短信怎么恢复&#xff1f;您是否还在焦虑又无助地寻找答案&#xff1f; 看这里&#xff01;其实…

电路分析 ---- 反相比例器

1 基本反向比例器 分析过程 根据虚断可知经过运算放大器正负输入端的电流为0&#xff0c;即 i P i N 0 i_{P}i_{N}0 iP​iN​0故有 u P 0 u_{P}0 uP​0&#xff0c;根据虚短可知 u P u N 0 u_{P}u_{N}0 uP​uN​0 i R u I − u N R u I R i_{R}\cfrac{u_{I}-u_{N}}{R}\…

【C语言必学知识点六】自定义类型——内存对齐与位段

内存对齐与位段 导读一、内存对齐1.1 对齐规则1.1.1 内存对齐中的名词1.1.2 内存对齐规则的理解1.1.3 宏offsetof 1.2 内存对齐存在的原因1.3 修改默认对齐数 二、位段2.1 什么是位段2.1.1 个人理解 2.2 位段的内存分配2.2.1 VS中的位段内存分配2.2.2 VS位段分配方式的验证2.2.…

评价决策类——层次分析法+数学建模+实战分析

目录 一、前言 二、历年题型分析 2.1 常用算法归纳 2.1.1 优化类算法 2.1.2 预测类算法 2.1.3 评价决策类 2.1.4 NP-hard类 2.2 评价类模型求解 2.2.1 层次分析法&#xff08;AHP&#xff09; 2.2.2 多指标评价法&#xff08;MCDA&#xff09; 2.2.3 算法区别 三、层…

浅谈人工智能之基于AutoGen Studio+语聚AI API构建智能体技能

浅谈人工智能之基于AutoGen Studio语聚AI API构建智能体技能 使用AutoGen Studio与语聚AI API&#xff1a;高效自动化代码生成与语言处理的融合实践 概述 在快速迭代的软件开发环境中&#xff0c;高效、准确的代码生成和语言处理能力成为了提升开发效率的关键因素。本文档旨…

SuperMap GIS基础产品FAQ集锦(20240902)

一、SuperMap iDesktopX 问题1&#xff1a;请问一下这个重建指数&#xff0c;怎么理解呢&#xff1f; 11.1.1 【解决办法】重建指数是用于设置根节点合并次数&#xff0c;系统会根据数据自动计算一个数值n&#xff0c;即模型根节点将进行n次合并处理。 问题2&#xff1a;11…

Datawhale X 李宏毅苹果书AI夏令营深度学习详解入门Task02

本文了解深度学习详解中的线性模型 本文了解深度学习详解中的线性模型将围绕梯度下降优化、线性模型的局限性、改进模型以及深度学习模型等关键要点展开讨论。 一、梯度下降优化 梯度下降是深度学习中常用的优化算法&#xff0c;它通过不断调整模型的参数&#xff0c;使得损失函…