java导出Excel接口

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

java 复制代码
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常用的注解,注解类的注释

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

多余不展示字段

java 复制代码
@ApiModelProperty(value = "上报通过开始日期")
    @DateTimeFormat("yyyy-MM-dd")
    @ExcelIgnore
    private Date winApprovalStartDate;
相关推荐
宋哥转AI12 小时前
Java搭RAG实战(三):检索问答全链路,从架构分层到SSE流式
java·agent
测试员周周12 小时前
【Appium 系列】第17节-XMind用例转换 — 从思维导图到 YAML
java·服务器·人工智能·单元测试·appium·测试用例·xmind
AI周红伟12 小时前
通用业务智能体OpenClaw+Skills+RAG+Agent构建案例实操
大数据·人工智能·windows·百度·copilot
a588081112 小时前
WarCraft III《魔兽争霸3冰封王座》原版安装包——游戏玩法、配置要求与详细安装教程
windows·游戏·游戏程序
NiceCloud喜云13 小时前
Claude API PDF 文档问答实战:从原生解析到分页引用的完整方案
java·服务器·前端·网络·数据库·人工智能·pdf
彦为君13 小时前
JavaSE-03-集合框架(详细版)
java·开发语言·python
Dicky-_-zhang13 小时前
API接口签名验证实战
java·jvm
java1234_小锋13 小时前
Redis 支持哪些数据类型?请分别说明它们的使用场景
java·数据库·redis
:12113 小时前
java基础---一些没注意的
java·开发语言
计算机安禾13 小时前
【c++面向对象编程】第48篇:Lambda表达式与std::function:OOP中的函数式编程
java·c++·算法