Excel导入预览与下载

在这里插入图片描述

💗wei_shuo的个人主页

💫wei_shuo的学习社区

🌐Hello World !


Excel导入预览与下载

preview

  • Controller
 @PostMapping("preview")
    @ApiOperation("上传拒付预警预览")
    public Result<List<ResChargebackWarnPreview>> preview(@RequestParam(name = "file", required = false) MultipartFile file) {
        return Result.succ(chargebackWarnService.analysisUploadFile(file, true).getList());
    }
  • Service
@PostMapping("preview")
@ApiOperation("上传拒付预警预览")
public Result<List<ResChargebackWarnPreview>> preview(@RequestParam(name = "file", required = false) MultipartFile file) {
    // 上传拒付预警预览的API接口
    // 接收一个名为"file"的可选的MultipartFile类型的请求参数
    return Result.succ(chargebackWarnService.analysisUploadFile(file, true).getList());
}

public ResChargebackWarnUpload analysisUploadFile(MultipartFile file, boolean isPreview) {
    // 解析上传的文件并进行拒付预警分析
    // 返回一个ResChargebackWarnUpload对象

    // 创建一个用于拼接错误信息的StringJoiner对象
    StringJoiner joiner = new StringJoiner("<br/>");

    // 创建一个ResChargebackWarnUpload对象
    ResChargebackWarnUpload res = new ResChargebackWarnUpload();

    // 创建一个空的TransactionChargebackWarn列表,用于存储拒付预警数据
    List<TransactionChargebackWarn> chargebackWarns = new ArrayList<>();

    // 创建用于存储预览成功和预览错误数据的列表
    List<ResChargebackWarnPreview> previewSuccess = new ArrayList<>();
    List<ResChargebackWarnPreview> previewError = new ArrayList<>();

    // 创建一个ChargebackWarnFile列表,用于存储解析后的文件数据
    List<ChargebackWarnFile> list;

    try {
        // 使用Lombok的@Cleanup注解自动关闭输入流
        @Cleanup
        InputStream inputStream = file.getInputStream();

        // 获取上传文件的原始文件名,并转换为小写
        String filename = file.getOriginalFilename().toLowerCase();

        // 检查文件名是否包含"拒付"关键字,如果不包含则抛出异常
        if (!(filename.contains("拒付"))) {
            throw new ManageException("请传入正确的 拒付 文件上传模板");
        }

        // 解析上传的拒付预警文件,将其转换为ChargebackWarnFile对象列表
        list = analysisChargebackWarnFile(ChargebackWarnFile.class, inputStream);

        // 遍历ChargebackWarnFile对象列表
        for (ChargebackWarnFile bean : list) {
            ResChargebackWarnPreview preview;

            // 如果当前数据存在错误,则将错误信息添加到joiner中,并创建一个ResChargebackWarnPreview对象添加到previewError列表中
            if (bean.isError()) {
                joiner.add(bean.getIndex() + ": " + bean.getErrorMessage());
                preview = new ResChargebackWarnPreview(bean.getIndex(), bean.getErrorMessage());
                previewError.add(preview);
            } else {
                // 如果当前数据没有错误,则根据数据的不同情况进行处理,并创建一个TransactionChargebackWarn对象添加到chargebackWarns列表中
                // 同时创建一个ResChargebackWarnPreview对象添加到previewSuccess列表中
                // ...
            }
        }

        // 根据isPreview参数判断是否执行导入操作
        if (!isPreview) {
            // 如果不是预览操作,检查是否存在预览错误数据,如果存在则抛出异常
            if (!previewError.isEmpty()) {
                throw new ManageException("该文件内包含错误数据,不可进行导入");
            }

            // 执行导入操作,将chargebackWarns列表中的数据保存到数据库中
            // ...
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    // 设置ResChargebackWarnUpload对象的属性值
    res.setChargebackWarns(chargebackWarns);

    // 根据预览错误数据是否为空,设置ResChargebackWarnUpload对象的其他属性值
    if (!previewError.isEmpty()) {
        res.setList(previewError);
        res.setPreviewTotal(previewError.size());
    } else {
        res.setList(previewSuccess);
        res.setPreviewTotal(previewSuccess.size());
    }

    res.setMessage(joiner.toString());
    return res;
}

public <T extends ChargebackWarnFile> List<ChargebackWarnFile> analysisChargebackWarnFile(Class<T> clazz, InputStream is) {
    // 解析拒付预警文件并转换为ChargebackWarnFile对象列表
    // 返回ChargebackWarnFile对象列表

    // 使用ExcelTools工具类将Excel文件转换为指定类型的对象列表
    List<T> list = ExcelTools.excelToList(clazz, is);

    // 创建一个ChargebackWarnFile列表,用于存储解析后的文件数据
    List<ChargebackWarnFile> files = new ArrayList<>();

    // 遍历ChargebackWarnFile对象列表
    for (int i = 0; i < list.size(); i++) {
        int index = i + 1;
        T bean = list.get(i);

        try {
            // 对当前数据进行各种验证和处理
            // ...

            // 将验证通过的数据封装为ChargebackWarnFile对象,并添加到files列表中
            // ...
        } catch (Exception e) {
            // 如果验证或处理过程中出现异常,则创建一个带有错误信息的ChargebackWarnFile对象,并添加到files列表中
            files.add(new ChargebackWarnFile(index, e.getMessage()));
        }
    }

    return files;
}

download

  • Controller
 @GetMapping("download")
    @ApiOperation("拒付预警列表下载")
    public void download(@Validated ChargebackWarnQuery query) {
        try {
            ExcelTools.download(httpServletResponse, ChargebackWarnDownload.class, chargebackWarnService.listChargebackWarnDownload(query), "ChargebackWarns");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
  • Service
   public List<ChargebackWarnDownload> listChargebackWarnDownload(ChargebackWarnQuery query) {
        List<TransactionChargebackWarn> list = transactionChargebackWarnRepo.list(MSearchTools.createQueryWrapper(TransactionChargebackWarn.class, query));
        return list.stream().map(ChargebackWarnDownload::orderOf).collect(Collectors.toList());
    }

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝


在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

猫头虎分享已解决Bug ‍ || Java Error: Could not find or load main class com.example.Main

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

每日OJ题_算法_递归③力扣206. 反转链表

目录 力扣206. 反转链表 解析代码 力扣206. 反转链表 206. 反转链表 LCR 024. 反转链表 难度 简单 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,…

基于Java (spring-boot)和微信小程序的奶茶点餐小程序

一、项目介绍 基于Java (spring-boot)和微信小程序的奶茶点餐小程序功能&#xff1a;客户端登录、个人中心、点餐、选规格、去结算、取餐、我的信息、管理员登录、管理员首页、用户管理、商品管理、商品编辑、商品种类、订单管理、订单处理、等等等。 适用人群&#xff1a;适合…

MessageQueue --- RabbitMQ

MessageQueue --- RabbitMQ RabbitMQ IntroRabbitMQ 核心概念RabbitMQ 分发类型Dead letter (死信)保证消息的可靠传递 RabbitMQ Intro 2007年发布&#xff0c;是一个在AMQP&#xff08;高级消息队列协议&#xff09;基础上完成的&#xff0c;可复用的企业消息系统&#xff0c;…

Netty Review - 底层零拷贝源码解析

文章目录 Pre概述源码解析入口索引AbstractNioByteChannel.NioByteUnsafe#readallocHandle.allocate(allocator) 小结传统的零拷贝 Pre Netty Review - 直接内存的应用及源码分析 概述 Netty 的零拷贝技术是通过优化数据传输过程中的数据复制操作&#xff0c;以降低系统的开销…

Java 基于 SpringBoot+Vue 的酒店管理系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Java微服务架构的选择:Spring Cloud、Kubernetes还是Kubernetes + Istio?

微服务架构已经成为现代软件开发的趋势&#xff0c;其可以带来高度可伸缩性、松耦合性和团队自治性等优势。 在Java开发领域中&#xff0c;选择适合的微服务架构是非常关键的决策&#xff0c;本文将探讨Spring Cloud、Kubernetes和KubernetesIstio这三个架构选择的优势和劣势。…

抽象的前端

问题背景&#xff1a;vue3&#xff0c;axios 直接导致问题&#xff1a;路由渲染失败 问题报错&#xff1a;Uncaught SyntaxError: The requested module /node_modules/.vite/deps/axios.js?v7bee3286 does not provide an export named post (at LoginIn.vue:16:9) 引入组…

[NSSRound#16 Basic]Web

1.RCE但是没有完全RCE 显示md5强比较&#xff0c;然后md5_3随便传 md5_1M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&md5_2M%C9h%FF%0E%E3%5C%20%95r%D4w…

Spring AOP的实现方式

AOP基本概念 Spring框架的两大核心&#xff1a;IoC和AOP AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程&#xff09; AOP是一种思想&#xff0c;是对某一类事情的集中处理 面向切面编程&#xff1a;切面就是指某一类特定的问题&#xff0c;所以AOP可…

CMake进行C/C++与汇编混合编程

1. 前提 这篇文章记录一下怎么用CMake进行项目管理, 并用C/C和汇编进行混合编程, 为了使用这项技术, 必须在VS的环境中安装好cmake组件 由于大部分人不会使用C/C与汇编进行混合编程的情况。所以这篇文章并不适用于绝大部分人不会对其中具体细节进行过多叙述。只是做一些简单的…

Java的集合框架和泛型

文章目录 集合框架什么是集合框架类和接口总览 集合框架的重要性背后所涉及的数据结构以及算法什么是数据结构容器背后对应的数据结构什么是算法 包装类基本数据类型和对应的包装类装箱和拆箱自动装箱和自动拆箱 泛型什么是泛型引出泛型语法泛型类泛型的上界(没有下界)泛型方法…

知识图谱:py2neo导入周杰伦歌单csv文件

文章目录 py2neo导入csv文件py2neo导入周杰伦歌单csv效果展示 py2neo导入csv文件 之前写的知识图谱指南 知识图谱&#xff1a;py2neo将csv文件导入neo4j 因为没有区分不同实体entity的类型&#xff0c;所以颜色相同&#xff0c;无法相互区分歌手、歌曲还是专辑等等。 py2ne…

Linux下的自动化任务与计划任务:让你的系统更智能

在日常的Linux系统管理中&#xff0c;你是否经常需要定时执行某些任务&#xff0c;或者希望在系统启动时自动运行某些脚本&#xff1f;如果是的话&#xff0c;那么自动化任务和计划任务将是你的得力助手。它们可以帮助你提高系统效率、减少人工干预&#xff0c;并确保任务能够按…

绿色化 数据库 MongoDB 和 mysql 安装

绿色化 数据库 MongoDB 和 mysql 安装 【1.1】 前言 为什么要绿色化 安装呢&#xff1f;因为系统老升级&#xff0c;老重装&#xff01;&#xff01;也方便了解下数据库配置和库在那 绿色软件喜欢一般放在 D盘tools目录里 D:\tools\ 数据库 MongoDB D:\tools\MongoDB 数…

制作怎么自己搭建一个网站

制作怎么自己搭建一个网站 一.领取一个免费域名和SSL证书&#xff0c;和CDN 1.打开网站链接&#xff1a;https://www.rainyun.com/ycpcp_ 首先创建一个CDN&#xff0c;这里以我加速域名“cdntest.biliwind.com 1”为例 这里就要填写 cdntest.biliwind.com 1 &#xff0c;而…

【王道数据结构】【chapter5树与二叉树】【P159t15】

设计一个算法将二叉树的叶结点从左到右的顺序连成一个单链表&#xff0c;表头指针为head。二叉树按二叉链表方式存储&#xff0c;链接时用叶结点的右指针来存放单链表指针。 #include <iostream> #include <stack> #include <queue> typedef struct treenode…

2024-02-16 AIGC-数字人-平台调研-记录

摘要: 2024-02-16 AIGC-数字人-平台调研 需求分析: 数字人-平台调研 南京硅基智能北京风平智能[风平科技]品达集团[杭州品达企服科技(集团)有限公司]花脸数字技术灰豚数字人[温州专帮信息科技有限公司]魔珐科技数字栩生公司官网guiji-ows风平智能 - 领先的AIGC解决方案提供商。…

AI:130-基于深度学习的室内导航与定位

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

Springboot的it职业生涯规划系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; Springboot的it职业生涯规划系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&a…